@monolith-forensics/monolith-ui 1.8.1-dev.3 → 1.8.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 (171) hide show
  1. package/dist/Button/Button.js +58 -9
  2. package/dist/Calendar/Calendar.d.ts +2 -7
  3. package/dist/Calendar/Calendar.js +49 -226
  4. package/dist/Calendar/CalendarStyles.d.ts +2 -6
  5. package/dist/Calendar/CalendarStyles.js +33 -153
  6. package/dist/Calendar/calendarHelpers.d.ts +2 -6
  7. package/dist/Calendar/calendarHelpers.js +5 -13
  8. package/dist/Charts/BarChart/BarChart.js +28 -14
  9. package/dist/Charts/BarChart/BarChart.styled.d.ts +7 -2
  10. package/dist/Charts/BarChart/BarChart.styled.js +5 -1
  11. package/dist/Charts/BarChart/BarChart.types.d.ts +13 -5
  12. package/dist/Charts/ChartUtils/chartSizing.d.ts +20 -0
  13. package/dist/Charts/ChartUtils/chartSizing.js +83 -0
  14. package/dist/Charts/ChartUtils/index.d.ts +1 -0
  15. package/dist/Charts/ChartUtils/index.js +1 -0
  16. package/dist/Charts/HeatMap/HeatMap.js +28 -7
  17. package/dist/Charts/HeatMap/HeatMap.styled.d.ts +6 -2
  18. package/dist/Charts/HeatMap/HeatMap.styled.js +3 -0
  19. package/dist/Charts/HeatMap/HeatMap.types.d.ts +7 -1
  20. package/dist/Charts/LineChart/LineChart.js +34 -15
  21. package/dist/Charts/LineChart/LineChart.styled.d.ts +7 -2
  22. package/dist/Charts/LineChart/LineChart.styled.js +5 -1
  23. package/dist/Charts/LineChart/LineChart.types.d.ts +13 -5
  24. package/dist/Charts/PieChart/PieChart.js +48 -33
  25. package/dist/Charts/PieChart/PieChart.styled.d.ts +7 -2
  26. package/dist/Charts/PieChart/PieChart.styled.js +6 -1
  27. package/dist/Charts/PieChart/PieChart.types.d.ts +7 -3
  28. package/dist/CheckBox/CheckBox.js +19 -36
  29. package/dist/DateInput/DateInput.js +143 -198
  30. package/dist/DropDownMenu/DropDownMenu.js +15 -25
  31. package/dist/DropDownMenu/components/MenuComponent.js +2 -8
  32. package/dist/DropDownMenu/components/MenuItem.d.ts +0 -2
  33. package/dist/DropDownMenu/components/MenuItem.js +21 -25
  34. package/dist/DropDownMenu/components/MenuItemList.d.ts +0 -3
  35. package/dist/DropDownMenu/components/MenuItemList.js +86 -192
  36. package/dist/DropDownMenu/components/StyledContent.js +2 -1
  37. package/dist/DropDownMenu/components/StyledFloatContainer.js +1 -1
  38. package/dist/DropDownMenu/types.d.ts +0 -3
  39. package/dist/FieldLabel/FieldLabel.js +12 -4
  40. package/dist/FileInputField/FileInputField.js +23 -4
  41. package/dist/FileViewer/viewers/ImageViewer.js +18 -75
  42. package/dist/FormSection/FormSection.js +25 -5
  43. package/dist/IconButton/IconButton.js +16 -2
  44. package/dist/Input/Input.js +56 -7
  45. package/dist/MonolithUIProvider/MonolithUIProvider.d.ts +4 -1
  46. package/dist/Pill/Pill.js +79 -8
  47. package/dist/Popover/Popover.context.d.ts +1 -2
  48. package/dist/Popover/Popover.js +2 -5
  49. package/dist/Popover/Popover.styles.d.ts +6 -1
  50. package/dist/Popover/Popover.styles.js +28 -11
  51. package/dist/Popover/Popover.transitions.d.ts +2 -4
  52. package/dist/Popover/Popover.transitions.js +49 -23
  53. package/dist/Popover/PopoverDropdown.js +8 -6
  54. package/dist/Popover/PopoverTarget.js +3 -6
  55. package/dist/QueryFilter/DefaultOperators.d.ts +76 -1
  56. package/dist/QueryFilter/DefaultOperators.js +21 -1
  57. package/dist/QueryFilter/QueryFilter.d.ts +1 -1
  58. package/dist/QueryFilter/QueryFilter.js +303 -3
  59. package/dist/QueryFilter/index.d.ts +2 -3
  60. package/dist/QueryFilter/index.js +2 -3
  61. package/dist/QueryFilter/types.d.ts +52 -1
  62. package/dist/QueryFilter/types.js +1 -1
  63. package/dist/QueryFilter/useQueryFilter.d.ts +1 -1
  64. package/dist/QueryFilter/useQueryFilter.js +19 -23
  65. package/dist/RichTextEditor/Components/CodeBlockBaseButton.d.ts +18 -0
  66. package/dist/RichTextEditor/Components/CodeBlockBaseButton.js +6 -0
  67. package/dist/RichTextEditor/Components/CodeBlockCopyButton.d.ts +9 -0
  68. package/dist/RichTextEditor/Components/CodeBlockCopyButton.js +42 -0
  69. package/dist/RichTextEditor/Components/CodeBlockFormatButton.d.ts +10 -0
  70. package/dist/RichTextEditor/Components/CodeBlockFormatButton.js +60 -0
  71. package/dist/RichTextEditor/Components/CodeBlockLanguageSelect.d.ts +9 -0
  72. package/dist/RichTextEditor/Components/CodeBlockLanguageSelect.js +30 -0
  73. package/dist/RichTextEditor/Components/CodeBlockNodeView.d.ts +3 -0
  74. package/dist/RichTextEditor/Components/CodeBlockNodeView.js +28 -0
  75. package/dist/RichTextEditor/Components/CodeBlockWrapButton.d.ts +10 -0
  76. package/dist/RichTextEditor/Components/CodeBlockWrapButton.js +17 -0
  77. package/dist/RichTextEditor/Components/LinkEditor.d.ts +8 -0
  78. package/dist/RichTextEditor/Components/LinkEditor.js +94 -0
  79. package/dist/RichTextEditor/Components/TableTools/TableCornerMenu.d.ts +2 -0
  80. package/dist/RichTextEditor/Components/TableTools/TableCornerMenu.js +19 -0
  81. package/dist/RichTextEditor/Components/TableTools/TableInsertControls.d.ts +2 -0
  82. package/dist/RichTextEditor/Components/TableTools/TableInsertControls.js +24 -0
  83. package/dist/RichTextEditor/Components/TableTools/TableRails.d.ts +2 -0
  84. package/dist/RichTextEditor/Components/TableTools/TableRails.js +180 -0
  85. package/dist/RichTextEditor/Components/TableTools/TableToolMenu.d.ts +5 -0
  86. package/dist/RichTextEditor/Components/TableTools/TableToolMenu.js +6 -0
  87. package/dist/RichTextEditor/Components/TableTools/TableTools.actions.d.ts +5 -0
  88. package/dist/RichTextEditor/Components/TableTools/TableTools.actions.js +183 -0
  89. package/dist/RichTextEditor/Components/TableTools/TableTools.commands.d.ts +16 -0
  90. package/dist/RichTextEditor/Components/TableTools/TableTools.commands.js +217 -0
  91. package/dist/RichTextEditor/Components/TableTools/TableTools.constants.d.ts +8 -0
  92. package/dist/RichTextEditor/Components/TableTools/TableTools.constants.js +11 -0
  93. package/dist/RichTextEditor/Components/TableTools/TableTools.d.ts +3 -0
  94. package/dist/RichTextEditor/Components/TableTools/TableTools.geometry.d.ts +23 -0
  95. package/dist/RichTextEditor/Components/TableTools/TableTools.geometry.js +75 -0
  96. package/dist/RichTextEditor/Components/TableTools/TableTools.js +3 -0
  97. package/dist/RichTextEditor/Components/TableTools/TableTools.selectors.d.ts +16 -0
  98. package/dist/RichTextEditor/Components/TableTools/TableTools.selectors.js +53 -0
  99. package/dist/RichTextEditor/Components/TableTools/TableTools.styled.d.ts +40 -0
  100. package/dist/RichTextEditor/Components/TableTools/TableTools.styled.js +167 -0
  101. package/dist/RichTextEditor/Components/TableTools/TableTools.types.d.ts +76 -0
  102. package/dist/RichTextEditor/Components/TableTools/TableTools.types.js +1 -0
  103. package/dist/RichTextEditor/Components/TableTools/TableTools.utils.d.ts +4 -0
  104. package/dist/RichTextEditor/Components/TableTools/TableTools.utils.js +4 -0
  105. package/dist/RichTextEditor/Components/TableTools/TableToolsPopover.d.ts +2 -0
  106. package/dist/RichTextEditor/Components/TableTools/TableToolsPopover.js +12 -0
  107. package/dist/RichTextEditor/Components/TableTools/index.d.ts +3 -0
  108. package/dist/RichTextEditor/Components/TableTools/index.js +2 -0
  109. package/dist/RichTextEditor/Enums/HighlightColors.d.ts +9 -0
  110. package/dist/RichTextEditor/Enums/HighlightColors.js +10 -0
  111. package/dist/RichTextEditor/Extensions/getTiptapExtensions.js +15 -5
  112. package/dist/RichTextEditor/Plugins/ImageActionsPlugin.js +4 -7
  113. package/dist/RichTextEditor/Plugins/UploadImagesPlugin.d.ts +0 -15
  114. package/dist/RichTextEditor/Plugins/UploadImagesPlugin.js +51 -115
  115. package/dist/RichTextEditor/Plugins/index.d.ts +0 -1
  116. package/dist/RichTextEditor/Plugins/index.js +0 -1
  117. package/dist/RichTextEditor/RichTextEditor.d.ts +2 -3
  118. package/dist/RichTextEditor/RichTextEditor.js +35 -302
  119. package/dist/RichTextEditor/Utils/codeBlockUtils.d.ts +20 -0
  120. package/dist/RichTextEditor/Utils/codeBlockUtils.js +137 -0
  121. package/dist/RichTextEditor/Utils/codeUtils.d.ts +3 -0
  122. package/dist/RichTextEditor/Utils/codeUtils.js +12 -0
  123. package/dist/RichTextEditor/Utils/linkUtils.d.ts +19 -0
  124. package/dist/RichTextEditor/Utils/linkUtils.js +57 -0
  125. package/dist/RichTextEditor/Utils/tableUtils.d.ts +1 -0
  126. package/dist/RichTextEditor/Utils/tableUtils.js +1 -0
  127. package/dist/SegmentedControl/SegmentedControl.utils.d.ts +2 -2
  128. package/dist/SegmentedControl/SegmentedControl.utils.js +30 -3
  129. package/dist/SelectBox/SelectBox.js +5 -5
  130. package/dist/SelectBox/select-box.styled-components.d.ts +1 -4
  131. package/dist/SelectBox/select-box.styled-components.js +48 -11
  132. package/dist/SelectBox/types.d.ts +0 -1
  133. package/dist/Switch/Switch.d.ts +2 -2
  134. package/dist/Switch/Switch.js +83 -18
  135. package/dist/Table/ColumnResizer.d.ts +9 -6
  136. package/dist/Table/ColumnResizer.js +10 -30
  137. package/dist/Table/StateStorage.d.ts +0 -4
  138. package/dist/Table/StateStorage.js +0 -13
  139. package/dist/Table/Table.js +12 -160
  140. package/dist/Table/TableComponents.d.ts +0 -10
  141. package/dist/Table/TableComponents.js +10 -71
  142. package/dist/Table/TableDefaults.d.ts +0 -7
  143. package/dist/Table/TableDefaults.js +0 -7
  144. package/dist/Table/TableHeader.js +16 -31
  145. package/dist/Table/TableMenu/TableMenu.js +1 -1
  146. package/dist/Table/TableProvider.js +75 -354
  147. package/dist/Table/TableRow.js +16 -28
  148. package/dist/Table/Utils/index.d.ts +1 -0
  149. package/dist/Table/Utils/index.js +1 -0
  150. package/dist/Table/types.d.ts +19 -70
  151. package/dist/TagBox/TagBox.d.ts +1 -1
  152. package/dist/TagBox/TagBox.js +80 -22
  153. package/dist/TagBox/types.d.ts +0 -1
  154. package/dist/TextArea/TextArea.js +23 -9
  155. package/dist/TextInput/TextInput.js +6 -12
  156. package/dist/Utilities/parseTimestamp.js +6 -11
  157. package/dist/core/ArrowButton.d.ts +0 -2
  158. package/dist/core/ArrowButton.js +3 -7
  159. package/dist/core/ClearButton.d.ts +0 -2
  160. package/dist/core/ClearButton.js +3 -7
  161. package/dist/core/controlSizes.js +9 -9
  162. package/dist/core/index.d.ts +0 -1
  163. package/dist/core/index.js +0 -1
  164. package/dist/index.d.ts +0 -3
  165. package/dist/index.js +0 -2
  166. package/dist/theme/variants.js +8 -2
  167. package/package.json +18 -26
  168. package/dist/DateTimeRangePicker/DateTimeRangePicker.d.ts +0 -41
  169. package/dist/DateTimeRangePicker/DateTimeRangePicker.js +0 -363
  170. package/dist/DateTimeRangePicker/index.d.ts +0 -2
  171. package/dist/DateTimeRangePicker/index.js +0 -2
