@salt-ds/data-grid 1.0.5 → 1.0.6

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 (230) hide show
  1. package/dist-cjs/BaseCell.js +3 -3
  2. package/dist-cjs/BaseCell.js.map +1 -1
  3. package/dist-cjs/CellEditor.js.map +1 -1
  4. package/dist-cjs/CellFrame.js +2 -2
  5. package/dist-cjs/CellFrame.js.map +1 -1
  6. package/dist-cjs/ColumnDataContext.js +1 -1
  7. package/dist-cjs/ColumnDataContext.js.map +1 -1
  8. package/dist-cjs/ColumnDragContext.js +1 -1
  9. package/dist-cjs/ColumnDragContext.js.map +1 -1
  10. package/dist-cjs/ColumnGroup.js +1 -1
  11. package/dist-cjs/ColumnGroup.js.map +1 -1
  12. package/dist-cjs/ColumnSortContext.js +1 -1
  13. package/dist-cjs/ColumnSortContext.js.map +1 -1
  14. package/dist-cjs/CornerTag.js +1 -1
  15. package/dist-cjs/CornerTag.js.map +1 -1
  16. package/dist-cjs/CursorContext.js +1 -1
  17. package/dist-cjs/CursorContext.js.map +1 -1
  18. package/dist-cjs/DropdownCellEditor.js.map +1 -1
  19. package/dist-cjs/EditorContext.js +1 -1
  20. package/dist-cjs/EditorContext.js.map +1 -1
  21. package/dist-cjs/Grid.js +35 -41
  22. package/dist-cjs/Grid.js.map +1 -1
  23. package/dist-cjs/GridColumn.js.map +1 -1
  24. package/dist-cjs/GridContext.js +1 -1
  25. package/dist-cjs/GridContext.js.map +1 -1
  26. package/dist-cjs/GroupHeaderCell.js +2 -2
  27. package/dist-cjs/GroupHeaderCell.js.map +1 -1
  28. package/dist-cjs/GroupHeaderCellValue.js.map +1 -1
  29. package/dist-cjs/HeaderCell.js +9 -9
  30. package/dist-cjs/HeaderCell.js.map +1 -1
  31. package/dist-cjs/HeaderCellValue.js.map +1 -1
  32. package/dist-cjs/LayoutContext.js.map +1 -1
  33. package/dist-cjs/NumericColumn.js.map +1 -1
  34. package/dist-cjs/RowSelectionCheckboxCellValue.js +2 -2
  35. package/dist-cjs/RowSelectionCheckboxCellValue.js.map +1 -1
  36. package/dist-cjs/RowSelectionCheckboxColumn.js +3 -3
  37. package/dist-cjs/RowSelectionCheckboxColumn.js.map +1 -1
  38. package/dist-cjs/RowSelectionCheckboxHeaderCellValue.js +2 -2
  39. package/dist-cjs/RowSelectionCheckboxHeaderCellValue.js.map +1 -1
  40. package/dist-cjs/RowSelectionRadioCellValue.js +1 -1
  41. package/dist-cjs/RowSelectionRadioCellValue.js.map +1 -1
  42. package/dist-cjs/RowSelectionRadioColumn.js +2 -2
  43. package/dist-cjs/RowSelectionRadioColumn.js.map +1 -1
  44. package/dist-cjs/RowSelectionRadioHeaderCell.js +1 -1
  45. package/dist-cjs/RowSelectionRadioHeaderCell.js.map +1 -1
  46. package/dist-cjs/RowValidationStatus.js.map +1 -1
  47. package/dist-cjs/SelectionContext.js +1 -1
  48. package/dist-cjs/SelectionContext.js.map +1 -1
  49. package/dist-cjs/SizingContext.js +1 -1
  50. package/dist-cjs/SizingContext.js.map +1 -1
  51. package/dist-cjs/TextCellEditor.js.map +1 -1
  52. package/dist-cjs/internal/CellMeasure.js +2 -2
  53. package/dist-cjs/internal/CellMeasure.js.map +1 -1
  54. package/dist-cjs/internal/ColumnDropTarget.js +2 -2
  55. package/dist-cjs/internal/ColumnDropTarget.js.map +1 -1
  56. package/dist-cjs/internal/ColumnGhost.js +3 -3
  57. package/dist-cjs/internal/ColumnGhost.js.map +1 -1
  58. package/dist-cjs/internal/Cursor.js +2 -2
  59. package/dist-cjs/internal/Cursor.js.map +1 -1
  60. package/dist-cjs/internal/DefaultCellValue.js +2 -2
  61. package/dist-cjs/internal/DefaultCellValue.js.map +1 -1
  62. package/dist-cjs/internal/FakeCell.js +1 -1
  63. package/dist-cjs/internal/FakeCell.js.map +1 -1
  64. package/dist-cjs/internal/GroupHeaderRow.js +1 -1
  65. package/dist-cjs/internal/GroupHeaderRow.js.map +1 -1
  66. package/dist-cjs/internal/HeaderRow.js +2 -2
  67. package/dist-cjs/internal/HeaderRow.js.map +1 -1
  68. package/dist-cjs/internal/LeftPart.js +4 -4
  69. package/dist-cjs/internal/LeftPart.js.map +1 -1
  70. package/dist-cjs/internal/MiddlePart.js +3 -3
  71. package/dist-cjs/internal/MiddlePart.js.map +1 -1
  72. package/dist-cjs/internal/RightPart.js +3 -3
  73. package/dist-cjs/internal/RightPart.js.map +1 -1
  74. package/dist-cjs/internal/Scrollable.js +2 -2
  75. package/dist-cjs/internal/Scrollable.js.map +1 -1
  76. package/dist-cjs/internal/TableBody.js +6 -6
  77. package/dist-cjs/internal/TableBody.js.map +1 -1
  78. package/dist-cjs/internal/TableColGroup.js.map +1 -1
  79. package/dist-cjs/internal/TableRow.js +7 -7
  80. package/dist-cjs/internal/TableRow.js.map +1 -1
  81. package/dist-cjs/internal/TopLeftPart.js +3 -3
  82. package/dist-cjs/internal/TopLeftPart.js.map +1 -1
  83. package/dist-cjs/internal/TopPart.js +3 -3
  84. package/dist-cjs/internal/TopPart.js.map +1 -1
  85. package/dist-cjs/internal/TopRightPart.js +3 -3
  86. package/dist-cjs/internal/TopRightPart.js.map +1 -1
  87. package/dist-cjs/internal/gridHooks.js +23 -23
  88. package/dist-cjs/internal/gridHooks.js.map +1 -1
  89. package/dist-cjs/internal/utils.js +5 -5
  90. package/dist-cjs/internal/utils.js.map +1 -1
  91. package/dist-es/BaseCell.js +3 -3
  92. package/dist-es/BaseCell.js.map +1 -1
  93. package/dist-es/CellEditor.js.map +1 -1
  94. package/dist-es/CellFrame.js +2 -2
  95. package/dist-es/CellFrame.js.map +1 -1
  96. package/dist-es/ColumnDataContext.js +1 -1
  97. package/dist-es/ColumnDataContext.js.map +1 -1
  98. package/dist-es/ColumnDragContext.js +1 -1
  99. package/dist-es/ColumnDragContext.js.map +1 -1
  100. package/dist-es/ColumnGroup.js +1 -1
  101. package/dist-es/ColumnGroup.js.map +1 -1
  102. package/dist-es/ColumnSortContext.js +1 -1
  103. package/dist-es/ColumnSortContext.js.map +1 -1
  104. package/dist-es/CornerTag.js +1 -1
  105. package/dist-es/CornerTag.js.map +1 -1
  106. package/dist-es/CursorContext.js +1 -1
  107. package/dist-es/CursorContext.js.map +1 -1
  108. package/dist-es/DropdownCellEditor.js.map +1 -1
  109. package/dist-es/EditorContext.js +1 -1
  110. package/dist-es/EditorContext.js.map +1 -1
  111. package/dist-es/Grid.js +35 -41
  112. package/dist-es/Grid.js.map +1 -1
  113. package/dist-es/GridColumn.js.map +1 -1
  114. package/dist-es/GridContext.js +1 -1
  115. package/dist-es/GridContext.js.map +1 -1
  116. package/dist-es/GroupHeaderCell.js +2 -2
  117. package/dist-es/GroupHeaderCell.js.map +1 -1
  118. package/dist-es/GroupHeaderCellValue.js.map +1 -1
  119. package/dist-es/HeaderCell.js +9 -9
  120. package/dist-es/HeaderCell.js.map +1 -1
  121. package/dist-es/HeaderCellValue.js.map +1 -1
  122. package/dist-es/LayoutContext.js.map +1 -1
  123. package/dist-es/NumericColumn.js.map +1 -1
  124. package/dist-es/RowSelectionCheckboxCellValue.js +2 -2
  125. package/dist-es/RowSelectionCheckboxCellValue.js.map +1 -1
  126. package/dist-es/RowSelectionCheckboxColumn.js +3 -3
  127. package/dist-es/RowSelectionCheckboxColumn.js.map +1 -1
  128. package/dist-es/RowSelectionCheckboxHeaderCellValue.js +2 -2
  129. package/dist-es/RowSelectionCheckboxHeaderCellValue.js.map +1 -1
  130. package/dist-es/RowSelectionRadioCellValue.js +1 -1
  131. package/dist-es/RowSelectionRadioCellValue.js.map +1 -1
  132. package/dist-es/RowSelectionRadioColumn.js +2 -2
  133. package/dist-es/RowSelectionRadioColumn.js.map +1 -1
  134. package/dist-es/RowSelectionRadioHeaderCell.js +1 -1
  135. package/dist-es/RowSelectionRadioHeaderCell.js.map +1 -1
  136. package/dist-es/RowValidationStatus.js.map +1 -1
  137. package/dist-es/SelectionContext.js +1 -1
  138. package/dist-es/SelectionContext.js.map +1 -1
  139. package/dist-es/SizingContext.js +1 -1
  140. package/dist-es/SizingContext.js.map +1 -1
  141. package/dist-es/TextCellEditor.js.map +1 -1
  142. package/dist-es/internal/CellMeasure.js +2 -2
  143. package/dist-es/internal/CellMeasure.js.map +1 -1
  144. package/dist-es/internal/ColumnDropTarget.js +2 -2
  145. package/dist-es/internal/ColumnDropTarget.js.map +1 -1
  146. package/dist-es/internal/ColumnGhost.js +3 -3
  147. package/dist-es/internal/ColumnGhost.js.map +1 -1
  148. package/dist-es/internal/Cursor.js +2 -2
  149. package/dist-es/internal/Cursor.js.map +1 -1
  150. package/dist-es/internal/DefaultCellValue.js +2 -2
  151. package/dist-es/internal/DefaultCellValue.js.map +1 -1
  152. package/dist-es/internal/FakeCell.js +1 -1
  153. package/dist-es/internal/FakeCell.js.map +1 -1
  154. package/dist-es/internal/GroupHeaderRow.js +1 -1
  155. package/dist-es/internal/GroupHeaderRow.js.map +1 -1
  156. package/dist-es/internal/HeaderRow.js +2 -2
  157. package/dist-es/internal/HeaderRow.js.map +1 -1
  158. package/dist-es/internal/LeftPart.js +4 -4
  159. package/dist-es/internal/LeftPart.js.map +1 -1
  160. package/dist-es/internal/MiddlePart.js +3 -3
  161. package/dist-es/internal/MiddlePart.js.map +1 -1
  162. package/dist-es/internal/RightPart.js +3 -3
  163. package/dist-es/internal/RightPart.js.map +1 -1
  164. package/dist-es/internal/Scrollable.js +2 -2
  165. package/dist-es/internal/Scrollable.js.map +1 -1
  166. package/dist-es/internal/TableBody.js +6 -6
  167. package/dist-es/internal/TableBody.js.map +1 -1
  168. package/dist-es/internal/TableColGroup.js.map +1 -1
  169. package/dist-es/internal/TableRow.js +7 -7
  170. package/dist-es/internal/TableRow.js.map +1 -1
  171. package/dist-es/internal/TopLeftPart.js +3 -3
  172. package/dist-es/internal/TopLeftPart.js.map +1 -1
  173. package/dist-es/internal/TopPart.js +3 -3
  174. package/dist-es/internal/TopPart.js.map +1 -1
  175. package/dist-es/internal/TopRightPart.js +3 -3
  176. package/dist-es/internal/TopRightPart.js.map +1 -1
  177. package/dist-es/internal/gridHooks.js +23 -23
  178. package/dist-es/internal/gridHooks.js.map +1 -1
  179. package/dist-es/internal/utils.js +5 -5
  180. package/dist-es/internal/utils.js.map +1 -1
  181. package/dist-types/BaseCell.d.ts +3 -3
  182. package/dist-types/CellEditor.d.ts +1 -1
  183. package/dist-types/CellFrame.d.ts +2 -2
  184. package/dist-types/ColumnDragContext.d.ts +1 -1
  185. package/dist-types/ColumnGroup.d.ts +4 -4
  186. package/dist-types/ColumnSortContext.d.ts +5 -5
  187. package/dist-types/CornerTag.d.ts +1 -1
  188. package/dist-types/DropdownCellEditor.d.ts +2 -2
  189. package/dist-types/Grid.d.ts +4 -4
  190. package/dist-types/GridColumn.d.ts +3 -3
  191. package/dist-types/GridContext.d.ts +2 -2
  192. package/dist-types/GroupHeaderCell.d.ts +3 -3
  193. package/dist-types/GroupHeaderCellValue.d.ts +2 -2
  194. package/dist-types/HeaderCell.d.ts +5 -5
  195. package/dist-types/HeaderCellValue.d.ts +2 -2
  196. package/dist-types/NumericColumn.d.ts +6 -6
  197. package/dist-types/RowSelectionCheckboxCellValue.d.ts +2 -2
  198. package/dist-types/RowSelectionCheckboxColumn.d.ts +2 -2
  199. package/dist-types/RowSelectionCheckboxHeaderCellValue.d.ts +2 -2
  200. package/dist-types/RowSelectionRadioCellValue.d.ts +2 -2
  201. package/dist-types/RowSelectionRadioColumn.d.ts +2 -2
  202. package/dist-types/RowSelectionRadioHeaderCell.d.ts +2 -2
  203. package/dist-types/RowValidationStatus.d.ts +2 -2
  204. package/dist-types/SelectionContext.d.ts +1 -1
  205. package/dist-types/SizingContext.d.ts +3 -3
  206. package/dist-types/TextCellEditor.d.ts +2 -2
  207. package/dist-types/internal/CellMeasure.d.ts +1 -1
  208. package/dist-types/internal/CellStatusIcons.d.ts +3 -3
  209. package/dist-types/internal/ColumnDropTarget.d.ts +1 -1
  210. package/dist-types/internal/ColumnGhost.d.ts +3 -3
  211. package/dist-types/internal/Cursor.d.ts +1 -3
  212. package/dist-types/internal/DefaultCellValue.d.ts +2 -2
  213. package/dist-types/internal/FakeCell.d.ts +2 -2
  214. package/dist-types/internal/FakeGroupCell.d.ts +1 -1
  215. package/dist-types/internal/FakeHeaderCell.d.ts +1 -1
  216. package/dist-types/internal/GroupHeaderRow.d.ts +2 -2
  217. package/dist-types/internal/HeaderRow.d.ts +2 -2
  218. package/dist-types/internal/LeftPart.d.ts +4 -4
  219. package/dist-types/internal/MiddlePart.d.ts +4 -4
  220. package/dist-types/internal/RightPart.d.ts +4 -4
  221. package/dist-types/internal/Scrollable.d.ts +2 -2
  222. package/dist-types/internal/TableBody.d.ts +3 -3
  223. package/dist-types/internal/TableColGroup.d.ts +3 -3
  224. package/dist-types/internal/TableRow.d.ts +4 -4
  225. package/dist-types/internal/TopLeftPart.d.ts +2 -2
  226. package/dist-types/internal/TopPart.d.ts +3 -3
  227. package/dist-types/internal/TopRightPart.d.ts +2 -2
  228. package/dist-types/internal/gridHooks.d.ts +13 -13
  229. package/dist-types/internal/utils.d.ts +1 -1
  230. package/package.json +3 -3
