@craftzbay/ui 0.10.0 → 0.11.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/README.md +14 -8
- package/dist-lib/__tests__/helpers/color.d.ts +9 -0
- package/dist-lib/__tests__/helpers/theme.d.ts +18 -0
- package/dist-lib/components/ui/Accordion.js +18 -7
- package/dist-lib/components/ui/Accordion.js.map +1 -1
- package/dist-lib/components/ui/Alert.d.ts +16 -0
- package/dist-lib/components/ui/Alert.js +47 -34
- package/dist-lib/components/ui/Alert.js.map +1 -1
- package/dist-lib/components/ui/Avatar.d.ts +1 -1
- package/dist-lib/components/ui/Avatar.js +45 -47
- package/dist-lib/components/ui/Avatar.js.map +1 -1
- package/dist-lib/components/ui/Badge.d.ts +3 -1
- package/dist-lib/components/ui/Badge.js +24 -15
- package/dist-lib/components/ui/Badge.js.map +1 -1
- package/dist-lib/components/ui/Breadcrumbs.d.ts +2 -0
- package/dist-lib/components/ui/Breadcrumbs.js +46 -28
- package/dist-lib/components/ui/Breadcrumbs.js.map +1 -1
- package/dist-lib/components/ui/Button.d.ts +5 -3
- package/dist-lib/components/ui/Button.js +59 -45
- package/dist-lib/components/ui/Button.js.map +1 -1
- package/dist-lib/components/ui/Calendar.d.ts +1 -1
- package/dist-lib/components/ui/Calendar.js +87 -59
- package/dist-lib/components/ui/Calendar.js.map +1 -1
- package/dist-lib/components/ui/Card.d.ts +2 -0
- package/dist-lib/components/ui/Card.js +48 -67
- package/dist-lib/components/ui/Card.js.map +1 -1
- package/dist-lib/components/ui/Carousel.d.ts +6 -6
- package/dist-lib/components/ui/Carousel.js +133 -102
- package/dist-lib/components/ui/Carousel.js.map +1 -1
- package/dist-lib/components/ui/Chart.d.ts +49 -10
- package/dist-lib/components/ui/Chart.js +415 -181
- package/dist-lib/components/ui/Chart.js.map +1 -1
- package/dist-lib/components/ui/Checkbox.js +42 -28
- package/dist-lib/components/ui/Checkbox.js.map +1 -1
- package/dist-lib/components/ui/Combobox.d.ts +2 -0
- package/dist-lib/components/ui/Combobox.js +142 -111
- package/dist-lib/components/ui/Combobox.js.map +1 -1
- package/dist-lib/components/ui/CommandPalette.d.ts +6 -3
- package/dist-lib/components/ui/CommandPalette.js +92 -87
- package/dist-lib/components/ui/CommandPalette.js.map +1 -1
- package/dist-lib/components/ui/ContextMenu.d.ts +7 -2
- package/dist-lib/components/ui/ContextMenu.js +77 -62
- package/dist-lib/components/ui/ContextMenu.js.map +1 -1
- package/dist-lib/components/ui/DataGrid.d.ts +17 -4
- package/dist-lib/components/ui/DataGrid.js +65 -50
- package/dist-lib/components/ui/DataGrid.js.map +1 -1
- package/dist-lib/components/ui/DatePicker.js +118 -99
- package/dist-lib/components/ui/DatePicker.js.map +1 -1
- package/dist-lib/components/ui/DesignSystemProvider.d.ts +94 -40
- package/dist-lib/components/ui/DesignSystemProvider.js +111 -55
- package/dist-lib/components/ui/DesignSystemProvider.js.map +1 -1
- package/dist-lib/components/ui/Dialog.d.ts +18 -3
- package/dist-lib/components/ui/Dialog.js +105 -80
- package/dist-lib/components/ui/Dialog.js.map +1 -1
- package/dist-lib/components/ui/Drawer.d.ts +17 -2
- package/dist-lib/components/ui/Drawer.js +89 -55
- package/dist-lib/components/ui/Drawer.js.map +1 -1
- package/dist-lib/components/ui/DropdownMenu.js +14 -9
- package/dist-lib/components/ui/DropdownMenu.js.map +1 -1
- package/dist-lib/components/ui/EmptyState.d.ts +2 -0
- package/dist-lib/components/ui/EmptyState.js +30 -16
- package/dist-lib/components/ui/EmptyState.js.map +1 -1
- package/dist-lib/components/ui/ErrorState.d.ts +13 -2
- package/dist-lib/components/ui/ErrorState.js +44 -23
- package/dist-lib/components/ui/ErrorState.js.map +1 -1
- package/dist-lib/components/ui/FileUpload.js +59 -56
- package/dist-lib/components/ui/FileUpload.js.map +1 -1
- package/dist-lib/components/ui/Form.d.ts +15 -2
- package/dist-lib/components/ui/Form.js +97 -71
- package/dist-lib/components/ui/Form.js.map +1 -1
- package/dist-lib/components/ui/Icon.d.ts +1 -1
- package/dist-lib/components/ui/Icon.js +20 -14
- package/dist-lib/components/ui/Icon.js.map +1 -1
- package/dist-lib/components/ui/IconButton.d.ts +2 -2
- package/dist-lib/components/ui/IconButton.js +28 -20
- package/dist-lib/components/ui/IconButton.js.map +1 -1
- package/dist-lib/components/ui/Input.d.ts +3 -1
- package/dist-lib/components/ui/Input.js +92 -78
- package/dist-lib/components/ui/Input.js.map +1 -1
- package/dist-lib/components/ui/Kbd.js +1 -1
- package/dist-lib/components/ui/Kbd.js.map +1 -1
- package/dist-lib/components/ui/MultiSelect.js +121 -107
- package/dist-lib/components/ui/MultiSelect.js.map +1 -1
- package/dist-lib/components/ui/Pagination.js +67 -62
- package/dist-lib/components/ui/Pagination.js.map +1 -1
- package/dist-lib/components/ui/Popover.js +14 -14
- package/dist-lib/components/ui/Popover.js.map +1 -1
- package/dist-lib/components/ui/Progress.d.ts +3 -3
- package/dist-lib/components/ui/Progress.js +77 -72
- package/dist-lib/components/ui/Progress.js.map +1 -1
- package/dist-lib/components/ui/RadioGroup.d.ts +1 -1
- package/dist-lib/components/ui/RadioGroup.js +69 -52
- package/dist-lib/components/ui/RadioGroup.js.map +1 -1
- package/dist-lib/components/ui/RelativeTime.d.ts +19 -0
- package/dist-lib/components/ui/RelativeTime.js +31 -0
- package/dist-lib/components/ui/RelativeTime.js.map +1 -0
- package/dist-lib/components/ui/ScrollArea.d.ts +9 -1
- package/dist-lib/components/ui/ScrollArea.js +43 -27
- package/dist-lib/components/ui/ScrollArea.js.map +1 -1
- package/dist-lib/components/ui/Select.d.ts +6 -1
- package/dist-lib/components/ui/Select.js +79 -71
- package/dist-lib/components/ui/Select.js.map +1 -1
- package/dist-lib/components/ui/Separator.js +1 -1
- package/dist-lib/components/ui/Separator.js.map +1 -1
- package/dist-lib/components/ui/Sheet.d.ts +9 -0
- package/dist-lib/components/ui/Sheet.js +69 -46
- package/dist-lib/components/ui/Sheet.js.map +1 -1
- package/dist-lib/components/ui/Sidebar.d.ts +12 -9
- package/dist-lib/components/ui/Sidebar.js +152 -109
- package/dist-lib/components/ui/Sidebar.js.map +1 -1
- package/dist-lib/components/ui/Skeleton.d.ts +13 -2
- package/dist-lib/components/ui/Skeleton.js +15 -14
- package/dist-lib/components/ui/Skeleton.js.map +1 -1
- package/dist-lib/components/ui/Slider.js +41 -29
- package/dist-lib/components/ui/Slider.js.map +1 -1
- package/dist-lib/components/ui/Snackbar.js +23 -22
- package/dist-lib/components/ui/Snackbar.js.map +1 -1
- package/dist-lib/components/ui/Spinner.js +18 -6
- package/dist-lib/components/ui/Spinner.js.map +1 -1
- package/dist-lib/components/ui/Stepper.d.ts +6 -0
- package/dist-lib/components/ui/Stepper.js +71 -48
- package/dist-lib/components/ui/Stepper.js.map +1 -1
- package/dist-lib/components/ui/Switch.js +46 -43
- package/dist-lib/components/ui/Switch.js.map +1 -1
- package/dist-lib/components/ui/Table.d.ts +33 -5
- package/dist-lib/components/ui/Table.js +141 -119
- package/dist-lib/components/ui/Table.js.map +1 -1
- package/dist-lib/components/ui/Tabs.js +50 -48
- package/dist-lib/components/ui/Tabs.js.map +1 -1
- package/dist-lib/components/ui/TagInput.js +45 -45
- package/dist-lib/components/ui/TagInput.js.map +1 -1
- package/dist-lib/components/ui/Textarea.js +65 -54
- package/dist-lib/components/ui/Textarea.js.map +1 -1
- package/dist-lib/components/ui/Timeline.js +39 -35
- package/dist-lib/components/ui/Timeline.js.map +1 -1
- package/dist-lib/components/ui/Toast.js +44 -57
- package/dist-lib/components/ui/Toast.js.map +1 -1
- package/dist-lib/components/ui/Tooltip.d.ts +4 -1
- package/dist-lib/components/ui/Tooltip.js +24 -22
- package/dist-lib/components/ui/Tooltip.js.map +1 -1
- package/dist-lib/components/ui/TopNav.d.ts +7 -3
- package/dist-lib/components/ui/TopNav.js +35 -25
- package/dist-lib/components/ui/TopNav.js.map +1 -1
- package/dist-lib/components/ui/Tree.d.ts +15 -10
- package/dist-lib/components/ui/Tree.js +82 -79
- package/dist-lib/components/ui/Tree.js.map +1 -1
- package/dist-lib/hooks/use-debounce.d.ts +19 -0
- package/dist-lib/hooks/use-debounce.js +36 -0
- package/dist-lib/hooks/use-debounce.js.map +1 -0
- package/dist-lib/hooks/use-delayed-loading.d.ts +21 -0
- package/dist-lib/hooks/use-delayed-loading.js +20 -0
- package/dist-lib/hooks/use-delayed-loading.js.map +1 -0
- package/dist-lib/hooks/use-field-ids.d.ts +2 -1
- package/dist-lib/hooks/use-field-ids.js +9 -9
- package/dist-lib/hooks/use-field-ids.js.map +1 -1
- package/dist-lib/hooks/use-media-query.d.ts +3 -1
- package/dist-lib/hooks/use-media-query.js +16 -12
- package/dist-lib/hooks/use-media-query.js.map +1 -1
- package/dist-lib/hooks/use-modifier-key.d.ts +13 -0
- package/dist-lib/hooks/use-modifier-key.js +19 -0
- package/dist-lib/hooks/use-modifier-key.js.map +1 -0
- package/dist-lib/hooks/use-toast.d.ts +7 -2
- package/dist-lib/hooks/use-toast.js +61 -30
- package/dist-lib/hooks/use-toast.js.map +1 -1
- package/dist-lib/icons/index.d.ts +9 -0
- package/dist-lib/icons/index.js +148 -130
- package/dist-lib/icons/index.js.map +1 -1
- package/dist-lib/illustrations/index.d.ts +1 -0
- package/dist-lib/illustrations/index.js +15 -6
- package/dist-lib/illustrations/index.js.map +1 -1
- package/dist-lib/index.d.ts +6 -0
- package/dist-lib/index.js +280 -260
- package/dist-lib/index.js.map +1 -1
- package/dist-lib/lib/format.d.ts +65 -0
- package/dist-lib/lib/format.js +95 -0
- package/dist-lib/lib/format.js.map +1 -0
- package/dist-lib/lib/return-focus.d.ts +11 -0
- package/dist-lib/lib/return-focus.js +12 -0
- package/dist-lib/lib/return-focus.js.map +1 -0
- package/dist-lib/lib/strings.d.ts +62 -1
- package/dist-lib/lib/strings.js +75 -19
- package/dist-lib/lib/strings.js.map +1 -1
- package/dist-lib/lib/strings.mn.js +50 -5
- package/dist-lib/lib/strings.mn.js.map +1 -1
- package/dist-lib/styles.css +1 -1
- package/dist-lib/theme.css +141 -78
- package/package.json +10 -3
|
@@ -1,157 +1,179 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as
|
|
3
|
-
import { forwardRef as
|
|
4
|
-
import { ArrowUp as
|
|
2
|
+
import { jsx as o, jsxs as T } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef as l } from "react";
|
|
4
|
+
import { ArrowUp as v, ArrowDown as x, ArrowUpDown as N } from "../../icons/index.js";
|
|
5
5
|
import { cn as r } from "../../lib/utils.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
import { useStrings as h } from "../../hooks/use-strings.js";
|
|
7
|
+
const y = l(function({ className: t, containerClassName: e, maxHeight: a, scrollLabel: s, ...n }, d) {
|
|
8
|
+
const u = h();
|
|
9
|
+
return (
|
|
10
|
+
// Whether the wrapper actually overflows is not knowable statically, so it
|
|
11
|
+
// is always a tab stop (WCAG 2.1.1 / axe scrollable-region-focusable).
|
|
12
|
+
/* @__PURE__ */ o(
|
|
13
|
+
"div",
|
|
10
14
|
{
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
) });
|
|
16
|
-
}
|
|
17
|
-
);
|
|
18
|
-
x.displayName = "Table";
|
|
19
|
-
const h = s(
|
|
20
|
-
function({ className: a, ...e }, o) {
|
|
21
|
-
return /* @__PURE__ */ t(
|
|
22
|
-
"thead",
|
|
23
|
-
{
|
|
24
|
-
ref: o,
|
|
15
|
+
role: "group",
|
|
16
|
+
"aria-label": s ?? u.table.scrollRegion,
|
|
17
|
+
tabIndex: 0,
|
|
25
18
|
className: r(
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
|
|
19
|
+
"relative isolate w-full overflow-auto",
|
|
20
|
+
"focus-visible:ring-ring focus-visible:ring-offset-background outline-none focus-visible:ring-2 focus-visible:ring-offset-2",
|
|
21
|
+
e
|
|
29
22
|
),
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
"tbody",
|
|
40
|
-
{
|
|
41
|
-
ref: o,
|
|
42
|
-
className: r("[&_tr:last-child]:border-0", a),
|
|
43
|
-
...e
|
|
44
|
-
}
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
);
|
|
48
|
-
v.displayName = "TableBody";
|
|
49
|
-
const y = s(
|
|
50
|
-
function({ className: a, ...e }, o) {
|
|
51
|
-
return /* @__PURE__ */ t(
|
|
52
|
-
"tfoot",
|
|
53
|
-
{
|
|
54
|
-
ref: o,
|
|
55
|
-
className: r("border-t border-border bg-background-subtle font-medium", a),
|
|
56
|
-
...e
|
|
23
|
+
style: a !== void 0 ? { maxHeight: a } : void 0,
|
|
24
|
+
children: /* @__PURE__ */ o(
|
|
25
|
+
"table",
|
|
26
|
+
{
|
|
27
|
+
ref: d,
|
|
28
|
+
className: r("w-full caption-bottom border-collapse text-sm", t),
|
|
29
|
+
...n
|
|
30
|
+
}
|
|
31
|
+
)
|
|
57
32
|
}
|
|
58
|
-
)
|
|
59
|
-
|
|
60
|
-
);
|
|
61
|
-
y.displayName = "
|
|
62
|
-
const w =
|
|
63
|
-
return /* @__PURE__ */
|
|
33
|
+
)
|
|
34
|
+
);
|
|
35
|
+
});
|
|
36
|
+
y.displayName = "Table";
|
|
37
|
+
const w = l(function({ className: t, ...e }, a) {
|
|
38
|
+
return /* @__PURE__ */ o(
|
|
39
|
+
"thead",
|
|
40
|
+
{
|
|
41
|
+
ref: a,
|
|
42
|
+
className: r(
|
|
43
|
+
"bg-background-subtle text-foreground-muted sticky top-0 z-10",
|
|
44
|
+
"[&_tr]:border-border [&_tr]:border-b",
|
|
45
|
+
t
|
|
46
|
+
),
|
|
47
|
+
...e
|
|
48
|
+
}
|
|
49
|
+
);
|
|
50
|
+
});
|
|
51
|
+
w.displayName = "TableHeader";
|
|
52
|
+
const k = l(function({ className: t, ...e }, a) {
|
|
53
|
+
return /* @__PURE__ */ o("tbody", { ref: a, className: r("[&_tr:last-child]:border-0", t), ...e });
|
|
54
|
+
});
|
|
55
|
+
k.displayName = "TableBody";
|
|
56
|
+
const C = l(function({ className: t, ...e }, a) {
|
|
57
|
+
return /* @__PURE__ */ o(
|
|
58
|
+
"tfoot",
|
|
59
|
+
{
|
|
60
|
+
ref: a,
|
|
61
|
+
className: r("border-border bg-background-subtle border-t font-medium", t),
|
|
62
|
+
...e
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
});
|
|
66
|
+
C.displayName = "TableFooter";
|
|
67
|
+
const H = l(function({ className: t, selected: e, role: a, ...s }, n) {
|
|
68
|
+
return /* @__PURE__ */ o(
|
|
64
69
|
"tr",
|
|
65
70
|
{
|
|
66
71
|
ref: n,
|
|
67
|
-
|
|
68
|
-
"
|
|
72
|
+
role: a,
|
|
73
|
+
"data-state": e ? "selected" : void 0,
|
|
74
|
+
"aria-selected": e && a === "row" ? !0 : void 0,
|
|
69
75
|
className: r(
|
|
70
|
-
"border-
|
|
76
|
+
"border-border border-b transition-colors duration-[var(--duration-fast)]",
|
|
71
77
|
"hover:bg-background-subtle",
|
|
72
|
-
"data-[selected]:bg-accent-soft data-[selected]:hover:bg-accent-soft",
|
|
73
|
-
|
|
78
|
+
"data-[state=selected]:bg-accent-soft data-[state=selected]:hover:bg-accent-soft",
|
|
79
|
+
t
|
|
74
80
|
),
|
|
75
|
-
...
|
|
81
|
+
...s
|
|
76
82
|
}
|
|
77
83
|
);
|
|
78
84
|
});
|
|
79
|
-
|
|
80
|
-
const
|
|
81
|
-
|
|
85
|
+
H.displayName = "TableRow";
|
|
86
|
+
const f = {
|
|
87
|
+
left: "text-left",
|
|
88
|
+
center: "text-center",
|
|
89
|
+
/* Numeric columns: right-aligned + tabular figures so digits line up. */
|
|
90
|
+
right: "text-right tabular"
|
|
91
|
+
}, m = l(function({ className: t, uppercase: e = !1, align: a = "left", ...s }, n) {
|
|
92
|
+
return /* @__PURE__ */ o(
|
|
82
93
|
"th",
|
|
83
94
|
{
|
|
84
95
|
ref: n,
|
|
85
96
|
className: r(
|
|
86
|
-
"h-10 px-3
|
|
87
|
-
|
|
97
|
+
"text-foreground-subtle h-10 px-3 align-middle text-xs font-medium",
|
|
98
|
+
f[a],
|
|
99
|
+
e && "tracking-wide uppercase",
|
|
88
100
|
"[&:has([role=checkbox])]:w-10 [&:has([role=checkbox])]:pr-0",
|
|
89
|
-
|
|
101
|
+
t
|
|
90
102
|
),
|
|
91
|
-
...
|
|
103
|
+
...s
|
|
92
104
|
}
|
|
93
105
|
);
|
|
94
106
|
});
|
|
95
|
-
|
|
96
|
-
const
|
|
97
|
-
return /* @__PURE__ */
|
|
107
|
+
m.displayName = "TableHead";
|
|
108
|
+
const R = l(function({ className: t, align: e = "left", ...a }, s) {
|
|
109
|
+
return /* @__PURE__ */ o(
|
|
98
110
|
"td",
|
|
99
111
|
{
|
|
100
|
-
ref:
|
|
101
|
-
className: r("px-3 py-3 align-middle
|
|
112
|
+
ref: s,
|
|
113
|
+
className: r("text-foreground px-3 py-3 align-middle", f[e], t),
|
|
114
|
+
...a
|
|
115
|
+
}
|
|
116
|
+
);
|
|
117
|
+
});
|
|
118
|
+
R.displayName = "TableCell";
|
|
119
|
+
const z = l(function({ className: t, ...e }, a) {
|
|
120
|
+
return /* @__PURE__ */ o(
|
|
121
|
+
"caption",
|
|
122
|
+
{
|
|
123
|
+
ref: a,
|
|
124
|
+
className: r("text-foreground-subtle mt-4 text-sm", t),
|
|
102
125
|
...e
|
|
103
126
|
}
|
|
104
127
|
);
|
|
105
128
|
});
|
|
106
|
-
|
|
107
|
-
const
|
|
108
|
-
function({
|
|
109
|
-
|
|
110
|
-
"
|
|
111
|
-
{
|
|
112
|
-
ref: o,
|
|
113
|
-
className: r("mt-4 text-sm text-foreground-subtle", a),
|
|
114
|
-
...e
|
|
115
|
-
}
|
|
116
|
-
);
|
|
117
|
-
}
|
|
118
|
-
);
|
|
119
|
-
H.displayName = "TableCaption";
|
|
120
|
-
const C = s(
|
|
121
|
-
function({ sortKey: a, currentSort: e, onSortChange: o, children: n, className: b, ...u }, f) {
|
|
122
|
-
const i = (e == null ? void 0 : e.key) === a, d = i ? e == null ? void 0 : e.direction : void 0, m = () => {
|
|
123
|
-
o(a, i && d === "asc" ? "desc" : "asc");
|
|
129
|
+
z.displayName = "TableCaption";
|
|
130
|
+
const j = l(
|
|
131
|
+
function({ sortKey: t, currentSort: e, onSortChange: a, children: s, className: n, align: d = "left", ...u }, g) {
|
|
132
|
+
const c = (e == null ? void 0 : e.key) === t, b = c ? e == null ? void 0 : e.direction : void 0, p = () => {
|
|
133
|
+
a(t, c && b === "asc" ? "desc" : "asc");
|
|
124
134
|
};
|
|
125
|
-
return /* @__PURE__ */
|
|
126
|
-
|
|
135
|
+
return /* @__PURE__ */ o(
|
|
136
|
+
m,
|
|
127
137
|
{
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
className: r(
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
"
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
138
|
+
ref: g,
|
|
139
|
+
align: d,
|
|
140
|
+
className: r("p-0", n),
|
|
141
|
+
"aria-sort": c ? b === "asc" ? "ascending" : "descending" : void 0,
|
|
142
|
+
...u,
|
|
143
|
+
children: /* @__PURE__ */ T(
|
|
144
|
+
"button",
|
|
145
|
+
{
|
|
146
|
+
type: "button",
|
|
147
|
+
onClick: p,
|
|
148
|
+
className: r(
|
|
149
|
+
"inline-flex h-10 w-full items-center gap-1.5 px-3 outline-none",
|
|
150
|
+
d === "right" && "flex-row-reverse",
|
|
151
|
+
d === "center" && "justify-center",
|
|
152
|
+
"transition-colors duration-[var(--duration-fast)]",
|
|
153
|
+
"hover:text-foreground focus-visible:text-foreground",
|
|
154
|
+
"focus-visible:ring-ring focus-visible:ring-offset-background rounded-sm focus-visible:ring-2 focus-visible:ring-offset-2",
|
|
155
|
+
c && "text-foreground"
|
|
156
|
+
),
|
|
157
|
+
children: [
|
|
158
|
+
s,
|
|
159
|
+
b === "asc" ? /* @__PURE__ */ o(v, { className: "size-3.5", "aria-hidden": !0 }) : b === "desc" ? /* @__PURE__ */ o(x, { className: "size-3.5", "aria-hidden": !0 }) : /* @__PURE__ */ o(N, { className: "size-3.5 opacity-40", "aria-hidden": !0 })
|
|
160
|
+
]
|
|
161
|
+
}
|
|
162
|
+
)
|
|
141
163
|
}
|
|
142
|
-
)
|
|
164
|
+
);
|
|
143
165
|
}
|
|
144
166
|
);
|
|
145
|
-
|
|
167
|
+
j.displayName = "TableSortHeader";
|
|
146
168
|
export {
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
169
|
+
y as Table,
|
|
170
|
+
k as TableBody,
|
|
171
|
+
z as TableCaption,
|
|
172
|
+
R as TableCell,
|
|
173
|
+
C as TableFooter,
|
|
174
|
+
m as TableHead,
|
|
175
|
+
w as TableHeader,
|
|
176
|
+
H as TableRow,
|
|
177
|
+
j as TableSortHeader
|
|
156
178
|
};
|
|
157
179
|
//# sourceMappingURL=Table.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.js","sources":["../../../src/components/ui/Table.tsx"],"sourcesContent":["'use client';\n\nimport { forwardRef, type HTMLAttributes, type ThHTMLAttributes, type TdHTMLAttributes } from 'react';\nimport { ArrowDown, ArrowUp, ArrowUpDown } from '@/icons';\nimport { cn } from '@/lib/utils';\n\n/* -----------------------------------------------------------------------------\n * Table primitives — minimal sugar over <table>. Pair with a sortable\n * header helper (`TableSortHeader`) when you need built-in sort visuals.\n * Empty + loading states are pure composition with the rest of the system.\n * --------------------------------------------------------------------------- */\n\nexport const Table = forwardRef<HTMLTableElement, HTMLAttributes<HTMLTableElement>>(\n function Table({ className, ...props }, ref) {\n return (\n <div className=\"relative w-full overflow-auto\">\n <table\n ref={ref}\n className={cn('w-full caption-bottom text-sm border-collapse', className)}\n {...props}\n />\n </div>\n );\n },\n);\nTable.displayName = 'Table';\n\nexport const TableHeader = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n function TableHeader({ className, ...props }, ref) {\n return (\n <thead\n ref={ref}\n className={cn(\n 'sticky top-0 z-10 bg-background-subtle text-foreground-muted',\n '[&_tr]:border-b [&_tr]:border-border',\n className,\n )}\n {...props}\n />\n );\n },\n);\nTableHeader.displayName = 'TableHeader';\n\nexport const TableBody = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n function TableBody({ className, ...props }, ref) {\n return (\n <tbody\n ref={ref}\n className={cn('[&_tr:last-child]:border-0', className)}\n {...props}\n />\n );\n },\n);\nTableBody.displayName = 'TableBody';\n\nexport const TableFooter = forwardRef<HTMLTableSectionElement, HTMLAttributes<HTMLTableSectionElement>>(\n function TableFooter({ className, ...props }, ref) {\n return (\n <tfoot\n ref={ref}\n className={cn('border-t border-border bg-background-subtle font-medium', className)}\n {...props}\n />\n );\n },\n);\nTableFooter.displayName = 'TableFooter';\n\nexport const TableRow = forwardRef<\n HTMLTableRowElement,\n HTMLAttributes<HTMLTableRowElement> & { selected?: boolean }\n>(function TableRow({ className, selected, ...props }, ref) {\n return (\n <tr\n ref={ref}\n data-selected={selected || undefined}\n aria-selected={selected || undefined}\n className={cn(\n 'border-b border-border transition-colors duration-[var(--duration-fast)]',\n 'hover:bg-background-subtle',\n 'data-[selected]:bg-accent-soft data-[selected]:hover:bg-accent-soft',\n className,\n )}\n {...props}\n />\n );\n});\nTableRow.displayName = 'TableRow';\n\nexport interface TableHeadProps extends ThHTMLAttributes<HTMLTableCellElement> {\n /**\n * Render the header label in small caps (`uppercase tracking-wide`).\n * Off by default — mixed case reads better for long / Cyrillic labels.\n * @default false\n */\n uppercase?: boolean;\n}\n\nexport const TableHead = forwardRef<HTMLTableCellElement, TableHeadProps>(function TableHead(\n { className, uppercase = false, ...props },\n ref,\n) {\n return (\n <th\n ref={ref}\n className={cn(\n 'h-10 px-3 text-left align-middle text-xs font-medium text-foreground-subtle',\n uppercase && 'uppercase tracking-wide',\n '[&:has([role=checkbox])]:w-10 [&:has([role=checkbox])]:pr-0',\n className,\n )}\n {...props}\n />\n );\n});\nTableHead.displayName = 'TableHead';\n\nexport const TableCell = forwardRef<\n HTMLTableCellElement,\n TdHTMLAttributes<HTMLTableCellElement>\n>(function TableCell({ className, ...props }, ref) {\n return (\n <td\n ref={ref}\n className={cn('px-3 py-3 align-middle text-foreground', className)}\n {...props}\n />\n );\n});\nTableCell.displayName = 'TableCell';\n\nexport const TableCaption = forwardRef<HTMLTableCaptionElement, HTMLAttributes<HTMLTableCaptionElement>>(\n function TableCaption({ className, ...props }, ref) {\n return (\n <caption\n ref={ref}\n className={cn('mt-4 text-sm text-foreground-subtle', className)}\n {...props}\n />\n );\n },\n);\nTableCaption.displayName = 'TableCaption';\n\nexport interface TableSortHeaderProps extends ThHTMLAttributes<HTMLTableCellElement> {\n /** Stable column key used in `currentSort.key`. */\n sortKey: string;\n /** Currently sorted column + direction (or null). */\n currentSort: { key: string; direction: 'asc' | 'desc' } | null;\n /** Called when the user clicks the header. */\n onSortChange: (key: string, direction: 'asc' | 'desc') => void;\n}\n\n/**\n * Sortable column header. Click toggles asc → desc → asc; the icon reflects\n * the current state.\n *\n * @example\n * <TableSortHeader sortKey=\"name\" currentSort={sort} onSortChange={onSort}>\n * Name\n * </TableSortHeader>\n *\n * @do Sort by one column at a time. Multi-sort hides state from users.\n * @dont Sort silently — the icon must change so users see what changed.\n */\nexport const TableSortHeader = forwardRef<HTMLTableCellElement, TableSortHeaderProps>(\n function TableSortHeader(\n { sortKey, currentSort, onSortChange, children, className, ...props },\n ref,\n ) {\n const active = currentSort?.key === sortKey;\n const direction = active ? currentSort?.direction : undefined;\n const handle = () => {\n onSortChange(sortKey, active && direction === 'asc' ? 'desc' : 'asc');\n };\n return (\n <TableHead ref={ref} className={cn('p-0', className)} aria-sort={active ? (direction === 'asc' ? 'ascending' : 'descending') : 'none'} {...props}>\n <button\n type=\"button\"\n onClick={handle}\n className={cn(\n 'inline-flex h-10 w-full items-center gap-1.5 px-3 outline-none',\n 'transition-colors duration-[var(--duration-fast)]',\n 'hover:text-foreground focus-visible:text-foreground',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background rounded-sm',\n active && 'text-foreground',\n )}\n >\n {children}\n {direction === 'asc' ? (\n <ArrowUp className=\"size-3.5\" aria-hidden />\n ) : direction === 'desc' ? (\n <ArrowDown className=\"size-3.5\" aria-hidden />\n ) : (\n <ArrowUpDown className=\"size-3.5 opacity-40\" aria-hidden />\n )}\n </button>\n </TableHead>\n );\n },\n);\nTableSortHeader.displayName = 'TableSortHeader';\n"],"names":["Table","forwardRef","className","props","ref","jsx","cn","TableHeader","TableBody","TableFooter","TableRow","selected","TableHead","uppercase","TableCell","TableCaption","TableSortHeader","sortKey","currentSort","onSortChange","children","active","direction","handle","jsxs","ArrowUp","ArrowDown","ArrowUpDown"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Table.js","sources":["../../../src/components/ui/Table.tsx"],"sourcesContent":["'use client';\n\nimport {\n forwardRef,\n type CSSProperties,\n type HTMLAttributes,\n type ThHTMLAttributes,\n type TdHTMLAttributes,\n} from 'react';\nimport { ArrowDown, ArrowUp, ArrowUpDown } from '@/icons';\nimport { cn } from '@/lib/utils';\nimport { useStrings } from '@/hooks/use-strings';\n\n/* -----------------------------------------------------------------------------\n * Table primitives — minimal sugar over <table>. Pair with a sortable\n * header helper (`TableSortHeader`) when you need built-in sort visuals.\n * Empty + loading states are pure composition with the rest of the system.\n * --------------------------------------------------------------------------- */\n\nexport interface TableProps extends HTMLAttributes<HTMLTableElement> {\n /** Class for the scroll wrapper (border, radius, height). */\n containerClassName?: string;\n /**\n * Max height of the scroll wrapper. Required for the sticky header to\n * work — `<thead>` sticks to the nearest scroll container, so a wrapper\n * with no height cap never scrolls. e.g. `maxHeight=\"24rem\"`.\n */\n maxHeight?: CSSProperties['maxHeight'];\n /**\n * Accessible name of the scroll wrapper (it is a focusable `group` so\n * keyboard users can scroll wide / capped tables). Defaults to\n * `strings.table.scrollRegion`; pass the table's own title when you have one.\n */\n scrollLabel?: string;\n}\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(function Table(\n { className, containerClassName, maxHeight, scrollLabel, ...props },\n ref,\n) {\n const strings = useStrings();\n return (\n // Whether the wrapper actually overflows is not knowable statically, so it\n // is always a tab stop (WCAG 2.1.1 / axe scrollable-region-focusable).\n <div\n role=\"group\"\n aria-label={scrollLabel ?? strings.table.scrollRegion}\n tabIndex={0}\n className={cn(\n 'relative isolate w-full overflow-auto',\n 'focus-visible:ring-ring focus-visible:ring-offset-background outline-none focus-visible:ring-2 focus-visible:ring-offset-2',\n containerClassName,\n )}\n style={maxHeight !== undefined ? { maxHeight } : undefined}\n >\n <table\n ref={ref}\n className={cn('w-full caption-bottom border-collapse text-sm', className)}\n {...props}\n />\n </div>\n );\n});\nTable.displayName = 'Table';\n\nexport const TableHeader = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(function TableHeader({ className, ...props }, ref) {\n return (\n <thead\n ref={ref}\n className={cn(\n 'bg-background-subtle text-foreground-muted sticky top-0 z-10',\n '[&_tr]:border-border [&_tr]:border-b',\n className,\n )}\n {...props}\n />\n );\n});\nTableHeader.displayName = 'TableHeader';\n\nexport const TableBody = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(function TableBody({ className, ...props }, ref) {\n return <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />;\n});\nTableBody.displayName = 'TableBody';\n\nexport const TableFooter = forwardRef<\n HTMLTableSectionElement,\n HTMLAttributes<HTMLTableSectionElement>\n>(function TableFooter({ className, ...props }, ref) {\n return (\n <tfoot\n ref={ref}\n className={cn('border-border bg-background-subtle border-t font-medium', className)}\n {...props}\n />\n );\n});\nTableFooter.displayName = 'TableFooter';\n\nexport const TableRow = forwardRef<\n HTMLTableRowElement,\n HTMLAttributes<HTMLTableRowElement> & {\n /**\n * Visual selected state (`data-state=\"selected\"`). `aria-selected` is only\n * valid on rows of an ARIA grid, so it is emitted only when the row\n * carries `role=\"row\"` (i.e. you opted into `role=\"grid\"` on the table).\n */\n selected?: boolean;\n }\n>(function TableRow({ className, selected, role, ...props }, ref) {\n return (\n <tr\n ref={ref}\n role={role}\n data-state={selected ? 'selected' : undefined}\n aria-selected={selected && role === 'row' ? true : undefined}\n className={cn(\n 'border-border border-b transition-colors duration-[var(--duration-fast)]',\n 'hover:bg-background-subtle',\n 'data-[state=selected]:bg-accent-soft data-[state=selected]:hover:bg-accent-soft',\n className,\n )}\n {...props}\n />\n );\n});\nTableRow.displayName = 'TableRow';\n\nexport type TableCellAlign = 'left' | 'center' | 'right';\n\nconst alignClass: Record<TableCellAlign, string> = {\n left: 'text-left',\n center: 'text-center',\n /* Numeric columns: right-aligned + tabular figures so digits line up. */\n right: 'text-right tabular',\n};\n\nexport interface TableHeadProps extends Omit<ThHTMLAttributes<HTMLTableCellElement>, 'align'> {\n /** Horizontal alignment; `right` also applies tabular figures. */\n align?: TableCellAlign;\n /**\n * Render the header label in small caps (`uppercase tracking-wide`).\n * Off by default — mixed case reads better for long / Cyrillic labels.\n * @default false\n */\n uppercase?: boolean;\n}\n\nexport const TableHead = forwardRef<HTMLTableCellElement, TableHeadProps>(function TableHead(\n { className, uppercase = false, align = 'left', ...props },\n ref,\n) {\n return (\n <th\n ref={ref}\n className={cn(\n 'text-foreground-subtle h-10 px-3 align-middle text-xs font-medium',\n alignClass[align],\n uppercase && 'tracking-wide uppercase',\n '[&:has([role=checkbox])]:w-10 [&:has([role=checkbox])]:pr-0',\n className,\n )}\n {...props}\n />\n );\n});\nTableHead.displayName = 'TableHead';\n\nexport interface TableCellProps extends Omit<TdHTMLAttributes<HTMLTableCellElement>, 'align'> {\n /** Horizontal alignment; `right` also applies tabular figures for numbers. */\n align?: TableCellAlign;\n}\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(function TableCell(\n { className, align = 'left', ...props },\n ref,\n) {\n return (\n <td\n ref={ref}\n className={cn('text-foreground px-3 py-3 align-middle', alignClass[align], className)}\n {...props}\n />\n );\n});\nTableCell.displayName = 'TableCell';\n\nexport const TableCaption = forwardRef<\n HTMLTableCaptionElement,\n HTMLAttributes<HTMLTableCaptionElement>\n>(function TableCaption({ className, ...props }, ref) {\n return (\n <caption\n ref={ref}\n className={cn('text-foreground-subtle mt-4 text-sm', className)}\n {...props}\n />\n );\n});\nTableCaption.displayName = 'TableCaption';\n\nexport interface TableSortHeaderProps extends TableHeadProps {\n /** Stable column key used in `currentSort.key`. */\n sortKey: string;\n /** Currently sorted column + direction (or null). */\n currentSort: { key: string; direction: 'asc' | 'desc' } | null;\n /** Called when the user clicks the header. */\n onSortChange: (key: string, direction: 'asc' | 'desc') => void;\n}\n\n/**\n * Sortable column header. Click toggles asc → desc → asc; the icon reflects\n * the current state.\n *\n * @example\n * <TableSortHeader sortKey=\"name\" currentSort={sort} onSortChange={onSort}>\n * Name\n * </TableSortHeader>\n *\n * @do Sort by one column at a time. Multi-sort hides state from users.\n * @dont Sort silently — the icon must change so users see what changed.\n */\nexport const TableSortHeader = forwardRef<HTMLTableCellElement, TableSortHeaderProps>(\n function TableSortHeader(\n { sortKey, currentSort, onSortChange, children, className, align = 'left', ...props },\n ref,\n ) {\n const active = currentSort?.key === sortKey;\n const direction = active ? currentSort?.direction : undefined;\n const handle = () => {\n onSortChange(sortKey, active && direction === 'asc' ? 'desc' : 'asc');\n };\n return (\n <TableHead\n ref={ref}\n align={align}\n className={cn('p-0', className)}\n // aria-sort only on the sorted column — 'none' everywhere else is noise.\n aria-sort={active ? (direction === 'asc' ? 'ascending' : 'descending') : undefined}\n {...props}\n >\n <button\n type=\"button\"\n onClick={handle}\n className={cn(\n 'inline-flex h-10 w-full items-center gap-1.5 px-3 outline-none',\n align === 'right' && 'flex-row-reverse',\n align === 'center' && 'justify-center',\n 'transition-colors duration-[var(--duration-fast)]',\n 'hover:text-foreground focus-visible:text-foreground',\n 'focus-visible:ring-ring focus-visible:ring-offset-background rounded-sm focus-visible:ring-2 focus-visible:ring-offset-2',\n active && 'text-foreground',\n )}\n >\n {children}\n {direction === 'asc' ? (\n <ArrowUp className=\"size-3.5\" aria-hidden />\n ) : direction === 'desc' ? (\n <ArrowDown className=\"size-3.5\" aria-hidden />\n ) : (\n <ArrowUpDown className=\"size-3.5 opacity-40\" aria-hidden />\n )}\n </button>\n </TableHead>\n );\n },\n);\nTableSortHeader.displayName = 'TableSortHeader';\n"],"names":["Table","forwardRef","className","containerClassName","maxHeight","scrollLabel","props","ref","strings","useStrings","jsx","cn","TableHeader","TableBody","TableFooter","TableRow","selected","role","alignClass","TableHead","uppercase","align","TableCell","TableCaption","TableSortHeader","sortKey","currentSort","onSortChange","children","active","direction","handle","jsxs","ArrowUp","ArrowDown","ArrowUpDown"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsx as
|
|
3
|
-
import { forwardRef as
|
|
4
|
-
import * as
|
|
5
|
-
import { cn as
|
|
6
|
-
import { cva as
|
|
7
|
-
const
|
|
2
|
+
import { jsx as i } from "react/jsx-runtime";
|
|
3
|
+
import { forwardRef as s, useContext as v, createContext as c } from "react";
|
|
4
|
+
import * as n from "@radix-ui/react-tabs";
|
|
5
|
+
import { cn as o } from "../../lib/utils.js";
|
|
6
|
+
import { cva as f } from "class-variance-authority";
|
|
7
|
+
const N = n.Root, l = c("underline"), g = f("inline-flex items-center", {
|
|
8
8
|
variants: {
|
|
9
9
|
variant: {
|
|
10
10
|
underline: "gap-4 border-b border-border w-full",
|
|
@@ -17,73 +17,75 @@ const _ = i.Root, v = u("inline-flex items-center", {
|
|
|
17
17
|
}
|
|
18
18
|
},
|
|
19
19
|
defaultVariants: { variant: "underline", size: "md" }
|
|
20
|
-
}),
|
|
21
|
-
function({ className: t, variant: a = "underline", size: e, ...
|
|
22
|
-
return /* @__PURE__ */
|
|
23
|
-
|
|
20
|
+
}), b = s(
|
|
21
|
+
function({ className: t, variant: a = "underline", size: e, ...r }, u) {
|
|
22
|
+
return /* @__PURE__ */ i(l.Provider, { value: a ?? "underline", children: /* @__PURE__ */ i(
|
|
23
|
+
n.List,
|
|
24
24
|
{
|
|
25
|
-
ref:
|
|
25
|
+
ref: u,
|
|
26
26
|
"data-variant": a,
|
|
27
|
-
className:
|
|
28
|
-
...
|
|
27
|
+
className: o(g({ variant: a, size: e }), t),
|
|
28
|
+
...r
|
|
29
29
|
}
|
|
30
|
-
);
|
|
30
|
+
) });
|
|
31
31
|
}
|
|
32
32
|
);
|
|
33
|
-
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
33
|
+
b.displayName = "TabsList";
|
|
34
|
+
const m = s(function({ className: t, ...a }, e) {
|
|
35
|
+
const r = v(l);
|
|
36
|
+
return /* @__PURE__ */ i(
|
|
37
|
+
n.Trigger,
|
|
37
38
|
{
|
|
38
39
|
ref: e,
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"
|
|
42
|
-
"
|
|
40
|
+
"data-variant": r,
|
|
41
|
+
className: o(
|
|
42
|
+
"inline-flex items-center gap-2 font-medium whitespace-nowrap",
|
|
43
|
+
"transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)] outline-none",
|
|
44
|
+
"focus-visible:ring-ring focus-visible:ring-offset-background focus-visible:ring-2 focus-visible:ring-offset-2",
|
|
43
45
|
"disabled:pointer-events-none disabled:opacity-50",
|
|
44
46
|
// Underline variant
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"
|
|
47
|
+
"data-[variant=underline]:relative data-[variant=underline]:h-full",
|
|
48
|
+
"data-[variant=underline]:text-foreground-muted data-[variant=underline]:px-1",
|
|
49
|
+
"data-[variant=underline]:hover:text-foreground",
|
|
50
|
+
"data-[variant=underline]:data-[state=active]:text-foreground",
|
|
51
|
+
"data-[variant=underline]:data-[state=active]:after:absolute",
|
|
52
|
+
"data-[variant=underline]:data-[state=active]:after:inset-x-0",
|
|
53
|
+
"data-[variant=underline]:data-[state=active]:after:-bottom-px",
|
|
54
|
+
"data-[variant=underline]:data-[state=active]:after:h-0.5",
|
|
55
|
+
"data-[variant=underline]:data-[state=active]:after:bg-accent",
|
|
54
56
|
// Pills variant
|
|
55
|
-
"
|
|
56
|
-
"
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
57
|
+
"data-[variant=pills]:h-full data-[variant=pills]:rounded-md data-[variant=pills]:px-3",
|
|
58
|
+
"data-[variant=pills]:text-foreground-muted",
|
|
59
|
+
"data-[variant=pills]:hover:text-foreground",
|
|
60
|
+
"data-[variant=pills]:data-[state=active]:bg-card",
|
|
61
|
+
"data-[variant=pills]:data-[state=active]:text-foreground",
|
|
62
|
+
"data-[variant=pills]:data-[state=active]:shadow-xs",
|
|
61
63
|
t
|
|
62
64
|
),
|
|
63
65
|
...a
|
|
64
66
|
}
|
|
65
67
|
);
|
|
66
68
|
});
|
|
67
|
-
|
|
68
|
-
const
|
|
69
|
-
return /* @__PURE__ */
|
|
70
|
-
|
|
69
|
+
m.displayName = "TabsTrigger";
|
|
70
|
+
const p = s(function({ className: t, ...a }, e) {
|
|
71
|
+
return /* @__PURE__ */ i(
|
|
72
|
+
n.Content,
|
|
71
73
|
{
|
|
72
74
|
ref: e,
|
|
73
|
-
className:
|
|
75
|
+
className: o(
|
|
74
76
|
"mt-4 outline-none",
|
|
75
|
-
"focus-visible:ring-
|
|
77
|
+
"focus-visible:ring-ring focus-visible:ring-offset-background focus-visible:ring-2 focus-visible:ring-offset-2",
|
|
76
78
|
t
|
|
77
79
|
),
|
|
78
80
|
...a
|
|
79
81
|
}
|
|
80
82
|
);
|
|
81
83
|
});
|
|
82
|
-
|
|
84
|
+
p.displayName = "TabsContent";
|
|
83
85
|
export {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
86
|
+
N as Tabs,
|
|
87
|
+
p as TabsContent,
|
|
88
|
+
b as TabsList,
|
|
89
|
+
m as TabsTrigger
|
|
88
90
|
};
|
|
89
91
|
//# sourceMappingURL=Tabs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tabs.js","sources":["../../../src/components/ui/Tabs.tsx"],"sourcesContent":["'use client';\n\nimport {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\n/* -----------------------------------------------------------------------------\n * Two visual variants — `underline` (refined-minimal default) and `pills`.\n * Variant is set on `TabsList`; trigger styles auto-derive via data-attr.\n * --------------------------------------------------------------------------- */\n\nexport const Tabs = TabsPrimitive.Root;\n\nconst list = cva('inline-flex items-center', {\n variants: {\n variant: {\n underline: 'gap-4 border-b border-border w-full',\n pills: 'gap-1 rounded-lg bg-background-muted p-1',\n },\n size: {\n sm: 'h-9 text-xs',\n md: 'h-10 text-sm',\n lg: 'h-11 text-sm',\n },\n },\n defaultVariants: { variant: 'underline', size: 'md' },\n});\n\nexport interface TabsListProps\n extends ComponentPropsWithoutRef<typeof TabsPrimitive.List
|
|
1
|
+
{"version":3,"file":"Tabs.js","sources":["../../../src/components/ui/Tabs.tsx"],"sourcesContent":["'use client';\n\nimport {\n createContext,\n forwardRef,\n useContext,\n type ComponentPropsWithoutRef,\n type ElementRef,\n} from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\nimport { cn } from '@/lib/utils';\nimport { cva, type VariantProps } from '@/lib/cva';\n\n/* -----------------------------------------------------------------------------\n * Two visual variants — `underline` (refined-minimal default) and `pills`.\n * Variant is set on `TabsList`; trigger styles auto-derive via data-attr.\n * --------------------------------------------------------------------------- */\n\nexport const Tabs = TabsPrimitive.Root;\n\ntype TabsVariant = 'underline' | 'pills';\n/* Triggers read the list variant from context and stamp their own\n `data-variant`, so no ancestor selector can leak into nested Tabs. */\nconst TabsVariantContext = createContext<TabsVariant>('underline');\n\nconst list = cva('inline-flex items-center', {\n variants: {\n variant: {\n underline: 'gap-4 border-b border-border w-full',\n pills: 'gap-1 rounded-lg bg-background-muted p-1',\n },\n size: {\n sm: 'h-9 text-xs',\n md: 'h-10 text-sm',\n lg: 'h-11 text-sm',\n },\n },\n defaultVariants: { variant: 'underline', size: 'md' },\n});\n\nexport interface TabsListProps\n extends ComponentPropsWithoutRef<typeof TabsPrimitive.List>, VariantProps<typeof list> {}\n\nexport const TabsList = forwardRef<ElementRef<typeof TabsPrimitive.List>, TabsListProps>(\n function TabsList({ className, variant = 'underline', size, ...props }, ref) {\n return (\n <TabsVariantContext.Provider value={variant ?? 'underline'}>\n <TabsPrimitive.List\n ref={ref}\n data-variant={variant}\n className={cn(list({ variant, size }), className)}\n {...props}\n />\n </TabsVariantContext.Provider>\n );\n },\n);\nTabsList.displayName = 'TabsList';\n\nexport const TabsTrigger = forwardRef<\n ElementRef<typeof TabsPrimitive.Trigger>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(function TabsTrigger({ className, ...props }, ref) {\n const variant = useContext(TabsVariantContext);\n return (\n <TabsPrimitive.Trigger\n ref={ref}\n data-variant={variant}\n className={cn(\n 'inline-flex items-center gap-2 font-medium whitespace-nowrap',\n 'transition-colors duration-[var(--duration-fast)] ease-[var(--ease-out)] outline-none',\n 'focus-visible:ring-ring focus-visible:ring-offset-background focus-visible:ring-2 focus-visible:ring-offset-2',\n 'disabled:pointer-events-none disabled:opacity-50',\n // Underline variant\n 'data-[variant=underline]:relative data-[variant=underline]:h-full',\n 'data-[variant=underline]:text-foreground-muted data-[variant=underline]:px-1',\n 'data-[variant=underline]:hover:text-foreground',\n 'data-[variant=underline]:data-[state=active]:text-foreground',\n 'data-[variant=underline]:data-[state=active]:after:absolute',\n 'data-[variant=underline]:data-[state=active]:after:inset-x-0',\n 'data-[variant=underline]:data-[state=active]:after:-bottom-px',\n 'data-[variant=underline]:data-[state=active]:after:h-0.5',\n 'data-[variant=underline]:data-[state=active]:after:bg-accent',\n // Pills variant\n 'data-[variant=pills]:h-full data-[variant=pills]:rounded-md data-[variant=pills]:px-3',\n 'data-[variant=pills]:text-foreground-muted',\n 'data-[variant=pills]:hover:text-foreground',\n 'data-[variant=pills]:data-[state=active]:bg-card',\n 'data-[variant=pills]:data-[state=active]:text-foreground',\n 'data-[variant=pills]:data-[state=active]:shadow-xs',\n className,\n )}\n {...props}\n />\n );\n});\nTabsTrigger.displayName = 'TabsTrigger';\n\nexport const TabsContent = forwardRef<\n ElementRef<typeof TabsPrimitive.Content>,\n ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(function TabsContent({ className, ...props }, ref) {\n return (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n 'mt-4 outline-none',\n 'focus-visible:ring-ring focus-visible:ring-offset-background focus-visible:ring-2 focus-visible:ring-offset-2',\n className,\n )}\n {...props}\n />\n );\n});\nTabsContent.displayName = 'TabsContent';\n\n/**\n * @example Underline (default)\n * <Tabs defaultValue=\"overview\">\n * <TabsList>\n * <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n * <TabsTrigger value=\"activity\">Activity</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"overview\">…</TabsContent>\n * <TabsContent value=\"activity\">…</TabsContent>\n * </Tabs>\n *\n * @example Pills\n * <TabsList variant=\"pills\"><TabsTrigger value=\"all\">All</TabsTrigger>…</TabsList>\n *\n * @do Use `underline` at the top of a page or panel. Use `pills` inside a\n * card or for filter-style switches.\n * @dont Mix variants on the same screen — pick one and commit.\n */\n"],"names":["Tabs","TabsPrimitive","TabsVariantContext","createContext","list","cva","TabsList","forwardRef","className","variant","size","props","ref","jsx","cn","TabsTrigger","useContext","TabsContent"],"mappings":";;;;;;AAkBO,MAAMA,IAAOC,EAAc,MAK5BC,IAAqBC,EAA2B,WAAW,GAE3DC,IAAOC,EAAI,4BAA4B;AAAA,EAC3C,UAAU;AAAA,IACR,SAAS;AAAA,MACP,WAAW;AAAA,MACX,OAAO;AAAA,IAAA;AAAA,IAET,MAAM;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EACN;AAAA,EAEF,iBAAiB,EAAE,SAAS,aAAa,MAAM,KAAA;AACjD,CAAC,GAKYC,IAAWC;AAAA,EACtB,SAAkB,EAAE,WAAAC,GAAW,SAAAC,IAAU,aAAa,MAAAC,GAAM,GAAGC,EAAA,GAASC,GAAK;AAC3E,6BACGV,EAAmB,UAAnB,EAA4B,OAAOO,KAAW,aAC7C,UAAA,gBAAAI;AAAA,MAACZ,EAAc;AAAA,MAAd;AAAA,QACC,KAAAW;AAAA,QACA,gBAAcH;AAAA,QACd,WAAWK,EAAGV,EAAK,EAAE,SAAAK,GAAS,MAAAC,EAAA,CAAM,GAAGF,CAAS;AAAA,QAC/C,GAAGG;AAAA,MAAA;AAAA,IAAA,GAER;AAAA,EAEJ;AACF;AACAL,EAAS,cAAc;AAEhB,MAAMS,IAAcR,EAGzB,SAAqB,EAAE,WAAAC,GAAW,GAAGG,EAAA,GAASC,GAAK;AACnD,QAAMH,IAAUO,EAAWd,CAAkB;AAC7C,SACE,gBAAAW;AAAA,IAACZ,EAAc;AAAA,IAAd;AAAA,MACC,KAAAW;AAAA,MACA,gBAAcH;AAAA,MACd,WAAWK;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACAN;AAAA,MAAA;AAAA,MAED,GAAGG;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC;AACDI,EAAY,cAAc;AAEnB,MAAME,IAAcV,EAGzB,SAAqB,EAAE,WAAAC,GAAW,GAAGG,EAAA,GAASC,GAAK;AACnD,SACE,gBAAAC;AAAA,IAACZ,EAAc;AAAA,IAAd;AAAA,MACC,KAAAW;AAAA,MACA,WAAWE;AAAA,QACT;AAAA,QACA;AAAA,QACAN;AAAA,MAAA;AAAA,MAED,GAAGG;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC;AACDM,EAAY,cAAc;"}
|