ngx-dynamic-toast 0.0.12 → 0.0.14
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/README.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
An elegant, liquid-smooth notification library for Angular featuring spring-physics transitions and interactive Dynamic Island anchoring. Heavily inspired by the premium aesthetics of the [Sileo](https://github.com/hiaaryan/sileo) project, bringing fluid motion and state-swapping interfaces to the Angular ecosystem.
|
|
4
4
|
|
|
5
|
+
[**Interactive Demo ⚡**](https://ederjavs.github.io/ngx-dynamic-toast/)
|
|
6
|
+
|
|
5
7
|
## Key Features
|
|
6
8
|
|
|
7
9
|
- **Liquid-Smooth Physics**: Powered by spring animations (`motion`), producing natural, elastic card expansions and fluid transformations.
|
|
@@ -147,6 +149,9 @@ export class BundleCompilerComponent {
|
|
|
147
149
|
|
|
148
150
|
### 2. Dynamic Island Anchors
|
|
149
151
|
|
|
152
|
+
> [!WARNING]
|
|
153
|
+
> **Experimental Feature**: Dynamic Island Anchoring is currently experimental and may have alignment/positioning quirks under certain layouts. We would love your help to improve and refine this! Feel free to open a PR or share feedback in issues.
|
|
154
|
+
|
|
150
155
|
Warp notifications directly around specific interactive DOM elements. The target element remains perfectly nested and interactive inside the expanding card:
|
|
151
156
|
|
|
152
157
|
```typescript
|
|
@@ -38,20 +38,29 @@ const ICONS = {
|
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
class DynamicToastComponent {
|
|
41
|
-
toast = input.required(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
41
|
+
toast = input.required(/* @ts-ignore */
|
|
42
|
+
...(ngDevMode ? [{ debugName: "toast" }] : /* istanbul ignore next */ []));
|
|
43
|
+
theme = input('dark', /* @ts-ignore */
|
|
44
|
+
...(ngDevMode ? [{ debugName: "theme" }] : /* istanbul ignore next */ []));
|
|
45
|
+
anchorWidth = input(0, /* @ts-ignore */
|
|
46
|
+
...(ngDevMode ? [{ debugName: "anchorWidth" }] : /* istanbul ignore next */ []));
|
|
47
|
+
anchorHeight = input(0, /* @ts-ignore */
|
|
48
|
+
...(ngDevMode ? [{ debugName: "anchorHeight" }] : /* istanbul ignore next */ []));
|
|
49
|
+
pillAlign = input("left", /* @ts-ignore */
|
|
50
|
+
...(ngDevMode ? [{ debugName: "pillAlign" }] : /* istanbul ignore next */ []));
|
|
51
|
+
expandEdge = input("bottom", /* @ts-ignore */
|
|
52
|
+
...(ngDevMode ? [{ debugName: "expandEdge" }] : /* istanbul ignore next */ []));
|
|
53
|
+
canExpand = input(true, /* @ts-ignore */
|
|
54
|
+
...(ngDevMode ? [{ debugName: "canExpand" }] : /* istanbul ignore next */ []));
|
|
55
|
+
interruptKey = input(undefined, /* @ts-ignore */
|
|
56
|
+
...(ngDevMode ? [{ debugName: "interruptKey" }] : /* istanbul ignore next */ []));
|
|
49
57
|
dismissed = output();
|
|
50
58
|
entered = output();
|
|
51
59
|
left = output();
|
|
52
60
|
resolvedFill = computed(() => {
|
|
53
61
|
return this.theme() === 'light' ? '#ffffff' : '#151515';
|
|
54
|
-
},
|
|
62
|
+
}, /* @ts-ignore */
|
|
63
|
+
...(ngDevMode ? [{ debugName: "resolvedFill" }] : /* istanbul ignore next */ []));
|
|
55
64
|
HEIGHT = HEIGHT;
|
|
56
65
|
WIDTH = WIDTH;
|
|
57
66
|
sanitizer = inject(DomSanitizer);
|
|
@@ -70,36 +79,47 @@ class DynamicToastComponent {
|
|
|
70
79
|
pointerStartY = null;
|
|
71
80
|
pillRectRef;
|
|
72
81
|
bodyRectRef;
|
|
73
|
-
ready = signal(false,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
82
|
+
ready = signal(false, /* @ts-ignore */
|
|
83
|
+
...(ngDevMode ? [{ debugName: "ready" }] : /* istanbul ignore next */ []));
|
|
84
|
+
isExpanded = signal(false, /* @ts-ignore */
|
|
85
|
+
...(ngDevMode ? [{ debugName: "isExpanded" }] : /* istanbul ignore next */ []));
|
|
86
|
+
pillWidth = signal(0, /* @ts-ignore */
|
|
87
|
+
...(ngDevMode ? [{ debugName: "pillWidth" }] : /* istanbul ignore next */ []));
|
|
88
|
+
contentHeight = signal(0, /* @ts-ignore */
|
|
89
|
+
...(ngDevMode ? [{ debugName: "contentHeight" }] : /* istanbul ignore next */ []));
|
|
77
90
|
// View as a signal so we can swap it for header crossfade animation
|
|
78
91
|
view = signal({
|
|
79
92
|
title: "",
|
|
80
93
|
state: "info",
|
|
81
94
|
fill: "#151515",
|
|
82
|
-
},
|
|
95
|
+
}, /* @ts-ignore */
|
|
96
|
+
...(ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []));
|
|
83
97
|
// Header layer system for crossfade animation
|
|
84
98
|
headerLayerCurrent = signal({
|
|
85
99
|
key: "",
|
|
86
100
|
view: this.view(),
|
|
87
|
-
},
|
|
88
|
-
|
|
101
|
+
}, /* @ts-ignore */
|
|
102
|
+
...(ngDevMode ? [{ debugName: "headerLayerCurrent" }] : /* istanbul ignore next */ []));
|
|
103
|
+
headerLayerPrev = signal(null, /* @ts-ignore */
|
|
104
|
+
...(ngDevMode ? [{ debugName: "headerLayerPrev" }] : /* istanbul ignore next */ []));
|
|
89
105
|
filterId = `dt-gooey-${Math.random().toString(36).slice(2, 8)}`;
|
|
90
106
|
hasDesc = computed(() => {
|
|
91
107
|
const v = this.view();
|
|
92
108
|
return (Boolean(v.description) || Boolean(v.contentTemplate) || Boolean(v.button));
|
|
93
|
-
},
|
|
94
|
-
|
|
109
|
+
}, /* @ts-ignore */
|
|
110
|
+
...(ngDevMode ? [{ debugName: "hasDesc" }] : /* istanbul ignore next */ []));
|
|
111
|
+
isLoading = computed(() => this.view().state === "loading", /* @ts-ignore */
|
|
112
|
+
...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
|
|
95
113
|
allowExpand = computed(() => {
|
|
96
114
|
if (this.isLoading())
|
|
97
115
|
return false;
|
|
98
116
|
const interrupt = this.interruptKey();
|
|
99
117
|
const id = this.toast().id;
|
|
100
118
|
return this.canExpand() ?? (!interrupt || interrupt === id);
|
|
101
|
-
},
|
|
102
|
-
|
|
119
|
+
}, /* @ts-ignore */
|
|
120
|
+
...(ngDevMode ? [{ debugName: "allowExpand" }] : /* istanbul ignore next */ []));
|
|
121
|
+
open = computed(() => this.hasDesc() && this.isExpanded() && !this.isLoading(), /* @ts-ignore */
|
|
122
|
+
...(ngDevMode ? [{ debugName: "open" }] : /* istanbul ignore next */ []));
|
|
103
123
|
resolvedRoundness = computed(() => {
|
|
104
124
|
try {
|
|
105
125
|
return Math.max(0, this.toast().roundness ?? DEFAULT_ROUNDNESS);
|
|
@@ -107,9 +127,12 @@ class DynamicToastComponent {
|
|
|
107
127
|
catch {
|
|
108
128
|
return DEFAULT_ROUNDNESS;
|
|
109
129
|
}
|
|
110
|
-
},
|
|
111
|
-
|
|
112
|
-
|
|
130
|
+
}, /* @ts-ignore */
|
|
131
|
+
...(ngDevMode ? [{ debugName: "resolvedRoundness" }] : /* istanbul ignore next */ []));
|
|
132
|
+
blur = computed(() => this.resolvedRoundness() * BLUR_RATIO, /* @ts-ignore */
|
|
133
|
+
...(ngDevMode ? [{ debugName: "blur" }] : /* istanbul ignore next */ []));
|
|
134
|
+
minExpanded = computed(() => HEIGHT * MIN_EXPAND_RATIO, /* @ts-ignore */
|
|
135
|
+
...(ngDevMode ? [{ debugName: "minExpanded" }] : /* istanbul ignore next */ []));
|
|
113
136
|
rawExpanded = computed(() => {
|
|
114
137
|
const min = this.minExpanded();
|
|
115
138
|
try {
|
|
@@ -120,11 +143,16 @@ class DynamicToastComponent {
|
|
|
120
143
|
catch {
|
|
121
144
|
return min;
|
|
122
145
|
}
|
|
123
|
-
},
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
146
|
+
}, /* @ts-ignore */
|
|
147
|
+
...(ngDevMode ? [{ debugName: "rawExpanded" }] : /* istanbul ignore next */ []));
|
|
148
|
+
frozenExpanded = signal(HEIGHT * MIN_EXPAND_RATIO, /* @ts-ignore */
|
|
149
|
+
...(ngDevMode ? [{ debugName: "frozenExpanded" }] : /* istanbul ignore next */ []));
|
|
150
|
+
expanded = computed(() => this.open() ? this.rawExpanded() : this.frozenExpanded(), /* @ts-ignore */
|
|
151
|
+
...(ngDevMode ? [{ debugName: "expanded" }] : /* istanbul ignore next */ []));
|
|
152
|
+
svgHeight = computed(() => this.hasDesc() ? Math.max(this.expanded(), this.minExpanded()) : HEIGHT, /* @ts-ignore */
|
|
153
|
+
...(ngDevMode ? [{ debugName: "svgHeight" }] : /* istanbul ignore next */ []));
|
|
154
|
+
expandedContent = computed(() => Math.max(0, this.expanded() - HEIGHT), /* @ts-ignore */
|
|
155
|
+
...(ngDevMode ? [{ debugName: "expandedContent" }] : /* istanbul ignore next */ []));
|
|
128
156
|
resolvedPillWidth = computed(() => {
|
|
129
157
|
const w = this.pillWidth();
|
|
130
158
|
const aw = this.anchorWidth();
|
|
@@ -132,12 +160,14 @@ class DynamicToastComponent {
|
|
|
132
160
|
return Math.max(w, aw + 4);
|
|
133
161
|
}
|
|
134
162
|
return Math.max(w || HEIGHT, HEIGHT);
|
|
135
|
-
},
|
|
163
|
+
}, /* @ts-ignore */
|
|
164
|
+
...(ngDevMode ? [{ debugName: "resolvedPillWidth" }] : /* istanbul ignore next */ []));
|
|
136
165
|
pillHeight = computed(() => {
|
|
137
166
|
const ah = this.anchorHeight();
|
|
138
167
|
const baseHeight = ah > 0 ? ah + 4 : HEIGHT;
|
|
139
168
|
return baseHeight + this.blur() * 3;
|
|
140
|
-
},
|
|
169
|
+
}, /* @ts-ignore */
|
|
170
|
+
...(ngDevMode ? [{ debugName: "pillHeight" }] : /* istanbul ignore next */ []));
|
|
141
171
|
pillX = computed(() => {
|
|
142
172
|
const align = this.pillAlign();
|
|
143
173
|
const pw = this.resolvedPillWidth();
|
|
@@ -150,15 +180,18 @@ class DynamicToastComponent {
|
|
|
150
180
|
if (align === "right")
|
|
151
181
|
return WIDTH - pw;
|
|
152
182
|
return (WIDTH - pw) / 2;
|
|
153
|
-
},
|
|
183
|
+
}, /* @ts-ignore */
|
|
184
|
+
...(ngDevMode ? [{ debugName: "pillX" }] : /* istanbul ignore next */ []));
|
|
154
185
|
headerTransform = computed(() => {
|
|
155
186
|
const open = this.open();
|
|
156
187
|
const expand = this.expandEdge();
|
|
157
188
|
const ty = open ? (expand === "bottom" ? 3 : -3) : 0;
|
|
158
189
|
const scale = open ? 0.9 : 1;
|
|
159
190
|
return `translateY(${ty}px) scale(${scale})`;
|
|
160
|
-
},
|
|
161
|
-
|
|
191
|
+
}, /* @ts-ignore */
|
|
192
|
+
...(ngDevMode ? [{ debugName: "headerTransform" }] : /* istanbul ignore next */ []));
|
|
193
|
+
rootHeight = computed(() => (this.open() ? this.expanded() : HEIGHT), /* @ts-ignore */
|
|
194
|
+
...(ngDevMode ? [{ debugName: "rootHeight" }] : /* istanbul ignore next */ []));
|
|
162
195
|
constructor() {
|
|
163
196
|
// Sync view from toast input
|
|
164
197
|
effect(() => {
|
|
@@ -410,10 +443,10 @@ class DynamicToastComponent {
|
|
|
410
443
|
this.dismissed.emit(this.toast().id);
|
|
411
444
|
}
|
|
412
445
|
}
|
|
413
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
414
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "
|
|
446
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: DynamicToastComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
447
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: DynamicToastComponent, isStandalone: true, selector: "dt-toast", inputs: { toast: { classPropertyName: "toast", publicName: "toast", isSignal: true, isRequired: true, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, anchorWidth: { classPropertyName: "anchorWidth", publicName: "anchorWidth", isSignal: true, isRequired: false, transformFunction: null }, anchorHeight: { classPropertyName: "anchorHeight", publicName: "anchorHeight", isSignal: true, isRequired: false, transformFunction: null }, pillAlign: { classPropertyName: "pillAlign", publicName: "pillAlign", isSignal: true, isRequired: false, transformFunction: null }, expandEdge: { classPropertyName: "expandEdge", publicName: "expandEdge", isSignal: true, isRequired: false, transformFunction: null }, canExpand: { classPropertyName: "canExpand", publicName: "canExpand", isSignal: true, isRequired: false, transformFunction: null }, interruptKey: { classPropertyName: "interruptKey", publicName: "interruptKey", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dismissed: "dismissed", entered: "entered", left: "left" }, viewQueries: [{ propertyName: "pillRectRef", first: true, predicate: ["pillRect"], descendants: true }, { propertyName: "bodyRectRef", first: true, predicate: ["bodyRect"], descendants: true }], ngImport: i0, template: "<button\n type=\"button\"\n data-dt-toast\n [attr.data-ready]=\"ready()\"\n [attr.data-expanded]=\"open()\"\n [attr.data-exiting]=\"toast().exiting || false\"\n [attr.data-edge]=\"expandEdge()\"\n [attr.data-position]=\"pillAlign()\"\n [attr.data-state]=\"view().state\"\n [class]=\"toast().className || ''\"\n [style.--_h]=\"rootHeight() + 'px'\"\n [style.--_pw]=\"resolvedPillWidth() + 'px'\"\n [style.--_px]=\"pillX() + 'px'\"\n [style.--_ht]=\"headerTransform()\"\n [style.--_co]=\"open() ? 1 : 0\"\n (mouseenter)=\"handleEnter()\"\n (mouseleave)=\"handleLeave()\"\n (transitionend)=\"handleTransitionEnd($event)\"\n (pointerdown)=\"handlePointerDown($event)\"\n>\n <div data-dt-canvas-wrapper>\n <div\n data-dt-canvas\n [attr.data-edge]=\"expandEdge()\"\n [style.filter]=\"'url(#' + filterId + ')'\"\n >\n <svg\n data-dt-svg\n [attr.width]=\"WIDTH\"\n [attr.height]=\"svgHeight()\"\n [attr.viewBox]=\"'0 0 ' + WIDTH + ' ' + svgHeight()\"\n >\n <title>Toast Notification</title>\n <defs>\n <filter\n [id]=\"filterId\"\n x=\"-20%\"\n y=\"-20%\"\n width=\"140%\"\n height=\"140%\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feGaussianBlur\n in=\"SourceGraphic\"\n [attr.stdDeviation]=\"blur()\"\n result=\"blur\"\n />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -10\"\n result=\"goo\"\n />\n <feComposite in=\"SourceGraphic\" in2=\"goo\" operator=\"atop\" />\n </filter>\n </defs>\n\n <!-- Pill: animated <rect> via Motion -->\n <rect\n #pillRect\n data-dt-pill\n [attr.rx]=\"resolvedRoundness()\"\n [attr.ry]=\"resolvedRoundness()\"\n [attr.fill]=\"view().fill\"\n y=\"0\"\n [style.x.px]=\"pillX()\"\n [style.width.px]=\"resolvedPillWidth()\"\n [style.height.px]=\"open() ? pillHeight() : HEIGHT\"\n />\n\n <!-- Body: animated <rect> via Motion -->\n <rect\n #bodyRect\n data-dt-body\n [attr.y]=\"HEIGHT\"\n [attr.width]=\"WIDTH\"\n [attr.rx]=\"resolvedRoundness()\"\n [attr.ry]=\"resolvedRoundness()\"\n [attr.fill]=\"view().fill\"\n [style.height.px]=\"open() ? expandedContent() : 0\"\n [style.opacity]=\"open() ? 1 : 0\"\n />\n </svg>\n </div>\n </div>\n\n <div data-dt-header [attr.data-edge]=\"expandEdge()\">\n <div data-dt-header-stack>\n <!-- Current header layer -->\n <div\n data-dt-header-inner\n data-layer=\"current\"\n [attr.key]=\"headerLayerCurrent().key\"\n >\n <div\n data-dt-badge\n [attr.data-state]=\"headerLayerCurrent().view.state\"\n [class]=\"headerLayerCurrent().view.styles?.badge || ''\"\n [innerHTML]=\"resolvedIcon(headerLayerCurrent().view)\"\n ></div>\n <span\n data-dt-title\n [attr.data-state]=\"headerLayerCurrent().view.state\"\n [class]=\"headerLayerCurrent().view.styles?.title || ''\"\n >\n {{ headerLayerCurrent().view.title }}\n </span>\n </div>\n\n <!-- Previous header layer (crossfade exit) -->\n @if (headerLayerPrev(); as prev) {\n <div data-dt-header-inner data-layer=\"prev\" data-exiting=\"true\">\n <div\n data-dt-badge\n [attr.data-state]=\"prev.view.state\"\n [class]=\"prev.view.styles?.badge || ''\"\n [innerHTML]=\"resolvedIcon(prev.view)\"\n ></div>\n <span\n data-dt-title\n [attr.data-state]=\"prev.view.state\"\n [class]=\"prev.view.styles?.title || ''\"\n >\n {{ prev.view.title }}\n </span>\n </div>\n }\n </div>\n </div>\n\n @if (hasDesc()) {\n <div\n data-dt-content\n [attr.data-edge]=\"expandEdge()\"\n [attr.data-visible]=\"open()\"\n >\n <div\n data-dt-description\n [class]=\"view().styles?.description || ''\"\n >\n @if (view().description) {\n <span>{{ view().description }}</span>\n }\n @if (view().contentTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"view().contentTemplate\"\n ></ng-container>\n }\n @if (view().button) {\n <a\n href=\"#\"\n data-dt-button\n [attr.data-state]=\"view().state\"\n [class]=\"view().styles?.button || ''\"\n (click)=\"handleButtonClick($event)\"\n >\n {{ view().button?.title }}\n </a>\n }\n </div>\n </div>\n }\n\n <!-- Close button (fades in on hover) -->\n <button\n type=\"button\"\n data-dt-close\n (click)=\"handleClose($event)\"\n aria-label=\"Dismiss notification\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line></svg>\n </button>\n</button>\n", dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
415
448
|
}
|
|
416
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
449
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: DynamicToastComponent, decorators: [{
|
|
417
450
|
type: Component,
|
|
418
451
|
args: [{ selector: "dt-toast", standalone: true, imports: [NgTemplateOutlet], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<button\n type=\"button\"\n data-dt-toast\n [attr.data-ready]=\"ready()\"\n [attr.data-expanded]=\"open()\"\n [attr.data-exiting]=\"toast().exiting || false\"\n [attr.data-edge]=\"expandEdge()\"\n [attr.data-position]=\"pillAlign()\"\n [attr.data-state]=\"view().state\"\n [class]=\"toast().className || ''\"\n [style.--_h]=\"rootHeight() + 'px'\"\n [style.--_pw]=\"resolvedPillWidth() + 'px'\"\n [style.--_px]=\"pillX() + 'px'\"\n [style.--_ht]=\"headerTransform()\"\n [style.--_co]=\"open() ? 1 : 0\"\n (mouseenter)=\"handleEnter()\"\n (mouseleave)=\"handleLeave()\"\n (transitionend)=\"handleTransitionEnd($event)\"\n (pointerdown)=\"handlePointerDown($event)\"\n>\n <div data-dt-canvas-wrapper>\n <div\n data-dt-canvas\n [attr.data-edge]=\"expandEdge()\"\n [style.filter]=\"'url(#' + filterId + ')'\"\n >\n <svg\n data-dt-svg\n [attr.width]=\"WIDTH\"\n [attr.height]=\"svgHeight()\"\n [attr.viewBox]=\"'0 0 ' + WIDTH + ' ' + svgHeight()\"\n >\n <title>Toast Notification</title>\n <defs>\n <filter\n [id]=\"filterId\"\n x=\"-20%\"\n y=\"-20%\"\n width=\"140%\"\n height=\"140%\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feGaussianBlur\n in=\"SourceGraphic\"\n [attr.stdDeviation]=\"blur()\"\n result=\"blur\"\n />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -10\"\n result=\"goo\"\n />\n <feComposite in=\"SourceGraphic\" in2=\"goo\" operator=\"atop\" />\n </filter>\n </defs>\n\n <!-- Pill: animated <rect> via Motion -->\n <rect\n #pillRect\n data-dt-pill\n [attr.rx]=\"resolvedRoundness()\"\n [attr.ry]=\"resolvedRoundness()\"\n [attr.fill]=\"view().fill\"\n y=\"0\"\n [style.x.px]=\"pillX()\"\n [style.width.px]=\"resolvedPillWidth()\"\n [style.height.px]=\"open() ? pillHeight() : HEIGHT\"\n />\n\n <!-- Body: animated <rect> via Motion -->\n <rect\n #bodyRect\n data-dt-body\n [attr.y]=\"HEIGHT\"\n [attr.width]=\"WIDTH\"\n [attr.rx]=\"resolvedRoundness()\"\n [attr.ry]=\"resolvedRoundness()\"\n [attr.fill]=\"view().fill\"\n [style.height.px]=\"open() ? expandedContent() : 0\"\n [style.opacity]=\"open() ? 1 : 0\"\n />\n </svg>\n </div>\n </div>\n\n <div data-dt-header [attr.data-edge]=\"expandEdge()\">\n <div data-dt-header-stack>\n <!-- Current header layer -->\n <div\n data-dt-header-inner\n data-layer=\"current\"\n [attr.key]=\"headerLayerCurrent().key\"\n >\n <div\n data-dt-badge\n [attr.data-state]=\"headerLayerCurrent().view.state\"\n [class]=\"headerLayerCurrent().view.styles?.badge || ''\"\n [innerHTML]=\"resolvedIcon(headerLayerCurrent().view)\"\n ></div>\n <span\n data-dt-title\n [attr.data-state]=\"headerLayerCurrent().view.state\"\n [class]=\"headerLayerCurrent().view.styles?.title || ''\"\n >\n {{ headerLayerCurrent().view.title }}\n </span>\n </div>\n\n <!-- Previous header layer (crossfade exit) -->\n @if (headerLayerPrev(); as prev) {\n <div data-dt-header-inner data-layer=\"prev\" data-exiting=\"true\">\n <div\n data-dt-badge\n [attr.data-state]=\"prev.view.state\"\n [class]=\"prev.view.styles?.badge || ''\"\n [innerHTML]=\"resolvedIcon(prev.view)\"\n ></div>\n <span\n data-dt-title\n [attr.data-state]=\"prev.view.state\"\n [class]=\"prev.view.styles?.title || ''\"\n >\n {{ prev.view.title }}\n </span>\n </div>\n }\n </div>\n </div>\n\n @if (hasDesc()) {\n <div\n data-dt-content\n [attr.data-edge]=\"expandEdge()\"\n [attr.data-visible]=\"open()\"\n >\n <div\n data-dt-description\n [class]=\"view().styles?.description || ''\"\n >\n @if (view().description) {\n <span>{{ view().description }}</span>\n }\n @if (view().contentTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"view().contentTemplate\"\n ></ng-container>\n }\n @if (view().button) {\n <a\n href=\"#\"\n data-dt-button\n [attr.data-state]=\"view().state\"\n [class]=\"view().styles?.button || ''\"\n (click)=\"handleButtonClick($event)\"\n >\n {{ view().button?.title }}\n </a>\n }\n </div>\n </div>\n }\n\n <!-- Close button (fades in on hover) -->\n <button\n type=\"button\"\n data-dt-close\n (click)=\"handleClose($event)\"\n aria-label=\"Dismiss notification\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line></svg>\n </button>\n</button>\n" }]
|
|
419
452
|
}], ctorParameters: () => [], propDecorators: { toast: [{ type: i0.Input, args: [{ isSignal: true, alias: "toast", required: true }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], anchorWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "anchorWidth", required: false }] }], anchorHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "anchorHeight", required: false }] }], pillAlign: [{ type: i0.Input, args: [{ isSignal: true, alias: "pillAlign", required: false }] }], expandEdge: [{ type: i0.Input, args: [{ isSignal: true, alias: "expandEdge", required: false }] }], canExpand: [{ type: i0.Input, args: [{ isSignal: true, alias: "canExpand", required: false }] }], interruptKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "interruptKey", required: false }] }], dismissed: [{ type: i0.Output, args: ["dismissed"] }], entered: [{ type: i0.Output, args: ["entered"] }], left: [{ type: i0.Output, args: ["left"] }], pillRectRef: [{
|
|
@@ -427,23 +460,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.14", ngImpo
|
|
|
427
460
|
const pillAlign = (pos) => pos.includes("right") ? "right" : pos.includes("center") ? "center" : "left";
|
|
428
461
|
const expandDir = (pos) => pos.startsWith("top") ? "bottom" : "top";
|
|
429
462
|
class DynamicToastViewportComponent {
|
|
430
|
-
position = input("top-right",
|
|
431
|
-
|
|
432
|
-
|
|
463
|
+
position = input("top-right", /* @ts-ignore */
|
|
464
|
+
...(ngDevMode ? [{ debugName: "position" }] : /* istanbul ignore next */ []));
|
|
465
|
+
offset = input(undefined, /* @ts-ignore */
|
|
466
|
+
...(ngDevMode ? [{ debugName: "offset" }] : /* istanbul ignore next */ []));
|
|
467
|
+
theme = input("dark", /* @ts-ignore */
|
|
468
|
+
...(ngDevMode ? [{ debugName: "theme" }] : /* istanbul ignore next */ []));
|
|
433
469
|
service = inject(DynamicToastService);
|
|
434
|
-
hovering = signal(new Set(),
|
|
470
|
+
hovering = signal(new Set(), /* @ts-ignore */
|
|
471
|
+
...(ngDevMode ? [{ debugName: "hovering" }] : /* istanbul ignore next */ []));
|
|
435
472
|
systemThemeMql = null;
|
|
436
473
|
systemThemeListener = null;
|
|
437
|
-
activeId = signal(undefined,
|
|
474
|
+
activeId = signal(undefined, /* @ts-ignore */
|
|
475
|
+
...(ngDevMode ? [{ debugName: "activeId" }] : /* istanbul ignore next */ []));
|
|
438
476
|
/** Resolved theme (handles 'system' by listening to prefers-color-scheme) */
|
|
439
|
-
systemIsDark = signal(true,
|
|
477
|
+
systemIsDark = signal(true, /* @ts-ignore */
|
|
478
|
+
...(ngDevMode ? [{ debugName: "systemIsDark" }] : /* istanbul ignore next */ []));
|
|
440
479
|
resolvedTheme = computed(() => {
|
|
441
480
|
const t = this.theme();
|
|
442
481
|
if (t === "system") {
|
|
443
482
|
return this.systemIsDark() ? "dark" : "light";
|
|
444
483
|
}
|
|
445
484
|
return t;
|
|
446
|
-
},
|
|
485
|
+
}, /* @ts-ignore */
|
|
486
|
+
...(ngDevMode ? [{ debugName: "resolvedTheme" }] : /* istanbul ignore next */ []));
|
|
447
487
|
latestId = computed(() => {
|
|
448
488
|
const list = this.service.toasts();
|
|
449
489
|
for (let i = list.length - 1; i >= 0; i--) {
|
|
@@ -451,7 +491,8 @@ class DynamicToastViewportComponent {
|
|
|
451
491
|
return list[i].id;
|
|
452
492
|
}
|
|
453
493
|
return undefined;
|
|
454
|
-
},
|
|
494
|
+
}, /* @ts-ignore */
|
|
495
|
+
...(ngDevMode ? [{ debugName: "latestId" }] : /* istanbul ignore next */ []));
|
|
455
496
|
groups = computed(() => {
|
|
456
497
|
const toasts = this.service.toasts();
|
|
457
498
|
// Filter out toasts that have an anchorId (those go to Dynamic Islands)
|
|
@@ -494,7 +535,8 @@ class DynamicToastViewportComponent {
|
|
|
494
535
|
});
|
|
495
536
|
}
|
|
496
537
|
return res;
|
|
497
|
-
},
|
|
538
|
+
}, /* @ts-ignore */
|
|
539
|
+
...(ngDevMode ? [{ debugName: "groups" }] : /* istanbul ignore next */ []));
|
|
498
540
|
ngOnInit() {
|
|
499
541
|
this.service.registerViewport(this);
|
|
500
542
|
// Listen for system theme changes
|
|
@@ -531,19 +573,20 @@ class DynamicToastViewportComponent {
|
|
|
531
573
|
this.service.resumeTimers();
|
|
532
574
|
});
|
|
533
575
|
}
|
|
534
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
535
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.14", type: DynamicToastViewportComponent, isStandalone: true, selector: "dt-viewport", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@for (group of groups(); track group.pos) {\n <section\n data-dt-viewport\n [attr.data-position]=\"group.pos\"\n [attr.data-theme]=\"resolvedTheme()\"\n aria-live=\"polite\"\n [style.top]=\"group.style?.top\"\n [style.right]=\"group.style?.right\"\n [style.bottom]=\"group.style?.bottom\"\n [style.left]=\"group.style?.left\"\n >\n @for (t of group.items; track t.id) {\n <dt-toast\n [toast]=\"t\"\n [theme]=\"resolvedTheme()\"\n [pillAlign]=\"group.pill\"\n [expandEdge]=\"group.expand\"\n [canExpand]=\"activeId() === undefined || activeId() === t.id\"\n (entered)=\"onToastEnter($event)\"\n (left)=\"onToastLeave($event)\"\n (dismissed)=\"service.dismiss($event)\"\n />\n }\n </section>\n}\n", styles: ["[data-dt-viewport]{--sileo-spring-easing: linear( 0, .002 .6%, .007 1.2%, .015 1.8%, .026 2.4%, .041 3.1%, .06 3.8%, .108 5.3%, .157 6.6%, .214 8%, .467 13.7%, .577 16.3%, .631 17.7%, .682 19.1%, .73 20.5%, .771 21.8%, .808 23.1%, .844 24.5%, .874 25.8%, .903 27.2%, .928 28.6%, .952 30.1%, .972 31.6%, .988 33.1%, 1.01 35.7%, 1.025 38.5%, 1.034 41.6%, 1.038 45%, 1.035 50.1%, 1.012 64.2%, 1.003 73%, .999 83.7%, 1 );--sileo-duration: .6s;--sileo-height: 40px;--sileo-width: 350px;--sileo-state-success: oklch(.723 .219 142.136);--sileo-state-loading: oklch(.556 0 0);--sileo-state-error: oklch(.637 .237 25.331);--sileo-state-warning: oklch(.795 .184 86.047);--sileo-state-info: oklch(.685 .169 237.323);--sileo-state-action: oklch(.623 .214 259.815)}[data-dt-toast]{position:relative;cursor:pointer;pointer-events:auto;touch-action:none;border:0;background:transparent;padding:0;width:var(--sileo-width);height:var(--_h, var(--sileo-height));opacity:0;transform:translateZ(0) scale(.95);transform-origin:center;contain:layout style;overflow:visible;color:#fff}[data-dt-toast][data-state=loading]{cursor:default}[data-dt-toast][data-ready=true]{opacity:1;transform:translateZ(0) scale(1);transition:transform calc(var(--sileo-duration) * .66) var(--sileo-spring-easing),opacity calc(var(--sileo-duration) * .66) var(--sileo-spring-easing),margin-bottom calc(var(--sileo-duration) * .66) var(--sileo-spring-easing),margin-top calc(var(--sileo-duration) * .66) var(--sileo-spring-easing),height var(--sileo-duration) var(--sileo-spring-easing)}[data-dt-toast][data-ready=true]:active{transform:translateZ(0) scale(.97);transition:transform .1s cubic-bezier(.25,.8,.25,1)}[data-dt-viewport][data-position^=top] [data-dt-toast]:not([data-ready=true]){transform:translateY(-6px) scale(.95)}[data-dt-viewport][data-position^=bottom] [data-dt-toast]:not([data-ready=true]){transform:translateY(6px) scale(.95)}[data-dt-toast][data-ready=true][data-exiting=true]{opacity:0;pointer-events:none}[data-dt-viewport][data-position^=top] [data-dt-toast][data-ready=true][data-exiting=true]{transform:translateY(-6px) scale(.95)}[data-dt-viewport][data-position^=bottom] [data-dt-toast][data-ready=true][data-exiting=true]{transform:translateY(6px) scale(.95)}[data-dt-canvas]{position:absolute;left:0;right:0;pointer-events:none;transform:translateZ(0);contain:layout style;overflow:visible}[data-dt-canvas][data-edge=top]{bottom:0;transform:scaleY(-1) translateZ(0)}[data-dt-canvas][data-edge=bottom]{top:0}[data-dt-svg]{overflow:visible}[data-dt-toast][data-ready=true] [data-dt-pill]{transition:x var(--sileo-duration) var(--sileo-spring-easing),width var(--sileo-duration) var(--sileo-spring-easing),height var(--sileo-duration) var(--sileo-spring-easing)}[data-dt-toast][data-ready=true] [data-dt-body]{transition:height var(--sileo-duration) var(--sileo-spring-easing),opacity calc(var(--sileo-duration) * .8) var(--sileo-spring-easing)}[data-dt-header]{position:absolute;z-index:20;display:flex;align-items:center;padding:.5rem;height:var(--sileo-height);overflow:hidden;left:var(--_px, 0px);transform:var(--_ht);max-width:var(--_pw);box-sizing:border-box}[data-dt-toast]:not([data-state=loading]) [data-dt-header]{padding-right:22px}[data-dt-toast][data-ready=true] [data-dt-header]{transition:transform var(--sileo-duration) var(--sileo-spring-easing),left var(--sileo-duration) var(--sileo-spring-easing),max-width var(--sileo-duration) var(--sileo-spring-easing)}[data-dt-header][data-edge=top]{bottom:0}[data-dt-header][data-edge=bottom]{top:0}[data-dt-header-stack]{position:relative;display:inline-flex;align-items:center;height:100%}[data-dt-close]{position:absolute;z-index:30;top:10px;left:calc(var(--_px, 0px) + var(--_pw, 350px) - 25px);display:flex;align-items:center;justify-content:center;border:0;opacity:0;pointer-events:none;width:20px;height:20px;border-radius:9999px;cursor:pointer;padding:0;flex-shrink:0;transition:opacity .15s ease,background-color .15s ease,color .15s ease,transform .15s ease,left var(--sileo-duration) var(--sileo-spring-easing)}[data-dt-viewport][data-theme=dark] [data-dt-close]{color:#ffffff80;background:#ffffff1a}[data-dt-viewport][data-theme=dark] [data-dt-close]:hover{color:#fff;background:#ffffff40}[data-dt-viewport][data-theme=light] [data-dt-close]{color:#0f172a80;background:#0000000f}[data-dt-viewport][data-theme=light] [data-dt-close]:hover{color:#0f172a;background:#00000026}[data-dt-close] svg{width:12px;height:12px;stroke-width:2.5}[data-dt-toast]:hover [data-dt-close]{opacity:1;pointer-events:auto}[data-dt-toast][data-state=loading] [data-dt-close]{display:none!important}[data-dt-header-inner]{display:flex;align-items:center;gap:.5rem;white-space:nowrap;opacity:1;filter:blur(0px);transform:translateZ(0)}[data-dt-header-inner][data-layer=current]{position:relative;z-index:1;animation:dt-header-enter var(--sileo-duration) var(--sileo-spring-easing) both}[data-dt-header-inner][data-exiting=true],[data-dt-header-inner][data-layer=current]:not(:only-child){will-change:opacity,filter}[data-dt-header-inner][data-layer=prev]{position:absolute;left:0;top:0;z-index:0;pointer-events:none}[data-dt-header-inner][data-exiting=true]{animation:dt-header-exit calc(var(--sileo-duration) * .7) ease forwards}[data-dt-badge]{display:flex;height:24px;width:24px;flex-shrink:0;align-items:center;justify-content:center;padding:2px;box-sizing:border-box;border-radius:9999px;color:var(--sileo-tone, currentColor);background-color:var(--sileo-tone-bg, transparent)}[data-dt-title]{font-size:.825rem;line-height:1rem;font-weight:500;text-transform:capitalize;color:var(--sileo-tone, currentColor)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state]{--_c: var(--sileo-state-success)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=loading]{--_c: var(--sileo-state-loading)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=error]{--_c: var(--sileo-state-error)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=warning]{--_c: var(--sileo-state-warning)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=info]{--_c: var(--sileo-state-info)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=action]{--_c: var(--sileo-state-action)}:is([data-dt-badge],[data-dt-title])[data-state]{--sileo-tone: var(--_c);--sileo-tone-bg: color-mix(in oklch, var(--_c) 20%, transparent)}[data-dt-content]{position:absolute;left:0;z-index:10;width:100%;pointer-events:none;opacity:var(--_co, 0)}[data-dt-content]:not([data-visible=true]){visibility:hidden}[data-dt-toast][data-ready=true] [data-dt-content]{transition:opacity calc(var(--sileo-duration) * .08) ease calc(var(--sileo-duration) * .04)}[data-dt-content][data-edge=top]{top:0}[data-dt-content][data-edge=bottom]{top:var(--sileo-height)}[data-dt-content][data-visible=true]{pointer-events:auto}[data-dt-toast][data-ready=true] [data-dt-content][data-visible=true]{transition:opacity calc(var(--sileo-duration) * .6) ease calc(var(--sileo-duration) * .3)}[data-dt-description]{width:100%;text-align:left;padding:1rem;font-size:.875rem;line-height:1.25rem;contain:layout style paint}[data-dt-button]{display:flex;align-items:center;justify-content:center;height:1.75rem;padding:0 .625rem;margin-top:.75rem;border-radius:9999px;border:0;font-size:.75rem;font-weight:500;cursor:pointer;color:var(--sileo-btn-color, currentColor);background-color:var(--sileo-btn-bg, transparent);transition:background-color .15s ease}[data-dt-button]:hover{background-color:var(--sileo-btn-bg-hover, transparent)}[data-dt-button][data-state]{--sileo-btn-color: var(--_c);--sileo-btn-bg: color-mix(in oklch, var(--_c) 15%, transparent);--sileo-btn-bg-hover: color-mix(in oklch, var(--_c) 25%, transparent)}[data-dt-icon=spin]{animation:dt-spin 1s linear infinite}@keyframes dt-spin{to{transform:rotate(360deg)}}@keyframes dt-header-enter{0%{opacity:0;filter:blur(6px)}to{opacity:1;filter:blur(0px)}}@keyframes dt-header-exit{0%{opacity:1;filter:blur(0px)}to{opacity:0;filter:blur(6px)}}[data-dt-viewport]{position:fixed;z-index:50;display:flex;gap:.75rem;padding:.75rem;pointer-events:none;max-width:calc(100vw - 1.5rem);contain:layout style}[data-dt-toast]{pointer-events:auto}[data-dt-viewport][data-position^=top] [data-dt-toast]:not([data-ready=true]){margin-bottom:calc(-1 * (var(--sileo-height) + .75rem))}[data-dt-viewport][data-position^=bottom] [data-dt-toast]:not([data-ready=true]){margin-top:calc(-1 * (var(--sileo-height) + .75rem))}[data-dt-viewport][data-position^=top]{top:0;flex-direction:column-reverse}[data-dt-viewport][data-position^=bottom]{bottom:0;flex-direction:column}[data-dt-viewport][data-position$=left]{left:0;align-items:flex-start}[data-dt-viewport][data-position$=right]{right:0;align-items:flex-end}[data-dt-viewport][data-position$=center]{left:50%;transform:translate(-50%);align-items:center}[data-dt-canvas-wrapper]{position:absolute;inset:0;pointer-events:none;overflow:visible}[data-dt-viewport][data-theme=light] [data-dt-canvas-wrapper]{filter:drop-shadow(0 0 1px rgba(0,0,0,.12)) drop-shadow(0 4px 16px rgba(0,0,0,.08))}[data-dt-viewport][data-theme=dark] [data-dt-toast]{color:#fff}[data-dt-viewport][data-theme=dark] [data-dt-description]{color:#fff9}[data-dt-viewport][data-theme=light] [data-dt-toast]{color:#0f172a}[data-dt-viewport][data-theme=light] [data-dt-description]{color:#0f172a99}@media(prefers-reduced-motion:no-preference){[data-dt-toast][data-ready=true]:hover,[data-dt-toast][data-ready=true][data-exiting=true]{will-change:transform,opacity,height}}@media(prefers-reduced-motion:reduce){[data-dt-viewport],[data-dt-viewport] *,[data-dt-viewport] *:before,[data-dt-viewport] *:after{animation-duration:.01ms;animation-iteration-count:1;transition-duration:.01ms}}[data-dt-island]{position:relative;display:inline-block}[data-dt-island-container]{position:absolute;z-index:50;pointer-events:none;left:50%;transform:translate(-50%)}[data-dt-island-container][data-expand=bottom]{top:0}[data-dt-island-container][data-expand=top]{bottom:0}[data-dt-island-container] [data-dt-toast]{pointer-events:auto}\n"], dependencies: [{ kind: "component", type: DynamicToastComponent, selector: "dt-toast", inputs: ["toast", "theme", "anchorWidth", "anchorHeight", "pillAlign", "expandEdge", "canExpand", "interruptKey"], outputs: ["dismissed", "entered", "left"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
576
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: DynamicToastViewportComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
577
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.0", type: DynamicToastViewportComponent, isStandalone: true, selector: "dt-viewport", inputs: { position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "@for (group of groups(); track group.pos) {\n <section\n data-dt-viewport\n [attr.data-position]=\"group.pos\"\n [attr.data-theme]=\"resolvedTheme()\"\n aria-live=\"polite\"\n [style.top]=\"group.style?.top\"\n [style.right]=\"group.style?.right\"\n [style.bottom]=\"group.style?.bottom\"\n [style.left]=\"group.style?.left\"\n >\n @for (t of group.items; track t.id) {\n <dt-toast\n [toast]=\"t\"\n [theme]=\"resolvedTheme()\"\n [pillAlign]=\"group.pill\"\n [expandEdge]=\"group.expand\"\n [canExpand]=\"activeId() === undefined || activeId() === t.id\"\n (entered)=\"onToastEnter($event)\"\n (left)=\"onToastLeave($event)\"\n (dismissed)=\"service.dismiss($event)\"\n />\n }\n </section>\n}\n", styles: ["[data-dt-viewport]{--sileo-spring-easing: linear( 0, .002 .6%, .007 1.2%, .015 1.8%, .026 2.4%, .041 3.1%, .06 3.8%, .108 5.3%, .157 6.6%, .214 8%, .467 13.7%, .577 16.3%, .631 17.7%, .682 19.1%, .73 20.5%, .771 21.8%, .808 23.1%, .844 24.5%, .874 25.8%, .903 27.2%, .928 28.6%, .952 30.1%, .972 31.6%, .988 33.1%, 1.01 35.7%, 1.025 38.5%, 1.034 41.6%, 1.038 45%, 1.035 50.1%, 1.012 64.2%, 1.003 73%, .999 83.7%, 1 );--sileo-duration: .6s;--sileo-height: 40px;--sileo-width: 350px;--sileo-state-success: oklch(.723 .219 142.136);--sileo-state-loading: oklch(.556 0 0);--sileo-state-error: oklch(.637 .237 25.331);--sileo-state-warning: oklch(.795 .184 86.047);--sileo-state-info: oklch(.685 .169 237.323);--sileo-state-action: oklch(.623 .214 259.815)}[data-dt-toast]{position:relative;cursor:pointer;pointer-events:auto;touch-action:none;border:0;background:transparent;padding:0;width:var(--sileo-width);height:var(--_h, var(--sileo-height));opacity:0;transform:translateZ(0) scale(.95);transform-origin:center;contain:layout style;overflow:visible;color:#fff}[data-dt-toast][data-state=loading]{cursor:default}[data-dt-toast][data-ready=true]{opacity:1;transform:translateZ(0) scale(1);transition:transform calc(var(--sileo-duration) * .66) var(--sileo-spring-easing),opacity calc(var(--sileo-duration) * .66) var(--sileo-spring-easing),margin-bottom calc(var(--sileo-duration) * .66) var(--sileo-spring-easing),margin-top calc(var(--sileo-duration) * .66) var(--sileo-spring-easing),height var(--sileo-duration) var(--sileo-spring-easing)}[data-dt-toast][data-ready=true]:active{transform:translateZ(0) scale(.97);transition:transform .1s cubic-bezier(.25,.8,.25,1)}[data-dt-viewport][data-position^=top] [data-dt-toast]:not([data-ready=true]){transform:translateY(-6px) scale(.95)}[data-dt-viewport][data-position^=bottom] [data-dt-toast]:not([data-ready=true]){transform:translateY(6px) scale(.95)}[data-dt-toast][data-ready=true][data-exiting=true]{opacity:0;pointer-events:none}[data-dt-viewport][data-position^=top] [data-dt-toast][data-ready=true][data-exiting=true]{transform:translateY(-6px) scale(.95)}[data-dt-viewport][data-position^=bottom] [data-dt-toast][data-ready=true][data-exiting=true]{transform:translateY(6px) scale(.95)}[data-dt-canvas]{position:absolute;left:0;right:0;pointer-events:none;transform:translateZ(0);contain:layout style;overflow:visible}[data-dt-canvas][data-edge=top]{bottom:0;transform:scaleY(-1) translateZ(0)}[data-dt-canvas][data-edge=bottom]{top:0}[data-dt-svg]{overflow:visible}[data-dt-toast][data-ready=true] [data-dt-pill]{transition:x var(--sileo-duration) var(--sileo-spring-easing),width var(--sileo-duration) var(--sileo-spring-easing),height var(--sileo-duration) var(--sileo-spring-easing)}[data-dt-toast][data-ready=true] [data-dt-body]{transition:height var(--sileo-duration) var(--sileo-spring-easing),opacity calc(var(--sileo-duration) * .8) var(--sileo-spring-easing)}[data-dt-header]{position:absolute;z-index:20;display:flex;align-items:center;padding:.5rem;height:var(--sileo-height);overflow:hidden;left:var(--_px, 0px);transform:var(--_ht);max-width:var(--_pw);box-sizing:border-box}[data-dt-toast]:not([data-state=loading]) [data-dt-header]{padding-right:22px}[data-dt-toast][data-ready=true] [data-dt-header]{transition:transform var(--sileo-duration) var(--sileo-spring-easing),left var(--sileo-duration) var(--sileo-spring-easing),max-width var(--sileo-duration) var(--sileo-spring-easing)}[data-dt-header][data-edge=top]{bottom:0}[data-dt-header][data-edge=bottom]{top:0}[data-dt-header-stack]{position:relative;display:inline-flex;align-items:center;height:100%}[data-dt-close]{position:absolute;z-index:30;top:10px;left:calc(var(--_px, 0px) + var(--_pw, 350px) - 25px);display:flex;align-items:center;justify-content:center;border:0;opacity:0;pointer-events:none;width:20px;height:20px;border-radius:9999px;cursor:pointer;padding:0;flex-shrink:0;transition:opacity .15s ease,background-color .15s ease,color .15s ease,transform .15s ease,left var(--sileo-duration) var(--sileo-spring-easing)}[data-dt-viewport][data-theme=dark] [data-dt-close]{color:#ffffff80;background:#ffffff1a}[data-dt-viewport][data-theme=dark] [data-dt-close]:hover{color:#fff;background:#ffffff40}[data-dt-viewport][data-theme=light] [data-dt-close]{color:#0f172a80;background:#0000000f}[data-dt-viewport][data-theme=light] [data-dt-close]:hover{color:#0f172a;background:#00000026}[data-dt-close] svg{width:12px;height:12px;stroke-width:2.5}[data-dt-toast]:hover [data-dt-close]{opacity:1;pointer-events:auto}[data-dt-toast][data-state=loading] [data-dt-close]{display:none!important}[data-dt-header-inner]{display:flex;align-items:center;gap:.5rem;white-space:nowrap;opacity:1;filter:blur(0px);transform:translateZ(0)}[data-dt-header-inner][data-layer=current]{position:relative;z-index:1;animation:dt-header-enter var(--sileo-duration) var(--sileo-spring-easing) both}[data-dt-header-inner][data-exiting=true],[data-dt-header-inner][data-layer=current]:not(:only-child){will-change:opacity,filter}[data-dt-header-inner][data-layer=prev]{position:absolute;left:0;top:0;z-index:0;pointer-events:none}[data-dt-header-inner][data-exiting=true]{animation:dt-header-exit calc(var(--sileo-duration) * .7) ease forwards}[data-dt-badge]{display:flex;height:24px;width:24px;flex-shrink:0;align-items:center;justify-content:center;padding:2px;box-sizing:border-box;border-radius:9999px;color:var(--sileo-tone, currentColor);background-color:var(--sileo-tone-bg, transparent)}[data-dt-title]{font-size:.825rem;line-height:1rem;font-weight:500;color:var(--sileo-tone, currentColor)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state]{--_c: var(--sileo-state-success)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=loading]{--_c: var(--sileo-state-loading)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=error]{--_c: var(--sileo-state-error)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=warning]{--_c: var(--sileo-state-warning)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=info]{--_c: var(--sileo-state-info)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=action]{--_c: var(--sileo-state-action)}:is([data-dt-badge],[data-dt-title])[data-state]{--sileo-tone: var(--_c);--sileo-tone-bg: color-mix(in oklch, var(--_c) 20%, transparent)}[data-dt-content]{position:absolute;left:0;z-index:10;width:100%;pointer-events:none;opacity:var(--_co, 0)}[data-dt-content]:not([data-visible=true]){visibility:hidden}[data-dt-toast][data-ready=true] [data-dt-content]{transition:opacity calc(var(--sileo-duration) * .08) ease calc(var(--sileo-duration) * .04)}[data-dt-content][data-edge=top]{top:0}[data-dt-content][data-edge=bottom]{top:var(--sileo-height)}[data-dt-content][data-visible=true]{pointer-events:auto}[data-dt-toast][data-ready=true] [data-dt-content][data-visible=true]{transition:opacity calc(var(--sileo-duration) * .6) ease calc(var(--sileo-duration) * .3)}[data-dt-description]{width:100%;text-align:left;padding:1rem;font-size:.875rem;line-height:1.25rem;contain:layout style paint}[data-dt-button]{display:flex;align-items:center;justify-content:center;height:1.75rem;padding:0 .625rem;margin-top:.75rem;border-radius:9999px;border:0;font-size:.75rem;font-weight:500;cursor:pointer;color:var(--sileo-btn-color, currentColor);background-color:var(--sileo-btn-bg, transparent);transition:background-color .15s ease}[data-dt-button]:hover{background-color:var(--sileo-btn-bg-hover, transparent)}[data-dt-button][data-state]{--sileo-btn-color: var(--_c);--sileo-btn-bg: color-mix(in oklch, var(--_c) 15%, transparent);--sileo-btn-bg-hover: color-mix(in oklch, var(--_c) 25%, transparent)}[data-dt-icon=spin]{animation:dt-spin 1s linear infinite}@keyframes dt-spin{to{transform:rotate(360deg)}}@keyframes dt-header-enter{0%{opacity:0;filter:blur(6px)}to{opacity:1;filter:blur(0px)}}@keyframes dt-header-exit{0%{opacity:1;filter:blur(0px)}to{opacity:0;filter:blur(6px)}}[data-dt-viewport]{position:fixed;z-index:50;display:flex;gap:.75rem;padding:.75rem;pointer-events:none;max-width:calc(100vw - 1.5rem);contain:layout style}[data-dt-toast]{pointer-events:auto}[data-dt-viewport][data-position^=top] [data-dt-toast]:not([data-ready=true]){margin-bottom:calc(-1 * (var(--sileo-height) + .75rem))}[data-dt-viewport][data-position^=bottom] [data-dt-toast]:not([data-ready=true]){margin-top:calc(-1 * (var(--sileo-height) + .75rem))}[data-dt-viewport][data-position^=top]{top:0;flex-direction:column-reverse}[data-dt-viewport][data-position^=bottom]{bottom:0;flex-direction:column}[data-dt-viewport][data-position$=left]{left:0;align-items:flex-start}[data-dt-viewport][data-position$=right]{right:0;align-items:flex-end}[data-dt-viewport][data-position$=center]{left:50%;transform:translate(-50%);align-items:center}[data-dt-canvas-wrapper]{position:absolute;inset:0;pointer-events:none;overflow:visible}[data-dt-viewport][data-theme=light] [data-dt-canvas-wrapper]{filter:drop-shadow(0 0 1px rgba(0,0,0,.12)) drop-shadow(0 4px 16px rgba(0,0,0,.08))}[data-dt-viewport][data-theme=dark] [data-dt-toast]{color:#fff}[data-dt-viewport][data-theme=dark] [data-dt-description]{color:#fff9}[data-dt-viewport][data-theme=light] [data-dt-toast]{color:#0f172a}[data-dt-viewport][data-theme=light] [data-dt-description]{color:#0f172a99}@media(prefers-reduced-motion:no-preference){[data-dt-toast][data-ready=true]:hover,[data-dt-toast][data-ready=true][data-exiting=true]{will-change:transform,opacity,height}}@media(prefers-reduced-motion:reduce){[data-dt-viewport],[data-dt-viewport] *,[data-dt-viewport] *:before,[data-dt-viewport] *:after{animation-duration:.01ms;animation-iteration-count:1;transition-duration:.01ms}}[data-dt-island]{position:relative;display:inline-block}[data-dt-island-container]{position:absolute;z-index:50;pointer-events:none;left:50%;transform:translate(-50%)}[data-dt-island-container][data-expand=bottom]{top:0}[data-dt-island-container][data-expand=top]{bottom:0}[data-dt-island-container] [data-dt-toast]{pointer-events:auto}\n"], dependencies: [{ kind: "component", type: DynamicToastComponent, selector: "dt-toast", inputs: ["toast", "theme", "anchorWidth", "anchorHeight", "pillAlign", "expandEdge", "canExpand", "interruptKey"], outputs: ["dismissed", "entered", "left"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
536
578
|
}
|
|
537
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
579
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: DynamicToastViewportComponent, decorators: [{
|
|
538
580
|
type: Component,
|
|
539
|
-
args: [{ selector: "dt-viewport", standalone: true, imports: [DynamicToastComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "@for (group of groups(); track group.pos) {\n <section\n data-dt-viewport\n [attr.data-position]=\"group.pos\"\n [attr.data-theme]=\"resolvedTheme()\"\n aria-live=\"polite\"\n [style.top]=\"group.style?.top\"\n [style.right]=\"group.style?.right\"\n [style.bottom]=\"group.style?.bottom\"\n [style.left]=\"group.style?.left\"\n >\n @for (t of group.items; track t.id) {\n <dt-toast\n [toast]=\"t\"\n [theme]=\"resolvedTheme()\"\n [pillAlign]=\"group.pill\"\n [expandEdge]=\"group.expand\"\n [canExpand]=\"activeId() === undefined || activeId() === t.id\"\n (entered)=\"onToastEnter($event)\"\n (left)=\"onToastLeave($event)\"\n (dismissed)=\"service.dismiss($event)\"\n />\n }\n </section>\n}\n", styles: ["[data-dt-viewport]{--sileo-spring-easing: linear( 0, .002 .6%, .007 1.2%, .015 1.8%, .026 2.4%, .041 3.1%, .06 3.8%, .108 5.3%, .157 6.6%, .214 8%, .467 13.7%, .577 16.3%, .631 17.7%, .682 19.1%, .73 20.5%, .771 21.8%, .808 23.1%, .844 24.5%, .874 25.8%, .903 27.2%, .928 28.6%, .952 30.1%, .972 31.6%, .988 33.1%, 1.01 35.7%, 1.025 38.5%, 1.034 41.6%, 1.038 45%, 1.035 50.1%, 1.012 64.2%, 1.003 73%, .999 83.7%, 1 );--sileo-duration: .6s;--sileo-height: 40px;--sileo-width: 350px;--sileo-state-success: oklch(.723 .219 142.136);--sileo-state-loading: oklch(.556 0 0);--sileo-state-error: oklch(.637 .237 25.331);--sileo-state-warning: oklch(.795 .184 86.047);--sileo-state-info: oklch(.685 .169 237.323);--sileo-state-action: oklch(.623 .214 259.815)}[data-dt-toast]{position:relative;cursor:pointer;pointer-events:auto;touch-action:none;border:0;background:transparent;padding:0;width:var(--sileo-width);height:var(--_h, var(--sileo-height));opacity:0;transform:translateZ(0) scale(.95);transform-origin:center;contain:layout style;overflow:visible;color:#fff}[data-dt-toast][data-state=loading]{cursor:default}[data-dt-toast][data-ready=true]{opacity:1;transform:translateZ(0) scale(1);transition:transform calc(var(--sileo-duration) * .66) var(--sileo-spring-easing),opacity calc(var(--sileo-duration) * .66) var(--sileo-spring-easing),margin-bottom calc(var(--sileo-duration) * .66) var(--sileo-spring-easing),margin-top calc(var(--sileo-duration) * .66) var(--sileo-spring-easing),height var(--sileo-duration) var(--sileo-spring-easing)}[data-dt-toast][data-ready=true]:active{transform:translateZ(0) scale(.97);transition:transform .1s cubic-bezier(.25,.8,.25,1)}[data-dt-viewport][data-position^=top] [data-dt-toast]:not([data-ready=true]){transform:translateY(-6px) scale(.95)}[data-dt-viewport][data-position^=bottom] [data-dt-toast]:not([data-ready=true]){transform:translateY(6px) scale(.95)}[data-dt-toast][data-ready=true][data-exiting=true]{opacity:0;pointer-events:none}[data-dt-viewport][data-position^=top] [data-dt-toast][data-ready=true][data-exiting=true]{transform:translateY(-6px) scale(.95)}[data-dt-viewport][data-position^=bottom] [data-dt-toast][data-ready=true][data-exiting=true]{transform:translateY(6px) scale(.95)}[data-dt-canvas]{position:absolute;left:0;right:0;pointer-events:none;transform:translateZ(0);contain:layout style;overflow:visible}[data-dt-canvas][data-edge=top]{bottom:0;transform:scaleY(-1) translateZ(0)}[data-dt-canvas][data-edge=bottom]{top:0}[data-dt-svg]{overflow:visible}[data-dt-toast][data-ready=true] [data-dt-pill]{transition:x var(--sileo-duration) var(--sileo-spring-easing),width var(--sileo-duration) var(--sileo-spring-easing),height var(--sileo-duration) var(--sileo-spring-easing)}[data-dt-toast][data-ready=true] [data-dt-body]{transition:height var(--sileo-duration) var(--sileo-spring-easing),opacity calc(var(--sileo-duration) * .8) var(--sileo-spring-easing)}[data-dt-header]{position:absolute;z-index:20;display:flex;align-items:center;padding:.5rem;height:var(--sileo-height);overflow:hidden;left:var(--_px, 0px);transform:var(--_ht);max-width:var(--_pw);box-sizing:border-box}[data-dt-toast]:not([data-state=loading]) [data-dt-header]{padding-right:22px}[data-dt-toast][data-ready=true] [data-dt-header]{transition:transform var(--sileo-duration) var(--sileo-spring-easing),left var(--sileo-duration) var(--sileo-spring-easing),max-width var(--sileo-duration) var(--sileo-spring-easing)}[data-dt-header][data-edge=top]{bottom:0}[data-dt-header][data-edge=bottom]{top:0}[data-dt-header-stack]{position:relative;display:inline-flex;align-items:center;height:100%}[data-dt-close]{position:absolute;z-index:30;top:10px;left:calc(var(--_px, 0px) + var(--_pw, 350px) - 25px);display:flex;align-items:center;justify-content:center;border:0;opacity:0;pointer-events:none;width:20px;height:20px;border-radius:9999px;cursor:pointer;padding:0;flex-shrink:0;transition:opacity .15s ease,background-color .15s ease,color .15s ease,transform .15s ease,left var(--sileo-duration) var(--sileo-spring-easing)}[data-dt-viewport][data-theme=dark] [data-dt-close]{color:#ffffff80;background:#ffffff1a}[data-dt-viewport][data-theme=dark] [data-dt-close]:hover{color:#fff;background:#ffffff40}[data-dt-viewport][data-theme=light] [data-dt-close]{color:#0f172a80;background:#0000000f}[data-dt-viewport][data-theme=light] [data-dt-close]:hover{color:#0f172a;background:#00000026}[data-dt-close] svg{width:12px;height:12px;stroke-width:2.5}[data-dt-toast]:hover [data-dt-close]{opacity:1;pointer-events:auto}[data-dt-toast][data-state=loading] [data-dt-close]{display:none!important}[data-dt-header-inner]{display:flex;align-items:center;gap:.5rem;white-space:nowrap;opacity:1;filter:blur(0px);transform:translateZ(0)}[data-dt-header-inner][data-layer=current]{position:relative;z-index:1;animation:dt-header-enter var(--sileo-duration) var(--sileo-spring-easing) both}[data-dt-header-inner][data-exiting=true],[data-dt-header-inner][data-layer=current]:not(:only-child){will-change:opacity,filter}[data-dt-header-inner][data-layer=prev]{position:absolute;left:0;top:0;z-index:0;pointer-events:none}[data-dt-header-inner][data-exiting=true]{animation:dt-header-exit calc(var(--sileo-duration) * .7) ease forwards}[data-dt-badge]{display:flex;height:24px;width:24px;flex-shrink:0;align-items:center;justify-content:center;padding:2px;box-sizing:border-box;border-radius:9999px;color:var(--sileo-tone, currentColor);background-color:var(--sileo-tone-bg, transparent)}[data-dt-title]{font-size:.825rem;line-height:1rem;font-weight:500;text-transform:capitalize;color:var(--sileo-tone, currentColor)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state]{--_c: var(--sileo-state-success)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=loading]{--_c: var(--sileo-state-loading)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=error]{--_c: var(--sileo-state-error)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=warning]{--_c: var(--sileo-state-warning)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=info]{--_c: var(--sileo-state-info)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=action]{--_c: var(--sileo-state-action)}:is([data-dt-badge],[data-dt-title])[data-state]{--sileo-tone: var(--_c);--sileo-tone-bg: color-mix(in oklch, var(--_c) 20%, transparent)}[data-dt-content]{position:absolute;left:0;z-index:10;width:100%;pointer-events:none;opacity:var(--_co, 0)}[data-dt-content]:not([data-visible=true]){visibility:hidden}[data-dt-toast][data-ready=true] [data-dt-content]{transition:opacity calc(var(--sileo-duration) * .08) ease calc(var(--sileo-duration) * .04)}[data-dt-content][data-edge=top]{top:0}[data-dt-content][data-edge=bottom]{top:var(--sileo-height)}[data-dt-content][data-visible=true]{pointer-events:auto}[data-dt-toast][data-ready=true] [data-dt-content][data-visible=true]{transition:opacity calc(var(--sileo-duration) * .6) ease calc(var(--sileo-duration) * .3)}[data-dt-description]{width:100%;text-align:left;padding:1rem;font-size:.875rem;line-height:1.25rem;contain:layout style paint}[data-dt-button]{display:flex;align-items:center;justify-content:center;height:1.75rem;padding:0 .625rem;margin-top:.75rem;border-radius:9999px;border:0;font-size:.75rem;font-weight:500;cursor:pointer;color:var(--sileo-btn-color, currentColor);background-color:var(--sileo-btn-bg, transparent);transition:background-color .15s ease}[data-dt-button]:hover{background-color:var(--sileo-btn-bg-hover, transparent)}[data-dt-button][data-state]{--sileo-btn-color: var(--_c);--sileo-btn-bg: color-mix(in oklch, var(--_c) 15%, transparent);--sileo-btn-bg-hover: color-mix(in oklch, var(--_c) 25%, transparent)}[data-dt-icon=spin]{animation:dt-spin 1s linear infinite}@keyframes dt-spin{to{transform:rotate(360deg)}}@keyframes dt-header-enter{0%{opacity:0;filter:blur(6px)}to{opacity:1;filter:blur(0px)}}@keyframes dt-header-exit{0%{opacity:1;filter:blur(0px)}to{opacity:0;filter:blur(6px)}}[data-dt-viewport]{position:fixed;z-index:50;display:flex;gap:.75rem;padding:.75rem;pointer-events:none;max-width:calc(100vw - 1.5rem);contain:layout style}[data-dt-toast]{pointer-events:auto}[data-dt-viewport][data-position^=top] [data-dt-toast]:not([data-ready=true]){margin-bottom:calc(-1 * (var(--sileo-height) + .75rem))}[data-dt-viewport][data-position^=bottom] [data-dt-toast]:not([data-ready=true]){margin-top:calc(-1 * (var(--sileo-height) + .75rem))}[data-dt-viewport][data-position^=top]{top:0;flex-direction:column-reverse}[data-dt-viewport][data-position^=bottom]{bottom:0;flex-direction:column}[data-dt-viewport][data-position$=left]{left:0;align-items:flex-start}[data-dt-viewport][data-position$=right]{right:0;align-items:flex-end}[data-dt-viewport][data-position$=center]{left:50%;transform:translate(-50%);align-items:center}[data-dt-canvas-wrapper]{position:absolute;inset:0;pointer-events:none;overflow:visible}[data-dt-viewport][data-theme=light] [data-dt-canvas-wrapper]{filter:drop-shadow(0 0 1px rgba(0,0,0,.12)) drop-shadow(0 4px 16px rgba(0,0,0,.08))}[data-dt-viewport][data-theme=dark] [data-dt-toast]{color:#fff}[data-dt-viewport][data-theme=dark] [data-dt-description]{color:#fff9}[data-dt-viewport][data-theme=light] [data-dt-toast]{color:#0f172a}[data-dt-viewport][data-theme=light] [data-dt-description]{color:#0f172a99}@media(prefers-reduced-motion:no-preference){[data-dt-toast][data-ready=true]:hover,[data-dt-toast][data-ready=true][data-exiting=true]{will-change:transform,opacity,height}}@media(prefers-reduced-motion:reduce){[data-dt-viewport],[data-dt-viewport] *,[data-dt-viewport] *:before,[data-dt-viewport] *:after{animation-duration:.01ms;animation-iteration-count:1;transition-duration:.01ms}}[data-dt-island]{position:relative;display:inline-block}[data-dt-island-container]{position:absolute;z-index:50;pointer-events:none;left:50%;transform:translate(-50%)}[data-dt-island-container][data-expand=bottom]{top:0}[data-dt-island-container][data-expand=top]{bottom:0}[data-dt-island-container] [data-dt-toast]{pointer-events:auto}\n"] }]
|
|
581
|
+
args: [{ selector: "dt-viewport", standalone: true, imports: [DynamicToastComponent], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "@for (group of groups(); track group.pos) {\n <section\n data-dt-viewport\n [attr.data-position]=\"group.pos\"\n [attr.data-theme]=\"resolvedTheme()\"\n aria-live=\"polite\"\n [style.top]=\"group.style?.top\"\n [style.right]=\"group.style?.right\"\n [style.bottom]=\"group.style?.bottom\"\n [style.left]=\"group.style?.left\"\n >\n @for (t of group.items; track t.id) {\n <dt-toast\n [toast]=\"t\"\n [theme]=\"resolvedTheme()\"\n [pillAlign]=\"group.pill\"\n [expandEdge]=\"group.expand\"\n [canExpand]=\"activeId() === undefined || activeId() === t.id\"\n (entered)=\"onToastEnter($event)\"\n (left)=\"onToastLeave($event)\"\n (dismissed)=\"service.dismiss($event)\"\n />\n }\n </section>\n}\n", styles: ["[data-dt-viewport]{--sileo-spring-easing: linear( 0, .002 .6%, .007 1.2%, .015 1.8%, .026 2.4%, .041 3.1%, .06 3.8%, .108 5.3%, .157 6.6%, .214 8%, .467 13.7%, .577 16.3%, .631 17.7%, .682 19.1%, .73 20.5%, .771 21.8%, .808 23.1%, .844 24.5%, .874 25.8%, .903 27.2%, .928 28.6%, .952 30.1%, .972 31.6%, .988 33.1%, 1.01 35.7%, 1.025 38.5%, 1.034 41.6%, 1.038 45%, 1.035 50.1%, 1.012 64.2%, 1.003 73%, .999 83.7%, 1 );--sileo-duration: .6s;--sileo-height: 40px;--sileo-width: 350px;--sileo-state-success: oklch(.723 .219 142.136);--sileo-state-loading: oklch(.556 0 0);--sileo-state-error: oklch(.637 .237 25.331);--sileo-state-warning: oklch(.795 .184 86.047);--sileo-state-info: oklch(.685 .169 237.323);--sileo-state-action: oklch(.623 .214 259.815)}[data-dt-toast]{position:relative;cursor:pointer;pointer-events:auto;touch-action:none;border:0;background:transparent;padding:0;width:var(--sileo-width);height:var(--_h, var(--sileo-height));opacity:0;transform:translateZ(0) scale(.95);transform-origin:center;contain:layout style;overflow:visible;color:#fff}[data-dt-toast][data-state=loading]{cursor:default}[data-dt-toast][data-ready=true]{opacity:1;transform:translateZ(0) scale(1);transition:transform calc(var(--sileo-duration) * .66) var(--sileo-spring-easing),opacity calc(var(--sileo-duration) * .66) var(--sileo-spring-easing),margin-bottom calc(var(--sileo-duration) * .66) var(--sileo-spring-easing),margin-top calc(var(--sileo-duration) * .66) var(--sileo-spring-easing),height var(--sileo-duration) var(--sileo-spring-easing)}[data-dt-toast][data-ready=true]:active{transform:translateZ(0) scale(.97);transition:transform .1s cubic-bezier(.25,.8,.25,1)}[data-dt-viewport][data-position^=top] [data-dt-toast]:not([data-ready=true]){transform:translateY(-6px) scale(.95)}[data-dt-viewport][data-position^=bottom] [data-dt-toast]:not([data-ready=true]){transform:translateY(6px) scale(.95)}[data-dt-toast][data-ready=true][data-exiting=true]{opacity:0;pointer-events:none}[data-dt-viewport][data-position^=top] [data-dt-toast][data-ready=true][data-exiting=true]{transform:translateY(-6px) scale(.95)}[data-dt-viewport][data-position^=bottom] [data-dt-toast][data-ready=true][data-exiting=true]{transform:translateY(6px) scale(.95)}[data-dt-canvas]{position:absolute;left:0;right:0;pointer-events:none;transform:translateZ(0);contain:layout style;overflow:visible}[data-dt-canvas][data-edge=top]{bottom:0;transform:scaleY(-1) translateZ(0)}[data-dt-canvas][data-edge=bottom]{top:0}[data-dt-svg]{overflow:visible}[data-dt-toast][data-ready=true] [data-dt-pill]{transition:x var(--sileo-duration) var(--sileo-spring-easing),width var(--sileo-duration) var(--sileo-spring-easing),height var(--sileo-duration) var(--sileo-spring-easing)}[data-dt-toast][data-ready=true] [data-dt-body]{transition:height var(--sileo-duration) var(--sileo-spring-easing),opacity calc(var(--sileo-duration) * .8) var(--sileo-spring-easing)}[data-dt-header]{position:absolute;z-index:20;display:flex;align-items:center;padding:.5rem;height:var(--sileo-height);overflow:hidden;left:var(--_px, 0px);transform:var(--_ht);max-width:var(--_pw);box-sizing:border-box}[data-dt-toast]:not([data-state=loading]) [data-dt-header]{padding-right:22px}[data-dt-toast][data-ready=true] [data-dt-header]{transition:transform var(--sileo-duration) var(--sileo-spring-easing),left var(--sileo-duration) var(--sileo-spring-easing),max-width var(--sileo-duration) var(--sileo-spring-easing)}[data-dt-header][data-edge=top]{bottom:0}[data-dt-header][data-edge=bottom]{top:0}[data-dt-header-stack]{position:relative;display:inline-flex;align-items:center;height:100%}[data-dt-close]{position:absolute;z-index:30;top:10px;left:calc(var(--_px, 0px) + var(--_pw, 350px) - 25px);display:flex;align-items:center;justify-content:center;border:0;opacity:0;pointer-events:none;width:20px;height:20px;border-radius:9999px;cursor:pointer;padding:0;flex-shrink:0;transition:opacity .15s ease,background-color .15s ease,color .15s ease,transform .15s ease,left var(--sileo-duration) var(--sileo-spring-easing)}[data-dt-viewport][data-theme=dark] [data-dt-close]{color:#ffffff80;background:#ffffff1a}[data-dt-viewport][data-theme=dark] [data-dt-close]:hover{color:#fff;background:#ffffff40}[data-dt-viewport][data-theme=light] [data-dt-close]{color:#0f172a80;background:#0000000f}[data-dt-viewport][data-theme=light] [data-dt-close]:hover{color:#0f172a;background:#00000026}[data-dt-close] svg{width:12px;height:12px;stroke-width:2.5}[data-dt-toast]:hover [data-dt-close]{opacity:1;pointer-events:auto}[data-dt-toast][data-state=loading] [data-dt-close]{display:none!important}[data-dt-header-inner]{display:flex;align-items:center;gap:.5rem;white-space:nowrap;opacity:1;filter:blur(0px);transform:translateZ(0)}[data-dt-header-inner][data-layer=current]{position:relative;z-index:1;animation:dt-header-enter var(--sileo-duration) var(--sileo-spring-easing) both}[data-dt-header-inner][data-exiting=true],[data-dt-header-inner][data-layer=current]:not(:only-child){will-change:opacity,filter}[data-dt-header-inner][data-layer=prev]{position:absolute;left:0;top:0;z-index:0;pointer-events:none}[data-dt-header-inner][data-exiting=true]{animation:dt-header-exit calc(var(--sileo-duration) * .7) ease forwards}[data-dt-badge]{display:flex;height:24px;width:24px;flex-shrink:0;align-items:center;justify-content:center;padding:2px;box-sizing:border-box;border-radius:9999px;color:var(--sileo-tone, currentColor);background-color:var(--sileo-tone-bg, transparent)}[data-dt-title]{font-size:.825rem;line-height:1rem;font-weight:500;color:var(--sileo-tone, currentColor)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state]{--_c: var(--sileo-state-success)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=loading]{--_c: var(--sileo-state-loading)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=error]{--_c: var(--sileo-state-error)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=warning]{--_c: var(--sileo-state-warning)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=info]{--_c: var(--sileo-state-info)}:is([data-dt-badge],[data-dt-title],[data-dt-button])[data-state=action]{--_c: var(--sileo-state-action)}:is([data-dt-badge],[data-dt-title])[data-state]{--sileo-tone: var(--_c);--sileo-tone-bg: color-mix(in oklch, var(--_c) 20%, transparent)}[data-dt-content]{position:absolute;left:0;z-index:10;width:100%;pointer-events:none;opacity:var(--_co, 0)}[data-dt-content]:not([data-visible=true]){visibility:hidden}[data-dt-toast][data-ready=true] [data-dt-content]{transition:opacity calc(var(--sileo-duration) * .08) ease calc(var(--sileo-duration) * .04)}[data-dt-content][data-edge=top]{top:0}[data-dt-content][data-edge=bottom]{top:var(--sileo-height)}[data-dt-content][data-visible=true]{pointer-events:auto}[data-dt-toast][data-ready=true] [data-dt-content][data-visible=true]{transition:opacity calc(var(--sileo-duration) * .6) ease calc(var(--sileo-duration) * .3)}[data-dt-description]{width:100%;text-align:left;padding:1rem;font-size:.875rem;line-height:1.25rem;contain:layout style paint}[data-dt-button]{display:flex;align-items:center;justify-content:center;height:1.75rem;padding:0 .625rem;margin-top:.75rem;border-radius:9999px;border:0;font-size:.75rem;font-weight:500;cursor:pointer;color:var(--sileo-btn-color, currentColor);background-color:var(--sileo-btn-bg, transparent);transition:background-color .15s ease}[data-dt-button]:hover{background-color:var(--sileo-btn-bg-hover, transparent)}[data-dt-button][data-state]{--sileo-btn-color: var(--_c);--sileo-btn-bg: color-mix(in oklch, var(--_c) 15%, transparent);--sileo-btn-bg-hover: color-mix(in oklch, var(--_c) 25%, transparent)}[data-dt-icon=spin]{animation:dt-spin 1s linear infinite}@keyframes dt-spin{to{transform:rotate(360deg)}}@keyframes dt-header-enter{0%{opacity:0;filter:blur(6px)}to{opacity:1;filter:blur(0px)}}@keyframes dt-header-exit{0%{opacity:1;filter:blur(0px)}to{opacity:0;filter:blur(6px)}}[data-dt-viewport]{position:fixed;z-index:50;display:flex;gap:.75rem;padding:.75rem;pointer-events:none;max-width:calc(100vw - 1.5rem);contain:layout style}[data-dt-toast]{pointer-events:auto}[data-dt-viewport][data-position^=top] [data-dt-toast]:not([data-ready=true]){margin-bottom:calc(-1 * (var(--sileo-height) + .75rem))}[data-dt-viewport][data-position^=bottom] [data-dt-toast]:not([data-ready=true]){margin-top:calc(-1 * (var(--sileo-height) + .75rem))}[data-dt-viewport][data-position^=top]{top:0;flex-direction:column-reverse}[data-dt-viewport][data-position^=bottom]{bottom:0;flex-direction:column}[data-dt-viewport][data-position$=left]{left:0;align-items:flex-start}[data-dt-viewport][data-position$=right]{right:0;align-items:flex-end}[data-dt-viewport][data-position$=center]{left:50%;transform:translate(-50%);align-items:center}[data-dt-canvas-wrapper]{position:absolute;inset:0;pointer-events:none;overflow:visible}[data-dt-viewport][data-theme=light] [data-dt-canvas-wrapper]{filter:drop-shadow(0 0 1px rgba(0,0,0,.12)) drop-shadow(0 4px 16px rgba(0,0,0,.08))}[data-dt-viewport][data-theme=dark] [data-dt-toast]{color:#fff}[data-dt-viewport][data-theme=dark] [data-dt-description]{color:#fff9}[data-dt-viewport][data-theme=light] [data-dt-toast]{color:#0f172a}[data-dt-viewport][data-theme=light] [data-dt-description]{color:#0f172a99}@media(prefers-reduced-motion:no-preference){[data-dt-toast][data-ready=true]:hover,[data-dt-toast][data-ready=true][data-exiting=true]{will-change:transform,opacity,height}}@media(prefers-reduced-motion:reduce){[data-dt-viewport],[data-dt-viewport] *,[data-dt-viewport] *:before,[data-dt-viewport] *:after{animation-duration:.01ms;animation-iteration-count:1;transition-duration:.01ms}}[data-dt-island]{position:relative;display:inline-block}[data-dt-island-container]{position:absolute;z-index:50;pointer-events:none;left:50%;transform:translate(-50%)}[data-dt-island-container][data-expand=bottom]{top:0}[data-dt-island-container][data-expand=top]{bottom:0}[data-dt-island-container] [data-dt-toast]{pointer-events:auto}\n"] }]
|
|
540
582
|
}], propDecorators: { position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "offset", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }] } });
|
|
541
583
|
|
|
542
584
|
const timeoutKey = (t) => `${t.id}:${t.instanceId}`;
|
|
543
585
|
let idCounter = 0;
|
|
544
586
|
const generateId = () => `${++idCounter}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
545
587
|
class DynamicToastService {
|
|
546
|
-
_toasts = signal([],
|
|
588
|
+
_toasts = signal([], /* @ts-ignore */
|
|
589
|
+
...(ngDevMode ? [{ debugName: "_toasts" }] : /* istanbul ignore next */ []));
|
|
547
590
|
toasts = this._toasts.asReadonly();
|
|
548
591
|
config = { position: "top-right", theme: "dark" };
|
|
549
592
|
viewportRef = null;
|
|
@@ -815,23 +858,27 @@ class DynamicToastService {
|
|
|
815
858
|
}
|
|
816
859
|
});
|
|
817
860
|
}
|
|
818
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
819
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
861
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: DynamicToastService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
862
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: DynamicToastService, providedIn: "root" });
|
|
820
863
|
}
|
|
821
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
864
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: DynamicToastService, decorators: [{
|
|
822
865
|
type: Injectable,
|
|
823
866
|
args: [{ providedIn: "root" }]
|
|
824
867
|
}] });
|
|
825
868
|
|
|
826
869
|
class DynamicIslandDirective {
|
|
827
870
|
/** The ID used to match toasts to this island anchor */
|
|
828
|
-
dtIslandId = input.required(
|
|
871
|
+
dtIslandId = input.required(/* @ts-ignore */
|
|
872
|
+
...(ngDevMode ? [{ debugName: "dtIslandId" }] : /* istanbul ignore next */ []));
|
|
829
873
|
/** Direction the toast expands: 'bottom' (default) or 'top' */
|
|
830
|
-
dtIslandExpand = input("bottom",
|
|
874
|
+
dtIslandExpand = input("bottom", /* @ts-ignore */
|
|
875
|
+
...(ngDevMode ? [{ debugName: "dtIslandExpand" }] : /* istanbul ignore next */ []));
|
|
831
876
|
/** Theme override for this island */
|
|
832
|
-
dtIslandTheme = input("dark",
|
|
877
|
+
dtIslandTheme = input("dark", /* @ts-ignore */
|
|
878
|
+
...(ngDevMode ? [{ debugName: "dtIslandTheme" }] : /* istanbul ignore next */ []));
|
|
833
879
|
/** The mode of the island: 'island' (border wrap) or 'inline' (element replacement) */
|
|
834
|
-
dtIslandMode = input("island",
|
|
880
|
+
dtIslandMode = input("island", /* @ts-ignore */
|
|
881
|
+
...(ngDevMode ? [{ debugName: "dtIslandMode" }] : /* istanbul ignore next */ []));
|
|
835
882
|
el = inject(ElementRef);
|
|
836
883
|
service = inject(DynamicToastService);
|
|
837
884
|
renderer = inject(Renderer2);
|
|
@@ -843,7 +890,8 @@ class DynamicIslandDirective {
|
|
|
843
890
|
toastCompRef = null;
|
|
844
891
|
ro = null;
|
|
845
892
|
/** Current toast bound to this island */
|
|
846
|
-
currentToast = signal(null,
|
|
893
|
+
currentToast = signal(null, /* @ts-ignore */
|
|
894
|
+
...(ngDevMode ? [{ debugName: "currentToast" }] : /* istanbul ignore next */ []));
|
|
847
895
|
ngOnInit() {
|
|
848
896
|
// Register this anchor with the service
|
|
849
897
|
this.service.registerAnchor(this.dtIslandId(), this.el);
|
|
@@ -963,10 +1011,10 @@ class DynamicIslandDirective {
|
|
|
963
1011
|
this.ro?.disconnect();
|
|
964
1012
|
this.hideToast();
|
|
965
1013
|
}
|
|
966
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
967
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "
|
|
1014
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: DynamicIslandDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
1015
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "22.0.0", type: DynamicIslandDirective, isStandalone: true, selector: "[dtDynamicIsland]", inputs: { dtIslandId: { classPropertyName: "dtIslandId", publicName: "dtIslandId", isSignal: true, isRequired: true, transformFunction: null }, dtIslandExpand: { classPropertyName: "dtIslandExpand", publicName: "dtIslandExpand", isSignal: true, isRequired: false, transformFunction: null }, dtIslandTheme: { classPropertyName: "dtIslandTheme", publicName: "dtIslandTheme", isSignal: true, isRequired: false, transformFunction: null }, dtIslandMode: { classPropertyName: "dtIslandMode", publicName: "dtIslandMode", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 });
|
|
968
1016
|
}
|
|
969
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
1017
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.0", ngImport: i0, type: DynamicIslandDirective, decorators: [{
|
|
970
1018
|
type: Directive,
|
|
971
1019
|
args: [{
|
|
972
1020
|
selector: "[dtDynamicIsland]",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-dynamic-toast.mjs","sources":["../../../src/lib/constants.ts","../../../src/lib/icons.ts","../../../src/lib/dynamic-toast.component.ts","../../../src/lib/dynamic-toast.component.html","../../../src/lib/dynamic-toast-viewport.component.ts","../../../src/lib/dynamic-toast-viewport.component.html","../../../src/lib/dynamic-toast.service.ts","../../../src/lib/dynamic-island.directive.ts","../../../src/lib/toast.ts","../../../src/lib/index.ts","../../../src/public-api.ts","../../../src/ngx-dynamic-toast.ts"],"sourcesContent":["/* --------------------------------- Layout --------------------------------- */\n\nexport const HEIGHT = 40;\nexport const WIDTH = 350;\nexport const DEFAULT_ROUNDNESS = 16;\n\n/* --------------------------------- Timing --------------------------------- */\n\nexport const DURATION_MS = 600;\nexport const DURATION_S = DURATION_MS / 1000;\n\nexport const DEFAULT_TOAST_DURATION = 6000;\nexport const EXIT_DURATION = DEFAULT_TOAST_DURATION * 0.1;\nexport const AUTO_EXPAND_DELAY = DEFAULT_TOAST_DURATION * 0.025;\nexport const AUTO_COLLAPSE_DELAY = DEFAULT_TOAST_DURATION - 2000;\n\n/* --------------------------------- Spring --------------------------------- */\n\nexport const SPRING = {\n type: \"spring\" as const,\n bounce: 0.25,\n duration: DURATION_S,\n};\n\n/* --------------------------------- Render --------------------------------- */\n\nexport const BLUR_RATIO = 0.5;\nexport const PILL_PADDING = 10;\nexport const MIN_EXPAND_RATIO = 2.25;\nexport const SWAP_COLLAPSE_MS = 200;\nexport const HEADER_EXIT_MS = DURATION_MS * 0.7;\n","const baseSvg = (title: string, body: string, extra?: string) =>\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" ${extra ?? \"\"}><title>${title}</title>${body}</svg>`;\n\nexport const ICONS = {\n arrowRight: baseSvg(\n \"Arrow Right\",\n `<path d=\"M5 12h14\" /><path d=\"m12 5 7 7-7 7\" />`,\n ),\n lifeBuoy: baseSvg(\n \"Life Buoy\",\n `<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"m4.93 4.93 4.24 4.24\" /><path d=\"m14.83 9.17 4.24-4.24\" /><path d=\"m14.83 14.83 4.24 4.24\" /><path d=\"m9.17 14.83-4.24 4.24\" /><circle cx=\"12\" cy=\"12\" r=\"4\" />`,\n ),\n loaderCircle: (extra?: string) =>\n baseSvg(\n \"Loader Circle\",\n `<path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />`,\n extra,\n ),\n x: baseSvg(\"X\", `<path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />`),\n circleAlert: baseSvg(\n \"Circle Alert\",\n `<circle cx=\"12\" cy=\"12\" r=\"10\" /><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\" /><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\" />`,\n ),\n check: baseSvg(\"Check\", `<path d=\"M20 6 9 17l-5-5\" />`),\n} as const;\n\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n ViewEncapsulation,\n OnDestroy,\n NgZone,\n ChangeDetectorRef,\n AfterViewInit,\n ViewChild,\n} from \"@angular/core\";\nimport { NgTemplateOutlet } from \"@angular/common\";\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\nimport {\n BLUR_RATIO,\n DEFAULT_ROUNDNESS,\n HEADER_EXIT_MS,\n HEIGHT,\n MIN_EXPAND_RATIO,\n PILL_PADDING,\n SPRING,\n SWAP_COLLAPSE_MS,\n WIDTH,\n} from \"./constants\";\nimport { ICONS } from \"./icons\";\nimport type {\n DynamicToastItem,\n DynamicToastState,\n DynamicToastStyles,\n} from \"./types\";\n\ntype PillAlign = \"left\" | \"center\" | \"right\";\ntype ExpandEdge = \"top\" | \"bottom\";\n\ninterface View {\n title?: string;\n description?: string;\n state: DynamicToastState;\n iconSvg?: string | null;\n styles?: DynamicToastStyles;\n button?: { title: string; onClick: () => void };\n fill: string;\n contentTemplate?: any;\n}\n\ninterface HeaderLayer {\n key: string;\n view: View;\n}\n\n@Component({\n selector: \"dt-toast\",\n standalone: true,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./dynamic-toast.component.html\",\n})\nexport class DynamicToastComponent implements AfterViewInit, OnDestroy {\n toast = input.required<DynamicToastItem>();\n theme = input<'light' | 'dark'>('dark');\n anchorWidth = input<number>(0);\n anchorHeight = input<number>(0);\n pillAlign = input<PillAlign>(\"left\");\n expandEdge = input<ExpandEdge>(\"bottom\");\n canExpand = input<boolean>(true);\n interruptKey = input<string | undefined>(undefined);\n dismissed = output<string>();\n entered = output<string>();\n left = output<string>();\n\n resolvedFill = computed(() => {\n return this.theme() === 'light' ? '#ffffff' : '#151515';\n });\n\n readonly HEIGHT = HEIGHT;\n readonly WIDTH = WIDTH;\n\n private readonly sanitizer = inject(DomSanitizer);\n private readonly hostEl = inject<ElementRef<HTMLElement>>(ElementRef);\n private ngZone = inject(NgZone);\n private cdr = inject(ChangeDetectorRef);\n\n private hasMeasured = false;\n private roHeader: ResizeObserver | null = null;\n private roContent: ResizeObserver | null = null;\n private headerExitTimer: number | null = null;\n private autoExpandTimer: number | null = null;\n private autoCollapseTimer: number | null = null;\n private swapTimer: number | null = null;\n private rafHeader: number | null = null;\n private pendingSwap: { key?: string; payload: View } | null = null;\n private pointerStartY: number | null = null;\n\n @ViewChild(\"pillRect\") pillRectRef!: ElementRef<SVGRectElement>;\n @ViewChild(\"bodyRect\") bodyRectRef!: ElementRef<SVGRectElement>;\n\n ready = signal(false);\n isExpanded = signal(false);\n pillWidth = signal(0);\n contentHeight = signal(0);\n\n // View as a signal so we can swap it for header crossfade animation\n view = signal<View>({\n title: \"\",\n state: \"info\",\n fill: \"#151515\",\n });\n\n // Header layer system for crossfade animation\n headerLayerCurrent = signal<HeaderLayer>({\n key: \"\",\n view: this.view(),\n });\n headerLayerPrev = signal<HeaderLayer | null>(null);\n\n filterId = `dt-gooey-${Math.random().toString(36).slice(2, 8)}`;\n\n hasDesc = computed(() => {\n const v = this.view();\n return (\n Boolean(v.description) || Boolean(v.contentTemplate) || Boolean(v.button)\n );\n });\n\n isLoading = computed(() => this.view().state === \"loading\");\n\n allowExpand = computed(() => {\n if (this.isLoading()) return false;\n const interrupt = this.interruptKey();\n const id = this.toast().id;\n return this.canExpand() ?? (!interrupt || interrupt === id);\n });\n\n open = computed(\n () => this.hasDesc() && this.isExpanded() && !this.isLoading(),\n );\n\n resolvedRoundness = computed(() => {\n try {\n return Math.max(0, this.toast().roundness ?? DEFAULT_ROUNDNESS);\n } catch {\n return DEFAULT_ROUNDNESS;\n }\n });\n\n blur = computed(() => this.resolvedRoundness() * BLUR_RATIO);\n\n minExpanded = computed(() => HEIGHT * MIN_EXPAND_RATIO);\n\n rawExpanded = computed(() => {\n const min = this.minExpanded();\n try {\n if (!this.hasDesc()) return min;\n return Math.max(min, HEIGHT + this.contentHeight());\n } catch {\n return min;\n }\n });\n\n frozenExpanded = signal(HEIGHT * MIN_EXPAND_RATIO);\n\n expanded = computed(() =>\n this.open() ? this.rawExpanded() : this.frozenExpanded(),\n );\n\n svgHeight = computed(() =>\n this.hasDesc() ? Math.max(this.expanded(), this.minExpanded()) : HEIGHT,\n );\n\n expandedContent = computed(() => Math.max(0, this.expanded() - HEIGHT));\n\n resolvedPillWidth = computed(() => {\n const w = this.pillWidth();\n const aw = this.anchorWidth();\n if (aw > 0) {\n return Math.max(w, aw + 4);\n }\n return Math.max(w || HEIGHT, HEIGHT);\n });\n\n pillHeight = computed(() => {\n const ah = this.anchorHeight();\n const baseHeight = ah > 0 ? ah + 4 : HEIGHT;\n return baseHeight + this.blur() * 3;\n });\n\n pillX = computed(() => {\n const align = this.pillAlign();\n const pw = this.resolvedPillWidth();\n const aw = this.anchorWidth();\n \n if (aw > 0) {\n return (WIDTH - pw) / 2;\n }\n\n if (align === \"left\") return 0;\n if (align === \"right\") return WIDTH - pw;\n return (WIDTH - pw) / 2;\n });\n\n headerTransform = computed(() => {\n const open = this.open();\n const expand = this.expandEdge();\n const ty = open ? (expand === \"bottom\" ? 3 : -3) : 0;\n const scale = open ? 0.9 : 1;\n return `translateY(${ty}px) scale(${scale})`;\n });\n\n rootHeight = computed(() => (this.open() ? this.expanded() : HEIGHT));\n\n constructor() {\n // Sync view from toast input\n effect(\n () => {\n const t = this.toast();\n const next: View = {\n title: t.title,\n description: t.description,\n contentTemplate: t.contentTemplate,\n state: t.state,\n iconSvg: t.iconSvg,\n styles: t.styles,\n button: t.button,\n fill: t.fill ?? this.resolvedFill(),\n };\n this.applyView(next);\n },\n { allowSignalWrites: true },\n );\n\n // Auto-expand/auto-collapse logic\n effect(\n () => {\n const hasDesc = this.hasDesc();\n const allowExpand = this.allowExpand();\n const toast = this.toast();\n const exiting = toast.exiting;\n\n if (!hasDesc) return;\n if (exiting || !allowExpand) {\n this.isExpanded.set(false);\n return;\n }\n\n const expandDelay = toast.autoExpandDelayMs;\n const collapseDelay = toast.autoCollapseDelayMs;\n\n if (expandDelay == null && collapseDelay == null) return;\n\n if (this.autoExpandTimer) {\n window.clearTimeout(this.autoExpandTimer);\n this.autoExpandTimer = null;\n }\n if (this.autoCollapseTimer) {\n window.clearTimeout(this.autoCollapseTimer);\n this.autoCollapseTimer = null;\n }\n\n if (expandDelay != null && expandDelay > 0) {\n this.autoExpandTimer = window.setTimeout(\n () => this.isExpanded.set(true),\n expandDelay,\n );\n } else {\n this.isExpanded.set(true);\n }\n\n if (collapseDelay != null && collapseDelay > 0) {\n this.autoCollapseTimer = window.setTimeout(\n () => this.isExpanded.set(false),\n collapseDelay,\n );\n }\n },\n { allowSignalWrites: true },\n );\n\n effect(\n () => {\n if (this.open()) {\n this.frozenExpanded.set(this.rawExpanded());\n }\n },\n { allowSignalWrites: true },\n );\n\n queueMicrotask(() => {\n this.ready.set(true);\n this.ensureMeasurements();\n });\n }\n\n ngAfterViewInit() {\n }\n\n private applyView(next: View) {\n const prev = untracked(() => this.view());\n const headerKey = `${next.state}-${next.title}`;\n const prevKey = `${prev.state}-${prev.title}`;\n\n this.view.set(next);\n\n if (headerKey !== prevKey) {\n const currentLayer: HeaderLayer = { key: headerKey, view: next };\n const prevLayer: HeaderLayer = { key: prevKey, view: prev };\n this.headerLayerPrev.set(prevLayer);\n this.headerLayerCurrent.set(currentLayer);\n\n if (this.headerExitTimer) window.clearTimeout(this.headerExitTimer);\n this.headerExitTimer = window.setTimeout(() => {\n this.headerExitTimer = null;\n this.headerLayerPrev.set(null);\n this.cdr.detectChanges();\n }, HEADER_EXIT_MS);\n } else {\n this.headerLayerCurrent.set({ key: headerKey, view: next });\n }\n }\n\n ngOnDestroy() {\n this.roHeader?.disconnect();\n this.roContent?.disconnect();\n if (this.headerExitTimer) window.clearTimeout(this.headerExitTimer);\n if (this.autoExpandTimer) window.clearTimeout(this.autoExpandTimer);\n if (this.autoCollapseTimer) window.clearTimeout(this.autoCollapseTimer);\n if (this.swapTimer) window.clearTimeout(this.swapTimer);\n if (this.rafHeader) cancelAnimationFrame(this.rafHeader);\n }\n\n private ensureMeasurements() {\n if (this.hasMeasured) return;\n this.hasMeasured = true;\n\n this.ngZone.runOutsideAngular(() => {\n const root = this.hostEl.nativeElement;\n const inner = root.querySelector<HTMLElement>(\n \"[data-dt-header-inner][data-layer='current']\",\n );\n const header = root.querySelector<HTMLElement>(\"[data-dt-header]\");\n const content = root.querySelector<HTMLElement>(\"[data-dt-description]\");\n\n const measureHeader = () => {\n if (this.rafHeader) return;\n this.rafHeader = requestAnimationFrame(() => {\n this.rafHeader = null;\n if (!inner || !header) return;\n const cs = getComputedStyle(header);\n const pad = parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight);\n \n let w = inner.scrollWidth + pad + PILL_PADDING;\n \n const aw = this.anchorWidth();\n if (aw > 0) {\n w += aw; \n }\n \n if (Math.abs(w - this.pillWidth()) > 1.5) {\n this.pillWidth.set(w);\n this.cdr.detectChanges();\n }\n });\n };\n\n let rafContent: number | null = null;\n const measureContent = () => {\n const el = root.querySelector<HTMLElement>(\"[data-dt-description]\");\n if (!el) return;\n if (rafContent) return;\n this.ngZone.runOutsideAngular(() => {\n rafContent = requestAnimationFrame(() => {\n rafContent = null;\n if (Math.abs(el.scrollHeight - this.contentHeight()) > 1.5) {\n this.contentHeight.set(el.scrollHeight);\n this.cdr.detectChanges();\n }\n });\n });\n };\n\n this.roHeader = new ResizeObserver(() => measureHeader());\n this.roContent = new ResizeObserver(() => measureContent());\n \n if (inner) this.roHeader.observe(inner);\n if (content) this.roContent.observe(content);\n });\n }\n\n resolvedIcon(v: View): SafeHtml {\n const icon =\n v.iconSvg ??\n (v.state === \"success\"\n ? ICONS.check\n : v.state === \"loading\"\n ? ICONS.loaderCircle('data-dt-icon=\"spin\" aria-hidden=\"true\"')\n : v.state === \"error\"\n ? ICONS.x\n : v.state === \"warning\"\n ? ICONS.circleAlert\n : v.state === \"info\"\n ? ICONS.lifeBuoy\n : ICONS.arrowRight);\n return this.sanitizer.bypassSecurityTrustHtml(icon);\n }\n\n handleEnter() {\n this.entered.emit(this.toast().id);\n if (this.hasDesc()) this.isExpanded.set(true);\n }\n\n handleLeave() {\n this.left.emit(this.toast().id);\n this.isExpanded.set(false);\n }\n\n handleTransitionEnd(e: TransitionEvent) {\n if (e.propertyName !== \"height\" && e.propertyName !== \"transform\") return;\n if (this.open()) return;\n const pending = this.pendingSwap;\n if (!pending) return;\n if (this.swapTimer) {\n window.clearTimeout(this.swapTimer);\n this.swapTimer = null;\n }\n this.applyView(pending.payload);\n this.pendingSwap = null;\n }\n\n handleButtonClick(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n this.view().button?.onClick();\n }\n\n handleClose(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n this.dismissed.emit(this.toast().id);\n }\n\n handlePointerDown(e: PointerEvent) {\n if (this.toast().exiting) return;\n const target = e.target as HTMLElement;\n if (target.closest(\"[data-dt-button]\")) return;\n\n this.pointerStartY = e.clientY;\n const el = e.currentTarget as HTMLElement;\n const SWIPE_DISMISS = 30;\n const SWIPE_MAX = 20;\n\n const onMove = (ev: PointerEvent) => {\n if (this.pointerStartY == null) return;\n const dy = ev.clientY - this.pointerStartY;\n const sign = dy > 0 ? 1 : -1;\n const clamped = Math.min(Math.abs(dy), SWIPE_MAX) * sign;\n el.style.transform = `translateY(${clamped}px)`;\n };\n\n const onUp = (ev: PointerEvent) => {\n if (this.pointerStartY == null) return;\n const dy = ev.clientY - this.pointerStartY;\n this.pointerStartY = null;\n el.style.transform = \"\";\n el.removeEventListener(\"pointermove\", onMove);\n el.removeEventListener(\"pointerup\", onUp);\n if (Math.abs(dy) > SWIPE_DISMISS) {\n this.dismissed.emit(this.toast().id);\n } else if (Math.abs(dy) < 5) {\n this.handleTap();\n }\n };\n\n el.setPointerCapture(e.pointerId);\n el.addEventListener(\"pointermove\", onMove, { passive: true });\n el.addEventListener(\"pointerup\", onUp, { passive: true });\n }\n\n private handleTap() {\n if (this.hasDesc()) {\n if (this.isExpanded()) {\n this.isExpanded.set(false);\n } else {\n this.dismissed.emit(this.toast().id);\n }\n } else {\n this.dismissed.emit(this.toast().id);\n }\n }\n}\n","<button\n type=\"button\"\n data-dt-toast\n [attr.data-ready]=\"ready()\"\n [attr.data-expanded]=\"open()\"\n [attr.data-exiting]=\"toast().exiting || false\"\n [attr.data-edge]=\"expandEdge()\"\n [attr.data-position]=\"pillAlign()\"\n [attr.data-state]=\"view().state\"\n [class]=\"toast().className || ''\"\n [style.--_h]=\"rootHeight() + 'px'\"\n [style.--_pw]=\"resolvedPillWidth() + 'px'\"\n [style.--_px]=\"pillX() + 'px'\"\n [style.--_ht]=\"headerTransform()\"\n [style.--_co]=\"open() ? 1 : 0\"\n (mouseenter)=\"handleEnter()\"\n (mouseleave)=\"handleLeave()\"\n (transitionend)=\"handleTransitionEnd($event)\"\n (pointerdown)=\"handlePointerDown($event)\"\n>\n <div data-dt-canvas-wrapper>\n <div\n data-dt-canvas\n [attr.data-edge]=\"expandEdge()\"\n [style.filter]=\"'url(#' + filterId + ')'\"\n >\n <svg\n data-dt-svg\n [attr.width]=\"WIDTH\"\n [attr.height]=\"svgHeight()\"\n [attr.viewBox]=\"'0 0 ' + WIDTH + ' ' + svgHeight()\"\n >\n <title>Toast Notification</title>\n <defs>\n <filter\n [id]=\"filterId\"\n x=\"-20%\"\n y=\"-20%\"\n width=\"140%\"\n height=\"140%\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feGaussianBlur\n in=\"SourceGraphic\"\n [attr.stdDeviation]=\"blur()\"\n result=\"blur\"\n />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -10\"\n result=\"goo\"\n />\n <feComposite in=\"SourceGraphic\" in2=\"goo\" operator=\"atop\" />\n </filter>\n </defs>\n\n <!-- Pill: animated <rect> via Motion -->\n <rect\n #pillRect\n data-dt-pill\n [attr.rx]=\"resolvedRoundness()\"\n [attr.ry]=\"resolvedRoundness()\"\n [attr.fill]=\"view().fill\"\n y=\"0\"\n [style.x.px]=\"pillX()\"\n [style.width.px]=\"resolvedPillWidth()\"\n [style.height.px]=\"open() ? pillHeight() : HEIGHT\"\n />\n\n <!-- Body: animated <rect> via Motion -->\n <rect\n #bodyRect\n data-dt-body\n [attr.y]=\"HEIGHT\"\n [attr.width]=\"WIDTH\"\n [attr.rx]=\"resolvedRoundness()\"\n [attr.ry]=\"resolvedRoundness()\"\n [attr.fill]=\"view().fill\"\n [style.height.px]=\"open() ? expandedContent() : 0\"\n [style.opacity]=\"open() ? 1 : 0\"\n />\n </svg>\n </div>\n </div>\n\n <div data-dt-header [attr.data-edge]=\"expandEdge()\">\n <div data-dt-header-stack>\n <!-- Current header layer -->\n <div\n data-dt-header-inner\n data-layer=\"current\"\n [attr.key]=\"headerLayerCurrent().key\"\n >\n <div\n data-dt-badge\n [attr.data-state]=\"headerLayerCurrent().view.state\"\n [class]=\"headerLayerCurrent().view.styles?.badge || ''\"\n [innerHTML]=\"resolvedIcon(headerLayerCurrent().view)\"\n ></div>\n <span\n data-dt-title\n [attr.data-state]=\"headerLayerCurrent().view.state\"\n [class]=\"headerLayerCurrent().view.styles?.title || ''\"\n >\n {{ headerLayerCurrent().view.title }}\n </span>\n </div>\n\n <!-- Previous header layer (crossfade exit) -->\n @if (headerLayerPrev(); as prev) {\n <div data-dt-header-inner data-layer=\"prev\" data-exiting=\"true\">\n <div\n data-dt-badge\n [attr.data-state]=\"prev.view.state\"\n [class]=\"prev.view.styles?.badge || ''\"\n [innerHTML]=\"resolvedIcon(prev.view)\"\n ></div>\n <span\n data-dt-title\n [attr.data-state]=\"prev.view.state\"\n [class]=\"prev.view.styles?.title || ''\"\n >\n {{ prev.view.title }}\n </span>\n </div>\n }\n </div>\n </div>\n\n @if (hasDesc()) {\n <div\n data-dt-content\n [attr.data-edge]=\"expandEdge()\"\n [attr.data-visible]=\"open()\"\n >\n <div\n data-dt-description\n [class]=\"view().styles?.description || ''\"\n >\n @if (view().description) {\n <span>{{ view().description }}</span>\n }\n @if (view().contentTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"view().contentTemplate\"\n ></ng-container>\n }\n @if (view().button) {\n <a\n href=\"#\"\n data-dt-button\n [attr.data-state]=\"view().state\"\n [class]=\"view().styles?.button || ''\"\n (click)=\"handleButtonClick($event)\"\n >\n {{ view().button?.title }}\n </a>\n }\n </div>\n </div>\n }\n\n <!-- Close button (fades in on hover) -->\n <button\n type=\"button\"\n data-dt-close\n (click)=\"handleClose($event)\"\n aria-label=\"Dismiss notification\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line></svg>\n </button>\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n signal,\n ViewEncapsulation,\n OnInit,\n OnDestroy,\n} from \"@angular/core\";\nimport { DynamicToastComponent } from \"./dynamic-toast.component\";\nimport { DynamicToastService } from \"./dynamic-toast.service\";\nimport type {\n DynamicToastOffsetConfig,\n DynamicToastPosition,\n DynamicToastTheme,\n} from \"./types\";\n\ntype PillAlign = \"left\" | \"center\" | \"right\";\ntype ExpandEdge = \"top\" | \"bottom\";\n\nconst pillAlign = (pos: DynamicToastPosition): PillAlign =>\n pos.includes(\"right\") ? \"right\" : pos.includes(\"center\") ? \"center\" : \"left\";\n\nconst expandDir = (pos: DynamicToastPosition): ExpandEdge =>\n pos.startsWith(\"top\") ? \"bottom\" : \"top\";\n\n@Component({\n selector: \"dt-viewport\",\n standalone: true,\n imports: [DynamicToastComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./dynamic-toast-viewport.component.html\",\n styleUrls: [\"./styles.css\"],\n})\nexport class DynamicToastViewportComponent implements OnInit, OnDestroy {\n position = input<DynamicToastPosition>(\"top-right\");\n offset = input<DynamicToastOffsetConfig | string | number | undefined>(\n undefined,\n );\n theme = input<DynamicToastTheme>(\"dark\");\n\n readonly service = inject(DynamicToastService);\n private hovering = signal(new Set<string>());\n private systemThemeMql: MediaQueryList | null = null;\n private systemThemeListener: ((e: MediaQueryListEvent) => void) | null = null;\n\n activeId = signal<string | undefined>(undefined);\n\n /** Resolved theme (handles 'system' by listening to prefers-color-scheme) */\n private systemIsDark = signal(true);\n\n resolvedTheme = computed(() => {\n const t = this.theme();\n if (t === \"system\") {\n return this.systemIsDark() ? \"dark\" : \"light\";\n }\n return t;\n });\n\n private latestId = computed(() => {\n const list = this.service.toasts();\n for (let i = list.length - 1; i >= 0; i--) {\n if (!list[i].exiting) return list[i].id;\n }\n return undefined;\n });\n\n groups = computed(() => {\n const toasts = this.service.toasts();\n // Filter out toasts that have an anchorId (those go to Dynamic Islands)\n const viewportToasts = toasts.filter((t) => !t.anchorId);\n const byPos = new Map<DynamicToastPosition, typeof viewportToasts>();\n for (const t of viewportToasts) {\n const p = (t.position ?? this.position()) as DynamicToastPosition;\n const arr = byPos.get(p);\n if (arr) arr.push(t);\n else byPos.set(p, [t]);\n }\n\n const offset = this.offset();\n const off: DynamicToastOffsetConfig | undefined =\n offset === undefined\n ? undefined\n : typeof offset === \"object\"\n ? offset\n : { top: offset, right: offset, bottom: offset, left: offset };\n\n const px = (v: string | number | undefined) =>\n v === undefined ? undefined : typeof v === \"number\" ? `${v}px` : v;\n\n const res: Array<{\n pos: DynamicToastPosition;\n items: typeof viewportToasts;\n pill: PillAlign;\n expand: ExpandEdge;\n style?: { top?: string; right?: string; bottom?: string; left?: string };\n }> = [];\n\n for (const [pos, items] of byPos) {\n const style: any = {};\n if (off) {\n if (pos.startsWith(\"top\") && off.top !== undefined)\n style.top = px(off.top);\n if (pos.startsWith(\"bottom\") && off.bottom !== undefined)\n style.bottom = px(off.bottom);\n if (pos.endsWith(\"left\") && off.left !== undefined)\n style.left = px(off.left);\n if (pos.endsWith(\"right\") && off.right !== undefined)\n style.right = px(off.right);\n }\n\n res.push({\n pos,\n items,\n pill: pillAlign(pos),\n expand: expandDir(pos),\n style: off ? style : undefined,\n });\n }\n\n return res;\n });\n\n ngOnInit() {\n this.service.registerViewport(this);\n // Listen for system theme changes\n if (typeof window !== \"undefined\" && window.matchMedia) {\n this.systemThemeMql = window.matchMedia(\"(prefers-color-scheme: dark)\");\n this.systemIsDark.set(this.systemThemeMql.matches);\n this.systemThemeListener = (e) => this.systemIsDark.set(e.matches);\n this.systemThemeMql.addEventListener(\"change\", this.systemThemeListener);\n }\n }\n\n ngOnDestroy() {\n this.service.unregisterViewport(this);\n if (this.systemThemeMql && this.systemThemeListener) {\n this.systemThemeMql.removeEventListener(\n \"change\",\n this.systemThemeListener,\n );\n }\n }\n\n onToastEnter(id: string) {\n const next = new Set(this.hovering());\n next.add(id);\n this.hovering.set(next);\n this.activeId.set(id);\n this.service.pauseTimers();\n }\n\n onToastLeave(id: string) {\n const next = new Set(this.hovering());\n next.delete(id);\n this.hovering.set(next);\n if (next.size > 0) return;\n\n queueMicrotask(() => {\n if (this.hovering().size > 0) return;\n this.activeId.set(this.latestId());\n this.service.resumeTimers();\n });\n }\n}\n","@for (group of groups(); track group.pos) {\n <section\n data-dt-viewport\n [attr.data-position]=\"group.pos\"\n [attr.data-theme]=\"resolvedTheme()\"\n aria-live=\"polite\"\n [style.top]=\"group.style?.top\"\n [style.right]=\"group.style?.right\"\n [style.bottom]=\"group.style?.bottom\"\n [style.left]=\"group.style?.left\"\n >\n @for (t of group.items; track t.id) {\n <dt-toast\n [toast]=\"t\"\n [theme]=\"resolvedTheme()\"\n [pillAlign]=\"group.pill\"\n [expandEdge]=\"group.expand\"\n [canExpand]=\"activeId() === undefined || activeId() === t.id\"\n (entered)=\"onToastEnter($event)\"\n (left)=\"onToastLeave($event)\"\n (dismissed)=\"service.dismiss($event)\"\n />\n }\n </section>\n}\n","import {\n ApplicationRef,\n ComponentRef,\n ElementRef,\n EnvironmentInjector,\n Injectable,\n NgZone,\n createComponent,\n inject,\n signal,\n} from \"@angular/core\";\nimport { DOCUMENT } from \"@angular/common\";\nimport {\n AUTO_COLLAPSE_DELAY,\n AUTO_EXPAND_DELAY,\n DEFAULT_TOAST_DURATION,\n EXIT_DURATION,\n} from \"./constants\";\nimport {\n DynamicToastConfig,\n DynamicToastItem,\n DynamicToastOptions,\n DynamicToastPosition,\n DynamicToastPromiseOptions,\n DynamicToastState,\n DynamicToastTheme,\n} from \"./types\";\nimport { DynamicToastViewportComponent } from \"./dynamic-toast-viewport.component\";\n\nconst timeoutKey = (t: DynamicToastItem) => `${t.id}:${t.instanceId}`;\n\nlet idCounter = 0;\nconst generateId = () =>\n `${++idCounter}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;\n\n@Injectable({ providedIn: \"root\" })\nexport class DynamicToastService {\n private _toasts = signal<DynamicToastItem[]>([]);\n readonly toasts = this._toasts.asReadonly();\n\n private config: DynamicToastConfig = { position: \"top-right\", theme: \"dark\" };\n private viewportRef: ComponentRef<DynamicToastViewportComponent> | null = null;\n private timers = new Map<string, number>();\n private paused = false;\n private isPendingCD = false;\n private loopCount = 0;\n private loopResetTimer: any;\n\n /** Registry of Dynamic Island anchors */\n private anchors = new Map<string, ElementRef<HTMLElement>>();\n\n private appRef = inject(ApplicationRef);\n private envInjector = inject(EnvironmentInjector);\n private document = inject(DOCUMENT);\n private ngZone = inject(NgZone);\n\n private registeredViewport: DynamicToastViewportComponent | null = null;\n\n registerViewport(cmp: DynamicToastViewportComponent) {\n this.registeredViewport = cmp;\n }\n\n unregisterViewport(cmp: DynamicToastViewportComponent) {\n if (this.registeredViewport === cmp) {\n this.registeredViewport = null;\n }\n }\n\n configure(cfg: DynamicToastConfig) {\n this.config = { ...this.config, ...cfg };\n if (this.viewportRef) {\n this.viewportRef.setInput(\"position\", this.config.position ?? \"top-right\");\n this.viewportRef.setInput(\"offset\", this.config.offset);\n this.viewportRef.setInput(\"theme\", this.config.theme ?? \"dark\");\n }\n }\n\n /** Register a Dynamic Island anchor element */\n registerAnchor(id: string, elementRef: ElementRef<HTMLElement>) {\n this.anchors.set(id, elementRef);\n }\n\n /** Unregister a Dynamic Island anchor element */\n unregisterAnchor(id: string) {\n this.anchors.delete(id);\n }\n\n /** Get anchor element by ID */\n getAnchor(id: string): ElementRef<HTMLElement> | undefined {\n return this.anchors.get(id);\n }\n\n private ensureViewport() {\n if (this.viewportRef || this.registeredViewport) return;\n const ref = createComponent(DynamicToastViewportComponent, {\n environmentInjector: this.envInjector,\n });\n ref.setInput(\"position\", this.config.position ?? \"top-right\");\n ref.setInput(\"offset\", this.config.offset);\n ref.setInput(\"theme\", this.config.theme ?? \"dark\");\n\n const el = ref.location.nativeElement;\n el.setAttribute(\"data-dt-root\", \"\");\n\n this.appRef.attachView(ref.hostView);\n this.document.body.appendChild(el);\n this.viewportRef = ref;\n }\n\n private resolveAutopilot(\n opts: DynamicToastOptions,\n duration: number | null,\n ): { expandDelayMs?: number; collapseDelayMs?: number } {\n if (opts.autopilot === false || !duration || duration <= 0) return {};\n const cfg = typeof opts.autopilot === \"object\" ? opts.autopilot : undefined;\n const clamp = (v: number) => Math.min(duration, Math.max(0, v));\n return {\n expandDelayMs: clamp(cfg?.expand ?? AUTO_EXPAND_DELAY),\n collapseDelayMs: clamp(cfg?.collapse ?? AUTO_COLLAPSE_DELAY),\n };\n }\n\n private mergeOptions(options: DynamicToastOptions): DynamicToastOptions {\n return {\n ...(this.config.options ?? {}),\n ...options,\n styles: { ...(this.config.options?.styles ?? {}), ...(options.styles ?? {}) },\n };\n }\n\n private buildItem(\n merged: DynamicToastOptions,\n id: string,\n state: DynamicToastState,\n fallbackPosition?: DynamicToastPosition,\n ): DynamicToastItem {\n const duration = merged.duration ?? DEFAULT_TOAST_DURATION;\n const auto = this.resolveAutopilot(merged, duration);\n return {\n ...merged,\n id,\n instanceId: generateId(),\n state,\n position:\n merged.position ?? fallbackPosition ?? this.config.position ?? \"top-right\",\n duration,\n autoExpandDelayMs: auto.expandDelayMs,\n autoCollapseDelayMs: auto.collapseDelayMs,\n exiting: false,\n fill: merged.fill,\n };\n }\n\n private upsert(item: DynamicToastItem) {\n // Circuit breaker for infinite loops\n this.loopCount++;\n if (this.loopCount > 50) {\n console.warn(\"[DynamicToast] Loop detected (50+ updates/sec). Blocking update.\");\n return;\n }\n if (!this.loopResetTimer) {\n this.loopResetTimer = setTimeout(() => {\n this.loopCount = 0;\n this.loopResetTimer = null;\n }, 1000);\n }\n\n // Optimization: check if item really changed before anything else\n const currentList = this._toasts();\n const existing = currentList.find((t) => t.id === item.id);\n if (existing && JSON.stringify(existing) === JSON.stringify(item)) {\n return;\n }\n\n this.ensureViewport();\n\n this.ngZone.runOutsideAngular(() => {\n this._toasts.update((prev) => {\n const live = prev.filter((t) => !t.exiting);\n const exist = live.find((t) => t.id === item.id);\n if (exist) {\n return prev.map((t) => (t.id === item.id ? { ...item } : t));\n }\n return [...prev.filter((t) => t.id !== item.id), item];\n });\n });\n\n // Coalesce CD updates to one per frame\n if (!this.isPendingCD) {\n this.isPendingCD = true;\n this.ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n this.isPendingCD = false;\n if (this.viewportRef) {\n this.viewportRef.changeDetectorRef.detectChanges();\n } else if (this.registeredViewport) {\n // Signal-based components will naturally update, but we can force tick if necessary\n }\n });\n });\n }\n\n this.scheduleAll();\n }\n\n show(options: DynamicToastOptions & { state: DynamicToastState }) {\n const merged = this.mergeOptions(options);\n const id = merged.id ?? \"dynamicToast-default\";\n const prev = this._toasts().find((t) => t.id === id && !t.exiting);\n const item = this.buildItem(merged, id, options.state, prev?.position);\n this.upsert(item);\n return id;\n }\n\n info(opts: DynamicToastOptions): string;\n info(title: string, opts?: Partial<DynamicToastOptions>): string;\n info(a: any, b?: any) {\n const opts: DynamicToastOptions =\n typeof a === \"string\" ? { ...(b ?? {}), title: a } : a;\n return this.show({ ...opts, state: \"info\" });\n }\n\n success(opts: DynamicToastOptions): string;\n success(title: string, opts?: Partial<DynamicToastOptions>): string;\n success(a: any, b?: any) {\n const opts: DynamicToastOptions =\n typeof a === \"string\" ? { ...(b ?? {}), title: a } : a;\n return this.show({ ...opts, state: \"success\" });\n }\n\n warning(opts: DynamicToastOptions): string;\n warning(title: string, opts?: Partial<DynamicToastOptions>): string;\n warning(a: any, b?: any) {\n const opts: DynamicToastOptions =\n typeof a === \"string\" ? { ...(b ?? {}), title: a } : a;\n return this.show({ ...opts, state: \"warning\" });\n }\n\n error(opts: DynamicToastOptions): string;\n error(title: string, opts?: Partial<DynamicToastOptions>): string;\n error(a: any, b?: any) {\n const opts: DynamicToastOptions =\n typeof a === \"string\" ? { ...(b ?? {}), title: a } : a;\n return this.show({ ...opts, state: \"error\" });\n }\n\n loading(opts: DynamicToastOptions): string;\n loading(title: string, opts?: Partial<DynamicToastOptions>): string;\n loading(a: any, b?: any) {\n const opts: DynamicToastOptions =\n typeof a === \"string\" ? { ...(b ?? {}), title: a } : a;\n return this.show({ ...opts, state: \"loading\", duration: null });\n }\n\n action(opts: DynamicToastOptions): string;\n action(title: string, opts?: Partial<DynamicToastOptions>): string;\n action(a: any, b?: any) {\n const opts: DynamicToastOptions =\n typeof a === \"string\" ? { ...(b ?? {}), title: a } : a;\n return this.show({ ...opts, state: \"action\", duration: null });\n }\n\n update(id: string, patch: DynamicToastOptions & { state?: DynamicToastState }) {\n const existing = this._toasts().find((t) => t.id === id);\n if (!existing) return;\n const merged = this.mergeOptions({ ...existing, ...patch, id });\n const state = patch.state ?? existing.state;\n const item = this.buildItem(merged, id, state, existing.position);\n this.upsert(item);\n }\n\n promise<T>(\n promise: Promise<T> | (() => Promise<T>),\n opts: DynamicToastPromiseOptions<T>,\n ): Promise<T> {\n const id = this.show({\n ...opts.loading,\n state: \"loading\",\n duration: null,\n position: opts.position,\n });\n\n const p = typeof promise === \"function\" ? promise() : promise;\n\n p.then((data) => {\n if (opts.action) {\n const actionOpts =\n typeof opts.action === \"function\" ? opts.action(data) : opts.action;\n this.update(id, { ...actionOpts, state: \"action\", id });\n } else {\n const successOpts =\n typeof opts.success === \"function\" ? opts.success(data) : opts.success;\n this.update(id, { ...successOpts, state: \"success\", id });\n }\n }).catch((err) => {\n const errorOpts =\n typeof opts.error === \"function\" ? opts.error(err) : opts.error;\n this.update(id, { ...errorOpts, state: \"error\", id });\n });\n\n return p;\n }\n\n dismiss(id: string) {\n const item = this._toasts().find((t) => t.id === id);\n if (!item || item.exiting) return;\n\n this.ngZone.runOutsideAngular(() => {\n this._toasts.update((prev) =>\n prev.map((t) => (t.id === id ? { ...t, exiting: true } : t)),\n );\n });\n\n if (this.viewportRef) {\n this.viewportRef.changeDetectorRef.detectChanges();\n }\n\n this.ngZone.runOutsideAngular(() => {\n window.setTimeout(() => {\n this._toasts.update((prev) => prev.filter((t) => t.id !== id));\n this.clearTimers();\n this.scheduleAll();\n if (this.viewportRef) {\n this.viewportRef.changeDetectorRef.detectChanges();\n }\n }, EXIT_DURATION);\n });\n }\n\n clear(position?: DynamicToastPosition) {\n this._toasts.update((prev) =>\n position ? prev.filter((t) => t.position !== position) : [],\n );\n this.clearTimers();\n }\n\n pauseTimers() {\n if (this.paused) return;\n this.paused = true;\n this.clearTimers();\n }\n\n resumeTimers() {\n if (!this.paused) return;\n this.paused = false;\n this.scheduleAll();\n }\n\n private clearTimers() {\n for (const t of this.timers.values()) window.clearTimeout(t);\n this.timers.clear();\n }\n\n private scheduleAll() {\n if (this.paused) return;\n this.ngZone.runOutsideAngular(() => {\n const items = this._toasts();\n for (const item of items) {\n if (item.exiting) continue;\n const key = timeoutKey(item);\n if (this.timers.has(key)) continue;\n const dur = item.duration ?? DEFAULT_TOAST_DURATION;\n if (dur === null || dur <= 0) continue;\n this.timers.set(\n key,\n window.setTimeout(() => {\n this.dismiss(item.id);\n }, dur),\n );\n }\n\n const alive = new Set(items.map(timeoutKey));\n for (const [key, timer] of this.timers) {\n if (!alive.has(key)) {\n window.clearTimeout(timer);\n this.timers.delete(key);\n }\n }\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n inject,\n input,\n OnInit,\n OnDestroy,\n Renderer2,\n ComponentRef,\n ViewContainerRef,\n computed,\n effect,\n signal,\n ChangeDetectorRef,\n NgZone,\n Injector\n} from \"@angular/core\";\nimport { DynamicToastService } from \"./dynamic-toast.service\";\nimport { DynamicToastComponent } from \"./dynamic-toast.component\";\nimport type { DynamicToastItem, DynamicToastTheme, DynamicIslandMode } from \"./types\";\n\n@Directive({\n selector: \"[dtDynamicIsland]\",\n standalone: true,\n})\nexport class DynamicIslandDirective implements OnInit, OnDestroy {\n /** The ID used to match toasts to this island anchor */\n dtIslandId = input.required<string>();\n\n /** Direction the toast expands: 'bottom' (default) or 'top' */\n dtIslandExpand = input<\"top\" | \"bottom\">(\"bottom\");\n\n /** Theme override for this island */\n dtIslandTheme = input<DynamicToastTheme>(\"dark\");\n\n /** The mode of the island: 'island' (border wrap) or 'inline' (element replacement) */\n dtIslandMode = input<DynamicIslandMode>(\"island\");\n\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly service = inject(DynamicToastService);\n private readonly renderer = inject(Renderer2);\n private readonly vcr = inject(ViewContainerRef);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly ngZone = inject(NgZone);\n private readonly injector = inject(Injector);\n\n private container: HTMLElement | null = null;\n private toastCompRef: ComponentRef<DynamicToastComponent> | null = null;\n private ro: ResizeObserver | null = null;\n\n /** Current toast bound to this island */\n private currentToast = signal<DynamicToastItem | null>(null);\n\n ngOnInit() {\n // Register this anchor with the service\n this.service.registerAnchor(this.dtIslandId(), this.el);\n\n // Mark the host element\n this.renderer.setAttribute(\n this.el.nativeElement,\n \"data-dt-island\",\n this.dtIslandId(),\n );\n\n // Create the overlay container\n this.container = this.renderer.createElement(\"div\");\n this.renderer.setAttribute(this.container, \"data-dt-island-container\", \"\");\n this.renderer.setAttribute(this.container, \"data-dt-viewport\", \"\");\n this.renderer.setAttribute(\n this.container,\n \"data-expand\",\n this.dtIslandExpand(),\n );\n this.renderer.setAttribute(\n this.container,\n \"data-theme\",\n this.dtIslandTheme() === \"system\" ? \"dark\" : this.dtIslandTheme(),\n );\n\n // Insert container as sibling after the host\n const parent = this.el.nativeElement.parentNode;\n if (parent) {\n // Wrap host in a relative container if not already\n const wrapper = this.renderer.createElement(\"div\");\n this.renderer.setStyle(wrapper, \"position\", \"relative\");\n this.renderer.setStyle(wrapper, \"display\", \"inline-flex\");\n this.renderer.setStyle(wrapper, \"justify-content\", \"center\");\n \n parent.insertBefore(wrapper, this.el.nativeElement);\n \n // Make the host element transition opacity smoothly\n this.renderer.setStyle(this.el.nativeElement, \"position\", \"relative\");\n this.renderer.setStyle(this.el.nativeElement, \"z-index\", \"60\");\n this.renderer.setStyle(\n this.el.nativeElement,\n \"transition\",\n \"opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1), transform 0.25s cubic-bezier(0.4, 0, 0.2, 1)\"\n );\n \n wrapper.appendChild(this.el.nativeElement);\n \n // Put the container behind it initially\n this.renderer.setStyle(this.container, \"z-index\", \"40\");\n wrapper.appendChild(this.container!);\n }\n\n // Watch for toasts targeting this island\n effect(() => {\n const toasts = this.service.toasts();\n const islandId = this.dtIslandId();\n const match = toasts.find(\n (t) => t.anchorId === islandId && !t.exiting,\n );\n const exiting = toasts.find(\n (t) => t.anchorId === islandId && t.exiting,\n );\n\n this.ngZone.runOutsideAngular(() => {\n queueMicrotask(() => {\n if (match) {\n this.showToast(match);\n } else if (exiting) {\n this.updateToast(exiting);\n } else {\n this.hideToast();\n }\n });\n });\n }, { injector: this.injector });\n\n // Observe anchor size changes to update pill width\n this.ro = new ResizeObserver(() => {\n this.updateContainerPosition();\n });\n this.ro.observe(this.el.nativeElement);\n }\n\n private showToast(item: DynamicToastItem) {\n if (!this.container) return;\n\n const mode = this.dtIslandMode();\n\n if (mode === \"inline\") {\n this.renderer.addClass(this.el.nativeElement, \"dt-island-inline-active\");\n this.renderer.setStyle(this.el.nativeElement, \"opacity\", \"0\");\n this.renderer.setStyle(this.el.nativeElement, \"pointer-events\", \"none\");\n this.renderer.setStyle(this.container, \"z-index\", \"60\");\n } else {\n this.renderer.setStyle(this.el.nativeElement, \"opacity\", \"1\");\n this.renderer.setStyle(this.el.nativeElement, \"pointer-events\", \"auto\");\n this.renderer.setStyle(this.container, \"z-index\", \"40\");\n }\n\n if (!this.toastCompRef) {\n this.toastCompRef = this.vcr.createComponent(DynamicToastComponent);\n this.container.appendChild(\n this.toastCompRef.location.nativeElement,\n );\n\n // Subscribe to dismiss\n this.toastCompRef.instance.dismissed.subscribe((id: string) => {\n this.service.dismiss(id);\n });\n }\n\n // Update inputs\n this.toastCompRef.setInput(\"toast\", item);\n this.toastCompRef.setInput(\"theme\", this.dtIslandTheme() === \"system\" ? \"dark\" : this.dtIslandTheme());\n this.toastCompRef.setInput(\"pillAlign\", \"center\");\n this.toastCompRef.setInput(\"expandEdge\", this.dtIslandExpand());\n this.toastCompRef.setInput(\"canExpand\", true);\n\n this.toastCompRef.changeDetectorRef.detectChanges();\n this.updateContainerPosition();\n }\n\n private updateToast(item: DynamicToastItem) {\n if (!this.toastCompRef) return;\n this.toastCompRef.setInput(\"toast\", item);\n this.toastCompRef.changeDetectorRef.detectChanges();\n }\n\n private hideToast() {\n if (this.toastCompRef) {\n this.toastCompRef.destroy();\n this.toastCompRef = null;\n }\n if (this.container) {\n this.renderer.removeClass(this.el.nativeElement, \"dt-island-inline-active\");\n this.renderer.setStyle(this.el.nativeElement, \"opacity\", \"1\");\n this.renderer.setStyle(this.el.nativeElement, \"pointer-events\", \"auto\");\n }\n }\n\n private updateContainerPosition() {\n // Container is already positioned via CSS (absolute, centered)\n const anchorWidth = this.el.nativeElement.offsetWidth;\n const anchorHeight = this.el.nativeElement.offsetHeight;\n \n // We update the component to know about the anchor's dimensions so it can border it perfectly\n if (this.toastCompRef) {\n this.toastCompRef.setInput(\"anchorWidth\", anchorWidth);\n this.toastCompRef.setInput(\"anchorHeight\", anchorHeight);\n }\n }\n\n ngOnDestroy() {\n this.service.unregisterAnchor(this.dtIslandId());\n this.ro?.disconnect();\n this.hideToast();\n }\n}\n","import type {\n DynamicToastOptions,\n DynamicToastPosition,\n DynamicToastPromiseOptions,\n DynamicToastState,\n} from \"./types\";\nimport type { DynamicToastService } from \"./dynamic-toast.service\";\n\nlet instance: DynamicToastService | null = null;\n\nexport function registerDynamicToast(service: DynamicToastService) {\n instance = service;\n}\n\nconst ensure = (): DynamicToastService => {\n if (!instance) {\n throw new Error(\n \"dynamicToast no está inicializado. Agrega provideDynamicToast(...) en app.config.ts\",\n );\n }\n return instance;\n};\n\nexport const dynamicToast = {\n show: (opts: DynamicToastOptions & { state: DynamicToastState }) =>\n ensure().show(opts),\n success: (opts: DynamicToastOptions) => ensure().success(opts),\n error: (opts: DynamicToastOptions) => ensure().error(opts),\n warning: (opts: DynamicToastOptions) => ensure().warning(opts),\n info: (opts: DynamicToastOptions) => ensure().info(opts),\n loading: (opts: DynamicToastOptions) => ensure().loading(opts),\n action: (opts: DynamicToastOptions) => ensure().action(opts),\n promise: <T,>(p: Promise<T> | (() => Promise<T>), opts: DynamicToastPromiseOptions<T>) =>\n ensure().promise(p, opts),\n dismiss: (id: string) => ensure().dismiss(id),\n clear: (pos?: DynamicToastPosition) => ensure().clear(pos),\n};\n\n","import {\n APP_INITIALIZER,\n EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n} from \"@angular/core\";\nimport type { DynamicToastConfig } from \"./types\";\nimport { DynamicToastService } from \"./dynamic-toast.service\";\nimport { registerDynamicToast } from \"./toast\";\n\nexport function provideDynamicToast(config: DynamicToastConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: APP_INITIALIZER,\n useFactory: () => {\n const service = inject(DynamicToastService);\n return () => {\n service.configure(config);\n registerDynamicToast(service);\n };\n },\n multi: true,\n },\n ]);\n}\n\nexport { DynamicToastService } from \"./dynamic-toast.service\";\nexport { dynamicToast } from \"./toast\";\nexport { DynamicIslandDirective } from \"./dynamic-island.directive\";\nexport * from \"./types\";\n","/*\n * Public API Surface of ngx-dynamic-toast\n */\n\nexport * from \"./lib/dynamic-toast.service\";\nexport * from \"./lib/dynamic-toast.component\";\nexport * from \"./lib/dynamic-toast-viewport.component\";\nexport * from \"./lib/dynamic-island.directive\";\nexport * from \"./lib/types\";\nexport * from \"./lib/constants\";\nexport * from \"./lib/icons\";\nexport * from \"./lib/index\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngx-dynamic-toast.mjs","sources":["../../../src/lib/constants.ts","../../../src/lib/icons.ts","../../../src/lib/dynamic-toast.component.ts","../../../src/lib/dynamic-toast.component.html","../../../src/lib/dynamic-toast-viewport.component.ts","../../../src/lib/dynamic-toast-viewport.component.html","../../../src/lib/dynamic-toast.service.ts","../../../src/lib/dynamic-island.directive.ts","../../../src/lib/toast.ts","../../../src/lib/index.ts","../../../src/public-api.ts","../../../src/ngx-dynamic-toast.ts"],"sourcesContent":["/* --------------------------------- Layout --------------------------------- */\n\nexport const HEIGHT = 40;\nexport const WIDTH = 350;\nexport const DEFAULT_ROUNDNESS = 16;\n\n/* --------------------------------- Timing --------------------------------- */\n\nexport const DURATION_MS = 600;\nexport const DURATION_S = DURATION_MS / 1000;\n\nexport const DEFAULT_TOAST_DURATION = 6000;\nexport const EXIT_DURATION = DEFAULT_TOAST_DURATION * 0.1;\nexport const AUTO_EXPAND_DELAY = DEFAULT_TOAST_DURATION * 0.025;\nexport const AUTO_COLLAPSE_DELAY = DEFAULT_TOAST_DURATION - 2000;\n\n/* --------------------------------- Spring --------------------------------- */\n\nexport const SPRING = {\n type: \"spring\" as const,\n bounce: 0.25,\n duration: DURATION_S,\n};\n\n/* --------------------------------- Render --------------------------------- */\n\nexport const BLUR_RATIO = 0.5;\nexport const PILL_PADDING = 10;\nexport const MIN_EXPAND_RATIO = 2.25;\nexport const SWAP_COLLAPSE_MS = 200;\nexport const HEADER_EXIT_MS = DURATION_MS * 0.7;\n","const baseSvg = (title: string, body: string, extra?: string) =>\n `<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" ${extra ?? \"\"}><title>${title}</title>${body}</svg>`;\n\nexport const ICONS = {\n arrowRight: baseSvg(\n \"Arrow Right\",\n `<path d=\"M5 12h14\" /><path d=\"m12 5 7 7-7 7\" />`,\n ),\n lifeBuoy: baseSvg(\n \"Life Buoy\",\n `<circle cx=\"12\" cy=\"12\" r=\"10\" /><path d=\"m4.93 4.93 4.24 4.24\" /><path d=\"m14.83 9.17 4.24-4.24\" /><path d=\"m14.83 14.83 4.24 4.24\" /><path d=\"m9.17 14.83-4.24 4.24\" /><circle cx=\"12\" cy=\"12\" r=\"4\" />`,\n ),\n loaderCircle: (extra?: string) =>\n baseSvg(\n \"Loader Circle\",\n `<path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />`,\n extra,\n ),\n x: baseSvg(\"X\", `<path d=\"M18 6 6 18\" /><path d=\"m6 6 12 12\" />`),\n circleAlert: baseSvg(\n \"Circle Alert\",\n `<circle cx=\"12\" cy=\"12\" r=\"10\" /><line x1=\"12\" x2=\"12\" y1=\"8\" y2=\"12\" /><line x1=\"12\" x2=\"12.01\" y1=\"16\" y2=\"16\" />`,\n ),\n check: baseSvg(\"Check\", `<path d=\"M20 6 9 17l-5-5\" />`),\n} as const;\n\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n untracked,\n ViewEncapsulation,\n OnDestroy,\n NgZone,\n ChangeDetectorRef,\n AfterViewInit,\n ViewChild,\n} from \"@angular/core\";\nimport { NgTemplateOutlet } from \"@angular/common\";\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\nimport {\n BLUR_RATIO,\n DEFAULT_ROUNDNESS,\n HEADER_EXIT_MS,\n HEIGHT,\n MIN_EXPAND_RATIO,\n PILL_PADDING,\n SPRING,\n SWAP_COLLAPSE_MS,\n WIDTH,\n} from \"./constants\";\nimport { ICONS } from \"./icons\";\nimport type {\n DynamicToastItem,\n DynamicToastState,\n DynamicToastStyles,\n} from \"./types\";\n\ntype PillAlign = \"left\" | \"center\" | \"right\";\ntype ExpandEdge = \"top\" | \"bottom\";\n\ninterface View {\n title?: string;\n description?: string;\n state: DynamicToastState;\n iconSvg?: string | null;\n styles?: DynamicToastStyles;\n button?: { title: string; onClick: () => void };\n fill: string;\n contentTemplate?: any;\n}\n\ninterface HeaderLayer {\n key: string;\n view: View;\n}\n\n@Component({\n selector: \"dt-toast\",\n standalone: true,\n imports: [NgTemplateOutlet],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./dynamic-toast.component.html\",\n})\nexport class DynamicToastComponent implements AfterViewInit, OnDestroy {\n toast = input.required<DynamicToastItem>();\n theme = input<'light' | 'dark'>('dark');\n anchorWidth = input<number>(0);\n anchorHeight = input<number>(0);\n pillAlign = input<PillAlign>(\"left\");\n expandEdge = input<ExpandEdge>(\"bottom\");\n canExpand = input<boolean>(true);\n interruptKey = input<string | undefined>(undefined);\n dismissed = output<string>();\n entered = output<string>();\n left = output<string>();\n\n resolvedFill = computed(() => {\n return this.theme() === 'light' ? '#ffffff' : '#151515';\n });\n\n readonly HEIGHT = HEIGHT;\n readonly WIDTH = WIDTH;\n\n private readonly sanitizer = inject(DomSanitizer);\n private readonly hostEl = inject<ElementRef<HTMLElement>>(ElementRef);\n private ngZone = inject(NgZone);\n private cdr = inject(ChangeDetectorRef);\n\n private hasMeasured = false;\n private roHeader: ResizeObserver | null = null;\n private roContent: ResizeObserver | null = null;\n private headerExitTimer: number | null = null;\n private autoExpandTimer: number | null = null;\n private autoCollapseTimer: number | null = null;\n private swapTimer: number | null = null;\n private rafHeader: number | null = null;\n private pendingSwap: { key?: string; payload: View } | null = null;\n private pointerStartY: number | null = null;\n\n @ViewChild(\"pillRect\") pillRectRef!: ElementRef<SVGRectElement>;\n @ViewChild(\"bodyRect\") bodyRectRef!: ElementRef<SVGRectElement>;\n\n ready = signal(false);\n isExpanded = signal(false);\n pillWidth = signal(0);\n contentHeight = signal(0);\n\n // View as a signal so we can swap it for header crossfade animation\n view = signal<View>({\n title: \"\",\n state: \"info\",\n fill: \"#151515\",\n });\n\n // Header layer system for crossfade animation\n headerLayerCurrent = signal<HeaderLayer>({\n key: \"\",\n view: this.view(),\n });\n headerLayerPrev = signal<HeaderLayer | null>(null);\n\n filterId = `dt-gooey-${Math.random().toString(36).slice(2, 8)}`;\n\n hasDesc = computed(() => {\n const v = this.view();\n return (\n Boolean(v.description) || Boolean(v.contentTemplate) || Boolean(v.button)\n );\n });\n\n isLoading = computed(() => this.view().state === \"loading\");\n\n allowExpand = computed(() => {\n if (this.isLoading()) return false;\n const interrupt = this.interruptKey();\n const id = this.toast().id;\n return this.canExpand() ?? (!interrupt || interrupt === id);\n });\n\n open = computed(\n () => this.hasDesc() && this.isExpanded() && !this.isLoading(),\n );\n\n resolvedRoundness = computed(() => {\n try {\n return Math.max(0, this.toast().roundness ?? DEFAULT_ROUNDNESS);\n } catch {\n return DEFAULT_ROUNDNESS;\n }\n });\n\n blur = computed(() => this.resolvedRoundness() * BLUR_RATIO);\n\n minExpanded = computed(() => HEIGHT * MIN_EXPAND_RATIO);\n\n rawExpanded = computed(() => {\n const min = this.minExpanded();\n try {\n if (!this.hasDesc()) return min;\n return Math.max(min, HEIGHT + this.contentHeight());\n } catch {\n return min;\n }\n });\n\n frozenExpanded = signal(HEIGHT * MIN_EXPAND_RATIO);\n\n expanded = computed(() =>\n this.open() ? this.rawExpanded() : this.frozenExpanded(),\n );\n\n svgHeight = computed(() =>\n this.hasDesc() ? Math.max(this.expanded(), this.minExpanded()) : HEIGHT,\n );\n\n expandedContent = computed(() => Math.max(0, this.expanded() - HEIGHT));\n\n resolvedPillWidth = computed(() => {\n const w = this.pillWidth();\n const aw = this.anchorWidth();\n if (aw > 0) {\n return Math.max(w, aw + 4);\n }\n return Math.max(w || HEIGHT, HEIGHT);\n });\n\n pillHeight = computed(() => {\n const ah = this.anchorHeight();\n const baseHeight = ah > 0 ? ah + 4 : HEIGHT;\n return baseHeight + this.blur() * 3;\n });\n\n pillX = computed(() => {\n const align = this.pillAlign();\n const pw = this.resolvedPillWidth();\n const aw = this.anchorWidth();\n \n if (aw > 0) {\n return (WIDTH - pw) / 2;\n }\n\n if (align === \"left\") return 0;\n if (align === \"right\") return WIDTH - pw;\n return (WIDTH - pw) / 2;\n });\n\n headerTransform = computed(() => {\n const open = this.open();\n const expand = this.expandEdge();\n const ty = open ? (expand === \"bottom\" ? 3 : -3) : 0;\n const scale = open ? 0.9 : 1;\n return `translateY(${ty}px) scale(${scale})`;\n });\n\n rootHeight = computed(() => (this.open() ? this.expanded() : HEIGHT));\n\n constructor() {\n // Sync view from toast input\n effect(\n () => {\n const t = this.toast();\n const next: View = {\n title: t.title,\n description: t.description,\n contentTemplate: t.contentTemplate,\n state: t.state,\n iconSvg: t.iconSvg,\n styles: t.styles,\n button: t.button,\n fill: t.fill ?? this.resolvedFill(),\n };\n this.applyView(next);\n },\n { allowSignalWrites: true },\n );\n\n // Auto-expand/auto-collapse logic\n effect(\n () => {\n const hasDesc = this.hasDesc();\n const allowExpand = this.allowExpand();\n const toast = this.toast();\n const exiting = toast.exiting;\n\n if (!hasDesc) return;\n if (exiting || !allowExpand) {\n this.isExpanded.set(false);\n return;\n }\n\n const expandDelay = toast.autoExpandDelayMs;\n const collapseDelay = toast.autoCollapseDelayMs;\n\n if (expandDelay == null && collapseDelay == null) return;\n\n if (this.autoExpandTimer) {\n window.clearTimeout(this.autoExpandTimer);\n this.autoExpandTimer = null;\n }\n if (this.autoCollapseTimer) {\n window.clearTimeout(this.autoCollapseTimer);\n this.autoCollapseTimer = null;\n }\n\n if (expandDelay != null && expandDelay > 0) {\n this.autoExpandTimer = window.setTimeout(\n () => this.isExpanded.set(true),\n expandDelay,\n );\n } else {\n this.isExpanded.set(true);\n }\n\n if (collapseDelay != null && collapseDelay > 0) {\n this.autoCollapseTimer = window.setTimeout(\n () => this.isExpanded.set(false),\n collapseDelay,\n );\n }\n },\n { allowSignalWrites: true },\n );\n\n effect(\n () => {\n if (this.open()) {\n this.frozenExpanded.set(this.rawExpanded());\n }\n },\n { allowSignalWrites: true },\n );\n\n queueMicrotask(() => {\n this.ready.set(true);\n this.ensureMeasurements();\n });\n }\n\n ngAfterViewInit() {\n }\n\n private applyView(next: View) {\n const prev = untracked(() => this.view());\n const headerKey = `${next.state}-${next.title}`;\n const prevKey = `${prev.state}-${prev.title}`;\n\n this.view.set(next);\n\n if (headerKey !== prevKey) {\n const currentLayer: HeaderLayer = { key: headerKey, view: next };\n const prevLayer: HeaderLayer = { key: prevKey, view: prev };\n this.headerLayerPrev.set(prevLayer);\n this.headerLayerCurrent.set(currentLayer);\n\n if (this.headerExitTimer) window.clearTimeout(this.headerExitTimer);\n this.headerExitTimer = window.setTimeout(() => {\n this.headerExitTimer = null;\n this.headerLayerPrev.set(null);\n this.cdr.detectChanges();\n }, HEADER_EXIT_MS);\n } else {\n this.headerLayerCurrent.set({ key: headerKey, view: next });\n }\n }\n\n ngOnDestroy() {\n this.roHeader?.disconnect();\n this.roContent?.disconnect();\n if (this.headerExitTimer) window.clearTimeout(this.headerExitTimer);\n if (this.autoExpandTimer) window.clearTimeout(this.autoExpandTimer);\n if (this.autoCollapseTimer) window.clearTimeout(this.autoCollapseTimer);\n if (this.swapTimer) window.clearTimeout(this.swapTimer);\n if (this.rafHeader) cancelAnimationFrame(this.rafHeader);\n }\n\n private ensureMeasurements() {\n if (this.hasMeasured) return;\n this.hasMeasured = true;\n\n this.ngZone.runOutsideAngular(() => {\n const root = this.hostEl.nativeElement;\n const inner = root.querySelector<HTMLElement>(\n \"[data-dt-header-inner][data-layer='current']\",\n );\n const header = root.querySelector<HTMLElement>(\"[data-dt-header]\");\n const content = root.querySelector<HTMLElement>(\"[data-dt-description]\");\n\n const measureHeader = () => {\n if (this.rafHeader) return;\n this.rafHeader = requestAnimationFrame(() => {\n this.rafHeader = null;\n if (!inner || !header) return;\n const cs = getComputedStyle(header);\n const pad = parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight);\n \n let w = inner.scrollWidth + pad + PILL_PADDING;\n \n const aw = this.anchorWidth();\n if (aw > 0) {\n w += aw; \n }\n \n if (Math.abs(w - this.pillWidth()) > 1.5) {\n this.pillWidth.set(w);\n this.cdr.detectChanges();\n }\n });\n };\n\n let rafContent: number | null = null;\n const measureContent = () => {\n const el = root.querySelector<HTMLElement>(\"[data-dt-description]\");\n if (!el) return;\n if (rafContent) return;\n this.ngZone.runOutsideAngular(() => {\n rafContent = requestAnimationFrame(() => {\n rafContent = null;\n if (Math.abs(el.scrollHeight - this.contentHeight()) > 1.5) {\n this.contentHeight.set(el.scrollHeight);\n this.cdr.detectChanges();\n }\n });\n });\n };\n\n this.roHeader = new ResizeObserver(() => measureHeader());\n this.roContent = new ResizeObserver(() => measureContent());\n \n if (inner) this.roHeader.observe(inner);\n if (content) this.roContent.observe(content);\n });\n }\n\n resolvedIcon(v: View): SafeHtml {\n const icon =\n v.iconSvg ??\n (v.state === \"success\"\n ? ICONS.check\n : v.state === \"loading\"\n ? ICONS.loaderCircle('data-dt-icon=\"spin\" aria-hidden=\"true\"')\n : v.state === \"error\"\n ? ICONS.x\n : v.state === \"warning\"\n ? ICONS.circleAlert\n : v.state === \"info\"\n ? ICONS.lifeBuoy\n : ICONS.arrowRight);\n return this.sanitizer.bypassSecurityTrustHtml(icon);\n }\n\n handleEnter() {\n this.entered.emit(this.toast().id);\n if (this.hasDesc()) this.isExpanded.set(true);\n }\n\n handleLeave() {\n this.left.emit(this.toast().id);\n this.isExpanded.set(false);\n }\n\n handleTransitionEnd(e: TransitionEvent) {\n if (e.propertyName !== \"height\" && e.propertyName !== \"transform\") return;\n if (this.open()) return;\n const pending = this.pendingSwap;\n if (!pending) return;\n if (this.swapTimer) {\n window.clearTimeout(this.swapTimer);\n this.swapTimer = null;\n }\n this.applyView(pending.payload);\n this.pendingSwap = null;\n }\n\n handleButtonClick(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n this.view().button?.onClick();\n }\n\n handleClose(e: MouseEvent) {\n e.preventDefault();\n e.stopPropagation();\n this.dismissed.emit(this.toast().id);\n }\n\n handlePointerDown(e: PointerEvent) {\n if (this.toast().exiting) return;\n const target = e.target as HTMLElement;\n if (target.closest(\"[data-dt-button]\")) return;\n\n this.pointerStartY = e.clientY;\n const el = e.currentTarget as HTMLElement;\n const SWIPE_DISMISS = 30;\n const SWIPE_MAX = 20;\n\n const onMove = (ev: PointerEvent) => {\n if (this.pointerStartY == null) return;\n const dy = ev.clientY - this.pointerStartY;\n const sign = dy > 0 ? 1 : -1;\n const clamped = Math.min(Math.abs(dy), SWIPE_MAX) * sign;\n el.style.transform = `translateY(${clamped}px)`;\n };\n\n const onUp = (ev: PointerEvent) => {\n if (this.pointerStartY == null) return;\n const dy = ev.clientY - this.pointerStartY;\n this.pointerStartY = null;\n el.style.transform = \"\";\n el.removeEventListener(\"pointermove\", onMove);\n el.removeEventListener(\"pointerup\", onUp);\n if (Math.abs(dy) > SWIPE_DISMISS) {\n this.dismissed.emit(this.toast().id);\n } else if (Math.abs(dy) < 5) {\n this.handleTap();\n }\n };\n\n el.setPointerCapture(e.pointerId);\n el.addEventListener(\"pointermove\", onMove, { passive: true });\n el.addEventListener(\"pointerup\", onUp, { passive: true });\n }\n\n private handleTap() {\n if (this.hasDesc()) {\n if (this.isExpanded()) {\n this.isExpanded.set(false);\n } else {\n this.dismissed.emit(this.toast().id);\n }\n } else {\n this.dismissed.emit(this.toast().id);\n }\n }\n}\n","<button\n type=\"button\"\n data-dt-toast\n [attr.data-ready]=\"ready()\"\n [attr.data-expanded]=\"open()\"\n [attr.data-exiting]=\"toast().exiting || false\"\n [attr.data-edge]=\"expandEdge()\"\n [attr.data-position]=\"pillAlign()\"\n [attr.data-state]=\"view().state\"\n [class]=\"toast().className || ''\"\n [style.--_h]=\"rootHeight() + 'px'\"\n [style.--_pw]=\"resolvedPillWidth() + 'px'\"\n [style.--_px]=\"pillX() + 'px'\"\n [style.--_ht]=\"headerTransform()\"\n [style.--_co]=\"open() ? 1 : 0\"\n (mouseenter)=\"handleEnter()\"\n (mouseleave)=\"handleLeave()\"\n (transitionend)=\"handleTransitionEnd($event)\"\n (pointerdown)=\"handlePointerDown($event)\"\n>\n <div data-dt-canvas-wrapper>\n <div\n data-dt-canvas\n [attr.data-edge]=\"expandEdge()\"\n [style.filter]=\"'url(#' + filterId + ')'\"\n >\n <svg\n data-dt-svg\n [attr.width]=\"WIDTH\"\n [attr.height]=\"svgHeight()\"\n [attr.viewBox]=\"'0 0 ' + WIDTH + ' ' + svgHeight()\"\n >\n <title>Toast Notification</title>\n <defs>\n <filter\n [id]=\"filterId\"\n x=\"-20%\"\n y=\"-20%\"\n width=\"140%\"\n height=\"140%\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feGaussianBlur\n in=\"SourceGraphic\"\n [attr.stdDeviation]=\"blur()\"\n result=\"blur\"\n />\n <feColorMatrix\n in=\"blur\"\n mode=\"matrix\"\n values=\"1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 20 -10\"\n result=\"goo\"\n />\n <feComposite in=\"SourceGraphic\" in2=\"goo\" operator=\"atop\" />\n </filter>\n </defs>\n\n <!-- Pill: animated <rect> via Motion -->\n <rect\n #pillRect\n data-dt-pill\n [attr.rx]=\"resolvedRoundness()\"\n [attr.ry]=\"resolvedRoundness()\"\n [attr.fill]=\"view().fill\"\n y=\"0\"\n [style.x.px]=\"pillX()\"\n [style.width.px]=\"resolvedPillWidth()\"\n [style.height.px]=\"open() ? pillHeight() : HEIGHT\"\n />\n\n <!-- Body: animated <rect> via Motion -->\n <rect\n #bodyRect\n data-dt-body\n [attr.y]=\"HEIGHT\"\n [attr.width]=\"WIDTH\"\n [attr.rx]=\"resolvedRoundness()\"\n [attr.ry]=\"resolvedRoundness()\"\n [attr.fill]=\"view().fill\"\n [style.height.px]=\"open() ? expandedContent() : 0\"\n [style.opacity]=\"open() ? 1 : 0\"\n />\n </svg>\n </div>\n </div>\n\n <div data-dt-header [attr.data-edge]=\"expandEdge()\">\n <div data-dt-header-stack>\n <!-- Current header layer -->\n <div\n data-dt-header-inner\n data-layer=\"current\"\n [attr.key]=\"headerLayerCurrent().key\"\n >\n <div\n data-dt-badge\n [attr.data-state]=\"headerLayerCurrent().view.state\"\n [class]=\"headerLayerCurrent().view.styles?.badge || ''\"\n [innerHTML]=\"resolvedIcon(headerLayerCurrent().view)\"\n ></div>\n <span\n data-dt-title\n [attr.data-state]=\"headerLayerCurrent().view.state\"\n [class]=\"headerLayerCurrent().view.styles?.title || ''\"\n >\n {{ headerLayerCurrent().view.title }}\n </span>\n </div>\n\n <!-- Previous header layer (crossfade exit) -->\n @if (headerLayerPrev(); as prev) {\n <div data-dt-header-inner data-layer=\"prev\" data-exiting=\"true\">\n <div\n data-dt-badge\n [attr.data-state]=\"prev.view.state\"\n [class]=\"prev.view.styles?.badge || ''\"\n [innerHTML]=\"resolvedIcon(prev.view)\"\n ></div>\n <span\n data-dt-title\n [attr.data-state]=\"prev.view.state\"\n [class]=\"prev.view.styles?.title || ''\"\n >\n {{ prev.view.title }}\n </span>\n </div>\n }\n </div>\n </div>\n\n @if (hasDesc()) {\n <div\n data-dt-content\n [attr.data-edge]=\"expandEdge()\"\n [attr.data-visible]=\"open()\"\n >\n <div\n data-dt-description\n [class]=\"view().styles?.description || ''\"\n >\n @if (view().description) {\n <span>{{ view().description }}</span>\n }\n @if (view().contentTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"view().contentTemplate\"\n ></ng-container>\n }\n @if (view().button) {\n <a\n href=\"#\"\n data-dt-button\n [attr.data-state]=\"view().state\"\n [class]=\"view().styles?.button || ''\"\n (click)=\"handleButtonClick($event)\"\n >\n {{ view().button?.title }}\n </a>\n }\n </div>\n </div>\n }\n\n <!-- Close button (fades in on hover) -->\n <button\n type=\"button\"\n data-dt-close\n (click)=\"handleClose($event)\"\n aria-label=\"Dismiss notification\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line></svg>\n </button>\n</button>\n","import {\n ChangeDetectionStrategy,\n Component,\n computed,\n inject,\n input,\n signal,\n ViewEncapsulation,\n OnInit,\n OnDestroy,\n} from \"@angular/core\";\nimport { DynamicToastComponent } from \"./dynamic-toast.component\";\nimport { DynamicToastService } from \"./dynamic-toast.service\";\nimport type {\n DynamicToastOffsetConfig,\n DynamicToastPosition,\n DynamicToastTheme,\n} from \"./types\";\n\ntype PillAlign = \"left\" | \"center\" | \"right\";\ntype ExpandEdge = \"top\" | \"bottom\";\n\nconst pillAlign = (pos: DynamicToastPosition): PillAlign =>\n pos.includes(\"right\") ? \"right\" : pos.includes(\"center\") ? \"center\" : \"left\";\n\nconst expandDir = (pos: DynamicToastPosition): ExpandEdge =>\n pos.startsWith(\"top\") ? \"bottom\" : \"top\";\n\n@Component({\n selector: \"dt-viewport\",\n standalone: true,\n imports: [DynamicToastComponent],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n templateUrl: \"./dynamic-toast-viewport.component.html\",\n styleUrls: [\"./styles.css\"],\n})\nexport class DynamicToastViewportComponent implements OnInit, OnDestroy {\n position = input<DynamicToastPosition>(\"top-right\");\n offset = input<DynamicToastOffsetConfig | string | number | undefined>(\n undefined,\n );\n theme = input<DynamicToastTheme>(\"dark\");\n\n readonly service = inject(DynamicToastService);\n private hovering = signal(new Set<string>());\n private systemThemeMql: MediaQueryList | null = null;\n private systemThemeListener: ((e: MediaQueryListEvent) => void) | null = null;\n\n activeId = signal<string | undefined>(undefined);\n\n /** Resolved theme (handles 'system' by listening to prefers-color-scheme) */\n private systemIsDark = signal(true);\n\n resolvedTheme = computed(() => {\n const t = this.theme();\n if (t === \"system\") {\n return this.systemIsDark() ? \"dark\" : \"light\";\n }\n return t;\n });\n\n private latestId = computed(() => {\n const list = this.service.toasts();\n for (let i = list.length - 1; i >= 0; i--) {\n if (!list[i].exiting) return list[i].id;\n }\n return undefined;\n });\n\n groups = computed(() => {\n const toasts = this.service.toasts();\n // Filter out toasts that have an anchorId (those go to Dynamic Islands)\n const viewportToasts = toasts.filter((t) => !t.anchorId);\n const byPos = new Map<DynamicToastPosition, typeof viewportToasts>();\n for (const t of viewportToasts) {\n const p = (t.position ?? this.position()) as DynamicToastPosition;\n const arr = byPos.get(p);\n if (arr) arr.push(t);\n else byPos.set(p, [t]);\n }\n\n const offset = this.offset();\n const off: DynamicToastOffsetConfig | undefined =\n offset === undefined\n ? undefined\n : typeof offset === \"object\"\n ? offset\n : { top: offset, right: offset, bottom: offset, left: offset };\n\n const px = (v: string | number | undefined) =>\n v === undefined ? undefined : typeof v === \"number\" ? `${v}px` : v;\n\n const res: Array<{\n pos: DynamicToastPosition;\n items: typeof viewportToasts;\n pill: PillAlign;\n expand: ExpandEdge;\n style?: { top?: string; right?: string; bottom?: string; left?: string };\n }> = [];\n\n for (const [pos, items] of byPos) {\n const style: any = {};\n if (off) {\n if (pos.startsWith(\"top\") && off.top !== undefined)\n style.top = px(off.top);\n if (pos.startsWith(\"bottom\") && off.bottom !== undefined)\n style.bottom = px(off.bottom);\n if (pos.endsWith(\"left\") && off.left !== undefined)\n style.left = px(off.left);\n if (pos.endsWith(\"right\") && off.right !== undefined)\n style.right = px(off.right);\n }\n\n res.push({\n pos,\n items,\n pill: pillAlign(pos),\n expand: expandDir(pos),\n style: off ? style : undefined,\n });\n }\n\n return res;\n });\n\n ngOnInit() {\n this.service.registerViewport(this);\n // Listen for system theme changes\n if (typeof window !== \"undefined\" && window.matchMedia) {\n this.systemThemeMql = window.matchMedia(\"(prefers-color-scheme: dark)\");\n this.systemIsDark.set(this.systemThemeMql.matches);\n this.systemThemeListener = (e) => this.systemIsDark.set(e.matches);\n this.systemThemeMql.addEventListener(\"change\", this.systemThemeListener);\n }\n }\n\n ngOnDestroy() {\n this.service.unregisterViewport(this);\n if (this.systemThemeMql && this.systemThemeListener) {\n this.systemThemeMql.removeEventListener(\n \"change\",\n this.systemThemeListener,\n );\n }\n }\n\n onToastEnter(id: string) {\n const next = new Set(this.hovering());\n next.add(id);\n this.hovering.set(next);\n this.activeId.set(id);\n this.service.pauseTimers();\n }\n\n onToastLeave(id: string) {\n const next = new Set(this.hovering());\n next.delete(id);\n this.hovering.set(next);\n if (next.size > 0) return;\n\n queueMicrotask(() => {\n if (this.hovering().size > 0) return;\n this.activeId.set(this.latestId());\n this.service.resumeTimers();\n });\n }\n}\n","@for (group of groups(); track group.pos) {\n <section\n data-dt-viewport\n [attr.data-position]=\"group.pos\"\n [attr.data-theme]=\"resolvedTheme()\"\n aria-live=\"polite\"\n [style.top]=\"group.style?.top\"\n [style.right]=\"group.style?.right\"\n [style.bottom]=\"group.style?.bottom\"\n [style.left]=\"group.style?.left\"\n >\n @for (t of group.items; track t.id) {\n <dt-toast\n [toast]=\"t\"\n [theme]=\"resolvedTheme()\"\n [pillAlign]=\"group.pill\"\n [expandEdge]=\"group.expand\"\n [canExpand]=\"activeId() === undefined || activeId() === t.id\"\n (entered)=\"onToastEnter($event)\"\n (left)=\"onToastLeave($event)\"\n (dismissed)=\"service.dismiss($event)\"\n />\n }\n </section>\n}\n","import {\n ApplicationRef,\n ComponentRef,\n ElementRef,\n EnvironmentInjector,\n Injectable,\n NgZone,\n createComponent,\n inject,\n signal,\n} from \"@angular/core\";\nimport { DOCUMENT } from \"@angular/common\";\nimport {\n AUTO_COLLAPSE_DELAY,\n AUTO_EXPAND_DELAY,\n DEFAULT_TOAST_DURATION,\n EXIT_DURATION,\n} from \"./constants\";\nimport {\n DynamicToastConfig,\n DynamicToastItem,\n DynamicToastOptions,\n DynamicToastPosition,\n DynamicToastPromiseOptions,\n DynamicToastState,\n DynamicToastTheme,\n} from \"./types\";\nimport { DynamicToastViewportComponent } from \"./dynamic-toast-viewport.component\";\n\nconst timeoutKey = (t: DynamicToastItem) => `${t.id}:${t.instanceId}`;\n\nlet idCounter = 0;\nconst generateId = () =>\n `${++idCounter}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;\n\n@Injectable({ providedIn: \"root\" })\nexport class DynamicToastService {\n private _toasts = signal<DynamicToastItem[]>([]);\n readonly toasts = this._toasts.asReadonly();\n\n private config: DynamicToastConfig = { position: \"top-right\", theme: \"dark\" };\n private viewportRef: ComponentRef<DynamicToastViewportComponent> | null = null;\n private timers = new Map<string, number>();\n private paused = false;\n private isPendingCD = false;\n private loopCount = 0;\n private loopResetTimer: any;\n\n /** Registry of Dynamic Island anchors */\n private anchors = new Map<string, ElementRef<HTMLElement>>();\n\n private appRef = inject(ApplicationRef);\n private envInjector = inject(EnvironmentInjector);\n private document = inject(DOCUMENT);\n private ngZone = inject(NgZone);\n\n private registeredViewport: DynamicToastViewportComponent | null = null;\n\n registerViewport(cmp: DynamicToastViewportComponent) {\n this.registeredViewport = cmp;\n }\n\n unregisterViewport(cmp: DynamicToastViewportComponent) {\n if (this.registeredViewport === cmp) {\n this.registeredViewport = null;\n }\n }\n\n configure(cfg: DynamicToastConfig) {\n this.config = { ...this.config, ...cfg };\n if (this.viewportRef) {\n this.viewportRef.setInput(\"position\", this.config.position ?? \"top-right\");\n this.viewportRef.setInput(\"offset\", this.config.offset);\n this.viewportRef.setInput(\"theme\", this.config.theme ?? \"dark\");\n }\n }\n\n /** Register a Dynamic Island anchor element */\n registerAnchor(id: string, elementRef: ElementRef<HTMLElement>) {\n this.anchors.set(id, elementRef);\n }\n\n /** Unregister a Dynamic Island anchor element */\n unregisterAnchor(id: string) {\n this.anchors.delete(id);\n }\n\n /** Get anchor element by ID */\n getAnchor(id: string): ElementRef<HTMLElement> | undefined {\n return this.anchors.get(id);\n }\n\n private ensureViewport() {\n if (this.viewportRef || this.registeredViewport) return;\n const ref = createComponent(DynamicToastViewportComponent, {\n environmentInjector: this.envInjector,\n });\n ref.setInput(\"position\", this.config.position ?? \"top-right\");\n ref.setInput(\"offset\", this.config.offset);\n ref.setInput(\"theme\", this.config.theme ?? \"dark\");\n\n const el = ref.location.nativeElement;\n el.setAttribute(\"data-dt-root\", \"\");\n\n this.appRef.attachView(ref.hostView);\n this.document.body.appendChild(el);\n this.viewportRef = ref;\n }\n\n private resolveAutopilot(\n opts: DynamicToastOptions,\n duration: number | null,\n ): { expandDelayMs?: number; collapseDelayMs?: number } {\n if (opts.autopilot === false || !duration || duration <= 0) return {};\n const cfg = typeof opts.autopilot === \"object\" ? opts.autopilot : undefined;\n const clamp = (v: number) => Math.min(duration, Math.max(0, v));\n return {\n expandDelayMs: clamp(cfg?.expand ?? AUTO_EXPAND_DELAY),\n collapseDelayMs: clamp(cfg?.collapse ?? AUTO_COLLAPSE_DELAY),\n };\n }\n\n private mergeOptions(options: DynamicToastOptions): DynamicToastOptions {\n return {\n ...(this.config.options ?? {}),\n ...options,\n styles: { ...(this.config.options?.styles ?? {}), ...(options.styles ?? {}) },\n };\n }\n\n private buildItem(\n merged: DynamicToastOptions,\n id: string,\n state: DynamicToastState,\n fallbackPosition?: DynamicToastPosition,\n ): DynamicToastItem {\n const duration = merged.duration ?? DEFAULT_TOAST_DURATION;\n const auto = this.resolveAutopilot(merged, duration);\n return {\n ...merged,\n id,\n instanceId: generateId(),\n state,\n position:\n merged.position ?? fallbackPosition ?? this.config.position ?? \"top-right\",\n duration,\n autoExpandDelayMs: auto.expandDelayMs,\n autoCollapseDelayMs: auto.collapseDelayMs,\n exiting: false,\n fill: merged.fill,\n };\n }\n\n private upsert(item: DynamicToastItem) {\n // Circuit breaker for infinite loops\n this.loopCount++;\n if (this.loopCount > 50) {\n console.warn(\"[DynamicToast] Loop detected (50+ updates/sec). Blocking update.\");\n return;\n }\n if (!this.loopResetTimer) {\n this.loopResetTimer = setTimeout(() => {\n this.loopCount = 0;\n this.loopResetTimer = null;\n }, 1000);\n }\n\n // Optimization: check if item really changed before anything else\n const currentList = this._toasts();\n const existing = currentList.find((t) => t.id === item.id);\n if (existing && JSON.stringify(existing) === JSON.stringify(item)) {\n return;\n }\n\n this.ensureViewport();\n\n this.ngZone.runOutsideAngular(() => {\n this._toasts.update((prev) => {\n const live = prev.filter((t) => !t.exiting);\n const exist = live.find((t) => t.id === item.id);\n if (exist) {\n return prev.map((t) => (t.id === item.id ? { ...item } : t));\n }\n return [...prev.filter((t) => t.id !== item.id), item];\n });\n });\n\n // Coalesce CD updates to one per frame\n if (!this.isPendingCD) {\n this.isPendingCD = true;\n this.ngZone.runOutsideAngular(() => {\n requestAnimationFrame(() => {\n this.isPendingCD = false;\n if (this.viewportRef) {\n this.viewportRef.changeDetectorRef.detectChanges();\n } else if (this.registeredViewport) {\n // Signal-based components will naturally update, but we can force tick if necessary\n }\n });\n });\n }\n\n this.scheduleAll();\n }\n\n show(options: DynamicToastOptions & { state: DynamicToastState }) {\n const merged = this.mergeOptions(options);\n const id = merged.id ?? \"dynamicToast-default\";\n const prev = this._toasts().find((t) => t.id === id && !t.exiting);\n const item = this.buildItem(merged, id, options.state, prev?.position);\n this.upsert(item);\n return id;\n }\n\n info(opts: DynamicToastOptions): string;\n info(title: string, opts?: Partial<DynamicToastOptions>): string;\n info(a: any, b?: any) {\n const opts: DynamicToastOptions =\n typeof a === \"string\" ? { ...(b ?? {}), title: a } : a;\n return this.show({ ...opts, state: \"info\" });\n }\n\n success(opts: DynamicToastOptions): string;\n success(title: string, opts?: Partial<DynamicToastOptions>): string;\n success(a: any, b?: any) {\n const opts: DynamicToastOptions =\n typeof a === \"string\" ? { ...(b ?? {}), title: a } : a;\n return this.show({ ...opts, state: \"success\" });\n }\n\n warning(opts: DynamicToastOptions): string;\n warning(title: string, opts?: Partial<DynamicToastOptions>): string;\n warning(a: any, b?: any) {\n const opts: DynamicToastOptions =\n typeof a === \"string\" ? { ...(b ?? {}), title: a } : a;\n return this.show({ ...opts, state: \"warning\" });\n }\n\n error(opts: DynamicToastOptions): string;\n error(title: string, opts?: Partial<DynamicToastOptions>): string;\n error(a: any, b?: any) {\n const opts: DynamicToastOptions =\n typeof a === \"string\" ? { ...(b ?? {}), title: a } : a;\n return this.show({ ...opts, state: \"error\" });\n }\n\n loading(opts: DynamicToastOptions): string;\n loading(title: string, opts?: Partial<DynamicToastOptions>): string;\n loading(a: any, b?: any) {\n const opts: DynamicToastOptions =\n typeof a === \"string\" ? { ...(b ?? {}), title: a } : a;\n return this.show({ ...opts, state: \"loading\", duration: null });\n }\n\n action(opts: DynamicToastOptions): string;\n action(title: string, opts?: Partial<DynamicToastOptions>): string;\n action(a: any, b?: any) {\n const opts: DynamicToastOptions =\n typeof a === \"string\" ? { ...(b ?? {}), title: a } : a;\n return this.show({ ...opts, state: \"action\", duration: null });\n }\n\n update(id: string, patch: DynamicToastOptions & { state?: DynamicToastState }) {\n const existing = this._toasts().find((t) => t.id === id);\n if (!existing) return;\n const merged = this.mergeOptions({ ...existing, ...patch, id });\n const state = patch.state ?? existing.state;\n const item = this.buildItem(merged, id, state, existing.position);\n this.upsert(item);\n }\n\n promise<T>(\n promise: Promise<T> | (() => Promise<T>),\n opts: DynamicToastPromiseOptions<T>,\n ): Promise<T> {\n const id = this.show({\n ...opts.loading,\n state: \"loading\",\n duration: null,\n position: opts.position,\n });\n\n const p = typeof promise === \"function\" ? promise() : promise;\n\n p.then((data) => {\n if (opts.action) {\n const actionOpts =\n typeof opts.action === \"function\" ? opts.action(data) : opts.action;\n this.update(id, { ...actionOpts, state: \"action\", id });\n } else {\n const successOpts =\n typeof opts.success === \"function\" ? opts.success(data) : opts.success;\n this.update(id, { ...successOpts, state: \"success\", id });\n }\n }).catch((err) => {\n const errorOpts =\n typeof opts.error === \"function\" ? opts.error(err) : opts.error;\n this.update(id, { ...errorOpts, state: \"error\", id });\n });\n\n return p;\n }\n\n dismiss(id: string) {\n const item = this._toasts().find((t) => t.id === id);\n if (!item || item.exiting) return;\n\n this.ngZone.runOutsideAngular(() => {\n this._toasts.update((prev) =>\n prev.map((t) => (t.id === id ? { ...t, exiting: true } : t)),\n );\n });\n\n if (this.viewportRef) {\n this.viewportRef.changeDetectorRef.detectChanges();\n }\n\n this.ngZone.runOutsideAngular(() => {\n window.setTimeout(() => {\n this._toasts.update((prev) => prev.filter((t) => t.id !== id));\n this.clearTimers();\n this.scheduleAll();\n if (this.viewportRef) {\n this.viewportRef.changeDetectorRef.detectChanges();\n }\n }, EXIT_DURATION);\n });\n }\n\n clear(position?: DynamicToastPosition) {\n this._toasts.update((prev) =>\n position ? prev.filter((t) => t.position !== position) : [],\n );\n this.clearTimers();\n }\n\n pauseTimers() {\n if (this.paused) return;\n this.paused = true;\n this.clearTimers();\n }\n\n resumeTimers() {\n if (!this.paused) return;\n this.paused = false;\n this.scheduleAll();\n }\n\n private clearTimers() {\n for (const t of this.timers.values()) window.clearTimeout(t);\n this.timers.clear();\n }\n\n private scheduleAll() {\n if (this.paused) return;\n this.ngZone.runOutsideAngular(() => {\n const items = this._toasts();\n for (const item of items) {\n if (item.exiting) continue;\n const key = timeoutKey(item);\n if (this.timers.has(key)) continue;\n const dur = item.duration ?? DEFAULT_TOAST_DURATION;\n if (dur === null || dur <= 0) continue;\n this.timers.set(\n key,\n window.setTimeout(() => {\n this.dismiss(item.id);\n }, dur),\n );\n }\n\n const alive = new Set(items.map(timeoutKey));\n for (const [key, timer] of this.timers) {\n if (!alive.has(key)) {\n window.clearTimeout(timer);\n this.timers.delete(key);\n }\n }\n });\n }\n}\n","import {\n Directive,\n ElementRef,\n inject,\n input,\n OnInit,\n OnDestroy,\n Renderer2,\n ComponentRef,\n ViewContainerRef,\n computed,\n effect,\n signal,\n ChangeDetectorRef,\n NgZone,\n Injector\n} from \"@angular/core\";\nimport { DynamicToastService } from \"./dynamic-toast.service\";\nimport { DynamicToastComponent } from \"./dynamic-toast.component\";\nimport type { DynamicToastItem, DynamicToastTheme, DynamicIslandMode } from \"./types\";\n\n@Directive({\n selector: \"[dtDynamicIsland]\",\n standalone: true,\n})\nexport class DynamicIslandDirective implements OnInit, OnDestroy {\n /** The ID used to match toasts to this island anchor */\n dtIslandId = input.required<string>();\n\n /** Direction the toast expands: 'bottom' (default) or 'top' */\n dtIslandExpand = input<\"top\" | \"bottom\">(\"bottom\");\n\n /** Theme override for this island */\n dtIslandTheme = input<DynamicToastTheme>(\"dark\");\n\n /** The mode of the island: 'island' (border wrap) or 'inline' (element replacement) */\n dtIslandMode = input<DynamicIslandMode>(\"island\");\n\n private readonly el = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly service = inject(DynamicToastService);\n private readonly renderer = inject(Renderer2);\n private readonly vcr = inject(ViewContainerRef);\n private readonly cdr = inject(ChangeDetectorRef);\n private readonly ngZone = inject(NgZone);\n private readonly injector = inject(Injector);\n\n private container: HTMLElement | null = null;\n private toastCompRef: ComponentRef<DynamicToastComponent> | null = null;\n private ro: ResizeObserver | null = null;\n\n /** Current toast bound to this island */\n private currentToast = signal<DynamicToastItem | null>(null);\n\n ngOnInit() {\n // Register this anchor with the service\n this.service.registerAnchor(this.dtIslandId(), this.el);\n\n // Mark the host element\n this.renderer.setAttribute(\n this.el.nativeElement,\n \"data-dt-island\",\n this.dtIslandId(),\n );\n\n // Create the overlay container\n this.container = this.renderer.createElement(\"div\");\n this.renderer.setAttribute(this.container, \"data-dt-island-container\", \"\");\n this.renderer.setAttribute(this.container, \"data-dt-viewport\", \"\");\n this.renderer.setAttribute(\n this.container,\n \"data-expand\",\n this.dtIslandExpand(),\n );\n this.renderer.setAttribute(\n this.container,\n \"data-theme\",\n this.dtIslandTheme() === \"system\" ? \"dark\" : this.dtIslandTheme(),\n );\n\n // Insert container as sibling after the host\n const parent = this.el.nativeElement.parentNode;\n if (parent) {\n // Wrap host in a relative container if not already\n const wrapper = this.renderer.createElement(\"div\");\n this.renderer.setStyle(wrapper, \"position\", \"relative\");\n this.renderer.setStyle(wrapper, \"display\", \"inline-flex\");\n this.renderer.setStyle(wrapper, \"justify-content\", \"center\");\n \n parent.insertBefore(wrapper, this.el.nativeElement);\n \n // Make the host element transition opacity smoothly\n this.renderer.setStyle(this.el.nativeElement, \"position\", \"relative\");\n this.renderer.setStyle(this.el.nativeElement, \"z-index\", \"60\");\n this.renderer.setStyle(\n this.el.nativeElement,\n \"transition\",\n \"opacity 0.25s cubic-bezier(0.4, 0, 0.2, 1), transform 0.25s cubic-bezier(0.4, 0, 0.2, 1)\"\n );\n \n wrapper.appendChild(this.el.nativeElement);\n \n // Put the container behind it initially\n this.renderer.setStyle(this.container, \"z-index\", \"40\");\n wrapper.appendChild(this.container!);\n }\n\n // Watch for toasts targeting this island\n effect(() => {\n const toasts = this.service.toasts();\n const islandId = this.dtIslandId();\n const match = toasts.find(\n (t) => t.anchorId === islandId && !t.exiting,\n );\n const exiting = toasts.find(\n (t) => t.anchorId === islandId && t.exiting,\n );\n\n this.ngZone.runOutsideAngular(() => {\n queueMicrotask(() => {\n if (match) {\n this.showToast(match);\n } else if (exiting) {\n this.updateToast(exiting);\n } else {\n this.hideToast();\n }\n });\n });\n }, { injector: this.injector });\n\n // Observe anchor size changes to update pill width\n this.ro = new ResizeObserver(() => {\n this.updateContainerPosition();\n });\n this.ro.observe(this.el.nativeElement);\n }\n\n private showToast(item: DynamicToastItem) {\n if (!this.container) return;\n\n const mode = this.dtIslandMode();\n\n if (mode === \"inline\") {\n this.renderer.addClass(this.el.nativeElement, \"dt-island-inline-active\");\n this.renderer.setStyle(this.el.nativeElement, \"opacity\", \"0\");\n this.renderer.setStyle(this.el.nativeElement, \"pointer-events\", \"none\");\n this.renderer.setStyle(this.container, \"z-index\", \"60\");\n } else {\n this.renderer.setStyle(this.el.nativeElement, \"opacity\", \"1\");\n this.renderer.setStyle(this.el.nativeElement, \"pointer-events\", \"auto\");\n this.renderer.setStyle(this.container, \"z-index\", \"40\");\n }\n\n if (!this.toastCompRef) {\n this.toastCompRef = this.vcr.createComponent(DynamicToastComponent);\n this.container.appendChild(\n this.toastCompRef.location.nativeElement,\n );\n\n // Subscribe to dismiss\n this.toastCompRef.instance.dismissed.subscribe((id: string) => {\n this.service.dismiss(id);\n });\n }\n\n // Update inputs\n this.toastCompRef.setInput(\"toast\", item);\n this.toastCompRef.setInput(\"theme\", this.dtIslandTheme() === \"system\" ? \"dark\" : this.dtIslandTheme());\n this.toastCompRef.setInput(\"pillAlign\", \"center\");\n this.toastCompRef.setInput(\"expandEdge\", this.dtIslandExpand());\n this.toastCompRef.setInput(\"canExpand\", true);\n\n this.toastCompRef.changeDetectorRef.detectChanges();\n this.updateContainerPosition();\n }\n\n private updateToast(item: DynamicToastItem) {\n if (!this.toastCompRef) return;\n this.toastCompRef.setInput(\"toast\", item);\n this.toastCompRef.changeDetectorRef.detectChanges();\n }\n\n private hideToast() {\n if (this.toastCompRef) {\n this.toastCompRef.destroy();\n this.toastCompRef = null;\n }\n if (this.container) {\n this.renderer.removeClass(this.el.nativeElement, \"dt-island-inline-active\");\n this.renderer.setStyle(this.el.nativeElement, \"opacity\", \"1\");\n this.renderer.setStyle(this.el.nativeElement, \"pointer-events\", \"auto\");\n }\n }\n\n private updateContainerPosition() {\n // Container is already positioned via CSS (absolute, centered)\n const anchorWidth = this.el.nativeElement.offsetWidth;\n const anchorHeight = this.el.nativeElement.offsetHeight;\n \n // We update the component to know about the anchor's dimensions so it can border it perfectly\n if (this.toastCompRef) {\n this.toastCompRef.setInput(\"anchorWidth\", anchorWidth);\n this.toastCompRef.setInput(\"anchorHeight\", anchorHeight);\n }\n }\n\n ngOnDestroy() {\n this.service.unregisterAnchor(this.dtIslandId());\n this.ro?.disconnect();\n this.hideToast();\n }\n}\n","import type {\n DynamicToastOptions,\n DynamicToastPosition,\n DynamicToastPromiseOptions,\n DynamicToastState,\n} from \"./types\";\nimport type { DynamicToastService } from \"./dynamic-toast.service\";\n\nlet instance: DynamicToastService | null = null;\n\nexport function registerDynamicToast(service: DynamicToastService) {\n instance = service;\n}\n\nconst ensure = (): DynamicToastService => {\n if (!instance) {\n throw new Error(\n \"dynamicToast no está inicializado. Agrega provideDynamicToast(...) en app.config.ts\",\n );\n }\n return instance;\n};\n\nexport const dynamicToast = {\n show: (opts: DynamicToastOptions & { state: DynamicToastState }) =>\n ensure().show(opts),\n success: (opts: DynamicToastOptions) => ensure().success(opts),\n error: (opts: DynamicToastOptions) => ensure().error(opts),\n warning: (opts: DynamicToastOptions) => ensure().warning(opts),\n info: (opts: DynamicToastOptions) => ensure().info(opts),\n loading: (opts: DynamicToastOptions) => ensure().loading(opts),\n action: (opts: DynamicToastOptions) => ensure().action(opts),\n promise: <T,>(p: Promise<T> | (() => Promise<T>), opts: DynamicToastPromiseOptions<T>) =>\n ensure().promise(p, opts),\n dismiss: (id: string) => ensure().dismiss(id),\n clear: (pos?: DynamicToastPosition) => ensure().clear(pos),\n};\n\n","import {\n APP_INITIALIZER,\n EnvironmentProviders,\n inject,\n makeEnvironmentProviders,\n} from \"@angular/core\";\nimport type { DynamicToastConfig } from \"./types\";\nimport { DynamicToastService } from \"./dynamic-toast.service\";\nimport { registerDynamicToast } from \"./toast\";\n\nexport function provideDynamicToast(config: DynamicToastConfig = {}): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: APP_INITIALIZER,\n useFactory: () => {\n const service = inject(DynamicToastService);\n return () => {\n service.configure(config);\n registerDynamicToast(service);\n };\n },\n multi: true,\n },\n ]);\n}\n\nexport { DynamicToastService } from \"./dynamic-toast.service\";\nexport { dynamicToast } from \"./toast\";\nexport { DynamicIslandDirective } from \"./dynamic-island.directive\";\nexport * from \"./types\";\n","/*\n * Public API Surface of ngx-dynamic-toast\n */\n\nexport * from \"./lib/dynamic-toast.service\";\nexport * from \"./lib/dynamic-toast.component\";\nexport * from \"./lib/dynamic-toast-viewport.component\";\nexport * from \"./lib/dynamic-island.directive\";\nexport * from \"./lib/types\";\nexport * from \"./lib/constants\";\nexport * from \"./lib/icons\";\nexport * from \"./lib/index\";\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -65,13 +65,13 @@ type PillAlign$1 = "left" | "center" | "right";
|
|
|
65
65
|
type ExpandEdge$1 = "top" | "bottom";
|
|
66
66
|
declare class DynamicToastViewportComponent implements OnInit, OnDestroy {
|
|
67
67
|
position: _angular_core.InputSignal<DynamicToastPosition>;
|
|
68
|
-
offset: _angular_core.InputSignal<string | number | Partial<Record<"top" | "right" | "bottom" | "left", ngx_dynamic_toast.DynamicToastOffsetValue
|
|
68
|
+
offset: _angular_core.InputSignal<string | number | Partial<Record<"top" | "right" | "bottom" | "left", ngx_dynamic_toast.DynamicToastOffsetValue>> | undefined>;
|
|
69
69
|
theme: _angular_core.InputSignal<DynamicToastTheme>;
|
|
70
70
|
readonly service: DynamicToastService;
|
|
71
71
|
private hovering;
|
|
72
72
|
private systemThemeMql;
|
|
73
73
|
private systemThemeListener;
|
|
74
|
-
activeId: _angular_core.WritableSignal<string>;
|
|
74
|
+
activeId: _angular_core.WritableSignal<string | undefined>;
|
|
75
75
|
/** Resolved theme (handles 'system' by listening to prefers-color-scheme) */
|
|
76
76
|
private systemIsDark;
|
|
77
77
|
resolvedTheme: _angular_core.Signal<"light" | "dark">;
|
|
@@ -183,7 +183,7 @@ declare class DynamicToastComponent implements AfterViewInit, OnDestroy {
|
|
|
183
183
|
pillAlign: _angular_core.InputSignal<PillAlign>;
|
|
184
184
|
expandEdge: _angular_core.InputSignal<ExpandEdge>;
|
|
185
185
|
canExpand: _angular_core.InputSignal<boolean>;
|
|
186
|
-
interruptKey: _angular_core.InputSignal<string>;
|
|
186
|
+
interruptKey: _angular_core.InputSignal<string | undefined>;
|
|
187
187
|
dismissed: _angular_core.OutputEmitterRef<string>;
|
|
188
188
|
entered: _angular_core.OutputEmitterRef<string>;
|
|
189
189
|
left: _angular_core.OutputEmitterRef<string>;
|
|
@@ -212,7 +212,7 @@ declare class DynamicToastComponent implements AfterViewInit, OnDestroy {
|
|
|
212
212
|
contentHeight: _angular_core.WritableSignal<number>;
|
|
213
213
|
view: _angular_core.WritableSignal<View>;
|
|
214
214
|
headerLayerCurrent: _angular_core.WritableSignal<HeaderLayer>;
|
|
215
|
-
headerLayerPrev: _angular_core.WritableSignal<HeaderLayer>;
|
|
215
|
+
headerLayerPrev: _angular_core.WritableSignal<HeaderLayer | null>;
|
|
216
216
|
filterId: string;
|
|
217
217
|
hasDesc: _angular_core.Signal<boolean>;
|
|
218
218
|
isLoading: _angular_core.Signal<boolean>;
|