@devslab/dds-solid 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1,524 @@
1
+ import { For as e, Show as t, createContext as n, createEffect as r, createSignal as i, createUniqueId as a, onCleanup as o, onMount as s, splitProps as c, useContext as l } from "solid-js";
2
+ import { className as u, createComponent as d, delegateEvents as f, effect as p, getNextElement as m, getNextMarker as h, insert as g, memo as _, mergeProps as v, runHydrationEvents as y, setAttribute as b, setProperty as x, spread as S, template as C, use as w } from "solid-js/web";
3
+ import { directionPolicy as T, icons as E } from "@devslab/dds-icons";
4
+ //#region src/controllable.ts
5
+ function D(e) {
6
+ let [t, n] = i(e.defaultValue), r = () => e.value() ?? t(), a = n;
7
+ return [r, (t) => {
8
+ let n = typeof t == "function" ? t(r()) : t;
9
+ return e.value() === void 0 && a(() => n), e.onChange?.(n), n;
10
+ }];
11
+ }
12
+ //#endregion
13
+ //#region src/utils.ts
14
+ function O(...e) {
15
+ return e.filter(Boolean).join(" ");
16
+ }
17
+ function k(...e) {
18
+ return e.filter(Boolean).join(" ") || void 0;
19
+ }
20
+ //#endregion
21
+ //#region src/controls.tsx
22
+ var A = /*#__PURE__*/ C("<button><!$><!/><!$><!/>"), j = /*#__PURE__*/ C("<span class=dds-spinner aria-hidden=true>"), M = /*#__PURE__*/ C("<button>"), ee = /*#__PURE__*/ C("<div><label class=dds-field__label><!$><!/><!$><!/></label><!$><!/><!$><!/><!$><!/>"), te = /*#__PURE__*/ C("<span aria-hidden=true> *"), ne = /*#__PURE__*/ C("<div class=dds-field__help>"), re = /*#__PURE__*/ C("<div class=dds-field__error role=alert>"), ie = /*#__PURE__*/ C("<span><select>"), N = /*#__PURE__*/ C("<label><input><span>");
23
+ function P(e) {
24
+ let [t, n] = c(e, [
25
+ "class",
26
+ "tone",
27
+ "size",
28
+ "loading",
29
+ "disabled",
30
+ "type",
31
+ "children"
32
+ ]);
33
+ return (() => {
34
+ var e = m(A), r = e.firstChild, [i, a] = h(r.nextSibling), o = i.nextSibling, [s, c] = h(o.nextSibling);
35
+ return S(e, v(n, {
36
+ get type() {
37
+ return t.type ?? "button";
38
+ },
39
+ get class() {
40
+ return O("dds-btn", `dds-btn--${t.tone ?? "primary"}`, t.size !== "md" && t.size ? `dds-btn--${t.size}` : void 0, t.class);
41
+ },
42
+ get disabled() {
43
+ return t.disabled || t.loading;
44
+ },
45
+ get "aria-busy"() {
46
+ return t.loading ? "true" : void 0;
47
+ }
48
+ }), !1, !0), g(e, (() => {
49
+ var e = _(() => !!t.loading);
50
+ return () => e() && m(j);
51
+ })(), i, a), g(e, () => t.children, s, c), y(), e;
52
+ })();
53
+ }
54
+ function F(e) {
55
+ let [t, n] = c(e, [
56
+ "class",
57
+ "tone",
58
+ "size",
59
+ "loading",
60
+ "disabled",
61
+ "type",
62
+ "children"
63
+ ]);
64
+ return (() => {
65
+ var e = m(M);
66
+ return S(e, v(n, {
67
+ get type() {
68
+ return t.type ?? "button";
69
+ },
70
+ get class() {
71
+ return O("dds-iconbtn", t.tone && t.tone !== "ghost" ? `dds-iconbtn--${t.tone}` : void 0, t.size !== "md" && t.size ? `dds-iconbtn--${t.size}` : void 0, t.class);
72
+ },
73
+ get disabled() {
74
+ return t.disabled || t.loading;
75
+ },
76
+ get "aria-busy"() {
77
+ return t.loading ? "true" : void 0;
78
+ }
79
+ }), !1, !0), g(e, (() => {
80
+ var e = _(() => !!t.loading);
81
+ return () => e() ? m(j) : t.children;
82
+ })()), y(), e;
83
+ })();
84
+ }
85
+ function I(e) {
86
+ let t = a(), n = () => e.id ?? `dds-field-${t}`, r = () => e.helpText ? `${n()}-help` : void 0, i = () => e.error ? `${n()}-error` : void 0, o = () => ({
87
+ id: n(),
88
+ "aria-describedby": k(r(), i()),
89
+ "aria-invalid": e.error ? "true" : void 0,
90
+ "aria-required": e.required ? "true" : void 0
91
+ });
92
+ return (() => {
93
+ var t = m(ee), a = t.firstChild, s = a.firstChild, [c, l] = h(s.nextSibling), d = c.nextSibling, [f, v] = h(d.nextSibling), y = a.nextSibling, [x, S] = h(y.nextSibling), C = x.nextSibling, [w, T] = h(C.nextSibling), E = w.nextSibling, [D, k] = h(E.nextSibling);
94
+ return g(a, () => e.label, c, l), g(a, (() => {
95
+ var t = _(() => !!e.required);
96
+ return () => t() && m(te);
97
+ })(), f, v), g(t, (() => {
98
+ var t = _(() => typeof e.children == "function");
99
+ return () => t() ? e.children(o()) : e.children;
100
+ })(), x, S), g(t, (() => {
101
+ var t = _(() => !!e.helpText);
102
+ return () => t() && (() => {
103
+ var t = m(ne);
104
+ return g(t, () => e.helpText), p(() => b(t, "id", r())), t;
105
+ })();
106
+ })(), w, T), g(t, (() => {
107
+ var t = _(() => !!e.error);
108
+ return () => t() && (() => {
109
+ var t = m(re);
110
+ return g(t, () => e.error), p(() => b(t, "id", i())), t;
111
+ })();
112
+ })(), D, k), p((r) => {
113
+ var i = O("dds-field", e.error ? "dds-field--error" : void 0, e.class), o = n();
114
+ return i !== r.e && u(t, r.e = i), o !== r.t && b(a, "for", r.t = o), r;
115
+ }, {
116
+ e: void 0,
117
+ t: void 0
118
+ }), t;
119
+ })();
120
+ }
121
+ function L(e) {
122
+ let [t, n] = c(e, [
123
+ "class",
124
+ "invalid",
125
+ "children"
126
+ ]);
127
+ return (() => {
128
+ var e = m(ie), r = e.firstChild;
129
+ return S(r, v(n, {
130
+ class: "dds-select__input",
131
+ get "aria-invalid"() {
132
+ return t.invalid ? "true" : void 0;
133
+ }
134
+ }), !1, !0), g(r, () => t.children), p(() => u(e, O("dds-select", t.class))), y(), e;
135
+ })();
136
+ }
137
+ function R(e) {
138
+ let [t, n] = c(e, [
139
+ "checked",
140
+ "defaultChecked",
141
+ "onCheckedChange",
142
+ "label",
143
+ "class",
144
+ "inputClass",
145
+ "type",
146
+ "role"
147
+ ]), [r, i] = D({
148
+ value: () => t.checked,
149
+ defaultValue: t.defaultChecked ?? !1,
150
+ onChange: t.onCheckedChange
151
+ });
152
+ return (() => {
153
+ var e = m(N), a = e.firstChild, o = a.nextSibling;
154
+ return S(a, v(n, {
155
+ get type() {
156
+ return t.type;
157
+ },
158
+ get role() {
159
+ return t.role;
160
+ },
161
+ get class() {
162
+ return O(t.role === "switch" ? "dds-switch__input" : "dds-check__input", t.inputClass);
163
+ },
164
+ get checked() {
165
+ return r();
166
+ },
167
+ onChange: (e) => i(e.currentTarget.checked)
168
+ }), !1, !1), g(o, () => t.label), p(() => u(e, O(t.role === "switch" ? "dds-switch" : "dds-check", t.class))), y(), e;
169
+ })();
170
+ }
171
+ var z = (e) => d(R, v(e, { type: "checkbox" })), B = (e) => d(R, v(e, { type: "radio" })), V = (e) => d(R, v(e, {
172
+ type: "checkbox",
173
+ role: "switch"
174
+ })), H = /*#__PURE__*/ C("<div class=dds-dialog-overlay><div role=dialog aria-modal=true tabindex=-1><h2 class=dds-dialog__title></h2><!$><!/><!$><!/><!$><!/>"), U = /*#__PURE__*/ C("<div class=dds-dialog__body>"), W = /*#__PURE__*/ C("<div class=dds-dialog__actions>"), G = [
175
+ "a[href]",
176
+ "button:not([disabled])",
177
+ "input:not([disabled])",
178
+ "select:not([disabled])",
179
+ "textarea:not([disabled])",
180
+ "[tabindex]:not([tabindex='-1'])"
181
+ ].join(",");
182
+ function K(e) {
183
+ let n = a(), i = () => e.id ?? `dds-dialog-${n}`, s = () => `${i()}-title`, c = () => e.description ? `${i()}-description` : void 0, [l, f] = D({
184
+ value: () => e.open,
185
+ defaultValue: e.defaultOpen ?? !1,
186
+ onChange: e.onOpenChange
187
+ }), v, x = null;
188
+ return r(() => {
189
+ if (!l()) return;
190
+ x = document.activeElement instanceof HTMLElement ? document.activeElement : null, queueMicrotask(() => {
191
+ (v?.querySelector(G) ?? v)?.focus();
192
+ });
193
+ let t = (t) => {
194
+ if (t.key === "Escape" && e.closeOnEscape !== !1) {
195
+ t.preventDefault(), f(!1);
196
+ return;
197
+ }
198
+ if (t.key !== "Tab" || !v) return;
199
+ let n = [...v.querySelectorAll(G)].filter((e) => !e.hidden && e.getAttribute("aria-hidden") !== "true");
200
+ if (n.length === 0) {
201
+ t.preventDefault(), v.focus();
202
+ return;
203
+ }
204
+ let r = n[0], i = n[n.length - 1];
205
+ t.shiftKey && document.activeElement === r ? (t.preventDefault(), i.focus()) : !t.shiftKey && document.activeElement === i && (t.preventDefault(), r.focus());
206
+ };
207
+ document.addEventListener("keydown", t), o(() => {
208
+ document.removeEventListener("keydown", t), queueMicrotask(() => x?.focus());
209
+ });
210
+ }), d(t, {
211
+ get when() {
212
+ return l();
213
+ },
214
+ get children() {
215
+ var t = m(H), n = t.firstChild, r = n.firstChild, a = r.nextSibling, [o, l] = h(a.nextSibling), d = o.nextSibling, [x, S] = h(d.nextSibling), C = x.nextSibling, [T, E] = h(C.nextSibling);
216
+ t.$$pointerdown = (t) => {
217
+ t.target === t.currentTarget && e.closeOnOutside !== !1 && f(!1);
218
+ };
219
+ var D = v;
220
+ return typeof D == "function" ? w(D, n) : v = n, g(r, () => e.title), g(n, (() => {
221
+ var t = _(() => !!e.description);
222
+ return () => t() && (() => {
223
+ var t = m(U);
224
+ return g(t, () => e.description), p(() => b(t, "id", c())), t;
225
+ })();
226
+ })(), o, l), g(n, () => e.children, x, S), g(n, (() => {
227
+ var t = _(() => !!e.actions);
228
+ return () => t() && (() => {
229
+ var t = m(W);
230
+ return g(t, () => e.actions), t;
231
+ })();
232
+ })(), T, E), p((t) => {
233
+ var a = i(), o = O("dds-dialog", e.class), l = s(), d = k(c()), f = s();
234
+ return a !== t.e && b(n, "id", t.e = a), o !== t.t && u(n, t.t = o), l !== t.a && b(n, "aria-labelledby", t.a = l), d !== t.o && b(n, "aria-describedby", t.o = d), f !== t.i && b(r, "id", t.i = f), t;
235
+ }, {
236
+ e: void 0,
237
+ t: void 0,
238
+ a: void 0,
239
+ o: void 0,
240
+ i: void 0
241
+ }), y(), t;
242
+ }
243
+ });
244
+ }
245
+ f(["pointerdown"]);
246
+ //#endregion
247
+ //#region src/icon.tsx
248
+ var q = /*#__PURE__*/ C("<svg><!$><!/><g>"), J = /*#__PURE__*/ C("<title>");
249
+ function ae(e) {
250
+ let [t, n] = c(e, [
251
+ "name",
252
+ "label",
253
+ "size",
254
+ "directional",
255
+ "class"
256
+ ]), r = () => E[t.name], i = () => t.directional ?? T.mirrorInRtl.includes(t.name);
257
+ return (() => {
258
+ var e = m(q), a = e.firstChild, [o, s] = h(a.nextSibling), c = o.nextSibling;
259
+ return S(e, v(n, {
260
+ get class() {
261
+ return O(i() && T.cssClass, t.class);
262
+ },
263
+ get viewBox() {
264
+ return r().viewBox;
265
+ },
266
+ get width() {
267
+ return t.size ?? 24;
268
+ },
269
+ get height() {
270
+ return t.size ?? 24;
271
+ },
272
+ fill: "none",
273
+ stroke: "currentColor",
274
+ get "stroke-width"() {
275
+ return r().strokeWidth;
276
+ },
277
+ "stroke-linecap": "round",
278
+ "stroke-linejoin": "round",
279
+ get role() {
280
+ return t.label ? "img" : void 0;
281
+ },
282
+ get "aria-label"() {
283
+ return t.label;
284
+ },
285
+ get "aria-hidden"() {
286
+ return t.label ? void 0 : "true";
287
+ }
288
+ }), !0, !0), g(e, (() => {
289
+ var e = _(() => !!t.label);
290
+ return () => e() && (() => {
291
+ var e = m(J);
292
+ return g(e, () => t.label), e;
293
+ })();
294
+ })(), o, s), p(() => x(c, "innerHTML", r().body)), y(), e;
295
+ })();
296
+ }
297
+ //#endregion
298
+ //#region src/tabs.tsx
299
+ var Y = /*#__PURE__*/ C("<div>"), oe = /*#__PURE__*/ C("<button>"), X = n(), Z = () => {
300
+ let e = l(X);
301
+ if (!e) throw Error("Tab components must be rendered inside <Tabs>");
302
+ return e;
303
+ };
304
+ function se(e) {
305
+ let t = a(), n = () => e.id ?? `dds-tabs-${t}`, [r, i] = D({
306
+ value: () => e.value,
307
+ defaultValue: e.defaultValue,
308
+ onChange: e.onValueChange
309
+ }), o = [], s = {
310
+ value: r,
311
+ setValue: i,
312
+ orientation: e.orientation ?? "horizontal",
313
+ register(e) {
314
+ return o.push(e), () => {
315
+ let t = o.indexOf(e);
316
+ t >= 0 && o.splice(t, 1);
317
+ };
318
+ },
319
+ tabs: () => o,
320
+ tabId: (e) => `${n()}-tab-${e}`,
321
+ panelId: (e) => `${n()}-panel-${e}`
322
+ };
323
+ return d(X.Provider, {
324
+ value: s,
325
+ get children() {
326
+ return e.children;
327
+ }
328
+ });
329
+ }
330
+ function Q(e) {
331
+ let t = Z(), [n, r] = c(e, [
332
+ "class",
333
+ "children",
334
+ "onKeyDown"
335
+ ]), i = (e) => {
336
+ if (typeof n.onKeyDown == "function" && n.onKeyDown(e), e.defaultPrevented) return;
337
+ let r = t.tabs().filter((e) => !e.disabled);
338
+ if (!r.length) return;
339
+ let i = r.findIndex((e) => e.element === document.activeElement), a = i, o = document.documentElement.dir === "rtl";
340
+ if (e.key === "Home") a = 0;
341
+ else if (e.key === "End") a = r.length - 1;
342
+ else if (e.key === "ArrowRight" && t.orientation === "horizontal") a = (i + (o ? -1 : 1) + r.length) % r.length;
343
+ else if (e.key === "ArrowLeft" && t.orientation === "horizontal") a = (i + (o ? 1 : -1) + r.length) % r.length;
344
+ else if (e.key === "ArrowDown" && t.orientation === "vertical") a = (i + 1) % r.length;
345
+ else if (e.key === "ArrowUp" && t.orientation === "vertical") a = (i - 1 + r.length) % r.length;
346
+ else return;
347
+ e.preventDefault();
348
+ let s = r[a];
349
+ s && (s.element.focus(), t.setValue(s.value));
350
+ };
351
+ return (() => {
352
+ var e = m(Y);
353
+ return S(e, v(r, {
354
+ get class() {
355
+ return O("dds-tabs", n.class);
356
+ },
357
+ role: "tablist",
358
+ get "aria-orientation"() {
359
+ return t.orientation;
360
+ },
361
+ onKeyDown: i
362
+ }), !1, !0), g(e, () => n.children), y(), e;
363
+ })();
364
+ }
365
+ function ce(e) {
366
+ let t = Z(), [n, r] = c(e, [
367
+ "value",
368
+ "class",
369
+ "children",
370
+ "disabled",
371
+ "onClick"
372
+ ]), i;
373
+ return s(() => {
374
+ let e = t.register({
375
+ value: n.value,
376
+ element: i,
377
+ disabled: !!n.disabled
378
+ });
379
+ o(e);
380
+ }), (() => {
381
+ var e = m(oe), a = i;
382
+ return typeof a == "function" ? w(a, e) : i = e, S(e, v(r, {
383
+ get id() {
384
+ return t.tabId(n.value);
385
+ },
386
+ type: "button",
387
+ role: "tab",
388
+ get class() {
389
+ return O("dds-tab", n.class);
390
+ },
391
+ get "aria-selected"() {
392
+ return t.value() === n.value;
393
+ },
394
+ get "aria-controls"() {
395
+ return t.panelId(n.value);
396
+ },
397
+ get tabindex() {
398
+ return t.value() === n.value ? 0 : -1;
399
+ },
400
+ get disabled() {
401
+ return n.disabled;
402
+ },
403
+ onClick: (e) => {
404
+ typeof n.onClick == "function" && n.onClick(e), e.defaultPrevented || t.setValue(n.value);
405
+ }
406
+ }), !1, !0), g(e, () => n.children), y(), e;
407
+ })();
408
+ }
409
+ function le(e) {
410
+ let t = Z(), [n, r] = c(e, [
411
+ "value",
412
+ "class",
413
+ "children"
414
+ ]);
415
+ return (() => {
416
+ var e = m(Y);
417
+ return S(e, v(r, {
418
+ get id() {
419
+ return t.panelId(n.value);
420
+ },
421
+ role: "tabpanel",
422
+ get class() {
423
+ return n.class;
424
+ },
425
+ get "aria-labelledby"() {
426
+ return t.tabId(n.value);
427
+ },
428
+ get hidden() {
429
+ return t.value() !== n.value;
430
+ },
431
+ tabindex: "0"
432
+ }), !1, !0), g(e, () => n.children), y(), e;
433
+ })();
434
+ }
435
+ //#endregion
436
+ //#region src/toast.tsx
437
+ var ue = /*#__PURE__*/ C("<div aria-live=polite aria-relevant=\"additions removals\">"), de = /*#__PURE__*/ C("<div><span></span><!$><!/>"), fe = /*#__PURE__*/ C("<button type=button class=\"dds-iconbtn dds-iconbtn--sm\">×"), $ = n();
438
+ function pe(t) {
439
+ let [n, r] = i([]), a = /* @__PURE__ */ new Map(), s = 0, c = (e) => {
440
+ let t = a.get(e);
441
+ t && clearTimeout(t), a.delete(e), r((t) => t.filter((t) => t.id !== e));
442
+ }, l = {
443
+ show(e) {
444
+ let n = `dds-toast-${++s}`;
445
+ r((t) => [...t, {
446
+ ...e,
447
+ id: n
448
+ }]);
449
+ let i = e.duration ?? t.defaultDuration ?? 5e3;
450
+ return i > 0 && a.set(n, setTimeout(() => c(n), i)), n;
451
+ },
452
+ dismiss: c,
453
+ clear() {
454
+ for (let e of a.values()) clearTimeout(e);
455
+ a.clear(), r([]);
456
+ }
457
+ };
458
+ return o(l.clear), d($.Provider, {
459
+ value: l,
460
+ get children() {
461
+ return [_(() => t.children), (() => {
462
+ var r = m(ue);
463
+ return g(r, d(e, {
464
+ get each() {
465
+ return n();
466
+ },
467
+ children: (e) => (() => {
468
+ var n = m(de), r = n.firstChild, i = r.nextSibling, [a, o] = h(i.nextSibling);
469
+ return g(r, () => e.message), g(n, (() => {
470
+ var n = _(() => !!t.dismissLabel);
471
+ return () => n() ? (() => {
472
+ var n = m(fe);
473
+ return n.$$click = () => c(e.id), p(() => b(n, "aria-label", typeof t.dismissLabel == "function" ? t.dismissLabel(e) : t.dismissLabel)), y(), n;
474
+ })() : null;
475
+ })(), a, o), p((t) => {
476
+ var r = O("dds-toast", `dds-toast--${e.tone ?? "info"}`), i = e.tone === "danger" ? "alert" : "status";
477
+ return r !== t.e && u(n, t.e = r), i !== t.t && b(n, "role", t.t = i), t;
478
+ }, {
479
+ e: void 0,
480
+ t: void 0
481
+ }), n;
482
+ })()
483
+ })), p(() => u(r, O("dds-toast-region", t.class))), r;
484
+ })()];
485
+ }
486
+ });
487
+ }
488
+ function me() {
489
+ let e = l($);
490
+ if (!e) throw Error("useToast must be called inside <ToastProvider>");
491
+ return e;
492
+ }
493
+ f(["click"]);
494
+ //#endregion
495
+ //#region src/tooltip.tsx
496
+ var he = /*#__PURE__*/ C("<span><!$><!/><span class=dds-tooltip__bubble role=tooltip>");
497
+ function ge(e) {
498
+ let t = a(), n = () => e.id ?? `dds-tooltip-${t}`, [r, i] = D({
499
+ value: () => e.open,
500
+ defaultValue: e.defaultOpen ?? !1,
501
+ onChange: e.onOpenChange
502
+ }), o = {
503
+ "aria-describedby": n(),
504
+ onFocus: () => i(!0),
505
+ onBlur: () => i(!1),
506
+ onPointerEnter: () => i(!0),
507
+ onPointerLeave: () => i(!1)
508
+ };
509
+ return (() => {
510
+ var t = m(he), i = t.firstChild, [a, s] = h(i.nextSibling), c = a.nextSibling;
511
+ return g(t, () => e.children(o), a, s), g(c, () => e.content), p((i) => {
512
+ var a = O("dds-tooltip", e.class), o = n(), s = !r();
513
+ return a !== i.e && u(t, i.e = a), o !== i.t && b(c, "id", i.t = o), s !== i.a && x(c, "hidden", i.a = s), i;
514
+ }, {
515
+ e: void 0,
516
+ t: void 0,
517
+ a: void 0
518
+ }), t;
519
+ })();
520
+ }
521
+ //#endregion
522
+ export { P as Button, z as Checkbox, K as Dialog, I as Field, ae as Icon, F as IconButton, B as Radio, L as Select, V as Switch, ce as Tab, Q as TabList, le as TabPanel, se as Tabs, pe as ToastProvider, ge as Tooltip, D as createControllableSignal, me as useToast };
523
+
524
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["createUniqueId","splitProps","JSX","ParentProps","createControllableSignal","classes","describedBy","ButtonTone","ControlSize","ButtonProps","Omit","ButtonHTMLAttributes","HTMLButtonElement","class","tone","size","loading","Button","props","local","rest","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_el$3","_co$","_$getNextMarker","nextSibling","_el$4","_el$5","_co$2","_$spread","_$mergeProps","type","undefined","disabled","aria-busy","_$insert","_c$","_$memo","_tmpl$2","children","_$runHydrationEvents","IconButtonProps","Element","IconButton","_el$7","_tmpl$3","_c$2","FieldControlProps","id","FieldProps","label","helpText","error","required","Field","generated","helpId","errorId","control","_el$9","_tmpl$4","_el$0","_el$1","_el$10","_co$3","_el$11","_el$12","_co$4","_el$13","_el$14","_co$5","_el$15","_el$16","_co$6","_el$17","_el$18","_co$7","_c$3","_tmpl$5","_c$4","_c$5","_el$20","_tmpl$6","_$effect","_$setAttribute","_c$6","_el$21","_tmpl$7","_p$","_v$","_v$2","e","_$className","t","SelectProps","SelectHTMLAttributes","HTMLSelectElement","invalid","Select","_el$22","_tmpl$8","_el$23","aria-invalid","CheckableProps","InputHTMLAttributes","HTMLInputElement","checked","defaultChecked","onCheckedChange","inputClass","Checkable","role","setChecked","value","defaultValue","onChange","_el$24","_tmpl$9","_el$25","_el$26","event","currentTarget","CheckboxProps","Checkbox","_$createComponent","RadioProps","Radio","SwitchProps","Switch","Show","createEffect","createUniqueId","onCleanup","JSX","createControllableSignal","classes","describedBy","focusable","join","DialogProps","open","defaultOpen","onOpenChange","title","Element","description","children","actions","closeOnEscape","closeOnOutside","class","id","Dialog","props","generated","titleId","descriptionId","undefined","setOpen","value","defaultValue","onChange","panel","HTMLDivElement","previouslyFocused","HTMLElement","document","activeElement","queueMicrotask","first","querySelector","focus","onKeyDown","event","KeyboardEvent","key","preventDefault","candidates","querySelectorAll","filter","element","hidden","getAttribute","length","last","shiftKey","addEventListener","removeEventListener","_$createComponent","when","_el$","_$getNextElement","_tmpl$","_el$2","firstChild","_el$3","_el$4","nextSibling","_el$5","_co$","_$getNextMarker","_el$6","_el$7","_co$2","_el$8","_el$9","_co$3","$$pointerdown","target","currentTarget","_ref$","_$use","_$insert","_c$","_$memo","_el$0","_tmpl$2","_$effect","_$setAttribute","_c$2","_el$1","_tmpl$3","_p$","_v$","_v$2","_v$3","_v$4","_v$5","e","t","_$className","a","o","i","_$runHydrationEvents","_$delegateEvents","directionPolicy","icons","DdsIconName","splitProps","JSX","classes","IconProps","Omit","SvgSVGAttributes","SVGSVGElement","name","label","size","directional","Icon","props","local","rest","icon","mirrorInRtl","includes","_el$","_$getNextElement","_tmpl$","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$2","_$spread","_$mergeProps","class","cssClass","viewBox","width","height","stroke-width","strokeWidth","role","undefined","aria-label","aria-hidden","_$insert","_c$","_$memo","_el$5","_tmpl$2","_$effect","_$setProperty","body","_$runHydrationEvents","createContext","createUniqueId","onCleanup","onMount","splitProps","useContext","Accessor","JSX","ParentProps","createControllableSignal","classes","RegisteredTab","value","element","HTMLButtonElement","disabled","TabsContextValue","setValue","orientation","register","tab","tabs","tabId","panelId","TabsContext","useTabs","context","Error","TabsProps","defaultValue","onValueChange","children","Element","id","Tabs","props","generated","onChange","registered","push","index","indexOf","splice","tabValue","_$createComponent","Provider","TabList","HTMLAttributes","HTMLDivElement","local","rest","onKeyDown","EventHandler","KeyboardEvent","event","defaultPrevented","filter","length","current","findIndex","document","activeElement","next","rtl","documentElement","dir","key","preventDefault","target","focus","_el$","_$getNextElement","_tmpl$","_$spread","_$mergeProps","class","aria-orientation","_$insert","_$runHydrationEvents","TabProps","Omit","ButtonHTMLAttributes","Tab","unregister","Boolean","_el$2","_tmpl$2","_ref$","_$use","aria-selected","aria-controls","tabindex","onClick","TabPanelProps","TabPanel","_el$3","aria-labelledby","hidden","For","createContext","createSignal","onCleanup","useContext","JSX","classes","ToastTone","ToastInput","message","Element","tone","duration","ToastRecord","id","ToastApi","show","toast","dismiss","clear","ToastContext","ToastProviderProps","children","defaultDuration","dismissLabel","class","ToastProvider","props","toasts","setToasts","timers","Map","ReturnType","setTimeout","sequence","timer","get","clearTimeout","delete","current","filter","api","input","set","values","_$createComponent","Provider","value","_$memo","_el$","_$getNextElement","_tmpl$","_$insert","each","_el$2","_tmpl$2","_el$3","firstChild","_el$4","nextSibling","_el$5","_co$","_$getNextMarker","_c$","_el$6","_tmpl$3","$$click","_$effect","_$setAttribute","_$runHydrationEvents","_p$","_v$","_v$2","e","_$className","t","undefined","useToast","context","Error","_$delegateEvents","createUniqueId","JSX","createControllableSignal","classes","TooltipTriggerProps","onFocus","onBlur","onPointerEnter","onPointerLeave","TooltipProps","content","Element","children","props","open","defaultOpen","onOpenChange","id","class","Tooltip","generated","setOpen","value","defaultValue","onChange","trigger","_el$","_$getNextElement","_tmpl$","_el$3","firstChild","_el$4","_co$","_$getNextMarker","nextSibling","_el$2","_$insert","_$effect","_p$","_v$","_v$2","_v$3","e","_$className","t","_$setAttribute","a","_$setProperty","undefined"],"sources":["../src/controllable.ts","../src/utils.ts","../src/controls.tsx","../src/dialog.tsx","../src/icon.tsx","../src/tabs.tsx","../src/toast.tsx","../src/tooltip.tsx"],"sourcesContent":["import { createSignal, type Accessor } from \"solid-js\";\n\nexport interface ControllableOptions<T> {\n value: Accessor<T | undefined>;\n defaultValue: T;\n onChange: ((value: T) => void) | undefined;\n}\n\nexport type ControllableSetter<T> = (next: T | ((previous: T) => T)) => T;\n\nexport function createControllableSignal<T>(options: ControllableOptions<T>): [Accessor<T>, ControllableSetter<T>] {\n const [internal, setInternal] = createSignal(options.defaultValue);\n const value: Accessor<T> = () => options.value() ?? internal();\n const setInternalValue = setInternal as unknown as ControllableSetter<T>;\n const setValue: ControllableSetter<T> = (next) => {\n const resolved = typeof next === \"function\"\n ? (next as (previous: T) => T)(value())\n : next;\n if (options.value() === undefined) setInternalValue(() => resolved);\n options.onChange?.(resolved);\n return resolved;\n };\n return [value, setValue];\n}\n","export function classes(...values: Array<string | false | null | undefined>): string {\n return values.filter(Boolean).join(\" \");\n}\n\nexport function describedBy(...ids: Array<string | false | null | undefined>): string | undefined {\n const value = ids.filter(Boolean).join(\" \");\n return value || undefined;\n}\n","import {\n createUniqueId,\n splitProps,\n type JSX,\n type ParentProps,\n} from \"solid-js\";\n\nimport { createControllableSignal } from \"./controllable\";\nimport { classes, describedBy } from \"./utils\";\n\nexport type ButtonTone = \"primary\" | \"secondary\" | \"ghost\" | \"danger\";\nexport type ControlSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps extends Omit<JSX.ButtonHTMLAttributes<HTMLButtonElement>, \"class\"> {\n class?: string;\n tone?: ButtonTone;\n size?: ControlSize;\n loading?: boolean;\n}\n\nexport function Button(props: ParentProps<ButtonProps>) {\n const [local, rest] = splitProps(props, [\"class\", \"tone\", \"size\", \"loading\", \"disabled\", \"type\", \"children\"]);\n return (\n <button\n {...rest}\n type={local.type ?? \"button\"}\n class={classes(\"dds-btn\", `dds-btn--${local.tone ?? \"primary\"}`, local.size !== \"md\" && local.size ? `dds-btn--${local.size}` : undefined, local.class)}\n disabled={local.disabled || local.loading}\n aria-busy={local.loading ? \"true\" : undefined}\n >\n {local.loading && <span class=\"dds-spinner\" aria-hidden=\"true\" />}\n {local.children}\n </button>\n );\n}\n\nexport interface IconButtonProps extends Omit<ButtonProps, \"tone\" | \"children\"> {\n \"aria-label\": string;\n tone?: \"ghost\" | \"secondary\" | \"danger\";\n children: JSX.Element;\n}\n\nexport function IconButton(props: IconButtonProps) {\n const [local, rest] = splitProps(props, [\"class\", \"tone\", \"size\", \"loading\", \"disabled\", \"type\", \"children\"]);\n return (\n <button\n {...rest}\n type={local.type ?? \"button\"}\n class={classes(\"dds-iconbtn\", local.tone && local.tone !== \"ghost\" ? `dds-iconbtn--${local.tone}` : undefined, local.size !== \"md\" && local.size ? `dds-iconbtn--${local.size}` : undefined, local.class)}\n disabled={local.disabled || local.loading}\n aria-busy={local.loading ? \"true\" : undefined}\n >\n {local.loading ? <span class=\"dds-spinner\" aria-hidden=\"true\" /> : local.children}\n </button>\n );\n}\n\nexport interface FieldControlProps {\n id: string;\n \"aria-describedby\": string | undefined;\n \"aria-invalid\": \"true\" | undefined;\n \"aria-required\": \"true\" | undefined;\n}\n\nexport interface FieldProps {\n id?: string;\n label: JSX.Element;\n helpText?: JSX.Element;\n error?: JSX.Element;\n required?: boolean;\n class?: string;\n children: JSX.Element | ((props: FieldControlProps) => JSX.Element);\n}\n\nexport function Field(props: FieldProps) {\n const generated = createUniqueId();\n const id = () => props.id ?? `dds-field-${generated}`;\n const helpId = () => props.helpText ? `${id()}-help` : undefined;\n const errorId = () => props.error ? `${id()}-error` : undefined;\n const control = (): FieldControlProps => ({\n id: id(),\n \"aria-describedby\": describedBy(helpId(), errorId()),\n \"aria-invalid\": props.error ? \"true\" : undefined,\n \"aria-required\": props.required ? \"true\" : undefined,\n });\n return (\n <div class={classes(\"dds-field\", props.error ? \"dds-field--error\" : undefined, props.class)}>\n <label class=\"dds-field__label\" for={id()}>{props.label}{props.required && <span aria-hidden=\"true\"> *</span>}</label>\n {typeof props.children === \"function\" ? props.children(control()) : props.children}\n {props.helpText && <div id={helpId()} class=\"dds-field__help\">{props.helpText}</div>}\n {props.error && <div id={errorId()} class=\"dds-field__error\" role=\"alert\">{props.error}</div>}\n </div>\n );\n}\n\nexport interface SelectProps extends Omit<JSX.SelectHTMLAttributes<HTMLSelectElement>, \"class\"> {\n class?: string;\n invalid?: boolean;\n}\n\nexport function Select(props: ParentProps<SelectProps>) {\n const [local, rest] = splitProps(props, [\"class\", \"invalid\", \"children\"]);\n return (\n <span class={classes(\"dds-select\", local.class)}>\n <select {...rest} class=\"dds-select__input\" aria-invalid={local.invalid ? \"true\" : undefined}>\n {local.children}\n </select>\n </span>\n );\n}\n\ninterface CheckableProps extends Omit<JSX.InputHTMLAttributes<HTMLInputElement>, \"checked\" | \"class\" | \"onChange\" | \"role\" | \"type\"> {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n label: JSX.Element;\n class?: string;\n inputClass?: string;\n}\n\nfunction Checkable(props: CheckableProps & { type: \"checkbox\" | \"radio\"; role?: \"switch\" }) {\n const [local, rest] = splitProps(props, [\"checked\", \"defaultChecked\", \"onCheckedChange\", \"label\", \"class\", \"inputClass\", \"type\", \"role\"]);\n const [checked, setChecked] = createControllableSignal({\n value: () => local.checked,\n defaultValue: local.defaultChecked ?? false,\n onChange: local.onCheckedChange,\n });\n return (\n <label class={classes(local.role === \"switch\" ? \"dds-switch\" : \"dds-check\", local.class)}>\n <input\n {...rest}\n type={local.type}\n role={local.role}\n class={classes(local.role === \"switch\" ? \"dds-switch__input\" : \"dds-check__input\", local.inputClass)}\n checked={checked()}\n onChange={(event) => setChecked(event.currentTarget.checked)}\n />\n <span>{local.label}</span>\n </label>\n );\n}\n\nexport type CheckboxProps = CheckableProps;\nexport const Checkbox = (props: CheckboxProps) => <Checkable {...props} type=\"checkbox\" />;\n\nexport type RadioProps = CheckableProps;\nexport const Radio = (props: RadioProps) => <Checkable {...props} type=\"radio\" />;\n\nexport type SwitchProps = CheckableProps;\nexport const Switch = (props: SwitchProps) => <Checkable {...props} type=\"checkbox\" role=\"switch\" />;\n","import {\n Show,\n createEffect,\n createUniqueId,\n onCleanup,\n type JSX,\n} from \"solid-js\";\n\nimport { createControllableSignal } from \"./controllable\";\nimport { classes, describedBy } from \"./utils\";\n\nexport const focusable = [\n \"a[href]\",\n \"button:not([disabled])\",\n \"input:not([disabled])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"[tabindex]:not([tabindex='-1'])\",\n].join(\",\");\n\nexport interface DialogProps {\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n title: JSX.Element;\n description?: JSX.Element;\n children: JSX.Element;\n actions?: JSX.Element;\n closeOnEscape?: boolean;\n closeOnOutside?: boolean;\n class?: string;\n id?: string;\n}\n\nexport function Dialog(props: DialogProps) {\n const generated = createUniqueId();\n const id = () => props.id ?? `dds-dialog-${generated}`;\n const titleId = () => `${id()}-title`;\n const descriptionId = () => props.description ? `${id()}-description` : undefined;\n const [open, setOpen] = createControllableSignal({\n value: () => props.open,\n defaultValue: props.defaultOpen ?? false,\n onChange: props.onOpenChange,\n });\n let panel: HTMLDivElement | undefined;\n let previouslyFocused: HTMLElement | null = null;\n\n createEffect(() => {\n if (!open()) return;\n previouslyFocused = document.activeElement instanceof HTMLElement ? document.activeElement : null;\n queueMicrotask(() => {\n const first = panel?.querySelector<HTMLElement>(focusable);\n (first ?? panel)?.focus();\n });\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && props.closeOnEscape !== false) {\n event.preventDefault();\n setOpen(false);\n return;\n }\n if (event.key !== \"Tab\" || !panel) return;\n const candidates = [...panel.querySelectorAll<HTMLElement>(focusable)]\n .filter((element) => !element.hidden && element.getAttribute(\"aria-hidden\") !== \"true\");\n if (candidates.length === 0) {\n event.preventDefault();\n panel.focus();\n return;\n }\n const first = candidates[0]!;\n const last = candidates[candidates.length - 1]!;\n if (event.shiftKey && document.activeElement === first) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && document.activeElement === last) {\n event.preventDefault();\n first.focus();\n }\n };\n document.addEventListener(\"keydown\", onKeyDown);\n onCleanup(() => {\n document.removeEventListener(\"keydown\", onKeyDown);\n queueMicrotask(() => previouslyFocused?.focus());\n });\n });\n\n return (\n <Show when={open()}>\n <div\n class=\"dds-dialog-overlay\"\n onPointerDown={(event) => {\n if (event.target === event.currentTarget && props.closeOnOutside !== false) setOpen(false);\n }}\n >\n <div\n ref={panel}\n id={id()}\n class={classes(\"dds-dialog\", props.class)}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId()}\n aria-describedby={describedBy(descriptionId())}\n tabindex=\"-1\"\n >\n <h2 id={titleId()} class=\"dds-dialog__title\">{props.title}</h2>\n {props.description && <div id={descriptionId()} class=\"dds-dialog__body\">{props.description}</div>}\n {props.children}\n {props.actions && <div class=\"dds-dialog__actions\">{props.actions}</div>}\n </div>\n </div>\n </Show>\n );\n}\n","import { directionPolicy, icons, type DdsIconName } from \"@devslab/dds-icons\";\nimport { splitProps, type JSX } from \"solid-js\";\n\nimport { classes } from \"./utils\";\n\nexport interface IconProps extends Omit<JSX.SvgSVGAttributes<SVGSVGElement>, \"name\" | \"children\"> {\n name: DdsIconName;\n label?: string;\n size?: number | string;\n directional?: boolean;\n}\n\nexport function Icon(props: IconProps) {\n const [local, rest] = splitProps(props, [\"name\", \"label\", \"size\", \"directional\", \"class\"]);\n const icon = () => icons[local.name];\n const directional = () => local.directional ?? directionPolicy.mirrorInRtl.includes(local.name);\n return (\n <svg\n {...rest}\n class={classes(directional() && directionPolicy.cssClass, local.class)}\n viewBox={icon().viewBox}\n width={local.size ?? 24}\n height={local.size ?? 24}\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width={icon().strokeWidth}\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n role={local.label ? \"img\" : undefined}\n aria-label={local.label}\n aria-hidden={local.label ? undefined : \"true\"}\n >\n {local.label && <title>{local.label}</title>}\n <g innerHTML={icon().body} />\n </svg>\n );\n}\n","import {\n createContext,\n createUniqueId,\n onCleanup,\n onMount,\n splitProps,\n useContext,\n type Accessor,\n type JSX,\n type ParentProps,\n} from \"solid-js\";\n\nimport { createControllableSignal } from \"./controllable\";\nimport { classes } from \"./utils\";\n\ninterface RegisteredTab { value: string; element: HTMLButtonElement; disabled: boolean }\ninterface TabsContextValue {\n value: Accessor<string>;\n setValue: (value: string) => void;\n orientation: \"horizontal\" | \"vertical\";\n register: (tab: RegisteredTab) => () => void;\n tabs: () => RegisteredTab[];\n tabId: (value: string) => string;\n panelId: (value: string) => string;\n}\n\nconst TabsContext = createContext<TabsContextValue>();\nconst useTabs = () => {\n const context = useContext(TabsContext);\n if (!context) throw new Error(\"Tab components must be rendered inside <Tabs>\");\n return context;\n};\n\nexport interface TabsProps {\n value?: string;\n defaultValue: string;\n onValueChange?: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n children: JSX.Element;\n id?: string;\n}\n\nexport function Tabs(props: TabsProps) {\n const generated = createUniqueId();\n const id = () => props.id ?? `dds-tabs-${generated}`;\n const [value, setValue] = createControllableSignal({\n value: () => props.value,\n defaultValue: props.defaultValue,\n onChange: props.onValueChange,\n });\n const registered: RegisteredTab[] = [];\n const context: TabsContextValue = {\n value,\n setValue,\n orientation: props.orientation ?? \"horizontal\",\n register(tab) {\n registered.push(tab);\n return () => {\n const index = registered.indexOf(tab);\n if (index >= 0) registered.splice(index, 1);\n };\n },\n tabs: () => registered,\n tabId: (tabValue) => `${id()}-tab-${tabValue}`,\n panelId: (tabValue) => `${id()}-panel-${tabValue}`,\n };\n return <TabsContext.Provider value={context}>{props.children}</TabsContext.Provider>;\n}\n\nexport function TabList(props: ParentProps<JSX.HTMLAttributes<HTMLDivElement>>) {\n const context = useTabs();\n const [local, rest] = splitProps(props, [\"class\", \"children\", \"onKeyDown\"]);\n const onKeyDown: JSX.EventHandler<HTMLDivElement, KeyboardEvent> = (event) => {\n if (typeof local.onKeyDown === \"function\") local.onKeyDown(event);\n if (event.defaultPrevented) return;\n const tabs = context.tabs().filter((tab) => !tab.disabled);\n if (!tabs.length) return;\n const current = tabs.findIndex((tab) => tab.element === document.activeElement);\n let next = current;\n const rtl = document.documentElement.dir === \"rtl\";\n if (event.key === \"Home\") next = 0;\n else if (event.key === \"End\") next = tabs.length - 1;\n else if (event.key === \"ArrowRight\" && context.orientation === \"horizontal\") next = (current + (rtl ? -1 : 1) + tabs.length) % tabs.length;\n else if (event.key === \"ArrowLeft\" && context.orientation === \"horizontal\") next = (current + (rtl ? 1 : -1) + tabs.length) % tabs.length;\n else if (event.key === \"ArrowDown\" && context.orientation === \"vertical\") next = (current + 1) % tabs.length;\n else if (event.key === \"ArrowUp\" && context.orientation === \"vertical\") next = (current - 1 + tabs.length) % tabs.length;\n else return;\n event.preventDefault();\n const target = tabs[next];\n if (target) {\n target.element.focus();\n context.setValue(target.value);\n }\n };\n return <div {...rest} class={classes(\"dds-tabs\", local.class)} role=\"tablist\" aria-orientation={context.orientation} onKeyDown={onKeyDown}>{local.children}</div>;\n}\n\nexport interface TabProps extends Omit<JSX.ButtonHTMLAttributes<HTMLButtonElement>, \"value\" | \"class\"> {\n value: string;\n class?: string;\n}\n\nexport function Tab(props: ParentProps<TabProps>) {\n const context = useTabs();\n const [local, rest] = splitProps(props, [\"value\", \"class\", \"children\", \"disabled\", \"onClick\"]);\n let element!: HTMLButtonElement;\n onMount(() => {\n const unregister = context.register({ value: local.value, element, disabled: Boolean(local.disabled) });\n onCleanup(unregister);\n });\n return (\n <button\n {...rest}\n ref={element}\n id={context.tabId(local.value)}\n type=\"button\"\n role=\"tab\"\n class={classes(\"dds-tab\", local.class)}\n aria-selected={context.value() === local.value}\n aria-controls={context.panelId(local.value)}\n tabindex={context.value() === local.value ? 0 : -1}\n disabled={local.disabled}\n onClick={(event) => {\n if (typeof local.onClick === \"function\") local.onClick(event);\n if (!event.defaultPrevented) context.setValue(local.value);\n }}\n >{local.children}</button>\n );\n}\n\nexport interface TabPanelProps extends JSX.HTMLAttributes<HTMLDivElement> { value: string }\n\nexport function TabPanel(props: ParentProps<TabPanelProps>) {\n const context = useTabs();\n const [local, rest] = splitProps(props, [\"value\", \"class\", \"children\"]);\n return (\n <div\n {...rest}\n id={context.panelId(local.value)}\n role=\"tabpanel\"\n class={local.class}\n aria-labelledby={context.tabId(local.value)}\n hidden={context.value() !== local.value}\n tabindex=\"0\"\n >{local.children}</div>\n );\n}\n","import {\n For,\n createContext,\n createSignal,\n onCleanup,\n useContext,\n type JSX,\n} from \"solid-js\";\n\nimport { classes } from \"./utils\";\n\nexport type ToastTone = \"success\" | \"warning\" | \"danger\" | \"info\";\nexport interface ToastInput { message: JSX.Element; tone?: ToastTone; duration?: number }\nexport interface ToastRecord extends ToastInput { id: string }\nexport interface ToastApi {\n show: (toast: ToastInput) => string;\n dismiss: (id: string) => void;\n clear: () => void;\n}\n\nconst ToastContext = createContext<ToastApi>();\n\nexport interface ToastProviderProps {\n children: JSX.Element;\n defaultDuration?: number;\n /** Localized accessible name for the optional manual dismiss control. */\n dismissLabel?: string | ((toast: ToastRecord) => string);\n class?: string;\n}\n\nexport function ToastProvider(props: ToastProviderProps) {\n const [toasts, setToasts] = createSignal<ToastRecord[]>([]);\n const timers = new Map<string, ReturnType<typeof setTimeout>>();\n let sequence = 0;\n const dismiss = (id: string) => {\n const timer = timers.get(id);\n if (timer) clearTimeout(timer);\n timers.delete(id);\n setToasts((current) => current.filter((toast) => toast.id !== id));\n };\n const api: ToastApi = {\n show(input) {\n const id = `dds-toast-${++sequence}`;\n setToasts((current) => [...current, { ...input, id }]);\n const duration = input.duration ?? props.defaultDuration ?? 5000;\n if (duration > 0) timers.set(id, setTimeout(() => dismiss(id), duration));\n return id;\n },\n dismiss,\n clear() {\n for (const timer of timers.values()) clearTimeout(timer);\n timers.clear();\n setToasts([]);\n },\n };\n onCleanup(api.clear);\n return (\n <ToastContext.Provider value={api}>\n {props.children}\n <div class={classes(\"dds-toast-region\", props.class)} aria-live=\"polite\" aria-relevant=\"additions removals\">\n <For each={toasts()}>{(toast) => (\n <div class={classes(\"dds-toast\", `dds-toast--${toast.tone ?? \"info\"}`)} role={toast.tone === \"danger\" ? \"alert\" : \"status\"}>\n <span>{toast.message}</span>\n {props.dismissLabel ? (\n <button\n type=\"button\"\n class=\"dds-iconbtn dds-iconbtn--sm\"\n aria-label={typeof props.dismissLabel === \"function\" ? props.dismissLabel(toast) : props.dismissLabel}\n onClick={() => dismiss(toast.id)}\n >×</button>\n ) : null}\n </div>\n )}</For>\n </div>\n </ToastContext.Provider>\n );\n}\n\nexport function useToast(): ToastApi {\n const context = useContext(ToastContext);\n if (!context) throw new Error(\"useToast must be called inside <ToastProvider>\");\n return context;\n}\n","import { createUniqueId, type JSX } from \"solid-js\";\n\nimport { createControllableSignal } from \"./controllable\";\nimport { classes } from \"./utils\";\n\nexport interface TooltipTriggerProps {\n \"aria-describedby\": string;\n onFocus: () => void;\n onBlur: () => void;\n onPointerEnter: () => void;\n onPointerLeave: () => void;\n}\n\nexport interface TooltipProps {\n content: JSX.Element;\n children: (props: TooltipTriggerProps) => JSX.Element;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n id?: string;\n class?: string;\n}\n\nexport function Tooltip(props: TooltipProps) {\n const generated = createUniqueId();\n const id = () => props.id ?? `dds-tooltip-${generated}`;\n const [open, setOpen] = createControllableSignal({\n value: () => props.open,\n defaultValue: props.defaultOpen ?? false,\n onChange: props.onOpenChange,\n });\n const trigger: TooltipTriggerProps = {\n \"aria-describedby\": id(),\n onFocus: () => setOpen(true),\n onBlur: () => setOpen(false),\n onPointerEnter: () => setOpen(true),\n onPointerLeave: () => setOpen(false),\n };\n return (\n <span class={classes(\"dds-tooltip\", props.class)}>\n {props.children(trigger)}\n <span id={id()} class=\"dds-tooltip__bubble\" role=\"tooltip\" hidden={!open()}>{props.content}</span>\n </span>\n );\n}\n"],"mappings":"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"}