@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
@@ -1 +1 @@
1
- {"version":3,"file":"GridColumn.js","sources":["../src/GridColumn.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n ComponentType,\n CSSProperties,\n isValidElement,\n KeyboardEvent,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { useGridContext } from \"./GridContext\";\nimport { GridColumnModel, GridRowModel, SortOrder } from \"./Grid\";\n\nexport type GridColumnPin = \"left\" | \"right\" | null;\n\nexport type CellValidationState = \"error\" | \"warning\" | \"success\";\ntype CellValidationType = \"strong\" | \"light\";\n\nexport interface GridCellProps<T, U = any> {\n row: GridRowModel<T>;\n column: GridColumnModel<T>;\n className?: string;\n style?: CSSProperties;\n isFocused?: boolean;\n isSelected?: boolean;\n isEditable?: boolean;\n children?: ReactNode;\n align?: GridColumnProps[\"align\"];\n value?: U;\n validationStatus?: CellValidationState;\n validationMessage?: string;\n validationType?: CellValidationType;\n}\n\nexport interface GridCellValueProps<T, U = any> {\n row: GridRowModel<T>;\n column: GridColumnModel<T>;\n isFocused?: boolean;\n value?: U;\n validationStatus?: CellValidationState;\n validationMessage?: string;\n validationType?: CellValidationType;\n}\n\nexport interface HeaderCellProps<T> {\n column: GridColumnModel<T>;\n children: ReactNode;\n isFocused?: boolean;\n}\n\nexport interface GridHeaderValueProps<T> {\n column: GridColumnModel<T>;\n isFocused?: boolean;\n}\n\nexport interface GridEditorProps<T> {\n row: GridRowModel<T>;\n column: GridColumnModel<T>;\n}\n\nexport interface GridColumnProps<T = any> {\n /**\n * Unique identifier of the column.\n * */\n id: string; // TODO make optional\n /**\n * Enables sorting (by sort order: `asc | desc | none`) for the column.\n * To enable column header's keyboard navigation on sort,\n * users need to set `headerIsFocusable` prop to `true` in Grid component.\n * To customise how GridColumn data sorts, use also `customSort` or `onSortOrderChanged`.\n * */\n sortable?: boolean;\n /**\n * Custom sorting function. Use for client side sorting.\n * */\n customSort?: (args: { rowData: T[]; sortOrder: SortOrder }) => T[];\n /**\n * Exposes GridColumn sort order. Use for server side sorting.\n * */\n onSortOrderChange?: (args: { sortOrder: SortOrder }) => void;\n /**\n * Name is displayed on the column header by default.\n * */\n name?: string;\n /**\n * Default width of the column in `px`.\n * */\n defaultWidth?: number;\n /**\n * Min width of the column.\n * */\n minWidth?: number;\n /**\n * Callback invoked when the user resizes the column.\n * */\n onWidthChanged?: (width: number) => void;\n /**\n * Whether the column should be pinned `left` or `right`. By default columns\n * are unpinned. Accepts `\"left\" | \"right\" | null`.\n * */\n pinned?: GridColumnPin;\n /**\n * Text align for the header and cells.\n * */\n align?: \"left\" | \"right\";\n /**\n * Component to render for every cell in the column. Useful when major\n * customization is needed. Use this only if `cellValueComponent` is not\n * sufficient. Default implementation of cell component takes care of\n * selection, hover, focus and other basic grid features.\n * */\n cellComponent?: ComponentType<GridCellProps<T>>;\n /**\n * Component to render inside every cell. This is the preferred way of\n * customizing grid cells.\n * */\n cellValueComponent?: ComponentType<GridCellValueProps<T>>;\n /**\n * Cell value getter. Should return the value to be displayed in the cell\n * for the given row data item.\n * */\n getValue?: (rowData: T) => any;\n /**\n * Cell validation status getter. Should return one of the known validation status names: \"none\" | \"error\" | \"warning\"\n * If you require a custom validation status, you can achieve that by providing a custom cell component.\n * */\n getValidationStatus?: (\n value: GridCellValueProps<T>\n ) => CellValidationState | undefined;\n /**\n * Cell validation status message getter. Should return a string description of the validation state that can be used for the screen reader.\n * This prop is optional but if you don't provide a function a default message will be used.\n * */\n getValidationMessage?: (value: GridCellValueProps<T>) => string | undefined;\n /**\n * Cell validation type. Determines the visual style of the validation. The available values are \"strong\" and \"light\". Strong will display the icon\n * along side the background and border. Light will only affect border and background. Use light if you are validation the whole row, and optionally\n * strong on one of the columns, and strong if you are validating user input on a particular cell.\n * The default value is \"light\".\n * */\n validationType?: GridCellProps<T>[\"validationType\"];\n /**\n * CSS class to be applied to the column header.\n * Useful for minor customizations\n * */\n headerClassName?: string;\n /**\n * Custom header component. Use this when `headerValueComponent` doesn't\n * provide enough flexibility.\n * */\n headerComponent?: ComponentType<HeaderCellProps<T>>;\n /**\n * Renders the content of the column header. This is the preferred way of\n * customizing column headers.\n * */\n headerValueComponent?: ComponentType<GridHeaderValueProps<T>>;\n /**\n * A callback to be invoked when the user modifies a cell value.\n * */\n onChange?: (row: T, rowIndex: number, value: string) => void;\n /**\n * A callback to be invoked on key down when the focus is in this column.\n */\n onKeyDown?: (event: KeyboardEvent<HTMLDivElement>, rowIndex: number) => void;\n /**\n * Children is optional, and accepts non-rendered elements i.e. `CellEditor`\n */\n children?: ReactNode;\n /**\n * aria-label is optional, and accepts any string value\n */\n \"aria-label\"?: string;\n}\n\nexport interface GridColumnInfo<T> {\n width: number;\n onWidthChanged: (width: number) => void;\n props: GridColumnProps<T>;\n}\n\nexport const GridColumn = function GridColumn<T = any>(\n props: GridColumnProps<T>\n) {\n const { defaultWidth } = props;\n const indexRef = useRef<number>();\n const [width, setWidth] = useState<number>(\n defaultWidth !== undefined ? defaultWidth : 100\n );\n\n const grid = useGridContext();\n\n const onWidthChanged = (w: number) => {\n setWidth(w);\n if (props.onWidthChanged) {\n props.onWidthChanged(w);\n }\n };\n\n const info: GridColumnInfo<T> = {\n width,\n onWidthChanged,\n props,\n };\n\n useEffect(() => {\n indexRef.current = grid.getChildIndex(props.id);\n grid.onColumnAdded(info);\n return () => {\n grid.onColumnRemoved(indexRef.current!, info);\n };\n });\n\n return (\n <>\n {Children.map(props.children, (ch) =>\n isValidElement(ch)\n ? cloneElement(ch, { columnId: props.id } as any)\n : ch\n )}\n </>\n );\n};\n"],"names":["GridColumn"],"mappings":";;;;AAsLa,MAAA,UAAA,GAAa,SAASA,WAAAA,CACjC,KACA,EAAA;AACA,EAAM,MAAA,EAAE,cAAiB,GAAA,KAAA,CAAA;AACzB,EAAA,MAAM,WAAW,MAAe,EAAA,CAAA;AAChC,EAAM,MAAA,CAAC,KAAO,EAAA,QAAQ,CAAI,GAAA,QAAA;AAAA,IACxB,YAAA,KAAiB,SAAY,YAAe,GAAA,GAAA;AAAA,GAC9C,CAAA;AAEA,EAAA,MAAM,OAAO,cAAe,EAAA,CAAA;AAE5B,EAAM,MAAA,cAAA,GAAiB,CAAC,CAAc,KAAA;AACpC,IAAA,QAAA,CAAS,CAAC,CAAA,CAAA;AACV,IAAA,IAAI,MAAM,cAAgB,EAAA;AACxB,MAAA,KAAA,CAAM,eAAe,CAAC,CAAA,CAAA;AAAA,KACxB;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,IAA0B,GAAA;AAAA,IAC9B,KAAA;AAAA,IACA,cAAA;AAAA,IACA,KAAA;AAAA,GACF,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,OAAU,GAAA,IAAA,CAAK,aAAc,CAAA,KAAA,CAAM,EAAE,CAAA,CAAA;AAC9C,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA,CAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAK,IAAA,CAAA,eAAA,CAAgB,QAAS,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA;AAAA,KAC9C,CAAA;AAAA,GACD,CAAA,CAAA;AAED,EACE,uBAAA,GAAA,CAAA,QAAA,EAAA;AAAA,IACG,QAAS,EAAA,QAAA,CAAA,GAAA;AAAA,MAAI,KAAM,CAAA,QAAA;AAAA,MAAU,CAAC,EAAA,KAC7B,cAAe,CAAA,EAAE,CACb,GAAA,YAAA,CAAa,EAAI,EAAA,EAAE,QAAU,EAAA,KAAA,CAAM,EAAG,EAAQ,CAC9C,GAAA,EAAA;AAAA,KACN;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"GridColumn.js","sources":["../src/GridColumn.tsx"],"sourcesContent":["import {\n type CSSProperties,\n Children,\n type ComponentType,\n type KeyboardEvent,\n type ReactNode,\n cloneElement,\n isValidElement,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport type { GridColumnModel, GridRowModel, SortOrder } from \"./Grid\";\nimport { useGridContext } from \"./GridContext\";\n\nexport type GridColumnPin = \"left\" | \"right\" | null;\n\nexport type CellValidationState = \"error\" | \"warning\" | \"success\";\ntype CellValidationType = \"strong\" | \"light\";\n\nexport interface GridCellProps<T, U = any> {\n row: GridRowModel<T>;\n column: GridColumnModel<T>;\n className?: string;\n style?: CSSProperties;\n isFocused?: boolean;\n isSelected?: boolean;\n isEditable?: boolean;\n children?: ReactNode;\n align?: GridColumnProps[\"align\"];\n value?: U;\n validationStatus?: CellValidationState;\n validationMessage?: string;\n validationType?: CellValidationType;\n}\n\nexport interface GridCellValueProps<T, U = any> {\n row: GridRowModel<T>;\n column: GridColumnModel<T>;\n isFocused?: boolean;\n value?: U;\n validationStatus?: CellValidationState;\n validationMessage?: string;\n validationType?: CellValidationType;\n}\n\nexport interface HeaderCellProps<T> {\n column: GridColumnModel<T>;\n children: ReactNode;\n isFocused?: boolean;\n}\n\nexport interface GridHeaderValueProps<T> {\n column: GridColumnModel<T>;\n isFocused?: boolean;\n}\n\nexport interface GridEditorProps<T> {\n row: GridRowModel<T>;\n column: GridColumnModel<T>;\n}\n\nexport interface GridColumnProps<T = any> {\n /**\n * Unique identifier of the column.\n * */\n id: string; // TODO make optional\n /**\n * Enables sorting (by sort order: `asc | desc | none`) for the column.\n * To enable column header's keyboard navigation on sort,\n * users need to set `headerIsFocusable` prop to `true` in Grid component.\n * To customise how GridColumn data sorts, use also `customSort` or `onSortOrderChanged`.\n * */\n sortable?: boolean;\n /**\n * Custom sorting function. Use for client side sorting.\n * */\n customSort?: (args: { rowData: T[]; sortOrder: SortOrder }) => T[];\n /**\n * Exposes GridColumn sort order. Use for server side sorting.\n * */\n onSortOrderChange?: (args: { sortOrder: SortOrder }) => void;\n /**\n * Name is displayed on the column header by default.\n * */\n name?: string;\n /**\n * Default width of the column in `px`.\n * */\n defaultWidth?: number;\n /**\n * Min width of the column.\n * */\n minWidth?: number;\n /**\n * Callback invoked when the user resizes the column.\n * */\n onWidthChanged?: (width: number) => void;\n /**\n * Whether the column should be pinned `left` or `right`. By default columns\n * are unpinned. Accepts `\"left\" | \"right\" | null`.\n * */\n pinned?: GridColumnPin;\n /**\n * Text align for the header and cells.\n * */\n align?: \"left\" | \"right\";\n /**\n * Component to render for every cell in the column. Useful when major\n * customization is needed. Use this only if `cellValueComponent` is not\n * sufficient. Default implementation of cell component takes care of\n * selection, hover, focus and other basic grid features.\n * */\n cellComponent?: ComponentType<GridCellProps<T>>;\n /**\n * Component to render inside every cell. This is the preferred way of\n * customizing grid cells.\n * */\n cellValueComponent?: ComponentType<GridCellValueProps<T>>;\n /**\n * Cell value getter. Should return the value to be displayed in the cell\n * for the given row data item.\n * */\n getValue?: (rowData: T) => any;\n /**\n * Cell validation status getter. Should return one of the known validation status names: \"none\" | \"error\" | \"warning\"\n * If you require a custom validation status, you can achieve that by providing a custom cell component.\n * */\n getValidationStatus?: (\n value: GridCellValueProps<T>,\n ) => CellValidationState | undefined;\n /**\n * Cell validation status message getter. Should return a string description of the validation state that can be used for the screen reader.\n * This prop is optional but if you don't provide a function a default message will be used.\n * */\n getValidationMessage?: (value: GridCellValueProps<T>) => string | undefined;\n /**\n * Cell validation type. Determines the visual style of the validation. The available values are \"strong\" and \"light\". Strong will display the icon\n * along side the background and border. Light will only affect border and background. Use light if you are validation the whole row, and optionally\n * strong on one of the columns, and strong if you are validating user input on a particular cell.\n * The default value is \"light\".\n * */\n validationType?: GridCellProps<T>[\"validationType\"];\n /**\n * CSS class to be applied to the column header.\n * Useful for minor customizations\n * */\n headerClassName?: string;\n /**\n * Custom header component. Use this when `headerValueComponent` doesn't\n * provide enough flexibility.\n * */\n headerComponent?: ComponentType<HeaderCellProps<T>>;\n /**\n * Renders the content of the column header. This is the preferred way of\n * customizing column headers.\n * */\n headerValueComponent?: ComponentType<GridHeaderValueProps<T>>;\n /**\n * A callback to be invoked when the user modifies a cell value.\n * */\n onChange?: (row: T, rowIndex: number, value: string) => void;\n /**\n * A callback to be invoked on key down when the focus is in this column.\n */\n onKeyDown?: (event: KeyboardEvent<HTMLDivElement>, rowIndex: number) => void;\n /**\n * Children is optional, and accepts non-rendered elements i.e. `CellEditor`\n */\n children?: ReactNode;\n /**\n * aria-label is optional, and accepts any string value\n */\n \"aria-label\"?: string;\n}\n\nexport interface GridColumnInfo<T> {\n width: number;\n onWidthChanged: (width: number) => void;\n props: GridColumnProps<T>;\n}\n\nexport const GridColumn = function GridColumn<T = any>(\n props: GridColumnProps<T>,\n) {\n const { defaultWidth } = props;\n const indexRef = useRef<number>();\n const [width, setWidth] = useState<number>(\n defaultWidth !== undefined ? defaultWidth : 100,\n );\n\n const grid = useGridContext();\n\n const onWidthChanged = (w: number) => {\n setWidth(w);\n if (props.onWidthChanged) {\n props.onWidthChanged(w);\n }\n };\n\n const info: GridColumnInfo<T> = {\n width,\n onWidthChanged,\n props,\n };\n\n useEffect(() => {\n indexRef.current = grid.getChildIndex(props.id);\n grid.onColumnAdded(info);\n return () => {\n grid.onColumnRemoved(indexRef.current!, info);\n };\n });\n\n return (\n <>\n {Children.map(props.children, (ch) =>\n isValidElement(ch)\n ? cloneElement(ch, { columnId: props.id } as any)\n : ch,\n )}\n </>\n );\n};\n"],"names":["GridColumn"],"mappings":";;;;AAsLa,MAAA,UAAA,GAAa,SAASA,WAAAA,CACjC,KACA,EAAA;AACA,EAAM,MAAA,EAAE,cAAiB,GAAA,KAAA,CAAA;AACzB,EAAA,MAAM,WAAW,MAAe,EAAA,CAAA;AAChC,EAAM,MAAA,CAAC,KAAO,EAAA,QAAQ,CAAI,GAAA,QAAA;AAAA,IACxB,YAAA,KAAiB,SAAY,YAAe,GAAA,GAAA;AAAA,GAC9C,CAAA;AAEA,EAAA,MAAM,OAAO,cAAe,EAAA,CAAA;AAE5B,EAAM,MAAA,cAAA,GAAiB,CAAC,CAAc,KAAA;AACpC,IAAA,QAAA,CAAS,CAAC,CAAA,CAAA;AACV,IAAA,IAAI,MAAM,cAAgB,EAAA;AACxB,MAAA,KAAA,CAAM,eAAe,CAAC,CAAA,CAAA;AAAA,KACxB;AAAA,GACF,CAAA;AAEA,EAAA,MAAM,IAA0B,GAAA;AAAA,IAC9B,KAAA;AAAA,IACA,cAAA;AAAA,IACA,KAAA;AAAA,GACF,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,OAAU,GAAA,IAAA,CAAK,aAAc,CAAA,KAAA,CAAM,EAAE,CAAA,CAAA;AAC9C,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA,CAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAK,IAAA,CAAA,eAAA,CAAgB,QAAS,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA;AAAA,KAC9C,CAAA;AAAA,GACD,CAAA,CAAA;AAED,EACE,uBAAA,GAAA,CAAA,QAAA,EAAA;AAAA,IACG,QAAS,EAAA,QAAA,CAAA,GAAA;AAAA,MAAI,KAAM,CAAA,QAAA;AAAA,MAAU,CAAC,EAAA,KAC7B,cAAe,CAAA,EAAE,CACb,GAAA,YAAA,CAAa,EAAI,EAAA,EAAE,QAAU,EAAA,KAAA,CAAM,EAAG,EAAQ,CAC9C,GAAA,EAAA;AAAA,KACN;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
@@ -6,7 +6,7 @@ const GridContext = createContext(
6
6
  const useGridContext = () => {
7
7
  const c = useContext(GridContext);
8
8
  if (!c) {
9
- throw new Error(`useGridContext invoked outside of a Grid`);
9
+ throw new Error("useGridContext invoked outside of a Grid");
10
10
  }
11
11
  return c;
12
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"GridContext.js","sources":["../src/GridContext.tsx"],"sourcesContent":["import type { GridColumnInfo } from \"./GridColumn\";\nimport { createContext, useContext } from \"react\";\nimport type { ColumnGroupProps } from \"./ColumnGroup\";\nimport type { CellEditorInfo } from \"./CellEditor\";\n\nexport interface GridContext<T> {\n getChildIndex: (columnId: string) => number;\n\n onColumnAdded: (columnInfo: GridColumnInfo<T>) => void;\n onColumnRemoved: (index: number, columnInfo: GridColumnInfo<T>) => void;\n onColumnGroupAdded: (colGroupProps: ColumnGroupProps) => void;\n onColumnGroupRemoved: (\n index: number,\n colGroupProps: ColumnGroupProps\n ) => void;\n\n onEditorAdded: (editorInfo: CellEditorInfo<T>) => void;\n onEditorRemoved: (editorInfo: CellEditorInfo<T>) => void;\n\n getEditor: (columnId: string) => CellEditorInfo<T> | undefined;\n}\n\nexport const GridContext = createContext<GridContext<any> | undefined>(\n undefined\n);\n\nexport const useGridContext = () => {\n const c = useContext(GridContext);\n if (!c) {\n throw new Error(`useGridContext invoked outside of a Grid`);\n }\n return c;\n};\n"],"names":[],"mappings":";;AAsBO,MAAM,WAAc,GAAA,aAAA;AAAA,EACzB,KAAA,CAAA;AACF,EAAA;AAEO,MAAM,iBAAiB,MAAM;AAClC,EAAM,MAAA,CAAA,GAAI,WAAW,WAAW,CAAA,CAAA;AAChC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,CAA0C,wCAAA,CAAA,CAAA,CAAA;AAAA,GAC5D;AACA,EAAO,OAAA,CAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"GridContext.js","sources":["../src/GridContext.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { CellEditorInfo } from \"./CellEditor\";\nimport type { ColumnGroupProps } from \"./ColumnGroup\";\nimport type { GridColumnInfo } from \"./GridColumn\";\n\nexport interface GridContext<T> {\n getChildIndex: (columnId: string) => number;\n\n onColumnAdded: (columnInfo: GridColumnInfo<T>) => void;\n onColumnRemoved: (index: number, columnInfo: GridColumnInfo<T>) => void;\n onColumnGroupAdded: (colGroupProps: ColumnGroupProps) => void;\n onColumnGroupRemoved: (\n index: number,\n colGroupProps: ColumnGroupProps,\n ) => void;\n\n onEditorAdded: (editorInfo: CellEditorInfo<T>) => void;\n onEditorRemoved: (editorInfo: CellEditorInfo<T>) => void;\n\n getEditor: (columnId: string) => CellEditorInfo<T> | undefined;\n}\n\nexport const GridContext = createContext<GridContext<any> | undefined>(\n undefined,\n);\n\nexport const useGridContext = () => {\n const c = useContext(GridContext);\n if (!c) {\n throw new Error(\"useGridContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":[],"mappings":";;AAsBO,MAAM,WAAc,GAAA,aAAA;AAAA,EACzB,KAAA,CAAA;AACF,EAAA;AAEO,MAAM,iBAAiB,MAAM;AAClC,EAAM,MAAA,CAAA,GAAI,WAAW,WAAW,CAAA,CAAA;AAChC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,0CAA0C,CAAA,CAAA;AAAA,GAC5D;AACA,EAAO,OAAA,CAAA,CAAA;AACT;;;;"}
@@ -1,8 +1,8 @@
1
1
  import { jsxs, jsx } from 'react/jsx-runtime';
2
- import { clsx } from 'clsx';
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';
5
+ import { clsx } from 'clsx';
6
6
  import { useColumnDataContext } from './ColumnDataContext.js';
7
7
  import css_248z from './GroupHeaderCell.css.js';
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"GroupHeaderCell.js","sources":["../src/GroupHeaderCell.tsx"],"sourcesContent":["import { ReactNode } from \"react\";\nimport { clsx } from \"clsx\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport { GridColumnGroupModel } from \"./Grid\";\nimport { useColumnDataContext } from \"./ColumnDataContext\";\n\nimport groupHeaderCellCss from \"./GroupHeaderCell.css\";\n\nconst withBaseName = makePrefixer(\"saltGridGroupHeaderCell\");\n\nexport interface GroupHeaderCellProps {\n group: GridColumnGroupModel;\n children: ReactNode;\n}\n\nexport function GroupHeaderCell(props: GroupHeaderCellProps) {\n const { group } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-group-header-cell\",\n css: groupHeaderCellCss,\n window: targetWindow,\n });\n\n const { colSpan, columnSeparator, rowSeparator } = group;\n const { getColById } = useColumnDataContext();\n const firstChild = getColById(group.childrenIds[0]);\n\n return (\n <th\n className={withBaseName()}\n colSpan={colSpan}\n aria-colspan={colSpan}\n aria-colindex={(firstChild?.index ?? 0) + 1}\n data-testid=\"column-group-header\"\n data-group-index={group.index}\n role=\"columnheader\"\n >\n {props.children}\n <div\n className={clsx({\n [withBaseName(\"rowSeparator\")]: rowSeparator === \"regular\",\n [withBaseName(\"firstGroupRowSeparator\")]: rowSeparator === \"first\",\n [withBaseName(\"lastGroupRowSeparator\")]: rowSeparator === \"last\",\n })}\n />\n {columnSeparator === \"regular\" ? (\n <div className={withBaseName(\"columnSeparator\")} />\n ) : null}\n {columnSeparator === \"pinned\" ? (\n <div className={withBaseName(\"pinnedSeparator\")} />\n ) : null}\n </th>\n );\n}\n"],"names":["groupHeaderCellCss"],"mappings":";;;;;;;;AAWA,MAAM,YAAA,GAAe,aAAa,yBAAyB,CAAA,CAAA;AAOpD,SAAS,gBAAgB,KAA6B,EAAA;AAlB7D,EAAA,IAAA,EAAA,CAAA;AAmBE,EAAM,MAAA,EAAE,OAAU,GAAA,KAAA,CAAA;AAElB,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,wBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,OAAA,EAAS,eAAiB,EAAA,YAAA,EAAiB,GAAA,KAAA,CAAA;AACnD,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,oBAAqB,EAAA,CAAA;AAC5C,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,KAAM,CAAA,WAAA,CAAY,CAAE,CAAA,CAAA,CAAA;AAElD,EAAA,uBACG,IAAA,CAAA,IAAA,EAAA;AAAA,IACC,WAAW,YAAa,EAAA;AAAA,IACxB,OAAA;AAAA,IACA,cAAc,EAAA,OAAA;AAAA,IACd,eAAgB,EAAA,CAAA,CAAA,EAAA,GAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,KAAZ,KAAA,IAAA,GAAA,EAAA,GAAqB,CAAK,IAAA,CAAA;AAAA,IAC1C,aAAY,EAAA,qBAAA;AAAA,IACZ,oBAAkB,KAAM,CAAA,KAAA;AAAA,IACxB,IAAK,EAAA,cAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,MAAM,KAAA,CAAA,QAAA;AAAA,sBACN,GAAA,CAAA,KAAA,EAAA;AAAA,QACC,WAAW,IAAK,CAAA;AAAA,UACd,CAAC,YAAA,CAAa,cAAc,CAAA,GAAI,YAAiB,KAAA,SAAA;AAAA,UACjD,CAAC,YAAA,CAAa,wBAAwB,CAAA,GAAI,YAAiB,KAAA,OAAA;AAAA,UAC3D,CAAC,YAAA,CAAa,uBAAuB,CAAA,GAAI,YAAiB,KAAA,MAAA;AAAA,SAC3D,CAAA;AAAA,OACH,CAAA;AAAA,MACC,eAAA,KAAoB,4BAClB,GAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAA,EAAW,aAAa,iBAAiB,CAAA;AAAA,OAAG,CAC/C,GAAA,IAAA;AAAA,MACH,eAAA,KAAoB,2BAClB,GAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAA,EAAW,aAAa,iBAAiB,CAAA;AAAA,OAAG,CAC/C,GAAA,IAAA;AAAA,KAAA;AAAA,GACN,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"GroupHeaderCell.js","sources":["../src/GroupHeaderCell.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 { ReactNode } from \"react\";\n\nimport { useColumnDataContext } from \"./ColumnDataContext\";\nimport type { GridColumnGroupModel } from \"./Grid\";\n\nimport groupHeaderCellCss from \"./GroupHeaderCell.css\";\n\nconst withBaseName = makePrefixer(\"saltGridGroupHeaderCell\");\n\nexport interface GroupHeaderCellProps {\n group: GridColumnGroupModel;\n children: ReactNode;\n}\n\nexport function GroupHeaderCell(props: GroupHeaderCellProps) {\n const { group } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-group-header-cell\",\n css: groupHeaderCellCss,\n window: targetWindow,\n });\n\n const { colSpan, columnSeparator, rowSeparator } = group;\n const { getColById } = useColumnDataContext();\n const firstChild = getColById(group.childrenIds[0]);\n\n return (\n <th\n className={withBaseName()}\n colSpan={colSpan}\n aria-colspan={colSpan}\n aria-colindex={(firstChild?.index ?? 0) + 1}\n data-testid=\"column-group-header\"\n data-group-index={group.index}\n role=\"columnheader\"\n >\n {props.children}\n <div\n className={clsx({\n [withBaseName(\"rowSeparator\")]: rowSeparator === \"regular\",\n [withBaseName(\"firstGroupRowSeparator\")]: rowSeparator === \"first\",\n [withBaseName(\"lastGroupRowSeparator\")]: rowSeparator === \"last\",\n })}\n />\n {columnSeparator === \"regular\" ? (\n <div className={withBaseName(\"columnSeparator\")} />\n ) : null}\n {columnSeparator === \"pinned\" ? (\n <div className={withBaseName(\"pinnedSeparator\")} />\n ) : null}\n </th>\n );\n}\n"],"names":["groupHeaderCellCss"],"mappings":";;;;;;;;AAWA,MAAM,YAAA,GAAe,aAAa,yBAAyB,CAAA,CAAA;AAOpD,SAAS,gBAAgB,KAA6B,EAAA;AAlB7D,EAAA,IAAA,EAAA,CAAA;AAmBE,EAAM,MAAA,EAAE,OAAU,GAAA,KAAA,CAAA;AAElB,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,wBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,OAAA,EAAS,eAAiB,EAAA,YAAA,EAAiB,GAAA,KAAA,CAAA;AACnD,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,oBAAqB,EAAA,CAAA;AAC5C,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,KAAM,CAAA,WAAA,CAAY,CAAE,CAAA,CAAA,CAAA;AAElD,EAAA,uBACG,IAAA,CAAA,IAAA,EAAA;AAAA,IACC,WAAW,YAAa,EAAA;AAAA,IACxB,OAAA;AAAA,IACA,cAAc,EAAA,OAAA;AAAA,IACd,eAAgB,EAAA,CAAA,CAAA,EAAA,GAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAY,KAAZ,KAAA,IAAA,GAAA,EAAA,GAAqB,CAAK,IAAA,CAAA;AAAA,IAC1C,aAAY,EAAA,qBAAA;AAAA,IACZ,oBAAkB,KAAM,CAAA,KAAA;AAAA,IACxB,IAAK,EAAA,cAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,MAAM,KAAA,CAAA,QAAA;AAAA,sBACN,GAAA,CAAA,KAAA,EAAA;AAAA,QACC,WAAW,IAAK,CAAA;AAAA,UACd,CAAC,YAAA,CAAa,cAAc,CAAA,GAAI,YAAiB,KAAA,SAAA;AAAA,UACjD,CAAC,YAAA,CAAa,wBAAwB,CAAA,GAAI,YAAiB,KAAA,OAAA;AAAA,UAC3D,CAAC,YAAA,CAAa,uBAAuB,CAAA,GAAI,YAAiB,KAAA,MAAA;AAAA,SAC3D,CAAA;AAAA,OACH,CAAA;AAAA,MACC,eAAA,KAAoB,4BAClB,GAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAA,EAAW,aAAa,iBAAiB,CAAA;AAAA,OAAG,CAC/C,GAAA,IAAA;AAAA,MACH,eAAA,KAAoB,2BAClB,GAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAA,EAAW,aAAa,iBAAiB,CAAA;AAAA,OAAG,CAC/C,GAAA,IAAA;AAAA,KAAA;AAAA,GACN,CAAA,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"GroupHeaderCellValue.js","sources":["../src/GroupHeaderCellValue.tsx"],"sourcesContent":["import { ColumnGroupCellValueProps } from \"./ColumnGroup\";\n\nexport function GroupHeaderCellValue(props: ColumnGroupCellValueProps) {\n const { group } = props;\n const title = group.data.name;\n return <span>{title}</span>;\n}\n"],"names":[],"mappings":";;AAEO,SAAS,qBAAqB,KAAkC,EAAA;AACrE,EAAM,MAAA,EAAE,OAAU,GAAA,KAAA,CAAA;AAClB,EAAM,MAAA,KAAA,GAAQ,MAAM,IAAK,CAAA,IAAA,CAAA;AACzB,EAAA,uBAAQ,GAAA,CAAA,MAAA,EAAA;AAAA,IAAM,QAAA,EAAA,KAAA;AAAA,GAAM,CAAA,CAAA;AACtB;;;;"}
1
+ {"version":3,"file":"GroupHeaderCellValue.js","sources":["../src/GroupHeaderCellValue.tsx"],"sourcesContent":["import type { ColumnGroupCellValueProps } from \"./ColumnGroup\";\n\nexport function GroupHeaderCellValue(props: ColumnGroupCellValueProps) {\n const { group } = props;\n const title = group.data.name;\n return <span>{title}</span>;\n}\n"],"names":[],"mappings":";;AAEO,SAAS,qBAAqB,KAAkC,EAAA;AACrE,EAAM,MAAA,EAAE,OAAU,GAAA,KAAA,CAAA;AAClB,EAAM,MAAA,KAAA,GAAQ,MAAM,IAAK,CAAA,IAAA,CAAA;AACzB,EAAA,uBAAQ,GAAA,CAAA,MAAA,EAAA;AAAA,IAAM,QAAA,EAAA,KAAA;AAAA,GAAM,CAAA,CAAA;AACtB;;;;"}
@@ -1,13 +1,14 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { useRef } from 'react';
3
- import { clsx } from 'clsx';
4
2
  import { makePrefixer, useIsomorphicLayoutEffect } from '@salt-ds/core';
