@salt-ds/data-grid 1.0.6 → 1.0.7

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 (217) hide show
  1. package/CHANGELOG.md +216 -0
  2. package/dist-cjs/BaseCell.js +47 -45
  3. package/dist-cjs/BaseCell.js.map +1 -1
  4. package/dist-cjs/CellEditor.js +0 -2
  5. package/dist-cjs/CellEditor.js.map +1 -1
  6. package/dist-cjs/CellFrame.js +23 -31
  7. package/dist-cjs/CellFrame.js.map +1 -1
  8. package/dist-cjs/ColumnDataContext.js +0 -2
  9. package/dist-cjs/ColumnDataContext.js.map +1 -1
  10. package/dist-cjs/ColumnDragContext.js +0 -2
  11. package/dist-cjs/ColumnDragContext.js.map +1 -1
  12. package/dist-cjs/ColumnGroup.js +1 -5
  13. package/dist-cjs/ColumnGroup.js.map +1 -1
  14. package/dist-cjs/ColumnSortContext.js +0 -2
  15. package/dist-cjs/ColumnSortContext.js.map +1 -1
  16. package/dist-cjs/CornerTag.js +6 -5
  17. package/dist-cjs/CornerTag.js.map +1 -1
  18. package/dist-cjs/CursorContext.js +0 -2
  19. package/dist-cjs/CursorContext.js.map +1 -1
  20. package/dist-cjs/DropdownCellEditor.js +25 -28
  21. package/dist-cjs/DropdownCellEditor.js.map +1 -1
  22. package/dist-cjs/EditorContext.js +0 -2
  23. package/dist-cjs/EditorContext.js.map +1 -1
  24. package/dist-cjs/Grid.css.js +1 -1
  25. package/dist-cjs/Grid.js +139 -142
  26. package/dist-cjs/Grid.js.map +1 -1
  27. package/dist-cjs/GridColumn.js +4 -8
  28. package/dist-cjs/GridColumn.js.map +1 -1
  29. package/dist-cjs/GridContext.js +0 -2
  30. package/dist-cjs/GridContext.js.map +1 -1
  31. package/dist-cjs/GroupHeaderCell.js +27 -28
  32. package/dist-cjs/GroupHeaderCell.js.map +1 -1
  33. package/dist-cjs/GroupHeaderCellValue.js +1 -5
  34. package/dist-cjs/GroupHeaderCellValue.js.map +1 -1
  35. package/dist-cjs/HeaderCell.js +85 -81
  36. package/dist-cjs/HeaderCell.js.map +1 -1
  37. package/dist-cjs/HeaderCellValue.js +1 -6
  38. package/dist-cjs/HeaderCellValue.js.map +1 -1
  39. package/dist-cjs/LayoutContext.js +0 -2
  40. package/dist-cjs/LayoutContext.js.map +1 -1
  41. package/dist-cjs/NumberRange.js +2 -4
  42. package/dist-cjs/NumberRange.js.map +1 -1
  43. package/dist-cjs/NumericColumn.css.js +1 -1
  44. package/dist-cjs/NumericColumn.js +31 -30
  45. package/dist-cjs/NumericColumn.js.map +1 -1
  46. package/dist-cjs/RowSelectionCheckboxCellValue.js +5 -8
  47. package/dist-cjs/RowSelectionCheckboxCellValue.js.map +1 -1
  48. package/dist-cjs/RowSelectionCheckboxColumn.js +11 -10
  49. package/dist-cjs/RowSelectionCheckboxColumn.js.map +1 -1
  50. package/dist-cjs/RowSelectionCheckboxHeaderCellValue.js +20 -16
  51. package/dist-cjs/RowSelectionCheckboxHeaderCellValue.js.map +1 -1
  52. package/dist-cjs/RowSelectionRadioCellValue.js +5 -7
  53. package/dist-cjs/RowSelectionRadioCellValue.js.map +1 -1
  54. package/dist-cjs/RowSelectionRadioColumn.js +10 -9
  55. package/dist-cjs/RowSelectionRadioColumn.js.map +1 -1
  56. package/dist-cjs/RowSelectionRadioHeaderCell.js +1 -9
  57. package/dist-cjs/RowSelectionRadioHeaderCell.js.map +1 -1
  58. package/dist-cjs/RowValidationStatus.js +0 -2
  59. package/dist-cjs/RowValidationStatus.js.map +1 -1
  60. package/dist-cjs/SelectionContext.js +0 -2
  61. package/dist-cjs/SelectionContext.js.map +1 -1
  62. package/dist-cjs/SizingContext.js +0 -2
  63. package/dist-cjs/SizingContext.js.map +1 -1
  64. package/dist-cjs/TextCellEditor.css.js +1 -1
  65. package/dist-cjs/TextCellEditor.js +14 -20
  66. package/dist-cjs/TextCellEditor.js.map +1 -1
  67. package/dist-cjs/index.js +0 -2
  68. package/dist-cjs/index.js.map +1 -1
  69. package/dist-cjs/internal/CellMeasure.css.js +1 -1
  70. package/dist-cjs/internal/CellMeasure.js +1 -16
  71. package/dist-cjs/internal/CellMeasure.js.map +1 -1
  72. package/dist-cjs/internal/CellStatusIcons.js +41 -37
  73. package/dist-cjs/internal/CellStatusIcons.js.map +1 -1
  74. package/dist-cjs/internal/ColumnDropTarget.js +1 -6
  75. package/dist-cjs/internal/ColumnDropTarget.js.map +1 -1
  76. package/dist-cjs/internal/ColumnGhost.js +14 -26
  77. package/dist-cjs/internal/ColumnGhost.js.map +1 -1
  78. package/dist-cjs/internal/Cursor.js +1 -5
  79. package/dist-cjs/internal/Cursor.js.map +1 -1
  80. package/dist-cjs/internal/DefaultCellValue.js +9 -8
  81. package/dist-cjs/internal/DefaultCellValue.js.map +1 -1
  82. package/dist-cjs/internal/FakeCell.js +8 -16
  83. package/dist-cjs/internal/FakeCell.js.map +1 -1
  84. package/dist-cjs/internal/FakeGroupCell.js +0 -2
  85. package/dist-cjs/internal/FakeGroupCell.js.map +1 -1
  86. package/dist-cjs/internal/FakeHeaderCell.js +1 -5
  87. package/dist-cjs/internal/FakeHeaderCell.js.map +1 -1
  88. package/dist-cjs/internal/GroupHeaderRow.js +8 -19
  89. package/dist-cjs/internal/GroupHeaderRow.js.map +1 -1
  90. package/dist-cjs/internal/HeaderRow.js +15 -21
  91. package/dist-cjs/internal/HeaderRow.js.map +1 -1
  92. package/dist-cjs/internal/LeftPart.js +17 -23
  93. package/dist-cjs/internal/LeftPart.js.map +1 -1
  94. package/dist-cjs/internal/MiddlePart.js +16 -22
  95. package/dist-cjs/internal/MiddlePart.js.map +1 -1
  96. package/dist-cjs/internal/RightPart.js +18 -23
  97. package/dist-cjs/internal/RightPart.js.map +1 -1
  98. package/dist-cjs/internal/Scrollable.js +10 -11
  99. package/dist-cjs/internal/Scrollable.js.map +1 -1
  100. package/dist-cjs/internal/TableBody.js +11 -13
  101. package/dist-cjs/internal/TableBody.js.map +1 -1
  102. package/dist-cjs/internal/TableColGroup.js +7 -17
  103. package/dist-cjs/internal/TableColGroup.js.map +1 -1
  104. package/dist-cjs/internal/TableRow.js +81 -73
  105. package/dist-cjs/internal/TableRow.js.map +1 -1
  106. package/dist-cjs/internal/TopLeftPart.js +17 -28
  107. package/dist-cjs/internal/TopLeftPart.js.map +1 -1
  108. package/dist-cjs/internal/TopPart.js +17 -34
  109. package/dist-cjs/internal/TopPart.js.map +1 -1
  110. package/dist-cjs/internal/TopRightPart.js +23 -27
  111. package/dist-cjs/internal/TopRightPart.js.map +1 -1
  112. package/dist-cjs/internal/gridHooks.js +0 -2
  113. package/dist-cjs/internal/gridHooks.js.map +1 -1
  114. package/dist-cjs/internal/utils.js +0 -2
  115. package/dist-cjs/internal/utils.js.map +1 -1
  116. package/dist-es/BaseCell.js +47 -43
  117. package/dist-es/BaseCell.js.map +1 -1
  118. package/dist-es/CellEditor.js.map +1 -1
  119. package/dist-es/CellFrame.js +23 -29
  120. package/dist-es/CellFrame.js.map +1 -1
  121. package/dist-es/ColumnDataContext.js.map +1 -1
  122. package/dist-es/ColumnDragContext.js.map +1 -1
  123. package/dist-es/ColumnGroup.js +1 -3
  124. package/dist-es/ColumnGroup.js.map +1 -1
  125. package/dist-es/ColumnSortContext.js.map +1 -1
  126. package/dist-es/CornerTag.js +6 -3
  127. package/dist-es/CornerTag.js.map +1 -1
  128. package/dist-es/CursorContext.js.map +1 -1
  129. package/dist-es/DropdownCellEditor.js +25 -26
  130. package/dist-es/DropdownCellEditor.js.map +1 -1
  131. package/dist-es/EditorContext.js.map +1 -1
  132. package/dist-es/Grid.css.js +1 -1
  133. package/dist-es/Grid.js +139 -140
  134. package/dist-es/Grid.js.map +1 -1
  135. package/dist-es/GridColumn.js +4 -6
  136. package/dist-es/GridColumn.js.map +1 -1
  137. package/dist-es/GridContext.js.map +1 -1
  138. package/dist-es/GroupHeaderCell.js +27 -26
  139. package/dist-es/GroupHeaderCell.js.map +1 -1
  140. package/dist-es/GroupHeaderCellValue.js +1 -3
  141. package/dist-es/GroupHeaderCellValue.js.map +1 -1
  142. package/dist-es/HeaderCell.js +85 -79
  143. package/dist-es/HeaderCell.js.map +1 -1
  144. package/dist-es/HeaderCellValue.js +1 -4
  145. package/dist-es/HeaderCellValue.js.map +1 -1
  146. package/dist-es/LayoutContext.js.map +1 -1
  147. package/dist-es/NumberRange.js +2 -2
  148. package/dist-es/NumberRange.js.map +1 -1
  149. package/dist-es/NumericColumn.css.js +1 -1
  150. package/dist-es/NumericColumn.js +31 -28
  151. package/dist-es/NumericColumn.js.map +1 -1
  152. package/dist-es/RowSelectionCheckboxCellValue.js +5 -6
  153. package/dist-es/RowSelectionCheckboxCellValue.js.map +1 -1
  154. package/dist-es/RowSelectionCheckboxColumn.js +11 -8
  155. package/dist-es/RowSelectionCheckboxColumn.js.map +1 -1
  156. package/dist-es/RowSelectionCheckboxHeaderCellValue.js +20 -14
  157. package/dist-es/RowSelectionCheckboxHeaderCellValue.js.map +1 -1
  158. package/dist-es/RowSelectionRadioCellValue.js +5 -5
  159. package/dist-es/RowSelectionRadioCellValue.js.map +1 -1
  160. package/dist-es/RowSelectionRadioColumn.js +10 -7
  161. package/dist-es/RowSelectionRadioColumn.js.map +1 -1
  162. package/dist-es/RowSelectionRadioHeaderCell.js +1 -7
  163. package/dist-es/RowSelectionRadioHeaderCell.js.map +1 -1
  164. package/dist-es/SelectionContext.js.map +1 -1
  165. package/dist-es/SizingContext.js.map +1 -1
  166. package/dist-es/TextCellEditor.css.js +1 -1
  167. package/dist-es/TextCellEditor.js +14 -18
  168. package/dist-es/TextCellEditor.js.map +1 -1
  169. package/dist-es/internal/CellMeasure.css.js +1 -1
  170. package/dist-es/internal/CellMeasure.js +1 -14
  171. package/dist-es/internal/CellMeasure.js.map +1 -1
  172. package/dist-es/internal/CellStatusIcons.js +41 -35
  173. package/dist-es/internal/CellStatusIcons.js.map +1 -1
  174. package/dist-es/internal/ColumnDropTarget.js +1 -4
  175. package/dist-es/internal/ColumnDropTarget.js.map +1 -1
  176. package/dist-es/internal/ColumnGhost.js +14 -24
  177. package/dist-es/internal/ColumnGhost.js.map +1 -1
  178. package/dist-es/internal/Cursor.js +1 -3
  179. package/dist-es/internal/Cursor.js.map +1 -1
  180. package/dist-es/internal/DefaultCellValue.js +9 -6
  181. package/dist-es/internal/DefaultCellValue.js.map +1 -1
  182. package/dist-es/internal/FakeCell.js +8 -14
  183. package/dist-es/internal/FakeCell.js.map +1 -1
  184. package/dist-es/internal/FakeGroupCell.js.map +1 -1
  185. package/dist-es/internal/FakeHeaderCell.js +1 -3
  186. package/dist-es/internal/FakeHeaderCell.js.map +1 -1
  187. package/dist-es/internal/GroupHeaderRow.js +8 -17
  188. package/dist-es/internal/GroupHeaderRow.js.map +1 -1
  189. package/dist-es/internal/HeaderRow.js +15 -19
  190. package/dist-es/internal/HeaderRow.js.map +1 -1
  191. package/dist-es/internal/LeftPart.js +17 -21
  192. package/dist-es/internal/LeftPart.js.map +1 -1
  193. package/dist-es/internal/MiddlePart.js +16 -20
  194. package/dist-es/internal/MiddlePart.js.map +1 -1
  195. package/dist-es/internal/RightPart.js +18 -21
  196. package/dist-es/internal/RightPart.js.map +1 -1
  197. package/dist-es/internal/Scrollable.js +10 -9
  198. package/dist-es/internal/Scrollable.js.map +1 -1
  199. package/dist-es/internal/TableBody.js +11 -11
  200. package/dist-es/internal/TableBody.js.map +1 -1
  201. package/dist-es/internal/TableColGroup.js +7 -15
  202. package/dist-es/internal/TableColGroup.js.map +1 -1
  203. package/dist-es/internal/TableRow.js +81 -71
  204. package/dist-es/internal/TableRow.js.map +1 -1
  205. package/dist-es/internal/TopLeftPart.js +17 -26
  206. package/dist-es/internal/TopLeftPart.js.map +1 -1
  207. package/dist-es/internal/TopPart.js +17 -32
  208. package/dist-es/internal/TopPart.js.map +1 -1
  209. package/dist-es/internal/TopRightPart.js +23 -25
  210. package/dist-es/internal/TopRightPart.js.map +1 -1
  211. package/dist-es/internal/gridHooks.js.map +1 -1
  212. package/dist-es/internal/utils.js.map +1 -1
  213. package/package.json +11 -8
  214. package/dist-cjs/internal/FakeCell.css.js +0 -6
  215. package/dist-cjs/internal/FakeCell.css.js.map +0 -1
  216. package/dist-es/internal/FakeCell.css.js +0 -4
  217. package/dist-es/internal/FakeCell.css.js.map +0 -1
