@mkbabb/glass-ui 3.3.0 → 3.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/{DataTable-FfkaAg2z.js → DataTable-DyKc_26a.js} +144 -106
  2. package/dist/{NumberFieldContent-iOTQ5rGO.js → NumberFieldContent-jO-zGOHf.js} +1 -1
  3. package/dist/api/index.d.ts +1 -0
  4. package/dist/{button-Ckn3eDfB.js → button-i8Ek5vvg.js} +1 -1
  5. package/dist/button.js +1 -1
  6. package/dist/carousel.js +1 -1
  7. package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +27 -0
  8. package/dist/components/custom/deck-progress/index.d.ts +2 -0
  9. package/dist/components/custom/dock/composables/useLayerTransition.d.ts +11 -0
  10. package/dist/components/ui/data-table/composables/useDataTableResponsive.d.ts +28 -0
  11. package/dist/components/ui/data-table/composables/useDataTableRowIdentity.d.ts +33 -0
  12. package/dist/composables/dark/useGlobalDark.d.ts +17 -6
  13. package/dist/composables/dom/index.d.ts +3 -0
  14. package/dist/composables/dom/useBreakpoint.d.ts +38 -0
  15. package/dist/composables/dom/useIdleReady.d.ts +63 -0
  16. package/dist/composables/dom/useTokenColor.d.ts +13 -0
  17. package/dist/composables/dom/useViewportReady.d.ts +87 -0
  18. package/dist/composables/glass/index.d.ts +1 -1
  19. package/dist/composables/glass/useGlassRenderer.d.ts +10 -3
  20. package/dist/composables/motion/useAnimatedNumber.d.ts +8 -2
  21. package/dist/composables/motion/useCountup.d.ts +8 -2
  22. package/dist/composables/motion/useNumericTransition.d.ts +31 -9
  23. package/dist/composables/motion/useViewTransition.d.ts +16 -1
  24. package/dist/confirm-dialog.js +1 -1
  25. package/dist/data-table.js +1 -1
  26. package/dist/dock.js +169 -158
  27. package/dist/dom.js +4 -4
  28. package/dist/glass-panel.js +14 -14
  29. package/dist/glass-ui.css +1 -1
  30. package/dist/glass-ui.js +134 -119
  31. package/dist/goo-blob.js +108 -89
  32. package/dist/index.d.ts +1 -0
  33. package/dist/labeled-field.js +1 -1
  34. package/dist/motion-core.js +1 -1
  35. package/dist/number-field.js +1 -1
  36. package/dist/search.js +1 -1
  37. package/dist/{slider-BOh8ycfZ.js → slider-CgNzRSh6.js} +1 -1
  38. package/dist/slider.js +1 -1
  39. package/dist/styles/components.css +1 -1
  40. package/dist/styles/dock.css +112 -48
  41. package/dist/styles/glass.css +44 -1
  42. package/dist/styles/instrument-chassis.css +10 -13
  43. package/dist/styles/instrument-rail.css +11 -12
  44. package/dist/styles/tokens.css +9 -7
  45. package/dist/styles/utilities.css +20 -0
  46. package/dist/styles/view-transition.css +24 -0
  47. package/dist/tabs.js +1 -1
  48. package/dist/timeline.js +1 -1
  49. package/dist/useViewTransition-CJnqg6wl.js +21 -0
  50. package/dist/useViewportReady-Dcvf0c4p.js +191 -0
  51. package/package.json +5 -3
  52. package/src/styles/dock.css +112 -48
  53. package/src/styles/glass.css +44 -1
  54. package/src/styles/instrument-chassis.css +10 -13
  55. package/src/styles/instrument-rail.css +11 -12
  56. package/src/styles/tokens.css +9 -7
  57. package/src/styles/utilities.css +20 -0
  58. package/src/styles/view-transition.css +24 -0
  59. package/dist/useClipboard-D8vFyRCa.js +0 -97
  60. package/dist/useViewTransition-D4ssvnXZ.js +0 -18
@@ -1,9 +1,9 @@
1
1
  import { t as e } from "./cn-DJXf4yaB.js";
2
- import { n as t } from "./button-Ckn3eDfB.js";
2
+ import { n as t } from "./button-i8Ek5vvg.js";
3
3
  import { t as n } from "./_plugin-vue_export-helper-C1je1s0u.js";
4
4
  import { n as r, r as i, t as a } from "./ContextMenuContent-De01_83g.js";
5
5
  import { t as o } from "./useResizeObserver-DX-STszm.js";
6
- import { Fragment as s, computed as c, createBlock as l, createCommentVNode as u, createElementBlock as d, createElementVNode as f, createTextVNode as p, createVNode as m, defineComponent as h, mergeModels as g, mergeProps as _, normalizeClass as v, openBlock as y, ref as b, renderList as x, renderSlot as S, resolveDynamicComponent as C, toDisplayString as w, unref as T, useModel as E, useSlots as ee, withCtx as D, withModifiers as O } from "vue";
6
+ import { Fragment as s, computed as c, createBlock as l, createCommentVNode as u, createElementBlock as d, createElementVNode as f, createTextVNode as p, createVNode as m, defineComponent as h, mergeModels as g, mergeProps as _, normalizeClass as v, openBlock as y, ref as b, renderList as x, renderSlot as S, resolveDynamicComponent as C, toDisplayString as w, toValue as T, unref as E, useModel as ee, useSlots as te, withCtx as D, withModifiers as O } from "vue";
7
7
  //#region src/components/ui/table/Table.vue?vue&type=script&setup=true&lang.ts
8
8
  var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
9
9
  __name: "Table",
@@ -16,7 +16,7 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
16
16
  ] } },