3
+ import { ArrowUpIcon, ArrowDownIcon } from '@salt-ds/icons';
5
4
  import { useComponentCssInjection } from '@salt-ds/styles';
6
5
  import { useWindow } from '@salt-ds/window';
7
- import { ArrowUpIcon, ArrowDownIcon } from '@salt-ds/icons';
6
+ import { clsx } from 'clsx';
7
+ import { useRef } from 'react';
8
+ import { useColumnDragContext } from './ColumnDragContext.js';
9
+ import { useColumnSortContext } from './ColumnSortContext.js';
8
10
  import { SortOrder } from './Grid.js';
9
11
  import { useSizingContext } from './SizingContext.js';
10
- import { useColumnDragContext } from './ColumnDragContext.js';
11
12
  import './internal/CellMeasure.js';
12
13
  import { Cursor } from './internal/Cursor.js';
13
14
  import './internal/GroupHeaderRow.js';
@@ -16,17 +17,16 @@ import './internal/LeftPart.js';
16
17
  import './internal/MiddlePart.js';
17
18
  import './internal/RightPart.js';
18
19
  import './internal/Scrollable.js';
19
- import './internal/TableRow.js';
20
- import './SelectionContext.js';
21
- import './EditorContext.js';
22
20
  import './CursorContext.js';
