@vuu-ui/vuu-table 0.8.32 → 0.8.34

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 (184) hide show
  1. package/cjs/Row.css +115 -0
  2. package/cjs/Row.js +115 -0
  3. package/cjs/Row.js.map +1 -0
  4. package/cjs/Table.css +151 -0
  5. package/cjs/Table.js +276 -0
  6. package/cjs/Table.js.map +1 -0
  7. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css +5 -0
  8. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js +33 -0
  9. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js.map +1 -0
  10. package/cjs/cell-renderers/input-cell/InputCell.css +31 -0
  11. package/cjs/cell-renderers/input-cell/InputCell.js +49 -0
  12. package/cjs/cell-renderers/input-cell/InputCell.js.map +1 -0
  13. package/cjs/cell-renderers/toggle-cell/ToggleCell.css +32 -0
  14. package/cjs/cell-renderers/toggle-cell/ToggleCell.js +59 -0
  15. package/cjs/cell-renderers/toggle-cell/ToggleCell.js.map +1 -0
  16. package/cjs/column-header-pill/ColumnHeaderPill.css +30 -0
  17. package/cjs/column-header-pill/ColumnHeaderPill.js +44 -0
  18. package/cjs/column-header-pill/ColumnHeaderPill.js.map +1 -0
  19. package/cjs/column-header-pill/GroupColumnPill.css +7 -0
  20. package/cjs/column-header-pill/GroupColumnPill.js +20 -0
  21. package/cjs/column-header-pill/GroupColumnPill.js.map +1 -0
  22. package/cjs/column-header-pill/SortIndicator.css +7 -0
  23. package/cjs/column-header-pill/SortIndicator.js +18 -0
  24. package/cjs/column-header-pill/SortIndicator.js.map +1 -0
  25. package/cjs/column-menu/ColumnMenu.css +21 -0
  26. package/cjs/column-menu/ColumnMenu.js +21 -0
  27. package/cjs/column-menu/ColumnMenu.js.map +1 -0
  28. package/cjs/column-resizing/ColumnResizer.css +28 -0
  29. package/cjs/column-resizing/ColumnResizer.js +63 -0
  30. package/cjs/column-resizing/ColumnResizer.js.map +1 -0
  31. package/cjs/column-resizing/useTableColumnResize.js +55 -0
  32. package/cjs/column-resizing/useTableColumnResize.js.map +1 -0
  33. package/cjs/context-menu/buildContextMenuDescriptors.js +214 -0
  34. package/cjs/context-menu/buildContextMenuDescriptors.js.map +1 -0
  35. package/cjs/context-menu/useHandleTableContextMenu.js +81 -0
  36. package/cjs/context-menu/useHandleTableContextMenu.js.map +1 -0
  37. package/cjs/header-cell/GroupHeaderCell.css +65 -0
  38. package/cjs/header-cell/GroupHeaderCell.js +108 -0
  39. package/cjs/header-cell/GroupHeaderCell.js.map +1 -0
  40. package/cjs/header-cell/HeaderCell.css +146 -0
  41. package/cjs/header-cell/HeaderCell.js +100 -0
  42. package/cjs/header-cell/HeaderCell.js.map +1 -0
  43. package/cjs/index.js +35 -1
  44. package/cjs/index.js.map +1 -7
  45. package/cjs/moving-window.js +61 -0
  46. package/cjs/moving-window.js.map +1 -0
  47. package/cjs/table-cell/TableCell.css +41 -0
  48. package/cjs/table-cell/TableCell.js +63 -0
  49. package/cjs/table-cell/TableCell.js.map +1 -0
  50. package/cjs/table-cell/TableGroupCell.css +26 -0
  51. package/cjs/table-cell/TableGroupCell.js +45 -0
  52. package/cjs/table-cell/TableGroupCell.js.map +1 -0
  53. package/cjs/table-config.js +25 -0
  54. package/cjs/table-config.js.map +1 -0
  55. package/cjs/table-dom-utils.js +60 -0
  56. package/cjs/table-dom-utils.js.map +1 -0
  57. package/cjs/table-header/TableHeader.js +87 -0
  58. package/cjs/table-header/TableHeader.js.map +1 -0
  59. package/cjs/table-header/useTableHeader.js +72 -0
  60. package/cjs/table-header/useTableHeader.js.map +1 -0
  61. package/cjs/useCell.js +28 -0
  62. package/cjs/useCell.js.map +1 -0
  63. package/cjs/useCellEditing.js +79 -0
  64. package/cjs/useCellEditing.js.map +1 -0
  65. package/cjs/useControlledTableNavigation.js +43 -0
  66. package/cjs/useControlledTableNavigation.js.map +1 -0
  67. package/cjs/useDataSource.js +104 -0
  68. package/cjs/useDataSource.js.map +1 -0
  69. package/cjs/useInitialValue.js +11 -0
  70. package/cjs/useInitialValue.js.map +1 -0
  71. package/cjs/useKeyboardNavigation.js +304 -0
  72. package/cjs/useKeyboardNavigation.js.map +1 -0
  73. package/cjs/useRowClassNameGenerators.js +34 -0
  74. package/cjs/useRowClassNameGenerators.js.map +1 -0
  75. package/cjs/useRowHeight.js +43 -0
  76. package/cjs/useRowHeight.js.map +1 -0
  77. package/cjs/useSelection.js +64 -0
  78. package/cjs/useSelection.js.map +1 -0
  79. package/cjs/useTable.js +553 -0
  80. package/cjs/useTable.js.map +1 -0
  81. package/cjs/useTableAndColumnSettings.js +128 -0
  82. package/cjs/useTableAndColumnSettings.js.map +1 -0
  83. package/cjs/useTableContextMenu.js +42 -0
  84. package/cjs/useTableContextMenu.js.map +1 -0
  85. package/cjs/useTableModel.js +297 -0
  86. package/cjs/useTableModel.js.map +1 -0
  87. package/cjs/useTableScroll.js +396 -0
  88. package/cjs/useTableScroll.js.map +1 -0
  89. package/cjs/useTableViewport.js +122 -0
  90. package/cjs/useTableViewport.js.map +1 -0
  91. package/esm/Row.css +115 -0
  92. package/esm/Row.js +112 -0
  93. package/esm/Row.js.map +1 -0
  94. package/esm/Table.css +151 -0
  95. package/esm/Table.js +274 -0
  96. package/esm/Table.js.map +1 -0
  97. package/esm/cell-renderers/checkbox-cell/CheckboxCell.css +5 -0
  98. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js +31 -0
  99. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js.map +1 -0
  100. package/esm/cell-renderers/input-cell/InputCell.css +31 -0
  101. package/esm/cell-renderers/input-cell/InputCell.js +47 -0
  102. package/esm/cell-renderers/input-cell/InputCell.js.map +1 -0
  103. package/esm/cell-renderers/toggle-cell/ToggleCell.css +32 -0
  104. package/esm/cell-renderers/toggle-cell/ToggleCell.js +57 -0
  105. package/esm/cell-renderers/toggle-cell/ToggleCell.js.map +1 -0
  106. package/esm/column-header-pill/ColumnHeaderPill.css +30 -0
  107. package/esm/column-header-pill/ColumnHeaderPill.js +42 -0
  108. package/esm/column-header-pill/ColumnHeaderPill.js.map +1 -0
  109. package/esm/column-header-pill/GroupColumnPill.css +7 -0
  110. package/esm/column-header-pill/GroupColumnPill.js +18 -0
  111. package/esm/column-header-pill/GroupColumnPill.js.map +1 -0
  112. package/esm/column-header-pill/SortIndicator.css +7 -0
  113. package/esm/column-header-pill/SortIndicator.js +16 -0
  114. package/esm/column-header-pill/SortIndicator.js.map +1 -0
  115. package/esm/column-menu/ColumnMenu.css +21 -0
  116. package/esm/column-menu/ColumnMenu.js +19 -0
  117. package/esm/column-menu/ColumnMenu.js.map +1 -0
  118. package/esm/column-resizing/ColumnResizer.css +28 -0
  119. package/esm/column-resizing/ColumnResizer.js +61 -0
  120. package/esm/column-resizing/ColumnResizer.js.map +1 -0
  121. package/esm/column-resizing/useTableColumnResize.js +53 -0
  122. package/esm/column-resizing/useTableColumnResize.js.map +1 -0
  123. package/esm/context-menu/buildContextMenuDescriptors.js +212 -0
  124. package/esm/context-menu/buildContextMenuDescriptors.js.map +1 -0
  125. package/esm/context-menu/useHandleTableContextMenu.js +79 -0
  126. package/esm/context-menu/useHandleTableContextMenu.js.map +1 -0
  127. package/esm/header-cell/GroupHeaderCell.css +65 -0
  128. package/esm/header-cell/GroupHeaderCell.js +106 -0
  129. package/esm/header-cell/GroupHeaderCell.js.map +1 -0
  130. package/esm/header-cell/HeaderCell.css +146 -0
  131. package/esm/header-cell/HeaderCell.js +98 -0
  132. package/esm/header-cell/HeaderCell.js.map +1 -0
  133. package/esm/index.js +13 -1
  134. package/esm/index.js.map +1 -7
  135. package/esm/moving-window.js +59 -0
  136. package/esm/moving-window.js.map +1 -0
  137. package/esm/table-cell/TableCell.css +41 -0
  138. package/esm/table-cell/TableCell.js +61 -0
  139. package/esm/table-cell/TableCell.js.map +1 -0
  140. package/esm/table-cell/TableGroupCell.css +26 -0
  141. package/esm/table-cell/TableGroupCell.js +43 -0
  142. package/esm/table-cell/TableGroupCell.js.map +1 -0
  143. package/esm/table-config.js +23 -0
  144. package/esm/table-config.js.map +1 -0
  145. package/esm/table-dom-utils.js +51 -0
  146. package/esm/table-dom-utils.js.map +1 -0
  147. package/esm/table-header/TableHeader.js +85 -0
  148. package/esm/table-header/TableHeader.js.map +1 -0
  149. package/esm/table-header/useTableHeader.js +70 -0
  150. package/esm/table-header/useTableHeader.js.map +1 -0
  151. package/esm/useCell.js +26 -0
  152. package/esm/useCell.js.map +1 -0
  153. package/esm/useCellEditing.js +77 -0
  154. package/esm/useCellEditing.js.map +1 -0
  155. package/esm/useControlledTableNavigation.js +41 -0
  156. package/esm/useControlledTableNavigation.js.map +1 -0
  157. package/esm/useDataSource.js +101 -0
  158. package/esm/useDataSource.js.map +1 -0
  159. package/esm/useInitialValue.js +9 -0
  160. package/esm/useInitialValue.js.map +1 -0
  161. package/esm/useKeyboardNavigation.js +300 -0
  162. package/esm/useKeyboardNavigation.js.map +1 -0
  163. package/esm/useRowClassNameGenerators.js +32 -0
  164. package/esm/useRowClassNameGenerators.js.map +1 -0
  165. package/esm/useRowHeight.js +41 -0
  166. package/esm/useRowHeight.js.map +1 -0
  167. package/esm/useSelection.js +62 -0
  168. package/esm/useSelection.js.map +1 -0
  169. package/esm/useTable.js +551 -0
  170. package/esm/useTable.js.map +1 -0
  171. package/esm/useTableAndColumnSettings.js +126 -0
  172. package/esm/useTableAndColumnSettings.js.map +1 -0
  173. package/esm/useTableContextMenu.js +40 -0
  174. package/esm/useTableContextMenu.js.map +1 -0
  175. package/esm/useTableModel.js +293 -0
  176. package/esm/useTableModel.js.map +1 -0
  177. package/esm/useTableScroll.js +393 -0
  178. package/esm/useTableScroll.js.map +1 -0
  179. package/esm/useTableViewport.js +120 -0
  180. package/esm/useTableViewport.js.map +1 -0
  181. package/package.json +12 -14
  182. package/LICENSE +0 -201
  183. package/index.css +0 -2
  184. package/index.css.map +0 -7