17
17
  setup(t) {
18
18
  let n = t;
19
- return (t, r) => (y(), d("div", k, [f("table", { class: v(T(e)("w-full caption-bottom text-sm", n.class)) }, [S(t.$slots, "default")], 2)]));
19
+ return (t, r) => (y(), d("div", k, [f("table", { class: v(E(e)("w-full caption-bottom text-sm", n.class)) }, [S(t.$slots, "default")], 2)]));
20
20
  }
21
21
  }), j = /* @__PURE__ */ h({
22
22
  __name: "TableBody",
@@ -29,7 +29,7 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
29
29
  ] } },
30
30
  setup(t) {
31
31
  let n = t;
32
- return (t, r) => (y(), d("tbody", { class: v(T(e)("[&_tr:last-child]:border-0", n.class)) }, [S(t.$slots, "default")], 2));
32
+ return (t, r) => (y(), d("tbody", { class: v(E(e)("[&_tr:last-child]:border-0", n.class)) }, [S(t.$slots, "default")], 2));
33
33
  }
34
34
  }), M = /* @__PURE__ */ h({
35
35
  __name: "TableCell",
@@ -42,7 +42,7 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
42
42
  ] } },
43
43
  setup(t) {
44
44
  let n = t;
45
- return (t, r) => (y(), d("td", { class: v(T(e)("table-cell align-middle [&:has([role=checkbox])]:pr-0", n.class)) }, [S(t.$slots, "default")], 2));
45
+ return (t, r) => (y(), d("td", { class: v(E(e)("table-cell align-middle [&:has([role=checkbox])]:pr-0", n.class)) }, [S(t.$slots, "default")], 2));
46
46
  }
47
47
  }), N = /* @__PURE__ */ h({
48
48
  __name: "TableHead",
@@ -55,7 +55,7 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
55
55
  ] } },
56
56
  setup(t) {
57
57
  let n = t;
58
- return (t, r) => (y(), d("th", { class: v(T(e)("table-head text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0", n.class)) }, [S(t.$slots, "default")], 2));
58
+ return (t, r) => (y(), d("th", { class: v(E(e)("table-head text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0", n.class)) }, [S(t.$slots, "default")], 2));
59
59
  }
60
60
  }), P = /* @__PURE__ */ h({
61
61
  __name: "TableHeader",
@@ -68,7 +68,7 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
68
68
  ] } },
69
69
  setup(t) {
70
70
  let n = t;
71
- return (t, r) => (y(), d("thead", { class: v(T(e)("[&_tr]:border-b", n.class)) }, [S(t.$slots, "default")], 2));
71
+ return (t, r) => (y(), d("thead", { class: v(E(e)("[&_tr]:border-b", n.class)) }, [S(t.$slots, "default")], 2));
72
72
  }
73
73
  }), F = /* @__PURE__ */ h({
74
74
  __name: "TableRow",
@@ -81,7 +81,7 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
81
81
  ] } },
82
82
  setup(t) {
83
83
  let n = t;
84
- return (t, r) => (y(), d("tr", { class: v(T(e)("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted", n.class)) }, [S(t.$slots, "default")], 2));
84
+ return (t, r) => (y(), d("tr", { class: v(E(e)("border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted", n.class)) }, [S(t.$slots, "default")], 2));
85
85
  }
86
86
  }), I = { class: "flex items-center justify-center py-10" }, L = /* @__PURE__ */ h({
87
87
  __name: "TableEmpty",
@@ -101,7 +101,7 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
101
101
  return t;
102
102
  });
