import type { NotificationCounts, NotificationLabels, NotificationSourceBinding } from "../core/NotificationSourceProps"; /** Strings the inbox page adds to the shared ones; anything left out stays English. */ export interface NotificationInboxLabels extends NotificationLabels { /** Page heading. */ title: string; /** Muted line under the heading, built from the server counts. */ subtitle: (counts: NotificationCounts) => string; /** Accessible name of the tab list. */ listsLabel: string; /** Decisions and unread mentions. */ needsYouTab: string; /** Everything else. */ activityTab: string; /** Only with `onArchive`. */ archivedTab: string; /** Search field label and placeholder. */ search: string; /** Type filter label. */ typeFilter: string; /** The type filter's first option. */ allTypes: string; /** Unread-only switch. */ unreadOnly: string; /** Phone button and sheet title for the type filter and the unread switch. */ filters: string; /** Header action for the open tab and filters. */ markAllRead: string; /** Header gear. */ settings: string; /** Header button and dialog title for the keyboard shortcuts. */ keyboardShortcuts: string; /** Muted line under the shortcuts dialog title. */ shortcutsHint: string; /** One line per shortcut in the help dialog. */ shortcuts: { next: string; previous: string; show: string; openInApp: string; toggleRead: string; archive: string; select: string; undo: string; search: string; clear: string; help: string; }; /** The bulk bar's count. */ selected: (count: number) => string; /** Bulk bar button that selects every row in view. */ selectAll: string; /** Bulk bar button that drops the selection. */ clearSelection: string; /** Bulk decision button, e.g. "Approve 3". */ bulkDecide: (actionLabel: string, count: number) => string; /** Empty reading pane title. */ nothingSelected: string; /** Empty reading pane hint. */ nothingSelectedHint: string; /** Spoken when Undo has nothing left to undo. */ nothingToUndo: string; /** Spoken after a search or filter change. */ results: (count: number) => string; /** Needs you is empty. */ caughtUpTitle: string; caughtUpBody: string; /** Activity is empty. */ activityEmptyTitle: string; activityEmptyBody: string; /** Archived is empty. */ archivedEmptyTitle: string; archivedEmptyBody: string; /** The list failed to load. */ loadErrorTitle: string; loadErrorBody: string; /** The person's role cannot see notifications. */ noAccessTitle: string; noAccessBody: (appName?: string) => string; /** Accessible name of the list while it loads. */ loading: string; /** Button below the list when `hasMore`. */ loadMore: string; } /** The inbox lists; Archived exists only with `onArchive`. */ export type NotificationInboxTab = "needsYou" | "activity" | "archived"; /** "desktop" is list plus reading pane; "phone" shows one at a time with a Back button. */ export type NotificationInboxVariant = "desktop" | "phone"; /** Full-page inbox: tabs, type filter, search, bulk actions and a reading pane; pass the source props or use a provider. */ export type NotificationInboxProps = NotificationSourceBinding & { /** Defaults to "desktop". */ variant?: NotificationInboxVariant; /** Controlled tab; leave it out to start on Needs you. */ tab?: NotificationInboxTab; /** Called when the person switches tabs. */ onTabChange?: (tab: NotificationInboxTab) => void; /** Controlled reading-pane entry id, e.g. from the URL; null shows nothing. Leave it out and desktop opens the first row. */ selectedId?: string | null; /** Called when the reading pane opens or closes an entry. */ onSelectedChange?: (id: string | null) => void; /** Shows the settings gear in the header. */ onOpenSettings?: () => void; /** Page strings; shared keys override the provider's for this component only. */ labels?: Partial; /** Test id root for the page. */ "data-testid"?: string; };