@@ -0,0 +1,146 @@
1
+ .vuuTableGroupHeaderCell,
2
+ .vuuTableHeaderCell {
3
+ --cell-align: 'flex-start';
4
+ --vuuColumnHeaderPill-margin: 0;
5
+ --vuuColumnHeaderPill-flex: 0 0 24px;
6
+
7
+ align-items: center;
8
+ background-color: var(--vuuTableHeaderCell-background, inherit);
9
+ border-bottom: 1px solid #ccc;
10
+ border-right-color: var(--cell-borderColor);
11
+ border-right-style: solid;
12
+ border-right-width: 1px;
13
+ box-sizing: border-box;
14
+ cursor: default;
15
+ display: inline-flex;
16
+ gap: 4px;
17
+ height: var(--header-height);
18
+ padding: 0 12px 0 4px;
19
+ position: relative;
20
+ vertical-align: top;
21
+ }
22
+
23
+ .vuuTableHeaderCell:focus {
24
+ outline: var(--vuuTableCell-outline, solid var(--salt-focused-outlineColor) 2px);
25
+ outline-offset: -3px;
26
+ }
27
+
28
+ .vuuTableHeaderCell-right {
29
+ --columnResizer-left: 0;
30
+ --vuuTable-columnMenu-margin: 0;
31
+ --vuuColumnHeaderPill-margin: 0 3px 0 0;
32
+ --column-menu-left: 2px;
33
+ justify-content: flex-end;
34
+ padding: 0 3px 0 12px;
35
+ }
36
+
37
+ .vuuTableHeaderCell-noMenu {
38
+ padding-left: var(--salt-spacing-300)
39
+ }
40
+
41
+ .vuuTableHeaderCell-label {
42
+ flex: 0 1 auto;
43
+ line-height: calc(var(--header-height) - 1px);
44
+ overflow: hidden;
45
+ text-overflow: ellipsis;
46
+ white-space: nowrap;
47
+ }
48
+
49
+ .vuuTableHeaderCell-right .vuuTableHeaderCell-label {
50
+ text-align: right;
51
+ }
52
+
53
+ .vuuTableHeaderCell-resizing {
54
+ --columnResizeThumb-color: var(--vuu-color-purple-10);
55
+ --columnResizer-color: var(--vuu-color-purple-10);
56
+ --columnResizer-height: var(--table-height);
57
+ }
58
+
59
+ .vuuTableHeaderCell.vuuPinLeft {
60
+ padding-left: 2px;
61
+ }
62
+
63
+ .vuuTableHeaderCell.vuuPinLeft.vuuEndPin .vuuColumnResizer:before {
64
+ --height: calc(var(--table-height) - var(--horizontal-scrollbar-height));
65
+ --inset-r: calc(var(--pin-width) - 2px);
66
+ --inset-b: calc(var(--height) - 2px);
67
+ --clip-path: polygon(
68
+ 0% 0%,
69
+ 0% 120%,
70
+ 2px 120%,
71
+ 2px 2px,
72
+ var(--inset-r) 2px,
73
+ var(--inset-r) var(--inset-b),
74
+ 2px var(--inset-b),
75
+ 2px 120%,
76
+ 120% 120%,
77
+ 120% 0%
78
+ );
79
+ background-color: transparent;
80
+ border-color: var(--vuuTablePinnedColumn-borderColor, var(--salt-container-primary-borderColor));
81
+ border-width: 1px;
82
+ border-style: solid solid solid solid;
83
+ /* border-radius: 0 6px 6px 0; */
84
+ border-radius: 4px;
85
+ box-shadow: 2px 1px 4px 0px rgba(0, 0, 0, 0.10);
86
+ /* clip-path: inset(10px 10px 10px 10px); */
87
+ clip-path: var(--clip-path);
88
+ content: '';
89
+ position: absolute;
90
+ width: var(--pin-width);
91
+ top:0;
92
+ bottom:0;
93
+ right: 3px;
94
+ height: var(--height);
95
+ z-index: -5;
96
+ }
97
+
98
+ .vuuTableHeaderCell.vuuPinRight.vuuEndPin .vuuColumnResizer:before {
99
+ --height: calc(var(--table-height) - var(--horizontal-scrollbar-height));
100
+ --inset-r: calc(var(--pin-width) - 2px);
101
+ --inset-b: calc(var(--height) - 2px);
102
+ --clip-path: polygon(
103
+ -20% 0%,
104
+ -20% 120%,
105
+ 2px 120%,
106
+ 2px 2px,
107
+ var(--inset-r) 2px,
108
+ var(--inset-r) var(--inset-b),
109
+ 2px var(--inset-b),
110
+ 2px 120%,
111
+ 120% 120%,
112
+ 120% 0%
113
+ );
114
+ background-color: transparent;
115
+ border-color: #A9AAAD;
116
+ border-width: 1px;
117
+ border-style: solid solid solid solid;
118
+ /* border-radius: 0 6px 6px 0; */
119
+ border-radius: 4px;
120
+ box-shadow: -2px 1px 4px 0px rgba(0, 0, 0, 0.10);
121
+ /* clip-path: inset(10px 10px 10px 10px); */
122
+ clip-path: var(--clip-path);
123
+ content: '';
124
+ position: absolute;
125
+ width: var(--pin-width);
126
+ top:0;
127
+ bottom:0;
128
+ right: 0px;
129
+ height: var(--height);
130
+ z-index: -5;
131
+ }
132
+
133
+ .vuuTableHeaderCell.vuuDraggable-dragAway {
134
+ display: none;
135
+ }
136
+
137
+ .vuuTable-headingCell {
138
+ background: var(--dataTable-background);
139
+ border-color: var(--salt-separable-tertiary-borderColor);
140
+ border-style: solid solid solid none;
141
+ border-width: 1px;
142
+ color: var(--salt-text-secondary-foreground);
143
+ display: inline-block;
144
+ height: var(--header-height);
145
+ padding: 0 !important;
146
+ }
@@ -0,0 +1,98 @@
1
+ import { jsx, jsxs } from 'react/jsx-runtime';
2
+ import { useContextMenu } from '@vuu-ui/vuu-popups';
3
+ import cx from 'clsx';
4
+ import { useRef, useMemo, useCallback } from 'react';
5
+ import { SortIndicator } from '../column-header-pill/SortIndicator.js';
6
+ import { ColumnMenu } from '../column-menu/ColumnMenu.js';
7
+ import { ColumnResizer } from '../column-resizing/ColumnResizer.js';
8
+ import { useTableColumnResize } from '../column-resizing/useTableColumnResize.js';
9
+ import { useCell } from '../useCell.js';
10
+
11
+ const classBase = "vuuTableHeaderCell";
12
+ const HeaderCell = ({
13
+ className: classNameProp,
14
+ column,
15
+ onClick,
16
+ onResize,
17
+ showMenu = true,
18
+ ...htmlAttributes
19
+ }) => {
20
+ const { HeaderCellContentRenderer, HeaderCellLabelRenderer } = column;
21
+ const rootRef = useRef(null);
22
+ const { isResizing, ...resizeProps } = useTableColumnResize({
23
+ column,
24
+ onResize,
25
+ rootRef
26
+ });
27
+ const [showContextMenu] = useContextMenu();
28
+ const handleContextMenu = useMemo(() => {
29
+ if (showMenu) {
30
+ return void 0;
31
+ } else {
32
+ return (e) => showContextMenu(e, "column-menu", { column });
33
+ }
34
+ }, [column, showContextMenu, showMenu]);
35
+ const headerItems = useMemo(() => {
36
+ const sortIndicator = /* @__PURE__ */ jsx(SortIndicator, { column });
37
+ const columnLabel = HeaderCellLabelRenderer ? /* @__PURE__ */ jsx(
38
+ HeaderCellLabelRenderer,
39
+ {
40
+ className: `${classBase}-label`,
41
+ column
42
+ }
43
+ ) : /* @__PURE__ */ jsx("div", { className: `${classBase}-label`, children: column.label ?? column.name });
44
+ const columnContent = HeaderCellContentRenderer ? [/* @__PURE__ */ jsx(HeaderCellContentRenderer, { column }, "content")] : [];
45
+ if (showMenu) {
46
+ const columnMenu = /* @__PURE__ */ jsx(ColumnMenu, { column });
47
+ if (column.align === "right") {
48
+ return [sortIndicator, columnLabel, columnContent, columnMenu];
49
+ } else {
50
+ return [columnMenu, columnLabel, sortIndicator, columnContent];
51
+ }
52
+ } else {
53
+ if (column.align === "right") {
54
+ return [sortIndicator, columnLabel, columnContent];
55
+ } else {
56
+ return [columnLabel, sortIndicator, columnContent];
57
+ }
58
+ }
59
+ }, [HeaderCellContentRenderer, HeaderCellLabelRenderer, column, showMenu]);
60
+ const handleClick = useCallback(
61
+ (evt) => {
62
+ !isResizing && onClick?.(evt);
63
+ },
64
+ [isResizing, onClick]
65
+ );
66
+ const handleKeyDown = useCallback(
67
+ (evt) => {
68
+ if (evt.key === "Enter") {
69
+ onClick?.(evt);
70
+ }
71
+ },
72
+ [onClick]
73
+ );
74
+ const { className, style } = useCell(column, classBase, true);
75
+ return /* @__PURE__ */ jsxs(
76
+ "div",
77
+ {
78
+ ...htmlAttributes,
79
+ className: cx(className, classNameProp, {
80
+ [`${classBase}-resizing`]: isResizing,
81
+ [`${classBase}-noMenu`]: showMenu === false
82
+ }),
83
+ onClick: handleClick,
84
+ onContextMenu: handleContextMenu,
85
+ onKeyDown: handleKeyDown,
86
+ ref: rootRef,
87
+ role: "columnheader",
88
+ style,
89
+ children: [
90
+ ...headerItems,
91
+ column.resizeable !== false ? /* @__PURE__ */ jsx(ColumnResizer, { ...resizeProps }) : null
92
+ ]
93
+ }
94
+ );
95
+ };
96
+
97
+ export { HeaderCell };
98
+ //# sourceMappingURL=HeaderCell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HeaderCell.js","sources":["../../src/header-cell/HeaderCell.tsx"],"sourcesContent":["import { useContextMenu } from \"@vuu-ui/vuu-popups\";\nimport { HeaderCellProps } from \"@vuu-ui/vuu-table-types\";\nimport cx from \"clsx\";\nimport {\n KeyboardEventHandler,\n MouseEvent,\n MouseEventHandler,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\nimport { SortIndicator } from \"../column-header-pill\";\nimport { ColumnMenu } from \"../column-menu\";\nimport { ColumnResizer, useTableColumnResize } from \"../column-resizing\";\nimport { useCell } from \"../useCell\";\n\nimport \"./HeaderCell.css\";\n\nconst classBase = \"vuuTableHeaderCell\";\n\nexport const HeaderCell = ({\n className: classNameProp,\n column,\n onClick,\n onResize,\n showMenu = true,\n ...htmlAttributes\n}: HeaderCellProps) => {\n const { HeaderCellContentRenderer, HeaderCellLabelRenderer } = column;\n const rootRef = useRef<HTMLDivElement>(null);\n const { isResizing, ...resizeProps } = useTableColumnResize({\n column,\n onResize,\n rootRef,\n });\n\n const [showContextMenu] = useContextMenu();\n\n const handleContextMenu = useMemo(() => {\n if (showMenu) {\n return undefined;\n } else {\n return (e: MouseEvent) => showContextMenu(e, \"column-menu\", { column });\n }\n }, [column, showContextMenu, showMenu]);\n\n const headerItems = useMemo(() => {\n const sortIndicator = <SortIndicator column={column} />;\n const columnLabel = HeaderCellLabelRenderer ? (\n <HeaderCellLabelRenderer\n className={`${classBase}-label`}\n column={column}\n />\n ) : (\n <div className={`${classBase}-label`}>{column.label ?? column.name}</div>\n );\n const columnContent = HeaderCellContentRenderer\n ? [<HeaderCellContentRenderer column={column} key=\"content\" />]\n : [];\n\n if (showMenu) {\n const columnMenu = <ColumnMenu column={column} />;\n\n if (column.align === \"right\") {\n return [sortIndicator, columnLabel, columnContent, columnMenu];\n } else {\n return [columnMenu, columnLabel, sortIndicator, columnContent];\n }\n } else {\n if (column.align === \"right\") {\n return [sortIndicator, columnLabel, columnContent];\n } else {\n return [columnLabel, sortIndicator, columnContent];\n }\n }\n }, [HeaderCellContentRenderer, HeaderCellLabelRenderer, column, showMenu]);\n\n const handleClick = useCallback<MouseEventHandler<HTMLDivElement>>(\n (evt) => {\n !isResizing && onClick?.(evt);\n },\n [isResizing, onClick]\n );\n\n const handleKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(\n (evt) => {\n if (evt.key === \"Enter\") {\n onClick?.(evt);\n }\n },\n [onClick]\n );\n\n const { className, style } = useCell(column, classBase, true);\n\n return (\n <div\n {...htmlAttributes}\n className={cx(className, classNameProp, {\n [`${classBase}-resizing`]: isResizing,\n [`${classBase}-noMenu`]: showMenu === false,\n })}\n onClick={handleClick}\n onContextMenu={handleContextMenu}\n onKeyDown={handleKeyDown}\n ref={rootRef}\n role=\"columnheader\"\n style={style}\n >\n {...headerItems}\n {column.resizeable !== false ? <ColumnResizer {...resizeProps} /> : null}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAkBA,MAAM,SAAY,GAAA,oBAAA,CAAA;AAEX,MAAM,aAAa,CAAC;AAAA,EACzB,SAAW,EAAA,aAAA;AAAA,EACX,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAW,GAAA,IAAA;AAAA,EACX,GAAG,cAAA;AACL,CAAuB,KAAA;AACrB,EAAM,MAAA,EAAE,yBAA2B,EAAA,uBAAA,EAA4B,GAAA,MAAA,CAAA;AAC/D,EAAM,MAAA,OAAA,GAAU,OAAuB,IAAI,CAAA,CAAA;AAC3C,EAAA,MAAM,EAAE,UAAA,EAAY,GAAG,WAAA,KAAgB,oBAAqB,CAAA;AAAA,IAC1D,MAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,CAAC,eAAe,CAAA,GAAI,cAAe,EAAA,CAAA;AAEzC,EAAM,MAAA,iBAAA,GAAoB,QAAQ,MAAM;AACtC,IAAA,IAAI,QAAU,EAAA;AACZ,MAAO,OAAA,KAAA,CAAA,CAAA;AAAA,KACF,MAAA;AACL,MAAA,OAAO,CAAC,CAAkB,KAAA,eAAA,CAAgB,GAAG,aAAe,EAAA,EAAE,QAAQ,CAAA,CAAA;AAAA,KACxE;AAAA,GACC,EAAA,CAAC,MAAQ,EAAA,eAAA,EAAiB,QAAQ,CAAC,CAAA,CAAA;AAEtC,EAAM,MAAA,WAAA,GAAc,QAAQ,MAAM;AAChC,IAAM,MAAA,aAAA,mBAAiB,GAAA,CAAA,aAAA,EAAA,EAAc,MAAgB,EAAA,CAAA,CAAA;AACrD,IAAA,MAAM,cAAc,uBAClB,mBAAA,GAAA;AAAA,MAAC,uBAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAW,GAAG,SAAS,CAAA,MAAA,CAAA;AAAA,QACvB,MAAA;AAAA,OAAA;AAAA,KACF,mBAEC,GAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,SAAS,CAAW,MAAA,CAAA,EAAA,QAAA,EAAA,MAAA,CAAO,KAAS,IAAA,MAAA,CAAO,IAAK,EAAA,CAAA,CAAA;AAErE,IAAM,MAAA,aAAA,GAAgB,4BAClB,iBAAC,GAAA,CAAC,6BAA0B,MAAoB,EAAA,EAAA,SAAU,CAAE,CAAA,GAC5D,EAAC,CAAA;AAEL,IAAA,IAAI,QAAU,EAAA;AACZ,MAAM,MAAA,UAAA,mBAAc,GAAA,CAAA,UAAA,EAAA,EAAW,MAAgB,EAAA,CAAA,CAAA;AAE/C,MAAI,IAAA,MAAA,CAAO,UAAU,OAAS,EAAA;AAC5B,QAAA,OAAO,CAAC,aAAA,EAAe,WAAa,EAAA,aAAA,EAAe,UAAU,CAAA,CAAA;AAAA,OACxD,MAAA;AACL,QAAA,OAAO,CAAC,UAAA,EAAY,WAAa,EAAA,aAAA,EAAe,aAAa,CAAA,CAAA;AAAA,OAC/D;AAAA,KACK,MAAA;AACL,MAAI,IAAA,MAAA,CAAO,UAAU,OAAS,EAAA;AAC5B,QAAO,OAAA,CAAC,aAAe,EAAA,WAAA,EAAa,aAAa,CAAA,CAAA;AAAA,OAC5C,MAAA;AACL,QAAO,OAAA,CAAC,WAAa,EAAA,aAAA,EAAe,aAAa,CAAA,CAAA;AAAA,OACnD;AAAA,KACF;AAAA,KACC,CAAC,yBAAA,EAA2B,uBAAyB,EAAA,MAAA,EAAQ,QAAQ,CAAC,CAAA,CAAA;AAEzE,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,GAAQ,KAAA;AACP,MAAC,CAAA,UAAA,IAAc,UAAU,GAAG,CAAA,CAAA;AAAA,KAC9B;AAAA,IACA,CAAC,YAAY,OAAO,CAAA;AAAA,GACtB,CAAA;AAEA,EAAA,MAAM,aAAgB,GAAA,WAAA;AAAA,IACpB,CAAC,GAAQ,KAAA;AACP,MAAI,IAAA,GAAA,CAAI,QAAQ,OAAS,EAAA;AACvB,QAAA,OAAA,GAAU,GAAG,CAAA,CAAA;AAAA,OACf;AAAA,KACF;AAAA,IACA,CAAC,OAAO,CAAA;AAAA,GACV,CAAA;AAEA,EAAA,MAAM,EAAE,SAAW,EAAA,KAAA,KAAU,OAAQ,CAAA,MAAA,EAAQ,WAAW,IAAI,CAAA,CAAA;AAE5D,EACE,uBAAA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACE,GAAG,cAAA;AAAA,MACJ,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,aAAe,EAAA;AAAA,QACtC,CAAC,CAAA,EAAG,SAAS,CAAA,SAAA,CAAW,GAAG,UAAA;AAAA,QAC3B,CAAC,CAAA,EAAG,SAAS,CAAA,OAAA,CAAS,GAAG,QAAa,KAAA,KAAA;AAAA,OACvC,CAAA;AAAA,MACD,OAAS,EAAA,WAAA;AAAA,MACT,aAAe,EAAA,iBAAA;AAAA,MACf,SAAW,EAAA,aAAA;AAAA,MACX,GAAK,EAAA,OAAA;AAAA,MACL,IAAK,EAAA,cAAA;AAAA,MACL,KAAA;AAAA,MAEC,QAAA,EAAA;AAAA,QAAG,GAAA,WAAA;AAAA,QACH,OAAO,UAAe,KAAA,KAAA,uBAAS,aAAe,EAAA,EAAA,GAAG,aAAa,CAAK,GAAA,IAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GACtE,CAAA;AAEJ;;;;"}
package/esm/index.js CHANGED
@@ -1,2 +1,14 @@
1
- import{OverflowContainer as Hn}from"@vuu-ui/vuu-ui-controls";import{useLayoutEffectSkipFirst as Mn}from"@vuu-ui/vuu-utils";import Pn from"clsx";import{useCallback as En,useRef as Sn,useState as kn}from"react";import dn from"clsx";import{useCallback as pn}from"react";import{jsx as bn,jsxs as fn}from"react/jsx-runtime";var To="vuuColumnHeaderPill",ge=({children:e,className:o,column:t,onRemove:r,removable:n,...l})=>{if(n&&typeof r!="function")throw Error("ColumnHeaderPill onRemove prop must be provided if Pill is removable");let a=pn(i=>{i.preventDefault(),i.stopPropagation(),r==null||r(t)},[t,r]);return fn("div",{...l,className:dn(To,o),children:[e,n?bn("span",{className:`${To}-removeButton`,role:"button","data-icon":"cross",onClick:a}):null]})};import{jsx as Fe,jsxs as gn}from"react/jsx-runtime";var Ro=({column:e,...o})=>{let{name:t,sorted:r}=e,n=typeof r=="number"?r<0?"arrow-down":"arrow-up":r==="A"?"arrow-up":r==="D"?"arrow-down":void 0;return gn(ge,{...o,column:e,children:[Fe("span",{className:"vuuGroupColumnPill-label",children:t}),n!==void 0?Fe("span",{"data-icon":n}):null,typeof r=="number"?Fe("span",{className:"vuuSortPosition",children:Math.abs(r)}):null]})};import{jsx as yo,jsxs as Cn}from"react/jsx-runtime";var Do=({column:e})=>{if(!e.sorted)return null;let o=typeof e.sorted=="number"?e.sorted<0?"arrow-down":"arrow-up":e.sorted==="A"?"arrow-up":"arrow-down";return Cn(ge,{column:e,children:[yo("span",{"data-icon":o}),typeof e.sorted=="number"?yo("span",{className:"vuuSortPosition",children:Math.abs(e.sorted)}):null]})};import{useCallback as Ge,useRef as vn}from"react";import{jsx as wn}from"react/jsx-runtime";var Ho=()=>{},hn="vuuColumnResizer",De=({onDrag:e,onDragEnd:o=Ho,onDragStart:t=Ho})=>{let r=vn({start:0,now:0}),n=Ge(i=>{i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault();let{current:s}=r,u=Math.round(i.clientX),m=u-s.now,c=s.now-s.start;r.current.now=u,m!==0&&e(i,m,c)},[e]),l=Ge(i=>{window.removeEventListener("mouseup",l),window.removeEventListener("mousemove",n);let{current:s}=r,u=s.now-s.start;o(i,u)},[o,n]),a=Ge(i=>{let{current:s}=r;t(i),s.now=s.start=Math.round(i.clientX),window.addEventListener("mouseup",l),window.addEventListener("mousemove",n),i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault()},[t,n,l]);return wn("div",{className:hn,onMouseDown:a})};import{useCallback as Oe,useRef as xn,useState as Tn}from"react";var He=({column:e,onResize:o,rootRef:t})=>{let r=xn({start:0,now:0}),[n,l]=Tn(!1),{name:a}=e,i=Oe(()=>{if(o&&t.current){let{current:m}=r,{width:c}=t.current.getBoundingClientRect();m.start=m.now=Math.round(c),l(!0),o==null||o("begin",a)}},[a,o,t]),s=Oe((m,c,b)=>{if(t.current&&o){let{current:v}=r,w=v.start+b;w!==v.now&&w>0&&(o("resize",a,w),v.now=w)}},[a,o,t]),u=Oe(()=>{if(o){let{current:m}=r;o("end",a,m.now),setTimeout(()=>{l(!1)},80)}},[a,o]);return{isResizing:n,onDrag:s,onDragStart:i,onDragEnd:u}};import{getColumnStyle as Rn}from"@vuu-ui/vuu-utils";import yn from"clsx";import{useMemo as Dn}from"react";var ue=(e,o,t)=>Dn(()=>{let r=yn(o,{vuuPinFloating:e.pin==="floating",vuuPinLeft:e.pin==="left",vuuPinRight:e.pin==="right",vuuEndPin:t&&e.endPin,[`${o}-editable`]:e.editable,[`${o}-right`]:e.align==="right"}),n=Rn(e);return{className:r,style:n}},[e,o,t]);import{jsx as Be,jsxs as In}from"react/jsx-runtime";import{createElement as Ln}from"react";var $e="vuuTableGroupHeaderCell",An=(e,o)=>e===o?e:o,Ve=({column:e,className:o,onMoveColumn:t,onRemoveColumn:r,onResize:n,...l})=>{let a=Sn(null),{isResizing:i,...s}=He({column:e,onResize:n,rootRef:a}),[u,m]=kn(e.columns),{className:c,style:b}=ue(e,$e,!0),v=u.length>1?{removable:!0,onRemove:r}:void 0,w=En((T,d)=>{m(g=>{let h=g.slice(),[H]=h.splice(T,1);if(d===-1){let R=h.concat(H);return t==null||t(R),R}else return h.splice(d,0,H),t==null||t(h),h})},[t]);return Mn(()=>{m(T=>An(T,e.columns))},[e.columns]),In("div",{...l,className:Pn(c,o,{[`${$e}-pending`]:e.groupConfirmed===!1}),ref:a,role:"columnheader",style:b,children:[Be(Hn,{allowDragDrop:!0,className:`${$e}-inner`,onMoveItem:w,overflowPosition:"start",children:u.map(T=>Ln(Ro,{...v,column:T,key:T.name}))}),Be(ge,{column:e,removable:!0,onRemove:r}),e.resizeable!==!1?Be(De,{...s}):null]})};import{useContextMenu as Gn}from"@vuu-ui/vuu-popups";import On from"clsx";import{useCallback as Po,useMemo as Eo,useRef as $n}from"react";import{PopupMenu as zn}from"@vuu-ui/vuu-popups";import Nn from"clsx";import{jsx as Fn}from"react/jsx-runtime";var Kn="vuuColumnMenu",Mo=({className:e,column:o})=>Fn(zn,{className:Nn(Kn,e),"data-embedded":!0,menuLocation:"column-menu",menuOptions:{column:o}});import{jsx as Ce,jsxs as Bn}from"react/jsx-runtime";var xe="vuuTableHeaderCell",So=({className:e,column:o,onClick:t,onResize:r,showMenu:n=!0,...l})=>{let{HeaderCellContentRenderer:a,HeaderCellLabelRenderer:i}=o,s=$n(null),{isResizing:u,...m}=He({column:o,onResize:r,rootRef:s}),[c]=Gn(),b=Eo(()=>{if(!n)return h=>c(h,"column-menu",{column:o})},[o,c,n]),v=Eo(()=>{var D;let h=Ce(Do,{column:o}),H=i?Ce(i,{className:`${xe}-label`,column:o}):Ce("div",{className:`${xe}-label`,children:(D=o.label)!=null?D:o.name}),R=a?[Ce(a,{column:o},"content")]:[];if(n){let k=Ce(Mo,{column:o});return o.align==="right"?[h,H,R,k]:[k,H,h,R]}else return o.align==="right"?[h,H,R]:[H,h,R]},[a,i,o,n]),w=Po(h=>{!u&&(t==null||t(h))},[u,t]),T=Po(h=>{h.key==="Enter"&&(t==null||t(h))},[t]),{className:d,style:g}=ue(o,xe,!0);return Bn("div",{...l,className:On(d,e,{[`${xe}-resizing`]:u,[`${xe}-noMenu`]:n===!1}),onClick:w,onContextMenu:b,onKeyDown:T,ref:s,role:"columnheader",style:g,children:[...v,o.resizeable!==!1?Ce(De,{...m}):null]})};import{ContextMenuProvider as Mi}from"@vuu-ui/vuu-popups";import{MeasuredContainer as Pi}from"@vuu-ui/vuu-ui-controls";import{metadataKeys as Ei,useId as Si}from"@vuu-ui/vuu-utils";import{useForkRef as ki}from"@salt-ds/core";import Kt from"clsx";import{forwardRef as Ai,useRef as Li,useState as Ii}from"react";import{isGroupColumn as zo,isJsonColumn as Yn,isJsonGroup as jn,metadataKeys as qn,isNotHidden as er,RowSelected as or}from"@vuu-ui/vuu-utils";import Ko from"clsx";import{forwardRef as tr,memo as nr,useCallback as No}from"react";import{isNumericColumn as Vn}from"@vuu-ui/vuu-utils";import{useCallback as ko}from"react";import{jsx as Ao}from"react/jsx-runtime";var Wn="vuuTableCell",Lo=({column:e,columnMap:o,onClick:t,onDataEdited:r,row:n})=>{let{className:l,style:a}=ue(e,Wn),{CellRenderer:i,index:s,name:u,valueFormatter:m}=e,c=o[u],b=ko(w=>{if(r){let T=w;return Vn(e)&&typeof w=="string"&&(T=e.serverDataType==="double"?parseFloat(w):parseInt(w)),r==null?void 0:r(n,u,T)}else throw Error("TableCell onDataEdited prop not supplied for an editable cell")},[e,u,r,n]),v=ko(w=>{t==null||t(w,e)},[e,t]);return Ao("div",{"aria-colindex":s,className:l,onClick:t?v:void 0,role:"cell",style:a,children:i?Ao(i,{column:e,columnMap:o,onCommit:b,row:n}):m(n[c])})};import{getGroupValueAndOffset as Un,metadataKeys as _n}from"@vuu-ui/vuu-utils";import{useCallback as Xn}from"react";import Qn from"clsx";import{jsx as Ue,jsxs as Zn}from"react/jsx-runtime";var{IS_LEAF:Jn}=_n,We="vuuTableGroupCell",Io=({column:e,columnMap:o,onClick:t,row:r})=>{let{columns:n}=e,[l,a]=Un(n,r,o),{className:i,style:s}=ue(e,We),u=Xn(b=>{t==null||t(b,e)},[e,t]),m=r[Jn],c=Array(a).fill(0).map((b,v)=>Ue("span",{className:`${We}-spacer`},v));return Zn("div",{className:Qn(i,"vuuTableCell"),role:"cell",style:s,onClick:m?void 0:u,children:[c,m?null:Ue("span",{className:`${We}-toggle`,"data-icon":"triangle-right"}),Ue("span",{children:l})]})};import{jsx as Te,jsxs as ar}from"react/jsx-runtime";var{IDX:rr,IS_EXPANDED:lr,SELECTED:ir}=qn,le="vuuTableRow",Fo=tr(function({height:o},t){return Te("div",{"aria-hidden":!0,className:Ko(le,`${le}-proxy`),ref:t,style:{height:o}})}),_e=nr(({className:e,classNameGenerator:o,columnMap:t,columns:r,highlighted:n,row:l,offset:a,onClick:i,onDataEdited:s,onToggleGroup:u,virtualColSpan:m=0,zebraStripes:c=!1,...b})=>{let{[rr]:v,[lr]:w,[ir]:T}=l,d=No(M=>{let I=M.shiftKey,A=M.ctrlKey||M.metaKey;i==null||i(M,l,I,A)},[i,l]),{True:g,First:h,Last:H}=or,R=Ko(le,e,o==null?void 0:o(l,t),{[`${le}-even`]:c&&v%2===0,[`${le}-expanded`]:w,[`${le}-highlighted`]:n,[`${le}-selected`]:T&g,[`${le}-selectedStart`]:T&h,[`${le}-selectedEnd`]:T&H}),D={transform:`translate3d(0px, ${a}px, 0px)`},k=No((M,I)=>{(zo(I)||jn(I,l,t))&&(M.stopPropagation(),u==null||u(l,I))},[t,u,l]);return ar("div",{...b,role:"row",className:R,onClick:d,style:D,children:[Te("span",{className:`${le}-selectionDecorator vuuStickyLeft`}),m>0?Te("div",{className:"vuuTableCell",style:{width:m}}):null,r.filter(er).map(M=>{let I=zo(M),A=Yn(M);return Te(I?Io:Lo,{column:M,columnMap:t,onClick:I||A?k:void 0,onDataEdited:s,row:l},M.name)}),Te("span",{className:`${le}-selectionDecorator vuuStickyRight`})]})});_e.displayName="Row";import{isGroupColumn as mr,isNotHidden as dr}from"@vuu-ui/vuu-utils";import pr from"clsx";import{memo as br}from"react";import{useDragDrop as sr}from"@vuu-ui/vuu-ui-controls";import{moveColumnTo as Xe,queryClosest as ur,visibleColumnAtIndex as cr}from"@vuu-ui/vuu-utils";import{useCallback as Qe,useRef as Go}from"react";var Oo=({columns:e,onMoveColumn:o,onSortColumn:t,tableConfig:r})=>{let n=Go(null),l=Go(null),a=Qe(b=>{n.current=b,b?l.current=b.closest(".vuuTable-contentContainer"):l.current=null},[]),i=Qe(({fromIndex:b,toIndex:v})=>{let w=e[b],T=Xe(e,w,v),d=({name:R})=>D=>D.name===R,g=T.findIndex(d(w)),h=T[g+1],H=h?r.columns.findIndex(d(h)):-1;v>b&&H!==-1?o(Xe(r.columns,w,H-1)):o(Xe(r.columns,w,H))},[e,o,r.columns]),s=Qe(b=>{var g;let v=ur(b.target,".vuuTableHeaderCell"),w=parseInt((g=v==null?void 0:v.dataset.index)!=null?g:"-1"),T=cr(e,w),d=b.shiftKey;T&&t(T,d)},[e,t]),{onMouseDown:u,draggable:m,...c}=sr({allowDragDrop:!0,containerRef:n,draggableClassName:"vuuTable",itemQuery:".vuuTableHeaderCell",onDrop:i,orientation:"horizontal",scrollingContainerRef:l});return{draggableColumn:m,draggedColumnIndex:c.draggedItemIndex,onClick:s,onMouseDown:u,setContainerRef:a}};import{jsx as Re,jsxs as $o}from"react/jsx-runtime";var Je=br(({classBase:e="vuuTable",columns:o,headings:t,onMoveColumn:r,onMoveGroupColumn:n,onRemoveGroupColumn:l,onResizeColumn:a,onSortColumn:i,showColumnHeaderMenus:s,tableConfig:u,tableId:m,virtualColSpan:c=0})=>{let{draggableColumn:b,draggedColumnIndex:v,onClick:w,onMouseDown:T,setContainerRef:d}=Oo({columns:o,onMoveColumn:r,onSortColumn:i,tableConfig:u});return $o("div",{className:`${e}-col-headings`,ref:d,children:[t.map((g,h)=>Re("div",{className:"vuuTable-heading",children:g.map(({label:H,width:R},D)=>Re("div",{className:"vuuTable-headingCell",style:{width:R},children:H},D))},h)),$o("div",{className:`${e}-col-headers`,role:"row",children:[c>0?Re("div",{role:"cell",className:"vuuTableCell",style:{width:c}}):null,o.filter(dr).map((g,h)=>mr(g)?Re(Ve,{"aria-colindex":g.index,column:g,"data-index":h,onMoveColumn:n,onRemoveColumn:l,onResize:a},g.name):Re(So,{"aria-colindex":g.index,className:pr({"vuuDraggable-dragAway":h===v}),column:g,"data-index":h,id:`${m}-col-${h}`,onClick:w,onMouseDown:T,onResize:a,showMenu:s},g.name)),b]})]})});Je.displayName="TableHeader";import{useDragDrop as li}from"@vuu-ui/vuu-ui-controls";import{toggleOrApplySort as ii,asDataSourceRowObject as kt,buildColumnMap as ai,getIndexFromRowElement as si,isGroupColumn as ui,isJsonGroup as ci,isValidNumber as mi,metadataKeys as di,updateColumn as pi,useLayoutEffectSkipFirst as bi}from"@vuu-ui/vuu-utils";import{useCallback as K,useEffect as fi,useMemo as At,useRef as gi,useState as Ci}from"react";import{isNumericColumn as fr}from"@vuu-ui/vuu-utils";var Bo=e=>(o,t)=>{let r=[];return e===void 0||(o==="header"||o==="column-menu")&&(r.push(...gr(t,e)),r.push(...hr(t,e)),r.push(...Cr(t,e)),r.push(...vr(t)),r.push({action:"column-settings",icon:"cog",label:"Column Settings",options:t}),r.push({action:"table-settings",icon:"cog",label:"DataGrid Settings",options:t})),r};function gr(e,{sort:{sortDefs:o}}){let{column:t}=e,r=[];if(t===void 0)return r;let n=o.length>0;return t.sorted==="A"?r.push({label:"Reverse Sort (DSC)",action:"sort-dsc",options:e}):t.sorted==="D"?r.push({label:"Reverse Sort (ASC)",action:"sort-asc",options:e}):typeof t.sorted=="number"?(t.sorted>0?r.push({label:"Reverse Sort (DSC)",action:"sort-add-dsc",options:e}):r.push({label:"Reverse Sort (ASC)",action:"sort-add-asc",options:e}),n&&Math.abs(t.sorted)<o.length&&r.push({label:"Remove from sort",action:"sort-remove",options:e}),r.push({label:"New Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]})):n?(r.push({label:"Add to sort",children:[{label:"Ascending",action:"sort-add-asc",options:e},{label:"Descending",action:"sort-add-dsc",options:e}]}),r.push({label:"New Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]})):r.push({label:"Sort",children:[{label:"Ascending",action:"sort-asc",options:e},{label:"Descending",action:"sort-dsc",options:e}]}),r}function Cr(e,o){let{column:t}=e;if(t===void 0||o.groupBy.length===0)return[];let{name:r,label:n=r}=t;return[{label:`Aggregate ${n}`,children:[{label:"Count",action:"agg-count",options:e},{label:"Distinct",action:"agg-distinct",options:e}].concat(fr(t)?[{label:"Sum",action:"agg-sum",options:e},{label:"Avg",action:"agg-avg",options:e},{label:"High",action:"agg-high",options:e},{label:"Low",action:"agg-low",options:e}]:[])}]}var qe=(e,o)=>({label:`Pin ${o}`,action:`column-pin-${o}`,options:e}),Ze=e=>qe(e,"left"),Ye=e=>qe(e,"floating"),je=e=>qe(e,"right");function vr(e){let{column:o}=e;if(o===void 0)return[];let{pin:t}=o,r=[{label:"Hide column",action:"column-hide",options:e},{label:"Remove column",action:"column-remove",options:e}];return t===void 0?r.push({label:"Pin column",children:[Ze(e),Ye(e),je(e)]}):t==="left"?r.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[Ye(e),je(e)]}):t==="right"?r.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[Ze(e),Ye(e)]}):t==="floating"&&r.push({label:"Unpin column",action:"column-unpin",options:e},{label:"Pin column",children:[Ze(e),je(e)]}),r}function hr(e,{groupBy:o}){let{column:t}=e,r=[];if(t===void 0)return r;let{name:n,label:l=n}=t;return o.length===0?r.push({label:`Group by ${l}`,action:"group",options:e}):r.push({label:`Add ${l} to group by`,action:"group-add",options:e}),r}import{removeColumnFromFilter as wr}from"@vuu-ui/vuu-utils";import{addGroupColumn as Vo,addSortColumn as Wo,AggregationType as xr,setAggregations as ve,setSortColumn as Uo}from"@vuu-ui/vuu-utils";var Tr=(e,o)=>{if(e.filterStruct&&o){let[t,r]=wr(o,e.filterStruct);return{filter:r,filterStruct:t}}else return e},{Average:Rr,Count:yr,Distinct:Dr,High:Hr,Low:Mr,Sum:Pr}=xr,_o=({dataSource:e,onPersistentColumnOperation:o})=>r=>{let n=r.options;if(n.column&&e){let{column:l}=n;switch(r.menuId){case"sort-asc":return e.sort=Uo(e.sort,l,"A"),!0;case"sort-dsc":return e.sort=Uo(e.sort,l,"D"),!0;case"sort-add-asc":return e.sort=Wo(e.sort,l,"A"),!0;case"sort-add-dsc":return e.sort=Wo(e.sort,l,"D"),!0;case"group":return e.groupBy=Vo(e.groupBy,l),!0;case"group-add":return e.groupBy=Vo(e.groupBy,l),!0;case"column-hide":return o({type:"hideColumns",columns:[l]}),!0;case"column-remove":return e.columns=e.columns.filter(a=>a!==l.name),!0;case"filter-remove-column":return e.filter=Tr(e.filter,l),!0;case"remove-filters":return e.filter={filter:""},!0;case"agg-avg":return e.aggregations=ve(e.aggregations,l,Rr),!0;case"agg-high":return e.aggregations=ve(e.aggregations,l,Hr),!0;case"agg-low":return e.aggregations=ve(e.aggregations,l,Mr),!0;case"agg-count":return e.aggregations=ve(e.aggregations,l,yr),!0;case"agg-distinct":return e.aggregations=ve(e.aggregations,l,Dr),!0;case"agg-sum":return e.aggregations=ve(e.aggregations,l,Pr),!0;case"column-pin-floating":return o({type:"pinColumn",column:l,pin:"floating"}),!0;case"column-pin-left":return o({type:"pinColumn",column:l,pin:"left"}),!0;case"column-pin-right":return o({type:"pinColumn",column:l,pin:"right"}),!0;case"column-unpin":return o({type:"pinColumn",column:l,pin:void 0}),!0;case"column-settings":return o({type:"columnSettings",column:l}),!0;case"table-settings":return o({type:"tableSettings"}),!0;default:}}return!1};var Xo=(e,o)=>{switch(o.type){case"col-size":return{...e,columns:e.columns.map(t=>t.name===o.column.name?{...t,width:o.width}:t)};case"column-prop":return{...e,columns:e.columns.map(t=>t.name===o.column.name?{...t,[o.property]:o.value}:t)};default:return e}};import{isCharacterKey as Lr}from"@vuu-ui/vuu-utils";import{useCallback as de}from"react";var eo=e=>`.vuuTable-col-headers .vuuTableHeaderCell:nth-child(${e})`,oo=(e,o)=>`.vuuTable-body > [aria-rowindex='${e+1}'] > [role='cell']:nth-child(${o+1})`,Qo=(e,[o,t])=>{var l;let r=o===-1?eo(t):oo(o,t),n=(l=e.current)==null?void 0:l.querySelector(r);return Er(n)&&n.querySelector("button")||n},Er=e=>e==null?void 0:e.classList.contains("vuuTableCell-editable"),Jo=e=>e.querySelector(".vuuTableInputCell")!==null;function Sr(e){if(e){let o=e.ariaRowIndex;if(o!==null)return parseInt(o,10)-1}return-1}var kr=e=>e.closest('[role="row"]'),Zo=e=>Sr(kr(e)),Ar=[void 0,void 0],Yo=(e,o,t=e.closest(".vuuTable-contentContainer"))=>{if(t){let r=t==null?void 0:t.getBoundingClientRect(),n=r.top+o,l=e.getBoundingClientRect();if(l)return l.bottom>r.bottom?["down",l.bottom-r.bottom]:l.top<n?["up",l.top-n]:Ar;throw Error("Whats going on, row not found")}else throw Error("Whats going on, scrollbar container not found")};var jo=({navigate:e})=>{let o=de(()=>{e()},[e]),t=de(s=>{let u=s.target,m=u.matches("input")?u:u.querySelector("input");m&&(m.focus(),m.select())},[]),r=de(s=>{let m=s.target.querySelector("input");m&&(m.focus(),m.select())},[]),n=de(s=>{let u=s.target;Jo(u)&&(Lr(s.key)?t(s):s.key==="Enter"&&r(s))},[t,r]),l=de(s=>{let u=s.target;(u.matches("input")||u.querySelector("input"))&&(t(s),s.stopPropagation())},[t]),a=de(s=>{s.target.removeEventListener("vuu-commit",o,!0)},[o]),i=de(s=>{s.target.addEventListener("vuu-commit",o,!0)},[o]);return{onBlur:a,onDoubleClick:l,onFocus:i,onKeyDown:n}};import{getFullRange as no,NULL_RANGE as Kr,rangesAreSame as Fr}from"@vuu-ui/vuu-utils";import{useCallback as Pe,useEffect as qo,useMemo as Gr,useRef as Ee,useState as Or}from"react";import{isRowSelectedLast as Ir,metadataKeys as zr,WindowRange as Nr}from"@vuu-ui/vuu-utils";var{SELECTED:to}=zr,Me=class{constructor({from:o,to:t}){this.rowCount=0;this.setRowCount=o=>{o<this.data.length&&(this.data.length=o),this.rowCount=o};this.range=new Nr(o,t),this.data=new Array(Math.max(0,t-o)),this.rowCount=0}add(o){let[t]=o;if(this.isWithinRange(t)){let r=t-this.range.from;if(this.data[r]=o,o[to]){let n=this.data[r-1];Ir(n)&&(this.data[r-1]=n.slice(),this.data[r-1][to]-=4)}}}getAtIndex(o){return this.range.isWithin(o)&&this.data[o-this.range.from]!=null?this.data[o-this.range.from]:void 0}isWithinRange(o){return this.range.isWithin(o)}setRange({from:o,to:t}){if(o!==this.range.from||t!==this.range.to){let[r,n]=this.range.overlap(o,t),l=new Array(Math.max(0,t-o));for(let a=r;a<n;a++){let i=this.getAtIndex(a);if(i){let s=a-o;l[s]=i}}this.data=l,this.range.from=o,this.range.to=t}}getSelectedRows(){return this.data.filter(o=>o[to]!==0)}};var $r=e=>e.type==="vuu-link-created"||e.type==="vuu-link-removed",et=({dataSource:e,onFeatureInvocation:o,onSizeChange:t,onSubscribed:r,range:n=Kr,renderBufferSize:l=0})=>{let[,a]=Or(null),i=Ee([]),s=Ee(!0),u=Ee(!1),m=Ee(n),c=Gr(()=>new Me(no(n,l)),[]),b=Pe(d=>{for(let g of d)c.add(g);i.current=c.data,s.current&&a({})},[c]),v=Pe(d=>{d.type==="subscribed"?r==null||r(d):d.type==="viewport-update"?(typeof d.size=="number"&&(t==null||t(d.size),c.setRowCount(d.size)),d.rows?b(d.rows):typeof d.size=="number"&&(i.current=c.data,u.current=!0)):$r(d)?o==null||o(d):console.log(`useDataSource unexpected message ${d.type}`)},[c,o,t,r,b]),w=Pe(()=>c.getSelectedRows(),[c]);qo(()=>{var d;return s.current=!0,(d=e.resume)==null||d.call(e),()=>{var g;s.current=!1,(g=e.suspend)==null||g.call(e)}},[e]),qo(()=>{var d;e.status==="disabled"?(d=e.enable)==null||d.call(e,v):e==null||e.subscribe({range:no(n,l)},v)},[e,v,n,l]);let T=Pe(d=>{if(!Fr(d,m.current)){let g=no(d,l);c.setRange(g),e.range=m.current=g,e.emit("range",d)}},[e,c,l]);return{data:i.current,dataRef:i,getSelectedRows:w,range:m.current,setRange:T}};import{useMemo as Br,useRef as Vr}from"react";var ot=e=>{let o=Vr(e);return Br(()=>o.current,[])};import{getIndexFromRowElement as Wr}from"@vuu-ui/vuu-utils";import{useControlled as Ur}from"@salt-ds/core";import{useCallback as j,useEffect as tt,useRef as Se}from"react";var lt=new Set(["Home","End","PageUp","PageDown","ArrowDown","ArrowUp"]),ro=new Set(lt);ro.add("ArrowLeft");ro.add("ArrowRight");var _r=(e,o)=>{switch(o){case"cell":return ro.has(e);case"row":return lt.has(e);default:return!1}},Xr=["Home","End","PageUp","PageDown"],nt=e=>Xr.includes(e),Qr=[-1,-1];function rt(e,[o,t],r,n){return e==="ArrowUp"?o>-1?[o-1,t]:[o,t]:e==="ArrowDown"?o===-1?[0,t]:o===n-1?[o,t]:[o+1,t]:e==="ArrowRight"?t<r?[o,t+1]:[o,t]:e==="ArrowLeft"?t>1?[o,t-1]:[o,t]:[o,t]}var it=({columnCount:e=0,containerRef:o,disableFocus:t=!1,defaultHighlightedIndex:r,disableHighlightOnFocus:n,highlightedIndex:l,navigationStyle:a,requestScroll:i,onHighlight:s,rowCount:u=0,viewportRowCount:m})=>{var ne;let c=Se([-1,-1]),b=Se(),v=Se([-1,0]),w=Se(),[T,d]=Ur({controlled:l,default:r,name:"UseKeyboardNavigation"});w.current=T;let g=j((f,x=!1)=>{s==null||s(f),d(f)},[s,d]),h=f=>f==null?void 0:f.closest("[role='columnHeader'],[role='cell']"),H=f=>{var x;if(f.role==="columnHeader")return[-1,parseInt((x=f.dataset.idx)!=null?x:"-1",10)];{let y=f.closest("[role='row']");if(y){let G=Wr(y),C=Array.from(y.childNodes).indexOf(f);return[G,C]}}return Qr},R=j(f=>{var x;if(o.current){let y=Qo(o,f);y&&(y!==b.current&&((x=b.current)==null||x.removeAttribute("tabindex"),b.current=y,y.setAttribute("tabindex","0")),i==null||i({type:"scroll-row",rowIndex:f[0]}),y.focus({preventScroll:!0}))}},[o,i]),D=j((f,x,y=!1)=>{let G=[f,x];v.current=G,a==="row"?d(f):R(G),y&&(c.current=G)},[R,a,d]),k=j((f,[x,y])=>new Promise(G=>{let C=x;switch(f){case"PageDown":{C=Math.min(u-1,x+m),C!==x&&(i==null||i({type:"scroll-page",direction:"down"}));break}case"PageUp":{C=Math.max(0,x-m),C!==x&&(i==null||i({type:"scroll-page",direction:"up"}));break}case"Home":{C=0,C!==x&&(i==null||i({type:"scroll-end",direction:"home"}));break}case"End":{C=u-1,C!==x&&(i==null||i({type:"scroll-end",direction:"end"}));break}}setTimeout(()=>{G([C,y])},35)}),[i,u,m]),M=j(()=>{var f;if(n!==!0&&(f=o.current)!=null&&f.contains(document.activeElement)){let x=h(document.activeElement);x&&(c.current=H(x),a==="row"&&d(c.current[0]))}},[n,o,a,d]),I=j(async f=>{let[x,y]=nt(f)?await k(f,v.current):rt(f,v.current,e,u),[G,C]=v.current;(x!==G||y!==C)&&D(x,y,!0)},[e,k,u,D]),A=j(f=>{i==null||i({type:"scroll-row",rowIndex:f})},[i]),W=j(async f=>{let{current:x}=w,[y]=nt(f)?await k(f,[x!=null?x:-1,0]):rt(f,[x!=null?x:-1,0],e,u);y!==x&&(g(y),A(y))},[e,k,u,A,g]);tt(()=>{l!==void 0&&l!==-1&&A(l)},[l,A]);let J=j(f=>{u>0&&_r(f.key,a)&&(f.preventDefault(),f.stopPropagation(),a==="row"?W(f.key):I(f.key))},[u,a,W,I]),_=j(f=>{let x=f.target,y=h(x);if(y){let[G,C]=H(y);D(G,C)}},[D]),Z=j(()=>{g(-1)},[g]),z=j(f=>{let x=Zo(f.target);x!==-1&&x!==w.current&&g(x)},[g]),E=j(()=>{I("ArrowDown")},[I]),te=((ne=o.current)==null?void 0:ne.firstChild)!=null;return tt(()=>{if(te&&b.current===void 0&&!t){let{current:f}=o,x=(f==null?void 0:f.querySelector(eo(0)))||(f==null?void 0:f.querySelector(oo(0,0)));x&&(x.setAttribute("tabindex","0"),b.current=x)}},[o,t,te]),{highlightedIndexRef:w,navigate:E,onClick:_,onFocus:M,onKeyDown:J,onMouseLeave:a==="row"?Z:void 0,onMouseMove:a==="row"?z:void 0}};import{deselectItem as Jr,dispatchMouseEvent as Zr,getRowElementAtIndex as Yr,isRowSelected as jr,metadataKeys as qr,selectItem as at}from"@vuu-ui/vuu-utils";import{useCallback as lo,useRef as st}from"react";var{IDX:el}=qr,ol=[],tl=["Enter"," "],ut=({highlightedIndexRef:e,selectionKeys:o=tl,selectionModel:t,onSelect:r,onSelectionChange:n})=>{let l=st(-1),a=st(ol),i=lo(m=>o.includes(m.key),[o]),s=lo((m,c,b,v)=>{let{[el]:w}=c,{current:T}=l,{current:d}=a,g=jr(c)?Jr:at,h=g(t,d,w,b,v,T);a.current=h,l.current=w,r==null||r(g===at?c:null),n==null||n(h)},[r,n,t]);return{onKeyDown:lo(m=>{if(i(m)){let{current:c}=e;if(c!==void 0&&c!==-1){let b=Yr(m.target,c);b&&Zr(b,"click")}}},[e,i]),onRowClick:s}};import{useContextMenu as nl}from"@vuu-ui/vuu-popups";import{buildColumnMap as rl,getIndexFromRowElement as ll}from"@vuu-ui/vuu-utils";import{useCallback as il}from"react";var al=[],ct=({columns:e,data:o,dataSource:t,getSelectedRows:r})=>{let[n]=nl();return il(a=>{let i=a.target,s=i==null?void 0:i.closest("div[role='cell']"),u=i==null?void 0:i.closest("div[role='row']");if(s&&u){let{selectedRowsCount:m}=t,c=rl(e),b=ll(u),v=Array.from(u.childNodes).indexOf(s),w=o.find(([d])=>d===b),T=e[v];n(a,"grid",{columnMap:c,columnName:T,row:w,selectedRows:m===0?al:r(),viewport:t.viewport})}},[e,o,t,r,n])};import{applyFilterToColumns as sl,applyGroupByToColumns as ul,applySortToColumns as cl,existingSort as ml,getCellRenderer as dl,getColumnHeaderContentRenderer as pl,getColumnHeaderLabelRenderer as bl,getColumnLabel as fl,getTableHeadings as gl,getValueFormatter as Cl,hasValidationRules as vl,isFilteredColumn as hl,isGroupColumn as wl,isPinned as xl,logger as Tl,removeSort as Rl,replaceColumn as pe,sortPinnedColumns as mt,stripFilterFromColumns as yl,subscribedOnly as Dl}from"@vuu-ui/vuu-utils";import{buildValidationChecker as Hl}from"@vuu-ui/vuu-ui-controls";import{useReducer as Ml}from"react";var{info:io}=Tl("useTableModel"),Pl=100,El=({serverDataType:e})=>e===void 0,dt=(e,o)=>{let t=o==null?void 0:o.columns.find(({name:r})=>r===e.name);return t?t.serverDataType:e.serverDataType},Sl=["int","long","double"],pt=e=>e===void 0?void 0:Sl.includes(e)?"right":"left",bt=e=>e.type==="columnSettings",ft=e=>e.type==="tableSettings",kl=(e,o)=>{switch(io==null||io(`TableModelReducer ${o.type}`),o.type){case"init":return Ct(o);case"moveColumn":return Ll(e,o);case"resizeColumn":return Nl(e,o);case"setTableSchema":return Kl(e,o);case"hideColumns":return Il(e,o);case"showColumns":return zl(e,o);case"pinColumn":return Fl(e,o);case"updateColumnProp":return he(e,o);case"tableConfig":return ht(e,o);default:return console.log(`unhandled action ${o.type}`),e}},gt=(e,o)=>{let[t,r]=Ml(kl,{tableConfig:e,dataSource:o},Ct),{columns:n,headings:l,tableConfig:a,...i}=t;return{columns:n,dispatchTableModelAction:r,headings:l,tableAttributes:i,tableConfig:a}};function Ct({dataSource:e,tableConfig:o}){let{columns:t,...r}=o,{config:n,tableSchema:l}=e,a=t.filter(Dl(n==null?void 0:n.columns)).map(vt(r,l)),i=a.some(xl)?mt(a):a,s={columns:i,headings:gl(i),tableConfig:o,...r};if(n){let{columns:u,...m}=n;s=ht(s,{type:"tableConfig",...m})}return s}var Al=(e,o)=>o==="uppercase"?e.toUpperCase():o==="capitalize"?e[0].toUpperCase()+e.slice(1).toLowerCase():e,vt=(e,o)=>(t,r)=>{let{columnDefaultWidth:n=Pl,columnFormatHeader:l}=e,a=dt(t,o),{align:i=pt(a),name:s,label:u=fl(t),width:m=n,...c}=t,b={...c,align:i,CellRenderer:dl(t),HeaderCellContentRenderer:pl(t),HeaderCellLabelRenderer:bl(t),clientSideEditValidationCheck:vl(t.type)?Hl(t.type.renderer.rules):void 0,index:r+1,label:Al(u,l),name:s,originalIdx:r,serverDataType:a,valueFormatter:Cl(t,a),width:m};return wl(b)&&(b.columns=b.columns.map(v=>vt(e)(v,r))),b};function Ll(e,{column:o,moveBy:t}){let{columns:r}=e;if(typeof t=="number"){let n=r.indexOf(o),l=r.slice(),[a]=l.splice(n,1);return l.splice(n+t,0,a),{...e,columns:l}}return e}function Il(e,{columns:o}){return o.some(t=>t.hidden!==!0)?o.reduce((t,r)=>r.hidden!==!0?he(t,{type:"updateColumnProp",column:r,hidden:!0}):t,e):e}function zl(e,{columns:o}){return o.some(t=>t.hidden)?o.reduce((t,r)=>r.hidden?he(t,{type:"updateColumnProp",column:r,hidden:!1}):t,e):e}function Nl(e,{column:o,phase:t,width:r}){let n="updateColumnProp",l=t!=="end";switch(t){case"begin":return he(e,{type:n,column:o,resizing:l});case"end":return he(e,{type:n,column:o,resizing:l,width:r});case"resize":return he(e,{type:n,column:o,width:r});default:throw Error(`useTableModel.resizeColumn, invalid resizePhase ${t}`)}}function Kl(e,{tableSchema:o}){let{columns:t}=e;if(t.some(El)){let r=t.map(n=>{var a;let l=dt(n,o);return{...n,align:(a=n.align)!=null?a:pt(l),serverDataType:l}});return{...e,columns:r}}else return e}function Fl(e,o){let{columns:t}=e,{column:r,pin:n}=o,l=t.find(a=>a.name===r.name);return l?(t=pe(t,{...l,pin:n}),t=mt(t),{...e,columns:t}):e}function he(e,o){let{columns:t,tableConfig:r}=e,{align:n,column:l,hidden:a,label:i,resizing:s,width:u}=o,m=t.find(c=>c.name===l.name);if(m&&((n==="left"||n==="right")&&(t=pe(t,{...m,align:n})),typeof i=="string"&&(t=pe(t,{...m,label:i})),typeof s=="boolean"&&(t=pe(t,{...m,resizing:s})),typeof a=="boolean"&&(t=pe(t,{...m,hidden:a})),typeof u=="number")){t=pe(t,{...m,width:u});let c=r.columns.find(b=>b.name===l.name);c&&(r={...r,columns:pe(r.columns,{...c,width:u})})}return{...e,columns:t,tableConfig:r}}function ht(e,{confirmed:o,filter:t,groupBy:r,sort:n}){let l=r!==void 0,a=typeof(t==null?void 0:t.filter)=="string",i=n&&n.sortDefs.length>0,s=e;return l&&(s={...e,columns:ul(s.columns,r,o)}),i?s={...e,columns:cl(s.columns,n)}:ml(s.columns)&&(s={...e,columns:Rl(s.columns)}),a?s={...e,columns:sl(s.columns,t)}:s.columns.some(hl)&&(s={...e,columns:yl(s.columns)}),s}import{getColumnsInViewport as wt,getRowElementAtIndex as Gl,itemsChanged as Ol}from"@vuu-ui/vuu-utils";import{useCallback as ie,useEffect as $l,useImperativeHandle as Bl,useMemo as xt,useRef as oe,useState as Vl}from"react";var Wl=100,Tt=200,Rt=e=>{let{clientHeight:o,clientWidth:t,scrollHeight:r,scrollWidth:n}=e;return[n-t,r-o]},Ul=(e,o)=>{if(e!==void 0){let{scrollTop:t}=e;return o>t?"fwd":"bwd"}},yt=(e,o)=>{let{clientHeight:t,clientWidth:r,scrollHeight:n,scrollLeft:l,scrollTop:a,scrollWidth:i}=e,s=i-r,u=l/(i-r),m=n-t,c=a/(n-t),b=Ul(o,a);return b==="fwd"&&c>.99?c=1:b==="bwd"&&c<.02&&(c=0),[l,u,s,a,c,m]},_l={scrollToIndex:()=>{},scrollToKey:()=>{}},Dt=({onAttach:e,onDetach:o})=>{let t=oe(null);return ie(n=>{if(n)t.current=n,e==null||e(n);else if(t.current){let{current:l}=t;t.current=n,o==null||o(l)}},[e,o])},Ht=({columns:e,getRowAtPosition:o,onHorizontalScroll:t,onVerticalScroll:r,onVerticalScrollInSitu:n,rowHeight:l,scrollingApiRef:a,setRange:i,viewportMeasurements:s})=>{let u=oe(0),m=oe(l),c=oe(!1),b=oe({scrollTop:0,scrollLeft:0}),v=oe(!1),w=oe({scrollTop:0,scrollLeft:0}),T=oe(null),d=oe(null),g=oe(0),{appliedPageSize:h,isVirtualScroll:H,rowCount:R,totalHeaderHeight:D,viewportWidth:k}=s,M=oe([]),[,I]=Vl({}),A=oe(0);xt(()=>{let[C,P]=wt(e,b.current.scrollLeft,b.current.scrollLeft+k+Tt);A.current=P,M.current=C},[k,e]);let W=ie(C=>{if(b.current.scrollLeft=C,t==null||t(C),Math.abs(C-g.current)>Wl){g.current=C;let[P,O]=wt(e,C,C+k+Tt);Ol(M.current,P)&&(A.current=O,M.current=P,I({}))}},[e,t,k]),J=ie((C,P)=>{b.current.scrollTop=C,r==null||r(C,P);let O=o(C);O!==u.current&&(u.current=O,i({from:O,to:O+R})),n==null||n(0)},[o,r,n,i,R]),_=ie(()=>{let{current:C}=d,{current:P}=T,{current:O}=c,{current:X}=w;if(O)c.current=!1;else if(C&&P){v.current=!0;let[U,re,,B,F]=yt(P,X);X.scrollLeft=U,X.scrollTop=B;let[N,V]=Rt(P),q=Math.round(re*N),Q=F*V;C.scrollTo({left:q,top:Q,behavior:"auto"})}n==null||n(0)},[n]),Z=ie(()=>{let{current:C}=v,{current:P}=d,{current:O}=T,{current:X}=b;if(P&&O){let[U,re,B,F,N,V]=yt(P);c.current=!0,C?v.current=!1:(O.scrollLeft=Math.round(re*B),O.scrollTop=N*V),X.scrollTop!==F&&J(F,N),X.scrollLeft!==U&&W(U)}},[J,W]),z=ie(C=>{T.current=C,C.addEventListener("scroll",_,{passive:!0})},[_]),E=ie(C=>{T.current=null,C.removeEventListener("scroll",_)},[_]),te=ie(C=>{d.current=C,C.addEventListener("scroll",Z,{passive:!0})},[Z]),ne=ie(C=>{d.current=null,C.removeEventListener("scroll",Z)},[Z]),f=Dt({onAttach:te,onDetach:ne}),x=Dt({onAttach:z,onDetach:E}),y=ie(C=>{let{current:P}=d;if(P){let[O,X]=Rt(P),{scrollLeft:U,scrollTop:re}=P;if(c.current=!1,C.type==="scroll-row"){let B=Gl(P,C.rowIndex);if(B!==null){let[F,N]=Yo(B,D);if(console.log(`outside viewport ? ${F} ${N}`),F&&N)if(H){let V=F==="down"?1:-1;n==null||n(V);let q=u.current+V;u.current=q,i({from:q,to:q+R})}else{let V=U,q=re;F==="up"||F==="down"?q=Math.min(Math.max(0,re+N),X):V=Math.min(Math.max(0,U+N),O),P.scrollTo({top:q,left:V,behavior:"smooth"})}}}else if(C.type==="scroll-page"){let{direction:B}=C;if(H){let F=B==="down"?R:-R;n==null||n(F);let N=u.current+F;u.current=N,i({from:N,to:N+R})}else{let F=B==="down"?h:-h,N=Math.min(Math.max(0,re+F),X);P.scrollTo({top:N,left:U,behavior:"auto"})}}else if(C.type==="scroll-end"){let{direction:B}=C,F=B==="end"?X:0;P.scrollTo({top:F,left:P.scrollLeft,behavior:"auto"})}}},[h,H,n,i,D,R]),G=xt(()=>({scrollToIndex:C=>{if(T.current){let P=(C-30)*20;T.current.scrollTop=P}},scrollToKey:C=>{console.log(`scrollToKey ${C}`)}}),[]);return Bl(a,()=>T.current?G:_l,[G]),$l(()=>{if(l!==m.current)m.current=l,b.current.scrollTop>0&&d.current&&(d.current.scrollTop=0);else{let{current:C}=u,P={from:C,to:C+R};i(P)}},[l,i,R]),{columnsWithinViewport:M.current,scrollbarContainerRef:x,contentContainerRef:f,requestScroll:y,virtualColSpan:A.current}};import{actualRowPositioning as Xl,measurePinnedColumns as Ql,virtualRowPositioning as Jl}from"@vuu-ui/vuu-utils";import{useCallback as Mt,useMemo as ke,useRef as ao}from"react";var Zl=1e7,Yl={appliedPageSize:0,contentHeight:0,contentWidth:0,getRowAtPosition:()=>-1,getRowOffset:()=>-1,horizontalScrollbarHeight:0,isVirtualScroll:!1,pinnedWidthLeft:0,pinnedWidthRight:0,rowCount:0,setInSituRowOffset:()=>{},setScrollTop:()=>{},totalHeaderHeight:0,verticalScrollbarWidth:0,viewportBodyHeight:0,viewportWidth:0},Pt=({columns:e,headerHeight:o,headings:t,rowCount:r,rowHeight:n,selectionEndSize:l=4,size:a})=>{let i=ao(0),s=ao(0),u=Math.min(n*r,Zl),m=r*n,c=m-u,{pinnedWidthLeft:b,pinnedWidthRight:v,unpinnedWidth:w}=ke(()=>Ql(e,l),[e,l]),T=ao(o);ke(()=>{T.current=o*(1+t.length)},[o,t.length]);let[d,g,h]=ke(()=>{if(c){let[D,k,M]=Jl(n,c,s);return[A=>D(A,i.current),k,M]}else return Xl(n)},[c,n]),H=Mt((D,k)=>{s.current=k},[]),R=Mt(D=>{D===0?i.current=0:i.current=Math.max(0,i.current+D)},[]);return ke(()=>{if(a){let{current:D}=T,k=15,M=b+w+v,I=M>a.width?k:0,A=(a.height-o)/n,W=Number.isInteger(A)?A:Math.ceil(A),J=a.height-D,_=u>J?k:0,Z=W*n*(u/m),z=a.width;return{appliedPageSize:Z,contentHeight:u,contentWidth:M,getRowAtPosition:g,getRowOffset:d,isVirtualScroll:h,horizontalScrollbarHeight:I,pinnedWidthLeft:b,pinnedWidthRight:v,rowCount:W,setInSituRowOffset:R,setScrollTop:H,totalHeaderHeight:D,verticalScrollbarWidth:_,viewportBodyHeight:J,viewportWidth:z}}else return Yl},[g,d,o,h,b,w,v,u,n,R,H,a,m])};import{useLayoutProviderDispatch as jl}from"@vuu-ui/vuu-layout";import{getCalculatedColumnType as ql}from"@vuu-ui/vuu-utils";import{useCallback as be,useRef as ei,useState as oi}from"react";var Et=({availableColumns:e,onAvailableColumnsChange:o,onConfigChange:t,onCreateCalculatedColumn:r,onDataSourceConfigChange:n,tableConfig:l})=>{let a=jl(),i=ei(),[s,u]=oi(e),m=be((d,g,h)=>{a({type:"set-props",path:"#context-panel",props:{expanded:!0,content:{type:d,props:h},title:g}})},[a]),c=be(()=>{requestAnimationFrame(()=>{var d;(d=i.current)==null||d.call(i)})},[]),b=be(d=>{let g=s.concat({name:d.name,serverDataType:ql(d)});u(g),o==null||o(g),requestAnimationFrame(()=>{var h;(h=i.current)==null||h.call(i)}),r(d)},[s,o,r]),v=be(d=>{m("ColumnSettings","Column Settings",{column:d.column,onCancelCreateColumn:c,onConfigChange:t,onCreateCalculatedColumn:b,tableConfig:l,vuuTable:d.vuuTable})},[c,b,t,m,l]),w=be(()=>{v({column:{name:"::",serverDataType:"string"},type:"columnSettings",vuuTable:{module:"SIMUL",table:"instruments"}})},[v]),T=be(d=>{let g=l.columns.find(h=>h.name===d);g&&v({type:"columnSettings",column:g,vuuTable:{module:"SIMUL",table:"instruments"}})},[v,l.columns]);return i.current=be(()=>{m("TableSettings","DataGrid Settings",{availableColumns:s!=null?s:l.columns.map(({name:d,serverDataType:g})=>({name:d,serverDataType:g})),onAddCalculatedColumn:w,onConfigChange:t,onDataSourceConfigChange:n,onNavigateToColumn:T,tableConfig:l})},[s,w,T,t,n,m,l]),{showColumnSettingsPanel:v,showTableSettingsPanel:i.current}};import{getRowClassNameGenerator as ti}from"@vuu-ui/vuu-utils";import{useMemo as ni}from"react";var ri=e=>{let o=[];return e==null||e.forEach(t=>{let r=ti(t);r&&o.push(r.fn)}),(t,r)=>{let n=[];return o==null||o.forEach(l=>{let a=l(t,r);a&&n.push(a)}),n.join(" ")}},St=({rowClassNameGenerators:e})=>ni(()=>ri(e),[e]);var Ae=e=>e,{KEY:vi,IS_EXPANDED:Lt,IS_LEAF:It}=di,hi={draggable:void 0,onMouseDown:void 0},wi=()=>hi,xi=(e,o)=>({...e,columns:e.columns.concat(o)}),zt=({allowDragDrop:e=!1,availableColumns:o,config:t,containerRef:r,dataSource:n,disableFocus:l,headerHeight:a=25,highlightedIndex:i,id:s,navigationStyle:u="cell",onAvailableColumnsChange:m,onConfigChange:c,onDragStart:b,onDrop:v,onFeatureInvocation:w,onHighlight:T,onRowClick:d,onSelect:g,onSelectionChange:h,renderBufferSize:H=0,rowHeight:R=20,scrollingApiRef:D,selectionModel:k,size:M})=>{let[I,A]=Ci(n.size);if(n===void 0)throw Error("no data source provided to Vuu Table");let W=St(t),J=e?li:wi,_=At(()=>Bo(n),[n]),Z=K(p=>{A(p)},[]),{columns:z,dispatchTableModelAction:E,headings:te,tableAttributes:ne,tableConfig:f}=gt(t,n);bi(()=>{E({type:"init",tableConfig:t,dataSource:n})},[t,n,E]);let x=K(p=>{E({type:"init",tableConfig:p,dataSource:n}),c==null||c(Ae(p))},[n,E,c]),y=At(()=>ai(n.columns),[n.columns]),G=K(({tableSchema:p})=>{p?E({type:"setTableSchema",tableSchema:p}):console.log("subscription message with no schema")},[E]),{getRowAtPosition:C,getRowOffset:P,setInSituRowOffset:O,setScrollTop:X,...U}=Pt({columns:z,headerHeight:a,headings:te,rowCount:I,rowHeight:R,size:M}),re=ot({from:0,to:U.rowCount}),{data:B,dataRef:F,getSelectedRows:N,range:V,setRange:q}=et({dataSource:n,onFeatureInvocation:w,renderBufferSize:H,onSizeChange:Z,onSubscribed:G,range:re}),{requestScroll:Q,...Ie}=Ht({columns:z,getRowAtPosition:C,rowHeight:R,scrollingApiRef:D,setRange:q,onVerticalScroll:X,onVerticalScrollInSitu:O,viewportMeasurements:U}),ze=K(p=>{E({type:"init",tableConfig:p,dataSource:n}),c==null||c(Ae(p))},[n,E,c]),ye=K(p=>{n.config={...n.config,...p}},[n]);fi(()=>{n.on("config",(p,S,L)=>{((L==null?void 0:L.filterChanged)||(L==null?void 0:L.groupByChanged))&&n.range.from>0&&Q({type:"scroll-end",direction:"home"}),E({type:"tableConfig",...p,confirmed:S})})},[n,E,Q]);let me=K(p=>{n.columns=n.columns.concat(p.name),x(xi(f,p))},[n,f,x]),co=K(p=>{let{columns:S}=p,L=S.map(Y=>Y.name),$={...f,columns:f.columns.map(Y=>L.includes(Y.name)?{...Y,hidden:!0}:Y)};x($)},[f,x]),mo=K(p=>{x({...f,columns:pi(f.columns,{...p.column,pin:p.pin})})},[f,x]),{showColumnSettingsPanel:po,showTableSettingsPanel:bo}=Et({availableColumns:o!=null?o:f.columns.map(({name:p,serverDataType:S="string"})=>({name:p,serverDataType:S})),onAvailableColumnsChange:m,onConfigChange:ze,onCreateCalculatedColumn:me,onDataSourceConfigChange:ye,tableConfig:f}),Bt=K(p=>{if(bt(p))po(p);else if(ft(p))bo();else switch(p.type){case"hideColumns":return co(p);case"pinColumn":return mo(p);default:E(p)}},[E,co,mo,po,bo]),Vt=_o({dataSource:n,onPersistentColumnOperation:Bt}),Wt=K((p,S=!1,L)=>{n&&(n.sort=ii(n.sort,p,S,L))},[n]),Ne=gi(),Ut=K((p,S,L)=>{var Y,we,se;let $=z.find(ee=>ee.name===S);if($)if(p==="resize")(Y=Ne.current)==null||Y.forEach(ee=>{ee.style.width=`${L}px`});else if(p==="end")Ne.current=void 0,mi(L)&&(E({type:"resizeColumn",phase:p,column:$,width:L}),c==null||c(Ae(Xo(f,{type:"col-size",column:$,width:L}))));else{let ee=`[aria-colindex='${$.index}']`;Ne.current=Array.from((se=(we=r.current)==null?void 0:we.querySelectorAll(`.vuuTableCell${ee},.vuuTableHeaderCell${ee}`))!=null?se:[]),E({type:"resizeColumn",phase:p,column:$,width:L})}else throw Error(`useDataTable.handleColumnResize, column ${S} not found`)},[z,E,c,f,r]),_t=K((p,S)=>{var Y,we;let L=ci(S,p,y),$=p[vi];if(p[Lt]){if(n.closeTreeNode($,!0),L){let se=z.indexOf(S),ee=(Y=n.getRowsAtDepth)==null?void 0:Y.call(n,se+1);ee&&!ee.some(fe=>fe[Lt]||fe[It])&&E({type:"hideColumns",columns:z.slice(se+2)})}}else if(n.openTreeNode($),L){let se=(we=n.getChildRows)==null?void 0:we.call(n,$),ee=z.indexOf(S)+1,fe=[z[ee]];se&&se.some(Ke=>Ke[It])&&fe.push(z[ee+1]),fe.some(Ke=>Ke.hidden)&&E({type:"showColumns",columns:fe})}},[y,z,n,E]),{highlightedIndexRef:fo,navigate:Xt,onFocus:go,onKeyDown:Co,...Qt}=it({columnCount:z.filter(p=>p.hidden!==!0).length,containerRef:r,disableFocus:l,highlightedIndex:i,navigationStyle:u,requestScroll:Q,rowCount:n==null?void 0:n.size,onHighlight:T,viewportRange:V,viewportRowCount:U.rowCount}),{onBlur:Jt,onDoubleClick:Zt,onKeyDown:vo,onFocus:ho}=jo({navigate:Xt}),Yt=K(p=>{go(),p.defaultPrevented||ho(p)},[ho,go]),jt=ct({columns:z,data:B,dataSource:n,getSelectedRows:N}),qt=K(p=>{n.groupBy=p.map(S=>S.name)},[n]),en=K(p=>{ui(p)?n.groupBy=[]:n&&n.groupBy.includes(p.name)&&(n.groupBy=n.groupBy.filter(S=>S!==p.name))},[n]),on=K(p=>{n.select(p),h==null||h(p)},[n,h]),tn=K(p=>{g&&g(p===null?null:kt(p,y))},[y,g]),{onKeyDown:wo,onRowClick:xo}=ut({highlightedIndexRef:fo,onSelect:tn,onSelectionChange:on,selectionModel:k}),nn=K((p,S,L,$)=>{xo(p,S,L,$),d==null||d(p,kt(S,y))},[y,d,xo]),rn=K(p=>{Co(p),p.defaultPrevented||vo(p),p.defaultPrevented||wo(p)},[Co,vo,wo]),ln=K(p=>{let S={...f,columns:p};E({type:"init",tableConfig:S,dataSource:n}),c==null||c(Ae(S))},[n,E,c,f]),an=K(p=>{v==null||v(p)},[v]),sn=K(async(p,S,L)=>n.applyEdit(p,S,L),[n]),un=K(p=>{let{initialDragElement:S}=p,L=si(S),$=F.current.find(Y=>Y[0]===L);$&&p.setPayload($),b==null||b(p)},[F,b]),{onMouseDown:cn,draggable:mn}=J({allowDragDrop:e,containerRef:r,draggableClassName:"vuuTable",id:s,onDragStart:un,onDrop:an,orientation:"vertical",itemQuery:".vuuTableRow"});return{...Qt,"aria-rowcount":n.size,rowClassNameGenerator:W,draggableRow:mn,onBlur:Jt,onDoubleClick:Zt,onFocus:Yt,onKeyDown:rn,onMouseDown:cn,columnMap:y,columns:z,data:B,getRowOffset:P,handleContextMenuAction:Vt,headings:te,highlightedIndex:fo.current,menuBuilder:_,onContextMenu:jt,onDataEdited:sn,onMoveColumn:ln,onMoveGroupColumn:qt,onRemoveGroupColumn:en,onRowClick:nn,onSortColumn:Wt,onResizeColumn:Ut,onToggleGroup:_t,scrollProps:Ie,tableAttributes:ne,tableConfig:f,viewportMeasurements:U}};import{isValidNumber as Ti}from"@vuu-ui/vuu-utils";import{useCallback as Ri,useMemo as yi,useRef as Di,useState as Hi}from"react";var Nt=({rowHeight:e=0})=>{let[o,t]=Hi(e),r=Di(o),n=yi(()=>new ResizeObserver(a=>{for(let i of a){let[{blockSize:s}]=i.borderBoxSize,u=Math.round(s);Ti(u)&&r.current!==u&&(r.current=u,t(u))}}),[]),l=Ri(a=>{if(a){if(e===0){let{height:i}=a.getBoundingClientRect();console.log({boundingClientHeight:i}),console.log(`measured rowHeight = ${i} (${e})`),n.observe(a),t(i)}}else n.disconnect()},[n,e]);return{rowHeight:o,rowRef:l}};import{jsx as ce,jsxs as so}from"react/jsx-runtime";var ae="vuuTable",{IDX:zi,RENDER_IDX:Ni}=Ei,Ki=({Row:e=_e,allowDragDrop:o,availableColumns:t,config:r,containerRef:n,dataSource:l,disableFocus:a=!1,highlightedIndex:i,id:s,navigationStyle:u="cell",onAvailableColumnsChange:m,onConfigChange:c,onDragStart:b,onDrop:v,onFeatureInvocation:w,onHighlight:T,onRowClick:d,onSelect:g,onSelectionChange:h,renderBufferSize:H=5,rowHeight:R,scrollingApiRef:D,selectionModel:k="extended",showColumnHeaders:M=!0,showColumnHeaderMenus:I=!0,headerHeight:A=M?R*1.25:0,size:W})=>{let J=Si(s),{columnMap:_,columns:Z,data:z,draggableRow:E,getRowOffset:te,handleContextMenuAction:ne,headings:f,highlightedIndex:x,menuBuilder:y,onDataEdited:G,onMoveColumn:C,onMoveGroupColumn:P,onRemoveGroupColumn:O,onResizeColumn:X,onRowClick:U,onSortColumn:re,onToggleGroup:B,rowClassNameGenerator:F,scrollProps:N,tableAttributes:V,tableConfig:q,viewportMeasurements:Q,...Ie}=zt({allowDragDrop:o,availableColumns:t,config:r,containerRef:n,dataSource:l,disableFocus:a,headerHeight:A,highlightedIndex:i,id:J,navigationStyle:u,onAvailableColumnsChange:m,onConfigChange:c,onDragStart:b,onDrop:v,onFeatureInvocation:w,onHighlight:T,onRowClick:d,onSelect:g,onSelectionChange:h,renderBufferSize:Math.max(5,H),rowHeight:R,scrollingApiRef:D,selectionModel:k,size:W}),ze=Kt(`${ae}-contentContainer`,{[`${ae}-colLines`]:V.columnSeparators,[`${ae}-rowLines`]:V.rowSeparators,[`${ae}-zebra`]:V.zebraStripes}),ye={"--content-height":`${Q.contentHeight}px`,"--content-width":`${Q.contentWidth}px`,"--horizontal-scrollbar-height":`${Q.horizontalScrollbarHeight}px`,"--pinned-width-left":`${Q.pinnedWidthLeft}px`,"--pinned-width-right":`${Q.pinnedWidthRight}px`,"--header-height":`${A}px`,"--row-height-prop":`${R}px`,"--total-header-height":`${Q.totalHeaderHeight}px`,"--vertical-scrollbar-width":`${Q.verticalScrollbarWidth}px`,"--viewport-body-height":`${Q.viewportBodyHeight}px`};return so(Mi,{menuActionHandler:ne,menuBuilder:y,children:[ce("div",{className:`${ae}-scrollbarContainer`,ref:N.scrollbarContainerRef,style:ye,children:ce("div",{className:`${ae}-scrollbarContent`})}),ce("div",{className:ze,ref:N.contentContainerRef,style:ye,children:so("div",{...Ie,className:`${ae}-table`,role:"table",tabIndex:a?void 0:-1,children:[M?ce(Je,{columns:N.columnsWithinViewport,headings:f,onMoveColumn:C,onMoveGroupColumn:P,onRemoveGroupColumn:O,onResizeColumn:X,onSortColumn:re,showColumnHeaderMenus:I,tableConfig:q,tableId:J,virtualColSpan:N.virtualColSpan}):null,ce("div",{className:`${ae}-body`,children:z.map(me=>ce(e,{"aria-rowindex":me[0]+1,classNameGenerator:F,columnMap:_,columns:N.columnsWithinViewport,highlighted:x===me[zi],onClick:U,onDataEdited:G,row:me,offset:te(me),onToggleGroup:B,virtualColSpan:N.virtualColSpan,zebraStripes:V.zebraStripes},me[Ni]))})]})}),E]})},Zm=Ai(function({Row:o,allowDragDrop:t,availableColumns:r,className:n,config:l,dataSource:a,disableFocus:i,highlightedIndex:s,id:u,navigationStyle:m,onAvailableColumnsChange:c,onConfigChange:b,onDragStart:v,onDrop:w,onFeatureInvocation:T,onHighlight:d,onRowClick:g,onSelect:h,onSelectionChange:H,renderBufferSize:R,rowHeight:D,scrollingApiRef:k,selectionModel:M,showColumnHeaders:I,showColumnHeaderMenus:A,headerHeight:W,style:J,..._},Z){let z=Li(null),[E,te]=Ii(),{rowHeight:ne,rowRef:f}=Nt({rowHeight:D});if(l===void 0)throw Error("vuu Table requires config prop. Minimum config is list of Column Descriptors");if(a===void 0)throw Error("vuu Table requires dataSource prop");return so(Pi,{..._,className:Kt(ae,n),id:u,onResize:te,ref:ki(z,Z),children:[ce(Fo,{ref:f,height:D}),E&&ne?ce(Ki,{Row:o,allowDragDrop:t,availableColumns:r,config:l,containerRef:z,dataSource:a,disableFocus:i,headerHeight:W,highlightedIndex:s,id:u,navigationStyle:m,onAvailableColumnsChange:c,onConfigChange:b,onDragStart:v,onDrop:w,onFeatureInvocation:T,onHighlight:d,onRowClick:g,onSelect:h,onSelectionChange:H,renderBufferSize:R,rowHeight:ne,scrollingApiRef:k,selectionModel:M,showColumnHeaders:I,showColumnHeaderMenus:A,size:E}):null]})});import{memo as Fi,useCallback as Gi}from"react";import{CheckboxIcon as Oi,WarnCommit as $i}from"@vuu-ui/vuu-ui-controls";import{Checkbox as Bi}from"@salt-ds/core";import{dataColumnAndKeyUnchanged as Vi,dispatchCustomEvent as Wi,registerComponent as Ui}from"@vuu-ui/vuu-utils";import{jsx as Ft}from"react/jsx-runtime";var Gt=Fi(({column:e,columnMap:o,onCommit:t=$i,row:r})=>{let n=o[e.name],l=!!r[n],a=Gi(i=>async s=>{let u=await t(i);return u===!0&&Wi(s.target,"vuu-commit"),u},[t]);return e.editable?Ft(Bi,{checked:l,onClick:a(!l)}):Ft(Oi,{checked:l,disabled:!0})},Vi);Gt.displayName="CheckboxCell";Ui("checkbox-cell",Gt,"cell-renderer",{serverDataType:"boolean"});import{registerComponent as _i}from"@vuu-ui/vuu-utils";import{Input as Xi}from"@salt-ds/core";import{useEditableText as Qi}from"@vuu-ui/vuu-ui-controls";import Ji from"clsx";import{jsx as uo}from"react/jsx-runtime";var Le="vuuTableInputCell",Zi=()=>(console.warn("onCommit handler has not been provided to InputCell cell renderer"),Promise.resolve(!0)),Yi=({column:e,columnMap:o,onCommit:t=Zi,row:r})=>{let n=o[e.name],l=r[n],{align:a="left",clientSideEditValidationCheck:i}=e,{warningMessage:s,...u}=Qi({initialValue:l,onCommit:t,clientSideEditValidationCheck:i}),m=s&&a==="left"?uo("span",{className:`${Le}-icon`,"data-icon":"error"}):void 0,c=s&&a==="right"?uo("span",{className:`${Le}-icon`,"data-icon":"error"}):void 0;return uo(Xi,{...u,className:Ji(Le,{[`${Le}-error`]:s!==void 0}),endAdornment:m,startAdornment:c})};_i("input-cell",Yi,"cell-renderer",{userCanAssign:!1});import{WarnCommit as ji}from"@vuu-ui/vuu-ui-controls";import{dataColumnAndKeyUnchanged as qi,dispatchCustomEvent as ea,isTypeDescriptor as oa,isValueListRenderer as ta,registerComponent as na}from"@vuu-ui/vuu-utils";import ra from"clsx";import{memo as la,useCallback as ia}from"react";import{CycleStateButton as aa}from"@vuu-ui/vuu-ui-controls";import{jsx as ca}from"react/jsx-runtime";var Ot="vuuTableToggleCell",sa=({name:e,type:o})=>{if(oa(o)&&ta(o.renderer))return o.renderer.values;throw Error(`useLookupValues column ${e} has not been configured with a values list`)},ua=la(function({column:o,columnMap:t,onCommit:r=ji,row:n}){let l=sa(o),a=t[o.name],i=n[a],s=ia((u,m)=>r(m).then(c=>(c===!0&&ea(u.target,"vuu-commit"),c)),[r]);return ca(aa,{className:ra(Ot,`${Ot}-${o.name}`),onCommit:s,value:i,values:l,variant:"cta",children:i})},qi);na("toggle-cell",ua,"cell-renderer",{userCanAssign:!1});import{useStateRef as ma}from"@vuu-ui/vuu-ui-controls";import{dispatchMouseEvent as da}from"@vuu-ui/vuu-utils";import{useCallback as $t,useRef as pa}from"react";var Vd=(e,o)=>{let t=pa(null),[r,n]=ma(e),l=$t(i=>{var s;if(i.key==="ArrowDown")n((u=-1)=>Math.min(o-1,u+1));else if(i.key==="ArrowUp")n((u=-1)=>Math.max(0,u-1));else if(i.key==="Enter"||i.key===" "){let{current:u}=r,m=(s=t.current)==null?void 0:s.querySelector(`[aria-rowindex="${u}"]`);m&&da(m,"click")}},[r,o,n]),a=$t(i=>{n(i)},[n]);return{highlightedIndexRef:r,onHighlight:a,onKeyDown:l,tableRef:t}};export{Gt as CheckboxCell,Ve as GroupHeaderCell,Ve as GroupHeaderCellNext,So as HeaderCell,Yi as InputCell,Zm as Table,Lo as TableCell,Io as TableGroupCell,ua as ToggleCell,bt as isShowColumnSettings,ft as isShowTableSettings,_l as noScrolling,Xo as updateTableConfig,Vd as useControlledTableNavigation,gt as useTableModel,Ht as useTableScroll,Pt as useTableViewport};
1
+ export { GroupHeaderCell, GroupHeaderCell as GroupHeaderCellNext } from './header-cell/GroupHeaderCell.js';
2
+ export { HeaderCell } from './header-cell/HeaderCell.js';
3
+ export { Table } from './Table.js';
4
+ export { TableCell } from './table-cell/TableCell.js';
5
+ export { TableGroupCell } from './table-cell/TableGroupCell.js';
6
+ export { updateTableConfig } from './table-config.js';
7
+ export { CheckboxCell } from './cell-renderers/checkbox-cell/CheckboxCell.js';
8
+ export { InputCell } from './cell-renderers/input-cell/InputCell.js';
9
+ export { ToggleCell } from './cell-renderers/toggle-cell/ToggleCell.js';
10
+ export { useControlledTableNavigation } from './useControlledTableNavigation.js';
11
+ export { isShowColumnSettings, isShowTableSettings, useTableModel } from './useTableModel.js';
12
+ export { noScrolling, useTableScroll } from './useTableScroll.js';
13
+ export { useTableViewport } from './useTableViewport.js';
2
14
  //# sourceMappingURL=index.js.map