impact-ui 4.0.2 → 4.0.3-tableV36.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 (145) hide show
  1. package/dist/_virtual/index2.js +2 -2
  2. package/dist/_virtual/index3.js +2 -2
  3. package/dist/components/AccordionModern/index.js +1 -1
  4. package/dist/components/Badge/index.js +1 -1
  5. package/dist/components/BottomSheet/index.d.ts +1 -1
  6. package/dist/components/BottomSheet/index.d.ts.map +1 -1
  7. package/dist/components/BottomSheet/index.js +7 -1
  8. package/dist/components/Breadcrumbs/index.js +1 -1
  9. package/dist/components/Button/index.js +1 -1
  10. package/dist/components/ButtonGroup/index.js +1 -1
  11. package/dist/components/Chart/ChartSkeleton.d.ts +23 -0
  12. package/dist/components/Chart/ChartSkeleton.d.ts.map +1 -0
  13. package/dist/components/Chart/ChartSkeleton.js +171 -0
  14. package/dist/components/Chart/index.d.ts +4 -1
  15. package/dist/components/Chart/index.d.ts.map +1 -1
  16. package/dist/components/Chart/index.js +15 -3
  17. package/dist/components/Chatbot/index.js +1 -1
  18. package/dist/components/Chips/index.js +1 -1
  19. package/dist/components/CommentsPanel/CommentsPanel.impl.js +1 -1
  20. package/dist/components/DatePicker/index.js +1 -1
  21. package/dist/components/DateRangePicker/index.js +1 -1
  22. package/dist/components/FileUpload/index.js +1 -1
  23. package/dist/components/FilterPanel/index.js +1 -1
  24. package/dist/components/FiltersStrip/FilterSlider.js +1 -1
  25. package/dist/components/FiltersStrip/index.js +1 -1
  26. package/dist/components/Input/index.js +1 -1
  27. package/dist/components/KeyboardShortCuts/ShortcutLandingPage.js +1 -1
  28. package/dist/components/KeyboardShortCuts/ShortcutModal.js +1 -1
  29. package/dist/components/KeyboardShortCuts/allSetBox.js +1 -1
  30. package/dist/components/KeyboardShortCuts/index.js +1 -1
  31. package/dist/components/KeyboardShortCuts/tutorial.js +1 -1
  32. package/dist/components/Loader/Loader.types.d.ts +3 -3
  33. package/dist/components/Loader/Loader.types.d.ts.map +1 -1
  34. package/dist/components/Loader/index.d.ts.map +1 -1
  35. package/dist/components/Loader/index.js +4 -2
  36. package/dist/components/Menu/IconMenuItem.js +1 -1
  37. package/dist/components/Menu/NestedMenuItem.js +1 -1
  38. package/dist/components/Menu/index.js +1 -1
  39. package/dist/components/Menu/nestedMenuItemsFromObject.js +1 -1
  40. package/dist/components/Modal/index.js +1 -1
  41. package/dist/components/MonthPicker/index.js +1 -1
  42. package/dist/components/MonthRangePicker/index.js +1 -1
  43. package/dist/components/Panel/index.js +1 -1
  44. package/dist/components/Popover/index.js +1 -1
  45. package/dist/components/Prompt/index.js +1 -1
  46. package/dist/components/Select/index.d.ts.map +1 -1
  47. package/dist/components/Select/index.js +2 -2
  48. package/dist/components/Skeleton/Skeleton.types.d.ts +39 -0
  49. package/dist/components/Skeleton/Skeleton.types.d.ts.map +1 -0
  50. package/dist/components/Skeleton/index.d.ts +13 -0
  51. package/dist/components/Skeleton/index.d.ts.map +1 -0
  52. package/dist/components/Skeleton/index.js +94 -0
  53. package/dist/components/Stepper/index.js +1 -1
  54. package/dist/components/Table/AdvanceSearchModalItem.js +1 -1
  55. package/dist/components/Table/AgGridHeader.d.ts.map +1 -1
  56. package/dist/components/Table/AgGridHeader.js +33 -24
  57. package/dist/components/Table/NewAdvanceSearchModal/NewAdvanceSearchModalItem.js +1 -1
  58. package/dist/components/Table/index.js +1 -1
  59. package/dist/components/TableChat/EmptyContainer.js +1 -1
  60. package/dist/components/TableChat/TableChatSidePanel.js +1 -1
  61. package/dist/components/TableChat/components/TableChatLeftSection/AddChatContainer/AddChatContainer.js +1 -1
  62. package/dist/components/TableChat/components/TableChatLeftSection/TableChatChannelHeader.js +1 -1
  63. package/dist/components/TableChat/components/TableChatRightSection/AvatarGroup/AvatarGroup.js +1 -1
  64. package/dist/components/TableChat/components/TableChatRightSection/ChatDefaultMessageType/ChatDefaultMessageType.js +1 -1
  65. package/dist/components/TableChat/components/TableChatRightSection/ChatDeleteMessageType/ChatDeletedMessageType.js +1 -1
  66. package/dist/components/TableChat/components/TableChatRightSection/ChatHeader/ChatHeader.js +1 -1
  67. package/dist/components/TableChat/components/TableChatRightSection/ChatInput/ChatInput.js +1 -1
  68. package/dist/components/TableChat/components/TableChatRightSection/ChatMessages/ChatMessage.js +1 -1
  69. package/dist/components/TableChat/components/TableChatRightSection/ChatNotificationSettings/ChatNotificationSettings.js +1 -1
  70. package/dist/components/TableChat/components/TableChatRightSection/TableChatRightSection.js +1 -1
  71. package/dist/components/TableChat/components/TextEditor/EditorToolbar.js +1 -1
  72. package/dist/components/TableChat/components/TextEditor/Mention.js +1 -1
  73. package/dist/components/TableChat/components/TextEditor/MentionList.js +1 -1
  74. package/dist/components/TableOld/AgGridHeader.d.ts.map +1 -1
  75. package/dist/components/TableOld/AgGridHeader.js +15 -13
  76. package/dist/components/TableOld/index.js +1 -1
  77. package/dist/components/TableV36/AdvanceSearchModalItem.d.ts +27 -0
  78. package/dist/components/TableV36/AdvanceSearchModalItem.d.ts.map +1 -0
  79. package/dist/components/TableV36/AdvanceSortModal.d.ts +8 -0
  80. package/dist/components/TableV36/AdvanceSortModal.d.ts.map +1 -0
  81. package/dist/components/TableV36/AdvanceSortModal.js +297 -0
  82. package/dist/components/TableV36/AgGridHeader.d.ts +16 -0
  83. package/dist/components/TableV36/AgGridHeader.d.ts.map +1 -0
  84. package/dist/components/TableV36/AgGridHeader.js +799 -0
  85. package/dist/components/TableV36/CommentsPortal.d.ts +31 -0
  86. package/dist/components/TableV36/CommentsPortal.d.ts.map +1 -0
  87. package/dist/components/TableV36/CommentsPortal.js +362 -0
  88. package/dist/components/TableV36/NewAdvanceSearchModal/NewAdvanceSearchModal.d.ts +13 -0
  89. package/dist/components/TableV36/NewAdvanceSearchModal/NewAdvanceSearchModal.d.ts.map +1 -0
  90. package/dist/components/TableV36/NewAdvanceSearchModal/NewAdvanceSearchModal.js +282 -0
  91. package/dist/components/TableV36/NewAdvanceSearchModal/NewAdvanceSearchModalItem.d.ts +16 -0
  92. package/dist/components/TableV36/NewAdvanceSearchModal/NewAdvanceSearchModalItem.d.ts.map +1 -0
  93. package/dist/components/TableV36/NewAdvanceSearchModal/NewAdvanceSearchModalItem.js +302 -0
  94. package/dist/components/TableV36/NoComments.d.ts +16 -0
  95. package/dist/components/TableV36/NoComments.d.ts.map +1 -0
  96. package/dist/components/TableV36/NoComments.js +237 -0
  97. package/dist/components/TableV36/Table.types.d.ts +89 -0
  98. package/dist/components/TableV36/Table.types.d.ts.map +1 -0
  99. package/dist/components/TableV36/actionBar.d.ts +7 -0
  100. package/dist/components/TableV36/actionBar.d.ts.map +1 -0
  101. package/dist/components/TableV36/actionBar.js +31 -0
  102. package/dist/components/TableV36/advanceSearchModal.d.ts +20 -0
  103. package/dist/components/TableV36/advanceSearchModal.d.ts.map +1 -0
  104. package/dist/components/TableV36/filterUtils.d.ts +133 -0
  105. package/dist/components/TableV36/filterUtils.d.ts.map +1 -0
  106. package/dist/components/TableV36/filterUtils.js +478 -0
  107. package/dist/components/TableV36/index.d.ts +3 -0
  108. package/dist/components/TableV36/index.d.ts.map +1 -0
  109. package/dist/components/TableV36/index.js +1603 -0
  110. package/dist/components/TableV36/mockData.d.ts +39 -0
  111. package/dist/components/TableV36/mockData.d.ts.map +1 -0
  112. package/dist/components/TableV36/tableFunctions.d.ts +63 -0
  113. package/dist/components/TableV36/tableFunctions.d.ts.map +1 -0
  114. package/dist/components/TableV36/tableFunctions.js +1796 -0
  115. package/dist/components/TableV36/tableHeader.d.ts +80 -0
  116. package/dist/components/TableV36/tableHeader.d.ts.map +1 -0
  117. package/dist/components/TableV36/tableHeader.js +396 -0
  118. package/dist/components/TableV36/tableIcons.d.ts +3 -0
  119. package/dist/components/TableV36/tableIcons.d.ts.map +1 -0
  120. package/dist/components/TableV36/tableMoreOptions.d.ts +52 -0
  121. package/dist/components/TableV36/tableMoreOptions.d.ts.map +1 -0
  122. package/dist/components/TableV36/tableMoreOptions.js +324 -0
  123. package/dist/components/TableV36/tablePagination.d.ts +7 -0
  124. package/dist/components/TableV36/tablePagination.d.ts.map +1 -0
  125. package/dist/components/TableV36/tablePagination.js +67 -0
  126. package/dist/components/TableV36/tableSettings.d.ts +41 -0
  127. package/dist/components/TableV36/tableSettings.d.ts.map +1 -0
  128. package/dist/components/TableV36/tableSettings.js +317 -0
  129. package/dist/components/TableV36/withCommentIcon.d.ts +7 -0
  130. package/dist/components/TableV36/withCommentIcon.d.ts.map +1 -0
  131. package/dist/components/TableV36/withCommentIcon.js +108 -0
  132. package/dist/components/Tag/index.js +1 -1
  133. package/dist/components/TextArea/index.js +1 -1
  134. package/dist/components/common/MentionEditor/MentionList/index.js +1 -1
  135. package/dist/components/common/MentionEditor/index.js +1 -1
  136. package/dist/components/index.d.ts +3 -0
  137. package/dist/components/index.d.ts.map +1 -1
  138. package/dist/components/index.js +5 -0
  139. package/dist/mcp-component-registry.json +1 -1
  140. package/dist/node_modules/prop-types/index.js +1 -1
  141. package/dist/node_modules/react-is/index.js +1 -1
  142. package/dist/styles/style.css +1 -1
  143. package/dist/utils/helper.d.ts +1 -0
  144. package/dist/utils/helper.d.ts.map +1 -1
  145. package/package.json +5 -5
