@vuu-ui/vuu-table 0.8.35 → 0.8.37

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 (223) hide show
  1. package/README.md +0 -0
  2. package/cjs/Row.css.js +6 -0
  3. package/cjs/Row.css.js.map +1 -0
  4. package/cjs/Row.js +124 -0
  5. package/cjs/Row.js.map +1 -0
  6. package/cjs/Table.css.js +6 -0
  7. package/cjs/Table.css.js.map +1 -0
  8. package/cjs/Table.js +285 -0
  9. package/cjs/Table.js.map +1 -0
  10. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js +6 -0
  11. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +1 -0
  12. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js +42 -0
  13. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js.map +1 -0
  14. package/cjs/cell-renderers/input-cell/InputCell.css.js +6 -0
  15. package/cjs/cell-renderers/input-cell/InputCell.css.js.map +1 -0
  16. package/cjs/cell-renderers/input-cell/InputCell.js +58 -0
  17. package/cjs/cell-renderers/input-cell/InputCell.js.map +1 -0
  18. package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js +6 -0
  19. package/cjs/cell-renderers/toggle-cell/ToggleCell.css.js.map +1 -0
  20. package/cjs/cell-renderers/toggle-cell/ToggleCell.js +68 -0
  21. package/cjs/cell-renderers/toggle-cell/ToggleCell.js.map +1 -0
  22. package/cjs/column-header-pill/ColumnHeaderPill.css.js +6 -0
  23. package/cjs/column-header-pill/ColumnHeaderPill.css.js.map +1 -0
  24. package/cjs/column-header-pill/ColumnHeaderPill.js +53 -0
  25. package/cjs/column-header-pill/ColumnHeaderPill.js.map +1 -0
  26. package/cjs/column-header-pill/GroupColumnPill.css.js +6 -0
  27. package/cjs/column-header-pill/GroupColumnPill.css.js.map +1 -0
  28. package/cjs/column-header-pill/GroupColumnPill.js +29 -0
  29. package/cjs/column-header-pill/GroupColumnPill.js.map +1 -0
  30. package/cjs/column-header-pill/SortIndicator.css.js +6 -0
  31. package/cjs/column-header-pill/SortIndicator.css.js.map +1 -0
  32. package/cjs/column-header-pill/SortIndicator.js +27 -0
  33. package/cjs/column-header-pill/SortIndicator.js.map +1 -0
  34. package/cjs/column-menu/ColumnMenu.css.js +6 -0
  35. package/cjs/column-menu/ColumnMenu.css.js.map +1 -0
  36. package/cjs/column-menu/ColumnMenu.js +30 -0
  37. package/cjs/column-menu/ColumnMenu.js.map +1 -0
  38. package/cjs/column-resizing/ColumnResizer.css.js +6 -0
  39. package/cjs/column-resizing/ColumnResizer.css.js.map +1 -0
  40. package/cjs/column-resizing/ColumnResizer.js +72 -0
  41. package/cjs/column-resizing/ColumnResizer.js.map +1 -0
  42. package/cjs/column-resizing/useTableColumnResize.js +55 -0
  43. package/cjs/column-resizing/useTableColumnResize.js.map +1 -0
  44. package/cjs/context-menu/buildContextMenuDescriptors.js +214 -0
  45. package/cjs/context-menu/buildContextMenuDescriptors.js.map +1 -0
  46. package/cjs/context-menu/useHandleTableContextMenu.js +81 -0
  47. package/cjs/context-menu/useHandleTableContextMenu.js.map +1 -0
  48. package/cjs/header-cell/GroupHeaderCell.css.js +6 -0
  49. package/cjs/header-cell/GroupHeaderCell.css.js.map +1 -0
  50. package/cjs/header-cell/GroupHeaderCell.js +117 -0
  51. package/cjs/header-cell/GroupHeaderCell.js.map +1 -0
  52. package/cjs/header-cell/HeaderCell.css.js +6 -0
  53. package/cjs/header-cell/HeaderCell.css.js.map +1 -0
  54. package/cjs/header-cell/HeaderCell.js +109 -0
  55. package/cjs/header-cell/HeaderCell.js.map +1 -0
  56. package/cjs/index.js.map +1 -0
  57. package/cjs/moving-window.js +61 -0
  58. package/cjs/moving-window.js.map +1 -0
  59. package/cjs/table-cell/TableCell.css.js +6 -0
  60. package/cjs/table-cell/TableCell.css.js.map +1 -0
  61. package/cjs/table-cell/TableCell.js +72 -0
  62. package/cjs/table-cell/TableCell.js.map +1 -0
  63. package/cjs/table-cell/TableGroupCell.css.js +6 -0
  64. package/cjs/table-cell/TableGroupCell.css.js.map +1 -0
  65. package/cjs/table-cell/TableGroupCell.js +54 -0
  66. package/cjs/table-cell/TableGroupCell.js.map +1 -0
  67. package/cjs/table-config.js +25 -0
  68. package/cjs/table-config.js.map +1 -0
  69. package/cjs/table-dom-utils.js +60 -0
  70. package/cjs/table-dom-utils.js.map +1 -0
  71. package/cjs/table-header/TableHeader.js +87 -0
  72. package/cjs/table-header/TableHeader.js.map +1 -0
  73. package/cjs/table-header/useTableHeader.js +72 -0
  74. package/cjs/table-header/useTableHeader.js.map +1 -0
  75. package/cjs/useCell.js +28 -0
  76. package/cjs/useCell.js.map +1 -0
  77. package/cjs/useCellEditing.js +79 -0
  78. package/cjs/useCellEditing.js.map +1 -0
  79. package/cjs/useControlledTableNavigation.js +43 -0
  80. package/cjs/useControlledTableNavigation.js.map +1 -0
  81. package/cjs/useDataSource.js +104 -0
  82. package/cjs/useDataSource.js.map +1 -0
  83. package/cjs/useInitialValue.js +11 -0
  84. package/cjs/useInitialValue.js.map +1 -0
  85. package/cjs/useKeyboardNavigation.js +304 -0
  86. package/cjs/useKeyboardNavigation.js.map +1 -0
  87. package/cjs/useRowClassNameGenerators.js +34 -0
  88. package/cjs/useRowClassNameGenerators.js.map +1 -0
  89. package/cjs/useRowHeight.js +43 -0
  90. package/cjs/useRowHeight.js.map +1 -0
  91. package/cjs/useSelection.js +64 -0
  92. package/cjs/useSelection.js.map +1 -0
  93. package/cjs/useTable.js +553 -0
  94. package/cjs/useTable.js.map +1 -0
  95. package/cjs/useTableAndColumnSettings.js +128 -0
  96. package/cjs/useTableAndColumnSettings.js.map +1 -0
  97. package/cjs/useTableContextMenu.js +42 -0
  98. package/cjs/useTableContextMenu.js.map +1 -0
  99. package/cjs/useTableModel.js +297 -0
  100. package/cjs/useTableModel.js.map +1 -0
  101. package/cjs/useTableScroll.js +396 -0
  102. package/cjs/useTableScroll.js.map +1 -0
  103. package/cjs/useTableViewport.js +122 -0
  104. package/cjs/useTableViewport.js.map +1 -0
  105. package/esm/Row.css.js +4 -0
  106. package/esm/Row.css.js.map +1 -0
  107. package/esm/Row.js +121 -0
  108. package/esm/Row.js.map +1 -0
  109. package/esm/Table.css.js +4 -0
  110. package/esm/Table.css.js.map +1 -0
  111. package/esm/Table.js +283 -0
  112. package/esm/Table.js.map +1 -0
  113. package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js +4 -0
  114. package/esm/cell-renderers/checkbox-cell/CheckboxCell.css.js.map +1 -0
  115. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js +40 -0
  116. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js.map +1 -0
  117. package/esm/cell-renderers/input-cell/InputCell.css.js +4 -0
  118. package/esm/cell-renderers/input-cell/InputCell.css.js.map +1 -0
  119. package/esm/cell-renderers/input-cell/InputCell.js +56 -0
  120. package/esm/cell-renderers/input-cell/InputCell.js.map +1 -0
  121. package/esm/cell-renderers/toggle-cell/ToggleCell.css.js +4 -0
  122. package/esm/cell-renderers/toggle-cell/ToggleCell.css.js.map +1 -0
  123. package/esm/cell-renderers/toggle-cell/ToggleCell.js +66 -0
  124. package/esm/cell-renderers/toggle-cell/ToggleCell.js.map +1 -0
  125. package/esm/column-header-pill/ColumnHeaderPill.css.js +4 -0
  126. package/esm/column-header-pill/ColumnHeaderPill.css.js.map +1 -0
  127. package/esm/column-header-pill/ColumnHeaderPill.js +51 -0
  128. package/esm/column-header-pill/ColumnHeaderPill.js.map +1 -0
  129. package/esm/column-header-pill/GroupColumnPill.css.js +4 -0
  130. package/esm/column-header-pill/GroupColumnPill.css.js.map +1 -0
  131. package/esm/column-header-pill/GroupColumnPill.js +27 -0
  132. package/esm/column-header-pill/GroupColumnPill.js.map +1 -0
  133. package/esm/column-header-pill/SortIndicator.css.js +4 -0
  134. package/esm/column-header-pill/SortIndicator.css.js.map +1 -0
  135. package/esm/column-header-pill/SortIndicator.js +25 -0
  136. package/esm/column-header-pill/SortIndicator.js.map +1 -0
  137. package/esm/column-menu/ColumnMenu.css.js +4 -0
  138. package/esm/column-menu/ColumnMenu.css.js.map +1 -0
  139. package/esm/column-menu/ColumnMenu.js +28 -0
  140. package/esm/column-menu/ColumnMenu.js.map +1 -0
  141. package/esm/column-resizing/ColumnResizer.css.js +4 -0
  142. package/esm/column-resizing/ColumnResizer.css.js.map +1 -0
  143. package/esm/column-resizing/ColumnResizer.js +70 -0
  144. package/esm/column-resizing/ColumnResizer.js.map +1 -0
  145. package/esm/column-resizing/useTableColumnResize.js +53 -0
  146. package/esm/column-resizing/useTableColumnResize.js.map +1 -0
  147. package/esm/context-menu/buildContextMenuDescriptors.js +212 -0
  148. package/esm/context-menu/buildContextMenuDescriptors.js.map +1 -0
  149. package/esm/context-menu/useHandleTableContextMenu.js +79 -0
  150. package/esm/context-menu/useHandleTableContextMenu.js.map +1 -0
  151. package/esm/header-cell/GroupHeaderCell.css.js +4 -0
  152. package/esm/header-cell/GroupHeaderCell.css.js.map +1 -0
  153. package/esm/header-cell/GroupHeaderCell.js +115 -0
  154. package/esm/header-cell/GroupHeaderCell.js.map +1 -0
  155. package/esm/header-cell/HeaderCell.css.js +4 -0
  156. package/esm/header-cell/HeaderCell.css.js.map +1 -0
  157. package/esm/header-cell/HeaderCell.js +107 -0
  158. package/esm/header-cell/HeaderCell.js.map +1 -0
  159. package/esm/index.js +14 -0
  160. package/esm/index.js.map +1 -0
  161. package/esm/moving-window.js +59 -0
  162. package/esm/moving-window.js.map +1 -0
  163. package/esm/table-cell/TableCell.css.js +4 -0
  164. package/esm/table-cell/TableCell.css.js.map +1 -0
  165. package/esm/table-cell/TableCell.js +70 -0
  166. package/esm/table-cell/TableCell.js.map +1 -0
  167. package/esm/table-cell/TableGroupCell.css.js +4 -0
  168. package/esm/table-cell/TableGroupCell.css.js.map +1 -0
  169. package/esm/table-cell/TableGroupCell.js +52 -0
  170. package/esm/table-cell/TableGroupCell.js.map +1 -0
  171. package/esm/table-config.js +23 -0
  172. package/esm/table-config.js.map +1 -0
  173. package/esm/table-dom-utils.js +51 -0
  174. package/esm/table-dom-utils.js.map +1 -0
  175. package/esm/table-header/TableHeader.js +85 -0
  176. package/esm/table-header/TableHeader.js.map +1 -0
  177. package/esm/table-header/useTableHeader.js +70 -0
  178. package/esm/table-header/useTableHeader.js.map +1 -0
  179. package/esm/useCell.js +26 -0
  180. package/esm/useCell.js.map +1 -0
  181. package/esm/useCellEditing.js +77 -0
  182. package/esm/useCellEditing.js.map +1 -0
  183. package/esm/useControlledTableNavigation.js +41 -0
  184. package/esm/useControlledTableNavigation.js.map +1 -0
  185. package/esm/useDataSource.js +101 -0
  186. package/esm/useDataSource.js.map +1 -0
  187. package/esm/useInitialValue.js +9 -0
  188. package/esm/useInitialValue.js.map +1 -0
  189. package/esm/useKeyboardNavigation.js +300 -0
  190. package/esm/useKeyboardNavigation.js.map +1 -0
  191. package/esm/useRowClassNameGenerators.js +32 -0
  192. package/esm/useRowClassNameGenerators.js.map +1 -0
  193. package/esm/useRowHeight.js +41 -0
  194. package/esm/useRowHeight.js.map +1 -0
  195. package/esm/useSelection.js +62 -0
  196. package/esm/useSelection.js.map +1 -0
  197. package/esm/useTable.js +551 -0
  198. package/esm/useTable.js.map +1 -0
  199. package/esm/useTableAndColumnSettings.js +126 -0
  200. package/esm/useTableAndColumnSettings.js.map +1 -0
  201. package/esm/useTableContextMenu.js +40 -0
  202. package/esm/useTableContextMenu.js.map +1 -0
  203. package/esm/useTableModel.js +293 -0
  204. package/esm/useTableModel.js.map +1 -0
  205. package/esm/useTableScroll.js +393 -0
  206. package/esm/useTableScroll.js.map +1 -0
  207. package/esm/useTableViewport.js +120 -0
  208. package/esm/useTableViewport.js.map +1 -0
  209. package/package.json +12 -8
  210. package/types/Row.d.ts +0 -1
  211. package/types/Table.d.ts +0 -1
  212. package/types/cell-renderers/checkbox-cell/CheckboxCell.d.ts +0 -1
  213. package/types/cell-renderers/input-cell/InputCell.d.ts +0 -1
  214. package/types/cell-renderers/toggle-cell/ToggleCell.d.ts +0 -1
  215. package/types/column-header-pill/ColumnHeaderPill.d.ts +0 -1
  216. package/types/column-header-pill/GroupColumnPill.d.ts +0 -1
  217. package/types/column-header-pill/SortIndicator.d.ts +0 -1
  218. package/types/column-menu/ColumnMenu.d.ts +0 -1
  219. package/types/column-resizing/ColumnResizer.d.ts +0 -1
  220. package/types/header-cell/GroupHeaderCell.d.ts +0 -1
  221. package/types/header-cell/HeaderCell.d.ts +0 -1
  222. package/types/table-cell/TableCell.d.ts +0 -1
  223. package/types/table-cell/TableGroupCell.d.ts +0 -1
