@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
@@ -1,7 +1,5 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
3
  var jsxRuntime = require('react/jsx-runtime');
6
4
  var core = require('@salt-ds/core');
7
5
  var styles = require('@salt-ds/styles');
@@ -26,33 +24,31 @@ function TopRightPart(props) {
26
24
  if (columns.length === 0) {
27
25
  return null;
28
26
  }
29
- return /* @__PURE__ */ jsxRuntime.jsx("div", {
30
- className: clsx.clsx(withBaseName(), {
31
- [withBaseName("leftShadow")]: leftShadow,
32
- [withBaseName("bottomShadow")]: bottomShadow
33
- }),
34
- "data-testid": "grid-top-right-part",
35
- children: /* @__PURE__ */ jsxRuntime.jsxs("table", {
36
- className: withBaseName("table"),
37
- ref: tableRef,
38
- role: "presentation",
39
- children: [
40
- /* @__PURE__ */ jsxRuntime.jsx(TableColGroup.TableColGroup, {
41
- columns
42
- }),
43
- /* @__PURE__ */ jsxRuntime.jsxs("thead", {
27
+ return /* @__PURE__ */ jsxRuntime.jsx(
28
+ "div",
29
+ {
30
+ className: clsx.clsx(withBaseName(), {
31
+ [withBaseName("leftShadow")]: leftShadow,
32
+ [withBaseName("bottomShadow")]: bottomShadow
33
+ }),
34
+ "data-testid": "grid-top-right-part",
35
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
36
+ "table",
37
+ {
38
+ className: withBaseName("table"),
39
+ ref: tableRef,
40
+ role: "presentation",
44
41
  children: [
45
- /* @__PURE__ */ jsxRuntime.jsx(GroupHeaderRow.GroupHeaderRow, {
46
- groups: columnGroups
47
- }),
48
- /* @__PURE__ */ jsxRuntime.jsx(HeaderRow.HeaderRow, {
49
- columns
50
- })
42
+ /* @__PURE__ */ jsxRuntime.jsx(TableColGroup.TableColGroup, { columns }),
43
+ /* @__PURE__ */ jsxRuntime.jsxs("thead", { children: [
44
+ /* @__PURE__ */ jsxRuntime.jsx(GroupHeaderRow.GroupHeaderRow, { groups: columnGroups }),
45
+ /* @__PURE__ */ jsxRuntime.jsx(HeaderRow.HeaderRow, { columns })
46
+ ] })
51
47
  ]
52
- })
53
- ]
54
- })
55
- });
48
+ }
49
+ )
50
+ }
51
+ );
56
52
  }
57
53
 
58
54
  exports.TopRightPart = TopRightPart;
@@ -1 +1 @@
1
- {"version":3,"file":"TopRightPart.js","sources":["../src/internal/TopRightPart.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { HeaderRow } from \"./HeaderRow\";\nimport { TableColGroup } from \"./TableColGroup\";\n\nimport type { GridColumnGroupModel, GridColumnModel } from \"../Grid\";\n\nimport { GroupHeaderRow } from \"./GroupHeaderRow\";\nimport { useActiveOnWheel } from \"./gridHooks\";\n\nimport topRightPartCss from \"./TopRightPart.css\";\n\nconst withBaseName = makePrefixer(\"saltGridTopRightPart\");\n\nexport interface TopRightPartProps<T> {\n onWheel: EventListener;\n columns: GridColumnModel<T>[];\n columnGroups: GridColumnGroupModel[];\n leftShadow?: boolean;\n bottomShadow?: boolean;\n}\n\nexport function TopRightPart<T>(props: TopRightPartProps<T>) {\n const { onWheel, columns, columnGroups, leftShadow, bottomShadow } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-top-right-part\",\n css: topRightPartCss,\n window: targetWindow,\n });\n\n const tableRef = useActiveOnWheel(onWheel);\n\n if (columns.length === 0) {\n return null;\n }\n\n return (\n <div\n className={clsx(withBaseName(), {\n [withBaseName(\"leftShadow\")]: leftShadow,\n [withBaseName(\"bottomShadow\")]: bottomShadow,\n })}\n data-testid=\"grid-top-right-part\"\n >\n <table\n className={withBaseName(\"table\")}\n ref={tableRef}\n role=\"presentation\"\n >\n <TableColGroup columns={columns} />\n <thead>\n <GroupHeaderRow groups={columnGroups} />\n <HeaderRow columns={columns} />\n {/*TODO Do we need a toolbar?*/}\n {/*{showToolbar ? <HeaderToolbarRow columns={rightColumns} /> : null}*/}\n </thead>\n </table>\n </div>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","topRightPartCss","useActiveOnWheel","jsx","clsx","jsxs","TableColGroup","GroupHeaderRow","HeaderRow"],"mappings":";;;;;;;;;;;;;;;AAcA,MAAM,YAAA,GAAeA,kBAAa,sBAAsB,CAAA,CAAA;AAUjD,SAAS,aAAgB,KAA6B,EAAA;AAC3D,EAAA,MAAM,EAAE,OAAS,EAAA,OAAA,EAAS,YAAc,EAAA,UAAA,EAAY,cAAiB,GAAA,KAAA,CAAA;AAErE,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,qBAAA;AAAA,IACR,GAAK,EAAAC,cAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAWC,2BAAiB,OAAO,CAAA,CAAA;AAEzC,EAAI,IAAA,OAAA,CAAQ,WAAW,CAAG,EAAA;AACxB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,uBACGC,cAAA,CAAA,KAAA,EAAA;AAAA,IACC,SAAA,EAAWC,SAAK,CAAA,YAAA,EAAgB,EAAA;AAAA,MAC9B,CAAC,YAAa,CAAA,YAAY,CAAI,GAAA,UAAA;AAAA,MAC9B,CAAC,YAAa,CAAA,cAAc,CAAI,GAAA,YAAA;AAAA,KACjC,CAAA;AAAA,IACD,aAAY,EAAA,qBAAA;AAAA,IAEZ,QAAC,kBAAAC,eAAA,CAAA,OAAA,EAAA;AAAA,MACC,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,MAC/B,GAAK,EAAA,QAAA;AAAA,MACL,IAAK,EAAA,cAAA;AAAA,MAEL,QAAA,EAAA;AAAA,wBAACF,cAAA,CAAAG,2BAAA,EAAA;AAAA,UAAc,OAAA;AAAA,SAAkB,CAAA;AAAA,wBAChCD,eAAA,CAAA,OAAA,EAAA;AAAA,UACC,QAAA,EAAA;AAAA,4BAACF,cAAA,CAAAI,6BAAA,EAAA;AAAA,cAAe,MAAQ,EAAA,YAAA;AAAA,aAAc,CAAA;AAAA,4BACrCJ,cAAA,CAAAK,mBAAA,EAAA;AAAA,cAAU,OAAA;AAAA,aAAkB,CAAA;AAAA,WAAA;AAAA,SAG/B,CAAA;AAAA,OAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"TopRightPart.js","sources":["../src/internal/TopRightPart.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { HeaderRow } from \"./HeaderRow\";\nimport { TableColGroup } from \"./TableColGroup\";\n\nimport type { GridColumnGroupModel, GridColumnModel } from \"../Grid\";\n\nimport { GroupHeaderRow } from \"./GroupHeaderRow\";\nimport { useActiveOnWheel } from \"./gridHooks\";\n\nimport topRightPartCss from \"./TopRightPart.css\";\n\nconst withBaseName = makePrefixer(\"saltGridTopRightPart\");\n\nexport interface TopRightPartProps<T> {\n onWheel: EventListener;\n columns: GridColumnModel<T>[];\n columnGroups: GridColumnGroupModel[];\n leftShadow?: boolean;\n bottomShadow?: boolean;\n}\n\nexport function TopRightPart<T>(props: TopRightPartProps<T>) {\n const { onWheel, columns, columnGroups, leftShadow, bottomShadow } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-top-right-part\",\n css: topRightPartCss,\n window: targetWindow,\n });\n\n const tableRef = useActiveOnWheel(onWheel);\n\n if (columns.length === 0) {\n return null;\n }\n\n return (\n <div\n className={clsx(withBaseName(), {\n [withBaseName(\"leftShadow\")]: leftShadow,\n [withBaseName(\"bottomShadow\")]: bottomShadow,\n })}\n data-testid=\"grid-top-right-part\"\n >\n <table\n className={withBaseName(\"table\")}\n ref={tableRef}\n role=\"presentation\"\n >\n <TableColGroup columns={columns} />\n <thead>\n <GroupHeaderRow groups={columnGroups} />\n <HeaderRow columns={columns} />\n {/*TODO Do we need a toolbar?*/}\n {/*{showToolbar ? <HeaderToolbarRow columns={rightColumns} /> : null}*/}\n </thead>\n </table>\n </div>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","topRightPartCss","useActiveOnWheel","jsx","clsx","jsxs","TableColGroup","GroupHeaderRow","HeaderRow"],"mappings":";;;;;;;;;;;;;AAcA,MAAM,YAAA,GAAeA,kBAAa,sBAAsB,CAAA;AAUjD,SAAS,aAAgB,KAA6B,EAAA;AAC3D,EAAA,MAAM,EAAE,OAAS,EAAA,OAAA,EAAS,YAAc,EAAA,UAAA,EAAY,cAAiB,GAAA,KAAA;AAErE,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,qBAAA;AAAA,IACR,GAAK,EAAAC,cAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,QAAA,GAAWC,2BAAiB,OAAO,CAAA;AAEzC,EAAI,IAAA,OAAA,CAAQ,WAAW,CAAG,EAAA;AACxB,IAAO,OAAA,IAAA;AAAA;AAGT,EACE,uBAAAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,SAAK,CAAA,YAAA,EAAgB,EAAA;AAAA,QAC9B,CAAC,YAAA,CAAa,YAAY,CAAC,GAAG,UAAA;AAAA,QAC9B,CAAC,YAAA,CAAa,cAAc,CAAC,GAAG;AAAA,OACjC,CAAA;AAAA,MACD,aAAY,EAAA,qBAAA;AAAA,MAEZ,QAAA,kBAAAC,eAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,UAC/B,GAAK,EAAA,QAAA;AAAA,UACL,IAAK,EAAA,cAAA;AAAA,UAEL,QAAA,EAAA;AAAA,4BAAAF,cAAA,CAACG,+BAAc,OAAkB,EAAA,CAAA;AAAA,4CAChC,OACC,EAAA,EAAA,QAAA,EAAA;AAAA,8BAACH,cAAA,CAAAI,6BAAA,EAAA,EAAe,QAAQ,YAAc,EAAA,CAAA;AAAA,8BACtCJ,cAAA,CAACK,uBAAU,OAAkB,EAAA;AAAA,aAG/B,EAAA;AAAA;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;;;;"}
@@ -1,7 +1,5 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
3
  var core = require('@salt-ds/core');
6
4
  var react = require('react');
7
5
  var NumberRange = require('../NumberRange.js');
