@vielzeug/refine 3.3.0 → 3.3.1
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/dist/alert.cjs +3 -3
- package/dist/alert.cjs.map +1 -1
- package/dist/alert.js +11 -4
- package/dist/alert.js.map +1 -1
- package/dist/core/positioner.cjs +1 -1
- package/dist/core/positioner.cjs.map +1 -1
- package/dist/core/positioner.d.ts +4 -1
- package/dist/core/positioner.d.ts.map +1 -1
- package/dist/core/positioner.js +10 -5
- package/dist/core/positioner.js.map +1 -1
- package/dist/custom-elements.json +4110 -4055
- package/dist/feedback/alert/alert.d.ts +8 -1
- package/dist/feedback/alert/alert.d.ts.map +1 -1
- package/dist/feedback/toast/toast.css.cjs +1 -1
- package/dist/feedback/toast/toast.css.cjs.map +1 -1
- package/dist/feedback/toast/toast.css.js +1 -1
- package/dist/feedback/toast/toast.css.js.map +1 -1
- package/dist/feedback/toast/toast.d.ts.map +1 -1
- package/dist/inputs/combobox/combobox.css.cjs +1 -1
- package/dist/inputs/combobox/combobox.css.cjs.map +1 -1
- package/dist/inputs/combobox/combobox.css.js +1 -1
- package/dist/inputs/combobox/combobox.css.js.map +1 -1
- package/dist/inputs/date-picker/date-picker.css.cjs +1 -1
- package/dist/inputs/date-picker/date-picker.css.cjs.map +1 -1
- package/dist/inputs/date-picker/date-picker.css.js +1 -1
- package/dist/inputs/date-picker/date-picker.css.js.map +1 -1
- package/dist/inputs/input/input.css.cjs +1 -1
- package/dist/inputs/input/input.css.cjs.map +1 -1
- package/dist/inputs/input/input.css.js +1 -1
- package/dist/inputs/input/input.css.js.map +1 -1
- package/dist/inputs/number-input/number-input.css.cjs +1 -1
- package/dist/inputs/number-input/number-input.css.cjs.map +1 -1
- package/dist/inputs/number-input/number-input.css.js +1 -1
- package/dist/inputs/number-input/number-input.css.js.map +1 -1
- package/dist/inputs/select/select.css.cjs +1 -1
- package/dist/inputs/select/select.css.cjs.map +1 -1
- package/dist/inputs/select/select.css.js +1 -1
- package/dist/inputs/select/select.css.js.map +1 -1
- package/dist/inputs/slider/slider.css.cjs +1 -1
- package/dist/inputs/slider/slider.css.cjs.map +1 -1
- package/dist/inputs/slider/slider.css.js +1 -1
- package/dist/inputs/slider/slider.css.js.map +1 -1
- package/dist/refine.cjs +103 -98
- package/dist/refine.cjs.map +1 -1
- package/dist/refine.iife.js +103 -98
- package/dist/refine.iife.js.map +1 -1
- package/dist/refine.js +610 -605
- package/dist/refine.js.map +1 -1
- package/dist/toast.cjs +44 -39
- package/dist/toast.cjs.map +1 -1
- package/dist/toast.js +132 -117
- package/dist/toast.js.map +1 -1
- package/package.json +2 -2
package/dist/toast.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { reducedMotionMixin as e } from "./styles/mixins/accessibility.css.js";
|
|
2
2
|
import "./_dev.js";
|
|
3
3
|
import t from "./feedback/toast/toast.css.js";
|
|
4
|
-
import { define as n,
|
|
5
|
-
import { computed as
|
|
6
|
-
import { createPanGesture as
|
|
4
|
+
import { define as n, each as r, getHost as i, html as a, onCleanup as o, onMounted as s, prop as c, ref as l, useEmit as u } from "@vielzeug/ore";
|
|
5
|
+
import { computed as d, signal as f, watch as p } from "@vielzeug/ripple";
|
|
6
|
+
import { createPanGesture as m } from "@vielzeug/gesture";
|
|
7
7
|
//#region src/feedback/toast/toast.ts
|
|
8
|
-
var
|
|
9
|
-
#e =
|
|
8
|
+
var h = 200, g = class {
|
|
9
|
+
#e = f([]);
|
|
10
10
|
#t = /* @__PURE__ */ new Set();
|
|
11
11
|
#n = /* @__PURE__ */ new Set();
|
|
12
12
|
#r = !1;
|
|
@@ -28,7 +28,9 @@ var m = 300, h = class {
|
|
|
28
28
|
id: t,
|
|
29
29
|
type: "add"
|
|
30
30
|
}), requestAnimationFrame(() => {
|
|
31
|
-
|
|
31
|
+
requestAnimationFrame(() => {
|
|
32
|
+
this.#s(t)?.phase === "entering" && this.#u(t, { phase: "active" });
|
|
33
|
+
});
|
|
32
34
|
}), i.duration > 0 && this.#c(t, i.duration), t;
|
|
33
35
|
}
|
|
34
36
|
clear() {
|
|
@@ -46,7 +48,7 @@ var m = 300, h = class {
|
|
|
46
48
|
!t || t.phase === "exiting" || this.#r || (this.#u(e, {
|
|
47
49
|
...this.#a(t),
|
|
48
50
|
phase: "exiting"
|
|
49
|
-
}), this.scheduleFinalization(e,
|
|
51
|
+
}), this.scheduleFinalization(e, 250));
|
|
50
52
|
}
|
|
51
53
|
finalize(e) {
|
|
52
54
|
let t = this.#s(e);
|
|
@@ -124,31 +126,34 @@ var m = 300, h = class {
|
|
|
124
126
|
...t
|
|
125
127
|
} : n));
|
|
126
128
|
}
|
|
127
|
-
},
|
|
128
|
-
|
|
129
|
-
};
|
|
130
|
-
function
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
129
|
+
}, _ = /* @__PURE__ */ new WeakMap(), v = /* @__PURE__ */ new WeakMap(), y = (e, t) => {
|
|
130
|
+
v.set(e, t), _.get(e)?.bind(t);
|
|
131
|
+
}, b = [], x = (e) => e.urgency ?? (e.color === "error" ? "assertive" : "polite");
|
|
132
|
+
function S(e, t) {
|
|
133
|
+
let n = d(() => e.value.actions ?? b);
|
|
134
|
+
return a`
|
|
135
|
+
${() => n.value.length ? a`
|
|
136
|
+
<div slot="actions" class="toast-actions">
|
|
137
|
+
${r(() => n.value, (e, t) => `${t}:${e.label}`, (n) => a`
|
|
138
|
+
<ore-button
|
|
139
|
+
size="sm"
|
|
140
|
+
color=${() => n.value.color || e.value.color || "primary"}
|
|
141
|
+
variant=${() => n.value.variant || "flat"}
|
|
142
|
+
@click=${() => {
|
|
143
|
+
n.value.onClick?.(), t();
|
|
140
144
|
}}>
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
145
|
+
${() => n.value.label}
|
|
146
|
+
</ore-button>
|
|
147
|
+
`)}
|
|
148
|
+
</div>
|
|
149
|
+
` : ""}
|
|
150
|
+
`;
|
|
146
151
|
}
|
|
147
|
-
var
|
|
148
|
-
n(
|
|
152
|
+
var C = "ore-toast";
|
|
153
|
+
n(C, {
|
|
149
154
|
props: {
|
|
150
|
-
max:
|
|
151
|
-
position:
|
|
155
|
+
max: c.number(5),
|
|
156
|
+
position: c.oneOf([
|
|
152
157
|
"top-left",
|
|
153
158
|
"top-center",
|
|
154
159
|
"top-right",
|
|
@@ -158,16 +163,16 @@ n(b, {
|
|
|
158
163
|
], "bottom-right")
|
|
159
164
|
},
|
|
160
165
|
setup() {
|
|
161
|
-
let e =
|
|
162
|
-
|
|
163
|
-
},
|
|
164
|
-
|
|
165
|
-
},
|
|
166
|
-
let n = () =>
|
|
167
|
-
let e =
|
|
166
|
+
let e = i(), t = u(), n = l(), c = f([]), g = f(!1), y = f(!1), b = d(() => g.value || y.value), C = /* @__PURE__ */ new Map(), w = /* @__PURE__ */ new Map(), T = /* @__PURE__ */ new Set(), E, D = null, O = () => {}, k = () => {}, A = (e) => e.querySelector(".toast-inner"), j = (e) => {
|
|
167
|
+
w.get(e)?.(), w.delete(e);
|
|
168
|
+
}, M = (e) => {
|
|
169
|
+
T.delete(e), D?.finalize(e);
|
|
170
|
+
}, N = (e, t) => {
|
|
171
|
+
let n = () => c.value.find((t) => t.id === e)?.dismissible ?? !0, r = () => {
|
|
172
|
+
let e = A(t);
|
|
168
173
|
e && (e.style.transition = "", e.style.transform = "", e.style.opacity = "");
|
|
169
174
|
};
|
|
170
|
-
return
|
|
175
|
+
return m(t, {
|
|
171
176
|
axis: "x",
|
|
172
177
|
disabled: () => !n(),
|
|
173
178
|
onEnd: ({ distance: n, reason: i }) => {
|
|
@@ -175,10 +180,10 @@ n(b, {
|
|
|
175
180
|
r();
|
|
176
181
|
return;
|
|
177
182
|
}
|
|
178
|
-
let a =
|
|
179
|
-
if (!a || !
|
|
180
|
-
|
|
181
|
-
let o = () =>
|
|
183
|
+
let a = A(t);
|
|
184
|
+
if (!a || !D) return;
|
|
185
|
+
T.add(e), D.dismiss(e);
|
|
186
|
+
let o = () => M(e);
|
|
182
187
|
if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
|
|
183
188
|
a.style.opacity = "0", o();
|
|
184
189
|
return;
|
|
@@ -188,109 +193,119 @@ n(b, {
|
|
|
188
193
|
let c = (e) => {
|
|
189
194
|
e.target === a && e.propertyName === "transform" && (a.removeEventListener("transitionend", c), o());
|
|
190
195
|
};
|
|
191
|
-
a.addEventListener("transitionend", c),
|
|
196
|
+
a.addEventListener("transitionend", c), D.scheduleFinalization(e, 300);
|
|
192
197
|
},
|
|
193
198
|
onMove: ({ distance: e }) => {
|
|
194
|
-
let n =
|
|
199
|
+
let n = A(t);
|
|
195
200
|
n && (n.style.transition = "none", n.style.transform = `translateX(${e}px)`, n.style.opacity = String(Math.max(0, 1 - Math.abs(e) / 200)));
|
|
196
201
|
},
|
|
197
202
|
pointerCapture: !1,
|
|
198
203
|
shouldStart: (e) => !e.composedPath().some((e) => e instanceof Element && e.matches("button, a, input, select, textarea, ore-button"))
|
|
199
204
|
});
|
|
200
|
-
},
|
|
201
|
-
!
|
|
202
|
-
if (!
|
|
205
|
+
}, P = (e) => {
|
|
206
|
+
!D || w.has(e) || T.has(e) || requestAnimationFrame(() => {
|
|
207
|
+
if (!D || w.has(e) || T.has(e)) return;
|
|
203
208
|
let t = n.value?.querySelector(`[data-toast-id="${e}"] .toast-inner`);
|
|
204
209
|
if (!t) {
|
|
205
|
-
|
|
210
|
+
D.scheduleFinalization(e, h);
|
|
206
211
|
return;
|
|
207
212
|
}
|
|
208
213
|
t.offsetHeight;
|
|
209
|
-
let r = parseFloat(getComputedStyle(t).transitionDuration) * 1e3, i = Number.isFinite(r) && r > 0 ? r :
|
|
210
|
-
t.target?.closest?.(`[data-toast-id="${e}"]`) && (
|
|
214
|
+
let r = parseFloat(getComputedStyle(t).transitionDuration) * 1e3, i = Number.isFinite(r) && r > 0 ? r : h, a = (t) => {
|
|
215
|
+
t.target?.closest?.(`[data-toast-id="${e}"]`) && (j(e), D?.finalize(e));
|
|
211
216
|
};
|
|
212
|
-
|
|
217
|
+
w.set(e, () => n.value?.removeEventListener("transitionend", a)), n.value?.addEventListener("transitionend", a), D.scheduleFinalization(e, i + 50);
|
|
213
218
|
});
|
|
214
|
-
},
|
|
215
|
-
let e = new Set(
|
|
216
|
-
for (let [t, n] of
|
|
217
|
-
for (let e of
|
|
218
|
-
let t = n.value?.querySelector(`[data-toast-id="${e.id}"]`), r =
|
|
219
|
-
t && r?.element !== t && (r?.gesture.dispose(),
|
|
219
|
+
}, F = () => {
|
|
220
|
+
let e = new Set(c.value.map((e) => e.id));
|
|
221
|
+
for (let [t, n] of C) e.has(t) || (n.gesture.dispose(), C.delete(t), j(t), T.delete(t));
|
|
222
|
+
for (let e of c.value) {
|
|
223
|
+
let t = n.value?.querySelector(`[data-toast-id="${e.id}"]`), r = C.get(e.id);
|
|
224
|
+
t && r?.element !== t && (r?.gesture.dispose(), C.set(e.id, {
|
|
220
225
|
element: t,
|
|
221
|
-
gesture:
|
|
222
|
-
})), e.phase === "exiting" &&
|
|
226
|
+
gesture: N(e.id, t)
|
|
227
|
+
})), e.phase === "exiting" && P(e.id);
|
|
223
228
|
}
|
|
224
229
|
};
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
230
|
+
p(c, () => {
|
|
231
|
+
F(), E !== void 0 && cancelAnimationFrame(E), E = requestAnimationFrame(() => {
|
|
232
|
+
E = void 0, F();
|
|
228
233
|
});
|
|
229
|
-
}),
|
|
230
|
-
e ?
|
|
234
|
+
}), p(b, (e) => {
|
|
235
|
+
e ? D?.pauseTimers() : D?.resumeTimers();
|
|
231
236
|
});
|
|
232
|
-
let
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
}),
|
|
236
|
-
},
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
237
|
+
let I = (e) => {
|
|
238
|
+
D !== e && (O(), k(), D = e, O = D.subscribe((e) => {
|
|
239
|
+
c.value = e;
|
|
240
|
+
}), k = D.subscribeEvents((e) => t(e.type, { id: e.id })), b.value && D.pauseTimers());
|
|
241
|
+
}, L = (e) => {
|
|
242
|
+
if (e.key !== "Escape") return;
|
|
243
|
+
let t = e.composedPath().find((e) => e instanceof HTMLElement && e.classList.contains("toast-wrapper"))?.dataset.toastId, n = t ? c.value.find((e) => e.id === t) : void 0;
|
|
244
|
+
n?.dismissible && (e.preventDefault(), e.stopPropagation(), D?.dismiss(n.id));
|
|
245
|
+
}, R = (e) => {
|
|
246
|
+
let t = e.value.id, n = () => D?.dismiss(t), r = d(() => e.value.meta ?? ""), i = d(() => `toast-inner${e.value.phase === "active" ? "" : ` ${e.value.phase}`}`), o = d(() => `--_toast-accent: var(--color-${e.value.color || "primary"}); --_toast-radius: var(--rounded-${e.value.rounded || "md"})`), s = d(() => {
|
|
247
|
+
let { duration: t, timer: n } = e.value;
|
|
248
|
+
return !n || t <= 0 ? "" : `--_toast-duration: ${t}ms; --_toast-elapsed: -${Math.max(0, t - n.remaining)}ms`;
|
|
249
|
+
});
|
|
250
|
+
return a`
|
|
251
|
+
<div class="toast-wrapper" data-toast-id=${t} part="toast-wrapper">
|
|
252
|
+
<div class=${() => i.value} style=${() => o.value} part="toast-inner">
|
|
244
253
|
<ore-alert
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
${e.message} ${y(e, t)}
|
|
254
|
+
embedded
|
|
255
|
+
color=${() => e.value.color || (x(e.value) === "assertive" ? "error" : "primary")}
|
|
256
|
+
variant=${() => e.value.variant || "solid"}
|
|
257
|
+
size=${() => e.value.size || "md"}
|
|
258
|
+
rounded=${() => e.value.rounded || "md"}
|
|
259
|
+
?horizontal=${() => !!e.value.horizontal}
|
|
260
|
+
heading=${() => e.value.heading || null}
|
|
261
|
+
?dismissible=${() => e.value.dismissible}
|
|
262
|
+
@dismiss=${n}>
|
|
263
|
+
<span slot="meta" ?hidden=${() => !r.value}>${() => r.value}</span>
|
|
264
|
+
${() => e.value.message} ${S(e, n)}
|
|
257
265
|
</ore-alert>
|
|
266
|
+
<div
|
|
267
|
+
class="toast-progress"
|
|
268
|
+
part="progress"
|
|
269
|
+
style=${() => s.value}
|
|
270
|
+
?hidden=${() => !s.value}
|
|
271
|
+
aria-hidden="true"></div>
|
|
258
272
|
</div>
|
|
259
273
|
</div>
|
|
260
274
|
`;
|
|
261
275
|
};
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
bind:
|
|
276
|
+
s(() => {
|
|
277
|
+
_.set(e, {
|
|
278
|
+
bind: I,
|
|
265
279
|
unbind() {
|
|
266
|
-
|
|
280
|
+
O(), k(), D = null, c.value = [];
|
|
267
281
|
}
|
|
268
282
|
});
|
|
269
|
-
let t =
|
|
270
|
-
t &&
|
|
271
|
-
}),
|
|
272
|
-
|
|
273
|
-
for (let e of
|
|
274
|
-
|
|
275
|
-
for (let e of
|
|
283
|
+
let t = v.get(e);
|
|
284
|
+
t && I(t);
|
|
285
|
+
}), o(() => {
|
|
286
|
+
_.get(e)?.unbind(), _.delete(e), E !== void 0 && cancelAnimationFrame(E);
|
|
287
|
+
for (let e of C.values()) e.gesture.dispose();
|
|
288
|
+
C.clear();
|
|
289
|
+
for (let e of w.keys()) j(e);
|
|
276
290
|
});
|
|
277
|
-
let
|
|
278
|
-
return
|
|
291
|
+
let z = d(() => c.value.filter((e) => x(e) === "polite")), B = d(() => c.value.filter((e) => x(e) === "assertive")), V = (e) => e.id;
|
|
292
|
+
return a`
|
|
279
293
|
<div
|
|
280
|
-
class
|
|
294
|
+
class=${() => `toast-container${b.value ? " paused" : ""}`}
|
|
281
295
|
ref=${n}
|
|
282
296
|
@pointerenter=${() => {
|
|
283
|
-
|
|
297
|
+
g.value = !0;
|
|
284
298
|
}}
|
|
285
299
|
@pointerleave=${() => {
|
|
286
|
-
|
|
300
|
+
g.value = !1;
|
|
287
301
|
}}
|
|
288
302
|
@focusin=${() => {
|
|
289
|
-
|
|
303
|
+
y.value = !0;
|
|
290
304
|
}}
|
|
291
305
|
@focusout=${() => {
|
|
292
|
-
|
|
306
|
+
y.value = !1;
|
|
293
307
|
}}
|
|
308
|
+
@keydown=${L}
|
|
294
309
|
part="container">
|
|
295
310
|
<div
|
|
296
311
|
role="region"
|
|
@@ -299,7 +314,7 @@ n(b, {
|
|
|
299
314
|
aria-atomic="false"
|
|
300
315
|
aria-label="Notifications"
|
|
301
316
|
class="toast-live-region">
|
|
302
|
-
${(
|
|
317
|
+
${r(z, V, R)}
|
|
303
318
|
</div>
|
|
304
319
|
<div
|
|
305
320
|
role="region"
|
|
@@ -308,7 +323,7 @@ n(b, {
|
|
|
308
323
|
aria-atomic="false"
|
|
309
324
|
aria-label="Critical notifications"
|
|
310
325
|
class="toast-live-region">
|
|
311
|
-
${(
|
|
326
|
+
${r(B, V, R)}
|
|
312
327
|
</div>
|
|
313
328
|
<slot></slot>
|
|
314
329
|
</div>
|
|
@@ -316,19 +331,19 @@ n(b, {
|
|
|
316
331
|
},
|
|
317
332
|
styles: [e, t]
|
|
318
333
|
});
|
|
319
|
-
var
|
|
320
|
-
function
|
|
321
|
-
let t =
|
|
334
|
+
var w = /* @__PURE__ */ new WeakMap();
|
|
335
|
+
function T(e = document.body) {
|
|
336
|
+
let t = w.get(e);
|
|
322
337
|
if (t) return t;
|
|
323
|
-
let n = new
|
|
338
|
+
let n = new g(), r = new AbortController(), i = !1, a = !1, o = null, s = null, c = () => !i, l = e, u = () => {
|
|
324
339
|
if (!c()) return null;
|
|
325
340
|
if (s?.isConnected) return s;
|
|
326
|
-
if (s = l.querySelector(
|
|
341
|
+
if (s = l.querySelector(C), s || (s = document.createElement(C), o?.position && s.setAttribute("position", o.position), o?.max != null && s.setAttribute("max", String(o.max)), l.appendChild(s)), o?.max != null) n.setMax(o.max);
|
|
327
342
|
else {
|
|
328
343
|
let e = Number(s.getAttribute("max"));
|
|
329
344
|
Number.isFinite(e) && e > 0 && n.setMax(e);
|
|
330
345
|
}
|
|
331
|
-
return o = null, a = !0,
|
|
346
|
+
return o = null, a = !0, y(s, n), s;
|
|
332
347
|
}, d = () => !!u(), f = {
|
|
333
348
|
add(e) {
|
|
334
349
|
return d() ? n.add(e) : e.id ?? crypto.randomUUID();
|
|
@@ -349,7 +364,7 @@ function S(e = document.body) {
|
|
|
349
364
|
return r.signal;
|
|
350
365
|
},
|
|
351
366
|
dispose() {
|
|
352
|
-
i || (i = !0, r.abort(), n.dispose(),
|
|
367
|
+
i || (i = !0, r.abort(), n.dispose(), w.get(e) === f && w.delete(e));
|
|
353
368
|
},
|
|
354
369
|
get disposed() {
|
|
355
370
|
return i;
|
|
@@ -413,10 +428,10 @@ function S(e = document.body) {
|
|
|
413
428
|
});
|
|
414
429
|
}
|
|
415
430
|
};
|
|
416
|
-
return
|
|
431
|
+
return w.set(e, f), f;
|
|
417
432
|
}
|
|
418
|
-
var
|
|
433
|
+
var E = T();
|
|
419
434
|
//#endregion
|
|
420
|
-
export {
|
|
435
|
+
export { C as TOAST_TAG, T as createToastService, E as toast };
|
|
421
436
|
|
|
422
437
|
//# sourceMappingURL=toast.js.map
|
package/dist/toast.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toast.js","names":[],"sources":["../src/feedback/toast/toast.ts"],"sourcesContent":["import '../alert/alert';\nimport { createPanGesture, type PanGesture } from '@vielzeug/gesture';\nimport { define, getHost, html, onCleanup, onMounted, prop, ref, useEmit } from '@vielzeug/ore';\nimport { computed, signal, watch } from '@vielzeug/ripple';\nimport { warn } from '../../_dev';\nimport { reducedMotionMixin } from '../../styles';\nimport type { ComponentSize, RoundedSize, ThemeColor } from '../../types';\nimport componentStyles from './toast.css?inline';\n\n/** Must match toast.css's default opacity transition duration. */\nconst TOAST_EXIT_MS = 300;\n\nexport type OreToastEvents = {\n add: { id: string };\n dismiss: { id: string };\n};\n\nexport type OreToastProps = {\n max?: number;\n position?: 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';\n};\n\n/** Individual toast notification. */\nexport type ToastItem = {\n actions?: Array<{\n color?: ThemeColor;\n label: string;\n onClick?: () => void;\n variant?: 'solid' | 'flat' | 'bordered';\n }>;\n color?: ThemeColor;\n dismissible?: boolean;\n /** Auto-dismiss delay in ms. Set to 0 for persistent toasts (default: 5000). */\n duration?: number;\n heading?: string;\n /** Show message and actions side-by-side (horizontal layout). */\n horizontal?: boolean;\n /** Auto-generated when omitted. */\n id?: string;\n message: string;\n /** Metadata text (for example, a timestamp) shown in the alert meta slot. */\n meta?: string;\n /** Called after the toast is fully dismissed and removed. */\n onDismiss?: () => void;\n rounded?: RoundedSize | '';\n size?: ComponentSize;\n /**\n * Screen-reader announcement urgency. Error-coloured toasts are assertive by\n * default; all other toasts are polite.\n */\n urgency?: 'polite' | 'assertive';\n variant?: 'solid' | 'flat' | 'bordered';\n};\n\ntype ToastPhase = 'entering' | 'active' | 'exiting';\n\ntype ToastTimer = {\n remaining: number;\n startedAt: number;\n timeoutId: ReturnType<typeof setTimeout>;\n};\n\ntype ToastEntry = Required<Pick<ToastItem, 'dismissible' | 'duration' | 'id'>> &\n Omit<ToastItem, 'dismissible' | 'duration' | 'id'> & {\n exitTimeoutId: ReturnType<typeof setTimeout> | null;\n id: string;\n phase: ToastPhase;\n timer: ToastTimer | null;\n };\n\ntype ToastStoreEvent = {\n id: string;\n type: 'add' | 'dismiss';\n};\n\n/**\n * Owns notification data and every timer. Renderers only subscribe to this\n * store; they never expose imperative mutation methods themselves.\n */\nclass ToastStore {\n readonly #entries = signal<ToastEntry[]>([]);\n readonly #listeners = new Set<(entries: ToastEntry[]) => void>();\n readonly #eventListeners = new Set<(event: ToastStoreEvent) => void>();\n #disposed = false;\n #max = 5;\n\n add(item: ToastItem): string {\n if (this.#disposed) return item.id ?? crypto.randomUUID();\n\n const id = item.id ?? crypto.randomUUID();\n const active = this.#entries.value.filter((entry) => entry.phase !== 'exiting');\n const overflow = active.length - (this.#max - 1);\n\n if (overflow > 0) {\n for (const entry of active.slice(0, overflow)) this.dismiss(entry.id);\n }\n\n const entry: ToastEntry = {\n dismissible: true,\n duration: 5000,\n ...item,\n exitTimeoutId: null,\n id,\n phase: 'entering',\n timer: null,\n };\n\n this.#setEntries([...this.#entries.value, entry]);\n this.#emit({ id, type: 'add' });\n\n requestAnimationFrame(() => {\n if (this.#entry(id)?.phase === 'entering') this.#update(id, { phase: 'active' });\n });\n\n if (entry.duration > 0) this.#scheduleTimer(id, entry.duration);\n\n return id;\n }\n\n clear(): void {\n for (const entry of this.#entries.value) {\n if (entry.phase !== 'exiting') this.dismiss(entry.id);\n }\n }\n\n dispose(): void {\n if (this.#disposed) return;\n\n this.#disposed = true;\n\n for (const entry of this.#entries.value) {\n if (entry.timer) clearTimeout(entry.timer.timeoutId);\n\n if (entry.exitTimeoutId) clearTimeout(entry.exitTimeoutId);\n }\n\n this.#setEntries([]);\n this.#listeners.clear();\n this.#eventListeners.clear();\n }\n\n dismiss(id: string): void {\n const entry = this.#entry(id);\n\n if (!entry || entry.phase === 'exiting' || this.#disposed) return;\n\n this.#update(id, { ...this.#clearTimer(entry), phase: 'exiting' });\n this.scheduleFinalization(id, TOAST_EXIT_MS + 50);\n }\n\n finalize(id: string): void {\n const entry = this.#entry(id);\n\n if (!entry || this.#disposed) return;\n\n if (entry.timer) clearTimeout(entry.timer.timeoutId);\n\n if (entry.exitTimeoutId) clearTimeout(entry.exitTimeoutId);\n\n this.#setEntries(this.#entries.value.filter((candidate) => candidate.id !== id));\n entry.onDismiss?.();\n this.#emit({ id, type: 'dismiss' });\n }\n\n pauseTimers(): void {\n if (this.#disposed) return;\n\n this.#setEntries(\n this.#entries.value.map((entry) => {\n if (!entry.timer) return entry;\n\n clearTimeout(entry.timer.timeoutId);\n\n return {\n ...entry,\n timer: {\n ...entry.timer,\n remaining: Math.max(0, entry.timer.remaining - (Date.now() - entry.timer.startedAt)),\n },\n };\n }),\n );\n }\n\n resumeTimers(): void {\n if (this.#disposed) return;\n\n for (const entry of this.#entries.value) {\n if (entry.phase === 'active' && entry.timer && entry.timer.remaining > 0) {\n this.#scheduleTimer(entry.id, entry.timer.remaining);\n }\n }\n }\n\n scheduleFinalization(id: string, delay: number): void {\n const entry = this.#entry(id);\n\n if (entry?.phase !== 'exiting' || this.#disposed) return;\n\n if (entry.exitTimeoutId) clearTimeout(entry.exitTimeoutId);\n\n const exitTimeoutId = setTimeout(() => this.finalize(id), delay);\n\n this.#update(id, { exitTimeoutId });\n }\n\n setMax(max: number | undefined): void {\n if (max != null) this.#max = Math.max(1, max);\n }\n\n subscribe(listener: (entries: ToastEntry[]) => void): () => void {\n listener(this.#entries.value);\n this.#listeners.add(listener);\n\n return () => this.#listeners.delete(listener);\n }\n\n subscribeEvents(listener: (event: ToastStoreEvent) => void): () => void {\n this.#eventListeners.add(listener);\n\n return () => this.#eventListeners.delete(listener);\n }\n\n update(id: string, updates: Partial<ToastItem>): void {\n const entry = this.#entry(id);\n\n if (!entry || this.#disposed) return;\n\n const cleared = updates.duration !== undefined ? this.#clearTimer(entry) : entry;\n\n this.#update(id, { ...cleared, ...updates, id });\n\n if (updates.duration !== undefined && updates.duration > 0) this.#scheduleTimer(id, updates.duration);\n }\n\n #clearTimer(entry: ToastEntry): ToastEntry {\n if (entry.timer) clearTimeout(entry.timer.timeoutId);\n\n return { ...entry, timer: null };\n }\n\n #emit(event: ToastStoreEvent): void {\n for (const listener of this.#eventListeners) listener(event);\n }\n\n #entry(id: string): ToastEntry | undefined {\n return this.#entries.value.find((entry) => entry.id === id);\n }\n\n #scheduleTimer(id: string, remaining: number): void {\n if (remaining <= 0 || this.#disposed) return;\n\n const timeoutId = setTimeout(() => this.dismiss(id), remaining);\n\n this.#update(id, { timer: { remaining, startedAt: Date.now(), timeoutId } });\n }\n\n #setEntries(entries: ToastEntry[]): void {\n this.#entries.value = entries;\n for (const listener of this.#listeners) listener(entries);\n }\n\n #update(id: string, patch: Partial<ToastEntry>): void {\n this.#setEntries(this.#entries.value.map((entry) => (entry.id === id ? { ...entry, ...patch } : entry)));\n }\n}\n\ntype ToastHostBinding = {\n bind: (store: ToastStore) => void;\n unbind: () => void;\n};\n\nconst hostBindings = new WeakMap<HTMLElement, ToastHostBinding>();\nconst hostStores = new WeakMap<HTMLElement, ToastStore>();\n\nconst bindToastHost = (host: HTMLElement, store: ToastStore): void => {\n hostStores.set(host, store);\n hostBindings.get(host)?.bind(store);\n};\n\n/** Renders the action buttons for a toast entry. */\nfunction renderToastActions(entry: ToastEntry, dismiss: () => void) {\n if (!entry.actions?.length) return '';\n\n return html`\n <div slot=\"actions\" class=\"toast-actions\">\n ${entry.actions.map(\n (action) => html`\n <ore-button\n size=\"sm\"\n color=${action.color || entry.color || 'primary'}\n variant=${action.variant || 'solid'}\n @click=${() => {\n action.onClick?.();\n dismiss();\n }}>\n ${action.label}\n </ore-button>\n `,\n )}\n </div>\n `;\n}\n\nexport const TOAST_TAG = 'ore-toast' as const;\n\n/**\n * Declarative toast host. It subscribes to the service for its scope and\n * renders notifications, but has no imperative mutation API of its own.\n *\n * @element ore-toast\n *\n * @attr {string} position - Stack placement.\n * @attr {number} max - Maximum live notifications for the scoped service.\n */\ndefine<OreToastProps>(TOAST_TAG, {\n props: {\n max: prop.number(5),\n position: prop.oneOf(\n ['top-left', 'top-center', 'top-right', 'bottom-left', 'bottom-center', 'bottom-right'] as const,\n 'bottom-right',\n ),\n },\n setup() {\n const el = getHost() as HTMLElement;\n const emit = useEmit<OreToastEvents>();\n const containerRef = ref<HTMLDivElement>();\n const entries = signal<ToastEntry[]>([]);\n const hoverPaused = signal(false);\n const focusPaused = signal(false);\n const paused = computed(() => hoverPaused.value || focusPaused.value);\n const swipeControls = new Map<string, { element: HTMLElement; gesture: PanGesture }>();\n const exiting = new Map<string, () => void>();\n const swiping = new Set<string>();\n let pendingSyncFrame: number | undefined;\n let store: ToastStore | null = null;\n let unsubscribeEntries = () => {};\n let unsubscribeEvents = () => {};\n\n const getInner = (wrapper: HTMLElement): HTMLElement | null => {\n return wrapper.querySelector<HTMLElement>('.toast-inner');\n };\n\n const clearExitListener = (id: string): void => {\n exiting.get(id)?.();\n exiting.delete(id);\n };\n\n const finalizeSwipe = (id: string): void => {\n swiping.delete(id);\n store?.finalize(id);\n };\n\n const createToastSwipe = (id: string, wrapper: HTMLElement): PanGesture => {\n const isDismissible = (): boolean => entries.value.find((entry) => entry.id === id)?.dismissible ?? true;\n const reset = (): void => {\n const inner = getInner(wrapper);\n\n if (!inner) return;\n\n inner.style.transition = '';\n inner.style.transform = '';\n inner.style.opacity = '';\n };\n\n return createPanGesture(wrapper, {\n axis: 'x',\n disabled: () => !isDismissible(),\n onEnd: ({ distance, reason }) => {\n if (reason !== 'release' || Math.abs(distance) < 48) {\n reset();\n\n return;\n }\n\n const inner = getInner(wrapper);\n\n if (!inner || !store) return;\n\n swiping.add(id);\n\n store.dismiss(id);\n\n const finish = () => finalizeSwipe(id);\n\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n inner.style.opacity = '0';\n finish();\n\n return;\n }\n\n const direction = distance >= 0 ? 1 : -1;\n\n inner.style.transition = 'transform 0.22s ease-out, opacity 0.22s ease-out';\n void inner.offsetWidth;\n inner.style.transform = `translateX(${direction * 120}%)`;\n inner.style.opacity = '0';\n\n const onTransitionEnd = (transition: TransitionEvent) => {\n if (transition.target !== inner || transition.propertyName !== 'transform') return;\n\n inner.removeEventListener('transitionend', onTransitionEnd);\n finish();\n };\n\n inner.addEventListener('transitionend', onTransitionEnd);\n store.scheduleFinalization(id, 300);\n },\n onMove: ({ distance }) => {\n const inner = getInner(wrapper);\n\n if (!inner) return;\n\n inner.style.transition = 'none';\n inner.style.transform = `translateX(${distance}px)`;\n inner.style.opacity = String(Math.max(0, 1 - Math.abs(distance) / 200));\n },\n pointerCapture: false,\n shouldStart: (event) =>\n !event\n .composedPath()\n .some((node) => node instanceof Element && node.matches('button, a, input, select, textarea, ore-button')),\n });\n };\n\n const beginExit = (id: string): void => {\n if (!store || exiting.has(id) || swiping.has(id)) return;\n\n requestAnimationFrame(() => {\n if (!store || exiting.has(id) || swiping.has(id)) return;\n\n const inner = containerRef.value?.querySelector<HTMLElement>(`[data-toast-id=\"${id}\"] .toast-inner`);\n\n if (!inner) {\n store.scheduleFinalization(id, TOAST_EXIT_MS);\n\n return;\n }\n\n void inner.offsetHeight;\n\n const duration = parseFloat(getComputedStyle(inner).transitionDuration) * 1000;\n const exitMs = Number.isFinite(duration) && duration > 0 ? duration : TOAST_EXIT_MS;\n const onTransitionEnd = (event: TransitionEvent) => {\n const wrapper = (event.target as HTMLElement | null)?.closest?.(`[data-toast-id=\"${id}\"]`);\n\n if (!wrapper) return;\n\n clearExitListener(id);\n store?.finalize(id);\n };\n const remove = () => containerRef.value?.removeEventListener('transitionend', onTransitionEnd);\n\n exiting.set(id, remove);\n containerRef.value?.addEventListener('transitionend', onTransitionEnd);\n store.scheduleFinalization(id, exitMs + 50);\n });\n };\n\n const syncControls = (): void => {\n const currentIds = new Set(entries.value.map((entry) => entry.id));\n\n for (const [id, control] of swipeControls) {\n if (!currentIds.has(id)) {\n control.gesture.dispose();\n\n swipeControls.delete(id);\n clearExitListener(id);\n swiping.delete(id);\n }\n }\n\n for (const entry of entries.value) {\n const wrapper = containerRef.value?.querySelector<HTMLElement>(`[data-toast-id=\"${entry.id}\"]`);\n const control = swipeControls.get(entry.id);\n\n if (wrapper && control?.element !== wrapper) {\n control?.gesture.dispose();\n swipeControls.set(entry.id, { element: wrapper, gesture: createToastSwipe(entry.id, wrapper) });\n }\n\n if (entry.phase === 'exiting') beginExit(entry.id);\n }\n };\n\n const scheduleSyncControls = (): void => {\n syncControls();\n\n if (pendingSyncFrame !== undefined) cancelAnimationFrame(pendingSyncFrame);\n\n pendingSyncFrame = requestAnimationFrame(() => {\n pendingSyncFrame = undefined;\n syncControls();\n });\n };\n\n watch(entries, scheduleSyncControls);\n watch(paused, (isPaused) => {\n if (isPaused) store?.pauseTimers();\n else store?.resumeTimers();\n });\n\n const bind = (nextStore: ToastStore): void => {\n if (store === nextStore) return;\n\n unsubscribeEntries();\n\n unsubscribeEvents();\n store = nextStore;\n unsubscribeEntries = store.subscribe((nextEntries) => {\n entries.value = nextEntries;\n });\n unsubscribeEvents = store.subscribeEvents((event) => emit(event.type, { id: event.id }));\n\n if (paused.value) store.pauseTimers();\n };\n\n const renderEntry = (entry: ToastEntry) => {\n const dismiss = () => store?.dismiss(entry.id);\n\n return html`\n <div\n class=\"toast-wrapper\"\n data-toast-id=${entry.id}\n part=\"toast-wrapper\">\n <div class=\"${() => `toast-inner${entry.phase !== 'active' ? ` ${entry.phase}` : ''}`}\" part=\"toast-inner\">\n <ore-alert\n color=${entry.color || (entry.urgency === 'assertive' ? 'error' : 'primary')}\n variant=${entry.variant || 'solid'}\n size=${entry.size || 'md'}\n rounded=${entry.rounded || 'md'}\n ?horizontal=${entry.horizontal}\n heading=${entry.heading || ''}\n ?dismissible=${entry.dismissible}\n @dismiss=${dismiss}>\n ${\n entry.meta\n ? html`\n <span slot=\"meta\">${entry.meta}</span>\n `\n : ''\n }\n ${entry.message} ${renderToastActions(entry, dismiss)}\n </ore-alert>\n </div>\n </div>\n `;\n };\n\n onMounted(() => {\n hostBindings.set(el, {\n bind,\n unbind() {\n unsubscribeEntries();\n unsubscribeEvents();\n store = null;\n entries.value = [];\n },\n });\n\n const boundStore = hostStores.get(el);\n\n if (boundStore) bind(boundStore);\n });\n\n onCleanup(() => {\n hostBindings.get(el)?.unbind();\n\n hostBindings.delete(el);\n\n if (pendingSyncFrame !== undefined) cancelAnimationFrame(pendingSyncFrame);\n\n for (const control of swipeControls.values()) control.gesture.dispose();\n swipeControls.clear();\n for (const id of exiting.keys()) clearExitListener(id);\n });\n\n const urgencyOf = (entry: ToastEntry) => entry.urgency ?? (entry.color === 'error' ? 'assertive' : 'polite');\n const politeEntries = computed(() => entries.value.filter((entry) => urgencyOf(entry) === 'polite'));\n const assertiveEntries = computed(() => entries.value.filter((entry) => urgencyOf(entry) === 'assertive'));\n\n return html`\n <div\n class=\"toast-container\"\n ref=${containerRef}\n @pointerenter=${() => {\n hoverPaused.value = true;\n el.classList.add('hovered');\n }}\n @pointerleave=${() => {\n hoverPaused.value = false;\n el.classList.remove('hovered');\n }}\n @focusin=${() => {\n focusPaused.value = true;\n }}\n @focusout=${() => {\n focusPaused.value = false;\n }}\n part=\"container\">\n <div\n role=\"region\"\n aria-live=\"polite\"\n aria-relevant=\"additions removals\"\n aria-atomic=\"false\"\n aria-label=\"Notifications\"\n class=\"toast-live-region\">\n ${() => politeEntries.value.map(renderEntry)}\n </div>\n <div\n role=\"region\"\n aria-live=\"assertive\"\n aria-relevant=\"additions removals\"\n aria-atomic=\"false\"\n aria-label=\"Critical notifications\"\n class=\"toast-live-region\">\n ${() => assertiveEntries.value.map(renderEntry)}\n </div>\n <slot></slot>\n </div>\n `;\n },\n styles: [reducedMotionMixin, componentStyles],\n});\n\nexport type ToastServiceConfig = OreToastProps;\n\nexport interface ToastService {\n add(item: ToastItem): string;\n clear(): void;\n configure(config: ToastServiceConfig): void;\n dismiss(id: string): void;\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n error(message: string, opts?: Partial<ToastItem>): string;\n info(message: string, opts?: Partial<ToastItem>): string;\n promise<T>(\n promise: Promise<T>,\n messages: {\n error: string | ((err: unknown) => string);\n loading: string;\n success: string | ((data: T) => string);\n },\n ): Promise<T>;\n success(message: string, opts?: Partial<ToastItem>): string;\n update(id: string, updates: Partial<ToastItem>): void;\n warning(message: string, opts?: Partial<ToastItem>): string;\n [Symbol.dispose](): void;\n}\n\nconst services = new WeakMap<ParentNode, ToastService>();\n\n/**\n * Creates a scoped toast service. The service owns its notification store and\n * binds it to the declarative `<ore-toast>` host inside `root`, creating that\n * host lazily when notifications are first requested.\n */\nexport function createToastService(root: ParentNode = document.body): ToastService {\n const existing = services.get(root);\n\n if (existing) return existing;\n\n const store = new ToastStore();\n const disposalController = new AbortController();\n let disposed = false;\n let configured = false;\n let pendingConfig: ToastServiceConfig | null = null;\n let host: HTMLElement | null = null;\n\n const assertActive = (): boolean => !disposed;\n const rootNode = root as Element | Document | ShadowRoot;\n const getHost = (): HTMLElement | null => {\n if (!assertActive()) return null;\n\n if (host?.isConnected) return host;\n\n host = rootNode.querySelector<HTMLElement>(TOAST_TAG);\n\n if (!host) {\n host = document.createElement(TOAST_TAG);\n\n if (pendingConfig?.position) host.setAttribute('position', pendingConfig.position);\n\n if (pendingConfig?.max != null) host.setAttribute('max', String(pendingConfig.max));\n\n rootNode.appendChild(host);\n }\n\n if (pendingConfig?.max != null) store.setMax(pendingConfig.max);\n else {\n const max = Number(host.getAttribute('max'));\n\n if (Number.isFinite(max) && max > 0) store.setMax(max);\n }\n\n pendingConfig = null;\n configured = true;\n bindToastHost(host, store);\n\n return host;\n };\n const ensureHost = (): boolean => Boolean(getHost());\n\n const service: ToastService = {\n add(item) {\n if (!ensureHost()) return item.id ?? crypto.randomUUID();\n\n return store.add(item);\n },\n\n clear() {\n if (ensureHost()) store.clear();\n },\n\n configure(config) {\n if (configured) {\n warn('toast.configure() called after the container was already created; options ignored.');\n\n return;\n }\n\n pendingConfig = { ...pendingConfig, ...config };\n },\n\n dismiss(id) {\n if (ensureHost()) store.dismiss(id);\n },\n\n get disposalSignal() {\n return disposalController.signal;\n },\n\n dispose() {\n if (disposed) return;\n\n disposed = true;\n\n disposalController.abort();\n\n store.dispose();\n\n if (services.get(root) === service) services.delete(root);\n },\n\n get disposed() {\n return disposed;\n },\n\n error(message, opts) {\n return service.add({ color: 'error', ...opts, message });\n },\n\n info(message, opts) {\n return service.add({ color: 'info', ...opts, message });\n },\n\n async promise(promise, messages) {\n const id = service.add({ color: 'primary', dismissible: false, duration: 0, message: messages.loading });\n\n try {\n const data = await promise;\n\n service.update(id, {\n color: 'success',\n dismissible: true,\n duration: 5000,\n message: typeof messages.success === 'function' ? messages.success(data) : messages.success,\n });\n\n return data;\n } catch (err) {\n service.update(id, {\n color: 'error',\n dismissible: true,\n duration: 5000,\n message: typeof messages.error === 'function' ? messages.error(err) : messages.error,\n });\n throw err;\n }\n },\n\n success(message, opts) {\n return service.add({ color: 'success', ...opts, message });\n },\n\n [Symbol.dispose]() {\n service.dispose();\n },\n\n update(id, updates) {\n if (ensureHost()) store.update(id, updates);\n },\n\n warning(message, opts) {\n return service.add({ color: 'warning', ...opts, message });\n },\n };\n\n services.set(root, service);\n\n return service;\n}\n\n/** Singleton service backed by a lazily created host in `document.body`. */\nexport const toast: ToastService = createToastService();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"toast.js","names":[],"sources":["../src/feedback/toast/toast.ts"],"sourcesContent":["import '../alert/alert';\nimport { createPanGesture, type PanGesture } from '@vielzeug/gesture';\nimport { define, each, getHost, html, onCleanup, onMounted, prop, ref, useEmit } from '@vielzeug/ore';\nimport { computed, type Readable, signal, watch } from '@vielzeug/ripple';\nimport { warn } from '../../_dev';\nimport { reducedMotionMixin } from '../../styles';\nimport type { ComponentSize, RoundedSize, ThemeColor } from '../../types';\nimport componentStyles from './toast.css?inline';\n\n/** Fallback exit budget when the computed transition duration is unavailable; matches toast.css's default. */\nconst TOAST_EXIT_MS = 200;\n\nexport type OreToastEvents = {\n add: { id: string };\n dismiss: { id: string };\n};\n\nexport type OreToastProps = {\n max?: number;\n position?: 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';\n};\n\n/** Individual toast notification. */\nexport type ToastItem = {\n actions?: Array<{\n color?: ThemeColor;\n label: string;\n onClick?: () => void;\n variant?: 'solid' | 'flat' | 'bordered';\n }>;\n color?: ThemeColor;\n dismissible?: boolean;\n /** Auto-dismiss delay in ms. Set to 0 for persistent toasts (default: 5000). */\n duration?: number;\n heading?: string;\n /** Show message and actions side-by-side (horizontal layout). */\n horizontal?: boolean;\n /** Auto-generated when omitted. */\n id?: string;\n message: string;\n /** Metadata text (for example, a timestamp) shown in the alert meta slot. */\n meta?: string;\n /** Called after the toast is fully dismissed and removed. */\n onDismiss?: () => void;\n rounded?: RoundedSize | '';\n size?: ComponentSize;\n /**\n * Screen-reader announcement urgency. Error-coloured toasts are assertive by\n * default; all other toasts are polite.\n */\n urgency?: 'polite' | 'assertive';\n variant?: 'solid' | 'flat' | 'bordered';\n};\n\ntype ToastPhase = 'entering' | 'active' | 'exiting';\n\ntype ToastTimer = {\n remaining: number;\n startedAt: number;\n timeoutId: ReturnType<typeof setTimeout>;\n};\n\ntype ToastEntry = Required<Pick<ToastItem, 'dismissible' | 'duration' | 'id'>> &\n Omit<ToastItem, 'dismissible' | 'duration' | 'id'> & {\n exitTimeoutId: ReturnType<typeof setTimeout> | null;\n id: string;\n phase: ToastPhase;\n timer: ToastTimer | null;\n };\n\ntype ToastStoreEvent = {\n id: string;\n type: 'add' | 'dismiss';\n};\n\n/**\n * Owns notification data and every timer. Renderers only subscribe to this\n * store; they never expose imperative mutation methods themselves.\n */\nclass ToastStore {\n readonly #entries = signal<ToastEntry[]>([]);\n readonly #listeners = new Set<(entries: ToastEntry[]) => void>();\n readonly #eventListeners = new Set<(event: ToastStoreEvent) => void>();\n #disposed = false;\n #max = 5;\n\n add(item: ToastItem): string {\n if (this.#disposed) return item.id ?? crypto.randomUUID();\n\n const id = item.id ?? crypto.randomUUID();\n const active = this.#entries.value.filter((entry) => entry.phase !== 'exiting');\n const overflow = active.length - (this.#max - 1);\n\n if (overflow > 0) {\n for (const entry of active.slice(0, overflow)) this.dismiss(entry.id);\n }\n\n const entry: ToastEntry = {\n dismissible: true,\n duration: 5000,\n ...item,\n exitTimeoutId: null,\n id,\n phase: 'entering',\n timer: null,\n };\n\n this.#setEntries([...this.#entries.value, entry]);\n this.#emit({ id, type: 'add' });\n\n // Two frames: the first lets the browser compute styles for the `entering` state,\n // the second flips to `active` so the CSS transition has a start value to animate from.\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n if (this.#entry(id)?.phase === 'entering') this.#update(id, { phase: 'active' });\n });\n });\n\n if (entry.duration > 0) this.#scheduleTimer(id, entry.duration);\n\n return id;\n }\n\n clear(): void {\n for (const entry of this.#entries.value) {\n if (entry.phase !== 'exiting') this.dismiss(entry.id);\n }\n }\n\n dispose(): void {\n if (this.#disposed) return;\n\n this.#disposed = true;\n\n for (const entry of this.#entries.value) {\n if (entry.timer) clearTimeout(entry.timer.timeoutId);\n\n if (entry.exitTimeoutId) clearTimeout(entry.exitTimeoutId);\n }\n\n this.#setEntries([]);\n this.#listeners.clear();\n this.#eventListeners.clear();\n }\n\n dismiss(id: string): void {\n const entry = this.#entry(id);\n\n if (!entry || entry.phase === 'exiting' || this.#disposed) return;\n\n this.#update(id, { ...this.#clearTimer(entry), phase: 'exiting' });\n this.scheduleFinalization(id, TOAST_EXIT_MS + 50);\n }\n\n finalize(id: string): void {\n const entry = this.#entry(id);\n\n if (!entry || this.#disposed) return;\n\n if (entry.timer) clearTimeout(entry.timer.timeoutId);\n\n if (entry.exitTimeoutId) clearTimeout(entry.exitTimeoutId);\n\n this.#setEntries(this.#entries.value.filter((candidate) => candidate.id !== id));\n entry.onDismiss?.();\n this.#emit({ id, type: 'dismiss' });\n }\n\n pauseTimers(): void {\n if (this.#disposed) return;\n\n this.#setEntries(\n this.#entries.value.map((entry) => {\n if (!entry.timer) return entry;\n\n clearTimeout(entry.timer.timeoutId);\n\n return {\n ...entry,\n timer: {\n ...entry.timer,\n remaining: Math.max(0, entry.timer.remaining - (Date.now() - entry.timer.startedAt)),\n },\n };\n }),\n );\n }\n\n resumeTimers(): void {\n if (this.#disposed) return;\n\n for (const entry of this.#entries.value) {\n if (entry.phase === 'active' && entry.timer && entry.timer.remaining > 0) {\n this.#scheduleTimer(entry.id, entry.timer.remaining);\n }\n }\n }\n\n scheduleFinalization(id: string, delay: number): void {\n const entry = this.#entry(id);\n\n if (entry?.phase !== 'exiting' || this.#disposed) return;\n\n if (entry.exitTimeoutId) clearTimeout(entry.exitTimeoutId);\n\n const exitTimeoutId = setTimeout(() => this.finalize(id), delay);\n\n this.#update(id, { exitTimeoutId });\n }\n\n setMax(max: number | undefined): void {\n if (max != null) this.#max = Math.max(1, max);\n }\n\n subscribe(listener: (entries: ToastEntry[]) => void): () => void {\n listener(this.#entries.value);\n this.#listeners.add(listener);\n\n return () => this.#listeners.delete(listener);\n }\n\n subscribeEvents(listener: (event: ToastStoreEvent) => void): () => void {\n this.#eventListeners.add(listener);\n\n return () => this.#eventListeners.delete(listener);\n }\n\n update(id: string, updates: Partial<ToastItem>): void {\n const entry = this.#entry(id);\n\n if (!entry || this.#disposed) return;\n\n const cleared = updates.duration !== undefined ? this.#clearTimer(entry) : entry;\n\n this.#update(id, { ...cleared, ...updates, id });\n\n if (updates.duration !== undefined && updates.duration > 0) this.#scheduleTimer(id, updates.duration);\n }\n\n #clearTimer(entry: ToastEntry): ToastEntry {\n if (entry.timer) clearTimeout(entry.timer.timeoutId);\n\n return { ...entry, timer: null };\n }\n\n #emit(event: ToastStoreEvent): void {\n for (const listener of this.#eventListeners) listener(event);\n }\n\n #entry(id: string): ToastEntry | undefined {\n return this.#entries.value.find((entry) => entry.id === id);\n }\n\n #scheduleTimer(id: string, remaining: number): void {\n if (remaining <= 0 || this.#disposed) return;\n\n const timeoutId = setTimeout(() => this.dismiss(id), remaining);\n\n this.#update(id, { timer: { remaining, startedAt: Date.now(), timeoutId } });\n }\n\n #setEntries(entries: ToastEntry[]): void {\n this.#entries.value = entries;\n for (const listener of this.#listeners) listener(entries);\n }\n\n #update(id: string, patch: Partial<ToastEntry>): void {\n this.#setEntries(this.#entries.value.map((entry) => (entry.id === id ? { ...entry, ...patch } : entry)));\n }\n}\n\ntype ToastHostBinding = {\n bind: (store: ToastStore) => void;\n unbind: () => void;\n};\n\nconst hostBindings = new WeakMap<HTMLElement, ToastHostBinding>();\nconst hostStores = new WeakMap<HTMLElement, ToastStore>();\n\nconst bindToastHost = (host: HTMLElement, store: ToastStore): void => {\n hostStores.set(host, store);\n hostBindings.get(host)?.bind(store);\n};\n\nconst NO_ACTIONS: NonNullable<ToastItem['actions']> = [];\n\nconst urgencyOf = (entry: ToastEntry): 'polite' | 'assertive' =>\n entry.urgency ?? (entry.color === 'error' ? 'assertive' : 'polite');\n\n/** Renders the action buttons for a toast entry. Buttons are keyed so focus survives store updates. */\nfunction renderToastActions(item: Readable<ToastEntry>, dismiss: () => void) {\n const actions = computed(() => item.value.actions ?? NO_ACTIONS);\n\n return html`\n ${() =>\n actions.value.length\n ? html`\n <div slot=\"actions\" class=\"toast-actions\">\n ${each(\n () => actions.value,\n (action, index) => `${index}:${action.label}`,\n (action) => html`\n <ore-button\n size=\"sm\"\n color=${() => action.value.color || item.value.color || 'primary'}\n variant=${() => action.value.variant || 'flat'}\n @click=${() => {\n action.value.onClick?.();\n dismiss();\n }}>\n ${() => action.value.label}\n </ore-button>\n `,\n )}\n </div>\n `\n : ''}\n `;\n}\n\nexport const TOAST_TAG = 'ore-toast' as const;\n\n/**\n * Declarative toast host. It subscribes to the service for its scope and\n * renders notifications, but has no imperative mutation API of its own.\n *\n * Notifications render as a vertical list (newest nearest the anchored edge)\n * inside polite and assertive live regions. Entries are keyed by id, so store\n * updates (timer pauses, message updates, phase changes) patch the existing\n * DOM instead of re-creating it — focus, in-flight gestures, and CSS\n * transitions all survive.\n *\n * @element ore-toast\n *\n * @attr {string} position - Stack placement.\n * @attr {number} max - Maximum live notifications for the scoped service.\n *\n * @cssprop --toast-max-width - Panel width cap (default 400px; full width on phones).\n * @cssprop --toast-gap - Gap between notifications.\n * @cssprop --toast-bg - Opaque surface for flat/bordered notifications.\n * @cssprop --toast-shadow - Elevation shadow.\n * @cssprop --toast-enter-duration / --toast-exit-duration - Motion durations.\n * @cssprop --toast-progress-height - Height of the auto-dismiss progress bar.\n * @cssprop --toast-inset-top / --toast-inset-bottom / --toast-inset-left / --toast-inset-right - Viewport insets.\n *\n * @part container - Notification list.\n * @part toast-wrapper - Per-notification layout wrapper (swipe target).\n * @part toast-inner - Per-notification motion target.\n * @part progress - Auto-dismiss progress bar.\n */\ndefine<OreToastProps>(TOAST_TAG, {\n props: {\n max: prop.number(5),\n position: prop.oneOf(\n ['top-left', 'top-center', 'top-right', 'bottom-left', 'bottom-center', 'bottom-right'] as const,\n 'bottom-right',\n ),\n },\n setup() {\n const el = getHost() as HTMLElement;\n const emit = useEmit<OreToastEvents>();\n const containerRef = ref<HTMLDivElement>();\n const entries = signal<ToastEntry[]>([]);\n const hoverPaused = signal(false);\n const focusPaused = signal(false);\n const paused = computed(() => hoverPaused.value || focusPaused.value);\n const swipeControls = new Map<string, { element: HTMLElement; gesture: PanGesture }>();\n const exiting = new Map<string, () => void>();\n const swiping = new Set<string>();\n let pendingSyncFrame: number | undefined;\n let store: ToastStore | null = null;\n let unsubscribeEntries = () => {};\n let unsubscribeEvents = () => {};\n\n const getInner = (wrapper: HTMLElement): HTMLElement | null => {\n return wrapper.querySelector<HTMLElement>('.toast-inner');\n };\n\n const clearExitListener = (id: string): void => {\n exiting.get(id)?.();\n exiting.delete(id);\n };\n\n const finalizeSwipe = (id: string): void => {\n swiping.delete(id);\n store?.finalize(id);\n };\n\n const createToastSwipe = (id: string, wrapper: HTMLElement): PanGesture => {\n const isDismissible = (): boolean => entries.value.find((entry) => entry.id === id)?.dismissible ?? true;\n const reset = (): void => {\n const inner = getInner(wrapper);\n\n if (!inner) return;\n\n inner.style.transition = '';\n inner.style.transform = '';\n inner.style.opacity = '';\n };\n\n return createPanGesture(wrapper, {\n axis: 'x',\n disabled: () => !isDismissible(),\n onEnd: ({ distance, reason }) => {\n if (reason !== 'release' || Math.abs(distance) < 48) {\n reset();\n\n return;\n }\n\n const inner = getInner(wrapper);\n\n if (!inner || !store) return;\n\n swiping.add(id);\n\n store.dismiss(id);\n\n const finish = () => finalizeSwipe(id);\n\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n inner.style.opacity = '0';\n finish();\n\n return;\n }\n\n const direction = distance >= 0 ? 1 : -1;\n\n inner.style.transition = 'transform 0.22s ease-out, opacity 0.22s ease-out';\n void inner.offsetWidth;\n inner.style.transform = `translateX(${direction * 120}%)`;\n inner.style.opacity = '0';\n\n const onTransitionEnd = (transition: TransitionEvent) => {\n if (transition.target !== inner || transition.propertyName !== 'transform') return;\n\n inner.removeEventListener('transitionend', onTransitionEnd);\n finish();\n };\n\n inner.addEventListener('transitionend', onTransitionEnd);\n store.scheduleFinalization(id, 300);\n },\n onMove: ({ distance }) => {\n const inner = getInner(wrapper);\n\n if (!inner) return;\n\n inner.style.transition = 'none';\n inner.style.transform = `translateX(${distance}px)`;\n inner.style.opacity = String(Math.max(0, 1 - Math.abs(distance) / 200));\n },\n pointerCapture: false,\n shouldStart: (event) =>\n !event\n .composedPath()\n .some((node) => node instanceof Element && node.matches('button, a, input, select, textarea, ore-button')),\n });\n };\n\n const beginExit = (id: string): void => {\n if (!store || exiting.has(id) || swiping.has(id)) return;\n\n requestAnimationFrame(() => {\n if (!store || exiting.has(id) || swiping.has(id)) return;\n\n const inner = containerRef.value?.querySelector<HTMLElement>(`[data-toast-id=\"${id}\"] .toast-inner`);\n\n if (!inner) {\n store.scheduleFinalization(id, TOAST_EXIT_MS);\n\n return;\n }\n\n void inner.offsetHeight;\n\n const duration = parseFloat(getComputedStyle(inner).transitionDuration) * 1000;\n const exitMs = Number.isFinite(duration) && duration > 0 ? duration : TOAST_EXIT_MS;\n const onTransitionEnd = (event: TransitionEvent) => {\n const wrapper = (event.target as HTMLElement | null)?.closest?.(`[data-toast-id=\"${id}\"]`);\n\n if (!wrapper) return;\n\n clearExitListener(id);\n store?.finalize(id);\n };\n const remove = () => containerRef.value?.removeEventListener('transitionend', onTransitionEnd);\n\n exiting.set(id, remove);\n containerRef.value?.addEventListener('transitionend', onTransitionEnd);\n store.scheduleFinalization(id, exitMs + 50);\n });\n };\n\n const syncControls = (): void => {\n const currentIds = new Set(entries.value.map((entry) => entry.id));\n\n for (const [id, control] of swipeControls) {\n if (!currentIds.has(id)) {\n control.gesture.dispose();\n\n swipeControls.delete(id);\n clearExitListener(id);\n swiping.delete(id);\n }\n }\n\n for (const entry of entries.value) {\n const wrapper = containerRef.value?.querySelector<HTMLElement>(`[data-toast-id=\"${entry.id}\"]`);\n const control = swipeControls.get(entry.id);\n\n if (wrapper && control?.element !== wrapper) {\n control?.gesture.dispose();\n swipeControls.set(entry.id, { element: wrapper, gesture: createToastSwipe(entry.id, wrapper) });\n }\n\n if (entry.phase === 'exiting') beginExit(entry.id);\n }\n };\n\n const scheduleSyncControls = (): void => {\n syncControls();\n\n if (pendingSyncFrame !== undefined) cancelAnimationFrame(pendingSyncFrame);\n\n pendingSyncFrame = requestAnimationFrame(() => {\n pendingSyncFrame = undefined;\n syncControls();\n });\n };\n\n watch(entries, scheduleSyncControls);\n watch(paused, (isPaused) => {\n if (isPaused) store?.pauseTimers();\n else store?.resumeTimers();\n });\n\n const bind = (nextStore: ToastStore): void => {\n if (store === nextStore) return;\n\n unsubscribeEntries();\n\n unsubscribeEvents();\n store = nextStore;\n unsubscribeEntries = store.subscribe((nextEntries) => {\n entries.value = nextEntries;\n });\n unsubscribeEvents = store.subscribeEvents((event) => emit(event.type, { id: event.id }));\n\n if (paused.value) store.pauseTimers();\n };\n\n /** Escape dismisses the notification that currently holds focus. */\n const onKeydown = (event: KeyboardEvent): void => {\n if (event.key !== 'Escape') return;\n\n const wrapper = event\n .composedPath()\n .find((node): node is HTMLElement => node instanceof HTMLElement && node.classList.contains('toast-wrapper'));\n const id = wrapper?.dataset.toastId;\n const entry = id ? entries.value.find((candidate) => candidate.id === id) : undefined;\n\n if (!entry?.dismissible) return;\n\n event.preventDefault();\n event.stopPropagation();\n store?.dismiss(entry.id);\n };\n\n const renderEntry = (item: Readable<ToastEntry>) => {\n const id = item.value.id;\n const dismiss = () => store?.dismiss(id);\n const meta = computed(() => item.value.meta ?? '');\n const innerClass = computed(() => `toast-inner${item.value.phase !== 'active' ? ` ${item.value.phase}` : ''}`);\n const innerStyle = computed(\n () =>\n `--_toast-accent: var(--color-${item.value.color || 'primary'}); --_toast-radius: var(--rounded-${item.value.rounded || 'md'})`,\n );\n // Progress restarts from the correct fraction whenever the timer is (re)scheduled:\n // the animation runs for the full duration with a negative delay for elapsed time.\n const progressStyle = computed(() => {\n const { duration, timer } = item.value;\n\n if (!timer || duration <= 0) return '';\n\n return `--_toast-duration: ${duration}ms; --_toast-elapsed: -${Math.max(0, duration - timer.remaining)}ms`;\n });\n\n return html`\n <div class=\"toast-wrapper\" data-toast-id=${id} part=\"toast-wrapper\">\n <div class=${() => innerClass.value} style=${() => innerStyle.value} part=\"toast-inner\">\n <ore-alert\n embedded\n color=${() => item.value.color || (urgencyOf(item.value) === 'assertive' ? 'error' : 'primary')}\n variant=${() => item.value.variant || 'solid'}\n size=${() => item.value.size || 'md'}\n rounded=${() => item.value.rounded || 'md'}\n ?horizontal=${() => Boolean(item.value.horizontal)}\n heading=${() => item.value.heading || null}\n ?dismissible=${() => item.value.dismissible}\n @dismiss=${dismiss}>\n <span slot=\"meta\" ?hidden=${() => !meta.value}>${() => meta.value}</span>\n ${() => item.value.message} ${renderToastActions(item, dismiss)}\n </ore-alert>\n <div\n class=\"toast-progress\"\n part=\"progress\"\n style=${() => progressStyle.value}\n ?hidden=${() => !progressStyle.value}\n aria-hidden=\"true\"></div>\n </div>\n </div>\n `;\n };\n\n onMounted(() => {\n hostBindings.set(el, {\n bind,\n unbind() {\n unsubscribeEntries();\n unsubscribeEvents();\n store = null;\n entries.value = [];\n },\n });\n\n const boundStore = hostStores.get(el);\n\n if (boundStore) bind(boundStore);\n });\n\n onCleanup(() => {\n hostBindings.get(el)?.unbind();\n\n hostBindings.delete(el);\n\n if (pendingSyncFrame !== undefined) cancelAnimationFrame(pendingSyncFrame);\n\n for (const control of swipeControls.values()) control.gesture.dispose();\n swipeControls.clear();\n for (const id of exiting.keys()) clearExitListener(id);\n });\n\n const politeEntries = computed(() => entries.value.filter((entry) => urgencyOf(entry) === 'polite'));\n const assertiveEntries = computed(() => entries.value.filter((entry) => urgencyOf(entry) === 'assertive'));\n const keyOf = (entry: ToastEntry) => entry.id;\n\n return html`\n <div\n class=${() => `toast-container${paused.value ? ' paused' : ''}`}\n ref=${containerRef}\n @pointerenter=${() => {\n hoverPaused.value = true;\n }}\n @pointerleave=${() => {\n hoverPaused.value = false;\n }}\n @focusin=${() => {\n focusPaused.value = true;\n }}\n @focusout=${() => {\n focusPaused.value = false;\n }}\n @keydown=${onKeydown}\n part=\"container\">\n <div\n role=\"region\"\n aria-live=\"polite\"\n aria-relevant=\"additions removals\"\n aria-atomic=\"false\"\n aria-label=\"Notifications\"\n class=\"toast-live-region\">\n ${each(politeEntries, keyOf, renderEntry)}\n </div>\n <div\n role=\"region\"\n aria-live=\"assertive\"\n aria-relevant=\"additions removals\"\n aria-atomic=\"false\"\n aria-label=\"Critical notifications\"\n class=\"toast-live-region\">\n ${each(assertiveEntries, keyOf, renderEntry)}\n </div>\n <slot></slot>\n </div>\n `;\n },\n styles: [reducedMotionMixin, componentStyles],\n});\n\nexport type ToastServiceConfig = OreToastProps;\n\nexport interface ToastService {\n add(item: ToastItem): string;\n clear(): void;\n configure(config: ToastServiceConfig): void;\n dismiss(id: string): void;\n readonly disposalSignal: AbortSignal;\n dispose(): void;\n readonly disposed: boolean;\n error(message: string, opts?: Partial<ToastItem>): string;\n info(message: string, opts?: Partial<ToastItem>): string;\n promise<T>(\n promise: Promise<T>,\n messages: {\n error: string | ((err: unknown) => string);\n loading: string;\n success: string | ((data: T) => string);\n },\n ): Promise<T>;\n success(message: string, opts?: Partial<ToastItem>): string;\n update(id: string, updates: Partial<ToastItem>): void;\n warning(message: string, opts?: Partial<ToastItem>): string;\n [Symbol.dispose](): void;\n}\n\nconst services = new WeakMap<ParentNode, ToastService>();\n\n/**\n * Creates a scoped toast service. The service owns its notification store and\n * binds it to the declarative `<ore-toast>` host inside `root`, creating that\n * host lazily when notifications are first requested.\n */\nexport function createToastService(root: ParentNode = document.body): ToastService {\n const existing = services.get(root);\n\n if (existing) return existing;\n\n const store = new ToastStore();\n const disposalController = new AbortController();\n let disposed = false;\n let configured = false;\n let pendingConfig: ToastServiceConfig | null = null;\n let host: HTMLElement | null = null;\n\n const assertActive = (): boolean => !disposed;\n const rootNode = root as Element | Document | ShadowRoot;\n const getHost = (): HTMLElement | null => {\n if (!assertActive()) return null;\n\n if (host?.isConnected) return host;\n\n host = rootNode.querySelector<HTMLElement>(TOAST_TAG);\n\n if (!host) {\n host = document.createElement(TOAST_TAG);\n\n if (pendingConfig?.position) host.setAttribute('position', pendingConfig.position);\n\n if (pendingConfig?.max != null) host.setAttribute('max', String(pendingConfig.max));\n\n rootNode.appendChild(host);\n }\n\n if (pendingConfig?.max != null) store.setMax(pendingConfig.max);\n else {\n const max = Number(host.getAttribute('max'));\n\n if (Number.isFinite(max) && max > 0) store.setMax(max);\n }\n\n pendingConfig = null;\n configured = true;\n bindToastHost(host, store);\n\n return host;\n };\n const ensureHost = (): boolean => Boolean(getHost());\n\n const service: ToastService = {\n add(item) {\n if (!ensureHost()) return item.id ?? crypto.randomUUID();\n\n return store.add(item);\n },\n\n clear() {\n if (ensureHost()) store.clear();\n },\n\n configure(config) {\n if (configured) {\n warn('toast.configure() called after the container was already created; options ignored.');\n\n return;\n }\n\n pendingConfig = { ...pendingConfig, ...config };\n },\n\n dismiss(id) {\n if (ensureHost()) store.dismiss(id);\n },\n\n get disposalSignal() {\n return disposalController.signal;\n },\n\n dispose() {\n if (disposed) return;\n\n disposed = true;\n\n disposalController.abort();\n\n store.dispose();\n\n if (services.get(root) === service) services.delete(root);\n },\n\n get disposed() {\n return disposed;\n },\n\n error(message, opts) {\n return service.add({ color: 'error', ...opts, message });\n },\n\n info(message, opts) {\n return service.add({ color: 'info', ...opts, message });\n },\n\n async promise(promise, messages) {\n const id = service.add({ color: 'primary', dismissible: false, duration: 0, message: messages.loading });\n\n try {\n const data = await promise;\n\n service.update(id, {\n color: 'success',\n dismissible: true,\n duration: 5000,\n message: typeof messages.success === 'function' ? messages.success(data) : messages.success,\n });\n\n return data;\n } catch (err) {\n service.update(id, {\n color: 'error',\n dismissible: true,\n duration: 5000,\n message: typeof messages.error === 'function' ? messages.error(err) : messages.error,\n });\n throw err;\n }\n },\n\n success(message, opts) {\n return service.add({ color: 'success', ...opts, message });\n },\n\n [Symbol.dispose]() {\n service.dispose();\n },\n\n update(id, updates) {\n if (ensureHost()) store.update(id, updates);\n },\n\n warning(message, opts) {\n return service.add({ color: 'warning', ...opts, message });\n },\n };\n\n services.set(root, service);\n\n return service;\n}\n\n/** Singleton service backed by a lazily created host in `document.body`. */\nexport const toast: ToastService = createToastService();\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vielzeug/refine",
|
|
3
|
-
"version": "3.3.
|
|
3
|
+
"version": "3.3.1",
|
|
4
4
|
"description": "Accessible, themeable web components built on ore",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"web-components",
|
|
@@ -674,7 +674,7 @@
|
|
|
674
674
|
"@vielzeug/gesture": "3.0.0",
|
|
675
675
|
"@vielzeug/keymap": "3.0.0",
|
|
676
676
|
"@vielzeug/orbit": "3.0.0",
|
|
677
|
-
"@vielzeug/ore": "3.0.
|
|
677
|
+
"@vielzeug/ore": "3.0.1",
|
|
678
678
|
"@vielzeug/ripple": "3.0.0",
|
|
679
679
|
"@vielzeug/sentinel": "3.0.0",
|
|
680
680
|
"@vielzeug/sigil": "3.1.0",
|