@heymantle/litho 0.0.1

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 (140) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +90 -0
  3. package/dist/cjs/components/ActionList.js +267 -0
  4. package/dist/cjs/components/AnnouncementBar.js +73 -0
  5. package/dist/cjs/components/AppProvider.js +245 -0
  6. package/dist/cjs/components/Autocomplete.js +351 -0
  7. package/dist/cjs/components/Badge.js +234 -0
  8. package/dist/cjs/components/Banner.js +264 -0
  9. package/dist/cjs/components/Box.js +247 -0
  10. package/dist/cjs/components/Button.js +1018 -0
  11. package/dist/cjs/components/ButtonGroup.js +196 -0
  12. package/dist/cjs/components/Card.js +593 -0
  13. package/dist/cjs/components/Checkbox.js +175 -0
  14. package/dist/cjs/components/ChoiceList.js +160 -0
  15. package/dist/cjs/components/Collapsible.js +42 -0
  16. package/dist/cjs/components/ColorField.js +159 -0
  17. package/dist/cjs/components/ContextualSaveBar.js +53 -0
  18. package/dist/cjs/components/DatePicker.js +547 -0
  19. package/dist/cjs/components/Divider.js +50 -0
  20. package/dist/cjs/components/DropZone.js +547 -0
  21. package/dist/cjs/components/EmptyState.js +111 -0
  22. package/dist/cjs/components/Filters.js +874 -0
  23. package/dist/cjs/components/FooterHelp.js +48 -0
  24. package/dist/cjs/components/Form.js +44 -0
  25. package/dist/cjs/components/Frame.js +386 -0
  26. package/dist/cjs/components/FrameSaveBar.js +239 -0
  27. package/dist/cjs/components/Grid.js +151 -0
  28. package/dist/cjs/components/HorizontalStack.js +180 -0
  29. package/dist/cjs/components/Icon.js +346 -0
  30. package/dist/cjs/components/Image.js +191 -0
  31. package/dist/cjs/components/InlineError.js +57 -0
  32. package/dist/cjs/components/Label.js +78 -0
  33. package/dist/cjs/components/Layout.js +228 -0
  34. package/dist/cjs/components/LayoutSection.js +133 -0
  35. package/dist/cjs/components/Link.js +128 -0
  36. package/dist/cjs/components/List.js +69 -0
  37. package/dist/cjs/components/Listbox.js +211 -0
  38. package/dist/cjs/components/Loading.js +103 -0
  39. package/dist/cjs/components/Modal.js +449 -0
  40. package/dist/cjs/components/Navigation.js +331 -0
  41. package/dist/cjs/components/Page.js +529 -0
  42. package/dist/cjs/components/Pagination.js +109 -0
  43. package/dist/cjs/components/Pane.js +128 -0
  44. package/dist/cjs/components/Popover.js +365 -0
  45. package/dist/cjs/components/PopoverManager.js +34 -0
  46. package/dist/cjs/components/ProgressBar.js +124 -0
  47. package/dist/cjs/components/RadioButton.js +172 -0
  48. package/dist/cjs/components/RadioButtonCard.js +193 -0
  49. package/dist/cjs/components/RangeSlider.js +235 -0
  50. package/dist/cjs/components/ResourceList.js +105 -0
  51. package/dist/cjs/components/Select.js +300 -0
  52. package/dist/cjs/components/SkeletonText.js +130 -0
  53. package/dist/cjs/components/Spinner.js +72 -0
  54. package/dist/cjs/components/Table.js +1184 -0
  55. package/dist/cjs/components/Tabs.js +421 -0
  56. package/dist/cjs/components/Tag.js +165 -0
  57. package/dist/cjs/components/Text.js +274 -0
  58. package/dist/cjs/components/TextField.js +584 -0
  59. package/dist/cjs/components/Thumbnail.js +73 -0
  60. package/dist/cjs/components/TimePicker.js +23 -0
  61. package/dist/cjs/components/Tip.js +220 -0
  62. package/dist/cjs/components/Tooltip.js +431 -0
  63. package/dist/cjs/components/TopBar.js +210 -0
  64. package/dist/cjs/components/VerticalStack.js +161 -0
  65. package/dist/cjs/index.js +308 -0
  66. package/dist/cjs/styles/Table.js +591 -0
  67. package/dist/cjs/utilities/dates.js +339 -0
  68. package/dist/cjs/utilities/useIndexResourceState.js +175 -0
  69. package/dist/cjs/utilities/useMounted.js +67 -0
  70. package/dist/cjs/utilities/useTableScrollState.js +142 -0
  71. package/dist/esm/components/ActionList.js +216 -0
  72. package/dist/esm/components/AnnouncementBar.js +63 -0
  73. package/dist/esm/components/AppProvider.js +185 -0
  74. package/dist/esm/components/Autocomplete.js +300 -0
  75. package/dist/esm/components/Badge.js +225 -0
  76. package/dist/esm/components/Banner.js +254 -0
  77. package/dist/esm/components/Box.js +238 -0
  78. package/dist/esm/components/Button.js +967 -0
  79. package/dist/esm/components/ButtonGroup.js +137 -0
  80. package/dist/esm/components/Card.js +537 -0
  81. package/dist/esm/components/Checkbox.js +165 -0
  82. package/dist/esm/components/ChoiceList.js +145 -0
  83. package/dist/esm/components/Collapsible.js +32 -0
  84. package/dist/esm/components/ColorField.js +149 -0
  85. package/dist/esm/components/ContextualSaveBar.js +43 -0
  86. package/dist/esm/components/DatePicker.js +532 -0
  87. package/dist/esm/components/Divider.js +41 -0
  88. package/dist/esm/components/DropZone.js +537 -0
  89. package/dist/esm/components/EmptyState.js +101 -0
  90. package/dist/esm/components/Filters.js +823 -0
  91. package/dist/esm/components/FooterHelp.js +38 -0
  92. package/dist/esm/components/Form.js +35 -0
  93. package/dist/esm/components/Frame.js +376 -0
  94. package/dist/esm/components/FrameSaveBar.js +229 -0
  95. package/dist/esm/components/Grid.js +142 -0
  96. package/dist/esm/components/HorizontalStack.js +171 -0
  97. package/dist/esm/components/Icon.js +296 -0
  98. package/dist/esm/components/Image.js +141 -0
  99. package/dist/esm/components/InlineError.js +43 -0
  100. package/dist/esm/components/Label.js +63 -0
  101. package/dist/esm/components/Layout.js +164 -0
  102. package/dist/esm/components/LayoutSection.js +82 -0
  103. package/dist/esm/components/Link.js +119 -0
  104. package/dist/esm/components/List.js +61 -0
  105. package/dist/esm/components/Listbox.js +201 -0
  106. package/dist/esm/components/Loading.js +93 -0
  107. package/dist/esm/components/Modal.js +390 -0
  108. package/dist/esm/components/Navigation.js +321 -0
  109. package/dist/esm/components/Page.js +473 -0
  110. package/dist/esm/components/Pagination.js +99 -0
  111. package/dist/esm/components/Pane.js +118 -0
  112. package/dist/esm/components/Popover.js +350 -0
  113. package/dist/esm/components/PopoverManager.js +24 -0
  114. package/dist/esm/components/ProgressBar.js +114 -0
  115. package/dist/esm/components/RadioButton.js +157 -0
  116. package/dist/esm/components/RadioButtonCard.js +178 -0
  117. package/dist/esm/components/RangeSlider.js +225 -0
  118. package/dist/esm/components/ResourceList.js +95 -0
  119. package/dist/esm/components/Select.js +285 -0
  120. package/dist/esm/components/SkeletonText.js +120 -0
  121. package/dist/esm/components/Spinner.js +63 -0
  122. package/dist/esm/components/Table.js +1129 -0
  123. package/dist/esm/components/Tabs.js +366 -0
  124. package/dist/esm/components/Tag.js +151 -0
  125. package/dist/esm/components/Text.js +265 -0
  126. package/dist/esm/components/TextField.js +533 -0
  127. package/dist/esm/components/Thumbnail.js +63 -0
  128. package/dist/esm/components/TimePicker.js +13 -0
  129. package/dist/esm/components/Tip.js +169 -0
  130. package/dist/esm/components/Tooltip.js +380 -0
  131. package/dist/esm/components/TopBar.js +200 -0
  132. package/dist/esm/components/VerticalStack.js +152 -0
  133. package/dist/esm/index.js +61 -0
  134. package/dist/esm/styles/Table.js +581 -0
  135. package/dist/esm/utilities/dates.js +289 -0
  136. package/dist/esm/utilities/useIndexResourceState.js +158 -0
  137. package/dist/esm/utilities/useMounted.js +57 -0
  138. package/dist/esm/utilities/useTableScrollState.js +132 -0
  139. package/index.css +1137 -0
  140. package/package.json +53 -0
