forty-cdk 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/accordion/README.md +122 -0
- package/aspect-ratio/README.md +76 -0
- package/avatar/README.md +100 -0
- package/breadcrumbs/README.md +49 -0
- package/breakpoints/README.md +81 -0
- package/button/README.md +49 -0
- package/calendar/README.md +458 -0
- package/carousel/README.md +358 -0
- package/checkbox/README.md +146 -0
- package/combobox/README.md +535 -0
- package/context-menu/README.md +139 -0
- package/date-field/README.md +184 -0
- package/date-picker/README.md +338 -0
- package/dialog/README.md +388 -0
- package/disclosure/README.md +114 -0
- package/drag-drop/README.md +359 -0
- package/drawer/README.md +560 -0
- package/dropdown-menu/README.md +176 -0
- package/fesm2022/forty-cdk-accordion.mjs +348 -0
- package/fesm2022/forty-cdk-accordion.mjs.map +1 -0
- package/fesm2022/forty-cdk-aspect-ratio.mjs +74 -0
- package/fesm2022/forty-cdk-aspect-ratio.mjs.map +1 -0
- package/fesm2022/forty-cdk-avatar.mjs +308 -0
- package/fesm2022/forty-cdk-avatar.mjs.map +1 -0
- package/fesm2022/forty-cdk-breadcrumbs.mjs +125 -0
- package/fesm2022/forty-cdk-breadcrumbs.mjs.map +1 -0
- package/fesm2022/forty-cdk-breakpoints.mjs +117 -0
- package/fesm2022/forty-cdk-breakpoints.mjs.map +1 -0
- package/fesm2022/forty-cdk-button.mjs +134 -0
- package/fesm2022/forty-cdk-button.mjs.map +1 -0
- package/fesm2022/forty-cdk-calendar.mjs +2034 -0
- package/fesm2022/forty-cdk-calendar.mjs.map +1 -0
- package/fesm2022/forty-cdk-carousel.mjs +968 -0
- package/fesm2022/forty-cdk-carousel.mjs.map +1 -0
- package/fesm2022/forty-cdk-checkbox.mjs +226 -0
- package/fesm2022/forty-cdk-checkbox.mjs.map +1 -0
- package/fesm2022/forty-cdk-combobox.mjs +2596 -0
- package/fesm2022/forty-cdk-combobox.mjs.map +1 -0
- package/fesm2022/forty-cdk-context-menu.mjs +413 -0
- package/fesm2022/forty-cdk-context-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-core.mjs +9022 -0
- package/fesm2022/forty-cdk-core.mjs.map +1 -0
- package/fesm2022/forty-cdk-date-field.mjs +744 -0
- package/fesm2022/forty-cdk-date-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-date-picker.mjs +1011 -0
- package/fesm2022/forty-cdk-date-picker.mjs.map +1 -0
- package/fesm2022/forty-cdk-dialog.mjs +707 -0
- package/fesm2022/forty-cdk-dialog.mjs.map +1 -0
- package/fesm2022/forty-cdk-disclosure.mjs +190 -0
- package/fesm2022/forty-cdk-disclosure.mjs.map +1 -0
- package/fesm2022/forty-cdk-drag-drop.mjs +1180 -0
- package/fesm2022/forty-cdk-drag-drop.mjs.map +1 -0
- package/fesm2022/forty-cdk-drawer.mjs +1641 -0
- package/fesm2022/forty-cdk-drawer.mjs.map +1 -0
- package/fesm2022/forty-cdk-dropdown-menu.mjs +350 -0
- package/fesm2022/forty-cdk-dropdown-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-field.mjs +425 -0
- package/fesm2022/forty-cdk-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-fieldset.mjs +164 -0
- package/fesm2022/forty-cdk-fieldset.mjs.map +1 -0
- package/fesm2022/forty-cdk-file-upload.mjs +221 -0
- package/fesm2022/forty-cdk-file-upload.mjs.map +1 -0
- package/fesm2022/forty-cdk-hover-card.mjs +496 -0
- package/fesm2022/forty-cdk-hover-card.mjs.map +1 -0
- package/fesm2022/forty-cdk-input.mjs +274 -0
- package/fesm2022/forty-cdk-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-internationalized-date.mjs +1 -1
- package/fesm2022/forty-cdk-internationalized-date.mjs.map +1 -1
- package/fesm2022/forty-cdk-listbox.mjs +1279 -0
- package/fesm2022/forty-cdk-listbox.mjs.map +1 -0
- package/fesm2022/forty-cdk-menu.mjs +1439 -0
- package/fesm2022/forty-cdk-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-menubar.mjs +787 -0
- package/fesm2022/forty-cdk-menubar.mjs.map +1 -0
- package/fesm2022/forty-cdk-meter.mjs +211 -0
- package/fesm2022/forty-cdk-meter.mjs.map +1 -0
- package/fesm2022/forty-cdk-navigation-menu.mjs +1145 -0
- package/fesm2022/forty-cdk-navigation-menu.mjs.map +1 -0
- package/fesm2022/forty-cdk-number-input.mjs +559 -0
- package/fesm2022/forty-cdk-number-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-otp-input.mjs +527 -0
- package/fesm2022/forty-cdk-otp-input.mjs.map +1 -0
- package/fesm2022/forty-cdk-pagination.mjs +323 -0
- package/fesm2022/forty-cdk-pagination.mjs.map +1 -0
- package/fesm2022/forty-cdk-pane-resizer.mjs +297 -0
- package/fesm2022/forty-cdk-pane-resizer.mjs.map +1 -0
- package/fesm2022/forty-cdk-popover.mjs +698 -0
- package/fesm2022/forty-cdk-popover.mjs.map +1 -0
- package/fesm2022/forty-cdk-progress.mjs +226 -0
- package/fesm2022/forty-cdk-progress.mjs.map +1 -0
- package/fesm2022/forty-cdk-radio-group.mjs +378 -0
- package/fesm2022/forty-cdk-radio-group.mjs.map +1 -0
- package/fesm2022/forty-cdk-scroll-area.mjs +640 -0
- package/fesm2022/forty-cdk-scroll-area.mjs.map +1 -0
- package/fesm2022/forty-cdk-search.mjs +205 -0
- package/fesm2022/forty-cdk-search.mjs.map +1 -0
- package/fesm2022/forty-cdk-select.mjs +1661 -0
- package/fesm2022/forty-cdk-select.mjs.map +1 -0
- package/fesm2022/forty-cdk-separator.mjs +82 -0
- package/fesm2022/forty-cdk-separator.mjs.map +1 -0
- package/fesm2022/forty-cdk-signal-forms.mjs +97 -0
- package/fesm2022/forty-cdk-signal-forms.mjs.map +1 -0
- package/fesm2022/forty-cdk-slider.mjs +803 -0
- package/fesm2022/forty-cdk-slider.mjs.map +1 -0
- package/fesm2022/forty-cdk-stepper.mjs +886 -0
- package/fesm2022/forty-cdk-stepper.mjs.map +1 -0
- package/fesm2022/forty-cdk-switch.mjs +137 -0
- package/fesm2022/forty-cdk-switch.mjs.map +1 -0
- package/fesm2022/forty-cdk-table.mjs +1518 -0
- package/fesm2022/forty-cdk-table.mjs.map +1 -0
- package/fesm2022/forty-cdk-tabs.mjs +400 -0
- package/fesm2022/forty-cdk-tabs.mjs.map +1 -0
- package/fesm2022/forty-cdk-time-field.mjs +593 -0
- package/fesm2022/forty-cdk-time-field.mjs.map +1 -0
- package/fesm2022/forty-cdk-time-picker.mjs +1013 -0
- package/fesm2022/forty-cdk-time-picker.mjs.map +1 -0
- package/fesm2022/forty-cdk-toast.mjs +1153 -0
- package/fesm2022/forty-cdk-toast.mjs.map +1 -0
- package/fesm2022/forty-cdk-toggle.mjs +516 -0
- package/fesm2022/forty-cdk-toggle.mjs.map +1 -0
- package/fesm2022/forty-cdk-toolbar.mjs +374 -0
- package/fesm2022/forty-cdk-toolbar.mjs.map +1 -0
- package/fesm2022/forty-cdk-tooltip.mjs +672 -0
- package/fesm2022/forty-cdk-tooltip.mjs.map +1 -0
- package/fesm2022/forty-cdk-tree.mjs +2007 -0
- package/fesm2022/forty-cdk-tree.mjs.map +1 -0
- package/fesm2022/forty-cdk-virtualization.mjs +1 -1
- package/fesm2022/forty-cdk-virtualization.mjs.map +1 -1
- package/fesm2022/forty-cdk.mjs +0 -43310
- package/fesm2022/forty-cdk.mjs.map +1 -1
- package/field/README.md +97 -0
- package/fieldset/README.md +86 -0
- package/file-upload/README.md +73 -0
- package/hover-card/README.md +171 -0
- package/input/README.md +156 -0
- package/listbox/README.md +424 -0
- package/menu/README.md +181 -0
- package/menubar/README.md +140 -0
- package/meter/README.md +128 -0
- package/navigation-menu/README.md +253 -0
- package/number-input/README.md +171 -0
- package/otp-input/README.md +198 -0
- package/package.json +213 -1
- package/pagination/README.md +61 -0
- package/pane-resizer/README.md +136 -0
- package/popover/README.md +262 -0
- package/progress/README.md +115 -0
- package/radio-group/README.md +129 -0
- package/scroll-area/README.md +184 -0
- package/search/README.md +42 -0
- package/select/README.md +488 -0
- package/separator/README.md +84 -0
- package/signal-forms/README.md +72 -0
- package/slider/README.md +152 -0
- package/stepper/README.md +292 -0
- package/switch/README.md +116 -0
- package/table/README.md +769 -0
- package/tabs/README.md +130 -0
- package/time-field/README.md +157 -0
- package/time-picker/README.md +172 -0
- package/toast/README.md +398 -0
- package/toggle/README.md +224 -0
- package/toolbar/README.md +109 -0
- package/tooltip/README.md +274 -0
- package/tree/README.md +708 -0
- package/types/forty-cdk-accordion.d.ts +242 -0
- package/types/forty-cdk-aspect-ratio.d.ts +59 -0
- package/types/forty-cdk-avatar.d.ts +133 -0
- package/types/forty-cdk-breadcrumbs.d.ts +92 -0
- package/types/forty-cdk-breakpoints.d.ts +141 -0
- package/types/forty-cdk-button.d.ts +80 -0
- package/types/forty-cdk-calendar.d.ts +914 -0
- package/types/forty-cdk-carousel.d.ts +530 -0
- package/types/forty-cdk-checkbox.d.ts +141 -0
- package/types/forty-cdk-combobox.d.ts +1259 -0
- package/types/forty-cdk-context-menu.d.ts +313 -0
- package/types/forty-cdk-core.d.ts +5774 -0
- package/types/forty-cdk-date-field.d.ts +307 -0
- package/types/forty-cdk-date-picker.d.ts +622 -0
- package/types/forty-cdk-dialog.d.ts +546 -0
- package/types/forty-cdk-disclosure.d.ts +127 -0
- package/types/forty-cdk-drag-drop.d.ts +456 -0
- package/types/forty-cdk-drawer.d.ts +871 -0
- package/types/forty-cdk-dropdown-menu.d.ts +242 -0
- package/types/forty-cdk-field.d.ts +236 -0
- package/types/forty-cdk-fieldset.d.ts +119 -0
- package/types/forty-cdk-file-upload.d.ts +124 -0
- package/types/forty-cdk-hover-card.d.ts +320 -0
- package/types/forty-cdk-input.d.ts +169 -0
- package/types/forty-cdk-internationalized-date.d.ts +1 -1
- package/types/forty-cdk-listbox.d.ts +513 -0
- package/types/forty-cdk-menu.d.ts +629 -0
- package/types/forty-cdk-menubar.d.ts +451 -0
- package/types/forty-cdk-meter.d.ts +122 -0
- package/types/forty-cdk-navigation-menu.d.ts +514 -0
- package/types/forty-cdk-number-input.d.ts +319 -0
- package/types/forty-cdk-otp-input.d.ts +248 -0
- package/types/forty-cdk-pagination.d.ts +214 -0
- package/types/forty-cdk-pane-resizer.d.ts +145 -0
- package/types/forty-cdk-popover.d.ts +509 -0
- package/types/forty-cdk-progress.d.ts +143 -0
- package/types/forty-cdk-radio-group.d.ts +222 -0
- package/types/forty-cdk-scroll-area.d.ts +258 -0
- package/types/forty-cdk-search.d.ts +142 -0
- package/types/forty-cdk-select.d.ts +899 -0
- package/types/forty-cdk-separator.d.ts +59 -0
- package/types/forty-cdk-signal-forms.d.ts +58 -0
- package/types/forty-cdk-slider.d.ts +379 -0
- package/types/forty-cdk-stepper.d.ts +650 -0
- package/types/forty-cdk-switch.d.ts +87 -0
- package/types/forty-cdk-table.d.ts +723 -0
- package/types/forty-cdk-tabs.d.ts +235 -0
- package/types/forty-cdk-time-field.d.ts +307 -0
- package/types/forty-cdk-time-picker.d.ts +578 -0
- package/types/forty-cdk-toast.d.ts +598 -0
- package/types/forty-cdk-toggle.d.ts +310 -0
- package/types/forty-cdk-toolbar.d.ts +217 -0
- package/types/forty-cdk-tooltip.d.ts +436 -0
- package/types/forty-cdk-tree.d.ts +688 -0
- package/types/forty-cdk.d.ts +1 -19743
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"forty-cdk-toast.mjs","sources":["../../../projects/forty-cdk/toast/src/toast-context.ts","../../../projects/forty-cdk/toast/src/toast.ts","../../../projects/forty-cdk/toast/src/toast-defaults.ts","../../../projects/forty-cdk/toast/src/toast-ref.ts","../../../projects/forty-cdk/toast/src/toast-manager.ts","../../../projects/forty-cdk/toast/src/toast-action.ts","../../../projects/forty-cdk/toast/src/toast-close.ts","../../../projects/forty-cdk/toast/src/toast-description.ts","../../../projects/forty-cdk/toast/src/toast-outlet.ts","../../../projects/forty-cdk/toast/src/toast-title.ts","../../../projects/forty-cdk/toast/src/toast-viewport.ts","../../../projects/forty-cdk/toast/src/forty-cdk-toast.ts"],"sourcesContent":["import { inject, InjectionToken, type Signal, type TemplateRef } from '@angular/core';\n\nimport { type SwipeDirection } from 'forty-cdk/core';\n\nexport type ForToastVariant = 'info' | 'success' | 'warning' | 'error';\n\n/**\n * Allowed swipe directions on a toast — accepts a single direction or\n * an array of directions (multi-axis dismissal). `null` / empty array\n * disables swipe.\n */\nexport type ForToastSwipeDirection = SwipeDirection | readonly SwipeDirection[] | null;\n\nexport type ForToastCloseReason =\n | 'auto'\n | 'manual'\n | 'action'\n | 'escape'\n | 'programmatic'\n | 'swipe';\n\n/**\n * Region a toast belongs to. Toasts route to the `<for-toast-viewport>` whose\n * `[region]` matches; an unspecified region falls through to this default, so\n * the common single-viewport setup needs no `region` anywhere.\n */\nexport const DEFAULT_TOAST_REGION = 'default';\n\n/**\n * Configuration for a programmatic toast. Pass to `ForToastManager.show()`.\n *\n * The default rendered shape is `title` + optional `description` + optional\n * `action` button + optional `close` button, wired via `[forToastTitle]`,\n * `[forToastDescription]`, `[forToastAction]`, `[forToastClose]`. For custom\n * rendering, pass `template` with a `TemplateRef<ForToastTemplateContext>` —\n * the same helper directives keep working inside it (the viewport renders the\n * template with the `[forToast]` injection context in scope). Pass `class` /\n * `classList` to apply consumer CSS classes onto the rendered toast root.\n */\nexport interface ForToastConfig<D = unknown> {\n /** Stable id for dedupe / `update()` / external dismissal. Auto-generated when omitted. */\n id?: string;\n /**\n * Routes the toast to the `<for-toast-viewport>` whose `[region]` matches.\n * Omit it (or pass {@link DEFAULT_TOAST_REGION}) for the common\n * single-viewport setup. Use distinct regions to drive independent viewports\n * — e.g. a top-right region for system notifications and a bottom-center one\n * for action confirmations.\n */\n region?: string;\n title?: string;\n description?: string;\n /**\n * Affects `role` and `aria-live`:\n * - `'info'` | `'success'` | `'warning'` (default `'info'`) → `role=\"status\"` + `aria-live=\"polite\"`.\n * - `'error'` → `role=\"alert\"` + `aria-live=\"assertive\"`.\n */\n variant?: ForToastVariant;\n /**\n * Auto-dismiss timer in milliseconds. Default `5000`. `0` keeps the toast\n * sticky (no auto-dismiss; only manual / action / escape close).\n */\n duration?: number;\n /** Action button. The button auto-closes the toast after invoking `onClick`. */\n action?: { label: string; onClick: () => void };\n /** Render an explicit close button. Default `true`. */\n closable?: boolean;\n /**\n * Direction(s) the user can swipe to dismiss the toast. Pass a single\n * direction (`'right'`) or an array (`['right', 'down']`). When unset,\n * the value falls through to the viewport-level `[swipeDirection]`\n * (or stays disabled if that is also unset).\n */\n swipeDirection?: ForToastSwipeDirection;\n /**\n * Pixels of pointer travel along the active swipe direction needed to\n * trigger a dismissal. Falls back to the viewport-level\n * `[swipeThreshold]` (or `50` if neither is set).\n */\n swipeThreshold?: number;\n /**\n * Consumer CSS class(es) applied to the rendered toast root (the\n * `[forToast]` element). Pass a single class (`'toast--compact'`) or a\n * space-separated string (`'toast toast--compact'`). Merged with the\n * directive's own host attributes — it never clobbers `data-state` /\n * `data-variant` / the swipe hooks.\n *\n * Use this to carry design-system classes onto programmatic toasts so you\n * are not forced to style globally by the `[forToast]` attribute selector.\n * For multiple classes as an array, prefer {@link classList}.\n */\n class?: string;\n /**\n * Consumer CSS class(es) applied to the rendered toast root, as an array\n * (`['toast', 'toast--compact']`) or a space-separated string. Merged with\n * {@link class} and with the directive's own host attributes.\n */\n classList?: string | readonly string[];\n /**\n * CSS class applied via `animate.enter` to the rendered toast root, so it\n * plays an enter animation on mount. Optional and symmetric with\n * {@link animateLeave}: a plain CSS `@keyframes` / `animation` declared on\n * `[forToast]` already plays on mount without this, so this is only needed\n * for class-applied entrances. When unset, falls through to the\n * viewport-level `[animateEnter]`.\n */\n animateEnter?: string;\n /**\n * CSS class applied via `animate.leave` to the rendered toast root, so it\n * plays an exit animation before the toast leaves the DOM on dismiss. When\n * unset, falls through to the viewport-level `[animateLeave]`.\n *\n * This is the only way to express a toast exit animation on the programmatic\n * path: the viewport renders the toast inside its own `@for`, and a pure-CSS\n * exit cannot defer the unmount — Angular needs `animate.leave` on the node to\n * keep it mounted until the animation settles. Leaving it unset keeps the\n * existing synchronous unmount on dismiss.\n */\n animateLeave?: string;\n /** Arbitrary payload passed to `template` context as `data`. */\n data?: D;\n /** Override the default rendering with a `TemplateRef`. */\n template?: TemplateRef<ForToastTemplateContext<D>>;\n}\n\nexport interface ForToastTemplateContext<D = unknown> {\n /** The toast handle for `dismiss()` / state. */\n $implicit: ForToastInstance<D>;\n data: D | undefined;\n}\n\n/**\n * Read-only view of a programmatic toast as managed by `ForToastManager`.\n * The viewport iterates over a `Signal<readonly ForToastInstance[]>`.\n */\nexport interface ForToastInstance<D = unknown> {\n readonly id: string;\n readonly config: ForToastConfig<D>;\n /** Dismiss this toast. Idempotent. */\n dismiss(reason?: ForToastCloseReason): void;\n}\n\n/**\n * Handle a `[forToastAction]` registers with its parent `[forToast]` so the\n * toast can compose a screen-reader announcement that includes the action's\n * `altText` (per WCAG 2.2.1, when the toast is time-limited the announcement\n * must tell the user how to recover the action even after it disappears).\n *\n * `altText` is a signal that returns `''` when the consumer hasn't set\n * `[altText]` on the action — in which case the action is treated as\n * voice-less for announcement purposes.\n */\nexport interface ForToastActionHandle {\n readonly altText: Signal<string>;\n}\n\n/**\n * Reactive text source a `[forToastTitle]` / `[forToastDescription]` registers\n * with its parent `[forToast]` so the announcement is composed from a tracked\n * signal rather than a one-shot DOM read. The signal re-emits when the rendered\n * text changes (e.g. through `ref.update()`), which is what drives the toast to\n * re-announce.\n */\nexport interface ForToastTextHandle {\n /** Generated id host-bound for `aria-labelledby` / `aria-describedby`. */\n readonly id: string;\n /** Current rendered text content of the piece, reactive across re-renders. */\n readonly text: Signal<string>;\n}\n\n/**\n * Coordination contract owned by `ForToast`. Title / description register\n * generated ids so the toast can wire `aria-labelledby` / `aria-describedby`\n * reactively. Action and close buttons request close via `requestClose`.\n */\nexport interface ForToastContext {\n readonly variant: Signal<ForToastVariant>;\n readonly closable: Signal<boolean>;\n readonly paused: Signal<boolean>;\n readonly labelledBy: Signal<string | null>;\n readonly describedBy: Signal<string | null>;\n\n registerLabel(handle: ForToastTextHandle): void;\n unregisterLabel(handle: ForToastTextHandle): void;\n registerDescription(handle: ForToastTextHandle): void;\n unregisterDescription(handle: ForToastTextHandle): void;\n\n /**\n * Register an action so the toast can include its `altText` in the\n * synthesized announcement. Actions without `altText` are still allowed\n * to register — they're skipped during composition.\n */\n registerAction(handle: ForToastActionHandle): void;\n unregisterAction(handle: ForToastActionHandle): void;\n\n /** Request close. Always honored — the directive emits `(dismiss)` and the consumer unmounts. */\n requestClose(reason: ForToastCloseReason): void;\n}\n\nexport const FOR_TOAST_CONTEXT = new InjectionToken<ForToastContext>('FOR_TOAST_CONTEXT');\n\nexport function injectToastContext(piece: string): ForToastContext {\n const ctx = inject(FOR_TOAST_CONTEXT, { optional: true });\n if (!ctx) {\n throw new Error(`[forty-cdk/toast] ${piece} must be used inside a [forToast] element.`);\n }\n return ctx;\n}\n","import {\n booleanAttribute,\n computed,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n numberAttribute,\n output,\n type Signal,\n signal,\n untracked,\n} from '@angular/core';\n\nimport {\n LiveAnnouncer,\n injectPauseController,\n type PauseController,\n attachSwipeDismiss,\n type SwipeDirection,\n type SwipeEventDetail,\n} from 'forty-cdk/core';\nimport {\n FOR_TOAST_CONTEXT,\n type ForToastActionHandle,\n type ForToastCloseReason,\n type ForToastContext,\n type ForToastSwipeDirection,\n type ForToastTextHandle,\n type ForToastVariant,\n} from './toast-context';\n\ntype SwipeState = 'start' | 'move' | 'cancel' | 'end';\n\n/**\n * One toast notification. Apply on a `<div>` (or `<output>`, `<section>`)\n * — the directive sets `role=\"status\"` (`'info'` / `'success'` / `'warning'`)\n * or `role=\"alert\"` (`'error'`), `aria-live`, and the timer / pause\n * machinery.\n *\n * The directive does **not** control its own visibility. The consumer\n * mounts it (typically through `<for-toast-viewport>` for programmatic\n * toasts, or directly with `@if` for declarative ones) and unmounts it\n * when `(dismiss)` fires. Pair the unmount with `animate.leave=\"…\"` for\n * exit animations.\n *\n * Behavior:\n * - Auto-dismisses after `duration` ms (default 5000). `0` is sticky.\n * - Hovering or focusing the toast pauses the timer; leaving / blurring\n * resumes with the remaining time.\n * - Escape (while focus is inside) closes the toast.\n * - When `[swipeDirection]` is set, the user can drag past\n * `[swipeThreshold]` (default 50 px) to dismiss. While the gesture is\n * live the host reflects `data-swipe=\"start\" | \"move\" | \"cancel\" | \"end\"`,\n * `data-swipe-direction`, and the CSS variables\n * `--for-toast-swipe-movement-x` / `--for-toast-swipe-movement-y`.\n * - The host carries `data-state=\"open\"` while alive (no `closed` state —\n * the consumer unmounts on close).\n */\n@Directive({\n selector: '[forToast]',\n exportAs: 'forToast',\n host: {\n '[attr.role]': 'computedRole()',\n '[attr.aria-live]': 'ariaLive()',\n 'aria-atomic': 'true',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[attr.aria-describedby]': 'describedBy()',\n tabindex: '0',\n '[attr.data-state]': '\"open\"',\n '[attr.data-variant]': 'variant()',\n '[attr.data-paused]': 'paused() ? \"\" : null',\n '[attr.data-swipe]': 'swipeState()',\n '[attr.data-swipe-direction]': 'swipeActiveDirection()',\n '[style.--for-toast-swipe-movement-x.px]': 'swipeMovementX()',\n '[style.--for-toast-swipe-movement-y.px]': 'swipeMovementY()',\n '(pointerdown)': 'onPointerDown()',\n '(pointerenter)': 'onPause(\"hover\")',\n '(pointerleave)': 'onResume(\"hover\")',\n '(focusin)': 'onPause(\"focus\")',\n '(focusout)': 'onMaybeResumeFocus($event)',\n '(keydown)': 'onKeyDown($event)',\n },\n providers: [{ provide: FOR_TOAST_CONTEXT, useExisting: ForToast }],\n})\nexport class ForToast implements ForToastContext {\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #destroyRef = inject(DestroyRef);\n readonly #announcer = inject(LiveAnnouncer);\n\n readonly variant = input<ForToastVariant>('info');\n\n /** Auto-dismiss timer in ms. `0` keeps the toast sticky. */\n readonly duration = input(5000, { transform: numberAttribute });\n\n /**\n * Whether the user can dismiss the toast through an ambient gesture —\n * Escape, the close button, the auto-dismiss timer, and swipe. Defaults to\n * `true`.\n *\n * Set `false` for a sticky / forced-action toast: every ambient gesture is\n * suppressed, no auto-dismiss timer is scheduled, and a `[forToastClose]`\n * button (if present) becomes inert. The **action button stays live and is\n * the sanctioned dismissal path** — `[forToastAction]` still emits `(dismiss)`\n * with reason `'action'` so a forced-action toast (e.g. \"Update available —\n * Reload\") can be dismissed by the only control the user is meant to use.\n * Programmatic close via `ForToastRef.dismiss()` is also always honored.\n */\n readonly closable = input(true, { transform: booleanAttribute });\n\n /**\n * Direction(s) the user can swipe to dismiss the toast. Pass a\n * single direction (`'right'`) or an array of directions\n * (`['right', 'down']`). `null` (default) disables swipe.\n *\n * The swipe gesture uses pointer events, so it works for both touch\n * and mouse drags. While the user is swiping, the host reflects\n * `data-swipe=\"start\" | \"move\" | \"cancel\" | \"end\"` and\n * `data-swipe-direction` plus the CSS custom properties\n * `--for-toast-swipe-movement-x` / `--for-toast-swipe-movement-y` so the\n * consumer can drive a transform-based animation entirely from CSS.\n */\n readonly swipeDirection = input<ForToastSwipeDirection>(null);\n\n /**\n * Pixels of pointer travel along the active swipe direction needed\n * to commit a dismissal. Defaults to `50`.\n */\n readonly swipeThreshold = input(50, { transform: numberAttribute });\n\n /** Emitted when the toast wants to be unmounted. The consumer reacts by removing it from the rendered list. */\n readonly dismiss = output<ForToastCloseReason>();\n\n /** Fired once on the move that arms the swipe. */\n readonly swipeStart = output<SwipeEventDetail>();\n /** Fired on every pointer move while the swipe is active. */\n readonly swipeMove = output<SwipeEventDetail>();\n /** Fired on pointer-up after the threshold is crossed (immediately followed by `(dismiss)`). */\n readonly swipeEnd = output<SwipeEventDetail>();\n /** Fired on pointer-up before the threshold, or on `pointercancel`. */\n readonly swipeCancel = output<SwipeEventDetail>();\n\n readonly #pause: PauseController<'hover' | 'focus' | 'visibility'>;\n readonly paused: Signal<boolean>;\n\n readonly #swipeState = signal<SwipeState | null>(null);\n readonly #swipeActiveDirection = signal<SwipeDirection | null>(null);\n readonly #swipeMovementX = signal(0);\n readonly #swipeMovementY = signal(0);\n\n protected readonly swipeState = this.#swipeState.asReadonly();\n protected readonly swipeActiveDirection = this.#swipeActiveDirection.asReadonly();\n protected readonly swipeMovementX = this.#swipeMovementX.asReadonly();\n protected readonly swipeMovementY = this.#swipeMovementY.asReadonly();\n\n readonly #normalizedSwipeDirections = computed<readonly SwipeDirection[]>(() => {\n // A non-closable toast forbids user-initiated dismissal of any kind —\n // swipe is exactly that, so disable it regardless of the input.\n if (!this.closable()) {\n return [];\n }\n const raw = this.swipeDirection();\n if (raw === null || raw === undefined) {\n return [];\n }\n if (typeof raw === 'string') {\n return [raw];\n }\n return raw;\n });\n\n readonly #labels = signal<readonly ForToastTextHandle[]>([]);\n readonly #descriptions = signal<readonly ForToastTextHandle[]>([]);\n readonly #actions = signal<readonly ForToastActionHandle[]>([]);\n readonly labelledBy = computed(\n () =>\n this.#labels()\n .map((h) => h.id)\n .join(' ') || null,\n );\n readonly describedBy = computed(\n () =>\n this.#descriptions()\n .map((h) => h.id)\n .join(' ') || null,\n );\n\n /**\n * `true` when at least one registered `[forToastAction]` carries a\n * non-empty `altText`. In that mode the host's `aria-live` is silenced\n * and the announcement is composed and routed through `LiveAnnouncer`.\n */\n readonly #hasActionAltText = computed(() =>\n this.#actions().some((a) => a.altText().trim() !== ''),\n );\n\n /**\n * The synthesized announcement, composed reactively from the registered\n * title / description text and action `altText` signals (never re-read from\n * the DOM). Recomputes when any of those change — late-bound `altText` or a\n * `ref.update()` text change flows through here, so the announcement effect\n * re-fires on the edge instead of only once on first render.\n */\n readonly #announcement = computed(() => {\n const titles = this.#labels()\n .map((h) => h.text().trim())\n .filter(Boolean);\n const descriptions = this.#descriptions()\n .map((h) => h.text().trim())\n .filter(Boolean);\n const altTexts = this.#actions()\n .map((a) => a.altText().trim())\n .filter(Boolean);\n return [...titles, ...descriptions, ...altTexts].join('. ');\n });\n\n protected readonly computedRole = computed(() =>\n this.variant() === 'error' ? 'alert' : 'status',\n );\n protected readonly ariaLive = computed(() => {\n if (this.#hasActionAltText()) {\n return 'off';\n }\n return this.variant() === 'error' ? 'assertive' : 'polite';\n });\n\n // Timer state — kept off the reactive graph because pause/resume are\n // imperative and we don't want to trip change detection on every tick.\n #timerHandle: ReturnType<typeof setTimeout> | null = null;\n #timerEndsAt = 0;\n #remainingMs = 0;\n // True once the auto-dismiss countdown has begun, so `#remainingMs` holds a\n // meaningful value. While paused this guards the duration effect from\n // clobbering a captured remaining time on an unrelated re-run (e.g. an\n // `update()` that re-renders the toast); see `#onPausedChange`.\n #timerStarted = false;\n\n constructor() {\n // Multi-reason pause: pointer hover, focus, and page visibility each\n // pause/resume independently. The remaining-ms capture/reschedule is\n // layered on the `paused` transition via `onChange`, keeping the timer off\n // the reactive graph (pause/resume are imperative, so a tick must not trip\n // change detection). The shared controller wires the page-visibility source\n // and tears its subscription down with this injector.\n this.#pause = injectPauseController<'hover' | 'focus' | 'visibility'>({\n onChange: (paused) => this.#onPausedChange(paused),\n });\n this.paused = this.#pause.paused;\n\n // Start (or reset) the auto-dismiss timer whenever `duration` /\n // `closable` changes. Pause / resume are handled imperatively in\n // `#onPausedChange`, so we read `paused()` via `untracked()` here —\n // otherwise the effect would re-run on hover and clobber the in-flight\n // remaining-ms capture. While paused with a countdown already in flight we\n // bail out entirely so the captured remaining time survives a re-render;\n // resume reschedules with that captured value rather than the full\n // duration.\n effect(() => {\n const ms = this.duration();\n const closable = this.closable();\n const paused = untracked(this.paused);\n if (paused && this.#timerStarted) {\n return;\n }\n this.#cancelTimer();\n this.#remainingMs = ms;\n this.#timerStarted = ms > 0 && closable;\n if (this.#timerStarted && !paused) {\n this.#scheduleTimer();\n }\n });\n this.#destroyRef.onDestroy(() => this.#cancelTimer());\n\n // Route the synthesized announcement through LiveAnnouncer reactively, so\n // a late-bound `altText` and `ref.update()` text changes are announced —\n // not only the value present on first render. Only active when at least\n // one action carries `altText` (the host's silenced `aria-live` path);\n // otherwise the host's own `aria-live` reads the toast and a manual\n // announce would duplicate it. A guard against re-announcing identical\n // text keeps an unrelated re-render from re-reading the same message.\n // Pure side effect (an imperative `LiveAnnouncer` write), so `effect()` is\n // the correct primitive here.\n let lastAnnounced: string | null = null;\n effect(() => {\n if (!this.#hasActionAltText()) {\n lastAnnounced = null;\n return;\n }\n const message = this.#announcement();\n if (!message || message === lastAnnounced) {\n return;\n }\n lastAnnounced = message;\n this.#announcer.announce(message, this.variant() === 'error' ? 'assertive' : 'polite');\n });\n\n const detachSwipe = attachSwipeDismiss({\n element: this.#host.nativeElement,\n getDirections: () => this.#normalizedSwipeDirections(),\n getThreshold: () => this.swipeThreshold(),\n onSwipeStart: (detail) => {\n this.#swipeActiveDirection.set(detail.direction);\n this.#swipeState.set('start');\n this.#swipeMovementX.set(detail.delta.x);\n this.#swipeMovementY.set(detail.delta.y);\n this.swipeStart.emit(detail);\n },\n onSwipeMove: (detail) => {\n this.#swipeState.set('move');\n this.#swipeMovementX.set(detail.delta.x);\n this.#swipeMovementY.set(detail.delta.y);\n this.swipeMove.emit(detail);\n },\n onSwipeCancel: (detail) => {\n this.#swipeState.set('cancel');\n // Movement vars stay at the released delta so the consumer's CSS\n // transition can spring them back to zero on its own timeline. The\n // parked `data-swipe=\"cancel\"` is cleared on the next `pointerdown`\n // (see `onPointerDown`) so it never lingers into an unrelated gesture.\n this.swipeCancel.emit(detail);\n },\n onSwipeEnd: (detail) => {\n this.#swipeState.set('end');\n this.#swipeMovementX.set(detail.delta.x);\n this.#swipeMovementY.set(detail.delta.y);\n this.swipeEnd.emit(detail);\n this.requestClose('swipe');\n },\n });\n this.#destroyRef.onDestroy(detachSwipe);\n }\n\n registerLabel(handle: ForToastTextHandle): void {\n this.#labels.update((arr) => (arr.includes(handle) ? arr : [...arr, handle]));\n }\n\n unregisterLabel(handle: ForToastTextHandle): void {\n this.#labels.update((arr) => arr.filter((h) => h !== handle));\n }\n\n registerDescription(handle: ForToastTextHandle): void {\n this.#descriptions.update((arr) => (arr.includes(handle) ? arr : [...arr, handle]));\n }\n\n unregisterDescription(handle: ForToastTextHandle): void {\n this.#descriptions.update((arr) => arr.filter((h) => h !== handle));\n }\n\n registerAction(handle: ForToastActionHandle): void {\n this.#actions.update((arr) => (arr.includes(handle) ? arr : [...arr, handle]));\n }\n\n unregisterAction(handle: ForToastActionHandle): void {\n this.#actions.update((arr) => arr.filter((h) => h !== handle));\n }\n\n requestClose(reason: ForToastCloseReason): void {\n if (!this.closable() && reason !== 'action' && reason !== 'programmatic') {\n return;\n }\n this.#cancelTimer();\n this.dismiss.emit(reason);\n }\n\n /**\n * Clear a parked swipe-cancel state at the start of the next pointer\n * interaction. After a cancel the host keeps `data-swipe=\"cancel\"` and the\n * released movement vars so the consumer's CSS can spring the toast back; a\n * fresh `pointerdown` is the terminal reset that returns the host to a clean\n * slate (no stale `data-swipe`, zeroed movement vars) before a new gesture\n * arms. A re-armed swipe overwrites the state anyway, so this only matters\n * for the parked-after-cancel window.\n */\n protected onPointerDown(): void {\n if (this.#swipeState() === 'cancel') {\n this.#resetSwipeState();\n }\n }\n\n #resetSwipeState(): void {\n this.#swipeState.set(null);\n this.#swipeActiveDirection.set(null);\n this.#swipeMovementX.set(0);\n this.#swipeMovementY.set(0);\n }\n\n protected onPause(reason: 'hover' | 'focus'): void {\n this.#pause.apply(reason);\n }\n\n protected onResume(reason: 'hover' | 'focus'): void {\n this.#pause.release(reason);\n }\n\n protected onMaybeResumeFocus(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (next && this.#host.nativeElement.contains(next)) {\n return;\n }\n this.onResume('focus');\n }\n\n protected onKeyDown(event: KeyboardEvent): void {\n if (event.key !== 'Escape' || !this.closable()) {\n return;\n }\n event.preventDefault();\n event.stopPropagation();\n this.requestClose('escape');\n }\n\n #onPausedChange(paused: boolean): void {\n if (paused) {\n // Pause: capture remaining time and cancel the running timer.\n if (this.#timerHandle !== null) {\n this.#remainingMs = Math.max(0, this.#timerEndsAt - Date.now());\n this.#cancelTimer();\n }\n } else if (this.duration() > 0 && this.closable() && this.#remainingMs > 0) {\n this.#scheduleTimer();\n }\n }\n\n #scheduleTimer(): void {\n this.#cancelTimer();\n this.#timerEndsAt = Date.now() + this.#remainingMs;\n this.#timerHandle = setTimeout(() => {\n this.#timerHandle = null;\n this.requestClose('auto');\n }, this.#remainingMs);\n }\n\n #cancelTimer(): void {\n if (this.#timerHandle !== null) {\n clearTimeout(this.#timerHandle);\n this.#timerHandle = null;\n }\n }\n}\n","import { type Provider } from '@angular/core';\n\nimport { createDefaults } from 'forty-cdk/core';\n\n/**\n * Optional global defaults. Provide via\n * `provideForToastDefaults({ duration: 4000, hotkey: 'F6' })` in your app\n * config to override library defaults. Every key is optional — unspecified\n * keys inherit from the parent scope (or library defaults at the root).\n */\nexport interface ForToastDefaults {\n duration?: number;\n hotkey?: string;\n maxVisible?: number;\n}\n\n/** @internal Concrete shape stored against the defaults token. */\ninterface ResolvedToastDefaults {\n duration: number;\n hotkey: string;\n maxVisible: number;\n}\n\nconst FALLBACK: ResolvedToastDefaults = {\n duration: 5000,\n hotkey: 'F6',\n maxVisible: Infinity,\n};\n\nconst { token, provideDefaults } = createDefaults<ResolvedToastDefaults>(\n 'FOR_TOAST_DEFAULTS',\n FALLBACK,\n);\n\n/**\n * Token holding the resolved toast defaults for the current injector scope.\n * The library always provides a fully-populated value (the fallback at the\n * root, or the merged result of the nearest `provideForToastDefaults`).\n */\nexport const FOR_TOAST_DEFAULTS = token;\n\n/**\n * Configures forty-cdk toast defaults for this injector scope. Partial\n * overrides inherit unspecified keys from the parent scope (or library\n * defaults at the root).\n */\nexport function provideForToastDefaults(defaults: ForToastDefaults): Provider[] {\n return provideDefaults(defaults as Partial<ResolvedToastDefaults>);\n}\n","import { signal } from '@angular/core';\n\nimport type { ForToastCloseReason, ForToastConfig } from './toast-context';\n\n/**\n * Handle returned by `ForToastManager.show()`. Drives `dismiss()` /\n * `update()` imperatively from anywhere. Both reactive (`isClosed`) and\n * awaitable (`closed`) APIs are exposed — pick what fits the call site.\n *\n * `R` is the close-result type, settable via `dismiss(reason, value)`.\n * Default `unknown`; specify on `manager.show<R, D>(...)` for type safety.\n */\nexport class ForToastRef<R = unknown, D = unknown> {\n readonly #closed = signal(false);\n readonly #result = signal<R | undefined>(undefined);\n readonly #config = signal<ForToastConfig<D>>({});\n\n /** Reactive: `true` once `dismiss()` has been called. */\n readonly isClosed = this.#closed.asReadonly();\n /** Reactive: the close result, populated on `dismiss(reason, value)`. */\n readonly result = this.#result.asReadonly();\n /** Reactive: the toast's current config (mutable via `update()`). */\n readonly config = this.#config.asReadonly();\n\n /** Awaitable: resolves with `{ reason, result }` the first time `dismiss()` runs. */\n readonly closed: Promise<{ reason: ForToastCloseReason; result: R | undefined }>;\n\n #resolveClosed!: (r: { reason: ForToastCloseReason; result: R | undefined }) => void;\n readonly #teardown: (reason: ForToastCloseReason) => void;\n\n /** @internal */\n constructor(initialConfig: ForToastConfig<D>, teardown: (reason: ForToastCloseReason) => void) {\n this.#config.set(initialConfig);\n this.#teardown = teardown;\n this.closed = new Promise((resolve) => {\n this.#resolveClosed = resolve;\n });\n }\n\n /**\n * Dismiss the toast, optionally returning a result. Idempotent — calling\n * twice is a no-op. Reason defaults to `'programmatic'`.\n */\n dismiss(reason: ForToastCloseReason = 'programmatic', result?: R): void {\n if (this.#closed()) {\n return;\n }\n this.#closed.set(true);\n this.#result.set(result);\n this.#resolveClosed({ reason, result });\n this.#teardown(reason);\n }\n\n /**\n * Mutate the toast in-place (e.g. to update text on long-running\n * operations: \"Saving…\" → \"Saved\"). No-op once dismissed.\n *\n * `id` and `region` are normalized at `show()` and are **immutable** — they\n * are ignored here. `id` is the toast's identity (used for dedupe and\n * external dismissal); `region` decides which `<for-toast-viewport>` renders\n * the toast, and changing it would silently unmount and remount the toast in\n * another viewport (resetting its timer and announcement). To move a toast\n * to a different region, dismiss it and `show()` a new one.\n */\n update(patch: Partial<ForToastConfig<D>>): void {\n if (this.#closed()) {\n return;\n }\n this.#config.update((current) => {\n const { id: _id, region: _region, ...mutable } = patch;\n return { ...current, ...mutable };\n });\n }\n}\n","import { computed, DOCUMENT, inject, Injectable, type Signal, signal } from '@angular/core';\n\nimport { IdGenerator } from 'forty-cdk/core';\nimport {\n DEFAULT_TOAST_REGION,\n type ForToastCloseReason,\n type ForToastConfig,\n type ForToastInstance,\n} from './toast-context';\nimport { FOR_TOAST_DEFAULTS } from './toast-defaults';\nimport { ForToastRef } from './toast-ref';\n\n/**\n * @internal Coordination handle a `ForToastViewport` registers with the\n * manager. The manager owns the single document-level hotkey listener and\n * decides which viewport is the active renderer for each region, so multiple\n * mounted viewports never duplicate toasts or double-fire the focus hotkey.\n */\nexport interface ForToastViewportRegistration {\n /** Reactive region the viewport renders. */\n readonly region: Signal<string>;\n /** Resolve the viewport's active hotkey (per-viewport override or default). */\n readonly hotkey: () => string;\n /** Focus the first rendered toast. Returns `true` when focus actually moved. */\n readonly focusFirst: () => boolean;\n}\n\n/** @internal The shape stored in the manager's reactive array. */\ninterface ToastEntry<R = unknown, D = unknown> {\n readonly id: string;\n readonly ref: ForToastRef<R, D>;\n}\n\n/**\n * Programmatic toast opener — show a transient notification from TypeScript.\n * Inject anywhere, call `show({ title, ... })` and get a `ForToastRef`\n * back. Toasts render through `<for-toast-viewport>`, which the consumer\n * mounts once near the root of their app.\n *\n * The manager owns the live array of toasts as a signal; the viewport\n * iterates with `@for` so add / remove transitions are pure DOM control\n * flow — consumers attach `animate.enter` / `animate.leave` directly.\n */\n@Injectable({ providedIn: 'root' })\nexport class ForToastManager {\n readonly #idGen = inject(IdGenerator);\n readonly #defaults = inject(FOR_TOAST_DEFAULTS);\n readonly #doc = inject(DOCUMENT);\n\n readonly #entries = signal<readonly ToastEntry[]>([]);\n // O(1) id → entry index kept in sync with `#entries`. Prevents same-tick\n // id-collision races where two `show({ id: 'X' })` calls would both miss\n // an array `find` and end up pushing duplicate entries.\n readonly #byId = new Map<string, ToastEntry>();\n\n // Live viewports in registration order. The first registration for a given\n // region is its active renderer; the rest stay dormant (see\n // `isActiveViewport`). A signal so each viewport's activeness recomputes\n // when viewports mount / unmount or change region.\n readonly #viewports = signal<readonly ForToastViewportRegistration[]>([]);\n #hotkeyListener: ((event: KeyboardEvent) => void) | null = null;\n\n /** Reactive view of all live toasts, in insertion order. */\n readonly toasts = computed<readonly ForToastInstance[]>(() =>\n this.#entries().map((e) => this.#instance(e)),\n );\n\n /** Reactive count of currently open toasts. */\n readonly count = computed(() => this.#entries().length);\n\n /**\n * Open a toast. Returns a `ForToastRef` you can use to dismiss / update\n * the toast imperatively.\n *\n * If `config.id` matches an existing toast, that toast is updated in place\n * instead of duplicating — useful for \"saving / saved\" sequences.\n */\n show<R = unknown, D = unknown>(config: ForToastConfig<D> = {}): ForToastRef<R, D> {\n const id = config.id ?? this.#idGen.next('for-toast');\n\n const existing = this.#byId.get(id);\n if (existing) {\n (existing.ref as ForToastRef<R, D>).update(config);\n return existing.ref as ForToastRef<R, D>;\n }\n\n // Normalize the region up front so `instance.config.region` is always a\n // concrete string the viewport can filter on (an explicit `undefined`\n // collapses to the default too).\n const region = config.region ?? DEFAULT_TOAST_REGION;\n const ref = new ForToastRef<R, D>({ ...config, id, region }, (reason) =>\n this.#removeById(id, reason),\n );\n const entry: ToastEntry = { id, ref: ref as ForToastRef };\n this.#byId.set(id, entry);\n this.#entries.update((arr) => [...arr, entry]);\n return ref;\n }\n\n /** Dismiss a toast by id. No-op when unknown. */\n dismiss(id: string, reason: ForToastCloseReason = 'programmatic'): void {\n this.#byId.get(id)?.ref.dismiss(reason);\n }\n\n /** Dismiss every live toast. */\n dismissAll(reason: ForToastCloseReason = 'programmatic'): void {\n for (const entry of [...this.#entries()]) {\n entry.ref.dismiss(reason);\n }\n }\n\n /** @internal Used by the viewport to read the configured hotkey. */\n hotkey(): string {\n return this.#defaults.hotkey;\n }\n\n /** @internal Default duration applied when a toast omits it. */\n defaultDuration(): number {\n return this.#defaults.duration;\n }\n\n /** @internal Default `maxVisible` applied to the viewport. */\n defaultMaxVisible(): number {\n return this.#defaults.maxVisible;\n }\n\n /**\n * @internal Register a viewport for hotkey + region coordination. Returns a\n * teardown the viewport runs on destroy. Installs the single document-level\n * hotkey listener on the first registration and tears it down with the last.\n */\n registerViewport(registration: ForToastViewportRegistration): () => void {\n this.#viewports.update((arr) => [...arr, registration]);\n this.#ensureHotkeyListener();\n return () => {\n this.#viewports.update((arr) => arr.filter((r) => r !== registration));\n if (this.#viewports().length === 0) {\n this.#teardownHotkeyListener();\n }\n };\n }\n\n /**\n * @internal Whether `registration` is the active renderer for its region —\n * the first registered viewport for that region. Later viewports for the\n * same region stay dormant so a single `show()` produces exactly one toast\n * node regardless of how many viewports are mounted.\n */\n isActiveViewport(registration: ForToastViewportRegistration): boolean {\n const region = registration.region();\n const first = this.#viewports().find((r) => r.region() === region);\n return first === registration;\n }\n\n #ensureHotkeyListener(): void {\n if (this.#hotkeyListener) {\n return;\n }\n const listener = (event: KeyboardEvent): void => {\n // First viewport (in registration order) whose hotkey matches and that\n // actually has a toast to focus wins — a single handler for every\n // viewport, so the hotkey can't double-fire across mounted viewports.\n for (const viewport of this.#viewports()) {\n if (event.key !== viewport.hotkey()) {\n continue;\n }\n if (viewport.focusFirst()) {\n event.preventDefault();\n return;\n }\n }\n };\n this.#hotkeyListener = listener;\n this.#doc.addEventListener('keydown', listener);\n }\n\n #teardownHotkeyListener(): void {\n if (!this.#hotkeyListener) {\n return;\n }\n this.#doc.removeEventListener('keydown', this.#hotkeyListener);\n this.#hotkeyListener = null;\n }\n\n #removeById(id: string, _reason: ForToastCloseReason): void {\n this.#byId.delete(id);\n this.#entries.update((arr) => arr.filter((e) => e.id !== id));\n }\n\n #instance<R, D>(entry: ToastEntry<R, D>): ForToastInstance<D> {\n const ref = entry.ref;\n return {\n id: entry.id,\n get config() {\n return ref.config();\n },\n dismiss(reason: ForToastCloseReason = 'manual') {\n ref.dismiss(reason);\n },\n };\n }\n}\n","import { Directive, input } from '@angular/core';\n\nimport { registerHandle } from 'forty-cdk/core';\nimport { injectToastContext } from './toast-context';\n\n/**\n * Action button inside a toast (e.g. \"Undo\"). Apply on a\n * `<button type=\"button\">` so Space / Enter dispatch a native click.\n *\n * Clicking emits `(dismiss)` from the parent `[forToast]` with reason\n * `'action'`. Wire your action handler with `(click)` on this element\n * itself — the close fires after your handler runs (via event order).\n *\n * The action is the **sanctioned dismissal path even when the toast is\n * `closable=false`**: a forced-action toast suppresses Escape / swipe / the\n * close button but keeps the action button live so the user always has a way\n * out through the control they are meant to use.\n *\n * Set `[altText]` for WCAG 2.2.1 compliance: the visible label (e.g.\n * \"Undo\") rarely carries enough context to recover the action once the\n * toast disappears. The alt text replaces the toast's automatic live\n * announcement with a self-contained string, e.g. `altText=\"Undo (Cmd+Z)\"`.\n * When at least one action carries an alt text, the parent toast routes\n * its announcement through `LiveAnnouncer` and silences the host\n * `aria-live` to avoid a duplicate readout.\n */\n@Directive({\n selector: '[forToastAction]',\n exportAs: 'forToastAction',\n host: {\n type: 'button',\n '(click)': 'onClick()',\n },\n})\nexport class ForToastAction {\n protected readonly ctx = injectToastContext('ForToastAction');\n\n /**\n * Self-contained text read aloud in place of the visible label so the\n * user knows how to recover the action after the toast is gone. Required\n * for time-limited toasts per WCAG 2.2.1; defaults to `''` (no alt text).\n */\n readonly altText = input<string>('');\n\n constructor() {\n const handle = { altText: this.altText };\n registerHandle(\n handle,\n (h) => this.ctx.registerAction(h),\n (h) => this.ctx.unregisterAction(h),\n );\n }\n\n protected onClick(): void {\n this.ctx.requestClose('action');\n }\n}\n","import { Directive } from '@angular/core';\n\nimport { injectToastContext } from './toast-context';\n\n/**\n * Close button inside a toast. Apply on a `<button type=\"button\">` so\n * Space / Enter dispatch a native click. Clicking emits `(dismiss)` from\n * the parent `[forToast]` with reason `'manual'`.\n *\n * The host carries `aria-label=\"Close\"` by default; override with your\n * own `[attr.aria-label]` when the toast's language requires localization.\n */\n@Directive({\n selector: '[forToastClose]',\n exportAs: 'forToastClose',\n host: {\n type: 'button',\n 'aria-label': 'Close',\n '(click)': 'onClick()',\n },\n})\nexport class ForToastClose {\n protected readonly ctx = injectToastContext('ForToastClose');\n\n protected onClick(): void {\n this.ctx.requestClose('manual');\n }\n}\n","import { afterEveryRender, Directive, ElementRef, inject, signal } from '@angular/core';\n\nimport { registerHandle, resolveHostId } from 'forty-cdk/core';\nimport { injectToastContext, type ForToastTextHandle } from './toast-context';\n\n/**\n * Supplementary description for the toast. Registers its generated id\n * with the parent `[forToast]` so `aria-describedby` is wired automatically.\n */\n@Directive({\n selector: '[forToastDescription]',\n exportAs: 'forToastDescription',\n host: {\n '[id]': 'id',\n },\n})\nexport class ForToastDescription {\n readonly #ctx = injectToastContext('ForToastDescription');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly id = resolveHostId(this.#host.nativeElement, 'for-toast-description');\n readonly #text = signal('');\n\n constructor() {\n const handle: ForToastTextHandle = { id: this.id, text: this.#text.asReadonly() };\n registerHandle(\n handle,\n (h) => this.#ctx.registerDescription(h),\n (h) => this.#ctx.unregisterDescription(h),\n );\n afterEveryRender(() => {\n const next = (this.#host.nativeElement.textContent ?? '').trim();\n if (next !== this.#text()) {\n this.#text.set(next);\n }\n });\n }\n}\n","import { Directive, inject, Injector } from '@angular/core';\n\n/**\n * @internal Exposes the element injector at a child of the row's `[forToast]`\n * element so a consumer-supplied toast `template` can be rendered with the\n * `[forToast]` injection context in scope.\n *\n * Angular's `ngTemplateOutlet` renders a template against its *declaration*\n * injector (the consumer's component, where `<ng-template>` was written), not\n * the insertion point — so `[forToastTitle]` / `[forToastDescription]` /\n * `[forToastAction]` / `[forToastClose]`, which `inject(FOR_TOAST_CONTEXT)`,\n * would fail to resolve the row's `ForToast`.\n *\n * This directive sits on the same `<ng-container>` as the `ngTemplateOutlet`,\n * inside the row's `[forToast]` element, so its own element injector already\n * resolves `FOR_TOAST_CONTEXT`. The viewport feeds that injector to\n * `[ngTemplateOutletInjector]`, making the rendered template inherit it and\n * restoring the automatic `aria-labelledby` / `aria-describedby` / close-reason\n * wiring for the helper directives inside the custom template — without adding\n * a wrapper element to the consumer's markup.\n */\n@Directive({\n selector: '[forToastOutlet]',\n exportAs: 'forToastOutlet',\n})\nexport class ForToastOutlet {\n /**\n * Element injector resolving `FOR_TOAST_CONTEXT` for the enclosing toast\n * row. Passed to `[ngTemplateOutletInjector]` so helper directives inside a\n * custom template wire a11y exactly as in the default shape.\n */\n readonly injector = inject(Injector);\n}\n","import { afterEveryRender, Directive, ElementRef, inject, signal } from '@angular/core';\n\nimport { registerHandle, resolveHostId } from 'forty-cdk/core';\nimport { injectToastContext, type ForToastTextHandle } from './toast-context';\n\n/**\n * Element holding the toast's accessible name. Registers its generated id\n * with the parent `[forToast]` so `aria-labelledby` is wired automatically.\n * Apply on whatever heading element fits (`<strong>`, `<h2>`, `<div>`).\n */\n@Directive({\n selector: '[forToastTitle]',\n exportAs: 'forToastTitle',\n host: {\n '[id]': 'id',\n },\n})\nexport class ForToastTitle {\n readonly #ctx = injectToastContext('ForToastTitle');\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly id = resolveHostId(this.#host.nativeElement, 'for-toast-title');\n readonly #text = signal('');\n\n constructor() {\n const handle: ForToastTextHandle = { id: this.id, text: this.#text.asReadonly() };\n registerHandle(\n handle,\n (h) => this.#ctx.registerLabel(h),\n (h) => this.#ctx.unregisterLabel(h),\n );\n afterEveryRender(() => {\n const next = (this.#host.nativeElement.textContent ?? '').trim();\n if (next !== this.#text()) {\n this.#text.set(next);\n }\n });\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n DestroyRef,\n effect,\n ElementRef,\n inject,\n input,\n isDevMode,\n numberAttribute,\n type Signal,\n} from '@angular/core';\nimport { NgTemplateOutlet } from '@angular/common';\n\nimport { resolveConfigClass } from 'forty-cdk/core';\nimport {\n DEFAULT_TOAST_REGION,\n type ForToastCloseReason,\n type ForToastInstance,\n type ForToastSwipeDirection,\n} from './toast-context';\nimport { ForToastManager, type ForToastViewportRegistration } from './toast-manager';\nimport { ForToast } from './toast';\nimport { ForToastAction } from './toast-action';\nimport { ForToastClose } from './toast-close';\nimport { ForToastDescription } from './toast-description';\nimport { ForToastOutlet } from './toast-outlet';\nimport { ForToastTitle } from './toast-title';\n\n/**\n * Mounted once near the root of the app — typically inside `app.html`.\n * Listens to `ForToastManager.toasts()` and renders each programmatic\n * toast inline. Position the viewport from CSS (`position: fixed`,\n * `top|bottom`, `left|right`) — the directive doesn't impose any.\n *\n * Custom rendering: if a toast's config has `template`, that\n * `TemplateRef<ForToastTemplateContext>` is used instead of the default\n * title / description / action / close shape. The template receives\n * `$implicit: instance` and `data: instance.config.data`, and is rendered\n * with the `[forToast]` injection context in scope (via `ForToastOutlet`),\n * so `[forToastTitle]` / `[forToastDescription]` / `[forToastAction]` /\n * `[forToastClose]` keep their automatic a11y / close wiring inside it.\n *\n * Per-toast classes: a config's `class` / `classList` is applied to the\n * rendered toast root, merged with the directive's own host attributes.\n *\n * Enter / exit animations: a toast renders inside this viewport's `@for`, so a\n * `[animate.leave]` on the row defers the unmount natively — the toast stays\n * mounted until its exit animation settles. Supply the class per-toast with\n * `show({ animateLeave })` or set a viewport-wide default with `[animateLeave]`\n * (per-toast wins); `[animateEnter]` mirrors it for class-applied entrances.\n *\n * Hotkey: pressing the configured `hotkey` (default `F6`) anywhere in the\n * document focuses the first toast. Override per-viewport with `[hotkey]`\n * or globally with `provideForToastDefaults({ hotkey: '…' })`. The listener\n * is owned once by `ForToastManager`, so the hotkey never double-fires when\n * several viewports are mounted.\n *\n * Regions: a viewport renders only toasts whose `region` matches its\n * `[region]` input (default {@link DEFAULT_TOAST_REGION}), so independent\n * viewports — e.g. top-right system notifications and bottom-center action\n * confirmations — are a first-class feature. If two viewports share a region,\n * only the first one mounted renders it (the rest stay dormant and warn in dev\n * mode), so a single `show()` always produces exactly one toast node.\n *\n * Accessibility: the host carries `role=\"region\"` and an `aria-label`\n * (default `Notifications`). Toast nodes themselves carry their own\n * `role` (`status` / `alert`) and `aria-live`, so screen readers\n * announce updates without forcing focus.\n */\n@Component({\n selector: 'for-toast-viewport, [forToastViewport]',\n exportAs: 'forToastViewport',\n imports: [\n NgTemplateOutlet,\n ForToast,\n ForToastOutlet,\n ForToastTitle,\n ForToastDescription,\n ForToastAction,\n ForToastClose,\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n role: 'region',\n '[attr.aria-label]': 'label()',\n '[attr.data-region]': 'region()',\n tabindex: '-1',\n '[attr.data-toast-count]': 'visible().length',\n },\n template: `\n @for (toast of visible(); track toast.id; let i = $index) {\n <div\n forToast\n [class]=\"toastClass(toast)\"\n [animate.enter]=\"toastAnimateEnter(toast)\"\n [animate.leave]=\"toastAnimateLeave(toast)\"\n [variant]=\"toast.config.variant ?? 'info'\"\n [duration]=\"toast.config.duration ?? defaultDuration()\"\n [closable]=\"toast.config.closable !== false\"\n [swipeDirection]=\"toast.config.swipeDirection ?? swipeDirection()\"\n [swipeThreshold]=\"toast.config.swipeThreshold ?? swipeThreshold()\"\n [attr.data-front-stack-index]=\"i\"\n (dismiss)=\"onClose(toast, $event)\"\n >\n @if (toast.config.template; as template) {\n <ng-container\n forToastOutlet\n #outlet=\"forToastOutlet\"\n [ngTemplateOutlet]=\"template\"\n [ngTemplateOutletContext]=\"{ $implicit: toast, data: toast.config.data }\"\n [ngTemplateOutletInjector]=\"outlet.injector\"\n />\n } @else {\n @if (toast.config.title) {\n <div forToastTitle>{{ toast.config.title }}</div>\n }\n @if (toast.config.description) {\n <div forToastDescription>{{ toast.config.description }}</div>\n }\n @if (toast.config.action; as action) {\n <button forToastAction (click)=\"action.onClick()\">\n {{ action.label }}\n </button>\n }\n @if (toast.config.closable !== false) {\n <button forToastClose>×</button>\n }\n }\n </div>\n }\n `,\n})\nexport class ForToastViewport {\n readonly #manager = inject(ForToastManager);\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n /** Accessible name for the viewport region. Default `'Notifications'`. */\n readonly label = input<string>('Notifications');\n\n /**\n * The toast region this viewport renders. Only toasts whose `region` matches\n * appear here; toasts opened without a `region` use\n * {@link DEFAULT_TOAST_REGION}, so the common single-viewport setup needs no\n * `[region]` at all. Mount viewports with distinct `[region]` values to drive\n * independent toast regions from one global `ForToastManager`.\n */\n readonly region = input<string>(DEFAULT_TOAST_REGION);\n\n /** Hotkey to focus the viewport. Default reads from `provideForToastDefaults`, falling back to `F6`. */\n readonly hotkey = input<string>('');\n\n /**\n * Maximum number of toasts rendered at once. Older toasts collapse out of\n * the visible stack but stay in `manager.toasts()` until dismissed. When\n * unset (`null`, the default), the viewport falls back to the global\n * `provideForToastDefaults({ maxVisible })` value (itself `Infinity` unless\n * configured, which renders all live toasts). Setting `[maxVisible]`\n * per-viewport overrides the global default.\n *\n * **Overflow is parked, not auto-expired.** A toast pushed out of the\n * visible window is unmounted, so its auto-dismiss timer is not running\n * while it waits. It re-enters the window when a newer toast is dismissed,\n * and its `duration` countdown then restarts from full (a fresh `[forToast]`\n * mounts). Cap with `maxVisible` for layout, but dismiss explicitly — via\n * `ForToastRef.dismiss()`, `dismissAll()`, or the action / close button —\n * if you need overflow toasts to clear on a deadline.\n */\n readonly maxVisible = input<number | null>(null, {\n transform: (v: unknown): number | null => (v == null ? null : numberAttribute(v)),\n });\n\n /**\n * Default swipe direction(s) applied to every programmatic toast that\n * doesn't override `swipeDirection` in its own config. `null` (default)\n * keeps swipe disabled unless explicitly opted into per-toast.\n */\n readonly swipeDirection = input<ForToastSwipeDirection>(null);\n\n /**\n * Default dismiss-distance in pixels applied to every programmatic toast\n * that doesn't override `swipeThreshold` in its own config.\n */\n readonly swipeThreshold = input(50, { transform: numberAttribute });\n\n /**\n * Default `animate.enter` class applied to every programmatic toast that\n * doesn't set `animateEnter` in its own config. Empty (default) plays no\n * class-applied enter animation — a plain CSS `@keyframes` on `[forToast]`\n * already runs on mount without it.\n */\n readonly animateEnter = input<string>('');\n\n /**\n * Default `animate.leave` class applied to every programmatic toast that\n * doesn't set `animateLeave` in its own config. Empty (default) unmounts the\n * toast synchronously on dismiss; set it (or per-toast `animateLeave`) to\n * keep the toast mounted until its exit animation settles before it leaves\n * the DOM.\n */\n readonly animateLeave = input<string>('');\n\n protected readonly defaultDuration = computed(() => this.#manager.defaultDuration());\n\n /**\n * Resolved `maxVisible` limit: the per-viewport `[maxVisible]` when set,\n * otherwise the global `provideForToastDefaults({ maxVisible })` value.\n */\n protected readonly resolvedMaxVisible = computed(() => {\n const own = this.maxVisible();\n return own ?? this.#manager.defaultMaxVisible();\n });\n\n /**\n * Whether this viewport is the active renderer for its region. The manager\n * grants this to the first viewport mounted per region; dormant viewports\n * render nothing so a single `show()` yields exactly one toast node.\n */\n readonly #active: Signal<boolean>;\n\n protected readonly visible = computed<readonly ForToastInstance[]>(() => {\n if (!this.#active()) {\n return [];\n }\n const region = this.region();\n const all = this.#manager.toasts().filter((toast) => toast.config.region === region);\n const resolved = this.resolvedMaxVisible();\n const limit = Number.isFinite(resolved) ? resolved : all.length;\n if (all.length <= limit) {\n return all;\n }\n // Newest toasts win; older ones drop out of the visible window.\n return all.slice(all.length - limit);\n });\n\n constructor() {\n const registration: ForToastViewportRegistration = {\n region: this.region,\n hotkey: () => this.hotkey() || this.#manager.hotkey(),\n focusFirst: () => this.#focusFirst(),\n };\n this.#active = computed(() => this.#manager.isActiveViewport(registration));\n const unregister = this.#manager.registerViewport(registration);\n inject(DestroyRef).onDestroy(unregister);\n\n if (isDevMode()) {\n // Warn once each time this viewport becomes dormant because another\n // viewport already owns its region — the silent-duplication footgun the\n // region API exists to remove.\n let warned = false;\n effect(() => {\n if (this.#active()) {\n warned = false;\n } else if (!warned) {\n warned = true;\n console.warn(\n `[forty-cdk/toast] A <for-toast-viewport> for region \"${this.region()}\" is already mounted; ` +\n `this one stays inactive to avoid duplicate toasts. Give it a distinct [region] for an independent toast region.`,\n );\n }\n });\n }\n }\n\n /** Focus the first rendered toast host. Returns `true` when focus moved. */\n #focusFirst(): boolean {\n const first = this.#host.nativeElement.querySelector<HTMLElement>('[forToast]');\n if (first) {\n first.focus();\n return true;\n }\n return false;\n }\n\n protected onClose(toast: ForToastInstance, reason: ForToastCloseReason): void {\n toast.dismiss(reason);\n }\n\n /**\n * Consumer class(es) for a toast row, resolved from its config's `class` /\n * `classList`. Returns `''` when neither is set so the `[class]` host\n * binding emits no extra tokens and leaves the directive's own host\n * attributes untouched.\n */\n protected toastClass(toast: ForToastInstance): string {\n return resolveConfigClass(toast.config) ?? '';\n }\n\n /**\n * `animate.enter` class for a toast row: its per-toast `animateEnter` config\n * when set, otherwise the viewport-level `[animateEnter]`. Empty when neither\n * is set.\n */\n protected toastAnimateEnter(toast: ForToastInstance): string {\n return toast.config.animateEnter ?? this.animateEnter();\n }\n\n /**\n * `animate.leave` class for a toast row: its per-toast `animateLeave` config\n * when set, otherwise the viewport-level `[animateLeave]`. Empty when neither\n * is set, which keeps the toast's unmount synchronous on dismiss.\n */\n protected toastAnimateLeave(toast: ForToastInstance): string {\n return toast.config.animateLeave ?? this.animateLeave();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|