@fabio.caffarello/react-design-system 3.12.0 → 4.0.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 (159) hide show
  1. package/dist/granular/index.js +393 -389
  2. package/dist/granular/index.js.map +1 -1
  3. package/dist/granular/ui/components/Autocomplete/Autocomplete.js +103 -86
  4. package/dist/granular/ui/components/Autocomplete/Autocomplete.js.map +1 -1
  5. package/dist/granular/ui/components/Autocomplete/AutocompleteList.js +57 -47
  6. package/dist/granular/ui/components/Autocomplete/AutocompleteList.js.map +1 -1
  7. package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js +21 -20
  8. package/dist/granular/ui/components/Autocomplete/AutocompleteOption.js.map +1 -1
  9. package/dist/granular/ui/components/Breadcrumb/Breadcrumb.js.map +1 -1
  10. package/dist/granular/ui/components/ButtonGroup/ButtonGroup.js +68 -0
  11. package/dist/granular/ui/components/ButtonGroup/ButtonGroup.js.map +1 -0
  12. package/dist/granular/ui/components/ColorPicker/ColorPicker.js.map +1 -1
  13. package/dist/granular/ui/components/CommandPalette/CommandPalette.js +187 -149
  14. package/dist/granular/ui/components/CommandPalette/CommandPalette.js.map +1 -1
  15. package/dist/granular/ui/components/DataGrid/DataGrid.js +92 -92
  16. package/dist/granular/ui/components/DataGrid/DataGrid.js.map +1 -1
  17. package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js +154 -139
  18. package/dist/granular/ui/components/DatePicker/DatePickerCalendar.js.map +1 -1
  19. package/dist/granular/ui/components/Dialog/AlertDialog.js +73 -40
  20. package/dist/granular/ui/components/Dialog/AlertDialog.js.map +1 -1
  21. package/dist/granular/ui/components/Dialog/DialogContent.js +54 -48
  22. package/dist/granular/ui/components/Dialog/DialogContent.js.map +1 -1
  23. package/dist/granular/ui/components/Dialog/DialogDescription.js +31 -31
  24. package/dist/granular/ui/components/Dialog/DialogDescription.js.map +1 -1
  25. package/dist/granular/ui/components/Dialog/DialogTitle.js +30 -30
  26. package/dist/granular/ui/components/Dialog/DialogTitle.js.map +1 -1
  27. package/dist/granular/ui/components/Drawer/Drawer.js.map +1 -1
  28. package/dist/granular/ui/components/Dropdown/Dropdown.js.map +1 -1
  29. package/dist/granular/ui/components/EmptyState/EmptyState.js.map +1 -1
  30. package/dist/granular/ui/components/FileUpload/FileUpload.js.map +1 -1
  31. package/dist/granular/ui/components/Form/Form.js +38 -37
  32. package/dist/granular/ui/components/Form/Form.js.map +1 -1
  33. package/dist/granular/ui/components/Form/FormField.js +28 -26
  34. package/dist/granular/ui/components/Form/FormField.js.map +1 -1
  35. package/dist/granular/ui/components/Header/Header.js.map +1 -1
  36. package/dist/granular/ui/components/Header/components/HeaderActions.js.map +1 -1
  37. package/dist/granular/ui/components/Header/components/HeaderHamburger.js.map +1 -1
  38. package/dist/granular/ui/components/Header/components/HeaderLogo.js.map +1 -1
  39. package/dist/granular/ui/components/Header/components/HeaderMobileMenu.js.map +1 -1
  40. package/dist/granular/ui/components/Header/components/HeaderNavigation.js.map +1 -1
  41. package/dist/granular/ui/components/Header/contexts/HeaderContext.js.map +1 -1
  42. package/dist/granular/ui/components/Menu/Menu.js.map +1 -1
  43. package/dist/granular/ui/components/Modal/Modal.js +98 -86
  44. package/dist/granular/ui/components/Modal/Modal.js.map +1 -1
  45. package/dist/granular/ui/components/MultiSelect/MultiSelect.js +122 -106
  46. package/dist/granular/ui/components/MultiSelect/MultiSelect.js.map +1 -1
  47. package/dist/granular/ui/components/Navigation/Navigation.js.map +1 -1
  48. package/dist/granular/ui/components/PageHeader/PageHeader.js.map +1 -1
  49. package/dist/granular/ui/components/Pagination/Pagination.js.map +1 -1
  50. package/dist/granular/ui/components/Popover/Popover.js.map +1 -1
  51. package/dist/granular/ui/components/Rating/Rating.js.map +1 -1
  52. package/dist/granular/ui/components/SearchInput/SearchInput.js.map +1 -1
  53. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js +82 -64
  54. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarGroup.js.map +1 -1
  55. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js +30 -29
  56. package/dist/granular/ui/components/SideNavbar/components/Navbar/NavbarItem.js.map +1 -1
  57. package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js +37 -35
  58. package/dist/granular/ui/components/SideNavbar/components/SideNavbarResizeHandle.js.map +1 -1
  59. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js +57 -57
  60. package/dist/granular/ui/components/SideNavbar/providers/SideNavbarStateProvider.js.map +1 -1
  61. package/dist/granular/ui/components/Stepper/Stepper.js +102 -94
  62. package/dist/granular/ui/components/Stepper/Stepper.js.map +1 -1
  63. package/dist/granular/ui/components/Table/Table.js +41 -35
  64. package/dist/granular/ui/components/Table/Table.js.map +1 -1
  65. package/dist/granular/ui/components/Table/TableActions/TableActions.js.map +1 -1
  66. package/dist/granular/ui/components/Table/TableFilters/TableFilters.js +49 -46
  67. package/dist/granular/ui/components/Table/TableFilters/TableFilters.js.map +1 -1
  68. package/dist/granular/ui/components/Table/TablePagination/TablePagination.js.map +1 -1
  69. package/dist/granular/ui/components/Table/TableProvider.js +82 -80
  70. package/dist/granular/ui/components/Table/TableProvider.js.map +1 -1
  71. package/dist/granular/ui/components/Table/TableRow.js +57 -53
  72. package/dist/granular/ui/components/Table/TableRow.js.map +1 -1
  73. package/dist/granular/ui/components/Table/useColumnResizing.js +53 -53
  74. package/dist/granular/ui/components/Table/useColumnResizing.js.map +1 -1
  75. package/dist/granular/ui/components/TimePicker/TimePicker.js +149 -103
  76. package/dist/granular/ui/components/TimePicker/TimePicker.js.map +1 -1
  77. package/dist/granular/ui/components/Timeline/Timeline.js.map +1 -1
  78. package/dist/granular/ui/hooks/useFocusRestore.js +14 -15
  79. package/dist/granular/ui/hooks/useFocusRestore.js.map +1 -1
  80. package/dist/granular/ui/primitives/Badge/Badge.js.map +1 -1
  81. package/dist/granular/ui/primitives/Checkbox/Checkbox.js.map +1 -1
  82. package/dist/granular/ui/primitives/Chip/Chip.js +91 -71
  83. package/dist/granular/ui/primitives/Chip/Chip.js.map +1 -1
  84. package/dist/granular/ui/primitives/Dot/Dot.js +99 -0
  85. package/dist/granular/ui/primitives/Dot/Dot.js.map +1 -0
  86. package/dist/granular/ui/primitives/ErrorMessage/ErrorMessage.js.map +1 -1
  87. package/dist/granular/ui/primitives/Input/Input.js.map +1 -1
  88. package/dist/granular/ui/primitives/Label/Label.js.map +1 -1
  89. package/dist/granular/ui/primitives/NavLink/NavLink.js.map +1 -1
  90. package/dist/granular/ui/primitives/Radio/Radio.js.map +1 -1
  91. package/dist/granular/ui/primitives/Select/Select.js.map +1 -1
  92. package/dist/granular/ui/primitives/Separator/Separator.js.map +1 -1
  93. package/dist/granular/ui/primitives/Skeleton/Skeleton.js.map +1 -1
  94. package/dist/granular/ui/primitives/Slider/Slider.js.map +1 -1
  95. package/dist/granular/ui/primitives/Spinner/Spinner.js.map +1 -1
  96. package/dist/granular/ui/primitives/Switch/Switch.js.map +1 -1
  97. package/dist/granular/ui/primitives/Tooltip/Tooltip.js.map +1 -1
  98. package/dist/granular/ui/providers/DialogContext.js.map +1 -1
  99. package/dist/granular/ui/providers/DialogProvider.js +24 -20
  100. package/dist/granular/ui/providers/DialogProvider.js.map +1 -1
  101. package/dist/index.cjs +134 -134
  102. package/dist/index.cjs.map +1 -1
  103. package/dist/index.js +5945 -5542
  104. package/dist/index.js.map +1 -1
  105. package/dist/react-design-system.css +1 -1
  106. package/dist/server/index.cjs +7 -7
  107. package/dist/server/index.cjs.map +1 -1
  108. package/dist/server/index.js +404 -384
  109. package/dist/server/index.js.map +1 -1
  110. package/dist/ui/components/Autocomplete/AutocompleteList.d.ts +4 -0
  111. package/dist/ui/components/Autocomplete/AutocompleteOption.d.ts +8 -0
  112. package/dist/ui/components/Breadcrumb/Breadcrumb.d.ts +0 -1
  113. package/dist/ui/components/ButtonGroup/ButtonGroup.d.ts +2 -2
  114. package/dist/ui/components/ColorPicker/ColorPicker.d.ts +0 -1
  115. package/dist/ui/components/CommandPalette/CommandPalette.d.ts +0 -1
  116. package/dist/ui/components/DataGrid/DataGrid.d.ts +0 -1
  117. package/dist/ui/components/Dialog/DialogContent.d.ts +20 -1
  118. package/dist/ui/components/Drawer/Drawer.d.ts +0 -1
  119. package/dist/ui/components/Dropdown/Dropdown.d.ts +0 -1
  120. package/dist/ui/components/EmptyState/EmptyState.d.ts +0 -1
  121. package/dist/ui/components/FileUpload/FileUpload.d.ts +0 -1
  122. package/dist/ui/components/Form/FormField.d.ts +7 -0
  123. package/dist/ui/components/Header/Header.d.ts +1 -1
  124. package/dist/ui/components/Header/components/HeaderActions.d.ts +1 -1
  125. package/dist/ui/components/Header/components/HeaderHamburger.d.ts +1 -1
  126. package/dist/ui/components/Header/components/HeaderLogo.d.ts +1 -1
  127. package/dist/ui/components/Header/components/HeaderMobileMenu.d.ts +1 -1
  128. package/dist/ui/components/Header/components/HeaderNavigation.d.ts +1 -1
  129. package/dist/ui/components/Header/contexts/HeaderContext.d.ts +1 -1
  130. package/dist/ui/components/Menu/Menu.d.ts +0 -1
  131. package/dist/ui/components/Modal/Modal.d.ts +1 -2
  132. package/dist/ui/components/Navigation/Navigation.d.ts +1 -1
  133. package/dist/ui/components/PageHeader/PageHeader.d.ts +1 -1
  134. package/dist/ui/components/Pagination/Pagination.d.ts +0 -1
  135. package/dist/ui/components/Popover/Popover.d.ts +0 -1
  136. package/dist/ui/components/Rating/Rating.d.ts +0 -1
  137. package/dist/ui/components/SearchInput/SearchInput.d.ts +0 -1
  138. package/dist/ui/components/Stepper/Stepper.d.ts +0 -1
  139. package/dist/ui/components/Table/TableActions/TableActions.d.ts +0 -1
  140. package/dist/ui/components/Table/TableFilters/TableFilters.d.ts +0 -1
  141. package/dist/ui/components/Table/TablePagination/TablePagination.d.ts +0 -1
  142. package/dist/ui/components/TimePicker/TimePicker.d.ts +0 -1
  143. package/dist/ui/components/Timeline/Timeline.d.ts +0 -1
  144. package/dist/ui/components/index.d.ts +2 -0
  145. package/dist/ui/primitives/Checkbox/Checkbox.d.ts +0 -1
  146. package/dist/ui/primitives/Chip/Chip.d.ts +21 -0
  147. package/dist/ui/primitives/ErrorMessage/ErrorMessage.d.ts +0 -1
  148. package/dist/ui/primitives/Input/Input.d.ts +0 -1
  149. package/dist/ui/primitives/Label/Label.d.ts +0 -1
  150. package/dist/ui/primitives/NavLink/NavLink.d.ts +1 -1
  151. package/dist/ui/primitives/Radio/Radio.d.ts +0 -1
  152. package/dist/ui/primitives/Select/Select.d.ts +0 -1
  153. package/dist/ui/primitives/Skeleton/Skeleton.d.ts +0 -1
  154. package/dist/ui/primitives/Slider/Slider.d.ts +0 -1
  155. package/dist/ui/primitives/Switch/Switch.d.ts +0 -1
  156. package/dist/ui/primitives/Tooltip/Tooltip.d.ts +0 -1
  157. package/dist/ui/primitives/index.d.ts +2 -0
  158. package/dist/ui/providers/DialogContext.d.ts +8 -0
  159. package/package.json +7 -7