@@ -0,0 +1,1796 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { forwardRef, useState, useRef, useMemo, useEffect, useCallback, memo } from "react";
3
+ import { useSensors, useSensor, MouseSensor, TouchSensor, DndContext, closestCenter, DragOverlay } from "@dnd-kit/core";
4
+ import { arrayMove, SortableContext, useSortable } from "@dnd-kit/sortable";
5
+ import { CSS } from "@dnd-kit/utilities";
6
+ import { PersonUser as PersonUser_default, Globe as Globe_default } from "../../node_modules/@impactsmartsuite/impact-icons/dist/index.js";
7
+ import default_1$1 from "../../node_modules/@mui/icons-material/KeyboardArrowDown.js";
8
+ import default_1$3 from "../../node_modules/@mui/icons-material/KeyboardArrowRight.js";
9
+ import default_1 from "../../node_modules/@mui/icons-material/KeyboardArrowUp.js";
10
+ import default_1$2 from "../../node_modules/@mui/icons-material/Search.js";
11
+ import { getAssetUrl } from "../../utils/assetBase.js";
12
+ import { debounce } from "../../utils/debounce.js";
13
+ import { isViewNameUnique } from "../../utils/helper.js";
14
+ import { Badge } from "../Badge/index.js";
15
+ import { Button } from "../Button/index.js";
16
+ import { Checkbox } from "../Checkbox/index.js";
17
+ import { Input } from "../Input/index.js";
18
+ import { Modal } from "../Modal/index.js";
19
+ import { Prompt } from "../Prompt/index.js";
20
+ import { RadioButtonGroup } from "../RadioButtonGroup/index.js";
21
+ import { Select } from "../Select/index.js";
22
+ import IconButton from "../../node_modules/@mui/material/IconButton/IconButton.js";
23
+ import DragIndicator from "../../node_modules/@mui/icons-material/esm/DragIndicator.js";
24
+ const saveViewIcon = getAssetUrl("icons/saveViewIcon.svg");
25
+ const saveViewEditIcon = getAssetUrl("icons/saveViewEditIcon.svg");
26
+ const saveViewDeleteIcon = getAssetUrl("icons/saveViewDeleteIcon.svg");
27
+ const defaultViewIcon = getAssetUrl("icons/defaultViewIcon.svg");
28
+ const defaultViewActiveIcon = getAssetUrl("icons/defaultViewIconActive.svg");
29
+ const DEFAULT_VIEW_TYPE_ICONS = {
30
+ global: /* @__PURE__ */ jsx(Globe_default, { height: 16, width: 16 }),
31
+ personal: /* @__PURE__ */ jsx(PersonUser_default, { height: 16, width: 16 })
32
+ };
33
+ const getViewTypeIcon = (viewType, viewTypeOptions) => {
34
+ var _a;
35
+ const customIcon = (_a = viewTypeOptions == null ? void 0 : viewTypeOptions.find((option) => option.value === viewType)) == null ? void 0 : _a.icon;
36
+ return customIcon || DEFAULT_VIEW_TYPE_ICONS[viewType] || null;
37
+ };
38
+ const onColMenuFreezeClick = (params) => {
39
+ const { pinned } = params.column;
40
+ if (pinned) {
41
+ freezeColumn(params, false);
42
+ } else {
43
+ freezeColumn(params, true);
44
+ }
45
+ };
46
+ const getTableMeta = (api) => {
47
+ if (!api) return null;
48
+ if (!api.__impactTableMeta) {
49
+ api.__impactTableMeta = {};
50
+ }
51
+ return api.__impactTableMeta;
52
+ };
53
+ const freezeColumn = (params, isPinned) => {
54
+ const { colId } = params.column;
55
+ params.api.applyColumnState({
56
+ state: [{ colId, pinned: isPinned ? "left" : null }]
57
+ });
58
+ };
59
+ const onColMenuAutoAdjustClick = (params) => {
60
+ const colDefExtra = { ...params.column.colDef.extra };
61
+ params.column.colDef.extra = colDefExtra;
62
+ params.api.autoSizeColumns([params.column]);
63
+ };
64
+ const sortFunc = (columnData, sortBy, api) => {
65
+ api.api.applyColumnState({
66
+ state: [{ colId: columnData.colId, sort: sortBy }],
67
+ defaultState: { sort: null }
68
+ });
69
+ };
70
+ const getMainMenuItems = (params) => {
71
+ var _a, _b, _c;
72
+ if (!(params == null ? void 0 : params.column)) {
73
+ return [];
74
+ }
75
+ const { onFontSizeChange, onNumberFormatChange } = params;
76
+ const { colDef, pinned, sort, actualWidth } = params.column;
77
+ const columnMenuItems = [];
78
+ columnMenuItems.push(
79
+ {
80
+ name: "Column Settings",
81
+ cssClasses: ["settings-main-container"]
82
+ },
83
+ "separator"
84
+ );
85
+ columnMenuItems.push({
86
+ name: "Sort",
87
+ subMenu: [
88
+ {
89
+ name: "Sort A to Z",
90
+ action: () => {
91
+ sortFunc(params.column, "asc", params);
92
+ },
93
+ checked: sort === "asc"
94
+ },
95
+ {
96
+ name: "Sort Z to A",
97
+ checked: sort === "desc",
98
+ action: () => {
99
+ sortFunc(params.column, "desc", params);
100
+ }
101
+ },
102
+ {
103
+ name: "Reset",
104
+ action: () => {
105
+ sortFunc(params.column, null, params);
106
+ }
107
+ }
108
+ ],
109
+ disabled: !(colDef == null ? void 0 : colDef.sortable)
110
+ });
111
+ columnMenuItems.push({
112
+ name: pinned ? "Unfreeze Column" : "Freeze Column",
113
+ action: () => {
114
+ onColMenuFreezeClick(params);
115
+ }
116
+ });
117
+ columnMenuItems.push({
118
+ name: "Column width",
119
+ subMenu: [
120
+ {
121
+ name: "Auto Adjust",
122
+ action: () => {
123
+ onColMenuAutoAdjustClick(params);
124
+ },
125
+ // if extra.width property is not present- column is auto adjusted
126
+ checked: actualWidth !== ((_a = colDef == null ? void 0 : colDef.extra) == null ? void 0 : _a.width)
127
+ },
128
+ {
129
+ name: "Custom width",
130
+ action: () => {
131
+ var _a2;
132
+ params.api.setColumnWidths([
133
+ { key: params.column.colId, newWidth: (_a2 = colDef == null ? void 0 : colDef.extra) == null ? void 0 : _a2.width }
134
+ ]);
135
+ },
136
+ // if extra.width property is present- column has custom width
137
+ checked: ((_b = colDef == null ? void 0 : colDef.extra) == null ? void 0 : _b.width) === actualWidth,
138
+ disabled: !((_c = colDef == null ? void 0 : colDef.extra) == null ? void 0 : _c.width)
139
+ }
140
+ ]
141
+ });
142
+ columnMenuItems.push({
143
+ name: "Wrap Text",
144
+ disabled: true
145
+ });
146
+ columnMenuItems.push(
147
+ {
148
+ name: "Format",
149
+ cssClasses: ["format-main-container"]
150
+ },
151
+ "separator"
152
+ );
153
+ columnMenuItems.push({
154
+ name: "Numeric Values",
155
+ subMenu: [
156
+ {
157
+ name: "Full Number",
158
+ action: () => onNumberFormatChange("full")
159
+ },
160
+ {
161
+ name: "In K",
162
+ action: () => onNumberFormatChange("thousand")
163
+ },
164
+ {
165
+ name: "In Mn",
166
+ action: () => onNumberFormatChange("million")
167
+ },
168
+ {
169
+ name: "In Bn",
170
+ action: () => onNumberFormatChange("billion")
171
+ }
172
+ ],
173
+ disabled: !onFontSizeChange
174
+ });
175
+ columnMenuItems.push({
176
+ name: "Font Size",
177
+ subMenu: [
178
+ {
179
+ name: "Small Font",
180
+ action: () => onFontSizeChange("small")
181
+ },
182
+ {
183
+ name: "Medium Font",
184
+ action: () => onFontSizeChange("medium")
185
+ },
186
+ {
187
+ name: "Large Font",
188
+ action: () => onFontSizeChange("large")
189
+ }
190
+ ],
191
+ disabled: !onNumberFormatChange
192
+ });
193
+ return columnMenuItems;
194
+ };
195
+ const filterColumnsBySearch = (columns, searchText) => {
196
+ if (!searchText) return columns;
197
+ return columns.map((column) => {
198
+ const matches = column.headerName.toLowerCase().includes(searchText);
199
+ const filteredChildren = column.children ? filterColumnsBySearch(column.children, searchText) : null;
200
+ if (matches || (filteredChildren == null ? void 0 : filteredChildren.length) > 0) {
201
+ return {
202
+ ...column,
203
+ children: filteredChildren
204
+ };
205
+ }
206
+ return null;
207
+ }).filter(Boolean);
208
+ };
209
+ const getDirectColumnIds = (columns) => (columns || []).map((col) => col.colId).filter(Boolean);
210
+ const getTopLevelColumnIds = getDirectColumnIds;
211
+ const findColumnById = (columns, colId) => {
212
+ var _a;
213
+ for (const col of columns || []) {
214
+ if (col.colId === colId) return col;
215
+ if ((_a = col.children) == null ? void 0 : _a.length) {
216
+ const found = findColumnById(col.children, colId);
217
+ if (found) return found;
218
+ }
219
+ }
220
+ return null;
221
+ };
222
+ const findColumnLocation = (columns, colId, parent = null) => {
223
+ var _a;
224
+ for (const col of columns || []) {
225
+ if (col.colId === colId) {
226
+ return { column: col, parent, siblings: columns };
227
+ }
228
+ if ((_a = col.children) == null ? void 0 : _a.length) {
229
+ const found = findColumnLocation(col.children, colId, col);
230
+ if (found) return found;
231
+ }
232
+ }
233
+ return null;
234
+ };
235
+ const reorderSiblingsInTree = (columns, parentId, siblingOrder) => (columns || []).map((col) => {
236
+ var _a, _b;
237
+ if (col.colId === parentId && ((_a = col.children) == null ? void 0 : _a.length)) {
238
+ const byId = new Map(col.children.map((c) => [c.colId, c]));
239
+ const ordered = siblingOrder.map((id) => byId.get(id)).filter(Boolean);
240
+ const orderedSet = new Set(siblingOrder);
241
+ const rest = col.children.filter((c) => !orderedSet.has(c.colId));
242
+ return { ...col, children: [...ordered, ...rest] };
243
+ }
244
+ if ((_b = col.children) == null ? void 0 : _b.length) {
245
+ return {
246
+ ...col,
247
+ children: reorderSiblingsInTree(col.children, parentId, siblingOrder)
248
+ };
249
+ }
250
+ return col;
251
+ });
252
+ const collectLeafColIds = (column) => {
253
+ var _a;
254
+ if (!((_a = column == null ? void 0 : column.children) == null ? void 0 : _a.length)) {
255
+ return (column == null ? void 0 : column.colId) ? [column.colId] : [];
256
+ }
257
+ return column.children.flatMap((child) => collectLeafColIds(child));
258
+ };
259
+ const buildOrderedLeafIds = (topLevelColumns, topLevelOrder) => {
260
+ const byId = new Map(topLevelColumns.map((c) => [c.colId, c]));
261
+ return topLevelOrder.flatMap((id) => {
262
+ const col = byId.get(id);
263
+ return col ? collectLeafColIds(col) : [id];
264
+ });
265
+ };
266
+ const applyColumnReorderToGrid = (api, { allColumns, frozenOrder, scrollableOrder, pinChanges, childReorder }) => {
267
+ if (!api) return;
268
+ let columns = allColumns;
269
+ if ((childReorder == null ? void 0 : childReorder.parentId) && (childReorder == null ? void 0 : childReorder.siblingOrder)) {
270
+ columns = reorderSiblingsInTree(columns, childReorder.parentId, childReorder.siblingOrder);
271
+ }
272
+ const byId = new Map(columns.map((c) => [c.colId, c]));
273
+ if (pinChanges == null ? void 0 : pinChanges.length) {
274
+ const pinState = [];
275
+ pinChanges.forEach(({ colId, pinned }) => {
276
+ const col = byId.get(colId) || findColumnById(columns, colId);
277
+ const leafIds = col ? collectLeafColIds(col) : [colId];
278
+ leafIds.forEach((leafId) => {
279
+ pinState.push({ colId: leafId, pinned });
280
+ });
281
+ });
282
+ api.applyColumnState({ state: pinState });
283
+ }
284
+ const orderedLeafIds = [
285
+ ...buildOrderedLeafIds(columns, frozenOrder),
286
+ ...buildOrderedLeafIds(columns, scrollableOrder)
287
+ ];
288
+ const seen = /* @__PURE__ */ new Set();
289
+ const uniqueLeafIds = orderedLeafIds.filter((id) => {
290
+ if (seen.has(id)) return false;
291
+ seen.add(id);
292
+ return true;
293
+ });
294
+ api.applyColumnState({
295
+ state: uniqueLeafIds.map((colId) => ({ colId })),
296
+ applyOrder: true
297
+ });
298
+ };
299
+ const collectLeafVisibility = (columns) => {
300
+ const leaves = [];
301
+ const walk = (cols) => {
302
+ cols.forEach((col) => {
303
+ var _a;
304
+ if (((_a = col.children) == null ? void 0 : _a.length) > 0) {
305
+ walk(col.children);
306
+ } else {
307
+ leaves.push(!!col.isVisible);
308
+ }
309
+ });
310
+ };
311
+ walk(columns);
312
+ return leaves;
313
+ };
314
+ const getCheckState = (columns) => {
315
+ const leaves = collectLeafVisibility(columns);
316
+ if (leaves.length === 0) {
317
+ return { checked: false, indeterminate: false };
318
+ }
319
+ const visibleCount = leaves.filter(Boolean).length;
320
+ if (visibleCount === 0) {
321
+ return { checked: false, indeterminate: false };
322
+ }
323
+ if (visibleCount === leaves.length) {
324
+ return { checked: true, indeterminate: false };
325
+ }
326
+ return { checked: true, indeterminate: true };
327
+ };
328
+ const applyVisibilityToggle = (columns, colId) => {
329
+ const visibilityMap = /* @__PURE__ */ new Map();
330
+ const updateChildren = (children, visibility) => children.map((column) => {
331
+ visibilityMap.set(column.colId, visibility);
332
+ return {
333
+ ...column,
334
+ isVisible: visibility,
335
+ children: column.children ? updateChildren(column.children, visibility) : null
336
+ };
337
+ });
338
+ const update = (cols) => cols.map((column) => {
339
+ if (column.colId === colId) {
340
+ const newVisibility = !column.isVisible;
341
+ visibilityMap.set(column.colId, newVisibility);
342
+ return {
343
+ ...column,
344
+ isVisible: newVisibility,
345
+ children: column.children ? updateChildren(column.children, newVisibility) : null
346
+ };
347
+ }
348
+ if (column.children) {
349
+ const updatedChildren = update(column.children);
350
+ const isAnyChildVisible = updatedChildren.some((child) => child.isVisible);
351
+ visibilityMap.set(column.colId, isAnyChildVisible);
352
+ return {
353
+ ...column,
354
+ isVisible: isAnyChildVisible,
355
+ children: updatedChildren
356
+ };
357
+ }
358
+ return column;
359
+ });
360
+ return { columns: update(columns), visibilityMap };
361
+ };
362
+ const applyVisibilityToAll = (columns, visibility) => {
363
+ const visibilityMap = /* @__PURE__ */ new Map();
364
+ const update = (cols) => cols.map((column) => {
365
+ visibilityMap.set(column.colId, visibility);
366
+ return {
367
+ ...column,
368
+ isVisible: visibility,
369
+ children: column.children ? update(column.children) : null
370
+ };
371
+ });
372
+ return { columns: update(columns), visibilityMap };
373
+ };
374
+ const applyVisibilityMapToGrid = (api, visibilityMap) => {
375
+ if (!api || !visibilityMap.size) return;
376
+ const showIds = [];
377
+ const hideIds = [];
378
+ visibilityMap.forEach((visible, colId) => {
379
+ if (visible) showIds.push(colId);
380
+ else hideIds.push(colId);
381
+ });
382
+ if (showIds.length) api.setColumnsVisible(showIds, true);
383
+ if (hideIds.length) api.setColumnsVisible(hideIds, false);
384
+ };
385
+ const capitalizeHeader = (name) => name ? name.charAt(0).toUpperCase() + name.slice(1) : "";
386
+ const mouseSensorOptions = { activationConstraint: { distance: 5 } };
387
+ const touchSensorOptions = { activationConstraint: { delay: 200, tolerance: 5 } };
388
+ const ColumnRowContent = memo(function ColumnRowContent2({
389
+ column,
390
+ level,
391
+ isCollapsed,
392
+ hasChildren,
393
+ isIndeterminate,
394
+ checkboxChecked,
395
+ reserveCollapseSlot,
396
+ rowClassName,
397
+ dragIconClass,
398
+ onToggleCollapse,
399
+ onToggleVisibility,
400
+ onKeyboardReorder,
401
+ dragHandleProps,
402
+ isOverlay
403
+ }) {
404
+ const rowStyle = useMemo(
405
+ () => ({
406
+ ["--indent-level"]: level
407
+ }),
408
+ [level]
409
+ );
410
+ const handleCollapseClick = useCallback(
411
+ (e) => {
412
+ e.stopPropagation();
413
+ onToggleCollapse == null ? void 0 : onToggleCollapse(column.colId);
414
+ },
415
+ [onToggleCollapse, column.colId]
416
+ );
417
+ const handleVisibilityChange = useCallback(() => {
418
+ onToggleVisibility == null ? void 0 : onToggleVisibility(column.colId);
419
+ }, [onToggleVisibility, column.colId]);
420
+ const handleRowKeyDown = useCallback(
421
+ (e) => {
422
+ var _a, _b, _c, _d;
423
+ if (isOverlay) return;
424
+ const current = e.currentTarget;
425
+ if (e.altKey && (e.key === "ArrowUp" || e.key === "ArrowDown")) {
426
+ e.preventDefault();
427
+ onKeyboardReorder == null ? void 0 : onKeyboardReorder(column.colId, e.key === "ArrowUp" ? -1 : 1);
428
+ return;
429
+ }
430
+ switch (e.key) {
431
+ case "ArrowDown": {
432
+ e.preventDefault();
433
+ const next = (_b = (_a = current.parentElement) == null ? void 0 : _a.nextElementSibling) == null ? void 0 : _b.querySelector('[role="treeitem"]');
434
+ next == null ? void 0 : next.focus();
435
+ break;
436
+ }
437
+ case "ArrowUp": {
438
+ e.preventDefault();
439
+ const prev = (_d = (_c = current.parentElement) == null ? void 0 : _c.previousElementSibling) == null ? void 0 : _d.querySelector('[role="treeitem"]');
440
+ prev == null ? void 0 : prev.focus();
441
+ break;
442
+ }
443
+ case "ArrowRight": {
444
+ if (hasChildren && isCollapsed) {
445
+ e.preventDefault();
446
+ onToggleCollapse == null ? void 0 : onToggleCollapse(column.colId);
447
+ }
448
+ break;
449
+ }
450
+ case "ArrowLeft": {
451
+ if (hasChildren && !isCollapsed) {
452
+ e.preventDefault();
453
+ onToggleCollapse == null ? void 0 : onToggleCollapse(column.colId);
454
+ }
455
+ break;
456
+ }
457
+ case "Enter":
458
+ case " ": {
459
+ if (column.disabled) break;
460
+ e.preventDefault();
461
+ onToggleVisibility == null ? void 0 : onToggleVisibility(column.colId);
462
+ break;
463
+ }
464
+ }
465
+ },
466
+ [
467
+ isOverlay,
468
+ level,
469
+ hasChildren,
470
+ isCollapsed,
471
+ onToggleCollapse,
472
+ onToggleVisibility,
473
+ onKeyboardReorder,
474
+ column.colId,
475
+ column.disabled
476
+ ]
477
+ );
478
+ return /* @__PURE__ */ jsxs(
479
+ "div",
480
+ {
481
+ "aria-checked": isIndeterminate ? "mixed" : checkboxChecked,
482
+ "aria-expanded": hasChildren ? !isCollapsed : void 0,
483
+ "aria-label": column.headerName,
484
+ "aria-roledescription": !isOverlay && dragHandleProps ? "sortable column" : void 0,
485
+ "aria-selected": !!checkboxChecked,
486
+ className: rowClassName,
487
+ "data-col-id": column.colId,
488
+ role: "treeitem",
489
+ style: rowStyle,
490
+ tabIndex: isOverlay ? -1 : 0,
491
+ onKeyDown: handleRowKeyDown,
492
+ children: [
493
+ /* @__PURE__ */ jsxs("div", { className: "table-setting-column-leading", children: [
494
+ reserveCollapseSlot && /* @__PURE__ */ jsx("span", { "aria-hidden": !hasChildren, className: "table-setting-column-collapse-slot", children: hasChildren ? /* @__PURE__ */ jsx(
495
+ IconButton,
496
+ {
497
+ "aria-label": isCollapsed ? "Expand column group" : "Collapse column group",
498
+ className: "table-setting-column-collapse-btn",
499
+ onClick: handleCollapseClick,
500
+ children: isCollapsed ? /* @__PURE__ */ jsx(default_1$3, {}) : /* @__PURE__ */ jsx(default_1, {})
501
+ }
502
+ ) : null }),
503
+ /* @__PURE__ */ jsx(
504
+ Checkbox,
505
+ {
506
+ checked: checkboxChecked,
507
+ disabled: column.disabled || isOverlay,
508
+ variant: isIndeterminate ? "dashed" : "default",
509
+ onChange: handleVisibilityChange
510
+ }
511
+ )
512
+ ] }),
513
+ /* @__PURE__ */ jsxs("div", { className: "table-setting-column-trailing", children: [
514
+ dragHandleProps && /* @__PURE__ */ jsx(
515
+ "span",
516
+ {
517
+ className: "table-setting-column-drag-handle",
518
+ ...dragHandleProps,
519
+ "aria-label": `Reorder ${column.headerName}`,
520
+ children: /* @__PURE__ */ jsx(DragIndicator, { className: dragIconClass })
521
+ }
522
+ ),
523
+ /* @__PURE__ */ jsx("span", { className: "table-setting-column-name", children: capitalizeHeader(column.headerName) })
524
+ ] })
525
+ ]
526
+ }
527
+ );
528
+ });
529
+ const areSortablePropsEqual = (prev, next) => prev.column.colId === next.column.colId && prev.column.isVisible === next.column.isVisible && prev.column.headerName === next.column.headerName && prev.column.disabled === next.column.disabled && prev.isIndeterminate === next.isIndeterminate && prev.checkboxChecked === next.checkboxChecked && prev.reserveCollapseSlot === next.reserveCollapseSlot && prev.level === next.level && prev.isCollapsed === next.isCollapsed && prev.hasChildren === next.hasChildren && prev.rowClassName === next.rowClassName && prev.dragIconClass === next.dragIconClass && prev.onToggleCollapse === next.onToggleCollapse && prev.onToggleVisibility === next.onToggleVisibility && prev.onKeyboardReorder === next.onKeyboardReorder && prev.children === next.children;
530
+ const SortableColumnItem = memo(function SortableColumnItem2({
531
+ column,
532
+ level,
533
+ isCollapsed,
534
+ hasChildren,
535
+ isIndeterminate,
536
+ checkboxChecked,
537
+ reserveCollapseSlot,
538
+ rowClassName,
539
+ dragIconClass,
540
+ onToggleCollapse,
541
+ onToggleVisibility,
542
+ onKeyboardReorder,
543
+ children
544
+ }) {
545
+ const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({
546
+ id: column.colId
547
+ });
548
+ const style = useMemo(
549
+ () => ({
550
+ transform: CSS.Transform.toString(transform),
551
+ transition,
552
+ // Placeholder stays in-flow; DragOverlay renders the floating preview
553
+ opacity: isDragging ? 0 : void 0,
554
+ zIndex: isDragging ? 0 : void 0
555
+ }),
556
+ [transform, transition, isDragging]
557
+ );
558
+ return /* @__PURE__ */ jsxs(
559
+ "div",
560
+ {
561
+ ref: setNodeRef,
562
+ className: isDragging ? "table-setting-column-sortable--dragging" : void 0,
563
+ style,
564
+ children: [
565
+ /* @__PURE__ */ jsx(
566
+ ColumnRowContent,
567
+ {
568
+ checkboxChecked,
569
+ column,
570
+ dragHandleProps: { ...attributes, ...listeners },
571
+ dragIconClass,
572
+ hasChildren,
573
+ isCollapsed,
574
+ isIndeterminate,
575
+ level,
576
+ reserveCollapseSlot,
577
+ rowClassName,
578
+ onKeyboardReorder,
579
+ onToggleCollapse,
580
+ onToggleVisibility
581
+ }
582
+ ),
583
+ hasChildren && !isCollapsed && children
584
+ ]
585
+ }
586
+ );
587
+ }, areSortablePropsEqual);
588
+ const NestedColumnItem = memo(function NestedColumnItem2({
589
+ column,
590
+ level,
591
+ isCollapsed,
592
+ hasChildren,
593
+ isIndeterminate,
594
+ checkboxChecked,
595
+ reserveCollapseSlot,
596
+ rowClassName,
597
+ dragIconClass,
598
+ onToggleCollapse,
599
+ onToggleVisibility,
600
+ children
601
+ }) {
602
+ return /* @__PURE__ */ jsxs("div", { children: [
603
+ /* @__PURE__ */ jsx(
604
+ ColumnRowContent,
605
+ {
606
+ checkboxChecked,
607
+ column,
608
+ dragIconClass,
609
+ hasChildren,
610
+ isCollapsed,
611
+ isIndeterminate,
612
+ level,
613
+ reserveCollapseSlot,
614
+ rowClassName,
615
+ onToggleCollapse,
616
+ onToggleVisibility
617
+ }
618
+ ),
619
+ hasChildren && !isCollapsed && children
620
+ ] });
621
+ });
622
+ const Columns = forwardRef((props, ref) => {
623
+ var _a, _b, _c, _d, _e, _f;
624
+ const [frozenColumn, setFrozenColumn] = useState([]);
625
+ const [scrollableColumn, setScrollableColumn] = useState([]);
626
+ const [searchInputValue, setSearchInputValue] = useState("");
627
+ const [debouncedSearchText, setDebouncedSearchText] = useState("");
628
+ const [collapsedScrollable, setCollapsedScrollable] = useState(false);
629
+ const [collapsedColumn, setCollapsedcolumn] = useState(false);
630
+ const [collapsedScrollColumns, setCollapsedScrollColumns] = useState({});
631
+ const [collapsedFrozenColumns, setCollapsedFrozenColumns] = useState({});
632
+ const [activeDragId, setActiveDragId] = useState(null);
633
+ const reorderLiveRegionRef = useRef(null);
634
+ const [openSaveViewModal, setOpenSaveViewModal] = useState(false);
635
+ const [isDefaultView, setIsDefaultView] = useState(false);
636
+ const [selectedViewType, setSelectedViewType] = useState(
637
+ (_a = props.saveViewCustomFilter) == null ? void 0 : _a.selectedOption
638
+ );
639
+ const [savedViewsOptions, setSavedViewsOptions] = useState(props.savedViewsOptions || []);
640
+ const [filteredSavedViewsOptions, setFilteredSavedViewsOptions] = useState(
641
+ props.savedViewsOptions || []
642
+ );
643
+ const [currentSaveViewOptions, setCurrentSaveViewOptions] = useState([]);
644
+ const [selectedSavedView, setSelectedSavedView] = useState(null);
645
+ const [inputValue, setInputValue] = useState("");
646
+ const [isOpen, setIsOpen] = useState(false);
647
+ const [openSaveViewMenu, setOpenSaveViewMenu] = useState(false);
648
+ const [selectedBadge, setSelectedBadge] = useState("All");
649
+ const [isEditView, setIsEditView] = useState(false);
650
+ const [editedView, setEditedView] = useState(null);
651
+ const [saveViewSearchText, setSaveViewSearchText] = useState("");
652
+ const [openDeletePrompt, setOpenDeletePrompt] = useState(false);
653
+ const [deleteView, setDeleteView] = useState(null);
654
+ const [selectedView, setSelectedView] = useState(null);
655
+ const isDraggingRef = useRef(false);
656
+ const isInternalUpdateRef = useRef(false);
657
+ const isColumnPinnedRef = useRef(false);
658
+ const debouncedSetSearchText = useMemo(
659
+ () => debounce((value) => {
660
+ setDebouncedSearchText(value);
661
+ }, 150),
662
+ []
663
+ );
664
+ useEffect(
665
+ () => () => {
666
+ debouncedSetSearchText.cancel();
667
+ },
668
+ [debouncedSetSearchText]
669
+ );
670
+ const filteredFrozenColumns = useMemo(
671
+ () => filterColumnsBySearch(frozenColumn, debouncedSearchText),
672
+ [frozenColumn, debouncedSearchText]
673
+ );
674
+ const filteredScrollableColumns = useMemo(
675
+ () => filterColumnsBySearch(scrollableColumn, debouncedSearchText),
676
+ [scrollableColumn, debouncedSearchText]
677
+ );
678
+ const frozenColumnOrder = useMemo(
679
+ () => getTopLevelColumnIds(
680
+ filteredFrozenColumns.filter((c) => c.headerName !== "N/A" && c.isVisible !== false)
681
+ ),
682
+ [filteredFrozenColumns]
683
+ );
684
+ const scrollableColumnOrder = useMemo(
685
+ () => getTopLevelColumnIds(
686
+ filteredScrollableColumns.filter((c) => c.headerName !== "N/A" && c.isVisible !== false)
687
+ ),
688
+ [filteredScrollableColumns]
689
+ );
690
+ const fullFrozenOrder = useMemo(
691
+ () => getTopLevelColumnIds(frozenColumn.filter((c) => c.headerName !== "N/A")),
692
+ [frozenColumn]
693
+ );
694
+ const fullScrollableOrder = useMemo(
695
+ () => getTopLevelColumnIds(scrollableColumn.filter((c) => c.headerName !== "N/A")),
696
+ [scrollableColumn]
697
+ );
698
+ const sortableItems = useMemo(
699
+ () => [...scrollableColumnOrder, ...frozenColumnOrder],
700
+ [scrollableColumnOrder, frozenColumnOrder]
701
+ );
702
+ const allColumnsForLookup = useMemo(
703
+ () => [...frozenColumn, ...scrollableColumn],
704
+ [frozenColumn, scrollableColumn]
705
+ );
706
+ const activeDragColumn = useMemo(
707
+ () => activeDragId ? findColumnById(allColumnsForLookup, activeDragId) : null,
708
+ [activeDragId, allColumnsForLookup]
709
+ );
710
+ const mainCheckState = useMemo(
711
+ () => getCheckState(filteredScrollableColumns),
712
+ [filteredScrollableColumns]
713
+ );
714
+ const allCheckState = useMemo(
715
+ () => getCheckState([...filteredFrozenColumns, ...filteredScrollableColumns]),
716
+ [filteredFrozenColumns, filteredScrollableColumns]
717
+ );
718
+ const mainChecked = mainCheckState.checked;
719
+ const allColumnVisibility = allCheckState.checked;
720
+ const sensors = useSensors(
721
+ useSensor(MouseSensor, mouseSensorOptions),
722
+ useSensor(TouchSensor, touchSensorOptions)
723
+ );
724
+ useEffect(() => {
725
+ const views = props.savedViewsOptions ?? [];
726
+ setSavedViewsOptions(views);
727
+ setFilteredSavedViewsOptions(views);
728
+ setSelectedView(views.filter((view) => view.isActive));
729
+ if (views.length === 0) {
730
+ setOpenSaveViewMenu(false);
731
+ setSaveViewSearchText("");
732
+ }
733
+ const matchingViews = views.filter(
734
+ (view) => !selectedViewType || view.viewType === selectedViewType
735
+ );
736
+ setCurrentSaveViewOptions(
737
+ views.map((view) => {
738
+ var _a2;
739
+ return {
740
+ label: /* @__PURE__ */ jsxs("span", { className: "save-view-select-option-label", children: [
741
+ /* @__PURE__ */ jsx("span", { className: "save-view-select-option-icon", children: getViewTypeIcon(view.viewType, (_a2 = props.saveViewCustomFilter) == null ? void 0 : _a2.options) }),
742
+ view.viewName
743
+ ] }),
744
+ value: view.viewName,
745
+ disabled: view == null ? void 0 : view.isDisabled,
746
+ viewType: view.viewType,
747
+ isDefaultView: view.isDefaultView
748
+ };
749
+ })
750
+ );
751
+ setSelectedSavedView(
752
+ (prev) => (prev == null ? void 0 : prev.value) && matchingViews.some((view) => view.viewName === prev.value) ? prev : null
753
+ );
754
+ }, [props.savedViewsOptions, selectedViewType]);
755
+ useEffect(() => {
756
+ if (selectedSavedView == null ? void 0 : selectedSavedView.value) {
757
+ setInputValue(selectedSavedView.value);
758
+ setSelectedViewType(selectedSavedView.viewType);
759
+ setIsDefaultView(!!selectedSavedView.isDefaultView);
760
+ } else {
761
+ setInputValue("");
762
+ setIsDefaultView(false);
763
+ }
764
+ }, [selectedSavedView]);
765
+ const isReplaceViewSelected = !!(selectedSavedView == null ? void 0 : selectedSavedView.value);
766
+ const isInputValueEmpty = !inputValue.trim();
767
+ const getColumnDefs = useCallback((columns) => {
768
+ return columns.map((column) => {
769
+ if (column.children) {
770
+ const updatedChildren = getColumnDefs(column.children);
771
+ const allChildrenHidden = updatedChildren.every((child) => child.hide === true);
772
+ return {
773
+ ...column,
774
+ children: updatedChildren,
775
+ hide: allChildrenHidden
776
+ };
777
+ }
778
+ return column;
779
+ });
780
+ }, []);
781
+ const updateColumnState = useCallback(() => {
782
+ var _a2, _b2;
783
+ const getColumnState = (columns) => columns.map((column) => {
784
+ var _a3;
785
+ return {
786
+ colId: column.colId || column.field || column.headerName,
787
+ headerName: column.headerName || column.field || "N/A",
788
+ isVisible: !(column == null ? void 0 : column.hide),
789
+ isPinned: column.pinned ? true : false,
790
+ children: ((_a3 = column == null ? void 0 : column.children) == null ? void 0 : _a3.length) > 0 ? getColumnState(column.children) : null,
791
+ disabled: column == null ? void 0 : column.disableColumnCheckboxInSettings
792
+ };
793
+ });
794
+ const columnDefs = getColumnDefs(((_b2 = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.api) == null ? void 0 : _b2.getColumnDefs()) || props.column);
795
+ const columnState = getColumnState(columnDefs);
796
+ const { frozColumn, scrollColumn } = (columnState || []).reduce(
797
+ (acc, column) => {
798
+ if (column.isPinned) {
799
+ acc.frozColumn.push(column);
800
+ } else {
801
+ acc.scrollColumn.push(column);
802
+ }
803
+ return acc;
804
+ },
805
+ { frozColumn: [], scrollColumn: [] }
806
+ );
807
+ setFrozenColumn(frozColumn);
808
+ setScrollableColumn(scrollColumn);
809
+ }, [getColumnDefs, ref, props.column]);
810
+ const debouncedUpdateColumnState = useMemo(
811
+ () => debounce(updateColumnState, 100),
812
+ [updateColumnState]
813
+ );
814
+ useEffect(() => {
815
+ var _a2, _b2, _c2, _d2, _e2, _f2;
816
+ if (props.showMenu || isColumnPinnedRef.current) {
817
+ isColumnPinnedRef.current = false;
818
+ updateColumnState();
819
+ const onColumnEvent = () => {
820
+ if (isDraggingRef.current || isInternalUpdateRef.current) {
821
+ return;
822
+ }
823
+ isColumnPinnedRef.current = true;
824
+ debouncedUpdateColumnState();
825
+ };
826
+ if (ref == null ? void 0 : ref.current) {
827
+ (_b2 = (_a2 = ref.current) == null ? void 0 : _a2.api) == null ? void 0 : _b2.addEventListener("columnPinned", onColumnEvent);
828
+ (_d2 = (_c2 = ref.current) == null ? void 0 : _c2.api) == null ? void 0 : _d2.addEventListener("columnMoved", onColumnEvent);
829
+ (_f2 = (_e2 = ref.current) == null ? void 0 : _e2.api) == null ? void 0 : _f2.addEventListener("columnVisible", onColumnEvent);
830
+ }
831
+ return () => {
832
+ var _a3, _b3, _c3, _d3, _e3, _f3;
833
+ if (ref == null ? void 0 : ref.current) {
834
+ (_b3 = (_a3 = ref.current) == null ? void 0 : _a3.api) == null ? void 0 : _b3.removeEventListener("columnPinned", onColumnEvent);
835
+ (_d3 = (_c3 = ref.current) == null ? void 0 : _c3.api) == null ? void 0 : _d3.removeEventListener("columnMoved", onColumnEvent);
836
+ (_f3 = (_e3 = ref.current) == null ? void 0 : _e3.api) == null ? void 0 : _f3.removeEventListener("columnVisible", onColumnEvent);
837
+ }
838
+ };
839
+ }
840
+ }, [props.showMenu, updateColumnState, debouncedUpdateColumnState, ref]);
841
+ const handleSearchChange = useCallback(
842
+ (e) => {
843
+ const value = e.target.value;
844
+ setSearchInputValue(value);
845
+ debouncedSetSearchText(value.toLowerCase());
846
+ },
847
+ [debouncedSetSearchText]
848
+ );
849
+ const toggleColumnVisibility = useCallback(
850
+ (colId, section) => {
851
+ var _a2;
852
+ const api = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.api;
853
+ const setter = section === "frozen" ? setFrozenColumn : setScrollableColumn;
854
+ setter((prev) => {
855
+ const { columns, visibilityMap } = applyVisibilityToggle(prev, colId);
856
+ isInternalUpdateRef.current = true;
857
+ applyVisibilityMapToGrid(api, visibilityMap);
858
+ queueMicrotask(() => {
859
+ isInternalUpdateRef.current = false;
860
+ });
861
+ return columns;
862
+ });
863
+ },
864
+ [ref]
865
+ );
866
+ const toggleColumnVisibilityFrozen = useCallback(
867
+ (colId) => {
868
+ toggleColumnVisibility(colId, "frozen");
869
+ },
870
+ [toggleColumnVisibility]
871
+ );
872
+ const toggleColumnVisibilityScroll = useCallback(
873
+ (colId) => {
874
+ toggleColumnVisibility(colId, "scrollable");
875
+ },
876
+ [toggleColumnVisibility]
877
+ );
878
+ const onMainCheckboxChange = useCallback(() => {
879
+ var _a2;
880
+ const api = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.api;
881
+ const nextVisible = !mainChecked;
882
+ const filteredIds = debouncedSearchText ? new Set(getTopLevelColumnIds(filteredScrollableColumns)) : null;
883
+ setScrollableColumn((prev) => {
884
+ let result;
885
+ if (filteredIds) {
886
+ const visibilityMap = /* @__PURE__ */ new Map();
887
+ const update = (cols) => cols.map((column) => {
888
+ var _a3;
889
+ const inFilter = filteredIds.has(column.colId) || ((_a3 = column.children) == null ? void 0 : _a3.some((c) => filteredIds.has(c.colId)));
890
+ if (!inFilter) return column;
891
+ visibilityMap.set(column.colId, nextVisible);
892
+ return {
893
+ ...column,
894
+ isVisible: nextVisible,
895
+ children: column.children ? update(column.children) : null
896
+ };
897
+ });
898
+ result = { columns: update(prev), visibilityMap };
899
+ } else {
900
+ result = applyVisibilityToAll(prev, nextVisible);
901
+ }
902
+ isInternalUpdateRef.current = true;
903
+ applyVisibilityMapToGrid(api, result.visibilityMap);
904
+ queueMicrotask(() => {
905
+ isInternalUpdateRef.current = false;
906
+ });
907
+ return result.columns;
908
+ });
909
+ }, [ref, mainChecked, filteredScrollableColumns, debouncedSearchText]);
910
+ const onAllColumnCheckBoxChange = useCallback(() => {
911
+ var _a2;
912
+ const api = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.api;
913
+ const nextVisible = !allColumnVisibility;
914
+ const frozenResult = applyVisibilityToAll(frozenColumn, nextVisible);
915
+ const scrollResult = applyVisibilityToAll(scrollableColumn, nextVisible);
916
+ const combinedMap = new Map([...frozenResult.visibilityMap, ...scrollResult.visibilityMap]);
917
+ isInternalUpdateRef.current = true;
918
+ applyVisibilityMapToGrid(api, combinedMap);
919
+ setFrozenColumn(frozenResult.columns);
920
+ setScrollableColumn(scrollResult.columns);
921
+ queueMicrotask(() => {
922
+ isInternalUpdateRef.current = false;
923
+ });
924
+ }, [ref, allColumnVisibility, frozenColumn, scrollableColumn]);
925
+ const toggleScrollableCollapse = useCallback((e) => {
926
+ e.stopPropagation();
927
+ setCollapsedScrollable((prev) => !prev);
928
+ }, []);
929
+ const toggleColumnCollapse = useCallback((e) => {
930
+ e.stopPropagation();
931
+ setCollapsedcolumn((prev) => !prev);
932
+ }, []);
933
+ const toggleScrollColumnCollapse = useCallback((colId) => {
934
+ setCollapsedScrollColumns((prev) => ({
935
+ ...prev,
936
+ [colId]: !prev[colId]
937
+ }));
938
+ }, []);
939
+ const toggleFrozenColumnCollapse = useCallback((colId) => {
940
+ setCollapsedFrozenColumns((prev) => ({
941
+ ...prev,
942
+ [colId]: !prev[colId]
943
+ }));
944
+ }, []);
945
+ const announceReorder = useCallback((colId, direction) => {
946
+ const el = reorderLiveRegionRef.current;
947
+ if (!el) return;
948
+ el.textContent = `Moved ${colId} ${direction === -1 ? "up" : "down"}`;
949
+ }, []);
950
+ const commitColumnReorder = useCallback(
951
+ ({ frozenOrder, scrollableOrder, pinChanges, childReorder, announce }) => {
952
+ var _a2;
953
+ const api = (_a2 = ref == null ? void 0 : ref.current) == null ? void 0 : _a2.api;
954
+ if (!api) return;
955
+ isInternalUpdateRef.current = true;
956
+ isDraggingRef.current = true;
957
+ applyColumnReorderToGrid(api, {
958
+ allColumns: allColumnsForLookup,
959
+ frozenOrder,
960
+ scrollableOrder,
961
+ pinChanges,
962
+ childReorder
963
+ });
964
+ updateColumnState();
965
+ if (announce) {
966
+ announceReorder(announce.colId, announce.direction);
967
+ }
968
+ queueMicrotask(() => {
969
+ isDraggingRef.current = false;
970
+ isInternalUpdateRef.current = false;
971
+ });
972
+ },
973
+ [ref, allColumnsForLookup, updateColumnState, announceReorder]
974
+ );
975
+ const handleDragStart = useCallback((event) => {
976
+ isDraggingRef.current = true;
977
+ setActiveDragId(event.active.id);
978
+ }, []);
979
+ const handleDragCancel = useCallback(() => {
980
+ setActiveDragId(null);
981
+ isDraggingRef.current = false;
982
+ }, []);
983
+ const handleDragEnd = useCallback(
984
+ (event) => {
985
+ const { active, over } = event;
986
+ setActiveDragId(null);
987
+ if (!over || active.id === over.id) {
988
+ isDraggingRef.current = false;
989
+ return;
990
+ }
991
+ const activeId = active.id;
992
+ const overId = over.id;
993
+ const activeLoc = findColumnLocation(frozenColumn, activeId) || findColumnLocation(scrollableColumn, activeId);
994
+ if (!activeLoc) {
995
+ isDraggingRef.current = false;
996
+ return;
997
+ }
998
+ if (activeLoc.parent) {
999
+ const overLoc = findColumnLocation(frozenColumn, overId) || findColumnLocation(scrollableColumn, overId);
1000
+ if (!(overLoc == null ? void 0 : overLoc.parent) || overLoc.parent.colId !== activeLoc.parent.colId) {
1001
+ isDraggingRef.current = false;
1002
+ return;
1003
+ }
1004
+ const siblingIds = getDirectColumnIds(activeLoc.siblings);
1005
+ const oldIndex = siblingIds.indexOf(activeId);
1006
+ const newIndex = siblingIds.indexOf(overId);
1007
+ if (oldIndex === -1 || newIndex === -1) {
1008
+ isDraggingRef.current = false;
1009
+ return;
1010
+ }
1011
+ commitColumnReorder({
1012
+ frozenOrder: fullFrozenOrder,
1013
+ scrollableOrder: fullScrollableOrder,
1014
+ childReorder: {
1015
+ parentId: activeLoc.parent.colId,
1016
+ siblingOrder: arrayMove(siblingIds, oldIndex, newIndex)
1017
+ }
1018
+ });
1019
+ return;
1020
+ }
1021
+ const isFrozenSource = fullFrozenOrder.includes(activeId);
1022
+ const isScrollableSource = fullScrollableOrder.includes(activeId);
1023
+ if (!isFrozenSource && !isScrollableSource) {
1024
+ isDraggingRef.current = false;
1025
+ return;
1026
+ }
1027
+ const isFrozenTarget = fullFrozenOrder.includes(overId) || frozenColumnOrder.includes(overId);
1028
+ const isScrollableTarget = fullScrollableOrder.includes(overId) || scrollableColumnOrder.includes(overId);
1029
+ const visibleScrollable = scrollableColumnOrder.length ? scrollableColumnOrder : fullScrollableOrder;
1030
+ let nextFrozen = [...fullFrozenOrder];
1031
+ let nextScrollable = [...fullScrollableOrder];
1032
+ let pinChanges = null;
1033
+ if (isFrozenSource && isFrozenTarget) {
1034
+ const oldIndex = nextFrozen.indexOf(activeId);
1035
+ const newIndex = nextFrozen.indexOf(overId);
1036
+ if (oldIndex === -1 || newIndex === -1) {
1037
+ isDraggingRef.current = false;
1038
+ return;
1039
+ }
1040
+ nextFrozen = arrayMove(nextFrozen, oldIndex, newIndex);
1041
+ } else if (isScrollableSource && isScrollableTarget) {
1042
+ const oldIndex = nextScrollable.indexOf(activeId);
1043
+ const newIndex = nextScrollable.indexOf(overId);
1044
+ if (oldIndex === -1 || newIndex === -1) {
1045
+ isDraggingRef.current = false;
1046
+ return;
1047
+ }
1048
+ nextScrollable = arrayMove(nextScrollable, oldIndex, newIndex);
1049
+ } else if (isFrozenSource && isScrollableTarget) {
1050
+ nextFrozen = nextFrozen.filter((id) => id !== activeId);
1051
+ const overIndex = visibleScrollable.indexOf(overId);
1052
+ const insertAt = overIndex === -1 ? nextScrollable.length : !nextScrollable.includes(overId) ? nextScrollable.length : nextScrollable.indexOf(overId);
1053
+ nextScrollable = [...nextScrollable];
1054
+ nextScrollable.splice(insertAt, 0, activeId);
1055
+ pinChanges = [{ colId: activeId, pinned: null }];
1056
+ } else if (isScrollableSource && isFrozenTarget) {
1057
+ nextScrollable = nextScrollable.filter((id) => id !== activeId);
1058
+ const insertAt = !nextFrozen.includes(overId) ? nextFrozen.length : nextFrozen.indexOf(overId);
1059
+ nextFrozen = [...nextFrozen];
1060
+ nextFrozen.splice(insertAt, 0, activeId);
1061
+ pinChanges = [{ colId: activeId, pinned: "left" }];
1062
+ } else {
1063
+ isDraggingRef.current = false;
1064
+ return;
1065
+ }
1066
+ commitColumnReorder({
1067
+ frozenOrder: nextFrozen,
1068
+ scrollableOrder: nextScrollable,
1069
+ pinChanges
1070
+ });
1071
+ },
1072
+ [
1073
+ frozenColumn,
1074
+ scrollableColumn,
1075
+ fullFrozenOrder,
1076
+ fullScrollableOrder,
1077
+ frozenColumnOrder,
1078
+ scrollableColumnOrder,
1079
+ commitColumnReorder
1080
+ ]
1081
+ );
1082
+ const handleKeyboardReorder = useCallback(
1083
+ (colId, direction) => {
1084
+ const loc = findColumnLocation(frozenColumn, colId) || findColumnLocation(scrollableColumn, colId);
1085
+ if (!loc) return;
1086
+ if (loc.parent) {
1087
+ const siblingIds = getDirectColumnIds(loc.siblings);
1088
+ const oldIndex = siblingIds.indexOf(colId);
1089
+ const newIndex = oldIndex + direction;
1090
+ if (oldIndex === -1 || newIndex < 0 || newIndex >= siblingIds.length) return;
1091
+ commitColumnReorder({
1092
+ frozenOrder: fullFrozenOrder,
1093
+ scrollableOrder: fullScrollableOrder,
1094
+ childReorder: {
1095
+ parentId: loc.parent.colId,
1096
+ siblingOrder: arrayMove(siblingIds, oldIndex, newIndex)
1097
+ },
1098
+ announce: { colId, direction }
1099
+ });
1100
+ } else {
1101
+ const isFrozen = fullFrozenOrder.includes(colId);
1102
+ const isScrollable = fullScrollableOrder.includes(colId);
1103
+ if (!isFrozen && !isScrollable) return;
1104
+ const order = isFrozen ? [...fullFrozenOrder] : [...fullScrollableOrder];
1105
+ const oldIndex = order.indexOf(colId);
1106
+ const newIndex = oldIndex + direction;
1107
+ if (oldIndex === -1 || newIndex < 0 || newIndex >= order.length) return;
1108
+ const newOrder = arrayMove(order, oldIndex, newIndex);
1109
+ commitColumnReorder({
1110
+ frozenOrder: isFrozen ? newOrder : fullFrozenOrder,
1111
+ scrollableOrder: isScrollable ? newOrder : fullScrollableOrder,
1112
+ announce: { colId, direction }
1113
+ });
1114
+ }
1115
+ requestAnimationFrame(() => {
1116
+ var _a2, _b2;
1117
+ const escaped = CSS.escape ? CSS.escape(colId) : colId.replace(/"/g, '\\"');
1118
+ (_b2 = (_a2 = document.querySelector(`.table-setting-columns-settings [data-col-id="${escaped}"]`)) == null ? void 0 : _a2.focus) == null ? void 0 : _b2.call(_a2);
1119
+ });
1120
+ },
1121
+ [frozenColumn, scrollableColumn, fullFrozenOrder, fullScrollableOrder, commitColumnReorder]
1122
+ );
1123
+ const renderColumnRow = useCallback(
1124
+ (column, level, section) => {
1125
+ const isFrozen = section === "frozen";
1126
+ const collapsedMap = isFrozen ? collapsedFrozenColumns : collapsedScrollColumns;
1127
+ const isCollapsed = !!collapsedMap[column.colId];
1128
+ const hasChildren = Array.isArray(column.children) && column.children.length > 0;
1129
+ const onToggleCollapse = isFrozen ? toggleFrozenColumnCollapse : toggleScrollColumnCollapse;
1130
+ const onToggleVisibility = isFrozen ? toggleColumnVisibilityFrozen : toggleColumnVisibilityScroll;
1131
+ const checkState = hasChildren ? getCheckState(column.children) : { checked: !!column.isVisible, indeterminate: false };
1132
+ const reserveCollapseSlot = isFrozen ? hasChildren : true;
1133
+ const rowClassName = isFrozen ? "table-setting-frozen-columns-list-item" : "table-setting-scroll-inner-column";
1134
+ const dragIconClass = isFrozen ? "table-setting-frozen-columns-list-drag-icon" : "table-setting-scroll-columns-list-drag-icon";
1135
+ const nestedSortableIds = hasChildren ? getDirectColumnIds(
1136
+ column.children.filter((c) => c.headerName !== "N/A" && c.isVisible !== false)
1137
+ ) : [];
1138
+ const childNodes = hasChildren && !isCollapsed ? /* @__PURE__ */ jsx(SortableContext, { items: nestedSortableIds, children: /* @__PURE__ */ jsx("div", { className: "table-setting-column-children", role: "group", children: column.children.map((child) => renderColumnRow(child, level + 1, section)) }) }) : null;
1139
+ if (column.isVisible !== false) {
1140
+ return /* @__PURE__ */ jsx(
1141
+ SortableColumnItem,
1142
+ {
1143
+ checkboxChecked: checkState.checked,
1144
+ column,
1145
+ dragIconClass,
1146
+ hasChildren,
1147
+ isCollapsed,
1148
+ isIndeterminate: checkState.indeterminate,
1149
+ level,
1150
+ reserveCollapseSlot,
1151
+ rowClassName,
1152
+ onKeyboardReorder: handleKeyboardReorder,
1153
+ onToggleCollapse,
1154
+ onToggleVisibility,
1155
+ children: childNodes
1156
+ },
1157
+ column.colId
1158
+ );
1159
+ }
1160
+ return /* @__PURE__ */ jsx(
1161
+ NestedColumnItem,
1162
+ {
1163
+ checkboxChecked: checkState.checked,
1164
+ column,
1165
+ dragIconClass,
1166
+ hasChildren,
1167
+ isCollapsed,
1168
+ isIndeterminate: checkState.indeterminate,
1169
+ level,
1170
+ reserveCollapseSlot,
1171
+ rowClassName,
1172
+ onToggleCollapse,
1173
+ onToggleVisibility,
1174
+ children: childNodes
1175
+ },
1176
+ column.colId
1177
+ );
1178
+ },
1179
+ [
1180
+ collapsedFrozenColumns,
1181
+ collapsedScrollColumns,
1182
+ toggleFrozenColumnCollapse,
1183
+ toggleScrollColumnCollapse,
1184
+ toggleColumnVisibilityFrozen,
1185
+ toggleColumnVisibilityScroll,
1186
+ handleKeyboardReorder
1187
+ ]
1188
+ );
1189
+ const handleSaveAndApply = () => {
1190
+ var _a2, _b2;
1191
+ if (isEditView) {
1192
+ const newView2 = {
1193
+ ...editedView,
1194
+ viewName: inputValue,
1195
+ viewType: selectedViewType,
1196
+ isDefaultView,
1197
+ isActive: false
1198
+ };
1199
+ props.handleEditSaveView(newView2, editedView);
1200
+ if (!props.isSavingViewLoading) {
1201
+ setIsEditView(false);
1202
+ setEditedView(null);
1203
+ setOpenSaveViewModal(false);
1204
+ setInputValue("");
1205
+ setSelectedViewType((_a2 = props.saveViewCustomFilter) == null ? void 0 : _a2.selectedOption);
1206
+ setIsDefaultView(false);
1207
+ }
1208
+ return;
1209
+ }
1210
+ const replaceViewName = selectedSavedView == null ? void 0 : selectedSavedView.value;
1211
+ const isReplacing = isInputValueEmpty && !!replaceViewName;
1212
+ const newView = {
1213
+ viewName: isReplacing ? replaceViewName : inputValue,
1214
+ viewType: selectedViewType,
1215
+ isDefaultView,
1216
+ isActive: true
1217
+ };
1218
+ const applyToViews = (prev) => isReplacing ? prev.map(
1219
+ (view) => view.viewName === replaceViewName && view.viewType === selectedViewType ? { ...view, ...newView } : { ...view, isActive: false }
1220
+ ) : [...prev.map((view) => ({ ...view, isActive: false })), newView];
1221
+ setSavedViewsOptions(applyToViews);
1222
+ setFilteredSavedViewsOptions(applyToViews);
1223
+ (_b2 = props.handleSaveAndApply) == null ? void 0 : _b2.call(props, newView, replaceViewName);
1224
+ };
1225
+ useEffect(() => {
1226
+ var _a2;
1227
+ if (!props.isSavingViewLoading) {
1228
+ setOpenSaveViewModal(false);
1229
+ setSelectedSavedView(null);
1230
+ setInputValue("");
1231
+ setSelectedViewType((_a2 = props.saveViewCustomFilter) == null ? void 0 : _a2.selectedOption);
1232
+ setIsDefaultView(false);
1233
+ setOpenDeletePrompt(false);
1234
+ setDeleteView(null);
1235
+ setEditedView(null);
1236
+ }
1237
+ }, [props.isSavingViewLoading]);
1238
+ const handleEditView = (view, e) => {
1239
+ e.stopPropagation();
1240
+ e.preventDefault();
1241
+ setIsEditView(true);
1242
+ setOpenSaveViewModal(true);
1243
+ setInputValue(view.viewName);
1244
+ setSelectedViewType(view.viewType);
1245
+ setIsDefaultView(view.isDefaultView);
1246
+ setEditedView(view);
1247
+ };
1248
+ const handleCloseSaveViewModal = () => {
1249
+ var _a2;
1250
+ setOpenSaveViewModal(false);
1251
+ setSelectedSavedView(null);
1252
+ setInputValue("");
1253
+ setSelectedViewType((_a2 = props.saveViewCustomFilter) == null ? void 0 : _a2.selectedOption);
1254
+ setIsDefaultView(false);
1255
+ setIsEditView(false);
1256
+ };
1257
+ const handleSaveViewSearchChange = (e) => {
1258
+ setSaveViewSearchText(e.target.value);
1259
+ const filteredViews = savedViewsOptions.filter(
1260
+ (view) => view.viewName.toLowerCase().includes(e.target.value.toLowerCase())
1261
+ );
1262
+ setFilteredSavedViewsOptions(filteredViews);
1263
+ };
1264
+ const handleDeleteView = (view, e) => {
1265
+ e.stopPropagation();
1266
+ e.preventDefault();
1267
+ setOpenDeletePrompt(true);
1268
+ setDeleteView(view);
1269
+ };
1270
+ useEffect(() => {
1271
+ if (!props.isDeleteViewLoading) {
1272
+ setOpenDeletePrompt(false);
1273
+ }
1274
+ }, [props.isDeleteViewLoading]);
1275
+ useEffect(() => {
1276
+ if (selectedBadge === "All") {
1277
+ setFilteredSavedViewsOptions([...savedViewsOptions]);
1278
+ } else {
1279
+ setFilteredSavedViewsOptions(
1280
+ savedViewsOptions.filter((view) => view.viewType === selectedBadge)
1281
+ );
1282
+ }
1283
+ }, [selectedBadge, savedViewsOptions]);
1284
+ const handleSaveViewClick = (view) => {
1285
+ setFilteredSavedViewsOptions(
1286
+ (prev) => prev.map((item) => {
1287
+ if (item.viewName === view.viewName) {
1288
+ return {
1289
+ ...item,
1290
+ isActive: true
1291
+ };
1292
+ }
1293
+ return {
1294
+ ...item,
1295
+ isActive: false
1296
+ };
1297
+ })
1298
+ );
1299
+ setSelectedView(view);
1300
+ };
1301
+ const nameConflictExcludeView = isEditView ? editedView : (selectedSavedView == null ? void 0 : selectedSavedView.value) ? {
1302
+ viewName: selectedSavedView.value,
1303
+ viewType: selectedSavedView.viewType
1304
+ } : null;
1305
+ const nameConflict = !props.isSavingViewLoading && !isInputValueEmpty && !isViewNameUnique(
1306
+ inputValue,
1307
+ selectedViewType,
1308
+ isDefaultView,
1309
+ savedViewsOptions,
1310
+ nameConflictExcludeView,
1311
+ props.isViewNameUniqueAcrossTypes
1312
+ );
1313
+ return /* @__PURE__ */ jsxs("div", { className: "table-setting-columns-settings", children: [
1314
+ /* @__PURE__ */ jsx(
1315
+ "div",
1316
+ {
1317
+ ref: reorderLiveRegionRef,
1318
+ "aria-live": "polite",
1319
+ className: "table-setting-reorder-live-region"
1320
+ }
1321
+ ),
1322
+ props.isSaveViewEnabled && /* @__PURE__ */ jsxs("div", { className: "table-setting-save-view-container", children: [
1323
+ savedViewsOptions.length === 0 ? /* @__PURE__ */ jsxs("div", { className: "save-view-icon-title", children: [
1324
+ /* @__PURE__ */ jsx("img", { alt: "save-view-icon", src: saveViewIcon }),
1325
+ /* @__PURE__ */ jsx("span", { className: "save-view-title", children: "No views saved yet" })
1326
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "save-view-container-active-view", children: [
1327
+ /* @__PURE__ */ jsx(
1328
+ Badge,
1329
+ {
1330
+ color: "success",
1331
+ label: `${((_b = savedViewsOptions.find((view) => view.isActive)) == null ? void 0 : _b.viewName) || "Not Applicable"}`,
1332
+ variant: "stroke"
1333
+ }
1334
+ ),
1335
+ /* @__PURE__ */ jsx(
1336
+ Button,
1337
+ {
1338
+ icon: openSaveViewMenu ? /* @__PURE__ */ jsx(default_1, {}) : /* @__PURE__ */ jsx(default_1$1, {}),
1339
+ size: "small",
1340
+ variant: "tertiary",
1341
+ onClick: () => {
1342
+ setOpenSaveViewMenu(!openSaveViewMenu);
1343
+ setFilteredSavedViewsOptions([...savedViewsOptions]);
1344
+ }
1345
+ }
1346
+ )
1347
+ ] }),
1348
+ /* @__PURE__ */ jsx(
1349
+ Button,
1350
+ {
1351
+ size: "small",
1352
+ variant: "tertiary",
1353
+ onClick: () => {
1354
+ setOpenSaveViewModal(true);
1355
+ },
1356
+ children: "Save View"
1357
+ }
1358
+ )
1359
+ ] }),
1360
+ openSaveViewMenu && /* @__PURE__ */ jsxs("div", { className: "save-view-menu", children: [
1361
+ /* @__PURE__ */ jsxs("div", { className: "save-view-menu-title", children: [
1362
+ /* @__PURE__ */ jsx("span", { children: "Saved views" }),
1363
+ /* @__PURE__ */ jsxs("div", { className: "save-view-menu-default-view", children: [
1364
+ /* @__PURE__ */ jsx("img", { alt: "default-view-icon", src: defaultViewActiveIcon }),
1365
+ /* @__PURE__ */ jsx("span", { className: "save-view-menu-default-view-text", children: "Default" })
1366
+ ] })
1367
+ ] }),
1368
+ /* @__PURE__ */ jsxs("div", { className: "save-view-menu-view-type", children: [
1369
+ /* @__PURE__ */ jsx(
1370
+ Badge,
1371
+ {
1372
+ color: selectedBadge === "All" ? "info" : "default",
1373
+ label: "All",
1374
+ size: "small",
1375
+ variant: "stroke",
1376
+ onClick: () => {
1377
+ setSelectedBadge("All");
1378
+ setFilteredSavedViewsOptions([...savedViewsOptions]);
1379
+ }
1380
+ }
1381
+ ),
1382
+ (_d = (_c = props.saveViewCustomFilter) == null ? void 0 : _c.options) == null ? void 0 : _d.map((option) => /* @__PURE__ */ jsx(
1383
+ Badge,
1384
+ {
1385
+ isIcon: true,
1386
+ color: selectedBadge === option.value ? "info" : "default",
1387
+ icon: getViewTypeIcon(option.value),
1388
+ label: option.label,
1389
+ size: "small",
1390
+ variant: "stroke",
1391
+ onClick: () => {
1392
+ setSelectedBadge(option.value);
1393
+ setFilteredSavedViewsOptions(
1394
+ savedViewsOptions.filter((view) => view.viewType === option.value)
1395
+ );
1396
+ }
1397
+ },
1398
+ option.value
1399
+ ))
1400
+ ] }),
1401
+ /* @__PURE__ */ jsx("div", { className: "save-view-menu-search-container", children: /* @__PURE__ */ jsx(
1402
+ Input,
1403
+ {
1404
+ leftIcon: /* @__PURE__ */ jsx(default_1$2, {}),
1405
+ placeholder: "Search here...",
1406
+ value: saveViewSearchText,
1407
+ onChange: handleSaveViewSearchChange
1408
+ }
1409
+ ) }),
1410
+ /* @__PURE__ */ jsx("div", { className: "save-view-menu-view-list-container", children: props.customRenderSaveViewContent ? props.customRenderSaveViewContent : filteredSavedViewsOptions.length > 0 && filteredSavedViewsOptions.map((view, idx) => {
1411
+ var _a2;
1412
+ return /* @__PURE__ */ jsxs(
1413
+ "div",
1414
+ {
1415
+ "aria-label": `Saved view ${view.viewName}`,
1416
+ className: `save-view-menu-view-list-item ${view.isActive ? "active" : ""}`,
1417
+ role: "button",
1418
+ tabIndex: idx === 0 ? 0 : -1,
1419
+ onClick: () => {
1420
+ handleSaveViewClick(view);
1421
+ },
1422
+ onKeyDown: (e) => {
1423
+ var _a3, _b2;
1424
+ const current = e.currentTarget;
1425
+ switch (e.key) {
1426
+ case "Enter":
1427
+ case " ":
1428
+ e.preventDefault();
1429
+ handleSaveViewClick(view);
1430
+ break;
1431
+ case "ArrowDown": {
1432
+ e.preventDefault();
1433
+ (_a3 = current.nextElementSibling) == null ? void 0 : _a3.focus();
1434
+ break;
1435
+ }
1436
+ case "ArrowUp": {
1437
+ e.preventDefault();
1438
+ (_b2 = current.previousElementSibling) == null ? void 0 : _b2.focus();
1439
+ break;
1440
+ }
1441
+ }
1442
+ },
1443
+ children: [
1444
+ /* @__PURE__ */ jsxs("span", { className: "save-view-menu-view-list-item-name", children: [
1445
+ /* @__PURE__ */ jsx(
1446
+ "span",
1447
+ {
1448
+ "aria-hidden": "true",
1449
+ className: "save-view-menu-view-list-item-type-icon",
1450
+ title: view.viewType,
1451
+ children: getViewTypeIcon(view.viewType, (_a2 = props.saveViewCustomFilter) == null ? void 0 : _a2.options)
1452
+ }
1453
+ ),
1454
+ /* @__PURE__ */ jsx("span", { className: "save-view-menu-view-list-item-name-text", children: view.viewName })
1455
+ ] }),
1456
+ /* @__PURE__ */ jsxs("div", { className: "save-view-menu-view-list-item-actions", children: [
1457
+ (view == null ? void 0 : view.isEditable) && /* @__PURE__ */ jsx(
1458
+ "img",
1459
+ {
1460
+ alt: "save-view-edit-icon",
1461
+ src: saveViewEditIcon,
1462
+ onClick: (e) => {
1463
+ handleEditView(view, e);
1464
+ }
1465
+ }
1466
+ ),
1467
+ (view == null ? void 0 : view.isDeletable) && /* @__PURE__ */ jsx(
1468
+ "img",
1469
+ {
1470
+ alt: "save-view-delete-icon",
1471
+ src: saveViewDeleteIcon,
1472
+ onClick: (e) => {
1473
+ handleDeleteView(view, e);
1474
+ }
1475
+ }
1476
+ ),
1477
+ !(view == null ? void 0 : view.notReqDefaultView) && ((view == null ? void 0 : view.isDefaultView) ? /* @__PURE__ */ jsx(
1478
+ "img",
1479
+ {
1480
+ alt: "default-view-icon",
1481
+ className: "default-view-active-icon",
1482
+ src: defaultViewActiveIcon,
1483
+ onClick: (e) => {
1484
+ e.stopPropagation();
1485
+ e.preventDefault();
1486
+ props.handleSetDefaultView(view);
1487
+ }
1488
+ }
1489
+ ) : /* @__PURE__ */ jsx(
1490
+ "img",
1491
+ {
1492
+ alt: "default-view-icon",
1493
+ src: defaultViewIcon,
1494
+ onClick: (e) => {
1495
+ e.stopPropagation();
1496
+ e.preventDefault();
1497
+ props.handleSetDefaultView(view);
1498
+ }
1499
+ }
1500
+ ))
1501
+ ] })
1502
+ ]
1503
+ },
1504
+ view.viewName + idx
1505
+ );
1506
+ }) }),
1507
+ /* @__PURE__ */ jsx("hr", { className: "save-view-menu-view-list-item-divider" }),
1508
+ /* @__PURE__ */ jsxs("div", { className: "save-view-menu-footer", children: [
1509
+ /* @__PURE__ */ jsx(
1510
+ Button,
1511
+ {
1512
+ size: "medium",
1513
+ variant: "tertiary",
1514
+ onClick: () => {
1515
+ setOpenSaveViewMenu(false);
1516
+ setFilteredSavedViewsOptions([...savedViewsOptions]);
1517
+ },
1518
+ children: "Cancel"
1519
+ }
1520
+ ),
1521
+ /* @__PURE__ */ jsx(
1522
+ Button,
1523
+ {
1524
+ disabled: props.customRenderSaveViewContent,
1525
+ size: "medium",
1526
+ variant: "primary",
1527
+ onClick: () => {
1528
+ var _a2;
1529
+ (_a2 = props.handleSavedViewClick) == null ? void 0 : _a2.call(props, selectedView);
1530
+ updateColumnState();
1531
+ setOpenSaveViewMenu(false);
1532
+ },
1533
+ children: "Apply"
1534
+ }
1535
+ )
1536
+ ] })
1537
+ ] }),
1538
+ /* @__PURE__ */ jsx(
1539
+ Modal,
1540
+ {
1541
+ className: "save-view-modal",
1542
+ height: "542px",
1543
+ open: openSaveViewModal,
1544
+ primaryButtonLabel: props.isSavingViewLoading ? "Saving..." : "Save",
1545
+ primaryButtonProps: {
1546
+ disabled: (isInputValueEmpty || props.maxSavedViews != null && savedViewsOptions.length >= props.maxSavedViews) && !isReplaceViewSelected || nameConflict || props.isSavingViewLoading,
1547
+ loading: props.isSavingViewLoading,
1548
+ iconPlacement: "right"
1549
+ },
1550
+ secondaryButtonLabel: "Cancel",
1551
+ title: isEditView ? "Edit view" : "Save view",
1552
+ width: "422px",
1553
+ onClose: handleCloseSaveViewModal,
1554
+ onPrimaryButtonClick: handleSaveAndApply,
1555
+ onSecondaryButtonClick: handleCloseSaveViewModal,
1556
+ children: /* @__PURE__ */ jsxs("div", { className: "save-view-modal-children", children: [
1557
+ props.maxSavedViews != null && /* @__PURE__ */ jsx("div", { className: "save-view-modal-children-header", children: /* @__PURE__ */ jsx("span", { className: "save-view-modal-children-header-text", children: `${props.maxSavedViews - savedViewsOptions.length}/${props.maxSavedViews} views remaining` }) }),
1558
+ /* @__PURE__ */ jsxs(
1559
+ "div",
1560
+ {
1561
+ className: `save-view-modal-children-body${props.maxSavedViews == null ? " save-view-modal-children-body-no-header" : ""}`,
1562
+ children: [
1563
+ /* @__PURE__ */ jsx("div", { className: "save-view-modal-children-body-input", children: /* @__PURE__ */ jsx(
1564
+ Input,
1565
+ {
1566
+ helperText: nameConflict ? "A view with this name already exists" : "",
1567
+ isDisabled: isReplaceViewSelected,
1568
+ isError: nameConflict,
1569
+ isHelperText: nameConflict,
1570
+ label: "New view name",
1571
+ placeholder: "Enter here",
1572
+ readOnly: isReplaceViewSelected,
1573
+ value: inputValue,
1574
+ onChange: (e) => {
1575
+ setInputValue(e.target.value);
1576
+ setSelectedSavedView(null);
1577
+ }
1578
+ }
1579
+ ) }),
1580
+ !isEditView && /* @__PURE__ */ jsxs("div", { className: "save-view-modal-children-body-radio-group", children: [
1581
+ /* @__PURE__ */ jsx("span", { className: "save-view-modal-children-body-radio-group-text", children: "View type" }),
1582
+ /* @__PURE__ */ jsx(
1583
+ RadioButtonGroup,
1584
+ {
1585
+ isDisabled: isReplaceViewSelected,
1586
+ options: (_f = (_e = props.saveViewCustomFilter) == null ? void 0 : _e.options) == null ? void 0 : _f.filter(
1587
+ (option) => !(option == null ? void 0 : option.notReqInSaveView)
1588
+ ),
1589
+ orientation: "row",
1590
+ selectedOption: selectedViewType,
1591
+ onChange: (event) => {
1592
+ setSelectedViewType(event.target.value);
1593
+ }
1594
+ }
1595
+ )
1596
+ ] }),
1597
+ /* @__PURE__ */ jsx("div", { className: "save-view-modal-children-body-checkbox", children: /* @__PURE__ */ jsx(
1598
+ Checkbox,
1599
+ {
1600
+ checked: isDefaultView,
1601
+ disabled: isReplaceViewSelected,
1602
+ label: "Make it default view",
1603
+ onChange: () => {
1604
+ setIsDefaultView(!isDefaultView);
1605
+ }
1606
+ }
1607
+ ) }),
1608
+ /* @__PURE__ */ jsx("div", { className: "save-view-modal-children-body-replace-view", children: /* @__PURE__ */ jsx("span", { children: "Or replace with saved view" }) }),
1609
+ /* @__PURE__ */ jsx("div", { className: "save-view-modal-children-body-replace-view-select", children: /* @__PURE__ */ jsx(
1610
+ Select,
1611
+ {
1612
+ isClearable: true,
1613
+ withPortal: true,
1614
+ currentOptions: currentSaveViewOptions,
1615
+ initialOptions: currentSaveViewOptions,
1616
+ isDisabled: savedViewsOptions.length === 0 || !isInputValueEmpty && !isReplaceViewSelected || isEditView,
1617
+ isOpen,
1618
+ label: "Replace with",
1619
+ minWidth: "100%",
1620
+ selectedOptions: selectedSavedView,
1621
+ setCurrentOptions: setCurrentSaveViewOptions,
1622
+ setIsOpen,
1623
+ setSelectedOptions: setSelectedSavedView
1624
+ }
1625
+ ) })
1626
+ ]
1627
+ }
1628
+ )
1629
+ ] })
1630
+ }
1631
+ ),
1632
+ /* @__PURE__ */ jsx(
1633
+ Prompt,
1634
+ {
1635
+ handleClose: (e) => {
1636
+ e.stopPropagation();
1637
+ setOpenDeletePrompt(false);
1638
+ },
1639
+ isOpen: openDeletePrompt,
1640
+ primaryButtonLabel: "Yes,Delete",
1641
+ primaryButtonProps: {
1642
+ loading: props.isDeleteViewLoading,
1643
+ iconPlacement: "right"
1644
+ },
1645
+ secondaryButtonLabel: "Cancel",
1646
+ title: "Delete, Are you sure?",
1647
+ variant: "error",
1648
+ onPrimaryButtonClick: (e) => {
1649
+ var _a2;
1650
+ e.stopPropagation();
1651
+ (_a2 = props.handleDeleteViewClick) == null ? void 0 : _a2.call(props, deleteView);
1652
+ },
1653
+ onSecondaryButtonClick: (e) => {
1654
+ e.stopPropagation();
1655
+ setOpenDeletePrompt(false);
1656
+ },
1657
+ children: props.deleteViewPromptText
1658
+ }
1659
+ ),
1660
+ /* @__PURE__ */ jsxs("div", { className: "table-setting-column-search-container", children: [
1661
+ /* @__PURE__ */ jsx("span", { className: "table-setting-column-collapse-slot", children: /* @__PURE__ */ jsx(
1662
+ IconButton,
1663
+ {
1664
+ "aria-label": collapsedColumn ? "Expand columns" : "Collapse columns",
1665
+ className: "table-setting-column-collapse-btn",
1666
+ onClick: toggleColumnCollapse,
1667
+ children: collapsedColumn ? /* @__PURE__ */ jsx(default_1$3, {}) : /* @__PURE__ */ jsx(default_1, {})
1668
+ }
1669
+ ) }),
1670
+ /* @__PURE__ */ jsxs("div", { className: "table-setting-column-search-controls", children: [
1671
+ /* @__PURE__ */ jsx(
1672
+ Checkbox,
1673
+ {
1674
+ "aria-label": "Toggle all columns",
1675
+ checked: allCheckState.checked,
1676
+ variant: allCheckState.indeterminate ? "dashed" : "default",
1677
+ onChange: onAllColumnCheckBoxChange
1678
+ }
1679
+ ),
1680
+ /* @__PURE__ */ jsx(
1681
+ Input,
1682
+ {
1683
+ placeholder: "Search",
1684
+ rightIcon: /* @__PURE__ */ jsx(default_1$2, {}),
1685
+ value: searchInputValue,
1686
+ onChange: handleSearchChange
1687
+ }
1688
+ )
1689
+ ] })
1690
+ ] }),
1691
+ !collapsedColumn && /* @__PURE__ */ jsx(
1692
+ "div",
1693
+ {
1694
+ className: `table-setting-column-collapse-container ${props.isSaveViewEnabled ? "save-view-enabled" : ""}`,
1695
+ children: /* @__PURE__ */ jsxs(
1696
+ DndContext,
1697
+ {
1698
+ collisionDetection: closestCenter,
1699
+ sensors,
1700
+ onDragCancel: handleDragCancel,
1701
+ onDragEnd: handleDragEnd,
1702
+ onDragStart: handleDragStart,
1703
+ children: [
1704
+ /* @__PURE__ */ jsxs(SortableContext, { items: sortableItems, children: [
1705
+ frozenColumn.length > 0 && !(frozenColumn.length === 1 && frozenColumn[0].headerName === "N/A") && /* @__PURE__ */ jsxs("div", { className: "table-setting-collapse-columns-container", children: [
1706
+ /* @__PURE__ */ jsx("h3", { children: "Frozen columns" }),
1707
+ /* @__PURE__ */ jsx(
1708
+ "div",
1709
+ {
1710
+ "aria-label": "Frozen columns",
1711
+ className: "table-setting-frozen-columns-list",
1712
+ role: "tree",
1713
+ children: filteredFrozenColumns.map(
1714
+ (column) => column.headerName !== "N/A" && renderColumnRow(column, 0, "frozen")
1715
+ )
1716
+ }
1717
+ )
1718
+ ] }),
1719
+ /* @__PURE__ */ jsxs("div", { className: "table-setting-scroll-columns-container", children: [
1720
+ /* @__PURE__ */ jsx("h3", { children: "Scrollable Columns" }),
1721
+ /* @__PURE__ */ jsxs("div", { className: "table-setting-scroll-main-column-list", children: [
1722
+ /* @__PURE__ */ jsxs("div", { className: "table-setting-scroll-main-column", children: [
1723
+ /* @__PURE__ */ jsxs("div", { className: "table-setting-column-leading", children: [
1724
+ /* @__PURE__ */ jsx("span", { className: "table-setting-column-collapse-slot", children: /* @__PURE__ */ jsx(
1725
+ IconButton,
1726
+ {
1727
+ "aria-label": collapsedScrollable ? "Expand scrollable columns" : "Collapse scrollable columns",
1728
+ className: "table-setting-column-collapse-btn",
1729
+ onClick: toggleScrollableCollapse,
1730
+ children: collapsedScrollable ? /* @__PURE__ */ jsx(default_1$3, {}) : /* @__PURE__ */ jsx(default_1, {})
1731
+ }
1732
+ ) }),
1733
+ /* @__PURE__ */ jsx(
1734
+ Checkbox,
1735
+ {
1736
+ "aria-label": "Toggle main columns",
1737
+ checked: mainCheckState.checked,
1738
+ variant: mainCheckState.indeterminate ? "dashed" : "default",
1739
+ onChange: onMainCheckboxChange
1740
+ }
1741
+ )
1742
+ ] }),
1743
+ /* @__PURE__ */ jsx("span", { className: "table-setting-column-name", children: "Main Column" })
1744
+ ] }),
1745
+ /* @__PURE__ */ jsx(
1746
+ "div",
1747
+ {
1748
+ "aria-label": "Scrollable columns",
1749
+ className: "table-setting-scroll-inner-column-list",
1750
+ role: "tree",
1751
+ children: !collapsedScrollable && filteredScrollableColumns.map(
1752
+ (column) => column.headerName !== "N/A" && renderColumnRow(column, 0, "scrollable")
1753
+ )
1754
+ }
1755
+ )
1756
+ ] })
1757
+ ] })
1758
+ ] }),
1759
+ /* @__PURE__ */ jsx(DragOverlay, { adjustScale: false, dropAnimation: null, children: activeDragColumn ? /* @__PURE__ */ jsxs("div", { className: "table-setting-column-drag-overlay", role: "presentation", children: [
1760
+ /* @__PURE__ */ jsx(DragIndicator, { className: "table-setting-column-drag-overlay-icon" }),
1761
+ /* @__PURE__ */ jsx("span", { className: "table-setting-column-drag-overlay-label", children: capitalizeHeader(activeDragColumn.headerName) })
1762
+ ] }) : null })
1763
+ ]
1764
+ }
1765
+ )
1766
+ }
1767
+ )
1768
+ ] });
1769
+ });
1770
+ const updateFontSizeOnToolPanel = (fontSizeType) => {
1771
+ let fontSize;
1772
+ switch (fontSizeType) {
1773
+ case "small":
1774
+ fontSize = "12px";
1775
+ break;
1776
+ case "medium":
1777
+ fontSize = "14px";
1778
+ break;
1779
+ case "large":
1780
+ fontSize = "16px";
1781
+ break;
1782
+ default:
1783
+ fontSize = "14px";
1784
+ }
1785
+ return fontSize;
1786
+ };
1787
+ export {
1788
+ Columns,
1789
+ freezeColumn,
1790
+ getMainMenuItems,
1791
+ getTableMeta,
1792
+ onColMenuAutoAdjustClick,
1793
+ onColMenuFreezeClick,
1794
+ sortFunc,
1795
+ updateFontSizeOnToolPanel
1796
+ };