@@ -32,9 +32,7 @@ import css_248z from './HeaderCell.css.js';
32
32
  const withBaseName = makePrefixer("saltGridHeaderCell");
33
33
  function HeaderCellSeparator(props) {
34
34
  const className = withBaseName([props.separatorType, "Separator"].join(""));
35
- return /* @__PURE__ */ jsx("div", {
36
- className
37
- });
35
+ return /* @__PURE__ */ jsx("div", { className });
38
36
  }
39
37
  function HeaderCell(props) {
40
38
  const { column, children, isFocused } = props;
@@ -60,17 +58,20 @@ function HeaderCell(props) {
60
58
  const valueAlignRight = align === "right";
61
59
  const HeaderCellSortingIcon = ({ justify }) => {
62
60
  const className = withBaseName("sortingIcon");
63
- const icon = /* @__PURE__ */ jsxs("div", {
64
- className: clsx(className, {
65
- [withBaseName("sortingIconStart")]: justify === "start",
66
- [withBaseName("sortingIconEnd")]: justify === "end"
67
- }),
68
- "aria-hidden": true,
69
- children: [
70
- sortOrder === SortOrder.ASC && /* @__PURE__ */ jsx(ArrowUpIcon, {}),
71
- sortOrder === SortOrder.DESC && /* @__PURE__ */ jsx(ArrowDownIcon, {})
72
- ]
73
- });
61
+ const icon = /* @__PURE__ */ jsxs(
62
+ "div",
63
+ {
64
+ className: clsx(className, {
65
+ [withBaseName("sortingIconStart")]: justify === "start",
66
+ [withBaseName("sortingIconEnd")]: justify === "end"
67
+ }),
68
+ "aria-hidden": true,
69
+ children: [
70
+ sortOrder === SortOrder.ASC && /* @__PURE__ */ jsx(ArrowUpIcon, {}),
71
+ sortOrder === SortOrder.DESC && /* @__PURE__ */ jsx(ArrowDownIcon, {})
72
+ ]
73
+ }
74
+ );
74
75
  return icon;
75
76
  };
76
77
  const ariaSortMap = {
@@ -96,48 +97,52 @@ function HeaderCell(props) {
96
97
  onClick();
97
98
  }
98
99
  };
99
- return /* @__PURE__ */ jsxs("th", {
100
- ref,
101
- "aria-colindex": column.index + 1,
102
- "data-column-index": column.index,
103
- className: clsx(withBaseName(), headerClassName, {
104
- [withBaseName("sortable")]: sortable
105
- }),
106
- role: "columnheader",
107
- "data-testid": "column-header",
108
- tabIndex: isFocused && !isFocusableContent ? 0 : -1,
109
- onFocus,
110
- onClick: sortable ? onClick : void 0,
111
- onKeyDown: sortable ? onKeyDown : void 0,
112
- "aria-sort": sortByColumnId === id && sortable ? ariaSort : void 0,
113
- "aria-label": column.info.props["aria-label"],
114
- children: [
115
- sortByColumnId === id && sortable && valueAlignRight && /* @__PURE__ */ jsx(HeaderCellSortingIcon, {
116
- justify: "start"
117
- }),
118
- /* @__PURE__ */ jsx("div", {
119
- className: clsx(withBaseName("valueContainer"), {
120
- [withBaseName("alignRight")]: valueAlignRight,
121
- [withBaseName("alignRightWithSortOrder")]: valueAlignRight && withSortOrder,
122
- [withBaseName("alignLeftWithSortOrder")]: !valueAlignRight && withSortOrder
123
- }),
124
- onMouseDown,
125
- children
126
- }),
127
- sortByColumnId === id && sortable && !valueAlignRight && /* @__PURE__ */ jsx(HeaderCellSortingIcon, {
128
- justify: "end"
129
- }),
130
- /* @__PURE__ */ jsx(HeaderCellSeparator, {
131
- separatorType: separator
132
- }),
133
- /* @__PURE__ */ jsx("div", {
134
- "data-testid": `column-${column.index}-resize-handle`,
135
- className: withBaseName("resizeHandle"),
136
- onMouseDown: onResizeHandleMouseDown
100
+ return /* @__PURE__ */ jsxs(
101
+ "th",
102
+ {
103
+ ref,
104
+ "aria-colindex": column.index + 1,
105
+ "data-column-index": column.index,
106
+ className: clsx(withBaseName(), headerClassName, {
107
+ [withBaseName("sortable")]: sortable
137
108
  }),
138
- isFocused && !isFocusableContent && /* @__PURE__ */ jsx(Cursor, {})
139
- ]
140
- });
109
+ role: "columnheader",
110
+ "data-testid": "column-header",
111
+ tabIndex: isFocused && !isFocusableContent ? 0 : -1,
112
+ onFocus,
113
+ onClick: sortable ? onClick : void 0,
114
+ onKeyDown: sortable ? onKeyDown : void 0,
115
+ "aria-sort": sortByColumnId === id && sortable ? ariaSort : void 0,
116
+ "aria-label": column.info.props["aria-label"],
117
+ children: [
118
+ sortByColumnId === id && sortable && valueAlignRight && /* @__PURE__ */ jsx(HeaderCellSortingIcon, { justify: "start" }),
119
+ /* @__PURE__ */ jsx(
120
+ "div",
121
+ {
122
+ className: clsx(withBaseName("valueContainer"), {
123
+ [withBaseName("alignRight")]: valueAlignRight,
124
+ // both classNames below needed to ensure header cell title & sort icon do not overlap when column resized to be smaller
125
+ [withBaseName("alignRightWithSortOrder")]: valueAlignRight && withSortOrder,
126
+ [withBaseName("alignLeftWithSortOrder")]: !valueAlignRight && withSortOrder
127
+ }),
128
+ onMouseDown,
129
+ children
130
+ }
131
+ ),
132
+ sortByColumnId === id && sortable && !valueAlignRight && /* @__PURE__ */ jsx(HeaderCellSortingIcon, { justify: "end" }),
133
+ /* @__PURE__ */ jsx(HeaderCellSeparator, { separatorType: separator }),
134
+ /* @__PURE__ */ jsx(
135
+ "div",
136
+ {
137
+ "data-testid": `column-${column.index}-resize-handle`,
138
+ className: withBaseName("resizeHandle"),
139
+ onMouseDown: onResizeHandleMouseDown
140
+ }
141
+ ),
142
+ isFocused && !isFocusableContent && /* @__PURE__ */ jsx(Cursor, {})
143
+ ]
144
+ }
145
+ );
141
146
  }
142
147
  function AutoSizeHeaderCell(props) {
143
148
  const { column, children, isFocused } = props;
@@ -151,30 +156,31 @@ function AutoSizeHeaderCell(props) {
151
156
  resizeColumn(column.index, width);
152
157
  }
153
158
  });
154
- return /* @__PURE__ */ jsxs("th", {
155
- ref,
156
- "aria-colindex": column.index + 1,
157
- "data-column-index": column.index,
158
- className: withBaseName(),
159
- role: "columnheader",
160
- "data-testid": "column-header",
161
- tabIndex: isFocused && !isFocusableContent ? 0 : -1,
162
- onFocus,
163
- children: [
164
- /* @__PURE__ */ jsx("div", {
165
- className: withBaseName("autosizeContainer"),
166
- children: /* @__PURE__ */ jsx("div", {
167
- ref: valueContainerRef,
168
- className: withBaseName("measuredContent"),
169
- children
170
- })
171
- }),
172
- /* @__PURE__ */ jsx(HeaderCellSeparator, {
173
- separatorType: separator
174
- }),
175
- isFocused && !isFocusableContent && /* @__PURE__ */ jsx(Cursor, {})
176
- ]
177
- });
159
+ return /* @__PURE__ */ jsxs(
160
+ "th",
161
+ {
162
+ ref,
163
+ "aria-colindex": column.index + 1,
164
+ "data-column-index": column.index,
165
+ className: withBaseName(),
166
+ role: "columnheader",
167
+ "data-testid": "column-header",
168
+ tabIndex: isFocused && !isFocusableContent ? 0 : -1,
169
+ onFocus,
170
+ children: [
171
+ /* @__PURE__ */ jsx("div", { className: withBaseName("autosizeContainer"), children: /* @__PURE__ */ jsx(
172
+ "div",
173
+ {
174
+ ref: valueContainerRef,
175
+ className: withBaseName("measuredContent"),
176
+ children
177
+ }
178
+ ) }),
179
+ /* @__PURE__ */ jsx(HeaderCellSeparator, { separatorType: separator }),
180
+ isFocused && !isFocusableContent && /* @__PURE__ */ jsx(Cursor, {})
181
+ ]
182
+ }
183
+ );
178
184
  }
179
185
 
180
186
  export { AutoSizeHeaderCell, HeaderCell, HeaderCellSeparator };
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderCell.js","sources":["../src/HeaderCell.tsx"],"sourcesContent":["import {\n type FlexContentAlignment,\n makePrefixer,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { ArrowDownIcon, ArrowUpIcon } from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type KeyboardEventHandler, useRef } from \"react\";\n\nimport { useColumnDragContext } from \"./ColumnDragContext\";\nimport { useColumnSortContext } from \"./ColumnSortContext\";\nimport { type ColumnSeparatorType, SortOrder } from \"./Grid\";\nimport type { HeaderCellProps } from \"./GridColumn\";\nimport { useSizingContext } from \"./SizingContext\";\nimport { Cursor, useFocusableContent } from \"./internal\";\n\nimport headerCellCss from \"./HeaderCell.css\";\n\nconst withBaseName = makePrefixer(\"saltGridHeaderCell\");\n\nexport interface HeaderCellSeparatorProps {\n separatorType: ColumnSeparatorType;\n}\n\nexport function HeaderCellSeparator(props: HeaderCellSeparatorProps) {\n const className = withBaseName([props.separatorType, \"Separator\"].join(\"\"));\n return <div className={className} />;\n}\n\ntype AriaSortProps = \"none\" | \"ascending\" | \"descending\";\n\nexport function HeaderCell<T>(props: HeaderCellProps<T>) {\n const { column, children, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-header-cell\",\n css: headerCellCss,\n window: targetWindow,\n });\n\n const { separator } = column;\n const { align, id, headerClassName, sortable, onSortOrderChange } =\n column.info.props;\n const { onResizeHandleMouseDown } = useSizingContext();\n\n const { columnMove, onColumnMoveHandleMouseDown } = useColumnDragContext();\n const onMouseDown = columnMove ? onColumnMoveHandleMouseDown : undefined;\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableHeaderCellElement>();\n\n const {\n onClickSortColumn,\n setSortByColumnId,\n sortOrder,\n sortByColumnId,\n setSortOrder,\n } = useColumnSortContext();\n\n const valueAlignRight = align === \"right\";\n\n interface HeaderCellSortingIconProps {\n justify: FlexContentAlignment;\n }\n\n const HeaderCellSortingIcon = ({ justify }: HeaderCellSortingIconProps) => {\n const className = withBaseName(\"sortingIcon\");\n const icon = (\n <div\n className={clsx(className, {\n [withBaseName(\"sortingIconStart\")]: justify === \"start\",\n [withBaseName(\"sortingIconEnd\")]: justify === \"end\",\n })}\n aria-hidden\n >\n {sortOrder === SortOrder.ASC && <ArrowUpIcon />}\n {sortOrder === SortOrder.DESC && <ArrowDownIcon />}\n </div>\n );\n\n return icon;\n };\n\n const ariaSortMap = {\n asc: \"ascending\",\n desc: \"descending\",\n none: \"none\",\n };\n\n const ariaSort = ariaSortMap[sortOrder] as AriaSortProps;\n\n const order =\n sortOrder === SortOrder.ASC\n ? SortOrder.DESC\n : sortOrder === SortOrder.DESC\n ? SortOrder.NONE\n : SortOrder.ASC;\n\n const withSortOrder = sortOrder !== SortOrder.NONE && sortByColumnId === id;\n\n const onClick = () => {\n if (onSortOrderChange) {\n setSortByColumnId(id);\n setSortOrder(order);\n onSortOrderChange({ sortOrder: order });\n return;\n }\n setSortByColumnId(id);\n onClickSortColumn(id);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLTableHeaderCellElement> = (\n event,\n ) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n onClick();\n }\n };\n\n return (\n <th\n ref={ref}\n aria-colindex={column.index + 1}\n data-column-index={column.index}\n className={clsx(withBaseName(), headerClassName, {\n [withBaseName(\"sortable\")]: sortable,\n })}\n role=\"columnheader\"\n data-testid=\"column-header\"\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n onClick={sortable ? onClick : undefined}\n onKeyDown={sortable ? onKeyDown : undefined}\n aria-sort={sortByColumnId === id && sortable ? ariaSort : undefined}\n aria-label={column.info.props[\"aria-label\"]}\n >\n {sortByColumnId === id && sortable && valueAlignRight && (\n <HeaderCellSortingIcon justify=\"start\" />\n )}\n <div\n className={clsx(withBaseName(\"valueContainer\"), {\n [withBaseName(\"alignRight\")]: valueAlignRight,\n // both classNames below needed to ensure header cell title & sort icon do not overlap when column resized to be smaller\n [withBaseName(\"alignRightWithSortOrder\")]:\n valueAlignRight && withSortOrder,\n [withBaseName(\"alignLeftWithSortOrder\")]:\n !valueAlignRight && withSortOrder,\n })}\n onMouseDown={onMouseDown}\n >\n {children}\n </div>\n {sortByColumnId === id && sortable && !valueAlignRight && (\n <HeaderCellSortingIcon justify=\"end\" />\n )}\n <HeaderCellSeparator separatorType={separator} />\n <div\n data-testid={`column-${column.index}-resize-handle`}\n className={withBaseName(\"resizeHandle\")}\n onMouseDown={onResizeHandleMouseDown}\n />\n {isFocused && !isFocusableContent && <Cursor />}\n </th>\n );\n}\n\nexport function AutoSizeHeaderCell<T>(props: HeaderCellProps<T>) {\n const { column, children, isFocused } = props;\n const { separator } = column;\n const valueContainerRef = useRef<HTMLDivElement>(null);\n const { resizeColumn } = useSizingContext();\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableHeaderCellElement>();\n\n useIsomorphicLayoutEffect(() => {\n const width = valueContainerRef.current\n ? valueContainerRef.current.offsetWidth\n : undefined;\n if (width !== undefined && width !== column.info.width) {\n resizeColumn(column.index, width);\n }\n });\n\n return (\n <th\n ref={ref}\n aria-colindex={column.index + 1}\n data-column-index={column.index}\n className={withBaseName()}\n role=\"columnheader\"\n data-testid=\"column-header\"\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n >\n <div className={withBaseName(\"autosizeContainer\")}>\n <div\n ref={valueContainerRef}\n className={withBaseName(\"measuredContent\")}\n >\n {children}\n </div>\n </div>\n <HeaderCellSeparator separatorType={separator} />\n {isFocused && !isFocusableContent && <Cursor />}\n </th>\n );\n}\n"],"names":["headerCellCss"],"mappings":"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"}
1
+ {"version":3,"file":"HeaderCell.js","sources":["../src/HeaderCell.tsx"],"sourcesContent":["import {\n type FlexContentAlignment,\n makePrefixer,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { ArrowDownIcon, ArrowUpIcon } from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type KeyboardEventHandler, useRef } from \"react\";\n\nimport { useColumnDragContext } from \"./ColumnDragContext\";\nimport { useColumnSortContext } from \"./ColumnSortContext\";\nimport { type ColumnSeparatorType, SortOrder } from \"./Grid\";\nimport type { HeaderCellProps } from \"./GridColumn\";\nimport { useSizingContext } from \"./SizingContext\";\nimport { Cursor, useFocusableContent } from \"./internal\";\n\nimport headerCellCss from \"./HeaderCell.css\";\n\nconst withBaseName = makePrefixer(\"saltGridHeaderCell\");\n\nexport interface HeaderCellSeparatorProps {\n separatorType: ColumnSeparatorType;\n}\n\nexport function HeaderCellSeparator(props: HeaderCellSeparatorProps) {\n const className = withBaseName([props.separatorType, \"Separator\"].join(\"\"));\n return <div className={className} />;\n}\n\ntype AriaSortProps = \"none\" | \"ascending\" | \"descending\";\n\nexport function HeaderCell<T>(props: HeaderCellProps<T>) {\n const { column, children, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-header-cell\",\n css: headerCellCss,\n window: targetWindow,\n });\n\n const { separator } = column;\n const { align, id, headerClassName, sortable, onSortOrderChange } =\n column.info.props;\n const { onResizeHandleMouseDown } = useSizingContext();\n\n const { columnMove, onColumnMoveHandleMouseDown } = useColumnDragContext();\n const onMouseDown = columnMove ? onColumnMoveHandleMouseDown : undefined;\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableHeaderCellElement>();\n\n const {\n onClickSortColumn,\n setSortByColumnId,\n sortOrder,\n sortByColumnId,\n setSortOrder,\n } = useColumnSortContext();\n\n const valueAlignRight = align === \"right\";\n\n interface HeaderCellSortingIconProps {\n justify: FlexContentAlignment;\n }\n\n const HeaderCellSortingIcon = ({ justify }: HeaderCellSortingIconProps) => {\n const className = withBaseName(\"sortingIcon\");\n const icon = (\n <div\n className={clsx(className, {\n [withBaseName(\"sortingIconStart\")]: justify === \"start\",\n [withBaseName(\"sortingIconEnd\")]: justify === \"end\",\n })}\n aria-hidden\n >\n {sortOrder === SortOrder.ASC && <ArrowUpIcon />}\n {sortOrder === SortOrder.DESC && <ArrowDownIcon />}\n </div>\n );\n\n return icon;\n };\n\n const ariaSortMap = {\n asc: \"ascending\",\n desc: \"descending\",\n none: \"none\",\n };\n\n const ariaSort = ariaSortMap[sortOrder] as AriaSortProps;\n\n const order =\n sortOrder === SortOrder.ASC\n ? SortOrder.DESC\n : sortOrder === SortOrder.DESC\n ? SortOrder.NONE\n : SortOrder.ASC;\n\n const withSortOrder = sortOrder !== SortOrder.NONE && sortByColumnId === id;\n\n const onClick = () => {\n if (onSortOrderChange) {\n setSortByColumnId(id);\n setSortOrder(order);\n onSortOrderChange({ sortOrder: order });\n return;\n }\n setSortByColumnId(id);\n onClickSortColumn(id);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLTableHeaderCellElement> = (\n event,\n ) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n onClick();\n }\n };\n\n return (\n <th\n ref={ref}\n aria-colindex={column.index + 1}\n data-column-index={column.index}\n className={clsx(withBaseName(), headerClassName, {\n [withBaseName(\"sortable\")]: sortable,\n })}\n role=\"columnheader\"\n data-testid=\"column-header\"\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n onClick={sortable ? onClick : undefined}\n onKeyDown={sortable ? onKeyDown : undefined}\n aria-sort={sortByColumnId === id && sortable ? ariaSort : undefined}\n aria-label={column.info.props[\"aria-label\"]}\n >\n {sortByColumnId === id && sortable && valueAlignRight && (\n <HeaderCellSortingIcon justify=\"start\" />\n )}\n <div\n className={clsx(withBaseName(\"valueContainer\"), {\n [withBaseName(\"alignRight\")]: valueAlignRight,\n // both classNames below needed to ensure header cell title & sort icon do not overlap when column resized to be smaller\n [withBaseName(\"alignRightWithSortOrder\")]:\n valueAlignRight && withSortOrder,\n [withBaseName(\"alignLeftWithSortOrder\")]:\n !valueAlignRight && withSortOrder,\n })}\n onMouseDown={onMouseDown}\n >\n {children}\n </div>\n {sortByColumnId === id && sortable && !valueAlignRight && (\n <HeaderCellSortingIcon justify=\"end\" />\n )}\n <HeaderCellSeparator separatorType={separator} />\n <div\n data-testid={`column-${column.index}-resize-handle`}\n className={withBaseName(\"resizeHandle\")}\n onMouseDown={onResizeHandleMouseDown}\n />\n {isFocused && !isFocusableContent && <Cursor />}\n </th>\n );\n}\n\nexport function AutoSizeHeaderCell<T>(props: HeaderCellProps<T>) {\n const { column, children, isFocused } = props;\n const { separator } = column;\n const valueContainerRef = useRef<HTMLDivElement>(null);\n const { resizeColumn } = useSizingContext();\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableHeaderCellElement>();\n\n useIsomorphicLayoutEffect(() => {\n const width = valueContainerRef.current\n ? valueContainerRef.current.offsetWidth\n : undefined;\n if (width !== undefined && width !== column.info.width) {\n resizeColumn(column.index, width);\n }\n });\n\n return (\n <th\n ref={ref}\n aria-colindex={column.index + 1}\n data-column-index={column.index}\n className={withBaseName()}\n role=\"columnheader\"\n data-testid=\"column-header\"\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n >\n <div className={withBaseName(\"autosizeContainer\")}>\n <div\n ref={valueContainerRef}\n className={withBaseName(\"measuredContent\")}\n >\n {children}\n </div>\n </div>\n <HeaderCellSeparator separatorType={separator} />\n {isFocused && !isFocusableContent && <Cursor />}\n </th>\n );\n}\n"],"names":["headerCellCss"],"mappings":"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"}
@@ -5,10 +5,7 @@ const withBaseName = makePrefixer("saltGridHeaderCell");
5
5
  function HeaderCellValue(props) {
6
6
  const { column } = props;
7
7
  const title = column.info.props.name;
8
- return /* @__PURE__ */ jsx("span", {
9
- className: withBaseName("text"),
10
- children: title
11
- });
8
+ return /* @__PURE__ */ jsx("span", { className: withBaseName("text"), children: title });
12
9
  }
