Components
| Primitive | Wireframe | |
|---|---|---|
| Bell / trigger | VeltNotificationsTool | VeltNotificationsToolWireframe |
| Inbox panel | VeltNotificationsPanel | VeltNotificationsPanelWireframe |
| History panel (inline) | VeltNotificationsHistoryPanel | None |
Config props
Cheapest customization: do this first. OnVeltNotificationsTool / VeltNotificationsPanel:
| Prop | Values | Notes |
|---|---|---|
panelOpenMode | 'popover' · 'sidebar' | popover vs docked panel |
settingsLayout | 'accordion' · 'dropdown' | settings UI |
tabConfig | { forYou?, documents?, all?, people?: { name?, enable? } } | enable/rename/reorder tabs |
settings | boolean | show/hide settings view |
enableSettingsAtOrganizationLevel | boolean | org-scoped settings |
enableCrossOrganization | boolean | string | CrossOrganizationConfig | cross-org feeds (only forYou feed supported; current org excluded) |
considerAllNotifications | boolean | Tool-only: count all, not just unread |
selfNotifications / readNotificationsOnForYouTab | boolean | include self / auto-read on For-you |
pageSize (default 5) / maxDays (Tool-only) | number (>0) | page size / history window |
darkMode / shadowDom / variant | None | theme / shadow-DOM / variant; Tool also has panelShadowDom / panelVariant |
Boolean attributes only emit when explicitlytrue/false;shadowDom/panelShadowDomdefault totrue.pageSize/maxDaysare ignored unless> 0.
CSS: stateful classes
(Override with!important, R9b.) Tool: velt-notifications-tool, active / velt-notification-tool-open (panel open). Tabs: velt-notifications-panel--tab, velt-notifications-panel--tab-selected (active tab). Panel mode: velt-notifications-panel--sidebar-panel, bottom-sheet. Unread: velt-notifications-panel--list-item-unread, velt-notifications-panel--unread-is-default. Settings accordion: velt-notification-panel--settings-accordion-container-expanded / …-open; mute toggle: velt-notification-panel--settings-mute-all-toggle-container-muted.
Wireframes: slot trees + tokens
VeltNotificationsToolWireframe: .Icon · .Label · .UnreadIcon · .UnreadCount. (Root prop variant.)
VeltNotificationsPanelWireframe (abridged: full depth below):
{selectedTab} ('forYou'|'people'|'documents'|'all'), {TABS}, {tabConfig}, {settingsOpen}, {settingsMutedAll}, {notificationsPanelVisible}, {unreadNotificationsForYou} (tool: array → .length for the badge), {notificationsByDate} / {notificationsByUserMap} / {notificationsByDocumentId}. Inside the content list: {notification} (.title, .from.name, .from.photoUrl, .read, .createdAt, .documentName), {isLoadMoreVisible}, {isAllRead}.
Gotchas:{notification.*}only resolves inside the content-list iteration..Titleis a leaf: to change the heading text use the top-level.TitleTextslot (there’s no.Title.Text).
Headless hooks
useNotificationsData(query?)→Notification[] | null(query.type:'all'|'forYou'|'documents').useUnreadNotificationsCount()→{ forYou: number|null, all: number|null }(badges).useNotificationSettings()→{ settings, setSettings, setSettingsInitialConfig }.useNotificationEventCallback(action)(e.g. settings updated);useNotificationUtils()for the imperative element (open/close panel, mark-all-read, mute, tab config, cross-org, …).
Limitations
All list rendering flows through the content-list iteration (variables scoped there). Tool-only props (considerAllNotifications, panelShadowDom, panelVariant, maxDays) aren’t on the panel. Cross-org feeds:'all' is ignored (only forYou).
