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