@@ -0,0 +1,1184 @@
1
+ "use client";
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "default", {
7
+ enumerable: true,
8
+ get: function() {
9
+ return _default;
10
+ }
11
+ });
12
+ var _jsxruntime = require("react/jsx-runtime");
13
+ var _polarisicons = require("@shopify/polaris-icons");
14
+ var _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
15
+ var _Modal = require("../components/Modal");
16
+ var _index = require("../index");
17
+ var _Table = require("../styles/Table");
18
+ var _useIndexResourceState = require("../utilities/useIndexResourceState");
19
+ var _useMounted = require("../utilities/useMounted");
20
+ var _useTableScrollState = /*#__PURE__*/ _interop_require_default(require("../utilities/useTableScrollState"));
21
+ function _array_like_to_array(arr, len) {
22
+ if (len == null || len > arr.length) len = arr.length;
23
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
24
+ return arr2;
25
+ }
26
+ function _array_with_holes(arr) {
27
+ if (Array.isArray(arr)) return arr;
28
+ }
29
+ function _array_without_holes(arr) {
30
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
31
+ }
32
+ function _define_property(obj, key, value) {
33
+ if (key in obj) {
34
+ Object.defineProperty(obj, key, {
35
+ value: value,
36
+ enumerable: true,
37
+ configurable: true,
38
+ writable: true
39
+ });
40
+ } else {
41
+ obj[key] = value;
42
+ }
43
+ return obj;
44
+ }
45
+ function _interop_require_default(obj) {
46
+ return obj && obj.__esModule ? obj : {
47
+ default: obj
48
+ };
49
+ }
50
+ function _getRequireWildcardCache(nodeInterop) {
51
+ if (typeof WeakMap !== "function") return null;
52
+ var cacheBabelInterop = new WeakMap();
53
+ var cacheNodeInterop = new WeakMap();
54
+ return (_getRequireWildcardCache = function(nodeInterop) {
55
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
56
+ })(nodeInterop);
57
+ }
58
+ function _interop_require_wildcard(obj, nodeInterop) {
59
+ if (!nodeInterop && obj && obj.__esModule) {
60
+ return obj;
61
+ }
62
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
63
+ return {
64
+ default: obj
65
+ };
66
+ }
67
+ var cache = _getRequireWildcardCache(nodeInterop);
68
+ if (cache && cache.has(obj)) {
69
+ return cache.get(obj);
70
+ }
71
+ var newObj = {
72
+ __proto__: null
73
+ };
74
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
75
+ for(var key in obj){
76
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
77
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
78
+ if (desc && (desc.get || desc.set)) {
79
+ Object.defineProperty(newObj, key, desc);
80
+ } else {
81
+ newObj[key] = obj[key];
82
+ }
83
+ }
84
+ }
85
+ newObj.default = obj;
86
+ if (cache) {
87
+ cache.set(obj, newObj);
88
+ }
89
+ return newObj;
90
+ }
91
+ function _iterable_to_array(iter) {
92
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
93
+ }
94
+ function _iterable_to_array_limit(arr, i) {
95
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
96
+ if (_i == null) return;
97
+ var _arr = [];
98
+ var _n = true;
99
+ var _d = false;
100
+ var _s, _e;
101
+ try {
102
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
103
+ _arr.push(_s.value);
104
+ if (i && _arr.length === i) break;
105
+ }
106
+ } catch (err) {
107
+ _d = true;
108
+ _e = err;
109
+ } finally{
110
+ try {
111
+ if (!_n && _i["return"] != null) _i["return"]();
112
+ } finally{
113
+ if (_d) throw _e;
114
+ }
115
+ }
116
+ return _arr;
117
+ }
118
+ function _non_iterable_rest() {
119
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
120
+ }
121
+ function _non_iterable_spread() {
122
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
123
+ }
124
+ function _object_spread(target) {
125
+ for(var i = 1; i < arguments.length; i++){
126
+ var source = arguments[i] != null ? arguments[i] : {};
127
+ var ownKeys = Object.keys(source);
128
+ if (typeof Object.getOwnPropertySymbols === "function") {
129
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
130
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
131
+ }));
132
+ }
133
+ ownKeys.forEach(function(key) {
134
+ _define_property(target, key, source[key]);
135
+ });
136
+ }
137
+ return target;
138
+ }
139
+ function ownKeys(object, enumerableOnly) {
140
+ var keys = Object.keys(object);
141
+ if (Object.getOwnPropertySymbols) {
142
+ var symbols = Object.getOwnPropertySymbols(object);
143
+ if (enumerableOnly) {
144
+ symbols = symbols.filter(function(sym) {
145
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
146
+ });
147
+ }
148
+ keys.push.apply(keys, symbols);
149
+ }
150
+ return keys;
151
+ }
152
+ function _object_spread_props(target, source) {
153
+ source = source != null ? source : {};
154
+ if (Object.getOwnPropertyDescriptors) {
155
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
156
+ } else {
157
+ ownKeys(Object(source)).forEach(function(key) {
158
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
159
+ });
160
+ }
161
+ return target;
162
+ }
163
+ function _object_without_properties(source, excluded) {
164
+ if (source == null) return {};
165
+ var target = _object_without_properties_loose(source, excluded);
166
+ var key, i;
167
+ if (Object.getOwnPropertySymbols) {
168
+ var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
169
+ for(i = 0; i < sourceSymbolKeys.length; i++){
170
+ key = sourceSymbolKeys[i];
171
+ if (excluded.indexOf(key) >= 0) continue;
172
+ if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
173
+ target[key] = source[key];
174
+ }
175
+ }
176
+ return target;
177
+ }
178
+ function _object_without_properties_loose(source, excluded) {
179
+ if (source == null) return {};
180
+ var target = {};
181
+ var sourceKeys = Object.keys(source);
182
+ var key, i;
183
+ for(i = 0; i < sourceKeys.length; i++){
184
+ key = sourceKeys[i];
185
+ if (excluded.indexOf(key) >= 0) continue;
186
+ target[key] = source[key];
187
+ }
188
+ return target;
189
+ }
190
+ function _sliced_to_array(arr, i) {
191
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
192
+ }
193
+ function _to_consumable_array(arr) {
194
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
195
+ }
196
+ function _type_of(obj) {
197
+ "@swc/helpers - typeof";
198
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
199
+ }
200
+ function _unsupported_iterable_to_array(o, minLen) {
201
+ if (!o) return;
202
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
203
+ var n = Object.prototype.toString.call(o).slice(8, -1);
204
+ if (n === "Object" && o.constructor) n = o.constructor.name;
205
+ if (n === "Map" || n === "Set") return Array.from(n);
206
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
207
+ }
208
+ var TableContext = /*#__PURE__*/ (0, _react.createContext)({});
209
+ var TableWrapperContext = /*#__PURE__*/ (0, _react.createContext)({});
210
+ /**
211
+ * @typedef {Object} TableHeading
212
+ * @property {string|React.ReactNode} title - The title content of the heading.
213
+ * @property {boolean} [sortable=false] - Whether the column is sortable.
214
+ * @property {"start" | "end" | "left" | "right" | "center"} [alignment="start"] - Alignment of the heading content.
215
+ * @property {boolean} [hidden=false] - Whether the heading is hidden.
216
+ * @property {string|React.ReactNode} [tooltip] - Tooltip content for the heading.
217
+ * @property {string|React.ReactNode} [tooltipContent] - Alternative tooltip content for the heading.
218
+ * @property {Function} [onAction] - Callback function when the heading is clicked.
219
+ */ /**
220
+ * Table component for displaying data in a customizable, sortable, and scrollable format.
221
+ *
222
+ * @param {Object} props - Component props.
223
+ * @param {Array<TableHeading|string|React.ReactNode>} [props.headings=[]] - Column headings. Can be strings, React nodes, or configuration objects.
224
+ * @param {"default" | "subdued"} [props.headingStyle="default"] - Style of the heading.
225
+ * @param {Array<Array<string | React.ReactNode>>} [props.rows=[]] - Table rows with cell content.
226
+ * @param {string} [props.verticalAlign="middle"] - Vertical alignment ('top', 'middle', 'bottom').
227
+ * @param {number} [props.fixedFirstColumns=0] - Number of fixed left columns.
228
+ * @param {number} [props.fixedLastColumns=0] - Number of fixed right columns.
229
+ * @param {number} [props.initialSortColumnIndex] - Initial sorted column index.
230
+ * @param {"ascending" | "descending"} [props.defaultSortDirection="ascending"] - Default sort direction.
231
+ * @param {Function} [props.onSort] - Callback for sorting.
232
+ * @param {boolean} [props.increasedTableDensity=false] - Whether to reduce padding for higher density.
233
+ * @param {Array<string | React.ReactNode>} [props.footers=[]] - Footer row content.
234
+ * @param {number} [props.firstColumnMinWidth] - Minimum width of the first column.
235
+ * @param {boolean} [props.bordered=false] - Whether to show table borders.
236
+ * @param {boolean} [props.topBorder=true] - Whether to show a top border.
237
+ * @param {number} [props.skeletonRows=20] - Number of skeleton rows to render when loading.
238
+ * @param {string} [props.paginatedSelectAllActionText] - Text for the paginated select all action.
239
+ * @param {Object} [props.resourceName] - Object containing singular and plural resource names.
240
+ * @param {string} [props.resourceName.singular] - Singular resource name.
241
+ * @param {string} [props.resourceName.plural] - Plural resource name.
242
+ * @param {number} [props.itemCount] - Total number of items in the table.
243
+ * @param {boolean} [props.selectable=true] - Whether the table is selectable.
244
+ * @param {Function} [props.onSelectionChange] - Callback for handling selection changes.
245
+ * @param {boolean} [props.loading=false] - Whether the table is loading.
246
+ * @returns {React.ReactElement} The rendered Table component.
247
+ */ function Table() {
248
+ var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
249
+ var tmp = props.headings, _headings = tmp === void 0 ? [] : tmp, _props_headingStyle = props.headingStyle, headingStyle = _props_headingStyle === void 0 ? "default" : _props_headingStyle, _props_stickyHeader = props.stickyHeader, stickyHeader = _props_stickyHeader === void 0 ? true : _props_stickyHeader, _props_rows = props.rows, rows = _props_rows === void 0 ? [] : _props_rows, tmp1 = props.footers, _footers = tmp1 === void 0 ? [] : tmp1, _props_verticalAlign = props.verticalAlign, verticalAlign = _props_verticalAlign === void 0 ? "middle" : _props_verticalAlign, tmp2 = props.fixedFirstColumns, _fixedFirstColumns = tmp2 === void 0 ? 0 : tmp2, _props_fixedLastColumns = props.fixedLastColumns, fixedLastColumns = _props_fixedLastColumns === void 0 ? 0 : _props_fixedLastColumns, initialSortColumnIndex = props.initialSortColumnIndex, _props_defaultSortDirection = props.defaultSortDirection, defaultSortDirection = _props_defaultSortDirection === void 0 ? "ascending" : _props_defaultSortDirection, onSort = props.onSort, _props_increasedTableDensity = props.increasedTableDensity, increasedTableDensity = _props_increasedTableDensity === void 0 ? false : _props_increasedTableDensity, firstColumnMinWidth = props.firstColumnMinWidth, _props_bordered = props.bordered, bordered = _props_bordered === void 0 ? false : _props_bordered, _props_topBorder = props.topBorder, topBorder = _props_topBorder === void 0 ? true : _props_topBorder, _props_bulkActions = props.bulkActions, bulkActions = _props_bulkActions === void 0 ? [] : _props_bulkActions, _props_promotedBulkActions = props.promotedBulkActions, promotedBulkActions = _props_promotedBulkActions === void 0 ? [] : _props_promotedBulkActions, emptyState = props.emptyState, _children = props.children, paginatedSelectAllActionText = props.paginatedSelectAllActionText, _props_resourceName = props.resourceName, resourceName = _props_resourceName === void 0 ? {
250
+ singular: "item",
251
+ plural: "items"
252
+ } : _props_resourceName, itemCount = props.itemCount, _props_selectable = props.selectable, selectable = _props_selectable === void 0 ? true : _props_selectable, onSelectionChange = props.onSelectionChange, _props_loading = props.loading, loading = _props_loading === void 0 ? false : _props_loading, hasMoreItems = props.hasMoreItems, _props_skeletonRows = props.skeletonRows, skeletonRows = _props_skeletonRows === void 0 ? 20 : _props_skeletonRows, _props_noBodyCellPadding = props.noBodyCellPadding, noBodyCellPadding = _props_noBodyCellPadding === void 0 ? false : _props_noBodyCellPadding;
253
+ var insideModal = (0, _react.useContext)(_Modal.ModalContext);
254
+ var mounted = (0, _useMounted.useMounted)();
255
+ var fixedFirstColumns = selectable ? 1 + _fixedFirstColumns : _fixedFirstColumns;
256
+ var showEmptyState = !loading && itemCount === 0;
257
+ var showHoverStates = !!_children;
258
+ var _useState = _sliced_to_array((0, _react.useState)(56), 2), headerHeight = _useState[0], setHeaderHeight = _useState[1];
259
+ (0, _react.useEffect)(function() {
260
+ if (mounted) {
261
+ var root = document.documentElement;
262
+ var cssValue = getComputedStyle(root).getPropertyValue('--litho-header-height').trim();
263
+ setHeaderHeight(parseInt(cssValue || 56, 10));
264
+ }
265
+ }, [
266
+ mounted
267
+ ]);
268
+ var idValue = (0, _react.useId)();
269
+ var idRef = (0, _react.useRef)(idValue);
270
+ var containerRef = (0, _react.useRef)(null);
271
+ var tableContainerRef = (0, _react.useRef)(null);
272
+ var _useState1 = _sliced_to_array((0, _react.useState)([]), 2), columnWidths = _useState1[0], setColumnWidths = _useState1[1];
273
+ var _useState2 = _sliced_to_array((0, _react.useState)([]), 2), rowHeights = _useState2[0], setRowHeights = _useState2[1];
274
+ var _useState3 = _sliced_to_array((0, _react.useState)(false), 2), canScrollLeft = _useState3[0], setCanScrollLeft = _useState3[1];
275
+ var _useState4 = _sliced_to_array((0, _react.useState)(false), 2), canScrollRight = _useState4[0], setCanScrollRight = _useState4[1];
276
+ var _useState5 = _sliced_to_array((0, _react.useState)(false), 2), isHeaderSticky = _useState5[0], setIsHeaderSticky = _useState5[1];
277
+ var _useState6 = _sliced_to_array((0, _react.useState)({
278
+ index: initialSortColumnIndex,
279
+ direction: defaultSortDirection
280
+ }), 2), sort = _useState6[0], setSort = _useState6[1];
281
+ var _useState7 = _sliced_to_array((0, _react.useState)({
282
+ type: _useIndexResourceState.SelectionType.None,
283
+ resources: []
284
+ }), 2), selectionState = _useState7[0], setSelectionState = _useState7[1];
285
+ var renderedRowIdsRef = (0, _react.useRef)(new Set());
286
+ var registerRow = function(id) {
287
+ renderedRowIdsRef.current.add(id);
288
+ };
289
+ var unregisterRow = function(id) {
290
+ renderedRowIdsRef.current.delete(id);
291
+ };
292
+ var headings = [
293
+ selectable && /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
294
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_index.Checkbox, {
295
+ checked: [
296
+ _useIndexResourceState.SelectionType.Page,
297
+ _useIndexResourceState.SelectionType.All
298
+ ].includes(selectionState.type),
299
+ disabled: true,
300
+ className: "opacity-0 pointer-events-none"
301
+ })
302
+ }, "select-all-checkbox")
303
+ ].concat(_to_consumable_array(_headings !== null && _headings !== void 0 ? _headings : [])).filter(Boolean);
304
+ var footers = (_footers === null || _footers === void 0 ? void 0 : _footers.length) ? [
305
+ selectable ? "" : null
306
+ ].concat(_to_consumable_array(_footers)).filter(Boolean) : [];
307
+ var _headings_map;
308
+ var cellAlignment = (_headings_map = headings === null || headings === void 0 ? void 0 : headings.map(function(heading) {
309
+ return (typeof heading === "undefined" ? "undefined" : _type_of(heading)) === "object" && heading.alignment ? heading.alignment : "start";
310
+ })) !== null && _headings_map !== void 0 ? _headings_map : [];
311
+ var _headings_map1;
312
+ var sortable = (_headings_map1 = headings === null || headings === void 0 ? void 0 : headings.map(function(heading) {
313
+ return (typeof heading === "undefined" ? "undefined" : _type_of(heading)) === "object" && heading.sortable ? heading.sortable : false;
314
+ })) !== null && _headings_map1 !== void 0 ? _headings_map1 : [];
315
+ var children = (0, _react.useMemo)(function() {
316
+ if (_children) return _children;
317
+ if (!rows || rows.length === 0) return null;
318
+ return rows.map(function(row, rowIndex) {
319
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(Table.Row, {
320
+ position: rowIndex,
321
+ children: row.map(function(cell, cellIndex) {
322
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(Table.Cell, {
323
+ alignment: cellAlignment[cellIndex] || "start",
324
+ children: cell
325
+ }, cellIndex);
326
+ })
327
+ }, rowIndex);
328
+ });
329
+ }, [
330
+ _children,
331
+ rows
332
+ ]);
333
+ var updateScrollState = (0, _useTableScrollState.default)({
334
+ loading: loading,
335
+ idRef: idRef,
336
+ containerRef: containerRef,
337
+ tableContainerRef: tableContainerRef,
338
+ setCanScrollLeft: setCanScrollLeft,
339
+ setCanScrollRight: setCanScrollRight,
340
+ setColumnWidths: setColumnWidths,
341
+ setRowHeights: setRowHeights,
342
+ setIsHeaderSticky: setIsHeaderSticky,
343
+ stickyHeader: stickyHeader,
344
+ children: children,
345
+ showHoverStates: showHoverStates,
346
+ insideModal: insideModal,
347
+ itemCount: itemCount
348
+ });
349
+ var setTableRef = (0, _react.useCallback)(function(node) {
350
+ if (node) {
351
+ tableContainerRef.current = node;
352
+ requestAnimationFrame(function() {
353
+ updateScrollState();
354
+ });
355
+ }
356
+ }, [
357
+ updateScrollState
358
+ ]);
359
+ (0, _react.useEffect)(function() {
360
+ var renderedRowIds = Array.isArray(renderedRowIdsRef.current) ? renderedRowIdsRef.current : Array.from(renderedRowIdsRef.current || []);
361
+ var renderedSet = new Set(renderedRowIds);
362
+ var selectedSet = new Set(selectionState.resources);
363
+ var matchingValues = _to_consumable_array(renderedSet).filter(function(id) {
364
+ return selectedSet.has(id);
365
+ });
366
+ if (matchingValues.length === 0) {
367
+ if (!insideModal && tableContainerRef.current) {
368
+ var rect = tableContainerRef.current.getBoundingClientRect();
369
+ setIsHeaderSticky(stickyHeader && rect.top <= headerHeight);
370
+ }
371
+ if (!selectable) return;
372
+ setSelectionState({
373
+ type: _useIndexResourceState.SelectionType.None,
374
+ resources: []
375
+ });
376
+ }
377
+ }, [
378
+ children
379
+ ]);
380
+ (0, _react.useEffect)(function() {
381
+ if (loading) {
382
+ setIsHeaderSticky(false);
383
+ }
384
+ }, [
385
+ loading
386
+ ]);
387
+ var getSelectionType = function(selectedResources) {
388
+ var type = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : _useIndexResourceState.SelectionType.None;
389
+ if (type === _useIndexResourceState.SelectionType.All) {
390
+ return _useIndexResourceState.SelectionType.All;
391
+ }
392
+ var selectedCount = selectedResources.size;
393
+ var renderedCount = renderedRowIdsRef.current.size;
394
+ if (selectedCount === 0) return _useIndexResourceState.SelectionType.None;
395
+ if (selectedCount < renderedCount) return _useIndexResourceState.SelectionType.Some;
396
+ return _useIndexResourceState.SelectionType.Page;
397
+ };
398
+ var handleSelectionChange = function(type, checked, id) {
399
+ var selectedResources = new Set(selectionState.resources);
400
+ switch(type){
401
+ case _useIndexResourceState.SelectionType.All:
402
+ case _useIndexResourceState.SelectionType.Page:
403
+ selectedResources = renderedRowIdsRef.current;
404
+ break;
405
+ case _useIndexResourceState.SelectionType.None:
406
+ selectedResources.clear();
407
+ break;
408
+ case _useIndexResourceState.SelectionType.Single:
409
+ {
410
+ if (checked) {
411
+ selectedResources.add(id);
412
+ } else {
413
+ selectedResources.delete(id);
414
+ }
415
+ break;
416
+ }
417
+ }
418
+ setSelectionState({
419
+ type: getSelectionType(selectedResources, type),
420
+ resources: Array.from(selectedResources)
421
+ });
422
+ if (onSelectionChange) {
423
+ onSelectionChange(type, checked, id);
424
+ }
425
+ };
426
+ var handleSort = function(cellIndex) {
427
+ var newDirection = sort.direction === "ascending" ? "descending" : "ascending";
428
+ setSort({
429
+ index: cellIndex,
430
+ direction: newDirection
431
+ });
432
+ onSort(cellIndex, newDirection);
433
+ };
434
+ var renderHeadings = (0, _react.useCallback)(function(param) {
435
+ var _param_fixed = param.fixed, fixed = _param_fixed === void 0 ? false : _param_fixed, _param_hidden = param.hidden, hidden = _param_hidden === void 0 ? false : _param_hidden, _param_columnsToRender = param.columnsToRender, columnsToRender = _param_columnsToRender === void 0 ? undefined : _param_columnsToRender, _param_reverseColumns = param.reverseColumns, reverseColumns = _param_reverseColumns === void 0 ? false : _param_reverseColumns, _param_hideCellsOnMobile = param.hideCellsOnMobile, hideCellsOnMobile = _param_hideCellsOnMobile === void 0 ? false : _param_hideCellsOnMobile;
436
+ var _tableContainerRef_current;
437
+ var Container = hidden ? "thead" : "div";
438
+ var InnerContainer = hidden ? "tr" : "div";
439
+ var HeadingCell = hidden ? "th" : "div";
440
+ var tableRect = (_tableContainerRef_current = tableContainerRef.current) === null || _tableContainerRef_current === void 0 ? void 0 : _tableContainerRef_current.getBoundingClientRect();
441
+ var left = tableRect === null || tableRect === void 0 ? void 0 : tableRect.left;
442
+ var right = window.innerWidth - (tableRect === null || tableRect === void 0 ? void 0 : tableRect.right);
443
+ var containerStyles = {};
444
+ var innerContainerStyles = {};
445
+ if (!hidden && isHeaderSticky && !fixed) {
446
+ var _tableContainerRef_current1, _tableContainerRef_current2, _tableContainerRef_current3;
447
+ containerStyles = {
448
+ left: "".concat(left, "px"),
449
+ right: "".concat(right, "px")
450
+ };
451
+ innerContainerStyles = {
452
+ left: isNaN((_tableContainerRef_current1 = tableContainerRef.current) === null || _tableContainerRef_current1 === void 0 ? void 0 : _tableContainerRef_current1.scrollLeft) ? 0 : ((_tableContainerRef_current2 = tableContainerRef.current) === null || _tableContainerRef_current2 === void 0 ? void 0 : _tableContainerRef_current2.scrollLeft) * -1,
453
+ width: (_tableContainerRef_current3 = tableContainerRef.current) === null || _tableContainerRef_current3 === void 0 ? void 0 : _tableContainerRef_current3.scrollWidth
454
+ };
455
+ }
456
+ if (!hidden && isHeaderSticky && fixed && !reverseColumns) {
457
+ containerStyles = {
458
+ left: "".concat(left, "px")
459
+ };
460
+ }
461
+ if (!hidden && isHeaderSticky && fixed && reverseColumns) {
462
+ containerStyles = {
463
+ right: "".concat(right, "px")
464
+ };
465
+ }
466
+ var headingCells = reverseColumns ? headings.slice(-columnsToRender) : headings.slice(0, columnsToRender);
467
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(Container, {
468
+ className: _Table.styles.headingContainerStyles({
469
+ hidden: hidden,
470
+ sticky: isHeaderSticky,
471
+ fixed: fixed,
472
+ reverseColumns: reverseColumns
473
+ }),
474
+ style: containerStyles,
475
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(InnerContainer, {
476
+ className: _Table.styles.headingInnerContainerStyles({
477
+ hidden: hidden,
478
+ sticky: isHeaderSticky,
479
+ fixed: fixed,
480
+ reverseColumns: reverseColumns,
481
+ canScrollRight: canScrollRight,
482
+ canScrollLeft: canScrollLeft
483
+ }),
484
+ style: innerContainerStyles,
485
+ children: headingCells.map(function(heading, cellIndex) {
486
+ var indexAdjusted = reverseColumns ? headings.length - columnsToRender + cellIndex : cellIndex;
487
+ var hideCell = hideCellsOnMobile && cellIndex > 0;
488
+ var width = columnWidths[indexAdjusted];
489
+ var minWidth = firstColumnMinWidth && cellIndex === 0 && !reverseColumns ? firstColumnMinWidth : undefined;
490
+ var alignment = cellAlignment[indexAdjusted];
491
+ var isSortable = sortable && sortable.length > 0 && sortable[indexAdjusted];
492
+ var sortIndex = selectable ? indexAdjusted - 1 : indexAdjusted;
493
+ var sortContent = isSortable ? /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
494
+ className: "min-h-5 ".concat(sort.index === sortIndex ? "opacity-100" : "opacity-0 group-hover:opacity-100"),
495
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_index.Icon, {
496
+ source: sort.direction === "ascending" ? _polarisicons.SortAscendingMajor : _polarisicons.SortDescendingMajor
497
+ })
498
+ }) : null;
499
+ var headingValue = /*#__PURE__*/ _react.default.isValidElement(heading) || typeof heading === "string" ? heading : heading.title;
500
+ var isInteractive = isSortable || heading.onAction;
501
+ var handleClick = function() {
502
+ if (isSortable) handleSort(sortIndex);
503
+ else if (heading.onAction) heading.onAction();
504
+ };
505
+ var labelContent = /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
506
+ className: _Table.styles.headingLabelStyles({
507
+ alignment: alignment,
508
+ sortable: !!isSortable,
509
+ interactive: !!isInteractive
510
+ }),
511
+ onClick: isInteractive ? handleClick : undefined,
512
+ children: [
513
+ [
514
+ "right",
515
+ "end"
516
+ ].includes(alignment) && sortContent,
517
+ /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
518
+ children: headingValue
519
+ }),
520
+ [
521
+ "left",
522
+ "start",
523
+ "center"
524
+ ].includes(alignment) && sortContent
525
+ ]
526
+ });
527
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(HeadingCell, {
528
+ className: _Table.styles.headingStyles({
529
+ hidden: hideCell,
530
+ alignment: alignment,
531
+ verticalAlign: verticalAlign,
532
+ tableIsSelectable: selectable,
533
+ headingStyle: headingStyle
534
+ }),
535
+ style: {
536
+ width: width,
537
+ minWidth: minWidth
538
+ },
539
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
540
+ className: _Table.styles.headingLabelContainerStyles({
541
+ alignment: alignment
542
+ }),
543
+ children: heading.hidden ? null : heading.tooltip || heading.tooltipContent ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_index.Tooltip, {
544
+ content: heading.tooltip || heading.tooltipContent,
545
+ preferredPosition: "above",
546
+ children: labelContent
547
+ }) : labelContent
548
+ })
549
+ }, cellIndex);
550
+ })
551
+ })
552
+ });
553
+ }, [
554
+ headings,
555
+ isHeaderSticky,
556
+ fixedFirstColumns,
557
+ fixedLastColumns
558
+ ]);
559
+ var renderTableRowChildren = function(param) {
560
+ var children = param.children, _param_reverseColumns = param.reverseColumns, reverseColumns = _param_reverseColumns === void 0 ? false : _param_reverseColumns, _columnsToRender = param.columnsToRender;
561
+ var columnsToRender = _columnsToRender && selectable && !reverseColumns ? _columnsToRender - 1 : _columnsToRender;
562
+ return _react.Children.map(children, function(child) {
563
+ if (!/*#__PURE__*/ (0, _react.isValidElement)(child)) return child;
564
+ var type = child.type, props = child.props;
565
+ if (type.displayName === "Table.Row") {
566
+ var allChildren = _react.Children.toArray(props.children);
567
+ if (!allChildren.length) return child;
568
+ var trimmedChildren = typeof columnsToRender === "number" ? reverseColumns ? allChildren.slice(-columnsToRender) : allChildren.slice(0, columnsToRender) : allChildren;
569
+ return trimmedChildren.length !== allChildren.length ? /*#__PURE__*/ (0, _react.cloneElement)(child, {
570
+ children: trimmedChildren
571
+ }) : child;
572
+ }
573
+ if (typeof type === "function") {
574
+ return /*#__PURE__*/ (0, _react.cloneElement)(child, {
575
+ columnsToRender: columnsToRender,
576
+ reverseColumns: reverseColumns,
577
+ rowHeights: rowHeights
578
+ });
579
+ }
580
+ if (props.children) {
581
+ return /*#__PURE__*/ (0, _react.cloneElement)(child, {
582
+ children: renderTableRowChildren({
583
+ children: props.children,
584
+ reverseColumns: reverseColumns,
585
+ columnsToRender: columnsToRender
586
+ })
587
+ });
588
+ }
589
+ return child;
590
+ });
591
+ };
592
+ var renderFooters = (0, _react.useCallback)(function(param) {
593
+ var _param_fixed = param.fixed, fixed = _param_fixed === void 0 ? false : _param_fixed, columnsToRender = param.columnsToRender, _param_reverseColumns = param.reverseColumns, reverseColumns = _param_reverseColumns === void 0 ? false : _param_reverseColumns;
594
+ var footerRowHeight = function() {
595
+ var _tableContainerRef_current_querySelector;
596
+ if (!fixed || !(tableContainerRef === null || tableContainerRef === void 0 ? void 0 : tableContainerRef.current)) return undefined;
597
+ return (_tableContainerRef_current_querySelector = tableContainerRef.current.querySelector("tfoot tr")) === null || _tableContainerRef_current_querySelector === void 0 ? void 0 : _tableContainerRef_current_querySelector.getBoundingClientRect().height;
598
+ };
599
+ var footerCells = function() {
600
+ if (!columnsToRender) return footers;
601
+ return reverseColumns ? footers.slice(-columnsToRender) : footers.slice(0, columnsToRender);
602
+ };
603
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)("tfoot", {
604
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)("tr", {
605
+ className: _Table.styles.rowStyles(),
606
+ style: fixed ? {
607
+ height: footerRowHeight
608
+ } : {},
609
+ children: footerCells().map(function(total, cellIndex) {
610
+ var indexAdjusted = reverseColumns ? footers.length - columnsToRender + cellIndex : cellIndex;
611
+ var width = fixed ? columnWidths === null || columnWidths === void 0 ? void 0 : columnWidths[indexAdjusted] : undefined;
612
+ var minWidth = firstColumnMinWidth && cellIndex === 0 && !reverseColumns ? firstColumnMinWidth : undefined;
613
+ var alignment = cellAlignment === null || cellAlignment === void 0 ? void 0 : cellAlignment[indexAdjusted];
614
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)("td", {
615
+ className: _Table.styles.footerCellStyles({
616
+ alignment: alignment,
617
+ verticalAlign: verticalAlign
618
+ }),
619
+ style: {
620
+ width: width,
621
+ minWidth: minWidth
622
+ },
623
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
624
+ className: "min-h-5",
625
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
626
+ children: total
627
+ })
628
+ })
629
+ }, "footer-".concat(cellIndex));
630
+ })
631
+ })
632
+ });
633
+ }, [
634
+ footers,
635
+ tableContainerRef,
636
+ columnWidths,
637
+ firstColumnMinWidth,
638
+ cellAlignment
639
+ ]);
640
+ var renderTable = (0, _react.useCallback)(function() {
641
+ var props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
642
+ var ref = props.ref, _props_classes = props.classes, classes = _props_classes === void 0 ? "relative overflow-x-auto no-scrollbar" : _props_classes, _props_fixed = props.fixed, fixed = _props_fixed === void 0 ? false : _props_fixed, columnsToRender = props.columnsToRender, _props_reverseColumns = props.reverseColumns, reverseColumns = _props_reverseColumns === void 0 ? false : _props_reverseColumns, _props_hideCellsOnMobile = props.hideCellsOnMobile, hideCellsOnMobile = _props_hideCellsOnMobile === void 0 ? false : _props_hideCellsOnMobile;
643
+ var hasHeadings = (headings === null || headings === void 0 ? void 0 : headings.length) > 0;
644
+ var hasFooters = (footers === null || footers === void 0 ? void 0 : footers.length) > 0;
645
+ return /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
646
+ className: classes,
647
+ ref: ref,
648
+ children: [
649
+ hasHeadings && renderHeadings({
650
+ fixed: fixed,
651
+ columnsToRender: columnsToRender,
652
+ reverseColumns: reverseColumns,
653
+ hideCellsOnMobile: hideCellsOnMobile
654
+ }),
655
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(TableWrapperContext.Provider, {
656
+ value: {
657
+ columnsToRender: columnsToRender,
658
+ reverseColumns: reverseColumns,
659
+ hideCellsOnMobile: hideCellsOnMobile
660
+ },
661
+ children: /*#__PURE__*/ (0, _jsxruntime.jsxs)("table", {
662
+ className: _Table.styles.tableStyles(),
663
+ children: [
664
+ hasHeadings && renderHeadings({
665
+ hidden: true,
666
+ columnsToRender: columnsToRender,
667
+ reverseColumns: reverseColumns,
668
+ hideCellsOnMobile: hideCellsOnMobile
669
+ }),
670
+ /*#__PURE__*/ (0, _jsxruntime.jsx)("tbody", {
671
+ children: renderTableRowChildren({
672
+ children: children,
673
+ columnsToRender: columnsToRender,
674
+ reverseColumns: reverseColumns
675
+ })
676
+ }),
677
+ hasFooters && renderFooters({
678
+ fixed: fixed,
679
+ columnsToRender: columnsToRender,
680
+ reverseColumns: reverseColumns
681
+ })
682
+ ]
683
+ })
684
+ })
685
+ ]
686
+ });
687
+ }, [
688
+ children,
689
+ headings,
690
+ footers
691
+ ]);
692
+ var renderLoadingAndSelectionBar = (0, _react.useCallback)(function() {
693
+ var type = selectionState.type, resources = selectionState.resources;
694
+ var isSelecting = type !== _useIndexResourceState.SelectionType.None;
695
+ var isAllSelected = type === _useIndexResourceState.SelectionType.All;
696
+ var isSomeSelected = type === _useIndexResourceState.SelectionType.Some;
697
+ var isPageSelected = type === _useIndexResourceState.SelectionType.Page;
698
+ var handleCheckboxChange = function() {
699
+ var newType = isPageSelected || isAllSelected ? _useIndexResourceState.SelectionType.None : _useIndexResourceState.SelectionType.Page;
700
+ handleSelectionChange(newType);
701
+ };
702
+ var renderSelectionSummary = function() {
703
+ return /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
704
+ className: "flex items-center gap-2",
705
+ children: [
706
+ /*#__PURE__*/ (0, _jsxruntime.jsx)("span", {
707
+ className: "text-sm font-medium",
708
+ children: isAllSelected ? "All ".concat(itemCount, " ").concat(itemCount === 1 ? resourceName.singular : resourceName.plural, " selected") : "".concat(resources.length, " selected")
709
+ }),
710
+ hasMoreItems && /*#__PURE__*/ (0, _jsxruntime.jsx)("span", {
711
+ onClick: function() {
712
+ return handleSelectionChange(isAllSelected ? _useIndexResourceState.SelectionType.Page : _useIndexResourceState.SelectionType.All, true);
713
+ },
714
+ className: "rounded-md block text-sm font-medium cursor-pointer px-2 py-1 hover",
715
+ children: isAllSelected ? "Undo" : paginatedSelectAllActionText || "Select all"
716
+ })
717
+ ]
718
+ });
719
+ };
720
+ if (loading) {
721
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
722
+ className: _Table.styles.stickyHeaderContainerStyles({
723
+ fullWidth: true,
724
+ sticky: false,
725
+ checked: false
726
+ }),
727
+ children: /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
728
+ className: "flex items-center gap-5 h-full min-h-9 pl-4",
729
+ children: [
730
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_index.Spinner, {
731
+ size: "small"
732
+ }),
733
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)(_index.Text, {
734
+ color: "subdued",
735
+ fontWeight: "normal",
736
+ children: [
737
+ "Loading ",
738
+ resourceName.plural,
739
+ "..."
740
+ ]
741
+ })
742
+ ]
743
+ })
744
+ });
745
+ }
746
+ if (!selectable) return null;
747
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
748
+ className: _Table.styles.stickyHeaderContainerStyles({
749
+ fullWidth: isSelecting,
750
+ sticky: isHeaderSticky,
751
+ checked: isSelecting
752
+ }),
753
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
754
+ className: _Table.styles.selectBarStyles({
755
+ showSelectActions: resources.length > 0,
756
+ sticky: isHeaderSticky,
757
+ headingStyle: headingStyle
758
+ }),
759
+ children: /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
760
+ className: _Table.styles.selectBarInnerStyles({
761
+ sticky: isHeaderSticky
762
+ }),
763
+ children: [
764
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_index.Checkbox, {
765
+ checked: isPageSelected || isAllSelected,
766
+ indeterminate: isSomeSelected,
767
+ disabled: showEmptyState,
768
+ onChange: handleCheckboxChange
769
+ }),
770
+ resources.length > 0 && renderSelectionSummary()
771
+ ]
772
+ })
773
+ })
774
+ });
775
+ }, [
776
+ loading,
777
+ selectionState,
778
+ showEmptyState,
779
+ itemCount,
780
+ hasMoreItems,
781
+ isHeaderSticky
782
+ ]);
783
+ var hasFixedLeftColumns = !loading && !showEmptyState && fixedFirstColumns > 0;
784
+ var hasFixedRightColumns = !loading && !showEmptyState && fixedLastColumns > 0;
785
+ return !mounted ? null : /*#__PURE__*/ (0, _jsxruntime.jsx)(TableContext.Provider, {
786
+ value: {
787
+ selectable: selectable,
788
+ onSelectionChange: handleSelectionChange,
789
+ selectionState: selectionState,
790
+ rowHeights: rowHeights,
791
+ renderedRowIdsRef: renderedRowIdsRef,
792
+ registerRow: registerRow,
793
+ unregisterRow: unregisterRow,
794
+ increasedTableDensity: increasedTableDensity,
795
+ tableContainerRef: tableContainerRef,
796
+ cellAlignment: cellAlignment,
797
+ noBodyCellPadding: noBodyCellPadding
798
+ },
799
+ children: /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
800
+ "data-id": idRef.current,
801
+ className: _Table.styles.containerStyles({
802
+ bordered: bordered,
803
+ topBorder: topBorder
804
+ }),
805
+ ref: containerRef,
806
+ children: [
807
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
808
+ className: "relative overflow-hidden",
809
+ children: [
810
+ loading ? /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
811
+ className: "pt-9",
812
+ children: /*#__PURE__*/ (0, _jsxruntime.jsxs)("table", {
813
+ className: _Table.styles.tableStyles(),
814
+ children: [
815
+ /*#__PURE__*/ (0, _jsxruntime.jsx)("thead", {
816
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)("tr", {
817
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)("th", {
818
+ colSpan: headings.length,
819
+ children: renderLoadingAndSelectionBar()
820
+ })
821
+ })
822
+ }),
823
+ /*#__PURE__*/ (0, _jsxruntime.jsx)("tbody", {
824
+ children: _to_consumable_array(Array(skeletonRows)).map(function(_, index) {
825
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(Table.SkeletonRow, {}, index);
826
+ })
827
+ })
828
+ ]
829
+ })
830
+ }) : /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {
831
+ children: [
832
+ !showEmptyState && renderLoadingAndSelectionBar(),
833
+ showEmptyState ? null : renderTable({
834
+ ref: setTableRef
835
+ })
836
+ ]
837
+ }),
838
+ hasFixedLeftColumns ? /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
839
+ className: _Table.styles.fixedColumnsStyles({
840
+ firstColumns: true,
841
+ selectable: selectable,
842
+ sticky: isHeaderSticky,
843
+ canScrollLeft: canScrollLeft
844
+ }),
845
+ children: renderTable({
846
+ classes: "relative overflow-hidden",
847
+ fixed: true,
848
+ columnsToRender: fixedFirstColumns,
849
+ hideCellsOnMobile: true
850
+ })
851
+ }) : /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
852
+ className: _Table.styles.overflowShadowStyles({
853
+ firstColumns: true,
854
+ canScrollLeft: canScrollLeft
855
+ })
856
+ }),
857
+ hasFixedRightColumns ? /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
858
+ className: _Table.styles.fixedColumnsStyles({
859
+ firstColumns: false,
860
+ sticky: isHeaderSticky,
861
+ canScrollRight: canScrollRight
862
+ }),
863
+ children: renderTable({
864
+ classes: "relative overflow-hidden",
865
+ fixed: true,
866
+ columnsToRender: fixedLastColumns,
867
+ reverseColumns: true,
868
+ hideCellsOnMobile: true
869
+ })
870
+ }) : /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
871
+ className: _Table.styles.overflowShadowStyles({
872
+ firstColumns: false,
873
+ canScrollRight: canScrollRight
874
+ })
875
+ }),
876
+ showEmptyState ? emptyState ? emptyState : /*#__PURE__*/ (0, _jsxruntime.jsx)(_index.EmptyState, {
877
+ title: "No ".concat(resourceName.plural, " found"),
878
+ description: "Try changing the filters or search term"
879
+ }) : null
880
+ ]
881
+ }),
882
+ selectionState.type !== _useIndexResourceState.SelectionType.None && /*#__PURE__*/ (0, _jsxruntime.jsx)(Table.BulkActions, {
883
+ bulkActions: bulkActions,
884
+ promotedBulkActions: promotedBulkActions
885
+ })
886
+ ]
887
+ })
888
+ });
889
+ }
890
+ Table.displayName = "Table";
891
+ /**
892
+ * Represents a row within the Table.
893
+ * @param {Object} props - Row properties.
894
+ * @param {string} props.id - Unique row identifier.
895
+ * @param {boolean} props.selected - Whether the row is selected.
896
+ * @param {Function} props.onClick - Click handler.
897
+ * @param {number} props.position - Position index.
898
+ * @param {React.ReactNode} props.children - Row content.
899
+ * @returns {React.ReactElement} The rendered Table.Row component.
900
+ */ function Row(_param) {
901
+ var id = _param.id, selected = _param.selected, onClick = _param.onClick, position = _param.position, children = _param.children, rest = _object_without_properties(_param, [
902
+ "id",
903
+ "selected",
904
+ "onClick",
905
+ "position",
906
+ "children"
907
+ ]);
908
+ var _useContext = (0, _react.useContext)(TableContext), onSelectionChange = _useContext.onSelectionChange, selectable = _useContext.selectable, selectionState = _useContext.selectionState, rowHeights = _useContext.rowHeights, registerRow = _useContext.registerRow, unregisterRow = _useContext.unregisterRow;
909
+ var _useContext1 = (0, _react.useContext)(TableWrapperContext), columnsToRender = _useContext1.columnsToRender, reverseColumns = _useContext1.reverseColumns;
910
+ var isSelected = (0, _react.useMemo)(function() {
911
+ return selected || selectionState.resources.includes(id);
912
+ }, [
913
+ selected,
914
+ selectionState.resources,
915
+ id
916
+ ]);
917
+ var visibleChildren = (0, _react.useMemo)(function() {
918
+ if (!columnsToRender) return children;
919
+ var sliceIndex = selectable ? columnsToRender - 1 : columnsToRender;
920
+ return reverseColumns ? children.slice(-columnsToRender) : children.slice(0, sliceIndex);
921
+ }, [
922
+ children,
923
+ columnsToRender,
924
+ selectable,
925
+ reverseColumns
926
+ ]);
927
+ var rowIndexRef = (0, _react.useRef)(null);
928
+ var setRowRef = (0, _react.useCallback)(function(node) {
929
+ var _node_parentNode;
930
+ if (!node || rowIndexRef.current !== null) return;
931
+ if (((_node_parentNode = node.parentNode) === null || _node_parentNode === void 0 ? void 0 : _node_parentNode.tagName) === "TBODY") {
932
+ rowIndexRef.current = node.rowIndex;
933
+ }
934
+ }, []);
935
+ var _rowIndexRef_current;
936
+ var rowIndex = (_rowIndexRef_current = rowIndexRef.current) !== null && _rowIndexRef_current !== void 0 ? _rowIndexRef_current : -1;
937
+ (0, _react.useEffect)(function() {
938
+ if (!selectable) return;
939
+ registerRow(id);
940
+ return function() {
941
+ return unregisterRow(id);
942
+ };
943
+ }, [
944
+ id,
945
+ registerRow,
946
+ unregisterRow
947
+ ]);
948
+ var handleRowClick = function(e) {
949
+ var classList = e.target.classList;
950
+ if (classList.contains("Litho-Checkbox__Control") || classList.contains("Litho-Checkbox__Input")) {
951
+ return;
952
+ }
953
+ if (selectionState.resources.length > 0) {
954
+ onSelectionChange(_useIndexResourceState.SelectionType.Single, !isSelected, id);
955
+ }
956
+ onClick === null || onClick === void 0 ? void 0 : onClick();
957
+ };
958
+ var handleCheckboxSelectionChange = (0, _react.useCallback)(function() {
959
+ if (onSelectionChange) {
960
+ onSelectionChange(_useIndexResourceState.SelectionType.Single, !isSelected, id);
961
+ }
962
+ }, [
963
+ onSelectionChange,
964
+ isSelected,
965
+ id
966
+ ]);
967
+ var interactive = selectable || !!onClick;
968
+ var dataProps = {};
969
+ Object.keys(rest).forEach(function(key) {
970
+ if (key.startsWith('data-')) {
971
+ dataProps[key] = rest[key];
972
+ }
973
+ });
974
+ var _rowHeights_;
975
+ return /*#__PURE__*/ (0, _jsxruntime.jsxs)("tr", _object_spread_props(_object_spread({
976
+ ref: setRowRef,
977
+ id: id,
978
+ onClick: handleRowClick,
979
+ "data-position": position || rowIndex ? rowIndex - 1 : undefined,
980
+ "data-interactive": interactive,
981
+ className: _Table.styles.rowStyles({
982
+ selected: isSelected,
983
+ interactive: interactive
984
+ }),
985
+ style: {
986
+ height: (_rowHeights_ = rowHeights === null || rowHeights === void 0 ? void 0 : rowHeights[rowIndex - 1]) !== null && _rowHeights_ !== void 0 ? _rowHeights_ : rowHeights === null || rowHeights === void 0 ? void 0 : rowHeights[position]
987
+ }
988
+ }, dataProps), {
989
+ children: [
990
+ selectable && !reverseColumns && /*#__PURE__*/ (0, _jsxruntime.jsx)(Table.Cell, {
991
+ selectionCell: true,
992
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_index.Checkbox, {
993
+ checked: isSelected,
994
+ onChange: handleCheckboxSelectionChange
995
+ })
996
+ }),
997
+ visibleChildren
998
+ ]
999
+ }));
1000
+ }
1001
+ Table.Row = Row;
1002
+ Table.Row.displayName = "Table.Row";
1003
+ /**
1004
+ * Represents a cell within a table row.
1005
+ * @param {Object} props - Cell properties.
1006
+ * @param {string} [props.alignment="start"] - Text alignment.
1007
+ * @param {boolean} [props.selectionCell=false] - Whether this is a selection cell.
1008
+ * @param {React.ReactNode} props.children - Cell content.
1009
+ * @returns {React.ReactElement} The rendered Table.Cell component.
1010
+ */ function Cell(param) {
1011
+ var tmp = param.alignment, _alignment = tmp === void 0 ? "start" : tmp, children = param.children, _param_selectionCell = param.selectionCell, selectionCell = _param_selectionCell === void 0 ? false : _param_selectionCell;
1012
+ var _useContext = (0, _react.useContext)(TableContext), cellAlignment = _useContext.cellAlignment, increasedTableDensity = _useContext.increasedTableDensity, selectable = _useContext.selectable, noBodyCellPadding = _useContext.noBodyCellPadding;
1013
+ var _useContext1 = (0, _react.useContext)(TableWrapperContext), hideCellsOnMobile = _useContext1.hideCellsOnMobile, reverseColumns = _useContext1.reverseColumns, columnsToRender = _useContext1.columnsToRender;
1014
+ var columnCount = (cellAlignment === null || cellAlignment === void 0 ? void 0 : cellAlignment.length) || 0;
1015
+ var cellIndexRef = (0, _react.useRef)(null);
1016
+ var setCellRef = (0, _react.useCallback)(function(node) {
1017
+ if (!node || cellIndexRef.current !== null) return;
1018
+ var parentRow = node.parentNode;
1019
+ if ((parentRow === null || parentRow === void 0 ? void 0 : parentRow.tagName) === "TR") {
1020
+ var totalCells = parentRow.children.length;
1021
+ var index = node.cellIndex;
1022
+ cellIndexRef.current = reverseColumns ? totalCells - columnsToRender + index - (totalCells - columnCount) : index;
1023
+ }
1024
+ }, [
1025
+ reverseColumns,
1026
+ columnsToRender,
1027
+ columnCount
1028
+ ]);
1029
+ var _cellIndexRef_current;
1030
+ var cellIndex = (_cellIndexRef_current = cellIndexRef.current) !== null && _cellIndexRef_current !== void 0 ? _cellIndexRef_current : -1;
1031
+ var alignment = (cellAlignment === null || cellAlignment === void 0 ? void 0 : cellAlignment[cellIndex]) || _alignment;
1032
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)("td", {
1033
+ ref: setCellRef,
1034
+ className: _Table.styles.cellStyles({
1035
+ alignment: alignment,
1036
+ selectionCell: selectionCell,
1037
+ increasedTableDensity: increasedTableDensity,
1038
+ hidden: hideCellsOnMobile && !selectionCell,
1039
+ tableIsSelectable: selectable,
1040
+ noBodyCellPadding: noBodyCellPadding
1041
+ }),
1042
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
1043
+ className: _Table.styles.cellContentStyles({
1044
+ alignment: alignment
1045
+ }),
1046
+ children: children
1047
+ })
1048
+ });
1049
+ }
1050
+ Table.Cell = Cell;
1051
+ Table.Cell.displayName = "Table.Cell";
1052
+ /**
1053
+ * Footer component for the Table.
1054
+ * Displays pagination controls and optionally the total result count.
1055
+ *
1056
+ * @param {Object} props - The component props.
1057
+ * @param {boolean} props.hasNextPage - Whether there is a next page.
1058
+ * @param {boolean} props.hasPreviousPage - Whether there is a previous page.
1059
+ * @param {Function} props.onNext - Callback function for the next page action.
1060
+ * @param {Function} props.onPrevious - Callback function for the previous page action.
1061
+ * @param {boolean} [props.showTotalResultCount=false] - Whether to show the total result count.
1062
+ * @param {number} [props.total=0] - The total number of results.
1063
+ * @param {boolean} [props.paddedHalf=false] - Whether to apply half padding.
1064
+ * @returns {JSX.Element|null} The Footer component or null if no pagination is required.
1065
+ */ function Footer(param) {
1066
+ var hasNextPage = param.hasNextPage, hasPreviousPage = param.hasPreviousPage, onNext = param.onNext, onPrevious = param.onPrevious, _param_showTotalResultCount = param.showTotalResultCount, showTotalResultCount = _param_showTotalResultCount === void 0 ? false : _param_showTotalResultCount, _param_total = param.total, total = _param_total === void 0 ? 0 : _param_total, _param_paddedHalf = param.paddedHalf, paddedHalf = _param_paddedHalf === void 0 ? false : _param_paddedHalf;
1067
+ if (!hasNextPage && !hasPreviousPage) return null;
1068
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_index.Card.Section, {
1069
+ borderTop: true,
1070
+ paddedHalf: paddedHalf,
1071
+ children: /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
1072
+ className: "flex justify-start",
1073
+ children: [
1074
+ /*#__PURE__*/ (0, _jsxruntime.jsx)(_index.Pagination, {
1075
+ hasPrevious: hasPreviousPage,
1076
+ hasNext: hasNextPage,
1077
+ onNext: onNext,
1078
+ onPrevious: onPrevious
1079
+ }),
1080
+ showTotalResultCount && /*#__PURE__*/ (0, _jsxruntime.jsxs)(_index.Text, {
1081
+ color: "subdued",
1082
+ children: [
1083
+ total,
1084
+ " ",
1085
+ total === 1 ? "result" : "results"
1086
+ ]
1087
+ })
1088
+ ]
1089
+ })
1090
+ });
1091
+ }
1092
+ Table.Footer = Footer;
1093
+ Table.Footer.displayName = "Table.Footer";
1094
+ /**
1095
+ * BulkActions component for the Table.
1096
+ * Displays bulk action buttons with optional promoted actions.
1097
+ *
1098
+ * @param {Object} props - The component props.
1099
+ * @param {Array} [props.bulkActions=[]] - List of bulk actions.
1100
+ * @param {Array} [props.promotedBulkActions=[]] - List of promoted bulk actions.
1101
+ * @returns {JSX.Element} The BulkActions component.
1102
+ */ function BulkActions(param) {
1103
+ var _param_bulkActions = param.bulkActions, bulkActions = _param_bulkActions === void 0 ? [] : _param_bulkActions, _param_promotedBulkActions = param.promotedBulkActions, promotedBulkActions = _param_promotedBulkActions === void 0 ? [] : _param_promotedBulkActions;
1104
+ var _useState = _sliced_to_array((0, _react.useState)(null), 2), activeBulkAction = _useState[0], setActiveBulkAction = _useState[1];
1105
+ var handleToggle = function(index) {
1106
+ setActiveBulkAction(activeBulkAction === index ? null : index);
1107
+ };
1108
+ var renderPopover = function(index, title, actions) {
1109
+ var icon = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : null, disclosure = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : true;
1110
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_index.Popover, {
1111
+ active: activeBulkAction === index,
1112
+ activator: /*#__PURE__*/ (0, _jsxruntime.jsx)(_index.Button, {
1113
+ onClick: function() {
1114
+ return handleToggle(index);
1115
+ },
1116
+ disclosure: disclosure,
1117
+ icon: icon,
1118
+ children: title
1119
+ }),
1120
+ preferredAlignment: "left",
1121
+ preferredPosition: "above",
1122
+ onClose: function() {
1123
+ return setActiveBulkAction(null);
1124
+ },
1125
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_index.ActionList, {
1126
+ items: actions,
1127
+ onActionAnyItem: function() {
1128
+ return setActiveBulkAction(null);
1129
+ }
1130
+ })
1131
+ }, "bulk-action-".concat(index));
1132
+ };
1133
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
1134
+ className: _Table.styles.bulkActionStyles(),
1135
+ children: /*#__PURE__*/ (0, _jsxruntime.jsxs)(_index.ButtonGroup, {
1136
+ segmented: true,
1137
+ children: [
1138
+ promotedBulkActions.map(function(action, index) {
1139
+ return renderPopover(index, action.title, action.actions, action.icon, !action.icon);
1140
+ }),
1141
+ bulkActions.length > 0 && renderPopover(promotedBulkActions.length + 1, promotedBulkActions.length > 0 ? "More actions" : "Bulk actions", bulkActions)
1142
+ ]
1143
+ })
1144
+ });
1145
+ }
1146
+ Table.BulkActions = BulkActions;
1147
+ Table.BulkActions.displayName = "Table.BulkActions";
1148
+ /**
1149
+ * SkeletonRow component for displaying loading placeholders in the Table.
1150
+ *
1151
+ * @param {Object} props - The component props.
1152
+ * @param {number} [props.columns=1] - The number of columns to render.
1153
+ * @returns {JSX.Element} The SkeletonRow component.
1154
+ */ function SkeletonRow(param) {
1155
+ var _param_columns = param.columns, columns = _param_columns === void 0 ? 1 : _param_columns;
1156
+ var selectable = (0, _react.useContext)(TableContext).selectable;
1157
+ return /*#__PURE__*/ (0, _jsxruntime.jsxs)("tr", {
1158
+ className: _Table.styles.rowStyles(),
1159
+ children: [
1160
+ selectable && /*#__PURE__*/ (0, _jsxruntime.jsx)(Table.Cell, {
1161
+ selectionCell: true,
1162
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
1163
+ className: "min-h-9 flex items-center",
1164
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
1165
+ className: "h-5 w-5 rounded-md bg-tint-4 dark:bg-tint-alt-4"
1166
+ })
1167
+ })
1168
+ }),
1169
+ Array.from({
1170
+ length: columns
1171
+ }, function(_, index) {
1172
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(Table.Cell, {
1173
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_index.SkeletonText, {
1174
+ lines: 1,
1175
+ className: "w-96"
1176
+ })
1177
+ }, index);
1178
+ })
1179
+ ]
1180
+ });
1181
+ }
1182
+ Table.SkeletonRow = SkeletonRow;
1183
+ Table.SkeletonRow.displayName = "Table.SkeletonRow";
1184
+ var _default = Table;