13
10
 
14
11
  export { HeaderCellValue };
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderCellValue.js","sources":["../src/HeaderCellValue.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport type { GridHeaderValueProps } from \"./GridColumn\";\n\nconst withBaseName = makePrefixer(\"saltGridHeaderCell\");\n\nexport function HeaderCellValue<T>(props: GridHeaderValueProps<T>) {\n const { column } = props;\n const title = column.info.props.name;\n return <span className={withBaseName(\"text\")}>{title}</span>;\n}\n"],"names":[],"mappings":";;;AAGA,MAAM,YAAA,GAAe,aAAa,oBAAoB,CAAA,CAAA;AAE/C,SAAS,gBAAmB,KAAgC,EAAA;AACjE,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA,CAAA;AACnB,EAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAA;AAChC,EAAA,uBAAQ,GAAA,CAAA,MAAA,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,IAAI,QAAA,EAAA,KAAA;AAAA,GAAM,CAAA,CAAA;AACvD;;;;"}
1
+ {"version":3,"file":"HeaderCellValue.js","sources":["../src/HeaderCellValue.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport type { GridHeaderValueProps } from \"./GridColumn\";\n\nconst withBaseName = makePrefixer(\"saltGridHeaderCell\");\n\nexport function HeaderCellValue<T>(props: GridHeaderValueProps<T>) {\n const { column } = props;\n const title = column.info.props.name;\n return <span className={withBaseName(\"text\")}>{title}</span>;\n}\n"],"names":[],"mappings":";;;AAGA,MAAM,YAAA,GAAe,aAAa,oBAAoB,CAAA;AAE/C,SAAS,gBAAmB,KAAgC,EAAA;AACjE,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA;AACnB,EAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA;AAChC,EAAA,2BAAQ,MAAK,EAAA,EAAA,SAAA,EAAW,YAAa,CAAA,MAAM,GAAI,QAAM,EAAA,KAAA,EAAA,CAAA;AACvD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"LayoutContext.js","sources":["../src/LayoutContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport interface LayoutContext {\n totalWidth: number;\n totalHeight: number;\n clientWidth: number;\n clientHeight: number;\n}\n\nexport const LayoutContext = createContext<LayoutContext | undefined>(\n undefined,\n);\n\nexport const useLayoutContext = () => {\n const c = useContext(LayoutContext);\n if (!c) {\n throw new Error(\"useLayoutContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":[],"mappings":";;AASO,MAAM,aAAgB,GAAA,aAAA;AAAA,EAC3B,KAAA,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"LayoutContext.js","sources":["../src/LayoutContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport interface LayoutContext {\n totalWidth: number;\n totalHeight: number;\n clientWidth: number;\n clientHeight: number;\n}\n\nexport const LayoutContext = createContext<LayoutContext | undefined>(\n undefined,\n);\n\nexport const useLayoutContext = () => {\n const c = useContext(LayoutContext);\n if (!c) {\n throw new Error(\"useLayoutContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":[],"mappings":";;AASO,MAAM,aAAgB,GAAA,aAAA;AAAA,EAC3B,KAAA;AACF;;;;"}
@@ -13,7 +13,7 @@ function range(...args) {
13
13
  }
14
14
  return [...Array(end - start).keys()].map((i) => start + i * step);
15
15
  }
16
- const _NumberRange = class {
16
+ const _NumberRange = class _NumberRange {
17
17
  constructor(start, end) {
18
18
  if (end < start) {
19
19
  throw new Error(`Invalid start and end: [${start}, ${end}]`);
@@ -51,8 +51,8 @@ const _NumberRange = class {
51
51
  return this.start <= n && n < this.end;
52
52
  }
53
53
  };
54
+ _NumberRange.empty = new _NumberRange(0, 0);
54
55
  let NumberRange = _NumberRange;
55
- NumberRange.empty = new _NumberRange(0, 0);
56
56
 
57
57
  export { NumberRange, range };
58
58
  //# sourceMappingURL=NumberRange.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"NumberRange.js","sources":["../src/NumberRange.ts"],"sourcesContent":["export function range(\n ...args: [number] | [number, number] | [number, number, number]\n): number[] {\n let start = 0;\n let end = 0;\n let step = 1;\n if (args.length < 2) {\n end = args[0];\n } else {\n start = args[0];\n end = args[1]!;\n if (args.length > 2) {\n step = args[2]!;\n }\n }\n return [...Array(end - start).keys()].map((i) => start + i * step);\n}\n\nexport class NumberRange {\n public readonly start: number;\n\n public readonly end: number;\n\n public constructor(start: number, end: number) {\n if (end < start) {\n throw new Error(`Invalid start and end: [${start}, ${end}]`);\n }\n this.start = start;\n this.end = end;\n }\n\n public get length(): number {\n return this.end - this.start;\n }\n\n public map<T>(fn: (i: number) => T): T[] {\n return range(this.start, this.end).map(fn);\n }\n\n public forEach(fn: (i: number) => void): void {\n range(this.start, this.end).forEach(fn);\n }\n\n public *[Symbol.iterator]() {\n for (let i = this.start; i < this.end; ++i) {\n yield i;\n }\n }\n\n public static equals(a: NumberRange | undefined, b: NumberRange | undefined) {\n if (!a) {\n return !b;\n }\n return !b ? false : a.start === b.start && a.end === b.end;\n }\n\n public update(start: number, end: number) {\n return this.end !== end || this.start !== start\n ? new NumberRange(start, end)\n : this;\n }\n\n public static empty: NumberRange = new NumberRange(0, 0);\n\n public toString() {\n return `[${this.start}, ${this.end}]`;\n }\n\n public contains(n: number) {\n return this.start <= n && n < this.end;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"NumberRange.js","sources":["../src/NumberRange.ts"],"sourcesContent":["export function range(\n ...args: [number] | [number, number] | [number, number, number]\n): number[] {\n let start = 0;\n let end = 0;\n let step = 1;\n if (args.length < 2) {\n end = args[0];\n } else {\n start = args[0];\n end = args[1]!;\n if (args.length > 2) {\n step = args[2]!;\n }\n }\n return [...Array(end - start).keys()].map((i) => start + i * step);\n}\n\nexport class NumberRange {\n public readonly start: number;\n\n public readonly end: number;\n\n public constructor(start: number, end: number) {\n if (end < start) {\n throw new Error(`Invalid start and end: [${start}, ${end}]`);\n }\n this.start = start;\n this.end = end;\n }\n\n public get length(): number {\n return this.end - this.start;\n }\n\n public map<T>(fn: (i: number) => T): T[] {\n return range(this.start, this.end).map(fn);\n }\n\n public forEach(fn: (i: number) => void): void {\n range(this.start, this.end).forEach(fn);\n }\n\n public *[Symbol.iterator]() {\n for (let i = this.start; i < this.end; ++i) {\n yield i;\n }\n }\n\n public static equals(a: NumberRange | undefined, b: NumberRange | undefined) {\n if (!a) {\n return !b;\n }\n return !b ? false : a.start === b.start && a.end === b.end;\n }\n\n public update(start: number, end: number) {\n return this.end !== end || this.start !== start\n ? new NumberRange(start, end)\n : this;\n }\n\n public static empty: NumberRange = new NumberRange(0, 0);\n\n public toString() {\n return `[${this.start}, ${this.end}]`;\n }\n\n public contains(n: number) {\n return this.start <= n && n < this.end;\n }\n}\n"],"names":[],"mappings":"AAAO,SAAS,SACX,IACO,EAAA;AACV,EAAA,IAAI,KAAQ,GAAA,CAAA;AACZ,EAAA,IAAI,GAAM,GAAA,CAAA;AACV,EAAA,IAAI,IAAO,GAAA,CAAA;AACX,EAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,IAAA,GAAA,GAAM,KAAK,CAAC,CAAA;AAAA,GACP,MAAA;AACL,IAAA,KAAA,GAAQ,KAAK,CAAC,CAAA;AACd,IAAA,GAAA,GAAM,KAAK,CAAC,CAAA;AACZ,IAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,MAAA,IAAA,GAAO,KAAK,CAAC,CAAA;AAAA;AACf;AAEF,EAAA,OAAO,CAAC,GAAG,KAAM,CAAA,GAAA,GAAM,KAAK,CAAE,CAAA,IAAA,EAAM,CAAA,CAAE,GAAI,CAAA,CAAC,CAAM,KAAA,KAAA,GAAQ,IAAI,IAAI,CAAA;AACnE;AAEO,MAAM,YAAA,GAAN,MAAM,YAAY,CAAA;AAAA,EAKhB,WAAA,CAAY,OAAe,GAAa,EAAA;AAC7C,IAAA,IAAI,MAAM,KAAO,EAAA;AACf,MAAA,MAAM,IAAI,KAAM,CAAA,CAAA,wBAAA,EAA2B,KAAK,CAAA,EAAA,EAAK,GAAG,CAAG,CAAA,CAAA,CAAA;AAAA;AAE7D,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AACb,IAAA,IAAA,CAAK,GAAM,GAAA,GAAA;AAAA;AACb,EAEA,IAAW,MAAiB,GAAA;AAC1B,IAAO,OAAA,IAAA,CAAK,MAAM,IAAK,CAAA,KAAA;AAAA;AACzB,EAEO,IAAO,EAA2B,EAAA;AACvC,IAAA,OAAO,MAAM,IAAK,CAAA,KAAA,EAAO,KAAK,GAAG,CAAA,CAAE,IAAI,EAAE,CAAA;AAAA;AAC3C,EAEO,QAAQ,EAA+B,EAAA;AAC5C,IAAA,KAAA,CAAM,KAAK,KAAO,EAAA,IAAA,CAAK,GAAG,CAAA,CAAE,QAAQ,EAAE,CAAA;AAAA;AACxC,EAEA,EAAS,MAAO,CAAA,QAAQ,CAAI,GAAA;AAC1B,IAAA,KAAA,IAAS,IAAI,IAAK,CAAA,KAAA,EAAO,IAAI,IAAK,CAAA,GAAA,EAAK,EAAE,CAAG,EAAA;AAC1C,MAAM,MAAA,CAAA;AAAA;AACR;AACF,EAEA,OAAc,MAAO,CAAA,CAAA,EAA4B,CAA4B,EAAA;AAC3E,IAAA,IAAI,CAAC,CAAG,EAAA;AACN,MAAA,OAAO,CAAC,CAAA;AAAA;AAEV,IAAO,OAAA,CAAC,IAAI,KAAQ,GAAA,CAAA,CAAE,UAAU,CAAE,CAAA,KAAA,IAAS,CAAE,CAAA,GAAA,KAAQ,CAAE,CAAA,GAAA;AAAA;AACzD,EAEO,MAAA,CAAO,OAAe,GAAa,EAAA;AACxC,IAAO,OAAA,IAAA,CAAK,GAAQ,KAAA,GAAA,IAAO,IAAK,CAAA,KAAA,KAAU,QACtC,IAAI,YAAA,CAAY,KAAO,EAAA,GAAG,CAC1B,GAAA,IAAA;AAAA;AACN,EAIO,QAAW,GAAA;AAChB,IAAA,OAAO,CAAI,CAAA,EAAA,IAAA,CAAK,KAAK,CAAA,EAAA,EAAK,KAAK,GAAG,CAAA,CAAA,CAAA;AAAA;AACpC,EAEO,SAAS,CAAW,EAAA;AACzB,IAAA,OAAO,IAAK,CAAA,KAAA,IAAS,CAAK,IAAA,CAAA,GAAI,IAAK,CAAA,GAAA;AAAA;AAEvC,CAAA;AArDa,YAAA,CA4CG,KAAqB,GAAA,IAAI,YAAY,CAAA,CAAA,EAAG,CAAC,CAAA;AA5ClD,IAAM,WAAN,GAAA;;;;"}
@@ -1,4 +1,4 @@
1
- var css_248z = ".saltGridNumericCellValue {\n overflow: hidden;\n text-overflow: ellipsis;\n padding: var(--grid-cell-padding);\n text-align: right;\n}\n\n.saltGridNumericCellEditor {\n}\n\n.saltGridNumericCellEditor-inputContainer {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: var(--grid-background);\n box-sizing: border-box;\n border-style: dotted;\n border-width: 2px;\n border-color: var(--grid-cursor-borderColor);\n padding: 0;\n}\n\n.saltGridNumericCellEditor input {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n outline: none;\n border: none;\n padding: 0 calc(var(--grid-padding) - 2px);\n font-size: var(--grid-fontSize);\n font-family: inherit;\n background: var(--grid-editableCell-background-active);\n color: var(--grid-editableCell-color-active);\n}\n";
1
+ var css_248z = ".saltGridNumericCellValue {\n overflow: hidden;\n text-overflow: ellipsis;\n padding: var(--grid-cell-padding);\n text-align: right;\n}\n\n.saltGridNumericCellEditor-inputContainer {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n background: var(--grid-background);\n box-sizing: border-box;\n border-style: dotted;\n border-width: 2px;\n border-color: var(--grid-cursor-borderColor);\n padding: 0;\n}\n\n.saltGridNumericCellEditor input {\n position: absolute;\n top: 0;\n left: 0;\n bottom: 0;\n right: 0;\n outline: none;\n border: none;\n padding: 0 calc(var(--grid-padding) - 2px);\n font-size: var(--grid-fontSize);\n font-family: inherit;\n background: var(--grid-editableCell-background-active);\n color: var(--grid-editableCell-color-active);\n}\n";
2
2
 
3
3
  export { css_248z as default };
4
4
  //# sourceMappingURL=NumericColumn.css.js.map
@@ -22,10 +22,7 @@ function NumericCellValue(props) {
22
22
  const columnProps = column.info.props;
23
23
  const { precision } = columnProps;
24
24
  const text = isNumber(value) ? value.toFixed(precision) : "";
25
- return /* @__PURE__ */ jsx("div", {
26
- className: "saltGridNumericCellValue",
27
- children: text
28
- });
25
+ return /* @__PURE__ */ jsx("div", { className: "saltGridNumericCellValue", children: text });
29
26
  }
30
27
  function NumericCellEditor(props) {
31
28
  const { column, row } = props;
@@ -72,32 +69,38 @@ function NumericCellEditor(props) {
72
69
  document == null ? void 0 : document.removeEventListener("mousedown", focusOut, true);
73
70
  };
74
71
  }, [endEditMode, editorText]);
75
- return /* @__PURE__ */ jsxs(CellFrame, {
76
- separator: column == null ? void 0 : column.separator,
77
- className: "saltGridNumericCellEditor",
78
- children: [
79
- /* @__PURE__ */ jsx("div", {
80
- className: "saltGridNumericCellEditor-inputContainer",
81
- children: /* @__PURE__ */ jsx("input", {
82
- ref: inputRef,
83
- "data-testid": "grid-cell-editor-input",
84
- autoFocus: true,
85
- value: editorText,
86
- onChange,
87
- onKeyDown
88
- })
89
- }),
90
- /* @__PURE__ */ jsx(CornerTag, {})
91
- ]
92
- });
72
+ return /* @__PURE__ */ jsxs(
73
+ CellFrame,
74
+ {
75
+ separator: column == null ? void 0 : column.separator,
76
+ className: "saltGridNumericCellEditor",
77
+ children: [
78
+ /* @__PURE__ */ jsx("div", { className: "saltGridNumericCellEditor-inputContainer", children: /* @__PURE__ */ jsx(
79
+ "input",
80
+ {
81
+ ref: inputRef,
82
+ "data-testid": "grid-cell-editor-input",
83
+ autoFocus: true,
84
+ value: editorText,
85
+ onChange,
86
+ onKeyDown
87
+ }
88
+ ) }),
89
+ /* @__PURE__ */ jsx(CornerTag, {})
90
+ ]
91
+ }
92
+ );
93
93
  }
94
94
  function NumericColumn(props) {
95
- return /* @__PURE__ */ jsx(GridColumn, {
96
- ...props,
97
- align: "right",
98
- cellValueComponent: NumericCellValue,
99
- children: props.children
100
- });
95
+ return /* @__PURE__ */ jsx(
96
+ GridColumn,
97
+ {
98
+ ...props,
99
+ align: "right",
100
+ cellValueComponent: NumericCellValue,
101
+ children: props.children
102
+ }
103
+ );
101
104
  }
102
105
 
103
106
  export { NumericCellEditor, NumericCellValue, NumericColumn };
@@ -1 +1 @@
1
- {"version":3,"file":"NumericColumn.js","sources":["../src/NumericColumn.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n type ChangeEventHandler,\n type KeyboardEventHandler,\n type ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport { useEditorContext } from \"./EditorContext\";\nimport type { GridColumnModel, GridRowModel } from \"./Grid\";\nimport {\n type GridCellValueProps,\n GridColumn,\n type GridColumnProps,\n} from \"./GridColumn\";\n\nimport numericColumnCss from \"./NumericColumn.css\";\n\nexport interface NumericColumnProps<T> extends GridColumnProps<T> {\n precision: number;\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nexport function NumericCellValue<T>(props: GridCellValueProps<T>) {\n const { column, value } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-numeric-column\",\n css: numericColumnCss,\n window: targetWindow,\n });\n\n const columnProps = column.info.props as NumericColumnProps<T>;\n const { precision } = columnProps;\n const text = isNumber(value) ? value.toFixed(precision) : \"\";\n return <div className=\"saltGridNumericCellValue\">{text}</div>;\n}\n\nexport interface NumericEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n children?: ReactNode;\n}\n\nexport function NumericCellEditor<T>(props: NumericEditorProps<T>) {\n const { column, row } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data),\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n useEffect(() => {\n const input = inputRef.current;\n const focusOut = (event: FocusEvent) => {\n if (!input?.contains(event.target as Node)) {\n endEditMode(editorText);\n }\n };\n\n // This uses the capture phase to detect clicks outside the input to avoid a race condition where the component gets unmounted when edit mode ends.\n document?.addEventListener(\"mousedown\", focusOut, true);\n\n return () => {\n document?.removeEventListener(\"mousedown\", focusOut, true);\n };\n }, [endEditMode, editorText]);\n\n return (\n <CellFrame\n separator={column?.separator}\n className=\"saltGridNumericCellEditor\"\n >\n <div className=\"saltGridNumericCellEditor-inputContainer\">\n <input\n ref={inputRef}\n data-testid=\"grid-cell-editor-input\"\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </CellFrame>\n );\n}\n\nexport function NumericColumn<T>(props: NumericColumnProps<T>) {\n return (\n <GridColumn\n {...props}\n align={\"right\"}\n cellValueComponent={NumericCellValue}\n >\n {props.children}\n </GridColumn>\n );\n}\n"],"names":["numericColumnCss"],"mappings":"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"}
1
+ {"version":3,"file":"NumericColumn.js","sources":["../src/NumericColumn.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n type ChangeEventHandler,\n type KeyboardEventHandler,\n type ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport { useEditorContext } from \"./EditorContext\";\nimport type { GridColumnModel, GridRowModel } from \"./Grid\";\nimport {\n type GridCellValueProps,\n GridColumn,\n type GridColumnProps,\n} from \"./GridColumn\";\n\nimport numericColumnCss from \"./NumericColumn.css\";\n\nexport interface NumericColumnProps<T> extends GridColumnProps<T> {\n precision: number;\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nexport function NumericCellValue<T>(props: GridCellValueProps<T>) {\n const { column, value } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-numeric-column\",\n css: numericColumnCss,\n window: targetWindow,\n });\n\n const columnProps = column.info.props as NumericColumnProps<T>;\n const { precision } = columnProps;\n const text = isNumber(value) ? value.toFixed(precision) : \"\";\n return <div className=\"saltGridNumericCellValue\">{text}</div>;\n}\n\nexport interface NumericEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n children?: ReactNode;\n}\n\nexport function NumericCellEditor<T>(props: NumericEditorProps<T>) {\n const { column, row } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data),\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n useEffect(() => {\n const input = inputRef.current;\n const focusOut = (event: FocusEvent) => {\n if (!input?.contains(event.target as Node)) {\n endEditMode(editorText);\n }\n };\n\n // This uses the capture phase to detect clicks outside the input to avoid a race condition where the component gets unmounted when edit mode ends.\n document?.addEventListener(\"mousedown\", focusOut, true);\n\n return () => {\n document?.removeEventListener(\"mousedown\", focusOut, true);\n };\n }, [endEditMode, editorText]);\n\n return (\n <CellFrame\n separator={column?.separator}\n className=\"saltGridNumericCellEditor\"\n >\n <div className=\"saltGridNumericCellEditor-inputContainer\">\n <input\n ref={inputRef}\n data-testid=\"grid-cell-editor-input\"\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </CellFrame>\n );\n}\n\nexport function NumericColumn<T>(props: NumericColumnProps<T>) {\n return (\n <GridColumn\n {...props}\n align={\"right\"}\n cellValueComponent={NumericCellValue}\n >\n {props.children}\n </GridColumn>\n );\n}\n"],"names":["numericColumnCss"],"mappings":"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"}
@@ -23,18 +23,17 @@ function RowSelectionCheckboxCellValue(props) {
23
23
  event.preventDefault();
24
24
  event.stopPropagation();
25
25
  };
26
- return /* @__PURE__ */ jsx("div", {
27
- className: "saltGridCheckboxContainer",
28
- onMouseDown,
29
- children: /* @__PURE__ */ jsx(Checkbox, {
26
+ return /* @__PURE__ */ jsx("div", { className: "saltGridCheckboxContainer", onMouseDown, children: /* @__PURE__ */ jsx(
27
+ Checkbox,
28
+ {
30
29
  "data-testid": "grid-row-selection-checkbox",
31
30
  inputProps: {
32
31
  "aria-label": "Select Row",
33
32
  tabIndex: isFocused ? 0 : -1
34
33
  },
35
34
  checked: isSelected
36
- })
37
- });
35
+ }
36
+ ) });
38
37
  }
39
38
 
40
39
  export { RowSelectionCheckboxCellValue };
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionCheckboxCellValue.js","sources":["../src/RowSelectionCheckboxCellValue.tsx"],"sourcesContent":["import { Checkbox } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport type { MouseEventHandler } from \"react\";\nimport { useCursorContext } from \"./CursorContext\";\nimport type { GridCellValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nimport checkboxCellCss from \"./CheckboxCell.css\";\n\nexport function RowSelectionCheckboxCellValue<T>(props: GridCellValueProps<T>) {\n const { row, column, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const { selRowIdxs, selectRows } = useSelectionContext();\n const { moveCursor } = useCursorContext();\n\n const isSelected = selRowIdxs.has(row.index);\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n selectRows({ rowIndex: row.index, incremental: true });\n moveCursor(\"body\", row.index, column.index);\n event.preventDefault();\n event.stopPropagation();\n };\n\n return (\n <div className=\"saltGridCheckboxContainer\" onMouseDown={onMouseDown}>\n <Checkbox\n data-testid=\"grid-row-selection-checkbox\"\n inputProps={{\n \"aria-label\": \"Select Row\",\n tabIndex: isFocused ? 0 : -1,\n }}\n checked={isSelected}\n />\n </div>\n );\n}\n"],"names":["checkboxCellCss"],"mappings":";;;;;;;;AAWO,SAAS,8BAAiC,KAA8B,EAAA;AAC7E,EAAA,MAAM,EAAE,GAAA,EAAK,MAAQ,EAAA,SAAA,EAAc,GAAA,KAAA,CAAA;AAEnC,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,UAAA,EAAY,UAAW,EAAA,GAAI,mBAAoB,EAAA,CAAA;AACvD,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,gBAAiB,EAAA,CAAA;AAExC,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,GAAI,CAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAE3C,EAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,IAAA,UAAA,CAAW,EAAE,QAAU,EAAA,GAAA,CAAI,KAAO,EAAA,WAAA,EAAa,MAAM,CAAA,CAAA;AACrD,IAAA,UAAA,CAAW,MAAQ,EAAA,GAAA,CAAI,KAAO,EAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AAC1C,IAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,IAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,GACxB,CAAA;AAEA,EAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,IAAI,SAAU,EAAA,2BAAA;AAAA,IAA4B,WAAA;AAAA,IACzC,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA;AAAA,MACC,aAAY,EAAA,6BAAA;AAAA,MACZ,UAAY,EAAA;AAAA,QACV,YAAc,EAAA,YAAA;AAAA,QACd,QAAA,EAAU,YAAY,CAAI,GAAA,CAAA,CAAA;AAAA,OAC5B;AAAA,MACA,OAAS,EAAA,UAAA;AAAA,KACX,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"RowSelectionCheckboxCellValue.js","sources":["../src/RowSelectionCheckboxCellValue.tsx"],"sourcesContent":["import { Checkbox } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport type { MouseEventHandler } from \"react\";\nimport { useCursorContext } from \"./CursorContext\";\nimport type { GridCellValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nimport checkboxCellCss from \"./CheckboxCell.css\";\n\nexport function RowSelectionCheckboxCellValue<T>(props: GridCellValueProps<T>) {\n const { row, column, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const { selRowIdxs, selectRows } = useSelectionContext();\n const { moveCursor } = useCursorContext();\n\n const isSelected = selRowIdxs.has(row.index);\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n selectRows({ rowIndex: row.index, incremental: true });\n moveCursor(\"body\", row.index, column.index);\n event.preventDefault();\n event.stopPropagation();\n };\n\n return (\n <div className=\"saltGridCheckboxContainer\" onMouseDown={onMouseDown}>\n <Checkbox\n data-testid=\"grid-row-selection-checkbox\"\n inputProps={{\n \"aria-label\": \"Select Row\",\n tabIndex: isFocused ? 0 : -1,\n }}\n checked={isSelected}\n />\n </div>\n );\n}\n"],"names":["checkboxCellCss"],"mappings":";;;;;;;;AAWO,SAAS,8BAAiC,KAA8B,EAAA;AAC7E,EAAA,MAAM,EAAE,GAAA,EAAK,MAAQ,EAAA,SAAA,EAAc,GAAA,KAAA;AAEnC,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,UAAA,EAAY,UAAW,EAAA,GAAI,mBAAoB,EAAA;AACvD,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,gBAAiB,EAAA;AAExC,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,GAAI,CAAA,GAAA,CAAI,KAAK,CAAA;AAE3C,EAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,IAAA,UAAA,CAAW,EAAE,QAAU,EAAA,GAAA,CAAI,KAAO,EAAA,WAAA,EAAa,MAAM,CAAA;AACrD,IAAA,UAAA,CAAW,MAAQ,EAAA,GAAA,CAAI,KAAO,EAAA,MAAA,CAAO,KAAK,CAAA;AAC1C,IAAA,KAAA,CAAM,cAAe,EAAA;AACrB,IAAA,KAAA,CAAM,eAAgB,EAAA;AAAA,GACxB;AAEA,EAAA,uBACG,GAAA,CAAA,KAAA,EAAA,EAAI,SAAU,EAAA,2BAAA,EAA4B,WACzC,EAAA,QAAA,kBAAA,GAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,aAAY,EAAA,6BAAA;AAAA,MACZ,UAAY,EAAA;AAAA,QACV,YAAc,EAAA,YAAA;AAAA,QACd,QAAA,EAAU,YAAY,CAAI,GAAA,CAAA;AAAA,OAC5B;AAAA,MACA,OAAS,EAAA;AAAA;AAAA,GAEb,EAAA,CAAA;AAEJ;;;;"}
@@ -21,14 +21,17 @@ function RowSelectionCheckboxColumn(props) {
21
21
  },
22
22
  [selectRows]
23
23
  );
24
- return /* @__PURE__ */ jsx(GridColumn, {
25
- ...props,
26
- defaultWidth: 100,
27
- headerComponent: AutoSizeHeaderCell,
28
- headerValueComponent: RowSelectionCheckboxHeaderCellValue,
29
- cellValueComponent: RowSelectionCheckboxCellValue,
30
- onKeyDown
31
- });
24
+ return /* @__PURE__ */ jsx(
25
+ GridColumn,
26
+ {
27
+ ...props,
28
+ defaultWidth: 100,
29
+ headerComponent: AutoSizeHeaderCell,
30
+ headerValueComponent: RowSelectionCheckboxHeaderCellValue,
31
+ cellValueComponent: RowSelectionCheckboxCellValue,
32
+ onKeyDown
33
+ }
34
+ );
32
35
  }