21
+ import './EditorContext.js';
22
+ import './SelectionContext.js';
23
+ import './internal/TableRow.js';
23
24
  import { useFocusableContent } from './internal/gridHooks.js';
24
25
  import './internal/TopLeftPart.js';
25
26
  import './internal/TopPart.js';
26
27
  import './internal/TopRightPart.js';
27
28
  import './CellFrame.js';
28
29
  import './internal/DefaultCellValue.js';
29
- import { useColumnSortContext } from './ColumnSortContext.js';
30
30
  import css_248z from './HeaderCell.css.js';
31
31
 
32
32
  const withBaseName = makePrefixer("saltGridHeaderCell");
@@ -147,7 +147,7 @@ function AutoSizeHeaderCell(props) {
147
147
  const { ref, isFocusableContent, onFocus } = useFocusableContent();
148
148
  useIsomorphicLayoutEffect(() => {
149
149
  const width = valueContainerRef.current ? valueContainerRef.current.offsetWidth : void 0;
150
- if (width != void 0 && width !== column.info.width) {
150
+ if (width !== void 0 && width !== column.info.width) {
151
151
  resizeColumn(column.index, width);
152
152
  }
153
153
  });
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderCell.js","sources":["../src/HeaderCell.tsx"],"sourcesContent":["import { KeyboardEventHandler, useRef } from \"react\";\nimport { clsx } from \"clsx\";\nimport {\n FlexContentAlignment,\n makePrefixer,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { ArrowDownIcon, ArrowUpIcon } from \"@salt-ds/icons\";\n\nimport { ColumnSeparatorType, SortOrder } from \"./Grid\";\nimport { useSizingContext } from \"./SizingContext\";\nimport { useColumnDragContext } from \"./ColumnDragContext\";\nimport { Cursor, useFocusableContent } from \"./internal\";\nimport { HeaderCellProps } from \"./GridColumn\";\nimport { useColumnSortContext } from \"./ColumnSortContext\";\n\nimport headerCellCss from \"./HeaderCell.css\";\n\nconst withBaseName = makePrefixer(\"saltGridHeaderCell\");\n\nexport interface HeaderCellSeparatorProps {\n separatorType: ColumnSeparatorType;\n}\n\nexport function HeaderCellSeparator(props: HeaderCellSeparatorProps) {\n const className = withBaseName([props.separatorType, \"Separator\"].join(\"\"));\n return <div className={className} />;\n}\n\ntype AriaSortProps = \"none\" | \"ascending\" | \"descending\";\n\nexport function HeaderCell<T>(props: HeaderCellProps<T>) {\n const { column, children, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-header-cell\",\n css: headerCellCss,\n window: targetWindow,\n });\n\n const { separator } = column;\n const { align, id, headerClassName, sortable, onSortOrderChange } =\n column.info.props;\n const { onResizeHandleMouseDown } = useSizingContext();\n\n const { columnMove, onColumnMoveHandleMouseDown } = useColumnDragContext();\n const onMouseDown = columnMove ? onColumnMoveHandleMouseDown : undefined;\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableHeaderCellElement>();\n\n const {\n onClickSortColumn,\n setSortByColumnId,\n sortOrder,\n sortByColumnId,\n setSortOrder,\n } = useColumnSortContext();\n\n const valueAlignRight = align === \"right\";\n\n interface HeaderCellSortingIconProps {\n justify: FlexContentAlignment;\n }\n\n const HeaderCellSortingIcon = ({ justify }: HeaderCellSortingIconProps) => {\n const className = withBaseName(\"sortingIcon\");\n const icon = (\n <div\n className={clsx(className, {\n [withBaseName(\"sortingIconStart\")]: justify === \"start\",\n [withBaseName(\"sortingIconEnd\")]: justify === \"end\",\n })}\n aria-hidden\n >\n {sortOrder === SortOrder.ASC && <ArrowUpIcon />}\n {sortOrder === SortOrder.DESC && <ArrowDownIcon />}\n </div>\n );\n\n return icon;\n };\n\n const ariaSortMap = {\n asc: \"ascending\",\n desc: \"descending\",\n none: \"none\",\n };\n\n const ariaSort = ariaSortMap[sortOrder] as AriaSortProps;\n\n const order =\n sortOrder === SortOrder.ASC\n ? SortOrder.DESC\n : sortOrder === SortOrder.DESC\n ? SortOrder.NONE\n : SortOrder.ASC;\n\n const withSortOrder = sortOrder !== SortOrder.NONE && sortByColumnId === id;\n\n const onClick = () => {\n if (onSortOrderChange) {\n setSortByColumnId(id);\n setSortOrder(order);\n onSortOrderChange({ sortOrder: order });\n return;\n }\n setSortByColumnId(id);\n onClickSortColumn(id);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLTableHeaderCellElement> = (\n event\n ) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n onClick();\n }\n };\n\n return (\n <th\n ref={ref}\n aria-colindex={column.index + 1}\n data-column-index={column.index}\n className={clsx(withBaseName(), headerClassName, {\n [withBaseName(\"sortable\")]: sortable,\n })}\n role=\"columnheader\"\n data-testid=\"column-header\"\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n onClick={sortable ? onClick : undefined}\n onKeyDown={sortable ? onKeyDown : undefined}\n aria-sort={sortByColumnId === id && sortable ? ariaSort : undefined}\n aria-label={column.info.props[\"aria-label\"]}\n >\n {sortByColumnId === id && sortable && valueAlignRight && (\n <HeaderCellSortingIcon justify=\"start\" />\n )}\n <div\n className={clsx(withBaseName(\"valueContainer\"), {\n [withBaseName(\"alignRight\")]: valueAlignRight,\n // both classNames below needed to ensure header cell title & sort icon do not overlap when column resized to be smaller\n [withBaseName(\"alignRightWithSortOrder\")]:\n valueAlignRight && withSortOrder,\n [withBaseName(\"alignLeftWithSortOrder\")]:\n !valueAlignRight && withSortOrder,\n })}\n onMouseDown={onMouseDown}\n >\n {children}\n </div>\n {sortByColumnId === id && sortable && !valueAlignRight && (\n <HeaderCellSortingIcon justify=\"end\" />\n )}\n <HeaderCellSeparator separatorType={separator} />\n <div\n data-testid={`column-${column.index}-resize-handle`}\n className={withBaseName(\"resizeHandle\")}\n onMouseDown={onResizeHandleMouseDown}\n />\n {isFocused && !isFocusableContent && <Cursor />}\n </th>\n );\n}\n\nexport function AutoSizeHeaderCell<T>(props: HeaderCellProps<T>) {\n const { column, children, isFocused } = props;\n const { separator } = column;\n const valueContainerRef = useRef<HTMLDivElement>(null);\n const { resizeColumn } = useSizingContext();\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableHeaderCellElement>();\n\n useIsomorphicLayoutEffect(() => {\n const width = valueContainerRef.current\n ? valueContainerRef.current.offsetWidth\n : undefined;\n if (width != undefined && width !== column.info.width) {\n resizeColumn(column.index, width);\n }\n });\n\n return (\n <th\n ref={ref}\n aria-colindex={column.index + 1}\n data-column-index={column.index}\n className={withBaseName()}\n role=\"columnheader\"\n data-testid=\"column-header\"\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n >\n <div className={withBaseName(\"autosizeContainer\")}>\n <div\n ref={valueContainerRef}\n className={withBaseName(\"measuredContent\")}\n >\n {children}\n </div>\n </div>\n <HeaderCellSeparator separatorType={separator} />\n {isFocused && !isFocusableContent && <Cursor />}\n </th>\n );\n}\n"],"names":["headerCellCss"],"mappings":"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"}
1
+ {"version":3,"file":"HeaderCell.js","sources":["../src/HeaderCell.tsx"],"sourcesContent":["import {\n type FlexContentAlignment,\n makePrefixer,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { ArrowDownIcon, ArrowUpIcon } from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type KeyboardEventHandler, useRef } from \"react\";\n\nimport { useColumnDragContext } from \"./ColumnDragContext\";\nimport { useColumnSortContext } from \"./ColumnSortContext\";\nimport { type ColumnSeparatorType, SortOrder } from \"./Grid\";\nimport type { HeaderCellProps } from \"./GridColumn\";\nimport { useSizingContext } from \"./SizingContext\";\nimport { Cursor, useFocusableContent } from \"./internal\";\n\nimport headerCellCss from \"./HeaderCell.css\";\n\nconst withBaseName = makePrefixer(\"saltGridHeaderCell\");\n\nexport interface HeaderCellSeparatorProps {\n separatorType: ColumnSeparatorType;\n}\n\nexport function HeaderCellSeparator(props: HeaderCellSeparatorProps) {\n const className = withBaseName([props.separatorType, \"Separator\"].join(\"\"));\n return <div className={className} />;\n}\n\ntype AriaSortProps = \"none\" | \"ascending\" | \"descending\";\n\nexport function HeaderCell<T>(props: HeaderCellProps<T>) {\n const { column, children, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-header-cell\",\n css: headerCellCss,\n window: targetWindow,\n });\n\n const { separator } = column;\n const { align, id, headerClassName, sortable, onSortOrderChange } =\n column.info.props;\n const { onResizeHandleMouseDown } = useSizingContext();\n\n const { columnMove, onColumnMoveHandleMouseDown } = useColumnDragContext();\n const onMouseDown = columnMove ? onColumnMoveHandleMouseDown : undefined;\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableHeaderCellElement>();\n\n const {\n onClickSortColumn,\n setSortByColumnId,\n sortOrder,\n sortByColumnId,\n setSortOrder,\n } = useColumnSortContext();\n\n const valueAlignRight = align === \"right\";\n\n interface HeaderCellSortingIconProps {\n justify: FlexContentAlignment;\n }\n\n const HeaderCellSortingIcon = ({ justify }: HeaderCellSortingIconProps) => {\n const className = withBaseName(\"sortingIcon\");\n const icon = (\n <div\n className={clsx(className, {\n [withBaseName(\"sortingIconStart\")]: justify === \"start\",\n [withBaseName(\"sortingIconEnd\")]: justify === \"end\",\n })}\n aria-hidden\n >\n {sortOrder === SortOrder.ASC && <ArrowUpIcon />}\n {sortOrder === SortOrder.DESC && <ArrowDownIcon />}\n </div>\n );\n\n return icon;\n };\n\n const ariaSortMap = {\n asc: \"ascending\",\n desc: \"descending\",\n none: \"none\",\n };\n\n const ariaSort = ariaSortMap[sortOrder] as AriaSortProps;\n\n const order =\n sortOrder === SortOrder.ASC\n ? SortOrder.DESC\n : sortOrder === SortOrder.DESC\n ? SortOrder.NONE\n : SortOrder.ASC;\n\n const withSortOrder = sortOrder !== SortOrder.NONE && sortByColumnId === id;\n\n const onClick = () => {\n if (onSortOrderChange) {\n setSortByColumnId(id);\n setSortOrder(order);\n onSortOrderChange({ sortOrder: order });\n return;\n }\n setSortByColumnId(id);\n onClickSortColumn(id);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLTableHeaderCellElement> = (\n event,\n ) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n onClick();\n }\n };\n\n return (\n <th\n ref={ref}\n aria-colindex={column.index + 1}\n data-column-index={column.index}\n className={clsx(withBaseName(), headerClassName, {\n [withBaseName(\"sortable\")]: sortable,\n })}\n role=\"columnheader\"\n data-testid=\"column-header\"\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n onClick={sortable ? onClick : undefined}\n onKeyDown={sortable ? onKeyDown : undefined}\n aria-sort={sortByColumnId === id && sortable ? ariaSort : undefined}\n aria-label={column.info.props[\"aria-label\"]}\n >\n {sortByColumnId === id && sortable && valueAlignRight && (\n <HeaderCellSortingIcon justify=\"start\" />\n )}\n <div\n className={clsx(withBaseName(\"valueContainer\"), {\n [withBaseName(\"alignRight\")]: valueAlignRight,\n // both classNames below needed to ensure header cell title & sort icon do not overlap when column resized to be smaller\n [withBaseName(\"alignRightWithSortOrder\")]:\n valueAlignRight && withSortOrder,\n [withBaseName(\"alignLeftWithSortOrder\")]:\n !valueAlignRight && withSortOrder,\n })}\n onMouseDown={onMouseDown}\n >\n {children}\n </div>\n {sortByColumnId === id && sortable && !valueAlignRight && (\n <HeaderCellSortingIcon justify=\"end\" />\n )}\n <HeaderCellSeparator separatorType={separator} />\n <div\n data-testid={`column-${column.index}-resize-handle`}\n className={withBaseName(\"resizeHandle\")}\n onMouseDown={onResizeHandleMouseDown}\n />\n {isFocused && !isFocusableContent && <Cursor />}\n </th>\n );\n}\n\nexport function AutoSizeHeaderCell<T>(props: HeaderCellProps<T>) {\n const { column, children, isFocused } = props;\n const { separator } = column;\n const valueContainerRef = useRef<HTMLDivElement>(null);\n const { resizeColumn } = useSizingContext();\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableHeaderCellElement>();\n\n useIsomorphicLayoutEffect(() => {\n const width = valueContainerRef.current\n ? valueContainerRef.current.offsetWidth\n : undefined;\n if (width !== undefined && width !== column.info.width) {\n resizeColumn(column.index, width);\n }\n });\n\n return (\n <th\n ref={ref}\n aria-colindex={column.index + 1}\n data-column-index={column.index}\n className={withBaseName()}\n role=\"columnheader\"\n data-testid=\"column-header\"\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n >\n <div className={withBaseName(\"autosizeContainer\")}>\n <div\n ref={valueContainerRef}\n className={withBaseName(\"measuredContent\")}\n >\n {children}\n </div>\n </div>\n <HeaderCellSeparator separatorType={separator} />\n {isFocused && !isFocusableContent && <Cursor />}\n </th>\n );\n}\n"],"names":["headerCellCss"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderCellValue.js","sources":["../src/HeaderCellValue.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { GridHeaderValueProps } from \"./GridColumn\";\n\nconst withBaseName = makePrefixer(\"saltGridHeaderCell\");\n\nexport function HeaderCellValue<T>(props: GridHeaderValueProps<T>) {\n const { column } = props;\n const title = column.info.props.name;\n return <span className={withBaseName(\"text\")}>{title}</span>;\n}\n"],"names":[],"mappings":";;;AAGA,MAAM,YAAA,GAAe,aAAa,oBAAoB,CAAA,CAAA;AAE/C,SAAS,gBAAmB,KAAgC,EAAA;AACjE,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA,CAAA;AACnB,EAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAA;AAChC,EAAA,uBAAQ,GAAA,CAAA,MAAA,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,IAAI,QAAA,EAAA,KAAA;AAAA,GAAM,CAAA,CAAA;AACvD;;;;"}
1
+ {"version":3,"file":"HeaderCellValue.js","sources":["../src/HeaderCellValue.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport type { GridHeaderValueProps } from \"./GridColumn\";\n\nconst withBaseName = makePrefixer(\"saltGridHeaderCell\");\n\nexport function HeaderCellValue<T>(props: GridHeaderValueProps<T>) {\n const { column } = props;\n const title = column.info.props.name;\n return <span className={withBaseName(\"text\")}>{title}</span>;\n}\n"],"names":[],"mappings":";;;AAGA,MAAM,YAAA,GAAe,aAAa,oBAAoB,CAAA,CAAA;AAE/C,SAAS,gBAAmB,KAAgC,EAAA;AACjE,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA,CAAA;AACnB,EAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAA;AAChC,EAAA,uBAAQ,GAAA,CAAA,MAAA,EAAA;AAAA,IAAK,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,IAAI,QAAA,EAAA,KAAA;AAAA,GAAM,CAAA,CAAA;AACvD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"LayoutContext.js","sources":["../src/LayoutContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport interface LayoutContext {\n totalWidth: number;\n totalHeight: number;\n clientWidth: number;\n clientHeight: number;\n}\n\nexport const LayoutContext = createContext<LayoutContext | undefined>(\n undefined\n);\n\nexport const useLayoutContext = () => {\n const c = useContext(LayoutContext);\n if (!c) {\n throw new Error(`useLayoutContext invoked outside of a Grid`);\n }\n return c;\n};\n"],"names":[],"mappings":";;AASO,MAAM,aAAgB,GAAA,aAAA;AAAA,EAC3B,KAAA,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"LayoutContext.js","sources":["../src/LayoutContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport interface LayoutContext {\n totalWidth: number;\n totalHeight: number;\n clientWidth: number;\n clientHeight: number;\n}\n\nexport const LayoutContext = createContext<LayoutContext | undefined>(\n undefined,\n);\n\nexport const useLayoutContext = () => {\n const c = useContext(LayoutContext);\n if (!c) {\n throw new Error(\"useLayoutContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":[],"mappings":";;AASO,MAAM,aAAgB,GAAA,aAAA;AAAA,EAC3B,KAAA,CAAA;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"NumericColumn.js","sources":["../src/NumericColumn.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n ChangeEventHandler,\n KeyboardEventHandler,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport { useEditorContext } from \"./EditorContext\";\nimport { GridColumnModel, GridRowModel } from \"./Grid\";\nimport { GridCellValueProps, GridColumn, GridColumnProps } from \"./GridColumn\";\n\nimport numericColumnCss from \"./NumericColumn.css\";\n\nexport interface NumericColumnProps<T> extends GridColumnProps<T> {\n precision: number;\n}\n\nfunction isNumber(value: any): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nexport function NumericCellValue<T>(props: GridCellValueProps<T>) {\n const { column, value } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-numeric-column\",\n css: numericColumnCss,\n window: targetWindow,\n });\n\n const columnProps = column.info.props as NumericColumnProps<T>;\n const { precision } = columnProps;\n const text = isNumber(value) ? value.toFixed(precision) : \"\";\n return <div className=\"saltGridNumericCellValue\">{text}</div>;\n}\n\nexport interface NumericEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n children?: ReactNode;\n}\n\nexport function NumericCellEditor<T>(props: NumericEditorProps<T>) {\n const { column, row } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data)\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n useEffect(() => {\n const input = inputRef.current;\n const focusOut = (event: FocusEvent) => {\n if (!input?.contains(event.target as Node)) {\n endEditMode(editorText);\n }\n };\n\n // This uses the capture phase to detect clicks outside the input to avoid a race condition where the component gets unmounted when edit mode ends.\n document?.addEventListener(\"mousedown\", focusOut, true);\n\n return () => {\n document?.removeEventListener(\"mousedown\", focusOut, true);\n };\n }, [endEditMode, editorText]);\n\n return (\n <CellFrame\n separator={column?.separator}\n className=\"saltGridNumericCellEditor\"\n >\n <div className=\"saltGridNumericCellEditor-inputContainer\">\n <input\n ref={inputRef}\n data-testid=\"grid-cell-editor-input\"\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </CellFrame>\n );\n}\n\nexport function NumericColumn<T>(props: NumericColumnProps<T>) {\n return (\n <GridColumn\n {...props}\n align={\"right\"}\n cellValueComponent={NumericCellValue}\n >\n {props.children}\n </GridColumn>\n );\n}\n"],"names":["numericColumnCss"],"mappings":"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"}
1
+ {"version":3,"file":"NumericColumn.js","sources":["../src/NumericColumn.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n type ChangeEventHandler,\n type KeyboardEventHandler,\n type ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport { useEditorContext } from \"./EditorContext\";\nimport type { GridColumnModel, GridRowModel } from \"./Grid\";\nimport {\n type GridCellValueProps,\n GridColumn,\n type GridColumnProps,\n} from \"./GridColumn\";\n\nimport numericColumnCss from \"./NumericColumn.css\";\n\nexport interface NumericColumnProps<T> extends GridColumnProps<T> {\n precision: number;\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nexport function NumericCellValue<T>(props: GridCellValueProps<T>) {\n const { column, value } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-numeric-column\",\n css: numericColumnCss,\n window: targetWindow,\n });\n\n const columnProps = column.info.props as NumericColumnProps<T>;\n const { precision } = columnProps;\n const text = isNumber(value) ? value.toFixed(precision) : \"\";\n return <div className=\"saltGridNumericCellValue\">{text}</div>;\n}\n\nexport interface NumericEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n children?: ReactNode;\n}\n\nexport function NumericCellEditor<T>(props: NumericEditorProps<T>) {\n const { column, row } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data),\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n useEffect(() => {\n const input = inputRef.current;\n const focusOut = (event: FocusEvent) => {\n if (!input?.contains(event.target as Node)) {\n endEditMode(editorText);\n }\n };\n\n // This uses the capture phase to detect clicks outside the input to avoid a race condition where the component gets unmounted when edit mode ends.\n document?.addEventListener(\"mousedown\", focusOut, true);\n\n return () => {\n document?.removeEventListener(\"mousedown\", focusOut, true);\n };\n }, [endEditMode, editorText]);\n\n return (\n <CellFrame\n separator={column?.separator}\n className=\"saltGridNumericCellEditor\"\n >\n <div className=\"saltGridNumericCellEditor-inputContainer\">\n <input\n ref={inputRef}\n data-testid=\"grid-cell-editor-input\"\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </CellFrame>\n );\n}\n\nexport function NumericColumn<T>(props: NumericColumnProps<T>) {\n return (\n <GridColumn\n {...props}\n align={\"right\"}\n cellValueComponent={NumericCellValue}\n >\n {props.children}\n </GridColumn>\n );\n}\n"],"names":["numericColumnCss"],"mappings":";;;;;;;;;;AA2BA,SAAS,SAAS,KAAiC,EAAA;AACjD,EAAA,OAAO,OAAO,KAAA,KAAU,QAAY,IAAA,MAAA,CAAO,SAAS,KAAK,CAAA,CAAA;AAC3D,CAAA;AAEO,SAAS,iBAAoB,KAA8B,EAAA;AAChE,EAAM,MAAA,EAAE,MAAQ,EAAA,KAAA,EAAU,GAAA,KAAA,CAAA;AAE1B,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,qBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,WAAA,GAAc,OAAO,IAAK,CAAA,KAAA,CAAA;AAChC,EAAM,MAAA,EAAE,WAAc,GAAA,WAAA,CAAA;AACtB,EAAA,MAAM,OAAO,QAAS,CAAA,KAAK,IAAI,KAAM,CAAA,OAAA,CAAQ,SAAS,CAAI,GAAA,EAAA,CAAA;AAC1D,EAAA,uBAAQ,GAAA,CAAA,KAAA,EAAA;AAAA,IAAI,SAAU,EAAA,0BAAA;AAAA,IAA4B,QAAA,EAAA,IAAA;AAAA,GAAK,CAAA,CAAA;AACzD,CAAA;AAQO,SAAS,kBAAqB,KAA8B,EAAA;AACjE,EAAM,MAAA,EAAE,MAAQ,EAAA,GAAA,EAAQ,GAAA,KAAA,CAAA;AACxB,EAAM,MAAA,QAAA,GAAW,OAAyB,IAAI,CAAA,CAAA;AAE9C,EAAA,MAAM,EAAE,WAAA,EAAa,cAAgB,EAAA,WAAA,KAAgB,gBAAiB,EAAA,CAAA;AAEtE,EAAM,MAAA,CAAC,UAAY,EAAA,aAAa,CAAI,GAAA,QAAA;AAAA,IAClC,WAAA,IAAe,OAAO,WAAc,GAAA,MAAA,CAAQ,KAAK,KAAM,CAAA,QAAA,CAAU,IAAK,IAAI,CAAA;AAAA,GAC5E,CAAA;AAEA,EAAA,MAAM,mBAAsB,GAAA,MAAA,CAAO,CAAC,CAAC,WAAW,CAAA,CAAA;AAEhD,EAAM,MAAA,QAAA,GAAiD,CAAC,CAAM,KAAA;AAC5D,IAAc,aAAA,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA,CAAA;AAAA,GAC9B,CAAA;AAEA,EAAM,MAAA,SAAA,GAAoD,CAAC,KAAU,KAAA;AACnE,IAAI,IAAA,KAAA,CAAM,QAAQ,OAAS,EAAA;AACzB,MAAA,WAAA,CAAY,UAAU,CAAA,CAAA;AACtB,MAAA,OAAA;AAAA,KACF;AACA,IAAI,IAAA,KAAA,CAAM,QAAQ,QAAU,EAAA;AAC1B,MAAe,cAAA,EAAA,CAAA;AACf,MAAA,OAAA;AAAA,KACF;AACA,IAAI,IAAA,KAAA,CAAM,QAAQ,KAAO,EAAA;AACvB,MAAA,WAAA,CAAY,UAAU,CAAA,CAAA;AACtB,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,OAAA;AAAA,KACF;AACA,IAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,GACxB,CAAA;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,QAAS,CAAA,OAAA,IAAW,CAAC,mBAAA,CAAoB,OAAS,EAAA;AACpD,MAAA,QAAA,CAAS,QAAQ,MAAO,EAAA,CAAA;AACxB,MAAA,mBAAA,CAAoB,OAAU,GAAA,IAAA,CAAA;AAAA,KAChC;AAAA,GACC,EAAA,CAAC,QAAS,CAAA,OAAO,CAAC,CAAA,CAAA;AAErB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,QAAQ,QAAS,CAAA,OAAA,CAAA;AACvB,IAAM,MAAA,QAAA,GAAW,CAAC,KAAsB,KAAA;AACtC,MAAA,IAAI,EAAC,KAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAO,QAAS,CAAA,KAAA,CAAM,MAAiB,CAAA,CAAA,EAAA;AAC1C,QAAA,WAAA,CAAY,UAAU,CAAA,CAAA;AAAA,OACxB;AAAA,KACF,CAAA;AAGA,IAAU,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAA,gBAAA,CAAiB,aAAa,QAAU,EAAA,IAAA,CAAA,CAAA;AAElD,IAAA,OAAO,MAAM;AACX,MAAU,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAA,mBAAA,CAAoB,aAAa,QAAU,EAAA,IAAA,CAAA,CAAA;AAAA,KACvD,CAAA;AAAA,GACC,EAAA,CAAC,WAAa,EAAA,UAAU,CAAC,CAAA,CAAA;AAE5B,EAAA,uBACG,IAAA,CAAA,SAAA,EAAA;AAAA,IACC,WAAW,MAAQ,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,SAAA;AAAA,IACnB,SAAU,EAAA,2BAAA;AAAA,IAEV,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAU,EAAA,0CAAA;AAAA,QACb,QAAC,kBAAA,GAAA,CAAA,OAAA,EAAA;AAAA,UACC,GAAK,EAAA,QAAA;AAAA,UACL,aAAY,EAAA,wBAAA;AAAA,UACZ,SAAW,EAAA,IAAA;AAAA,UACX,KAAO,EAAA,UAAA;AAAA,UACP,QAAA;AAAA,UACA,SAAA;AAAA,SACF,CAAA;AAAA,OACF,CAAA;AAAA,0BACC,SAAU,EAAA,EAAA,CAAA;AAAA,KAAA;AAAA,GACb,CAAA,CAAA;AAEJ,CAAA;AAEO,SAAS,cAAiB,KAA8B,EAAA;AAC7D,EAAA,uBACG,GAAA,CAAA,UAAA,EAAA;AAAA,IACE,GAAG,KAAA;AAAA,IACJ,KAAO,EAAA,OAAA;AAAA,IACP,kBAAoB,EAAA,gBAAA;AAAA,IAEnB,QAAM,EAAA,KAAA,CAAA,QAAA;AAAA,GACT,CAAA,CAAA;AAEJ;;;;"}
@@ -1,9 +1,9 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { Checkbox } from '@salt-ds/core';
3
- import { useWindow } from '@salt-ds/window';
4
3
  import { useComponentCssInjection } from '@salt-ds/styles';
