@thewrong/ui 0.3.0 → 0.4.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 (65) hide show
  1. package/README.md +2 -2
  2. package/dist/components/button/Button.cjs +1 -1
  3. package/dist/components/button/Button.d.ts +3 -0
  4. package/dist/components/button/Button.esm.js +17 -5
  5. package/dist/components/button/types.d.ts +3 -1
  6. package/dist/components/button/utils.cjs +1 -1
  7. package/dist/components/button/utils.d.ts +2 -2
  8. package/dist/components/button/utils.esm.js +6 -2
  9. package/dist/components/progress/Progress.cjs +1 -1
  10. package/dist/components/progress/Progress.d.ts +3 -4
  11. package/dist/components/progress/Progress.esm.js +5 -5
  12. package/dist/components/progress/types.d.ts +2 -2
  13. package/dist/components/select/MultiSelect.cjs +1 -1
  14. package/dist/components/select/MultiSelect.esm.js +140 -138
  15. package/dist/components/select/Select.cjs +1 -1
  16. package/dist/components/select/Select.esm.js +190 -182
  17. package/dist/components/select/types.d.ts +7 -0
  18. package/dist/components/slider/Slider.cjs +1 -0
  19. package/dist/components/slider/Slider.d.ts +6 -0
  20. package/dist/components/slider/Slider.esm.js +36 -0
  21. package/dist/components/slider/index.d.ts +2 -0
  22. package/dist/components/slider/types.d.ts +15 -0
  23. package/dist/components/slider/utils.cjs +1 -0
  24. package/dist/components/slider/utils.d.ts +3 -0
  25. package/dist/components/slider/utils.esm.js +15 -0
  26. package/dist/components/table/accordion-table.cjs +1 -1
  27. package/dist/components/table/accordion-table.esm.js +194 -180
  28. package/dist/components/table/components/SortHeader.cjs +1 -0
  29. package/dist/components/table/components/SortHeader.d.ts +10 -0
  30. package/dist/components/table/components/SortHeader.esm.js +27 -0
  31. package/dist/components/table/components/SortableHeaderCell.cjs +1 -1
  32. package/dist/components/table/components/SortableHeaderCell.d.ts +10 -2
  33. package/dist/components/table/components/SortableHeaderCell.esm.js +54 -26
  34. package/dist/components/table/hooks/sort-state.cjs +1 -0
  35. package/dist/components/table/hooks/sort-state.d.ts +5 -0
  36. package/dist/components/table/hooks/sort-state.esm.js +21 -0
  37. package/dist/components/table/hooks/useTableSort.cjs +1 -1
  38. package/dist/components/table/hooks/useTableSort.d.ts +6 -3
  39. package/dist/components/table/hooks/useTableSort.esm.js +18 -19
  40. package/dist/components/table/paginated-table.d.ts +2 -0
  41. package/dist/components/table/table.cjs +1 -1
  42. package/dist/components/table/table.d.ts +2 -0
  43. package/dist/components/table/table.esm.js +119 -104
  44. package/dist/components/table/types.d.ts +11 -4
  45. package/dist/components/tabs/Tabs.cjs +1 -0
  46. package/dist/components/tabs/Tabs.d.ts +8 -0
  47. package/dist/components/tabs/Tabs.esm.js +53 -0
  48. package/dist/components/tabs/index.d.ts +2 -0
  49. package/dist/components/tabs/navigation.cjs +1 -0
  50. package/dist/components/tabs/navigation.d.ts +2 -0
  51. package/dist/components/tabs/navigation.esm.js +18 -0
  52. package/dist/components/tabs/types.d.ts +20 -0
  53. package/dist/index.cjs +1 -1
  54. package/dist/index.d.ts +2 -0
  55. package/dist/index.esm.js +3 -1
  56. package/dist/node_modules/lucide-react/dist/esm/icons/arrow-down.cjs +1 -0
  57. package/dist/node_modules/lucide-react/dist/esm/icons/arrow-down.esm.js +10 -0
  58. package/dist/node_modules/lucide-react/dist/esm/icons/arrow-up-down.cjs +1 -0
  59. package/dist/node_modules/lucide-react/dist/esm/icons/arrow-up-down.esm.js +21 -0
  60. package/dist/node_modules/lucide-react/dist/esm/icons/arrow-up.cjs +1 -0
  61. package/dist/node_modules/lucide-react/dist/esm/icons/arrow-up.esm.js +10 -0
  62. package/dist/tokens.css +78 -5
  63. package/dist/ui.css +1 -1
  64. package/llms.txt +9 -6
  65. package/package.json +1 -1
@@ -4,17 +4,19 @@ import { LoadingSpinner as n } from "../loading-spinner/LoadingSpinner.esm.js";
4
4
  import { TableCheckbox as r } from "../table-checkbox/TableCheckbox.esm.js";
5
5
  import { applyColumnState as i, buildColumnSlots as a, flattenLeafColumns as o, hasGroupSlot as ee } from "./column-group-utils.esm.js";
6
6
  import { SortableHeaderCell as s } from "./components/SortableHeaderCell.esm.js";
7
- import { useColumnResize as te } from "./hooks/useColumnResize.esm.js";
8
- import { useFillEmptyRows as ne } from "../../hooks/useFillEmptyRows.esm.js";
9
- import { useTableDragSelection as re } from "../../hooks/useTableDragSelection.esm.js";
10
- import { useTableSort as ie } from "./hooks/useTableSort.esm.js";
11
- import { getColumnAlignClasses as c, getHoverableRowClasses as ae, getSelectedRowClasses as oe, getStripedRowClasses as l, getTableBaseClasses as se, getTableCellClasses as u, getTableHeaderCellClasses as d, getTableHeaderClasses as ce, getTableSizeClasses as le, getTableVariantClasses as ue } from "./utils.esm.js";
7
+ import { SortHeader as te } from "./components/SortHeader.esm.js";
8
+ import { ariaSort as ne, nextSort as re, sortDirectionFor as ie } from "./hooks/sort-state.esm.js";
9
+ import { useColumnResize as ae } from "./hooks/useColumnResize.esm.js";
10
+ import { useFillEmptyRows as oe } from "../../hooks/useFillEmptyRows.esm.js";
11
+ import { useTableDragSelection as se } from "../../hooks/useTableDragSelection.esm.js";
12
+ import { useTableSort as ce } from "./hooks/useTableSort.esm.js";
13
+ import { getColumnAlignClasses as c, getHoverableRowClasses as le, getSelectedRowClasses as ue, getStripedRowClasses as l, getTableBaseClasses as de, getTableCellClasses as u, getTableHeaderCellClasses as d, getTableHeaderClasses as fe, getTableSizeClasses as pe, getTableVariantClasses as me } from "./utils.esm.js";
12
14
  import { forwardRef as f, useMemo as p, useRef as m } from "react";
13
15
  import { jsx as h, jsxs as g } from "react/jsx-runtime";
14
- import { DndContext as de, KeyboardSensor as fe, PointerSensor as pe, closestCenter as me, useSensor as he, useSensors as ge } from "@dnd-kit/core";
15
- import { SortableContext as _e, arrayMove as ve, horizontalListSortingStrategy as ye, sortableKeyboardCoordinates as be } from "@dnd-kit/sortable";
16
+ import { DndContext as he, KeyboardSensor as ge, PointerSensor as _e, closestCenter as ve, useSensor as ye, useSensors as be } from "@dnd-kit/core";
17
+ import { SortableContext as xe, arrayMove as Se, horizontalListSortingStrategy as Ce, sortableKeyboardCoordinates as we } from "@dnd-kit/sortable";
16
18
  //#region src/components/table/table.tsx