103
103
  return (t, i) => (y(), l(F, null, {
104
- default: D(() => [m(M, _({ class: T(e)("p-4 whitespace-nowrap align-middle text-sm text-foreground", n.class) }, r.value), {
104
+ default: D(() => [m(M, _({ class: E(e)("p-4 whitespace-nowrap align-middle text-sm text-foreground", n.class) }, r.value), {
105
105
  default: D(() => [f("div", I, [S(t.$slots, "default")])]),
106
106
  _: 3
107
107
  }, 16, ["class"])]),
@@ -122,7 +122,7 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
122
122
  },
123
123
  setup(t) {
124
124
  let n = t;
125
- return (r, i) => (y(), d("div", { class: v(T(e)("rounded-input bg-muted", t.variant === "pulse" && "animate-pulse", t.variant === "shimmer" && "skeleton-shimmer", t.variant === "breath" && "skeleton-breath", n.class)) }, null, 2));
125
+ return (r, i) => (y(), d("div", { class: v(E(e)("rounded-input bg-muted", t.variant === "pulse" && "animate-pulse", t.variant === "shimmer" && "skeleton-shimmer", t.variant === "breath" && "skeleton-breath", n.class)) }, null, 2));
126
126
  }
127
127
  }), [["__scopeId", "data-v-bb7e255e"]]), z = { class: "tabular-nums" }, B = { class: "flex items-center gap-1" }, V = {
128
128
  key: 0,
@@ -150,8 +150,8 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
150
150
  let t = Math.min(Math.max(1, e), o.value);
151
151
  t !== i.page && a("update:page", t);
152
152
  }
153
- return (r, a) => (y(), d("div", { class: v(T(e)("flex items-center justify-between border-t border-border px-4 py-2 text-sm text-muted-foreground", i.class)) }, [f("span", z, w(n.total.toLocaleString()) + " result" + w(n.total === 1 ? "" : "s"), 1), f("div", B, [
154
- m(T(t), {
153
+ return (r, a) => (y(), d("div", { class: v(E(e)("flex items-center justify-between border-t border-border px-4 py-2 text-sm text-muted-foreground", i.class)) }, [f("span", z, w(n.total.toLocaleString()) + " result" + w(n.total === 1 ? "" : "s"), 1), f("div", B, [
154
+ m(E(t), {
155
155
  variant: "ghost",
156
156
  size: "icon",
157
157
  disabled: u.value <= 1,
@@ -161,7 +161,7 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
161
161
  default: D(() => [...a[4] ||= [p(" ⟨⟨ ", -1)]]),
162
162
  _: 1
163
163
  }, 8, ["disabled"]),
164
- m(T(t), {
164
+ m(E(t), {
165
165
  variant: "ghost",
166
166
  size: "icon",
167
167
  disabled: u.value <= 1,
@@ -171,7 +171,7 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
171
171
  default: D(() => [...a[5] ||= [p(" ⟨ ", -1)]]),
172
172
  _: 1
173
173
  }, 8, ["disabled"]),
174
- (y(!0), d(s, null, x(h.value, (e, n) => (y(), d(s, { key: n }, [e === null ? (y(), d("span", V, "...")) : (y(), l(T(t), {
174
+ (y(!0), d(s, null, x(h.value, (e, n) => (y(), d(s, { key: n }, [e === null ? (y(), d("span", V, "...")) : (y(), l(E(t), {
175
175
  key: 1,
176
176
  variant: e === u.value ? "default" : "ghost",
177
177
  size: "icon",
@@ -181,7 +181,7 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
181
181
  default: D(() => [p(w(e), 1)]),
182
182
  _: 2
183
183
  }, 1032, ["variant", "onClick"]))], 64))), 128)),
184
- m(T(t), {
184
+ m(E(t), {
185
185
  variant: "ghost",
186
186
  size: "icon",
187
187
  disabled: u.value >= o.value,
@@ -191,7 +191,7 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
191
191
  default: D(() => [...a[6] ||= [p(" ⟩ ", -1)]]),
192
192
  _: 1
193
193
  }, 8, ["disabled"]),
194
- m(T(t), {
194
+ m(E(t), {
195
195
  variant: "ghost",
196
196
  size: "icon",
197
197
  disabled: u.value >= o.value,
@@ -203,19 +203,78 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
203
203
  }, 8, ["disabled"])
204
204
  ])], 2));
205
205
  }
206
- }), te = {
206
+ });
207
+ //#endregion
208
+ //#region src/components/ui/data-table/composables/useDataTableRowIdentity.ts
209
+ function U(e) {
210
+ if (e) return e.length === 0 ? e() : e;
211
+ }
212
+ function W(e, t) {
213
+ return t.split(".").reduce((e, t) => {
214
+ if (!(typeof e != "object" || !e)) return e[t];
215
+ }, e);
216
+ }
217
+ function G(e) {
218
+ return typeof e == "string" || typeof e == "number" || typeof e == "symbol";
219
+ }
220
+ function K(e) {
221
+ return typeof e == "symbol" ? e.toString() : JSON.stringify(e);
222
+ }
223
+ function q(e) {
224
+ let { rows: t, rowKey: n, getRowId: r } = e, i = /* @__PURE__ */ new WeakMap(), a = 0;
225
+ function o(e) {
226
+ let t = U(r);
227
+ return t ? t(e) : W(e, T(n));
228
+ }
229
+ function s(e) {
230
+ let t = e, n = i.get(t);
231
+ if (n) return n;
232
+ let r = Symbol(`DataTable row ${a++}`);
233
+ return i.set(t, r), r;
234
+ }
235
+ return { rowEntries: c(() => {
236
+ let e = T(t), n = e.map((e) => o(e)), r = /* @__PURE__ */ new Map();
237
+ for (let e of n) G(e) && r.set(e, (r.get(e) ?? 0) + 1);
238
+ let i = n.filter((e) => !G(e)).length;
239
+ i > 0 && `${i}`;
240
+ let a = Array.from(r).filter(([, e]) => e > 1).map(([e]) => K(e));
241
+ return a.length > 0 && (`${a.join(",")}`, `${a.join(", ")}`), e.map((e, t) => {
242
+ let i = n[t];
243
+ return {
244
+ row: e,
245
+ key: G(i) && r.get(i) === 1 ? i : s(e)
246
+ };
247
+ });
248
+ }) };
249
+ }
250
+ //#endregion
251
+ //#region src/components/ui/data-table/composables/useDataTableResponsive.ts
252
+ function J(e) {
253
+ let { columns: t, responsive: n, cardBreakpoint: r, containerWidth: i } = e;
254
+ return {
255
+ isCard: c(() => {
256
+ let e = T(i);
257
+ return T(n) && e > 0 && e < T(r);
258
+ }),
259
+ headerColumn: c(() => T(t)[0]),
260
+ bodyColumns: c(() => T(t).slice(1))
261
+ };
262
+ }
263
+ //#endregion
264
+ //#region src/components/ui/data-table/DataTable.vue?vue&type=script&setup=true&lang.ts
265
+ var Y = {
207
266
  key: 0,
208
267
  class: "flex flex-col gap-2"
209
- }, ne = {
268
+ }, X = {
210
269
  key: 1,
211
270
  class: "flex flex-col gap-2"
212
- }, re = ["onClick"], ie = { class: "flex items-start justify-between gap-2" }, ae = { class: "min-w-0 font-medium" }, oe = {
271
+ }, ne = ["onClick"], re = { class: "flex items-start justify-between gap-2" }, ie = { class: "min-w-0 font-medium" }, ae = {
213
272
  key: 0,
214
273
  class: "mt-2 grid grid-cols-[auto_1fr] gap-x-3 gap-y-1"
215
- }, se = { class: "text-muted-foreground" }, ce = {
274
+ }, oe = { class: "text-muted-foreground" }, se = {
216
275
  key: 2,
217
276
  class: "rounded-lg border border-border p-6 text-center text-muted-foreground"
218
- }, U = /* @__PURE__ */ h({
277
+ }, Z = /* @__PURE__ */ h({
219
278
  __name: "DataTable",
220
279
  props: /* @__PURE__ */ g({
221
280
  columns: {},
@@ -253,53 +312,33 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
253
312
  "load-more"
254
313
  ], ["update:page"]),
255
314
  setup(t, { emit: n }) {
256
- let h = t, g = E(t, "page"), _ = n, k = ee(), I = c(() => !!k["row-actions"]), z = c(() => !!k["row-context-menu"]), B = b(null), V = b(0);
257
- o(B, (e) => {
258
- V.value = e.width;
315
+ let h = t, g = ee(t, "page"), _ = n, T = te(), k = c(() => !!T["row-actions"]), I = c(() => !!T["row-context-menu"]), z = b(null), B = b(0);
316
+ o(z, (e) => {
317
+ B.value = e.width;
259
318
  });
260
- let U = c(() => h.responsive && V.value > 0 && V.value < h.cardBreakpoint), W = c(() => Array.from({ length: Math.min(h.pageSize, 5) }, (e, t) => t)), G = /* @__PURE__ */ new WeakMap(), le = 0;
261
- function K(e, t) {
319
+ let { isCard: V, headerColumn: U, bodyColumns: W } = J({
320
+ columns: () => h.columns,
321
+ responsive: () => h.responsive,
322
+ cardBreakpoint: () => h.cardBreakpoint,
323
+ containerWidth: B
324
+ }), { rowEntries: G } = q({
325
+ rows: () => h.rows,
326
+ rowKey: () => h.rowKey,
327
+ getRowId: () => h.getRowId
328
+ }), K = c(() => Array.from({ length: Math.min(h.pageSize, 5) }, (e, t) => t));
329
+ function Z(e, t) {
262
330
  return t.split(".").reduce((e, t) => {
263
331
  if (!(typeof e != "object" || !e)) return e[t];
264
332
  }, e);
265
333
  }
266
- function q(e) {
267
- return typeof e == "string" || typeof e == "number" || typeof e == "symbol";
268
- }
269
- function ue(e) {
270
- return typeof e == "symbol" ? e.toString() : JSON.stringify(e);
271
- }
272
- function de(e) {
273
- return h.getRowId ? h.getRowId(e) : K(e, h.rowKey);
274
- }
275
- function J(e) {
276
- let t = e, n = G.get(t);
277
- if (n) return n;
278
- let r = Symbol(`DataTable row ${le++}`);
279
- return G.set(t, r), r;
280
- }
281
- let Y = c(() => {
282
- let e = h.rows.map((e) => de(e)), t = /* @__PURE__ */ new Map();
283
- for (let n of e) q(n) && t.set(n, (t.get(n) ?? 0) + 1);
284
- let n = e.filter((e) => !q(e)).length;
285
- n > 0 && `${n}`;
286
- let r = Array.from(t).filter(([, e]) => e > 1).map(([e]) => ue(e));
287
- return r.length > 0 && (`${r.join(",")}`, `${r.join(", ")}`), h.rows.map((n, r) => {
288
- let i = e[r];
289
- return {
290
- row: n,
291
- key: q(i) && t.get(i) === 1 ? i : J(n)
292
- };
293
- });
294
- });
295
- function X(e, t) {
296
- let n = K(e, t.key);
334
+ function Q(e, t) {
335
+ let n = Z(e, t.key);
297
336
  return t.formatter ? t.formatter(n, e) : n == null ? "—" : String(n);
298
337
  }
299
- function Z(e) {
338
+ function $(e) {
300
339
  return e === "right" ? "text-right" : e === "center" ? "text-center" : "text-left";
301
340
  }
302
- function fe(e) {
341
+ function ce(e) {
303
342
  if (!e.sortable) return;
304
343
  let t = h.sort;
305
344
  t?.key === e.key ? _("update:sort", {
@@ -310,92 +349,91 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
310
349
  direction: "asc"
311
350
  });
312
351
  }
313
- function pe(e) {
352
+ function le(e) {
314
353
  return e.sortable ? h.sort?.key === e.key ? h.sort.direction === "asc" ? " ↑" : " ↓" : " ↕" : "";
315
354
  }
316
- let Q = c(() => h.columns[0]), $ = c(() => h.columns.slice(1));
317
355
  return (n, o) => (y(), d("div", {
318
356
  ref_key: "rootRef",
319
- ref: B,
320
- class: v(T(e)("overflow-hidden", h.class))
357
+ ref: z,
358
+ class: v(E(e)("overflow-hidden", h.class))
321
359
  }, [
322
- U.value ? (y(), d(s, { key: 0 }, [t.isLoading && t.rows.length === 0 ? (y(), d("div", te, [(y(!0), d(s, null, x(W.value, (e) => (y(), d("div", {
360
+ E(V) ? (y(), d(s, { key: 0 }, [t.isLoading && t.rows.length === 0 ? (y(), d("div", Y, [(y(!0), d(s, null, x(K.value, (e) => (y(), d("div", {
323
361
  key: "skel-card-" + e,
324
362
  class: "rounded-lg border border-border p-3"
325
- }, [m(T(R), { class: "mb-2 h-4 w-1/2" }), m(T(R), { class: "h-3 w-3/4" })]))), 128))])) : t.rows.length > 0 ? (y(), d("div", ne, [(y(!0), d(s, null, x(Y.value, (t) => (y(), l(C(z.value ? T(i) : "div"), { key: t.key }, {
326
- default: D(() => [(y(), l(C(z.value ? T(r) : "div"), { "as-child": z.value ? !0 : void 0 }, {
363
+ }, [m(E(R), { class: "mb-2 h-4 w-1/2" }), m(E(R), { class: "h-3 w-3/4" })]))), 128))])) : t.rows.length > 0 ? (y(), d("div", X, [(y(!0), d(s, null, x(E(G), (t) => (y(), l(C(I.value ? E(i) : "div"), { key: t.key }, {
364
+ default: D(() => [(y(), l(C(I.value ? E(r) : "div"), { "as-child": I.value ? !0 : void 0 }, {
327
365
  default: D(() => [f("div", {
328
366
  class: "cursor-pointer rounded-lg border border-border p-3 transition-colors hover:bg-muted/40",
329
367
  onClick: (e) => _("select", t.row)
330
- }, [f("div", ie, [f("div", ae, [Q.value?.component ? (y(), l(C(Q.value.component), {
368
+ }, [f("div", re, [f("div", ie, [E(U)?.component ? (y(), l(C(E(U).component), {
331
369
  key: 0,
332
- value: K(t.row, Q.value.key),
370
+ value: Z(t.row, E(U).key),
333
371
  row: t.row
334
- }, null, 8, ["value", "row"])) : Q.value ? (y(), d(s, { key: 1 }, [p(w(X(t.row, Q.value)), 1)], 64)) : u("", !0)]), I.value ? (y(), d("div", {
372
+ }, null, 8, ["value", "row"])) : E(U) ? (y(), d(s, { key: 1 }, [p(w(Q(t.row, E(U))), 1)], 64)) : u("", !0)]), k.value ? (y(), d("div", {
335
373
  key: 0,
336
374
  class: "shrink-0",
337
375
  onClick: o[0] ||= O(() => {}, ["stop"])
338
- }, [S(n.$slots, "row-actions", { row: t.row })])) : u("", !0)]), $.value.length > 0 ? (y(), d("dl", oe, [(y(!0), d(s, null, x($.value, (n) => (y(), d(s, { key: n.key }, [f("dt", se, w(n.label), 1), f("dd", { class: v(T(e)("min-w-0 break-words", n.align === "right" && "text-right", n.class)) }, [n.component ? (y(), l(C(n.component), {
376
+ }, [S(n.$slots, "row-actions", { row: t.row })])) : u("", !0)]), E(W).length > 0 ? (y(), d("dl", ae, [(y(!0), d(s, null, x(E(W), (n) => (y(), d(s, { key: n.key }, [f("dt", oe, w(n.label), 1), f("dd", { class: v(E(e)("min-w-0 break-words", n.align === "right" && "text-right", n.class)) }, [n.component ? (y(), l(C(n.component), {
339
377
  key: 0,
340
- value: K(t.row, n.key),
378
+ value: Z(t.row, n.key),
341
379
  row: t.row
342
- }, null, 8, ["value", "row"])) : (y(), d(s, { key: 1 }, [p(w(X(t.row, n)), 1)], 64))], 2)], 64))), 128))])) : u("", !0)], 8, re)]),
380
+ }, null, 8, ["value", "row"])) : (y(), d(s, { key: 1 }, [p(w(Q(t.row, n)), 1)], 64))], 2)], 64))), 128))])) : u("", !0)], 8, ne)]),
343
381
  _: 2
344
- }, 1032, ["as-child"])), z.value ? (y(), l(T(a), { key: 0 }, {
382
+ }, 1032, ["as-child"])), I.value ? (y(), l(E(a), { key: 0 }, {
345
383
  default: D(() => [S(n.$slots, "row-context-menu", { row: t.row })]),
346
384
  _: 2
347
385
  }, 1024)) : u("", !0)]),
348
386
  _: 2
349
- }, 1024))), 128))])) : (y(), d("div", ce, [S(n.$slots, "empty", {}, () => [o[4] ||= p("No results found", -1)])]))], 64)) : (y(), l(T(A), { key: 1 }, {
350
- default: D(() => [m(T(P), null, {
351
- default: D(() => [m(T(F), { class: "text-muted-foreground" }, {
352
- default: D(() => [(y(!0), d(s, null, x(t.columns, (t) => (y(), l(T(N), {
387
+ }, 1024))), 128))])) : (y(), d("div", se, [S(n.$slots, "empty", {}, () => [o[4] ||= p("No results found", -1)])]))], 64)) : (y(), l(E(A), { key: 1 }, {
388
+ default: D(() => [m(E(P), null, {
389
+ default: D(() => [m(E(F), { class: "text-muted-foreground" }, {
390
+ default: D(() => [(y(!0), d(s, null, x(t.columns, (t) => (y(), l(E(N), {
353
391
  key: t.key,
354
- class: v(T(e)(Z(t.align), t.sortable && "cursor-pointer select-none", t.headerClass)),
355
- onClick: (e) => fe(t)
392
+ class: v(E(e)($(t.align), t.sortable && "cursor-pointer select-none", t.headerClass)),
393
+ onClick: (e) => ce(t)
356
394
  }, {
357
- default: D(() => [p(w(t.label) + w(pe(t)), 1)]),
395
+ default: D(() => [p(w(t.label) + w(le(t)), 1)]),
358
396
  _: 2
359
- }, 1032, ["class", "onClick"]))), 128)), I.value ? (y(), l(T(N), {
397
+ }, 1032, ["class", "onClick"]))), 128)), k.value ? (y(), l(E(N), {
360
398
  key: 0,
361
399
  class: "w-10"
362
400
  })) : u("", !0)]),
363
401
  _: 1
364
402
  })]),
365
403
  _: 1
366
- }), m(T(j), null, {
367
- default: D(() => [t.isLoading && t.rows.length === 0 ? (y(!0), d(s, { key: 0 }, x(W.value, (e) => (y(), l(T(F), { key: "skel-" + e }, {
368
- default: D(() => [(y(!0), d(s, null, x(t.columns, (e) => (y(), l(T(M), {
404
+ }), m(E(j), null, {
405
+ default: D(() => [t.isLoading && t.rows.length === 0 ? (y(!0), d(s, { key: 0 }, x(K.value, (e) => (y(), l(E(F), { key: "skel-" + e }, {
406
+ default: D(() => [(y(!0), d(s, null, x(t.columns, (e) => (y(), l(E(M), {
369
407
  key: e.key,
370
- class: v(Z(e.align))
408
+ class: v($(e.align))
371
409
  }, {
372
- default: D(() => [m(T(R), { class: "h-4 w-3/4" })]),
410
+ default: D(() => [m(E(R), { class: "h-4 w-3/4" })]),
373
411
  _: 1
374
- }, 8, ["class"]))), 128)), I.value ? (y(), l(T(M), {
412
+ }, 8, ["class"]))), 128)), k.value ? (y(), l(E(M), {
375
413
  key: 0,
376
414
  class: "w-10"
377
415
  }, {
378
- default: D(() => [m(T(R), { class: "h-4 w-6" })]),
416
+ default: D(() => [m(E(R), { class: "h-4 w-6" })]),
379
417
  _: 1
380
418
  })) : u("", !0)]),
381
419
  _: 1
382
- }))), 128)) : t.rows.length > 0 ? (y(!0), d(s, { key: 1 }, x(Y.value, (c) => (y(), d(s, { key: c.key }, [z.value ? (y(), l(T(i), { key: 0 }, {
383
- default: D(() => [m(T(r), { "as-child": "" }, {
384
- default: D(() => [m(T(F), {
420
+ }))), 128)) : t.rows.length > 0 ? (y(!0), d(s, { key: 1 }, x(E(G), (c) => (y(), d(s, { key: c.key }, [I.value ? (y(), l(E(i), { key: 0 }, {
421
+ default: D(() => [m(E(r), { "as-child": "" }, {
422
+ default: D(() => [m(E(F), {
385
423
  class: "cursor-pointer",
386
424
  onClick: (e) => _("select", c.row)
387
425
  }, {
388
- default: D(() => [(y(!0), d(s, null, x(t.columns, (t) => (y(), l(T(M), {
426
+ default: D(() => [(y(!0), d(s, null, x(t.columns, (t) => (y(), l(E(M), {
389
427
  key: t.key,
390
- class: v(T(e)(Z(t.align), t.class))
428
+ class: v(E(e)($(t.align), t.class))
391
429
  }, {
392
430
  default: D(() => [t.component ? (y(), l(C(t.component), {
393
431
  key: 0,
394
- value: K(c.row, t.key),
432
+ value: Z(c.row, t.key),
395
433
  row: c.row
396
- }, null, 8, ["value", "row"])) : (y(), d(s, { key: 1 }, [p(w(X(c.row, t)), 1)], 64))]),
434
+ }, null, 8, ["value", "row"])) : (y(), d(s, { key: 1 }, [p(w(Q(c.row, t)), 1)], 64))]),
397
435
  _: 2
398
- }, 1032, ["class"]))), 128)), I.value ? (y(), l(T(M), {
436
+ }, 1032, ["class"]))), 128)), k.value ? (y(), l(E(M), {
399
437
  key: 0,
400
438
  class: "w-10",
401
439
  onClick: o[1] ||= O(() => {}, ["stop"])
@@ -406,27 +444,27 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
406
444
  _: 2
407
445
  }, 1032, ["onClick"])]),
408
446
  _: 2
409
- }, 1024), m(T(a), null, {
447
+ }, 1024), m(E(a), null, {
410
448
  default: D(() => [S(n.$slots, "row-context-menu", { row: c.row })]),
411
449
  _: 2
412
450
  }, 1024)]),
413
451
  _: 2
414
- }, 1024)) : (y(), l(T(F), {
452
+ }, 1024)) : (y(), l(E(F), {
415
453
  key: 1,
416
454
  class: "cursor-pointer",
417
455
  onClick: (e) => _("select", c.row)
418
456
  }, {
419
- default: D(() => [(y(!0), d(s, null, x(t.columns, (t) => (y(), l(T(M), {
457
+ default: D(() => [(y(!0), d(s, null, x(t.columns, (t) => (y(), l(E(M), {
420
458
  key: t.key,
421
- class: v(T(e)(Z(t.align), t.class))
459
+ class: v(E(e)($(t.align), t.class))
422
460
  }, {
423
461
  default: D(() => [t.component ? (y(), l(C(t.component), {
424
462
  key: 0,
425
- value: K(c.row, t.key),
463
+ value: Z(c.row, t.key),
426
464
  row: c.row
427
- }, null, 8, ["value", "row"])) : (y(), d(s, { key: 1 }, [p(w(X(c.row, t)), 1)], 64))]),
465
+ }, null, 8, ["value", "row"])) : (y(), d(s, { key: 1 }, [p(w(Q(c.row, t)), 1)], 64))]),
428
466
  _: 2
429
- }, 1032, ["class"]))), 128)), I.value ? (y(), l(T(M), {
467
+ }, 1032, ["class"]))), 128)), k.value ? (y(), l(E(M), {
430
468
  key: 0,
431
469
  class: "w-10",
432
470
  onClick: o[2] ||= O(() => {}, ["stop"])
@@ -435,9 +473,9 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
435
473
  _: 2
436
474
  }, 1024)) : u("", !0)]),
437
475
  _: 2
438
- }, 1032, ["onClick"]))], 64))), 128)) : (y(), l(T(L), {
476
+ }, 1032, ["onClick"]))], 64))), 128)) : (y(), l(E(L), {
439
477
  key: 2,
440
- colspan: t.columns.length + +!!I.value
478
+ colspan: t.columns.length + +!!k.value
441
479
  }, {
442
480
  default: D(() => [S(n.$slots, "empty", {}, () => [o[5] ||= p("No results found", -1)])]),
443
481
  _: 3
@@ -462,4 +500,4 @@ var k = { class: "relative w-full overflow-auto" }, A = /* @__PURE__ */ h({
462
500
  }
463
501
  });
464
502
  //#endregion
465
- export { F as a, M as c, L as i, j as l, H as n, P as o, R as r, N as s, U as t, A as u };
503
+ export { F as a, M as c, L as i, j as l, H as n, P as o, R as r, N as s, Z as t, A as u };
@@ -1,6 +1,6 @@
1
1
  import { t as e } from "./cn-DJXf4yaB.js";
2
2
  import { t } from "./createLucideIcon-DuDoe_ra.js";
3
- import { n } from "./button-Ckn3eDfB.js";
3
+ import { n } from "./button-i8Ek5vvg.js";
4
4
  import { computed as r, createBlock as i, createElementBlock as a, createVNode as o, defineComponent as s, mergeProps as c, normalizeClass as l, openBlock as u, renderSlot as d, unref as f, withCtx as p } from "vue";
5
5
  import { NumberFieldDecrement as m, NumberFieldIncrement as h, NumberFieldInput as g, NumberFieldRoot as _, useForwardProps as v, useForwardPropsEmits as y } from "reka-ui";
6
6
  var b = t("minus", [["path", {
@@ -19,6 +19,7 @@ export type { ScrollTrackerOptions, SidebarIndexEntry, SidebarSection, SidebarSt
19
19
  export type { FuzzySearchState, SearchableItem, SearchIndex, SearchResult, UseFuzzySearchOptions, } from "../components/custom/search";
20
20
  export type { GlassPanelProps } from "../components/custom/glass-panel";
21
21
  export type { ToastType } from "../components/ui/toast";
22
+ export type { DeckProgressProps } from "../components/custom/deck-progress";
22
23
  export type { UseClipboardOptions, UseClipboardReturn, } from "../composables/dom/useClipboard";
23
24
  export type { UseUserInvalidAriaOptions, UseUserInvalidAriaReturn, } from "../composables/dom/useUserInvalidAria";
24
25
  export type { ViewTransitionResult } from "../composables/motion/useViewTransition";
@@ -48,7 +48,7 @@ var d = /* @__PURE__ */ r({
48
48
  variant: {
49
49
  default: "bg-primary text-primary-foreground hover:bg-primary/90 active:bg-primary/80 aria-pressed:bg-primary/85",
50
50
  "primary-audacious": "btn-audacious bg-primary text-primary-foreground hover:scale-[var(--scale-hover)] aria-pressed:scale-[var(--scale-press-btn)]",
51
- "gold-audacious": "btn-audacious btn-audacious-gold text-white hover:scale-[var(--scale-hover)] aria-pressed:scale-[var(--scale-press-btn)]",
51
+ "gold-audacious": "btn-audacious btn-audacious-gold text-foreground hover:text-white active:text-white aria-pressed:text-white hover:scale-[var(--scale-hover)] aria-pressed:scale-[var(--scale-press-btn)]",
52
52
  destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90 active:bg-destructive/80 aria-pressed:bg-destructive/85",
53
53
  outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground active:bg-accent/80 aria-pressed:bg-accent aria-pressed:text-accent-foreground",
54
54
  secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 active:bg-secondary/70 aria-pressed:bg-secondary/60",
package/dist/button.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as e, t } from "./button-Ckn3eDfB.js";
1
+ import { n as e, t } from "./button-i8Ek5vvg.js";
2
2
  export { e as Button, t as buttonVariants };
package/dist/carousel.js CHANGED
@@ -3,7 +3,7 @@ import { t } from "./createLucideIcon-DuDoe_ra.js";
3
3
  import { t as n } from "./chevron-down-pBY8sYfV.js";
4
4
  import { t as r } from "./chevron-right-BjeKC22V.js";
5
5
  import { t as i } from "./chevron-up-DBeNHUm1.js";
6
- import { n as a } from "./button-Ckn3eDfB.js";
6
+ import { n as a } from "./button-i8Ek5vvg.js";
7
7
  import { Fragment as o, computed as s, createBlock as c, createCommentVNode as l, createElementBlock as u, createElementVNode as d, createVNode as f, defineComponent as p, mergeProps as m, normalizeClass as h, onMounted as g, openBlock as _, ref as v, renderList as y, renderSlot as b, resolveDynamicComponent as x, toDisplayString as S, unref as C, watch as w, withCtx as T } from "vue";
8
8
  import { createInjectionState as E } from "@vueuse/core";
9
9
  import D from "embla-carousel-vue";
@@ -0,0 +1,27 @@
1
+ /**
2
+ * DeckProgress — a thin `:value`-only wrapper that renders the shipped
3
+ * `<Progress variant="default">` styled as the `.glass-progress-rail`
4
+ * deck-position rail (AW.W16).
5
+ *
6
+ * It owns the rail LOOK and NOTHING ELSE. The CONSUMER owns:
7
+ * - the position math — `value` is a pre-computed 0..100 percentage
8
+ * (`100·(k+1)/N` is a one-liner every consumer already keeps);
9
+ * - the viewport-pinned chrome — `position: fixed`,
10
+ * `bottom: env(safe-area-inset-bottom)`, the z-index — supplied via the
11
+ * forwarded `class` (a consumer pins it; this wrapper declares no
12
+ * positioning).
13
+ *
14
+ * NO `:index`/`:total` convenience path, NO `deckProgress()` math import, NO
15
+ * `/deck` subpath (the `/deck` name is reserved for the slides deck-engine
16
+ * lift). The wrapper ships on the root barrel like the other cherry-picked
17
+ * custom composites.
18
+ */
19
+ export interface DeckProgressProps {
20
+ /** Pre-computed deck-position percentage (0..100) the consumer supplies. */
21
+ value: number;
22
+ /** Forwarded class — the consumer pins the rail's viewport chrome here. */
23
+ class?: string;
24
+ }
25
+ declare const __VLS_export: import("vue").DefineComponent<DeckProgressProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<DeckProgressProps> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
26
+ declare const _default: typeof __VLS_export;
27
+ export default _default;
@@ -0,0 +1,2 @@
1
+ export { default as DeckProgress } from "./DeckProgress.vue";
2
+ export type { DeckProgressProps } from "./DeckProgress.vue";
@@ -9,6 +9,17 @@ export interface UseLayerTransitionOptions {
9
9
  * `height`. Defaults to horizontal when omitted.
10
10
  */
11
11
  axis?: Ref<"horizontal" | "vertical">;
12
+ /**
13
+ * AW.W3 — typed directional View-Transitions. Maps a swap `(from, to)` to
14
+ * the `types` array passed to `startViewTransition`, so
15
+ * `:active-view-transition-type(<t>)` CSS can author DIRECTION-specific
16
+ * curves (snappier exit, softer entry-overshoot — the iOS-feel asymmetry).
17
+ * The outer collapsed↔expanded pair resolves `dock-expand` / `dock-collapse`;
18
+ * the inner DockLayerGroup pane swap resolves `layer-forward` / `layer-back`.
19
+ * Omit to run the single symmetric curve. Feature-detected — degrades to the
20
+ * symmetric curve on an engine without the `types` overload (Firefox 144).
21
+ */
22
+ directionTypes?: (from: string, to: string) => string[];
12
23
  }
13
24
  export interface UseLayerTransitionReturn {
14
25
  /** Attach to @transitionend on the container */
@@ -0,0 +1,28 @@
1
+ import { type ComputedRef, type MaybeRefOrGetter } from "vue";
2
+ import type { DataTableColumn } from "../types";
3
+ export interface UseDataTableResponsiveOptions<T> {
4
+ /** The column set being projected. */
5
+ columns: MaybeRefOrGetter<DataTableColumn<T>[]>;
6
+ /** Whether the responsive card projection is enabled. */
7
+ responsive: MaybeRefOrGetter<boolean>;
8
+ /** Container width (CSS px) below which the table collapses to cards. */
9
+ cardBreakpoint: MaybeRefOrGetter<number>;
10
+ /** The measured container width (0 before the first ResizeObserver frame). */
11
+ containerWidth: MaybeRefOrGetter<number>;
12
+ }
13
+ export interface UseDataTableResponsiveReturn<T> {
14
+ /** True when the table should render the stacked card-per-row projection. */
15
+ isCard: ComputedRef<boolean>;
16
+ /** The first column — the card's header line. */
17
+ headerColumn: ComputedRef<DataTableColumn<T> | undefined>;
18
+ /** Every column after the first — the card body's label/value pairs. */
19
+ bodyColumns: ComputedRef<DataTableColumn<T>[]>;
20
+ }
21
+ /**
22
+ * Derive the container-driven card-vs-table projection for a DataTable.
23
+ *
24
+ * `isCard` is true only once the container has measured (`width > 0`, guarding
25
+ * the pre-measure frame) AND is narrower than `cardBreakpoint`. The header/body
26
+ * column split is computed once so the template stays flat.
27
+ */
28
+ export declare function useDataTableResponsive<T extends Record<string, any>>(options: UseDataTableResponsiveOptions<T>): UseDataTableResponsiveReturn<T>;
@@ -0,0 +1,33 @@
1
+ import { type ComputedRef, type MaybeRefOrGetter } from "vue";
2
+ /** A row paired with its stable iteration key. */
3
+ export interface RowEntry<T> {
4
+ row: T;
5
+ key: PropertyKey;
6
+ }
7
+ /** An explicit per-row id resolver — wins over the `rowKey` lookup. */
8
+ export type RowIdResolver<T> = (row: T) => PropertyKey | null | undefined;
9
+ export interface UseDataTableRowIdentityOptions<T> {
10
+ /** The reactive row set. */
11
+ rows: MaybeRefOrGetter<readonly T[]>;
12
+ /** Dotted-path key into each row resolving its stable id (default `_id`). */
13
+ rowKey: MaybeRefOrGetter<string>;
14
+ /**
15
+ * Explicit id resolver — wins over `rowKey` when supplied. Pass either the
16
+ * resolver itself OR a getter returning it (a getter lets the SFC thread the
17
+ * reactive `props.getRowId`). NOT a `MaybeRefOrGetter`: the resolver is
18
+ * itself a function, which `toValue` would mis-invoke as a getter.
19
+ */
20
+ getRowId?: RowIdResolver<T> | (() => RowIdResolver<T> | undefined);
21
+ }
22
+ export interface UseDataTableRowIdentityReturn<T> {
23
+ /** Rows paired with stable iteration keys (validated; generated fallback). */
24
+ rowEntries: ComputedRef<RowEntry<T>[]>;
25
+ }
26
+ /**
27
+ * Resolve stable iteration keys for a DataTable's rows.
28
+ *
29
+ * Explicit ids (via `getRowId` or the dotted `rowKey`) win when present AND
30
+ * unique; missing / duplicate ids fall back to a per-object generated symbol
31
+ * (object identity), with a one-shot dev warning per distinct issue.
32
+ */
33
+ export declare function useDataTableRowIdentity<T extends Record<string, any>>(options: UseDataTableRowIdentityOptions<T>): UseDataTableRowIdentityReturn<T>;