@vuu-ui/vuu-table 0.8.34 → 0.8.35

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 (180) hide show
  1. package/package.json +8 -10
  2. package/cjs/Row.css +0 -115
  3. package/cjs/Row.js +0 -115
  4. package/cjs/Row.js.map +0 -1
  5. package/cjs/Table.css +0 -151
  6. package/cjs/Table.js +0 -276
  7. package/cjs/Table.js.map +0 -1
  8. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.css +0 -5
  9. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js +0 -33
  10. package/cjs/cell-renderers/checkbox-cell/CheckboxCell.js.map +0 -1
  11. package/cjs/cell-renderers/input-cell/InputCell.css +0 -31
  12. package/cjs/cell-renderers/input-cell/InputCell.js +0 -49
  13. package/cjs/cell-renderers/input-cell/InputCell.js.map +0 -1
  14. package/cjs/cell-renderers/toggle-cell/ToggleCell.css +0 -32
  15. package/cjs/cell-renderers/toggle-cell/ToggleCell.js +0 -59
  16. package/cjs/cell-renderers/toggle-cell/ToggleCell.js.map +0 -1
  17. package/cjs/column-header-pill/ColumnHeaderPill.css +0 -30
  18. package/cjs/column-header-pill/ColumnHeaderPill.js +0 -44
  19. package/cjs/column-header-pill/ColumnHeaderPill.js.map +0 -1
  20. package/cjs/column-header-pill/GroupColumnPill.css +0 -7
  21. package/cjs/column-header-pill/GroupColumnPill.js +0 -20
  22. package/cjs/column-header-pill/GroupColumnPill.js.map +0 -1
  23. package/cjs/column-header-pill/SortIndicator.css +0 -7
  24. package/cjs/column-header-pill/SortIndicator.js +0 -18
  25. package/cjs/column-header-pill/SortIndicator.js.map +0 -1
  26. package/cjs/column-menu/ColumnMenu.css +0 -21
  27. package/cjs/column-menu/ColumnMenu.js +0 -21
  28. package/cjs/column-menu/ColumnMenu.js.map +0 -1
  29. package/cjs/column-resizing/ColumnResizer.css +0 -28
  30. package/cjs/column-resizing/ColumnResizer.js +0 -63
  31. package/cjs/column-resizing/ColumnResizer.js.map +0 -1
  32. package/cjs/column-resizing/useTableColumnResize.js +0 -55
  33. package/cjs/column-resizing/useTableColumnResize.js.map +0 -1
  34. package/cjs/context-menu/buildContextMenuDescriptors.js +0 -214
  35. package/cjs/context-menu/buildContextMenuDescriptors.js.map +0 -1
  36. package/cjs/context-menu/useHandleTableContextMenu.js +0 -81
  37. package/cjs/context-menu/useHandleTableContextMenu.js.map +0 -1
  38. package/cjs/header-cell/GroupHeaderCell.css +0 -65
  39. package/cjs/header-cell/GroupHeaderCell.js +0 -108
  40. package/cjs/header-cell/GroupHeaderCell.js.map +0 -1
  41. package/cjs/header-cell/HeaderCell.css +0 -146
  42. package/cjs/header-cell/HeaderCell.js +0 -100
  43. package/cjs/header-cell/HeaderCell.js.map +0 -1
  44. package/cjs/index.js.map +0 -1
  45. package/cjs/moving-window.js +0 -61
  46. package/cjs/moving-window.js.map +0 -1
  47. package/cjs/table-cell/TableCell.css +0 -41
  48. package/cjs/table-cell/TableCell.js +0 -63
  49. package/cjs/table-cell/TableCell.js.map +0 -1
  50. package/cjs/table-cell/TableGroupCell.css +0 -26
  51. package/cjs/table-cell/TableGroupCell.js +0 -45
  52. package/cjs/table-cell/TableGroupCell.js.map +0 -1
  53. package/cjs/table-config.js +0 -25
  54. package/cjs/table-config.js.map +0 -1
  55. package/cjs/table-dom-utils.js +0 -60
  56. package/cjs/table-dom-utils.js.map +0 -1
  57. package/cjs/table-header/TableHeader.js +0 -87
  58. package/cjs/table-header/TableHeader.js.map +0 -1
  59. package/cjs/table-header/useTableHeader.js +0 -72
  60. package/cjs/table-header/useTableHeader.js.map +0 -1
  61. package/cjs/useCell.js +0 -28
  62. package/cjs/useCell.js.map +0 -1
  63. package/cjs/useCellEditing.js +0 -79
  64. package/cjs/useCellEditing.js.map +0 -1
  65. package/cjs/useControlledTableNavigation.js +0 -43
  66. package/cjs/useControlledTableNavigation.js.map +0 -1
  67. package/cjs/useDataSource.js +0 -104
  68. package/cjs/useDataSource.js.map +0 -1
  69. package/cjs/useInitialValue.js +0 -11
  70. package/cjs/useInitialValue.js.map +0 -1
  71. package/cjs/useKeyboardNavigation.js +0 -304
  72. package/cjs/useKeyboardNavigation.js.map +0 -1
  73. package/cjs/useRowClassNameGenerators.js +0 -34
  74. package/cjs/useRowClassNameGenerators.js.map +0 -1
  75. package/cjs/useRowHeight.js +0 -43
  76. package/cjs/useRowHeight.js.map +0 -1
  77. package/cjs/useSelection.js +0 -64
  78. package/cjs/useSelection.js.map +0 -1
  79. package/cjs/useTable.js +0 -553
  80. package/cjs/useTable.js.map +0 -1
  81. package/cjs/useTableAndColumnSettings.js +0 -128
  82. package/cjs/useTableAndColumnSettings.js.map +0 -1
  83. package/cjs/useTableContextMenu.js +0 -42
  84. package/cjs/useTableContextMenu.js.map +0 -1
  85. package/cjs/useTableModel.js +0 -297
  86. package/cjs/useTableModel.js.map +0 -1
  87. package/cjs/useTableScroll.js +0 -396
  88. package/cjs/useTableScroll.js.map +0 -1
  89. package/cjs/useTableViewport.js +0 -122
  90. package/cjs/useTableViewport.js.map +0 -1
  91. package/esm/Row.css +0 -115
  92. package/esm/Row.js +0 -112
  93. package/esm/Row.js.map +0 -1
  94. package/esm/Table.css +0 -151
  95. package/esm/Table.js +0 -274
  96. package/esm/Table.js.map +0 -1
  97. package/esm/cell-renderers/checkbox-cell/CheckboxCell.css +0 -5
  98. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js +0 -31
  99. package/esm/cell-renderers/checkbox-cell/CheckboxCell.js.map +0 -1
  100. package/esm/cell-renderers/input-cell/InputCell.css +0 -31
  101. package/esm/cell-renderers/input-cell/InputCell.js +0 -47
  102. package/esm/cell-renderers/input-cell/InputCell.js.map +0 -1
  103. package/esm/cell-renderers/toggle-cell/ToggleCell.css +0 -32
  104. package/esm/cell-renderers/toggle-cell/ToggleCell.js +0 -57
  105. package/esm/cell-renderers/toggle-cell/ToggleCell.js.map +0 -1
  106. package/esm/column-header-pill/ColumnHeaderPill.css +0 -30
  107. package/esm/column-header-pill/ColumnHeaderPill.js +0 -42
  108. package/esm/column-header-pill/ColumnHeaderPill.js.map +0 -1
  109. package/esm/column-header-pill/GroupColumnPill.css +0 -7
  110. package/esm/column-header-pill/GroupColumnPill.js +0 -18
  111. package/esm/column-header-pill/GroupColumnPill.js.map +0 -1
  112. package/esm/column-header-pill/SortIndicator.css +0 -7
  113. package/esm/column-header-pill/SortIndicator.js +0 -16
  114. package/esm/column-header-pill/SortIndicator.js.map +0 -1
  115. package/esm/column-menu/ColumnMenu.css +0 -21
  116. package/esm/column-menu/ColumnMenu.js +0 -19
  117. package/esm/column-menu/ColumnMenu.js.map +0 -1
  118. package/esm/column-resizing/ColumnResizer.css +0 -28
  119. package/esm/column-resizing/ColumnResizer.js +0 -61
  120. package/esm/column-resizing/ColumnResizer.js.map +0 -1
  121. package/esm/column-resizing/useTableColumnResize.js +0 -53
  122. package/esm/column-resizing/useTableColumnResize.js.map +0 -1
  123. package/esm/context-menu/buildContextMenuDescriptors.js +0 -212
  124. package/esm/context-menu/buildContextMenuDescriptors.js.map +0 -1
  125. package/esm/context-menu/useHandleTableContextMenu.js +0 -79
  126. package/esm/context-menu/useHandleTableContextMenu.js.map +0 -1
  127. package/esm/header-cell/GroupHeaderCell.css +0 -65
  128. package/esm/header-cell/GroupHeaderCell.js +0 -106
  129. package/esm/header-cell/GroupHeaderCell.js.map +0 -1
  130. package/esm/header-cell/HeaderCell.css +0 -146
  131. package/esm/header-cell/HeaderCell.js +0 -98
  132. package/esm/header-cell/HeaderCell.js.map +0 -1
  133. package/esm/index.js +0 -14
  134. package/esm/index.js.map +0 -1
  135. package/esm/moving-window.js +0 -59
  136. package/esm/moving-window.js.map +0 -1
  137. package/esm/table-cell/TableCell.css +0 -41
  138. package/esm/table-cell/TableCell.js +0 -61
  139. package/esm/table-cell/TableCell.js.map +0 -1
  140. package/esm/table-cell/TableGroupCell.css +0 -26
  141. package/esm/table-cell/TableGroupCell.js +0 -43
  142. package/esm/table-cell/TableGroupCell.js.map +0 -1
  143. package/esm/table-config.js +0 -23
  144. package/esm/table-config.js.map +0 -1
  145. package/esm/table-dom-utils.js +0 -51
  146. package/esm/table-dom-utils.js.map +0 -1
  147. package/esm/table-header/TableHeader.js +0 -85
  148. package/esm/table-header/TableHeader.js.map +0 -1
  149. package/esm/table-header/useTableHeader.js +0 -70
  150. package/esm/table-header/useTableHeader.js.map +0 -1
  151. package/esm/useCell.js +0 -26
  152. package/esm/useCell.js.map +0 -1
  153. package/esm/useCellEditing.js +0 -77
  154. package/esm/useCellEditing.js.map +0 -1
  155. package/esm/useControlledTableNavigation.js +0 -41
  156. package/esm/useControlledTableNavigation.js.map +0 -1
  157. package/esm/useDataSource.js +0 -101
  158. package/esm/useDataSource.js.map +0 -1
  159. package/esm/useInitialValue.js +0 -9
  160. package/esm/useInitialValue.js.map +0 -1
  161. package/esm/useKeyboardNavigation.js +0 -300
  162. package/esm/useKeyboardNavigation.js.map +0 -1
  163. package/esm/useRowClassNameGenerators.js +0 -32
  164. package/esm/useRowClassNameGenerators.js.map +0 -1
  165. package/esm/useRowHeight.js +0 -41
  166. package/esm/useRowHeight.js.map +0 -1
  167. package/esm/useSelection.js +0 -62
  168. package/esm/useSelection.js.map +0 -1
  169. package/esm/useTable.js +0 -551
  170. package/esm/useTable.js.map +0 -1
  171. package/esm/useTableAndColumnSettings.js +0 -126
  172. package/esm/useTableAndColumnSettings.js.map +0 -1
  173. package/esm/useTableContextMenu.js +0 -40
  174. package/esm/useTableContextMenu.js.map +0 -1
  175. package/esm/useTableModel.js +0 -293
  176. package/esm/useTableModel.js.map +0 -1
  177. package/esm/useTableScroll.js +0 -393
  178. package/esm/useTableScroll.js.map +0 -1
  179. package/esm/useTableViewport.js +0 -120
  180. package/esm/useTableViewport.js.map +0 -1