5
- import { useSelectionContext } from './SelectionContext.js';
4
+ import { useWindow } from '@salt-ds/window';
6
5
  import { useCursorContext } from './CursorContext.js';
6
+ import { useSelectionContext } from './SelectionContext.js';
7
7
  import css_248z from './CheckboxCell.css.js';
8
8
 
9
9
  function RowSelectionCheckboxCellValue(props) {
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionCheckboxCellValue.js","sources":["../src/RowSelectionCheckboxCellValue.tsx"],"sourcesContent":["import { Checkbox } from \"@salt-ds/core\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport { GridCellValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\nimport { MouseEventHandler } from \"react\";\nimport { useCursorContext } from \"./CursorContext\";\n\nimport checkboxCellCss from \"./CheckboxCell.css\";\n\nexport function RowSelectionCheckboxCellValue<T>(props: GridCellValueProps<T>) {\n const { row, column, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const { selRowIdxs, selectRows } = useSelectionContext();\n const { moveCursor } = useCursorContext();\n\n const isSelected = selRowIdxs.has(row.index);\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n selectRows({ rowIndex: row.index, incremental: true });\n moveCursor(\"body\", row.index, column.index);\n event.preventDefault();\n event.stopPropagation();\n };\n\n return (\n <div className=\"saltGridCheckboxContainer\" onMouseDown={onMouseDown}>\n <Checkbox\n data-testid=\"grid-row-selection-checkbox\"\n inputProps={{\n \"aria-label\": \"Select Row\",\n tabIndex: isFocused ? 0 : -1,\n }}\n checked={isSelected}\n />\n </div>\n );\n}\n"],"names":["checkboxCellCss"],"mappings":";;;;;;;;AAWO,SAAS,8BAAiC,KAA8B,EAAA;AAC7E,EAAA,MAAM,EAAE,GAAA,EAAK,MAAQ,EAAA,SAAA,EAAc,GAAA,KAAA,CAAA;AAEnC,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,UAAA,EAAY,UAAW,EAAA,GAAI,mBAAoB,EAAA,CAAA;AACvD,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,gBAAiB,EAAA,CAAA;AAExC,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,GAAI,CAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAE3C,EAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,IAAA,UAAA,CAAW,EAAE,QAAU,EAAA,GAAA,CAAI,KAAO,EAAA,WAAA,EAAa,MAAM,CAAA,CAAA;AACrD,IAAA,UAAA,CAAW,MAAQ,EAAA,GAAA,CAAI,KAAO,EAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AAC1C,IAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,IAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,GACxB,CAAA;AAEA,EAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,IAAI,SAAU,EAAA,2BAAA;AAAA,IAA4B,WAAA;AAAA,IACzC,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA;AAAA,MACC,aAAY,EAAA,6BAAA;AAAA,MACZ,UAAY,EAAA;AAAA,QACV,YAAc,EAAA,YAAA;AAAA,QACd,QAAA,EAAU,YAAY,CAAI,GAAA,CAAA,CAAA;AAAA,OAC5B;AAAA,MACA,OAAS,EAAA,UAAA;AAAA,KACX,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"RowSelectionCheckboxCellValue.js","sources":["../src/RowSelectionCheckboxCellValue.tsx"],"sourcesContent":["import { Checkbox } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport type { MouseEventHandler } from \"react\";\nimport { useCursorContext } from \"./CursorContext\";\nimport type { GridCellValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nimport checkboxCellCss from \"./CheckboxCell.css\";\n\nexport function RowSelectionCheckboxCellValue<T>(props: GridCellValueProps<T>) {\n const { row, column, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const { selRowIdxs, selectRows } = useSelectionContext();\n const { moveCursor } = useCursorContext();\n\n const isSelected = selRowIdxs.has(row.index);\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n selectRows({ rowIndex: row.index, incremental: true });\n moveCursor(\"body\", row.index, column.index);\n event.preventDefault();\n event.stopPropagation();\n };\n\n return (\n <div className=\"saltGridCheckboxContainer\" onMouseDown={onMouseDown}>\n <Checkbox\n data-testid=\"grid-row-selection-checkbox\"\n inputProps={{\n \"aria-label\": \"Select Row\",\n tabIndex: isFocused ? 0 : -1,\n }}\n checked={isSelected}\n />\n </div>\n );\n}\n"],"names":["checkboxCellCss"],"mappings":";;;;;;;;AAWO,SAAS,8BAAiC,KAA8B,EAAA;AAC7E,EAAA,MAAM,EAAE,GAAA,EAAK,MAAQ,EAAA,SAAA,EAAc,GAAA,KAAA,CAAA;AAEnC,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,UAAA,EAAY,UAAW,EAAA,GAAI,mBAAoB,EAAA,CAAA;AACvD,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,gBAAiB,EAAA,CAAA;AAExC,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,GAAI,CAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAE3C,EAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,IAAA,UAAA,CAAW,EAAE,QAAU,EAAA,GAAA,CAAI,KAAO,EAAA,WAAA,EAAa,MAAM,CAAA,CAAA;AACrD,IAAA,UAAA,CAAW,MAAQ,EAAA,GAAA,CAAI,KAAO,EAAA,MAAA,CAAO,KAAK,CAAA,CAAA;AAC1C,IAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,IAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,GACxB,CAAA;AAEA,EAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,IAAI,SAAU,EAAA,2BAAA;AAAA,IAA4B,WAAA;AAAA,IACzC,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA;AAAA,MACC,aAAY,EAAA,6BAAA;AAAA,MACZ,UAAY,EAAA;AAAA,QACV,YAAc,EAAA,YAAA;AAAA,QACd,QAAA,EAAU,YAAY,CAAI,GAAA,CAAA,CAAA;AAAA,OAC5B;AAAA,MACA,OAAS,EAAA,UAAA;AAAA,KACX,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
@@ -1,10 +1,10 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { useCallback } from 'react';
3
- import { RowSelectionCheckboxHeaderCellValue } from './RowSelectionCheckboxHeaderCellValue.js';
4
- import { RowSelectionCheckboxCellValue } from './RowSelectionCheckboxCellValue.js';
5
3
  import { GridColumn } from './GridColumn.js';