33
36
 
34
37
  export { RowSelectionCheckboxColumn };
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionCheckboxColumn.js","sources":["../src/RowSelectionCheckboxColumn.tsx"],"sourcesContent":["import { type KeyboardEvent, useCallback } from \"react\";\nimport { GridColumn, type GridColumnProps } from \"./GridColumn\";\nimport { AutoSizeHeaderCell } from \"./HeaderCell\";\nimport { RowSelectionCheckboxCellValue } from \"./RowSelectionCheckboxCellValue\";\nimport { RowSelectionCheckboxHeaderCellValue } from \"./RowSelectionCheckboxHeaderCellValue\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nexport type RowSelectionCheckboxColumnProps<T> = Omit<\n GridColumnProps<T>,\n \"width\" | \"name\"\n>;\n\nexport function RowSelectionCheckboxColumn<T>(\n props: RowSelectionCheckboxColumnProps<T>,\n) {\n const { selectRows } = useSelectionContext();\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>, rowIndex: number) => {\n if (event.key === \" \") {\n selectRows({\n rowIndex,\n incremental: true,\n });\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [selectRows],\n );\n\n return (\n <GridColumn\n {...props}\n defaultWidth={100}\n headerComponent={AutoSizeHeaderCell}\n headerValueComponent={RowSelectionCheckboxHeaderCellValue}\n cellValueComponent={RowSelectionCheckboxCellValue}\n onKeyDown={onKeyDown}\n />\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAYO,SAAS,2BACd,KACA,EAAA;AACA,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,mBAAoB,EAAA,CAAA;AAE3C,EAAA,MAAM,SAAY,GAAA,WAAA;AAAA,IAChB,CAAC,OAAsC,QAAqB,KAAA;AAC1D,MAAI,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AACrB,QAAW,UAAA,CAAA;AAAA,UACT,QAAA;AAAA,UACA,WAAa,EAAA,IAAA;AAAA,SACd,CAAA,CAAA;AACD,QAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,QAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,OACxB;AAAA,KACF;AAAA,IACA,CAAC,UAAU,CAAA;AAAA,GACb,CAAA;AAEA,EAAA,uBACG,GAAA,CAAA,UAAA,EAAA;AAAA,IACE,GAAG,KAAA;AAAA,IACJ,YAAc,EAAA,GAAA;AAAA,IACd,eAAiB,EAAA,kBAAA;AAAA,IACjB,oBAAsB,EAAA,mCAAA;AAAA,IACtB,kBAAoB,EAAA,6BAAA;AAAA,IACpB,SAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"RowSelectionCheckboxColumn.js","sources":["../src/RowSelectionCheckboxColumn.tsx"],"sourcesContent":["import { type KeyboardEvent, useCallback } from \"react\";\nimport { GridColumn, type GridColumnProps } from \"./GridColumn\";\nimport { AutoSizeHeaderCell } from \"./HeaderCell\";\nimport { RowSelectionCheckboxCellValue } from \"./RowSelectionCheckboxCellValue\";\nimport { RowSelectionCheckboxHeaderCellValue } from \"./RowSelectionCheckboxHeaderCellValue\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nexport type RowSelectionCheckboxColumnProps<T> = Omit<\n GridColumnProps<T>,\n \"width\" | \"name\"\n>;\n\nexport function RowSelectionCheckboxColumn<T>(\n props: RowSelectionCheckboxColumnProps<T>,\n) {\n const { selectRows } = useSelectionContext();\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>, rowIndex: number) => {\n if (event.key === \" \") {\n selectRows({\n rowIndex,\n incremental: true,\n });\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [selectRows],\n );\n\n return (\n <GridColumn\n {...props}\n defaultWidth={100}\n headerComponent={AutoSizeHeaderCell}\n headerValueComponent={RowSelectionCheckboxHeaderCellValue}\n cellValueComponent={RowSelectionCheckboxCellValue}\n onKeyDown={onKeyDown}\n />\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAYO,SAAS,2BACd,KACA,EAAA;AACA,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,mBAAoB,EAAA;AAE3C,EAAA,MAAM,SAAY,GAAA,WAAA;AAAA,IAChB,CAAC,OAAsC,QAAqB,KAAA;AAC1D,MAAI,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AACrB,QAAW,UAAA,CAAA;AAAA,UACT,QAAA;AAAA,UACA,WAAa,EAAA;AAAA,SACd,CAAA;AACD,QAAA,KAAA,CAAM,cAAe,EAAA;AACrB,QAAA,KAAA,CAAM,eAAgB,EAAA;AAAA;AACxB,KACF;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EACE,uBAAA,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,YAAc,EAAA,GAAA;AAAA,MACd,eAAiB,EAAA,kBAAA;AAAA,MACjB,oBAAsB,EAAA,mCAAA;AAAA,MACtB,kBAAoB,EAAA,6BAAA;AAAA,MACpB;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -32,20 +32,26 @@ function RowSelectionCheckboxHeaderCellValue(props) {
32
32
  event.stopPropagation();