@@ -1,146 +0,0 @@
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
- }
@@ -1,98 +0,0 @@
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
@@ -1 +0,0 @@
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":"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"}
package/esm/index.js DELETED
@@ -1,14 +0,0 @@
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';
14
- //# sourceMappingURL=index.js.map
package/esm/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
@@ -1,59 +0,0 @@
1
- import { WindowRange, isRowSelectedLast, metadataKeys } from '@vuu-ui/vuu-utils';
2
-
3
- const { SELECTED } = metadataKeys;
4
- class MovingWindow {
5
- constructor({ from, to }) {
6
- this.rowCount = 0;
7
- this.setRowCount = (rowCount) => {
8
- if (rowCount < this.data.length) {
9
- this.data.length = rowCount;
10
- }
11
- this.rowCount = rowCount;
12
- };
13
- this.range = new WindowRange(from, to);
14
- this.data = new Array(Math.max(0, to - from));
15
- this.rowCount = 0;
16
- }
17
- add(data) {
18
- const [index] = data;
19
- if (this.isWithinRange(index)) {
20
- const internalIndex = index - this.range.from;
21
- this.data[internalIndex] = data;
22
- if (data[SELECTED]) {
23
- const previousRow = this.data[internalIndex - 1];
24
- if (isRowSelectedLast(previousRow)) {
25
- this.data[internalIndex - 1] = previousRow.slice();
26
- this.data[internalIndex - 1][SELECTED] -= 4;
27
- }
28
- }
29
- }
30
- }
31
- getAtIndex(index) {
32
- return this.range.isWithin(index) && this.data[index - this.range.from] != null ? this.data[index - this.range.from] : void 0;
33
- }
34
- isWithinRange(index) {
35
- return this.range.isWithin(index);
36
- }
37
- setRange({ from, to }) {
38
- if (from !== this.range.from || to !== this.range.to) {
39
- const [overlapFrom, overlapTo] = this.range.overlap(from, to);
40
- const newData = new Array(Math.max(0, to - from));
41
- for (let i = overlapFrom; i < overlapTo; i++) {
42
- const data = this.getAtIndex(i);
43
- if (data) {
44
- const index = i - from;
45
- newData[index] = data;
46
- }
47
- }
48
- this.data = newData;
49
- this.range.from = from;
50
- this.range.to = to;
51
- }
52
- }
53
- getSelectedRows() {
54
- return this.data.filter((row) => row[SELECTED] !== 0);
55
- }
56
- }
57
-
58
- export { MovingWindow };
59
- //# sourceMappingURL=moving-window.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"moving-window.js","sources":["../src/moving-window.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport {\n isRowSelectedLast,\n metadataKeys,\n WindowRange,\n} from \"@vuu-ui/vuu-utils\";\nimport { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\n\nconst { SELECTED } = metadataKeys;\n\nexport class MovingWindow {\n public data: DataSourceRow[];\n public rowCount = 0;\n private range: WindowRange;\n\n constructor({ from, to }: VuuRange) {\n this.range = new WindowRange(from, to);\n //internal data is always 0 based, we add range.from to determine an offset\n this.data = new Array(Math.max(0, to - from));\n this.rowCount = 0;\n }\n\n setRowCount = (rowCount: number) => {\n if (rowCount < this.data.length) {\n this.data.length = rowCount;\n }\n\n this.rowCount = rowCount;\n };\n\n add(data: DataSourceRow) {\n const [index] = data;\n if (this.isWithinRange(index)) {\n const internalIndex = index - this.range.from;\n this.data[internalIndex] = data;\n\n // Hack until we can deal with this more elegantly. When we have a block\n // select operation, first row is selected (and updated via server), then\n // remaining rows are selected when we select the block-end row. We get an\n // update for all rows except first. Because we're extending the select status\n // on the client, we have to adjust the first row selected (its still selected\n // but is no longer the 'last selected row in block')\n // Maybe answer is to apply ALL the selection status code here, not in Viewport\n if (data[SELECTED]) {\n const previousRow = this.data[internalIndex - 1];\n if (isRowSelectedLast(previousRow)) {\n this.data[internalIndex - 1] = previousRow.slice() as DataSourceRow;\n this.data[internalIndex - 1][SELECTED] -= 4;\n }\n }\n }\n }\n\n getAtIndex(index: number) {\n return this.range.isWithin(index) &&\n this.data[index - this.range.from] != null\n ? this.data[index - this.range.from]\n : undefined;\n }\n\n isWithinRange(index: number) {\n return this.range.isWithin(index);\n }\n\n setRange({ from, to }: VuuRange) {\n if (from !== this.range.from || to !== this.range.to) {\n const [overlapFrom, overlapTo] = this.range.overlap(from, to);\n const newData = new Array(Math.max(0, to - from));\n for (let i = overlapFrom; i < overlapTo; i++) {\n const data = this.getAtIndex(i);\n if (data) {\n const index = i - from;\n newData[index] = data;\n }\n }\n this.data = newData;\n this.range.from = from;\n this.range.to = to;\n }\n }\n\n getSelectedRows() {\n return this.data.filter((row) => row[SELECTED] !== 0);\n }\n}\n"],"names":[],"mappings":";;AAQA,MAAM,EAAE,UAAa,GAAA,YAAA,CAAA;AAEd,MAAM,YAAa,CAAA;AAAA,EAKxB,WAAY,CAAA,EAAE,IAAM,EAAA,EAAA,EAAgB,EAAA;AAHpC,IAAA,IAAA,CAAO,QAAW,GAAA,CAAA,CAAA;AAUlB,IAAA,IAAA,CAAA,WAAA,GAAc,CAAC,QAAqB,KAAA;AAClC,MAAI,IAAA,QAAA,GAAW,IAAK,CAAA,IAAA,CAAK,MAAQ,EAAA;AAC/B,QAAA,IAAA,CAAK,KAAK,MAAS,GAAA,QAAA,CAAA;AAAA,OACrB;AAEA,MAAA,IAAA,CAAK,QAAW,GAAA,QAAA,CAAA;AAAA,KAClB,CAAA;AAZE,IAAA,IAAA,CAAK,KAAQ,GAAA,IAAI,WAAY,CAAA,IAAA,EAAM,EAAE,CAAA,CAAA;AAErC,IAAK,IAAA,CAAA,IAAA,GAAO,IAAI,KAAM,CAAA,IAAA,CAAK,IAAI,CAAG,EAAA,EAAA,GAAK,IAAI,CAAC,CAAA,CAAA;AAC5C,IAAA,IAAA,CAAK,QAAW,GAAA,CAAA,CAAA;AAAA,GAClB;AAAA,EAUA,IAAI,IAAqB,EAAA;AACvB,IAAM,MAAA,CAAC,KAAK,CAAI,GAAA,IAAA,CAAA;AAChB,IAAI,IAAA,IAAA,CAAK,aAAc,CAAA,KAAK,CAAG,EAAA;AAC7B,MAAM,MAAA,aAAA,GAAgB,KAAQ,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAA;AACzC,MAAK,IAAA,CAAA,IAAA,CAAK,aAAa,CAAI,GAAA,IAAA,CAAA;AAS3B,MAAI,IAAA,IAAA,CAAK,QAAQ,CAAG,EAAA;AAClB,QAAA,MAAM,WAAc,GAAA,IAAA,CAAK,IAAK,CAAA,aAAA,GAAgB,CAAC,CAAA,CAAA;AAC/C,QAAI,IAAA,iBAAA,CAAkB,WAAW,CAAG,EAAA;AAClC,UAAA,IAAA,CAAK,IAAK,CAAA,aAAA,GAAgB,CAAC,CAAA,GAAI,YAAY,KAAM,EAAA,CAAA;AACjD,UAAA,IAAA,CAAK,IAAK,CAAA,aAAA,GAAgB,CAAC,CAAA,CAAE,QAAQ,CAAK,IAAA,CAAA,CAAA;AAAA,SAC5C;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAAA,EAEA,WAAW,KAAe,EAAA;AACxB,IAAA,OAAO,KAAK,KAAM,CAAA,QAAA,CAAS,KAAK,CAC9B,IAAA,IAAA,CAAK,KAAK,KAAQ,GAAA,IAAA,CAAK,MAAM,IAAI,CAAA,IAAK,OACpC,IAAK,CAAA,IAAA,CAAK,QAAQ,IAAK,CAAA,KAAA,CAAM,IAAI,CACjC,GAAA,KAAA,CAAA,CAAA;AAAA,GACN;AAAA,EAEA,cAAc,KAAe,EAAA;AAC3B,IAAO,OAAA,IAAA,CAAK,KAAM,CAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AAAA,GAClC;AAAA,EAEA,QAAS,CAAA,EAAE,IAAM,EAAA,EAAA,EAAgB,EAAA;AAC/B,IAAA,IAAI,SAAS,IAAK,CAAA,KAAA,CAAM,QAAQ,EAAO,KAAA,IAAA,CAAK,MAAM,EAAI,EAAA;AACpD,MAAM,MAAA,CAAC,aAAa,SAAS,CAAA,GAAI,KAAK,KAAM,CAAA,OAAA,CAAQ,MAAM,EAAE,CAAA,CAAA;AAC5D,MAAM,MAAA,OAAA,GAAU,IAAI,KAAM,CAAA,IAAA,CAAK,IAAI,CAAG,EAAA,EAAA,GAAK,IAAI,CAAC,CAAA,CAAA;AAChD,MAAA,KAAA,IAAS,CAAI,GAAA,WAAA,EAAa,CAAI,GAAA,SAAA,EAAW,CAAK,EAAA,EAAA;AAC5C,QAAM,MAAA,IAAA,GAAO,IAAK,CAAA,UAAA,CAAW,CAAC,CAAA,CAAA;AAC9B,QAAA,IAAI,IAAM,EAAA;AACR,UAAA,MAAM,QAAQ,CAAI,GAAA,IAAA,CAAA;AAClB,UAAA,OAAA,CAAQ,KAAK,CAAI,GAAA,IAAA,CAAA;AAAA,SACnB;AAAA,OACF;AACA,MAAA,IAAA,CAAK,IAAO,GAAA,OAAA,CAAA;AACZ,MAAA,IAAA,CAAK,MAAM,IAAO,GAAA,IAAA,CAAA;AAClB,MAAA,IAAA,CAAK,MAAM,EAAK,GAAA,EAAA,CAAA;AAAA,KAClB;AAAA,GACF;AAAA,EAEA,eAAkB,GAAA;AAChB,IAAO,OAAA,IAAA,CAAK,KAAK,MAAO,CAAA,CAAC,QAAQ,GAAI,CAAA,QAAQ,MAAM,CAAC,CAAA,CAAA;AAAA,GACtD;AACF;;;;"}
@@ -1,41 +0,0 @@
1
- .vuuTableCell {
2
- border-right-color: var(--cell-borderColor);
3
- border-right-style: solid;
4
- border-right-width: 1px;
5
- /* unfortunately inline-flex doesn't play nice with text-overflow ellipsis */
6
- display: inline-block;
7
- white-space: nowrap;
8
- height: 100%;
9
- overflow:hidden;
10
- padding: var(--vuuTableCell-padding, 0 11px 0 12px);
11
- text-overflow: ellipsis;
12
- vertical-align: top;
13
- }
14
-
15
- .vuuTableCell-right {
16
- text-align: right;
17
- }
18
-
19
- .vuuTableCell-editable {
20
- align-items: center;
21
- display: inline-flex;
22
- text-overflow: unset;
23
- }
24
-
25
- .vuuTableCell:focus {
26
- outline: var(--vuuTableCell-outline, solid var(--salt-focused-outlineColor) 2px);
27
- outline-offset: -2px;
28
- /** This is to achieve a white background to outline dashes */
29
- box-shadow: inset 0 0 0 var(--cell-outline-width) white;
30
- border-bottom: none;
31
- }
32
-
33
- .vuuTableRow-selected .vuuTableCell:not(.vuuTableCell-editable):focus {
34
- outline: var(--vuuTableCell-outline, solid var(--salt-focused-outlineColor) 2px);
35
- outline-offset: -1px;
36
-
37
- }
38
- .vuuTableCell-editable:focus {
39
- outline: none;
40
- }
41
-
@@ -1,61 +0,0 @@
1
- import { jsx } from 'react/jsx-runtime';
2
- import { isNumericColumn } from '@vuu-ui/vuu-utils';
3
- import { useCallback } from 'react';
4
- import { useCell } from '../useCell.js';
5
-
6
- const classBase = "vuuTableCell";
7
- const TableCell = ({
8
- column,
9
- columnMap,
10
- onClick,
11
- onDataEdited,
12
- row
13
- }) => {
14
- const { className, style } = useCell(column, classBase);
15
- const { CellRenderer, index, name, valueFormatter } = column;
16
- const dataIdx = columnMap[name];
17
- const handleDataItemEdited = useCallback(
18
- (value) => {
19
- if (onDataEdited) {
20
- let typedValue = value;
21
- if (isNumericColumn(column) && typeof value === "string") {
22
- typedValue = column.serverDataType === "double" ? parseFloat(value) : parseInt(value);
23
- }
24
- return onDataEdited?.(row, name, typedValue);
25
- } else {
26
- throw Error(
27
- "TableCell onDataEdited prop not supplied for an editable cell"
28
- );
29
- }
30
- },
31
- [column, name, onDataEdited, row]
32
- );
33
- const handleClick = useCallback(
34
- (evt) => {
35
- onClick?.(evt, column);
36
- },
37
- [column, onClick]
38
- );
39
- return /* @__PURE__ */ jsx(
40
- "div",
41
- {
42
- "aria-colindex": index,
43
- className,
44
- onClick: onClick ? handleClick : void 0,
45
- role: "cell",
46
- style,
47
- children: CellRenderer ? /* @__PURE__ */ jsx(
48
- CellRenderer,
49
- {
50
- column,
51
- columnMap,
52
- onCommit: handleDataItemEdited,
53
- row
54
- }
55
- ) : valueFormatter(row[dataIdx])
56
- }
57
- );
58
- };
59
-
60
- export { TableCell };
61
- //# sourceMappingURL=TableCell.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TableCell.js","sources":["../../src/table-cell/TableCell.tsx"],"sourcesContent":["import { DataItemCommitHandler, TableCellProps } from \"@vuu-ui/vuu-table-types\";\nimport { isNumericColumn } from \"@vuu-ui/vuu-utils\";\nimport { MouseEventHandler, useCallback } from \"react\";\nimport { useCell } from \"../useCell\";\n\nimport \"./TableCell.css\";\n\nconst classBase = \"vuuTableCell\";\n\nexport const TableCell = ({\n column,\n columnMap,\n onClick,\n onDataEdited,\n row,\n}: TableCellProps) => {\n const { className, style } = useCell(column, classBase);\n const { CellRenderer, index, name, valueFormatter } = column;\n const dataIdx = columnMap[name];\n\n const handleDataItemEdited = useCallback<DataItemCommitHandler>(\n (value) => {\n if (onDataEdited) {\n let typedValue = value;\n if (isNumericColumn(column) && typeof value === \"string\") {\n typedValue =\n column.serverDataType === \"double\"\n ? parseFloat(value)\n : parseInt(value);\n }\n return onDataEdited?.(row, name, typedValue);\n } else {\n throw Error(\n \"TableCell onDataEdited prop not supplied for an editable cell\"\n );\n }\n },\n [column, name, onDataEdited, row]\n );\n\n const handleClick = useCallback<MouseEventHandler>(\n (evt) => {\n onClick?.(evt, column);\n },\n [column, onClick]\n );\n\n return (\n <div\n aria-colindex={index}\n className={className}\n onClick={onClick ? handleClick : undefined}\n role=\"cell\"\n style={style}\n >\n {CellRenderer ? (\n <CellRenderer\n column={column}\n columnMap={columnMap}\n onCommit={handleDataItemEdited}\n row={row}\n />\n ) : (\n valueFormatter(row[dataIdx])\n )}\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;AAOA,MAAM,SAAY,GAAA,cAAA,CAAA;AAEX,MAAM,YAAY,CAAC;AAAA,EACxB,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,GAAA;AACF,CAAsB,KAAA;AACpB,EAAA,MAAM,EAAE,SAAW,EAAA,KAAA,EAAU,GAAA,OAAA,CAAQ,QAAQ,SAAS,CAAA,CAAA;AACtD,EAAA,MAAM,EAAE,YAAA,EAAc,KAAO,EAAA,IAAA,EAAM,gBAAmB,GAAA,MAAA,CAAA;AACtD,EAAM,MAAA,OAAA,GAAU,UAAU,IAAI,CAAA,CAAA;AAE9B,EAAA,MAAM,oBAAuB,GAAA,WAAA;AAAA,IAC3B,CAAC,KAAU,KAAA;AACT,MAAA,IAAI,YAAc,EAAA;AAChB,QAAA,IAAI,UAAa,GAAA,KAAA,CAAA;AACjB,QAAA,IAAI,eAAgB,CAAA,MAAM,CAAK,IAAA,OAAO,UAAU,QAAU,EAAA;AACxD,UAAA,UAAA,GACE,OAAO,cAAmB,KAAA,QAAA,GACtB,WAAW,KAAK,CAAA,GAChB,SAAS,KAAK,CAAA,CAAA;AAAA,SACtB;AACA,QAAO,OAAA,YAAA,GAAe,GAAK,EAAA,IAAA,EAAM,UAAU,CAAA,CAAA;AAAA,OACtC,MAAA;AACL,QAAM,MAAA,KAAA;AAAA,UACJ,+DAAA;AAAA,SACF,CAAA;AAAA,OACF;AAAA,KACF;AAAA,IACA,CAAC,MAAA,EAAQ,IAAM,EAAA,YAAA,EAAc,GAAG,CAAA;AAAA,GAClC,CAAA;AAEA,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,GAAQ,KAAA;AACP,MAAA,OAAA,GAAU,KAAK,MAAM,CAAA,CAAA;AAAA,KACvB;AAAA,IACA,CAAC,QAAQ,OAAO,CAAA;AAAA,GAClB,CAAA;AAEA,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,eAAe,EAAA,KAAA;AAAA,MACf,SAAA;AAAA,MACA,OAAA,EAAS,UAAU,WAAc,GAAA,KAAA,CAAA;AAAA,MACjC,IAAK,EAAA,MAAA;AAAA,MACL,KAAA;AAAA,MAEC,QACC,EAAA,YAAA,mBAAA,GAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,MAAA;AAAA,UACA,SAAA;AAAA,UACA,QAAU,EAAA,oBAAA;AAAA,UACV,GAAA;AAAA,SAAA;AAAA,OAGF,GAAA,cAAA,CAAe,GAAI,CAAA,OAAO,CAAC,CAAA;AAAA,KAAA;AAAA,GAE/B,CAAA;AAEJ;;;;"}
@@ -1,26 +0,0 @@
1
- .vuuTableGroupCell {
2
- --group-cell-spacer-width: 20px;
3
- align-items: center;
4
- border-right-color: var(--vuuTableGroupCell-borderColor, var(--salt-separable-tertiary-borderColor));
5
- border-right-style: solid;
6
- border-right-width: 1px;
7
-
8
- cursor: pointer;
9
- display: inline-flex;
10
- height: var(--row-height);
11
- line-height: 16px;
12
- }
13
-
14
- .vuuTableGroupCell-toggle {
15
- --vuu-icon-height: 16px;
16
- --vuu-icon-size: 16px;
17
- --vuu-icon-width: 8px;
18
- margin-right: 4px;
19
- transition: transform 0.25s;
20
- transform: var(--toggle-icon-transform);
21
-
22
- }
23
-
24
- .vuuTableGroupCell-spacer {
25
- width: var(--group-cell-spacer-width);
26
- }
@@ -1,43 +0,0 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { getGroupValueAndOffset, metadataKeys } from '@vuu-ui/vuu-utils';
3
- import { useCallback } from 'react';
4
- import { useCell } from '../useCell.js';
5
- import cx from 'clsx';
6
-
7
- const { IS_LEAF } = metadataKeys;
8
- const classBase = "vuuTableGroupCell";
9
- const TableGroupCell = ({
10
- column,
11
- columnMap,
12
- onClick,
13
- row
14
- }) => {
15
- const { columns } = column;
16
- const [value, offset] = getGroupValueAndOffset(columns, row, columnMap);
17
- const { className, style } = useCell(column, classBase);
18
- const handleClick = useCallback(
19
- (evt) => {
20
- onClick?.(evt, column);
21
- },
22
- [column, onClick]
23
- );
24
- const isLeaf = row[IS_LEAF];
25
- const spacers = Array(offset).fill(0).map((n, i) => /* @__PURE__ */ jsx("span", { className: `${classBase}-spacer` }, i));
26
- return /* @__PURE__ */ jsxs(
27
- "div",
28
- {
29
- className: cx(className, "vuuTableCell"),
30
- role: "cell",
31
- style,
32
- onClick: isLeaf ? void 0 : handleClick,
33
- children: [
34
- spacers,
35
- isLeaf ? null : /* @__PURE__ */ jsx("span", { className: `${classBase}-toggle`, "data-icon": "triangle-right" }),
36
- /* @__PURE__ */ jsx("span", { children: value })
37
- ]
38
- }
39
- );
40
- };
41
-
42
- export { TableGroupCell };
43
- //# sourceMappingURL=TableGroupCell.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TableGroupCell.js","sources":["../../src/table-cell/TableGroupCell.tsx"],"sourcesContent":["import { GroupColumnDescriptor, TableCellProps } from \"@vuu-ui/vuu-table-types\";\nimport { getGroupValueAndOffset, metadataKeys } from \"@vuu-ui/vuu-utils\";\nimport { MouseEvent, useCallback } from \"react\";\nimport { useCell } from \"../useCell\";\nimport cx from \"clsx\";\n\nimport \"./TableGroupCell.css\";\n\nconst { IS_LEAF } = metadataKeys;\n\nconst classBase = \"vuuTableGroupCell\";\n\nexport const TableGroupCell = ({\n column,\n columnMap,\n onClick,\n row,\n}: TableCellProps) => {\n const { columns } = column as GroupColumnDescriptor;\n const [value, offset] = getGroupValueAndOffset(columns, row, columnMap);\n const { className, style } = useCell(column, classBase);\n\n const handleClick = useCallback(\n (evt: MouseEvent<HTMLDivElement>) => {\n onClick?.(evt, column);\n },\n [column, onClick]\n );\n\n const isLeaf = row[IS_LEAF];\n const spacers = Array(offset)\n .fill(0)\n .map((n, i) => <span className={`${classBase}-spacer`} key={i} />);\n\n return (\n <div\n className={cx(className, \"vuuTableCell\")}\n role=\"cell\"\n style={style}\n onClick={isLeaf ? undefined : handleClick}\n >\n {spacers}\n {isLeaf ? null : (\n <span className={`${classBase}-toggle`} data-icon=\"triangle-right\" />\n )}\n <span>{value}</span>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;;;AAQA,MAAM,EAAE,SAAY,GAAA,YAAA,CAAA;AAEpB,MAAM,SAAY,GAAA,mBAAA,CAAA;AAEX,MAAM,iBAAiB,CAAC;AAAA,EAC7B,MAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AACF,CAAsB,KAAA;AACpB,EAAM,MAAA,EAAE,SAAY,GAAA,MAAA,CAAA;AACpB,EAAA,MAAM,CAAC,KAAO,EAAA,MAAM,IAAI,sBAAuB,CAAA,OAAA,EAAS,KAAK,SAAS,CAAA,CAAA;AACtE,EAAA,MAAM,EAAE,SAAW,EAAA,KAAA,EAAU,GAAA,OAAA,CAAQ,QAAQ,SAAS,CAAA,CAAA;AAEtD,EAAA,MAAM,WAAc,GAAA,WAAA;AAAA,IAClB,CAAC,GAAoC,KAAA;AACnC,MAAA,OAAA,GAAU,KAAK,MAAM,CAAA,CAAA;AAAA,KACvB;AAAA,IACA,CAAC,QAAQ,OAAO,CAAA;AAAA,GAClB,CAAA;AAEA,EAAM,MAAA,MAAA,GAAS,IAAI,OAAO,CAAA,CAAA;AAC1B,EAAA,MAAM,UAAU,KAAM,CAAA,MAAM,EACzB,IAAK,CAAA,CAAC,EACN,GAAI,CAAA,CAAC,CAAG,EAAA,CAAA,yBAAO,MAAK,EAAA,EAAA,SAAA,EAAW,GAAG,SAAS,CAAA,OAAA,CAAA,EAAA,EAAgB,CAAG,CAAE,CAAA,CAAA;AAEnE,EACE,uBAAA,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,EAAG,CAAA,SAAA,EAAW,cAAc,CAAA;AAAA,MACvC,IAAK,EAAA,MAAA;AAAA,MACL,KAAA;AAAA,MACA,OAAA,EAAS,SAAS,KAAY,CAAA,GAAA,WAAA;AAAA,MAE7B,QAAA,EAAA;AAAA,QAAA,OAAA;AAAA,QACA,MAAA,GAAS,uBACP,GAAA,CAAA,MAAA,EAAA,EAAK,WAAW,CAAG,EAAA,SAAS,CAAW,OAAA,CAAA,EAAA,WAAA,EAAU,gBAAiB,EAAA,CAAA;AAAA,wBAErE,GAAA,CAAC,UAAM,QAAM,EAAA,KAAA,EAAA,CAAA;AAAA,OAAA;AAAA,KAAA;AAAA,GACf,CAAA;AAEJ;;;;"}
@@ -1,23 +0,0 @@
1
- const updateTableConfig = (config, action) => {
2
- switch (action.type) {
3
- case "col-size":
4
- return {
5
- ...config,
6
- columns: config.columns.map(
7
- (col) => col.name === action.column.name ? { ...col, width: action.width } : col
8
- )
9
- };
10
- case "column-prop":
11
- return {
12
- ...config,
13
- columns: config.columns.map(
14
- (col) => col.name === action.column.name ? { ...col, [action.property]: action.value } : col
15
- )
16
- };
17
- default:
18
- return config;
19
- }
20
- };
21
-
22
- export { updateTableConfig };
23
- //# sourceMappingURL=table-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-config.js","sources":["../src/table-config.ts"],"sourcesContent":["import { ColumnDescriptor, TableConfig } from \"@vuu-ui/vuu-table-types\";\n\nexport type MoveColumnTableConfigAction = {\n type: \"col-move\";\n column: ColumnDescriptor;\n fromIndex: number;\n toIndex: number;\n};\n\nexport type ResizeColumnTableConfigAction = {\n type: \"col-size\";\n column: ColumnDescriptor;\n width: number;\n};\n\nexport type SubscribeColumnTableConfigAction = {\n type: \"subscribed\";\n column: ColumnDescriptor;\n value: boolean;\n};\n\nexport type UpdateColumnPropertyTableConfigAction = {\n type: \"column-prop\";\n column: ColumnDescriptor;\n property: keyof ColumnDescriptor;\n value: boolean | number | string;\n};\n\nexport type TableConfigAction =\n | MoveColumnTableConfigAction\n | ResizeColumnTableConfigAction\n | UpdateColumnPropertyTableConfigAction;\n\nexport const updateTableConfig = (\n config: TableConfig,\n action: TableConfigAction\n): TableConfig => {\n switch (action.type) {\n case \"col-size\":\n return {\n ...config,\n columns: config.columns.map((col) =>\n col.name === action.column.name\n ? { ...col, width: action.width }\n : col\n ),\n };\n case \"column-prop\":\n return {\n ...config,\n columns: config.columns.map((col) =>\n col.name === action.column.name\n ? { ...col, [action.property]: action.value }\n : col\n ),\n };\n\n default:\n return config;\n }\n};\n"],"names":[],"mappings":"AAiCa,MAAA,iBAAA,GAAoB,CAC/B,MAAA,EACA,MACgB,KAAA;AAChB,EAAA,QAAQ,OAAO,IAAM;AAAA,IACnB,KAAK,UAAA;AACH,MAAO,OAAA;AAAA,QACL,GAAG,MAAA;AAAA,QACH,OAAA,EAAS,OAAO,OAAQ,CAAA,GAAA;AAAA,UAAI,CAAC,GAAA,KAC3B,GAAI,CAAA,IAAA,KAAS,MAAO,CAAA,MAAA,CAAO,IACvB,GAAA,EAAE,GAAG,GAAA,EAAK,KAAO,EAAA,MAAA,CAAO,OACxB,GAAA,GAAA;AAAA,SACN;AAAA,OACF,CAAA;AAAA,IACF,KAAK,aAAA;AACH,MAAO,OAAA;AAAA,QACL,GAAG,MAAA;AAAA,QACH,OAAA,EAAS,OAAO,OAAQ,CAAA,GAAA;AAAA,UAAI,CAAC,GAC3B,KAAA,GAAA,CAAI,IAAS,KAAA,MAAA,CAAO,OAAO,IACvB,GAAA,EAAE,GAAG,GAAA,EAAK,CAAC,MAAO,CAAA,QAAQ,GAAG,MAAA,CAAO,OACpC,GAAA,GAAA;AAAA,SACN;AAAA,OACF,CAAA;AAAA,IAEF;AACE,MAAO,OAAA,MAAA,CAAA;AAAA,GACX;AACF;;;;"}
@@ -1,51 +0,0 @@
1
- const headerCellQuery = (colIdx) => `.vuuTable-col-headers .vuuTableHeaderCell:nth-child(${colIdx})`;
2
- const dataCellQuery = (rowIdx, colIdx) => `.vuuTable-body > [aria-rowindex='${rowIdx + 1}'] > [role='cell']:nth-child(${colIdx + 1})`;
3
- const getTableCell = (containerRef, [rowIdx, colIdx]) => {
4
- const cssQuery = rowIdx === -1 ? headerCellQuery(colIdx) : dataCellQuery(rowIdx, colIdx);
5
- const cell = containerRef.current?.querySelector(
6
- cssQuery
7
- );
8
- if (cellIsEditable(cell)) {
9
- const focusableContent = cell.querySelector("button");
10
- return focusableContent || cell;
11
- } else {
12
- return cell;
13
- }
14
- };
15
- const cellIsEditable = (cell) => cell?.classList.contains("vuuTableCell-editable");
16
- const cellIsTextInput = (cell) => cell.querySelector(".vuuTableInputCell") !== null;
17
- function getRowIndex(rowEl) {
18
- if (rowEl) {
19
- const idx = rowEl.ariaRowIndex;
20
- if (idx !== null) {
21
- return parseInt(idx, 10) - 1;
22
- }
23
- }
24
- return -1;
25
- }
26
- const closestRow = (el) => el.closest('[role="row"]');
27
- const closestRowIndex = (el) => getRowIndex(closestRow(el));
28
- const NO_SCROLL_NECESSARY = [void 0, void 0];
29
- const howFarIsRowOutsideViewport = (rowEl, totalHeaderHeight, contentContainer = rowEl.closest(".vuuTable-contentContainer")) => {
30
- if (contentContainer) {
31
- const viewport = contentContainer?.getBoundingClientRect();
32
- const upperBoundary = viewport.top + totalHeaderHeight;
33
- const row = rowEl.getBoundingClientRect();
34
- if (row) {
35
- if (row.bottom > viewport.bottom) {
36
- return ["down", row.bottom - viewport.bottom];
37
- } else if (row.top < upperBoundary) {
38
- return ["up", row.top - upperBoundary];
39
- } else {
40
- return NO_SCROLL_NECESSARY;
41
- }
42
- } else {
43
- throw Error("Whats going on, row not found");
44
- }
45
- } else {
46
- throw Error("Whats going on, scrollbar container not found");
47
- }
48
- };
49
-
50
- export { cellIsEditable, cellIsTextInput, closestRowIndex, dataCellQuery, getRowIndex, getTableCell, headerCellQuery, howFarIsRowOutsideViewport };
51
- //# sourceMappingURL=table-dom-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-dom-utils.js","sources":["../src/table-dom-utils.ts"],"sourcesContent":["import { RefObject } from \"react\";\nimport { ScrollDirection } from \"./useTableScroll\";\n\n/**\n * [rowIndex, colIndex\n */\nexport type CellPos = [number, number];\n\nexport const headerCellQuery = (colIdx: number) =>\n `.vuuTable-col-headers .vuuTableHeaderCell:nth-child(${colIdx})`;\n\nexport const dataCellQuery = (rowIdx: number, colIdx: number) =>\n `.vuuTable-body > [aria-rowindex='${rowIdx + 1}'] > [role='cell']:nth-child(${\n colIdx + 1\n })`;\n\nexport const getTableCell = (\n containerRef: RefObject<HTMLElement>,\n\n [rowIdx, colIdx]: CellPos\n) => {\n const cssQuery =\n rowIdx === -1 ? headerCellQuery(colIdx) : dataCellQuery(rowIdx, colIdx);\n const cell = containerRef.current?.querySelector(\n cssQuery\n ) as HTMLTableCellElement;\n\n if (cellIsEditable(cell)) {\n // Dropdown gets focus, Input does not\n const focusableContent = cell.querySelector(\"button\") as HTMLElement;\n return focusableContent || cell;\n } else {\n return cell;\n }\n};\n\nexport const cellIsEditable = (cell: HTMLDivElement | null) =>\n cell?.classList.contains(\"vuuTableCell-editable\");\n\nexport const cellIsTextInput = (cell: HTMLElement) =>\n cell.querySelector(\".vuuTableInputCell\") !== null;\n\nexport function getRowIndex(rowEl?: HTMLElement) {\n if (rowEl) {\n const idx: string | null = rowEl.ariaRowIndex;\n if (idx !== null) {\n return parseInt(idx, 10) - 1;\n }\n }\n return -1;\n}\n\nconst closestRow = (el: HTMLElement) =>\n el.closest('[role=\"row\"]') as HTMLElement;\n\nexport const closestRowIndex = (el: HTMLElement) => getRowIndex(closestRow(el));\n\nconst NO_SCROLL_NECESSARY = [undefined, undefined] as const;\n\nexport const howFarIsRowOutsideViewport = (\n rowEl: HTMLElement,\n totalHeaderHeight: number,\n contentContainer = rowEl.closest(\".vuuTable-contentContainer\")\n): readonly [ScrollDirection | undefined, number | undefined] => {\n //TODO lots of scope for optimisation here\n if (contentContainer) {\n // TODO take totalHeaderHeight into consideration\n const viewport = contentContainer?.getBoundingClientRect();\n const upperBoundary = viewport.top + totalHeaderHeight;\n const row = rowEl.getBoundingClientRect();\n if (row) {\n if (row.bottom > viewport.bottom) {\n return [\"down\", row.bottom - viewport.bottom];\n } else if (row.top < upperBoundary) {\n return [\"up\", row.top - upperBoundary];\n } else {\n return NO_SCROLL_NECESSARY;\n }\n } else {\n throw Error(\"Whats going on, row not found\");\n }\n } else {\n throw Error(\"Whats going on, scrollbar container not found\");\n }\n};\n"],"names":[],"mappings":"AAQO,MAAM,eAAkB,GAAA,CAAC,MAC9B,KAAA,CAAA,oDAAA,EAAuD,MAAM,CAAA,CAAA,EAAA;AAElD,MAAA,aAAA,GAAgB,CAAC,MAAgB,EAAA,MAAA,KAC5C,oCAAoC,MAAS,GAAA,CAAC,CAC5C,6BAAA,EAAA,MAAA,GAAS,CACX,CAAA,CAAA,EAAA;AAEK,MAAM,eAAe,CAC1B,YAAA,EAEA,CAAC,MAAA,EAAQ,MAAM,CACZ,KAAA;AACH,EAAM,MAAA,QAAA,GACJ,WAAW,CAAK,CAAA,GAAA,eAAA,CAAgB,MAAM,CAAI,GAAA,aAAA,CAAc,QAAQ,MAAM,CAAA,CAAA;AACxE,EAAM,MAAA,IAAA,GAAO,aAAa,OAAS,EAAA,aAAA;AAAA,IACjC,QAAA;AAAA,GACF,CAAA;AAEA,EAAI,IAAA,cAAA,CAAe,IAAI,CAAG,EAAA;AAExB,IAAM,MAAA,gBAAA,GAAmB,IAAK,CAAA,aAAA,CAAc,QAAQ,CAAA,CAAA;AACpD,IAAA,OAAO,gBAAoB,IAAA,IAAA,CAAA;AAAA,GACtB,MAAA;AACL,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF,EAAA;AAEO,MAAM,iBAAiB,CAAC,IAAA,KAC7B,IAAM,EAAA,SAAA,CAAU,SAAS,uBAAuB,EAAA;AAE3C,MAAM,kBAAkB,CAAC,IAAA,KAC9B,IAAK,CAAA,aAAA,CAAc,oBAAoB,CAAM,KAAA,KAAA;AAExC,SAAS,YAAY,KAAqB,EAAA;AAC/C,EAAA,IAAI,KAAO,EAAA;AACT,IAAA,MAAM,MAAqB,KAAM,CAAA,YAAA,CAAA;AACjC,IAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,MAAO,OAAA,QAAA,CAAS,GAAK,EAAA,EAAE,CAAI,GAAA,CAAA,CAAA;AAAA,KAC7B;AAAA,GACF;AACA,EAAO,OAAA,CAAA,CAAA,CAAA;AACT,CAAA;AAEA,MAAM,UAAa,GAAA,CAAC,EAClB,KAAA,EAAA,CAAG,QAAQ,cAAc,CAAA,CAAA;AAEpB,MAAM,kBAAkB,CAAC,EAAA,KAAoB,WAAY,CAAA,UAAA,CAAW,EAAE,CAAC,EAAA;AAE9E,MAAM,mBAAA,GAAsB,CAAC,KAAA,CAAA,EAAW,KAAS,CAAA,CAAA,CAAA;AAEpC,MAAA,0BAAA,GAA6B,CACxC,KACA,EAAA,iBAAA,EACA,mBAAmB,KAAM,CAAA,OAAA,CAAQ,4BAA4B,CACE,KAAA;AAE/D,EAAA,IAAI,gBAAkB,EAAA;AAEpB,IAAM,MAAA,QAAA,GAAW,kBAAkB,qBAAsB,EAAA,CAAA;AACzD,IAAM,MAAA,aAAA,GAAgB,SAAS,GAAM,GAAA,iBAAA,CAAA;AACrC,IAAM,MAAA,GAAA,GAAM,MAAM,qBAAsB,EAAA,CAAA;AACxC,IAAA,IAAI,GAAK,EAAA;AACP,MAAI,IAAA,GAAA,CAAI,MAAS,GAAA,QAAA,CAAS,MAAQ,EAAA;AAChC,QAAA,OAAO,CAAC,MAAA,EAAQ,GAAI,CAAA,MAAA,GAAS,SAAS,MAAM,CAAA,CAAA;AAAA,OAC9C,MAAA,IAAW,GAAI,CAAA,GAAA,GAAM,aAAe,EAAA;AAClC,QAAA,OAAO,CAAC,IAAA,EAAM,GAAI,CAAA,GAAA,GAAM,aAAa,CAAA,CAAA;AAAA,OAChC,MAAA;AACL,QAAO,OAAA,mBAAA,CAAA;AAAA,OACT;AAAA,KACK,MAAA;AACL,MAAA,MAAM,MAAM,+BAA+B,CAAA,CAAA;AAAA,KAC7C;AAAA,GACK,MAAA;AACL,IAAA,MAAM,MAAM,+CAA+C,CAAA,CAAA;AAAA,GAC7D;AACF;;;;"}