6
- import { useSelectionContext } from './SelectionContext.js';
7
4
  import { AutoSizeHeaderCell } from './HeaderCell.js';
5
+ import { RowSelectionCheckboxCellValue } from './RowSelectionCheckboxCellValue.js';
6
+ import { RowSelectionCheckboxHeaderCellValue } from './RowSelectionCheckboxHeaderCellValue.js';
7
+ import { useSelectionContext } from './SelectionContext.js';
8
8
 
9
9
  function RowSelectionCheckboxColumn(props) {
10
10
  const { selectRows } = useSelectionContext();
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionCheckboxColumn.js","sources":["../src/RowSelectionCheckboxColumn.tsx"],"sourcesContent":["import { KeyboardEvent, useCallback } from \"react\";\nimport { RowSelectionCheckboxHeaderCellValue } from \"./RowSelectionCheckboxHeaderCellValue\";\nimport { RowSelectionCheckboxCellValue } from \"./RowSelectionCheckboxCellValue\";\nimport { GridColumn, GridColumnProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\nimport { AutoSizeHeaderCell } from \"./HeaderCell\";\n\nexport type RowSelectionCheckboxColumnProps<T> = Omit<\n GridColumnProps<T>,\n \"width\" | \"name\"\n>;\n\nexport function RowSelectionCheckboxColumn<T>(\n props: RowSelectionCheckboxColumnProps<T>\n) {\n const { selectRows } = useSelectionContext();\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>, rowIndex: number) => {\n if (event.key === \" \") {\n selectRows({\n rowIndex,\n incremental: true,\n });\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [selectRows]\n );\n\n return (\n <GridColumn\n {...props}\n defaultWidth={100}\n headerComponent={AutoSizeHeaderCell}\n headerValueComponent={RowSelectionCheckboxHeaderCellValue}\n cellValueComponent={RowSelectionCheckboxCellValue}\n onKeyDown={onKeyDown}\n />\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAYO,SAAS,2BACd,KACA,EAAA;AACA,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,mBAAoB,EAAA,CAAA;AAE3C,EAAA,MAAM,SAAY,GAAA,WAAA;AAAA,IAChB,CAAC,OAAsC,QAAqB,KAAA;AAC1D,MAAI,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AACrB,QAAW,UAAA,CAAA;AAAA,UACT,QAAA;AAAA,UACA,WAAa,EAAA,IAAA;AAAA,SACd,CAAA,CAAA;AACD,QAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,QAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,OACxB;AAAA,KACF;AAAA,IACA,CAAC,UAAU,CAAA;AAAA,GACb,CAAA;AAEA,EAAA,uBACG,GAAA,CAAA,UAAA,EAAA;AAAA,IACE,GAAG,KAAA;AAAA,IACJ,YAAc,EAAA,GAAA;AAAA,IACd,eAAiB,EAAA,kBAAA;AAAA,IACjB,oBAAsB,EAAA,mCAAA;AAAA,IACtB,kBAAoB,EAAA,6BAAA;AAAA,IACpB,SAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"RowSelectionCheckboxColumn.js","sources":["../src/RowSelectionCheckboxColumn.tsx"],"sourcesContent":["import { type KeyboardEvent, useCallback } from \"react\";\nimport { GridColumn, type GridColumnProps } from \"./GridColumn\";\nimport { AutoSizeHeaderCell } from \"./HeaderCell\";\nimport { RowSelectionCheckboxCellValue } from \"./RowSelectionCheckboxCellValue\";\nimport { RowSelectionCheckboxHeaderCellValue } from \"./RowSelectionCheckboxHeaderCellValue\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nexport type RowSelectionCheckboxColumnProps<T> = Omit<\n GridColumnProps<T>,\n \"width\" | \"name\"\n>;\n\nexport function RowSelectionCheckboxColumn<T>(\n props: RowSelectionCheckboxColumnProps<T>,\n) {\n const { selectRows } = useSelectionContext();\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>, rowIndex: number) => {\n if (event.key === \" \") {\n selectRows({\n rowIndex,\n incremental: true,\n });\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [selectRows],\n );\n\n return (\n <GridColumn\n {...props}\n defaultWidth={100}\n headerComponent={AutoSizeHeaderCell}\n headerValueComponent={RowSelectionCheckboxHeaderCellValue}\n cellValueComponent={RowSelectionCheckboxCellValue}\n onKeyDown={onKeyDown}\n />\n );\n}\n"],"names":[],"mappings":";;;;;;;;AAYO,SAAS,2BACd,KACA,EAAA;AACA,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,mBAAoB,EAAA,CAAA;AAE3C,EAAA,MAAM,SAAY,GAAA,WAAA;AAAA,IAChB,CAAC,OAAsC,QAAqB,KAAA;AAC1D,MAAI,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AACrB,QAAW,UAAA,CAAA;AAAA,UACT,QAAA;AAAA,UACA,WAAa,EAAA,IAAA;AAAA,SACd,CAAA,CAAA;AACD,QAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,QAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,OACxB;AAAA,KACF;AAAA,IACA,CAAC,UAAU,CAAA;AAAA,GACb,CAAA;AAEA,EAAA,uBACG,GAAA,CAAA,UAAA,EAAA;AAAA,IACE,GAAG,KAAA;AAAA,IACJ,YAAc,EAAA,GAAA;AAAA,IACd,eAAiB,EAAA,kBAAA;AAAA,IACjB,oBAAsB,EAAA,mCAAA;AAAA,IACtB,kBAAoB,EAAA,6BAAA;AAAA,IACpB,SAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
@@ -1,7 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { useWindow } from '@salt-ds/window';
3
- import { useComponentCssInjection } from '@salt-ds/styles';
4
2
  import { Checkbox } from '@salt-ds/core';