@@ -1 +1 @@
1
- {"version":3,"file":"gridHooks.js","sources":["../src/internal/gridHooks.tsx"],"sourcesContent":["import { useControlled } from \"@salt-ds/core\";\nimport {\n Children,\n type FocusEventHandler,\n type MouseEventHandler,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n type RefObject,\n isValidElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { CellEditorInfo } from \"../CellEditor\";\nimport type { ColumnGroupProps } from \"../ColumnGroup\";\nimport type { FocusedPart } from \"../CursorContext\";\nimport type {\n GridCellSelectionMode,\n GridColumnGroupModel,\n GridColumnModel,\n GridColumnMoveHandler,\n GridRowModel,\n GridRowSelectionMode,\n RowKeyGetter,\n} from \"../Grid\";\nimport type { GridColumnInfo, GridColumnPin } from \"../GridColumn\";\nimport type { GridContext } from \"../GridContext\";\nimport { NumberRange } from \"../NumberRange\";\nimport {\n getAttribute,\n getCellPosition,\n makeMapAdder,\n makeMapDeleter,\n} from \"./utils\";\n\n// Attaches active onWheel event to a table element\n// Grid needs to prevent default onWheel event handling for situations when a\n// scrollable grid is on a scrollable page. Page should not scroll when the grid\n// is being scrolled, unless reached top or bottom of scrollable grid.\nexport function useActiveOnWheel(onWheel: EventListener) {\n const tableRef = useRef<HTMLTableElement>(null);\n\n useEffect(() => {\n const table = tableRef.current;\n if (table && onWheel) {\n table.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => {\n table.removeEventListener(\"wheel\", onWheel);\n };\n }\n }, [tableRef.current]);\n\n return tableRef;\n}\n\n// Total width of the given columns.\nfunction sumWidth<T>(columns: GridColumnModel<T>[]) {\n return columns.reduce((p, x) => p + x.info.width, 0);\n}\n\n// Returns total width of the given columns wrapped in useMemo.\nexport function useSumWidth<T>(columns: GridColumnModel<T>[]) {\n return useMemo(() => sumWidth(columns), [columns]);\n}\n\n// Memoized sum of the given numbers.\nexport function useSum(source: number[]) {\n return useMemo(() => source.reduce((p, x) => p + x, 0), source);\n}\n\n// Sum width of the given range of columns.\nfunction sumRangeWidth<T>(columns: GridColumnModel<T>[], range: NumberRange) {\n let w = 0;\n range.forEach((i) => {\n w += columns[i].info.width;\n });\n return w;\n}\n\n// Sum width of the given range of columns wrapped in useMemo.\nexport function useSumRangeWidth<T>(\n columns: GridColumnModel<T>[],\n range: NumberRange,\n) {\n return useMemo(() => sumRangeWidth(columns, range), [columns, range]);\n}\n\n// Range memoization using Rng.equals comparator.\nfunction useMemoRng(fn: () => NumberRange, deps: unknown[]) {\n const prevRef = useRef<NumberRange>(NumberRange.empty);\n const range = useMemo(fn, deps);\n if (!NumberRange.equals(prevRef.current, range)) {\n prevRef.current = range;\n }\n return prevRef.current;\n}\n\n// Visible range of columns within the body.\nexport function useBodyVisibleColumnRange<T>(\n midColumns: GridColumnModel<T>[],\n scrollLeft: number,\n clientMidWidth: number,\n): NumberRange {\n return useMemoRng(() => {\n if (clientMidWidth === 0 || midColumns.length === 0) {\n return NumberRange.empty;\n }\n let width = scrollLeft;\n let start = 0;\n for (let i = 0; i < midColumns.length; ++i) {\n const colWidth = midColumns[i].info.width;\n if (width > colWidth) {\n width -= colWidth;\n } else {\n start = i;\n width += clientMidWidth;\n break;\n }\n }\n let end = start + 1;\n for (let i = start; i < midColumns.length; ++i) {\n const colWidth = midColumns[i].info.width;\n width -= colWidth;\n end = i + 1;\n if (width <= 0) {\n break;\n }\n }\n if (end > midColumns.length) {\n end = midColumns.length;\n }\n return new NumberRange(start, end);\n }, [midColumns, scrollLeft, clientMidWidth]);\n}\n\n// Client width of the middle (scrollable) part of the grid.\nexport function useClientMidWidth(\n clientWidth: number,\n leftWidth: number,\n rightWidth: number,\n) {\n return useMemo(\n () => clientWidth - leftWidth - rightWidth,\n [clientWidth, leftWidth, rightWidth],\n );\n}\n\n// Client height of the middle part of the grid.\nexport function useClientMidHeight(\n clientHeight: number,\n topHeight: number,\n botHeight: number,\n) {\n return useMemo(\n () => clientHeight - topHeight - botHeight,\n [clientHeight, topHeight, botHeight],\n );\n}\n\n// Y coordinate of the visible area within the virtual space.\nexport function useBodyVisibleAreaTop<T>(\n rowHeight: number,\n visibleRowRange: NumberRange,\n topHeight: number,\n) {\n return useMemo(() => {\n let top = topHeight + visibleRowRange.start * rowHeight;\n if (visibleRowRange.start > 0) {\n top += 1; // First row (row #0) has an extra border\n }\n return top;\n }, [rowHeight, visibleRowRange, topHeight]);\n}\n\n// Visible range of rows.\nexport function useVisibleRowRange(\n scrollTop: number,\n clientMidHeight: number,\n rowHeight: number,\n rowCount: number,\n) {\n return useMemoRng(() => {\n if (rowHeight < 1) {\n return NumberRange.empty;\n }\n const firstRowHeight = rowHeight + 1; // First row has an extra 1px\n\n const start =\n scrollTop > firstRowHeight\n ? 1 + Math.floor((scrollTop - firstRowHeight) / rowHeight)\n : 0;\n let endPos = scrollTop + clientMidHeight;\n\n if (start === 0) {\n endPos -= 1;\n }\n const end = Math.min(\n rowCount,\n Math.max(start, Math.ceil(endPos / rowHeight)),\n );\n\n // Scroll Top not returning to 0 after pagination. Guard to ensure issues with ScrollTop throw error\n if (start > end) {\n return NumberRange.empty;\n }\n\n return new NumberRange(start, end);\n }, [scrollTop, clientMidHeight, rowHeight, rowCount]);\n}\n\nexport function useColumnRange<T>(\n columns: GridColumnModel<T>[],\n range: NumberRange,\n): GridColumnModel<T>[] {\n return useMemo(() => columns.slice(range.start, range.end), [columns, range]);\n}\n\n// Total width of the columns scrolled out to the left of the visible area.\nexport function useLeftScrolledOutWidth<T>(\n midColumns: GridColumnModel<T>[],\n bodyVisibleColumnRange: NumberRange,\n) {\n return useMemo(() => {\n let w = 0;\n for (let i = 0; i < bodyVisibleColumnRange.start; ++i) {\n w += midColumns[i].info.width;\n }\n return w;\n }, [midColumns, bodyVisibleColumnRange]);\n}\n\n// Row positions by row keys.\nexport function useRowIdxByKey<T>(rowKeyGetter: RowKeyGetter<T>, rowData: T[]) {\n return useMemo(() => {\n return new Map<string, number>(\n rowData.map((r, i) => [rowKeyGetter(r, i), i]),\n );\n }, [rowData, rowKeyGetter]);\n}\n\nexport type SetState<T> = (v: T | ((p: T) => T)) => void;\n\n// Row models for the visible rows.\nexport function useRowModels<T>(\n getKey: RowKeyGetter<T>,\n rowData: T[],\n visibleRowRange: NumberRange,\n) {\n return useMemo(() => {\n const rows: GridRowModel<T>[] = [];\n visibleRowRange.forEach((i) => {\n const key = getKey(rowData[i], i);\n rows.push({ data: rowData[i], key, index: i });\n });\n return rows;\n }, [getKey, rowData, visibleRowRange]);\n}\n\n// Creates column group models.\nexport const useColumnGroups = (\n grpPs: ColumnGroupProps[],\n startIdx: number,\n): GridColumnGroupModel[] =>\n useMemo(\n () =>\n grpPs.map((data, i) => {\n const childrenIds = Children.toArray(data.children)\n .map((child) => {\n if (!isValidElement(child)) {\n return undefined;\n }\n return child.props.id;\n })\n .filter((x) => x !== undefined) as string[];\n const colSpan = childrenIds.length;\n\n return {\n data,\n index: i + startIdx,\n childrenIds,\n colSpan,\n columnSeparator: \"regular\",\n rowSeparator: \"regular\",\n };\n }),\n [grpPs, startIdx],\n );\n\n// Visible range of column groups.\nexport function useVisibleColumnGroupRange<T>(\n bodyVisColRng: NumberRange,\n midCols: GridColumnModel<T>[],\n midGrpByColId: Map<string, GridColumnGroupModel>,\n leftGrpCount: number,\n): NumberRange {\n return useMemoRng(() => {\n if (bodyVisColRng.length === 0) {\n return NumberRange.empty;\n }\n const firstVisibleCol = midCols[bodyVisColRng.start];\n const lastVisibleCol = midCols[bodyVisColRng.end - 1];\n const firstVisibleGroup = midGrpByColId.get(firstVisibleCol.info.props.id);\n const lastVisibleGroup = midGrpByColId.get(lastVisibleCol.info.props.id);\n if (!firstVisibleGroup || !lastVisibleGroup) {\n return NumberRange.empty;\n }\n return new NumberRange(\n firstVisibleGroup.index - leftGrpCount,\n lastVisibleGroup.index + 1 - leftGrpCount,\n );\n }, [bodyVisColRng, midCols, midGrpByColId, leftGrpCount]);\n}\n\nexport function last<T>(source: T[]): T {\n return source[source.length - 1];\n}\n\n// Range of columns visible in the header.\nexport function useHeadVisibleColumnRange<T>(\n bodyVisColRng: NumberRange,\n visColGrps: GridColumnGroupModel[],\n midColsById: Map<string, GridColumnModel<T>>,\n leftColCount: number,\n) {\n return useMemoRng(() => {\n if (visColGrps.length === 0) {\n return bodyVisColRng;\n }\n const firstVisibleGroup = visColGrps[0];\n const lastVisibleGroup = last(visColGrps);\n const firstColId = firstVisibleGroup.childrenIds[0];\n const lastColId = last(lastVisibleGroup.childrenIds);\n const firstColIdx = midColsById.get(firstColId)?.index;\n const lastColIdx = midColsById.get(lastColId)?.index;\n if (firstColIdx === undefined || lastColIdx === undefined) {\n return NumberRange.empty;\n }\n return new NumberRange(\n firstColIdx - leftColCount,\n lastColIdx + 1 - leftColCount,\n );\n }, [bodyVisColRng, visColGrps, midColsById, leftColCount]);\n}\n\n// Creates column models.\nexport function useCols<T>(\n colInfos: GridColumnInfo<T>[],\n startIdx: number,\n groups: GridColumnGroupModel[],\n): GridColumnModel<T>[] {\n return useMemo(() => {\n const edgeColIds = new Set<string>();\n groups.forEach((g) => {\n edgeColIds.add(last(g.childrenIds));\n });\n const columnModels: GridColumnModel<T>[] = colInfos.map((info, i) => ({\n info,\n index: i + startIdx,\n separator: edgeColIds.has(info.props.id) ? \"groupEdge\" : \"regular\",\n }));\n return columnModels;\n }, [colInfos, startIdx, groups]);\n}\n\n// Returns a function that scrolls the grid to the given cell.\nexport function useScrollToCell<T>(\n visRowRng: NumberRange,\n rowHeight: number,\n clientMidHeight: number,\n midCols: GridColumnModel<T>[],\n bodyVisColRng: NumberRange,\n clientMidWidth: number,\n scroll: (left?: number, top?: number, source?: \"user\" | \"table\") => void,\n) {\n return useCallback(\n (part: FocusedPart, rowIdx: number, colIdx: number) => {\n if (part !== \"body\") {\n return; // TODO\n }\n let x: number | undefined = undefined;\n let y: number | undefined = undefined;\n if (rowIdx <= visRowRng.start) {\n // First row is 1px wider than other rows (additional top border)\n y = rowIdx === 0 ? 0 : 1 + rowHeight * rowIdx;\n } else if (rowIdx >= visRowRng.end - 1) {\n const extraBorder = rowIdx > 0 ? 1 : 0;\n y = Math.max(\n 0,\n rowHeight * rowIdx + extraBorder - clientMidHeight + rowHeight,\n );\n }\n const isMidCol =\n midCols.length > 0 &&\n colIdx >= midCols[0].index &&\n colIdx <= last(midCols).index;\n if (isMidCol) {\n const midColIdx = colIdx - midCols[0].index;\n if (midColIdx <= bodyVisColRng.start) {\n let w = 0;\n for (let i = 0; i < midColIdx; ++i) {\n w += midCols[i].info.width;\n }\n x = w;\n } else if (midColIdx >= bodyVisColRng.end - 1) {\n let w = 0;\n for (let i = 0; i <= midColIdx; ++i) {\n w += midCols[i].info.width;\n }\n x = Math.max(0, w - clientMidWidth);\n }\n }\n if (x !== undefined || y !== undefined) {\n scroll(x, y, \"table\");\n }\n },\n [\n visRowRng,\n rowHeight,\n clientMidHeight,\n midCols,\n bodyVisColRng,\n clientMidWidth,\n scroll,\n ],\n );\n}\n\nconst MIN_COLUMN_WIDTH = 10;\n\n// Returns onMouseDown handler to be attached to column resize handlers.\n// TODO There might be some problems if column is removed while it is being resized\nexport function useColumnResize<T>(\n cols: GridColumnModel<T>[],\n resizeColumn: (columnIndex: number, width: number) => void,\n) {\n const columnResizeDataRef = useRef<{\n startX: number;\n startY: number;\n eventsUnsubscription: () => void;\n columnIndex: number;\n initialColumnWidth: number;\n minWidth: number;\n resizeColumn: (columnIndex: number, width: number) => void;\n }>();\n\n const onMouseUp = useCallback(() => {\n columnResizeDataRef.current?.eventsUnsubscription();\n columnResizeDataRef.current = undefined;\n }, []);\n\n const onMouseMove = useCallback((event: MouseEvent) => {\n const x = event.screenX;\n const { startX, columnIndex, initialColumnWidth, minWidth } =\n columnResizeDataRef.current!;\n const shift = x - startX;\n const width = Math.max(minWidth, initialColumnWidth + shift);\n columnResizeDataRef.current!.resizeColumn(columnIndex, Math.round(width));\n }, []);\n\n return useCallback(\n (event: ReactMouseEvent<HTMLDivElement>) => {\n const targetElement = event.target as HTMLElement;\n const [columnIndexAttribute, thElement] = getAttribute(\n targetElement,\n \"data-column-index\",\n );\n\n const columnIndex = Number.parseInt(columnIndexAttribute, 10);\n\n document.addEventListener(\"mouseup\", onMouseUp);\n document.addEventListener(\"mousemove\", onMouseMove);\n\n const initialColumnWidth = thElement.getBoundingClientRect().width;\n\n columnResizeDataRef.current = {\n startX: event.screenX,\n startY: event.screenY,\n eventsUnsubscription: () => {\n document.removeEventListener(\"mouseup\", onMouseUp);\n document.removeEventListener(\"mousemove\", onMouseMove);\n },\n columnIndex,\n initialColumnWidth,\n resizeColumn,\n minWidth: cols[columnIndex].info.props.minWidth || MIN_COLUMN_WIDTH,\n };\n\n event.preventDefault();\n },\n [resizeColumn],\n );\n}\n\n// Map values to array.\nexport function useFlatten<T>(map: Map<number, T>): T[] {\n return useMemo(() => {\n const entries = [...map.entries()].filter(([, value]) => !!value);\n entries.sort((a, b) => a[0] - b[0]);\n return entries.map((x) => x[1]);\n }, [map]);\n}\n\nfunction useColMap<T>() {\n return useState<Map<number, GridColumnInfo<T>>>(new Map());\n}\n\nfunction useGrpMap() {\n return useState<Map<number, ColumnGroupProps>>(new Map());\n}\n\n// Instances of TableColumn and TableColumnGroup register/unregister themselves\n// using onColumnAdded, onColumnRemoved, onColumnGroupAdded, onColumnGroupRemoved\n// taken from context\n// The order of columns/groups is based on the order of \"children\" (Grid.props children)\nexport function useColumnRegistry<T>(children: ReactNode) {\n const [leftColMap, setLeftColMap] = useColMap<T>();\n const [rightColMap, setRightColMap] = useColMap<T>();\n const [midColMap, setMidColMap] = useColMap<T>();\n\n const [leftGrpMap, setLeftGrpMap] = useGrpMap();\n const [rightGrpMap, setRightGrpMap] = useGrpMap();\n const [midGrpMap, setMidGrpMap] = useGrpMap();\n\n const [editorMap, setEditorMap] = useState<Map<string, CellEditorInfo<T>>>(\n new Map(),\n );\n\n const leftColInfos = useFlatten(leftColMap);\n const rightColInfos = useFlatten(rightColMap);\n const midColInfos = useFlatten(midColMap);\n\n const leftGrpPs = useFlatten(leftGrpMap);\n const rightGrpPs = useFlatten(rightGrpMap);\n const midGrpPs = useFlatten(midGrpMap);\n\n const leftGroups = useColumnGroups(leftGrpPs, 0);\n const midGroups = useColumnGroups(midGrpPs, leftGroups.length);\n const rightGroups = useColumnGroups(\n rightGrpPs,\n leftGroups.length + midGroups.length,\n );\n if (leftGroups.length > 0) {\n last(leftGroups).columnSeparator = \"pinned\";\n }\n if (rightGroups.length > 0 && midGroups.length > 0) {\n last(midGroups).columnSeparator = \"pinned\";\n }\n\n const leftCols: GridColumnModel<T>[] = useCols(leftColInfos, 0, leftGroups);\n const midCols: GridColumnModel<T>[] = useCols(\n midColInfos,\n leftCols.length,\n midGroups,\n );\n const rightCols: GridColumnModel<T>[] = useCols(\n rightColInfos,\n leftCols.length + midCols.length,\n rightGroups,\n );\n if (leftCols.length > 0) {\n last(leftCols).separator = \"pinned\";\n }\n if (rightCols.length > 0 && midCols.length > 0) {\n last(midCols).separator = \"pinned\";\n }\n\n const chPosById = useRef<Map<string, number>>(new Map());\n\n const indexChildren = () => {\n const m = new Map<string, number>();\n let i = 0;\n const indexChildrenRec = (c: ReactNode) => {\n if (!c) {\n return;\n }\n Children.forEach(c, (x) => {\n if (isValidElement(x) && x.props.id !== undefined) {\n m.set(x.props.id, i);\n i++;\n indexChildrenRec(x.props.children);\n }\n });\n };\n indexChildrenRec(children);\n return m;\n };\n chPosById.current = indexChildren();\n\n const getChildIndex = useCallback((id: string): number => {\n const idx = chPosById.current.get(id);\n if (idx === undefined) {\n console.log(`Unknown child id \"${id}\"`);\n console.log(\n `Known ids: ${Array.from(chPosById.current.keys())\n .map((x) => `\"${x}\"`)\n .join(\", \")}`,\n );\n throw new Error(`Unknown child id: \"${id}\"`);\n }\n return idx;\n }, []);\n\n const getColMapSet = (pinned?: GridColumnPin) =>\n pinned === \"left\"\n ? setLeftColMap\n : pinned === \"right\"\n ? setRightColMap\n : setMidColMap;\n\n const onColumnAdded = useCallback((columnInfo: GridColumnInfo<T>) => {\n // console.log(\n // `Column added: \"${columnInfo.props.id}\"; pinned: ${columnInfo.props.pinned}`\n // );\n const { id, pinned } = columnInfo.props;\n const index = getChildIndex(id);\n getColMapSet(pinned)(makeMapAdder(index, columnInfo));\n }, []);\n\n const onColumnRemoved = useCallback(\n (index: number, columnInfo: GridColumnInfo<T>) => {\n const { pinned } = columnInfo.props;\n getColMapSet(pinned)(makeMapDeleter(index));\n // console.log(`Column removed: \"${columnInfo.props.id}\"`);\n },\n [],\n );\n\n const getGrpMapSet = (pinned?: GridColumnPin) =>\n pinned === \"left\"\n ? setLeftGrpMap\n : pinned === \"right\"\n ? setRightGrpMap\n : setMidGrpMap;\n\n const onColumnGroupAdded = useCallback((colGroupProps: ColumnGroupProps) => {\n const { id, pinned } = colGroupProps;\n getGrpMapSet(pinned)(makeMapAdder(getChildIndex(id), colGroupProps));\n // console.log(`Group added: \"${colGroupProps.name}\"`);\n }, []);\n\n const onColumnGroupRemoved = useCallback(\n (index: number, colGroupProps: ColumnGroupProps) => {\n const { pinned } = colGroupProps;\n getGrpMapSet(pinned)(makeMapDeleter(index));\n // console.log(`Group removed: \"${colGroupProps.name}\"`);\n },\n [],\n );\n\n const onEditorAdded = useCallback((info: CellEditorInfo<T>) => {\n const { columnId } = info;\n setEditorMap(makeMapAdder(columnId, info));\n // console.log(`Editor added for column ${columnId}`);\n }, []);\n\n const onEditorRemoved = useCallback((info: CellEditorInfo<T>) => {\n const { columnId } = info;\n setEditorMap(makeMapDeleter(columnId));\n // console.log(`Editor removed for column ${columnId}`);\n }, []);\n\n const getEditor = useCallback(\n (columnId: string) => editorMap.get(columnId),\n [editorMap],\n );\n\n const contextValue: GridContext<T> = useMemo(\n () => ({\n getChildIndex,\n onColumnAdded,\n onColumnRemoved,\n onColumnGroupAdded,\n onColumnGroupRemoved,\n onEditorAdded,\n onEditorRemoved,\n getEditor,\n }),\n [\n getChildIndex,\n onColumnAdded,\n onColumnRemoved,\n onColumnGroupAdded,\n onColumnGroupRemoved,\n onEditorAdded,\n onEditorRemoved,\n getEditor,\n ],\n );\n\n return {\n leftCols,\n midCols,\n rightCols,\n leftGroups,\n midGroups,\n rightGroups,\n contextValue,\n };\n}\n\nexport type SelectRowsOptions = {\n rowIndex: number;\n isRange?: boolean;\n // Update selection incrementally based on previous state.\n // If rowIndex is selected then unselect it, otherwise select it.\n // This is what happens when the user clicks a row selection checkbox.\n // Shift + Space is another case when this behaviour is used.\n incremental?: boolean;\n // Unusual behaviour, applied on space keypress on a non-checkbox cell\n // The row is toggled, other rows unselected.\n unselectOtherRows?: boolean;\n};\n\n// Returns functions related to row selection.\n// TODO test use case when selection mode changes\nexport function useRowSelection<T>(\n rowKeyGetter: RowKeyGetter<T>,\n rowData: T[],\n defaultSelectedRowIdxs?: number[],\n selectedRowIdxs?: number[],\n rowSelectionMode?: GridRowSelectionMode,\n onRowSelected?: (selectedRowIdxs: number[]) => void,\n) {\n const selectedRowIdxsProp = useMemo(() => {\n if (selectedRowIdxs === undefined) {\n return undefined;\n }\n return new Set(selectedRowIdxs);\n }, [selectedRowIdxs]);\n\n const defaultSelectedRowIdxsProp = useMemo(() => {\n if (defaultSelectedRowIdxs === undefined) {\n return new Set([]);\n }\n return new Set(defaultSelectedRowIdxs);\n }, [defaultSelectedRowIdxs]);\n\n const [selRowIdxs, setSelRowIdxs] = useControlled({\n controlled: selectedRowIdxsProp,\n default: defaultSelectedRowIdxsProp,\n name: \"useRowSelection\",\n state: \"selRowIdxs\",\n });\n\n const [lastSelRowIdx, setLastSelRowIdx] = useState<number | undefined>(\n undefined,\n );\n\n useEffect(() => {\n if (\n (rowSelectionMode === \"none\" && selRowIdxs.size > 0) ||\n (rowSelectionMode === \"single\" && selRowIdxs.size > 1)\n ) {\n setSelRowIdxs(new Set());\n }\n }, [rowSelectionMode, selRowIdxs, setSelRowIdxs]);\n\n const selectRows = useCallback(\n ({\n rowIndex,\n isRange = false,\n incremental = false,\n unselectOtherRows = false,\n }: SelectRowsOptions) => {\n const idxFrom =\n rowSelectionMode === \"multi\" && lastSelRowIdx !== undefined && isRange\n ? lastSelRowIdx\n : undefined;\n\n let nextSelRowIdxs: Set<number> | undefined = undefined;\n let nextLastSelRowIdx: number | undefined = undefined;\n\n if (idxFrom === undefined) {\n if (unselectOtherRows) {\n if (incremental && selRowIdxs.has(rowIndex)) {\n nextSelRowIdxs = new Set<number>([]);\n nextLastSelRowIdx = undefined;\n } else {\n nextSelRowIdxs = new Set<number>([rowIndex]);\n nextLastSelRowIdx = rowIndex;\n }\n } else {\n if (incremental && rowSelectionMode === \"multi\") {\n nextSelRowIdxs = new Set<number>(selRowIdxs);\n if (nextSelRowIdxs.has(rowIndex)) {\n nextSelRowIdxs.delete(rowIndex);\n nextLastSelRowIdx = undefined;\n } else {\n nextSelRowIdxs.add(rowIndex);\n nextLastSelRowIdx = rowIndex;\n }\n } else {\n nextSelRowIdxs = new Set([rowIndex]);\n nextLastSelRowIdx = rowIndex;\n }\n }\n } else {\n const s = incremental ? new Set<number>(selRowIdxs) : new Set<number>();\n const idxs = [rowIndex, idxFrom];\n idxs.sort((a, b) => a - b);\n const rowIdxs: number[] = [];\n for (let i = idxs[0]; i <= idxs[1]; ++i) {\n rowIdxs.push(i);\n }\n if (selRowIdxs.has(rowIndex)) {\n rowIdxs.forEach((k) => s.delete(k));\n } else {\n rowIdxs.forEach((k) => s.add(k));\n }\n nextSelRowIdxs = s;\n nextLastSelRowIdx = rowIndex;\n }\n\n setSelRowIdxs(nextSelRowIdxs);\n setLastSelRowIdx(nextLastSelRowIdx);\n if (onRowSelected) {\n onRowSelected(Array.from(nextSelRowIdxs.keys()));\n }\n },\n [\n selRowIdxs,\n lastSelRowIdx,\n setSelRowIdxs,\n setLastSelRowIdx,\n rowData,\n rowKeyGetter,\n onRowSelected,\n ],\n );\n\n const isAllSelected = selRowIdxs.size === rowData.length;\n const isAnySelected = selRowIdxs.size > 0;\n\n const selectAll = useCallback(() => {\n const allRowIdxs = [...new Array(rowData.length).keys()].map((_, i) => i);\n setSelRowIdxs(new Set(allRowIdxs));\n if (onRowSelected) {\n onRowSelected(allRowIdxs);\n }\n }, [rowData, setSelRowIdxs]);\n\n const unselectAll = useCallback(() => {\n setSelRowIdxs(new Set());\n if (onRowSelected) {\n onRowSelected([]);\n }\n }, [setSelRowIdxs]);\n\n const onMouseDown = useCallback(\n (event: ReactMouseEvent<HTMLDivElement>) => {\n if (rowSelectionMode === \"none\") {\n return;\n }\n const target = event.target as HTMLElement;\n try {\n const [rowIndex] = getCellPosition(target);\n selectRows({\n rowIndex,\n isRange: event.shiftKey,\n incremental: event.metaKey || event.ctrlKey,\n });\n } catch (e) {}\n },\n [selectRows, rowSelectionMode],\n );\n\n return {\n onMouseDown,\n selRowIdxs,\n isAllSelected,\n isAnySelected,\n selectRows,\n selectAll,\n unselectAll,\n };\n}\n\nexport interface ColumnDragState {\n columnIndex: number;\n x: number;\n y: number;\n}\n\nconst COLUMN_DRAG_TOLERANCE = 10;\n\nexport interface Target {\n columnIndex: number;\n x: number;\n}\n\n// Returns onMouseDown handler to be attached to column headers (or any element\n// working as a drag-and-drop handle for moving columns)\n// Also returns dragState and active target (the drop target nearest to current\n// mouse positions.\nexport function useColumnMove<T = any>(\n columnMove: boolean | undefined,\n rootRef: RefObject<HTMLDivElement>,\n leftCols: GridColumnModel<T>[],\n midCols: GridColumnModel<T>[],\n rightCols: GridColumnModel<T>[],\n cols: GridColumnModel<T>[],\n scrollLeft: number,\n clientMidWidth: number,\n onColumnMove: GridColumnMoveHandler,\n) {\n const moveRef = useRef<{\n unsubscribe: () => void;\n startScreenX: number;\n startScreenY: number;\n startHeaderX: number;\n startHeaderY: number;\n\n columnIndex: number;\n columnId: string;\n dragTriggered: boolean;\n onColumnMove: GridColumnMoveHandler;\n }>();\n\n const activeTargetRef = useRef<Target | undefined>(undefined);\n\n const [dragState, setDragState] = useState<ColumnDragState | undefined>(\n undefined,\n );\n\n const columnDragStart = useCallback(\n (columnIndex: number, x: number, y: number) => {\n setDragState({ columnIndex, x, y });\n },\n [],\n );\n\n const columnDrag = useCallback((x: number, y: number) => {\n setDragState((old) => {\n return { ...old!, x, y };\n });\n }, []);\n\n const columnDrop = useCallback(() => {\n const toIndex = activeTargetRef.current?.columnIndex;\n const fromIndex = moveRef.current?.columnIndex;\n const columnId = moveRef.current?.columnId;\n const handler = moveRef.current?.onColumnMove;\n if (\n toIndex !== undefined &&\n fromIndex !== undefined &&\n handler !== undefined &&\n columnId !== undefined\n ) {\n handler(columnId, fromIndex, toIndex);\n }\n setDragState(undefined);\n }, [setDragState]);\n\n const onMouseUp = useCallback(() => {\n if (moveRef.current?.dragTriggered) {\n columnDrop();\n }\n moveRef.current?.unsubscribe();\n moveRef.current = undefined;\n }, [columnDrop]);\n\n const onMouseMove = useCallback(\n (event: MouseEvent) => {\n const {\n columnIndex,\n startHeaderX,\n startHeaderY,\n startScreenX,\n startScreenY,\n dragTriggered,\n } = moveRef.current!;\n\n const shiftX = event.screenX - startScreenX;\n const shiftY = event.screenY - startScreenY;\n const x = startHeaderX + shiftX;\n const y = startHeaderY + shiftY;\n\n if (!dragTriggered) {\n if (\n Math.sqrt(shiftX * shiftX + shiftY * shiftY) > COLUMN_DRAG_TOLERANCE\n ) {\n moveRef.current!.dragTriggered = true;\n columnDragStart(columnIndex, x, y);\n }\n } else {\n columnDrag(x, y);\n }\n },\n [columnDrag],\n );\n\n const onColumnMoveHandleMouseDown: MouseEventHandler<HTMLDivElement> =\n useCallback(\n (event) => {\n const [columnIndexAttribute, thElement] = getAttribute(\n event.target as HTMLElement,\n \"data-column-index\",\n );\n const rootElement = rootRef.current;\n\n if (!rootElement) {\n return;\n }\n\n document.addEventListener(\"mouseup\", onMouseUp);\n document.addEventListener(\"mousemove\", onMouseMove);\n\n const columnIndex = Number.parseInt(columnIndexAttribute, 10);\n const columnId = cols[columnIndex].info.props.id;\n\n const thRect = thElement.getBoundingClientRect();\n const rootRect = rootElement.getBoundingClientRect();\n\n const x = thRect.x - rootRect.x;\n const y = thRect.y - rootRect.y;\n\n moveRef.current = {\n unsubscribe: () => {\n document.removeEventListener(\"mouseup\", onMouseUp);\n document.removeEventListener(\"mousemove\", onMouseMove);\n },\n startScreenX: event.screenX,\n startScreenY: event.screenY,\n startHeaderX: x,\n startHeaderY: y,\n columnIndex,\n columnId,\n dragTriggered: false,\n onColumnMove,\n };\n\n event.preventDefault();\n },\n [columnDragStart, cols],\n );\n\n const onColumnMoveCancel = useCallback(() => {\n setDragState(undefined);\n moveRef.current?.unsubscribe();\n moveRef.current = undefined;\n }, []);\n\n const targets = useMemo(() => {\n if (!dragState) {\n return undefined;\n }\n const ts: Target[] = [];\n let x = 0;\n leftCols.forEach((c) => {\n ts.push({ columnIndex: c.index, x });\n x += c.info.width;\n });\n let w = scrollLeft;\n let i = 0;\n while (w > 0 && i < midCols.length) {\n w -= midCols[i].info.width;\n i++;\n }\n x -= w;\n w += clientMidWidth;\n while (w > 0 && i < midCols.length) {\n const c = midCols[i];\n ts.push({ columnIndex: c.index, x });\n x += c.info.width;\n w -= c.info.width;\n i++;\n }\n if (rightCols.length > 0) {\n x += w;\n rightCols.forEach((c) => {\n ts.push({ columnIndex: c.index, x });\n x += c.info.width;\n });\n ts.push({ columnIndex: last(rightCols).index + 1, x });\n } else {\n ts.push({ columnIndex: last(midCols).index + 1, x });\n }\n return ts;\n }, [dragState, leftCols, midCols, rightCols, scrollLeft, clientMidWidth]);\n\n const activeTargetIdx = useMemo(() => {\n const x = dragState?.x;\n if (x === undefined || targets === undefined || targets.length < 1) {\n return undefined;\n }\n let i = 0;\n while (i < targets.length && targets[i].x < x) {\n i++;\n }\n if (i === 0) {\n return 0;\n }\n if (i >= targets.length) {\n return targets.length - 1;\n }\n return targets[i].x - x < x - targets[i - 1].x ? i : i - 1;\n }, [targets, dragState?.x]);\n\n const activeTarget =\n activeTargetIdx === undefined ? undefined : targets![activeTargetIdx];\n\n activeTargetRef.current = activeTarget;\n\n return {\n onColumnMoveHandleMouseDown,\n dragState,\n activeTarget,\n onColumnMoveCancel,\n };\n}\n\nexport interface CellPosition {\n rowIdx: number;\n colIdx: number;\n}\n\nexport interface CellRange {\n start: CellPosition;\n end: CellPosition;\n}\n\nexport function cellPositionEquals(a: CellPosition, b: CellPosition) {\n return a.rowIdx === b.rowIdx && a.colIdx === b.colIdx;\n}\n\nexport function cellRangeEquals(\n a: CellRange | undefined,\n b: CellRange | undefined,\n) {\n if (!a) {\n return !b;\n }\n return (\n !!b &&\n cellPositionEquals(a.start, b.start) &&\n cellPositionEquals(a.end, b.end)\n );\n}\n\n// TODO test the use case when cellSelectionMode changes during dnd.\n// Cell range selection. This is experimental.\nexport function useRangeSelection(cellSelectionMode?: GridCellSelectionMode) {\n const mouseSelectionRef = useRef<{\n unsubscribe: () => void;\n start: CellPosition;\n }>();\n\n const keyboardSelectionRef = useRef<{\n start: CellPosition;\n }>();\n\n if (cellSelectionMode !== \"range\") {\n if (mouseSelectionRef.current) {\n mouseSelectionRef.current.unsubscribe();\n mouseSelectionRef.current = undefined;\n }\n if (keyboardSelectionRef.current) {\n keyboardSelectionRef.current = undefined;\n }\n }\n\n const [selectedCellRange, setSelectedCellRange] = useState<\n CellRange | undefined\n >(undefined);\n\n const onMouseMove = useCallback((event: MouseEvent) => {\n const { clientX, clientY } = event;\n const element = document.elementFromPoint(clientX, clientY) as HTMLElement;\n try {\n const [rowIdx, colIdx] = getCellPosition(element);\n\n setSelectedCellRange((old) => {\n const { start } = mouseSelectionRef.current!;\n const p: CellRange = { start, end: { rowIdx, colIdx } };\n return cellRangeEquals(old, p) ? old : p;\n });\n } catch (exc) {}\n }, []);\n\n const onMouseUp = useCallback((event: MouseEvent) => {\n if (!mouseSelectionRef.current) {\n throw new Error(\"useRangeSelection state is not initialized\");\n }\n mouseSelectionRef.current.unsubscribe();\n mouseSelectionRef.current = undefined;\n }, []);\n\n const onCellMouseDown = useCallback(\n (event: ReactMouseEvent) => {\n if (cellSelectionMode !== \"range\") {\n return;\n }\n const target = event.target as HTMLElement;\n try {\n const [rowIdx, colIdx] = getCellPosition(target);\n document.addEventListener(\"mouseup\", onMouseUp);\n document.addEventListener(\"mousemove\", onMouseMove);\n const pos: CellPosition = { rowIdx, colIdx };\n mouseSelectionRef.current = {\n start: pos,\n unsubscribe: () => {\n document.removeEventListener(\"mouseup\", onMouseUp);\n document.removeEventListener(\"mousemove\", onMouseMove);\n },\n };\n setSelectedCellRange({ start: pos, end: pos });\n } catch (exc) {}\n },\n [cellSelectionMode],\n );\n\n const onKeyboardRangeSelectionStart = useCallback((pos: CellPosition) => {\n keyboardSelectionRef.current = {\n start: pos,\n };\n }, []);\n\n const onKeyboardRangeSelectionEnd = useCallback(() => {\n keyboardSelectionRef.current = undefined;\n }, []);\n\n const onCursorMove = useCallback((pos: CellPosition) => {\n if (!keyboardSelectionRef.current) {\n return;\n }\n setSelectedCellRange((old) => {\n if (!keyboardSelectionRef.current) {\n return old;\n }\n const { start } = keyboardSelectionRef.current;\n const p: CellRange = { start, end: pos };\n return cellRangeEquals(old, p) ? old : p;\n });\n }, []);\n\n const selectRange = useCallback((range: CellRange) => {\n if (cellSelectionMode !== \"range\") {\n return;\n }\n setSelectedCellRange(range);\n }, []);\n\n return {\n selectedCellRange,\n onCellMouseDown,\n onKeyboardRangeSelectionStart,\n onKeyboardRangeSelectionEnd,\n onCursorMove,\n selectRange,\n };\n}\n\nexport function useFocusableContent<T extends HTMLElement>() {\n const ref = useRef<T>(null);\n const [isFocusableContent, setFocusableContent] = useState<boolean>(false);\n\n const onFocus: FocusEventHandler<T> = (event) => {\n if (event.target === ref.current) {\n const nestedInteractive = ref.current.querySelector(`[tabindex=\"0\"]`);\n if (nestedInteractive) {\n (nestedInteractive as HTMLElement).focus();\n setFocusableContent(true);\n }\n }\n };\n\n return { ref, isFocusableContent, onFocus };\n}\n"],"names":["useRef","useEffect","useMemo","NumberRange","Children","isValidElement","useCallback","getAttribute","useState","makeMapAdder","makeMapDeleter","useControlled","getCellPosition"],"mappings":"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"}
1
+ {"version":3,"file":"gridHooks.js","sources":["../src/internal/gridHooks.tsx"],"sourcesContent":["import { useControlled } from \"@salt-ds/core\";\nimport {\n Children,\n type FocusEventHandler,\n type MouseEventHandler,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n type RefObject,\n isValidElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport type { CellEditorInfo } from \"../CellEditor\";\nimport type { ColumnGroupProps } from \"../ColumnGroup\";\nimport type { FocusedPart } from \"../CursorContext\";\nimport type {\n GridCellSelectionMode,\n GridColumnGroupModel,\n GridColumnModel,\n GridColumnMoveHandler,\n GridRowModel,\n GridRowSelectionMode,\n RowKeyGetter,\n} from \"../Grid\";\nimport type { GridColumnInfo, GridColumnPin } from \"../GridColumn\";\nimport type { GridContext } from \"../GridContext\";\nimport { NumberRange } from \"../NumberRange\";\nimport {\n getAttribute,\n getCellPosition,\n makeMapAdder,\n makeMapDeleter,\n} from \"./utils\";\n\n// Attaches active onWheel event to a table element\n// Grid needs to prevent default onWheel event handling for situations when a\n// scrollable grid is on a scrollable page. Page should not scroll when the grid\n// is being scrolled, unless reached top or bottom of scrollable grid.\nexport function useActiveOnWheel(onWheel: EventListener) {\n const tableRef = useRef<HTMLTableElement>(null);\n\n useEffect(() => {\n const table = tableRef.current;\n if (table && onWheel) {\n table.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => {\n table.removeEventListener(\"wheel\", onWheel);\n };\n }\n }, [tableRef.current]);\n\n return tableRef;\n}\n\n// Total width of the given columns.\nfunction sumWidth<T>(columns: GridColumnModel<T>[]) {\n return columns.reduce((p, x) => p + x.info.width, 0);\n}\n\n// Returns total width of the given columns wrapped in useMemo.\nexport function useSumWidth<T>(columns: GridColumnModel<T>[]) {\n return useMemo(() => sumWidth(columns), [columns]);\n}\n\n// Memoized sum of the given numbers.\nexport function useSum(source: number[]) {\n return useMemo(() => source.reduce((p, x) => p + x, 0), source);\n}\n\n// Sum width of the given range of columns.\nfunction sumRangeWidth<T>(columns: GridColumnModel<T>[], range: NumberRange) {\n let w = 0;\n range.forEach((i) => {\n w += columns[i].info.width;\n });\n return w;\n}\n\n// Sum width of the given range of columns wrapped in useMemo.\nexport function useSumRangeWidth<T>(\n columns: GridColumnModel<T>[],\n range: NumberRange,\n) {\n return useMemo(() => sumRangeWidth(columns, range), [columns, range]);\n}\n\n// Range memoization using Rng.equals comparator.\nfunction useMemoRng(fn: () => NumberRange, deps: unknown[]) {\n const prevRef = useRef<NumberRange>(NumberRange.empty);\n const range = useMemo(fn, deps);\n if (!NumberRange.equals(prevRef.current, range)) {\n prevRef.current = range;\n }\n return prevRef.current;\n}\n\n// Visible range of columns within the body.\nexport function useBodyVisibleColumnRange<T>(\n midColumns: GridColumnModel<T>[],\n scrollLeft: number,\n clientMidWidth: number,\n): NumberRange {\n return useMemoRng(() => {\n if (clientMidWidth === 0 || midColumns.length === 0) {\n return NumberRange.empty;\n }\n let width = scrollLeft;\n let start = 0;\n for (let i = 0; i < midColumns.length; ++i) {\n const colWidth = midColumns[i].info.width;\n if (width > colWidth) {\n width -= colWidth;\n } else {\n start = i;\n width += clientMidWidth;\n break;\n }\n }\n let end = start + 1;\n for (let i = start; i < midColumns.length; ++i) {\n const colWidth = midColumns[i].info.width;\n width -= colWidth;\n end = i + 1;\n if (width <= 0) {\n break;\n }\n }\n if (end > midColumns.length) {\n end = midColumns.length;\n }\n return new NumberRange(start, end);\n }, [midColumns, scrollLeft, clientMidWidth]);\n}\n\n// Client width of the middle (scrollable) part of the grid.\nexport function useClientMidWidth(\n clientWidth: number,\n leftWidth: number,\n rightWidth: number,\n) {\n return useMemo(\n () => clientWidth - leftWidth - rightWidth,\n [clientWidth, leftWidth, rightWidth],\n );\n}\n\n// Client height of the middle part of the grid.\nexport function useClientMidHeight(\n clientHeight: number,\n topHeight: number,\n botHeight: number,\n) {\n return useMemo(\n () => clientHeight - topHeight - botHeight,\n [clientHeight, topHeight, botHeight],\n );\n}\n\n// Y coordinate of the visible area within the virtual space.\nexport function useBodyVisibleAreaTop<T>(\n rowHeight: number,\n visibleRowRange: NumberRange,\n topHeight: number,\n) {\n return useMemo(() => {\n let top = topHeight + visibleRowRange.start * rowHeight;\n if (visibleRowRange.start > 0) {\n top += 1; // First row (row #0) has an extra border\n }\n return top;\n }, [rowHeight, visibleRowRange, topHeight]);\n}\n\n// Visible range of rows.\nexport function useVisibleRowRange(\n scrollTop: number,\n clientMidHeight: number,\n rowHeight: number,\n rowCount: number,\n) {\n return useMemoRng(() => {\n if (rowHeight < 1) {\n return NumberRange.empty;\n }\n const firstRowHeight = rowHeight + 1; // First row has an extra 1px\n\n const start =\n scrollTop > firstRowHeight\n ? 1 + Math.floor((scrollTop - firstRowHeight) / rowHeight)\n : 0;\n let endPos = scrollTop + clientMidHeight;\n\n if (start === 0) {\n endPos -= 1;\n }\n const end = Math.min(\n rowCount,\n Math.max(start, Math.ceil(endPos / rowHeight)),\n );\n\n // Scroll Top not returning to 0 after pagination. Guard to ensure issues with ScrollTop throw error\n if (start > end) {\n return NumberRange.empty;\n }\n\n return new NumberRange(start, end);\n }, [scrollTop, clientMidHeight, rowHeight, rowCount]);\n}\n\nexport function useColumnRange<T>(\n columns: GridColumnModel<T>[],\n range: NumberRange,\n): GridColumnModel<T>[] {\n return useMemo(() => columns.slice(range.start, range.end), [columns, range]);\n}\n\n// Total width of the columns scrolled out to the left of the visible area.\nexport function useLeftScrolledOutWidth<T>(\n midColumns: GridColumnModel<T>[],\n bodyVisibleColumnRange: NumberRange,\n) {\n return useMemo(() => {\n let w = 0;\n for (let i = 0; i < bodyVisibleColumnRange.start; ++i) {\n w += midColumns[i].info.width;\n }\n return w;\n }, [midColumns, bodyVisibleColumnRange]);\n}\n\n// Row positions by row keys.\nexport function useRowIdxByKey<T>(rowKeyGetter: RowKeyGetter<T>, rowData: T[]) {\n return useMemo(() => {\n return new Map<string, number>(\n rowData.map((r, i) => [rowKeyGetter(r, i), i]),\n );\n }, [rowData, rowKeyGetter]);\n}\n\nexport type SetState<T> = (v: T | ((p: T) => T)) => void;\n\n// Row models for the visible rows.\nexport function useRowModels<T>(\n getKey: RowKeyGetter<T>,\n rowData: T[],\n visibleRowRange: NumberRange,\n) {\n return useMemo(() => {\n const rows: GridRowModel<T>[] = [];\n visibleRowRange.forEach((i) => {\n const key = getKey(rowData[i], i);\n rows.push({ data: rowData[i], key, index: i });\n });\n return rows;\n }, [getKey, rowData, visibleRowRange]);\n}\n\n// Creates column group models.\nexport const useColumnGroups = (\n grpPs: ColumnGroupProps[],\n startIdx: number,\n): GridColumnGroupModel[] =>\n useMemo(\n () =>\n grpPs.map((data, i) => {\n const childrenIds = Children.toArray(data.children)\n .map((child) => {\n if (!isValidElement(child)) {\n return undefined;\n }\n return child.props.id;\n })\n .filter((x) => x !== undefined) as string[];\n const colSpan = childrenIds.length;\n\n return {\n data,\n index: i + startIdx,\n childrenIds,\n colSpan,\n columnSeparator: \"regular\",\n rowSeparator: \"regular\",\n };\n }),\n [grpPs, startIdx],\n );\n\n// Visible range of column groups.\nexport function useVisibleColumnGroupRange<T>(\n bodyVisColRng: NumberRange,\n midCols: GridColumnModel<T>[],\n midGrpByColId: Map<string, GridColumnGroupModel>,\n leftGrpCount: number,\n): NumberRange {\n return useMemoRng(() => {\n if (bodyVisColRng.length === 0) {\n return NumberRange.empty;\n }\n const firstVisibleCol = midCols[bodyVisColRng.start];\n const lastVisibleCol = midCols[bodyVisColRng.end - 1];\n const firstVisibleGroup = midGrpByColId.get(firstVisibleCol.info.props.id);\n const lastVisibleGroup = midGrpByColId.get(lastVisibleCol.info.props.id);\n if (!firstVisibleGroup || !lastVisibleGroup) {\n return NumberRange.empty;\n }\n return new NumberRange(\n firstVisibleGroup.index - leftGrpCount,\n lastVisibleGroup.index + 1 - leftGrpCount,\n );\n }, [bodyVisColRng, midCols, midGrpByColId, leftGrpCount]);\n}\n\nexport function last<T>(source: T[]): T {\n return source[source.length - 1];\n}\n\n// Range of columns visible in the header.\nexport function useHeadVisibleColumnRange<T>(\n bodyVisColRng: NumberRange,\n visColGrps: GridColumnGroupModel[],\n midColsById: Map<string, GridColumnModel<T>>,\n leftColCount: number,\n) {\n return useMemoRng(() => {\n if (visColGrps.length === 0) {\n return bodyVisColRng;\n }\n const firstVisibleGroup = visColGrps[0];\n const lastVisibleGroup = last(visColGrps);\n const firstColId = firstVisibleGroup.childrenIds[0];\n const lastColId = last(lastVisibleGroup.childrenIds);\n const firstColIdx = midColsById.get(firstColId)?.index;\n const lastColIdx = midColsById.get(lastColId)?.index;\n if (firstColIdx === undefined || lastColIdx === undefined) {\n return NumberRange.empty;\n }\n return new NumberRange(\n firstColIdx - leftColCount,\n lastColIdx + 1 - leftColCount,\n );\n }, [bodyVisColRng, visColGrps, midColsById, leftColCount]);\n}\n\n// Creates column models.\nexport function useCols<T>(\n colInfos: GridColumnInfo<T>[],\n startIdx: number,\n groups: GridColumnGroupModel[],\n): GridColumnModel<T>[] {\n return useMemo(() => {\n const edgeColIds = new Set<string>();\n groups.forEach((g) => {\n edgeColIds.add(last(g.childrenIds));\n });\n const columnModels: GridColumnModel<T>[] = colInfos.map((info, i) => ({\n info,\n index: i + startIdx,\n separator: edgeColIds.has(info.props.id) ? \"groupEdge\" : \"regular\",\n }));\n return columnModels;\n }, [colInfos, startIdx, groups]);\n}\n\n// Returns a function that scrolls the grid to the given cell.\nexport function useScrollToCell<T>(\n visRowRng: NumberRange,\n rowHeight: number,\n clientMidHeight: number,\n midCols: GridColumnModel<T>[],\n bodyVisColRng: NumberRange,\n clientMidWidth: number,\n scroll: (left?: number, top?: number, source?: \"user\" | \"table\") => void,\n) {\n return useCallback(\n (part: FocusedPart, rowIdx: number, colIdx: number) => {\n if (part !== \"body\") {\n return; // TODO\n }\n let x: number | undefined = undefined;\n let y: number | undefined = undefined;\n if (rowIdx <= visRowRng.start) {\n // First row is 1px wider than other rows (additional top border)\n y = rowIdx === 0 ? 0 : 1 + rowHeight * rowIdx;\n } else if (rowIdx >= visRowRng.end - 1) {\n const extraBorder = rowIdx > 0 ? 1 : 0;\n y = Math.max(\n 0,\n rowHeight * rowIdx + extraBorder - clientMidHeight + rowHeight,\n );\n }\n const isMidCol =\n midCols.length > 0 &&\n colIdx >= midCols[0].index &&\n colIdx <= last(midCols).index;\n if (isMidCol) {\n const midColIdx = colIdx - midCols[0].index;\n if (midColIdx <= bodyVisColRng.start) {\n let w = 0;\n for (let i = 0; i < midColIdx; ++i) {\n w += midCols[i].info.width;\n }\n x = w;\n } else if (midColIdx >= bodyVisColRng.end - 1) {\n let w = 0;\n for (let i = 0; i <= midColIdx; ++i) {\n w += midCols[i].info.width;\n }\n x = Math.max(0, w - clientMidWidth);\n }\n }\n if (x !== undefined || y !== undefined) {\n scroll(x, y, \"table\");\n }\n },\n [\n visRowRng,\n rowHeight,\n clientMidHeight,\n midCols,\n bodyVisColRng,\n clientMidWidth,\n scroll,\n ],\n );\n}\n\nconst MIN_COLUMN_WIDTH = 10;\n\n// Returns onMouseDown handler to be attached to column resize handlers.\n// TODO There might be some problems if column is removed while it is being resized\nexport function useColumnResize<T>(\n cols: GridColumnModel<T>[],\n resizeColumn: (columnIndex: number, width: number) => void,\n) {\n const columnResizeDataRef = useRef<{\n startX: number;\n startY: number;\n eventsUnsubscription: () => void;\n columnIndex: number;\n initialColumnWidth: number;\n minWidth: number;\n resizeColumn: (columnIndex: number, width: number) => void;\n }>();\n\n const onMouseUp = useCallback(() => {\n columnResizeDataRef.current?.eventsUnsubscription();\n columnResizeDataRef.current = undefined;\n }, []);\n\n const onMouseMove = useCallback((event: MouseEvent) => {\n const x = event.screenX;\n const { startX, columnIndex, initialColumnWidth, minWidth } =\n columnResizeDataRef.current!;\n const shift = x - startX;\n const width = Math.max(minWidth, initialColumnWidth + shift);\n columnResizeDataRef.current!.resizeColumn(columnIndex, Math.round(width));\n }, []);\n\n return useCallback(\n (event: ReactMouseEvent<HTMLDivElement>) => {\n const targetElement = event.target as HTMLElement;\n const [columnIndexAttribute, thElement] = getAttribute(\n targetElement,\n \"data-column-index\",\n );\n\n const columnIndex = Number.parseInt(columnIndexAttribute, 10);\n\n document.addEventListener(\"mouseup\", onMouseUp);\n document.addEventListener(\"mousemove\", onMouseMove);\n\n const initialColumnWidth = thElement.getBoundingClientRect().width;\n\n columnResizeDataRef.current = {\n startX: event.screenX,\n startY: event.screenY,\n eventsUnsubscription: () => {\n document.removeEventListener(\"mouseup\", onMouseUp);\n document.removeEventListener(\"mousemove\", onMouseMove);\n },\n columnIndex,\n initialColumnWidth,\n resizeColumn,\n minWidth: cols[columnIndex].info.props.minWidth || MIN_COLUMN_WIDTH,\n };\n\n event.preventDefault();\n },\n [resizeColumn],\n );\n}\n\n// Map values to array.\nexport function useFlatten<T>(map: Map<number, T>): T[] {\n return useMemo(() => {\n const entries = [...map.entries()].filter(([, value]) => !!value);\n entries.sort((a, b) => a[0] - b[0]);\n return entries.map((x) => x[1]);\n }, [map]);\n}\n\nfunction useColMap<T>() {\n return useState<Map<number, GridColumnInfo<T>>>(new Map());\n}\n\nfunction useGrpMap() {\n return useState<Map<number, ColumnGroupProps>>(new Map());\n}\n\n// Instances of TableColumn and TableColumnGroup register/unregister themselves\n// using onColumnAdded, onColumnRemoved, onColumnGroupAdded, onColumnGroupRemoved\n// taken from context\n// The order of columns/groups is based on the order of \"children\" (Grid.props children)\nexport function useColumnRegistry<T>(children: ReactNode) {\n const [leftColMap, setLeftColMap] = useColMap<T>();\n const [rightColMap, setRightColMap] = useColMap<T>();\n const [midColMap, setMidColMap] = useColMap<T>();\n\n const [leftGrpMap, setLeftGrpMap] = useGrpMap();\n const [rightGrpMap, setRightGrpMap] = useGrpMap();\n const [midGrpMap, setMidGrpMap] = useGrpMap();\n\n const [editorMap, setEditorMap] = useState<Map<string, CellEditorInfo<T>>>(\n new Map(),\n );\n\n const leftColInfos = useFlatten(leftColMap);\n const rightColInfos = useFlatten(rightColMap);\n const midColInfos = useFlatten(midColMap);\n\n const leftGrpPs = useFlatten(leftGrpMap);\n const rightGrpPs = useFlatten(rightGrpMap);\n const midGrpPs = useFlatten(midGrpMap);\n\n const leftGroups = useColumnGroups(leftGrpPs, 0);\n const midGroups = useColumnGroups(midGrpPs, leftGroups.length);\n const rightGroups = useColumnGroups(\n rightGrpPs,\n leftGroups.length + midGroups.length,\n );\n if (leftGroups.length > 0) {\n last(leftGroups).columnSeparator = \"pinned\";\n }\n if (rightGroups.length > 0 && midGroups.length > 0) {\n last(midGroups).columnSeparator = \"pinned\";\n }\n\n const leftCols: GridColumnModel<T>[] = useCols(leftColInfos, 0, leftGroups);\n const midCols: GridColumnModel<T>[] = useCols(\n midColInfos,\n leftCols.length,\n midGroups,\n );\n const rightCols: GridColumnModel<T>[] = useCols(\n rightColInfos,\n leftCols.length + midCols.length,\n rightGroups,\n );\n if (leftCols.length > 0) {\n last(leftCols).separator = \"pinned\";\n }\n if (rightCols.length > 0 && midCols.length > 0) {\n last(midCols).separator = \"pinned\";\n }\n\n const chPosById = useRef<Map<string, number>>(new Map());\n\n const indexChildren = () => {\n const m = new Map<string, number>();\n let i = 0;\n const indexChildrenRec = (c: ReactNode) => {\n if (!c) {\n return;\n }\n Children.forEach(c, (x) => {\n if (isValidElement(x) && x.props.id !== undefined) {\n m.set(x.props.id, i);\n i++;\n indexChildrenRec(x.props.children);\n }\n });\n };\n indexChildrenRec(children);\n return m;\n };\n chPosById.current = indexChildren();\n\n const getChildIndex = useCallback((id: string): number => {\n const idx = chPosById.current.get(id);\n if (idx === undefined) {\n console.log(`Unknown child id \"${id}\"`);\n console.log(\n `Known ids: ${Array.from(chPosById.current.keys())\n .map((x) => `\"${x}\"`)\n .join(\", \")}`,\n );\n throw new Error(`Unknown child id: \"${id}\"`);\n }\n return idx;\n }, []);\n\n const getColMapSet = (pinned?: GridColumnPin) =>\n pinned === \"left\"\n ? setLeftColMap\n : pinned === \"right\"\n ? setRightColMap\n : setMidColMap;\n\n const onColumnAdded = useCallback((columnInfo: GridColumnInfo<T>) => {\n // console.log(\n // `Column added: \"${columnInfo.props.id}\"; pinned: ${columnInfo.props.pinned}`\n // );\n const { id, pinned } = columnInfo.props;\n const index = getChildIndex(id);\n getColMapSet(pinned)(makeMapAdder(index, columnInfo));\n }, []);\n\n const onColumnRemoved = useCallback(\n (index: number, columnInfo: GridColumnInfo<T>) => {\n const { pinned } = columnInfo.props;\n getColMapSet(pinned)(makeMapDeleter(index));\n // console.log(`Column removed: \"${columnInfo.props.id}\"`);\n },\n [],\n );\n\n const getGrpMapSet = (pinned?: GridColumnPin) =>\n pinned === \"left\"\n ? setLeftGrpMap\n : pinned === \"right\"\n ? setRightGrpMap\n : setMidGrpMap;\n\n const onColumnGroupAdded = useCallback((colGroupProps: ColumnGroupProps) => {\n const { id, pinned } = colGroupProps;\n getGrpMapSet(pinned)(makeMapAdder(getChildIndex(id), colGroupProps));\n // console.log(`Group added: \"${colGroupProps.name}\"`);\n }, []);\n\n const onColumnGroupRemoved = useCallback(\n (index: number, colGroupProps: ColumnGroupProps) => {\n const { pinned } = colGroupProps;\n getGrpMapSet(pinned)(makeMapDeleter(index));\n // console.log(`Group removed: \"${colGroupProps.name}\"`);\n },\n [],\n );\n\n const onEditorAdded = useCallback((info: CellEditorInfo<T>) => {\n const { columnId } = info;\n setEditorMap(makeMapAdder(columnId, info));\n // console.log(`Editor added for column ${columnId}`);\n }, []);\n\n const onEditorRemoved = useCallback((info: CellEditorInfo<T>) => {\n const { columnId } = info;\n setEditorMap(makeMapDeleter(columnId));\n // console.log(`Editor removed for column ${columnId}`);\n }, []);\n\n const getEditor = useCallback(\n (columnId: string) => editorMap.get(columnId),\n [editorMap],\n );\n\n const contextValue: GridContext<T> = useMemo(\n () => ({\n getChildIndex,\n onColumnAdded,\n onColumnRemoved,\n onColumnGroupAdded,\n onColumnGroupRemoved,\n onEditorAdded,\n onEditorRemoved,\n getEditor,\n }),\n [\n getChildIndex,\n onColumnAdded,\n onColumnRemoved,\n onColumnGroupAdded,\n onColumnGroupRemoved,\n onEditorAdded,\n onEditorRemoved,\n getEditor,\n ],\n );\n\n return {\n leftCols,\n midCols,\n rightCols,\n leftGroups,\n midGroups,\n rightGroups,\n contextValue,\n };\n}\n\nexport type SelectRowsOptions = {\n rowIndex: number;\n isRange?: boolean;\n // Update selection incrementally based on previous state.\n // If rowIndex is selected then unselect it, otherwise select it.\n // This is what happens when the user clicks a row selection checkbox.\n // Shift + Space is another case when this behaviour is used.\n incremental?: boolean;\n // Unusual behaviour, applied on space keypress on a non-checkbox cell\n // The row is toggled, other rows unselected.\n unselectOtherRows?: boolean;\n};\n\n// Returns functions related to row selection.\n// TODO test use case when selection mode changes\nexport function useRowSelection<T>(\n rowKeyGetter: RowKeyGetter<T>,\n rowData: T[],\n defaultSelectedRowIdxs?: number[],\n selectedRowIdxs?: number[],\n rowSelectionMode?: GridRowSelectionMode,\n onRowSelected?: (selectedRowIdxs: number[]) => void,\n) {\n const selectedRowIdxsProp = useMemo(() => {\n if (selectedRowIdxs === undefined) {\n return undefined;\n }\n return new Set(selectedRowIdxs);\n }, [selectedRowIdxs]);\n\n const defaultSelectedRowIdxsProp = useMemo(() => {\n if (defaultSelectedRowIdxs === undefined) {\n return new Set([]);\n }\n return new Set(defaultSelectedRowIdxs);\n }, [defaultSelectedRowIdxs]);\n\n const [selRowIdxs, setSelRowIdxs] = useControlled({\n controlled: selectedRowIdxsProp,\n default: defaultSelectedRowIdxsProp,\n name: \"useRowSelection\",\n state: \"selRowIdxs\",\n });\n\n const [lastSelRowIdx, setLastSelRowIdx] = useState<number | undefined>(\n undefined,\n );\n\n useEffect(() => {\n if (\n (rowSelectionMode === \"none\" && selRowIdxs.size > 0) ||\n (rowSelectionMode === \"single\" && selRowIdxs.size > 1)\n ) {\n setSelRowIdxs(new Set());\n }\n }, [rowSelectionMode, selRowIdxs, setSelRowIdxs]);\n\n const selectRows = useCallback(\n ({\n rowIndex,\n isRange = false,\n incremental = false,\n unselectOtherRows = false,\n }: SelectRowsOptions) => {\n const idxFrom =\n rowSelectionMode === \"multi\" && lastSelRowIdx !== undefined && isRange\n ? lastSelRowIdx\n : undefined;\n\n let nextSelRowIdxs: Set<number> | undefined = undefined;\n let nextLastSelRowIdx: number | undefined = undefined;\n\n if (idxFrom === undefined) {\n if (unselectOtherRows) {\n if (incremental && selRowIdxs.has(rowIndex)) {\n nextSelRowIdxs = new Set<number>([]);\n nextLastSelRowIdx = undefined;\n } else {\n nextSelRowIdxs = new Set<number>([rowIndex]);\n nextLastSelRowIdx = rowIndex;\n }\n } else {\n if (incremental && rowSelectionMode === \"multi\") {\n nextSelRowIdxs = new Set<number>(selRowIdxs);\n if (nextSelRowIdxs.has(rowIndex)) {\n nextSelRowIdxs.delete(rowIndex);\n nextLastSelRowIdx = undefined;\n } else {\n nextSelRowIdxs.add(rowIndex);\n nextLastSelRowIdx = rowIndex;\n }\n } else {\n nextSelRowIdxs = new Set([rowIndex]);\n nextLastSelRowIdx = rowIndex;\n }\n }\n } else {\n const s = incremental ? new Set<number>(selRowIdxs) : new Set<number>();\n const idxs = [rowIndex, idxFrom];\n idxs.sort((a, b) => a - b);\n const rowIdxs: number[] = [];\n for (let i = idxs[0]; i <= idxs[1]; ++i) {\n rowIdxs.push(i);\n }\n if (selRowIdxs.has(rowIndex)) {\n rowIdxs.forEach((k) => s.delete(k));\n } else {\n rowIdxs.forEach((k) => s.add(k));\n }\n nextSelRowIdxs = s;\n nextLastSelRowIdx = rowIndex;\n }\n\n setSelRowIdxs(nextSelRowIdxs);\n setLastSelRowIdx(nextLastSelRowIdx);\n if (onRowSelected) {\n onRowSelected(Array.from(nextSelRowIdxs.keys()));\n }\n },\n [\n selRowIdxs,\n lastSelRowIdx,\n setSelRowIdxs,\n setLastSelRowIdx,\n rowData,\n rowKeyGetter,\n onRowSelected,\n ],\n );\n\n const isAllSelected = selRowIdxs.size === rowData.length;\n const isAnySelected = selRowIdxs.size > 0;\n\n const selectAll = useCallback(() => {\n const allRowIdxs = [...new Array(rowData.length).keys()].map((_, i) => i);\n setSelRowIdxs(new Set(allRowIdxs));\n if (onRowSelected) {\n onRowSelected(allRowIdxs);\n }\n }, [rowData, setSelRowIdxs]);\n\n const unselectAll = useCallback(() => {\n setSelRowIdxs(new Set());\n if (onRowSelected) {\n onRowSelected([]);\n }\n }, [setSelRowIdxs]);\n\n const onMouseDown = useCallback(\n (event: ReactMouseEvent<HTMLDivElement>) => {\n if (rowSelectionMode === \"none\") {\n return;\n }\n const target = event.target as HTMLElement;\n try {\n const [rowIndex] = getCellPosition(target);\n selectRows({\n rowIndex,\n isRange: event.shiftKey,\n incremental: event.metaKey || event.ctrlKey,\n });\n } catch (e) {}\n },\n [selectRows, rowSelectionMode],\n );\n\n return {\n onMouseDown,\n selRowIdxs,\n isAllSelected,\n isAnySelected,\n selectRows,\n selectAll,\n unselectAll,\n };\n}\n\nexport interface ColumnDragState {\n columnIndex: number;\n x: number;\n y: number;\n}\n\nconst COLUMN_DRAG_TOLERANCE = 10;\n\nexport interface Target {\n columnIndex: number;\n x: number;\n}\n\n// Returns onMouseDown handler to be attached to column headers (or any element\n// working as a drag-and-drop handle for moving columns)\n// Also returns dragState and active target (the drop target nearest to current\n// mouse positions.\nexport function useColumnMove<T = any>(\n columnMove: boolean | undefined,\n rootRef: RefObject<HTMLDivElement>,\n leftCols: GridColumnModel<T>[],\n midCols: GridColumnModel<T>[],\n rightCols: GridColumnModel<T>[],\n cols: GridColumnModel<T>[],\n scrollLeft: number,\n clientMidWidth: number,\n onColumnMove: GridColumnMoveHandler,\n) {\n const moveRef = useRef<{\n unsubscribe: () => void;\n startScreenX: number;\n startScreenY: number;\n startHeaderX: number;\n startHeaderY: number;\n\n columnIndex: number;\n columnId: string;\n dragTriggered: boolean;\n onColumnMove: GridColumnMoveHandler;\n }>();\n\n const activeTargetRef = useRef<Target | undefined>(undefined);\n\n const [dragState, setDragState] = useState<ColumnDragState | undefined>(\n undefined,\n );\n\n const columnDragStart = useCallback(\n (columnIndex: number, x: number, y: number) => {\n setDragState({ columnIndex, x, y });\n },\n [],\n );\n\n const columnDrag = useCallback((x: number, y: number) => {\n setDragState((old) => {\n return { ...old!, x, y };\n });\n }, []);\n\n const columnDrop = useCallback(() => {\n const toIndex = activeTargetRef.current?.columnIndex;\n const fromIndex = moveRef.current?.columnIndex;\n const columnId = moveRef.current?.columnId;\n const handler = moveRef.current?.onColumnMove;\n if (\n toIndex !== undefined &&\n fromIndex !== undefined &&\n handler !== undefined &&\n columnId !== undefined\n ) {\n handler(columnId, fromIndex, toIndex);\n }\n setDragState(undefined);\n }, [setDragState]);\n\n const onMouseUp = useCallback(() => {\n if (moveRef.current?.dragTriggered) {\n columnDrop();\n }\n moveRef.current?.unsubscribe();\n moveRef.current = undefined;\n }, [columnDrop]);\n\n const onMouseMove = useCallback(\n (event: MouseEvent) => {\n const {\n columnIndex,\n startHeaderX,\n startHeaderY,\n startScreenX,\n startScreenY,\n dragTriggered,\n } = moveRef.current!;\n\n const shiftX = event.screenX - startScreenX;\n const shiftY = event.screenY - startScreenY;\n const x = startHeaderX + shiftX;\n const y = startHeaderY + shiftY;\n\n if (!dragTriggered) {\n if (\n Math.sqrt(shiftX * shiftX + shiftY * shiftY) > COLUMN_DRAG_TOLERANCE\n ) {\n moveRef.current!.dragTriggered = true;\n columnDragStart(columnIndex, x, y);\n }\n } else {\n columnDrag(x, y);\n }\n },\n [columnDrag],\n );\n\n const onColumnMoveHandleMouseDown: MouseEventHandler<HTMLDivElement> =\n useCallback(\n (event) => {\n const [columnIndexAttribute, thElement] = getAttribute(\n event.target as HTMLElement,\n \"data-column-index\",\n );\n const rootElement = rootRef.current;\n\n if (!rootElement) {\n return;\n }\n\n document.addEventListener(\"mouseup\", onMouseUp);\n document.addEventListener(\"mousemove\", onMouseMove);\n\n const columnIndex = Number.parseInt(columnIndexAttribute, 10);\n const columnId = cols[columnIndex].info.props.id;\n\n const thRect = thElement.getBoundingClientRect();\n const rootRect = rootElement.getBoundingClientRect();\n\n const x = thRect.x - rootRect.x;\n const y = thRect.y - rootRect.y;\n\n moveRef.current = {\n unsubscribe: () => {\n document.removeEventListener(\"mouseup\", onMouseUp);\n document.removeEventListener(\"mousemove\", onMouseMove);\n },\n startScreenX: event.screenX,\n startScreenY: event.screenY,\n startHeaderX: x,\n startHeaderY: y,\n columnIndex,\n columnId,\n dragTriggered: false,\n onColumnMove,\n };\n\n event.preventDefault();\n },\n [columnDragStart, cols],\n );\n\n const onColumnMoveCancel = useCallback(() => {\n setDragState(undefined);\n moveRef.current?.unsubscribe();\n moveRef.current = undefined;\n }, []);\n\n const targets = useMemo(() => {\n if (!dragState) {\n return undefined;\n }\n const ts: Target[] = [];\n let x = 0;\n leftCols.forEach((c) => {\n ts.push({ columnIndex: c.index, x });\n x += c.info.width;\n });\n let w = scrollLeft;\n let i = 0;\n while (w > 0 && i < midCols.length) {\n w -= midCols[i].info.width;\n i++;\n }\n x -= w;\n w += clientMidWidth;\n while (w > 0 && i < midCols.length) {\n const c = midCols[i];\n ts.push({ columnIndex: c.index, x });\n x += c.info.width;\n w -= c.info.width;\n i++;\n }\n if (rightCols.length > 0) {\n x += w;\n rightCols.forEach((c) => {\n ts.push({ columnIndex: c.index, x });\n x += c.info.width;\n });\n ts.push({ columnIndex: last(rightCols).index + 1, x });\n } else {\n ts.push({ columnIndex: last(midCols).index + 1, x });\n }\n return ts;\n }, [dragState, leftCols, midCols, rightCols, scrollLeft, clientMidWidth]);\n\n const activeTargetIdx = useMemo(() => {\n const x = dragState?.x;\n if (x === undefined || targets === undefined || targets.length < 1) {\n return undefined;\n }\n let i = 0;\n while (i < targets.length && targets[i].x < x) {\n i++;\n }\n if (i === 0) {\n return 0;\n }\n if (i >= targets.length) {\n return targets.length - 1;\n }\n return targets[i].x - x < x - targets[i - 1].x ? i : i - 1;\n }, [targets, dragState?.x]);\n\n const activeTarget =\n activeTargetIdx === undefined ? undefined : targets![activeTargetIdx];\n\n activeTargetRef.current = activeTarget;\n\n return {\n onColumnMoveHandleMouseDown,\n dragState,\n activeTarget,\n onColumnMoveCancel,\n };\n}\n\nexport interface CellPosition {\n rowIdx: number;\n colIdx: number;\n}\n\nexport interface CellRange {\n start: CellPosition;\n end: CellPosition;\n}\n\nexport function cellPositionEquals(a: CellPosition, b: CellPosition) {\n return a.rowIdx === b.rowIdx && a.colIdx === b.colIdx;\n}\n\nexport function cellRangeEquals(\n a: CellRange | undefined,\n b: CellRange | undefined,\n) {\n if (!a) {\n return !b;\n }\n return (\n !!b &&\n cellPositionEquals(a.start, b.start) &&\n cellPositionEquals(a.end, b.end)\n );\n}\n\n// TODO test the use case when cellSelectionMode changes during dnd.\n// Cell range selection. This is experimental.\nexport function useRangeSelection(cellSelectionMode?: GridCellSelectionMode) {\n const mouseSelectionRef = useRef<{\n unsubscribe: () => void;\n start: CellPosition;\n }>();\n\n const keyboardSelectionRef = useRef<{\n start: CellPosition;\n }>();\n\n if (cellSelectionMode !== \"range\") {\n if (mouseSelectionRef.current) {\n mouseSelectionRef.current.unsubscribe();\n mouseSelectionRef.current = undefined;\n }\n if (keyboardSelectionRef.current) {\n keyboardSelectionRef.current = undefined;\n }\n }\n\n const [selectedCellRange, setSelectedCellRange] = useState<\n CellRange | undefined\n >(undefined);\n\n const onMouseMove = useCallback((event: MouseEvent) => {\n const { clientX, clientY } = event;\n const element = document.elementFromPoint(clientX, clientY) as HTMLElement;\n try {\n const [rowIdx, colIdx] = getCellPosition(element);\n\n setSelectedCellRange((old) => {\n const { start } = mouseSelectionRef.current!;\n const p: CellRange = { start, end: { rowIdx, colIdx } };\n return cellRangeEquals(old, p) ? old : p;\n });\n } catch (exc) {}\n }, []);\n\n const onMouseUp = useCallback((event: MouseEvent) => {\n if (!mouseSelectionRef.current) {\n throw new Error(\"useRangeSelection state is not initialized\");\n }\n mouseSelectionRef.current.unsubscribe();\n mouseSelectionRef.current = undefined;\n }, []);\n\n const onCellMouseDown = useCallback(\n (event: ReactMouseEvent) => {\n if (cellSelectionMode !== \"range\") {\n return;\n }\n const target = event.target as HTMLElement;\n try {\n const [rowIdx, colIdx] = getCellPosition(target);\n document.addEventListener(\"mouseup\", onMouseUp);\n document.addEventListener(\"mousemove\", onMouseMove);\n const pos: CellPosition = { rowIdx, colIdx };\n mouseSelectionRef.current = {\n start: pos,\n unsubscribe: () => {\n document.removeEventListener(\"mouseup\", onMouseUp);\n document.removeEventListener(\"mousemove\", onMouseMove);\n },\n };\n setSelectedCellRange({ start: pos, end: pos });\n } catch (exc) {}\n },\n [cellSelectionMode],\n );\n\n const onKeyboardRangeSelectionStart = useCallback((pos: CellPosition) => {\n keyboardSelectionRef.current = {\n start: pos,\n };\n }, []);\n\n const onKeyboardRangeSelectionEnd = useCallback(() => {\n keyboardSelectionRef.current = undefined;\n }, []);\n\n const onCursorMove = useCallback((pos: CellPosition) => {\n if (!keyboardSelectionRef.current) {\n return;\n }\n setSelectedCellRange((old) => {\n if (!keyboardSelectionRef.current) {\n return old;\n }\n const { start } = keyboardSelectionRef.current;\n const p: CellRange = { start, end: pos };\n return cellRangeEquals(old, p) ? old : p;\n });\n }, []);\n\n const selectRange = useCallback((range: CellRange) => {\n if (cellSelectionMode !== \"range\") {\n return;\n }\n setSelectedCellRange(range);\n }, []);\n\n return {\n selectedCellRange,\n onCellMouseDown,\n onKeyboardRangeSelectionStart,\n onKeyboardRangeSelectionEnd,\n onCursorMove,\n selectRange,\n };\n}\n\nexport function useFocusableContent<T extends HTMLElement>() {\n const ref = useRef<T>(null);\n const [isFocusableContent, setFocusableContent] = useState<boolean>(false);\n\n const onFocus: FocusEventHandler<T> = (event) => {\n if (event.target === ref.current) {\n const nestedInteractive = ref.current.querySelector(`[tabindex=\"0\"]`);\n if (nestedInteractive) {\n (nestedInteractive as HTMLElement).focus();\n setFocusableContent(true);\n }\n }\n };\n\n return { ref, isFocusableContent, onFocus };\n}\n"],"names":["useRef","useEffect","useMemo","NumberRange","Children","isValidElement","useCallback","getAttribute","useState","makeMapAdder","makeMapDeleter","useControlled","getCellPosition"],"mappings":"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"}
@@ -1,7 +1,5 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
3
  function getAttribute(element, attributeName) {
6
4
  if (!element || !element.hasAttribute) {
7
5
  throw new Error(`Attribute "${attributeName}" not found`);
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../src/internal/utils.ts"],"sourcesContent":["import type { FocusedPart } from \"../CursorContext\";\n\nexport function getAttribute(\n element: HTMLElement,\n attributeName: string,\n): [string, HTMLElement] {\n if (!element || !element.hasAttribute) {\n throw new Error(`Attribute \"${attributeName}\" not found`);\n }\n if (element.hasAttribute(attributeName)) {\n return [element.getAttribute(attributeName) as string, element];\n }\n return getAttribute(element.parentNode as HTMLElement, attributeName);\n}\n\nexport function getRowIndexAttribute(element: HTMLElement): number {\n const [attribute] = getAttribute(element, \"data-row-index\");\n return Number.parseInt(attribute, 10);\n}\n\nexport function getRowKeyAttribute(element: HTMLElement): string {\n const [rowKey] = getAttribute(element, \"data-row-key\");\n return rowKey;\n}\n\nexport function getFocusablePosition(element: HTMLElement): {\n part: FocusedPart;\n columnIndex: number;\n rowIndex: number;\n} {\n const [columnIndexAttr, cellElement] = getAttribute(\n element,\n \"data-column-index\",\n );\n const columnIndex = Number.parseInt(columnIndexAttr, 10);\n const role = cellElement.getAttribute(\"role\");\n if (role === \"columnheader\") {\n return { part: \"header\", columnIndex, rowIndex: 0 };\n }\n const [rowIndexAttr] = getAttribute(element, \"data-row-index\");\n const rowIndex = Number.parseInt(rowIndexAttr, 10);\n return { part: \"body\", rowIndex, columnIndex };\n}\n\nexport function getCellPosition(element: HTMLElement): [number, number] {\n const [rowIndexAttr] = getAttribute(element, \"data-row-index\");\n const [columnIndexAttr] = getAttribute(element, \"data-column-index\");\n const rowIndex = Number.parseInt(rowIndexAttr, 10);\n const columnIndex = Number.parseInt(columnIndexAttr, 10);\n return [rowIndex, columnIndex];\n}\n\nconst addMapItem = <K, V>(old: Map<K, V>, k: K, v: V): Map<K, V> => {\n const m = new Map(old);\n m.set(k, v);\n return m;\n};\n\nexport const makeMapAdder =\n <K, V>(k: K, v: V) =>\n (old: Map<K, V>) =>\n addMapItem(old, k, v);\n\nconst deleteMapItem = <K, V>(old: Map<K, V>, k: K): Map<K, V> => {\n const m = new Map(old);\n m.delete(k);\n return m;\n};\n\nexport const makeMapDeleter =\n <K, V>(k: K) =>\n (old: Map<K, V>) =>\n deleteMapItem(old, k);\n\nexport const clamp = (x: number | undefined, min: number, max: number) => {\n if (x === undefined) {\n x = 0;\n }\n if (x < min) {\n return min;\n }\n if (x > max) {\n return max;\n }\n return x;\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../src/internal/utils.ts"],"sourcesContent":["import type { FocusedPart } from \"../CursorContext\";\n\nexport function getAttribute(\n element: HTMLElement,\n attributeName: string,\n): [string, HTMLElement] {\n if (!element || !element.hasAttribute) {\n throw new Error(`Attribute \"${attributeName}\" not found`);\n }\n if (element.hasAttribute(attributeName)) {\n return [element.getAttribute(attributeName) as string, element];\n }\n return getAttribute(element.parentNode as HTMLElement, attributeName);\n}\n\nexport function getRowIndexAttribute(element: HTMLElement): number {\n const [attribute] = getAttribute(element, \"data-row-index\");\n return Number.parseInt(attribute, 10);\n}\n\nexport function getRowKeyAttribute(element: HTMLElement): string {\n const [rowKey] = getAttribute(element, \"data-row-key\");\n return rowKey;\n}\n\nexport function getFocusablePosition(element: HTMLElement): {\n part: FocusedPart;\n columnIndex: number;\n rowIndex: number;\n} {\n const [columnIndexAttr, cellElement] = getAttribute(\n element,\n \"data-column-index\",\n );\n const columnIndex = Number.parseInt(columnIndexAttr, 10);\n const role = cellElement.getAttribute(\"role\");\n if (role === \"columnheader\") {\n return { part: \"header\", columnIndex, rowIndex: 0 };\n }\n const [rowIndexAttr] = getAttribute(element, \"data-row-index\");\n const rowIndex = Number.parseInt(rowIndexAttr, 10);\n return { part: \"body\", rowIndex, columnIndex };\n}\n\nexport function getCellPosition(element: HTMLElement): [number, number] {\n const [rowIndexAttr] = getAttribute(element, \"data-row-index\");\n const [columnIndexAttr] = getAttribute(element, \"data-column-index\");\n const rowIndex = Number.parseInt(rowIndexAttr, 10);\n const columnIndex = Number.parseInt(columnIndexAttr, 10);\n return [rowIndex, columnIndex];\n}\n\nconst addMapItem = <K, V>(old: Map<K, V>, k: K, v: V): Map<K, V> => {\n const m = new Map(old);\n m.set(k, v);\n return m;\n};\n\nexport const makeMapAdder =\n <K, V>(k: K, v: V) =>\n (old: Map<K, V>) =>\n addMapItem(old, k, v);\n\nconst deleteMapItem = <K, V>(old: Map<K, V>, k: K): Map<K, V> => {\n const m = new Map(old);\n m.delete(k);\n return m;\n};\n\nexport const makeMapDeleter =\n <K, V>(k: K) =>\n (old: Map<K, V>) =>\n deleteMapItem(old, k);\n\nexport const clamp = (x: number | undefined, min: number, max: number) => {\n if (x === undefined) {\n x = 0;\n }\n if (x < min) {\n return min;\n }\n if (x > max) {\n return max;\n }\n return x;\n};\n"],"names":[],"mappings":"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"}
@@ -61,50 +61,54 @@ function BaseCell(props) {
61
61
  const hasValidation = !!validationStatus;
62
62
  const hasValidationMessage = !!validationMessage || hasValidation;
63
63
  const validationMessageId = `${cellId}-statusMessage`;
64
- return /* @__PURE__ */ jsxs(CellFrame, {
65
- ref,
66
- id: cellId,
67
- "data-row-index": row.index,
68
- "data-column-index": column.index,
69
- "data-testid": isFocused ? "grid-cell-focused" : void 0,
70
- "aria-colindex": column.index + 1,
71
- role: "gridcell",
72
- separator: column.separator,
73
- isSelected,
74
- isEditable,
75
- className: clsx(className, {
76
- [withBaseName("hasValidation")]: hasValidation,
77
- [withBaseName(`status-${validationStatus}`)]: validationStatus
78
- }),
79
- style,
80
- tabIndex: isFocused && !isFocusableContent ? 0 : -1,
81
- onFocus,
82
- "aria-invalid": validationStatus === "error" || void 0,
83
- "aria-describedby": hasValidationMessage ? validationMessageId : void 0,
84
- children: [
85
- hasValidationMessage ? /* @__PURE__ */ jsx("div", {
86
- id: validationMessageId,
87
- className: "salt-visuallyHidden",
88
- "aria-hidden": true,
89
- role: "status",
90
- children: validationMessage ? validationMessage : `Cell validation state is ${validationStatus}`
91
- }) : null,
92
- /* @__PURE__ */ jsx("div", {
93
- className: clsx(withBaseName("valueContainer")),
94
- children
64
+ return /* @__PURE__ */ jsxs(
65
+ CellFrame,
66
+ {
67
+ ref,
68
+ id: cellId,
69
+ "data-row-index": row.index,
70
+ "data-column-index": column.index,
71
+ "data-testid": isFocused ? "grid-cell-focused" : void 0,
72
+ "aria-colindex": column.index + 1,
73
+ role: "gridcell",
74
+ separator: column.separator,
75
+ isSelected,
76
+ isEditable,
77
+ className: clsx(className, {
78
+ [withBaseName("hasValidation")]: hasValidation,
79
+ [withBaseName(`status-${validationStatus}`)]: validationStatus
95
80
  }),
96
- hasValidation && validationType === "strong" ? /* @__PURE__ */ jsx("div", {
97
- className: clsx(withBaseName("statusContainer"), {
98
- [withBaseName(`statusContainer-align-${align}`)]: align
99
- }),
100
- children: icons[validationStatus]
101
- }) : null,
102
- isFocused && isEditable && /* @__PURE__ */ jsx(CornerTag, {
103
- focusOnly: true
104
- }),
105
- isFocused && !isFocusableContent && /* @__PURE__ */ jsx(Cursor, {})
106
- ]
107
- });
81
+ style,
82
+ tabIndex: isFocused && !isFocusableContent ? 0 : -1,
83
+ onFocus,
84
+ "aria-invalid": validationStatus === "error" || void 0,
85
+ "aria-describedby": hasValidationMessage ? validationMessageId : void 0,
86
+ children: [
87
+ hasValidationMessage ? /* @__PURE__ */ jsx(
88
+ "div",
89
+ {
90
+ id: validationMessageId,
91
+ className: "salt-visuallyHidden",
92
+ "aria-hidden": true,
93
+ role: "status",
94
+ children: validationMessage ? validationMessage : `Cell validation state is ${validationStatus}`
95
+ }
96
+ ) : null,
97
+ /* @__PURE__ */ jsx("div", { className: clsx(withBaseName("valueContainer")), children }),
98
+ hasValidation && validationType === "strong" ? /* @__PURE__ */ jsx(
99
+ "div",
100
+ {
101
+ className: clsx(withBaseName("statusContainer"), {
102
+ [withBaseName(`statusContainer-align-${align}`)]: align
103
+ }),
104
+ children: icons[validationStatus]
105
+ }
106
+ ) : null,
107
+ isFocused && isEditable && /* @__PURE__ */ jsx(CornerTag, { focusOnly: true }),
108
+ isFocused && !isFocusableContent && /* @__PURE__ */ jsx(Cursor, {})
109
+ ]
110
+ }
111
+ );
108
112
  }
109
113
 
110
114
  export { BaseCell, getCellId };
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCell.js","sources":["../src/BaseCell.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport type { GridColumnModel } from \"./Grid\";\nimport type { GridCellProps } from \"./GridColumn\";\nimport { Cursor, useFocusableContent } from \"./internal\";\nimport {\n CellErrorIcon,\n CellSuccessIcon,\n CellWarningIcon,\n} from \"./internal/CellStatusIcons\";\n\nimport baseCellCss from \"./BaseCell.css\";\n\nconst withBaseName = makePrefixer(\"saltGridBaseCell\");\n\nexport function getCellId<T>(rowKey: string, column: GridColumnModel<T>) {\n return `R${rowKey}C${column.info.props.id}`;\n}\n\nconst icons = {\n warning: CellWarningIcon,\n error: CellErrorIcon,\n success: CellSuccessIcon,\n};\n\n// Default component for grid cells. Provides selection, on-hover highlighting,\n// cursor etc.\nexport function BaseCell<T>(props: GridCellProps<T>) {\n const {\n column,\n className,\n row,\n style,\n isFocused,\n isSelected,\n isEditable,\n children,\n validationStatus,\n validationMessage,\n validationType = \"light\",\n align,\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-base-cell\",\n css: baseCellCss,\n window: targetWindow,\n });\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableCellElement>();\n const cellId = getCellId(row.key, column);\n const hasValidation = !!validationStatus;\n const hasValidationMessage = !!validationMessage || hasValidation;\n const validationMessageId = `${cellId}-statusMessage`;\n return (\n <CellFrame\n ref={ref}\n id={cellId}\n data-row-index={row.index}\n data-column-index={column.index}\n data-testid={isFocused ? \"grid-cell-focused\" : undefined}\n // aria-colindex uses one-based array indexing\n aria-colindex={column.index + 1}\n role=\"gridcell\"\n separator={column.separator}\n isSelected={isSelected}\n isEditable={isEditable}\n className={clsx(className, {\n [withBaseName(\"hasValidation\")]: hasValidation,\n [withBaseName(`status-${validationStatus as string}`)]:\n validationStatus,\n })}\n style={style}\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n aria-invalid={validationStatus === \"error\" || undefined}\n aria-describedby={hasValidationMessage ? validationMessageId : undefined}\n >\n {hasValidationMessage ? (\n <div\n id={validationMessageId}\n className=\"salt-visuallyHidden\"\n aria-hidden\n role=\"status\"\n >\n {validationMessage\n ? validationMessage\n : `Cell validation state is ${validationStatus as string}`}\n </div>\n ) : null}\n <div className={clsx(withBaseName(\"valueContainer\"))}>{children}</div>\n {hasValidation && validationType === \"strong\" ? (\n <div\n className={clsx(withBaseName(\"statusContainer\"), {\n [withBaseName(`statusContainer-align-${align as string}`)]: align,\n })}\n >\n {icons[validationStatus]}\n </div>\n ) : null}\n {isFocused && isEditable && <CornerTag focusOnly={true} />}\n {isFocused && !isFocusableContent && <Cursor />}\n </CellFrame>\n );\n}\n"],"names":["baseCellCss"],"mappings":"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"}
1
+ {"version":3,"file":"BaseCell.js","sources":["../src/BaseCell.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport type { GridColumnModel } from \"./Grid\";\nimport type { GridCellProps } from \"./GridColumn\";\nimport { Cursor, useFocusableContent } from \"./internal\";\nimport {\n CellErrorIcon,\n CellSuccessIcon,\n CellWarningIcon,\n} from \"./internal/CellStatusIcons\";\n\nimport baseCellCss from \"./BaseCell.css\";\n\nconst withBaseName = makePrefixer(\"saltGridBaseCell\");\n\nexport function getCellId<T>(rowKey: string, column: GridColumnModel<T>) {\n return `R${rowKey}C${column.info.props.id}`;\n}\n\nconst icons = {\n warning: CellWarningIcon,\n error: CellErrorIcon,\n success: CellSuccessIcon,\n};\n\n// Default component for grid cells. Provides selection, on-hover highlighting,\n// cursor etc.\nexport function BaseCell<T>(props: GridCellProps<T>) {\n const {\n column,\n className,\n row,\n style,\n isFocused,\n isSelected,\n isEditable,\n children,\n validationStatus,\n validationMessage,\n validationType = \"light\",\n align,\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-base-cell\",\n css: baseCellCss,\n window: targetWindow,\n });\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableCellElement>();\n const cellId = getCellId(row.key, column);\n const hasValidation = !!validationStatus;\n const hasValidationMessage = !!validationMessage || hasValidation;\n const validationMessageId = `${cellId}-statusMessage`;\n return (\n <CellFrame\n ref={ref}\n id={cellId}\n data-row-index={row.index}\n data-column-index={column.index}\n data-testid={isFocused ? \"grid-cell-focused\" : undefined}\n // aria-colindex uses one-based array indexing\n aria-colindex={column.index + 1}\n role=\"gridcell\"\n separator={column.separator}\n isSelected={isSelected}\n isEditable={isEditable}\n className={clsx(className, {\n [withBaseName(\"hasValidation\")]: hasValidation,\n [withBaseName(`status-${validationStatus as string}`)]:\n validationStatus,\n })}\n style={style}\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n aria-invalid={validationStatus === \"error\" || undefined}\n aria-describedby={hasValidationMessage ? validationMessageId : undefined}\n >\n {hasValidationMessage ? (\n <div\n id={validationMessageId}\n className=\"salt-visuallyHidden\"\n aria-hidden\n role=\"status\"\n >\n {validationMessage\n ? validationMessage\n : `Cell validation state is ${validationStatus as string}`}\n </div>\n ) : null}\n <div className={clsx(withBaseName(\"valueContainer\"))}>{children}</div>\n {hasValidation && validationType === \"strong\" ? (\n <div\n className={clsx(withBaseName(\"statusContainer\"), {\n [withBaseName(`statusContainer-align-${align as string}`)]: align,\n })}\n >\n {icons[validationStatus]}\n </div>\n ) : null}\n {isFocused && isEditable && <CornerTag focusOnly={true} />}\n {isFocused && !isFocusableContent && <Cursor />}\n </CellFrame>\n );\n}\n"],"names":["baseCellCss"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,MAAM,YAAA,GAAe,aAAa,kBAAkB,CAAA;AAEpC,SAAA,SAAA,CAAa,QAAgB,MAA4B,EAAA;AACvE,EAAA,OAAO,IAAI,MAAM,CAAA,CAAA,EAAI,MAAO,CAAA,IAAA,CAAK,MAAM,EAAE,CAAA,CAAA;AAC3C;AAEA,MAAM,KAAQ,GAAA;AAAA,EACZ,OAAS,EAAA,eAAA;AAAA,EACT,KAAO,EAAA,aAAA;AAAA,EACP,OAAS,EAAA;AACX,CAAA;AAIO,SAAS,SAAY,KAAyB,EAAA;AACnD,EAAM,MAAA;AAAA,IACJ,MAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,cAAiB,GAAA,OAAA;AAAA,IACjB;AAAA,GACE,GAAA,KAAA;AAEJ,EAAA,MAAM,eAAe,SAAU,EAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,GAAA,EAAK,kBAAoB,EAAA,OAAA,KAC/B,mBAA0C,EAAA;AAC5C,EAAA,MAAM,MAAS,GAAA,SAAA,CAAU,GAAI,CAAA,GAAA,EAAK,MAAM,CAAA;AACxC,EAAM,MAAA,aAAA,GAAgB,CAAC,CAAC,gBAAA;AACxB,EAAM,MAAA,oBAAA,GAAuB,CAAC,CAAC,iBAAqB,IAAA,aAAA;AACpD,EAAM,MAAA,mBAAA,GAAsB,GAAG,MAAM,CAAA,cAAA,CAAA;AACrC,EACE,uBAAA,IAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,EAAI,EAAA,MAAA;AAAA,MACJ,kBAAgB,GAAI,CAAA,KAAA;AAAA,MACpB,qBAAmB,MAAO,CAAA,KAAA;AAAA,MAC1B,aAAA,EAAa,YAAY,mBAAsB,GAAA,KAAA,CAAA;AAAA,MAE/C,eAAA,EAAe,OAAO,KAAQ,GAAA,CAAA;AAAA,MAC9B,IAAK,EAAA,UAAA;AAAA,MACL,WAAW,MAAO,CAAA,SAAA;AAAA,MAClB,UAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAW,KAAK,SAAW,EAAA;AAAA,QACzB,CAAC,YAAA,CAAa,eAAe,CAAC,GAAG,aAAA;AAAA,QACjC,CAAC,YAAa,CAAA,CAAA,OAAA,EAAU,gBAA0B,CAAA,CAAE,CAAC,GACnD;AAAA,OACH,CAAA;AAAA,MACD,KAAA;AAAA,MACA,QAAU,EAAA,SAAA,IAAa,CAAC,kBAAA,GAAqB,CAAI,GAAA,CAAA,CAAA;AAAA,MACjD,OAAA;AAAA,MACA,cAAA,EAAc,qBAAqB,OAAW,IAAA,KAAA,CAAA;AAAA,MAC9C,kBAAA,EAAkB,uBAAuB,mBAAsB,GAAA,KAAA,CAAA;AAAA,MAE9D,QAAA,EAAA;AAAA,QACC,oBAAA,mBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,EAAI,EAAA,mBAAA;AAAA,YACJ,SAAU,EAAA,qBAAA;AAAA,YACV,aAAW,EAAA,IAAA;AAAA,YACX,IAAK,EAAA,QAAA;AAAA,YAEJ,QAAA,EAAA,iBAAA,GACG,iBACA,GAAA,CAAA,yBAAA,EAA4B,gBAA0B,CAAA;AAAA;AAAA,SAE1D,GAAA,IAAA;AAAA,wBACJ,GAAA,CAAC,SAAI,SAAW,EAAA,IAAA,CAAK,aAAa,gBAAgB,CAAC,GAAI,QAAS,EAAA,CAAA;AAAA,QAC/D,aAAA,IAAiB,mBAAmB,QACnC,mBAAA,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAW,EAAA,IAAA,CAAK,YAAa,CAAA,iBAAiB,CAAG,EAAA;AAAA,cAC/C,CAAC,YAAa,CAAA,CAAA,sBAAA,EAAyB,KAAe,CAAA,CAAE,CAAC,GAAG;AAAA,aAC7D,CAAA;AAAA,YAEA,gBAAM,gBAAgB;AAAA;AAAA,SAEvB,GAAA,IAAA;AAAA,QACH,SAAa,IAAA,UAAA,oBAAe,GAAA,CAAA,SAAA,EAAA,EAAU,WAAW,IAAM,EAAA,CAAA;AAAA,QACvD,SAAa,IAAA,CAAC,kBAAsB,oBAAA,GAAA,CAAC,MAAO,EAAA,EAAA;AAAA;AAAA;AAAA,GAC/C;AAEJ;;;;"}