package/README.md ADDED
File without changes
package/cjs/Row.css.js ADDED
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var rowCss = ".vuuTableRow {\n background: var(--row-background,var(--table-background));\n color: var(--salt-content-secondary-foreground);\n border-bottom: 1px solid var(--row-borderColor, var(--table-background));\n box-sizing: border-box;\n height: var(--row-height);\n line-height: calc(var(--row-height) - 1px);\n position: absolute;\n top:0;\n white-space: nowrap;\n}\n \n.vuuTableRow-proxy {\n visibility: hidden;\n}\n\n.vuuTableRow-even {\n --row-background: var(--row-background-even);\n}\n\n.vuuTableRow-highlighted {\n background: var(--salt-selectable-background-hover);\n}\n\n\n.vuuTableRow-selected,\n.vuuTableRow-selectedEnd {\n /* --row-borderColor: var(--salt-separable-secondary-borderColor); */\n background-color: var(--salt-selectable-background-selected);\n}\n\n.vuuTableRow-selectedEnd {\n z-index: 1;\n}\n\n.vuuTableRow-selectedStart {\n --vuu-selection-decorator-left-radius: 5px 0 0 0;\n --vuu-selection-decorator-right-radius: 0 5px 0 0;\n\n border-radius: 5px 5px 0 0;\n}\n \n .vuuTableRow-selectedEnd {\n --vuu-selection-decorator-left-radius: 0 0 0 5px;\n --vuu-selection-decorator-right-radius: 0 0 5px 0;\n border-radius: 0 0 5px 5px;\n }\n \n .vuuTableRow-selectedStart.vuuTableRow-selectedEnd {\n --vuu-selection-decorator-left-radius: 5px 0 0 5px;\n --vuu-selection-decorator-right-radius: 0 5px 5px 0;\n border-radius: 5px 5px 5px 5px;\n \n }\n \n .vuuTableRow-selectedStart:after {\n content: '';\n position: absolute;\n top: -1px;\n left: 4px;\n height: 1px;\n background: var(--vuuTableRow-selectionBlock-borderColor);\n width: calc(var(--content-width) - 8px);\n z-index: 1;\n }\n \n .vuuTableRow-selectedEnd {\n border-bottom-color: var(--vuuTableRow-selectionBlock-borderColor, var(--row-borderColor));\n }\n \n .vuuTableRow-selectionDecorator {\n background: var(--table-background);\n display: inline-block;\n position: relative;\n height: var(--row-height);\n width: 4px;\n z-index: 2;\n }\n \n .vuuTableRow-selectionDecorator.vuuStickyLeft {\n left:0;\n position: sticky;\n }\n \n .vuuTableRow-selectionDecorator.vuuStickyRight {\n right:0;\n position: sticky;\n } \n \n .vuuTableRow-selectedStart .vuuTableRow-selectionDecorator:before,\n .vuuTableRow-selectedEnd .vuuTableRow-selectionDecorator:before {\n content: '';\n inset: -1px 0 0 0;\n position: absolute;\n background: var(--table-background);\n }\n \n .vuuTableRow-selectionDecorator.vuuStickyLeft:before {\n border-radius: var(--vuu-selection-decorator-left-radius, 0);\n }\n \n .vuuTableRow-selectionDecorator.vuuStickyRight:before {\n border-radius: var(--vuu-selection-decorator-right-radius, 0);\n }\n\n .vuuTableRow-expanded {\n --toggle-icon-transform: rotate(90deg);\n }\n \n.vuuDraggable .vuuTableRow {\n --cell-borderColor: transparent;\n --vuu-selection-decorator-bg: transparent;\n transform: none!important;\n z-index: 1;\n}";
4
+
5
+ module.exports = rowCss;
6
+ //# sourceMappingURL=Row.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Row.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
package/cjs/Row.js ADDED
@@ -0,0 +1,124 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var vuuUtils = require('@vuu-ui/vuu-utils');
5
+ var styles = require('@salt-ds/styles');
6
+ var window = require('@salt-ds/window');
7
+ var cx = require('clsx');
8
+ var react = require('react');
9
+ var TableCell = require('./table-cell/TableCell.js');
10
+ var TableGroupCell = require('./table-cell/TableGroupCell.js');
11
+ var Row$1 = require('./Row.css.js');
12
+
13
+ const { IDX, IS_EXPANDED, SELECTED } = vuuUtils.metadataKeys;
14
+ const classBase = "vuuTableRow";
15
+ const RowProxy = react.forwardRef(
16
+ function RowProxy2({ height }, forwardedRef) {
17
+ return /* @__PURE__ */ jsxRuntime.jsx(
18
+ "div",
19
+ {
20
+ "aria-hidden": true,
21
+ className: cx(classBase, `${classBase}-proxy`),
22
+ ref: forwardedRef,
23
+ style: { height }
24
+ }
25
+ );
26
+ }
27
+ );
28
+ const Row = react.memo(
29
+ ({
30
+ className: classNameProp,
31
+ classNameGenerator,
32
+ columnMap,
33
+ columns,
34
+ highlighted,
35
+ row,
36
+ offset,
37
+ onClick,
38
+ onDataEdited,
39
+ onToggleGroup,
40
+ virtualColSpan = 0,
41
+ zebraStripes = false,
42
+ ...htmlAttributes
43
+ }) => {
44
+ const targetWindow = window.useWindow();
45
+ styles.useComponentCssInjection({
46
+ testId: "vuu-table-row",
47
+ css: Row$1,
48
+ window: targetWindow
49
+ });
50
+ const {
51
+ [IDX]: rowIndex,
52
+ [IS_EXPANDED]: isExpanded,
53
+ [SELECTED]: selectionStatus
54
+ } = row;
55
+ const handleRowClick = react.useCallback(
56
+ (evt) => {
57
+ const rangeSelect = evt.shiftKey;
58
+ const keepExistingSelection = evt.ctrlKey || evt.metaKey;
59
+ onClick?.(evt, row, rangeSelect, keepExistingSelection);
60
+ },
61
+ [onClick, row]
62
+ );
63
+ const { True, First, Last } = vuuUtils.RowSelected;
64
+ const className = cx(
65
+ classBase,
66
+ classNameProp,
67
+ classNameGenerator?.(row, columnMap),
68
+ {
69
+ [`${classBase}-even`]: zebraStripes && rowIndex % 2 === 0,
70
+ [`${classBase}-expanded`]: isExpanded,
71
+ [`${classBase}-highlighted`]: highlighted,
72
+ [`${classBase}-selected`]: selectionStatus & True,
73
+ [`${classBase}-selectedStart`]: selectionStatus & First,
74
+ [`${classBase}-selectedEnd`]: selectionStatus & Last
75
+ }
76
+ );
77
+ const style = { transform: `translate3d(0px, ${offset}px, 0px)` };
78
+ const handleGroupCellClick = react.useCallback(
79
+ (evt, column) => {
80
+ if (vuuUtils.isGroupColumn(column) || vuuUtils.isJsonGroup(column, row, columnMap)) {
81
+ evt.stopPropagation();
82
+ onToggleGroup?.(row, column);
83
+ }
84
+ },
85
+ [columnMap, onToggleGroup, row]
86
+ );
87
+ return /* @__PURE__ */ jsxRuntime.jsxs(
88
+ "div",
89
+ {
90
+ ...htmlAttributes,
91
+ role: "row",
92
+ className,
93
+ onClick: handleRowClick,
94
+ style,
95
+ children: [
96
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${classBase}-selectionDecorator vuuStickyLeft` }),
97
+ virtualColSpan > 0 ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "vuuTableCell", style: { width: virtualColSpan } }) : null,
98
+ columns.filter(vuuUtils.isNotHidden).map((column) => {
99
+ const isGroup = vuuUtils.isGroupColumn(column);
100
+ const isJsonCell = vuuUtils.isJsonColumn(column);
101
+ const Cell = isGroup ? TableGroupCell.TableGroupCell : TableCell.TableCell;
102
+ return /* @__PURE__ */ jsxRuntime.jsx(
103
+ Cell,
104
+ {
105
+ column,
106
+ columnMap,
107
+ onClick: isGroup || isJsonCell ? handleGroupCellClick : void 0,
108
+ onDataEdited,
109
+ row
110
+ },
111
+ column.name
112
+ );
113
+ }),
114
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${classBase}-selectionDecorator vuuStickyRight` })
115
+ ]
116
+ }
117
+ );
118
+ }
119
+ );
120
+ Row.displayName = "Row";
121
+
122
+ exports.Row = Row;
123
+ exports.RowProxy = RowProxy;
124
+ //# sourceMappingURL=Row.js.map
package/cjs/Row.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Row.js","sources":["../src/Row.tsx"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport {\n DataCellEditHandler,\n RuntimeColumnDescriptor,\n TableRowClickHandlerInternal,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n ColumnMap,\n isGroupColumn,\n isJsonColumn,\n isJsonGroup,\n isNotHidden,\n metadataKeys,\n RowClassNameGenerator,\n RowSelected,\n} from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n CSSProperties,\n forwardRef,\n memo,\n MouseEvent,\n useCallback,\n} from \"react\";\nimport { TableCell, TableGroupCell } from \"./table-cell\";\n\nimport rowCss from \"./Row.css\";\n\nexport interface RowProps {\n className?: string;\n classNameGenerator?: RowClassNameGenerator;\n columnMap: ColumnMap;\n columns: RuntimeColumnDescriptor[];\n highlighted?: boolean;\n row: DataSourceRow;\n offset: number;\n onClick?: TableRowClickHandlerInternal;\n onDataEdited?: DataCellEditHandler;\n onToggleGroup?: (row: DataSourceRow, column: RuntimeColumnDescriptor) => void;\n style?: CSSProperties;\n virtualColSpan?: number;\n zebraStripes?: boolean;\n}\n\nconst { IDX, IS_EXPANDED, SELECTED } = metadataKeys;\nconst classBase = \"vuuTableRow\";\n\n// A dummy Table Row rendered once and not visible. We measure this to\n// determine height of Row(s) and monitor it for size changes (in\n// case of runtime density switch). This allows ListItem height to\n// be controlled purely through CSS.\nexport const RowProxy = forwardRef<HTMLDivElement, { height?: number }>(\n function RowProxy({ height }, forwardedRef) {\n return (\n <div\n aria-hidden\n className={cx(classBase, `${classBase}-proxy`)}\n ref={forwardedRef}\n style={{ height }}\n />\n );\n }\n);\n\n// export const Row = memo(\nexport const Row = memo(\n ({\n className: classNameProp,\n classNameGenerator,\n columnMap,\n columns,\n highlighted,\n row,\n offset,\n onClick,\n onDataEdited,\n onToggleGroup,\n virtualColSpan = 0,\n zebraStripes = false,\n ...htmlAttributes\n }: RowProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table-row\",\n css: rowCss,\n window: targetWindow,\n });\n\n const {\n [IDX]: rowIndex,\n [IS_EXPANDED]: isExpanded,\n [SELECTED]: selectionStatus,\n } = row;\n\n const handleRowClick = useCallback(\n (evt: MouseEvent<HTMLDivElement>) => {\n const rangeSelect = evt.shiftKey;\n const keepExistingSelection = evt.ctrlKey || evt.metaKey; /* mac only */\n onClick?.(evt, row, rangeSelect, keepExistingSelection);\n },\n [onClick, row]\n );\n\n const { True, First, Last } = RowSelected;\n\n const className = cx(\n classBase,\n classNameProp,\n classNameGenerator?.(row, columnMap),\n {\n [`${classBase}-even`]: zebraStripes && rowIndex % 2 === 0,\n [`${classBase}-expanded`]: isExpanded,\n [`${classBase}-highlighted`]: highlighted,\n [`${classBase}-selected`]: selectionStatus & True,\n [`${classBase}-selectedStart`]: selectionStatus & First,\n [`${classBase}-selectedEnd`]: selectionStatus & Last,\n }\n );\n\n const style = { transform: `translate3d(0px, ${offset}px, 0px)` };\n\n const handleGroupCellClick = useCallback(\n (evt: MouseEvent, column: RuntimeColumnDescriptor) => {\n if (isGroupColumn(column) || isJsonGroup(column, row, columnMap)) {\n evt.stopPropagation();\n onToggleGroup?.(row, column);\n }\n },\n [columnMap, onToggleGroup, row]\n );\n\n return (\n <div\n {...htmlAttributes}\n role=\"row\"\n className={className}\n onClick={handleRowClick}\n style={style}\n >\n <span className={`${classBase}-selectionDecorator vuuStickyLeft`} />\n {virtualColSpan > 0 ? (\n <div className=\"vuuTableCell\" style={{ width: virtualColSpan }} />\n ) : null}\n {columns.filter(isNotHidden).map((column) => {\n const isGroup = isGroupColumn(column);\n const isJsonCell = isJsonColumn(column);\n const Cell = isGroup ? TableGroupCell : TableCell;\n\n return (\n <Cell\n column={column}\n columnMap={columnMap}\n key={column.name}\n onClick={isGroup || isJsonCell ? handleGroupCellClick : undefined}\n onDataEdited={onDataEdited}\n row={row}\n />\n );\n })}\n <span className={`${classBase}-selectionDecorator vuuStickyRight`} />\n </div>\n );\n }\n);\nRow.displayName = \"Row\";\n"],"names":["metadataKeys","forwardRef","RowProxy","jsx","memo","useWindow","useComponentCssInjection","rowCss","useCallback","RowSelected","isGroupColumn","isJsonGroup","jsxs","isNotHidden","isJsonColumn","TableGroupCell","TableCell"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var tableCss = "\n.vuuTable {\n --vuu-table-cell-outlineWidth: 1px;\n --table-height: var(--measured-px-height);\n --table-width: var(--measured-px-width);\n --vuu-table-next-selection-bookend-width: 4px;\n --vuu-table-embedded-control-height: calc(var(--row-height) - 3px);\n --columnResizer-color: transparent;\n --row-height: var(--row-height-prop, var(--vuu-table-row-height, var(--salt-size-base)));\n\n --cell-borderColor: transparent;\n --row-borderColor: var(--row-background);\n --table-background: var(--salt-container-primary-background);\n\n background: var(--table-background);\n font-family: var(--vuuTable-fontFamily,var(--salt-typography-fontFamily, sans-serif));\n font-size: var(--vuuTable-fontSize,var(--salt-text-fontSize, 12px));\n position: relative;\n user-select: none;\n}\n\n.vuuTable-zebra {\n --row-background-even: var(--table-background);\n}\n\n.vuuTable-colLines {\n --cell-borderColor: var(\n \n );\n}\n\n.vuuTable-rowLines {\n --row-borderColor: var(--salt-separable-tertiary-borderColor);\n}\n\n.vuuTable-scrollbarContainer {\n border-bottom: none !important;\n border-top: none !important;\n border-left: solid 1px var(--salt-container-primary-borderColor);\n /* a top border */\n /** creates a border to top od scrollbar */\n /* box-shadow: 0px -1px 0px 0px var(--salt-container-primary-borderColor); */\n height: var(--viewport-body-height);\n left: 0px;\n overflow: auto;\n position: absolute;\n top: var(--total-header-height);\n width: var(--table-width);\n\n\n}\n\n.vuuTable-scrollbarContainer::-webkit-scrollbar {\n border: none;\n width: 10px;\n}\n\n.vuuTable-scrollbarContainer::-webkit-scrollbar:horizontal {\n height: 10px;\n}\n\n\n.vuuTable-scrollbarContainer::-webkit-scrollbar-track {\n background-color: white;\n}\n.vuuTable-scrollbarContainer::-webkit-scrollbar-thumb {\n background-clip: padding-box;\n border-radius: 10px;\n border: 2px solid rgba(0, 0, 0, 0);\n background-color: var(--vuu-color-gray-30);\n}\n\n.vuuTable-scrollbarContent {\n height: calc(var(--content-height) + var(--horizontal-scrollbar-height));\n position: absolute;\n width: var(--content-width);\n}\n\n.vuuTable-contentContainer {\n background: var(--table-background);\n height: calc(var(--table-height) - var(--horizontal-scrollbar-height));\n position: relative;\n overflow: auto;\n overscroll-behavior: none;\n width: calc(var(--table-width) - var(--vertical-scrollbar-width));\n}\n\n.vuuTable-contentContainer::-webkit-scrollbar {\n display: none;\n}\n\n \n.vuuTable-table {\n position: absolute;\n top: 0;\n left: 0;\n table-layout: fixed;\n width: var(--content-width);\n margin: 0;\n border: none;\n border-collapse: separate;\n border-spacing: 0;\n}\n\n.vuuTable-body {\n height: var(--content-height);\n position: relative;\n}\n\n.vuuPinLeft, .vuuPinRight {\n background-color: inherit;\n position: sticky;\n z-index: 1;\n}\n\n.vuuTable-col-headings {\n background-color: var(--vuuTableColHeadings-background, var(--table-background));\n padding: 0 var(--vuu-table-next-selection-bookend-width, 0);\n\n position: sticky;\n top: 0;\n /* ensure header row sits atop everything else when scrolling down */\n z-index: 1;\n}\n\n.vuuTable-col-headings:hover {\n --columnResizer-height: var(--header-height);\n --columnResizer-color: var(--salt-separable-tertiary-borderColor);\n}\n\n .vuuTable-col-headers {\n background-color: var(--vuuTableColHeadings-background, var(--vuuTableColHeadings-background));\n color: var(--salt-content-secondary-foreground);\n white-space: nowrap;\n }\n\n\n .sizer-cell {\n border: none !important;\n height: 0px;\n }\n \n .vuuDraggable-vuuTable {\n --header-height: 25px;\n --vuuTableHeaderCell-background: var(--salt-container-secondary-background);\n }\n.vuuDraggable-vuuTable {\n --row-height: 25px;\n} \n\n\n";
4
+
5
+ module.exports = tableCss;
6
+ //# sourceMappingURL=Table.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
package/cjs/Table.js ADDED
@@ -0,0 +1,285 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var vuuPopups = require('@vuu-ui/vuu-popups');
5
+ var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
6
+ var vuuUtils = require('@vuu-ui/vuu-utils');
7
+ var core = require('@salt-ds/core');
8
+ var styles = require('@salt-ds/styles');
9
+ var window = require('@salt-ds/window');
10
+ var cx = require('clsx');
11
+ var react = require('react');
12
+ var Row = require('./Row.js');
13
+ var TableHeader = require('./table-header/TableHeader.js');
14
+ var useTable = require('./useTable.js');
15
+ var useRowHeight = require('./useRowHeight.js');
16
+ var Table$1 = require('./Table.css.js');
17
+
18
+ const classBase = "vuuTable";
19
+ const { IDX, RENDER_IDX } = vuuUtils.metadataKeys;
20
+ const TableCore = ({
21
+ Row: Row$1 = Row.Row,
22
+ allowDragDrop,
23
+ availableColumns,
24
+ config,
25
+ containerRef,
26
+ dataSource,
27
+ disableFocus = false,
28
+ highlightedIndex: highlightedIndexProp,
29
+ id: idProp,
30
+ navigationStyle = "cell",
31
+ onAvailableColumnsChange,
32
+ onConfigChange,
33
+ onDragStart,
34
+ onDrop,
35
+ onFeatureInvocation,
36
+ onHighlight,
37
+ onRowClick: onRowClickProp,
38
+ onSelect,
39
+ onSelectionChange,
40
+ renderBufferSize = 5,
41
+ rowHeight,
42
+ scrollingApiRef,
43
+ selectionModel = "extended",
44
+ showColumnHeaders = true,
45
+ showColumnHeaderMenus = true,
46
+ headerHeight = showColumnHeaders ? rowHeight * 1.25 : 0,
47
+ size
48
+ }) => {
49
+ const targetWindow = window.useWindow();
50
+ styles.useComponentCssInjection({
51
+ testId: "vuu-table",
52
+ css: Table$1,
53
+ window: targetWindow
54
+ });
55
+ const id = vuuUtils.useId(idProp);
56
+ const {
57
+ columnMap,
58
+ columns,
59
+ data,
60
+ draggableRow,
61
+ getRowOffset,
62
+ handleContextMenuAction,
63
+ headings,
64
+ highlightedIndex,
65
+ menuBuilder,
66
+ onDataEdited,
67
+ onMoveColumn,
68
+ onMoveGroupColumn,
69
+ onRemoveGroupColumn,
70
+ onResizeColumn,
71
+ onRowClick,
72
+ onSortColumn,
73
+ onToggleGroup,
74
+ rowClassNameGenerator,
75
+ scrollProps,
76
+ tableAttributes,
77
+ tableConfig,
78
+ viewportMeasurements,
79
+ ...tableProps
80
+ } = useTable.useTable({
81
+ allowDragDrop,
82
+ availableColumns,
83
+ config,
84
+ containerRef,
85
+ dataSource,
86
+ disableFocus,
87
+ headerHeight,
88
+ highlightedIndex: highlightedIndexProp,
89
+ id,
90
+ navigationStyle,
91
+ onAvailableColumnsChange,
92
+ onConfigChange,
93
+ onDragStart,
94
+ onDrop,
95
+ onFeatureInvocation,
96
+ onHighlight,
97
+ onRowClick: onRowClickProp,
98
+ onSelect,
99
+ onSelectionChange,
100
+ renderBufferSize: Math.max(5, renderBufferSize),
101
+ rowHeight,
102
+ scrollingApiRef,
103
+ selectionModel,
104
+ size
105
+ });
106
+ const contentContainerClassName = cx(`${classBase}-contentContainer`, {
107
+ [`${classBase}-colLines`]: tableAttributes.columnSeparators,
108
+ [`${classBase}-rowLines`]: tableAttributes.rowSeparators,
109
+ [`${classBase}-zebra`]: tableAttributes.zebraStripes
110
+ });
111
+ const cssVariables = {
112
+ "--content-height": `${viewportMeasurements.contentHeight}px`,
113
+ "--content-width": `${viewportMeasurements.contentWidth}px`,
114
+ "--horizontal-scrollbar-height": `${viewportMeasurements.horizontalScrollbarHeight}px`,
115
+ "--pinned-width-left": `${viewportMeasurements.pinnedWidthLeft}px`,
116
+ "--pinned-width-right": `${viewportMeasurements.pinnedWidthRight}px`,
117
+ "--header-height": `${headerHeight}px`,
118
+ "--row-height-prop": `${rowHeight}px`,
119
+ "--total-header-height": `${viewportMeasurements.totalHeaderHeight}px`,
120
+ "--vertical-scrollbar-width": `${viewportMeasurements.verticalScrollbarWidth}px`,
121
+ "--viewport-body-height": `${viewportMeasurements.viewportBodyHeight}px`
122
+ };
123
+ return /* @__PURE__ */ jsxRuntime.jsxs(
124
+ vuuPopups.ContextMenuProvider,
125
+ {
126
+ menuActionHandler: handleContextMenuAction,
127
+ menuBuilder,
128
+ children: [
129
+ /* @__PURE__ */ jsxRuntime.jsx(
130
+ "div",
131
+ {
132
+ className: `${classBase}-scrollbarContainer`,
133
+ ref: scrollProps.scrollbarContainerRef,
134
+ style: cssVariables,
135
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-scrollbarContent` })
136
+ }
137
+ ),
138
+ /* @__PURE__ */ jsxRuntime.jsx(
139
+ "div",
140
+ {
141
+ className: contentContainerClassName,
142
+ ref: scrollProps.contentContainerRef,
143
+ style: cssVariables,
144
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
145
+ "div",
146
+ {
147
+ ...tableProps,
148
+ className: `${classBase}-table`,
149
+ role: "table",
150
+ tabIndex: disableFocus ? void 0 : -1,
151
+ children: [
152
+ showColumnHeaders ? /* @__PURE__ */ jsxRuntime.jsx(
153
+ TableHeader.TableHeader,
154
+ {
155
+ columns: scrollProps.columnsWithinViewport,
156
+ headings,
157
+ onMoveColumn,
158
+ onMoveGroupColumn,
159
+ onRemoveGroupColumn,
160
+ onResizeColumn,
161
+ onSortColumn,
162
+ showColumnHeaderMenus,
163
+ tableConfig,
164
+ tableId: id,
165
+ virtualColSpan: scrollProps.virtualColSpan
166
+ }
167
+ ) : null,
168
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${classBase}-body`, children: data.map((data2) => /* @__PURE__ */ jsxRuntime.jsx(
169
+ Row$1,
170
+ {
171
+ "aria-rowindex": data2[0] + 1,
172
+ classNameGenerator: rowClassNameGenerator,
173
+ columnMap,
174
+ columns: scrollProps.columnsWithinViewport,
175
+ highlighted: highlightedIndex === data2[IDX],
176
+ onClick: onRowClick,
177
+ onDataEdited,
178
+ row: data2,
179
+ offset: getRowOffset(data2),
180
+ onToggleGroup,
181
+ virtualColSpan: scrollProps.virtualColSpan,
182
+ zebraStripes: tableAttributes.zebraStripes
183
+ },
184
+ data2[RENDER_IDX]
185
+ )) })
186
+ ]
187
+ }
188
+ )
189
+ }
190
+ ),
191
+ draggableRow
192
+ ]
193
+ }
194
+ );
195
+ };
196
+ const Table = react.forwardRef(function TableNext({
197
+ Row: Row$1,
198
+ allowDragDrop,
199
+ availableColumns,
200
+ className: classNameProp,
201
+ config,
202
+ dataSource,
203
+ disableFocus,
204
+ highlightedIndex,
205
+ id,
206
+ navigationStyle,
207
+ onAvailableColumnsChange,
208
+ onConfigChange,
209
+ onDragStart,
210
+ onDrop,
211
+ onFeatureInvocation,
212
+ onHighlight,
213
+ onRowClick,
214
+ onSelect,
215
+ onSelectionChange,
216
+ renderBufferSize,
217
+ rowHeight: rowHeightProp,
218
+ scrollingApiRef,
219
+ selectionModel,
220
+ showColumnHeaders,
221
+ showColumnHeaderMenus,
222
+ headerHeight,
223
+ style: styleProp,
224
+ ...htmlAttributes
225
+ }, forwardedRef) {
226
+ const containerRef = react.useRef(null);
227
+ const [size, setSize] = react.useState();
228
+ const { rowHeight, rowRef } = useRowHeight.useRowHeight({ rowHeight: rowHeightProp });
229
+ if (config === void 0) {
230
+ throw Error(
231
+ "vuu Table requires config prop. Minimum config is list of Column Descriptors"
232
+ );
233
+ }
234
+ if (dataSource === void 0) {
235
+ throw Error("vuu Table requires dataSource prop");
236
+ }
237
+ return /* @__PURE__ */ jsxRuntime.jsxs(
238
+ vuuUiControls.MeasuredContainer,
239
+ {
240
+ ...htmlAttributes,
241
+ className: cx(classBase, classNameProp),
242
+ id,
243
+ onResize: setSize,
244
+ ref: core.useForkRef(containerRef, forwardedRef),
245
+ children: [
246
+ /* @__PURE__ */ jsxRuntime.jsx(Row.RowProxy, { ref: rowRef, height: rowHeightProp }),
247
+ size && rowHeight ? /* @__PURE__ */ jsxRuntime.jsx(
248
+ TableCore,
249
+ {
250
+ Row: Row$1,
251
+ allowDragDrop,
252
+ availableColumns,
253
+ config,
254
+ containerRef,
255
+ dataSource,
256
+ disableFocus,
257
+ headerHeight,
258
+ highlightedIndex,
259
+ id,
260
+ navigationStyle,
261
+ onAvailableColumnsChange,
262
+ onConfigChange,
263
+ onDragStart,
264
+ onDrop,
265
+ onFeatureInvocation,
266
+ onHighlight,
267
+ onRowClick,
268
+ onSelect,
269
+ onSelectionChange,
270
+ renderBufferSize,
271
+ rowHeight,
272
+ scrollingApiRef,
273
+ selectionModel,
274
+ showColumnHeaders,
275
+ showColumnHeaderMenus,
276
+ size
277
+ }
278
+ ) : null
279
+ ]
280
+ }
281
+ );
282
+ });
283
+
284
+ exports.Table = Table;
285
+ //# sourceMappingURL=Table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Table.js","sources":["../src/Table.tsx"],"sourcesContent":["import {\n DataSource,\n SchemaColumn,\n SelectionChangeHandler,\n VuuFeatureInvocationMessage,\n} from \"@vuu-ui/vuu-data-types\";\nimport { ContextMenuProvider } from \"@vuu-ui/vuu-popups\";\nimport {\n TableConfig,\n TableConfigChangeHandler,\n TableRowClickHandler,\n TableRowSelectHandler,\n TableSelectionModel,\n} from \"@vuu-ui/vuu-table-types\";\nimport {\n DragStartHandler,\n dragStrategy,\n MeasuredContainer,\n MeasuredContainerProps,\n MeasuredSize,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport { metadataKeys, useId } from \"@vuu-ui/vuu-utils\";\nimport { useForkRef } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n CSSProperties,\n FC,\n ForwardedRef,\n forwardRef,\n RefObject,\n useRef,\n useState,\n} from \"react\";\nimport { Row as DefaultRow, RowProps, RowProxy } from \"./Row\";\nimport { TableHeader } from \"./table-header/TableHeader\";\nimport { useTable } from \"./useTable\";\nimport type { DragDropState } from \"@vuu-ui/vuu-ui-controls\";\nimport { ScrollingAPI } from \"./useTableScroll\";\nimport { useRowHeight } from \"./useRowHeight\";\n\nimport tableCss from \"./Table.css\";\n\nconst classBase = \"vuuTable\";\n\nconst { IDX, RENDER_IDX } = metadataKeys;\n\nexport type TableNavigationStyle = \"none\" | \"cell\" | \"row\";\n\nexport interface TableProps\n extends Omit<MeasuredContainerProps, \"onDragStart\" | \"onDrop\" | \"onSelect\"> {\n Row?: FC<RowProps>;\n allowConfigEditing?: boolean;\n allowDragDrop?: boolean | dragStrategy;\n /**\n * required if a fully featured column picker is to be available\n */\n availableColumns?: SchemaColumn[];\n /**\n * Provide configuration settings for Table. At minimun, column\n * descriptors must be provided.\n */\n config: TableConfig;\n dataSource: DataSource;\n disableFocus?: boolean;\n /**\n * Pixel height of headers. If specified here, this will take precedence over CSS\n * values and Table will not respond to density changes. Default value is 125% of\n * rowHeight, whether set vis rowHeight prop or CSS.\n */\n headerHeight?: number;\n /**\n * Defined how focus navigation within data cells will be handled by table.\n * Default is cell.\n */\n highlightedIndex?: number;\n navigationStyle?: TableNavigationStyle;\n /**\n * required if a fully featured column picker is to be available.\n * Available columns can be changed by the addition or removal of\n * one or more calculated columns.\n */\n onAvailableColumnsChange?: (columns: SchemaColumn[]) => void;\n /**\n * This callback will be invoked any time a config attribute of TableConfig\n * is changed. By persisting this value and providing it to the Table as a\n * prop, table state can be persisted across sessions.\n */\n onConfigChange?: TableConfigChangeHandler;\n onDragStart?: DragStartHandler;\n onDrop?: (dragDropState: DragDropState) => void;\n /**\n * When a Vuu feature e.g. context menu action, has been invoked, the Vuu server\n * response must be handled. This callback provides that response.\n */\n onFeatureInvocation?: (message: VuuFeatureInvocationMessage) => void;\n\n onHighlight?: (idx: number) => void;\n /**\n * callback invoked when user 'clicks' a table row. CLick triggered either\n * via mouse click or keyboard (default ENTER);\n */\n onRowClick?: TableRowClickHandler;\n onSelect?: TableRowSelectHandler;\n onSelectionChange?: SelectionChangeHandler;\n renderBufferSize?: number;\n /**\n * Pixel height of rows. If specified here, this will take precedence over CSS\n * values and Table will not respond to density changes.\n */\n rowHeight?: number;\n /**\n * imperative API for scrolling table\n */\n scrollingApiRef?: ForwardedRef<ScrollingAPI>;\n\n /**\n * Selection Bookends style the left and right edge of a selection block.\n * They are optional, value defaults to zero.\n * TODO this should just live in CSS\n */\n selectionBookendWidth?: number;\n selectionModel?: TableSelectionModel;\n /**\n * if false, table rendered without headers. Useful when table is being included in a\n * composite component.\n */\n showColumnHeaders?: boolean;\n /**\n * if false, column headers will not display menu icon. Menu items are still available\n * from contexct menu\n */\n showColumnHeaderMenus?: boolean;\n}\n\nconst TableCore = ({\n Row = DefaultRow,\n allowDragDrop,\n availableColumns,\n config,\n containerRef,\n dataSource,\n disableFocus = false,\n highlightedIndex: highlightedIndexProp,\n id: idProp,\n navigationStyle = \"cell\",\n onAvailableColumnsChange,\n onConfigChange,\n onDragStart,\n onDrop,\n onFeatureInvocation,\n onHighlight,\n onRowClick: onRowClickProp,\n onSelect,\n onSelectionChange,\n renderBufferSize = 5,\n rowHeight,\n scrollingApiRef,\n selectionModel = \"extended\",\n showColumnHeaders = true,\n showColumnHeaderMenus = true,\n headerHeight = showColumnHeaders ? rowHeight * 1.25 : 0,\n size,\n}: Omit<TableProps, \"rowHeight\"> & {\n containerRef: RefObject<HTMLDivElement>;\n rowHeight: number;\n size: MeasuredSize;\n}) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-table\",\n css: tableCss,\n window: targetWindow,\n });\n\n const id = useId(idProp);\n const {\n columnMap,\n columns,\n data,\n draggableRow,\n getRowOffset,\n handleContextMenuAction,\n headings,\n highlightedIndex,\n menuBuilder,\n onDataEdited,\n onMoveColumn,\n onMoveGroupColumn,\n onRemoveGroupColumn,\n onResizeColumn,\n onRowClick,\n onSortColumn,\n onToggleGroup,\n rowClassNameGenerator,\n scrollProps,\n tableAttributes,\n tableConfig,\n viewportMeasurements,\n ...tableProps\n } = useTable({\n allowDragDrop,\n availableColumns,\n config,\n containerRef,\n dataSource,\n disableFocus,\n headerHeight,\n highlightedIndex: highlightedIndexProp,\n id,\n navigationStyle,\n onAvailableColumnsChange,\n onConfigChange,\n onDragStart,\n onDrop,\n onFeatureInvocation,\n onHighlight,\n onRowClick: onRowClickProp,\n onSelect,\n onSelectionChange,\n renderBufferSize: Math.max(5, renderBufferSize),\n rowHeight,\n scrollingApiRef,\n selectionModel,\n size,\n });\n\n const contentContainerClassName = cx(`${classBase}-contentContainer`, {\n [`${classBase}-colLines`]: tableAttributes.columnSeparators,\n [`${classBase}-rowLines`]: tableAttributes.rowSeparators,\n [`${classBase}-zebra`]: tableAttributes.zebraStripes,\n });\n\n const cssVariables = {\n \"--content-height\": `${viewportMeasurements.contentHeight}px`,\n \"--content-width\": `${viewportMeasurements.contentWidth}px`,\n \"--horizontal-scrollbar-height\": `${viewportMeasurements.horizontalScrollbarHeight}px`,\n \"--pinned-width-left\": `${viewportMeasurements.pinnedWidthLeft}px`,\n \"--pinned-width-right\": `${viewportMeasurements.pinnedWidthRight}px`,\n \"--header-height\": `${headerHeight}px`,\n \"--row-height-prop\": `${rowHeight}px`,\n \"--total-header-height\": `${viewportMeasurements.totalHeaderHeight}px`,\n \"--vertical-scrollbar-width\": `${viewportMeasurements.verticalScrollbarWidth}px`,\n \"--viewport-body-height\": `${viewportMeasurements.viewportBodyHeight}px`,\n } as CSSProperties;\n\n return (\n <ContextMenuProvider\n menuActionHandler={handleContextMenuAction}\n menuBuilder={menuBuilder}\n >\n <div\n className={`${classBase}-scrollbarContainer`}\n ref={scrollProps.scrollbarContainerRef}\n style={cssVariables}\n >\n <div className={`${classBase}-scrollbarContent`} />\n </div>\n <div\n className={contentContainerClassName}\n ref={scrollProps.contentContainerRef}\n style={cssVariables}\n >\n <div\n {...tableProps}\n className={`${classBase}-table`}\n role=\"table\"\n tabIndex={disableFocus ? undefined : -1}\n >\n {showColumnHeaders ? (\n <TableHeader\n columns={scrollProps.columnsWithinViewport}\n headings={headings}\n onMoveColumn={onMoveColumn}\n onMoveGroupColumn={onMoveGroupColumn}\n onRemoveGroupColumn={onRemoveGroupColumn}\n onResizeColumn={onResizeColumn}\n onSortColumn={onSortColumn}\n showColumnHeaderMenus={showColumnHeaderMenus}\n tableConfig={tableConfig}\n tableId={id}\n virtualColSpan={scrollProps.virtualColSpan}\n />\n ) : null}\n <div className={`${classBase}-body`}>\n {data.map((data) => (\n <Row\n aria-rowindex={data[0] + 1}\n classNameGenerator={rowClassNameGenerator}\n columnMap={columnMap}\n columns={scrollProps.columnsWithinViewport}\n highlighted={highlightedIndex === data[IDX]}\n key={data[RENDER_IDX]}\n onClick={onRowClick}\n onDataEdited={onDataEdited}\n row={data}\n offset={getRowOffset(data)}\n onToggleGroup={onToggleGroup}\n virtualColSpan={scrollProps.virtualColSpan}\n zebraStripes={tableAttributes.zebraStripes}\n />\n ))}\n </div>\n </div>\n </div>\n {draggableRow}\n </ContextMenuProvider>\n );\n};\n\nexport const Table = forwardRef(function TableNext(\n {\n Row,\n allowDragDrop,\n availableColumns,\n className: classNameProp,\n config,\n dataSource,\n disableFocus,\n highlightedIndex,\n id,\n navigationStyle,\n onAvailableColumnsChange,\n onConfigChange,\n onDragStart,\n onDrop,\n onFeatureInvocation,\n onHighlight,\n onRowClick,\n onSelect,\n onSelectionChange,\n renderBufferSize,\n rowHeight: rowHeightProp,\n scrollingApiRef,\n selectionModel,\n showColumnHeaders,\n showColumnHeaderMenus,\n headerHeight,\n style: styleProp,\n ...htmlAttributes\n }: TableProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const containerRef = useRef<HTMLDivElement>(null);\n\n const [size, setSize] = useState<MeasuredSize>();\n\n const { rowHeight, rowRef } = useRowHeight({ rowHeight: rowHeightProp });\n\n if (config === undefined) {\n throw Error(\n \"vuu Table requires config prop. Minimum config is list of Column Descriptors\"\n );\n }\n if (dataSource === undefined) {\n throw Error(\"vuu Table requires dataSource prop\");\n }\n\n return (\n <MeasuredContainer\n {...htmlAttributes}\n className={cx(classBase, classNameProp)}\n id={id}\n onResize={setSize}\n ref={useForkRef(containerRef, forwardedRef)}\n >\n <RowProxy ref={rowRef} height={rowHeightProp} />\n\n {size && rowHeight ? (\n <TableCore\n Row={Row}\n allowDragDrop={allowDragDrop}\n availableColumns={availableColumns}\n config={config}\n containerRef={containerRef}\n dataSource={dataSource}\n disableFocus={disableFocus}\n headerHeight={headerHeight}\n highlightedIndex={highlightedIndex}\n id={id}\n navigationStyle={navigationStyle}\n onAvailableColumnsChange={onAvailableColumnsChange}\n onConfigChange={onConfigChange}\n onDragStart={onDragStart}\n onDrop={onDrop}\n onFeatureInvocation={onFeatureInvocation}\n onHighlight={onHighlight}\n onRowClick={onRowClick}\n onSelect={onSelect}\n onSelectionChange={onSelectionChange}\n renderBufferSize={renderBufferSize}\n rowHeight={rowHeight}\n scrollingApiRef={scrollingApiRef}\n selectionModel={selectionModel}\n showColumnHeaders={showColumnHeaders}\n showColumnHeaderMenus={showColumnHeaderMenus}\n size={size}\n />\n ) : null}\n </MeasuredContainer>\n );\n});\n"],"names":["metadataKeys","Row","DefaultRow","useWindow","useComponentCssInjection","tableCss","useId","useTable","jsxs","ContextMenuProvider","jsx","TableHeader","data","forwardRef","useRef","useState","useRowHeight","MeasuredContainer","useForkRef","RowProxy"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var checkboxCss = ".vuuTableCell {\n .vuuCheckboxIcon {\n margin-top: calc(var(--row-height) / 2 - 6px ); \n }\n}";
4
+
5
+ module.exports = checkboxCss;
6
+ //# sourceMappingURL=CheckboxCell.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckboxCell.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,42 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+ var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
6
+ var core = require('@salt-ds/core');
7
+ var vuuUtils = require('@vuu-ui/vuu-utils');
8
+ var styles = require('@salt-ds/styles');
9
+ var window = require('@salt-ds/window');
10
+ var CheckboxCell$1 = require('./CheckboxCell.css.js');
11
+
12
+ const CheckboxCell = react.memo(
13
+ ({ column, columnMap, onCommit = vuuUiControls.WarnCommit, row }) => {
14
+ const targetWindow = window.useWindow();
15
+ styles.useComponentCssInjection({
16
+ testId: "vuu-checkbox-cell",
17
+ css: CheckboxCell$1,
18
+ window: targetWindow
19
+ });
20
+ const dataIdx = columnMap[column.name];
21
+ const isChecked = !!row[dataIdx];
22
+ const handleCommit = react.useCallback(
23
+ (value) => async (evt) => {
24
+ const res = await onCommit(value);
25
+ if (res === true) {
26
+ vuuUtils.dispatchCustomEvent(evt.target, "vuu-commit");
27
+ }
28
+ return res;
29
+ },
30
+ [onCommit]
31
+ );
32
+ return column.editable ? /* @__PURE__ */ jsxRuntime.jsx(core.Checkbox, { checked: isChecked, onClick: handleCommit(!isChecked) }) : /* @__PURE__ */ jsxRuntime.jsx(vuuUiControls.CheckboxIcon, { checked: isChecked, disabled: true });
33
+ },
34
+ vuuUtils.dataColumnAndKeyUnchanged
35
+ );
36
+ CheckboxCell.displayName = "CheckboxCell";
37
+ vuuUtils.registerComponent("checkbox-cell", CheckboxCell, "cell-renderer", {
38
+ serverDataType: "boolean"
39
+ });
40
+
41
+ exports.CheckboxCell = CheckboxCell;
42
+ //# sourceMappingURL=CheckboxCell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckboxCell.js","sources":["../../../src/cell-renderers/checkbox-cell/CheckboxCell.tsx"],"sourcesContent":["import React, { memo, useCallback } from \"react\";\nimport { TableCellRendererProps } from \"@vuu-ui/vuu-table-types\";\nimport { CheckboxIcon, WarnCommit } from \"@vuu-ui/vuu-ui-controls\";\nimport { Checkbox } from \"@salt-ds/core\";\nimport {\n dataColumnAndKeyUnchanged,\n dispatchCustomEvent,\n registerComponent,\n} from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport checkboxCss from \"./CheckboxCell.css\";\n\nexport const CheckboxCell: React.FC<TableCellRendererProps> = memo(\n ({ column, columnMap, onCommit = WarnCommit, row }) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-checkbox-cell\",\n css: checkboxCss,\n window: targetWindow,\n });\n\n const dataIdx = columnMap[column.name];\n const isChecked = !!row[dataIdx];\n\n const handleCommit = useCallback(\n (value) => async (evt: React.MouseEvent) => {\n const res = await onCommit(value);\n if (res === true) {\n dispatchCustomEvent(evt.target as HTMLElement, \"vuu-commit\");\n }\n return res;\n },\n [onCommit]\n );\n\n return column.editable ? (\n <Checkbox checked={isChecked} onClick={handleCommit(!isChecked)} />\n ) : (\n <CheckboxIcon checked={isChecked} disabled={true} />\n );\n },\n dataColumnAndKeyUnchanged\n);\nCheckboxCell.displayName = \"CheckboxCell\";\n\nregisterComponent(\"checkbox-cell\", CheckboxCell, \"cell-renderer\", {\n serverDataType: \"boolean\",\n});\n"],"names":["memo","WarnCommit","useWindow","useComponentCssInjection","checkboxCss","useCallback","dispatchCustomEvent","jsx","Checkbox","CheckboxIcon","dataColumnAndKeyUnchanged","registerComponent"],"mappings":";;;;;;;;;;;AAcO,MAAM,YAAiD,GAAAA,UAAA;AAAA,EAC5D,CAAC,EAAE,MAAA,EAAQ,WAAW,QAAW,GAAAC,wBAAA,EAAY,KAAU,KAAA;AACrD,IAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,mBAAA;AAAA,MACR,GAAK,EAAAC,cAAA;AAAA,MACL,MAAQ,EAAA,YAAA;AAAA,KACT,CAAA,CAAA;AAED,IAAM,MAAA,OAAA,GAAU,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AACrC,IAAA,MAAM,SAAY,GAAA,CAAC,CAAC,GAAA,CAAI,OAAO,CAAA,CAAA;AAE/B,IAAA,MAAM,YAAe,GAAAC,iBAAA;AAAA,MACnB,CAAC,KAAU,KAAA,OAAO,GAA0B,KAAA;AAC1C,QAAM,MAAA,GAAA,GAAM,MAAM,QAAA,CAAS,KAAK,CAAA,CAAA;AAChC,QAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,UAAoBC,4BAAA,CAAA,GAAA,CAAI,QAAuB,YAAY,CAAA,CAAA;AAAA,SAC7D;AACA,QAAO,OAAA,GAAA,CAAA;AAAA,OACT;AAAA,MACA,CAAC,QAAQ,CAAA;AAAA,KACX,CAAA;AAEA,IAAA,OAAO,OAAO,QACZ,mBAAAC,cAAA,CAACC,aAAS,EAAA,EAAA,OAAA,EAAS,WAAW,OAAS,EAAA,YAAA,CAAa,CAAC,SAAS,GAAG,CAEjE,mBAAAD,cAAA,CAACE,8BAAa,OAAS,EAAA,SAAA,EAAW,UAAU,IAAM,EAAA,CAAA,CAAA;AAAA,GAEtD;AAAA,EACAC,kCAAA;AACF,EAAA;AACA,YAAA,CAAa,WAAc,GAAA,cAAA,CAAA;AAE3BC,0BAAkB,CAAA,eAAA,EAAiB,cAAc,eAAiB,EAAA;AAAA,EAChE,cAAgB,EAAA,SAAA;AAClB,CAAC,CAAA;;;;"}
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+
3
+ var inputCellCss = "\n.vuuTableInputCell.saltInput-primary {\n --salt-focused-outlineStyle: none;\n --saltInput-height: var(--vuu-table-embedded-control-height);\n --saltInput-minHeight: var(--saltInput-height);\n border-radius: 4px;\n font-weight: 500;\n}\n\n.vuuTableCell:focus .vuuTableInputCell.saltInput-primary,\n.vuuTableInputCell.saltInput-primary.saltInput-focused {\n border: solid 2px var(--salt-focused-outlineColor);\n padding: 0 3px;\n}\n\n.vuuTableInputCell-icon {\n --vuu-icon-height: 13px;\n --vuu-icon-size: 15px;\n --vuu-icon-width: 12px;\n border-radius: 10px;\n}\n\n.vuuTableCell:focus .vuuTableInputCell.saltInput-primary.vuuTableInputCell-error,\n.vuuTableInputCell.saltInput-primary.saltInput-focused.vuuTableInputCell-error {\n border: solid 2px var(--vuu-color-red-50);\n}\n\n\n.vuuTableInputCell-error.saltInput-primary {\n border: solid 1px var(--vuu-color-red-50);\n}";
4
+
5
+ module.exports = inputCellCss;
6
+ //# sourceMappingURL=InputCell.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputCell.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,58 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var vuuUtils = require('@vuu-ui/vuu-utils');
5
+ var core = require('@salt-ds/core');
6
+ var vuuUiControls = require('@vuu-ui/vuu-ui-controls');
7
+ var styles = require('@salt-ds/styles');
8
+ var window = require('@salt-ds/window');
9
+ var cx = require('clsx');
10
+ var InputCell$1 = require('./InputCell.css.js');
11
+
12
+ const classBase = "vuuTableInputCell";
13
+ const WarnCommit = () => {
14
+ console.warn(
15
+ "onCommit handler has not been provided to InputCell cell renderer"
16
+ );
17
+ return Promise.resolve(true);
18
+ };
19
+ const InputCell = ({
20
+ column,
21
+ columnMap,
22
+ onCommit = WarnCommit,
23
+ row
24
+ }) => {
25
+ const targetWindow = window.useWindow();
26
+ styles.useComponentCssInjection({
27
+ testId: "vuu-input-cell",
28
+ css: InputCell$1,
29
+ window: targetWindow
30
+ });
31
+ const dataIdx = columnMap[column.name];
32
+ const dataValue = row[dataIdx];
33
+ const { align = "left", clientSideEditValidationCheck } = column;
34
+ const { warningMessage, ...editProps } = vuuUiControls.useEditableText({
35
+ initialValue: dataValue,
36
+ onCommit,
37
+ clientSideEditValidationCheck
38
+ });
39
+ const endAdornment = warningMessage && align === "left" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${classBase}-icon`, "data-icon": "error" }) : void 0;
40
+ const startAdornment = warningMessage && align === "right" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${classBase}-icon`, "data-icon": "error" }) : void 0;
41
+ return /* @__PURE__ */ jsxRuntime.jsx(
42
+ core.Input,
43
+ {
44
+ ...editProps,
45
+ className: cx(classBase, {
46
+ [`${classBase}-error`]: warningMessage !== void 0
47
+ }),
48
+ endAdornment,
49
+ startAdornment
50
+ }
51
+ );
52
+ };
53
+ vuuUtils.registerComponent("input-cell", InputCell, "cell-renderer", {
54
+ userCanAssign: false
55
+ });
56
+
57
+ exports.InputCell = InputCell;
58
+ //# sourceMappingURL=InputCell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InputCell.js","sources":["../../../src/cell-renderers/input-cell/InputCell.tsx"],"sourcesContent":["import { TableCellRendererProps } from \"@vuu-ui/vuu-table-types\";\nimport { registerComponent } from \"@vuu-ui/vuu-utils\";\nimport { Input } from \"@salt-ds/core\";\nimport { useEditableText } from \"@vuu-ui/vuu-ui-controls\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\n\nimport inputCellCss from \"./InputCell.css\";\n\nconst classBase = \"vuuTableInputCell\";\n\nconst WarnCommit = (): Promise<true> => {\n console.warn(\n \"onCommit handler has not been provided to InputCell cell renderer\"\n );\n return Promise.resolve(true);\n};\nexport const InputCell = ({\n column,\n columnMap,\n onCommit = WarnCommit,\n row,\n}: TableCellRendererProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-input-cell\",\n css: inputCellCss,\n window: targetWindow,\n });\n\n const dataIdx = columnMap[column.name];\n const dataValue = row[dataIdx] as number | string;\n const { align = \"left\", clientSideEditValidationCheck } = column;\n\n const { warningMessage, ...editProps } = useEditableText({\n initialValue: dataValue,\n onCommit,\n clientSideEditValidationCheck,\n });\n\n const endAdornment =\n warningMessage && align === \"left\" ? (\n <span className={`${classBase}-icon`} data-icon=\"error\" />\n ) : undefined;\n\n const startAdornment =\n warningMessage && align === \"right\" ? (\n <span className={`${classBase}-icon`} data-icon=\"error\" />\n ) : undefined;\n\n return (\n <Input\n {...editProps}\n className={cx(classBase, {\n [`${classBase}-error`]: warningMessage !== undefined,\n })}\n endAdornment={endAdornment}\n startAdornment={startAdornment}\n />\n );\n};\n\nregisterComponent(\"input-cell\", InputCell, \"cell-renderer\", {\n userCanAssign: false,\n});\n"],"names":["useWindow","useComponentCssInjection","inputCellCss","useEditableText","jsx","Input","registerComponent"],"mappings":";;;;;;;;;;;AAUA,MAAM,SAAY,GAAA,mBAAA,CAAA;AAElB,MAAM,aAAa,MAAqB;AACtC,EAAQ,OAAA,CAAA,IAAA;AAAA,IACN,mEAAA;AAAA,GACF,CAAA;AACA,EAAO,OAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA,CAAA;AAC7B,CAAA,CAAA;AACO,MAAM,YAAY,CAAC;AAAA,EACxB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAW,GAAA,UAAA;AAAA,EACX,GAAA;AACF,CAA8B,KAAA;AAC5B,EAAA,MAAM,eAAeA,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAAC,WAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,OAAA,GAAU,SAAU,CAAA,MAAA,CAAO,IAAI,CAAA,CAAA;AACrC,EAAM,MAAA,SAAA,GAAY,IAAI,OAAO,CAAA,CAAA;AAC7B,EAAA,MAAM,EAAE,KAAA,GAAQ,MAAQ,EAAA,6BAAA,EAAkC,GAAA,MAAA,CAAA;AAE1D,EAAA,MAAM,EAAE,cAAA,EAAgB,GAAG,SAAA,KAAcC,6BAAgB,CAAA;AAAA,IACvD,YAAc,EAAA,SAAA;AAAA,IACd,QAAA;AAAA,IACA,6BAAA;AAAA,GACD,CAAA,CAAA;AAED,EAAA,MAAM,YACJ,GAAA,cAAA,IAAkB,KAAU,KAAA,MAAA,mBACzBC,cAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,KAAA,CAAA,EAAS,WAAU,EAAA,OAAA,EAAQ,CACtD,GAAA,KAAA,CAAA,CAAA;AAEN,EAAA,MAAM,cACJ,GAAA,cAAA,IAAkB,KAAU,KAAA,OAAA,mBACzBA,cAAA,CAAA,MAAA,EAAA,EAAK,SAAW,EAAA,CAAA,EAAG,SAAS,CAAA,KAAA,CAAA,EAAS,WAAU,EAAA,OAAA,EAAQ,CACtD,GAAA,KAAA,CAAA,CAAA;AAEN,EACE,uBAAAA,cAAA;AAAA,IAACC,UAAA;AAAA,IAAA;AAAA,MACE,GAAG,SAAA;AAAA,MACJ,SAAA,EAAW,GAAG,SAAW,EAAA;AAAA,QACvB,CAAC,CAAA,EAAG,SAAS,CAAA,MAAA,CAAQ,GAAG,cAAmB,KAAA,KAAA,CAAA;AAAA,OAC5C,CAAA;AAAA,MACD,YAAA;AAAA,MACA,cAAA;AAAA,KAAA;AAAA,GACF,CAAA;AAEJ,EAAA;AAEAC,0BAAkB,CAAA,YAAA,EAAc,WAAW,eAAiB,EAAA;AAAA,EAC1D,aAAe,EAAA,KAAA;AACjB,CAAC,CAAA;;;;"}