@@ -6,7 +6,7 @@ const CursorContext = createContext(
6
6
  const useCursorContext = () => {
7
7
  const c = useContext(CursorContext);
8
8
  if (!c) {
9
- throw new Error(`useCursorContext invoked outside of a Grid`);
9
+ throw new Error("useCursorContext invoked outside of a Grid");
10
10
  }
11
11
  return c;
12
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"CursorContext.js","sources":["../src/CursorContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport type FocusedPart = \"header\" | \"body\";\n\nexport interface CursorContext {\n isFocused: boolean;\n cursorRowIdx: number | undefined;\n cursorColIdx: number | undefined;\n moveCursor: (part: FocusedPart, rowIdx: number, colIdx: number) => void;\n focusedPart: FocusedPart;\n headerIsFocusable: boolean;\n}\n\nexport const CursorContext = createContext<CursorContext | undefined>(\n undefined\n);\nexport const useCursorContext = () => {\n const c = useContext(CursorContext);\n if (!c) {\n throw new Error(`useCursorContext invoked outside of a Grid`);\n }\n return c;\n};\n"],"names":[],"mappings":";;AAaO,MAAM,aAAgB,GAAA,aAAA;AAAA,EAC3B,KAAA,CAAA;AACF,EAAA;AACO,MAAM,mBAAmB,MAAM;AACpC,EAAM,MAAA,CAAA,GAAI,WAAW,aAAa,CAAA,CAAA;AAClC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,CAA4C,0CAAA,CAAA,CAAA,CAAA;AAAA,GAC9D;AACA,EAAO,OAAA,CAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"CursorContext.js","sources":["../src/CursorContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport type FocusedPart = \"header\" | \"body\";\n\nexport interface CursorContext {\n isFocused: boolean;\n cursorRowIdx: number | undefined;\n cursorColIdx: number | undefined;\n moveCursor: (part: FocusedPart, rowIdx: number, colIdx: number) => void;\n focusedPart: FocusedPart;\n headerIsFocusable: boolean;\n}\n\nexport const CursorContext = createContext<CursorContext | undefined>(\n undefined,\n);\nexport const useCursorContext = () => {\n const c = useContext(CursorContext);\n if (!c) {\n throw new Error(\"useCursorContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":[],"mappings":";;AAaO,MAAM,aAAgB,GAAA,aAAA;AAAA,EAC3B,KAAA,CAAA;AACF,EAAA;AACO,MAAM,mBAAmB,MAAM;AACpC,EAAM,MAAA,CAAA,GAAI,WAAW,aAAa,CAAA,CAAA;AAClC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,4CAA4C,CAAA,CAAA;AAAA,GAC9D;AACA,EAAO,OAAA,CAAA,CAAA;AACT;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownCellEditor.js","sources":["../src/DropdownCellEditor.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { Dropdown, SelectHandler, SelectionChangeHandler } from \"@salt-ds/lab\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useEffect, useRef } from \"react\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport { useEditorContext } from \"./EditorContext\";\nimport { GridColumnModel, GridRowModel } from \"./Grid\";\n\nimport dropdownCellEditorCss from \"./DropdownCellEditor.css\";\n\nconst withBaseName = makePrefixer(\"saltGridDropdownCellEditor\");\n\nexport interface DropdownCellEditorProps<T> {\n options: ReadonlyArray<string>;\n // Row and column are provided by the grid. See TableRow.tsx\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n}\n\nexport function DropdownCellEditor<T>(props: DropdownCellEditorProps<T>) {\n const { options, column, row } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dropdown-cell-editor\",\n css: dropdownCellEditorCss,\n window: targetWindow,\n });\n\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const value = column!.info.props.getValue!(row!.data);\n\n const { endEditMode } = useEditorContext();\n\n const onSelectionChange: SelectionChangeHandler = (event, item) => {\n if (item) {\n endEditMode(item);\n }\n };\n\n const onSelect: SelectHandler = (event, item) => {\n if (item) {\n endEditMode(item);\n }\n };\n\n useEffect(() => {\n if (triggerRef.current) {\n triggerRef.current.focus();\n }\n }, [triggerRef.current]);\n\n const triggerComponent = (\n <div\n tabIndex={0}\n ref={triggerRef}\n className={withBaseName(\"currentValue\")}\n data-testid=\"grid-cell-editor-trigger\"\n >\n {value}\n </div>\n );\n\n return (\n <CellFrame separator={column?.separator} className={withBaseName()}>\n <div className={withBaseName(\"dropdownContainer\")}>\n {options && options.length > 0 ? (\n <Dropdown\n isOpen={true}\n source={options}\n defaultSelected={value}\n onSelectionChange={onSelectionChange}\n onSelect={onSelect}\n triggerComponent={triggerComponent}\n width={column!.info.width! - 5}\n />\n ) : (\n triggerComponent\n )}\n </div>\n <CornerTag />\n </CellFrame>\n );\n}\n"],"names":["dropdownCellEditorCss"],"mappings":";;;;;;;;;;;AAaA,MAAM,YAAA,GAAe,aAAa,4BAA4B,CAAA,CAAA;AASvD,SAAS,mBAAsB,KAAmC,EAAA;AACvE,EAAA,MAAM,EAAE,OAAA,EAAS,MAAQ,EAAA,GAAA,EAAQ,GAAA,KAAA,CAAA;AAEjC,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,2BAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,UAAA,GAAa,OAAuB,IAAI,CAAA,CAAA;AAE9C,EAAA,MAAM,QAAQ,MAAQ,CAAA,IAAA,CAAK,KAAM,CAAA,QAAA,CAAU,IAAK,IAAI,CAAA,CAAA;AAEpD,EAAM,MAAA,EAAE,WAAY,EAAA,GAAI,gBAAiB,EAAA,CAAA;AAEzC,EAAM,MAAA,iBAAA,GAA4C,CAAC,KAAA,EAAO,IAAS,KAAA;AACjE,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAAA,KAClB;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,QAAA,GAA0B,CAAC,KAAA,EAAO,IAAS,KAAA;AAC/C,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAAA,KAClB;AAAA,GACF,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAW,OAAS,EAAA;AACtB,MAAA,UAAA,CAAW,QAAQ,KAAM,EAAA,CAAA;AAAA,KAC3B;AAAA,GACC,EAAA,CAAC,UAAW,CAAA,OAAO,CAAC,CAAA,CAAA;AAEvB,EAAA,MAAM,mCACH,GAAA,CAAA,KAAA,EAAA;AAAA,IACC,QAAU,EAAA,CAAA;AAAA,IACV,GAAK,EAAA,UAAA;AAAA,IACL,SAAA,EAAW,aAAa,cAAc,CAAA;AAAA,IACtC,aAAY,EAAA,0BAAA;AAAA,IAEX,QAAA,EAAA,KAAA;AAAA,GACH,CAAA,CAAA;AAGF,EAAA,uBACG,IAAA,CAAA,SAAA,EAAA;AAAA,IAAU,WAAW,MAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,SAAA;AAAA,IAAW,WAAW,YAAa,EAAA;AAAA,IAC/D,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAA,EAAW,aAAa,mBAAmB,CAAA;AAAA,QAC7C,QAAW,EAAA,OAAA,IAAA,OAAA,CAAQ,MAAS,GAAA,CAAA,mBAC1B,GAAA,CAAA,QAAA,EAAA;AAAA,UACC,MAAQ,EAAA,IAAA;AAAA,UACR,MAAQ,EAAA,OAAA;AAAA,UACR,eAAiB,EAAA,KAAA;AAAA,UACjB,iBAAA;AAAA,UACA,QAAA;AAAA,UACA,gBAAA;AAAA,UACA,KAAA,EAAO,MAAQ,CAAA,IAAA,CAAK,KAAS,GAAA,CAAA;AAAA,SAC/B,CAEA,GAAA,gBAAA;AAAA,OAEJ,CAAA;AAAA,0BACC,SAAU,EAAA,EAAA,CAAA;AAAA,KAAA;AAAA,GACb,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"DropdownCellEditor.js","sources":["../src/DropdownCellEditor.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport {\n Dropdown,\n type SelectHandler,\n type SelectionChangeHandler,\n} from \"@salt-ds/lab\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useEffect, useRef } from \"react\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport { useEditorContext } from \"./EditorContext\";\nimport type { GridColumnModel, GridRowModel } from \"./Grid\";\n\nimport dropdownCellEditorCss from \"./DropdownCellEditor.css\";\n\nconst withBaseName = makePrefixer(\"saltGridDropdownCellEditor\");\n\nexport interface DropdownCellEditorProps<T> {\n options: ReadonlyArray<string>;\n // Row and column are provided by the grid. See TableRow.tsx\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n}\n\nexport function DropdownCellEditor<T>(props: DropdownCellEditorProps<T>) {\n const { options, column, row } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dropdown-cell-editor\",\n css: dropdownCellEditorCss,\n window: targetWindow,\n });\n\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const value = column!.info.props.getValue!(row!.data);\n\n const { endEditMode } = useEditorContext();\n\n const onSelectionChange: SelectionChangeHandler = (event, item) => {\n if (item) {\n endEditMode(item);\n }\n };\n\n const onSelect: SelectHandler = (event, item) => {\n if (item) {\n endEditMode(item);\n }\n };\n\n useEffect(() => {\n if (triggerRef.current) {\n triggerRef.current.focus();\n }\n }, [triggerRef.current]);\n\n const triggerComponent = (\n <div\n tabIndex={0}\n ref={triggerRef}\n className={withBaseName(\"currentValue\")}\n data-testid=\"grid-cell-editor-trigger\"\n >\n {value}\n </div>\n );\n\n return (\n <CellFrame separator={column?.separator} className={withBaseName()}>\n <div className={withBaseName(\"dropdownContainer\")}>\n {options && options.length > 0 ? (\n <Dropdown\n isOpen={true}\n source={options}\n defaultSelected={value}\n onSelectionChange={onSelectionChange}\n onSelect={onSelect}\n triggerComponent={triggerComponent}\n width={column!.info.width! - 5}\n />\n ) : (\n triggerComponent\n )}\n </div>\n <CornerTag />\n </CellFrame>\n );\n}\n"],"names":["dropdownCellEditorCss"],"mappings":";;;;;;;;;;;AAiBA,MAAM,YAAA,GAAe,aAAa,4BAA4B,CAAA,CAAA;AASvD,SAAS,mBAAsB,KAAmC,EAAA;AACvE,EAAA,MAAM,EAAE,OAAA,EAAS,MAAQ,EAAA,GAAA,EAAQ,GAAA,KAAA,CAAA;AAEjC,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,2BAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,UAAA,GAAa,OAAuB,IAAI,CAAA,CAAA;AAE9C,EAAA,MAAM,QAAQ,MAAQ,CAAA,IAAA,CAAK,KAAM,CAAA,QAAA,CAAU,IAAK,IAAI,CAAA,CAAA;AAEpD,EAAM,MAAA,EAAE,WAAY,EAAA,GAAI,gBAAiB,EAAA,CAAA;AAEzC,EAAM,MAAA,iBAAA,GAA4C,CAAC,KAAA,EAAO,IAAS,KAAA;AACjE,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAAA,KAClB;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,QAAA,GAA0B,CAAC,KAAA,EAAO,IAAS,KAAA;AAC/C,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAAA,KAClB;AAAA,GACF,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAW,OAAS,EAAA;AACtB,MAAA,UAAA,CAAW,QAAQ,KAAM,EAAA,CAAA;AAAA,KAC3B;AAAA,GACC,EAAA,CAAC,UAAW,CAAA,OAAO,CAAC,CAAA,CAAA;AAEvB,EAAA,MAAM,mCACH,GAAA,CAAA,KAAA,EAAA;AAAA,IACC,QAAU,EAAA,CAAA;AAAA,IACV,GAAK,EAAA,UAAA;AAAA,IACL,SAAA,EAAW,aAAa,cAAc,CAAA;AAAA,IACtC,aAAY,EAAA,0BAAA;AAAA,IAEX,QAAA,EAAA,KAAA;AAAA,GACH,CAAA,CAAA;AAGF,EAAA,uBACG,IAAA,CAAA,SAAA,EAAA;AAAA,IAAU,WAAW,MAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,SAAA;AAAA,IAAW,WAAW,YAAa,EAAA;AAAA,IAC/D,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAA,EAAW,aAAa,mBAAmB,CAAA;AAAA,QAC7C,QAAW,EAAA,OAAA,IAAA,OAAA,CAAQ,MAAS,GAAA,CAAA,mBAC1B,GAAA,CAAA,QAAA,EAAA;AAAA,UACC,MAAQ,EAAA,IAAA;AAAA,UACR,MAAQ,EAAA,OAAA;AAAA,UACR,eAAiB,EAAA,KAAA;AAAA,UACjB,iBAAA;AAAA,UACA,QAAA;AAAA,UACA,gBAAA;AAAA,UACA,KAAA,EAAO,MAAQ,CAAA,IAAA,CAAK,KAAS,GAAA,CAAA;AAAA,SAC/B,CAEA,GAAA,gBAAA;AAAA,OAEJ,CAAA;AAAA,0BACC,SAAU,EAAA,EAAA,CAAA;AAAA,KAAA;AAAA,GACb,CAAA,CAAA;AAEJ;;;;"}
@@ -6,7 +6,7 @@ const EditorContext = createContext(
6
6
  const useEditorContext = () => {
7
7
  const c = useContext(EditorContext);
8
8
  if (!c) {
9
- throw new Error(`useEditorContext invoked outside of a Grid`);
9
+ throw new Error("useEditorContext invoked outside of a Grid");
10
10
  }
11
11
  return c;
12
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"EditorContext.js","sources":["../src/EditorContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport interface EditorContext {\n initialText?: string;\n editMode?: boolean;\n startEditMode: () => void;\n endEditMode: (value: string) => void;\n cancelEditMode: () => void;\n}\n\nexport const EditorContext = createContext<EditorContext | undefined>(\n undefined\n);\nexport const useEditorContext = () => {\n const c = useContext(EditorContext);\n if (!c) {\n throw new Error(`useEditorContext invoked outside of a Grid`);\n }\n return c;\n};\n"],"names":[],"mappings":";;AAUO,MAAM,aAAgB,GAAA,aAAA;AAAA,EAC3B,KAAA,CAAA;AACF,EAAA;AACO,MAAM,mBAAmB,MAAM;AACpC,EAAM,MAAA,CAAA,GAAI,WAAW,aAAa,CAAA,CAAA;AAClC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,CAA4C,0CAAA,CAAA,CAAA,CAAA;AAAA,GAC9D;AACA,EAAO,OAAA,CAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"EditorContext.js","sources":["../src/EditorContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport interface EditorContext {\n initialText?: string;\n editMode?: boolean;\n startEditMode: () => void;\n endEditMode: (value: string) => void;\n cancelEditMode: () => void;\n}\n\nexport const EditorContext = createContext<EditorContext | undefined>(\n undefined,\n);\nexport const useEditorContext = () => {\n const c = useContext(EditorContext);\n if (!c) {\n throw new Error(\"useEditorContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":[],"mappings":";;AAUO,MAAM,aAAgB,GAAA,aAAA;AAAA,EAC3B,KAAA,CAAA;AACF,EAAA;AACO,MAAM,mBAAmB,MAAM;AACpC,EAAM,MAAA,CAAA,GAAI,WAAW,aAAa,CAAA,CAAA;AAClC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,4CAA4C,CAAA,CAAA;AAAA,GAC9D;AACA,EAAO,OAAA,CAAA,CAAA;AACT;;;;"}
package/dist-es/Grid.js CHANGED
@@ -1,9 +1,18 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { useRef, useState, useCallback, useMemo, useEffect } from 'react';
3
2
  import { makePrefixer } from '@salt-ds/core';
4
- import { useWindow } from '@salt-ds/window';
5
3
  import { useComponentCssInjection } from '@salt-ds/styles';
4
+ import { useWindow } from '@salt-ds/window';
6
5
  import { clsx } from 'clsx';
6
+ import { useRef, useState, useCallback, useMemo, useEffect } from 'react';
7
+ import { ColumnDataContext } from './ColumnDataContext.js';
8
+ import { ColumnDragContext } from './ColumnDragContext.js';
9
+ import { ColumnSortContext } from './ColumnSortContext.js';
10
+ import { CursorContext } from './CursorContext.js';
11
+ import { EditorContext } from './EditorContext.js';
12
+ import { GridContext } from './GridContext.js';
13
+ import { LayoutContext } from './LayoutContext.js';
14
+ import { SelectionContext } from './SelectionContext.js';
15
+ import { SizingContext } from './SizingContext.js';
7
16
  import { CellMeasure } from './internal/CellMeasure.js';
8
17
  import './internal/Cursor.js';
9
18
  import './internal/GroupHeaderRow.js';
@@ -14,23 +23,14 @@ import { RightPart } from './internal/RightPart.js';
14
23
  import { Scrollable } from './internal/Scrollable.js';
15
24
  import './internal/TableRow.js';
16
25
  import { clamp, getFocusablePosition } from './internal/utils.js';
17
- import { SelectionContext } from './SelectionContext.js';
18
- import { EditorContext } from './EditorContext.js';
19
- import { CursorContext } from './CursorContext.js';
20
26
  import { useColumnRegistry, useSumWidth, useSum, useClientMidWidth, useBodyVisibleColumnRange, useVisibleColumnGroupRange, useHeadVisibleColumnRange, useLeftScrolledOutWidth, useClientMidHeight, useVisibleRowRange, useBodyVisibleAreaTop, useColumnRange, useSumRangeWidth, useScrollToCell, useRowSelection, useRangeSelection, useRowModels, useColumnResize, useColumnMove } from './internal/gridHooks.js';
21
27
  import { TopLeftPart } from './internal/TopLeftPart.js';
22
28
  import { TopPart } from './internal/TopPart.js';
23
29
  import { TopRightPart } from './internal/TopRightPart.js';
24
30
  import './CellFrame.js';
25
31
  import './internal/DefaultCellValue.js';
26
- import { GridContext } from './GridContext.js';
27
- import { SizingContext } from './SizingContext.js';
28
- import { LayoutContext } from './LayoutContext.js';
29
- import { ColumnDragContext } from './ColumnDragContext.js';
30
- import { ColumnGhost } from './internal/ColumnGhost.js';
31
32
  import { ColumnDropTarget } from './internal/ColumnDropTarget.js';
32
- import { ColumnDataContext } from './ColumnDataContext.js';
33
- import { ColumnSortContext } from './ColumnSortContext.js';
33
+ import { ColumnGhost } from './internal/ColumnGhost.js';
34
34
  import css_248z from './Grid.css.js';
35
35
 
36
36
  const withBaseName = makePrefixer("saltGrid");
@@ -120,7 +120,9 @@ const Grid = function Grid2(props) {
120
120
  } = useColumnRegistry(children);
121
121
  const midColsById = useMemo(
122
122
  () => new Map(
123
- midCols.map((c) => [c.info.props.id, c])
123
+ midCols.map(
124
+ (c) => [c.info.props.id, c]
125
+ )
124
126
  ),
125
127
  [midCols]
126
128
  );
@@ -360,7 +362,7 @@ const Grid = function Grid2(props) {
360
362
  }, 0);
361
363
  };
362
364
  const startEditMode = (text) => {
363
- if (editMode || cursorRowIdx == void 0 || cursorColIdx == void 0) {
365
+ if (editMode || cursorRowIdx === void 0 || cursorColIdx === void 0) {
364
366
  return;
365
367
  }
366
368
  const c = cols[cursorColIdx];
@@ -374,14 +376,14 @@ const Grid = function Grid2(props) {
374
376
  if (!editMode) {
375
377
  return;
376
378
  }
377
- if (cursorColIdx == void 0) {
378
- console.error(`endEditMode: cursorColIdx is undefined in edit mode`);
379
+ if (cursorColIdx === void 0) {
380
+ console.error("endEditMode: cursorColIdx is undefined in edit mode");
379
381
  return;
380
382
  }
381
383
  const c = cols[cursorColIdx];
382
384
  const handler = c.info.props.onChange;
383
- if (cursorRowIdx == void 0) {
384
- console.error(`endEditMode: cursorRowIdx is undefined in edit mode`);
385
+ if (cursorRowIdx === void 0) {
386
+ console.error("endEditMode: cursorRowIdx is undefined in edit mode");
385
387
  return;
386
388
  }
387
389
  if (!handler) {
@@ -500,18 +502,12 @@ const Grid = function Grid2(props) {
500
502
  [editMode, startEditMode, endEditMode, cancelEditMode, initialText]
501
503
  );
502
504
  const [isFocused, setFocused] = useState(false);
503
- const onFocus = useCallback(
504
- (event) => {
505
- setFocused(true);
506
- },
507
- [setFocused]
508
- );
509
- const onBlur = useCallback(
510
- (event) => {
511
- setFocused(false);
512
- },
513
- [setFocused]
514
- );
505
+ const onFocus = useCallback(() => {
506
+ setFocused(true);
507
+ }, []);
508
+ const onBlur = useCallback(() => {
509
+ setFocused(false);
510
+ }, []);
515
511
  const cursorContext = useMemo(
516
512
  () => ({
517
513
  isFocused,
@@ -595,9 +591,8 @@ const Grid = function Grid2(props) {
595
591
  if (editMode) {
596
592
  cancelEditMode();
597
593
  break;
598
- } else {
599
- return false;
600
594
  }
595
+ return false;
601
596
  default:
602
597
  if (!editMode && !event.ctrlKey && !event.metaKey && !event.altKey && /^[\w\d ]$/.test(key)) {
603
598
  startEditMode(key);
@@ -624,14 +619,14 @@ const Grid = function Grid2(props) {
624
619
  case " ":
625
620
  if (focusedPart === "body") {
626
621
  if (event.ctrlKey) {
627
- if (cursorColIdx != void 0) {
622
+ if (cursorColIdx !== void 0) {
628
623
  rangeSelection.selectRange({
629
624
  start: { rowIdx: 0, colIdx: cursorColIdx },
630
625
  end: { rowIdx: sortedRowData.length, colIdx: cursorColIdx }
631
626
  });
632
627
  }
633
628
  } else {
634
- if (cursorRowIdx != void 0) {
629
+ if (cursorRowIdx !== void 0) {
635
630
  selectRows({
636
631
  rowIndex: cursorRowIdx,
637
632
  isRange: false,
@@ -641,9 +636,8 @@ const Grid = function Grid2(props) {
641
636
  }
642
637
  }
643
638
  break;
644
- } else {
645
- return false;
646
639
  }
640
+ return false;
647
641
  case "a":
648
642
  if (event.ctrlKey || event.metaKey) {
649
643
  rangeSelection.selectRange({
@@ -652,9 +646,8 @@ const Grid = function Grid2(props) {
652
646
  });
653
647
  selectAll();
654
648
  return true;
655
- } else {
656
- return false;
657
649
  }
650
+ return false;
658
651
  default:
659
652
  return false;
660
653
  }
@@ -676,6 +669,7 @@ const Grid = function Grid2(props) {
676
669
  );
677
670
  const clipboardKeyHandler = useCallback(
678
671
  (event) => {
672
+ var _a2, _b2;
679
673
  const { key } = event;
680
674
  if (key === "c" && (event.ctrlKey || event.metaKey) && rangeSelection.selectedCellRange) {
681
675
  const { start, end } = rangeSelection.selectedCellRange;
@@ -688,7 +682,7 @@ const Grid = function Grid2(props) {
688
682
  const rowText = [];
689
683
  for (let c2 = minCol; c2 <= maxCol; ++c2) {
690
684
  const col = cols[c2];
691
- const cellValue = col.info.props.getValue(row);
685
+ const cellValue = (_b2 = col == null ? void 0 : (_a2 = col.info.props).getValue) == null ? void 0 : _b2.call(_a2, row);
692
686
  rowText.push(cellValue);
693
687
  }
694
688
  text.push(rowText.join(" "));
@@ -788,7 +782,7 @@ const Grid = function Grid2(props) {
788
782
  break;
789
783
  case "Enter":
790
784
  if (editMode && !event.ctrlKey && !event.metaKey && !event.altKey && !event.shiftKey) {
791
- if (cursorRowIdx == void 0) {
785
+ if (cursorRowIdx === void 0) {
792
786
  moveCursor(focusedPart, 0, 0);
793
787
  } else {
794
788
  moveCursor(focusedPart, cursorRowIdx + 1, cursorColIdx);
@@ -829,7 +823,7 @@ const Grid = function Grid2(props) {
829
823
  );
830
824
  const onKeyDown = useCallback(
831
825
  (event) => {
832
- if (cursorColIdx != void 0 && cursorRowIdx != void 0) {
826
+ if (cursorColIdx !== void 0 && cursorRowIdx !== void 0) {
833
827
  const column = cols[cursorColIdx];
834
828
  if (column.info.props.onKeyDown) {
835
829
  column.info.props.onKeyDown(event, cursorRowIdx);
@@ -1 +1 @@
1
- {"version":3,"file":"Grid.js","sources":["../src/Grid.tsx"],"sourcesContent":["import React, {\n CSSProperties,\n KeyboardEvent,\n KeyboardEventHandler,\n MouseEventHandler,\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { clsx } from \"clsx\";\nimport {\n CellMeasure,\n clamp,\n getFocusablePosition,\n LeftPart,\n MiddlePart,\n RightPart,\n Scrollable,\n ScrollableProps,\n TopLeftPart,\n TopPart,\n TopRightPart,\n useBodyVisibleAreaTop,\n useBodyVisibleColumnRange,\n useClientMidHeight,\n useClientMidWidth,\n useColumnMove,\n useColumnRange,\n useColumnRegistry,\n useColumnResize,\n useHeadVisibleColumnRange,\n useLeftScrolledOutWidth,\n useRangeSelection,\n useRowModels,\n useRowSelection,\n useScrollToCell,\n useSum,\n useSumRangeWidth,\n useSumWidth,\n useVisibleColumnGroupRange,\n useVisibleRowRange,\n} from \"./internal\";\nimport {\n CellValidationState,\n GridColumnInfo,\n GridColumnProps,\n} from \"./GridColumn\";\nimport { GridContext } from \"./GridContext\";\nimport { SelectionContext } from \"./SelectionContext\";\nimport { SizingContext } from \"./SizingContext\";\nimport { LayoutContext } from \"./LayoutContext\";\nimport { EditorContext } from \"./EditorContext\"; // TODO remove\nimport { CursorContext, FocusedPart } from \"./CursorContext\";\nimport { ColumnGroupProps } from \"./ColumnGroup\";\nimport { ColumnDragContext } from \"./ColumnDragContext\";\nimport { ColumnGhost } from \"./internal/ColumnGhost\";\nimport { ColumnDropTarget } from \"./internal/ColumnDropTarget\";\nimport { ColumnDataContext } from \"./ColumnDataContext\";\nimport { ColumnSortContext } from \"./ColumnSortContext\";\n\nimport gridCss from \"./Grid.css\";\n\nconst withBaseName = makePrefixer(\"saltGrid\");\n\nexport type ColumnSeparatorType = \"regular\" | \"none\" | \"groupEdge\" | \"pinned\";\nexport type ColumnGroupRowSeparatorType = \"first\" | \"regular\" | \"last\";\nexport type ColumnGroupColumnSeparatorType = \"regular\" | \"none\" | \"pinned\";\nexport type GridRowSelectionMode = \"single\" | \"multi\" | \"none\";\nexport type GridCellSelectionMode = \"range\" | \"none\";\n\nexport enum SortOrder {\n ASC = \"asc\",\n DESC = \"desc\",\n NONE = \"none\",\n}\n\nexport type RowKeyGetter<T> = (row: T, index: number) => string;\n\nexport type GridColumnMoveHandler = (\n columnId: string,\n fromIndex: number,\n toIndex: number\n) => void;\n\nexport interface GridProps<T = any> {\n /**\n * At least 1 children is expected, options are `ColumnGroup` or `GridColumn`.\n * */\n children: ReactNode;\n /**\n * If `true`, zebra stripes are enabled (odd/even rows have alternate colours)\n * */\n zebra?: boolean;\n /**\n * If `true`, grid header is hidden.\n * */\n hideHeader?: boolean;\n /**\n * If `true`, column separators are rendered.\n * */\n columnSeparators?: boolean;\n /**\n * If `true`, separators are rendered between pinned and unpinned columns.\n * */\n pinnedSeparators?: boolean;\n /**\n * Row data objects. Sparse arrays are supported.\n * */\n rowData: T[];\n /**\n * Should return unique string for a given row data object.\n * If rowData is sparse then this function should work with undefined row data\n * objects and create keys based on row index. `(row: T, index: number) => string`\n * */\n rowKeyGetter?: RowKeyGetter<T>;\n /**\n * Rows with these indices are selected by default.\n * */\n defaultSelectedRowIdxs?: number[];\n /**\n * Selected row indices for controlled mode.\n * */\n selectedRowIdxs?: number[];\n className?: string;\n style?: CSSProperties;\n /**\n * The variant to use. Options are `primary` and `secondary`. Default value is\n * `primary`. `secondary` variant changes grid background to reduce contrast.\n * */\n variant?: \"primary\" | \"secondary\";\n /**\n * Options are `single`, `multi` and `none`.\n * */\n rowSelectionMode?: GridRowSelectionMode;\n onRowSelected?: (selectedRowIdxs: number[]) => void;\n /**\n * If `true`, user will be able to move columns using drag and drop.\n * */\n columnMove?: boolean;\n /**\n * Accepts `(columnId: string, fromIndex: number, toIndex: number) => void`\n * */\n onColumnMoved?: GridColumnMoveHandler;\n /**\n * Options are `range` and `none`.\n * */\n cellSelectionMode?: GridCellSelectionMode;\n onVisibleRowRangeChange?: (start: number, end: number) => void;\n /**\n * If `true`, keyboard navigation is enabled for the header.\n * */\n headerIsFocusable?: boolean;\n\n getRowValidationStatus?: (\n row: GridRowModel<T>\n ) => CellValidationState | undefined;\n}\n\nexport interface GridRowModel<T> {\n key: string;\n index: number;\n data: T;\n}\n\nexport interface GridColumnModel<T> {\n index: number;\n separator: ColumnSeparatorType;\n\n info: GridColumnInfo<T>;\n}\n\nexport interface GridColumnGroupModel {\n index: number;\n data: ColumnGroupProps;\n childrenIds: string[];\n rowSeparator: ColumnGroupRowSeparatorType;\n columnSeparator: ColumnGroupColumnSeparatorType;\n colSpan: number;\n}\n\nfunction defaultRowKeyGetter<T>(row: T, index: number): string {\n return `${index}`;\n}\n\nexport const Grid = function Grid<T>(props: GridProps<T>) {\n const {\n rowData,\n zebra,\n hideHeader,\n columnSeparators,\n pinnedSeparators = true,\n className,\n style,\n rowKeyGetter = defaultRowKeyGetter,\n children,\n defaultSelectedRowIdxs,\n selectedRowIdxs,\n variant = \"primary\",\n rowSelectionMode = \"multi\",\n onRowSelected,\n columnMove,\n onColumnMoved,\n cellSelectionMode = \"none\",\n onVisibleRowRangeChange,\n headerIsFocusable,\n getRowValidationStatus,\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-grid\",\n css: gridCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const scrollableRef = useRef<HTMLDivElement>(null);\n const middleRef = useRef<HTMLDivElement>(null);\n const topRef = useRef<HTMLDivElement>(null);\n const leftRef = useRef<HTMLDivElement>(null);\n const rightRef = useRef<HTMLDivElement>(null);\n const bottomRef = useRef<HTMLDivElement>(null);\n\n // What caused the latest scroll change. User means the UI (mouse events), table means the component initiated scrolling (scrollToCell was called for example)\n const [scrollSource, setScrollSource] = useState<\"user\" | \"table\">(\"user\");\n const [scrollLeft, setScrollLeft] = useState<number>(0);\n const [scrollTop, setScrollTop] = useState<number>(0);\n\n const [hoverRowKey, setHoverRowKey] = useState<string | undefined>(undefined);\n\n const [\n { clientWidth, clientHeight, scrollBarHeight, scrollBarWidth },\n setDimensions,\n ] = useState({\n clientWidth: 0,\n clientHeight: 0,\n scrollBarHeight: 0,\n scrollBarWidth: 0,\n });\n\n const [rowHeight, setRowHeight] = useState<number>(0);\n\n const [cursorRowIdx, setCursorRowIdx] = useState<number>(0);\n const [cursorColIdx, setCursorColIdx] = useState<number>(0);\n const [focusedPart, setFocusedPart] = useState<FocusedPart>(\n headerIsFocusable ? \"header\" : \"body\"\n );\n\n const [sortByColumnId, setSortByColumnId] =\n useState<GridColumnProps[\"id\"]>(\"\");\n const [sortOrder, setSortOrder] = useState<SortOrder>(SortOrder.NONE);\n\n const [editMode, setEditMode] = useState<boolean>(false);\n const [initialText, setInitialText] = useState<string | undefined>(undefined);\n\n const resizeClient: ScrollableProps<T>[\"resizeClient\"] = useCallback(\n (dimensions) => {\n setDimensions(dimensions);\n },\n []\n );\n\n const {\n leftCols, // Columns pinned to left\n midCols, // Scrollable columns\n rightCols, // Columns pinned to right\n leftGroups,\n midGroups,\n rightGroups,\n contextValue,\n } = useColumnRegistry<T>(children);\n\n const midColsById = useMemo(\n () =>\n new Map<string, GridColumnModel<T>>(\n midCols.map((c) => [c.info.props.id, c] as [string, GridColumnModel<T>])\n ),\n [midCols]\n );\n\n // Width of all columns pinned to left\n const leftWidth = useSumWidth(leftCols);\n // Width of all scrollable columns\n const midWidth = useSumWidth(midCols);\n // Width of all columns pinned to right\n const rightWidth = useSumWidth(rightCols);\n // Total width of all columns\n const totalWidth = useSum([leftWidth, midWidth, rightWidth]);\n\n const hasColumnGroups =\n leftGroups.length > 0 || midGroups.length > 0 || rightGroups.length > 0;\n\n const headRowCount = hideHeader ? 0 : hasColumnGroups ? 2 : 1; // TODO multiple group levels\n const rowCount = rowData.length;\n\n // Footer is not implemented yet.\n const botRowCount = 0; // TODO\n // Height of the header\n const topHeight = rowHeight * headRowCount;\n // Height of the middle part (virtual height)\n const midHeight = rowCount === 0 ? 0 : rowHeight * rowCount + 1;\n // Height of the footer\n const botHeight = botRowCount * rowHeight;\n // Total height of the grid (virtual)\n const totalHeight = useSum([topHeight, midHeight, botHeight]);\n // Client width of the middle part of the grid (viewport)\n const clientMidWidth = useClientMidWidth(clientWidth, leftWidth, rightWidth);\n // Unused width in the middle part, to be filled by an empty column with fake cells.\n const midGap = Math.max(0, Math.floor(clientMidWidth - midWidth));\n\n // Range of unpinned columns visible in the body of the grid (pinned columns are always visible).\n const bodyVisColRng = useBodyVisibleColumnRange(\n midCols,\n scrollLeft,\n clientMidWidth\n );\n\n const midGrpByColId = useMemo(() => {\n const m = new Map<string, GridColumnGroupModel>();\n for (const g of midGroups) {\n for (const c of g.childrenIds) {\n m.set(c, g);\n }\n }\n return m;\n }, [midGroups]);\n\n // Range of visible column groups.\n const visColGrpRng = useVisibleColumnGroupRange(\n bodyVisColRng,\n midCols,\n midGrpByColId,\n leftGroups.length\n );\n\n const visColGrps = useMemo(() => {\n return midGroups.slice(visColGrpRng.start, visColGrpRng.end);\n }, [visColGrpRng, midGroups]);\n\n const headVisColRng = useHeadVisibleColumnRange(\n bodyVisColRng,\n visColGrps,\n midColsById,\n leftCols.length\n );\n\n const bodyScrOutColWh = useLeftScrolledOutWidth(midCols, bodyVisColRng);\n const headScrOutColWh = useLeftScrolledOutWidth(midCols, headVisColRng);\n\n const bodyVisAreaLeft = useSum([leftWidth, bodyScrOutColWh]);\n const headVisAreaLeft = useSum([leftWidth, headScrOutColWh]);\n const clientMidHeight = useClientMidHeight(\n clientHeight,\n topHeight,\n botHeight\n );\n const visRowRng = useVisibleRowRange(\n scrollTop,\n clientMidHeight,\n rowHeight,\n rowCount\n );\n\n const bodyVisAreaTop = useBodyVisibleAreaTop(rowHeight, visRowRng, topHeight);\n\n const bodyVisibleColumns = useColumnRange(midCols, bodyVisColRng);\n const headVisibleColumns = useColumnRange(midCols, headVisColRng);\n const bodyVisColWh = useSumRangeWidth(midCols, bodyVisColRng);\n\n const headVisColWh = bodyVisColWh; // TODO implement groups\n\n const rootStyle = useMemo(\n () => ({\n ...style,\n \"--grid-total-width\": `${totalWidth}px`,\n \"--grid-total-height\": `${totalHeight}px`,\n \"--grid-topPart-height\": `${topHeight}px`,\n \"--grid-leftPart-width\": `${leftWidth}px`,\n \"--grid-rightPart-width\": `${rightWidth}px`,\n \"--grid-bodyVisibleColumns-width\": `${bodyVisColWh}px`,\n \"--grid-bodyVisibleArea-top\": `${bodyVisAreaTop}px`,\n \"--grid-bodyVisibleArea-left\": `${bodyVisAreaLeft}px`,\n \"--grid-bottomHeight\": `${botHeight}px`,\n \"--grid-headerVisibleColumns-width\": `${headVisColWh}px`,\n \"--grid-headerVisibleArea-left\": `${headVisAreaLeft}px`,\n \"--grid-scrollBar-height\": `${scrollBarHeight}px`,\n \"--grid-scrollBar-width\": `${scrollBarWidth}px`,\n }),\n [\n style,\n totalHeight,\n totalWidth,\n topHeight,\n leftWidth,\n rightWidth,\n botHeight,\n bodyVisColWh,\n bodyVisAreaLeft,\n bodyVisAreaTop,\n headVisColWh,\n headVisAreaLeft,\n scrollBarHeight,\n scrollBarWidth,\n ]\n );\n\n const onWheel: EventListener = useCallback(\n (event) => {\n let { deltaX, deltaY, shiftKey } = event as WheelEvent;\n if (deltaX === 0 && shiftKey) {\n deltaX = deltaY;\n deltaY = 0;\n }\n const s = scrollableRef.current;\n if (s) {\n s.scrollLeft += deltaX;\n s.scrollTop += deltaY;\n if (\n !(\n (\n Math.round(s.scrollHeight - s.scrollTop) === s.clientHeight || // reached the bottom\n (s.scrollTop === 0 && deltaY < 0)\n ) // reached the top (upward scroll)\n )\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n },\n [scrollableRef.current]\n );\n\n const cols = useMemo(\n () => [...leftCols, ...midCols, ...rightCols],\n [leftCols, midCols, rightCols]\n );\n\n const colsById = useMemo(\n () =>\n new Map<string, GridColumnModel<T>>(\n cols.map((c) => [c.info.props.id, c] as [string, GridColumnModel<T>])\n ),\n [cols]\n );\n\n const getColById = useCallback(\n (id: string) => {\n return colsById.get(id);\n },\n [colsById]\n );\n\n const columnDataContext: ColumnDataContext<T> = useMemo(\n () => ({\n getColById,\n }),\n [getColById]\n );\n\n const isSortMode = sortByColumnId && sortOrder !== SortOrder.NONE;\n\n const onSortOrderChange =\n getColById(sortByColumnId)?.info.props.onSortOrderChange;\n\n const valueGetter =\n getColById(sortByColumnId)?.info.props.getValue ||\n ((r: T) => {\n return r[sortByColumnId as keyof typeof r];\n });\n\n const customSortingFn = getColById(sortByColumnId)?.info.props.customSort;\n\n const sortedRowData = useMemo(() => {\n if (!isSortMode || onSortOrderChange) return rowData;\n\n if (customSortingFn) {\n return customSortingFn({ rowData, sortOrder });\n }\n\n const sortedData = [...rowData].sort((a, b) =>\n valueGetter(a) < valueGetter(b) ? -1 : 1\n );\n\n if (sortOrder === SortOrder.DESC) {\n return sortedData.reverse();\n }\n\n return sortedData;\n }, [\n onSortOrderChange,\n valueGetter,\n customSortingFn,\n isSortMode,\n rowData,\n sortByColumnId,\n sortOrder,\n ]);\n\n const onClickSortColumn = useCallback(\n (colHeaderId: GridColumnProps[\"id\"]) => {\n if (sortByColumnId === colHeaderId) {\n switch (sortOrder) {\n case SortOrder.ASC:\n setSortOrder(SortOrder.DESC);\n break;\n case SortOrder.DESC:\n setSortOrder(SortOrder.NONE);\n break;\n default:\n setSortOrder(SortOrder.ASC);\n }\n } else {\n setSortByColumnId(colHeaderId);\n setSortOrder(SortOrder.ASC);\n }\n },\n [sortByColumnId, sortOrder]\n );\n\n const columnSortContext: ColumnSortContext = useMemo(\n () => ({\n sortByColumnId,\n setSortByColumnId,\n sortOrder,\n setSortOrder,\n onClickSortColumn,\n }),\n [\n sortByColumnId,\n setSortByColumnId,\n sortOrder,\n setSortOrder,\n onClickSortColumn,\n ]\n );\n\n const scroll = useCallback(\n (left?: number, top?: number, source?: \"user\" | \"table\") => {\n setScrollSource(source || \"user\");\n if (left !== undefined) {\n setScrollLeft(left);\n }\n if (top !== undefined) {\n setScrollTop(top);\n }\n },\n [setScrollLeft, setScrollTop, setScrollSource]\n );\n\n const scrollToCell = useScrollToCell(\n visRowRng,\n rowHeight,\n clientMidHeight,\n midCols,\n bodyVisColRng,\n clientMidWidth,\n scroll\n );\n\n const focusCellElement = (\n part: FocusedPart,\n rowIdx: number,\n colIdx: number\n ) => {\n setTimeout(() => {\n const selector =\n part === \"body\"\n ? `td[data-row-index=\"${rowIdx}\"][data-column-index=\"${colIdx}\"]`\n : `th[data-column-index=\"${colIdx}\"]`;\n const nodeToFocus = rootRef.current?.querySelector(selector);\n if (nodeToFocus) {\n (nodeToFocus as HTMLElement).focus({ preventScroll: true });\n } else {\n console.warn(`focusCellElement can't find the element`);\n }\n }, 0);\n };\n\n const startEditMode = (text?: string) => {\n if (editMode || cursorRowIdx == undefined || cursorColIdx == undefined) {\n return;\n }\n const c = cols[cursorColIdx];\n const isEditable = !!contextValue.getEditor(c.info.props.id);\n if (isEditable) {\n setInitialText(text);\n setEditMode(true);\n }\n };\n\n const endEditMode = (value: string) => {\n if (!editMode) {\n return;\n }\n if (cursorColIdx == undefined) {\n console.error(`endEditMode: cursorColIdx is undefined in edit mode`);\n return;\n }\n const c = cols[cursorColIdx];\n const handler = c.info.props.onChange;\n if (cursorRowIdx == undefined) {\n console.error(`endEditMode: cursorRowIdx is undefined in edit mode`);\n return;\n }\n if (!handler) {\n console.warn(\n `onChange is not specified for editable column \"${c.info.props.id}\".`\n );\n } else {\n handler(sortedRowData[cursorRowIdx], cursorRowIdx, value);\n }\n setEditMode(false);\n focusCellElement(focusedPart, cursorRowIdx, cursorColIdx);\n };\n\n const cancelEditMode = () => {\n if (!editMode) {\n return;\n }\n setEditMode(false);\n if (cursorRowIdx != null && cursorColIdx != null) {\n focusCellElement(focusedPart, cursorRowIdx, cursorColIdx);\n }\n };\n\n const {\n selRowIdxs,\n isAllSelected,\n isAnySelected,\n selectAll,\n selectRows,\n unselectAll,\n onMouseDown: onRowSelectionMouseDown,\n } = useRowSelection(\n rowKeyGetter,\n sortedRowData,\n defaultSelectedRowIdxs,\n selectedRowIdxs,\n rowSelectionMode,\n onRowSelected\n );\n\n const rangeSelection = useRangeSelection(cellSelectionMode);\n\n const moveCursor = useCallback(\n (part: FocusedPart, rowIdx: number, colIdx: number) => {\n if (!headerIsFocusable && part === \"header\") {\n console.warn(\n `Cannot move focus to the header. \"headerIsFocusable\" prop is false.`\n );\n return;\n }\n setFocusedPart(part);\n colIdx = clamp(colIdx, 0, cols.length - 1);\n if (part === \"body\") {\n if (sortedRowData.length < 1 || cols.length < 1) {\n return;\n }\n rowIdx = clamp(rowIdx, 0, sortedRowData.length - 1);\n } else if (part === \"header\") {\n rowIdx = 0; // There is only one row in the header currently\n }\n setCursorRowIdx(rowIdx);\n setCursorColIdx(colIdx);\n scrollToCell(part, rowIdx, colIdx);\n focusCellElement(part, rowIdx, colIdx);\n if (part === \"body\") {\n rangeSelection.onCursorMove({ rowIdx, colIdx });\n }\n },\n [\n setCursorRowIdx,\n setCursorColIdx,\n sortedRowData,\n rowKeyGetter,\n cols,\n rootRef.current,\n scrollToCell,\n endEditMode,\n rangeSelection.onCursorMove,\n focusedPart,\n headerIsFocusable,\n ]\n );\n\n const rows = useRowModels(rowKeyGetter, sortedRowData, visRowRng);\n\n const isLeftRaised = scrollLeft > 0;\n const isRightRaised = scrollLeft + clientMidWidth < midWidth;\n const isHeaderRaised = scrollTop > 0;\n\n const resizeColumn = useCallback(\n (colIdx: number, width: number) => {\n const col = cols[colIdx];\n col.info.onWidthChanged(width);\n },\n [cols]\n );\n\n const onResizeHandleMouseDown = useColumnResize(cols, resizeColumn);\n\n const sizingContext: SizingContext = useMemo(\n () => ({\n resizeColumn,\n rowHeight,\n onResizeHandleMouseDown,\n }),\n [resizeColumn, rowHeight, onResizeHandleMouseDown]\n );\n\n const layoutContext: LayoutContext = useMemo(\n () => ({\n totalHeight,\n totalWidth,\n clientWidth,\n clientHeight,\n }),\n [totalHeight, totalWidth]\n );\n\n const editorContext: EditorContext = useMemo(\n () => ({\n initialText,\n editMode,\n startEditMode,\n endEditMode,\n cancelEditMode,\n }),\n [editMode, startEditMode, endEditMode, cancelEditMode, initialText]\n );\n\n const [isFocused, setFocused] = useState<boolean>(false);\n\n const onFocus = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n setFocused(true);\n },\n [setFocused]\n );\n\n const onBlur = useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n setFocused(false);\n },\n [setFocused]\n );\n\n const cursorContext: CursorContext = useMemo(\n () => ({\n isFocused,\n cursorRowIdx,\n cursorColIdx,\n moveCursor,\n focusedPart,\n headerIsFocusable: Boolean(headerIsFocusable),\n }),\n [\n cursorRowIdx,\n cursorColIdx,\n moveCursor,\n isFocused,\n focusedPart,\n headerIsFocusable,\n ]\n );\n\n const onColumnMove: GridColumnMoveHandler = (\n columnId,\n fromIndex,\n toIndex\n ) => {\n if (onColumnMoved && fromIndex !== toIndex) {\n onColumnMoved(columnId, fromIndex, toIndex);\n }\n };\n\n const {\n dragState,\n onColumnMoveHandleMouseDown,\n activeTarget,\n onColumnMoveCancel,\n } = useColumnMove(\n columnMove,\n rootRef,\n leftCols,\n midCols,\n rightCols,\n cols,\n scrollLeft,\n clientMidWidth,\n onColumnMove\n );\n\n const columnDragContext: ColumnDragContext = useMemo(\n () => ({\n columnMove,\n onColumnMoveHandleMouseDown,\n }),\n [columnMove, onColumnMoveHandleMouseDown]\n );\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n onRowSelectionMouseDown(event);\n rangeSelection.onCellMouseDown(event);\n\n const target = event.target as HTMLElement;\n try {\n const { part, rowIndex, columnIndex } = getFocusablePosition(target);\n if (part === \"header\" && !headerIsFocusable) {\n return;\n }\n moveCursor(part, rowIndex, columnIndex);\n } catch (e) {\n // TODO\n }\n };\n\n const onKeyUp: KeyboardEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n const { key } = event;\n if (key === \"Shift\") {\n rangeSelection.onKeyboardRangeSelectionEnd();\n }\n },\n [rangeSelection.onKeyboardRangeSelectionEnd]\n );\n\n const editModeKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"F2\":\n case \"Enter\":\n startEditMode();\n break;\n case \"Backspace\":\n startEditMode(\"\");\n break;\n case \"Escape\":\n if (editMode) {\n cancelEditMode();\n break;\n } else {\n return false;\n }\n default:\n if (\n !editMode &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n /^[\\w\\d ]$/.test(key)\n ) {\n startEditMode(key);\n } else {\n return false;\n }\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [startEditMode, editMode, cancelEditMode]\n );\n\n const selectionKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"Shift\":\n rangeSelection.onKeyboardRangeSelectionStart({\n rowIdx: cursorRowIdx || 0,\n colIdx: cursorColIdx || 0,\n });\n break;\n case \" \":\n if (focusedPart === \"body\") {\n if (event.ctrlKey) {\n if (cursorColIdx != undefined) {\n rangeSelection.selectRange({\n start: { rowIdx: 0, colIdx: cursorColIdx },\n end: { rowIdx: sortedRowData.length, colIdx: cursorColIdx },\n });\n }\n } else {\n if (cursorRowIdx != undefined) {\n selectRows({\n rowIndex: cursorRowIdx,\n isRange: false,\n incremental: true,\n unselectOtherRows: !event.shiftKey,\n });\n }\n }\n break;\n } else {\n return false;\n }\n case \"a\":\n if (event.ctrlKey || event.metaKey) {\n rangeSelection.selectRange({\n start: { rowIdx: 0, colIdx: 0 },\n end: { rowIdx: sortedRowData.length, colIdx: cols.length },\n });\n selectAll();\n return true;\n } else {\n return false;\n }\n default:\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [\n rangeSelection.selectRange,\n rangeSelection.onKeyboardRangeSelectionStart,\n selectRows,\n selectAll,\n cursorColIdx,\n cursorRowIdx,\n sortedRowData.length,\n cols.length,\n focusedPart,\n ]\n );\n\n const clipboardKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n if (\n key === \"c\" &&\n (event.ctrlKey || event.metaKey) &&\n rangeSelection.selectedCellRange\n ) {\n const { start, end } = rangeSelection.selectedCellRange;\n const c = (x: number, y: number) => x - y;\n const [minRow, maxRow] = [start.rowIdx, end.rowIdx].sort(c);\n const [minCol, maxCol] = [start.colIdx, end.colIdx].sort(c);\n const text: string[] = [];\n for (let r = minRow; r <= maxRow; ++r) {\n const row = sortedRowData[r];\n const rowText: string[] = [];\n for (let c = minCol; c <= maxCol; ++c) {\n const col = cols[c]!;\n const cellValue = col.info.props.getValue!(row);\n rowText.push(cellValue);\n }\n text.push(rowText.join(\"\\t\"));\n }\n navigator.clipboard.writeText(text.join(\"\\n\"));\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n return false;\n },\n [rangeSelection.selectedCellRange]\n );\n\n const pageSize = Math.max(1, visRowRng.length - 1);\n\n const navigationKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"ArrowLeft\":\n moveCursor(focusedPart, cursorRowIdx, (cursorColIdx || 0) - 1);\n break;\n case \"ArrowRight\":\n moveCursor(focusedPart, cursorRowIdx, (cursorColIdx || 0) + 1);\n break;\n case \"ArrowUp\":\n if (cursorRowIdx === 0 && headerIsFocusable) {\n moveCursor(\"header\", 0, cursorColIdx);\n } else {\n moveCursor(focusedPart, (cursorRowIdx || 0) - 1, cursorColIdx);\n }\n break;\n case \"ArrowDown\":\n if (focusedPart === \"header\") {\n moveCursor(\"body\", 0, cursorColIdx);\n } else {\n moveCursor(focusedPart, (cursorRowIdx || 0) + 1, cursorColIdx);\n }\n break;\n case \"PageUp\":\n if (cursorRowIdx === 0 && headerIsFocusable) {\n moveCursor(\"header\", 0, cursorColIdx);\n } else {\n moveCursor(\n focusedPart,\n (cursorRowIdx || 0) - pageSize,\n cursorColIdx\n );\n }\n break;\n case \"PageDown\":\n if (focusedPart === \"header\") {\n moveCursor(\"body\", 0, cursorColIdx);\n } else {\n moveCursor(\n focusedPart,\n (cursorRowIdx || 0) + pageSize,\n cursorColIdx\n );\n }\n break;\n case \"Home\":\n if (!event.ctrlKey) {\n moveCursor(focusedPart, cursorRowIdx, 0);\n } else {\n moveCursor(focusedPart, 0, 0);\n }\n break;\n case \"End\":\n if (!event.ctrlKey) {\n moveCursor(focusedPart, cursorRowIdx, cols.length - 1);\n } else {\n moveCursor(focusedPart, sortedRowData.length - 1, cols.length - 1);\n }\n break;\n case \"Tab\":\n if (\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n editMode &&\n cursorColIdx != null &&\n cursorRowIdx != null\n ) {\n if (!event.shiftKey) {\n if (cursorColIdx < cols.length - 1) {\n moveCursor(focusedPart, cursorRowIdx, cursorColIdx + 1);\n } else {\n if (cursorRowIdx < sortedRowData.length - 1) {\n moveCursor(focusedPart, cursorRowIdx + 1, 0);\n }\n }\n } else {\n if (cursorColIdx > 0) {\n moveCursor(focusedPart, cursorRowIdx, cursorColIdx - 1);\n } else {\n if (cursorRowIdx > 0) {\n moveCursor(focusedPart, cursorRowIdx - 1, cols.length - 1);\n }\n }\n }\n } else {\n return false;\n }\n break;\n case \"Enter\":\n if (\n editMode &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n !event.shiftKey\n ) {\n if (cursorRowIdx == undefined) {\n moveCursor(focusedPart, 0, 0);\n } else {\n moveCursor(focusedPart, cursorRowIdx + 1, cursorColIdx);\n }\n } else {\n return false;\n }\n break;\n default:\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [\n moveCursor,\n cursorRowIdx,\n cursorRowIdx,\n cols.length,\n sortedRowData.length,\n headerIsFocusable,\n pageSize,\n ]\n );\n\n const columnMoveKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n if (key === \"Escape\") {\n onColumnMoveCancel();\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n return false;\n },\n []\n );\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n if (cursorColIdx != undefined && cursorRowIdx != undefined) {\n const column = cols[cursorColIdx];\n if (column.info.props.onKeyDown) {\n column.info.props.onKeyDown(event, cursorRowIdx);\n }\n }\n if (!event.isPropagationStopped()) {\n // each handler returns true or false\n // if the event is handled and should not be handled by anything else return true\n // if the event is not handled and we should keep trying other handlers return false\n [\n navigationKeyHandler,\n clipboardKeyHandler,\n selectionKeyHandler,\n editModeKeyHandler,\n columnMoveKeyHandler,\n ].find((handler) => {\n return handler(event);\n });\n }\n },\n [\n navigationKeyHandler,\n clipboardKeyHandler,\n selectionKeyHandler,\n editModeKeyHandler,\n columnMoveKeyHandler,\n ]\n );\n\n const selectionContext: SelectionContext = useMemo(\n () => ({\n selRowIdxs,\n selectRows,\n isAllSelected,\n isAnySelected,\n selectAll,\n unselectAll,\n selectedCellRange: rangeSelection?.selectedCellRange,\n }),\n [\n selRowIdxs,\n selectRows,\n isAllSelected,\n isAnySelected,\n selectAll,\n unselectAll,\n rangeSelection?.selectedCellRange,\n ]\n );\n\n useEffect(() => {\n if (onVisibleRowRangeChange) {\n onVisibleRowRangeChange(visRowRng.start, visRowRng.end);\n }\n }, [onVisibleRowRangeChange, visRowRng]);\n\n return (\n <GridContext.Provider value={contextValue}>\n <LayoutContext.Provider value={layoutContext}>\n <SelectionContext.Provider value={selectionContext}>\n <ColumnDragContext.Provider value={columnDragContext}>\n <CursorContext.Provider value={cursorContext}>\n <SizingContext.Provider value={sizingContext}>\n <EditorContext.Provider value={editorContext}>\n <ColumnDataContext.Provider value={columnDataContext}>\n <ColumnSortContext.Provider value={columnSortContext}>\n {props.children}\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"zebra\")]: zebra,\n [withBaseName(\"columnSeparators\")]:\n columnSeparators,\n [withBaseName(\"pinnedSeparators\")]:\n pinnedSeparators,\n [withBaseName(\"primaryBackground\")]:\n variant === \"primary\",\n [withBaseName(\"secondaryBackground\")]:\n variant === \"secondary\",\n },\n className\n )}\n style={rootStyle}\n ref={rootRef}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onMouseDown={onMouseDown}\n onFocus={onFocus}\n onBlur={onBlur}\n data-name=\"grid-root\"\n role=\"grid\"\n aria-colcount={cols.length}\n aria-rowcount={rowCount + headRowCount}\n aria-multiselectable={rowSelectionMode === \"multi\"}\n >\n <CellMeasure setRowHeight={setRowHeight} />\n <Scrollable\n resizeClient={resizeClient}\n scrollLeft={scrollLeft}\n scrollTop={scrollTop}\n scrollSource={scrollSource}\n scroll={scroll}\n scrollerRef={scrollableRef}\n topRef={topRef}\n rightRef={rightRef}\n bottomRef={bottomRef}\n leftRef={leftRef}\n middleRef={middleRef}\n />\n {!hideHeader && leftCols.length > 0 && (\n <TopLeftPart\n onWheel={onWheel}\n columns={leftCols}\n columnGroups={leftGroups}\n rightShadow={isLeftRaised}\n bottomShadow={isHeaderRaised}\n />\n )}\n {!hideHeader && (\n <TopPart\n columns={headVisibleColumns}\n columnGroups={visColGrps}\n topRef={topRef}\n onWheel={onWheel}\n midGap={midGap}\n bottomShadow={isHeaderRaised}\n />\n )}\n {!hideHeader && rightCols.length > 0 && (\n <TopRightPart\n onWheel={onWheel}\n columns={rightCols}\n columnGroups={rightGroups}\n leftShadow={isRightRaised}\n bottomShadow={isHeaderRaised}\n />\n )}\n {leftCols.length > 0 && (\n <LeftPart\n leftRef={leftRef}\n onWheel={onWheel}\n columns={leftCols}\n rows={rows}\n rightShadow={isLeftRaised}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n zebra={zebra}\n getRowValidationStatus={getRowValidationStatus}\n />\n )}\n <MiddlePart\n middleRef={middleRef}\n onWheel={onWheel}\n columns={bodyVisibleColumns}\n rows={rows}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n midGap={midGap}\n zebra={zebra}\n getRowValidationStatus={getRowValidationStatus}\n />\n {rightCols.length > 0 && (\n <RightPart\n rightRef={rightRef}\n onWheel={onWheel}\n columns={rightCols}\n rows={rows}\n leftShadow={isRightRaised}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n zebra={zebra}\n getRowValidationStatus={getRowValidationStatus}\n />\n )}\n <ColumnDropTarget x={activeTarget?.x} />\n <ColumnGhost\n columns={cols}\n rows={rows}\n dragState={dragState}\n zebra={zebra}\n />\n </div>\n </ColumnSortContext.Provider>\n </ColumnDataContext.Provider>\n </EditorContext.Provider>\n </SizingContext.Provider>\n </CursorContext.Provider>\n </ColumnDragContext.Provider>\n </SelectionContext.Provider>\n </LayoutContext.Provider>\n </GridContext.Provider>\n );\n};\n"],"names":["SortOrder","Grid","gridCss","_a","c"],"mappings":"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"}
1
+ {"version":3,"file":"Grid.js","sources":["../src/Grid.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 type React from \"react\";\nimport {\n type CSSProperties,\n type KeyboardEvent,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { ColumnDataContext } from \"./ColumnDataContext\";\nimport { ColumnDragContext } from \"./ColumnDragContext\";\nimport type { ColumnGroupProps } from \"./ColumnGroup\";\nimport { ColumnSortContext } from \"./ColumnSortContext\";\nimport { CursorContext, type FocusedPart } from \"./CursorContext\";\nimport { EditorContext } from \"./EditorContext\"; // TODO remove\nimport type {\n CellValidationState,\n GridColumnInfo,\n GridColumnProps,\n} from \"./GridColumn\";\nimport { GridContext } from \"./GridContext\";\nimport { LayoutContext } from \"./LayoutContext\";\nimport { SelectionContext } from \"./SelectionContext\";\nimport { SizingContext } from \"./SizingContext\";\nimport {\n CellMeasure,\n LeftPart,\n MiddlePart,\n RightPart,\n Scrollable,\n type ScrollableProps,\n TopLeftPart,\n TopPart,\n TopRightPart,\n clamp,\n getFocusablePosition,\n useBodyVisibleAreaTop,\n useBodyVisibleColumnRange,\n useClientMidHeight,\n useClientMidWidth,\n useColumnMove,\n useColumnRange,\n useColumnRegistry,\n useColumnResize,\n useHeadVisibleColumnRange,\n useLeftScrolledOutWidth,\n useRangeSelection,\n useRowModels,\n useRowSelection,\n useScrollToCell,\n useSum,\n useSumRangeWidth,\n useSumWidth,\n useVisibleColumnGroupRange,\n useVisibleRowRange,\n} from \"./internal\";\nimport { ColumnDropTarget } from \"./internal/ColumnDropTarget\";\nimport { ColumnGhost } from \"./internal/ColumnGhost\";\n\nimport gridCss from \"./Grid.css\";\n\nconst withBaseName = makePrefixer(\"saltGrid\");\n\nexport type ColumnSeparatorType = \"regular\" | \"none\" | \"groupEdge\" | \"pinned\";\nexport type ColumnGroupRowSeparatorType = \"first\" | \"regular\" | \"last\";\nexport type ColumnGroupColumnSeparatorType = \"regular\" | \"none\" | \"pinned\";\nexport type GridRowSelectionMode = \"single\" | \"multi\" | \"none\";\nexport type GridCellSelectionMode = \"range\" | \"none\";\n\nexport enum SortOrder {\n ASC = \"asc\",\n DESC = \"desc\",\n NONE = \"none\",\n}\n\nexport type RowKeyGetter<T> = (row: T, index: number) => string;\n\nexport type GridColumnMoveHandler = (\n columnId: string,\n fromIndex: number,\n toIndex: number,\n) => void;\n\nexport interface GridProps<T = any> {\n /**\n * At least 1 children is expected, options are `ColumnGroup` or `GridColumn`.\n * */\n children: ReactNode;\n /**\n * If `true`, zebra stripes are enabled (odd/even rows have alternate colours)\n * */\n zebra?: boolean;\n /**\n * If `true`, grid header is hidden.\n * */\n hideHeader?: boolean;\n /**\n * If `true`, column separators are rendered.\n * */\n columnSeparators?: boolean;\n /**\n * If `true`, separators are rendered between pinned and unpinned columns.\n * */\n pinnedSeparators?: boolean;\n /**\n * Row data objects. Sparse arrays are supported.\n * */\n rowData: T[];\n /**\n * Should return unique string for a given row data object.\n * If rowData is sparse then this function should work with undefined row data\n * objects and create keys based on row index. `(row: T, index: number) => string`\n * */\n rowKeyGetter?: RowKeyGetter<T>;\n /**\n * Rows with these indices are selected by default.\n * */\n defaultSelectedRowIdxs?: number[];\n /**\n * Selected row indices for controlled mode.\n * */\n selectedRowIdxs?: number[];\n className?: string;\n style?: CSSProperties;\n /**\n * The variant to use. Options are `primary` and `secondary`. Default value is\n * `primary`. `secondary` variant changes grid background to reduce contrast.\n * */\n variant?: \"primary\" | \"secondary\";\n /**\n * Options are `single`, `multi` and `none`.\n * */\n rowSelectionMode?: GridRowSelectionMode;\n onRowSelected?: (selectedRowIdxs: number[]) => void;\n /**\n * If `true`, user will be able to move columns using drag and drop.\n * */\n columnMove?: boolean;\n /**\n * Accepts `(columnId: string, fromIndex: number, toIndex: number) => void`\n * */\n onColumnMoved?: GridColumnMoveHandler;\n /**\n * Options are `range` and `none`.\n * */\n cellSelectionMode?: GridCellSelectionMode;\n onVisibleRowRangeChange?: (start: number, end: number) => void;\n /**\n * If `true`, keyboard navigation is enabled for the header.\n * */\n headerIsFocusable?: boolean;\n\n getRowValidationStatus?: (\n row: GridRowModel<T>,\n ) => CellValidationState | undefined;\n}\n\nexport interface GridRowModel<T> {\n key: string;\n index: number;\n data: T;\n}\n\nexport interface GridColumnModel<T> {\n index: number;\n separator: ColumnSeparatorType;\n\n info: GridColumnInfo<T>;\n}\n\nexport interface GridColumnGroupModel {\n index: number;\n data: ColumnGroupProps;\n childrenIds: string[];\n rowSeparator: ColumnGroupRowSeparatorType;\n columnSeparator: ColumnGroupColumnSeparatorType;\n colSpan: number;\n}\n\nfunction defaultRowKeyGetter<T>(row: T, index: number): string {\n return `${index}`;\n}\n\nexport const Grid = function Grid<T>(props: GridProps<T>) {\n const {\n rowData,\n zebra,\n hideHeader,\n columnSeparators,\n pinnedSeparators = true,\n className,\n style,\n rowKeyGetter = defaultRowKeyGetter,\n children,\n defaultSelectedRowIdxs,\n selectedRowIdxs,\n variant = \"primary\",\n rowSelectionMode = \"multi\",\n onRowSelected,\n columnMove,\n onColumnMoved,\n cellSelectionMode = \"none\",\n onVisibleRowRangeChange,\n headerIsFocusable,\n getRowValidationStatus,\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-grid\",\n css: gridCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const scrollableRef = useRef<HTMLDivElement>(null);\n const middleRef = useRef<HTMLDivElement>(null);\n const topRef = useRef<HTMLDivElement>(null);\n const leftRef = useRef<HTMLDivElement>(null);\n const rightRef = useRef<HTMLDivElement>(null);\n const bottomRef = useRef<HTMLDivElement>(null);\n\n // What caused the latest scroll change. User means the UI (mouse events), table means the component initiated scrolling (scrollToCell was called for example)\n const [scrollSource, setScrollSource] = useState<\"user\" | \"table\">(\"user\");\n const [scrollLeft, setScrollLeft] = useState<number>(0);\n const [scrollTop, setScrollTop] = useState<number>(0);\n\n const [hoverRowKey, setHoverRowKey] = useState<string | undefined>(undefined);\n\n const [\n { clientWidth, clientHeight, scrollBarHeight, scrollBarWidth },\n setDimensions,\n ] = useState({\n clientWidth: 0,\n clientHeight: 0,\n scrollBarHeight: 0,\n scrollBarWidth: 0,\n });\n\n const [rowHeight, setRowHeight] = useState<number>(0);\n\n const [cursorRowIdx, setCursorRowIdx] = useState<number>(0);\n const [cursorColIdx, setCursorColIdx] = useState<number>(0);\n const [focusedPart, setFocusedPart] = useState<FocusedPart>(\n headerIsFocusable ? \"header\" : \"body\",\n );\n\n const [sortByColumnId, setSortByColumnId] =\n useState<GridColumnProps[\"id\"]>(\"\");\n const [sortOrder, setSortOrder] = useState<SortOrder>(SortOrder.NONE);\n\n const [editMode, setEditMode] = useState<boolean>(false);\n const [initialText, setInitialText] = useState<string | undefined>(undefined);\n\n const resizeClient: ScrollableProps<T>[\"resizeClient\"] = useCallback(\n (dimensions) => {\n setDimensions(dimensions);\n },\n [],\n );\n\n const {\n leftCols, // Columns pinned to left\n midCols, // Scrollable columns\n rightCols, // Columns pinned to right\n leftGroups,\n midGroups,\n rightGroups,\n contextValue,\n } = useColumnRegistry<T>(children);\n\n const midColsById = useMemo(\n () =>\n new Map<string, GridColumnModel<T>>(\n midCols.map(\n (c) => [c.info.props.id, c] as [string, GridColumnModel<T>],\n ),\n ),\n [midCols],\n );\n\n // Width of all columns pinned to left\n const leftWidth = useSumWidth(leftCols);\n // Width of all scrollable columns\n const midWidth = useSumWidth(midCols);\n // Width of all columns pinned to right\n const rightWidth = useSumWidth(rightCols);\n // Total width of all columns\n const totalWidth = useSum([leftWidth, midWidth, rightWidth]);\n\n const hasColumnGroups =\n leftGroups.length > 0 || midGroups.length > 0 || rightGroups.length > 0;\n\n const headRowCount = hideHeader ? 0 : hasColumnGroups ? 2 : 1; // TODO multiple group levels\n const rowCount = rowData.length;\n\n // Footer is not implemented yet.\n const botRowCount = 0; // TODO\n // Height of the header\n const topHeight = rowHeight * headRowCount;\n // Height of the middle part (virtual height)\n const midHeight = rowCount === 0 ? 0 : rowHeight * rowCount + 1;\n // Height of the footer\n const botHeight = botRowCount * rowHeight;\n // Total height of the grid (virtual)\n const totalHeight = useSum([topHeight, midHeight, botHeight]);\n // Client width of the middle part of the grid (viewport)\n const clientMidWidth = useClientMidWidth(clientWidth, leftWidth, rightWidth);\n // Unused width in the middle part, to be filled by an empty column with fake cells.\n const midGap = Math.max(0, Math.floor(clientMidWidth - midWidth));\n\n // Range of unpinned columns visible in the body of the grid (pinned columns are always visible).\n const bodyVisColRng = useBodyVisibleColumnRange(\n midCols,\n scrollLeft,\n clientMidWidth,\n );\n\n const midGrpByColId = useMemo(() => {\n const m = new Map<string, GridColumnGroupModel>();\n for (const g of midGroups) {\n for (const c of g.childrenIds) {\n m.set(c, g);\n }\n }\n return m;\n }, [midGroups]);\n\n // Range of visible column groups.\n const visColGrpRng = useVisibleColumnGroupRange(\n bodyVisColRng,\n midCols,\n midGrpByColId,\n leftGroups.length,\n );\n\n const visColGrps = useMemo(() => {\n return midGroups.slice(visColGrpRng.start, visColGrpRng.end);\n }, [visColGrpRng, midGroups]);\n\n const headVisColRng = useHeadVisibleColumnRange(\n bodyVisColRng,\n visColGrps,\n midColsById,\n leftCols.length,\n );\n\n const bodyScrOutColWh = useLeftScrolledOutWidth(midCols, bodyVisColRng);\n const headScrOutColWh = useLeftScrolledOutWidth(midCols, headVisColRng);\n\n const bodyVisAreaLeft = useSum([leftWidth, bodyScrOutColWh]);\n const headVisAreaLeft = useSum([leftWidth, headScrOutColWh]);\n const clientMidHeight = useClientMidHeight(\n clientHeight,\n topHeight,\n botHeight,\n );\n const visRowRng = useVisibleRowRange(\n scrollTop,\n clientMidHeight,\n rowHeight,\n rowCount,\n );\n\n const bodyVisAreaTop = useBodyVisibleAreaTop(rowHeight, visRowRng, topHeight);\n\n const bodyVisibleColumns = useColumnRange(midCols, bodyVisColRng);\n const headVisibleColumns = useColumnRange(midCols, headVisColRng);\n const bodyVisColWh = useSumRangeWidth(midCols, bodyVisColRng);\n\n const headVisColWh = bodyVisColWh; // TODO implement groups\n\n const rootStyle = useMemo(\n () => ({\n ...style,\n \"--grid-total-width\": `${totalWidth}px`,\n \"--grid-total-height\": `${totalHeight}px`,\n \"--grid-topPart-height\": `${topHeight}px`,\n \"--grid-leftPart-width\": `${leftWidth}px`,\n \"--grid-rightPart-width\": `${rightWidth}px`,\n \"--grid-bodyVisibleColumns-width\": `${bodyVisColWh}px`,\n \"--grid-bodyVisibleArea-top\": `${bodyVisAreaTop}px`,\n \"--grid-bodyVisibleArea-left\": `${bodyVisAreaLeft}px`,\n \"--grid-bottomHeight\": `${botHeight}px`,\n \"--grid-headerVisibleColumns-width\": `${headVisColWh}px`,\n \"--grid-headerVisibleArea-left\": `${headVisAreaLeft}px`,\n \"--grid-scrollBar-height\": `${scrollBarHeight}px`,\n \"--grid-scrollBar-width\": `${scrollBarWidth}px`,\n }),\n [\n style,\n totalHeight,\n totalWidth,\n topHeight,\n leftWidth,\n rightWidth,\n botHeight,\n bodyVisColWh,\n bodyVisAreaLeft,\n bodyVisAreaTop,\n headVisColWh,\n headVisAreaLeft,\n scrollBarHeight,\n scrollBarWidth,\n ],\n );\n\n const onWheel: EventListener = useCallback(\n (event) => {\n let { deltaX, deltaY, shiftKey } = event as WheelEvent;\n if (deltaX === 0 && shiftKey) {\n deltaX = deltaY;\n deltaY = 0;\n }\n const s = scrollableRef.current;\n if (s) {\n s.scrollLeft += deltaX;\n s.scrollTop += deltaY;\n if (\n !(\n (\n Math.round(s.scrollHeight - s.scrollTop) === s.clientHeight || // reached the bottom\n (s.scrollTop === 0 && deltaY < 0)\n ) // reached the top (upward scroll)\n )\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n },\n [scrollableRef.current],\n );\n\n const cols = useMemo(\n () => [...leftCols, ...midCols, ...rightCols],\n [leftCols, midCols, rightCols],\n );\n\n const colsById = useMemo(\n () =>\n new Map<string, GridColumnModel<T>>(\n cols.map((c) => [c.info.props.id, c] as [string, GridColumnModel<T>]),\n ),\n [cols],\n );\n\n const getColById = useCallback(\n (id: string) => {\n return colsById.get(id);\n },\n [colsById],\n );\n\n const columnDataContext: ColumnDataContext<T> = useMemo(\n () => ({\n getColById,\n }),\n [getColById],\n );\n\n const isSortMode = sortByColumnId && sortOrder !== SortOrder.NONE;\n\n const onSortOrderChange =\n getColById(sortByColumnId)?.info.props.onSortOrderChange;\n\n const valueGetter =\n getColById(sortByColumnId)?.info.props.getValue ||\n ((r: T) => {\n return r[sortByColumnId as keyof typeof r];\n });\n\n const customSortingFn = getColById(sortByColumnId)?.info.props.customSort;\n\n const sortedRowData = useMemo(() => {\n if (!isSortMode || onSortOrderChange) return rowData;\n\n if (customSortingFn) {\n return customSortingFn({ rowData, sortOrder });\n }\n\n const sortedData = [...rowData].sort((a, b) =>\n valueGetter(a) < valueGetter(b) ? -1 : 1,\n );\n\n if (sortOrder === SortOrder.DESC) {\n return sortedData.reverse();\n }\n\n return sortedData;\n }, [\n onSortOrderChange,\n valueGetter,\n customSortingFn,\n isSortMode,\n rowData,\n sortByColumnId,\n sortOrder,\n ]);\n\n const onClickSortColumn = useCallback(\n (colHeaderId: GridColumnProps[\"id\"]) => {\n if (sortByColumnId === colHeaderId) {\n switch (sortOrder) {\n case SortOrder.ASC:\n setSortOrder(SortOrder.DESC);\n break;\n case SortOrder.DESC:\n setSortOrder(SortOrder.NONE);\n break;\n default:\n setSortOrder(SortOrder.ASC);\n }\n } else {\n setSortByColumnId(colHeaderId);\n setSortOrder(SortOrder.ASC);\n }\n },\n [sortByColumnId, sortOrder],\n );\n\n const columnSortContext: ColumnSortContext = useMemo(\n () => ({\n sortByColumnId,\n setSortByColumnId,\n sortOrder,\n setSortOrder,\n onClickSortColumn,\n }),\n [\n sortByColumnId,\n setSortByColumnId,\n sortOrder,\n setSortOrder,\n onClickSortColumn,\n ],\n );\n\n const scroll = useCallback(\n (left?: number, top?: number, source?: \"user\" | \"table\") => {\n setScrollSource(source || \"user\");\n if (left !== undefined) {\n setScrollLeft(left);\n }\n if (top !== undefined) {\n setScrollTop(top);\n }\n },\n [setScrollLeft, setScrollTop, setScrollSource],\n );\n\n const scrollToCell = useScrollToCell(\n visRowRng,\n rowHeight,\n clientMidHeight,\n midCols,\n bodyVisColRng,\n clientMidWidth,\n scroll,\n );\n\n const focusCellElement = (\n part: FocusedPart,\n rowIdx: number,\n colIdx: number,\n ) => {\n setTimeout(() => {\n const selector =\n part === \"body\"\n ? `td[data-row-index=\"${rowIdx}\"][data-column-index=\"${colIdx}\"]`\n : `th[data-column-index=\"${colIdx}\"]`;\n const nodeToFocus = rootRef.current?.querySelector(selector);\n if (nodeToFocus) {\n (nodeToFocus as HTMLElement).focus({ preventScroll: true });\n } else {\n console.warn(`focusCellElement can't find the element`);\n }\n }, 0);\n };\n\n const startEditMode = (text?: string) => {\n if (editMode || cursorRowIdx === undefined || cursorColIdx === undefined) {\n return;\n }\n const c = cols[cursorColIdx];\n const isEditable = !!contextValue.getEditor(c.info.props.id);\n if (isEditable) {\n setInitialText(text);\n setEditMode(true);\n }\n };\n\n const endEditMode = (value: string) => {\n if (!editMode) {\n return;\n }\n if (cursorColIdx === undefined) {\n console.error(\"endEditMode: cursorColIdx is undefined in edit mode\");\n return;\n }\n const c = cols[cursorColIdx];\n const handler = c.info.props.onChange;\n if (cursorRowIdx === undefined) {\n console.error(\"endEditMode: cursorRowIdx is undefined in edit mode\");\n return;\n }\n if (!handler) {\n console.warn(\n `onChange is not specified for editable column \"${c.info.props.id}\".`,\n );\n } else {\n handler(sortedRowData[cursorRowIdx], cursorRowIdx, value);\n }\n setEditMode(false);\n focusCellElement(focusedPart, cursorRowIdx, cursorColIdx);\n };\n\n const cancelEditMode = () => {\n if (!editMode) {\n return;\n }\n setEditMode(false);\n if (cursorRowIdx != null && cursorColIdx != null) {\n focusCellElement(focusedPart, cursorRowIdx, cursorColIdx);\n }\n };\n\n const {\n selRowIdxs,\n isAllSelected,\n isAnySelected,\n selectAll,\n selectRows,\n unselectAll,\n onMouseDown: onRowSelectionMouseDown,\n } = useRowSelection(\n rowKeyGetter,\n sortedRowData,\n defaultSelectedRowIdxs,\n selectedRowIdxs,\n rowSelectionMode,\n onRowSelected,\n );\n\n const rangeSelection = useRangeSelection(cellSelectionMode);\n\n const moveCursor = useCallback(\n (part: FocusedPart, rowIdx: number, colIdx: number) => {\n if (!headerIsFocusable && part === \"header\") {\n console.warn(\n `Cannot move focus to the header. \"headerIsFocusable\" prop is false.`,\n );\n return;\n }\n setFocusedPart(part);\n colIdx = clamp(colIdx, 0, cols.length - 1);\n if (part === \"body\") {\n if (sortedRowData.length < 1 || cols.length < 1) {\n return;\n }\n rowIdx = clamp(rowIdx, 0, sortedRowData.length - 1);\n } else if (part === \"header\") {\n rowIdx = 0; // There is only one row in the header currently\n }\n setCursorRowIdx(rowIdx);\n setCursorColIdx(colIdx);\n scrollToCell(part, rowIdx, colIdx);\n focusCellElement(part, rowIdx, colIdx);\n if (part === \"body\") {\n rangeSelection.onCursorMove({ rowIdx, colIdx });\n }\n },\n [\n setCursorRowIdx,\n setCursorColIdx,\n sortedRowData,\n rowKeyGetter,\n cols,\n rootRef.current,\n scrollToCell,\n endEditMode,\n rangeSelection.onCursorMove,\n focusedPart,\n headerIsFocusable,\n ],\n );\n\n const rows = useRowModels(rowKeyGetter, sortedRowData, visRowRng);\n\n const isLeftRaised = scrollLeft > 0;\n const isRightRaised = scrollLeft + clientMidWidth < midWidth;\n const isHeaderRaised = scrollTop > 0;\n\n const resizeColumn = useCallback(\n (colIdx: number, width: number) => {\n const col = cols[colIdx];\n col.info.onWidthChanged(width);\n },\n [cols],\n );\n\n const onResizeHandleMouseDown = useColumnResize(cols, resizeColumn);\n\n const sizingContext: SizingContext = useMemo(\n () => ({\n resizeColumn,\n rowHeight,\n onResizeHandleMouseDown,\n }),\n [resizeColumn, rowHeight, onResizeHandleMouseDown],\n );\n\n const layoutContext: LayoutContext = useMemo(\n () => ({\n totalHeight,\n totalWidth,\n clientWidth,\n clientHeight,\n }),\n [totalHeight, totalWidth],\n );\n\n const editorContext: EditorContext = useMemo(\n () => ({\n initialText,\n editMode,\n startEditMode,\n endEditMode,\n cancelEditMode,\n }),\n [editMode, startEditMode, endEditMode, cancelEditMode, initialText],\n );\n\n const [isFocused, setFocused] = useState<boolean>(false);\n\n const onFocus = useCallback(() => {\n setFocused(true);\n }, []);\n\n const onBlur = useCallback(() => {\n setFocused(false);\n }, []);\n\n const cursorContext: CursorContext = useMemo(\n () => ({\n isFocused,\n cursorRowIdx,\n cursorColIdx,\n moveCursor,\n focusedPart,\n headerIsFocusable: Boolean(headerIsFocusable),\n }),\n [\n cursorRowIdx,\n cursorColIdx,\n moveCursor,\n isFocused,\n focusedPart,\n headerIsFocusable,\n ],\n );\n\n const onColumnMove: GridColumnMoveHandler = (\n columnId,\n fromIndex,\n toIndex,\n ) => {\n if (onColumnMoved && fromIndex !== toIndex) {\n onColumnMoved(columnId, fromIndex, toIndex);\n }\n };\n\n const {\n dragState,\n onColumnMoveHandleMouseDown,\n activeTarget,\n onColumnMoveCancel,\n } = useColumnMove(\n columnMove,\n rootRef,\n leftCols,\n midCols,\n rightCols,\n cols,\n scrollLeft,\n clientMidWidth,\n onColumnMove,\n );\n\n const columnDragContext: ColumnDragContext = useMemo(\n () => ({\n columnMove,\n onColumnMoveHandleMouseDown,\n }),\n [columnMove, onColumnMoveHandleMouseDown],\n );\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n onRowSelectionMouseDown(event);\n rangeSelection.onCellMouseDown(event);\n\n const target = event.target as HTMLElement;\n try {\n const { part, rowIndex, columnIndex } = getFocusablePosition(target);\n if (part === \"header\" && !headerIsFocusable) {\n return;\n }\n moveCursor(part, rowIndex, columnIndex);\n } catch (e) {\n // TODO\n }\n };\n\n const onKeyUp: KeyboardEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n const { key } = event;\n if (key === \"Shift\") {\n rangeSelection.onKeyboardRangeSelectionEnd();\n }\n },\n [rangeSelection.onKeyboardRangeSelectionEnd],\n );\n\n const editModeKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"F2\":\n case \"Enter\":\n startEditMode();\n break;\n case \"Backspace\":\n startEditMode(\"\");\n break;\n case \"Escape\":\n if (editMode) {\n cancelEditMode();\n break;\n }\n return false;\n default:\n if (\n !editMode &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n /^[\\w\\d ]$/.test(key)\n ) {\n startEditMode(key);\n } else {\n return false;\n }\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [startEditMode, editMode, cancelEditMode],\n );\n\n const selectionKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"Shift\":\n rangeSelection.onKeyboardRangeSelectionStart({\n rowIdx: cursorRowIdx || 0,\n colIdx: cursorColIdx || 0,\n });\n break;\n case \" \":\n if (focusedPart === \"body\") {\n if (event.ctrlKey) {\n if (cursorColIdx !== undefined) {\n rangeSelection.selectRange({\n start: { rowIdx: 0, colIdx: cursorColIdx },\n end: { rowIdx: sortedRowData.length, colIdx: cursorColIdx },\n });\n }\n } else {\n if (cursorRowIdx !== undefined) {\n selectRows({\n rowIndex: cursorRowIdx,\n isRange: false,\n incremental: true,\n unselectOtherRows: !event.shiftKey,\n });\n }\n }\n break;\n }\n return false;\n case \"a\":\n if (event.ctrlKey || event.metaKey) {\n rangeSelection.selectRange({\n start: { rowIdx: 0, colIdx: 0 },\n end: { rowIdx: sortedRowData.length, colIdx: cols.length },\n });\n selectAll();\n return true;\n }\n return false;\n default:\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [\n rangeSelection.selectRange,\n rangeSelection.onKeyboardRangeSelectionStart,\n selectRows,\n selectAll,\n cursorColIdx,\n cursorRowIdx,\n sortedRowData.length,\n cols.length,\n focusedPart,\n ],\n );\n\n const clipboardKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n if (\n key === \"c\" &&\n (event.ctrlKey || event.metaKey) &&\n rangeSelection.selectedCellRange\n ) {\n const { start, end } = rangeSelection.selectedCellRange;\n const c = (x: number, y: number) => x - y;\n const [minRow, maxRow] = [start.rowIdx, end.rowIdx].sort(c);\n const [minCol, maxCol] = [start.colIdx, end.colIdx].sort(c);\n const text: string[] = [];\n for (let r = minRow; r <= maxRow; ++r) {\n const row = sortedRowData[r];\n const rowText: string[] = [];\n for (let c = minCol; c <= maxCol; ++c) {\n const col = cols[c];\n const cellValue = col?.info.props.getValue?.(row);\n rowText.push(cellValue);\n }\n text.push(rowText.join(\"\\t\"));\n }\n navigator.clipboard.writeText(text.join(\"\\n\"));\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n return false;\n },\n [rangeSelection.selectedCellRange],\n );\n\n const pageSize = Math.max(1, visRowRng.length - 1);\n\n const navigationKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"ArrowLeft\":\n moveCursor(focusedPart, cursorRowIdx, (cursorColIdx || 0) - 1);\n break;\n case \"ArrowRight\":\n moveCursor(focusedPart, cursorRowIdx, (cursorColIdx || 0) + 1);\n break;\n case \"ArrowUp\":\n if (cursorRowIdx === 0 && headerIsFocusable) {\n moveCursor(\"header\", 0, cursorColIdx);\n } else {\n moveCursor(focusedPart, (cursorRowIdx || 0) - 1, cursorColIdx);\n }\n break;\n case \"ArrowDown\":\n if (focusedPart === \"header\") {\n moveCursor(\"body\", 0, cursorColIdx);\n } else {\n moveCursor(focusedPart, (cursorRowIdx || 0) + 1, cursorColIdx);\n }\n break;\n case \"PageUp\":\n if (cursorRowIdx === 0 && headerIsFocusable) {\n moveCursor(\"header\", 0, cursorColIdx);\n } else {\n moveCursor(\n focusedPart,\n (cursorRowIdx || 0) - pageSize,\n cursorColIdx,\n );\n }\n break;\n case \"PageDown\":\n if (focusedPart === \"header\") {\n moveCursor(\"body\", 0, cursorColIdx);\n } else {\n moveCursor(\n focusedPart,\n (cursorRowIdx || 0) + pageSize,\n cursorColIdx,\n );\n }\n break;\n case \"Home\":\n if (!event.ctrlKey) {\n moveCursor(focusedPart, cursorRowIdx, 0);\n } else {\n moveCursor(focusedPart, 0, 0);\n }\n break;\n case \"End\":\n if (!event.ctrlKey) {\n moveCursor(focusedPart, cursorRowIdx, cols.length - 1);\n } else {\n moveCursor(focusedPart, sortedRowData.length - 1, cols.length - 1);\n }\n break;\n case \"Tab\":\n if (\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n editMode &&\n cursorColIdx != null &&\n cursorRowIdx != null\n ) {\n if (!event.shiftKey) {\n if (cursorColIdx < cols.length - 1) {\n moveCursor(focusedPart, cursorRowIdx, cursorColIdx + 1);\n } else {\n if (cursorRowIdx < sortedRowData.length - 1) {\n moveCursor(focusedPart, cursorRowIdx + 1, 0);\n }\n }\n } else {\n if (cursorColIdx > 0) {\n moveCursor(focusedPart, cursorRowIdx, cursorColIdx - 1);\n } else {\n if (cursorRowIdx > 0) {\n moveCursor(focusedPart, cursorRowIdx - 1, cols.length - 1);\n }\n }\n }\n } else {\n return false;\n }\n break;\n case \"Enter\":\n if (\n editMode &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n !event.shiftKey\n ) {\n if (cursorRowIdx === undefined) {\n moveCursor(focusedPart, 0, 0);\n } else {\n moveCursor(focusedPart, cursorRowIdx + 1, cursorColIdx);\n }\n } else {\n return false;\n }\n break;\n default:\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [\n moveCursor,\n cursorRowIdx,\n cursorRowIdx,\n cols.length,\n sortedRowData.length,\n headerIsFocusable,\n pageSize,\n ],\n );\n\n const columnMoveKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n if (key === \"Escape\") {\n onColumnMoveCancel();\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n return false;\n },\n [],\n );\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n if (cursorColIdx !== undefined && cursorRowIdx !== undefined) {\n const column = cols[cursorColIdx];\n if (column.info.props.onKeyDown) {\n column.info.props.onKeyDown(event, cursorRowIdx);\n }\n }\n if (!event.isPropagationStopped()) {\n // each handler returns true or false\n // if the event is handled and should not be handled by anything else return true\n // if the event is not handled and we should keep trying other handlers return false\n [\n navigationKeyHandler,\n clipboardKeyHandler,\n selectionKeyHandler,\n editModeKeyHandler,\n columnMoveKeyHandler,\n ].find((handler) => {\n return handler(event);\n });\n }\n },\n [\n navigationKeyHandler,\n clipboardKeyHandler,\n selectionKeyHandler,\n editModeKeyHandler,\n columnMoveKeyHandler,\n ],\n );\n\n const selectionContext: SelectionContext = useMemo(\n () => ({\n selRowIdxs,\n selectRows,\n isAllSelected,\n isAnySelected,\n selectAll,\n unselectAll,\n selectedCellRange: rangeSelection?.selectedCellRange,\n }),\n [\n selRowIdxs,\n selectRows,\n isAllSelected,\n isAnySelected,\n selectAll,\n unselectAll,\n rangeSelection?.selectedCellRange,\n ],\n );\n\n useEffect(() => {\n if (onVisibleRowRangeChange) {\n onVisibleRowRangeChange(visRowRng.start, visRowRng.end);\n }\n }, [onVisibleRowRangeChange, visRowRng]);\n\n return (\n <GridContext.Provider value={contextValue}>\n <LayoutContext.Provider value={layoutContext}>\n <SelectionContext.Provider value={selectionContext}>\n <ColumnDragContext.Provider value={columnDragContext}>\n <CursorContext.Provider value={cursorContext}>\n <SizingContext.Provider value={sizingContext}>\n <EditorContext.Provider value={editorContext}>\n <ColumnDataContext.Provider value={columnDataContext}>\n <ColumnSortContext.Provider value={columnSortContext}>\n {props.children}\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"zebra\")]: zebra,\n [withBaseName(\"columnSeparators\")]:\n columnSeparators,\n [withBaseName(\"pinnedSeparators\")]:\n pinnedSeparators,\n [withBaseName(\"primaryBackground\")]:\n variant === \"primary\",\n [withBaseName(\"secondaryBackground\")]:\n variant === \"secondary\",\n },\n className,\n )}\n style={rootStyle}\n ref={rootRef}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onMouseDown={onMouseDown}\n onFocus={onFocus}\n onBlur={onBlur}\n data-name=\"grid-root\"\n role=\"grid\"\n aria-colcount={cols.length}\n aria-rowcount={rowCount + headRowCount}\n aria-multiselectable={rowSelectionMode === \"multi\"}\n >\n <CellMeasure setRowHeight={setRowHeight} />\n <Scrollable\n resizeClient={resizeClient}\n scrollLeft={scrollLeft}\n scrollTop={scrollTop}\n scrollSource={scrollSource}\n scroll={scroll}\n scrollerRef={scrollableRef}\n topRef={topRef}\n rightRef={rightRef}\n bottomRef={bottomRef}\n leftRef={leftRef}\n middleRef={middleRef}\n />\n {!hideHeader && leftCols.length > 0 && (\n <TopLeftPart\n onWheel={onWheel}\n columns={leftCols}\n columnGroups={leftGroups}\n rightShadow={isLeftRaised}\n bottomShadow={isHeaderRaised}\n />\n )}\n {!hideHeader && (\n <TopPart\n columns={headVisibleColumns}\n columnGroups={visColGrps}\n topRef={topRef}\n onWheel={onWheel}\n midGap={midGap}\n bottomShadow={isHeaderRaised}\n />\n )}\n {!hideHeader && rightCols.length > 0 && (\n <TopRightPart\n onWheel={onWheel}\n columns={rightCols}\n columnGroups={rightGroups}\n leftShadow={isRightRaised}\n bottomShadow={isHeaderRaised}\n />\n )}\n {leftCols.length > 0 && (\n <LeftPart\n leftRef={leftRef}\n onWheel={onWheel}\n columns={leftCols}\n rows={rows}\n rightShadow={isLeftRaised}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n zebra={zebra}\n getRowValidationStatus={getRowValidationStatus}\n />\n )}\n <MiddlePart\n middleRef={middleRef}\n onWheel={onWheel}\n columns={bodyVisibleColumns}\n rows={rows}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n midGap={midGap}\n zebra={zebra}\n getRowValidationStatus={getRowValidationStatus}\n />\n {rightCols.length > 0 && (\n <RightPart\n rightRef={rightRef}\n onWheel={onWheel}\n columns={rightCols}\n rows={rows}\n leftShadow={isRightRaised}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n zebra={zebra}\n getRowValidationStatus={getRowValidationStatus}\n />\n )}\n <ColumnDropTarget x={activeTarget?.x} />\n <ColumnGhost\n columns={cols}\n rows={rows}\n dragState={dragState}\n zebra={zebra}\n />\n </div>\n </ColumnSortContext.Provider>\n </ColumnDataContext.Provider>\n </EditorContext.Provider>\n </SizingContext.Provider>\n </CursorContext.Provider>\n </ColumnDragContext.Provider>\n </SelectionContext.Provider>\n </LayoutContext.Provider>\n </GridContext.Provider>\n );\n};\n"],"names":["SortOrder","Grid","gridCss","_a","_b","c"],"mappings":"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"}