@monolith-forensics/monolith-ui 1.1.29 → 1.1.31

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 (67) hide show
  1. package/dist/Button/Button.js +327 -0
  2. package/dist/Button/index.js +1 -0
  3. package/dist/Calendar/Calendar.js +204 -0
  4. package/dist/Calendar/CalendarStyles.js +164 -0
  5. package/dist/Calendar/calendarHelpers.js +169 -0
  6. package/dist/Calendar/index.js +1 -0
  7. package/dist/CheckBox/CheckBox.js +41 -0
  8. package/dist/CheckBox/index.js +1 -0
  9. package/dist/DateInput/DateInput.js +504 -0
  10. package/dist/DateInput/index.js +1 -0
  11. package/dist/DropDownMenu/DropDownMenu.js +208 -0
  12. package/dist/DropDownMenu/index.js +1 -0
  13. package/dist/Error/Error.js +33 -0
  14. package/dist/Error/index.js +1 -0
  15. package/dist/FieldLabel/FieldLabel.js +90 -0
  16. package/dist/FieldLabel/index.js +1 -0
  17. package/dist/FileInputField/FileInputField.js +112 -0
  18. package/dist/FileInputField/index.js +1 -0
  19. package/dist/Flyout/Flyout.js +106 -0
  20. package/dist/Flyout/FlyoutHeader.js +7 -0
  21. package/dist/Flyout/FlyoutTitle.js +8 -0
  22. package/dist/Flyout/index.js +3 -0
  23. package/dist/FormSection/FormSection.js +46 -0
  24. package/dist/FormSection/index.js +1 -0
  25. package/dist/Grid/Grid.js +13 -0
  26. package/dist/Grid/index.js +1 -0
  27. package/dist/IconButton/IconButton.js +25 -0
  28. package/dist/IconButton/index.js +1 -0
  29. package/dist/Input/Input.js +144 -0
  30. package/dist/Input/index.js +1 -0
  31. package/dist/Modal/Modal.js +105 -0
  32. package/dist/Modal/index.js +1 -0
  33. package/dist/MonolithUIProvider/GlobalStyle.js +51 -0
  34. package/dist/MonolithUIProvider/MonolithUIProvider.js +23 -0
  35. package/dist/MonolithUIProvider/index.js +3 -0
  36. package/dist/MonolithUIProvider/useMonolithUITheme.js +10 -0
  37. package/dist/Pill/Pill.js +147 -0
  38. package/dist/Pill/index.js +1 -0
  39. package/dist/SelectBox/SelectBox.js +471 -0
  40. package/dist/SelectBox/index.js +1 -0
  41. package/dist/Switch/Switch.js +129 -0
  42. package/dist/Switch/index.js +1 -0
  43. package/dist/Table/Table.js +707 -0
  44. package/dist/Table/index.js +2 -0
  45. package/dist/TagBox/TagBox.js +585 -0
  46. package/dist/TagBox/TagBoxStyles.js +107 -0
  47. package/dist/TagBox/index.js +1 -0
  48. package/dist/TextArea/TextArea.js +76 -0
  49. package/dist/TextArea/index.js +1 -0
  50. package/dist/TextAreaInput/TextAreaInput.js +9 -0
  51. package/dist/TextAreaInput/index.js +1 -0
  52. package/dist/TextInput/TextInput.js +26 -0
  53. package/dist/TextInput/index.js +1 -0
  54. package/dist/Tooltip/Tooltip.js +25 -0
  55. package/dist/Tooltip/index.js +1 -0
  56. package/dist/core/ArrowButton.js +43 -0
  57. package/dist/core/ClearButton.js +43 -0
  58. package/dist/core/StyledContent.js +42 -0
  59. package/dist/core/StyledFloatContainer.js +5 -0
  60. package/dist/core/Types/Size.js +1 -0
  61. package/dist/core/Types/Variant.js +1 -0
  62. package/dist/core/index.js +4 -0
  63. package/dist/index.js +26 -0
  64. package/dist/theme/index.js +9 -0
  65. package/dist/theme/typography.js +57 -0
  66. package/dist/theme/variants.js +270 -0
  67. package/package.json +1 -1