3
+ import { useComponentCssInjection } from '@salt-ds/styles';
4
+ import { useWindow } from '@salt-ds/window';
5
5
  import { useSelectionContext } from './SelectionContext.js';
6
6
  import css_248z from './CheckboxCell.css.js';
7
7
 
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionCheckboxHeaderCellValue.js","sources":["../src/RowSelectionCheckboxHeaderCellValue.tsx"],"sourcesContent":["import { KeyboardEventHandler, MouseEventHandler } from \"react\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { Checkbox } from \"@salt-ds/core\";\n\nimport { useSelectionContext } from \"./SelectionContext\";\nimport { GridHeaderValueProps } from \"./GridColumn\";\n\nimport checkboxCellCss from \"./CheckboxCell.css\";\n\nexport function RowSelectionCheckboxHeaderCellValue<T>(\n props: GridHeaderValueProps<T>\n) {\n const { isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const { selectAll, unselectAll, isAllSelected, isAnySelected } =\n useSelectionContext();\n\n const onMousedown: MouseEventHandler<HTMLDivElement> = (event) => {\n if (isAllSelected) {\n unselectAll();\n } else {\n selectAll();\n }\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = (event) => {\n if (event.key === \" \") {\n if (isAllSelected) {\n unselectAll();\n } else {\n selectAll();\n }\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n return (\n <div\n onMouseDown={onMousedown}\n className=\"saltGridCheckboxContainer\"\n onKeyDown={onKeyDown}\n >\n <Checkbox\n data-testid=\"grid-row-select-all-checkbox\"\n inputProps={{\n \"aria-label\": \"Select All\",\n tabIndex: isFocused ? 0 : -1,\n }}\n checked={isAllSelected}\n indeterminate={!isAllSelected && isAnySelected}\n />\n </div>\n );\n}\n"],"names":["checkboxCellCss"],"mappings":";;;;;;;AAUO,SAAS,oCACd,KACA,EAAA;AACA,EAAM,MAAA,EAAE,WAAc,GAAA,KAAA,CAAA;AAEtB,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,SAAW,EAAA,WAAA,EAAa,aAAe,EAAA,aAAA,KAC7C,mBAAoB,EAAA,CAAA;AAEtB,EAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,IAAA,IAAI,aAAe,EAAA;AACjB,MAAY,WAAA,EAAA,CAAA;AAAA,KACP,MAAA;AACL,MAAU,SAAA,EAAA,CAAA;AAAA,KACZ;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,SAAA,GAAkD,CAAC,KAAU,KAAA;AACjE,IAAI,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AACrB,MAAA,IAAI,aAAe,EAAA;AACjB,QAAY,WAAA,EAAA,CAAA;AAAA,OACP,MAAA;AACL,QAAU,SAAA,EAAA,CAAA;AAAA,OACZ;AACA,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,KACxB;AAAA,GACF,CAAA;AAEA,EAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,IACC,WAAa,EAAA,WAAA;AAAA,IACb,SAAU,EAAA,2BAAA;AAAA,IACV,SAAA;AAAA,IAEA,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA;AAAA,MACC,aAAY,EAAA,8BAAA;AAAA,MACZ,UAAY,EAAA;AAAA,QACV,YAAc,EAAA,YAAA;AAAA,QACd,QAAA,EAAU,YAAY,CAAI,GAAA,CAAA,CAAA;AAAA,OAC5B;AAAA,MACA,OAAS,EAAA,aAAA;AAAA,MACT,aAAA,EAAe,CAAC,aAAiB,IAAA,aAAA;AAAA,KACnC,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"RowSelectionCheckboxHeaderCellValue.js","sources":["../src/RowSelectionCheckboxHeaderCellValue.tsx"],"sourcesContent":["import { Checkbox } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport type { KeyboardEventHandler, MouseEventHandler } from \"react\";\n\nimport type { GridHeaderValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nimport checkboxCellCss from \"./CheckboxCell.css\";\n\nexport function RowSelectionCheckboxHeaderCellValue<T>(\n props: GridHeaderValueProps<T>,\n) {\n const { isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const { selectAll, unselectAll, isAllSelected, isAnySelected } =\n useSelectionContext();\n\n const onMousedown: MouseEventHandler<HTMLDivElement> = (event) => {\n if (isAllSelected) {\n unselectAll();\n } else {\n selectAll();\n }\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = (event) => {\n if (event.key === \" \") {\n if (isAllSelected) {\n unselectAll();\n } else {\n selectAll();\n }\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n return (\n <div\n onMouseDown={onMousedown}\n className=\"saltGridCheckboxContainer\"\n onKeyDown={onKeyDown}\n >\n <Checkbox\n data-testid=\"grid-row-select-all-checkbox\"\n inputProps={{\n \"aria-label\": \"Select All\",\n tabIndex: isFocused ? 0 : -1,\n }}\n checked={isAllSelected}\n indeterminate={!isAllSelected && isAnySelected}\n />\n </div>\n );\n}\n"],"names":["checkboxCellCss"],"mappings":";;;;;;;AAUO,SAAS,oCACd,KACA,EAAA;AACA,EAAM,MAAA,EAAE,WAAc,GAAA,KAAA,CAAA;AAEtB,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,SAAW,EAAA,WAAA,EAAa,aAAe,EAAA,aAAA,KAC7C,mBAAoB,EAAA,CAAA;AAEtB,EAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,IAAA,IAAI,aAAe,EAAA;AACjB,MAAY,WAAA,EAAA,CAAA;AAAA,KACP,MAAA;AACL,MAAU,SAAA,EAAA,CAAA;AAAA,KACZ;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,SAAA,GAAkD,CAAC,KAAU,KAAA;AACjE,IAAI,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AACrB,MAAA,IAAI,aAAe,EAAA;AACjB,QAAY,WAAA,EAAA,CAAA;AAAA,OACP,MAAA;AACL,QAAU,SAAA,EAAA,CAAA;AAAA,OACZ;AACA,MAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,KACxB;AAAA,GACF,CAAA;AAEA,EAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,IACC,WAAa,EAAA,WAAA;AAAA,IACb,SAAU,EAAA,2BAAA;AAAA,IACV,SAAA;AAAA,IAEA,QAAC,kBAAA,GAAA,CAAA,QAAA,EAAA;AAAA,MACC,aAAY,EAAA,8BAAA;AAAA,MACZ,UAAY,EAAA;AAAA,QACV,YAAc,EAAA,YAAA;AAAA,QACd,QAAA,EAAU,YAAY,CAAI,GAAA,CAAA,CAAA;AAAA,OAC5B;AAAA,MACA,OAAS,EAAA,aAAA;AAAA,MACT,aAAA,EAAe,CAAC,aAAiB,IAAA,aAAA;AAAA,KACnC,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
@@ -1,7 +1,7 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { RadioButton } from '@salt-ds/core';
3
- import { useWindow } from '@salt-ds/window';
4
3
  import { useComponentCssInjection } from '@salt-ds/styles';
4
+ import { useWindow } from '@salt-ds/window';
5
5
  import { useSelectionContext } from './SelectionContext.js';
6
6
  import css_248z from './CheckboxCell.css.js';
7
7
 
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionRadioCellValue.js","sources":["../src/RowSelectionRadioCellValue.tsx"],"sourcesContent":["import { RadioButton } from \"@salt-ds/core\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport { GridCellValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nimport checkboxCellCss from \"./CheckboxCell.css\";\n\nexport function RowSelectionRadioCellValue<T>(props: GridCellValueProps<T>) {\n const { row, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const { selRowIdxs } = useSelectionContext();\n\n const isSelected = selRowIdxs.has(row.index);\n\n return (\n <div className=\"saltGridCheckboxContainer\">\n <RadioButton\n checked={isSelected}\n data-testid=\"grid-row-selection-radiobox\"\n tabIndex={isFocused ? 0 : -1}\n />\n </div>\n );\n}\n"],"names":["checkboxCellCss"],"mappings":";;;;;;;AASO,SAAS,2BAA8B,KAA8B,EAAA;AAC1E,EAAM,MAAA,EAAE,GAAK,EAAA,SAAA,EAAc,GAAA,KAAA,CAAA;AAE3B,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,mBAAoB,EAAA,CAAA;AAE3C,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,GAAI,CAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAE3C,EAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,IAAI,SAAU,EAAA,2BAAA;AAAA,IACb,QAAC,kBAAA,GAAA,CAAA,WAAA,EAAA;AAAA,MACC,OAAS,EAAA,UAAA;AAAA,MACT,aAAY,EAAA,6BAAA;AAAA,MACZ,QAAA,EAAU,YAAY,CAAI,GAAA,CAAA,CAAA;AAAA,KAC5B,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"RowSelectionRadioCellValue.js","sources":["../src/RowSelectionRadioCellValue.tsx"],"sourcesContent":["import { RadioButton } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport type { GridCellValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nimport checkboxCellCss from \"./CheckboxCell.css\";\n\nexport function RowSelectionRadioCellValue<T>(props: GridCellValueProps<T>) {\n const { row, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const { selRowIdxs } = useSelectionContext();\n\n const isSelected = selRowIdxs.has(row.index);\n\n return (\n <div className=\"saltGridCheckboxContainer\">\n <RadioButton\n checked={isSelected}\n data-testid=\"grid-row-selection-radiobox\"\n tabIndex={isFocused ? 0 : -1}\n />\n </div>\n );\n}\n"],"names":["checkboxCellCss"],"mappings":";;;;;;;AASO,SAAS,2BAA8B,KAA8B,EAAA;AAC1E,EAAM,MAAA,EAAE,GAAK,EAAA,SAAA,EAAc,GAAA,KAAA,CAAA;AAE3B,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,mBAAoB,EAAA,CAAA;AAE3C,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,GAAI,CAAA,GAAA,CAAI,KAAK,CAAA,CAAA;AAE3C,EAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,IAAI,SAAU,EAAA,2BAAA;AAAA,IACb,QAAC,kBAAA,GAAA,CAAA,WAAA,EAAA;AAAA,MACC,OAAS,EAAA,UAAA;AAAA,MACT,aAAY,EAAA,6BAAA;AAAA,MACZ,QAAA,EAAU,YAAY,CAAI,GAAA,CAAA,CAAA;AAAA,KAC5B,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
@@ -1,9 +1,9 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { RowSelectionRadioCellValue } from './RowSelectionRadioCellValue.js';
2
+ import { useCallback } from 'react';
3
3
  import { GridColumn } from './GridColumn.js';
4
+ import { RowSelectionRadioCellValue } from './RowSelectionRadioCellValue.js';
4
5
  import { RowSelectionRadioHeaderCell } from './RowSelectionRadioHeaderCell.js';
5
6
  import { useSelectionContext } from './SelectionContext.js';
6
- import { useCallback } from 'react';
7
7
 
