@brycks/core-front 0.3.5 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (168) hide show
  1. package/dist/components/data/List/List.cjs +1 -1
  2. package/dist/components/data/List/List.cjs.map +1 -1
  3. package/dist/components/data/List/List.js +1 -1
  4. package/dist/components/data/List/List.js.map +1 -1
  5. package/dist/components/data/Table/Table.cjs +1 -1
  6. package/dist/components/data/Table/Table.cjs.map +1 -1
  7. package/dist/components/data/Table/Table.js +196 -166
  8. package/dist/components/data/Table/Table.js.map +1 -1
  9. package/dist/components/data/TreeView/TreeView.cjs +1 -1
  10. package/dist/components/data/TreeView/TreeView.cjs.map +1 -1
  11. package/dist/components/data/TreeView/TreeView.js +1 -1
  12. package/dist/components/data/TreeView/TreeView.js.map +1 -1
  13. package/dist/components/data.cjs +1 -1
  14. package/dist/components/data.js +23 -21
  15. package/dist/components/feedback/Alert/Alert.cjs +1 -1
  16. package/dist/components/feedback/Alert/Alert.cjs.map +1 -1
  17. package/dist/components/feedback/Alert/Alert.js +20 -19
  18. package/dist/components/feedback/Alert/Alert.js.map +1 -1
  19. package/dist/components/feedback/Banner/Banner.cjs +2 -0
  20. package/dist/components/feedback/Banner/Banner.cjs.map +1 -0
  21. package/dist/components/feedback/Banner/Banner.js +77 -0
  22. package/dist/components/feedback/Banner/Banner.js.map +1 -0
  23. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.cjs +2 -0
  24. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.cjs.map +1 -0
  25. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.js +68 -0
  26. package/dist/components/feedback/ConfirmDialog/ConfirmDialog.js.map +1 -0
  27. package/dist/components/feedback/Drawer/Drawer.cjs +2 -2
  28. package/dist/components/feedback/Drawer/Drawer.cjs.map +1 -1
  29. package/dist/components/feedback/Drawer/Drawer.js +58 -57
  30. package/dist/components/feedback/Drawer/Drawer.js.map +1 -1
  31. package/dist/components/feedback/Modal/Modal.cjs +1 -1
  32. package/dist/components/feedback/Modal/Modal.cjs.map +1 -1
  33. package/dist/components/feedback/Modal/Modal.js +101 -91
  34. package/dist/components/feedback/Modal/Modal.js.map +1 -1
  35. package/dist/components/feedback/Popover/Popover.cjs +2 -2
  36. package/dist/components/feedback/Popover/Popover.cjs.map +1 -1
  37. package/dist/components/feedback/Popover/Popover.js +93 -85
  38. package/dist/components/feedback/Popover/Popover.js.map +1 -1
  39. package/dist/components/feedback/Toast/Toast.cjs +2 -2
  40. package/dist/components/feedback/Toast/Toast.cjs.map +1 -1
  41. package/dist/components/feedback/Toast/Toast.js +102 -93
  42. package/dist/components/feedback/Toast/Toast.js.map +1 -1
  43. package/dist/components/feedback.cjs +1 -1
  44. package/dist/components/feedback.js +17 -13
  45. package/dist/components/feedback.js.map +1 -1
  46. package/dist/components/form/Combobox/Combobox.cjs +2 -2
  47. package/dist/components/form/Combobox/Combobox.cjs.map +1 -1
  48. package/dist/components/form/Combobox/Combobox.js +187 -167
  49. package/dist/components/form/Combobox/Combobox.js.map +1 -1
  50. package/dist/components/form/DateInput/DateInput.cjs +1 -1
  51. package/dist/components/form/DateInput/DateInput.cjs.map +1 -1
  52. package/dist/components/form/DateInput/DateInput.js +2 -2
  53. package/dist/components/form/DateInput/DateInput.js.map +1 -1
  54. package/dist/components/form/DateRangePicker/DateRangePicker.cjs +1 -1
  55. package/dist/components/form/DateRangePicker/DateRangePicker.cjs.map +1 -1
  56. package/dist/components/form/DateRangePicker/DateRangePicker.js +34 -34
  57. package/dist/components/form/DateRangePicker/DateRangePicker.js.map +1 -1
  58. package/dist/components/form/DropZone/DropZone.cjs +1 -1
  59. package/dist/components/form/DropZone/DropZone.cjs.map +1 -1
  60. package/dist/components/form/DropZone/DropZone.js +10 -10
  61. package/dist/components/form/DropZone/DropZone.js.map +1 -1
  62. package/dist/components/form/FileInput/FileInput.cjs +1 -1
  63. package/dist/components/form/FileInput/FileInput.cjs.map +1 -1
  64. package/dist/components/form/FileInput/FileInput.js +1 -1
  65. package/dist/components/form/FileInput/FileInput.js.map +1 -1
  66. package/dist/components/form/FormCard/FormCard.cjs +1 -1
  67. package/dist/components/form/FormCard/FormCard.cjs.map +1 -1
  68. package/dist/components/form/FormCard/FormCard.js +9 -9
  69. package/dist/components/form/FormCard/FormCard.js.map +1 -1
  70. package/dist/components/form/FormField/FormField.cjs +1 -1
  71. package/dist/components/form/FormField/FormField.cjs.map +1 -1
  72. package/dist/components/form/FormField/FormField.js +67 -55
  73. package/dist/components/form/FormField/FormField.js.map +1 -1
  74. package/dist/components/form/MultiSelect/MultiSelect.cjs +1 -1
  75. package/dist/components/form/MultiSelect/MultiSelect.cjs.map +1 -1
  76. package/dist/components/form/MultiSelect/MultiSelect.js +2 -3
  77. package/dist/components/form/MultiSelect/MultiSelect.js.map +1 -1
  78. package/dist/components/form/Radio/Radio.cjs +1 -1
  79. package/dist/components/form/Radio/Radio.cjs.map +1 -1
  80. package/dist/components/form/Radio/Radio.js +20 -20
  81. package/dist/components/form/Radio/Radio.js.map +1 -1
  82. package/dist/components/form/SearchInput/SearchInput.cjs +2 -0
  83. package/dist/components/form/SearchInput/SearchInput.cjs.map +1 -0
  84. package/dist/components/form/SearchInput/SearchInput.js +68 -0
  85. package/dist/components/form/SearchInput/SearchInput.js.map +1 -0
  86. package/dist/components/form/TagInput/TagInput.cjs +1 -1
  87. package/dist/components/form/TagInput/TagInput.cjs.map +1 -1
  88. package/dist/components/form/TagInput/TagInput.js +104 -102
  89. package/dist/components/form/TagInput/TagInput.js.map +1 -1
  90. package/dist/components/form/TimePicker/TimePicker.cjs +1 -1
  91. package/dist/components/form/TimePicker/TimePicker.cjs.map +1 -1
  92. package/dist/components/form/TimePicker/TimePicker.js +29 -30
  93. package/dist/components/form/TimePicker/TimePicker.js.map +1 -1
  94. package/dist/components/form.cjs +1 -1
  95. package/dist/components/form.js +15 -13
  96. package/dist/components/form.js.map +1 -1
  97. package/dist/components/layout/Card/Card.cjs +1 -1
  98. package/dist/components/layout/Card/Card.cjs.map +1 -1
  99. package/dist/components/layout/Card/Card.js +7 -5
  100. package/dist/components/layout/Card/Card.js.map +1 -1
  101. package/dist/components/layout/Collapse/Collapse.cjs.map +1 -1
  102. package/dist/components/layout/Collapse/Collapse.js.map +1 -1
  103. package/dist/components/media/Image/Image.cjs +1 -1
  104. package/dist/components/media/Image/Image.cjs.map +1 -1
  105. package/dist/components/media/Image/Image.js +9 -9
  106. package/dist/components/media/Image/Image.js.map +1 -1
  107. package/dist/components/media/ImageThumbnail/ImageThumbnail.cjs +1 -1
  108. package/dist/components/media/ImageThumbnail/ImageThumbnail.cjs.map +1 -1
  109. package/dist/components/media/ImageThumbnail/ImageThumbnail.js +6 -6
  110. package/dist/components/media/ImageThumbnail/ImageThumbnail.js.map +1 -1
  111. package/dist/components/navigation/Accordion/Accordion.cjs +1 -1
  112. package/dist/components/navigation/Accordion/Accordion.cjs.map +1 -1
  113. package/dist/components/navigation/Accordion/Accordion.js +0 -1
  114. package/dist/components/navigation/Accordion/Accordion.js.map +1 -1
  115. package/dist/components/navigation/Menu/Menu.cjs +1 -1
  116. package/dist/components/navigation/Menu/Menu.cjs.map +1 -1
  117. package/dist/components/navigation/Menu/Menu.js +87 -86
  118. package/dist/components/navigation/Menu/Menu.js.map +1 -1
  119. package/dist/components/navigation/Pagination/Pagination.cjs +1 -1
  120. package/dist/components/navigation/Pagination/Pagination.cjs.map +1 -1
  121. package/dist/components/navigation/Pagination/Pagination.js +107 -99
  122. package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
  123. package/dist/components/navigation/SegmentedControl/SegmentedControl.cjs +2 -0
  124. package/dist/components/navigation/SegmentedControl/SegmentedControl.cjs.map +1 -0
  125. package/dist/components/navigation/SegmentedControl/SegmentedControl.js +90 -0
  126. package/dist/components/navigation/SegmentedControl/SegmentedControl.js.map +1 -0
  127. package/dist/components/navigation.cjs +1 -1
  128. package/dist/components/navigation.js +25 -23
  129. package/dist/components/navigation.js.map +1 -1
  130. package/dist/components/utility/Avatar/Avatar.cjs +1 -1
  131. package/dist/components/utility/Avatar/Avatar.cjs.map +1 -1
  132. package/dist/components/utility/Avatar/Avatar.js +18 -18
  133. package/dist/components/utility/Avatar/Avatar.js.map +1 -1
  134. package/dist/components/utility/Badge/Badge.cjs +1 -1
  135. package/dist/components/utility/Badge/Badge.cjs.map +1 -1
  136. package/dist/components/utility/Badge/Badge.js +31 -23
  137. package/dist/components/utility/Badge/Badge.js.map +1 -1
  138. package/dist/components/utility/Kbd/Kbd.cjs +2 -0
  139. package/dist/components/utility/Kbd/Kbd.cjs.map +1 -0
  140. package/dist/components/utility/Kbd/Kbd.js +20 -0
  141. package/dist/components/utility/Kbd/Kbd.js.map +1 -0
  142. package/dist/components/utility/Logo/Logo.cjs +1 -1
  143. package/dist/components/utility/Logo/Logo.cjs.map +1 -1
  144. package/dist/components/utility/Logo/Logo.js +21 -21
  145. package/dist/components/utility/Logo/Logo.js.map +1 -1
  146. package/dist/components/utility.cjs +1 -1
  147. package/dist/components/utility.js +9 -7
  148. package/dist/components/utility.js.map +1 -1
  149. package/dist/data.d.ts +34 -1
  150. package/dist/design-system/themes/ThemeProvider.cjs +1 -1
  151. package/dist/design-system/themes/ThemeProvider.cjs.map +1 -1
  152. package/dist/design-system/themes/ThemeProvider.js +46 -46
  153. package/dist/design-system/themes/ThemeProvider.js.map +1 -1
  154. package/dist/design-system/tokens/zIndex.cjs +1 -1
  155. package/dist/design-system/tokens/zIndex.cjs.map +1 -1
  156. package/dist/design-system/tokens/zIndex.js +2 -0
  157. package/dist/design-system/tokens/zIndex.js.map +1 -1
  158. package/dist/feedback.d.ts +75 -2
  159. package/dist/form.d.ts +41 -0
  160. package/dist/index.cjs +1 -1
  161. package/dist/index.d.ts +213 -3
  162. package/dist/index.js +177 -165
  163. package/dist/index.js.map +1 -1
  164. package/dist/navigation.d.ts +58 -0
  165. package/dist/styles.css +1 -1
  166. package/dist/tokens.d.ts +2 -0
  167. package/dist/utility.d.ts +19 -0
  168. package/package.json +2 -1