@@ -0,0 +1,707 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import { FixedSizeList } from "react-window";
14
+ import AutoSizer from "react-virtualized-auto-sizer";
15
+ import { useOverlayScrollbars } from "overlayscrollbars-react";
16
+ import "overlayscrollbars/overlayscrollbars.css";
17
+ import shortUUID from "short-uuid";
18
+ import styled from "styled-components";
19
+ import { cloneElement, forwardRef, useEffect, useMemo, useRef, useState, } from "react";
20
+ import { Maximize2Icon } from "lucide-react";
21
+ import { ArrowUpIcon, ArrowDownIcon } from "lucide-react";
22
+ import moment from "moment";
23
+ import { CheckBox } from "..";
24
+ const MIN_COLUMN_WIDTH = 125;
25
+ export const Column = ({ dataField, caption, columnId = shortUUID.generate(), sorting, format, componentType = "Column", }) => {
26
+ return null;
27
+ };
28
+ Column.displayName = "Column";
29
+ const StyledTable = styled.table `
30
+ position: relative;
31
+ border-collapse: separate;
32
+ border-spacing: 0;
33
+ min-width: 100%;
34
+ border-top: none;
35
+ border-radius: 4px;
36
+ `;
37
+ const StyledThead = styled.thead `
38
+ position: relative;
39
+ `;
40
+ const StyledTbody = styled.tbody `
41
+ & [data-even="true"].tr td {
42
+ background-color: ${({ stripes, theme }) => stripes ? theme.palette.background.secondary : "transparent"};
43
+ }
44
+ & .tr:hover td {
45
+ background-color: ${({ theme }) => theme.palette.action.hover};
46
+ }
47
+ `;
48
+ const StyledTr = styled.tr `
49
+ position: relative;
50
+ height: ${({ compact, rowHeight }) => rowHeight ? rowHeight : compact ? 28 : 38}px;
51
+ width: 100%;
52
+ display: flex;
53
+
54
+ & .action-button {
55
+ opacity: 0;
56
+ border-radius: 4px;
57
+ }
58
+ * .custom-action-button {
59
+ opacity: 0;
60
+ }
61
+
62
+ &:hover .action-button,
63
+ &:hover .custom-action-button {
64
+ opacity: 1;
65
+ }
66
+
67
+ &.focused .td {
68
+ border-top: 1px solid ${({ theme }) => theme.palette.primary.main};
69
+ border-bottom: 1px solid ${({ theme }) => theme.palette.primary.main} !important;
70
+ transition: border 0.3s ease;
71
+ }
72
+ &.focused .td:first-child {
73
+ border-left: 1px solid ${({ theme }) => theme.palette.primary.main};
74
+ }
75
+ &.focused .td:last-child {
76
+ border-right: 1px solid ${({ theme }) => theme.palette.primary.main};
77
+ }
78
+
79
+ // last item in row
80
+ & .td:last-child {
81
+ width: auto !important;
82
+ max-width: none !important;
83
+ }
84
+ `;
85
+ const StyledHeaderRow = styled(StyledTr) `
86
+ height: ${({ compact, headerHeight }) => headerHeight ? headerHeight : compact ? 28 : 38}px;
87
+
88
+ display: table-row;
89
+
90
+ // last item in row
91
+ & .th:last-child {
92
+ width: auto !important;
93
+ max-width: none !important;
94
+ }
95
+ `;
96
+ const StyledTd = styled.td `
97
+ position: relative;
98
+ display: flex;
99
+ align-items: center;
100
+ flex: 1;
101
+ padding: ${({ compact }) => (compact ? "3px" : "8px")};
102
+ font-size: ${({ compact }) => (compact ? "10px" : "12px")};
103
+ overflow: hidden;
104
+ text-overflow: ellipsis;
105
+ white-space: nowrap;
106
+
107
+ background-color: ${({ theme }) => theme.palette.background.default};
108
+
109
+ border-bottom: 1px solid ${({ theme }) => theme.palette.divider};
110
+
111
+ &:first-child {
112
+ border-left: 1px solid ${({ theme }) => theme.palette.divider};
113
+ }
114
+
115
+ &:last-child {
116
+ border-right: 1px solid ${({ theme }) => theme.palette.divider};
117
+ }
118
+ `;
119
+ const StyledTh = styled.th `
120
+ position: sticky;
121
+ top: 0;
122
+ z-index: 1;
123
+ flex: 1;
124
+ vertical-align: middle;
125
+ user-select: none;
126
+ padding: ${({ compact }) => (compact ? "3px" : "8px")};
127
+ font-size: ${({ compact }) => (compact ? "10px" : "12px")};
128
+ text-align: left;
129
+ font-weight: bold;
130
+ overflow: hidden;
131
+ text-overflow: ellipsis;
132
+ white-space: nowrap;
133
+
134
+ background-color: ${({ theme }) => theme.palette.background.alt};
135
+
136
+ border-top: 1px solid ${({ theme }) => theme.palette.divider};
137
+ border-bottom: 1px solid ${({ theme }) => theme.palette.divider};
138
+
139
+ .action-header {
140
+ display: flex;
141
+ align-content: center;
142
+ align-items: center;
143
+ cursor: pointer;
144
+ color: ${({ theme }) => theme.palette.text.secondary};
145
+ margin-right: 5;
146
+ margin-left: 3;
147
+ }
148
+
149
+ &:first-child {
150
+ border-left: 1px solid ${({ theme }) => theme.palette.divider};
151
+ border-top-left-radius: 4px;
152
+ }
153
+
154
+ &:last-child {
155
+ border-right: 1px solid ${({ theme }) => theme.palette.divider};
156
+ border-top-right-radius: 4px;
157
+ }
158
+
159
+ &:hover {
160
+ background-color: ${({ theme }) => theme.name === "DARK" ? "#2e2e2e" : "#f5f5f5"};
161
+ cursor: pointer;
162
+ }
163
+ &.dragging:active {
164
+ cursor: grabbing;
165
+ }
166
+ &.dragover .resizer {
167
+ opacity: 1;
168
+ background: ${(props) => props.theme.palette.primary.main};
169
+ cursor: grabbing;
170
+ }
171
+ `;
172
+ const enableResizeClass = (dataField) => {
173
+ document
174
+ .querySelectorAll(`.resizer.column-${dataField}`)
175
+ .forEach((resizer) => {
176
+ resizer.classList.add("isResizing");
177
+ });
178
+ };
179
+ const disableResizeClass = (dataField) => {
180
+ document
181
+ .querySelectorAll(`.resizer.column-${dataField}`)
182
+ .forEach((resizer) => {
183
+ resizer.classList.remove("isResizing");
184
+ });
185
+ };
186
+ const resizeHandler = ({ event, columnId, columnProps, onResize, onResizeFinished, }) => {
187
+ let col = event.target
188
+ .parentElement;
189
+ let newColumns = [];
190
+ let x = 0;
191
+ let w = 0;
192
+ const mouseMoveHandler = function (e) {
193
+ const selectedColumn = document.querySelectorAll(`.col-${columnId}`);
194
+ const columnHeaders = document.querySelectorAll(`.th.col-${columnId}`);
195
+ const dx = e.clientX - x;
196
+ let newWidth = w + dx;
197
+ if (newWidth < MIN_COLUMN_WIDTH) {
198
+ newWidth = MIN_COLUMN_WIDTH;
199
+ }
200
+ selectedColumn.forEach((col) => {
201
+ var _a;
202
+ col.style.width = `${newWidth}px`;
203
+ col.style.maxWidth = `${newWidth}px`;
204
+ col.style.minWidth = `${newWidth}px`;
205
+ newColumns.push({
206
+ dataField: ((_a = col === null || col === void 0 ? void 0 : col.dataset) === null || _a === void 0 ? void 0 : _a.field) || "",
207
+ width: newWidth,
208
+ });
209
+ });
210
+ newColumns = Array.from(columnHeaders).map((col) => {
211
+ var _a;
212
+ return {
213
+ dataField: ((_a = col === null || col === void 0 ? void 0 : col.dataset) === null || _a === void 0 ? void 0 : _a.field) || "",
214
+ width: newWidth,
215
+ };
216
+ });
217
+ onResize({
218
+ columns: newColumns,
219
+ });
220
+ };
221
+ const mouseUpHandler = function () {
222
+ var _a, _b, _c;
223
+ disableResizeClass(columnId);
224
+ document.removeEventListener("mousemove", mouseMoveHandler);
225
+ document.removeEventListener("mouseup", mouseUpHandler);
226
+ onResizeFinished === null || onResizeFinished === void 0 ? void 0 : onResizeFinished({
227
+ column: columnProps,
228
+ columnId: columnId,
229
+ columns: newColumns,
230
+ targetColumn: document.querySelector(`.col-${columnId}`),
231
+ newWidth: ((_c = (_b = (_a = document === null || document === void 0 ? void 0 : document.querySelector) === null || _a === void 0 ? void 0 : _a.call(document, `.col-${columnId}`)) === null || _b === void 0 ? void 0 : _b.style) === null || _c === void 0 ? void 0 : _c.width) || null,
232
+ });
233
+ };
234
+ x = event.clientX;
235
+ const styles = window.getComputedStyle(col);
236
+ w = parseInt(styles.width, 10);
237
+ document.addEventListener("mousemove", mouseMoveHandler);
238
+ document.addEventListener("mouseup", mouseUpHandler);
239
+ enableResizeClass(columnId);
240
+ };
241
+ const Resizer = styled(({ className, resizeHandler, onResize = () => { }, onResizeFinished, column, }) => {
242
+ return (_jsx("div", { className: `${className} resizer column-${column.props.columnId}`, onClick: (e) => {
243
+ e.stopPropagation();
244
+ e.nativeEvent.stopImmediatePropagation();
245
+ e.preventDefault();
246
+ }, onMouseDown: (e) => {
247
+ e.stopPropagation();
248
+ e.nativeEvent.stopImmediatePropagation();
249
+ e.preventDefault();
250
+ if (resizeHandler)
251
+ resizeHandler({
252
+ event: e,
253
+ columnId: column.props.columnId,
254
+ columnProps: column.props,
255
+ onResize: onResize,
256
+ onResizeFinished: onResizeFinished,
257
+ });
258
+ } }));
259
+ }) `
260
+ &.resizer {
261
+ position: absolute;
262
+ right: 0;
263
+ top: 0;
264
+ height: 100%;
265
+ width: 3px;
266
+ background-color: ${(props) => props.theme.palette.divider};
267
+ cursor: col-resize;
268
+ user-select: none;
269
+ touch-action: none;
270
+ opacity: 0;
271
+ &.isResizing {
272
+ opacity: 1;
273
+ background: ${(props) => props.theme.palette.primary.main};
274
+ }
275
+ // dragover css
276
+ &.dragover {
277
+ opacity: 1;
278
+ background: ${(props) => props.theme.palette.primary.main};
279
+ }
280
+ }
281
+ `;
282
+ const HeaderRowComponent = ({ columns, _compact, resizeState, headerHeight, onHeaderClick, onColumnResize, dropColumn, dragColumn, showSelection, selectAll, selectionState, handleSelectAll, handleColumnReorder, }) => {
283
+ return (_jsx(StyledThead, { children: _jsx(StyledHeaderRow, { compact: _compact, headerHeight: headerHeight, children: columns.map((column) => {
284
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
285
+ let savedColSize = ((_c = (_b = (_a = resizeState === null || resizeState === void 0 ? void 0 : resizeState.current) === null || _a === void 0 ? void 0 : _a.columns) === null || _b === void 0 ? void 0 : _b.find((col) => col.dataField === column.props.dataField)) === null || _c === void 0 ? void 0 : _c.width) || MIN_COLUMN_WIDTH;
286
+ if (savedColSize < MIN_COLUMN_WIDTH) {
287
+ savedColSize = MIN_COLUMN_WIDTH;
288
+ }
289
+ return (_jsxs(StyledTh, Object.assign({}, column.props, { className: `th ${((_d = column === null || column === void 0 ? void 0 : column.props) === null || _d === void 0 ? void 0 : _d.columnId) ? `col-${column.props.columnId}` : ""}`, "data-field": column.props.dataField, "data-type": "th", compact: _compact, onClick: (e) => {
290
+ if (column.props.allowSorting !== false)
291
+ onHeaderClick === null || onHeaderClick === void 0 ? void 0 : onHeaderClick(column.props);
292
+ }, draggable: column.props.allowReorder !== false ? true : false, onDragOver: (e) => {
293
+ e.preventDefault();
294
+ e.dataTransfer.dropEffect = "move";
295
+ }, onDragEnter: (e) => {
296
+ e.target.classList.add("dragover");
297
+ dropColumn.current = column.props;
298
+ }, onDragLeave: (e) => {
299
+ e.target.classList.remove("dragover");
300
+ }, onDrop: (e) => {
301
+ e.preventDefault();
302
+ e.target.classList.remove("dragover");
303
+ handleColumnReorder(dragColumn.current, dropColumn.current);
304
+ }, onDragStart: (e) => {
305
+ //set dragging class
306
+ dragColumn.current = column.props;
307
+ e.target.classList.add("dragging");
308
+ }, onDragEnd: (e) => {
309
+ e.target.classList.remove("dragging");
310
+ }, style: {
311
+ width: ((_e = column === null || column === void 0 ? void 0 : column.props) === null || _e === void 0 ? void 0 : _e.width)
312
+ ? (_f = column === null || column === void 0 ? void 0 : column.props) === null || _f === void 0 ? void 0 : _f.width
313
+ : savedColSize || "auto",
314
+ maxWidth: ((_g = column === null || column === void 0 ? void 0 : column.props) === null || _g === void 0 ? void 0 : _g.width)
315
+ ? (_h = column === null || column === void 0 ? void 0 : column.props) === null || _h === void 0 ? void 0 : _h.width
316
+ : savedColSize || "auto",
317
+ minWidth: ((_j = column === null || column === void 0 ? void 0 : column.props) === null || _j === void 0 ? void 0 : _j.width)
318
+ ? (_k = column === null || column === void 0 ? void 0 : column.props) === null || _k === void 0 ? void 0 : _k.width
319
+ : savedColSize || MIN_COLUMN_WIDTH,
320
+ }, children: [_jsxs("div", { style: {
321
+ display: "flex",
322
+ alignContent: "center",
323
+ alignItems: "center",
324
+ pointerEvents: column.props.dataField === "action" ? "all" : "none",
325
+ }, children: [showSelection && column.props.dataField === "action" ? (_jsx("div", { className: "action-header", children: selectAll && (_jsx(CheckBox, { value: selectionState === "all", partialCheck: selectionState.includes("some"), onChange: handleSelectAll })) })) : (_jsx("div", { children: column.props.caption })), ((_m = (_l = column.props) === null || _l === void 0 ? void 0 : _l.sorting) === null || _m === void 0 ? void 0 : _m.active) && (_jsx("div", { style: { marginLeft: 5 }, children: column.props.sorting.direction === "asc" ? (_jsx(ArrowUpIcon, { size: 12 })) : (_jsx(ArrowDownIcon, { size: 12 })) }))] }), ((_o = column === null || column === void 0 ? void 0 : column.props) === null || _o === void 0 ? void 0 : _o.resizeEnabled) !== false && (_jsx(Resizer, { resizeHandler: resizeHandler, column: column, onResize: (e) => {
326
+ resizeState.current = e;
327
+ }, onResizeFinished: (e) => {
328
+ onColumnResize === null || onColumnResize === void 0 ? void 0 : onColumnResize(e);
329
+ } }))] }), shortUUID.generate()));
330
+ }) }) }));
331
+ };
332
+ const InnerElement = forwardRef((_a, ref) => {
333
+ var { children, columns, resizeState, _compact, stripes, onHeaderClick, dropColumn, dragColumn, showSelection, selectAll, selectionState, handleSelectAll, handleColumnReorder, onColumnResize, headerHeight } = _a, rest = __rest(_a, ["children", "columns", "resizeState", "_compact", "stripes", "onHeaderClick", "dropColumn", "dragColumn", "showSelection", "selectAll", "selectionState", "handleSelectAll", "handleColumnReorder", "onColumnResize", "headerHeight"]);
334
+ return (_jsxs(StyledTable, Object.assign({ ref: ref }, rest, { children: [_jsx(HeaderRowComponent, { columns: columns, resizeState: resizeState, _compact: _compact, headerHeight: headerHeight, onHeaderClick: onHeaderClick, dropColumn: dropColumn, dragColumn: dragColumn, showSelection: showSelection, selectAll: selectAll, selectionState: selectionState, handleSelectAll: handleSelectAll, handleColumnReorder: handleColumnReorder, onColumnResize: onColumnResize }), _jsx(StyledTbody, { className: "tbody" + (stripes ? " striped" : ""), stripes: stripes, children: children })] })));
335
+ });
336
+ const Row = ({ data, index, style }) => {
337
+ const { data: dataRows, columns, focusedRow, keyValue, _compact, queryKey, reloadFn, headerHeight, resizeState, onRowUpdated, } = data;
338
+ const item = (dataRows === null || dataRows === void 0 ? void 0 : dataRows[index]) || {};
339
+ const handleRowUpdated = (data) => {
340
+ onRowUpdated === null || onRowUpdated === void 0 ? void 0 : onRowUpdated({ rowData: item, updateData: data });
341
+ };
342
+ const isRowFocused = focusedRow
343
+ ? focusedRow[keyValue] === item[keyValue]
344
+ : false;
345
+ const row = columns.map((column) => {
346
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3;
347
+ let value = null;
348
+ let savedColSize = ((_c = (_b = (_a = resizeState === null || resizeState === void 0 ? void 0 : resizeState.current) === null || _a === void 0 ? void 0 : _a.columns) === null || _b === void 0 ? void 0 : _b.find((col) => col.dataField === column.props.dataField)) === null || _c === void 0 ? void 0 : _c.width) || MIN_COLUMN_WIDTH;
349
+ if (savedColSize < MIN_COLUMN_WIDTH) {
350
+ savedColSize = MIN_COLUMN_WIDTH;
351
+ }
352
+ // parse datafield dot syntax
353
+ if ((_d = column.props.dataField) === null || _d === void 0 ? void 0 : _d.includes(".")) {
354
+ const fields = (_e = column.props.dataField) === null || _e === void 0 ? void 0 : _e.split(".");
355
+ value = fields.reduce((acc, field) => {
356
+ return acc === null || acc === void 0 ? void 0 : acc[field];
357
+ }, item);
358
+ }
359
+ else
360
+ value = item === null || item === void 0 ? void 0 : item[column.props.dataField];
361
+ // format date values
362
+ if (column.props.dataType === "date" &&
363
+ ((_g = (_f = column === null || column === void 0 ? void 0 : column.props) === null || _f === void 0 ? void 0 : _f.format) === null || _g === void 0 ? void 0 : _g.type) &&
364
+ value) {
365
+ const dateFormat = (_j = (_h = column === null || column === void 0 ? void 0 : column.props) === null || _h === void 0 ? void 0 : _h.format) === null || _j === void 0 ? void 0 : _j.type;
366
+ value = moment(value).format(dateFormat);
367
+ }
368
+ if (column.props.render) {
369
+ return (_jsxs(StyledTd, { className: `td ${((_k = column === null || column === void 0 ? void 0 : column.props) === null || _k === void 0 ? void 0 : _k.columnId) ? `col-${column.props.columnId}` : ""}`, title: ((_l = column === null || column === void 0 ? void 0 : column.props) === null || _l === void 0 ? void 0 : _l.titleRender) ? (_m = column === null || column === void 0 ? void 0 : column.props) === null || _m === void 0 ? void 0 : _m.titleRender(item) : null, compact: _compact, style: Object.assign({ width: ((_o = column === null || column === void 0 ? void 0 : column.props) === null || _o === void 0 ? void 0 : _o.width)
370
+ ? (_p = column === null || column === void 0 ? void 0 : column.props) === null || _p === void 0 ? void 0 : _p.width
371
+ : savedColSize || "auto", maxWidth: ((_q = column === null || column === void 0 ? void 0 : column.props) === null || _q === void 0 ? void 0 : _q.width)
372
+ ? (_r = column === null || column === void 0 ? void 0 : column.props) === null || _r === void 0 ? void 0 : _r.width
373
+ : savedColSize || "auto", minWidth: ((_s = column === null || column === void 0 ? void 0 : column.props) === null || _s === void 0 ? void 0 : _s.width)
374
+ ? (_t = column === null || column === void 0 ? void 0 : column.props) === null || _t === void 0 ? void 0 : _t.width
375
+ : savedColSize || MIN_COLUMN_WIDTH }, (((_u = column === null || column === void 0 ? void 0 : column.props) === null || _u === void 0 ? void 0 : _u.style) || {})), "data-type": "td", children: [column.props.resizeEnabled !== false && _jsx(Resizer, { column: column }), column.props.render(item, {
376
+ queryKey: queryKey || "",
377
+ reload: reloadFn,
378
+ onRowUpdated: handleRowUpdated,
379
+ })] }, shortUUID.generate()));
380
+ }
381
+ return (_jsxs(StyledTd, { className: `td ${((_v = column === null || column === void 0 ? void 0 : column.props) === null || _v === void 0 ? void 0 : _v.columnId) ? `col-${column.props.columnId}` : ""}`, compact: _compact, title: ((_w = column === null || column === void 0 ? void 0 : column.props) === null || _w === void 0 ? void 0 : _w.titleRender) ? (_x = column === null || column === void 0 ? void 0 : column.props) === null || _x === void 0 ? void 0 : _x.titleRender(item) : null, "data-type": "td", style: {
382
+ width: ((_y = column === null || column === void 0 ? void 0 : column.props) === null || _y === void 0 ? void 0 : _y.width)
383
+ ? (_z = column === null || column === void 0 ? void 0 : column.props) === null || _z === void 0 ? void 0 : _z.width
384
+ : savedColSize || "auto",
385
+ maxWidth: ((_0 = column === null || column === void 0 ? void 0 : column.props) === null || _0 === void 0 ? void 0 : _0.width)
386
+ ? (_1 = column === null || column === void 0 ? void 0 : column.props) === null || _1 === void 0 ? void 0 : _1.width
387
+ : savedColSize || "auto",
388
+ minWidth: ((_2 = column === null || column === void 0 ? void 0 : column.props) === null || _2 === void 0 ? void 0 : _2.width)
389
+ ? (_3 = column === null || column === void 0 ? void 0 : column.props) === null || _3 === void 0 ? void 0 : _3.width
390
+ : savedColSize || MIN_COLUMN_WIDTH,
391
+ }, children: [column.props.resizeEnabled !== false && _jsx(Resizer, { column: column }), value] }, shortUUID.generate()));
392
+ });
393
+ return (_jsx(StyledTr, { className: `tr${isRowFocused ? " focused" : ""}`, "data-key": item[keyValue], "data-type": "tr", "data-even": index % 2 === 0 ? "true" : "false", compact: _compact, style: Object.assign(Object.assign({}, style), { top: ((style === null || style === void 0 ? void 0 : style.top) || 0) + headerHeight }), children: row }, shortUUID.generate()));
394
+ };
395
+ export const useTable = () => {
396
+ const [tableInstance, setTableInstance] = useState(null);
397
+ return {
398
+ setTableInstance,
399
+ toggleCompact: () => tableInstance === null || tableInstance === void 0 ? void 0 : tableInstance.toggleCompact(),
400
+ toggleStripes: () => tableInstance === null || tableInstance === void 0 ? void 0 : tableInstance.toggleStripes(),
401
+ isCompact: (tableInstance === null || tableInstance === void 0 ? void 0 : tableInstance.isCompact) || false,
402
+ isStriped: (tableInstance === null || tableInstance === void 0 ? void 0 : tableInstance.isStriped) || false,
403
+ getVirtualSelectionTotal: () => (tableInstance === null || tableInstance === void 0 ? void 0 : tableInstance.getVirtualSelectionTotal()) || 0,
404
+ getSelectedRows: () => (tableInstance === null || tableInstance === void 0 ? void 0 : tableInstance.getSelectedRows()) || [],
405
+ getExcludedRows: () => (tableInstance === null || tableInstance === void 0 ? void 0 : tableInstance.getExcludedRows()) || [],
406
+ getSelectionState: () => (tableInstance === null || tableInstance === void 0 ? void 0 : tableInstance.getSelectionState()) || {},
407
+ clearSelections: () => tableInstance === null || tableInstance === void 0 ? void 0 : tableInstance.clearSelections(),
408
+ onColumnResize: (e) => tableInstance === null || tableInstance === void 0 ? void 0 : tableInstance.onColumnResize(e),
409
+ };
410
+ };
411
+ const Table = styled(({ className, children, data, rowHeight, headerHeight, tableInstance, queryKey, totalRecords, compact, focusedRow, keyValue, onScroll, allowColumnResize, allowColumnReorder, showActionColumn, showSelection, selectAll, reloadFn, onColumnReorder, onSelectionChanged, onActionButtonClick, onHeaderClick, onColumnResize, onRowUpdated, }) => {
412
+ const rootRef = useRef(null);
413
+ const [initialize, getInstance] = useOverlayScrollbars({
414
+ options: {
415
+ scrollbars: {
416
+ autoHide: "scroll",
417
+ autoHideDelay: 500,
418
+ },
419
+ },
420
+ events: { scroll: (_, event) => onScroll === null || onScroll === void 0 ? void 0 : onScroll(event) },
421
+ });
422
+ const [targetElm, setTargetElm] = useState(null);
423
+ const [listElm, setListElm] = useState(null);
424
+ const dragColumn = useRef(null);
425
+ const dropColumn = useRef(null);
426
+ const [_compact, setCompact] = useState(compact);
427
+ const [stripes, setStripes] = useState(false);
428
+ const [selectedRows, setSelectedRows] = useState([]);
429
+ const [virtualSelectionTotal, setVirtualSelectionTotal] = useState(0);
430
+ const [excludedRows, setExcludedRows] = useState([]);
431
+ const [selectionState, setSelectionState] = useState("none");
432
+ const resizeState = useRef([]);
433
+ // check if children is an array
434
+ children = useMemo(() => {
435
+ return Array.isArray(children) ? children : [children];
436
+ }, [children]);
437
+ let columns = useMemo(() => {
438
+ var _a, _b;
439
+ return (_b = (_a = children === null || children === void 0 ? void 0 : children.filter) === null || _a === void 0 ? void 0 : _a.call(children, (child) => child.props.componentType === "Column")) === null || _b === void 0 ? void 0 : _b.map((column) => {
440
+ return cloneElement(column, {
441
+ columnId: shortUUID.generate(),
442
+ allowResize: allowColumnResize !== undefined
443
+ ? allowColumnResize
444
+ : column.props.allowResize,
445
+ allowReorder: allowColumnReorder !== undefined
446
+ ? allowColumnReorder
447
+ : column.props.allowReorder,
448
+ resizeEnabled: allowColumnResize !== undefined
449
+ ? allowColumnResize
450
+ : column.props.resizeEnabled,
451
+ });
452
+ });
453
+ }, [children]);
454
+ const [columnOrder, setColumnOrder] = useState(columns.map((col, index) => {
455
+ var _a, _b;
456
+ return {
457
+ column: (_a = col.props) === null || _a === void 0 ? void 0 : _a.dataField,
458
+ order: ((_b = col.props) === null || _b === void 0 ? void 0 : _b.order) || index,
459
+ };
460
+ }));
461
+ const handleColumnReorder = (dragColumn, dropColumn) => {
462
+ var _a;
463
+ const dropColumnOrder = (_a = columnOrder.find((col) => col.column === dropColumn.dataField)) === null || _a === void 0 ? void 0 : _a.order;
464
+ const newColumnOrder = columnOrder.map((col) => {
465
+ if (col.column === dragColumn.dataField) {
466
+ return { column: col.column, order: dropColumnOrder + 1 };
467
+ }
468
+ else {
469
+ return col.order > dropColumnOrder
470
+ ? Object.assign(Object.assign({}, col), { order: col.order + 1 }) : col;
471
+ }
472
+ });
473
+ onColumnReorder === null || onColumnReorder === void 0 ? void 0 : onColumnReorder(newColumnOrder);
474
+ setColumnOrder(newColumnOrder);
475
+ };
476
+ const handleSelectAll = () => {
477
+ let newSelectionState = null;
478
+ let newVirtualSelectionTotal = null;
479
+ if (selectionState === "all") {
480
+ // clear current selections
481
+ setSelectedRows([]);
482
+ // turn off all rows selected
483
+ newSelectionState = "none";
484
+ setSelectionState("none");
485
+ // clear excluded rows
486
+ setExcludedRows([]);
487
+ newVirtualSelectionTotal = 0;
488
+ setVirtualSelectionTotal(newVirtualSelectionTotal);
489
+ }
490
+ else {
491
+ // turn on all rows selected
492
+ newSelectionState = "all";
493
+ setSelectionState("all");
494
+ // clear excluded rows
495
+ setExcludedRows([]);
496
+ newVirtualSelectionTotal = totalRecords;
497
+ setVirtualSelectionTotal(newVirtualSelectionTotal);
498
+ }
499
+ onSelectionChanged === null || onSelectionChanged === void 0 ? void 0 : onSelectionChanged({
500
+ selectedRows: [],
501
+ excludedRows: [],
502
+ selectionState: newSelectionState,
503
+ virtualSelectionTotal: newVirtualSelectionTotal,
504
+ });
505
+ };
506
+ const handleSelectRow = ({ rowData, checked, }) => {
507
+ let newSelectedRows = [];
508
+ let newExcludedRows = [];
509
+ let newSelectionState = null;
510
+ let newVirtualSelectionTotal = null;
511
+ if (selectionState === "all") {
512
+ newExcludedRows = [...excludedRows, rowData];
513
+ newSelectionState = "someExcluded";
514
+ newVirtualSelectionTotal = totalRecords ? totalRecords - 1 : 0;
515
+ }
516
+ else if (selectionState === "none") {
517
+ newSelectedRows = [rowData];
518
+ newSelectionState = "someIncluded";
519
+ newVirtualSelectionTotal = 1;
520
+ }
521
+ else if (selectionState === "someExcluded") {
522
+ newSelectionState = "someExcluded";
523
+ newSelectedRows = selectedRows;
524
+ if (checked) {
525
+ // remove from excluded rows
526
+ newExcludedRows = excludedRows.filter((row) => keyValue ? (row === null || row === void 0 ? void 0 : row[keyValue]) !== (rowData === null || rowData === void 0 ? void 0 : rowData[keyValue]) : false);
527
+ newVirtualSelectionTotal = virtualSelectionTotal
528
+ ? virtualSelectionTotal + 1
529
+ : 0;
530
+ }
531
+ else {
532
+ // add to excluded rows
533
+ newExcludedRows = [...excludedRows, rowData];
534
+ newVirtualSelectionTotal = virtualSelectionTotal
535
+ ? virtualSelectionTotal - 1
536
+ : 0;
537
+ }
538
+ }
539
+ else if (selectionState === "someIncluded") {
540
+ newSelectionState = "someIncluded";
541
+ newExcludedRows = excludedRows;
542
+ if (checked) {
543
+ // add to selected rows
544
+ newSelectedRows = [...selectedRows, rowData];
545
+ newVirtualSelectionTotal = virtualSelectionTotal
546
+ ? virtualSelectionTotal + 1
547
+ : 0;
548
+ }
549
+ else {
550
+ // remove from selected rows
551
+ newSelectedRows = selectedRows.filter((row) => keyValue ? row[keyValue] !== rowData[keyValue] : false);
552
+ newVirtualSelectionTotal = virtualSelectionTotal
553
+ ? virtualSelectionTotal - 1
554
+ : 0;
555
+ }
556
+ }
557
+ if (newVirtualSelectionTotal === totalRecords) {
558
+ newSelectionState = "all";
559
+ }
560
+ else if (newVirtualSelectionTotal === 0) {
561
+ newSelectionState = "none";
562
+ }
563
+ setSelectedRows(newSelectedRows);
564
+ setExcludedRows(newExcludedRows);
565
+ setVirtualSelectionTotal(newVirtualSelectionTotal);
566
+ setSelectionState(newSelectionState);
567
+ onSelectionChanged === null || onSelectionChanged === void 0 ? void 0 : onSelectionChanged({
568
+ selectedRows: newSelectedRows,
569
+ excludedRows: newExcludedRows,
570
+ selectionState: newSelectionState,
571
+ virtualSelectionTotal: newVirtualSelectionTotal,
572
+ });
573
+ };
574
+ // sort columns
575
+ columns = useMemo(() => columns.sort((a, b) => {
576
+ var _a, _b;
577
+ const aOrder = (_a = columnOrder.find((col) => col.column === a.props.dataField)) === null || _a === void 0 ? void 0 : _a.order;
578
+ const bOrder = (_b = columnOrder.find((col) => col.column === b.props.dataField)) === null || _b === void 0 ? void 0 : _b.order;
579
+ return aOrder - bOrder;
580
+ }), [columnOrder, columns]);
581
+ const hiddenColumns = columns
582
+ .filter((col) => col.props.visible === false)
583
+ .map((col) => col.props.dataField);
584
+ // insert action column as first column
585
+ showActionColumn &&
586
+ (columns = [
587
+ _jsx(Column, { className: "action-column", dataField: "action", allowSorting: false, allowReorder: false, caption: "", width: showSelection ? 55 : 35, resizeEnabled: false, render: (rowData) => (_jsxs("div", { className: "action-column-container", children: [showSelection && (_jsx("div", { className: "action-button", children: _jsx(CheckBox, { value: selectionState === "all"
588
+ ? true
589
+ : selectionState === "someIncluded"
590
+ ? !!selectedRows.find((row) => keyValue
591
+ ? row[keyValue] === rowData[keyValue]
592
+ : false)
593
+ : selectionState === "someExcluded"
594
+ ? !excludedRows.find((row) => keyValue
595
+ ? row[keyValue] === rowData[keyValue]
596
+ : false)
597
+ : false, onChange: (newValue) => handleSelectRow({ rowData, checked: newValue }) }) })), _jsx("div", { className: "action-button", title: "Show More Details", onClick: (e) => {
598
+ onActionButtonClick === null || onActionButtonClick === void 0 ? void 0 : onActionButtonClick(rowData);
599
+ }, children: _jsx(Maximize2Icon, { size: _compact ? 8 : 12 }) })] })) }, shortUUID.generate()),
600
+ ...columns,
601
+ ]);
602
+ useEffect(() => {
603
+ if (targetElm && listElm) {
604
+ initialize({
605
+ target: targetElm,
606
+ elements: {
607
+ viewport: listElm,
608
+ },
609
+ });
610
+ return () => { var _a; return (_a = getInstance()) === null || _a === void 0 ? void 0 : _a.destroy(); };
611
+ }
612
+ }, [targetElm, listElm]);
613
+ useEffect(() => {
614
+ if (tableInstance) {
615
+ tableInstance.setTableInstance({
616
+ getSelectedRows: () => selectedRows,
617
+ getExcludedRows: () => excludedRows,
618
+ getVirtualSelectionTotal: () => virtualSelectionTotal,
619
+ getSelectionState: () => selectionState,
620
+ clearSelections: () => {
621
+ setSelectedRows([]);
622
+ setVirtualSelectionTotal(0);
623
+ setSelectionState("none");
624
+ setExcludedRows([]);
625
+ },
626
+ toggleCompact: () => setCompact(!_compact),
627
+ isCompact: _compact,
628
+ toggleStripes: () => setStripes(!stripes),
629
+ isStriped: stripes,
630
+ });
631
+ }
632
+ }, [
633
+ selectedRows,
634
+ excludedRows,
635
+ virtualSelectionTotal,
636
+ selectionState,
637
+ _compact,
638
+ stripes,
639
+ tableInstance,
640
+ ]);
641
+ useEffect(() => {
642
+ // Scroll to selected row if outside of viewport
643
+ if (focusedRow) {
644
+ const focusedRowElm = keyValue
645
+ ? document.querySelector(`[data-type="tr"][data-key="${focusedRow[keyValue]}"]`)
646
+ : null;
647
+ if (focusedRowElm) {
648
+ focusedRowElm.scrollIntoView({
649
+ behavior: "smooth",
650
+ block: "nearest",
651
+ inline: "nearest",
652
+ });
653
+ }
654
+ }
655
+ }, [focusedRow]);
656
+ return (_jsx("div", { ref: rootRef, className: className + " table-wrapper", children: _jsx(AutoSizer, { children: ({ height, width }) => (_jsx("div", { style: { width, height }, "data-overlayscrollbars": "", ref: setTargetElm, children: _jsx(FixedSizeList, { overscanCount: 10, itemData: {
657
+ data,
658
+ columns: columns.filter((col) => !hiddenColumns.includes(col.props.dataField)),
659
+ focusedRow,
660
+ keyValue,
661
+ _compact,
662
+ queryKey,
663
+ reloadFn,
664
+ rowHeight: rowHeight ? rowHeight : _compact ? 28 : 38,
665
+ headerHeight: headerHeight
666
+ ? headerHeight
667
+ : _compact
668
+ ? 28
669
+ : 38,
670
+ resizeState,
671
+ onRowUpdated,
672
+ tableWidth: width,
673
+ }, height: height, innerElementType: (props) => (_jsx(InnerElement, Object.assign({}, props, { columns: columns.filter((col) => !hiddenColumns.includes(col.props.dataField)), tableWidth: width, resizeState: resizeState, _compact: _compact, stripes: stripes, onHeaderClick: onHeaderClick, dropColumn: dropColumn, dragColumn: dragColumn, showSelection: showSelection, selectAll: selectAll, selectionState: selectionState, handleSelectAll: handleSelectAll, handleColumnReorder: handleColumnReorder, onColumnResize: onColumnResize }))), itemCount: data === null || data === void 0 ? void 0 : data.length, itemSize: rowHeight ? rowHeight : _compact ? 28 : 38, width: width, outerRef: setListElm, children: Row }) })) }) }));
674
+ }) `
675
+ position: relative;
676
+ flex: 1 1 auto;
677
+ overflow: hidden;
678
+ display: flex;
679
+ flex-direction: column;
680
+
681
+ .os-scrollbar {
682
+ pointer-events: auto;
683
+ visibility: visible;
684
+ }
685
+
686
+ .action-column {
687
+ max-width: 55px;
688
+ }
689
+
690
+ .action-column-container {
691
+ display: flex;
692
+ align-content: center;
693
+ align-items: center;
694
+ padding: 4px;
695
+ color: ${({ theme }) => theme.palette.text.secondary};
696
+ }
697
+
698
+ .action-button {
699
+ display: flex;
700
+ align-content: center;
701
+ align-items: center;
702
+ cursor: pointer;
703
+ color: ${({ theme }) => theme.palette.primary.main};
704
+ margin-right: 5px;
705
+ }
706
+ `;
707
+ export default Table;