@cdevhub/ngx-tw 0.4.0 → 0.5.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/fesm2022/cdevhub-ngx-tw-dialog-dialog-renderer-DoIhoV3d.mjs +198 -0
- package/fesm2022/cdevhub-ngx-tw-dialog-dialog-renderer-DoIhoV3d.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs +189 -219
- package/fesm2022/cdevhub-ngx-tw-dialog.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-sheet-sheet-renderer-ByyNluUd.mjs +256 -0
- package/fesm2022/cdevhub-ngx-tw-sheet-sheet-renderer-ByyNluUd.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs +178 -275
- package/fesm2022/cdevhub-ngx-tw-sheet.mjs.map +1 -1
- package/fesm2022/cdevhub-ngx-tw-toast-toast-renderer-DSu4YoTy.mjs +528 -0
- package/fesm2022/cdevhub-ngx-tw-toast-toast-renderer-DSu4YoTy.mjs.map +1 -0
- package/fesm2022/cdevhub-ngx-tw-toast.mjs +414 -811
- package/fesm2022/cdevhub-ngx-tw-toast.mjs.map +1 -1
- package/index.json +1 -1
- package/package.json +1 -1
- package/types/cdevhub-ngx-tw-dialog.d.ts +80 -19
- package/types/cdevhub-ngx-tw-sheet.d.ts +78 -19
- package/types/cdevhub-ngx-tw-toast.d.ts +41 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cdevhub-ngx-tw-toast.mjs","sources":["../../../projects/ngx-tw/toast/toast-config.ts","../../../projects/ngx-tw/toast/toast-component.ts","../../../projects/ngx-tw/toast/toast-container.ts","../../../projects/ngx-tw/toast/toast-ref.ts","../../../projects/ngx-tw/toast/toast.ts","../../../projects/ngx-tw/toast/cdevhub-ngx-tw-toast.ts"],"sourcesContent":["import { InjectionToken, type TemplateRef, type Type } from '@angular/core';\nimport type { ToastRef } from './toast-ref';\n\n/** Severity variant — drives color palette, default icon, and live-region politeness. */\nexport type ToastSeverity = 'info' | 'success' | 'warning' | 'error' | 'neutral';\n\n/** Screen anchor for a stack of toasts. One CDK overlay is created per position on first use. */\nexport type ToastPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\n/** Lifecycle state of a single toast. */\nexport type ToastState = 'entering' | 'visible' | 'paused' | 'dismissing' | 'dismissed';\n\n/** Reason a toast was dismissed. */\nexport type ToastDismissReason =\n | 'action'\n | 'timeout'\n | 'swipe'\n | 'manual'\n | 'programmatic'\n | 'max-exceeded';\n\n/** Payload forwarded to `afterDismissed()` subscribers. */\nexport interface ToastDismissal<R = unknown> {\n /** Why the toast closed. */\n reason: ToastDismissReason;\n /** Optional value forwarded from `ref.dismiss(result)`. */\n result?: R;\n}\n\n/** Context object handed to `TemplateRef` content (`let-data let-ref=\"ref\"`). */\nexport interface ToastTemplateContext<T = unknown> {\n /** Data value from `config.data`, unwrapped as the template's `$implicit`. */\n $implicit: T;\n /** Reference to the toast itself, bound as `let-ref=\"ref\"`. */\n ref: ToastRef<unknown, unknown>;\n}\n\n/** Action button configuration. When `handler` is omitted the button dismisses the toast with reason `'action'`. */\nexport interface ToastAction {\n /** Visible label of the action button. */\n label: string;\n /** Optional callback invoked when the action is clicked or `ref.triggerAction()` is called. */\n handler?: (ref: ToastRef) => void;\n}\n\n/**\n * Per-call configuration for {@link ToastService} methods. Also used as the\n * payload of {@link TW_TOAST_DEFAULT_OPTIONS} for app-wide defaults.\n */\n// `R` is a phantom result-type kept for parity with `ToastRef<D, R>` / service\n// generics — consumers pass it through `ToastConfig<D, R>` so the resulting\n// `ToastRef.afterClosed()` is correctly typed.\nexport class ToastConfig<D = unknown, _R = unknown> {\n /** Severity of the toast. Defaults to `'info'`. */\n severity?: ToastSeverity = 'info';\n\n /** Screen position of the toast stack. Defaults to `'bottom-right'`. */\n position?: ToastPosition = 'bottom-right';\n\n /** Auto-dismiss duration in ms. `0` disables auto-dismiss. Defaults to `5000`. */\n duration?: number = 5000;\n\n // Default true: toasts must offer an escape hatch — sticky / long-duration toasts\n // otherwise trap users; opt-out only for ephemeral progress markers paired with `duration`.\n /** When true, renders a close (×) button. Defaults to `true`. */\n dismissible?: boolean = true;\n\n /**\n * Live-region politeness. When omitted, resolves to `'assertive'` for\n * `severity: 'error'` and `'polite'` otherwise. Pass `'off'` to skip\n * `LiveAnnouncer` entirely.\n */\n politeness?: 'polite' | 'assertive' | 'off';\n\n /** Action button configuration. Omit to hide the action button. */\n action?: ToastAction;\n\n /** Arbitrary data provided to component / template content via `TW_TOAST_DATA`. */\n data?: D | null = null;\n\n /** Extra CSS classes merged onto the toast panel root via `twMerge`. */\n panelClass?: string | string[];\n\n /**\n * Icon override. Pass a string (treated as text glyph / icon name) or\n * `false` to hide the icon. When omitted the severity-default icon is used.\n *\n * Note: To render arbitrary icon markup, pass a `TemplateRef` to `show()`\n * itself (the whole toast is a custom template) — the icon slot accepts only\n * primitives for the string-content path.\n */\n icon?: string | false;\n\n // Default true: matches Material/Radix/Sonner conventions — prevents a toast from\n // disappearing mid-read; opt-out only for fully ambient progress indicators.\n /** When true, pause the auto-dismiss timer while the toast is hovered or holds focus. Defaults to `true`. */\n pauseOnInteraction?: boolean = true;\n\n // Default true: matches mobile-platform expectations and gives non-precise pointers\n // (touch) an easy dismiss gesture; opt-out only if the gesture conflicts with content.\n /** Enable horizontal swipe-to-dismiss via pointer gestures. Defaults to `true`. */\n swipeToDismiss?: boolean = true;\n\n /**\n * Maximum visible toasts *per position*. When exceeded, the oldest toast in\n * that position dismisses with reason `'max-exceeded'`. Defaults to `5`.\n */\n maxVisible?: number = 5;\n\n /** Explicit id. When omitted a unique id is generated. */\n id?: string;\n\n /** Accessible label applied to the toast element. When omitted, text content is used. */\n ariaLabel?: string;\n\n /** Accessible label applied to the per-position `role=\"region\"` container. Defaults to `'Notifications'`. */\n regionAriaLabel?: string;\n}\n\n/** Injection token providing `config.data` to projected component / template content. */\nexport const TW_TOAST_DATA = new InjectionToken<unknown>('TW_TOAST_DATA');\n\n/** Injection token providing the owning {@link ToastRef} to projected component content. */\nexport const TW_TOAST_REF = new InjectionToken<ToastRef>('TW_TOAST_REF');\n\n/** Injection token carrying application-wide toast defaults. Set via `provideToast(defaults)`. */\nexport const TW_TOAST_DEFAULT_OPTIONS = new InjectionToken<Partial<ToastConfig>>(\n 'TW_TOAST_DEFAULT_OPTIONS',\n);\n\n/** Accepted content forms for `ToastService.show()`. */\nexport type ToastContent = string | TemplateRef<ToastTemplateContext> | Type<unknown>;\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { tv } from 'tailwind-variants';\nimport type { ToastSeverity } from './toast-config';\n\nconst toastVariants = tv(\n {\n slots: {\n root:\n 'pointer-events-auto relative flex items-start gap-3 w-full max-w-sm p-4 rounded-lg border shadow-md text-sm will-change-transform transition-colors duration-normal motion-reduce:transition-none',\n icon: 'size-5 shrink-0 mt-0.5',\n title: 'text-sm font-semibold',\n description: 'text-sm',\n content: 'flex-1 min-w-0',\n action:\n 'inline-flex items-center justify-center px-3 py-1.5 rounded-md text-sm font-medium cursor-pointer transition-colors duration-normal motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n // Dismiss container is `size-6` (24px — xs square-interactive-target\n // scale per CLAUDE.md icon sub-scale). The inner SVG is `size-4` (16px\n // glyph scale), centred via flex; the larger container gives the\n // touch/click affordance without enlarging the visual glyph.\n dismiss:\n 'absolute top-3 right-3 inline-flex items-center justify-center size-6 rounded-md cursor-pointer transition-colors duration-normal motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n },\n variants: {\n severity: {\n info: {},\n success: {},\n warning: {},\n error: {},\n neutral: {},\n },\n },\n // Color slot tokens (`{role}-soft`, `-soft-fg`, `-icon`, …) own light/dark\n // contrast — components consume the slot only. See `_semantic.css`.\n // Slot-token safelist: see `projects/ngx-tw/theme/index.css` `@source inline(...)`\n // — Tailwind v4's JIT cannot scan template-literal class names, so every\n // `bg-${severity}-soft` / `text-${severity}-icon` permutation below must be\n // enumerated there.\n compoundVariants: (['info', 'success', 'warning', 'error', 'neutral'] as const).map(\n (severity) => ({\n severity,\n class: {\n root: `bg-${severity}-soft text-${severity}-soft-fg-muted border-${severity}-border`,\n icon: `text-${severity}-icon`,\n title: `text-${severity}-soft-fg`,\n description: `text-${severity}-soft-fg-muted`,\n action: `text-${severity}-soft-fg hover:bg-${severity}-soft-hover`,\n dismiss: `text-${severity}-icon hover:bg-${severity}-soft-hover`,\n },\n }),\n ),\n defaultVariants: {\n severity: 'info',\n },\n },\n { twMerge: true },\n);\n\n/** Slot directive for the icon. When projected, overrides the severity-default icon. */\n@Directive({\n selector: '[twToastIcon]',\n host: {\n '[class]': 'classes()',\n 'aria-hidden': 'true',\n },\n})\nexport class ToastIconDirective {\n private readonly toast = inject(ToastComponent);\n /** @internal */\n readonly classes = this.toast.iconClasses;\n}\n\n/** Slot directive for the bold title line inside a toast. */\n@Directive({\n selector: '[twToastTitle]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class ToastTitleDirective {\n private readonly toast = inject(ToastComponent);\n /** @internal */\n readonly classes = this.toast.titleClasses;\n}\n\n/** Slot directive for a secondary description line inside a toast. */\n@Directive({\n selector: '[twToastDescription]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class ToastDescriptionDirective {\n private readonly toast = inject(ToastComponent);\n /** @internal */\n readonly classes = this.toast.descriptionClasses;\n}\n\n/** Slot directive for the action button. Apply to a native `<button>` to inherit the severity-aware styling. */\n@Directive({\n selector: '[twToastAction]',\n host: {\n type: 'button',\n '[class]': 'classes()',\n '(click)': 'onClick()',\n },\n})\nexport class ToastActionDirective {\n private readonly toast = inject(ToastComponent);\n /** @internal */\n readonly classes = this.toast.actionClasses;\n /** @internal */\n protected onClick(): void {\n this.toast.actionClicked.emit();\n }\n}\n\n/**\n * Visual toast / snackbar panel. Rendered internally by {@link ToastService} for\n * string content, and exported for consumers who want to compose the same\n * visual inside a custom `TemplateRef` or component class passed to `show()`.\n */\n@Component({\n selector: 'tw-toast',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'rootClasses()',\n '[attr.role]': 'roleAttr()',\n '[attr.aria-live]': 'ariaLiveAttr()',\n 'aria-atomic': 'true',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.data-severity]': 'severity()',\n },\n template: `\n @if (hasProjectedIcon()) {\n <ng-content select=\"[twToastIcon]\" />\n } @else if (icon() !== false) {\n <span [class]=\"iconClasses()\" aria-hidden=\"true\">\n @switch (severity()) {\n @case ('info') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"size-full\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm0-11a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm-.75 2.5a.75.75 0 0 0 0 1.5h.25v3h-.25a.75.75 0 0 0 0 1.5h2a.75.75 0 0 0 0-1.5h-.25v-3.75a.75.75 0 0 0-.75-.75h-1Z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n @case ('success') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"size-full\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm3.857-9.809a.75.75 0 0 0-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 1 0-1.06 1.061l2.5 2.5a.75.75 0 0 0 1.137-.089l4-5.5Z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n @case ('warning') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"size-full\">\n <path fill-rule=\"evenodd\" d=\"M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495ZM10 5a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 10 5Zm0 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n @case ('error') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"size-full\">\n <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 1 1-16 0 8 8 0 0 1 16 0Zm-8-5a.75.75 0 0 1 .75.75v4.5a.75.75 0 0 1-1.5 0v-4.5A.75.75 0 0 1 10 5Zm0 10a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n @default {\n @if (icon() && icon() !== false) {\n {{ icon() }}\n }\n }\n }\n </span>\n }\n <div [class]=\"contentClasses()\">\n <ng-content select=\"[twToastTitle]\" />\n <ng-content select=\"[twToastDescription]\" />\n <ng-content />\n <ng-content select=\"[twToastAction]\" />\n </div>\n @if (dismissible()) {\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n [class]=\"dismissClasses()\"\n (click)=\"dismissed.emit()\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" class=\"size-4\">\n <path d=\"M5.28 4.22a.75.75 0 0 0-1.06 1.06L6.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L8 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L9.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L8 6.94 5.28 4.22Z\"/>\n </svg>\n </button>\n }\n `,\n})\nexport class ToastComponent {\n /** Severity variant. Drives color palette, default icon, and ARIA role / live politeness. Defaults to `'info'`. */\n readonly severity = input<ToastSeverity>('info');\n\n // Default true: mirrors `ToastConfig.dismissible` — toasts must offer an escape\n // hatch by default; opt-out only for ephemeral progress markers paired with `duration`.\n /** Whether to render the close button. Defaults to `true`. */\n readonly dismissible = input<boolean>(true);\n\n /**\n * Icon override. Pass a string to render as text inside the icon slot, or\n * `false` to hide the built-in severity icon. Ignored when a `[twToastIcon]`\n * child is projected. When omitted, the severity-default icon renders.\n *\n * For arbitrary icon markup, project a `[twToastIcon]` child instead.\n */\n readonly icon = input<string | false | undefined>(undefined);\n\n /** Explicit aria-label for the toast wrapper. When omitted, text content is used by assistive tech. */\n readonly ariaLabel = input<string | undefined>(undefined);\n\n /** Fires when the close button is clicked. */\n readonly dismissed = output<void>();\n\n /** Fires when a `[twToastAction]` button is clicked. */\n readonly actionClicked = output<void>();\n\n /** @internal */\n readonly projectedIcon = contentChild(ToastIconDirective);\n\n /** @internal */\n readonly hasProjectedIcon = computed(() => !!this.projectedIcon());\n\n private readonly variantResult = computed(() => toastVariants({ severity: this.severity() }));\n\n /** @internal */\n readonly rootClasses = computed(() => {\n const base = this.variantResult().root();\n return this.dismissible() ? `${base} pr-10` : base;\n });\n\n /** @internal */\n readonly iconClasses = computed(() => this.variantResult().icon());\n /** @internal */\n readonly titleClasses = computed(() => this.variantResult().title());\n /** @internal */\n readonly descriptionClasses = computed(() => this.variantResult().description());\n /** @internal */\n readonly contentClasses = computed(() => this.variantResult().content());\n /** @internal */\n readonly actionClasses = computed(() => this.variantResult().action());\n /** @internal */\n readonly dismissClasses = computed(() => this.variantResult().dismiss());\n\n /** @internal */\n protected readonly roleAttr = computed(() =>\n this.severity() === 'error' ? 'alert' : 'status',\n );\n\n /** @internal */\n protected readonly ariaLiveAttr = computed(() =>\n this.severity() === 'error' ? 'assertive' : 'polite',\n );\n}\n","import { NgTemplateOutlet } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n type ComponentRef,\n Component,\n computed,\n ElementRef,\n Injector,\n TemplateRef,\n ViewEncapsulation,\n inject,\n signal,\n untracked,\n} from '@angular/core';\nimport {\n CdkPortalOutlet,\n type CdkPortalOutletAttachedRef,\n} from '@angular/cdk/portal';\nimport { LiveAnnouncer } from '@angular/cdk/a11y';\nimport { ToastActionDirective, ToastComponent } from './toast-component';\nimport {\n TW_TOAST_DATA,\n TW_TOAST_REF,\n type ToastPosition,\n type ToastTemplateContext,\n} from './toast-config';\nimport type { ToastRef } from './toast-ref';\n\ntype ToastKind = 'string' | 'template' | 'component';\n\ninterface Entry {\n ref: ToastRef;\n kind: ToastKind;\n enterClass: string;\n leaveClass: string;\n}\n\nconst POSITION_AXIS: Record<ToastPosition, 'right' | 'left' | 'top' | 'bottom'> = {\n 'top-right': 'right',\n 'bottom-right': 'right',\n 'top-left': 'left',\n 'bottom-left': 'left',\n 'top-center': 'top',\n 'bottom-center': 'bottom',\n};\n\nconst POSITION_HOST_CLASSES: Record<ToastPosition, string> = {\n 'top-right': 'items-end',\n 'bottom-right': 'items-end',\n 'top-left': 'items-start',\n 'bottom-left': 'items-start',\n 'top-center': 'items-center',\n 'bottom-center': 'items-center',\n};\n\nconst POSITION_ORDER_REVERSED: Record<ToastPosition, boolean> = {\n 'top-right': false,\n 'top-left': false,\n 'top-center': false,\n 'bottom-right': true,\n 'bottom-left': true,\n 'bottom-center': true,\n};\n\nconst SWIPE_DISMISS_FRACTION = 0.4;\nconst SWIPE_MAX_OPACITY_FADE = 0.6;\n\n/**\n * Internal flex-column host rendered inside each per-position CDK overlay.\n * Stacks visible toasts via `@for`, wires pause-on-interaction, Escape\n * dismissal, swipe gestures, and `LiveAnnouncer` announcements.\n *\n * @docs-private\n */\n@Component({\n selector: 'tw-toast-container',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [NgTemplateOutlet, CdkPortalOutlet, ToastComponent, ToastActionDirective],\n host: {\n role: 'region',\n '[class]': 'hostClasses()',\n '[attr.aria-label]': 'regionLabel()',\n '[attr.data-position]': 'position()',\n },\n template: `\n @for (entry of orderedEntries(); track entry.ref.id) {\n <!-- Toast entry wrapper; the projected <tw-toast> is the focusable affordance.\n This element only forwards pointer/focus events so the container can\n pause auto-dismiss while the user is interacting. -->\n <!-- eslint-disable-next-line @angular-eslint/template/interactive-supports-focus -->\n <div\n class=\"pointer-events-auto w-full max-w-sm\"\n [attr.data-toast-id]=\"entry.ref.id\"\n [style.transform]=\"entry.ref.swipeTransform() || null\"\n [style.opacity]=\"entry.ref.swipeOpacity() ?? null\"\n [style.touch-action]=\"'pan-y'\"\n [animate.enter]=\"entry.enterClass\"\n [animate.leave]=\"entry.ref.leaveAnimationOverride() ?? entry.leaveClass\"\n (pointerenter)=\"onPointerEnter(entry.ref)\"\n (pointerleave)=\"onPointerLeave(entry.ref)\"\n (focusin)=\"onFocusIn(entry.ref)\"\n (focusout)=\"onFocusOut(entry.ref, $event)\"\n (keydown.escape)=\"onEscape(entry.ref, $event)\"\n (pointerdown)=\"onSwipeStart(entry.ref, $event, swipeEl)\"\n #swipeEl\n >\n @switch (entry.kind) {\n @case ('string') {\n <tw-toast\n [severity]=\"entry.ref.severity()\"\n [dismissible]=\"entry.ref.dismissible()\"\n [icon]=\"entry.ref.icon()\"\n [ariaLabel]=\"entry.ref.ariaLabel()\"\n [class]=\"panelClassFor(entry.ref)\"\n (dismissed)=\"entry.ref._dismissWith('manual')\"\n (actionClicked)=\"entry.ref.triggerAction()\"\n >\n {{ asString(entry.ref.content()) }}\n @if (entry.ref.action(); as action) {\n <button twToastAction>{{ action.label }}</button>\n }\n </tw-toast>\n }\n @case ('template') {\n <tw-toast\n [severity]=\"entry.ref.severity()\"\n [dismissible]=\"entry.ref.dismissible()\"\n [icon]=\"entry.ref.icon()\"\n [ariaLabel]=\"entry.ref.ariaLabel()\"\n [class]=\"panelClassFor(entry.ref)\"\n (dismissed)=\"entry.ref._dismissWith('manual')\"\n (actionClicked)=\"entry.ref.triggerAction()\"\n >\n <ng-container\n [ngTemplateOutlet]=\"asTemplate(entry.ref.content())\"\n [ngTemplateOutletContext]=\"templateContext(entry.ref)\"\n />\n @if (entry.ref.action(); as action) {\n <button twToastAction>{{ action.label }}</button>\n }\n </tw-toast>\n }\n @case ('component') {\n <ng-template\n [cdkPortalOutlet]=\"entry.ref._portal\"\n (attached)=\"onPortalAttached(entry.ref, $event)\"\n />\n }\n }\n </div>\n }\n `,\n})\nexport class ToastContainerComponent {\n /** Per-position stacking anchor. Mutated from {@link ToastService} via `.instance.position.set(...)`. */\n readonly position = signal<ToastPosition>('bottom-right');\n\n /** Accessible label applied to the `role=\"region\"` host. Mutated from the service on init. */\n readonly regionLabel = signal<string>('Notifications');\n\n /**\n * Toasts currently assigned to this container. The service pushes toasts\n * into this signal; the container filters by state to drive `animate.leave`.\n */\n readonly visibleRefs = signal<readonly ToastRef[]>([]);\n\n private readonly injector = inject(Injector);\n private readonly liveAnnouncer = inject(LiveAnnouncer);\n private readonly host = inject(ElementRef<HTMLElement>);\n\n private readonly swipeSessions = new WeakMap<\n ToastRef,\n { pointerId: number; startX: number; width: number; active: boolean }\n >();\n\n private readonly entries = computed<readonly Entry[]>(() => {\n const pos = this.position();\n const axis = POSITION_AXIS[pos];\n const enter = `toast-enter-${axis}`;\n const leave = `toast-leave-${axis}`;\n const refs = this.visibleRefs().filter((ref) => {\n const s = ref.state();\n return s === 'entering' || s === 'visible' || s === 'paused';\n });\n return refs.map((ref) => ({\n ref,\n kind: resolveKind(ref.content()),\n enterClass: enter,\n leaveClass: leave,\n }));\n });\n\n protected readonly orderedEntries = computed(() => {\n const list = this.entries();\n return POSITION_ORDER_REVERSED[this.position()] ? [...list].reverse() : list;\n });\n\n protected readonly hostClasses = computed(() => {\n const base = 'flex flex-col gap-2 w-full max-w-sm';\n const align = POSITION_HOST_CLASSES[this.position()];\n return `${base} ${align}`;\n });\n\n /** @internal Called by the service right after attaching a new toast. Runs `LiveAnnouncer`. */\n _announceOpen(ref: ToastRef): void {\n const politeness = this.resolvePoliteness(ref);\n if (politeness === 'off') return;\n const msg = this.resolveAnnouncementText(ref);\n if (msg) this.liveAnnouncer.announce(msg, politeness);\n }\n\n /** @internal Called by the service when `ref.update()` fires — re-announces with the new severity / content. */\n _announceUpdate(ref: ToastRef): void {\n this._announceOpen(ref);\n }\n\n /** @internal Captures the component instance after `cdkPortalOutlet` attaches. */\n protected onPortalAttached(ref: ToastRef, attached: CdkPortalOutletAttachedRef): void {\n if (attached && 'instance' in attached) {\n ref.componentInstance = (attached as ComponentRef<unknown>).instance;\n }\n }\n\n /** @internal Injector factory for component-class content. Provides `TW_TOAST_DATA` + `TW_TOAST_REF`. */\n _createContentInjector(ref: ToastRef): Injector {\n return Injector.create({\n parent: this.injector,\n providers: [\n { provide: TW_TOAST_REF, useValue: ref },\n { provide: TW_TOAST_DATA, useValue: ref.data() },\n ],\n });\n }\n\n // ── Template helpers ──\n\n protected asString(content: unknown): string {\n return typeof content === 'string' ? content : '';\n }\n\n protected asTemplate(content: unknown): TemplateRef<ToastTemplateContext> | null {\n return content instanceof TemplateRef ? (content as TemplateRef<ToastTemplateContext>) : null;\n }\n\n protected templateContext(ref: ToastRef): ToastTemplateContext {\n return { $implicit: ref.data() as never, ref };\n }\n\n protected panelClassFor(ref: ToastRef): string {\n const raw = ref.config.panelClass;\n if (!raw) return '';\n return Array.isArray(raw) ? raw.join(' ') : raw;\n }\n\n // ── Interaction handlers ──\n\n protected onPointerEnter(ref: ToastRef): void {\n ref._setHovered(true);\n }\n\n protected onPointerLeave(ref: ToastRef): void {\n ref._setHovered(false);\n }\n\n protected onFocusIn(ref: ToastRef): void {\n ref._setFocused(true);\n }\n\n protected onFocusOut(ref: ToastRef, event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n const target = event.currentTarget as Node | null;\n if (related && target && target.contains(related)) return;\n ref._setFocused(false);\n }\n\n protected onEscape(ref: ToastRef, event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n ref._dismissWith('manual');\n }\n\n protected onSwipeStart(ref: ToastRef, event: PointerEvent, el: HTMLElement): void {\n if (!ref.config.swipeToDismiss) return;\n if (event.button !== 0) return;\n const target = event.target as HTMLElement | null;\n if (target?.closest('button, a, input, select, textarea, [role=\"button\"]')) return;\n\n const width = el.getBoundingClientRect().width;\n this.swipeSessions.set(ref, {\n pointerId: event.pointerId,\n startX: event.clientX,\n width,\n active: false,\n });\n el.setPointerCapture(event.pointerId);\n\n const onMove = (e: PointerEvent) => this.onSwipeMove(ref, e, el);\n const onUp = (e: PointerEvent) => this.onSwipeEnd(ref, e, el, onMove, onUp);\n el.addEventListener('pointermove', onMove);\n el.addEventListener('pointerup', onUp);\n el.addEventListener('pointercancel', onUp);\n }\n\n private onSwipeMove(ref: ToastRef, event: PointerEvent, _el: HTMLElement): void {\n const session = this.swipeSessions.get(ref);\n if (!session || event.pointerId !== session.pointerId) return;\n const dx = event.clientX - session.startX;\n if (!session.active && Math.abs(dx) < 6) return;\n session.active = true;\n ref.swipeTransform.set(`translate3d(${dx}px, 0, 0)`);\n const fade = 1 - Math.min(Math.abs(dx) / session.width, 1) * SWIPE_MAX_OPACITY_FADE;\n ref.swipeOpacity.set(fade);\n }\n\n private onSwipeEnd(\n ref: ToastRef,\n event: PointerEvent,\n el: HTMLElement,\n onMove: (e: PointerEvent) => void,\n onUp: (e: PointerEvent) => void,\n ): void {\n const session = this.swipeSessions.get(ref);\n el.removeEventListener('pointermove', onMove);\n el.removeEventListener('pointerup', onUp);\n el.removeEventListener('pointercancel', onUp);\n if (!session || event.pointerId !== session.pointerId) return;\n try {\n el.releasePointerCapture(session.pointerId);\n } catch {\n /* no-op */\n }\n this.swipeSessions.delete(ref);\n\n if (!session.active) return;\n const dx = event.clientX - session.startX;\n const threshold = session.width * SWIPE_DISMISS_FRACTION;\n const allowed = this.swipeDirectionAllowed(dx);\n if (Math.abs(dx) >= threshold && allowed) {\n untracked(() => {\n ref.swipeTransform.set(`translate3d(${Math.sign(dx) * session.width * 1.2}px, 0, 0)`);\n ref.swipeOpacity.set(0);\n ref.leaveAnimationOverride.set('fade-out');\n });\n ref._dismissWith('swipe');\n } else {\n ref.swipeTransform.set(null);\n ref.swipeOpacity.set(null);\n }\n }\n\n private swipeDirectionAllowed(dx: number): boolean {\n const pos = this.position();\n if (pos === 'top-right' || pos === 'bottom-right') return dx > 0;\n if (pos === 'top-left' || pos === 'bottom-left') return dx < 0;\n return true;\n }\n\n private resolvePoliteness(ref: ToastRef): 'polite' | 'assertive' | 'off' {\n if (ref.config.politeness) return ref.config.politeness;\n return ref.severity() === 'error' ? 'assertive' : 'polite';\n }\n\n private resolveAnnouncementText(ref: ToastRef): string {\n const explicit = ref.ariaLabel();\n if (explicit) return explicit;\n const content = ref.content();\n if (typeof content === 'string') return content;\n const host = this.host.nativeElement.querySelector(\n `[data-toast-id=\"${ref.id}\"]`,\n ) as HTMLElement | null;\n if (host) return host.textContent?.trim() ?? '';\n return this.host.nativeElement.textContent?.trim() ?? '';\n }\n}\n\nfunction resolveKind(content: unknown): ToastKind {\n if (typeof content === 'string') return 'string';\n if (content instanceof TemplateRef) return 'template';\n return 'component';\n}\n\n","import { signal, type Signal, type WritableSignal } from '@angular/core';\nimport type { Portal } from '@angular/cdk/portal';\nimport { type Observable, ReplaySubject, Subject } from 'rxjs';\nimport type {\n ToastAction,\n ToastConfig,\n ToastContent,\n ToastDismissReason,\n ToastDismissal,\n ToastSeverity,\n ToastState,\n} from './toast-config';\n\n/** Duration (ms) of the toast enter / leave animation. Must match `_base.css` toast-slide keyframes. */\nexport const TOAST_ANIMATION_DURATION = 150;\n\n/** Padding added to animation fallback timers to guarantee cleanup if the CSS event is swallowed. */\nexport const TOAST_ANIMATION_FALLBACK_PADDING = 50;\n\n/** Patch accepted by {@link ToastRef.update}. Mirrors the subset of `ToastConfig` that is safe to mutate live. */\nexport interface ToastUpdatePatch {\n /** New severity — updates color, default icon, and (for `'error'`) live-region politeness. */\n severity?: ToastSeverity;\n /** New auto-dismiss duration in ms. Restarts the timer if the toast is visible. `0` disables auto-dismiss. */\n duration?: number;\n /** Replace or clear the action button. Pass `null` to remove. */\n action?: ToastAction | null;\n /** Override the icon slot. */\n icon?: string | false | undefined;\n /** Replace the `TW_TOAST_DATA` payload. */\n data?: unknown;\n /** Replace the aria-label applied to the toast wrapper. */\n ariaLabel?: string;\n /** Replace the toast's content (string, template, or component). */\n content?: ToastContent;\n /** Whether the close button is shown. */\n dismissible?: boolean;\n}\n\n/**\n * Reference to a toast opened via {@link ToastService}. Use to dismiss the\n * toast, pause / resume its auto-dismiss timer, or observe its lifecycle.\n *\n * The service returns a ref synchronously from every open method; the toast\n * itself is attached asynchronously inside the CDK overlay.\n */\nexport class ToastRef<C = unknown, R = unknown> {\n /** Unique id. Generated if `config.id` was not provided. */\n readonly id: string;\n\n /** Instance of the component rendered inside the toast (only for component-class content). */\n componentInstance: C | null = null;\n\n /** Resolved static config for this toast (defaults merged, severity shorthand applied). */\n readonly config: Readonly<ToastConfig<unknown, R>>;\n\n /** Reactive lifecycle state. */\n readonly state: Signal<ToastState>;\n\n /** Reactive severity — may change after `update()` (used by the `promise()` helper). */\n readonly severity: Signal<ToastSeverity>;\n\n /** Reactive dismissibility. */\n readonly dismissible: Signal<boolean>;\n\n /** Reactive icon override. */\n readonly icon: Signal<string | false | undefined>;\n\n /** Reactive content (the source of truth for what gets rendered). */\n readonly content: Signal<ToastContent>;\n\n /** Reactive action button configuration. */\n readonly action: Signal<ToastAction | undefined>;\n\n /** Reactive accessible label. */\n readonly ariaLabel: Signal<string | undefined>;\n\n /** Reactive data payload — re-read by the container to update `TW_TOAST_DATA`. */\n readonly data: Signal<unknown>;\n\n /** @internal Reactive \"transient\" class applied by swipe gestures (e.g. `translate3d(...)`). */\n readonly swipeTransform = signal<string | null>(null);\n\n /** @internal Reactive opacity applied during swipe gestures. */\n readonly swipeOpacity = signal<number | null>(null);\n\n /** @internal Leave-animation class override. When non-null, container uses this instead of the position default. */\n readonly leaveAnimationOverride = signal<string | null>(null);\n\n /** @internal Portal for component-class content. Set by the service; null for string / template content. */\n _portal: Portal<unknown> | null = null;\n\n /** @internal True while the pointer hovers this toast. */\n _hovered = false;\n\n /** @internal True while focus is within this toast. */\n _focused = false;\n\n /** @internal Set by the service so the ref can reach the CDK-owned OverlayRef if it needs to. */\n _overlayPanelElement: HTMLElement | null = null;\n\n private readonly stateSignal = signal<ToastState>('entering');\n private readonly severitySignal: WritableSignal<ToastSeverity>;\n private readonly dismissibleSignal: WritableSignal<boolean>;\n private readonly iconSignal: WritableSignal<string | false | undefined>;\n private readonly contentSignal: WritableSignal<ToastContent>;\n private readonly actionSignal: WritableSignal<ToastAction | undefined>;\n private readonly ariaLabelSignal: WritableSignal<string | undefined>;\n private readonly dataSignal: WritableSignal<unknown>;\n\n private readonly afterOpenedSubject = new ReplaySubject<void>(1);\n private readonly beforeDismissedSubject = new ReplaySubject<R | undefined>(1);\n private readonly afterDismissedSubject = new ReplaySubject<ToastDismissal<R>>(1);\n private readonly updatedSubject = new Subject<ToastUpdatePatch>();\n\n private dismissReason: ToastDismissReason = 'programmatic';\n private dismissResult: R | undefined;\n private autoDismissTimer: ReturnType<typeof setTimeout> | null = null;\n private autoDismissStartedAt = 0;\n private autoDismissRemaining = 0;\n private paused = false;\n private enterTimer: ReturnType<typeof setTimeout> | null = null;\n private leaveTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(\n id: string,\n content: ToastContent,\n config: ToastConfig<unknown, R>,\n private readonly dismissCallback: (ref: ToastRef) => void,\n ) {\n this.id = id;\n this.config = config;\n this.severitySignal = signal(config.severity ?? 'info');\n this.dismissibleSignal = signal(config.dismissible ?? true);\n this.iconSignal = signal<string | false | undefined>(\n typeof config.icon === 'string' || config.icon === false ? config.icon : undefined,\n );\n this.contentSignal = signal(content);\n this.actionSignal = signal(config.action);\n this.ariaLabelSignal = signal(config.ariaLabel);\n this.dataSignal = signal(config.data ?? null);\n\n this.state = this.stateSignal.asReadonly();\n this.severity = this.severitySignal.asReadonly();\n this.dismissible = this.dismissibleSignal.asReadonly();\n this.icon = this.iconSignal.asReadonly();\n this.content = this.contentSignal.asReadonly();\n this.action = this.actionSignal.asReadonly();\n this.ariaLabel = this.ariaLabelSignal.asReadonly();\n this.data = this.dataSignal.asReadonly();\n\n this.autoDismissRemaining = config.duration ?? 0;\n\n this.enterTimer = setTimeout(\n () => this._markVisible(),\n TOAST_ANIMATION_DURATION + TOAST_ANIMATION_FALLBACK_PADDING,\n );\n }\n\n /**\n * Dismiss the toast programmatically. The leave animation plays before the\n * element is removed and subscribers are notified. Safe to call multiple times.\n */\n dismiss(result?: R): void {\n this._dismissWith('programmatic', result);\n }\n\n /** Pause the auto-dismiss timer (if any). Called automatically on hover / focus when `pauseOnInteraction` is true. */\n pause(): void {\n if (this.paused) return;\n this.paused = true;\n if (this.autoDismissTimer !== null) {\n const elapsed = Date.now() - this.autoDismissStartedAt;\n this.autoDismissRemaining = Math.max(0, this.autoDismissRemaining - elapsed);\n clearTimeout(this.autoDismissTimer);\n this.autoDismissTimer = null;\n }\n const current = this.stateSignal();\n if (current === 'visible') this.stateSignal.set('paused');\n }\n\n /** Resume the auto-dismiss timer with the remaining time. */\n resume(): void {\n if (!this.paused) return;\n this.paused = false;\n if (this.stateSignal() === 'paused') this.stateSignal.set('visible');\n if (this.config.duration && this.config.duration > 0) {\n if (this.autoDismissRemaining <= 0) {\n this._dismissWith('timeout');\n return;\n }\n this._startAutoDismissTimer();\n }\n }\n\n /**\n * @internal Update the hover state. When `pauseOnInteraction` is set and\n * either hover or focus is active, the auto-dismiss timer is paused.\n */\n _setHovered(hovered: boolean): void {\n this._hovered = hovered;\n this._syncInteractionPause();\n }\n\n /** @internal Update the focus-within state. See `_setHovered`. */\n _setFocused(focused: boolean): void {\n this._focused = focused;\n this._syncInteractionPause();\n }\n\n private _syncInteractionPause(): void {\n if (!this.config.pauseOnInteraction) return;\n if (this._hovered || this._focused) {\n this.pause();\n } else {\n this.resume();\n }\n }\n\n /** Invoke the configured action handler (or dismiss with reason `'action'` if none is set). */\n triggerAction(): void {\n const action = this.actionSignal();\n if (!action) return;\n if (action.handler) {\n action.handler(this as unknown as ToastRef);\n } else {\n this._dismissWith('action');\n }\n }\n\n /** Mutate the live toast in place. Used by the `promise()` helper to swap loading → success / error. */\n update(patch: ToastUpdatePatch): void {\n const currentState = this.stateSignal();\n if (currentState === 'dismissing' || currentState === 'dismissed') return;\n\n if (patch.severity !== undefined) this.severitySignal.set(patch.severity);\n if (patch.dismissible !== undefined) this.dismissibleSignal.set(patch.dismissible);\n if (patch.icon !== undefined) this.iconSignal.set(patch.icon);\n if (patch.content !== undefined) this.contentSignal.set(patch.content);\n if (patch.action !== undefined) this.actionSignal.set(patch.action ?? undefined);\n if (patch.ariaLabel !== undefined) this.ariaLabelSignal.set(patch.ariaLabel);\n if (patch.data !== undefined) this.dataSignal.set(patch.data);\n\n if (patch.duration !== undefined) {\n (this.config as { duration?: number }).duration = patch.duration;\n this.autoDismissRemaining = patch.duration;\n if (this.autoDismissTimer !== null) {\n clearTimeout(this.autoDismissTimer);\n this.autoDismissTimer = null;\n }\n if (!this.paused && (currentState === 'visible' || currentState === 'paused')) {\n this._startAutoDismissTimer();\n }\n }\n\n this.updatedSubject.next(patch);\n }\n\n /** Observable that emits once after the enter animation completes. */\n afterOpened(): Observable<void> {\n return this.afterOpenedSubject.asObservable();\n }\n\n /** Observable that emits once when the dismiss sequence starts. */\n beforeDismissed(): Observable<R | undefined> {\n return this.beforeDismissedSubject.asObservable();\n }\n\n /** Observable that emits once after the leave animation completes and the ref is cleaned up. */\n afterDismissed(): Observable<ToastDismissal<R>> {\n return this.afterDismissedSubject.asObservable();\n }\n\n /** @internal Observable of `update()` calls. The container subscribes to re-announce to `LiveAnnouncer`. */\n _updates(): Observable<ToastUpdatePatch> {\n return this.updatedSubject.asObservable();\n }\n\n /** @internal Called by the service when the max-visible cap is exceeded. */\n _dismissAsMaxExceeded(): void {\n this._dismissWith('max-exceeded');\n }\n\n /** @internal Start the dismiss sequence with the given reason. */\n _dismissWith(reason: ToastDismissReason, result?: R): void {\n const currentState = this.stateSignal();\n if (currentState === 'dismissing' || currentState === 'dismissed') return;\n\n this.dismissReason = reason;\n this.dismissResult = result;\n this.stateSignal.set('dismissing');\n\n if (this.autoDismissTimer !== null) {\n clearTimeout(this.autoDismissTimer);\n this.autoDismissTimer = null;\n }\n if (this.enterTimer !== null) {\n clearTimeout(this.enterTimer);\n this.enterTimer = null;\n }\n\n this.beforeDismissedSubject.next(result);\n this.beforeDismissedSubject.complete();\n\n this.leaveTimer = setTimeout(\n () => this._finishDismiss(),\n TOAST_ANIMATION_DURATION + TOAST_ANIMATION_FALLBACK_PADDING,\n );\n }\n\n /** @internal Finalise dismissal — clears timers, emits `afterDismissed`, and hands control back to the service. */\n _finishDismiss(): void {\n if (this.stateSignal() === 'dismissed') return;\n this.stateSignal.set('dismissed');\n\n if (this.leaveTimer !== null) {\n clearTimeout(this.leaveTimer);\n this.leaveTimer = null;\n }\n\n const dismissal: ToastDismissal<R> = {\n reason: this.dismissReason,\n result: this.dismissResult,\n };\n this.afterDismissedSubject.next(dismissal);\n this.afterDismissedSubject.complete();\n this.updatedSubject.complete();\n\n this.dismissCallback(this as unknown as ToastRef);\n }\n\n private _markVisible(): void {\n if (this.enterTimer !== null) {\n clearTimeout(this.enterTimer);\n this.enterTimer = null;\n }\n const current = this.stateSignal();\n if (current !== 'entering') return;\n this.stateSignal.set('visible');\n this.afterOpenedSubject.next();\n this.afterOpenedSubject.complete();\n if (this.config.duration && this.config.duration > 0 && !this.paused) {\n this._startAutoDismissTimer();\n }\n }\n\n private _startAutoDismissTimer(): void {\n if (this.autoDismissRemaining <= 0) return;\n if (this.autoDismissTimer !== null) clearTimeout(this.autoDismissTimer);\n this.autoDismissStartedAt = Date.now();\n this.autoDismissTimer = setTimeout(\n () => this._dismissWith('timeout'),\n this.autoDismissRemaining,\n );\n }\n}\n","import {\n type ComponentRef,\n type EnvironmentProviders,\n Injectable,\n Injector,\n type OnDestroy,\n type Provider,\n type Signal,\n TemplateRef,\n type Type,\n inject,\n makeEnvironmentProviders,\n signal,\n} from '@angular/core';\nimport {\n createGlobalPositionStrategy,\n Overlay,\n type OverlayRef,\n} from '@angular/cdk/overlay';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { type Observable, Subject, defer, startWith } from 'rxjs';\nimport {\n TW_TOAST_DATA,\n TW_TOAST_DEFAULT_OPTIONS,\n TW_TOAST_REF,\n ToastConfig,\n type ToastContent,\n type ToastPosition,\n type ToastSeverity,\n type ToastTemplateContext,\n} from './toast-config';\nimport { ToastContainerComponent } from './toast-container';\nimport { ToastRef } from './toast-ref';\n\nconst OVERLAY_EDGE_OFFSET = '1rem';\n\ninterface PositionOverlay {\n overlayRef: OverlayRef;\n containerRef: ComponentRef<ToastContainerComponent>;\n}\n\ninterface PromiseMessages<T> {\n loading: string;\n success: string | ((value: T) => string);\n error: string | ((err: unknown) => string);\n}\n\nlet nextToastId = 0;\n\nfunction generateId(): string {\n return `tw-toast-${++nextToastId}`;\n}\n\n/**\n * Opens Tailwind-styled toasts / snackbars inside CDK overlays. One overlay is\n * created per `ToastPosition` on first use and reused for the lifetime of the\n * service; toasts stack vertically inside their position container.\n *\n * Not `providedIn: 'root'` — register via {@link provideToast}.\n */\n@Injectable()\nexport class ToastService implements OnDestroy {\n private readonly overlay = inject(Overlay);\n private readonly injector = inject(Injector);\n private readonly defaultOptions =\n inject(TW_TOAST_DEFAULT_OPTIONS, { optional: true }) ?? {};\n private readonly parent = inject(ToastService, { optional: true, skipSelf: true });\n\n private readonly positionOverlays = new Map<ToastPosition, PositionOverlay>();\n private readonly activeRefsAtThisLevel = signal<readonly ToastRef[]>([]);\n private readonly afterOpenedSubject = new Subject<ToastRef>();\n private readonly afterAllDismissedSubject = new Subject<void>();\n\n /** Reactive list of every toast that has not yet fully dismissed. */\n readonly activeToasts: Signal<readonly ToastRef[]> = this.parent\n ? this.parent.activeToasts\n : this.activeRefsAtThisLevel.asReadonly();\n\n /** Emits every time a new toast is opened. */\n readonly afterOpened: Observable<ToastRef> = this.parent\n ? this.parent.afterOpened\n : this.afterOpenedSubject.asObservable();\n\n /** Emits when the active-toasts list transitions back to empty. Emits immediately on subscribe if none are open. */\n readonly afterAllDismissed: Observable<void> = defer(() =>\n this.activeToasts().length\n ? this.getAfterAllDismissedSource()\n : this.getAfterAllDismissedSource().pipe(startWith(undefined as void)),\n );\n\n /**\n * Open a toast. Content may be a string (rendered inside the default\n * `ToastComponent`), a `TemplateRef` (rendered via `TemplatePortal`), or a\n * component class (rendered via `ComponentPortal` with `TW_TOAST_REF` +\n * `TW_TOAST_DATA` injected).\n */\n show<R = void, D = unknown>(\n content: ToastContent,\n config?: ToastConfig<D, R>,\n ): ToastRef<unknown, R> {\n const merged = this.resolveConfig<D, R>(config);\n return this.openInternal<R>(content, merged);\n }\n\n /** Shorthand for `show(message, { severity: 'success', ... })`. */\n success<R = void>(message: string, config?: ToastConfig<unknown, R>): ToastRef<unknown, R> {\n return this.openWithSeverity('success', message, config);\n }\n\n /** Shorthand for `show(message, { severity: 'error', politeness: 'assertive', ... })`. */\n error<R = void>(message: string, config?: ToastConfig<unknown, R>): ToastRef<unknown, R> {\n return this.openWithSeverity('error', message, config, 'assertive');\n }\n\n /** Shorthand for `show(message, { severity: 'warning', ... })`. */\n warning<R = void>(message: string, config?: ToastConfig<unknown, R>): ToastRef<unknown, R> {\n return this.openWithSeverity('warning', message, config);\n }\n\n /** Shorthand for `show(message, { severity: 'info', ... })`. */\n info<R = void>(message: string, config?: ToastConfig<unknown, R>): ToastRef<unknown, R> {\n return this.openWithSeverity('info', message, config);\n }\n\n /**\n * Show a loading toast, then swap it to success / error when the promise\n * settles. The same ref is returned and re-used across all three states.\n * The loading toast is pinned (duration forced to 0, dismissible forced to\n * false) until the promise resolves.\n */\n promise<T, R = void>(\n promise: Promise<T>,\n messages: PromiseMessages<T>,\n config?: ToastConfig<unknown, R>,\n ): ToastRef<unknown, R> {\n const resolvedDuration = config?.duration ?? this.defaultOptions.duration ?? 5000;\n const ref = this.show<R>(messages.loading, {\n ...(config as ToastConfig<unknown, R>),\n severity: 'neutral',\n duration: 0,\n dismissible: false,\n });\n\n promise.then(\n (value) => {\n if (ref.state() === 'dismissed' || ref.state() === 'dismissing') return;\n const msg = typeof messages.success === 'function' ? messages.success(value) : messages.success;\n ref.update({\n severity: 'success',\n content: msg,\n duration: resolvedDuration,\n dismissible: config?.dismissible ?? true,\n });\n this.announceUpdate(ref);\n },\n (err) => {\n if (ref.state() === 'dismissed' || ref.state() === 'dismissing') return;\n const msg = typeof messages.error === 'function' ? messages.error(err) : messages.error;\n ref.update({\n severity: 'error',\n content: msg,\n duration: resolvedDuration,\n dismissible: config?.dismissible ?? true,\n });\n this.announceUpdate(ref);\n },\n );\n\n return ref;\n }\n\n /** Dismiss a toast by id. No-op if no matching toast is active. */\n dismiss(id: string): void {\n const match = this.activeToasts().find((ref) => ref.id === id);\n if (match) match.dismiss();\n }\n\n /** Dismiss every active toast across every position. */\n dismissAll(): void {\n const refs = [...this.activeToasts()];\n for (let i = refs.length - 1; i >= 0; i--) refs[i].dismiss();\n }\n\n /** Look up an active toast by id. */\n getToastById<R = unknown>(id: string): ToastRef<unknown, R> | undefined {\n return this.activeToasts().find((ref) => ref.id === id) as\n | ToastRef<unknown, R>\n | undefined;\n }\n\n ngOnDestroy(): void {\n const refs = [...this.activeRefsAtThisLevel()];\n for (let i = refs.length - 1; i >= 0; i--) refs[i]._finishDismiss();\n for (const { overlayRef } of this.positionOverlays.values()) {\n overlayRef.dispose();\n }\n this.positionOverlays.clear();\n this.afterOpenedSubject.complete();\n this.afterAllDismissedSubject.complete();\n }\n\n private openWithSeverity<R>(\n severity: ToastSeverity,\n message: string,\n config?: ToastConfig<unknown, R>,\n forcedPoliteness?: 'polite' | 'assertive' | 'off',\n ): ToastRef<unknown, R> {\n const merged = this.resolveConfig<unknown, R>(config);\n merged.severity = severity;\n if (forcedPoliteness && !config?.politeness) merged.politeness = forcedPoliteness;\n return this.openInternal<R>(message, merged);\n }\n\n private openInternal<R>(\n content: ToastContent,\n config: ToastConfig<unknown, R>,\n ): ToastRef<unknown, R> {\n const id = config.id ?? generateId();\n config.id = id;\n\n const ref = new ToastRef<unknown, R>(id, content, config, (dismissed) =>\n this.handleDismissed(dismissed),\n );\n\n if (isComponentConstructor(content)) {\n const injector = this.getContainerForPosition(\n config.position!,\n ).containerRef.instance._createContentInjector(ref as ToastRef<unknown, unknown>);\n ref._portal = new ComponentPortal(content, null, injector);\n }\n\n this.enforceMaxVisible(config.position!, config.maxVisible ?? 5);\n this.registerOpen(ref);\n this.attachToContainer(ref, config.position!);\n this.announceOpen(ref);\n return ref;\n }\n\n private enforceMaxVisible(position: ToastPosition, max: number): void {\n if (max <= 0) return;\n const atPosition = this.activeToasts().filter(\n (ref) =>\n (ref.config.position ?? 'bottom-right') === position &&\n ref.state() !== 'dismissing' &&\n ref.state() !== 'dismissed',\n );\n while (atPosition.length >= max) {\n const oldest = atPosition.shift();\n if (!oldest) break;\n oldest._dismissAsMaxExceeded();\n }\n }\n\n private registerOpen<R>(ref: ToastRef<unknown, R>): void {\n const scope = this.parent ?? this;\n const anyRef = ref as ToastRef<unknown, unknown>;\n scope.activeRefsAtThisLevel.update((list) => [...list, anyRef]);\n scope.afterOpenedSubject.next(anyRef);\n }\n\n private handleDismissed(ref: ToastRef): void {\n const scope = this.parent ?? this;\n scope.activeRefsAtThisLevel.update((list) => list.filter((r) => r !== ref));\n\n const position = ref.config.position ?? 'bottom-right';\n const entry = this.positionOverlays.get(position);\n if (entry) {\n const instance = entry.containerRef.instance;\n instance.visibleRefs.update((list) => list.filter((r) => r !== ref));\n }\n\n if (scope.activeRefsAtThisLevel().length === 0) {\n scope.afterAllDismissedSubject.next();\n }\n }\n\n private attachToContainer<R>(ref: ToastRef<unknown, R>, position: ToastPosition): void {\n const entry = this.getContainerForPosition(position);\n const instance = entry.containerRef.instance;\n const anyRef = ref as ToastRef<unknown, unknown>;\n instance.visibleRefs.update((list) => [...list, anyRef]);\n ref._overlayPanelElement = entry.overlayRef.overlayElement;\n }\n\n private announceOpen<R>(ref: ToastRef<unknown, R>): void {\n const entry = this.positionOverlays.get(ref.config.position ?? 'bottom-right');\n entry?.containerRef.instance._announceOpen(ref as ToastRef<unknown, unknown>);\n }\n\n private announceUpdate<R>(ref: ToastRef<unknown, R>): void {\n const entry = this.positionOverlays.get(ref.config.position ?? 'bottom-right');\n entry?.containerRef.instance._announceUpdate(ref as ToastRef<unknown, unknown>);\n }\n\n private getContainerForPosition(position: ToastPosition): PositionOverlay {\n const existing = this.positionOverlays.get(position);\n if (existing) return existing;\n\n const overlayRef = this.overlay.create({\n positionStrategy: this.buildPositionStrategy(position),\n scrollStrategy: this.overlay.scrollStrategies.noop(),\n hasBackdrop: false,\n panelClass: ['tw-toast-overlay', `tw-toast-overlay-${position}`],\n });\n\n const containerPortal = new ComponentPortal(ToastContainerComponent, null, this.injector);\n const containerRef = overlayRef.attach(containerPortal);\n containerRef.instance.position.set(position);\n containerRef.instance.regionLabel.set(\n this.defaultOptions.regionAriaLabel ?? 'Notifications',\n );\n\n const entry: PositionOverlay = { overlayRef, containerRef };\n this.positionOverlays.set(position, entry);\n return entry;\n }\n\n private buildPositionStrategy(position: ToastPosition) {\n const strategy = createGlobalPositionStrategy(this.injector);\n switch (position) {\n case 'top-right':\n strategy.top(OVERLAY_EDGE_OFFSET).right(OVERLAY_EDGE_OFFSET);\n break;\n case 'top-left':\n strategy.top(OVERLAY_EDGE_OFFSET).left(OVERLAY_EDGE_OFFSET);\n break;\n case 'top-center':\n strategy.top(OVERLAY_EDGE_OFFSET).centerHorizontally();\n break;\n case 'bottom-right':\n strategy.bottom(OVERLAY_EDGE_OFFSET).right(OVERLAY_EDGE_OFFSET);\n break;\n case 'bottom-left':\n strategy.bottom(OVERLAY_EDGE_OFFSET).left(OVERLAY_EDGE_OFFSET);\n break;\n case 'bottom-center':\n strategy.bottom(OVERLAY_EDGE_OFFSET).centerHorizontally();\n break;\n }\n return strategy;\n }\n\n private resolveConfig<D, R>(config: ToastConfig<D, R> | undefined): ToastConfig<D, R> {\n const merged = new ToastConfig<D, R>();\n Object.assign(merged, this.defaultOptions, config);\n return merged;\n }\n\n private getAfterAllDismissedSource(): Subject<void> {\n return this.parent ? this.parent.getAfterAllDismissedSource() : this.afterAllDismissedSubject;\n }\n}\n\nfunction isComponentConstructor(value: unknown): value is Type<unknown> {\n return typeof value === 'function' && !(value instanceof TemplateRef);\n}\n\n/**\n * Registers {@link ToastService} for dependency injection and installs optional\n * application-wide defaults.\n *\n * @example\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideToast({ position: 'top-right', duration: 4000 })]\n * });\n * ```\n */\nexport function provideToast(\n defaultOptions?: Partial<ToastConfig>,\n): EnvironmentProviders {\n const providers: Provider[] = [ToastService];\n if (defaultOptions) {\n providers.push({ provide: TW_TOAST_DEFAULT_OPTIONS, useValue: defaultOptions });\n }\n return makeEnvironmentProviders(providers);\n}\n\n/** Re-exported helpers so `inject(TW_TOAST_DATA)` / `inject(TW_TOAST_REF)` work from component content. */\nexport { TW_TOAST_DATA, TW_TOAST_REF };\n\n// Re-exports to keep the barrel tidy.\nexport type { ToastContent, ToastTemplateContext };\n\nexport const ToastInternals = {\n /** @internal Reset id counter for tests. */\n _resetIdForTesting(): void {\n nextToastId = 0;\n },\n};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cdevhub-ngx-tw-toast.mjs","sources":["../../../projects/ngx-tw/toast/toast-config.ts","../../../projects/ngx-tw/toast/toast-ref.ts","../../../projects/ngx-tw/toast/toast.ts","../../../projects/ngx-tw/toast/toast-component.ts","../../../projects/ngx-tw/toast/cdevhub-ngx-tw-toast.ts"],"sourcesContent":["import { InjectionToken, type TemplateRef, type Type } from '@angular/core';\nimport type { ToastRef } from './toast-ref';\n\n/** Severity variant — drives color palette, default icon, and live-region politeness. */\nexport type ToastSeverity = 'info' | 'success' | 'warning' | 'error' | 'neutral';\n\n/** Screen anchor for a stack of toasts. One CDK overlay is created per position on first use. */\nexport type ToastPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\n/** Lifecycle state of a single toast. */\nexport type ToastState = 'entering' | 'visible' | 'paused' | 'dismissing' | 'dismissed';\n\n/** Reason a toast was dismissed. */\nexport type ToastDismissReason =\n | 'action'\n | 'timeout'\n | 'swipe'\n | 'manual'\n | 'programmatic'\n | 'max-exceeded';\n\n/** Payload forwarded to `afterDismissed()` subscribers. */\nexport interface ToastDismissal<R = unknown> {\n /** Why the toast closed. */\n reason: ToastDismissReason;\n /** Optional value forwarded from `ref.dismiss(result)`. */\n result?: R;\n}\n\n/** Context object handed to `TemplateRef` content (`let-data let-ref=\"ref\"`). */\nexport interface ToastTemplateContext<T = unknown> {\n /** Data value from `config.data`, unwrapped as the template's `$implicit`. */\n $implicit: T;\n /** Reference to the toast itself, bound as `let-ref=\"ref\"`. */\n ref: ToastRef<unknown, unknown>;\n}\n\n/** Action button configuration. When `handler` is omitted the button dismisses the toast with reason `'action'`. */\nexport interface ToastAction {\n /** Visible label of the action button. */\n label: string;\n /** Optional callback invoked when the action is clicked or `ref.triggerAction()` is called. */\n handler?: (ref: ToastRef) => void;\n}\n\n/**\n * Per-call configuration for {@link ToastService} methods. Also used as the\n * payload of {@link TW_TOAST_DEFAULT_OPTIONS} for app-wide defaults.\n */\n// `R` is a phantom result-type kept for parity with `ToastRef<D, R>` / service\n// generics — consumers pass it through `ToastConfig<D, R>` so the resulting\n// `ToastRef.afterClosed()` is correctly typed.\nexport class ToastConfig<D = unknown, _R = unknown> {\n /** Severity of the toast. Defaults to `'info'`. */\n severity?: ToastSeverity = 'info';\n\n /** Screen position of the toast stack. Defaults to `'bottom-right'`. */\n position?: ToastPosition = 'bottom-right';\n\n /** Auto-dismiss duration in ms. `0` disables auto-dismiss. Defaults to `5000`. */\n duration?: number = 5000;\n\n // Default true: toasts must offer an escape hatch — sticky / long-duration toasts\n // otherwise trap users; opt-out only for ephemeral progress markers paired with `duration`.\n /** When true, renders a close (×) button. Defaults to `true`. */\n dismissible?: boolean = true;\n\n /**\n * Live-region politeness. When omitted, resolves to `'assertive'` for\n * `severity: 'error'` and `'polite'` otherwise. Pass `'off'` to skip\n * `LiveAnnouncer` entirely.\n */\n politeness?: 'polite' | 'assertive' | 'off';\n\n /** Action button configuration. Omit to hide the action button. */\n action?: ToastAction;\n\n /** Arbitrary data provided to component / template content via `TW_TOAST_DATA`. */\n data?: D | null = null;\n\n /** Extra CSS classes merged onto the toast panel root via `twMerge`. */\n panelClass?: string | string[];\n\n /**\n * Icon override. Pass a string (treated as text glyph / icon name) or\n * `false` to hide the icon. When omitted the severity-default icon is used.\n *\n * Note: To render arbitrary icon markup, pass a `TemplateRef` to `show()`\n * itself (the whole toast is a custom template) — the icon slot accepts only\n * primitives for the string-content path.\n */\n icon?: string | false;\n\n // Default true: matches Material/Radix/Sonner conventions — prevents a toast from\n // disappearing mid-read; opt-out only for fully ambient progress indicators.\n /** When true, pause the auto-dismiss timer while the toast is hovered or holds focus. Defaults to `true`. */\n pauseOnInteraction?: boolean = true;\n\n // Default true: matches mobile-platform expectations and gives non-precise pointers\n // (touch) an easy dismiss gesture; opt-out only if the gesture conflicts with content.\n /** Enable horizontal swipe-to-dismiss via pointer gestures. Defaults to `true`. */\n swipeToDismiss?: boolean = true;\n\n /**\n * Maximum visible toasts *per position*. When exceeded, the oldest toast in\n * that position dismisses with reason `'max-exceeded'`. Defaults to `5`.\n */\n maxVisible?: number = 5;\n\n /** Explicit id. When omitted a unique id is generated. */\n id?: string;\n\n /** Accessible label applied to the toast element. When omitted, text content is used. */\n ariaLabel?: string;\n\n /** Accessible label applied to the per-position `role=\"region\"` container. Defaults to `'Notifications'`. */\n regionAriaLabel?: string;\n}\n\n/** Injection token providing `config.data` to projected component / template content. */\nexport const TW_TOAST_DATA = new InjectionToken<unknown>('TW_TOAST_DATA');\n\n/** Injection token providing the owning {@link ToastRef} to projected component content. */\nexport const TW_TOAST_REF = new InjectionToken<ToastRef>('TW_TOAST_REF');\n\n/** Injection token carrying application-wide toast defaults. Set via `provideToast(defaults)`. */\nexport const TW_TOAST_DEFAULT_OPTIONS = new InjectionToken<Partial<ToastConfig>>(\n 'TW_TOAST_DEFAULT_OPTIONS',\n);\n\n/** Accepted content forms for `ToastService.show()`. */\nexport type ToastContent = string | TemplateRef<ToastTemplateContext> | Type<unknown>;\n","import { signal, type Signal, type WritableSignal } from '@angular/core';\nimport type { Portal } from '@angular/cdk/portal';\nimport { type Observable, ReplaySubject, Subject } from 'rxjs';\nimport type {\n ToastAction,\n ToastConfig,\n ToastContent,\n ToastDismissReason,\n ToastDismissal,\n ToastSeverity,\n ToastState,\n} from './toast-config';\n\n/** Duration (ms) of the toast enter / leave animation. Must match `_base.css` toast-slide keyframes. */\nexport const TOAST_ANIMATION_DURATION = 150;\n\n/** Padding added to animation fallback timers to guarantee cleanup if the CSS event is swallowed. */\nexport const TOAST_ANIMATION_FALLBACK_PADDING = 50;\n\n/** Patch accepted by {@link ToastRef.update}. Mirrors the subset of `ToastConfig` that is safe to mutate live. */\nexport interface ToastUpdatePatch {\n /** New severity — updates color, default icon, and (for `'error'`) live-region politeness. */\n severity?: ToastSeverity;\n /** New auto-dismiss duration in ms. Restarts the timer if the toast is visible. `0` disables auto-dismiss. */\n duration?: number;\n /** Replace or clear the action button. Pass `null` to remove. */\n action?: ToastAction | null;\n /** Override the icon slot. */\n icon?: string | false | undefined;\n /** Replace the `TW_TOAST_DATA` payload. */\n data?: unknown;\n /** Replace the aria-label applied to the toast wrapper. */\n ariaLabel?: string;\n /** Replace the toast's content (string, template, or component). */\n content?: ToastContent;\n /** Whether the close button is shown. */\n dismissible?: boolean;\n}\n\n/**\n * Reference to a toast opened via {@link ToastService}. Use to dismiss the\n * toast, pause / resume its auto-dismiss timer, or observe its lifecycle.\n *\n * The service returns a ref synchronously from every open method; the toast\n * itself is attached asynchronously inside the CDK overlay.\n */\nexport class ToastRef<C = unknown, R = unknown> {\n /** Unique id. Generated if `config.id` was not provided. */\n readonly id: string;\n\n /** Instance of the component rendered inside the toast (only for component-class content). */\n componentInstance: C | null = null;\n\n /** Resolved static config for this toast (defaults merged, severity shorthand applied). */\n readonly config: Readonly<ToastConfig<unknown, R>>;\n\n /** Reactive lifecycle state. */\n readonly state: Signal<ToastState>;\n\n /** Reactive severity — may change after `update()` (used by the `promise()` helper). */\n readonly severity: Signal<ToastSeverity>;\n\n /** Reactive dismissibility. */\n readonly dismissible: Signal<boolean>;\n\n /** Reactive icon override. */\n readonly icon: Signal<string | false | undefined>;\n\n /** Reactive content (the source of truth for what gets rendered). */\n readonly content: Signal<ToastContent>;\n\n /** Reactive action button configuration. */\n readonly action: Signal<ToastAction | undefined>;\n\n /** Reactive accessible label. */\n readonly ariaLabel: Signal<string | undefined>;\n\n /** Reactive data payload — re-read by the container to update `TW_TOAST_DATA`. */\n readonly data: Signal<unknown>;\n\n /** @internal Reactive \"transient\" class applied by swipe gestures (e.g. `translate3d(...)`). */\n readonly swipeTransform = signal<string | null>(null);\n\n /** @internal Reactive opacity applied during swipe gestures. */\n readonly swipeOpacity = signal<number | null>(null);\n\n /** @internal Leave-animation class override. When non-null, container uses this instead of the position default. */\n readonly leaveAnimationOverride = signal<string | null>(null);\n\n /** @internal Portal for component-class content. Set by the service; null for string / template content. */\n _portal: Portal<unknown> | null = null;\n\n /** @internal True while the pointer hovers this toast. */\n _hovered = false;\n\n /** @internal True while focus is within this toast. */\n _focused = false;\n\n /** @internal Set by the service so the ref can reach the CDK-owned OverlayRef if it needs to. */\n _overlayPanelElement: HTMLElement | null = null;\n\n private readonly stateSignal = signal<ToastState>('entering');\n private readonly severitySignal: WritableSignal<ToastSeverity>;\n private readonly dismissibleSignal: WritableSignal<boolean>;\n private readonly iconSignal: WritableSignal<string | false | undefined>;\n private readonly contentSignal: WritableSignal<ToastContent>;\n private readonly actionSignal: WritableSignal<ToastAction | undefined>;\n private readonly ariaLabelSignal: WritableSignal<string | undefined>;\n private readonly dataSignal: WritableSignal<unknown>;\n\n private readonly afterOpenedSubject = new ReplaySubject<void>(1);\n private readonly beforeDismissedSubject = new ReplaySubject<R | undefined>(1);\n private readonly afterDismissedSubject = new ReplaySubject<ToastDismissal<R>>(1);\n private readonly updatedSubject = new Subject<ToastUpdatePatch>();\n\n private dismissReason: ToastDismissReason = 'programmatic';\n private dismissResult: R | undefined;\n private autoDismissTimer: ReturnType<typeof setTimeout> | null = null;\n private autoDismissStartedAt = 0;\n private autoDismissRemaining = 0;\n private paused = false;\n private enterTimer: ReturnType<typeof setTimeout> | null = null;\n private leaveTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(\n id: string,\n content: ToastContent,\n config: ToastConfig<unknown, R>,\n private readonly dismissCallback: (ref: ToastRef) => void,\n ) {\n this.id = id;\n this.config = config;\n this.severitySignal = signal(config.severity ?? 'info');\n this.dismissibleSignal = signal(config.dismissible ?? true);\n this.iconSignal = signal<string | false | undefined>(\n typeof config.icon === 'string' || config.icon === false ? config.icon : undefined,\n );\n this.contentSignal = signal(content);\n this.actionSignal = signal(config.action);\n this.ariaLabelSignal = signal(config.ariaLabel);\n this.dataSignal = signal(config.data ?? null);\n\n this.state = this.stateSignal.asReadonly();\n this.severity = this.severitySignal.asReadonly();\n this.dismissible = this.dismissibleSignal.asReadonly();\n this.icon = this.iconSignal.asReadonly();\n this.content = this.contentSignal.asReadonly();\n this.action = this.actionSignal.asReadonly();\n this.ariaLabel = this.ariaLabelSignal.asReadonly();\n this.data = this.dataSignal.asReadonly();\n\n this.autoDismissRemaining = config.duration ?? 0;\n }\n\n /**\n * @internal Start the enter animation clock. Called by the service once the\n * toast has actually been attached to its container.\n *\n * This deliberately does NOT run from the constructor. The renderer is loaded\n * through a dynamic `import()`, so a ref can exist for an arbitrary stretch\n * before anything is on screen — starting the clock at construction would let\n * a toast burn part (or all) of its auto-dismiss duration while still\n * invisible on a slow connection. Idempotent and safe to call after dismissal.\n */\n _startEnterSequence(): void {\n if (this.enterTimer !== null) return;\n if (this.stateSignal() !== 'entering') return;\n this.enterTimer = setTimeout(\n () => this._markVisible(),\n TOAST_ANIMATION_DURATION + TOAST_ANIMATION_FALLBACK_PADDING,\n );\n }\n\n /**\n * Dismiss the toast programmatically. The leave animation plays before the\n * element is removed and subscribers are notified. Safe to call multiple times.\n */\n dismiss(result?: R): void {\n this._dismissWith('programmatic', result);\n }\n\n /** Pause the auto-dismiss timer (if any). Called automatically on hover / focus when `pauseOnInteraction` is true. */\n pause(): void {\n if (this.paused) return;\n this.paused = true;\n if (this.autoDismissTimer !== null) {\n const elapsed = Date.now() - this.autoDismissStartedAt;\n this.autoDismissRemaining = Math.max(0, this.autoDismissRemaining - elapsed);\n clearTimeout(this.autoDismissTimer);\n this.autoDismissTimer = null;\n }\n const current = this.stateSignal();\n if (current === 'visible') this.stateSignal.set('paused');\n }\n\n /** Resume the auto-dismiss timer with the remaining time. */\n resume(): void {\n if (!this.paused) return;\n this.paused = false;\n if (this.stateSignal() === 'paused') this.stateSignal.set('visible');\n if (this.config.duration && this.config.duration > 0) {\n if (this.autoDismissRemaining <= 0) {\n this._dismissWith('timeout');\n return;\n }\n this._startAutoDismissTimer();\n }\n }\n\n /**\n * @internal Update the hover state. When `pauseOnInteraction` is set and\n * either hover or focus is active, the auto-dismiss timer is paused.\n */\n _setHovered(hovered: boolean): void {\n this._hovered = hovered;\n this._syncInteractionPause();\n }\n\n /** @internal Update the focus-within state. See `_setHovered`. */\n _setFocused(focused: boolean): void {\n this._focused = focused;\n this._syncInteractionPause();\n }\n\n private _syncInteractionPause(): void {\n if (!this.config.pauseOnInteraction) return;\n if (this._hovered || this._focused) {\n this.pause();\n } else {\n this.resume();\n }\n }\n\n /** Invoke the configured action handler (or dismiss with reason `'action'` if none is set). */\n triggerAction(): void {\n const action = this.actionSignal();\n if (!action) return;\n if (action.handler) {\n action.handler(this as unknown as ToastRef);\n } else {\n this._dismissWith('action');\n }\n }\n\n /** Mutate the live toast in place. Used by the `promise()` helper to swap loading → success / error. */\n update(patch: ToastUpdatePatch): void {\n const currentState = this.stateSignal();\n if (currentState === 'dismissing' || currentState === 'dismissed') return;\n\n if (patch.severity !== undefined) this.severitySignal.set(patch.severity);\n if (patch.dismissible !== undefined) this.dismissibleSignal.set(patch.dismissible);\n if (patch.icon !== undefined) this.iconSignal.set(patch.icon);\n if (patch.content !== undefined) this.contentSignal.set(patch.content);\n if (patch.action !== undefined) this.actionSignal.set(patch.action ?? undefined);\n if (patch.ariaLabel !== undefined) this.ariaLabelSignal.set(patch.ariaLabel);\n if (patch.data !== undefined) this.dataSignal.set(patch.data);\n\n if (patch.duration !== undefined) {\n (this.config as { duration?: number }).duration = patch.duration;\n this.autoDismissRemaining = patch.duration;\n if (this.autoDismissTimer !== null) {\n clearTimeout(this.autoDismissTimer);\n this.autoDismissTimer = null;\n }\n if (!this.paused && (currentState === 'visible' || currentState === 'paused')) {\n this._startAutoDismissTimer();\n }\n }\n\n this.updatedSubject.next(patch);\n }\n\n /** Observable that emits once after the enter animation completes. */\n afterOpened(): Observable<void> {\n return this.afterOpenedSubject.asObservable();\n }\n\n /** Observable that emits once when the dismiss sequence starts. */\n beforeDismissed(): Observable<R | undefined> {\n return this.beforeDismissedSubject.asObservable();\n }\n\n /** Observable that emits once after the leave animation completes and the ref is cleaned up. */\n afterDismissed(): Observable<ToastDismissal<R>> {\n return this.afterDismissedSubject.asObservable();\n }\n\n /** @internal Observable of `update()` calls. The container subscribes to re-announce to `LiveAnnouncer`. */\n _updates(): Observable<ToastUpdatePatch> {\n return this.updatedSubject.asObservable();\n }\n\n /** @internal Called by the service when the max-visible cap is exceeded. */\n _dismissAsMaxExceeded(): void {\n this._dismissWith('max-exceeded');\n }\n\n /** @internal Start the dismiss sequence with the given reason. */\n _dismissWith(reason: ToastDismissReason, result?: R): void {\n const currentState = this.stateSignal();\n if (currentState === 'dismissing' || currentState === 'dismissed') return;\n\n this.dismissReason = reason;\n this.dismissResult = result;\n this.stateSignal.set('dismissing');\n\n if (this.autoDismissTimer !== null) {\n clearTimeout(this.autoDismissTimer);\n this.autoDismissTimer = null;\n }\n if (this.enterTimer !== null) {\n clearTimeout(this.enterTimer);\n this.enterTimer = null;\n }\n\n this.beforeDismissedSubject.next(result);\n this.beforeDismissedSubject.complete();\n\n this.leaveTimer = setTimeout(\n () => this._finishDismiss(),\n TOAST_ANIMATION_DURATION + TOAST_ANIMATION_FALLBACK_PADDING,\n );\n }\n\n /** @internal Finalise dismissal — clears timers, emits `afterDismissed`, and hands control back to the service. */\n _finishDismiss(): void {\n if (this.stateSignal() === 'dismissed') return;\n this.stateSignal.set('dismissed');\n\n if (this.leaveTimer !== null) {\n clearTimeout(this.leaveTimer);\n this.leaveTimer = null;\n }\n\n const dismissal: ToastDismissal<R> = {\n reason: this.dismissReason,\n result: this.dismissResult,\n };\n this.afterDismissedSubject.next(dismissal);\n this.afterDismissedSubject.complete();\n this.updatedSubject.complete();\n\n this.dismissCallback(this as unknown as ToastRef);\n }\n\n private _markVisible(): void {\n if (this.enterTimer !== null) {\n clearTimeout(this.enterTimer);\n this.enterTimer = null;\n }\n const current = this.stateSignal();\n if (current !== 'entering') return;\n this.stateSignal.set('visible');\n this.afterOpenedSubject.next();\n this.afterOpenedSubject.complete();\n if (this.config.duration && this.config.duration > 0 && !this.paused) {\n this._startAutoDismissTimer();\n }\n }\n\n private _startAutoDismissTimer(): void {\n if (this.autoDismissRemaining <= 0) return;\n if (this.autoDismissTimer !== null) clearTimeout(this.autoDismissTimer);\n this.autoDismissStartedAt = Date.now();\n this.autoDismissTimer = setTimeout(\n () => this._dismissWith('timeout'),\n this.autoDismissRemaining,\n );\n }\n}\n","import {\n type EnvironmentProviders,\n Injectable,\n Injector,\n type OnDestroy,\n type Provider,\n type Signal,\n inject,\n makeEnvironmentProviders,\n signal,\n} from '@angular/core';\nimport { type Observable, Subject, defer, startWith } from 'rxjs';\nimport {\n TW_TOAST_DATA,\n TW_TOAST_DEFAULT_OPTIONS,\n TW_TOAST_REF,\n ToastConfig,\n type ToastContent,\n type ToastPosition,\n type ToastSeverity,\n type ToastTemplateContext,\n} from './toast-config';\nimport { ToastRef } from './toast-ref';\n// Type-only: importing `ToastRenderer` as a value here would drag CDK overlay\n// and the toast components back into the eager chunk. See `toast-renderer.ts`.\nimport type { ToastRenderer } from './toast-renderer';\n\ninterface PromiseMessages<T> {\n loading: string;\n success: string | ((value: T) => string);\n error: string | ((err: unknown) => string);\n}\n\nlet nextToastId = 0;\n\nfunction generateId(): string {\n return `tw-toast-${++nextToastId}`;\n}\n\n/**\n * Opens Tailwind-styled toasts / snackbars inside CDK overlays. One overlay is\n * created per `ToastPosition` on first use and reused for the lifetime of the\n * service; toasts stack vertically inside their position container.\n *\n * The rendering layer (CDK overlay + the toast components) is loaded through a\n * dynamic `import()` on the first `show()` call, so merely registering this\n * service costs nothing in the initial bundle. Every open method still returns\n * its {@link ToastRef} synchronously — the toast is attached once the chunk\n * lands, and `update()` / `dismiss()` called in the meantime are honoured.\n *\n * Not `providedIn: 'root'` — register via {@link provideToast}.\n */\n@Injectable()\nexport class ToastService implements OnDestroy {\n private readonly injector = inject(Injector);\n private readonly defaultOptions =\n inject(TW_TOAST_DEFAULT_OPTIONS, { optional: true }) ?? {};\n private readonly parent = inject(ToastService, { optional: true, skipSelf: true });\n\n /** Cached renderer chunk. Non-null once the first `show()` has kicked off the import. */\n private rendererPromise: Promise<ToastRenderer | null> | null = null;\n private renderer: ToastRenderer | null = null;\n private destroyed = false;\n\n private readonly activeRefsAtThisLevel = signal<readonly ToastRef[]>([]);\n private readonly afterOpenedSubject = new Subject<ToastRef>();\n private readonly afterAllDismissedSubject = new Subject<void>();\n\n /** Reactive list of every toast that has not yet fully dismissed. */\n readonly activeToasts: Signal<readonly ToastRef[]> = this.parent\n ? this.parent.activeToasts\n : this.activeRefsAtThisLevel.asReadonly();\n\n /** Emits every time a new toast is opened. */\n readonly afterOpened: Observable<ToastRef> = this.parent\n ? this.parent.afterOpened\n : this.afterOpenedSubject.asObservable();\n\n /** Emits when the active-toasts list transitions back to empty. Emits immediately on subscribe if none are open. */\n readonly afterAllDismissed: Observable<void> = defer(() =>\n this.activeToasts().length\n ? this.getAfterAllDismissedSource()\n : this.getAfterAllDismissedSource().pipe(startWith(undefined as void)),\n );\n\n /**\n * Open a toast. Content may be a string (rendered inside the default\n * `ToastComponent`), a `TemplateRef` (rendered via `TemplatePortal`), or a\n * component class (rendered via `ComponentPortal` with `TW_TOAST_REF` +\n * `TW_TOAST_DATA` injected).\n */\n show<R = void, D = unknown>(\n content: ToastContent,\n config?: ToastConfig<D, R>,\n ): ToastRef<unknown, R> {\n const merged = this.resolveConfig<D, R>(config);\n return this.openInternal<R>(content, merged);\n }\n\n /** Shorthand for `show(message, { severity: 'success', ... })`. */\n success<R = void>(message: string, config?: ToastConfig<unknown, R>): ToastRef<unknown, R> {\n return this.openWithSeverity('success', message, config);\n }\n\n /** Shorthand for `show(message, { severity: 'error', politeness: 'assertive', ... })`. */\n error<R = void>(message: string, config?: ToastConfig<unknown, R>): ToastRef<unknown, R> {\n return this.openWithSeverity('error', message, config, 'assertive');\n }\n\n /** Shorthand for `show(message, { severity: 'warning', ... })`. */\n warning<R = void>(message: string, config?: ToastConfig<unknown, R>): ToastRef<unknown, R> {\n return this.openWithSeverity('warning', message, config);\n }\n\n /** Shorthand for `show(message, { severity: 'info', ... })`. */\n info<R = void>(message: string, config?: ToastConfig<unknown, R>): ToastRef<unknown, R> {\n return this.openWithSeverity('info', message, config);\n }\n\n /**\n * Show a loading toast, then swap it to success / error when the promise\n * settles. The same ref is returned and re-used across all three states.\n * The loading toast is pinned (duration forced to 0, dismissible forced to\n * false) until the promise resolves.\n */\n promise<T, R = void>(\n promise: Promise<T>,\n messages: PromiseMessages<T>,\n config?: ToastConfig<unknown, R>,\n ): ToastRef<unknown, R> {\n const resolvedDuration = config?.duration ?? this.defaultOptions.duration ?? 5000;\n const ref = this.show<R>(messages.loading, {\n ...(config as ToastConfig<unknown, R>),\n severity: 'neutral',\n duration: 0,\n dismissible: false,\n });\n\n promise.then(\n (value) => {\n if (ref.state() === 'dismissed' || ref.state() === 'dismissing') return;\n const msg = typeof messages.success === 'function' ? messages.success(value) : messages.success;\n ref.update({\n severity: 'success',\n content: msg,\n duration: resolvedDuration,\n dismissible: config?.dismissible ?? true,\n });\n this.announceUpdate(ref);\n },\n (err) => {\n if (ref.state() === 'dismissed' || ref.state() === 'dismissing') return;\n const msg = typeof messages.error === 'function' ? messages.error(err) : messages.error;\n ref.update({\n severity: 'error',\n content: msg,\n duration: resolvedDuration,\n dismissible: config?.dismissible ?? true,\n });\n this.announceUpdate(ref);\n },\n );\n\n return ref;\n }\n\n /** Dismiss a toast by id. No-op if no matching toast is active. */\n dismiss(id: string): void {\n const match = this.activeToasts().find((ref) => ref.id === id);\n if (match) match.dismiss();\n }\n\n /** Dismiss every active toast across every position. */\n dismissAll(): void {\n const refs = [...this.activeToasts()];\n for (let i = refs.length - 1; i >= 0; i--) refs[i].dismiss();\n }\n\n /** Look up an active toast by id. */\n getToastById<R = unknown>(id: string): ToastRef<unknown, R> | undefined {\n return this.activeToasts().find((ref) => ref.id === id) as\n | ToastRef<unknown, R>\n | undefined;\n }\n\n ngOnDestroy(): void {\n // Set first: an in-flight renderer import resolves after this and must not\n // instantiate overlays for a service that is already gone.\n this.destroyed = true;\n const refs = [...this.activeRefsAtThisLevel()];\n for (let i = refs.length - 1; i >= 0; i--) refs[i]._finishDismiss();\n this.renderer?.dispose();\n this.renderer = null;\n this.afterOpenedSubject.complete();\n this.afterAllDismissedSubject.complete();\n }\n\n private openWithSeverity<R>(\n severity: ToastSeverity,\n message: string,\n config?: ToastConfig<unknown, R>,\n forcedPoliteness?: 'polite' | 'assertive' | 'off',\n ): ToastRef<unknown, R> {\n const merged = this.resolveConfig<unknown, R>(config);\n merged.severity = severity;\n if (forcedPoliteness && !config?.politeness) merged.politeness = forcedPoliteness;\n return this.openInternal<R>(message, merged);\n }\n\n private openInternal<R>(\n content: ToastContent,\n config: ToastConfig<unknown, R>,\n ): ToastRef<unknown, R> {\n const id = config.id ?? generateId();\n config.id = id;\n\n const ref = new ToastRef<unknown, R>(id, content, config, (dismissed) =>\n this.handleDismissed(dismissed),\n );\n\n this.enforceMaxVisible(config.position!, config.maxVisible ?? 5);\n this.registerOpen(ref);\n void this.attachWhenRendererReady(ref as ToastRef<unknown, unknown>, config.position!);\n return ref;\n }\n\n /**\n * Attach a toast once the renderer chunk has loaded. The ref was already\n * returned to the caller, so it may have been dismissed (or the service\n * destroyed) while the import was in flight — both are checked before\n * anything is put on screen.\n */\n private async attachWhenRendererReady(\n ref: ToastRef<unknown, unknown>,\n position: ToastPosition,\n ): Promise<void> {\n const renderer = await this.loadRenderer();\n if (!renderer || this.destroyed) return;\n\n const state = ref.state();\n if (state === 'dismissing' || state === 'dismissed') return;\n\n if (!renderer.attach(ref, position)) return;\n // Only now does the enter animation — and with it the auto-dismiss\n // countdown — begin. See `ToastRef._startEnterSequence`.\n ref._startEnterSequence();\n renderer.announceOpen(ref);\n }\n\n /**\n * @internal Resolves once the renderer chunk has loaded and pending toasts\n * have been attached. Exposed for tests, which must await the dynamic import\n * before asserting on rendered DOM.\n */\n async _whenRendered(): Promise<void> {\n await this.loadRenderer();\n // Let the per-toast `attachWhenRendererReady` continuations run.\n await Promise.resolve();\n }\n\n /** Load (once) and instantiate the rendering layer. Resolves to `null` if the service was destroyed mid-import. */\n private loadRenderer(): Promise<ToastRenderer | null> {\n if (!this.rendererPromise) {\n this.rendererPromise = import('./toast-renderer').then(({ ToastRenderer }) => {\n if (this.destroyed) return null;\n this.renderer = new ToastRenderer(\n this.injector,\n this.defaultOptions.regionAriaLabel ?? 'Notifications',\n );\n return this.renderer;\n });\n }\n return this.rendererPromise;\n }\n\n private enforceMaxVisible(position: ToastPosition, max: number): void {\n if (max <= 0) return;\n const atPosition = this.activeToasts().filter(\n (ref) =>\n (ref.config.position ?? 'bottom-right') === position &&\n ref.state() !== 'dismissing' &&\n ref.state() !== 'dismissed',\n );\n while (atPosition.length >= max) {\n const oldest = atPosition.shift();\n if (!oldest) break;\n oldest._dismissAsMaxExceeded();\n }\n }\n\n private registerOpen<R>(ref: ToastRef<unknown, R>): void {\n const scope = this.parent ?? this;\n const anyRef = ref as ToastRef<unknown, unknown>;\n scope.activeRefsAtThisLevel.update((list) => [...list, anyRef]);\n scope.afterOpenedSubject.next(anyRef);\n }\n\n private handleDismissed(ref: ToastRef): void {\n const scope = this.parent ?? this;\n scope.activeRefsAtThisLevel.update((list) => list.filter((r) => r !== ref));\n\n this.renderer?.detach(ref);\n\n if (scope.activeRefsAtThisLevel().length === 0) {\n scope.afterAllDismissedSubject.next();\n }\n }\n\n /**\n * Re-announce an updated toast. If the renderer has not landed yet there is\n * nothing on screen to announce — the announcement that fires on attach\n * reads the ref's current (already updated) content, so nothing is lost.\n */\n private announceUpdate<R>(ref: ToastRef<unknown, R>): void {\n this.renderer?.announceUpdate(ref as ToastRef<unknown, unknown>);\n }\n\n private resolveConfig<D, R>(config: ToastConfig<D, R> | undefined): ToastConfig<D, R> {\n const merged = new ToastConfig<D, R>();\n Object.assign(merged, this.defaultOptions, config);\n return merged;\n }\n\n private getAfterAllDismissedSource(): Subject<void> {\n return this.parent ? this.parent.getAfterAllDismissedSource() : this.afterAllDismissedSubject;\n }\n}\n\n/**\n * Registers {@link ToastService} for dependency injection and installs optional\n * application-wide defaults.\n *\n * @example\n * ```ts\n * bootstrapApplication(AppComponent, {\n * providers: [provideToast({ position: 'top-right', duration: 4000 })]\n * });\n * ```\n */\nexport function provideToast(\n defaultOptions?: Partial<ToastConfig>,\n): EnvironmentProviders {\n const providers: Provider[] = [ToastService];\n if (defaultOptions) {\n providers.push({ provide: TW_TOAST_DEFAULT_OPTIONS, useValue: defaultOptions });\n }\n return makeEnvironmentProviders(providers);\n}\n\n/** Re-exported helpers so `inject(TW_TOAST_DATA)` / `inject(TW_TOAST_REF)` work from component content. */\nexport { TW_TOAST_DATA, TW_TOAST_REF };\n\n// Re-exports to keep the barrel tidy.\nexport type { ToastContent, ToastTemplateContext };\n\nexport const ToastInternals = {\n /** @internal Reset id counter for tests. */\n _resetIdForTesting(): void {\n nextToastId = 0;\n },\n};\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n Directive,\n inject,\n input,\n output,\n} from '@angular/core';\nimport { tv } from 'tailwind-variants';\nimport type { ToastSeverity } from './toast-config';\n\nconst toastVariants = tv(\n {\n slots: {\n root:\n 'pointer-events-auto relative flex items-start gap-3 w-full max-w-sm p-4 rounded-lg border shadow-md text-sm will-change-transform transition-colors duration-normal motion-reduce:transition-none',\n icon: 'size-5 shrink-0 mt-0.5',\n title: 'text-sm font-semibold',\n description: 'text-sm',\n content: 'flex-1 min-w-0',\n action:\n 'inline-flex items-center justify-center px-3 py-1.5 rounded-md text-sm font-medium cursor-pointer transition-colors duration-normal motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n // Dismiss container is `size-6` (24px — xs square-interactive-target\n // scale per CLAUDE.md icon sub-scale). The inner SVG is `size-4` (16px\n // glyph scale), centred via flex; the larger container gives the\n // touch/click affordance without enlarging the visual glyph.\n dismiss:\n 'absolute top-3 right-3 inline-flex items-center justify-center size-6 rounded-md cursor-pointer transition-colors duration-normal motion-reduce:transition-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary-500',\n },\n variants: {\n severity: {\n info: {},\n success: {},\n warning: {},\n error: {},\n neutral: {},\n },\n },\n // Color slot tokens (`{role}-soft`, `-soft-fg`, `-icon`, …) own light/dark\n // contrast — components consume the slot only. See `_semantic.css`.\n // Slot-token safelist: see `projects/ngx-tw/theme/index.css` `@source inline(...)`\n // — Tailwind v4's JIT cannot scan template-literal class names, so every\n // `bg-${severity}-soft` / `text-${severity}-icon` permutation below must be\n // enumerated there.\n compoundVariants: (['info', 'success', 'warning', 'error', 'neutral'] as const).map(\n (severity) => ({\n severity,\n class: {\n root: `bg-${severity}-soft text-${severity}-soft-fg-muted border-${severity}-border`,\n icon: `text-${severity}-icon`,\n title: `text-${severity}-soft-fg`,\n description: `text-${severity}-soft-fg-muted`,\n action: `text-${severity}-soft-fg hover:bg-${severity}-soft-hover`,\n dismiss: `text-${severity}-icon hover:bg-${severity}-soft-hover`,\n },\n }),\n ),\n defaultVariants: {\n severity: 'info',\n },\n },\n { twMerge: true },\n);\n\n/** Slot directive for the icon. When projected, overrides the severity-default icon. */\n@Directive({\n selector: '[twToastIcon]',\n host: {\n '[class]': 'classes()',\n 'aria-hidden': 'true',\n },\n})\nexport class ToastIconDirective {\n private readonly toast = inject(ToastComponent);\n /** @internal */\n readonly classes = this.toast.iconClasses;\n}\n\n/** Slot directive for the bold title line inside a toast. */\n@Directive({\n selector: '[twToastTitle]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class ToastTitleDirective {\n private readonly toast = inject(ToastComponent);\n /** @internal */\n readonly classes = this.toast.titleClasses;\n}\n\n/** Slot directive for a secondary description line inside a toast. */\n@Directive({\n selector: '[twToastDescription]',\n host: {\n '[class]': 'classes()',\n },\n})\nexport class ToastDescriptionDirective {\n private readonly toast = inject(ToastComponent);\n /** @internal */\n readonly classes = this.toast.descriptionClasses;\n}\n\n/** Slot directive for the action button. Apply to a native `<button>` to inherit the severity-aware styling. */\n@Directive({\n selector: '[twToastAction]',\n host: {\n type: 'button',\n '[class]': 'classes()',\n '(click)': 'onClick()',\n },\n})\nexport class ToastActionDirective {\n private readonly toast = inject(ToastComponent);\n /** @internal */\n readonly classes = this.toast.actionClasses;\n /** @internal */\n protected onClick(): void {\n this.toast.actionClicked.emit();\n }\n}\n\n/**\n * Visual toast / snackbar panel. Rendered internally by {@link ToastService} for\n * string content, and exported for consumers who want to compose the same\n * visual inside a custom `TemplateRef` or component class passed to `show()`.\n */\n@Component({\n selector: 'tw-toast',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'rootClasses()',\n '[attr.role]': 'roleAttr()',\n '[attr.aria-live]': 'ariaLiveAttr()',\n 'aria-atomic': 'true',\n '[attr.aria-label]': 'ariaLabel() || null',\n '[attr.data-severity]': 'severity()',\n },\n template: `\n @if (hasProjectedIcon()) {\n <ng-content select=\"[twToastIcon]\" />\n } @else if (icon() !== false) {\n <span [class]=\"iconClasses()\" aria-hidden=\"true\">\n @switch (severity()) {\n @case ('info') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"size-full\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm0-11a1 1 0 1 0 0-2 1 1 0 0 0 0 2Zm-.75 2.5a.75.75 0 0 0 0 1.5h.25v3h-.25a.75.75 0 0 0 0 1.5h2a.75.75 0 0 0 0-1.5h-.25v-3.75a.75.75 0 0 0-.75-.75h-1Z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n @case ('success') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"size-full\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm3.857-9.809a.75.75 0 0 0-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 1 0-1.06 1.061l2.5 2.5a.75.75 0 0 0 1.137-.089l4-5.5Z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n @case ('warning') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"size-full\">\n <path fill-rule=\"evenodd\" d=\"M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495ZM10 5a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 10 5Zm0 9a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n @case ('error') {\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" class=\"size-full\">\n <path fill-rule=\"evenodd\" d=\"M18 10a8 8 0 1 1-16 0 8 8 0 0 1 16 0Zm-8-5a.75.75 0 0 1 .75.75v4.5a.75.75 0 0 1-1.5 0v-4.5A.75.75 0 0 1 10 5Zm0 10a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z\" clip-rule=\"evenodd\"/>\n </svg>\n }\n @default {\n @if (icon() && icon() !== false) {\n {{ icon() }}\n }\n }\n }\n </span>\n }\n <div [class]=\"contentClasses()\">\n <ng-content select=\"[twToastTitle]\" />\n <ng-content select=\"[twToastDescription]\" />\n <ng-content />\n <ng-content select=\"[twToastAction]\" />\n </div>\n @if (dismissible()) {\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n [class]=\"dismissClasses()\"\n (click)=\"dismissed.emit()\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\" fill=\"currentColor\" class=\"size-4\">\n <path d=\"M5.28 4.22a.75.75 0 0 0-1.06 1.06L6.94 8l-2.72 2.72a.75.75 0 1 0 1.06 1.06L8 9.06l2.72 2.72a.75.75 0 1 0 1.06-1.06L9.06 8l2.72-2.72a.75.75 0 0 0-1.06-1.06L8 6.94 5.28 4.22Z\"/>\n </svg>\n </button>\n }\n `,\n})\nexport class ToastComponent {\n /** Severity variant. Drives color palette, default icon, and ARIA role / live politeness. Defaults to `'info'`. */\n readonly severity = input<ToastSeverity>('info');\n\n // Default true: mirrors `ToastConfig.dismissible` — toasts must offer an escape\n // hatch by default; opt-out only for ephemeral progress markers paired with `duration`.\n /** Whether to render the close button. Defaults to `true`. */\n readonly dismissible = input<boolean>(true);\n\n /**\n * Icon override. Pass a string to render as text inside the icon slot, or\n * `false` to hide the built-in severity icon. Ignored when a `[twToastIcon]`\n * child is projected. When omitted, the severity-default icon renders.\n *\n * For arbitrary icon markup, project a `[twToastIcon]` child instead.\n */\n readonly icon = input<string | false | undefined>(undefined);\n\n /** Explicit aria-label for the toast wrapper. When omitted, text content is used by assistive tech. */\n readonly ariaLabel = input<string | undefined>(undefined);\n\n /** Fires when the close button is clicked. */\n readonly dismissed = output<void>();\n\n /** Fires when a `[twToastAction]` button is clicked. */\n readonly actionClicked = output<void>();\n\n /** @internal */\n readonly projectedIcon = contentChild(ToastIconDirective);\n\n /** @internal */\n readonly hasProjectedIcon = computed(() => !!this.projectedIcon());\n\n private readonly variantResult = computed(() => toastVariants({ severity: this.severity() }));\n\n /** @internal */\n readonly rootClasses = computed(() => {\n const base = this.variantResult().root();\n return this.dismissible() ? `${base} pr-10` : base;\n });\n\n /** @internal */\n readonly iconClasses = computed(() => this.variantResult().icon());\n /** @internal */\n readonly titleClasses = computed(() => this.variantResult().title());\n /** @internal */\n readonly descriptionClasses = computed(() => this.variantResult().description());\n /** @internal */\n readonly contentClasses = computed(() => this.variantResult().content());\n /** @internal */\n readonly actionClasses = computed(() => this.variantResult().action());\n /** @internal */\n readonly dismissClasses = computed(() => this.variantResult().dismiss());\n\n /** @internal */\n protected readonly roleAttr = computed(() =>\n this.severity() === 'error' ? 'alert' : 'status',\n );\n\n /** @internal */\n protected readonly ariaLiveAttr = computed(() =>\n this.severity() === 'error' ? 'assertive' : 'polite',\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|