33
33
  }
34
34
  };
35
- return /* @__PURE__ */ jsx("div", {
36
- onMouseDown: onMousedown,
37
- className: "saltGridCheckboxContainer",
38
- onKeyDown,
39
- children: /* @__PURE__ */ jsx(Checkbox, {
40
- "data-testid": "grid-row-select-all-checkbox",
41
- inputProps: {
42
- "aria-label": "Select All",
43
- tabIndex: isFocused ? 0 : -1
44
- },
45
- checked: isAllSelected,
46
- indeterminate: !isAllSelected && isAnySelected
47
- })
48
- });
35
+ return /* @__PURE__ */ jsx(
36
+ "div",
37
+ {
38
+ onMouseDown: onMousedown,
39
+ className: "saltGridCheckboxContainer",
40
+ onKeyDown,
41
+ children: /* @__PURE__ */ jsx(
42
+ Checkbox,
43
+ {
44
+ "data-testid": "grid-row-select-all-checkbox",
45
+ inputProps: {
46
+ "aria-label": "Select All",
47
+ tabIndex: isFocused ? 0 : -1
48
+ },
49
+ checked: isAllSelected,
50
+ indeterminate: !isAllSelected && isAnySelected
51
+ }
52
+ )
53
+ }
54
+ );
49
55
  }
