--- ## NotificationCenter Menu-ready notification list with mark-as-read, delete, and empty state. Renders each notification as a clickable card with timestamp. Feed it from `createNotificationStore`, whose routes are served by the `createNotificationsHandlers` server factory. **Import:** `import { NotificationCenter } from '@urbicon-ui/auth';` ### Examples ```svelte store.markAsRead(id)} onMarkAllAsRead={() => store.markAllAsRead()} /> ``` ### Api | Prop | Type | Required | Default | Description | | --- | --- | :---: | --- | --- | | notifications | `import('../../../server/adapters/types.js').NotificationRecord[]` | yes | | Notification records to display. | | class | `string` | no | | Extra classes on the root element. In the same Tailwind bucket `class` wins over the `slotClasses` entry for the element it lands on. Presets and provider defaults sit below both. | | item | `Snippet<[import('../../../server/adapters/types.js').NotificationRecord]>` | no | | Custom notification item renderer. | | onDelete | `(id: string) => void` | no | | Called when a notification is deleted. | | onMarkAllAsRead | `() => void` | no | | Called when all notifications are marked as read. | | onMarkAsRead | `(id: string) => void` | no | | Called when a single notification is marked as read. | | onNotificationClick | `( notification: import('../../../server/adapters/types.js').NotificationRecord ) => void` | no | | Called when a notification is clicked (e.g. to navigate to a URL). SECURITY: `notification.url` is DB-/server-sourced and untrusted; before passing it to `goto()` / `window.location`, validate it is same-origin or relative (reject `javascript:` and absolute cross-origin URLs). Never navigate to a raw `notification.url`. | | preset | `string` | no | | Apply a named preset registered via ``. Resolves after the provider defaults and before this instance's own `slotClasses`, so a project-wide look lives in one place instead of being repeated at every usage site. | | slotClasses | `Partial>` | no | | Per-slot class overrides. In the same Tailwind bucket `class` wins over the `slotClasses` entry for the element it lands on. Presets and provider defaults sit below both. | | t | `PartialAuthLocale` | no | | Locale overrides, deep-merged over the bundle registered for the active locale — English unless `registerAuthLocale` ran for it. Pass any subset, from a single string to a whole tree. | | unstyled | `boolean` | no | | Strip all default styling. | ### Types ```ts type PartialAuthLocale = DeepPartial ``` ```ts type DeepPartial = T extends object ? { [K in keyof T]?: DeepPartial } : T ``` - `interface AuthLocale` — 8 members, definition omitted (387 lines; full definition: packages/auth/src/lib/i18n/keys.ts) ### Slots (slotClasses keys) `root`, `header`, `list`, `item`, `empty`