17
- var xe = ({ transform: e, draggingNodeRect: t, containerNodeRect: n }) => {
19
+ var Te = ({ transform: e, draggingNodeRect: t, containerNodeRect: n }) => {
18
20
  let r = {
19
21
  ...e,
20
22
  y: 0
@@ -23,11 +25,21 @@ var xe = ({ transform: e, draggingNodeRect: t, containerNodeRect: n }) => {
23
25
  let i = n.left - t.left, a = n.right - t.right;
24
26
  return r.x = Math.min(Math.max(r.x, i), a), r;
25
27
  }, _ = f((f, _) => {
26
- let { data: v, columns: y, columnGroups: Se, rowHeight: b, loading: Ce = !1, isFetching: x = !1, emptyMessage: we = "데이터가 없어요", onRowClick: S, selectedRows: C = [], onRowSelect: w, enableRowSelection: T = !1, enableSelectAll: E = !1, rowCompare: D, getRowId: O, enableSorting: k = !1, serverSideSorting: A = !1, onSortChange: Te, initialSort: Ee, variant: De = "default", size: Oe = "medium", stickyHeader: j = !0, height: M, maxHeight: N, storageKey: ke, columnState: P, fillEmptyRows: F = !0, totalElements: I, footerSlot: Ae, className: L = "", "data-testid": R, ...z } = f, { sort: je, sortedData: B } = ie({
27
- initialSort: Ee,
28
- serverSide: A,
29
- onSort: Te || void 0
30
- }), V = p(() => !k || A ? v : B(v, (e, t) => {
28
+ let { data: v, columns: y, columnGroups: b, rowHeight: x, loading: Ee = !1, isFetching: S = !1, emptyMessage: De = "데이터가 없어요", onRowClick: C, selectedRows: w = [], onRowSelect: T, enableRowSelection: E = !1, enableSelectAll: D = !1, rowCompare: O, getRowId: k, enableSorting: A = !1, sortCycle: j = "tri", formatSortLabel: Oe, serverSideSorting: M = !1, onSortChange: ke, initialSort: Ae, variant: je = "default", size: Me = "medium", stickyHeader: N = !0, height: P, maxHeight: F, storageKey: Ne, columnState: I, fillEmptyRows: L = !0, totalElements: R, footerSlot: Pe, className: z = "", "data-testid": Fe, ...Ie } = f, { sort: B, sortedData: Le, handleSort: Re } = ce({
29
+ initialSort: Ae,
30
+ cycle: j,
31
+ serverSide: M,
32
+ onSort: ke || void 0
33
+ }), V = (e) => !!(e.sortable && (A || M)), ze = (e) => V(e) ? ne(ie(B, e.key)) : void 0, Be = (e) => {
34
+ if (!V(e)) return /* @__PURE__ */ h("span", { children: e.header });
35
+ let t = ie(B, e.key), n = re(B, e.key, j)?.direction ?? null;
36
+ return /* @__PURE__ */ h(te, {
37
+ current: t,
38
+ label: Oe?.(e, t, n),
39
+ onSort: () => Re(e.key),
40
+ children: e.header
41
+ });
42
+ }, H = p(() => !A || M ? v : Le(v, (e, t) => {
31
43
  let n = y.find((e) => e.key === t);
32
44
  if (n?.accessor) {
33
45
  let r = n.accessor(e);
@@ -36,92 +48,92 @@ var xe = ({ transform: e, draggingNodeRect: t, containerNodeRect: n }) => {
36
48
  return e[t];
37
49
  }), [
38
50
  v,
39
- k,
40
51
  A,
41
- je,
52
+ M,
42
53
  B,
54
+ Le,
43
55
  y
44
- ]), H = m(null), U = m(null), Me = m(null), Ne = m(null), W = !!P, Pe = ge(he(pe, { activationConstraint: { distance: 5 } }), he(fe, { coordinateGetter: be })), G = p(() => a(y, Se), [y, Se]), K = p(() => {
45
- if (!P) return G.filter((e) => !(e.kind === "column" && e.leafColumns[0].hidden));
46
- let e = new Set(P.hiddenColumns);
47
- return i(G, P.columnOrder, e);
48
- }, [G, P]), q = p(() => o(K), [K]), J = p(() => ee(K), [K]), Fe = p(() => new Map(G.map((e) => [e.key, e])), [G]), Ie = (e) => {
56
+ ]), Ve = m(null), U = m(null), He = m(null), Ue = m(null), W = !!I, We = be(ye(_e, { activationConstraint: { distance: 5 } }), ye(ge, { coordinateGetter: we })), G = p(() => a(y, b), [y, b]), K = p(() => {
57
+ if (!I) return G.filter((e) => !(e.kind === "column" && e.leafColumns[0].hidden));
58
+ let e = new Set(I.hiddenColumns);
59
+ return i(G, I.columnOrder, e);
60
+ }, [G, I]), q = p(() => o(K), [K]), J = p(() => ee(K), [K]), Ge = p(() => new Map(G.map((e) => [e.key, e])), [G]), Ke = (e) => {
49
61
  let { active: t, over: n } = e;
50
- if (!P || !n || t.id === n.id) return;
51
- let r = Fe.get(String(n.id));
62
+ if (!I || !n || t.id === n.id) return;
63
+ let r = Ge.get(String(n.id));
52
64
  if (r?.kind === "column" && r.leafColumns[0].excludeFromPreset) return;
53
- let i = P.columnOrder, a = i.indexOf(String(t.id)), o = i.indexOf(String(n.id));
54
- a === -1 || o === -1 || P.onColumnOrderChange(ve(i, a, o));
55
- }, { handleMouseDown: Le, handleDoubleClick: Re, getColumnWidth: Y, measureRef: ze } = te({
65
+ let i = I.columnOrder, a = i.indexOf(String(t.id)), o = i.indexOf(String(n.id));
66
+ a === -1 || o === -1 || I.onColumnOrderChange(Se(i, a, o));
67
+ }, { handleMouseDown: qe, handleDoubleClick: Je, getColumnWidth: Y, measureRef: Ye } = ae({
56
68
  columns: q,
57
- data: V,
69
+ data: H,
58
70
  getCellContent: (e, t) => {
59
71
  let n = q.find((e) => e.key === t);
60
72
  return n?.accessor ? n.accessor(e) : e[t];
61
73
  },
62
- tableRef: H,
63
- ...P ? {
64
- controlledWidths: P.columnWidths,
65
- onColumnWidthsChange: P.onColumnWidthsChange
66
- } : { storageKey: ke }
67
- }), Be = se(), Ve = ue(De), He = le(Oe), Ue = T && E ? 48 : 0, We = p(() => q.reduce((e, t) => {
74
+ tableRef: Ve,
75
+ ...I ? {
76
+ controlledWidths: I.columnWidths,
77
+ onColumnWidthsChange: I.onColumnWidthsChange
78
+ } : { storageKey: Ne }
79
+ }), Xe = de(), Ze = me(je), Qe = pe(Me), $e = E && D ? 48 : 0, et = p(() => q.reduce((e, t) => {
68
80
  let n = Y(t.key, t.width), r = parseFloat(n);
69
81
  return e + (Number.isFinite(r) ? r : 0);
70
- }, 0) + Ue, [
82
+ }, 0) + $e, [
71
83
  q,
72
84
  Y,
73
- Ue
85
+ $e
74
86
  ]), X = p(() => {
75
87
  let e = {};
76
- return M && (e.height = typeof M == "number" ? `${M}px` : M), N && (e.maxHeight = typeof N == "number" ? `${N}px` : N), e;
77
- }, [M, N]), { emptyRowCount: Ge, measuredRowHeight: Ke } = ne({
78
- enabled: F,
88
+ return P && (e.height = typeof P == "number" ? `${P}px` : P), F && (e.maxHeight = typeof F == "number" ? `${F}px` : F), e;
89
+ }, [P, F]), { emptyRowCount: tt, measuredRowHeight: nt } = oe({
90
+ enabled: L,
79
91
  containerRef: U,
80
- theadRef: Me,
81
- tbodyRef: Ne,
92
+ theadRef: He,
93
+ tbodyRef: Ue,
82
94
  excludeRowsSelector: "tr:not([data-empty-row])",
83
95
  remainingMode: "sum-real-rows",
84
- deps: [V, q]
85
- }), Z = (e) => !T || C.length === 0 ? !1 : D ? C.some((t) => D(t, e)) : C.some((t) => t === e), qe = p(() => !T || !E || V.length === 0 ? !1 : V.every((e) => Z(e)), [
86
- T,
96
+ deps: [H, q]
97
+ }), Z = (e) => !E || w.length === 0 ? !1 : O ? w.some((t) => O(t, e)) : w.some((t) => t === e), rt = p(() => !E || !D || H.length === 0 ? !1 : H.every((e) => Z(e)), [
87
98
  E,
88
- V,
99
+ D,
100
+ H,
89
101
  Z
90
- ]), Je = () => {
91
- !T || !w || (qe ? V.forEach((e) => {
92
- Z(e) && w(e, !1);
93
- }) : V.forEach((e) => {
94
- Z(e) || w(e, !0);
102
+ ]), it = () => {
103
+ !E || !T || (rt ? H.forEach((e) => {
104
+ Z(e) && T(e, !1);
105
+ }) : H.forEach((e) => {
106
+ Z(e) || T(e, !0);
95
107
  }));
96
- }, Q = T && !!w && !!O, $ = re({
97
- rows: V,
98
- getRowId: O ?? (() => -1),
108
+ }, Q = E && !!T && !!k, $ = se({
109
+ rows: H,
110
+ getRowId: k ?? (() => -1),
99
111
  isSelected: (e) => Z(e),
100
- setSelected: (e, t) => w?.(e, t),
112
+ setSelected: (e, t) => T?.(e, t),
101
113
  enabled: Q,
102
114
  scrollContainerRef: U
103
- }), Ye = (t, n) => {
115
+ }), at = (t, n) => {
104
116
  let r = [l(n)];
105
- return Z(t) && r.push(oe()), S && r.push(ae()), e(r);
117
+ return Z(t) && r.push(ue()), C && r.push(le()), e(r);
106
118
  };
107
- return Ce ? /* @__PURE__ */ h("div", {
119
+ return Ee ? /* @__PURE__ */ h("div", {
108
120
  ref: _,
109
- className: e("flex items-center justify-center p-8 flex-1", L),
121
+ className: e("flex items-center justify-center p-8 flex-1", z),
110
122
  style: X,
111
- "data-testid": R,
112
- ...z,
123
+ "data-testid": Fe,
124
+ ...Ie,
113
125
  children: /* @__PURE__ */ h(n, {
114
126
  message: "데이터를 불러오는 중이에요...",
115
127
  className: "min-h-0"
116
128
  })
117
129
  }) : /* @__PURE__ */ g("div", {
118
130
  ref: _,
119
- className: e("isolate relative flex flex-col min-h-0 gap-4 md:gap-5 xl:gap-6", L),
131
+ className: e("isolate relative flex flex-col min-h-0 gap-4 md:gap-5 xl:gap-6", z),
120
132
  style: X,
121
- "data-testid": R,
122
- ...z,
133
+ "data-testid": Fe,
134
+ ...Ie,
123
135
  children: [/* @__PURE__ */ h("div", {
124
- ref: ze,
136
+ ref: Ye,
125
137
  className: "absolute invisible whitespace-nowrap",
126
138
  style: {
127
139
  top: "-9999px",
@@ -132,8 +144,8 @@ var xe = ({ transform: e, draggingNodeRect: t, containerNodeRect: n }) => {
132
144
  children: [/* @__PURE__ */ g("div", {
133
145
  className: "relative flex flex-1 flex-col min-h-0",
134
146
  children: [/* @__PURE__ */ h("div", {
135
- className: e("pointer-events-none absolute inset-0 z-30 flex items-center justify-center bg-bg-surface/60 backdrop-blur-[2px] transition-opacity duration-150", x ? "opacity-100" : "opacity-0"),
136
- ...x ? {
147
+ className: e("pointer-events-none absolute inset-0 z-30 flex items-center justify-center bg-bg-surface/60 backdrop-blur-[2px] transition-opacity duration-150", S ? "opacity-100" : "opacity-0"),
148
+ ...S ? {
137
149
  role: "status",
138
150
  "aria-live": "polite"
139
151
  } : { "aria-hidden": !0 },
@@ -144,52 +156,52 @@ var xe = ({ transform: e, draggingNodeRect: t, containerNodeRect: n }) => {
144
156
  }), /* @__PURE__ */ h("div", {
145
157
  ref: U,
146
158
  className: "scrollbar-table overflow-auto flex-1 bg-bg-page",
147
- children: V.length === 0 ? /* @__PURE__ */ h("div", {
159
+ children: H.length === 0 ? /* @__PURE__ */ h("div", {
148
160
  className: "flex items-center justify-center p-8 h-full",
149
161
  children: /* @__PURE__ */ h("p", {
150
162
  className: "text-fg-muted",
151
- children: we
163
+ children: De
152
164
  })
153
- }) : /* @__PURE__ */ h(de, {
154
- sensors: Pe,
155
- collisionDetection: me,
156
- onDragEnd: Ie,
157
- modifiers: [xe],
165
+ }) : /* @__PURE__ */ h(he, {
166
+ sensors: We,
167
+ collisionDetection: ve,
168
+ onDragEnd: Ke,
169
+ modifiers: [Te],
158
170
  children: /* @__PURE__ */ g("table", {
159
- ref: H,
160
- className: e(Be, Ve, He),
171
+ ref: Ve,
172
+ className: e(Xe, Ze, Qe),
161
173
  style: {
162
174
  tableLayout: "fixed",
163
175
  minWidth: "100%",
164
- width: `${We}px`
176
+ width: `${et}px`
165
177
  },
166
178
  children: [
167
- /* @__PURE__ */ g("colgroup", { children: [T && E && /* @__PURE__ */ h("col", { style: { width: "48px" } }), q.map((e) => /* @__PURE__ */ h("col", {
179
+ /* @__PURE__ */ g("colgroup", { children: [E && D && /* @__PURE__ */ h("col", { style: { width: "48px" } }), q.map((e) => /* @__PURE__ */ h("col", {
168
180
  "data-col-key": e.key,
169
181
  style: { width: Y(e.key, e.width) }
170
182
  }, e.key))] }),
171
183
  /* @__PURE__ */ g("thead", {
172
- ref: Me,
173
- className: ce(),
184
+ ref: He,
185
+ className: fe(),
174
186
  style: {
175
- position: j ? "sticky" : "relative",
176
- top: j ? 0 : void 0,
177
- zIndex: j ? 20 : void 0
187
+ position: N ? "sticky" : "relative",
188
+ top: N ? 0 : void 0,
189
+ zIndex: N ? 20 : void 0
178
190
  },
179
- children: [/* @__PURE__ */ g("tr", { children: [T && E && /* @__PURE__ */ h("th", {
191
+ children: [/* @__PURE__ */ g("tr", { children: [E && D && /* @__PURE__ */ h("th", {
180
192
  rowSpan: J ? 2 : 1,
181
193
  className: e(d(), c("center"), "w-12 px-0"),
182
194
  children: /* @__PURE__ */ h("div", {
183
195
  className: "flex items-center justify-center",
184
196
  children: /* @__PURE__ */ h(r, {
185
- checked: qe,
186
- onChange: () => Je(),
197
+ checked: rt,
198
+ onChange: () => it(),
187
199
  ariaLabel: "전체 선택"
188
200
  })
189
201
  })
190
- }), /* @__PURE__ */ h(_e, {
202
+ }), /* @__PURE__ */ h(xe, {
191
203
  items: K.map((e) => e.key),
192
- strategy: ye,
204
+ strategy: Ce,
193
205
  children: K.map((n) => {
194
206
  if (n.kind === "group") return /* @__PURE__ */ g(s, {
195
207
  id: n.key,
@@ -211,6 +223,8 @@ var xe = ({ transform: e, draggingNodeRect: t, containerNodeRect: n }) => {
211
223
  id: r.key,
212
224
  disabled: i,
213
225
  as: "th",
226
+ "aria-sort": ze(r),
227
+ hasSortButton: V(r),
214
228
  rowSpan: J ? 2 : 1,
215
229
  className: e(d(), c("center"), "group/header-cell relative", r.sticky && "sticky left-0 z-20 bg-bg-table-header", r.hideOnMobile && "hidden md:table-cell"),
216
230
  style: {
@@ -225,16 +239,16 @@ var xe = ({ transform: e, draggingNodeRect: t, containerNodeRect: n }) => {
225
239
  }),
226
240
  /* @__PURE__ */ h("div", {
227
241
  className: "flex items-center justify-center w-full pr-1 pl-3 select-none",
228
- children: /* @__PURE__ */ h("span", { children: r.header })
242
+ children: Be(r)
229
243
  }),
230
244
  r.excludeFromPreset !== !0 && /* @__PURE__ */ h("div", {
231
245
  className: "group/resize absolute right-0 top-0 h-full w-3 cursor-col-resize z-50 flex items-center justify-center",
232
246
  onPointerDown: (e) => e.stopPropagation(),
233
247
  onMouseDown: (e) => {
234
- e.preventDefault(), e.stopPropagation(), Le(r.key, e);
248
+ e.preventDefault(), e.stopPropagation(), qe(r.key, e);
235
249
  },
236
250
  onDoubleClick: (e) => {
237
- e.preventDefault(), e.stopPropagation(), Re(r.key, e);
251
+ e.preventDefault(), e.stopPropagation(), Je(r.key, e);
238
252
  },
239
253
  onClick: (e) => {
240
254
  e.preventDefault(), e.stopPropagation();
@@ -250,6 +264,7 @@ var xe = ({ transform: e, draggingNodeRect: t, containerNodeRect: n }) => {
250
264
  }, r.key);
251
265
  })
252
266
  })] }), J && /* @__PURE__ */ h("tr", { children: K.filter((e) => e.kind === "group").flatMap((e) => e.leafColumns).map((t) => /* @__PURE__ */ h("th", {
267
+ "aria-sort": ze(t),
253
268
  className: e(d(), c(t.align ?? "center"), t.hideOnMobile && "hidden md:table-cell"),
254
269
  style: {
255
270
  width: Y(t.key, t.width),
@@ -257,19 +272,19 @@ var xe = ({ transform: e, draggingNodeRect: t, containerNodeRect: n }) => {
257
272
  },
258
273
  children: /* @__PURE__ */ h("div", {
259
274
  className: "flex items-center justify-center w-full pr-1 pl-3 select-none",
260
- children: /* @__PURE__ */ h("span", { children: t.header })
275
+ children: Be(t)
261
276
  })
262
277
  }, t.key)) })]
263
278
  }),
264
279
  /* @__PURE__ */ g("tbody", {
265
- ref: Ne,
266
- children: [V.map((t, n) => {
280
+ ref: Ue,
281
+ children: [H.map((t, n) => {
267
282
  let i = Z(t);
268
283
  return /* @__PURE__ */ g("tr", {
269
- className: Ye(t, n),
270
- onClick: () => S?.(t, n),
271
- style: b ? { height: `${b}px` } : void 0,
272
- children: [T && E && /* @__PURE__ */ h("td", {
284
+ className: at(t, n),
285
+ onClick: () => C?.(t, n),
286
+ style: x ? { height: `${x}px` } : void 0,
287
+ children: [E && D && /* @__PURE__ */ h("td", {
273
288
  className: e(u(), c("center"), "w-12 select-none"),
274
289
  onClick: (e) => e.stopPropagation(),
275
290
  onMouseDown: Q ? (e) => {
@@ -280,7 +295,7 @@ var xe = ({ transform: e, draggingNodeRect: t, containerNodeRect: n }) => {
280
295
  className: "flex items-center justify-center",
281
296
  children: /* @__PURE__ */ h(r, {
282
297
  checked: i,
283
- onChange: (e) => w?.(t, e),
298
+ onChange: (e) => T?.(t, e),
284
299
  pointerEventsNone: Q,
285
300
  ariaLabel: "행 선택"
286
301
  })
@@ -292,9 +307,9 @@ var xe = ({ transform: e, draggingNodeRect: t, containerNodeRect: n }) => {
292
307
  style: {
293
308
  width: Y(n.key, n.width),
294
309
  minWidth: n.minWidth || 50,
295
- ...b ? {
296
- height: `${b}px`,
297
- maxHeight: `${b}px`,
310
+ ...x ? {
311
+ height: `${x}px`,
312
+ maxHeight: `${x}px`,
298
313
  overflow: "hidden"
299
314
  } : {}
300
315
  },
@@ -302,14 +317,14 @@ var xe = ({ transform: e, draggingNodeRect: t, containerNodeRect: n }) => {
302
317
  }, n.key);
303
318
  })]
304
319
  }, n);
305
- }), F && Array.from({ length: Ge }).map((t, n) => {
306
- let r = V.length + n, i = b ?? Ke ?? void 0;
320
+ }), L && Array.from({ length: tt }).map((t, n) => {
321
+ let r = H.length + n, i = x ?? nt ?? void 0;
307
322
  return /* @__PURE__ */ g("tr", {
308
323
  "data-empty-row": !0,
309
324
  "aria-hidden": "true",
310
325
  className: l(r),
311
326
  style: i ? { height: `${i}px` } : void 0,
312
- children: [T && E && /* @__PURE__ */ h("td", {
327
+ children: [E && D && /* @__PURE__ */ h("td", {
313
328
  className: e(u(), "w-12"),
314
329
  style: i ? { height: `${i}px` } : void 0
315
330
  }), q.map((t) => /* @__PURE__ */ h("td", {
@@ -327,11 +342,11 @@ var xe = ({ transform: e, draggingNodeRect: t, containerNodeRect: n }) => {
327
342
  })
328
343
  })
329
344
  })]
330
- }), Ae ?? (I === void 0 ? null : /* @__PURE__ */ h("div", {
345
+ }), Pe ?? (R === void 0 ? null : /* @__PURE__ */ h("div", {
331
346
  className: "flex justify-end shrink-0 text-sm text-fg-muted",
332
347
  children: /* @__PURE__ */ g("span", { children: [
333
348
  "총 ",
334
- I.toLocaleString(),
349
+ R.toLocaleString(),
335
350
  "건"
336
351
  ] })
337
352
  }))]
@@ -60,12 +60,11 @@ export interface TableColumn<T> {
60
60
  */
61
61
  sortable?: boolean;
62
62
  /**
63
- * 컬럼 정렬 방향
64
- * @default null
63
+ * @deprecated 무시됨. 정렬은 Table의 enableSorting/serverSideSorting과 useTableSort로 설정한다.
65
64
  */
66
65
  sortDirection?: SortDirection;
67
66
  /**
68
- * 컬럼 정렬 변경 콜백
67
+ * @deprecated 무시됨. 정렬은 Table의 enableSorting/serverSideSorting과 useTableSort로 설정한다.
69
68
  */
70
69
  onSort?: (direction: SortDirection) => void;
71
70
  /**
@@ -206,10 +205,18 @@ export interface TableCommonProps<T> {
206
205
  */
207
206
  getRowId?: (row: T) => string | number;
208
207
  /**
209
- * 정렬 사용 여부 (클라이언트 사이드 정렬)
208
+ * 정렬 사용 여부 (클라이언트 사이드 정렬). 전달된 현재 페이지 데이터만 정렬한다.
209
+ * 서버 페이지네이션이면 serverSideSorting을 사용하고, 정렬 변경 시 페이지 초기화는 호출부에서 처리한다.
210
210
  * @default false
211
211
  */
212
212
  enableSorting?: boolean;
213
+ /** 정렬 순서. 기본 tri(오름차순 → 내림차순 → 해제), toggle은 두 방향만 순환한다. */
214
+ sortCycle?: "tri" | "toggle";
215
+ /**
216
+ * 정렬 버튼 이름을 지정한다. 기본값은 헤더 텍스트이며 정렬 상태는 헤더의 aria-sort로 전달한다.
217
+ * 보이는 헤더 텍스트가 있으면 반환하는 이름에 그 텍스트를 포함한다(WCAG 2.5.3).
218
+ */
219
+ formatSortLabel?: (column: TableColumn<T>, current: SortDirection, next: SortDirection) => string;
213
220
  /**
214
221
  * 서버 사이드 정렬 사용 여부
215
222
  * @default false
@@ -0,0 +1 @@
1
+ const e=require("../../lib/utils.cjs"),t=require("./navigation.cjs");let n=require("react"),r=require("react/jsx-runtime");function i({items:i,value:a,defaultValue:o,onValueChange:s,activation:c=`auto`,"aria-label":l,"aria-labelledby":u,className:d}){let f=(0,n.useId)(),p=(0,n.useRef)([]),[m,h]=(0,n.useState)(o),[g,_]=(0,n.useState)(),v=a??m,y=i.find(e=>e.value===v&&!e.disabled)?.value??i.find(e=>!e.disabled)?.value,b=i.find(e=>e.value===g&&!e.disabled)?.value??y,x=e=>{e!==y&&(a===void 0&&h(e),s?.(e))},S=(e,n)=>{if(e.altKey||e.ctrlKey||e.metaKey)return;let r=t.nextTabIndex(i.map(e=>!!e.disabled),n,e.key);r!==null&&(e.preventDefault(),p.current[r]?.focus(),c===`auto`&&r!==n&&x(i[r].value))};return(0,r.jsxs)(`div`,{className:e.cn(`w-full`,d),children:[(0,r.jsx)(`div`,{role:`tablist`,"aria-label":l,"aria-labelledby":u,className:`flex gap-1 border-b border-border-subtle`,onBlur:e=>{e.currentTarget.contains(e.relatedTarget)||_(void 0)},children:i.map((t,n)=>(0,r.jsx)(`button`,{ref:e=>{p.current[n]=e},type:`button`,role:`tab`,id:`${f}-tab-${n}`,"aria-controls":`${f}-panel-${n}`,"aria-selected":t.value===y,tabIndex:t.value===b?0:-1,disabled:t.disabled,onFocus:()=>_(t.value),onClick:()=>x(t.value),onKeyDown:e=>S(e,n),className:e.cn(`-mb-px border-b-2 px-3 py-2 text-sm font-medium outline-none transition-colors focus-visible:ring-control focus-visible:ring-inset focus-visible:ring-focus-primary disabled:cursor-not-allowed disabled:text-fg-disabled disabled:opacity-60`,t.value===y?`border-primary-fg text-primary-fg`:`border-transparent text-fg-muted hover:text-fg-default`),children:t.label},t.value))}),i.map((e,t)=>(0,r.jsx)(`div`,{role:`tabpanel`,id:`${f}-panel-${t}`,"aria-labelledby":`${f}-tab-${t}`,hidden:e.value!==y,tabIndex:0,className:`pt-4 outline-none focus-visible:ring-control focus-visible:ring-focus-primary`,children:e.value===y?e.content:null},e.value))]})}exports.Tabs=i;
@@ -0,0 +1,8 @@
1
+ import { TabsProps } from './types.js';
2
+ /**
3
+ * 가로 탭. SegmentedControl처럼 항목 배열을 받으며 패널 내용은 선택된 경우에만 마운트한다.
4
+ * 자동 활성화는 패널 내용이 즉시 준비될 때 적합하다. 지연이 있으면 manual을 사용한다.
5
+ * 탭 목록의 접근성 이름은 aria-label 또는 aria-labelledby로 지정한다.
6
+ * value가 활성 항목에 없으면 첫 활성 탭을 표시하며 onValueChange는 호출하지 않는다. 부모에서 값을 맞춘다.
7
+ */
8
+ export declare function Tabs<V extends string>({ items, value, defaultValue, onValueChange, activation, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, className, }: TabsProps<V>): import("react").JSX.Element;
@@ -0,0 +1,53 @@
1
+ import { cn as e } from "../../lib/utils.esm.js";
2
+ import { nextTabIndex as t } from "./navigation.esm.js";
3
+ import { useId as n, useRef as r, useState as i } from "react";
4
+ import { jsx as a, jsxs as o } from "react/jsx-runtime";
5
+ //#region src/components/tabs/Tabs.tsx
6
+ function s({ items: s, value: c, defaultValue: l, onValueChange: u, activation: d = "auto", "aria-label": f, "aria-labelledby": p, className: m }) {
7
+ let h = n(), g = r([]), [_, v] = i(l), [y, b] = i(), x = c ?? _, S = s.find((e) => e.value === x && !e.disabled)?.value ?? s.find((e) => !e.disabled)?.value, C = s.find((e) => e.value === y && !e.disabled)?.value ?? S, w = (e) => {
8
+ e !== S && (c === void 0 && v(e), u?.(e));
9
+ }, T = (e, n) => {
10
+ if (e.altKey || e.ctrlKey || e.metaKey) return;
11
+ let r = t(s.map((e) => !!e.disabled), n, e.key);
12
+ r !== null && (e.preventDefault(), g.current[r]?.focus(), d === "auto" && r !== n && w(s[r].value));
13
+ };
14
+ return /* @__PURE__ */ o("div", {
15
+ className: e("w-full", m),
16
+ children: [/* @__PURE__ */ a("div", {
17
+ role: "tablist",
18
+ "aria-label": f,
19
+ "aria-labelledby": p,
20
+ className: "flex gap-1 border-b border-border-subtle",
21
+ onBlur: (e) => {
22
+ e.currentTarget.contains(e.relatedTarget) || b(void 0);
23
+ },
24
+ children: s.map((t, n) => /* @__PURE__ */ a("button", {
25
+ ref: (e) => {
26
+ g.current[n] = e;
27
+ },
28
+ type: "button",
29
+ role: "tab",
30
+ id: `${h}-tab-${n}`,
31
+ "aria-controls": `${h}-panel-${n}`,
32
+ "aria-selected": t.value === S,
33
+ tabIndex: t.value === C ? 0 : -1,
34
+ disabled: t.disabled,
35
+ onFocus: () => b(t.value),
36
+ onClick: () => w(t.value),
37
+ onKeyDown: (e) => T(e, n),
38
+ className: e("-mb-px border-b-2 px-3 py-2 text-sm font-medium outline-none transition-colors focus-visible:ring-control focus-visible:ring-inset focus-visible:ring-focus-primary disabled:cursor-not-allowed disabled:text-fg-disabled disabled:opacity-60", t.value === S ? "border-primary-fg text-primary-fg" : "border-transparent text-fg-muted hover:text-fg-default"),
39
+ children: t.label
40
+ }, t.value))
41
+ }), s.map((e, t) => /* @__PURE__ */ a("div", {
42
+ role: "tabpanel",
43
+ id: `${h}-panel-${t}`,
44
+ "aria-labelledby": `${h}-tab-${t}`,
45
+ hidden: e.value !== S,
46
+ tabIndex: 0,
47
+ className: "pt-4 outline-none focus-visible:ring-control focus-visible:ring-focus-primary",
48
+ children: e.value === S ? e.content : null
49
+ }, e.value))]
50
+ });
51
+ }
52
+ //#endregion
53
+ export { s as Tabs };
@@ -0,0 +1,2 @@
1
+ export { Tabs } from './Tabs.js';
2
+ export type { TabItem, TabsProps } from './types.js';
@@ -0,0 +1 @@
1
+ function e(e,t,n){let r=e.length;if(!r||e.every(Boolean))return null;if(n===`Home`)return e.findIndex(e=>!e);if(n===`End`){for(let t=r-1;t>=0;t--)if(!e[t])return t}let i=n===`ArrowRight`?1:n===`ArrowLeft`?-1:0;if(!i)return null;for(let n=1;n<=r;n++){let a=(t+i*n+r*n)%r;if(!e[a])return a}return null}exports.nextTabIndex=e;
@@ -0,0 +1,2 @@
1
+ /** 비활성 항목을 건너뛰며 가로 탭의 다음 포커스 인덱스를 찾는다. */
2
+ export declare function nextTabIndex(disabled: readonly boolean[], current: number, key: string): number | null;
@@ -0,0 +1,18 @@
1
+ //#region src/components/tabs/navigation.ts
2
+ function e(e, t, n) {
3
+ let r = e.length;
4
+ if (!r || e.every(Boolean)) return null;
5
+ if (n === "Home") return e.findIndex((e) => !e);
6
+ if (n === "End") {
7
+ for (let t = r - 1; t >= 0; t--) if (!e[t]) return t;
8
+ }
9
+ let i = n === "ArrowRight" ? 1 : n === "ArrowLeft" ? -1 : 0;
10
+ if (!i) return null;
11
+ for (let n = 1; n <= r; n++) {
12
+ let a = (t + i * n + r * n) % r;
13
+ if (!e[a]) return a;
14
+ }
15
+ return null;
16
+ }
17
+ //#endregion
18
+ export { e as nextTabIndex };
@@ -0,0 +1,20 @@
1
+ import { ReactNode } from 'react';
2
+ export interface TabItem<V extends string> {
3
+ value: V;
4
+ label: ReactNode;
5
+ content: ReactNode;
6
+ disabled?: boolean;
7
+ }
8
+ export interface TabsProps<V extends string> {
9
+ items: readonly TabItem<V>[];
10
+ /** 활성 항목에 없으면 첫 활성 탭을 표시하며 콜백은 호출하지 않는다. 부모에서 값을 맞춘다. */
11
+ value?: V;
12
+ defaultValue?: V;
13
+ onValueChange?: (value: V) => void;
14
+ /** auto는 화살표·Home·End 이동 시 선택하고 manual은 Enter 또는 Space로 선택한다. 기본 auto. */
15
+ activation?: "auto" | "manual";
16
+ /** 가로 탭만 지원한다. */
17
+ "aria-label"?: string;
18
+ "aria-labelledby"?: string;
19
+ className?: string;
20
+ }
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require("./_virtual/_rolldown/runtime.cjs");/* empty css */const e=require("./lib/utils.cjs"),t=require("./components/button/Button.cjs"),n=require("./components/badge/Badge.cjs"),r=require("./components/switch/Switch.cjs"),i=require("./components/checkbox/Checkbox.cjs"),ee=require("./components/input/use-input-format.cjs"),a=require("./components/input/Input.cjs"),te=require("./components/input/PasswordInput.cjs"),ne=require("./components/input/DecimalInput.cjs"),re=require("./components/input/format.cjs"),ie=require("./components/textarea/Textarea.cjs"),ae=require("./components/collapsible/Collapsible.cjs"),oe=require("./components/animated-height/AnimatedHeight.cjs"),se=require("./components/tooltip/Tooltip.cjs"),ce=require("./components/info-tooltip/InfoTooltip.cjs"),le=require("./components/popover/Popover.cjs"),o=require("./components/loading-spinner/LoadingSpinner.cjs"),s=require("./components/select/Select.cjs"),c=require("./components/select/MultiSelect.cjs"),l=require("./components/table-checkbox/TableCheckbox.cjs"),u=require("./hooks/useFillEmptyRows.cjs"),d=require("./hooks/useTableDragSelection.cjs"),f=require("./components/table/hooks/useTableSort.cjs"),p=require("./components/table/table.cjs"),m=require("./components/table/components/Pagination.cjs"),h=require("./components/table/paginated-table.cjs"),g=require("./components/table/mini-table.cjs"),_=require("./components/table/paginated-mini-table.cjs"),v=require("./components/table/accordion-table.cjs"),y=require("./hooks/useVirtualRows.cjs"),b=require("./components/table/hooks/useVirtualTable.cjs"),x=require("./hooks/useInfiniteScroll.cjs"),S=require("./hooks/useClickOutside.cjs"),C=require("./hooks/useMediaQuery.cjs"),w=require("./hooks/useBottomSheetDrag.cjs"),T=require("./hooks/useScrollLock.cjs"),E=require("./hooks/useFocusTrap.cjs"),D=require("./hooks/useAwaitableOverlay.cjs"),O=require("./components/stepper/use-stepper.cjs"),k=require("./lib/overlay-stack.cjs"),A=require("./lib/Portal.cjs"),j=require("./components/modal/Modal.cjs"),M=require("./components/modal/ModalSubView.cjs"),N=require("./components/modal/StandardModal.cjs"),P=require("./components/table/components/ColumnSettingsTable.cjs"),F=require("./components/table/components/ColumnPresetSelector.cjs"),I=require("./lib/column-preset-storage.cjs"),L=require("./components/table/hooks/useColumnPresets.cjs"),R=require("./components/table/hooks/useTableColumnState.cjs"),z=require("./components/page-title/PageTitle.cjs"),B=require("./components/toolbar/Toolbar.cjs"),V=require("./components/table-page-layout/TablePageLayout.cjs"),H=require("./components/date-picker/date-range-picker.cjs"),U=require("./components/date-picker/date-picker.cjs"),W=require("./components/date-picker/month-picker.cjs"),G=require("./components/time-picker/time-picker.cjs"),ue=require("./components/month-range-picker/month-range-picker.cjs"),de=require("./components/date-input/DateInput.cjs"),K=require("./components/search-box/parseDateRange.cjs"),fe=require("./components/search-box/SearchBox.cjs"),q=require("./components/search-box/parseSearchValues.cjs"),J=require("./components/search-box/dateRangePresets.cjs"),Y=require("./components/action-toast/ActionToast.cjs"),pe=require("./components/toast/ToastProvider.cjs"),me=require("./components/drawer/Drawer.cjs"),X=require("./components/radio/Radio.cjs"),he=require("./components/segmented-control/SegmentedControl.cjs"),Z=require("./components/progress/Progress.cjs"),ge=require("./components/skeleton/Skeleton.cjs"),_e=require("./components/field/Field.cjs"),ve=require("./components/field/FieldMessage.cjs"),Q=require("./components/error-boundary/chunk-reload.cjs"),ye=require("./components/error-boundary/ErrorBoundary.cjs"),be=require("./components/typing-dots/TypingDots.cjs"),xe=require("./components/typewriter-text/TypewriterText.cjs"),$=require("./components/stepper/Stepper.cjs"),Se=require("./components/segmented-code-input/SegmentedCodeInput.cjs"),Ce=require("./components/copyable-text/CopyableText.cjs");let we=require("react-hot-toast");exports.AccordionTable=v.AccordionTable,exports.AnimatedHeight=oe.AnimatedHeight,exports.Badge=n.Badge,exports.Button=t.Button,exports.CHUNK_RELOAD_TTL_MS=Q.CHUNK_RELOAD_TTL_MS,exports.Checkbox=i.Checkbox,exports.CheckboxCircle=i.CheckboxCircle,exports.CheckboxLine=i.CheckboxLine,exports.CheckboxLineTransparent=i.CheckboxLineTransparent,exports.Collapsible=ae.Collapsible,exports.ColumnPresetSelector=F.ColumnPresetSelector,exports.ColumnPresetStorage=I.ColumnPresetStorage,exports.ColumnSettingsTable=P.ColumnSettingsTable,exports.CopyableText=Ce.CopyableText,exports.DEFAULT_DATE_RANGE_PRESETS=J.DEFAULT_DATE_RANGE_PRESETS,exports.DateInput=de.DateInput,exports.DatePicker=U.DatePicker,exports.DatePickerBody=U.DatePickerBody,exports.DateRangePicker=H.DateRangePicker,exports.DecimalInput=ne.DecimalInput,exports.Drawer=me.Drawer,exports.ErrorBoundary=ye.ErrorBoundary,exports.Field=_e.Field,exports.FieldMessage=ve.FieldMessage,exports.InfoTooltip=ce.InfoTooltip,exports.InlineSpinner=o.InlineSpinner,exports.Input=a.Input,exports.LoadingSpinner=o.LoadingSpinner,exports.MOBILE_MEDIA_QUERY=C.MOBILE_MEDIA_QUERY,exports.MiniTable=g.MiniTable,exports.Modal=j.Modal,exports.ModalSubView=M.ModalSubView,exports.MonthPicker=W.MonthPicker,exports.MonthRangePicker=ue.MonthRangePicker,exports.MultiSelect=c.MultiSelect,exports.PageHeader=V.PageHeader,exports.PageTitle=z.PageTitle,exports.PaginatedMiniTable=_.PaginatedMiniTable,exports.PaginatedTable=h.PaginatedTable,exports.Pagination=m.Pagination,exports.PasswordInput=te.PasswordInput,exports.Popover=le.Popover,exports.Portal=A.Portal,exports.Progress=Z.Progress,exports.Radio=X.Radio,exports.RadioGroup=X.RadioGroup,exports.RadioItem=X.RadioItem,exports.SearchBox=fe.SearchBox,exports.SegmentedCodeInput=Se.SegmentedCodeInput,exports.SegmentedControl=he.SegmentedControl,exports.Select=s.Select,exports.Skeleton=ge.Skeleton,exports.Spinner=o.Spinner,exports.StandardModal=N.StandardModal,exports.Stepper=$.Stepper,exports.StepperContent=$.StepperContent,exports.Switch=r.Switch,exports.Table=p.Table,exports.TableCard=V.TableCard,exports.TableCheckbox=l.TableCheckbox,exports.TablePageLayout=V.TablePageLayout,exports.Textarea=ie.Textarea,exports.TimeInput=G.TimeInput,exports.TimePicker=G.TimePicker,exports.ToastProvider=pe.ToastProvider,exports.Toolbar=B.Toolbar,exports.Tooltip=se.Tooltip,exports.TypewriterText=xe.TypewriterText,exports.TypingDots=be.TypingDots,exports.clearChunkReloadGuard=Q.clearChunkReloadGuard,exports.cn=e.cn,exports.dismissActionToast=Y.dismissActionToast,exports.formatYearMonth=e.formatYearMonth,exports.getTodayDateRange=J.getTodayDateRange,exports.getTodayDateRangeValue=J.getTodayDateRangeValue,exports.inputFormats=re.inputFormats,exports.isActionToastActive=Y.isActionToastActive,exports.isChunkLoadError=Q.isChunkLoadError,exports.listenForChunkPreloadError=Q.listenForChunkPreloadError,exports.overlayStack=k.overlayStack,exports.parseDateRangeValue=K.parseDateRangeValue,exports.parseMultiSelectValue=q.parseMultiSelectValue,exports.parseSearchValues=q.parseSearchValues,exports.reloadAfterClearingChunkGuard=Q.reloadAfterClearingChunkGuard,exports.reloadOnceForChunkError=Q.reloadOnceForChunkError,exports.serializeDateRangeValue=K.serializeDateRangeValue,exports.showActionToast=Y.showActionToast,Object.defineProperty(exports,"toast",{enumerable:!0,get:function(){return we.default}}),exports.tryAcquireChunkReloadGuard=Q.tryAcquireChunkReloadGuard,exports.useAwaitableOverlay=D.useAwaitableOverlay,exports.useBottomSheetDrag=w.useBottomSheetDrag,exports.useClickOutside=S.useClickOutside,exports.useColumnPresets=L.useColumnPresets,exports.useFillEmptyRows=u.useFillEmptyRows,exports.useFocusTrap=E.useFocusTrap,exports.useHeaderButtonSize=V.useHeaderButtonSize,exports.useInfiniteScroll=x.useInfiniteScroll,exports.useInputFormat=ee.useInputFormat,exports.useIsMobile=C.useIsMobile,exports.useMediaQuery=C.useMediaQuery,exports.useScrollLock=T.useScrollLock,exports.useStepper=O.useStepper,exports.useTableColumnState=R.useTableColumnState,exports.useTableDragSelection=d.useTableDragSelection,exports.useTableSort=f.useTableSort,exports.useVirtualRows=y.useVirtualRows,exports.useVirtualTable=b.useVirtualTable;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require("./_virtual/_rolldown/runtime.cjs");/* empty css */const e=require("./lib/utils.cjs"),t=require("./components/button/Button.cjs"),n=require("./components/badge/Badge.cjs"),r=require("./components/switch/Switch.cjs"),i=require("./components/checkbox/Checkbox.cjs"),ee=require("./components/input/use-input-format.cjs"),a=require("./components/input/Input.cjs"),te=require("./components/input/PasswordInput.cjs"),ne=require("./components/input/DecimalInput.cjs"),re=require("./components/input/format.cjs"),ie=require("./components/textarea/Textarea.cjs"),ae=require("./components/collapsible/Collapsible.cjs"),oe=require("./components/animated-height/AnimatedHeight.cjs"),se=require("./components/tooltip/Tooltip.cjs"),ce=require("./components/info-tooltip/InfoTooltip.cjs"),le=require("./components/popover/Popover.cjs"),o=require("./components/loading-spinner/LoadingSpinner.cjs"),s=require("./components/select/Select.cjs"),c=require("./components/select/MultiSelect.cjs"),l=require("./components/table-checkbox/TableCheckbox.cjs"),u=require("./hooks/useFillEmptyRows.cjs"),d=require("./hooks/useTableDragSelection.cjs"),f=require("./components/table/hooks/useTableSort.cjs"),p=require("./components/table/table.cjs"),m=require("./components/table/components/Pagination.cjs"),h=require("./components/table/paginated-table.cjs"),g=require("./components/table/mini-table.cjs"),_=require("./components/table/paginated-mini-table.cjs"),v=require("./components/table/accordion-table.cjs"),y=require("./hooks/useVirtualRows.cjs"),b=require("./components/table/hooks/useVirtualTable.cjs"),x=require("./hooks/useInfiniteScroll.cjs"),S=require("./hooks/useClickOutside.cjs"),C=require("./hooks/useMediaQuery.cjs"),w=require("./hooks/useBottomSheetDrag.cjs"),T=require("./hooks/useScrollLock.cjs"),E=require("./hooks/useFocusTrap.cjs"),D=require("./hooks/useAwaitableOverlay.cjs"),O=require("./components/stepper/use-stepper.cjs"),k=require("./lib/overlay-stack.cjs"),A=require("./lib/Portal.cjs"),j=require("./components/modal/Modal.cjs"),M=require("./components/modal/ModalSubView.cjs"),N=require("./components/modal/StandardModal.cjs"),P=require("./components/table/components/ColumnSettingsTable.cjs"),F=require("./components/table/components/ColumnPresetSelector.cjs"),I=require("./lib/column-preset-storage.cjs"),L=require("./components/table/hooks/useColumnPresets.cjs"),R=require("./components/table/hooks/useTableColumnState.cjs"),z=require("./components/page-title/PageTitle.cjs"),B=require("./components/toolbar/Toolbar.cjs"),V=require("./components/table-page-layout/TablePageLayout.cjs"),H=require("./components/date-picker/date-range-picker.cjs"),U=require("./components/date-picker/date-picker.cjs"),W=require("./components/date-picker/month-picker.cjs"),G=require("./components/time-picker/time-picker.cjs"),ue=require("./components/month-range-picker/month-range-picker.cjs"),de=require("./components/date-input/DateInput.cjs"),K=require("./components/search-box/parseDateRange.cjs"),fe=require("./components/search-box/SearchBox.cjs"),q=require("./components/search-box/parseSearchValues.cjs"),J=require("./components/search-box/dateRangePresets.cjs"),Y=require("./components/action-toast/ActionToast.cjs"),pe=require("./components/toast/ToastProvider.cjs"),me=require("./components/drawer/Drawer.cjs"),X=require("./components/radio/Radio.cjs"),he=require("./components/segmented-control/SegmentedControl.cjs"),ge=require("./components/progress/Progress.cjs"),_e=require("./components/skeleton/Skeleton.cjs"),ve=require("./components/field/Field.cjs"),ye=require("./components/field/FieldMessage.cjs"),Z=require("./components/error-boundary/chunk-reload.cjs"),be=require("./components/error-boundary/ErrorBoundary.cjs"),xe=require("./components/typing-dots/TypingDots.cjs"),Q=require("./components/typewriter-text/TypewriterText.cjs"),$=require("./components/stepper/Stepper.cjs"),Se=require("./components/segmented-code-input/SegmentedCodeInput.cjs"),Ce=require("./components/copyable-text/CopyableText.cjs"),we=require("./components/tabs/Tabs.cjs"),Te=require("./components/slider/Slider.cjs");let Ee=require("react-hot-toast");exports.AccordionTable=v.AccordionTable,exports.AnimatedHeight=oe.AnimatedHeight,exports.Badge=n.Badge,exports.Button=t.Button,exports.CHUNK_RELOAD_TTL_MS=Z.CHUNK_RELOAD_TTL_MS,exports.Checkbox=i.Checkbox,exports.CheckboxCircle=i.CheckboxCircle,exports.CheckboxLine=i.CheckboxLine,exports.CheckboxLineTransparent=i.CheckboxLineTransparent,exports.Collapsible=ae.Collapsible,exports.ColumnPresetSelector=F.ColumnPresetSelector,exports.ColumnPresetStorage=I.ColumnPresetStorage,exports.ColumnSettingsTable=P.ColumnSettingsTable,exports.CopyableText=Ce.CopyableText,exports.DEFAULT_DATE_RANGE_PRESETS=J.DEFAULT_DATE_RANGE_PRESETS,exports.DateInput=de.DateInput,exports.DatePicker=U.DatePicker,exports.DatePickerBody=U.DatePickerBody,exports.DateRangePicker=H.DateRangePicker,exports.DecimalInput=ne.DecimalInput,exports.Drawer=me.Drawer,exports.ErrorBoundary=be.ErrorBoundary,exports.Field=ve.Field,exports.FieldMessage=ye.FieldMessage,exports.InfoTooltip=ce.InfoTooltip,exports.InlineSpinner=o.InlineSpinner,exports.Input=a.Input,exports.LoadingSpinner=o.LoadingSpinner,exports.MOBILE_MEDIA_QUERY=C.MOBILE_MEDIA_QUERY,exports.MiniTable=g.MiniTable,exports.Modal=j.Modal,exports.ModalSubView=M.ModalSubView,exports.MonthPicker=W.MonthPicker,exports.MonthRangePicker=ue.MonthRangePicker,exports.MultiSelect=c.MultiSelect,exports.PageHeader=V.PageHeader,exports.PageTitle=z.PageTitle,exports.PaginatedMiniTable=_.PaginatedMiniTable,exports.PaginatedTable=h.PaginatedTable,exports.Pagination=m.Pagination,exports.PasswordInput=te.PasswordInput,exports.Popover=le.Popover,exports.Portal=A.Portal,exports.Progress=ge.Progress,exports.Radio=X.Radio,exports.RadioGroup=X.RadioGroup,exports.RadioItem=X.RadioItem,exports.SearchBox=fe.SearchBox,exports.SegmentedCodeInput=Se.SegmentedCodeInput,exports.SegmentedControl=he.SegmentedControl,exports.Select=s.Select,exports.Skeleton=_e.Skeleton,exports.Slider=Te.Slider,exports.Spinner=o.Spinner,exports.StandardModal=N.StandardModal,exports.Stepper=$.Stepper,exports.StepperContent=$.StepperContent,exports.Switch=r.Switch,exports.Table=p.Table,exports.TableCard=V.TableCard,exports.TableCheckbox=l.TableCheckbox,exports.TablePageLayout=V.TablePageLayout,exports.Tabs=we.Tabs,exports.Textarea=ie.Textarea,exports.TimeInput=G.TimeInput,exports.TimePicker=G.TimePicker,exports.ToastProvider=pe.ToastProvider,exports.Toolbar=B.Toolbar,exports.Tooltip=se.Tooltip,exports.TypewriterText=Q.TypewriterText,exports.TypingDots=xe.TypingDots,exports.clearChunkReloadGuard=Z.clearChunkReloadGuard,exports.cn=e.cn,exports.dismissActionToast=Y.dismissActionToast,exports.formatYearMonth=e.formatYearMonth,exports.getTodayDateRange=J.getTodayDateRange,exports.getTodayDateRangeValue=J.getTodayDateRangeValue,exports.inputFormats=re.inputFormats,exports.isActionToastActive=Y.isActionToastActive,exports.isChunkLoadError=Z.isChunkLoadError,exports.listenForChunkPreloadError=Z.listenForChunkPreloadError,exports.overlayStack=k.overlayStack,exports.parseDateRangeValue=K.parseDateRangeValue,exports.parseMultiSelectValue=q.parseMultiSelectValue,exports.parseSearchValues=q.parseSearchValues,exports.reloadAfterClearingChunkGuard=Z.reloadAfterClearingChunkGuard,exports.reloadOnceForChunkError=Z.reloadOnceForChunkError,exports.serializeDateRangeValue=K.serializeDateRangeValue,exports.showActionToast=Y.showActionToast,Object.defineProperty(exports,"toast",{enumerable:!0,get:function(){return Ee.default}}),exports.tryAcquireChunkReloadGuard=Z.tryAcquireChunkReloadGuard,exports.useAwaitableOverlay=D.useAwaitableOverlay,exports.useBottomSheetDrag=w.useBottomSheetDrag,exports.useClickOutside=S.useClickOutside,exports.useColumnPresets=L.useColumnPresets,exports.useFillEmptyRows=u.useFillEmptyRows,exports.useFocusTrap=E.useFocusTrap,exports.useHeaderButtonSize=V.useHeaderButtonSize,exports.useInfiniteScroll=x.useInfiniteScroll,exports.useInputFormat=ee.useInputFormat,exports.useIsMobile=C.useIsMobile,exports.useMediaQuery=C.useMediaQuery,exports.useScrollLock=T.useScrollLock,exports.useStepper=O.useStepper,exports.useTableColumnState=R.useTableColumnState,exports.useTableDragSelection=d.useTableDragSelection,exports.useTableSort=f.useTableSort,exports.useVirtualRows=y.useVirtualRows,exports.useVirtualTable=b.useVirtualTable;
package/dist/index.d.ts CHANGED
@@ -38,3 +38,5 @@ export * from './components/typewriter-text/index.js';
38
38
  export * from './components/stepper/index.js';
39
39
  export * from './components/segmented-code-input/index.js';
40
40
  export * from './components/copyable-text/index.js';
41
+ export * from './components/tabs/index.js';
42
+ export * from './components/slider/index.js';