@@ -29,27 +29,6 @@ import { SelectionStatus } from "./enums";
29
29
  import moment from "moment";
30
30
  import { useControlled } from "../Utilities";
31
31
  import { exportTableToExcel } from "./Utils";
32
- const RESERVED_FIELDS = [
33
- "__key",
34
- "__index",
35
- "__level",
36
- "__parentKey",
37
- "__hasChildren",
38
- "__childKeys",
39
- ];
40
- const EMPTY_TREE_META = {
41
- parentKeyMap: new Map(),
42
- childrenKeyMap: new Map(),
43
- expandableKeys: [],
44
- };
45
- const DEFAULT_TREE_OPTIONS = {
46
- enabled: false,
47
- mode: "nested",
48
- childrenField: "children",
49
- parentIdField: "parentId",
50
- indentPx: 16,
51
- autoExpandOnMatch: true,
52
- };
53
32
  const calculateSelectionTotal = (selectionState, totalRecords, dataLength = 0) => {
54
33
  if (!selectionState) {
55
34
  return 0;
@@ -68,85 +47,12 @@ const calculateSelectionTotal = (selectionState, totalRecords, dataLength = 0) =
68
47
  }
69
48
  };
70
49
  export const TableContext = createContext(null);
71
- const expandColumnWidthsToTable = ({ columnWidths, columns, expansionColumns, tableWidth, fixedCellWidth, }) => {
72
- const availableWidth = Math.max(tableWidth - fixedCellWidth, 0);
73
- const columnWidthTotal = columns.reduce((sum, column) => {
74
- return sum + (columnWidths[column.columnId] || 0);
75
- }, 0);
76
- const remainingWidth = availableWidth - columnWidthTotal;
77
- if (remainingWidth <= 0 || columns.length === 0) {
78
- return columnWidths;
79
- }
80
- const targetColumns = expansionColumns.length > 0
81
- ? expansionColumns
82
- : [columns[columns.length - 1]].filter(Boolean);
83
- const widthToAdd = remainingWidth / targetColumns.length;
84
- return targetColumns.reduce((widths, column) => (Object.assign(Object.assign({}, widths), { [column.columnId]: (widths[column.columnId] || column.minWidth) + widthToAdd })), columnWidths);
85
- };
86
- const getVisibleColumnLayout = ({ columns, tableWidth, fixedCellWidth, resizeColumnWidths, }) => {
87
- const visibleColumns = columns.filter((column) => column.visible !== false);
88
- const fluidColumns = visibleColumns.filter((column) => typeof column.width !== "number" || column.width <= 0);
89
- if (resizeColumnWidths) {
90
- const columnWidths = expandColumnWidthsToTable({
91
- columnWidths: resizeColumnWidths,
92
- columns: visibleColumns,
93
- expansionColumns: fluidColumns,
94
- tableWidth,
95
- fixedCellWidth,
96
- });
97
- const contentWidth = fixedCellWidth +
98
- visibleColumns.reduce((sum, column) => {
99
- return sum + (columnWidths[column.columnId] || column.minWidth);
100
- }, 0);
101
- return {
102
- contentWidth: Math.max(tableWidth, contentWidth),
103
- columnWidths,
104
- };
105
- }
106
- const fixedColumns = visibleColumns.filter((column) => typeof column.width === "number" && column.width > 0);
107
- const fixedWidth = fixedColumns.reduce((sum, column) => sum + column.width, 0);
108
- const fluidMinWidth = fluidColumns.reduce((sum, column) => sum + column.minWidth, 0);
109
- const availableFluidWidth = Math.max(tableWidth - fixedCellWidth - fixedWidth, fluidMinWidth);
110
- const fluidWidth = fluidColumns.length > 0 ? availableFluidWidth / fluidColumns.length : 0;
111
- const baseColumnWidths = visibleColumns.reduce((widths, column) => {
112
- widths[column.columnId] =
113
- typeof column.width === "number" && column.width > 0
114
- ? column.width
115
- : Math.max(column.minWidth, fluidWidth);
116
- return widths;
117
- }, {});
118
- const columnWidths = expandColumnWidthsToTable({
119
- columnWidths: baseColumnWidths,
120
- columns: visibleColumns,
121
- expansionColumns: fluidColumns,
122
- tableWidth,
123
- fixedCellWidth,
124
- });
125
- const contentWidth = fixedCellWidth +
126
- visibleColumns.reduce((sum, column) => {
127
- return sum + columnWidths[column.columnId];
128
- }, 0);
129
- return {
130
- contentWidth: Math.max(tableWidth, contentWidth),
131
- columnWidths,
132
- };
133
- };
134
50
  const TableProvider = (_a) => {
135
- var { children, columns, data, keyField, tableInstanceRef, stateStorage, tableMenuOptions, manualSorting, manualFiltering, manualSearch, manualExport, height, maxHeight, minHeight, focusedRowId, enableColumnResize, enableSorting, compact, totalRecords, onColumnStateChange, onColumnReorder, onColumnHeaderClick, onSort, onRowUpdated, tableElement, headerRowElm, tableDimensions, targetElm, listElm, defaultSelectionState, selectionState, onSelectionChange, defaultFilterState, filterState, onFilterChange, treeOptions, treeMeta, defaultExpandedKeys, expandedKeys, onExpandedChange } = _a, props = __rest(_a, ["children", "columns", "data", "keyField", "tableInstanceRef", "stateStorage", "tableMenuOptions", "manualSorting", "manualFiltering", "manualSearch", "manualExport", "height", "maxHeight", "minHeight", "focusedRowId", "enableColumnResize", "enableSorting", "compact", "totalRecords", "onColumnStateChange", "onColumnReorder", "onColumnHeaderClick", "onSort", "onRowUpdated", "tableElement", "headerRowElm", "tableDimensions", "targetElm", "listElm", "defaultSelectionState", "selectionState", "onSelectionChange", "defaultFilterState", "filterState", "onFilterChange", "treeOptions", "treeMeta", "defaultExpandedKeys", "expandedKeys", "onExpandedChange"]);
136
- const _treeOptions = treeOptions || DEFAULT_TREE_OPTIONS;
137
- const _treeMeta = treeMeta || EMPTY_TREE_META;
138
- if (_treeOptions.enabled) {
139
- if (RESERVED_FIELDS.includes(_treeOptions.childrenField)) {
140
- throw new Error(`treeOptions.childrenField cannot be a reserved internal field: "${_treeOptions.childrenField}".`);
141
- }
142
- if (RESERVED_FIELDS.includes(_treeOptions.parentIdField)) {
143
- throw new Error(`treeOptions.parentIdField cannot be a reserved internal field: "${_treeOptions.parentIdField}".`);
144
- }
145
- }
51
+ var { children, columns, data, keyField, tableInstanceRef, stateStorage, tableMenuOptions, manualSorting, manualFiltering, manualSearch, manualExport, height, maxHeight, minHeight, focusedRowId, enableColumnResize, enableSorting, compact, totalRecords, onColumnStateChange, onColumnReorder, onColumnHeaderClick, onSort, onRowUpdated, tableElement, headerRowElm, tableDimensions, targetElm, listElm, defaultSelectionState, selectionState, onSelectionChange, defaultFilterState, filterState, onFilterChange } = _a, props = __rest(_a, ["children", "columns", "data", "keyField", "tableInstanceRef", "stateStorage", "tableMenuOptions", "manualSorting", "manualFiltering", "manualSearch", "manualExport", "height", "maxHeight", "minHeight", "focusedRowId", "enableColumnResize", "enableSorting", "compact", "totalRecords", "onColumnStateChange", "onColumnReorder", "onColumnHeaderClick", "onSort", "onRowUpdated", "tableElement", "headerRowElm", "tableDimensions", "targetElm", "listElm", "defaultSelectionState", "selectionState", "onSelectionChange", "defaultFilterState", "filterState", "onFilterChange"]);
146
52
  const _columns = useMemo(() => columns
147
53
  .map((child, index) => {
148
- if (RESERVED_FIELDS.includes(child.dataField)) {
149
- throw new Error(`dataField cannot be a reserved internal field: "${child.dataField}". Reserved: ${RESERVED_FIELDS.join(", ")}`);
54
+ if (child.dataField === "__key") {
55
+ throw new Error("dataField cannot be __key");
150
56
  }
151
57
  // check for duplicate dataFields
152
58
  const dataFieldCount = columns.filter((col) => col.dataField === child.dataField).length;
@@ -165,10 +71,9 @@ const TableProvider = (_a) => {
165
71
  ? StateStorage.getTableState(stateStorage.key)
166
72
  : undefined;
167
73
  }, [stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.key]);
168
- const { columnState: savedColumnState, selectionState: savedSelectionState, sortState: savedSortState, searchState: savedSearchState, filterState: savedFilterState, expandedKeys: savedExpandedKeys, } = savedTableState || {};
74
+ const { columnState: savedColumnState, selectionState: savedSelectionState, sortState: savedSortState, searchState: savedSearchState, filterState: savedFilterState, } = savedTableState || {};
169
75
  const [compactState, setCompactState] = useState(compact || false);
170
76
  const [columnState, _setColumnState] = useState(syncColumnState(_columns, savedColumnState));
171
- const [resizeColumnWidths, setResizeColumnWidths] = useState(null);
172
77
  const columnStateRef = useRef(columnState);
173
78
  useEffect(() => {
174
79
  columnStateRef.current = columnState;
@@ -180,8 +85,6 @@ const TableProvider = (_a) => {
180
85
  rules: [],
181
86
  });
182
87
  const [sortState, setSortState] = useState(savedSortState);
183
- const [_expandedKeys, _setExpandedKeys] = useControlled(expandedKeys, defaultExpandedKeys || savedExpandedKeys || []);
184
- const expandedKeysSet = useMemo(() => new Set(_expandedKeys), [_expandedKeys]);
185
88
  const [_selectionState, _setSelectionState] = useControlled(selectionState, defaultSelectionState || {
186
89
  selectedRowKeys: (savedSelectionState === null || savedSelectionState === void 0 ? void 0 : savedSelectionState.selectedRowKeys) || [],
187
90
  excludedRowKeys: (savedSelectionState === null || savedSelectionState === void 0 ? void 0 : savedSelectionState.excludedRowKeys) || [],
@@ -206,19 +109,6 @@ const TableProvider = (_a) => {
206
109
  return Object.assign(Object.assign({}, prev), { selectedRowKeys });
207
110
  });
208
111
  };
209
- const tableLayout = useMemo(() => getVisibleColumnLayout({
210
- columns: columnState,
211
- tableWidth: tableDimensions.width,
212
- fixedCellWidth: (props.enableSelection ? TableDefaults.actionCell.width : 0) +
213
- (props.enableActionButton ? TableDefaults.actionCell.width : 0),
214
- resizeColumnWidths,
215
- }), [
216
- columnState,
217
- tableDimensions.width,
218
- props.enableSelection,
219
- props.enableActionButton,
220
- resizeColumnWidths,
221
- ]);
222
112
  const getCalculatedSelectionTotal = () => {
223
113
  return calculateSelectionTotal({
224
114
  selectedRowKeys,
@@ -348,99 +238,58 @@ const TableProvider = (_a) => {
348
238
  }
349
239
  }
350
240
  };
351
- const compareRows = (a, b, sortState) => {
352
- if (sortState) {
353
- const aValue = a[sortState.dataField];
354
- const bValue = b[sortState.dataField];
355
- const aIsEmpty = aValue === null || aValue === undefined;
356
- const bIsEmpty = bValue === null || bValue === undefined;
357
- // Treat empty values as the smallest values.
358
- if (aIsEmpty && bIsEmpty) {
359
- return 0;
360
- }
361
- if (aIsEmpty || bIsEmpty) {
241
+ const sortData = (sortState) => {
242
+ // sort data
243
+ return data.sort((a, b) => {
244
+ if (sortState) {
245
+ const aValue = a[sortState.dataField];
246
+ const bValue = b[sortState.dataField];
247
+ const aIsEmpty = aValue === null || aValue === undefined;
248
+ const bIsEmpty = bValue === null || bValue === undefined;
249
+ // Treat empty values as the smallest values.
250
+ if (aIsEmpty && bIsEmpty) {
251
+ return 0;
252
+ }
253
+ if (aIsEmpty || bIsEmpty) {
254
+ if (sortState.dir === "asc") {
255
+ return aIsEmpty ? -1 : 1;
256
+ }
257
+ if (sortState.dir === "desc") {
258
+ return aIsEmpty ? 1 : -1;
259
+ }
260
+ }
362
261
  if (sortState.dir === "asc") {
363
- return aIsEmpty ? -1 : 1;
262
+ if (aValue < bValue) {
263
+ return -1;
264
+ }
265
+ if (aValue > bValue) {
266
+ return 1;
267
+ }
268
+ return 0;
364
269
  }
365
- if (sortState.dir === "desc") {
366
- return aIsEmpty ? 1 : -1;
270
+ else if (sortState.dir === "desc") {
271
+ if (aValue > bValue) {
272
+ return -1;
273
+ }
274
+ if (aValue < bValue) {
275
+ return 1;
276
+ }
277
+ return 0;
367
278
  }
368
279
  }
369
- if (sortState.dir === "asc") {
370
- if (aValue < bValue)
371
- return -1;
372
- if (aValue > bValue)
373
- return 1;
374
- return 0;
280
+ // sort by __index
281
+ if (a.__index < b.__index) {
282
+ return -1;
375
283
  }
376
- else if (sortState.dir === "desc") {
377
- if (aValue > bValue)
378
- return -1;
379
- if (aValue < bValue)
380
- return 1;
381
- return 0;
382
- }
383
- }
384
- // sort by __index
385
- if (a.__index < b.__index)
386
- return -1;
387
- if (a.__index > b.__index)
388
- return 1;
389
- return 0;
390
- };
391
- const sortData = (sortState) => {
392
- if (!_treeOptions.enabled) {
393
- // Flat data — sort in-place (preserves existing behavior).
394
- return data.sort((a, b) => compareRows(a, b, sortState));
395
- }
396
- // Tree-aware sort: sort siblings only, then re-DFS to rebuild the
397
- // flat order. Cross-parent sorting is never allowed in tree mode.
398
- const byKey = new Map();
399
- const childrenByParent = new Map();
400
- for (const row of data) {
401
- byKey.set(row.__key, row);
402
- const pk = row.__parentKey;
403
- if (!childrenByParent.has(pk))
404
- childrenByParent.set(pk, []);
405
- childrenByParent.get(pk).push(row);
406
- }
407
- for (const [, siblings] of childrenByParent) {
408
- siblings.sort((a, b) => compareRows(a, b, sortState));
409
- }
410
- const result = [];
411
- const walk = (parentKey) => {
412
- const siblings = childrenByParent.get(parentKey);
413
- if (!siblings)
414
- return;
415
- for (const row of siblings) {
416
- result.push(row);
417
- if (row.__hasChildren)
418
- walk(row.__key);
284
+ if (a.__index > b.__index) {
285
+ return 1;
419
286
  }
420
- };
421
- walk(undefined);
422
- return result;
423
- };
424
- const collectAncestors = (rows) => {
425
- const ancestorSet = new Set();
426
- const byKey = new Map();
427
- for (const r of data)
428
- byKey.set(r.__key, r);
429
- for (const row of rows) {
430
- let parentKey = row.__parentKey;
431
- while (parentKey) {
432
- if (ancestorSet.has(parentKey))
433
- break;
434
- ancestorSet.add(parentKey);
435
- const parent = byKey.get(parentKey);
436
- parentKey = parent === null || parent === void 0 ? void 0 : parent.__parentKey;
437
- }
438
- }
439
- return ancestorSet;
287
+ return 0;
288
+ });
440
289
  };
441
- const searchData = (rows, searchText) => {
290
+ const searchData = (searchText) => {
442
291
  const columnKeys = columnState.map((col) => col.dataField);
443
- const matched = rows.filter((row) => {
292
+ return data.filter((row) => {
444
293
  return columnKeys.some((key) => {
445
294
  if (typeof row[key] === "string") {
446
295
  return row[key].toLowerCase().includes(searchText.toLowerCase());
@@ -448,18 +297,9 @@ const TableProvider = (_a) => {
448
297
  return false;
449
298
  });
450
299
  });
451
- if (!_treeOptions.enabled) {
452
- return { rows: matched, ancestorKeys: new Set() };
453
- }
454
- const ancestorKeys = collectAncestors(matched);
455
- const visibleSet = new Set(matched.map((r) => r.__key));
456
- ancestorKeys.forEach((k) => visibleSet.add(k));
457
- return {
458
- rows: rows.filter((r) => visibleSet.has(r.__key)),
459
- ancestorKeys,
460
- };
461
300
  };
462
301
  const rowMatchesRule = (row, rule) => {
302
+ var _a, _b, _c, _d;
463
303
  const column = columnState.find((col) => col.dataField === rule.dataField);
464
304
  const { value, operator, dataField } = rule;
465
305
  if (operator.value === "isEmpty") {
@@ -471,15 +311,6 @@ const TableProvider = (_a) => {
471
311
  if (!value || value.length === 0) {
472
312
  return true;
473
313
  }
474
- if ((operator.value === "between" || operator.value === "notBetween") &&
475
- (value[0] == null ||
476
- value[0] === "" ||
477
- value[1] == null ||
478
- value[1] === "")) {
479
- return true;
480
- }
481
- const fieldText = row[dataField] == null ? "" : row[dataField].toString().toLowerCase();
482
- const ruleText = value[0] == null ? "" : value[0].toString().toLowerCase();
483
314
  switch (operator.value) {
484
315
  case "=":
485
316
  if ((column === null || column === void 0 ? void 0 : column.dataType) === "date") {
@@ -548,9 +379,9 @@ const TableProvider = (_a) => {
548
379
  return (row[dataField] < value[0] ||
549
380
  row[dataField] > value[1]);
550
381
  case "contains":
551
- return fieldText.includes(ruleText);
382
+ return (_a = row[dataField]) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes((_b = value[0]) === null || _b === void 0 ? void 0 : _b.toString().toLowerCase());
552
383
  case "doesNotContain":
553
- return !fieldText.includes(ruleText);
384
+ return !((_c = row[dataField]) === null || _c === void 0 ? void 0 : _c.toLowerCase().includes((_d = value[0]) === null || _d === void 0 ? void 0 : _d.toString().toLowerCase()));
554
385
  case "in":
555
386
  if (!Array.isArray(value) || value.length === 0) {
556
387
  return true;
@@ -565,26 +396,16 @@ const TableProvider = (_a) => {
565
396
  return true;
566
397
  }
567
398
  };
568
- const filterData = (rows, filter) => {
569
- if (!rows)
570
- return { rows: [], ancestorKeys: new Set() };
399
+ const filterData = (filter) => {
400
+ if (!data)
401
+ return [];
571
402
  const { combinator, rules } = filter;
572
- if (!combinator || !rules || rules.length === 0) {
573
- return { rows, ancestorKeys: new Set() };
574
- }
575
- const matched = combinator === "or"
576
- ? rows.filter((row) => rules.some((rule) => rowMatchesRule(row, rule)))
577
- : rows.filter((row) => rules.every((rule) => rowMatchesRule(row, rule)));
578
- if (!_treeOptions.enabled) {
579
- return { rows: matched, ancestorKeys: new Set() };
403
+ if (!combinator || !rules)
404
+ return data;
405
+ if (combinator === "or") {
406
+ return data.filter((row) => rules.some((rule) => rowMatchesRule(row, rule)));
580
407
  }
581
- const ancestorKeys = collectAncestors(matched);
582
- const visibleSet = new Set(matched.map((r) => r.__key));
583
- ancestorKeys.forEach((k) => visibleSet.add(k));
584
- return {
585
- rows: rows.filter((r) => visibleSet.has(r.__key)),
586
- ancestorKeys,
587
- };
408
+ return data.filter((row) => rules.every((rule) => rowMatchesRule(row, rule)));
588
409
  };
589
410
  const toggleColumnVisibility = (dataField) => {
590
411
  const newColumnState = columnState.map((col) => {
@@ -613,47 +434,6 @@ const TableProvider = (_a) => {
613
434
  const key = !!keyField ? row[keyField] : row.__key;
614
435
  return String(key);
615
436
  };
616
- const firstVisibleDataField = useMemo(() => { var _a; return (_a = columnState.find((c) => c.visible !== false)) === null || _a === void 0 ? void 0 : _a.dataField; }, [columnState]);
617
- const persistExpandedKeys = (next) => {
618
- if ((stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.enabled) && (stateStorage === null || stateStorage === void 0 ? void 0 : stateStorage.type) === "localStorage") {
619
- StateStorage.setExpandedKeys(stateStorage.key, next);
620
- }
621
- };
622
- const updateExpandedKeys = (next) => {
623
- _setExpandedKeys(next);
624
- onExpandedChange === null || onExpandedChange === void 0 ? void 0 : onExpandedChange(next);
625
- persistExpandedKeys(next);
626
- };
627
- const expandRow = (row) => {
628
- var _a;
629
- const key = (_a = row === null || row === void 0 ? void 0 : row.__key) !== null && _a !== void 0 ? _a : getRowKey(row);
630
- if (expandedKeysSet.has(key))
631
- return;
632
- updateExpandedKeys([..._expandedKeys, key]);
633
- };
634
- const collapseRow = (row) => {
635
- var _a;
636
- const key = (_a = row === null || row === void 0 ? void 0 : row.__key) !== null && _a !== void 0 ? _a : getRowKey(row);
637
- if (!expandedKeysSet.has(key))
638
- return;
639
- updateExpandedKeys(_expandedKeys.filter((k) => k !== key));
640
- };
641
- const toggleRowExpanded = (row) => {
642
- var _a;
643
- const key = (_a = row === null || row === void 0 ? void 0 : row.__key) !== null && _a !== void 0 ? _a : getRowKey(row);
644
- if (expandedKeysSet.has(key)) {
645
- updateExpandedKeys(_expandedKeys.filter((k) => k !== key));
646
- }
647
- else {
648
- updateExpandedKeys([..._expandedKeys, key]);
649
- }
650
- };
651
- const expandAllRows = () => {
652
- updateExpandedKeys([..._treeMeta.expandableKeys]);
653
- };
654
- const collapseAllRows = () => {
655
- updateExpandedKeys([]);
656
- };
657
437
  const selectRow = (row) => {
658
438
  const key = getRowKey(row);
659
439
  const newSelectionState = {
@@ -791,61 +571,6 @@ const TableProvider = (_a) => {
791
571
  const key = getRowKey(row);
792
572
  return focusedRowId === key;
793
573
  };
794
- const { _data, effectiveExpandedKeys } = useMemo(() => {
795
- let processedData = data || [];
796
- if (manualSorting !== true) {
797
- processedData = sortData(sortState);
798
- }
799
- const autoExpandedSet = new Set();
800
- if (manualFiltering !== true && _filterState) {
801
- const result = filterData(processedData, _filterState);
802
- processedData = result.rows;
803
- if (_treeOptions.enabled && _treeOptions.autoExpandOnMatch) {
804
- result.ancestorKeys.forEach((k) => autoExpandedSet.add(k));
805
- }
806
- }
807
- if (manualSearch !== true && search) {
808
- const result = searchData(processedData, search);
809
- processedData = result.rows;
810
- if (_treeOptions.enabled && _treeOptions.autoExpandOnMatch) {
811
- result.ancestorKeys.forEach((k) => autoExpandedSet.add(k));
812
- }
813
- }
814
- // Compute the effective expanded set: user expansion ∪ auto-expanded ancestors.
815
- // Never mutates user's _expandedKeys.
816
- const effective = new Set(expandedKeysSet);
817
- autoExpandedSet.forEach((k) => effective.add(k));
818
- // Final pass: drop rows whose ancestors are not in the effective set.
819
- if (_treeOptions.enabled) {
820
- const byKey = new Map();
821
- for (const r of processedData)
822
- byKey.set(r.__key, r);
823
- processedData = processedData.filter((row) => {
824
- let pk = row.__parentKey;
825
- while (pk) {
826
- if (!effective.has(pk))
827
- return false;
828
- const parent = byKey.get(pk);
829
- pk = parent === null || parent === void 0 ? void 0 : parent.__parentKey;
830
- }
831
- return true;
832
- });
833
- }
834
- return { _data: processedData, effectiveExpandedKeys: effective };
835
- }, [
836
- data,
837
- columnState,
838
- search,
839
- sortState,
840
- _filterState,
841
- expandedKeysSet,
842
- _treeOptions,
843
- ]);
844
- const isRowExpanded = (row) => {
845
- var _a;
846
- const key = (_a = row === null || row === void 0 ? void 0 : row.__key) !== null && _a !== void 0 ? _a : getRowKey(row);
847
- return effectiveExpandedKeys.has(key);
848
- };
849
574
  if (tableInstanceRef) {
850
575
  tableInstanceRef.current = {
851
576
  columnState,
@@ -862,13 +587,6 @@ const TableProvider = (_a) => {
862
587
  clearSelections,
863
588
  runSearch,
864
589
  clearSearch,
865
- expandRow,
866
- collapseRow,
867
- toggleRowExpanded,
868
- isRowExpanded,
869
- expandAllRows,
870
- collapseAllRows,
871
- getExpandedRowKeys: () => [..._expandedKeys],
872
590
  getTableState: () => {
873
591
  return {
874
592
  columnState,
@@ -880,15 +598,25 @@ const TableProvider = (_a) => {
880
598
  },
881
599
  sortState,
882
600
  searchState: search,
883
- filterState: _filterState,
884
- expandedKeys: [..._expandedKeys],
601
+ _filterState,
885
602
  };
886
603
  },
887
604
  };
888
605
  }
889
- return (_jsx(TableContext.Provider, { value: Object.assign({ columnState, setColumnState: updateColumnState, tableLayout,
890
- setResizeColumnWidths,
891
- sortState, searchState: search, totalRecords,
606
+ const _data = useMemo(() => {
607
+ let processedData = data; // create a new array to avoid mutating the original data
608
+ if (manualSorting !== true) {
609
+ processedData = sortData(sortState);
610
+ }
611
+ if (manualFiltering !== true && _filterState) {
612
+ processedData = filterData(_filterState);
613
+ }
614
+ if (manualSearch !== true && search) {
615
+ processedData = searchData(search);
616
+ }
617
+ return processedData;
618
+ }, [data, columnState, search, sortState, _filterState]);
619
+ return (_jsx(TableContext.Provider, { value: Object.assign({ columnState, setColumnState: updateColumnState, sortState, searchState: search, totalRecords,
892
620
  keyField,
893
621
  handleColumnReorder,
894
622
  handleColumnHeaderClick, selectionState: _selectionState, selectRow,
@@ -912,13 +640,6 @@ const TableProvider = (_a) => {
912
640
  stateStorage, tableHeight: height, tableMaxHeight: maxHeight, tableMinHeight: minHeight, compact, tableElement: tableElement, headerRowElm: headerRowElm, tableDimensions: tableDimensions, targetElm: targetElm, listElm: listElm, enableColumnResize,
913
641
  onSelectionChange,
914
642
  onColumnStateChange,
915
- onColumnReorder, onRowUpdated: onRowUpdated || (() => { }), tableMenuOptions, data: _data, treeOptions: _treeOptions, firstVisibleDataField, expandedKeys: _expandedKeys, effectiveExpandedKeys,
916
- isRowExpanded,
917
- toggleRowExpanded,
918
- expandRow,
919
- collapseRow,
920
- expandAllRows,
921
- collapseAllRows,
922
- onExpandedChange }, props), children: children }));
643
+ onColumnReorder, onRowUpdated: onRowUpdated || (() => { }), tableMenuOptions, data: _data }, props), children: children }));
923
644
  };
924
645
  export default TableProvider;
@@ -1,51 +1,39 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { ChevronRightIcon, Maximize2Icon } from "lucide-react";
3
- import { InnerCellContent, TD, TR, TreeCellContent, TreeCellWrapper, TreeChevronButton, TreeChevronPlaceholder, TreeIndentSpacer, } from "./TableComponents";
2
+ import { Maximize2Icon } from "lucide-react";
3
+ import ColumnResizer from "./ColumnResizer";
4
+ import { InnerCellContent, TD, TR } from "./TableComponents";
4
5
  import useTable from "./useTable";
5
6
  import ActionCell from "./ActionCell";
6
7
  import ActionButton from "./ActionButton";
7
8
  import CheckBox from "../CheckBox";
8
9
  import { LoadingCellIndicator } from "./LoadingCellIndicator";
9
10
  const TableRow = ({ rowData, loading, rowStyle }) => {
10
- const { columnState, enableActionButton, onActionButtonClick, actionButtonIcon: Icon, enableSelection, selectRow, deselectRow, isRowSelected, isRowFocused, onRowUpdated, treeOptions, firstVisibleDataField, isRowExpanded, toggleRowExpanded, tableLayout, } = useTable();
11
+ const { columnState, enableActionButton, onActionButtonClick, actionButtonIcon: Icon, enableSelection, selectRow, deselectRow, isRowSelected, isRowFocused, onRowUpdated, } = useTable();
11
12
  const selected = isRowSelected(rowData);
12
13
  const focused = isRowFocused(rowData);
13
14
  const handleSelectionChange = (e) => {
14
15
  e === true ? selectRow(rowData) : deselectRow(rowData);
15
16
  };
16
- return (_jsxs(TR, { className: "mfui-tr", "data-key": rowData.__key, "data-selected": selected, "data-focused": focused, style: Object.assign(Object.assign({}, rowStyle), { width: tableLayout.contentWidth }), children: [enableSelection && (_jsx(ActionCell, { className: `mfui-td column-select`, children: _jsx(InnerCellContent, { className: "mfui inner-cell-content row-action row-selection-action", children: _jsx(CheckBox, { className: `mfui-checkbox`, value: selected, onChange: (e) => handleSelectionChange(e) }) }) })), enableActionButton && (_jsx(ActionCell, { className: `mfui-td column-action`, children: _jsx(InnerCellContent, { className: "mfui inner-cell-content row-action", children: _jsx(ActionButton, { variant: "subtle", onClick: () => onActionButtonClick === null || onActionButtonClick === void 0 ? void 0 : onActionButtonClick(rowData), children: Icon ? _jsx(Icon, { size: 14 }) : _jsx(Maximize2Icon, { size: 14 }) }) }) })), columnState.map((column, index) => {
17
- var _a;
17
+ return (_jsxs(TR, { className: "mfui-tr", style: rowStyle, "data-key": rowData.__key, "data-selected": selected, "data-focused": focused, children: [enableSelection && (_jsx(ActionCell, { className: `mfui-td column-select`, children: _jsx(InnerCellContent, { className: "mfui inner-cell-content row-action row-selection-action", children: _jsx(CheckBox, { className: `mfui-checkbox`, value: selected, onChange: (e) => handleSelectionChange(e) }) }) })), enableActionButton && (_jsx(ActionCell, { className: `mfui-td column-action`, children: _jsx(InnerCellContent, { className: "mfui inner-cell-content row-action", children: _jsx(ActionButton, { variant: "subtle", onClick: () => onActionButtonClick === null || onActionButtonClick === void 0 ? void 0 : onActionButtonClick(rowData), children: Icon ? _jsx(Icon, { size: 14 }) : _jsx(Maximize2Icon, { size: 14 }) }) }) })), columnState.map((column, index) => {
18
18
  if (column.visible === false)
19
19
  return null;
20
20
  if (loading) {
21
- const columnWidth = tableLayout.columnWidths[column.columnId] || column.minWidth;
22
21
  return (_jsx(TD, { className: `mfui-td column-${column.columnId}`, "data-field": column.dataField, style: {
23
- width: columnWidth,
22
+ width: column.width,
24
23
  minWidth: column.minWidth,
25
- maxWidth: column.maxWidth,
26
- flexBasis: columnWidth,
27
- flexGrow: 0,
28
- flexShrink: 0,
24
+ flex: column.width ? "0 0 auto" : "1",
29
25
  }, children: _jsx(LoadingCellIndicator, {}) }, index));
30
26
  }
31
- const cellBody = column.render
32
- ? column.render({ rowData, onRowUpdated })
33
- : rowData[column.dataField];
34
- const isTreeColumn = (treeOptions === null || treeOptions === void 0 ? void 0 : treeOptions.enabled) === true &&
35
- column.dataField === firstVisibleDataField;
36
- const expanded = isTreeColumn ? isRowExpanded(rowData) : false;
37
- const columnWidth = tableLayout.columnWidths[column.columnId] || column.minWidth;
38
- return (_jsx(TD, { className: `mfui-td column-${column.columnId}`, "data-field": column.dataField, "data-tree-cell": isTreeColumn ? "true" : undefined, style: {
39
- width: columnWidth,
27
+ return (_jsxs(TD, { className: `mfui-td column-${column.columnId}`, "data-field": column.dataField, style: {
28
+ width: column.width,
40
29
  minWidth: column.minWidth,
41
- maxWidth: column.maxWidth,
42
- flexBasis: columnWidth,
43
- flexGrow: 0,
44
- flexShrink: 0,
45
- }, children: _jsx(InnerCellContent, { className: "mfui inner-cell-content", children: isTreeColumn ? (_jsxs(TreeCellWrapper, { children: [_jsx(TreeIndentSpacer, { "$level": (_a = rowData.__level) !== null && _a !== void 0 ? _a : 0, "$indentPx": treeOptions.indentPx }), rowData.__hasChildren ? (_jsx(TreeChevronButton, { type: "button", "$expanded": expanded, onClick: (e) => {
46
- e.stopPropagation();
47
- toggleRowExpanded(rowData);
48
- }, "aria-label": expanded ? "Collapse row" : "Expand row", "aria-expanded": expanded, children: _jsx(ChevronRightIcon, { size: 14 }) })) : (_jsx(TreeChevronPlaceholder, {})), _jsx(TreeCellContent, { children: cellBody })] })) : (cellBody) }) }, index));
30
+ flex: column.width ? "0 0 auto" : "1",
31
+ }, children: [(column === null || column === void 0 ? void 0 : column.enableResize) === true && _jsx(ColumnResizer, { column: column }), _jsx(InnerCellContent, { className: "mfui inner-cell-content", children: column.render
32
+ ? column.render({
33
+ rowData,
34
+ onRowUpdated,
35
+ })
36
+ : rowData[column.dataField] })] }, index));
49
37
  })] }));
50
38
  };
51
39
  export default TableRow;
@@ -1,3 +1,4 @@
1
1
  export { default as resolveColumnResize } from "./resolveColumnResize";
2
2
  export { default as syncColumnState } from "./syncColumnState";
3
+ export { default as resizeHandler } from "./resizeHandler";
3
4
  export { exportTableToExcel } from "./tableExport";
@@ -1,3 +1,4 @@
1
1
  export { default as resolveColumnResize } from "./resolveColumnResize";
2
2
  export { default as syncColumnState } from "./syncColumnState";
3
+ export { default as resizeHandler } from "./resizeHandler";
3
4
  export { exportTableToExcel } from "./tableExport";