50
56
 
51
57
  export { RowSelectionCheckboxHeaderCellValue };
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionCheckboxHeaderCellValue.js","sources":["../src/RowSelectionCheckboxHeaderCellValue.tsx"],"sourcesContent":["import { Checkbox } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport type { KeyboardEventHandler, MouseEventHandler } from \"react\";\n\nimport type { GridHeaderValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nimport checkboxCellCss from \"./CheckboxCell.css\";\n\nexport function RowSelectionCheckboxHeaderCellValue<T>(\n props: GridHeaderValueProps<T>,\n) {\n const { isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const { selectAll, unselectAll, isAllSelected, isAnySelected } =\n useSelectionContext();\n\n const onMousedown: MouseEventHandler<HTMLDivElement> = (event) => {\n if (isAllSelected) {\n unselectAll();\n } else {\n selectAll();\n }\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = (event) => {\n if (event.key === \" \") {\n if (isAllSelected) {\n unselectAll();\n } else {\n selectAll();\n }\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n return (\n <div\n onMouseDown={onMousedown}\n className=\"saltGridCheckboxContainer\"\n onKeyDown={onKeyDown}\n >\n <Checkbox\n data-testid=\"grid-row-select-all-checkbox\"\n inputProps={{\n \"aria-label\": \"Select All\",\n tabIndex: isFocused ? 0 : -1,\n }}\n checked={isAllSelected}\n indeterminate={!isAllSelected && isAnySelected}\n />\n </div>\n );\n}\n"],"names":["checkboxCellCss"],"mappings":";;;;;;;AAUO,SAAS,oCACd,KACA,EAAA;AACA,EAAM,MAAA,EAAE,WAAc,GAAA,KAAA,CAAA;AAEtB,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,SAAW,EAAA,WAAA,EAAa,aAAe,EAAA,aAAA,KAC7C,mBAAoB,EAAA,CAAA;AAEtB,EAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,IAAA,IAAI,aAAe,EAAA;AACjB,MAAY,WAAA,EAAA,CAAA;AAAA,KACP,MAAA;AACL,MAAU,SAAA,EAAA,CAAA;AAAA,KACZ;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,SAAA,GAAkD,CAAC,KAAU,KAAA;AACjE,IAAI,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AACrB,MAAA,IAAI,aAAe,EAAA;AACjB,QAAY,WAAA,EAAA,CAAA;AAAA,OACP,MAAA;AACL,QAAU,SAAA,EAAA,CAAA;AAAA,OACZ;AACA,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,KACxB;AAAA,GACF,CAAA;AAEA,EAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,IACC,WAAa,EAAA,WAAA;AAAA,IACb,SAAU,EAAA,2BAAA;AAAA,IACV,SAAA;AAAA,IAEA,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA;AAAA,MACC,aAAY,EAAA,8BAAA;AAAA,MACZ,UAAY,EAAA;AAAA,QACV,YAAc,EAAA,YAAA;AAAA,QACd,QAAA,EAAU,YAAY,CAAI,GAAA,CAAA,CAAA;AAAA,OAC5B;AAAA,MACA,OAAS,EAAA,aAAA;AAAA,MACT,aAAA,EAAe,CAAC,aAAiB,IAAA,aAAA;AAAA,KACnC,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"RowSelectionCheckboxHeaderCellValue.js","sources":["../src/RowSelectionCheckboxHeaderCellValue.tsx"],"sourcesContent":["import { Checkbox } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport type { KeyboardEventHandler, MouseEventHandler } from \"react\";\n\nimport type { GridHeaderValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nimport checkboxCellCss from \"./CheckboxCell.css\";\n\nexport function RowSelectionCheckboxHeaderCellValue<T>(\n props: GridHeaderValueProps<T>,\n) {\n const { isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const { selectAll, unselectAll, isAllSelected, isAnySelected } =\n useSelectionContext();\n\n const onMousedown: MouseEventHandler<HTMLDivElement> = (event) => {\n if (isAllSelected) {\n unselectAll();\n } else {\n selectAll();\n }\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = (event) => {\n if (event.key === \" \") {\n if (isAllSelected) {\n unselectAll();\n } else {\n selectAll();\n }\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n return (\n <div\n onMouseDown={onMousedown}\n className=\"saltGridCheckboxContainer\"\n onKeyDown={onKeyDown}\n >\n <Checkbox\n data-testid=\"grid-row-select-all-checkbox\"\n inputProps={{\n \"aria-label\": \"Select All\",\n tabIndex: isFocused ? 0 : -1,\n }}\n checked={isAllSelected}\n indeterminate={!isAllSelected && isAnySelected}\n />\n </div>\n );\n}\n"],"names":["checkboxCellCss"],"mappings":";;;;;;;AAUO,SAAS,oCACd,KACA,EAAA;AACA,EAAM,MAAA,EAAE,WAAc,GAAA,KAAA;AAEtB,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,SAAW,EAAA,WAAA,EAAa,aAAe,EAAA,aAAA,KAC7C,mBAAoB,EAAA;AAEtB,EAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,IAAA,IAAI,aAAe,EAAA;AACjB,MAAY,WAAA,EAAA;AAAA,KACP,MAAA;AACL,MAAU,SAAA,EAAA;AAAA;AACZ,GACF;AAEA,EAAM,MAAA,SAAA,GAAkD,CAAC,KAAU,KAAA;AACjE,IAAI,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AACrB,MAAA,IAAI,aAAe,EAAA;AACjB,QAAY,WAAA,EAAA;AAAA,OACP,MAAA;AACL,QAAU,SAAA,EAAA;AAAA;AAEZ,MAAA,KAAA,CAAM,cAAe,EAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA;AAAA;AACxB,GACF;AAEA,EACE,uBAAA,GAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAa,EAAA,WAAA;AAAA,MACb,SAAU,EAAA,2BAAA;AAAA,MACV,SAAA;AAAA,MAEA,QAAA,kBAAA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,aAAY,EAAA,8BAAA;AAAA,UACZ,UAAY,EAAA;AAAA,YACV,YAAc,EAAA,YAAA;AAAA,YACd,QAAA,EAAU,YAAY,CAAI,GAAA,CAAA;AAAA,WAC5B;AAAA,UACA,OAAS,EAAA,aAAA;AAAA,UACT,aAAA,EAAe,CAAC,aAAiB,IAAA;AAAA;AAAA;AACnC;AAAA,GACF;AAEJ;;;;"}
@@ -15,14 +15,14 @@ function RowSelectionRadioCellValue(props) {
15
15
  });
16
16
  const { selRowIdxs } = useSelectionContext();
17
17
  const isSelected = selRowIdxs.has(row.index);
18
- return /* @__PURE__ */ jsx("div", {
19
- className: "saltGridCheckboxContainer",
20
- children: /* @__PURE__ */ jsx(RadioButton, {
18
+ return /* @__PURE__ */ jsx("div", { className: "saltGridCheckboxContainer", children: /* @__PURE__ */ jsx(
19
+ RadioButton,
20
+ {
21
21
  checked: isSelected,
22
22
  "data-testid": "grid-row-selection-radiobox",
23
23
  tabIndex: isFocused ? 0 : -1
24
- })
25
- });
24
+ }
25
+ ) });
26
26
  }
27
27
 
28
28
  export { RowSelectionRadioCellValue };