@mkbabb/glass-ui 3.4.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.
- package/dist/{DataTable-FfkaAg2z.js → DataTable-DyKc_26a.js} +144 -106
- package/dist/{NumberFieldContent-iOTQ5rGO.js → NumberFieldContent-jO-zGOHf.js} +1 -1
- package/dist/api/index.d.ts +1 -0
- package/dist/{button-Ckn3eDfB.js → button-i8Ek5vvg.js} +1 -1
- package/dist/button.js +1 -1
- package/dist/carousel.js +1 -1
- package/dist/components/custom/deck-progress/DeckProgress.vue.d.ts +27 -0
- package/dist/components/custom/deck-progress/index.d.ts +2 -0
- package/dist/components/custom/dock/composables/useLayerTransition.d.ts +11 -0
- package/dist/components/ui/data-table/composables/useDataTableResponsive.d.ts +28 -0
- package/dist/components/ui/data-table/composables/useDataTableRowIdentity.d.ts +33 -0
- package/dist/composables/dark/useGlobalDark.d.ts +17 -6
- package/dist/composables/dom/index.d.ts +3 -0
- package/dist/composables/dom/useBreakpoint.d.ts +38 -0
- package/dist/composables/dom/useIdleReady.d.ts +63 -0
- package/dist/composables/dom/useTokenColor.d.ts +13 -0
- package/dist/composables/dom/useViewportReady.d.ts +87 -0
- package/dist/composables/glass/index.d.ts +1 -1
- package/dist/composables/glass/useGlassRenderer.d.ts +10 -3
- package/dist/composables/motion/useAnimatedNumber.d.ts +8 -2
- package/dist/composables/motion/useCountup.d.ts +8 -2
- package/dist/composables/motion/useNumericTransition.d.ts +17 -6
- package/dist/composables/motion/useViewTransition.d.ts +16 -1
- package/dist/confirm-dialog.js +1 -1
- package/dist/data-table.js +1 -1
- package/dist/dock.js +169 -158
- package/dist/dom.js +4 -4
- package/dist/glass-panel.js +14 -14
- package/dist/glass-ui.css +1 -1
- package/dist/glass-ui.js +134 -119
- package/dist/goo-blob.js +108 -89
- package/dist/index.d.ts +1 -0
- package/dist/labeled-field.js +1 -1
- package/dist/motion-core.js +1 -1
- package/dist/number-field.js +1 -1
- package/dist/search.js +1 -1
- package/dist/{slider-BOh8ycfZ.js → slider-CgNzRSh6.js} +1 -1
- package/dist/slider.js +1 -1
- package/dist/styles/components.css +1 -1
- package/dist/styles/dock.css +91 -36
- package/dist/styles/glass.css +44 -1
- package/dist/styles/instrument-chassis.css +10 -13
- package/dist/styles/instrument-rail.css +11 -12
- package/dist/styles/tokens.css +9 -7
- package/dist/styles/utilities.css +20 -0
- package/dist/styles/view-transition.css +24 -0
- package/dist/tabs.js +1 -1
- package/dist/timeline.js +1 -1
- package/dist/useViewTransition-CJnqg6wl.js +21 -0
- package/dist/useViewportReady-Dcvf0c4p.js +191 -0
- package/package.json +2 -1
- package/src/styles/dock.css +91 -36
- package/src/styles/glass.css +44 -1
- package/src/styles/instrument-chassis.css +10 -13
- package/src/styles/instrument-rail.css +11 -12
- package/src/styles/tokens.css +9 -7
- package/src/styles/utilities.css +20 -0
- package/src/styles/view-transition.css +24 -0
- package/dist/useClipboard-D8vFyRCa.js +0 -97
- 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-
|
|
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,
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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:
|
|
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(
|
|
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(
|
|
154
|
-
m(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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
|
-
})
|
|
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
|
-
},
|
|
268
|
+
}, X = {
|
|
210
269
|
key: 1,
|
|
211
270
|
class: "flex flex-col gap-2"
|
|
212
|
-
},
|
|
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
|
-
},
|
|
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
|
-
},
|
|
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 =
|
|
257
|
-
o(
|
|
258
|
-
|
|
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
|
|
261
|
-
|
|
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
|
|
267
|
-
|
|
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
|
|
338
|
+
function $(e) {
|
|
300
339
|
return e === "right" ? "text-right" : e === "center" ? "text-center" : "text-left";
|
|
301
340
|
}
|
|
302
|
-
function
|
|
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
|
|
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:
|
|
320
|
-
class: v(
|
|
357
|
+
ref: z,
|
|
358
|
+
class: v(E(e)("overflow-hidden", h.class))
|
|
321
359
|
}, [
|
|
322
|
-
|
|
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(
|
|
326
|
-
default: D(() => [(y(), l(C(
|
|
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",
|
|
368
|
+
}, [f("div", re, [f("div", ie, [E(U)?.component ? (y(), l(C(E(U).component), {
|
|
331
369
|
key: 0,
|
|
332
|
-
value:
|
|
370
|
+
value: Z(t.row, E(U).key),
|
|
333
371
|
row: t.row
|
|
334
|
-
}, null, 8, ["value", "row"])) :
|
|
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)]),
|
|
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:
|
|
378
|
+
value: Z(t.row, n.key),
|
|
341
379
|
row: t.row
|
|
342
|
-
}, null, 8, ["value", "row"])) : (y(), d(s, { key: 1 }, [p(w(
|
|
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"])),
|
|
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",
|
|
350
|
-
default: D(() => [m(
|
|
351
|
-
default: D(() => [m(
|
|
352
|
-
default: D(() => [(y(!0), d(s, null, x(t.columns, (t) => (y(), l(
|
|
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(
|
|
355
|
-
onClick: (e) =>
|
|
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(
|
|
395
|
+
default: D(() => [p(w(t.label) + w(le(t)), 1)]),
|
|
358
396
|
_: 2
|
|
359
|
-
}, 1032, ["class", "onClick"]))), 128)),
|
|
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(
|
|
367
|
-
default: D(() => [t.isLoading && t.rows.length === 0 ? (y(!0), d(s, { key: 0 }, x(
|
|
368
|
-
default: D(() => [(y(!0), d(s, null, x(t.columns, (e) => (y(), l(
|
|
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(
|
|
408
|
+
class: v($(e.align))
|
|
371
409
|
}, {
|
|
372
|
-
default: D(() => [m(
|
|
410
|
+
default: D(() => [m(E(R), { class: "h-4 w-3/4" })]),
|
|
373
411
|
_: 1
|
|
374
|
-
}, 8, ["class"]))), 128)),
|
|
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(
|
|
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(
|
|
383
|
-
default: D(() => [m(
|
|
384
|
-
default: D(() => [m(
|
|
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(
|
|
426
|
+
default: D(() => [(y(!0), d(s, null, x(t.columns, (t) => (y(), l(E(M), {
|
|
389
427
|
key: t.key,
|
|
390
|
-
class: v(
|
|
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:
|
|
432
|
+
value: Z(c.row, t.key),
|
|
395
433
|
row: c.row
|
|
396
|
-
}, null, 8, ["value", "row"])) : (y(), d(s, { key: 1 }, [p(w(
|
|
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)),
|
|
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(
|
|
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(
|
|
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(
|
|
457
|
+
default: D(() => [(y(!0), d(s, null, x(t.columns, (t) => (y(), l(E(M), {
|
|
420
458
|
key: t.key,
|
|
421
|
-
class: v(
|
|
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:
|
|
463
|
+
value: Z(c.row, t.key),
|
|
426
464
|
row: c.row
|
|
427
|
-
}, null, 8, ["value", "row"])) : (y(), d(s, { key: 1 }, [p(w(
|
|
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)),
|
|
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(
|
|
476
|
+
}, 1032, ["onClick"]))], 64))), 128)) : (y(), l(E(L), {
|
|
439
477
|
key: 2,
|
|
440
|
-
colspan: t.columns.length + +!!
|
|
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,
|
|
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-
|
|
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", {
|
package/dist/api/index.d.ts
CHANGED
|
@@ -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-
|
|
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-
|
|
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;
|
|
@@ -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>;
|