8
8
  function RowSelectionRadioColumn(props) {
9
9
  const { selectRows } = useSelectionContext();
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionRadioColumn.js","sources":["../src/RowSelectionRadioColumn.tsx"],"sourcesContent":["import { RowSelectionRadioCellValue } from \"./RowSelectionRadioCellValue\";\nimport { GridColumn, GridColumnProps } from \"./GridColumn\";\nimport { RowSelectionRadioHeaderCell } from \"./RowSelectionRadioHeaderCell\";\nimport { useSelectionContext } from \"./SelectionContext\";\nimport { KeyboardEvent, useCallback } from \"react\";\n\nexport type RowSelectionRadioColumnProps<T> = Omit<\n GridColumnProps<T>,\n \"width\" | \"name\"\n>;\n\nexport function RowSelectionRadioColumn<T>(\n props: RowSelectionRadioColumnProps<T>\n) {\n const { selectRows } = useSelectionContext();\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>, rowIndex: number) => {\n if (event.key === \" \") {\n selectRows({ rowIndex });\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [selectRows]\n );\n\n return (\n <GridColumn\n {...props}\n defaultWidth={100}\n headerComponent={RowSelectionRadioHeaderCell}\n cellValueComponent={RowSelectionRadioCellValue}\n onKeyDown={onKeyDown}\n />\n );\n}\n"],"names":[],"mappings":";;;;;;;AAWO,SAAS,wBACd,KACA,EAAA;AACA,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,mBAAoB,EAAA,CAAA;AAE3C,EAAA,MAAM,SAAY,GAAA,WAAA;AAAA,IAChB,CAAC,OAAsC,QAAqB,KAAA;AAC1D,MAAI,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AACrB,QAAW,UAAA,CAAA,EAAE,UAAU,CAAA,CAAA;AACvB,QAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,QAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,OACxB;AAAA,KACF;AAAA,IACA,CAAC,UAAU,CAAA;AAAA,GACb,CAAA;AAEA,EAAA,uBACG,GAAA,CAAA,UAAA,EAAA;AAAA,IACE,GAAG,KAAA;AAAA,IACJ,YAAc,EAAA,GAAA;AAAA,IACd,eAAiB,EAAA,2BAAA;AAAA,IACjB,kBAAoB,EAAA,0BAAA;AAAA,IACpB,SAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"RowSelectionRadioColumn.js","sources":["../src/RowSelectionRadioColumn.tsx"],"sourcesContent":["import { type KeyboardEvent, useCallback } from \"react\";\nimport { GridColumn, type GridColumnProps } from \"./GridColumn\";\nimport { RowSelectionRadioCellValue } from \"./RowSelectionRadioCellValue\";\nimport { RowSelectionRadioHeaderCell } from \"./RowSelectionRadioHeaderCell\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nexport type RowSelectionRadioColumnProps<T> = Omit<\n GridColumnProps<T>,\n \"width\" | \"name\"\n>;\n\nexport function RowSelectionRadioColumn<T>(\n props: RowSelectionRadioColumnProps<T>,\n) {\n const { selectRows } = useSelectionContext();\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>, rowIndex: number) => {\n if (event.key === \" \") {\n selectRows({ rowIndex });\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [selectRows],\n );\n\n return (\n <GridColumn\n {...props}\n defaultWidth={100}\n headerComponent={RowSelectionRadioHeaderCell}\n cellValueComponent={RowSelectionRadioCellValue}\n onKeyDown={onKeyDown}\n />\n );\n}\n"],"names":[],"mappings":";;;;;;;AAWO,SAAS,wBACd,KACA,EAAA;AACA,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,mBAAoB,EAAA,CAAA;AAE3C,EAAA,MAAM,SAAY,GAAA,WAAA;AAAA,IAChB,CAAC,OAAsC,QAAqB,KAAA;AAC1D,MAAI,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AACrB,QAAW,UAAA,CAAA,EAAE,UAAU,CAAA,CAAA;AACvB,QAAA,KAAA,CAAM,cAAe,EAAA,CAAA;AACrB,QAAA,KAAA,CAAM,eAAgB,EAAA,CAAA;AAAA,OACxB;AAAA,KACF;AAAA,IACA,CAAC,UAAU,CAAA;AAAA,GACb,CAAA;AAEA,EAAA,uBACG,GAAA,CAAA,UAAA,EAAA;AAAA,IACE,GAAG,KAAA;AAAA,IACJ,YAAc,EAAA,GAAA;AAAA,IACd,eAAiB,EAAA,2BAAA;AAAA,IACjB,kBAAoB,EAAA,0BAAA;AAAA,IACpB,SAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
@@ -1,8 +1,8 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { clsx } from 'clsx';
3
3
  import { RadioButtonIcon } from '@salt-ds/core';
4
- import { useWindow } from '@salt-ds/window';
5
4
  import { useComponentCssInjection } from '@salt-ds/styles';
5
+ import { useWindow } from '@salt-ds/window';
6
6
  import { AutoSizeHeaderCell } from './HeaderCell.js';