@@ -12,16 +12,16 @@ var at = (i, r, e) => r in i ? Zt(i, r, { enumerable: !0, configurable: !0, writ
12
12
  return i;
13
13
  }, Vt = (i, r) => $t(i, bt(r));
14
14
  import { jsx as gt } from "react/jsx-runtime";
15
- import { useMemo as f, useState as a, useCallback as o } from "react";
15
+ import { useMemo as f, useState as D, useCallback as o } from "react";
16
16
  import { TableContextProvider as xt } from "./TableContext.js";
17
- function Ct({
17
+ function Pt({
18
18
  columns: i,
19
19
  data: r,
20
20
  loading: e = !1,
21
21
  paginationMode: Q,
22
22
  page: y,
23
23
  pageSize: U,
24
- total: D,
24
+ total: V,
25
25
  onPageChange: l,
26
26
  onPageSizeChange: S,
27
27
  defaultPageSize: mt = 10,
@@ -31,38 +31,38 @@ function Ct({
31
31
  onSort: d,
32
32
  defaultSortColumn: Wt,
33
33
  defaultSortDirection: kt = "asc",
34
- filters: V,
34
+ filters: m,
35
35
  filterValues: g,
36
- onFilter: m,
36
+ onFilter: I,
37
37
  initialFilterValues: Lt = {},
38
- selectable: I = !1,
38
+ selectable: W = !1,
39
39
  selectedRows: x,
40
- onSelectionChange: W,
40
+ onSelectionChange: k,
41
41
  rowId: _,
42
42
  actions: R,
43
43
  emptyMessage: F = "No data available",
44
44
  emptyStateTitle: T,
45
- emptyStateMessage: h,
46
- emptyStateIllustration: w,
47
- emptyStateAction: C,
48
- onRowClick: P,
49
- resizable: z = !1,
45
+ emptyStateMessage: w,
46
+ emptyStateIllustration: h,
47
+ emptyStateAction: P,
48
+ onRowClick: z,
49
+ resizable: C = !1,
50
50
  columnWidths: tt,
51
- onColumnResize: k,
51
+ onColumnResize: L,
52
52
  virtualScrolling: st,
53
53
  virtualScrollingOptions: rt,
54
- children: jt
54
+ children: Ot
55
55
  }) {
56
- const L = f(() => Q || (D !== void 0 && l ? "server" : "client"), [Q, D, l]), X = y !== void 0, [At, Nt] = a(1), [Ot, St] = a(mt), q = X ? y : At, v = U != null ? U : Ot, B = f(() => L === "server" ? D != null ? D : 0 : r.length, [L, D, r.length]), nt = f(() => Math.ceil(B / v), [B, v]), j = K !== void 0, [_t, qt] = a(
56
+ const O = f(() => Q || (V !== void 0 && l ? "server" : "client"), [Q, V, l]), X = y !== void 0, [jt, At] = D(1), [Nt, St] = D(mt), q = X ? y : jt, p = U != null ? U : Nt, B = f(() => O === "server" ? V != null ? V : 0 : r.length, [O, V, r.length]), nt = f(() => Math.ceil(B / p), [B, p]), j = K !== void 0, [_t, qt] = D(
57
57
  Wt || ""
58
- ), [Bt, Et] = a(kt), A = j ? K : _t, E = j ? It || "asc" : Bt, Y = g !== void 0, [Gt, Ht] = a(Lt), G = Y ? g : Gt, Z = x !== void 0, [Jt, Mt] = a(
58
+ ), [Bt, Et] = D(kt), A = j ? K : _t, E = j ? It || "asc" : Bt, Y = g !== void 0, [Gt, Ht] = D(Lt), G = Y ? g : Gt, Z = x !== void 0, [Jt, Mt] = D(
59
59
  []
60
- ), c = Z ? x : Jt, H = f(() => !V || V.length === 0 ? r : r.filter((t) => V.every((s) => {
60
+ ), u = Z ? x : Jt, H = f(() => !m || m.length === 0 ? r : r.filter((t) => m.every((s) => {
61
61
  const n = G[s.key];
62
62
  if (!n || n === "") return !0;
63
63
  const M = t[s.key];
64
64
  return s.type === "text" ? String(M || "").toLowerCase().includes(String(n).toLowerCase()) : String(M) === String(n);
65
- })), [r, V, G]), $ = f(() => {
65
+ })), [r, m, G]), $ = f(() => {
66
66
  if (j && d || !A) return H;
67
67
  const t = [...H];
68
68
  return t.sort((s, n) => {
@@ -71,34 +71,36 @@ function Ct({
71
71
  );
72
72
  return E === "asc" ? vt : -vt;
73
73
  }), t;
74
- }, [H, A, E, d, j]), u = f(() => {
75
- if (L === "server")
74
+ }, [H, A, E, d, j]), c = f(() => {
75
+ if (O === "server")
76
76
  return $;
77
- const t = (q - 1) * v, s = t + v;
77
+ const t = (q - 1) * p, s = t + p;
78
78
  return $.slice(t, s);
79
- }, [$, L, q, v]), N = o(
79
+ }, [$, O, q, p]), v = o(
80
80
  (t, s) => {
81
81
  var n;
82
82
  return _ ? _(t) : ((n = t == null ? void 0 : t.id) == null ? void 0 : n.toString()) || s.toString();
83
83
  },
84
84
  [_]
85
- ), J = f(() => !I || u.length === 0 ? !1 : u.every((t, s) => {
86
- const n = N(t, s);
87
- return c.includes(n);
88
- }), [I, u, c, N]), et = f(() => {
89
- if (!I) return !1;
90
- const t = c.length;
91
- return t > 0 && t < u.length;
92
- }, [I, c.length, u.length]), O = o(
85
+ ), J = f(() => !W || c.length === 0 ? !1 : c.every((t, s) => {
86
+ const n = v(t, s);
87
+ return u.includes(n);
88
+ }), [W, c, u, v]), et = f(() => {
89
+ if (!W || c.length === 0) return !1;
90
+ const t = c.filter(
91
+ (s, n) => u.includes(v(s, n))
92
+ ).length;
93
+ return t > 0 && t < c.length;
94
+ }, [W, c, u, v]), N = o(
93
95
  (t) => {
94
- X ? l == null || l(t) : Nt(t);
96
+ X ? l == null || l(t) : At(t);
95
97
  },
96
98
  [X, l]
97
99
  ), it = o(
98
100
  (t) => {
99
- S ? S(t) : St(t), O(1);
101
+ S ? S(t) : St(t), N(1);
100
102
  },
101
- [S, O]
103
+ [S, N]
102
104
  ), ct = o(
103
105
  (t, s) => {
104
106
  j ? d == null || d(t, s) : (qt(t), Et(s));
@@ -106,43 +108,43 @@ function Ct({
106
108
  [j, d]
107
109
  ), ut = o(
108
110
  (t) => {
109
- Y ? m == null || m(t) : Ht(t), O(1);
111
+ Y ? I == null || I(t) : Ht(t), N(1);
110
112
  },
111
- [Y, m, O]
112
- ), p = o(
113
+ [Y, I, N]
114
+ ), a = o(
113
115
  (t) => {
114
- Z ? W == null || W(t) : Mt(t);
116
+ Z ? k == null || k(t) : Mt(t);
115
117
  },
116
- [Z, W]
118
+ [Z, k]
117
119
  ), ft = o(
118
120
  (t) => {
119
- const s = c.includes(t) ? c.filter((n) => n !== t) : [...c, t];
120
- p(s);
121
+ const s = u.includes(t) ? u.filter((n) => n !== t) : [...u, t];
122
+ a(s);
121
123
  },
122
- [c, p]
124
+ [u, a]
123
125
  ), ot = o(() => {
124
126
  if (J)
125
- p([]);
127
+ a([]);
126
128
  else {
127
- const t = u.map((s, n) => N(s, n));
128
- p(t);
129
+ const t = c.map((s, n) => v(s, n));
130
+ a(t);
129
131
  }
130
- }, [J, u, N, p]), [Qt, Ut] = a({}), b = tt !== void 0, lt = b ? tt : Qt, dt = o(
132
+ }, [J, c, v, a]), [Qt, Ut] = D({}), b = tt !== void 0, lt = b ? tt : Qt, dt = o(
131
133
  (t, s) => {
132
- b ? k == null || k(t, s) : Ut((n) => Vt(Dt({}, n), {
134
+ b ? L == null || L(t, s) : Ut((n) => Vt(Dt({}, n), {
133
135
  [t]: s
134
136
  }));
135
137
  },
136
- [b, k]
138
+ [b, L]
137
139
  ), Xt = f(
138
140
  () => ({
139
141
  columns: i,
140
142
  data: r,
141
- paginatedData: u,
143
+ paginatedData: c,
142
144
  loading: e,
143
145
  paginationState: {
144
146
  page: q,
145
- pageSize: v,
147
+ pageSize: p,
146
148
  total: B,
147
149
  totalPages: nt
148
150
  },
@@ -152,93 +154,93 @@ function Ct({
152
154
  },
153
155
  filterState: {
154
156
  values: G,
155
- config: V || []
157
+ config: m || []
156
158
  },
157
159
  selectionState: {
158
- selectedRows: c,
160
+ selectedRows: u,
159
161
  isAllSelected: J,
160
162
  isIndeterminate: et
161
163
  },
162
- paginationMode: L,
163
- selectable: I,
164
+ paginationMode: O,
165
+ selectable: W,
164
166
  rowId: _,
165
167
  actions: R,
166
- resizable: z,
168
+ resizable: C,
167
169
  columnWidths: lt,
168
170
  virtualScrolling: st,
169
171
  virtualScrollingOptions: rt,
170
172
  emptyMessage: F,
171
173
  emptyStateTitle: T,
172
- emptyStateMessage: h,
173
- emptyStateIllustration: w,
174
- emptyStateAction: C,
175
- setPage: O,
174
+ emptyStateMessage: w,
175
+ emptyStateIllustration: h,
176
+ emptyStateAction: P,
177
+ setPage: N,
176
178
  setPageSize: it,
177
179
  setSorting: ct,
178
180
  setFilters: ut,
179
- setSelection: p,
181
+ setSelection: a,
180
182
  toggleRowSelection: ft,
181
183
  toggleSelectAll: ot,
182
- getRowId: N,
184
+ getRowId: v,
183
185
  setColumnWidth: dt,
184
186
  onPageChange: l,
185
187
  onPageSizeChange: S,
186
188
  onSort: d,
187
- onFilter: m,
188
- onSelectionChange: W,
189
- onRowClick: P,
190
- onColumnResize: k
189
+ onFilter: I,
190
+ onSelectionChange: k,
191
+ onRowClick: z,
192
+ onColumnResize: L
191
193
  }),
192
194
  [
193
195
  i,
194
196
  r,
195
- u,
197
+ c,
196
198
  e,
197
199
  q,
198
- v,
200
+ p,
199
201
  B,
200
202
  nt,
201
203
  A,
202
204
  E,
203
205
  G,
204
- V,
205
- c,
206
+ m,
207
+ u,
206
208
  J,
207
209
  et,
208
- L,
209
- I,
210
+ O,
211
+ W,
210
212
  _,
211
213
  R,
212
214
  F,
213
215
  T,
214
- h,
215
216
  w,
216
- C,
217
- O,
217
+ h,
218
+ P,
219
+ N,
218
220
  it,
219
221
  ct,
220
222
  ut,
221
- p,
223
+ a,
222
224
  ft,
223
225
  ot,
224
- N,
226
+ v,
225
227
  dt,
226
228
  l,
227
229
  S,
228
230
  d,
229
- m,
230
- W,
231
- P,
231
+ I,
232
232
  k,
233
233
  z,
234
+ L,
235
+ C,
234
236
  lt,
235
237
  st,
236
238
  rt
237
239
  ]
238
240
  );
239
- return /* @__PURE__ */ gt(xt, { value: Xt, children: jt });
241
+ return /* @__PURE__ */ gt(xt, { value: Xt, children: Ot });
240
242
  }
241
243
  export {
242
- Ct as TableProvider
244
+ Pt as TableProvider
243
245
  };
244
246
  //# sourceMappingURL=TableProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableProvider.js","sources":["../../../../../src/ui/components/Table/TableProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useMemo, useCallback } from \"react\";\nimport type { ReactNode } from \"react\";\nimport {\n TableContextProvider,\n type TableContextValue,\n type PaginationMode,\n} from \"./TableContext\";\nimport type { TableColumn } from \"./TableTypes\";\nimport type { FilterConfig, FilterValue } from \"./TableFilters/TableFilters\";\nimport type { TableAction } from \"./TableActions/TableActions\";\n\nexport interface TableProviderProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n columns: TableColumn<T>[];\n data: T[];\n loading?: boolean;\n\n // Pagination\n paginationMode?: PaginationMode;\n page?: number; // controlled\n pageSize?: number; // controlled\n total?: number; // required for server mode\n onPageChange?: (page: number) => void; // required for server mode\n onPageSizeChange?: (size: number) => void;\n defaultPageSize?: number;\n pageSizeOptions?: number[];\n\n // Sorting\n sortColumn?: string; // controlled\n sortDirection?: \"asc\" | \"desc\"; // controlled\n onSort?: (column: string, direction: \"asc\" | \"desc\") => void;\n defaultSortColumn?: string;\n defaultSortDirection?: \"asc\" | \"desc\";\n\n // Filters\n filters?: FilterConfig[];\n filterValues?: Record<string, FilterValue>; // controlled\n onFilter?: (filters: Record<string, FilterValue>) => void;\n initialFilterValues?: Record<string, FilterValue>;\n\n // Selection\n selectable?: boolean;\n selectedRows?: string[]; // controlled\n onSelectionChange?: (selected: string[]) => void;\n rowId?: (row: T) => string;\n\n // Actions\n actions?: (row: T) => TableAction<T>[];\n\n // Empty state\n emptyMessage?: string;\n emptyStateTitle?: string;\n emptyStateMessage?: string;\n emptyStateIllustration?: ReactNode;\n emptyStateAction?: ReactNode;\n\n // Callbacks\n onRowClick?: (row: T) => void;\n\n // Column resizing\n resizable?: boolean;\n columnWidths?: Record<string, number>;\n onColumnResize?: (columnKey: string, width: number) => void;\n\n // Virtual scrolling\n virtualScrolling?: boolean;\n virtualScrollingOptions?: {\n itemHeight?: number;\n containerHeight?: number;\n overscan?: number;\n };\n\n children: ReactNode;\n}\n\n/**\n * TableProvider Component\n *\n * Manages table state (pagination, sorting, filters, selection) and provides it via Context.\n * Supports both client-side and server-side pagination with auto-detection.\n */\nexport function TableProvider<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({\n columns,\n data,\n loading = false,\n paginationMode: explicitMode,\n page: controlledPage,\n pageSize: controlledPageSize,\n total: externalTotal,\n onPageChange,\n onPageSizeChange,\n defaultPageSize = 10,\n pageSizeOptions: _pageSizeOptions,\n sortColumn: controlledSortColumn,\n sortDirection: controlledSortDirection,\n onSort,\n defaultSortColumn,\n defaultSortDirection = \"asc\",\n filters,\n filterValues: controlledFilterValues,\n onFilter,\n initialFilterValues = {},\n selectable = false,\n selectedRows: controlledSelectedRows,\n onSelectionChange,\n rowId,\n actions,\n emptyMessage = \"No data available\",\n emptyStateTitle,\n emptyStateMessage,\n emptyStateIllustration,\n emptyStateAction,\n onRowClick,\n resizable = false,\n columnWidths,\n onColumnResize,\n virtualScrolling,\n virtualScrollingOptions,\n children,\n}: TableProviderProps<T>) {\n // Detect pagination mode\n const paginationMode: PaginationMode = useMemo(() => {\n if (explicitMode) return explicitMode;\n\n // Auto-detect: if total and onPageChange are provided, it's server-side\n if (externalTotal !== undefined && onPageChange) {\n return \"server\";\n }\n\n return \"client\";\n }, [explicitMode, externalTotal, onPageChange]);\n\n // Pagination state\n const isPaginationControlled = controlledPage !== undefined;\n const [internalPage, setInternalPage] = useState(1);\n const [internalPageSize, setInternalPageSize] = useState(defaultPageSize);\n\n const page = isPaginationControlled ? controlledPage! : internalPage;\n const pageSize = controlledPageSize ?? internalPageSize;\n\n const total = useMemo(() => {\n if (paginationMode === \"server\") {\n return externalTotal ?? 0;\n }\n return data.length;\n }, [paginationMode, externalTotal, data.length]);\n\n const totalPages = useMemo(() => {\n return Math.ceil(total / pageSize);\n }, [total, pageSize]);\n\n // Sorting state\n const isSortingControlled = controlledSortColumn !== undefined;\n const [internalSortColumn, setInternalSortColumn] = useState(\n defaultSortColumn || \"\",\n );\n const [internalSortDirection, setInternalSortDirection] = useState<\n \"asc\" | \"desc\"\n >(defaultSortDirection);\n\n const sortColumn = isSortingControlled\n ? controlledSortColumn!\n : internalSortColumn;\n const sortDirection = isSortingControlled\n ? controlledSortDirection || \"asc\"\n : internalSortDirection;\n\n // Filter state\n const isFilterControlled = controlledFilterValues !== undefined;\n const [internalFilterValues, setInternalFilterValues] =\n useState<Record<string, FilterValue>>(initialFilterValues);\n\n const filterValues = isFilterControlled\n ? controlledFilterValues!\n : internalFilterValues;\n\n // Selection state\n const isSelectionControlled = controlledSelectedRows !== undefined;\n const [internalSelectedRows, setInternalSelectedRows] = useState<string[]>(\n [],\n );\n\n const selectedRows = isSelectionControlled\n ? controlledSelectedRows!\n : internalSelectedRows;\n\n // Apply client-side filtering\n const filteredData = useMemo(() => {\n if (!filters || filters.length === 0) return data;\n\n return data.filter((row) => {\n return filters.every((filter) => {\n const value = filterValues[filter.key];\n if (!value || value === \"\") return true;\n\n const rowValue = (row as Record<string, unknown>)[filter.key];\n if (filter.type === \"text\") {\n return String(rowValue || \"\")\n .toLowerCase()\n .includes(String(value).toLowerCase());\n }\n return String(rowValue) === String(value);\n });\n });\n }, [data, filters, filterValues]);\n\n // Apply client-side sorting (only if not controlled externally)\n const sortedData = useMemo(() => {\n // If sorting is controlled externally (onSort provided), don't sort here\n // The parent component should handle sorting on the server or before passing data\n // However, we still apply sorting if sortColumn is set and no onSort callback\n if (isSortingControlled && onSort) {\n // When controlled, assume data is already sorted by parent\n return filteredData;\n }\n\n // Only apply internal sorting if sortColumn is set\n if (!sortColumn) return filteredData;\n\n // Apply internal sorting\n const sorted = [...filteredData];\n sorted.sort((a, b) => {\n const aValue = (a as Record<string, unknown>)[sortColumn];\n const bValue = (b as Record<string, unknown>)[sortColumn];\n const comparison = String(aValue || \"\").localeCompare(\n String(bValue || \"\"),\n );\n return sortDirection === \"asc\" ? comparison : -comparison;\n });\n\n return sorted;\n }, [filteredData, sortColumn, sortDirection, onSort, isSortingControlled]);\n\n // Apply client-side pagination\n const paginatedData = useMemo(() => {\n if (paginationMode === \"server\") {\n return sortedData; // Server already paginated\n }\n\n const startIndex = (page - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n return sortedData.slice(startIndex, endIndex);\n }, [sortedData, paginationMode, page, pageSize]);\n\n // Selection helpers\n const getRowId = useCallback(\n (row: T, index: number): string => {\n if (rowId) {\n return rowId(row);\n }\n return (\n (row as { id?: { toString(): string } } | null)?.id?.toString() ||\n index.toString()\n );\n },\n [rowId],\n );\n\n const isAllSelected = useMemo(() => {\n if (!selectable || paginatedData.length === 0) return false;\n return paginatedData.every((row, index) => {\n const id = getRowId(row, index);\n return selectedRows.includes(id);\n });\n }, [selectable, paginatedData, selectedRows, getRowId]);\n\n const isIndeterminate = useMemo(() => {\n if (!selectable) return false;\n const selectedCount = selectedRows.length;\n return selectedCount > 0 && selectedCount < paginatedData.length;\n }, [selectable, selectedRows.length, paginatedData.length]);\n\n // Methods\n const setPage = useCallback(\n (newPage: number) => {\n if (isPaginationControlled) {\n onPageChange?.(newPage);\n } else {\n setInternalPage(newPage);\n }\n },\n [isPaginationControlled, onPageChange],\n );\n\n const setPageSize = useCallback(\n (newSize: number) => {\n if (onPageSizeChange) {\n onPageSizeChange(newSize);\n } else {\n setInternalPageSize(newSize);\n }\n setPage(1); // Reset to first page\n },\n [onPageSizeChange, setPage],\n );\n\n const setSorting = useCallback(\n (column: string, direction: \"asc\" | \"desc\") => {\n if (isSortingControlled) {\n onSort?.(column, direction);\n } else {\n setInternalSortColumn(column);\n setInternalSortDirection(direction);\n }\n },\n [isSortingControlled, onSort],\n );\n\n const setFilters = useCallback(\n (newFilters: Record<string, FilterValue>) => {\n if (isFilterControlled) {\n onFilter?.(newFilters);\n } else {\n setInternalFilterValues(newFilters);\n }\n // Reset to first page when filters change\n setPage(1);\n },\n [isFilterControlled, onFilter, setPage],\n );\n\n const setSelection = useCallback(\n (selected: string[]) => {\n if (isSelectionControlled) {\n onSelectionChange?.(selected);\n } else {\n setInternalSelectedRows(selected);\n }\n },\n [isSelectionControlled, onSelectionChange],\n );\n\n const toggleRowSelection = useCallback(\n (rowId: string) => {\n const newSelected = selectedRows.includes(rowId)\n ? selectedRows.filter((id) => id !== rowId)\n : [...selectedRows, rowId];\n setSelection(newSelected);\n },\n [selectedRows, setSelection],\n );\n\n const toggleSelectAll = useCallback(() => {\n if (isAllSelected) {\n setSelection([]);\n } else {\n const allIds = paginatedData.map((row, index) => getRowId(row, index));\n setSelection(allIds);\n }\n }, [isAllSelected, paginatedData, getRowId, setSelection]);\n\n // Column resizing state\n const [internalColumnWidths, setInternalColumnWidths] = useState<\n Record<string, number>\n >({});\n const isColumnWidthsControlled = columnWidths !== undefined;\n const finalColumnWidths = isColumnWidthsControlled\n ? columnWidths!\n : internalColumnWidths;\n\n const setColumnWidth = useCallback(\n (columnKey: string, width: number) => {\n if (isColumnWidthsControlled) {\n onColumnResize?.(columnKey, width);\n } else {\n setInternalColumnWidths((prev) => ({\n ...prev,\n [columnKey]: width,\n }));\n }\n },\n [isColumnWidthsControlled, onColumnResize],\n );\n\n const contextValue: TableContextValue<T> = useMemo(\n () => ({\n columns,\n data,\n paginatedData,\n loading,\n paginationState: {\n page,\n pageSize,\n total,\n totalPages,\n },\n sortState: {\n column: sortColumn,\n direction: sortDirection,\n },\n filterState: {\n values: filterValues,\n config: filters || [],\n },\n selectionState: {\n selectedRows,\n isAllSelected,\n isIndeterminate,\n },\n paginationMode,\n selectable,\n rowId,\n actions,\n resizable,\n columnWidths: finalColumnWidths,\n virtualScrolling,\n virtualScrollingOptions,\n emptyMessage,\n emptyStateTitle,\n emptyStateMessage,\n emptyStateIllustration,\n emptyStateAction,\n setPage,\n setPageSize,\n setSorting,\n setFilters,\n setSelection,\n toggleRowSelection,\n toggleSelectAll,\n getRowId,\n setColumnWidth,\n onPageChange,\n onPageSizeChange,\n onSort,\n onFilter,\n onSelectionChange,\n onRowClick,\n onColumnResize,\n }),\n [\n columns,\n data,\n paginatedData,\n loading,\n page,\n pageSize,\n total,\n totalPages,\n sortColumn,\n sortDirection,\n filterValues,\n filters,\n selectedRows,\n isAllSelected,\n isIndeterminate,\n paginationMode,\n selectable,\n rowId,\n actions,\n emptyMessage,\n emptyStateTitle,\n emptyStateMessage,\n emptyStateIllustration,\n emptyStateAction,\n setPage,\n setPageSize,\n setSorting,\n setFilters,\n setSelection,\n toggleRowSelection,\n toggleSelectAll,\n getRowId,\n setColumnWidth,\n onPageChange,\n onPageSizeChange,\n onSort,\n onFilter,\n onSelectionChange,\n onRowClick,\n onColumnResize,\n resizable,\n finalColumnWidths,\n virtualScrolling,\n virtualScrollingOptions,\n ],\n );\n\n return (\n <TableContextProvider value={contextValue}>{children}</TableContextProvider>\n );\n}\n"],"names":["TableProvider","columns","data","loading","explicitMode","controlledPage","controlledPageSize","externalTotal","onPageChange","onPageSizeChange","defaultPageSize","_pageSizeOptions","controlledSortColumn","controlledSortDirection","onSort","defaultSortColumn","defaultSortDirection","filters","controlledFilterValues","onFilter","initialFilterValues","selectable","controlledSelectedRows","onSelectionChange","rowId","actions","emptyMessage","emptyStateTitle","emptyStateMessage","emptyStateIllustration","emptyStateAction","onRowClick","resizable","columnWidths","onColumnResize","virtualScrolling","virtualScrollingOptions","children","paginationMode","useMemo","isPaginationControlled","internalPage","setInternalPage","useState","internalPageSize","setInternalPageSize","page","pageSize","total","totalPages","isSortingControlled","internalSortColumn","setInternalSortColumn","internalSortDirection","setInternalSortDirection","sortColumn","sortDirection","isFilterControlled","internalFilterValues","setInternalFilterValues","filterValues","isSelectionControlled","internalSelectedRows","setInternalSelectedRows","selectedRows","filteredData","row","filter","value","rowValue","sortedData","sorted","a","b","aValue","bValue","comparison","paginatedData","startIndex","endIndex","getRowId","useCallback","index","_a","isAllSelected","id","isIndeterminate","selectedCount","setPage","newPage","setPageSize","newSize","setSorting","column","direction","setFilters","newFilters","setSelection","selected","toggleRowSelection","newSelected","toggleSelectAll","allIds","internalColumnWidths","setInternalColumnWidths","isColumnWidthsControlled","finalColumnWidths","setColumnWidth","columnKey","width","prev","__spreadProps","__spreadValues","contextValue","jsx","TableContextProvider"],"mappings":"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"}
1
+ {"version":3,"file":"TableProvider.js","sources":["../../../../../src/ui/components/Table/TableProvider.tsx"],"sourcesContent":["\"use client\";\n\nimport { useState, useMemo, useCallback } from \"react\";\nimport type { ReactNode } from \"react\";\nimport {\n TableContextProvider,\n type TableContextValue,\n type PaginationMode,\n} from \"./TableContext\";\nimport type { TableColumn } from \"./TableTypes\";\nimport type { FilterConfig, FilterValue } from \"./TableFilters/TableFilters\";\nimport type { TableAction } from \"./TableActions/TableActions\";\n\nexport interface TableProviderProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> {\n columns: TableColumn<T>[];\n data: T[];\n loading?: boolean;\n\n // Pagination\n paginationMode?: PaginationMode;\n page?: number; // controlled\n pageSize?: number; // controlled\n total?: number; // required for server mode\n onPageChange?: (page: number) => void; // required for server mode\n onPageSizeChange?: (size: number) => void;\n defaultPageSize?: number;\n pageSizeOptions?: number[];\n\n // Sorting\n sortColumn?: string; // controlled\n sortDirection?: \"asc\" | \"desc\"; // controlled\n onSort?: (column: string, direction: \"asc\" | \"desc\") => void;\n defaultSortColumn?: string;\n defaultSortDirection?: \"asc\" | \"desc\";\n\n // Filters\n filters?: FilterConfig[];\n filterValues?: Record<string, FilterValue>; // controlled\n onFilter?: (filters: Record<string, FilterValue>) => void;\n initialFilterValues?: Record<string, FilterValue>;\n\n // Selection\n selectable?: boolean;\n selectedRows?: string[]; // controlled\n onSelectionChange?: (selected: string[]) => void;\n rowId?: (row: T) => string;\n\n // Actions\n actions?: (row: T) => TableAction<T>[];\n\n // Empty state\n emptyMessage?: string;\n emptyStateTitle?: string;\n emptyStateMessage?: string;\n emptyStateIllustration?: ReactNode;\n emptyStateAction?: ReactNode;\n\n // Callbacks\n onRowClick?: (row: T) => void;\n\n // Column resizing\n resizable?: boolean;\n columnWidths?: Record<string, number>;\n onColumnResize?: (columnKey: string, width: number) => void;\n\n // Virtual scrolling\n virtualScrolling?: boolean;\n virtualScrollingOptions?: {\n itemHeight?: number;\n containerHeight?: number;\n overscan?: number;\n };\n\n children: ReactNode;\n}\n\n/**\n * TableProvider Component\n *\n * Manages table state (pagination, sorting, filters, selection) and provides it via Context.\n * Supports both client-side and server-side pagination with auto-detection.\n */\nexport function TableProvider<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({\n columns,\n data,\n loading = false,\n paginationMode: explicitMode,\n page: controlledPage,\n pageSize: controlledPageSize,\n total: externalTotal,\n onPageChange,\n onPageSizeChange,\n defaultPageSize = 10,\n pageSizeOptions: _pageSizeOptions,\n sortColumn: controlledSortColumn,\n sortDirection: controlledSortDirection,\n onSort,\n defaultSortColumn,\n defaultSortDirection = \"asc\",\n filters,\n filterValues: controlledFilterValues,\n onFilter,\n initialFilterValues = {},\n selectable = false,\n selectedRows: controlledSelectedRows,\n onSelectionChange,\n rowId,\n actions,\n emptyMessage = \"No data available\",\n emptyStateTitle,\n emptyStateMessage,\n emptyStateIllustration,\n emptyStateAction,\n onRowClick,\n resizable = false,\n columnWidths,\n onColumnResize,\n virtualScrolling,\n virtualScrollingOptions,\n children,\n}: TableProviderProps<T>) {\n // Detect pagination mode\n const paginationMode: PaginationMode = useMemo(() => {\n if (explicitMode) return explicitMode;\n\n // Auto-detect: if total and onPageChange are provided, it's server-side\n if (externalTotal !== undefined && onPageChange) {\n return \"server\";\n }\n\n return \"client\";\n }, [explicitMode, externalTotal, onPageChange]);\n\n // Pagination state\n const isPaginationControlled = controlledPage !== undefined;\n const [internalPage, setInternalPage] = useState(1);\n const [internalPageSize, setInternalPageSize] = useState(defaultPageSize);\n\n const page = isPaginationControlled ? controlledPage! : internalPage;\n const pageSize = controlledPageSize ?? internalPageSize;\n\n const total = useMemo(() => {\n if (paginationMode === \"server\") {\n return externalTotal ?? 0;\n }\n return data.length;\n }, [paginationMode, externalTotal, data.length]);\n\n const totalPages = useMemo(() => {\n return Math.ceil(total / pageSize);\n }, [total, pageSize]);\n\n // Sorting state\n const isSortingControlled = controlledSortColumn !== undefined;\n const [internalSortColumn, setInternalSortColumn] = useState(\n defaultSortColumn || \"\",\n );\n const [internalSortDirection, setInternalSortDirection] = useState<\n \"asc\" | \"desc\"\n >(defaultSortDirection);\n\n const sortColumn = isSortingControlled\n ? controlledSortColumn!\n : internalSortColumn;\n const sortDirection = isSortingControlled\n ? controlledSortDirection || \"asc\"\n : internalSortDirection;\n\n // Filter state\n const isFilterControlled = controlledFilterValues !== undefined;\n const [internalFilterValues, setInternalFilterValues] =\n useState<Record<string, FilterValue>>(initialFilterValues);\n\n const filterValues = isFilterControlled\n ? controlledFilterValues!\n : internalFilterValues;\n\n // Selection state\n const isSelectionControlled = controlledSelectedRows !== undefined;\n const [internalSelectedRows, setInternalSelectedRows] = useState<string[]>(\n [],\n );\n\n const selectedRows = isSelectionControlled\n ? controlledSelectedRows!\n : internalSelectedRows;\n\n // Apply client-side filtering\n const filteredData = useMemo(() => {\n if (!filters || filters.length === 0) return data;\n\n return data.filter((row) => {\n return filters.every((filter) => {\n const value = filterValues[filter.key];\n if (!value || value === \"\") return true;\n\n const rowValue = (row as Record<string, unknown>)[filter.key];\n if (filter.type === \"text\") {\n return String(rowValue || \"\")\n .toLowerCase()\n .includes(String(value).toLowerCase());\n }\n return String(rowValue) === String(value);\n });\n });\n }, [data, filters, filterValues]);\n\n // Apply client-side sorting (only if not controlled externally)\n const sortedData = useMemo(() => {\n // If sorting is controlled externally (onSort provided), don't sort here\n // The parent component should handle sorting on the server or before passing data\n // However, we still apply sorting if sortColumn is set and no onSort callback\n if (isSortingControlled && onSort) {\n // When controlled, assume data is already sorted by parent\n return filteredData;\n }\n\n // Only apply internal sorting if sortColumn is set\n if (!sortColumn) return filteredData;\n\n // Apply internal sorting\n const sorted = [...filteredData];\n sorted.sort((a, b) => {\n const aValue = (a as Record<string, unknown>)[sortColumn];\n const bValue = (b as Record<string, unknown>)[sortColumn];\n const comparison = String(aValue || \"\").localeCompare(\n String(bValue || \"\"),\n );\n return sortDirection === \"asc\" ? comparison : -comparison;\n });\n\n return sorted;\n }, [filteredData, sortColumn, sortDirection, onSort, isSortingControlled]);\n\n // Apply client-side pagination\n const paginatedData = useMemo(() => {\n if (paginationMode === \"server\") {\n return sortedData; // Server already paginated\n }\n\n const startIndex = (page - 1) * pageSize;\n const endIndex = startIndex + pageSize;\n return sortedData.slice(startIndex, endIndex);\n }, [sortedData, paginationMode, page, pageSize]);\n\n // Selection helpers\n const getRowId = useCallback(\n (row: T, index: number): string => {\n if (rowId) {\n return rowId(row);\n }\n return (\n (row as { id?: { toString(): string } } | null)?.id?.toString() ||\n index.toString()\n );\n },\n [rowId],\n );\n\n const isAllSelected = useMemo(() => {\n if (!selectable || paginatedData.length === 0) return false;\n return paginatedData.every((row, index) => {\n const id = getRowId(row, index);\n return selectedRows.includes(id);\n });\n }, [selectable, paginatedData, selectedRows, getRowId]);\n\n const isIndeterminate = useMemo(() => {\n if (!selectable || paginatedData.length === 0) return false;\n // Count selections on the CURRENT page only, mirroring isAllSelected.\n // Comparing the global cross-page selectedRows.length against the\n // current page length made the header checkbox render fully unchecked\n // when cross-page selections outnumbered a partially-selected page.\n const selectedOnPage = paginatedData.filter((row, index) =>\n selectedRows.includes(getRowId(row, index)),\n ).length;\n return selectedOnPage > 0 && selectedOnPage < paginatedData.length;\n }, [selectable, paginatedData, selectedRows, getRowId]);\n\n // Methods\n const setPage = useCallback(\n (newPage: number) => {\n if (isPaginationControlled) {\n onPageChange?.(newPage);\n } else {\n setInternalPage(newPage);\n }\n },\n [isPaginationControlled, onPageChange],\n );\n\n const setPageSize = useCallback(\n (newSize: number) => {\n if (onPageSizeChange) {\n onPageSizeChange(newSize);\n } else {\n setInternalPageSize(newSize);\n }\n setPage(1); // Reset to first page\n },\n [onPageSizeChange, setPage],\n );\n\n const setSorting = useCallback(\n (column: string, direction: \"asc\" | \"desc\") => {\n if (isSortingControlled) {\n onSort?.(column, direction);\n } else {\n setInternalSortColumn(column);\n setInternalSortDirection(direction);\n }\n },\n [isSortingControlled, onSort],\n );\n\n const setFilters = useCallback(\n (newFilters: Record<string, FilterValue>) => {\n if (isFilterControlled) {\n onFilter?.(newFilters);\n } else {\n setInternalFilterValues(newFilters);\n }\n // Reset to first page when filters change\n setPage(1);\n },\n [isFilterControlled, onFilter, setPage],\n );\n\n const setSelection = useCallback(\n (selected: string[]) => {\n if (isSelectionControlled) {\n onSelectionChange?.(selected);\n } else {\n setInternalSelectedRows(selected);\n }\n },\n [isSelectionControlled, onSelectionChange],\n );\n\n const toggleRowSelection = useCallback(\n (rowId: string) => {\n const newSelected = selectedRows.includes(rowId)\n ? selectedRows.filter((id) => id !== rowId)\n : [...selectedRows, rowId];\n setSelection(newSelected);\n },\n [selectedRows, setSelection],\n );\n\n const toggleSelectAll = useCallback(() => {\n if (isAllSelected) {\n setSelection([]);\n } else {\n const allIds = paginatedData.map((row, index) => getRowId(row, index));\n setSelection(allIds);\n }\n }, [isAllSelected, paginatedData, getRowId, setSelection]);\n\n // Column resizing state\n const [internalColumnWidths, setInternalColumnWidths] = useState<\n Record<string, number>\n >({});\n const isColumnWidthsControlled = columnWidths !== undefined;\n const finalColumnWidths = isColumnWidthsControlled\n ? columnWidths!\n : internalColumnWidths;\n\n const setColumnWidth = useCallback(\n (columnKey: string, width: number) => {\n if (isColumnWidthsControlled) {\n onColumnResize?.(columnKey, width);\n } else {\n setInternalColumnWidths((prev) => ({\n ...prev,\n [columnKey]: width,\n }));\n }\n },\n [isColumnWidthsControlled, onColumnResize],\n );\n\n const contextValue: TableContextValue<T> = useMemo(\n () => ({\n columns,\n data,\n paginatedData,\n loading,\n paginationState: {\n page,\n pageSize,\n total,\n totalPages,\n },\n sortState: {\n column: sortColumn,\n direction: sortDirection,\n },\n filterState: {\n values: filterValues,\n config: filters || [],\n },\n selectionState: {\n selectedRows,\n isAllSelected,\n isIndeterminate,\n },\n paginationMode,\n selectable,\n rowId,\n actions,\n resizable,\n columnWidths: finalColumnWidths,\n virtualScrolling,\n virtualScrollingOptions,\n emptyMessage,\n emptyStateTitle,\n emptyStateMessage,\n emptyStateIllustration,\n emptyStateAction,\n setPage,\n setPageSize,\n setSorting,\n setFilters,\n setSelection,\n toggleRowSelection,\n toggleSelectAll,\n getRowId,\n setColumnWidth,\n onPageChange,\n onPageSizeChange,\n onSort,\n onFilter,\n onSelectionChange,\n onRowClick,\n onColumnResize,\n }),\n [\n columns,\n data,\n paginatedData,\n loading,\n page,\n pageSize,\n total,\n totalPages,\n sortColumn,\n sortDirection,\n filterValues,\n filters,\n selectedRows,\n isAllSelected,\n isIndeterminate,\n paginationMode,\n selectable,\n rowId,\n actions,\n emptyMessage,\n emptyStateTitle,\n emptyStateMessage,\n emptyStateIllustration,\n emptyStateAction,\n setPage,\n setPageSize,\n setSorting,\n setFilters,\n setSelection,\n toggleRowSelection,\n toggleSelectAll,\n getRowId,\n setColumnWidth,\n onPageChange,\n onPageSizeChange,\n onSort,\n onFilter,\n onSelectionChange,\n onRowClick,\n onColumnResize,\n resizable,\n finalColumnWidths,\n virtualScrolling,\n virtualScrollingOptions,\n ],\n );\n\n return (\n <TableContextProvider value={contextValue}>{children}</TableContextProvider>\n );\n}\n"],"names":["TableProvider","columns","data","loading","explicitMode","controlledPage","controlledPageSize","externalTotal","onPageChange","onPageSizeChange","defaultPageSize","_pageSizeOptions","controlledSortColumn","controlledSortDirection","onSort","defaultSortColumn","defaultSortDirection","filters","controlledFilterValues","onFilter","initialFilterValues","selectable","controlledSelectedRows","onSelectionChange","rowId","actions","emptyMessage","emptyStateTitle","emptyStateMessage","emptyStateIllustration","emptyStateAction","onRowClick","resizable","columnWidths","onColumnResize","virtualScrolling","virtualScrollingOptions","children","paginationMode","useMemo","isPaginationControlled","internalPage","setInternalPage","useState","internalPageSize","setInternalPageSize","page","pageSize","total","totalPages","isSortingControlled","internalSortColumn","setInternalSortColumn","internalSortDirection","setInternalSortDirection","sortColumn","sortDirection","isFilterControlled","internalFilterValues","setInternalFilterValues","filterValues","isSelectionControlled","internalSelectedRows","setInternalSelectedRows","selectedRows","filteredData","row","filter","value","rowValue","sortedData","sorted","a","b","aValue","bValue","comparison","paginatedData","startIndex","endIndex","getRowId","useCallback","index","_a","isAllSelected","id","isIndeterminate","selectedOnPage","setPage","newPage","setPageSize","newSize","setSorting","column","direction","setFilters","newFilters","setSelection","selected","toggleRowSelection","newSelected","toggleSelectAll","allIds","internalColumnWidths","setInternalColumnWidths","isColumnWidthsControlled","finalColumnWidths","setColumnWidth","columnKey","width","prev","__spreadProps","__spreadValues","contextValue","jsx","TableContextProvider"],"mappings":"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"}
@@ -1,39 +1,39 @@
1
1
  "use client";
2
- var T = Object.defineProperty, v = Object.defineProperties;
3
- var j = Object.getOwnPropertyDescriptors;
4
- var i = Object.getOwnPropertySymbols;
5
- var g = Object.prototype.hasOwnProperty, b = Object.prototype.propertyIsEnumerable;
6
- var f = (e, t, o) => t in e ? T(e, t, { enumerable: !0, configurable: !0, writable: !0, value: o }) : e[t] = o, h = (e, t) => {
2
+ var D = Object.defineProperty, j = Object.defineProperties;
3
+ var I = Object.getOwnPropertyDescriptors;
4
+ var c = Object.getOwnPropertySymbols;
5
+ var g = Object.prototype.hasOwnProperty, h = Object.prototype.propertyIsEnumerable;
6
+ var b = (e, t, o) => t in e ? D(e, t, { enumerable: !0, configurable: !0, writable: !0, value: o }) : e[t] = o, u = (e, t) => {
7
7
  for (var o in t || (t = {}))
8
- g.call(t, o) && f(e, o, t[o]);
9
- if (i)
10
- for (var o of i(t))
11
- b.call(t, o) && f(e, o, t[o]);
8
+ g.call(t, o) && b(e, o, t[o]);
9
+ if (c)
10
+ for (var o of c(t))
11
+ h.call(t, o) && b(e, o, t[o]);
12
12
  return e;
13
- }, u = (e, t) => v(e, j(t));
14
- var x = (e, t) => {
13
+ }, x = (e, t) => j(e, I(t));
14
+ var y = (e, t) => {
15
15
  var o = {};
16
- for (var l in e)
17
- g.call(e, l) && t.indexOf(l) < 0 && (o[l] = e[l]);
18
- if (e != null && i)
19
- for (var l of i(e))
20
- t.indexOf(l) < 0 && b.call(e, l) && (o[l] = e[l]);
16
+ for (var s in e)
17
+ g.call(e, s) && t.indexOf(s) < 0 && (o[s] = e[s]);
18
+ if (e != null && c)
19
+ for (var s of c(e))
20
+ t.indexOf(s) < 0 && h.call(e, s) && (o[s] = e[s]);
21
21
  return o;
22
22
  };
23
- import { jsxs as A, jsx as s } from "react/jsx-runtime";
24
- import { useTableContext as q } from "./TableContext.js";
25
- import { getSpacingClass as a } from "../../tokens/spacing.js";
26
- import z from "./TableCell.js";
27
- import B from "./TableActions.js";
28
- import D from "../../primitives/Checkbox/Checkbox.js";
29
- function M(E) {
30
- var m = E, {
23
+ import { jsxs as K, jsx as l } from "react/jsx-runtime";
24
+ import { useTableContext as A } from "./TableContext.js";
25
+ import { getSpacingClass as n } from "../../tokens/spacing.js";
26
+ import E from "./TableCell.js";
27
+ import q from "./TableActions.js";
28
+ import z from "../../primitives/Checkbox/Checkbox.js";
29
+ function P(B) {
30
+ var f = B, {
31
31
  row: e,
32
32
  rowIndex: t,
33
33
  className: o = "",
34
- onClick: l,
35
- style: C
36
- } = m, $ = x(m, [
34
+ onClick: s,
35
+ style: k
36
+ } = f, $ = y(f, [
37
37
  "row",
38
38
  "rowIndex",
39
39
  "className",
@@ -41,48 +41,52 @@ function M(E) {
41
41
  "style"
42
42
  ]);
43
43
  const {
44
- columns: S,
45
- selectable: d,
46
- selectionState: k,
47
- toggleRowSelection: R,
48
- getRowId: w,
49
- actions: y,
50
- onRowClick: p
51
- } = q(), r = w(e, t), n = k.selectedRows.includes(r), N = (c) => {
52
- l && l(c), p && p(e);
44
+ columns: v,
45
+ selectable: p,
46
+ selectionState: C,
47
+ toggleRowSelection: w,
48
+ getRowId: R,
49
+ actions: S,
50
+ onRowClick: a
51
+ } = A(), r = R(e, t), d = C.selectedRows.includes(r), m = !!a, N = (i) => {
52
+ s && s(i), a && a(e);
53
+ }, T = (i) => {
54
+ a && (i.key === "Enter" || i.key === " ") && (i.key === " " && i.preventDefault(), a(e));
53
55
  };
54
- return /* @__PURE__ */ A(
56
+ return /* @__PURE__ */ K(
55
57
  "tr",
56
- u(h({
58
+ x(u({
57
59
  role: "row",
58
- "aria-selected": d ? n : void 0,
60
+ "aria-selected": p ? d : void 0,
59
61
  "aria-rowindex": t + 1,
60
- className: `hover:bg-surface-hover ${n ? "bg-surface-selected" : ""} ${o}`,
62
+ tabIndex: m ? 0 : void 0,
63
+ onKeyDown: m ? T : void 0,
64
+ className: `hover:bg-surface-hover ${m ? "cursor-pointer" : ""} ${d ? "bg-surface-selected" : ""} ${o}`,
61
65
  onClick: N,
62
- style: C
66
+ style: k
63
67
  }, $), {
64
68
  children: [
65
- d && /* @__PURE__ */ s(
69
+ p && /* @__PURE__ */ l(
66
70
  "td",
67
71
  {
68
- className: `${a("lg", "px")} ${a("base", "py")}`,
69
- children: /* @__PURE__ */ s(
70
- D,
72
+ className: `${n("lg", "px")} ${n("base", "py")}`,
73
+ children: /* @__PURE__ */ l(
74
+ z,
71
75
  {
72
- checked: n,
73
- onChange: () => R(r),
76
+ checked: d,
77
+ onChange: () => w(r),
74
78
  "aria-label": `Select row ${r}`,
75
- className: a("none", "my")
79
+ className: n("none", "my")
76
80
  }
77
81
  )
78
82
  }
79
83
  ),
80
- S.map((c) => /* @__PURE__ */ s(z, { column: c, row: e }, String(c.key))),
81
- y && /* @__PURE__ */ s(
84
+ v.map((i) => /* @__PURE__ */ l(E, { column: i, row: e }, String(i.key))),
85
+ S && /* @__PURE__ */ l(
82
86
  "td",
83
87
  {
84
- className: `${a("lg", "px")} ${a("base", "py")} text-right`,
85
- children: /* @__PURE__ */ s(B, { row: e })
88
+ className: `${n("lg", "px")} ${n("base", "py")} text-right`,
89
+ children: /* @__PURE__ */ l(q, { row: e })
86
90
  }
87
91
  )
88
92
  ]
@@ -90,6 +94,6 @@ function M(E) {
90
94
  );
91
95
  }
92
96
  export {
93
- M as default
97
+ P as default
94
98
  };
95
99
  //# sourceMappingURL=TableRow.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TableRow.js","sources":["../../../../../src/ui/components/Table/TableRow.tsx"],"sourcesContent":["\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { useTableContext } from \"./TableContext\";\nimport { Checkbox } from \"../../primitives\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport TableCell from \"./TableCell\";\nimport TableActions from \"./TableActions\";\n\nexport interface TableRowProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> extends Omit<HTMLAttributes<HTMLTableRowElement>, \"style\"> {\n row: T;\n rowIndex: number;\n style?: React.CSSProperties;\n className?: string;\n}\n\n/**\n * TableRow Component\n *\n * Renders a table row (tr) with cells.\n * Supports selection and row click.\n * Must be used within a Table component.\n */\nexport default function TableRow<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({\n row,\n rowIndex,\n className = \"\",\n onClick,\n style,\n ...props\n}: TableRowProps<T>) {\n const {\n columns,\n selectable,\n selectionState,\n toggleRowSelection,\n getRowId,\n actions,\n onRowClick,\n } = useTableContext<T>();\n\n const id = getRowId(row, rowIndex);\n const isSelected = selectionState.selectedRows.includes(id);\n\n const handleClick = (e: React.MouseEvent<HTMLTableRowElement>) => {\n if (onClick) {\n onClick(e);\n }\n if (onRowClick) {\n onRowClick(row);\n }\n };\n\n return (\n <tr\n role=\"row\"\n aria-selected={selectable ? isSelected : undefined}\n aria-rowindex={rowIndex + 1}\n className={`hover:bg-surface-hover ${isSelected ? \"bg-surface-selected\" : \"\"} ${className}`}\n onClick={handleClick}\n style={style}\n {...props}\n >\n {selectable && (\n <td\n className={`${getSpacingClass(\"lg\", \"px\")} ${getSpacingClass(\"base\", \"py\")}`}\n >\n <Checkbox\n checked={isSelected}\n onChange={() => toggleRowSelection(id)}\n aria-label={`Select row ${id}`}\n className={getSpacingClass(\"none\", \"my\")}\n />\n </td>\n )}\n\n {columns.map((column) => (\n <TableCell key={String(column.key)} column={column} row={row} />\n ))}\n\n {actions && (\n <td\n className={`${getSpacingClass(\"lg\", \"px\")} ${getSpacingClass(\"base\", \"py\")} text-right`}\n >\n <TableActions row={row} />\n </td>\n )}\n </tr>\n );\n}\n"],"names":["TableRow","_a","_b","row","rowIndex","className","onClick","style","props","__objRest","columns","selectable","selectionState","toggleRowSelection","getRowId","actions","onRowClick","useTableContext","id","isSelected","handleClick","e","jsxs","__spreadProps","__spreadValues","jsx","getSpacingClass","Checkbox","column","TableCell","TableActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAwBA,EAEtBC,GAOmB;AAPnB,MAAAC,IAAAD,GACA;AAAA,SAAAE;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,SAAAC;AAAA,IACA,OAAAC;AAAA,MALAL,GAMGM,IAAAC,EANHP,GAMG;AAAA,IALH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM;AAAA,IACJ,SAAAQ;AAAA,IACA,YAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,SAAAC;AAAA,IACA,YAAAC;AAAA,EAAA,IACEC,EAAA,GAEEC,IAAKJ,EAASX,GAAKC,CAAQ,GAC3Be,IAAaP,EAAe,aAAa,SAASM,CAAE,GAEpDE,IAAc,CAACC,MAA6C;AAChE,IAAIf,KACFA,EAAQe,CAAC,GAEPL,KACFA,EAAWb,CAAG;AAAA,EAElB;AAEA,SACE,gBAAAmB;AAAA,IAAC;AAAA,IAAAC,EAAAC,EAAA;AAAA,MACC,MAAK;AAAA,MACL,iBAAeb,IAAaQ,IAAa;AAAA,MACzC,iBAAef,IAAW;AAAA,MAC1B,WAAW,0BAA0Be,IAAa,wBAAwB,EAAE,IAAId,CAAS;AAAA,MACzF,SAASe;AAAA,MACT,OAAAb;AAAA,OACIC,IAPL;AAAA,MASE,UAAA;AAAA,QAAAG,KACC,gBAAAc;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,GAAGC,EAAgB,MAAM,IAAI,CAAC,IAAIA,EAAgB,QAAQ,IAAI,CAAC;AAAA,YAE1E,UAAA,gBAAAD;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,SAASR;AAAA,gBACT,UAAU,MAAMN,EAAmBK,CAAE;AAAA,gBACrC,cAAY,cAAcA,CAAE;AAAA,gBAC5B,WAAWQ,EAAgB,QAAQ,IAAI;AAAA,cAAA;AAAA,YAAA;AAAA,UACzC;AAAA,QAAA;AAAA,QAIHhB,EAAQ,IAAI,CAACkB,MACZ,gBAAAH,EAACI,GAAA,EAAmC,QAAAD,GAAgB,KAAAzB,EAAA,GAApC,OAAOyB,EAAO,GAAG,CAA6B,CAC/D;AAAA,QAEAb,KACC,gBAAAU;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,GAAGC,EAAgB,MAAM,IAAI,CAAC,IAAIA,EAAgB,QAAQ,IAAI,CAAC;AAAA,YAE1E,UAAA,gBAAAD,EAACK,KAAa,KAAA3B,EAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MAC1B;AAAA,IAAA;AAAA,EAAA;AAIR;"}
1
+ {"version":3,"file":"TableRow.js","sources":["../../../../../src/ui/components/Table/TableRow.tsx"],"sourcesContent":["\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { useTableContext } from \"./TableContext\";\nimport { Checkbox } from \"../../primitives\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport TableCell from \"./TableCell\";\nimport TableActions from \"./TableActions\";\n\nexport interface TableRowProps<\n T extends Record<string, unknown> = Record<string, unknown>,\n> extends Omit<HTMLAttributes<HTMLTableRowElement>, \"style\"> {\n row: T;\n rowIndex: number;\n style?: React.CSSProperties;\n className?: string;\n}\n\n/**\n * TableRow Component\n *\n * Renders a table row (tr) with cells.\n * Supports selection and row click.\n * Must be used within a Table component.\n */\nexport default function TableRow<\n T extends Record<string, unknown> = Record<string, unknown>,\n>({\n row,\n rowIndex,\n className = \"\",\n onClick,\n style,\n ...props\n}: TableRowProps<T>) {\n const {\n columns,\n selectable,\n selectionState,\n toggleRowSelection,\n getRowId,\n actions,\n onRowClick,\n } = useTableContext<T>();\n\n const id = getRowId(row, rowIndex);\n const isSelected = selectionState.selectedRows.includes(id);\n const isRowInteractive = !!onRowClick;\n\n const handleClick = (e: React.MouseEvent<HTMLTableRowElement>) => {\n if (onClick) {\n onClick(e);\n }\n if (onRowClick) {\n onRowClick(row);\n }\n };\n\n // Keyboard operability for onRowClick (WCAG 2.1.1). role stays \"row\" —\n // promoting the <tr> to role=\"button\" would strip it from the table's\n // grid/row structure for assistive tech, which is worse than the gap\n // being fixed. A focusable row with Enter/Space activation keeps the\n // table semantics intact while making the action reachable.\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTableRowElement>) => {\n if (!onRowClick) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n if (e.key === \" \") e.preventDefault();\n onRowClick(row);\n }\n };\n\n return (\n <tr\n role=\"row\"\n aria-selected={selectable ? isSelected : undefined}\n aria-rowindex={rowIndex + 1}\n tabIndex={isRowInteractive ? 0 : undefined}\n onKeyDown={isRowInteractive ? handleKeyDown : undefined}\n className={`hover:bg-surface-hover ${isRowInteractive ? \"cursor-pointer\" : \"\"} ${isSelected ? \"bg-surface-selected\" : \"\"} ${className}`}\n onClick={handleClick}\n style={style}\n {...props}\n >\n {selectable && (\n <td\n className={`${getSpacingClass(\"lg\", \"px\")} ${getSpacingClass(\"base\", \"py\")}`}\n >\n <Checkbox\n checked={isSelected}\n onChange={() => toggleRowSelection(id)}\n aria-label={`Select row ${id}`}\n className={getSpacingClass(\"none\", \"my\")}\n />\n </td>\n )}\n\n {columns.map((column) => (\n <TableCell key={String(column.key)} column={column} row={row} />\n ))}\n\n {actions && (\n <td\n className={`${getSpacingClass(\"lg\", \"px\")} ${getSpacingClass(\"base\", \"py\")} text-right`}\n >\n <TableActions row={row} />\n </td>\n )}\n </tr>\n );\n}\n"],"names":["TableRow","_a","_b","row","rowIndex","className","onClick","style","props","__objRest","columns","selectable","selectionState","toggleRowSelection","getRowId","actions","onRowClick","useTableContext","id","isSelected","isRowInteractive","handleClick","e","handleKeyDown","jsxs","__spreadProps","__spreadValues","jsx","getSpacingClass","Checkbox","column","TableCell","TableActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAwBA,EAEtBC,GAOmB;AAPnB,MAAAC,IAAAD,GACA;AAAA,SAAAE;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC,IAAY;AAAA,IACZ,SAAAC;AAAA,IACA,OAAAC;AAAA,MALAL,GAMGM,IAAAC,EANHP,GAMG;AAAA,IALH;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGA,QAAM;AAAA,IACJ,SAAAQ;AAAA,IACA,YAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,UAAAC;AAAA,IACA,SAAAC;AAAA,IACA,YAAAC;AAAA,EAAA,IACEC,EAAA,GAEEC,IAAKJ,EAASX,GAAKC,CAAQ,GAC3Be,IAAaP,EAAe,aAAa,SAASM,CAAE,GACpDE,IAAmB,CAAC,CAACJ,GAErBK,IAAc,CAACC,MAA6C;AAChE,IAAIhB,KACFA,EAAQgB,CAAC,GAEPN,KACFA,EAAWb,CAAG;AAAA,EAElB,GAOMoB,IAAgB,CAACD,MAAgD;AACrE,IAAKN,MACDM,EAAE,QAAQ,WAAWA,EAAE,QAAQ,SAC7BA,EAAE,QAAQ,OAAKA,EAAE,eAAA,GACrBN,EAAWb,CAAG;AAAA,EAElB;AAEA,SACE,gBAAAqB;AAAA,IAAC;AAAA,IAAAC,EAAAC,EAAA;AAAA,MACC,MAAK;AAAA,MACL,iBAAef,IAAaQ,IAAa;AAAA,MACzC,iBAAef,IAAW;AAAA,MAC1B,UAAUgB,IAAmB,IAAI;AAAA,MACjC,WAAWA,IAAmBG,IAAgB;AAAA,MAC9C,WAAW,0BAA0BH,IAAmB,mBAAmB,EAAE,IAAID,IAAa,wBAAwB,EAAE,IAAId,CAAS;AAAA,MACrI,SAASgB;AAAA,MACT,OAAAd;AAAA,OACIC,IATL;AAAA,MAWE,UAAA;AAAA,QAAAG,KACC,gBAAAgB;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,GAAGC,EAAgB,MAAM,IAAI,CAAC,IAAIA,EAAgB,QAAQ,IAAI,CAAC;AAAA,YAE1E,UAAA,gBAAAD;AAAA,cAACE;AAAA,cAAA;AAAA,gBACC,SAASV;AAAA,gBACT,UAAU,MAAMN,EAAmBK,CAAE;AAAA,gBACrC,cAAY,cAAcA,CAAE;AAAA,gBAC5B,WAAWU,EAAgB,QAAQ,IAAI;AAAA,cAAA;AAAA,YAAA;AAAA,UACzC;AAAA,QAAA;AAAA,QAIHlB,EAAQ,IAAI,CAACoB,MACZ,gBAAAH,EAACI,GAAA,EAAmC,QAAAD,GAAgB,KAAA3B,EAAA,GAApC,OAAO2B,EAAO,GAAG,CAA6B,CAC/D;AAAA,QAEAf,KACC,gBAAAY;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAW,GAAGC,EAAgB,MAAM,IAAI,CAAC,IAAIA,EAAgB,QAAQ,IAAI,CAAC;AAAA,YAE1E,UAAA,gBAAAD,EAACK,KAAa,KAAA7B,EAAA,CAAU;AAAA,UAAA;AAAA,QAAA;AAAA,MAC1B;AAAA,IAAA;AAAA,EAAA;AAIR;"}