@@ -1,251 +1,281 @@
1
- import { jsx as r, jsxs as w } from "react/jsx-runtime";
2
- import { forwardRef as b, createContext as P, useContext as z } from "react";
3
- import { cx as p } from "../../../utils/styles.js";
4
- import { durations as v, easings as T } from "../../../design-system/tokens/motion.js";
5
- import { componentPaddingX as c, componentPaddingY as S, componentGap as L } from "../../../design-system/primitives/sizing.js";
6
- import { spacing as h } from "../../../design-system/tokens/spacing.js";
7
- import { fontSizes as m } from "../../../design-system/tokens/typography.js";
8
- const N = P({ size: "md", variant: "default" });
9
- function x() {
10
- return z(N);
1
+ import { jsx as o, jsxs as $, Fragment as X } from "react/jsx-runtime";
2
+ import { forwardRef as m, createContext as Y, useContext as M } from "react";
3
+ import { cx as b } from "../../../utils/styles.js";
4
+ import { EmptyState as B } from "../../utility/EmptyState/EmptyState.js";
5
+ import { Skeleton as A } from "../../utility/Skeleton/Skeleton.js";
6
+ import { durations as T, easings as S } from "../../../design-system/tokens/motion.js";
7
+ import { componentPaddingX as p, componentPaddingY as C, componentGap as E } from "../../../design-system/primitives/sizing.js";
8
+ import { spacing as v } from "../../../design-system/tokens/spacing.js";
9
+ import { fontSizes as f } from "../../../design-system/tokens/typography.js";
10
+ const H = Y({ size: "md", variant: "default", stickyHeader: !1 });
11
+ function g() {
12
+ return M(H);
11
13
  }
12
- const C = {
13
- sm: { fontSize: m.base - 1, paddingY: S.md, paddingX: c.sm, headerPaddingY: S.md, headerPaddingX: c.sm },
14
- md: { fontSize: m.base, paddingY: c.sm, paddingX: c.md, headerPaddingY: c.sm, headerPaddingX: c.md },
15
- lg: { fontSize: m.base + 1, paddingY: c.md, paddingX: c.lg, headerPaddingY: h[3.5], headerPaddingX: c.lg }
16
- }, X = b(function({
17
- size: e = "md",
18
- variant: t = "default",
19
- stickyHeader: n = !1,
20
- loading: o = !1,
21
- className: a,
22
- style: l,
14
+ const x = {
15
+ sm: { fontSize: f.base - 1, paddingY: C.md, paddingX: p.sm, headerPaddingY: C.md, headerPaddingX: p.sm },
16
+ md: { fontSize: f.base, paddingY: p.sm, paddingX: p.md, headerPaddingY: p.sm, headerPaddingX: p.md },
17
+ lg: { fontSize: f.base + 1, paddingY: p.md, paddingX: p.lg, headerPaddingY: v[3.5], headerPaddingX: p.lg }
18
+ }, W = m(function({
19
+ size: t = "md",
20
+ variant: e = "default",
21
+ stickyHeader: l = !1,
22
+ loading: a = !1,
23
+ className: r,
24
+ style: n,
23
25
  children: d,
24
- testId: y,
25
- ...f
26
- }, i) {
26
+ testId: s,
27
+ ...y
28
+ }, c) {
27
29
  const u = {
28
30
  position: "relative",
29
31
  width: "100%",
30
32
  overflow: "auto",
31
- ...l
32
- }, g = {
33
+ ...n
34
+ }, h = {
33
35
  width: "100%",
34
- borderCollapse: t === "bordered" ? "separate" : "collapse",
36
+ borderCollapse: e === "bordered" ? "separate" : "collapse",
35
37
  borderSpacing: 0,
36
- fontSize: C[e].fontSize,
37
- opacity: o ? 0.6 : 1,
38
- transition: `opacity ${v.quick}ms ${T.easeOut}`
38
+ fontSize: x[t].fontSize,
39
+ fontVariantNumeric: "tabular-nums",
40
+ opacity: a ? 0.6 : 1,
41
+ transition: `opacity ${T.quick}ms ${S.easeOut}`
39
42
  };
40
- return /* @__PURE__ */ r(N.Provider, { value: { size: e, variant: t }, children: /* @__PURE__ */ r("div", { className: "brycks-table-container", style: u, children: /* @__PURE__ */ r(
43
+ return /* @__PURE__ */ o(H.Provider, { value: { size: t, variant: e, stickyHeader: l }, children: /* @__PURE__ */ o("div", { className: "brycks-table-container", style: u, children: /* @__PURE__ */ o(
41
44
  "table",
42
45
  {
43
- ref: i,
44
- className: p("brycks-table", `brycks-table--${e}`, `brycks-table--${t}`, a),
45
- style: g,
46
- "data-testid": y,
47
- ...f,
46
+ ref: c,
47
+ className: b("brycks-table", `brycks-table--${t}`, `brycks-table--${e}`, r),
48
+ style: h,
49
+ "aria-busy": a || void 0,
50
+ "data-testid": s,
51
+ ...y,
48
52
  children: d
49
53
  }
50
54
  ) }) });
51
55
  });
52
- X.displayName = "Table";
53
- const Y = b(function({ sticky: e = !1, className: t, style: n, children: o, ...a }, l) {
54
- const d = {
56
+ W.displayName = "Table";
57
+ const F = m(function({ sticky: t = !1, className: e, style: l, children: a, ...r }, n) {
58
+ const { stickyHeader: d } = g(), s = t || d, y = {
55
59
  backgroundColor: "var(--brycks-background-muted)",
56
- position: e ? "sticky" : void 0,
57
- top: e ? 0 : void 0,
58
- zIndex: e ? 1 : void 0,
59
- ...n
60
+ position: s ? "sticky" : void 0,
61
+ top: s ? 0 : void 0,
62
+ zIndex: s ? 1 : void 0,
63
+ ...l
60
64
  };
61
- return /* @__PURE__ */ r(
65
+ return /* @__PURE__ */ o(
62
66
  "thead",
63
67
  {
64
- ref: l,
65
- className: p("brycks-table-head", e && "brycks-table-head--sticky", t),
66
- style: d,
67
- ...a,
68
- children: o
68
+ ref: n,
69
+ className: b("brycks-table-head", s && "brycks-table-head--sticky", e),
70
+ style: y,
71
+ ...r,
72
+ children: a
69
73
  }
70
74
  );
71
75
  });
72
- Y.displayName = "TableHead";
73
- const M = b(function({ className: e, style: t, children: n, ...o }, a) {
74
- const l = {
75
- ...t
76
+ F.displayName = "TableHead";
77
+ const O = m(function({ className: t, style: e, children: l, ...a }, r) {
78
+ const n = {
79
+ ...e
76
80
  };
77
- return /* @__PURE__ */ r(
81
+ return /* @__PURE__ */ o(
78
82
  "tbody",
79
83
  {
80
- ref: a,
81
- className: p("brycks-table-body", e),
82
- style: l,
83
- ...o,
84
- children: n
84
+ ref: r,
85
+ className: b("brycks-table-body", t),
86
+ style: n,
87
+ ...a,
88
+ children: l
85
89
  }
86
90
  );
87
91
  });
88
- M.displayName = "TableBody";
89
- const B = b(function({ selected: e = !1, clickable: t = !1, className: n, style: o, children: a, ...l }, d) {
90
- const { variant: y } = x(), f = {
91
- backgroundColor: e ? "var(--brycks-primary-50)" : "transparent",
92
- borderBottom: y !== "bordered" ? "1px solid var(--brycks-border-muted)" : void 0,
93
- cursor: t ? "pointer" : void 0,
94
- transition: `background-color ${v.quick}ms ${T.easeOut}`,
95
- ...o
92
+ O.displayName = "TableBody";
93
+ const P = m(function({ selected: t = !1, clickable: e = !1, className: l, style: a, children: r, ...n }, d) {
94
+ const { variant: s } = g(), y = {
95
+ backgroundColor: t ? "var(--brycks-primary-muted)" : "transparent",
96
+ borderBottom: s !== "bordered" ? "1px solid var(--brycks-border-muted)" : void 0,
97
+ cursor: e ? "pointer" : void 0,
98
+ transition: `background-color ${T.quick}ms ${S.easeOut}`,
99
+ ...a
96
100
  };
97
- return /* @__PURE__ */ r(
101
+ return /* @__PURE__ */ o(
98
102
  "tr",
99
103
  {
100
104
  ref: d,
101
- className: p(
105
+ className: b(
102
106
  "brycks-table-row",
103
- e && "brycks-table-row--selected",
104
- t && "brycks-table-row--clickable",
105
- n
107
+ t && "brycks-table-row--selected",
108
+ e && "brycks-table-row--clickable",
109
+ l
106
110
  ),
107
- style: f,
108
- onMouseEnter: (i) => {
109
- t && !e && (i.currentTarget.style.backgroundColor = "var(--brycks-background-muted)");
111
+ style: y,
112
+ onMouseEnter: (c) => {
113
+ e && !t && (c.currentTarget.style.backgroundColor = "var(--brycks-background-muted)");
110
114
  },
111
- onMouseLeave: (i) => {
112
- e || (i.currentTarget.style.backgroundColor = "transparent");
115
+ onMouseLeave: (c) => {
116
+ t || (c.currentTarget.style.backgroundColor = "transparent");
113
117
  },
114
- ...l,
115
- children: a
118
+ ...n,
119
+ children: r
116
120
  }
117
121
  );
118
122
  });
119
- B.displayName = "TableRow";
120
- function A({ direction: s }) {
121
- return s ? /* @__PURE__ */ r("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", children: s === "asc" ? /* @__PURE__ */ r("path", { d: "M7 3L10 6H4L7 3Z", fill: "currentColor" }) : /* @__PURE__ */ r("path", { d: "M7 11L4 8H10L7 11Z", fill: "currentColor" }) }) : /* @__PURE__ */ w("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", style: { opacity: 0.4 }, children: [
122
- /* @__PURE__ */ r("path", { d: "M7 3L10 6H4L7 3Z", fill: "currentColor" }),
123
- /* @__PURE__ */ r("path", { d: "M7 11L4 8H10L7 11Z", fill: "currentColor" })
123
+ P.displayName = "TableRow";
124
+ function R({ direction: i }) {
125
+ return i ? /* @__PURE__ */ o("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", "aria-hidden": "true", children: i === "asc" ? /* @__PURE__ */ o("path", { d: "M7 3L10 6H4L7 3Z", fill: "currentColor" }) : /* @__PURE__ */ o("path", { d: "M7 11L4 8H10L7 11Z", fill: "currentColor" }) }) : /* @__PURE__ */ $("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", style: { opacity: 0.4 }, "aria-hidden": "true", children: [
126
+ /* @__PURE__ */ o("path", { d: "M7 3L10 6H4L7 3Z", fill: "currentColor" }),
127
+ /* @__PURE__ */ o("path", { d: "M7 11L4 8H10L7 11Z", fill: "currentColor" })
124
128
  ] });
125
129
  }
126
- const O = b(function({
127
- sortable: e = !1,
128
- sortDirection: t = null,
129
- onSort: n,
130
- align: o = "left",
131
- className: a,
132
- style: l,
130
+ const Z = m(function({
131
+ sortable: t = !1,
132
+ sortDirection: e = null,
133
+ onSort: l,
134
+ align: a = "left",
135
+ className: r,
136
+ style: n,
133
137
  children: d,
134
- ...y
135
- }, f) {
136
- const { size: i } = x(), u = C[i], g = {
138
+ ...s
139
+ }, y) {
140
+ const { size: c } = g(), u = x[c], h = {
137
141
  padding: `${u.headerPaddingY}px ${u.headerPaddingX}px`,
138
142
  fontWeight: 600,
139
143
  color: "var(--brycks-foreground-muted)",
140
- textAlign: o,
144
+ textAlign: a,
141
145
  whiteSpace: "nowrap",
142
- cursor: e ? "pointer" : void 0,
143
- userSelect: e ? "none" : void 0,
144
- transition: `color ${v.quick}ms ${T.easeOut}`,
145
- ...l
146
- }, $ = {
146
+ transition: `color ${T.quick}ms ${S.easeOut}`,
147
+ ...n
148
+ }, w = {
147
149
  display: "flex",
148
150
  alignItems: "center",
149
- gap: L.sm,
150
- justifyContent: o === "right" ? "flex-end" : o === "center" ? "center" : "flex-start"
151
- }, H = () => {
152
- e && n && n();
151
+ gap: E.sm,
152
+ justifyContent: a === "right" ? "flex-end" : a === "center" ? "center" : "flex-start"
153
+ }, L = {
154
+ ...w,
155
+ width: "100%",
156
+ padding: 0,
157
+ background: "transparent",
158
+ border: "none",
159
+ font: "inherit",
160
+ fontWeight: "inherit",
161
+ color: "inherit",
162
+ cursor: "pointer",
163
+ userSelect: "none"
153
164
  };
154
- return /* @__PURE__ */ r(
165
+ return /* @__PURE__ */ o(
155
166
  "th",
156
167
  {
157
- ref: f,
158
- className: p("brycks-table-header", e && "brycks-table-header--sortable", a),
159
- style: g,
160
- onClick: H,
161
- onMouseEnter: (k) => {
162
- e && (k.currentTarget.style.color = "var(--brycks-foreground-default)");
163
- },
164
- onMouseLeave: (k) => {
165
- k.currentTarget.style.color = "var(--brycks-foreground-muted)";
166
- },
167
- ...y,
168
- children: /* @__PURE__ */ w("span", { style: $, children: [
169
- d,
170
- e && /* @__PURE__ */ r(A, { direction: t })
171
- ] })
168
+ ref: y,
169
+ "aria-sort": t ? e === "asc" ? "ascending" : e === "desc" ? "descending" : "none" : void 0,
170
+ className: b("brycks-table-header", t && "brycks-table-header--sortable", r),
171
+ style: h,
172
+ ...s,
173
+ children: t ? /* @__PURE__ */ $(
174
+ "button",
175
+ {
176
+ type: "button",
177
+ style: L,
178
+ onClick: () => l?.(),
179
+ onMouseEnter: (k) => {
180
+ k.currentTarget.style.color = "var(--brycks-foreground-default)";
181
+ },
182
+ onMouseLeave: (k) => {
183
+ k.currentTarget.style.color = "inherit";
184
+ },
185
+ children: [
186
+ d,
187
+ /* @__PURE__ */ o(R, { direction: e })
188
+ ]
189
+ }
190
+ ) : /* @__PURE__ */ o("span", { style: w, children: d })
172
191
  }
173
192
  );
174
193
  });
175
- O.displayName = "TableHeader";
176
- const R = b(function({ align: e = "left", truncate: t = !1, className: n, style: o, children: a, ...l }, d) {
177
- const { size: y, variant: f } = x(), i = C[y], u = {
178
- padding: `${i.paddingY}px ${i.paddingX}px`,
194
+ Z.displayName = "TableHeader";
195
+ const z = m(function({ align: t = "left", truncate: e = !1, className: l, style: a, children: r, ...n }, d) {
196
+ const { size: s, variant: y } = g(), c = x[s], u = {
197
+ padding: `${c.paddingY}px ${c.paddingX}px`,
179
198
  color: "var(--brycks-foreground-default)",
180
- textAlign: e,
199
+ textAlign: t,
181
200
  verticalAlign: "middle",
182
- border: f === "bordered" ? "1px solid var(--brycks-border-muted)" : void 0,
183
- maxWidth: t ? 200 : void 0,
184
- overflow: t ? "hidden" : void 0,
185
- textOverflow: t ? "ellipsis" : void 0,
186
- whiteSpace: t ? "nowrap" : void 0,
187
- ...o
201
+ border: y === "bordered" ? "1px solid var(--brycks-border-muted)" : void 0,
202
+ maxWidth: e ? 200 : void 0,
203
+ overflow: e ? "hidden" : void 0,
204
+ textOverflow: e ? "ellipsis" : void 0,
205
+ whiteSpace: e ? "nowrap" : void 0,
206
+ ...a
188
207
  };
189
- return /* @__PURE__ */ r(
208
+ return /* @__PURE__ */ o(
190
209
  "td",
191
210
  {
192
211
  ref: d,
193
- className: p("brycks-table-cell", t && "brycks-table-cell--truncate", n),
212
+ className: b("brycks-table-cell", e && "brycks-table-cell--truncate", l),
194
213
  style: u,
195
- title: t && typeof a == "string" ? a : void 0,
196
- ...l,
197
- children: a
214
+ title: e && typeof r == "string" ? r : void 0,
215
+ ...n,
216
+ children: r
198
217
  }
199
218
  );
200
219
  });
201
- R.displayName = "TableCell";
202
- const Z = b(function({ className: e, style: t, children: n, ...o }, a) {
203
- const l = {
220
+ z.displayName = "TableCell";
221
+ const j = m(function({ className: t, style: e, children: l, ...a }, r) {
222
+ const n = {
204
223
  backgroundColor: "var(--brycks-background-muted)",
205
224
  fontWeight: 500,
206
- ...t
225
+ ...e
207
226
  };
208
- return /* @__PURE__ */ r(
227
+ return /* @__PURE__ */ o(
209
228
  "tfoot",
210
229
  {
211
- ref: a,
212
- className: p("brycks-table-foot", e),
213
- style: l,
214
- ...o,
215
- children: n
230
+ ref: r,
231
+ className: b("brycks-table-foot", t),
232
+ style: n,
233
+ ...a,
234
+ children: l
216
235
  }
217
236
  );
218
237
  });
219
- Z.displayName = "TableFoot";
220
- const j = b(function({ placement: e = "bottom", className: t, style: n, children: o, ...a }, l) {
238
+ j.displayName = "TableFoot";
239
+ const q = m(function({ placement: t = "bottom", className: e, style: l, children: a, ...r }, n) {
221
240
  const d = {
222
- captionSide: e,
223
- padding: `${h[3]}px ${h[4]}px`,
224
- fontSize: m.base - 1,
241
+ captionSide: t,
242
+ padding: `${v[3]}px ${v[4]}px`,
243
+ fontSize: f.base - 1,
225
244
  color: "var(--brycks-foreground-muted)",
226
245
  textAlign: "left",
227
- ...n
246
+ ...l
228
247
  };
229
- return /* @__PURE__ */ r(
248
+ return /* @__PURE__ */ o(
230
249
  "caption",
231
250
  {
232
- ref: l,
233
- className: p("brycks-table-caption", t),
251
+ ref: n,
252
+ className: b("brycks-table-caption", e),
234
253
  style: d,
235
- ...a,
236
- children: o
254
+ ...r,
255
+ children: a
237
256
  }
238
257
  );
239
258
  });
240
- j.displayName = "TableCaption";
259
+ q.displayName = "TableCaption";
260
+ const I = m(function({ colSpan: t, icon: e, title: l, description: a, action: r, className: n }, d) {
261
+ return /* @__PURE__ */ o("tr", { ref: d, className: b("brycks-table-empty", n), children: /* @__PURE__ */ o("td", { colSpan: t, style: { padding: 0 }, children: /* @__PURE__ */ o(B, { icon: e, title: l, description: a, action: r }) }) });
262
+ });
263
+ I.displayName = "TableEmpty";
264
+ const N = ["70%", "45%", "85%", "55%", "60%", "40%"];
265
+ function _({ rows: i = 5, columns: t, className: e }) {
266
+ return /* @__PURE__ */ o(X, { children: Array.from({ length: i }).map((l, a) => /* @__PURE__ */ o(P, { className: b("brycks-table-skeleton-row", e), "aria-hidden": "true", children: Array.from({ length: t }).map((r, n) => /* @__PURE__ */ o(z, { children: /* @__PURE__ */ o(A, { variant: "text", width: N[n % N.length] }) }, n)) }, a)) });
267
+ }
268
+ _.displayName = "TableSkeleton";
241
269
  export {
242
- X as Table,
243
- M as TableBody,
244
- j as TableCaption,
245
- R as TableCell,
246
- Z as TableFoot,
247
- Y as TableHead,
248
- O as TableHeader,
249
- B as TableRow
270
+ W as Table,
271
+ O as TableBody,
272
+ q as TableCaption,
273
+ z as TableCell,
274
+ I as TableEmpty,
275
+ j as TableFoot,
276
+ F as TableHead,
277
+ Z as TableHeader,
278
+ P as TableRow,
279
+ _ as TableSkeleton
250
280
  };
251
281
  //# sourceMappingURL=Table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Table.js","sources":["../../../../src/components/data/Table/Table.tsx"],"sourcesContent":["/**\n * Table Component\n *\n * A flexible table component with sorting, selection, and responsive support.\n * Follows design system patterns for consistent styling.\n */\n\nimport {\n forwardRef,\n createContext,\n useContext,\n type CSSProperties,\n type HTMLAttributes,\n type ThHTMLAttributes,\n type TdHTMLAttributes,\n} from 'react'\nimport { cx } from '../../../utils/styles'\nimport { spacing, fontSizes, durations, easings } from '../../../design-system'\nimport { componentGap, componentPaddingX, componentPaddingY } from '../../../design-system/primitives'\n\nexport type TableSize = 'sm' | 'md' | 'lg'\nexport type TableVariant = 'default' | 'striped' | 'bordered'\n\ninterface TableContextValue {\n size: TableSize\n variant: TableVariant\n}\n\nconst TableContext = createContext<TableContextValue>({ size: 'md', variant: 'default' })\n\nfunction useTableContext() {\n return useContext(TableContext)\n}\n\nexport interface TableProps extends HTMLAttributes<HTMLTableElement> {\n /** Table size */\n size?: TableSize\n /** Table variant */\n variant?: TableVariant\n /** Whether the table has a sticky header */\n stickyHeader?: boolean\n /** Whether the table is in a loading state */\n loading?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<TableSize, { fontSize: number; paddingY: number; paddingX: number; headerPaddingY: number; headerPaddingX: number }> = {\n sm: { fontSize: fontSizes.base - 1, paddingY: componentPaddingY.md, paddingX: componentPaddingX.sm, headerPaddingY: componentPaddingY.md, headerPaddingX: componentPaddingX.sm },\n md: { fontSize: fontSizes.base, paddingY: componentPaddingX.sm, paddingX: componentPaddingX.md, headerPaddingY: componentPaddingX.sm, headerPaddingX: componentPaddingX.md },\n lg: { fontSize: fontSizes.base + 1, paddingY: componentPaddingX.md, paddingX: componentPaddingX.lg, headerPaddingY: spacing[3.5], headerPaddingX: componentPaddingX.lg },\n}\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(function Table(\n {\n size = 'md',\n variant = 'default',\n stickyHeader: _stickyHeader = false,\n loading = false,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const containerStyle: CSSProperties = {\n position: 'relative',\n width: '100%',\n overflow: 'auto',\n ...style,\n }\n\n const tableStyle: CSSProperties = {\n width: '100%',\n borderCollapse: variant === 'bordered' ? 'separate' : 'collapse',\n borderSpacing: 0,\n fontSize: sizeConfig[size].fontSize,\n opacity: loading ? 0.6 : 1,\n transition: `opacity ${durations.quick}ms ${easings.easeOut}`,\n }\n\n return (\n <TableContext.Provider value={{ size, variant }}>\n <div className=\"brycks-table-container\" style={containerStyle}>\n <table\n ref={ref}\n className={cx('brycks-table', `brycks-table--${size}`, `brycks-table--${variant}`, className)}\n style={tableStyle}\n data-testid={testId}\n {...props}\n >\n {children}\n </table>\n </div>\n </TableContext.Provider>\n )\n})\n\nTable.displayName = 'Table'\n\n// TableHead\nexport interface TableHeadProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Whether the header is sticky */\n sticky?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableHead = forwardRef<HTMLTableSectionElement, TableHeadProps>(function TableHead(\n { sticky = false, className, style, children, ...props },\n ref\n) {\n const headStyle: CSSProperties = {\n backgroundColor: 'var(--brycks-background-muted)',\n position: sticky ? 'sticky' : undefined,\n top: sticky ? 0 : undefined,\n zIndex: sticky ? 1 : undefined,\n ...style,\n }\n\n return (\n <thead\n ref={ref}\n className={cx('brycks-table-head', sticky && 'brycks-table-head--sticky', className)}\n style={headStyle}\n {...props}\n >\n {children}\n </thead>\n )\n})\n\nTableHead.displayName = 'TableHead'\n\n// TableBody\nexport interface TableBodyProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const TableBody = forwardRef<HTMLTableSectionElement, TableBodyProps>(function TableBody(\n { className, style, children, ...props },\n ref\n) {\n const bodyStyle: CSSProperties = {\n ...style,\n }\n\n return (\n <tbody\n ref={ref}\n className={cx('brycks-table-body', className)}\n style={bodyStyle}\n {...props}\n >\n {children}\n </tbody>\n )\n})\n\nTableBody.displayName = 'TableBody'\n\n// TableRow\nexport interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {\n /** Whether the row is selected */\n selected?: boolean\n /** Whether the row is clickable */\n clickable?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(function TableRow(\n { selected = false, clickable = false, className, style, children, ...props },\n ref\n) {\n const { variant } = useTableContext()\n\n const rowStyle: CSSProperties = {\n backgroundColor: selected\n ? 'var(--brycks-primary-50)'\n : 'transparent',\n borderBottom: variant !== 'bordered' ? '1px solid var(--brycks-border-muted)' : undefined,\n cursor: clickable ? 'pointer' : undefined,\n transition: `background-color ${durations.quick}ms ${easings.easeOut}`,\n ...style,\n }\n\n return (\n <tr\n ref={ref}\n className={cx(\n 'brycks-table-row',\n selected && 'brycks-table-row--selected',\n clickable && 'brycks-table-row--clickable',\n className\n )}\n style={rowStyle}\n onMouseEnter={(e) => {\n if (clickable && !selected) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n if (!selected) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n {...props}\n >\n {children}\n </tr>\n )\n})\n\nTableRow.displayName = 'TableRow'\n\n// TableHeader (th)\nexport interface TableHeaderProps extends ThHTMLAttributes<HTMLTableCellElement> {\n /** Whether the column is sortable */\n sortable?: boolean\n /** Sort direction */\n sortDirection?: 'asc' | 'desc' | null\n /** Callback when sort is requested */\n onSort?: () => void\n /** Text alignment */\n align?: 'left' | 'center' | 'right'\n /** Custom class name */\n className?: string\n}\n\nfunction SortIcon({ direction }: { direction: 'asc' | 'desc' | null }) {\n if (!direction) {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" style={{ opacity: 0.4 }}>\n <path d=\"M7 3L10 6H4L7 3Z\" fill=\"currentColor\" />\n <path d=\"M7 11L4 8H10L7 11Z\" fill=\"currentColor\" />\n </svg>\n )\n }\n\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\">\n {direction === 'asc' ? (\n <path d=\"M7 3L10 6H4L7 3Z\" fill=\"currentColor\" />\n ) : (\n <path d=\"M7 11L4 8H10L7 11Z\" fill=\"currentColor\" />\n )}\n </svg>\n )\n}\n\nexport const TableHeader = forwardRef<HTMLTableCellElement, TableHeaderProps>(function TableHeader(\n {\n sortable = false,\n sortDirection = null,\n onSort,\n align = 'left',\n className,\n style,\n children,\n ...props\n },\n ref\n) {\n const { size } = useTableContext()\n const config = sizeConfig[size]\n\n const headerStyle: CSSProperties = {\n padding: `${config.headerPaddingY}px ${config.headerPaddingX}px`,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n textAlign: align,\n whiteSpace: 'nowrap',\n cursor: sortable ? 'pointer' : undefined,\n userSelect: sortable ? 'none' : undefined,\n transition: `color ${durations.quick}ms ${easings.easeOut}`,\n ...style,\n }\n\n const contentStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: componentGap.sm,\n justifyContent: align === 'right' ? 'flex-end' : align === 'center' ? 'center' : 'flex-start',\n }\n\n const handleClick = () => {\n if (sortable && onSort) {\n onSort()\n }\n }\n\n return (\n <th\n ref={ref}\n className={cx('brycks-table-header', sortable && 'brycks-table-header--sortable', className)}\n style={headerStyle}\n onClick={handleClick}\n onMouseEnter={(e) => {\n if (sortable) {\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.color = 'var(--brycks-foreground-muted)'\n }}\n {...props}\n >\n <span style={contentStyle}>\n {children}\n {sortable && <SortIcon direction={sortDirection} />}\n </span>\n </th>\n )\n})\n\nTableHeader.displayName = 'TableHeader'\n\n// TableCell (td)\nexport interface TableCellProps extends TdHTMLAttributes<HTMLTableCellElement> {\n /** Text alignment */\n align?: 'left' | 'center' | 'right'\n /** Whether to truncate text */\n truncate?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(function TableCell(\n { align = 'left', truncate = false, className, style, children, ...props },\n ref\n) {\n const { size, variant } = useTableContext()\n const config = sizeConfig[size]\n\n const cellStyle: CSSProperties = {\n padding: `${config.paddingY}px ${config.paddingX}px`,\n color: 'var(--brycks-foreground-default)',\n textAlign: align,\n verticalAlign: 'middle',\n border: variant === 'bordered' ? '1px solid var(--brycks-border-muted)' : undefined,\n maxWidth: truncate ? 200 : undefined,\n overflow: truncate ? 'hidden' : undefined,\n textOverflow: truncate ? 'ellipsis' : undefined,\n whiteSpace: truncate ? 'nowrap' : undefined,\n ...style,\n }\n\n return (\n <td\n ref={ref}\n className={cx('brycks-table-cell', truncate && 'brycks-table-cell--truncate', className)}\n style={cellStyle}\n title={truncate && typeof children === 'string' ? children : undefined}\n {...props}\n >\n {children}\n </td>\n )\n})\n\nTableCell.displayName = 'TableCell'\n\n// TableFoot\nexport interface TableFootProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const TableFoot = forwardRef<HTMLTableSectionElement, TableFootProps>(function TableFoot(\n { className, style, children, ...props },\n ref\n) {\n const footStyle: CSSProperties = {\n backgroundColor: 'var(--brycks-background-muted)',\n fontWeight: 500,\n ...style,\n }\n\n return (\n <tfoot\n ref={ref}\n className={cx('brycks-table-foot', className)}\n style={footStyle}\n {...props}\n >\n {children}\n </tfoot>\n )\n})\n\nTableFoot.displayName = 'TableFoot'\n\n// TableCaption\nexport interface TableCaptionProps extends HTMLAttributes<HTMLTableCaptionElement> {\n /** Caption placement */\n placement?: 'top' | 'bottom'\n /** Custom class name */\n className?: string\n}\n\nexport const TableCaption = forwardRef<HTMLTableCaptionElement, TableCaptionProps>(function TableCaption(\n { placement = 'bottom', className, style, children, ...props },\n ref\n) {\n const captionStyle: CSSProperties = {\n captionSide: placement,\n padding: `${spacing[3]}px ${spacing[4]}px`,\n fontSize: fontSizes.base - 1,\n color: 'var(--brycks-foreground-muted)',\n textAlign: 'left',\n ...style,\n }\n\n return (\n <caption\n ref={ref}\n className={cx('brycks-table-caption', className)}\n style={captionStyle}\n {...props}\n >\n {children}\n </caption>\n )\n})\n\nTableCaption.displayName = 'TableCaption'\n"],"names":["TableContext","createContext","useTableContext","useContext","sizeConfig","fontSizes","componentPaddingY","componentPaddingX","spacing","Table","forwardRef","size","variant","_stickyHeader","loading","className","style","children","testId","props","ref","containerStyle","tableStyle","durations","easings","jsx","cx","TableHead","sticky","headStyle","TableBody","bodyStyle","TableRow","selected","clickable","rowStyle","e","SortIcon","direction","jsxs","TableHeader","sortable","sortDirection","onSort","align","config","headerStyle","contentStyle","componentGap","handleClick","TableCell","truncate","cellStyle","TableFoot","footStyle","TableCaption","placement","captionStyle"],"mappings":"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"}
1
+ {"version":3,"file":"Table.js","sources":["../../../../src/components/data/Table/Table.tsx"],"sourcesContent":["/**\n * Table Component\n *\n * A flexible table component with sorting, selection, and responsive support.\n * Follows design system patterns for consistent styling.\n */\n\nimport {\n forwardRef,\n createContext,\n useContext,\n type CSSProperties,\n type HTMLAttributes,\n type ThHTMLAttributes,\n type TdHTMLAttributes,\n type ReactNode,\n} from 'react'\nimport { cx } from '../../../utils/styles'\nimport { spacing, fontSizes, durations, easings } from '../../../design-system'\nimport { componentGap, componentPaddingX, componentPaddingY } from '../../../design-system/primitives'\nimport { EmptyState } from '../../utility/EmptyState'\nimport { Skeleton } from '../../utility/Skeleton'\n\nexport type TableSize = 'sm' | 'md' | 'lg'\n// `striped` was dead API (no CSS, incompatible with inline row styling) — removed in 0.5.0.\nexport type TableVariant = 'default' | 'bordered'\n\ninterface TableContextValue {\n size: TableSize\n variant: TableVariant\n stickyHeader: boolean\n}\n\nconst TableContext = createContext<TableContextValue>({ size: 'md', variant: 'default', stickyHeader: false })\n\nfunction useTableContext() {\n return useContext(TableContext)\n}\n\nexport interface TableProps extends HTMLAttributes<HTMLTableElement> {\n /** Table size */\n size?: TableSize\n /** Table variant */\n variant?: TableVariant\n /** Whether the table has a sticky header */\n stickyHeader?: boolean\n /** Whether the table is in a loading state */\n loading?: boolean\n /** Custom class name */\n className?: string\n /** Test ID */\n testId?: string\n}\n\nconst sizeConfig: Record<TableSize, { fontSize: number; paddingY: number; paddingX: number; headerPaddingY: number; headerPaddingX: number }> = {\n sm: { fontSize: fontSizes.base - 1, paddingY: componentPaddingY.md, paddingX: componentPaddingX.sm, headerPaddingY: componentPaddingY.md, headerPaddingX: componentPaddingX.sm },\n md: { fontSize: fontSizes.base, paddingY: componentPaddingX.sm, paddingX: componentPaddingX.md, headerPaddingY: componentPaddingX.sm, headerPaddingX: componentPaddingX.md },\n lg: { fontSize: fontSizes.base + 1, paddingY: componentPaddingX.md, paddingX: componentPaddingX.lg, headerPaddingY: spacing[3.5], headerPaddingX: componentPaddingX.lg },\n}\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(function Table(\n {\n size = 'md',\n variant = 'default',\n stickyHeader = false,\n loading = false,\n className,\n style,\n children,\n testId,\n ...props\n },\n ref\n) {\n const containerStyle: CSSProperties = {\n position: 'relative',\n width: '100%',\n overflow: 'auto',\n ...style,\n }\n\n const tableStyle: CSSProperties = {\n width: '100%',\n borderCollapse: variant === 'bordered' ? 'separate' : 'collapse',\n borderSpacing: 0,\n fontSize: sizeConfig[size].fontSize,\n fontVariantNumeric: 'tabular-nums',\n opacity: loading ? 0.6 : 1,\n transition: `opacity ${durations.quick}ms ${easings.easeOut}`,\n }\n\n return (\n <TableContext.Provider value={{ size, variant, stickyHeader }}>\n <div className=\"brycks-table-container\" style={containerStyle}>\n <table\n ref={ref}\n className={cx('brycks-table', `brycks-table--${size}`, `brycks-table--${variant}`, className)}\n style={tableStyle}\n aria-busy={loading || undefined}\n data-testid={testId}\n {...props}\n >\n {children}\n </table>\n </div>\n </TableContext.Provider>\n )\n})\n\nTable.displayName = 'Table'\n\n// TableHead\nexport interface TableHeadProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Whether the header is sticky */\n sticky?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableHead = forwardRef<HTMLTableSectionElement, TableHeadProps>(function TableHead(\n { sticky = false, className, style, children, ...props },\n ref\n) {\n const { stickyHeader } = useTableContext()\n const isSticky = sticky || stickyHeader\n\n const headStyle: CSSProperties = {\n backgroundColor: 'var(--brycks-background-muted)',\n position: isSticky ? 'sticky' : undefined,\n top: isSticky ? 0 : undefined,\n zIndex: isSticky ? 1 : undefined,\n ...style,\n }\n\n return (\n <thead\n ref={ref}\n className={cx('brycks-table-head', isSticky && 'brycks-table-head--sticky', className)}\n style={headStyle}\n {...props}\n >\n {children}\n </thead>\n )\n})\n\nTableHead.displayName = 'TableHead'\n\n// TableBody\nexport interface TableBodyProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const TableBody = forwardRef<HTMLTableSectionElement, TableBodyProps>(function TableBody(\n { className, style, children, ...props },\n ref\n) {\n const bodyStyle: CSSProperties = {\n ...style,\n }\n\n return (\n <tbody\n ref={ref}\n className={cx('brycks-table-body', className)}\n style={bodyStyle}\n {...props}\n >\n {children}\n </tbody>\n )\n})\n\nTableBody.displayName = 'TableBody'\n\n// TableRow\nexport interface TableRowProps extends HTMLAttributes<HTMLTableRowElement> {\n /** Whether the row is selected */\n selected?: boolean\n /** Whether the row is clickable */\n clickable?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableRow = forwardRef<HTMLTableRowElement, TableRowProps>(function TableRow(\n { selected = false, clickable = false, className, style, children, ...props },\n ref\n) {\n const { variant } = useTableContext()\n\n const rowStyle: CSSProperties = {\n backgroundColor: selected\n ? 'var(--brycks-primary-muted)'\n : 'transparent',\n borderBottom: variant !== 'bordered' ? '1px solid var(--brycks-border-muted)' : undefined,\n cursor: clickable ? 'pointer' : undefined,\n transition: `background-color ${durations.quick}ms ${easings.easeOut}`,\n ...style,\n }\n\n return (\n <tr\n ref={ref}\n className={cx(\n 'brycks-table-row',\n selected && 'brycks-table-row--selected',\n clickable && 'brycks-table-row--clickable',\n className\n )}\n style={rowStyle}\n onMouseEnter={(e) => {\n if (clickable && !selected) {\n e.currentTarget.style.backgroundColor = 'var(--brycks-background-muted)'\n }\n }}\n onMouseLeave={(e) => {\n if (!selected) {\n e.currentTarget.style.backgroundColor = 'transparent'\n }\n }}\n {...props}\n >\n {children}\n </tr>\n )\n})\n\nTableRow.displayName = 'TableRow'\n\n// TableHeader (th)\nexport interface TableHeaderProps extends ThHTMLAttributes<HTMLTableCellElement> {\n /** Whether the column is sortable */\n sortable?: boolean\n /** Sort direction */\n sortDirection?: 'asc' | 'desc' | null\n /** Callback when sort is requested */\n onSort?: () => void\n /** Text alignment */\n align?: 'left' | 'center' | 'right'\n /** Custom class name */\n className?: string\n}\n\nfunction SortIcon({ direction }: { direction: 'asc' | 'desc' | null }) {\n if (!direction) {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" style={{ opacity: 0.4 }} aria-hidden=\"true\">\n <path d=\"M7 3L10 6H4L7 3Z\" fill=\"currentColor\" />\n <path d=\"M7 11L4 8H10L7 11Z\" fill=\"currentColor\" />\n </svg>\n )\n }\n\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" aria-hidden=\"true\">\n {direction === 'asc' ? (\n <path d=\"M7 3L10 6H4L7 3Z\" fill=\"currentColor\" />\n ) : (\n <path d=\"M7 11L4 8H10L7 11Z\" fill=\"currentColor\" />\n )}\n </svg>\n )\n}\n\nexport const TableHeader = forwardRef<HTMLTableCellElement, TableHeaderProps>(function TableHeader(\n {\n sortable = false,\n sortDirection = null,\n onSort,\n align = 'left',\n className,\n style,\n children,\n ...props\n },\n ref\n) {\n const { size } = useTableContext()\n const config = sizeConfig[size]\n\n const headerStyle: CSSProperties = {\n padding: `${config.headerPaddingY}px ${config.headerPaddingX}px`,\n fontWeight: 600,\n color: 'var(--brycks-foreground-muted)',\n textAlign: align,\n whiteSpace: 'nowrap',\n transition: `color ${durations.quick}ms ${easings.easeOut}`,\n ...style,\n }\n\n const contentStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: componentGap.sm,\n justifyContent: align === 'right' ? 'flex-end' : align === 'center' ? 'center' : 'flex-start',\n }\n\n // Sorting happens through a real button so it is reachable by keyboard\n const sortButtonStyle: CSSProperties = {\n ...contentStyle,\n width: '100%',\n padding: 0,\n background: 'transparent',\n border: 'none',\n font: 'inherit',\n fontWeight: 'inherit',\n color: 'inherit',\n cursor: 'pointer',\n userSelect: 'none',\n }\n\n return (\n <th\n ref={ref}\n aria-sort={\n sortable\n ? sortDirection === 'asc'\n ? 'ascending'\n : sortDirection === 'desc'\n ? 'descending'\n : 'none'\n : undefined\n }\n className={cx('brycks-table-header', sortable && 'brycks-table-header--sortable', className)}\n style={headerStyle}\n {...props}\n >\n {sortable ? (\n <button\n type=\"button\"\n style={sortButtonStyle}\n onClick={() => onSort?.()}\n onMouseEnter={(e) => {\n e.currentTarget.style.color = 'var(--brycks-foreground-default)'\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.color = 'inherit'\n }}\n >\n {children}\n <SortIcon direction={sortDirection} />\n </button>\n ) : (\n <span style={contentStyle}>{children}</span>\n )}\n </th>\n )\n})\n\nTableHeader.displayName = 'TableHeader'\n\n// TableCell (td)\nexport interface TableCellProps extends TdHTMLAttributes<HTMLTableCellElement> {\n /** Text alignment */\n align?: 'left' | 'center' | 'right'\n /** Whether to truncate text */\n truncate?: boolean\n /** Custom class name */\n className?: string\n}\n\nexport const TableCell = forwardRef<HTMLTableCellElement, TableCellProps>(function TableCell(\n { align = 'left', truncate = false, className, style, children, ...props },\n ref\n) {\n const { size, variant } = useTableContext()\n const config = sizeConfig[size]\n\n const cellStyle: CSSProperties = {\n padding: `${config.paddingY}px ${config.paddingX}px`,\n color: 'var(--brycks-foreground-default)',\n textAlign: align,\n verticalAlign: 'middle',\n border: variant === 'bordered' ? '1px solid var(--brycks-border-muted)' : undefined,\n maxWidth: truncate ? 200 : undefined,\n overflow: truncate ? 'hidden' : undefined,\n textOverflow: truncate ? 'ellipsis' : undefined,\n whiteSpace: truncate ? 'nowrap' : undefined,\n ...style,\n }\n\n return (\n <td\n ref={ref}\n className={cx('brycks-table-cell', truncate && 'brycks-table-cell--truncate', className)}\n style={cellStyle}\n title={truncate && typeof children === 'string' ? children : undefined}\n {...props}\n >\n {children}\n </td>\n )\n})\n\nTableCell.displayName = 'TableCell'\n\n// TableFoot\nexport interface TableFootProps extends HTMLAttributes<HTMLTableSectionElement> {\n /** Custom class name */\n className?: string\n}\n\nexport const TableFoot = forwardRef<HTMLTableSectionElement, TableFootProps>(function TableFoot(\n { className, style, children, ...props },\n ref\n) {\n const footStyle: CSSProperties = {\n backgroundColor: 'var(--brycks-background-muted)',\n fontWeight: 500,\n ...style,\n }\n\n return (\n <tfoot\n ref={ref}\n className={cx('brycks-table-foot', className)}\n style={footStyle}\n {...props}\n >\n {children}\n </tfoot>\n )\n})\n\nTableFoot.displayName = 'TableFoot'\n\n// TableCaption\nexport interface TableCaptionProps extends HTMLAttributes<HTMLTableCaptionElement> {\n /** Caption placement */\n placement?: 'top' | 'bottom'\n /** Custom class name */\n className?: string\n}\n\nexport const TableCaption = forwardRef<HTMLTableCaptionElement, TableCaptionProps>(function TableCaption(\n { placement = 'bottom', className, style, children, ...props },\n ref\n) {\n const captionStyle: CSSProperties = {\n captionSide: placement,\n padding: `${spacing[3]}px ${spacing[4]}px`,\n fontSize: fontSizes.base - 1,\n color: 'var(--brycks-foreground-muted)',\n textAlign: 'left',\n ...style,\n }\n\n return (\n <caption\n ref={ref}\n className={cx('brycks-table-caption', className)}\n style={captionStyle}\n {...props}\n >\n {children}\n </caption>\n )\n})\n\nTableCaption.displayName = 'TableCaption'\n\n// TableEmpty — a full-width empty state row, drop inside <TableBody>\nexport interface TableEmptyProps {\n /** Number of columns to span (match the table's column count) */\n colSpan: number\n /** Icon or illustration */\n icon?: ReactNode\n /** Title text */\n title?: ReactNode\n /** Description text */\n description?: ReactNode\n /** Action element (button, link) */\n action?: ReactNode\n /** Custom class name */\n className?: string\n}\n\nexport const TableEmpty = forwardRef<HTMLTableRowElement, TableEmptyProps>(function TableEmpty(\n { colSpan, icon, title, description, action, className },\n ref\n) {\n return (\n <tr ref={ref} className={cx('brycks-table-empty', className)}>\n <td colSpan={colSpan} style={{ padding: 0 }}>\n <EmptyState icon={icon} title={title} description={description} action={action} />\n </td>\n </tr>\n )\n})\n\nTableEmpty.displayName = 'TableEmpty'\n\n// TableSkeleton — placeholder rows shown while data loads, drop inside <TableBody>\nexport interface TableSkeletonProps {\n /** Number of skeleton rows */\n rows?: number\n /** Number of columns per row (match the table's column count) */\n columns: number\n /** Custom class name applied to each row */\n className?: string\n}\n\n// Deterministic per-column widths so the placeholder reads like real data\nconst skeletonWidths = ['70%', '45%', '85%', '55%', '60%', '40%']\n\nexport function TableSkeleton({ rows = 5, columns, className }: TableSkeletonProps) {\n return (\n <>\n {Array.from({ length: rows }).map((_, rowIndex) => (\n <TableRow key={rowIndex} className={cx('brycks-table-skeleton-row', className)} aria-hidden=\"true\">\n {Array.from({ length: columns }).map((_, colIndex) => (\n <TableCell key={colIndex}>\n <Skeleton variant=\"text\" width={skeletonWidths[colIndex % skeletonWidths.length]} />\n </TableCell>\n ))}\n </TableRow>\n ))}\n </>\n )\n}\n\nTableSkeleton.displayName = 'TableSkeleton'\n"],"names":["TableContext","createContext","useTableContext","useContext","sizeConfig","fontSizes","componentPaddingY","componentPaddingX","spacing","Table","forwardRef","size","variant","stickyHeader","loading","className","style","children","testId","props","ref","containerStyle","tableStyle","durations","easings","jsx","cx","TableHead","sticky","isSticky","headStyle","TableBody","bodyStyle","TableRow","selected","clickable","rowStyle","e","SortIcon","direction","TableHeader","sortable","sortDirection","onSort","align","config","headerStyle","contentStyle","componentGap","sortButtonStyle","jsxs","TableCell","truncate","cellStyle","TableFoot","footStyle","TableCaption","placement","captionStyle","TableEmpty","colSpan","icon","title","description","action","EmptyState","skeletonWidths","TableSkeleton","rows","columns","Fragment","_","rowIndex","colIndex","Skeleton"],"mappings":";;;;;;;;;AAiCA,MAAMA,IAAeC,EAAiC,EAAE,MAAM,MAAM,SAAS,WAAW,cAAc,IAAO;AAE7G,SAASC,IAAkB;AACzB,SAAOC,EAAWH,CAAY;AAChC;AAiBA,MAAMI,IAA0I;AAAA,EAC9I,IAAI,EAAE,UAAUC,EAAU,OAAO,GAAG,UAAUC,EAAkB,IAAI,UAAUC,EAAkB,IAAI,gBAAgBD,EAAkB,IAAI,gBAAgBC,EAAkB,GAAA;AAAA,EAC5K,IAAI,EAAE,UAAUF,EAAU,MAAM,UAAUE,EAAkB,IAAI,UAAUA,EAAkB,IAAI,gBAAgBA,EAAkB,IAAI,gBAAgBA,EAAkB,GAAA;AAAA,EACxK,IAAI,EAAE,UAAUF,EAAU,OAAO,GAAG,UAAUE,EAAkB,IAAI,UAAUA,EAAkB,IAAI,gBAAgBC,EAAQ,GAAG,GAAG,gBAAgBD,EAAkB,GAAA;AACtK,GAEaE,IAAQC,EAAyC,SAC5D;AAAA,EACE,MAAAC,IAAO;AAAA,EACP,SAAAC,IAAU;AAAA,EACV,cAAAC,IAAe;AAAA,EACf,SAAAC,IAAU;AAAA,EACV,WAAAC;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AACA,QAAMC,IAAgC;AAAA,IACpC,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,GAAGL;AAAA,EAAA,GAGCM,IAA4B;AAAA,IAChC,OAAO;AAAA,IACP,gBAAgBV,MAAY,aAAa,aAAa;AAAA,IACtD,eAAe;AAAA,IACf,UAAUR,EAAWO,CAAI,EAAE;AAAA,IAC3B,oBAAoB;AAAA,IACpB,SAASG,IAAU,MAAM;AAAA,IACzB,YAAY,WAAWS,EAAU,KAAK,MAAMC,EAAQ,OAAO;AAAA,EAAA;AAG7D,SACE,gBAAAC,EAACzB,EAAa,UAAb,EAAsB,OAAO,EAAE,MAAAW,GAAM,SAAAC,GAAS,cAAAC,EAAA,GAC7C,UAAA,gBAAAY,EAAC,OAAA,EAAI,WAAU,0BAAyB,OAAOJ,GAC7C,UAAA,gBAAAI;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAL;AAAA,MACA,WAAWM,EAAG,gBAAgB,iBAAiBf,CAAI,IAAI,iBAAiBC,CAAO,IAAIG,CAAS;AAAA,MAC5F,OAAOO;AAAA,MACP,aAAWR,KAAW;AAAA,MACtB,eAAaI;AAAA,MACZ,GAAGC;AAAA,MAEH,UAAAF;AAAA,IAAA;AAAA,EAAA,GAEL,EAAA,CACF;AAEJ,CAAC;AAEDR,EAAM,cAAc;AAUb,MAAMkB,IAAYjB,EAAoD,SAC3E,EAAE,QAAAkB,IAAS,IAAO,WAAAb,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGE,EAAA,GACjDC,GACA;AACA,QAAM,EAAE,cAAAP,EAAA,IAAiBX,EAAA,GACnB2B,IAAWD,KAAUf,GAErBiB,IAA2B;AAAA,IAC/B,iBAAiB;AAAA,IACjB,UAAUD,IAAW,WAAW;AAAA,IAChC,KAAKA,IAAW,IAAI;AAAA,IACpB,QAAQA,IAAW,IAAI;AAAA,IACvB,GAAGb;AAAA,EAAA;AAGL,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAL;AAAA,MACA,WAAWM,EAAG,qBAAqBG,KAAY,6BAA6Bd,CAAS;AAAA,MACrF,OAAOe;AAAA,MACN,GAAGX;AAAA,MAEH,UAAAF;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDU,EAAU,cAAc;AAQjB,MAAMI,IAAYrB,EAAoD,SAC3E,EAAE,WAAAK,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGE,EAAA,GACjCC,GACA;AACA,QAAMY,IAA2B;AAAA,IAC/B,GAAGhB;AAAA,EAAA;AAGL,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAL;AAAA,MACA,WAAWM,EAAG,qBAAqBX,CAAS;AAAA,MAC5C,OAAOiB;AAAA,MACN,GAAGb;AAAA,MAEH,UAAAF;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDc,EAAU,cAAc;AAYjB,MAAME,IAAWvB,EAA+C,SACrE,EAAE,UAAAwB,IAAW,IAAO,WAAAC,IAAY,IAAO,WAAApB,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGE,EAAA,GACtEC,GACA;AACA,QAAM,EAAE,SAAAR,EAAA,IAAYV,EAAA,GAEdkC,IAA0B;AAAA,IAC9B,iBAAiBF,IACb,gCACA;AAAA,IACJ,cAActB,MAAY,aAAa,yCAAyC;AAAA,IAChF,QAAQuB,IAAY,YAAY;AAAA,IAChC,YAAY,oBAAoBZ,EAAU,KAAK,MAAMC,EAAQ,OAAO;AAAA,IACpE,GAAGR;AAAA,EAAA;AAGL,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAL;AAAA,MACA,WAAWM;AAAA,QACT;AAAA,QACAQ,KAAY;AAAA,QACZC,KAAa;AAAA,QACbpB;AAAA,MAAA;AAAA,MAEF,OAAOqB;AAAA,MACP,cAAc,CAACC,MAAM;AACnB,QAAIF,KAAa,CAACD,MAChBG,EAAE,cAAc,MAAM,kBAAkB;AAAA,MAE5C;AAAA,MACA,cAAc,CAACA,MAAM;AACnB,QAAKH,MACHG,EAAE,cAAc,MAAM,kBAAkB;AAAA,MAE5C;AAAA,MACC,GAAGlB;AAAA,MAEH,UAAAF;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDgB,EAAS,cAAc;AAgBvB,SAASK,EAAS,EAAE,WAAAC,KAAmD;AACrE,SAAKA,IAUH,gBAAAd,EAAC,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,eAAY,QACrE,UAAAc,MAAc,QACb,gBAAAd,EAAC,QAAA,EAAK,GAAE,oBAAmB,MAAK,eAAA,CAAe,IAE/C,gBAAAA,EAAC,QAAA,EAAK,GAAE,sBAAqB,MAAK,eAAA,CAAe,GAErD,sBAdG,OAAA,EAAI,OAAM,MAAK,QAAO,MAAK,SAAQ,aAAY,MAAK,QAAO,OAAO,EAAE,SAAS,IAAA,GAAO,eAAY,QAC/F,UAAA;AAAA,IAAA,gBAAAA,EAAC,QAAA,EAAK,GAAE,oBAAmB,MAAK,gBAAe;AAAA,IAC/C,gBAAAA,EAAC,QAAA,EAAK,GAAE,sBAAqB,MAAK,eAAA,CAAe;AAAA,EAAA,GACnD;AAaN;AAEO,MAAMe,IAAc9B,EAAmD,SAC5E;AAAA,EACE,UAAA+B,IAAW;AAAA,EACX,eAAAC,IAAgB;AAAA,EAChB,QAAAC;AAAA,EACA,OAAAC,IAAQ;AAAA,EACR,WAAA7B;AAAA,EACA,OAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGE;AACL,GACAC,GACA;AACA,QAAM,EAAE,MAAAT,EAAA,IAAST,EAAA,GACX2C,IAASzC,EAAWO,CAAI,GAExBmC,IAA6B;AAAA,IACjC,SAAS,GAAGD,EAAO,cAAc,MAAMA,EAAO,cAAc;AAAA,IAC5D,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,WAAWD;AAAA,IACX,YAAY;AAAA,IACZ,YAAY,SAASrB,EAAU,KAAK,MAAMC,EAAQ,OAAO;AAAA,IACzD,GAAGR;AAAA,EAAA,GAGC+B,IAA8B;AAAA,IAClC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,KAAKC,EAAa;AAAA,IAClB,gBAAgBJ,MAAU,UAAU,aAAaA,MAAU,WAAW,WAAW;AAAA,EAAA,GAI7EK,IAAiC;AAAA,IACrC,GAAGF;AAAA,IACH,OAAO;AAAA,IACP,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,YAAY;AAAA,EAAA;AAGd,SACE,gBAAAtB;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAL;AAAA,MACA,aACEqB,IACIC,MAAkB,QAChB,cACAA,MAAkB,SAClB,eACA,SACF;AAAA,MAEN,WAAWhB,EAAG,uBAAuBe,KAAY,iCAAiC1B,CAAS;AAAA,MAC3F,OAAO+B;AAAA,MACN,GAAG3B;AAAA,MAEH,UAAAsB,IACC,gBAAAS;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAK;AAAA,UACL,OAAOD;AAAA,UACP,SAAS,MAAMN,IAAA;AAAA,UACf,cAAc,CAACN,MAAM;AACnB,YAAAA,EAAE,cAAc,MAAM,QAAQ;AAAA,UAChC;AAAA,UACA,cAAc,CAACA,MAAM;AACnB,YAAAA,EAAE,cAAc,MAAM,QAAQ;AAAA,UAChC;AAAA,UAEC,UAAA;AAAA,YAAApB;AAAA,YACD,gBAAAQ,EAACa,GAAA,EAAS,WAAWI,EAAA,CAAe;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA,IAGtC,gBAAAjB,EAAC,QAAA,EAAK,OAAOsB,GAAe,UAAA9B,EAAA,CAAS;AAAA,IAAA;AAAA,EAAA;AAI7C,CAAC;AAEDuB,EAAY,cAAc;AAYnB,MAAMW,IAAYzC,EAAiD,SACxE,EAAE,OAAAkC,IAAQ,QAAQ,UAAAQ,IAAW,IAAO,WAAArC,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGE,EAAA,GACnEC,GACA;AACA,QAAM,EAAE,MAAAT,GAAM,SAAAC,EAAA,IAAYV,EAAA,GACpB2C,IAASzC,EAAWO,CAAI,GAExB0C,IAA2B;AAAA,IAC/B,SAAS,GAAGR,EAAO,QAAQ,MAAMA,EAAO,QAAQ;AAAA,IAChD,OAAO;AAAA,IACP,WAAWD;AAAA,IACX,eAAe;AAAA,IACf,QAAQhC,MAAY,aAAa,yCAAyC;AAAA,IAC1E,UAAUwC,IAAW,MAAM;AAAA,IAC3B,UAAUA,IAAW,WAAW;AAAA,IAChC,cAAcA,IAAW,aAAa;AAAA,IACtC,YAAYA,IAAW,WAAW;AAAA,IAClC,GAAGpC;AAAA,EAAA;AAGL,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAL;AAAA,MACA,WAAWM,EAAG,qBAAqB0B,KAAY,+BAA+BrC,CAAS;AAAA,MACvF,OAAOsC;AAAA,MACP,OAAOD,KAAY,OAAOnC,KAAa,WAAWA,IAAW;AAAA,MAC5D,GAAGE;AAAA,MAEH,UAAAF;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDkC,EAAU,cAAc;AAQjB,MAAMG,IAAY5C,EAAoD,SAC3E,EAAE,WAAAK,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGE,EAAA,GACjCC,GACA;AACA,QAAMmC,IAA2B;AAAA,IAC/B,iBAAiB;AAAA,IACjB,YAAY;AAAA,IACZ,GAAGvC;AAAA,EAAA;AAGL,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAL;AAAA,MACA,WAAWM,EAAG,qBAAqBX,CAAS;AAAA,MAC5C,OAAOwC;AAAA,MACN,GAAGpC;AAAA,MAEH,UAAAF;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDqC,EAAU,cAAc;AAUjB,MAAME,IAAe9C,EAAuD,SACjF,EAAE,WAAA+C,IAAY,UAAU,WAAA1C,GAAW,OAAAC,GAAO,UAAAC,GAAU,GAAGE,EAAA,GACvDC,GACA;AACA,QAAMsC,IAA8B;AAAA,IAClC,aAAaD;AAAA,IACb,SAAS,GAAGjD,EAAQ,CAAC,CAAC,MAAMA,EAAQ,CAAC,CAAC;AAAA,IACtC,UAAUH,EAAU,OAAO;AAAA,IAC3B,OAAO;AAAA,IACP,WAAW;AAAA,IACX,GAAGW;AAAA,EAAA;AAGL,SACE,gBAAAS;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,KAAAL;AAAA,MACA,WAAWM,EAAG,wBAAwBX,CAAS;AAAA,MAC/C,OAAO2C;AAAA,MACN,GAAGvC;AAAA,MAEH,UAAAF;AAAA,IAAA;AAAA,EAAA;AAGP,CAAC;AAEDuC,EAAa,cAAc;AAkBpB,MAAMG,IAAajD,EAAiD,SACzE,EAAE,SAAAkD,GAAS,MAAAC,GAAM,OAAAC,GAAO,aAAAC,GAAa,QAAAC,GAAQ,WAAAjD,EAAA,GAC7CK,GACA;AACA,SACE,gBAAAK,EAAC,QAAG,KAAAL,GAAU,WAAWM,EAAG,sBAAsBX,CAAS,GACzD,UAAA,gBAAAU,EAAC,MAAA,EAAG,SAAAmC,GAAkB,OAAO,EAAE,SAAS,EAAA,GACtC,UAAA,gBAAAnC,EAACwC,GAAA,EAAW,MAAAJ,GAAY,OAAAC,GAAc,aAAAC,GAA0B,QAAAC,EAAA,CAAgB,EAAA,CAClF,EAAA,CACF;AAEJ,CAAC;AAEDL,EAAW,cAAc;AAazB,MAAMO,IAAiB,CAAC,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK;AAEzD,SAASC,EAAc,EAAE,MAAAC,IAAO,GAAG,SAAAC,GAAS,WAAAtD,KAAiC;AAClF,SACE,gBAAAU,EAAA6C,GAAA,EACG,gBAAM,KAAK,EAAE,QAAQF,EAAA,CAAM,EAAE,IAAI,CAACG,GAAGC,MACpC,gBAAA/C,EAACQ,GAAA,EAAwB,WAAWP,EAAG,6BAA6BX,CAAS,GAAG,eAAY,QACzF,UAAA,MAAM,KAAK,EAAE,QAAQsD,GAAS,EAAE,IAAI,CAACE,GAAGE,MACvC,gBAAAhD,EAAC0B,GAAA,EACC,UAAA,gBAAA1B,EAACiD,GAAA,EAAS,SAAQ,QAAO,OAAOR,EAAeO,IAAWP,EAAe,MAAM,EAAA,CAAG,EAAA,GADpEO,CAEhB,CACD,EAAA,GALYD,CAMf,CACD,EAAA,CACH;AAEJ;AAEAL,EAAc,cAAc;"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),u=require("react"),H=require("../../../utils/styles.cjs"),k=require("../../../design-system/tokens/spacing.cjs"),w=require("../../../design-system/primitives/sizing.cjs"),R=require("../../../design-system/tokens/typography.cjs"),j=require("../../../design-system/tokens/motion.cjs"),N={sm:{fontSize:R.fontSizes.sm,iconSize:w.iconSizes.xs,padding:w.componentPaddingY.xs,indent:k.spacing[4]},md:{fontSize:R.fontSizes.base,iconSize:w.iconSizes.sm,padding:w.componentPaddingY.sm,indent:k.spacing[5]},lg:{fontSize:R.fontSizes.md,iconSize:w.iconSizes.md,padding:w.componentPaddingY.md,indent:k.spacing[6]}};function U({expanded:e}){return a.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",style:{transform:e?"rotate(90deg)":"rotate(0)",transition:`transform ${j.durations.fast}ms ${j.easings.easeOut}`},children:a.jsx("path",{d:"M6 4l4 4-4 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function A({node:e,level:f,config:i,isSelected:y,isExpanded:l,showLines:S,onToggle:p,onSelect:g,renderNode:x,selectedIds:m,expandedIds:z,multiSelect:C}){const o=e.children&&e.children.length>0,I=u.useCallback(n=>{e.disabled||g(e.id,n.ctrlKey||n.metaKey)},[e.id,e.disabled,g]),D=u.useCallback(n=>{n.stopPropagation(),o&&p(e.id)},[e.id,o,p]),K=u.useCallback(n=>{if(!e.disabled)switch(n.key){case"Enter":case" ":n.preventDefault(),g(e.id,n.ctrlKey||n.metaKey);break;case"ArrowRight":n.preventDefault(),o&&!l&&p(e.id);break;case"ArrowLeft":n.preventDefault(),o&&l&&p(e.id);break}},[e.id,e.disabled,o,l,p,g]),q={display:"flex",alignItems:"center",gap:k.spacing[1.5],padding:`${i.padding}px ${k.spacing[2]}px`,paddingLeft:k.spacing[2]+f*i.indent,fontSize:i.fontSize,color:e.disabled?"var(--brycks-foreground-disabled)":"var(--brycks-foreground-default)",backgroundColor:y?"var(--brycks-primary-50)":"transparent",borderRadius:"var(--brycks-radius-md)",cursor:e.disabled?"not-allowed":"pointer",userSelect:"none",transition:`background-color ${j.durations.fast}ms ${j.easings.easeOut}`,position:"relative"},T={display:"flex",alignItems:"center",justifyContent:"center",width:i.iconSize,height:i.iconSize,color:"var(--brycks-foreground-muted)",cursor:"pointer",flexShrink:0},$={display:"flex",alignItems:"center",justifyContent:"center",width:i.iconSize,height:i.iconSize,color:y?"var(--brycks-primary-default)":"var(--brycks-foreground-muted)",flexShrink:0},M=S&&f>0?{position:"absolute",left:k.spacing[2]+(f-1)*i.indent+i.iconSize/2,top:0,bottom:0,width:1,backgroundColor:"var(--brycks-border-default)"}:{};return a.jsxs("li",{role:"treeitem","aria-selected":y,"aria-expanded":o?l:void 0,children:[a.jsxs("div",{tabIndex:e.disabled?-1:0,style:q,onClick:I,onKeyDown:K,onMouseEnter:n=>{!e.disabled&&!y&&(n.currentTarget.style.backgroundColor="var(--brycks-background-muted)")},onMouseLeave:n=>{y||(n.currentTarget.style.backgroundColor="transparent")},children:[S&&f>0&&a.jsx("span",{style:M,"aria-hidden":"true"}),a.jsx("span",{style:T,onClick:D,children:o&&a.jsx(U,{expanded:l})}),e.icon&&a.jsx("span",{style:$,children:e.icon}),x?x(e,y,l):a.jsx("span",{style:{flex:1},children:e.label})]}),o&&l&&a.jsx("ul",{role:"group",style:{listStyle:"none",margin:0,padding:0},children:e.children.map(n=>a.jsx(A,{node:n,level:f+1,config:i,isSelected:m.includes(n.id),isExpanded:z.includes(n.id),showLines:S,onToggle:p,onSelect:g,renderNode:x,selectedIds:m,expandedIds:z,multiSelect:C},n.id))})]})}const V=u.forwardRef(function({data:f,selectedIds:i,defaultSelectedIds:y=[],expandedIds:l,defaultExpandedIds:S=[],onSelectionChange:p,onExpansionChange:g,onNodeClick:x,multiSelect:m=!1,size:z="md",showLines:C=!1,renderNode:o,"aria-label":I="Tree",className:D,testId:K},q){const[T,$]=u.useState(y),[M,n]=u.useState(S),d=i!==void 0?i:T,h=l!==void 0?l:M,L=N[z],s=u.useMemo(()=>{const t=(c,r=[])=>(c.forEach(b=>{r.push(b),b.children&&h.includes(b.id)&&t(b.children,r)}),r);return t(f)},[f,h]),O=u.useCallback(t=>{const c=h.includes(t)?h.filter(r=>r!==t):[...h,t];l===void 0&&n(c),g?.(c)},[h,l,g]),v=u.useCallback((t,c)=>{const r=s.find(P=>P.id===t);r&&x?.(r);let b;m&&c?b=d.includes(t)?d.filter(P=>P!==t):[...d,t]:b=d.includes(t)&&d.length===1?[]:[t],i===void 0&&$(b),p?.(b)},[s,m,d,i,p,x]),Y=u.useCallback(t=>{const c=s.findIndex(r=>d.includes(r.id));switch(t.key){case"ArrowDown":{t.preventDefault();const r=c<s.length-1?c+1:0;v(s[r].id,!1);break}case"ArrowUp":{t.preventDefault();const r=c>0?c-1:s.length-1;v(s[r].id,!1);break}case"Home":t.preventDefault(),s.length>0&&v(s[0].id,!1);break;case"End":t.preventDefault(),s.length>0&&v(s[s.length-1].id,!1);break}},[s,d,v]),B={listStyle:"none",margin:0,padding:k.spacing[1],outline:"none"};return a.jsx("ul",{ref:q,role:"tree","aria-label":I,"aria-multiselectable":m,tabIndex:0,className:H.cx("brycks-treeview",`brycks-treeview--${z}`,D),style:B,"data-testid":K,onKeyDown:Y,children:f.map(t=>a.jsx(A,{node:t,level:0,config:L,isSelected:d.includes(t.id),isExpanded:h.includes(t.id),showLines:C,onToggle:O,onSelect:v,renderNode:o,selectedIds:d,expandedIds:h,multiSelect:m},t.id))})});V.displayName="TreeView";exports.TreeView=V;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react/jsx-runtime"),u=require("react"),H=require("../../../utils/styles.cjs"),m=require("../../../design-system/tokens/spacing.cjs"),w=require("../../../design-system/primitives/sizing.cjs"),R=require("../../../design-system/tokens/typography.cjs"),j=require("../../../design-system/tokens/motion.cjs"),N={sm:{fontSize:R.fontSizes.sm,iconSize:w.iconSizes.xs,padding:w.componentPaddingY.xs,indent:m.spacing[4]},md:{fontSize:R.fontSizes.base,iconSize:w.iconSizes.sm,padding:w.componentPaddingY.sm,indent:m.spacing[5]},lg:{fontSize:R.fontSizes.md,iconSize:w.iconSizes.md,padding:w.componentPaddingY.md,indent:m.spacing[6]}};function U({expanded:e}){return a.jsx("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none","aria-hidden":"true",style:{transform:e?"rotate(90deg)":"rotate(0)",transition:`transform ${j.durations.fast}ms ${j.easings.easeOut}`},children:a.jsx("path",{d:"M6 4l4 4-4 4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})}function A({node:e,level:f,config:i,isSelected:y,isExpanded:l,showLines:S,onToggle:p,onSelect:g,renderNode:x,selectedIds:k,expandedIds:z,multiSelect:C}){const o=e.children&&e.children.length>0,I=u.useCallback(n=>{e.disabled||g(e.id,n.ctrlKey||n.metaKey)},[e.id,e.disabled,g]),D=u.useCallback(n=>{n.stopPropagation(),o&&p(e.id)},[e.id,o,p]),K=u.useCallback(n=>{if(!e.disabled)switch(n.key){case"Enter":case" ":n.preventDefault(),g(e.id,n.ctrlKey||n.metaKey);break;case"ArrowRight":n.preventDefault(),o&&!l&&p(e.id);break;case"ArrowLeft":n.preventDefault(),o&&l&&p(e.id);break}},[e.id,e.disabled,o,l,p,g]),q={display:"flex",alignItems:"center",gap:m.spacing[1.5],padding:`${i.padding}px ${m.spacing[2]}px`,paddingLeft:m.spacing[2]+f*i.indent,fontSize:i.fontSize,color:e.disabled?"var(--brycks-foreground-disabled)":"var(--brycks-foreground-default)",backgroundColor:y?"var(--brycks-primary-muted)":"transparent",borderRadius:"var(--brycks-radius-md)",cursor:e.disabled?"not-allowed":"pointer",userSelect:"none",transition:`background-color ${j.durations.fast}ms ${j.easings.easeOut}`,position:"relative"},T={display:"flex",alignItems:"center",justifyContent:"center",width:i.iconSize,height:i.iconSize,color:"var(--brycks-foreground-muted)",cursor:"pointer",flexShrink:0},$={display:"flex",alignItems:"center",justifyContent:"center",width:i.iconSize,height:i.iconSize,color:y?"var(--brycks-primary-default)":"var(--brycks-foreground-muted)",flexShrink:0},M=S&&f>0?{position:"absolute",left:m.spacing[2]+(f-1)*i.indent+i.iconSize/2,top:0,bottom:0,width:1,backgroundColor:"var(--brycks-border-default)"}:{};return a.jsxs("li",{role:"treeitem","aria-selected":y,"aria-expanded":o?l:void 0,children:[a.jsxs("div",{tabIndex:e.disabled?-1:0,style:q,onClick:I,onKeyDown:K,onMouseEnter:n=>{!e.disabled&&!y&&(n.currentTarget.style.backgroundColor="var(--brycks-background-muted)")},onMouseLeave:n=>{y||(n.currentTarget.style.backgroundColor="transparent")},children:[S&&f>0&&a.jsx("span",{style:M,"aria-hidden":"true"}),a.jsx("span",{style:T,onClick:D,children:o&&a.jsx(U,{expanded:l})}),e.icon&&a.jsx("span",{style:$,children:e.icon}),x?x(e,y,l):a.jsx("span",{style:{flex:1},children:e.label})]}),o&&l&&a.jsx("ul",{role:"group",style:{listStyle:"none",margin:0,padding:0},children:e.children.map(n=>a.jsx(A,{node:n,level:f+1,config:i,isSelected:k.includes(n.id),isExpanded:z.includes(n.id),showLines:S,onToggle:p,onSelect:g,renderNode:x,selectedIds:k,expandedIds:z,multiSelect:C},n.id))})]})}const V=u.forwardRef(function({data:f,selectedIds:i,defaultSelectedIds:y=[],expandedIds:l,defaultExpandedIds:S=[],onSelectionChange:p,onExpansionChange:g,onNodeClick:x,multiSelect:k=!1,size:z="md",showLines:C=!1,renderNode:o,"aria-label":I="Tree",className:D,testId:K},q){const[T,$]=u.useState(y),[M,n]=u.useState(S),d=i!==void 0?i:T,h=l!==void 0?l:M,L=N[z],s=u.useMemo(()=>{const t=(c,r=[])=>(c.forEach(b=>{r.push(b),b.children&&h.includes(b.id)&&t(b.children,r)}),r);return t(f)},[f,h]),O=u.useCallback(t=>{const c=h.includes(t)?h.filter(r=>r!==t):[...h,t];l===void 0&&n(c),g?.(c)},[h,l,g]),v=u.useCallback((t,c)=>{const r=s.find(P=>P.id===t);r&&x?.(r);let b;k&&c?b=d.includes(t)?d.filter(P=>P!==t):[...d,t]:b=d.includes(t)&&d.length===1?[]:[t],i===void 0&&$(b),p?.(b)},[s,k,d,i,p,x]),Y=u.useCallback(t=>{const c=s.findIndex(r=>d.includes(r.id));switch(t.key){case"ArrowDown":{t.preventDefault();const r=c<s.length-1?c+1:0;v(s[r].id,!1);break}case"ArrowUp":{t.preventDefault();const r=c>0?c-1:s.length-1;v(s[r].id,!1);break}case"Home":t.preventDefault(),s.length>0&&v(s[0].id,!1);break;case"End":t.preventDefault(),s.length>0&&v(s[s.length-1].id,!1);break}},[s,d,v]),B={listStyle:"none",margin:0,padding:m.spacing[1],outline:"none"};return a.jsx("ul",{ref:q,role:"tree","aria-label":I,"aria-multiselectable":k,tabIndex:0,className:H.cx("brycks-treeview",`brycks-treeview--${z}`,D),style:B,"data-testid":K,onKeyDown:Y,children:f.map(t=>a.jsx(A,{node:t,level:0,config:L,isSelected:d.includes(t.id),isExpanded:h.includes(t.id),showLines:C,onToggle:O,onSelect:v,renderNode:o,selectedIds:d,expandedIds:h,multiSelect:k},t.id))})});V.displayName="TreeView";exports.TreeView=V;
2
2
  //# sourceMappingURL=TreeView.cjs.map