7
7
  import css_248z from './CheckboxCell.css.js';
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionRadioHeaderCell.js","sources":["../src/RowSelectionRadioHeaderCell.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\n\nimport { RadioButtonIcon } from \"@salt-ds/core\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport { AutoSizeHeaderCell } from \"./HeaderCell\";\nimport { HeaderCellProps } from \"./GridColumn\";\n\nimport checkboxCellCss from \"./CheckboxCell.css\";\n\nexport function RowSelectionRadioHeaderCell<T>(props: HeaderCellProps<T>) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n return (\n <AutoSizeHeaderCell {...props}>\n <div className={clsx(\"saltGridCheckboxContainer\", \"saltGrid-hidden\")}>\n <RadioButtonIcon />\n </div>\n </AutoSizeHeaderCell>\n );\n}\n"],"names":["checkboxCellCss"],"mappings":";;;;;;;;AAWO,SAAS,4BAA+B,KAA2B,EAAA;AACxE,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,uBACG,GAAA,CAAA,kBAAA,EAAA;AAAA,IAAoB,GAAG,KAAA;AAAA,IACtB,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA;AAAA,MAAI,SAAA,EAAW,IAAK,CAAA,2BAAA,EAA6B,iBAAiB,CAAA;AAAA,MACjE,8BAAC,eAAgB,EAAA,EAAA,CAAA;AAAA,KACnB,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"RowSelectionRadioHeaderCell.js","sources":["../src/RowSelectionRadioHeaderCell.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\n\nimport { RadioButtonIcon } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport type { HeaderCellProps } from \"./GridColumn\";\nimport { AutoSizeHeaderCell } from \"./HeaderCell\";\n\nimport checkboxCellCss from \"./CheckboxCell.css\";\n\nexport function RowSelectionRadioHeaderCell<T>(props: HeaderCellProps<T>) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n return (\n <AutoSizeHeaderCell {...props}>\n <div className={clsx(\"saltGridCheckboxContainer\", \"saltGrid-hidden\")}>\n <RadioButtonIcon />\n </div>\n </AutoSizeHeaderCell>\n );\n}\n"],"names":["checkboxCellCss"],"mappings":";;;;;;;;AAWO,SAAS,4BAA+B,KAA2B,EAAA;AACxE,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,uBACG,GAAA,CAAA,kBAAA,EAAA;AAAA,IAAoB,GAAG,KAAA;AAAA,IACtB,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA;AAAA,MAAI,SAAA,EAAW,IAAK,CAAA,2BAAA,EAA6B,iBAAiB,CAAA;AAAA,MACjE,8BAAC,eAAgB,EAAA,EAAA,CAAA;AAAA,KACnB,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RowValidationStatus.js","sources":["../src/RowValidationStatus.tsx"],"sourcesContent":["import { StatusIndicator } from \"@salt-ds/core\";\nimport { createContext, useContext } from \"react\";\nimport { CellValidationState, GridColumn, GridColumnProps } from \"./GridColumn\";\n\nexport const RowValidationStatusContext = createContext<{\n status?: CellValidationState;\n}>({});\n\nexport type RowValidationStatusColumnProps<T> = Omit<\n GridColumnProps<T>,\n \"width\" | \"name\"\n>;\n\nexport function RowValidationStatusColumn<T>(\n props: RowValidationStatusColumnProps<T>\n) {\n return (\n <GridColumn\n aria-label=\"Row status\"\n defaultWidth={30}\n cellValueComponent={RowValidationCell}\n {...props}\n />\n );\n}\n\nconst knownStatus = new Set([\"error\", \"warning\", \"success\"]);\n\nfunction RowValidationCell() {\n const rowValidationContext = useContext(RowValidationStatusContext);\n if (\n !rowValidationContext?.status ||\n !knownStatus.has(rowValidationContext.status)\n )\n return null;\n\n const validationStatus = rowValidationContext.status;\n\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n width: \"100%\",\n }}\n >\n <StatusIndicator\n aria-label={`Row ${validationStatus}`}\n status={validationStatus}\n />\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;AAIa,MAAA,0BAAA,GAA6B,aAEvC,CAAA,EAAE;;;;"}
1
+ {"version":3,"file":"RowValidationStatus.js","sources":["../src/RowValidationStatus.tsx"],"sourcesContent":["import { StatusIndicator } from \"@salt-ds/core\";\nimport { createContext, useContext } from \"react\";\nimport {\n type CellValidationState,\n GridColumn,\n type GridColumnProps,\n} from \"./GridColumn\";\n\nexport const RowValidationStatusContext = createContext<{\n status?: CellValidationState;\n}>({});\n\nexport type RowValidationStatusColumnProps<T> = Omit<\n GridColumnProps<T>,\n \"width\" | \"name\"\n>;\n\nexport function RowValidationStatusColumn<T>(\n props: RowValidationStatusColumnProps<T>,\n) {\n return (\n <GridColumn\n aria-label=\"Row status\"\n defaultWidth={30}\n cellValueComponent={RowValidationCell}\n {...props}\n />\n );\n}\n\nconst knownStatus = new Set([\"error\", \"warning\", \"success\"]);\n\nfunction RowValidationCell() {\n const rowValidationContext = useContext(RowValidationStatusContext);\n if (\n !rowValidationContext?.status ||\n !knownStatus.has(rowValidationContext.status)\n )\n return null;\n\n const validationStatus = rowValidationContext.status;\n\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n width: \"100%\",\n }}\n >\n <StatusIndicator\n aria-label={`Row ${validationStatus}`}\n status={validationStatus}\n />\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;AAQa,MAAA,0BAAA,GAA6B,aAEvC,CAAA,EAAE;;;;"}
@@ -6,7 +6,7 @@ const SelectionContext = createContext(
6
6
  const useSelectionContext = () => {
7
7
  const c = useContext(SelectionContext);
8
8
  if (!c) {
9
- throw new Error(`useSelectionContext invoked outside of a Grid`);
9
+ throw new Error("useSelectionContext invoked outside of a Grid");
10
10
  }
11
11
  return c;
12
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionContext.js","sources":["../src/SelectionContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport { CellRange, SelectRowsOptions } from \"./internal\";\n\nexport interface SelectionContext {\n selectedCellRange: CellRange | undefined;\n selRowIdxs: Set<number>;\n isAnySelected: boolean;\n isAllSelected: boolean;\n selectRows: (args: SelectRowsOptions) => void;\n selectAll: () => void;\n unselectAll: () => void;\n}\n\nexport const SelectionContext = createContext<SelectionContext | undefined>(\n undefined\n);\n\nexport const useSelectionContext = () => {\n const c = useContext(SelectionContext);\n if (!c) {\n throw new Error(`useSelectionContext invoked outside of a Grid`);\n }\n return c;\n};\n"],"names":[],"mappings":";;AAaO,MAAM,gBAAmB,GAAA,aAAA;AAAA,EAC9B,KAAA,CAAA;AACF,EAAA;AAEO,MAAM,sBAAsB,MAAM;AACvC,EAAM,MAAA,CAAA,GAAI,WAAW,gBAAgB,CAAA,CAAA;AACrC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,CAA+C,6CAAA,CAAA,CAAA,CAAA;AAAA,GACjE;AACA,EAAO,OAAA,CAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"SelectionContext.js","sources":["../src/SelectionContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { CellRange, SelectRowsOptions } from \"./internal\";\n\nexport interface SelectionContext {\n selectedCellRange: CellRange | undefined;\n selRowIdxs: Set<number>;\n isAnySelected: boolean;\n isAllSelected: boolean;\n selectRows: (args: SelectRowsOptions) => void;\n selectAll: () => void;\n unselectAll: () => void;\n}\n\nexport const SelectionContext = createContext<SelectionContext | undefined>(\n undefined,\n);\n\nexport const useSelectionContext = () => {\n const c = useContext(SelectionContext);\n if (!c) {\n throw new Error(\"useSelectionContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":[],"mappings":";;AAaO,MAAM,gBAAmB,GAAA,aAAA;AAAA,EAC9B,KAAA,CAAA;AACF,EAAA;AAEO,MAAM,sBAAsB,MAAM;AACvC,EAAM,MAAA,CAAA,GAAI,WAAW,gBAAgB,CAAA,CAAA;AACrC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,+CAA+C,CAAA,CAAA;AAAA,GACjE;AACA,EAAO,OAAA,CAAA,CAAA;AACT;;;;"}
@@ -6,7 +6,7 @@ const SizingContext = createContext(
6
6
  const useSizingContext = () => {
7
7
  const c = useContext(SizingContext);
8
8
  if (!c) {
9
- throw new Error(`useSizingContext invoked outside of a Grid`);
9
+ throw new Error("useSizingContext invoked outside of a Grid");
10
10
  }
11
11
  return c;
12
12
  };
@@ -1 +1 @@
1
- {"version":3,"file":"SizingContext.js","sources":["../src/SizingContext.ts"],"sourcesContent":["import React, { createContext, useContext } from \"react\";\n\nexport interface SizingContext {\n rowHeight: number;\n resizeColumn: (colIdx: number, width: number) => void;\n onResizeHandleMouseDown: (event: React.MouseEvent<HTMLDivElement>) => void;\n}\n\nexport const SizingContext = createContext<SizingContext | undefined>(\n undefined\n);\nexport const useSizingContext = () => {\n const c = useContext(SizingContext);\n if (!c) {\n throw new Error(`useSizingContext invoked outside of a Grid`);\n }\n return c;\n};\n"],"names":[],"mappings":";;AAQO,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":"SizingContext.js","sources":["../src/SizingContext.ts"],"sourcesContent":["import type { MouseEvent } from \"react\";\nimport { createContext, useContext } from \"react\";\n\nexport interface SizingContext {\n rowHeight: number;\n resizeColumn: (colIdx: number, width: number) => void;\n onResizeHandleMouseDown: (event: MouseEvent<HTMLDivElement>) => void;\n}\n\nexport const SizingContext = createContext<SizingContext | undefined>(\n undefined,\n);\nexport const useSizingContext = () => {\n const c = useContext(SizingContext);\n if (!c) {\n throw new Error(\"useSizingContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":[],"mappings":";;AASO,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":"TextCellEditor.js","sources":["../src/TextCellEditor.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n ChangeEventHandler,\n KeyboardEventHandler,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport { useEditorContext } from \"./EditorContext\";\nimport { GridColumnModel, GridRowModel } from \"./Grid\";\n\nimport textCellEditorCss from \"./TextCellEditor.css\";\n\nconst withBaseName = makePrefixer(\"saltGridTextCellEditor\");\n\nexport interface TextCellEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n}\n\nexport function TextCellEditor<T>(props: TextCellEditorProps<T>) {\n const { column, row } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-text-cell-editor\",\n css: textCellEditorCss,\n window: targetWindow,\n });\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data)\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n useEffect(() => {\n const input = inputRef.current;\n const focusOut = (event: FocusEvent) => {\n if (!input?.contains(event.target as Node)) {\n endEditMode(editorText);\n }\n };\n\n // This uses the capture phase to detect clicks outside the input to avoid a race condition where the component gets unmounted when edit mode ends.\n document?.addEventListener(\"mousedown\", focusOut, true);\n\n return () => {\n document?.removeEventListener(\"mousedown\", focusOut, true);\n };\n }, [endEditMode, editorText]);\n\n return (\n <CellFrame separator={column?.separator} className={withBaseName()}>\n <div className={withBaseName(\"inputContainer\")}>\n <input\n data-testid=\"grid-cell-editor-input\"\n ref={inputRef}\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </CellFrame>\n );\n}\n"],"names":["textCellEditorCss"],"mappings":"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"}
1
+ {"version":3,"file":"TextCellEditor.js","sources":["../src/TextCellEditor.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n type ChangeEventHandler,\n type KeyboardEventHandler,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport { useEditorContext } from \"./EditorContext\";\nimport type { GridColumnModel, GridRowModel } from \"./Grid\";\n\nimport textCellEditorCss from \"./TextCellEditor.css\";\n\nconst withBaseName = makePrefixer(\"saltGridTextCellEditor\");\n\nexport interface TextCellEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n}\n\nexport function TextCellEditor<T>(props: TextCellEditorProps<T>) {\n const { column, row } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-text-cell-editor\",\n css: textCellEditorCss,\n window: targetWindow,\n });\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data),\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n useEffect(() => {\n const input = inputRef.current;\n const focusOut = (event: FocusEvent) => {\n if (!input?.contains(event.target as Node)) {\n endEditMode(editorText);\n }\n };\n\n // This uses the capture phase to detect clicks outside the input to avoid a race condition where the component gets unmounted when edit mode ends.\n document?.addEventListener(\"mousedown\", focusOut, true);\n\n return () => {\n document?.removeEventListener(\"mousedown\", focusOut, true);\n };\n }, [endEditMode, editorText]);\n\n return (\n <CellFrame separator={column?.separator} className={withBaseName()}>\n <div className={withBaseName(\"inputContainer\")}>\n <input\n data-testid=\"grid-cell-editor-input\"\n ref={inputRef}\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </CellFrame>\n );\n}\n"],"names":["textCellEditorCss"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { useRef, 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';
5
+ import { useRef, useEffect } from 'react';
6
6
  import css_248z from './CellMeasure.css.js';
7
7
 
8
8
  const withBaseName = makePrefixer("saltGridCellMeasure");
@@ -1 +1 @@
1
- {"version":3,"file":"CellMeasure.js","sources":["../src/internal/CellMeasure.tsx"],"sourcesContent":["import { useEffect, useRef } from \"react\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport cellMeasureCss from \"./CellMeasure.css\";\n\nconst withBaseName = makePrefixer(\"saltGridCellMeasure\");\n\nexport interface CellMeasureProps<T> {\n setRowHeight: (rowHeight: number) => void;\n}\n\n// Renders a cell in invisible location, measures its height and provides it to\n// the grid.\nexport function CellMeasure<T>(props: CellMeasureProps<T>) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-cell-measure\",\n css: cellMeasureCss,\n window: targetWindow,\n });\n\n const rowRef = useRef<HTMLTableRowElement>(null);\n const heightRef = useRef<number>(-1);\n\n const { setRowHeight } = props;\n\n useEffect(() => {\n if (rowRef.current) {\n const height = rowRef.current.getBoundingClientRect().height;\n if (heightRef.current !== height) {\n // console.log(`Row height changing to ${height}px`);\n heightRef.current = height;\n setRowHeight(height);\n }\n }\n });\n\n return (\n <div className={withBaseName()}>\n <table aria-hidden>\n <thead>\n <tr ref={rowRef}>\n <th>Invisible Cell</th>\n </tr>\n </thead>\n </table>\n </div>\n );\n}\n"],"names":["cellMeasureCss"],"mappings":";;;;;;;AAOA,MAAM,YAAA,GAAe,aAAa,qBAAqB,CAAA,CAAA;AAQhD,SAAS,YAAe,KAA4B,EAAA;AACzD,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,mBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,MAAA,GAAS,OAA4B,IAAI,CAAA,CAAA;AAC/C,EAAM,MAAA,SAAA,GAAY,OAAe,CAAE,CAAA,CAAA,CAAA;AAEnC,EAAM,MAAA,EAAE,cAAiB,GAAA,KAAA,CAAA;AAEzB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAO,OAAS,EAAA;AAClB,MAAA,MAAM,MAAS,GAAA,MAAA,CAAO,OAAQ,CAAA,qBAAA,EAAwB,CAAA,MAAA,CAAA;AACtD,MAAI,IAAA,SAAA,CAAU,YAAY,MAAQ,EAAA;AAEhC,QAAA,SAAA,CAAU,OAAU,GAAA,MAAA,CAAA;AACpB,QAAA,YAAA,CAAa,MAAM,CAAA,CAAA;AAAA,OACrB;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AAED,EAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,IAAI,WAAW,YAAa,EAAA;AAAA,IAC3B,QAAC,kBAAA,GAAA,CAAA,OAAA,EAAA;AAAA,MAAM,aAAW,EAAA,IAAA;AAAA,MAChB,QAAC,kBAAA,GAAA,CAAA,OAAA,EAAA;AAAA,QACC,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA;AAAA,UAAG,GAAK,EAAA,MAAA;AAAA,UACP,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA;AAAA,YAAG,QAAA,EAAA,gBAAA;AAAA,WAAc,CAAA;AAAA,SACpB,CAAA;AAAA,OACF,CAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"CellMeasure.js","sources":["../src/internal/CellMeasure.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useEffect, useRef } from \"react\";\n\nimport cellMeasureCss from \"./CellMeasure.css\";\n\nconst withBaseName = makePrefixer(\"saltGridCellMeasure\");\n\nexport interface CellMeasureProps<T> {\n setRowHeight: (rowHeight: number) => void;\n}\n\n// Renders a cell in invisible location, measures its height and provides it to\n// the grid.\nexport function CellMeasure<T>(props: CellMeasureProps<T>) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-cell-measure\",\n css: cellMeasureCss,\n window: targetWindow,\n });\n\n const rowRef = useRef<HTMLTableRowElement>(null);\n const heightRef = useRef<number>(-1);\n\n const { setRowHeight } = props;\n\n useEffect(() => {\n if (rowRef.current) {\n const height = rowRef.current.getBoundingClientRect().height;\n if (heightRef.current !== height) {\n // console.log(`Row height changing to ${height}px`);\n heightRef.current = height;\n setRowHeight(height);\n }\n }\n });\n\n return (\n <div className={withBaseName()}>\n <table aria-hidden>\n <thead>\n <tr ref={rowRef}>\n <th>Invisible Cell</th>\n </tr>\n </thead>\n </table>\n </div>\n );\n}\n"],"names":["cellMeasureCss"],"mappings":";;;;;;;AAOA,MAAM,YAAA,GAAe,aAAa,qBAAqB,CAAA,CAAA;AAQhD,SAAS,YAAe,KAA4B,EAAA;AACzD,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,mBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,MAAA,GAAS,OAA4B,IAAI,CAAA,CAAA;AAC/C,EAAM,MAAA,SAAA,GAAY,OAAe,CAAE,CAAA,CAAA,CAAA;AAEnC,EAAM,MAAA,EAAE,cAAiB,GAAA,KAAA,CAAA;AAEzB,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAO,OAAS,EAAA;AAClB,MAAA,MAAM,MAAS,GAAA,MAAA,CAAO,OAAQ,CAAA,qBAAA,EAAwB,CAAA,MAAA,CAAA;AACtD,MAAI,IAAA,SAAA,CAAU,YAAY,MAAQ,EAAA;AAEhC,QAAA,SAAA,CAAU,OAAU,GAAA,MAAA,CAAA;AACpB,QAAA,YAAA,CAAa,MAAM,CAAA,CAAA;AAAA,OACrB;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AAED,EAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,IAAI,WAAW,YAAa,EAAA;AAAA,IAC3B,QAAC,kBAAA,GAAA,CAAA,OAAA,EAAA;AAAA,MAAM,aAAW,EAAA,IAAA;AAAA,MAChB,QAAC,kBAAA,GAAA,CAAA,OAAA,EAAA;AAAA,QACC,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA;AAAA,UAAG,GAAK,EAAA,MAAA;AAAA,UACP,QAAC,kBAAA,GAAA,CAAA,IAAA,EAAA;AAAA,YAAG,QAAA,EAAA,gBAAA;AAAA,WAAc,CAAA;AAAA,SACpB,CAAA;AAAA,OACF,CAAA;AAAA,KACF,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ;;;;"}
@@ -1,8 +1,8 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
- import { useMemo } 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';
5
+ import { useMemo } from 'react';
6
6
  import css_248z from './ColumnDropTarget.css.js';
7
7
 
8
8
  const withBaseName = makePrefixer("saltGridColumnDropTarget");
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnDropTarget.js","sources":["../src/internal/ColumnDropTarget.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\n\nimport columDropTargetCss from \"./ColumnDropTarget.css\";\n\nconst withBaseName = makePrefixer(\"saltGridColumnDropTarget\");\n\nexport interface ColumnDropTargetProps {\n x?: number;\n}\n\n// When the user drags a column, this component is used to show the potential\n// drop target. Experimental feature. No UX yet.\nexport function ColumnDropTarget(props: ColumnDropTargetProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-column-drop-target\",\n css: columDropTargetCss,\n window: targetWindow,\n });\n\n const { x = 0 } = props;\n\n const style = useMemo(() => {\n return {\n left: `${x - 2}px`,\n };\n }, [x]);\n\n if (props.x === undefined) {\n return null;\n }\n\n return <div className={withBaseName()} style={style} />;\n}\n"],"names":["columDropTargetCss"],"mappings":";;;;;;;AAOA,MAAM,YAAA,GAAe,aAAa,0BAA0B,CAAA,CAAA;AAQrD,SAAS,iBAAiB,KAA8B,EAAA;AAC7D,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,yBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,EAAE,CAAI,GAAA,CAAA,EAAM,GAAA,KAAA,CAAA;AAElB,EAAM,MAAA,KAAA,GAAQ,QAAQ,MAAM;AAC1B,IAAO,OAAA;AAAA,MACL,IAAA,EAAM,GAAG,CAAI,GAAA,CAAA,CAAA,EAAA,CAAA;AAAA,KACf,CAAA;AAAA,GACF,EAAG,CAAC,CAAC,CAAC,CAAA,CAAA;AAEN,EAAI,IAAA,KAAA,CAAM,MAAM,KAAW,CAAA,EAAA;AACzB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,uBAAQ,GAAA,CAAA,KAAA,EAAA;AAAA,IAAI,WAAW,YAAa,EAAA;AAAA,IAAG,KAAA;AAAA,GAAc,CAAA,CAAA;AACvD;;;;"}
1
+ {"version":3,"file":"ColumnDropTarget.js","sources":["../src/internal/ColumnDropTarget.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useMemo } from \"react\";\n\nimport columDropTargetCss from \"./ColumnDropTarget.css\";\n\nconst withBaseName = makePrefixer(\"saltGridColumnDropTarget\");\n\nexport interface ColumnDropTargetProps {\n x?: number;\n}\n\n// When the user drags a column, this component is used to show the potential\n// drop target. Experimental feature. No UX yet.\nexport function ColumnDropTarget(props: ColumnDropTargetProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-column-drop-target\",\n css: columDropTargetCss,\n window: targetWindow,\n });\n\n const { x = 0 } = props;\n\n const style = useMemo(() => {\n return {\n left: `${x - 2}px`,\n };\n }, [x]);\n\n if (props.x === undefined) {\n return null;\n }\n\n return <div className={withBaseName()} style={style} />;\n}\n"],"names":["columDropTargetCss"],"mappings":";;;;;;;AAOA,MAAM,YAAA,GAAe,aAAa,0BAA0B,CAAA,CAAA;AAQrD,SAAS,iBAAiB,KAA8B,EAAA;AAC7D,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,yBAAA;AAAA,IACR,GAAK,EAAAA,QAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,EAAE,CAAI,GAAA,CAAA,EAAM,GAAA,KAAA,CAAA;AAElB,EAAM,MAAA,KAAA,GAAQ,QAAQ,MAAM;AAC1B,IAAO,OAAA;AAAA,MACL,IAAA,EAAM,GAAG,CAAI,GAAA,CAAA,CAAA,EAAA,CAAA;AAAA,KACf,CAAA;AAAA,GACF,EAAG,CAAC,CAAC,CAAC,CAAA,CAAA;AAEN,EAAI,IAAA,KAAA,CAAM,MAAM,KAAW,CAAA,EAAA;AACzB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,uBAAQ,GAAA,CAAA,KAAA,EAAA;AAAA,IAAI,WAAW,YAAa,EAAA;AAAA,IAAG,KAAA;AAAA,GAAc,CAAA,CAAA;AACvD;;;;"}
@@ -1,10 +1,10 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { useWindow } from '@salt-ds/window';
3
- import { useComponentCssInjection } from '@salt-ds/styles';
4
2
  import { makePrefixer } from '@salt-ds/core';
5
- import { TableColGroup } from './TableColGroup.js';
3
+ import { useComponentCssInjection } from '@salt-ds/styles';
4
+ import { useWindow } from '@salt-ds/window';
6
5
  import { HeaderRow } from './HeaderRow.js';
7
6
  import { TableBody } from './TableBody.js';
7
+ import { TableColGroup } from './TableColGroup.js';
8
8
  import css_248z from './ColumnGhost.css.js';
9
9
 
10
10
  const withBaseName = makePrefixer("saltGridColumnGhost");