@salt-ds/data-grid 1.0.19 → 1.0.21

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 (59) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist-cjs/BaseCell.js.map +1 -1
  3. package/dist-cjs/ColumnDataContext.js.map +1 -1
  4. package/dist-cjs/ColumnDragContext.js.map +1 -1
  5. package/dist-cjs/ColumnSortContext.js.map +1 -1
  6. package/dist-cjs/CursorContext.js.map +1 -1
  7. package/dist-cjs/EditorContext.js.map +1 -1
  8. package/dist-cjs/Grid.js.map +1 -1
  9. package/dist-cjs/GridContext.js.map +1 -1
  10. package/dist-cjs/GroupHeaderCell.js.map +1 -1
  11. package/dist-cjs/HeaderCell.js.map +1 -1
  12. package/dist-cjs/LayoutContext.js.map +1 -1
  13. package/dist-cjs/NumericColumn.js.map +1 -1
  14. package/dist-cjs/RowSelectionCheckboxCellValue.js.map +1 -1
  15. package/dist-cjs/RowSelectionCheckboxHeaderCellValue.js.map +1 -1
  16. package/dist-cjs/RowSelectionRadioCellValue.js.map +1 -1
  17. package/dist-cjs/SelectionContext.js.map +1 -1
  18. package/dist-cjs/SizingContext.js.map +1 -1
  19. package/dist-cjs/TextCellEditor.js.map +1 -1
  20. package/dist-cjs/internal/CellMeasure.js.map +1 -1
  21. package/dist-cjs/internal/ColumnDropTarget.js.map +1 -1
  22. package/dist-cjs/internal/FakeCell.js.map +1 -1
  23. package/dist-cjs/internal/GroupHeaderRow.js.map +1 -1
  24. package/dist-cjs/internal/HeaderRow.js.map +1 -1
  25. package/dist-cjs/internal/TableBody.js.map +1 -1
  26. package/dist-cjs/internal/TableRow.js.map +1 -1
  27. package/dist-cjs/internal/gridHooks.js.map +1 -1
  28. package/dist-cjs/internal/utils.js.map +1 -1
  29. package/dist-es/BaseCell.js +1 -1
  30. package/dist-es/BaseCell.js.map +1 -1
  31. package/dist-es/ColumnDataContext.js.map +1 -1
  32. package/dist-es/ColumnDragContext.js.map +1 -1
  33. package/dist-es/ColumnSortContext.js.map +1 -1
  34. package/dist-es/CursorContext.js.map +1 -1
  35. package/dist-es/EditorContext.js.map +1 -1
  36. package/dist-es/Grid.js.map +1 -1
  37. package/dist-es/GridColumn.js +1 -1
  38. package/dist-es/GridContext.js.map +1 -1
  39. package/dist-es/GroupHeaderCell.js.map +1 -1
  40. package/dist-es/HeaderCell.js.map +1 -1
  41. package/dist-es/LayoutContext.js.map +1 -1
  42. package/dist-es/NumericColumn.js.map +1 -1
  43. package/dist-es/RowSelectionCheckboxCellValue.js.map +1 -1
  44. package/dist-es/RowSelectionCheckboxHeaderCellValue.js.map +1 -1
  45. package/dist-es/RowSelectionRadioCellValue.js.map +1 -1
  46. package/dist-es/SelectionContext.js.map +1 -1
  47. package/dist-es/SizingContext.js.map +1 -1
  48. package/dist-es/TextCellEditor.js.map +1 -1
  49. package/dist-es/internal/CellMeasure.js.map +1 -1
  50. package/dist-es/internal/ColumnDropTarget.js.map +1 -1
  51. package/dist-es/internal/FakeCell.js.map +1 -1
  52. package/dist-es/internal/GroupHeaderRow.js.map +1 -1
  53. package/dist-es/internal/HeaderRow.js.map +1 -1
  54. package/dist-es/internal/TableBody.js.map +1 -1
  55. package/dist-es/internal/TableRow.js.map +1 -1
  56. package/dist-es/internal/gridHooks.js +2 -2
  57. package/dist-es/internal/gridHooks.js.map +1 -1
  58. package/dist-es/internal/utils.js.map +1 -1
  59. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @salt-ds/data-grid
2
2
 
3
+ ## 1.0.21
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [f107d63]
8
+ - @salt-ds/core@1.46.1
9
+ - @salt-ds/lab@1.0.0-alpha.69
10
+
11
+ ## 1.0.20
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies [4a240fd]
16
+ - Updated dependencies [8b4cbfb]
17
+ - Updated dependencies [bbdf4a6]
18
+ - Updated dependencies [ec1736e]
19
+ - Updated dependencies [1a50f7b]
20
+ - @salt-ds/lab@1.0.0-alpha.68
21
+ - @salt-ds/core@1.46.0
22
+
3
23
  ## 1.0.19
4
24
 
5
25
  ### Patch Changes
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCell.js","sources":["../src/BaseCell.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport type { GridColumnModel } from \"./Grid\";\nimport type { GridCellProps } from \"./GridColumn\";\nimport { Cursor, useFocusableContent } from \"./internal\";\nimport {\n CellErrorIcon,\n CellSuccessIcon,\n CellWarningIcon,\n} from \"./internal/CellStatusIcons\";\n\nimport baseCellCss from \"./BaseCell.css\";\n\nconst withBaseName = makePrefixer(\"saltGridBaseCell\");\n\nexport function getCellId<T>(rowKey: string, column: GridColumnModel<T>) {\n return `R${rowKey}C${column.info.props.id}`;\n}\n\nconst icons = {\n warning: CellWarningIcon,\n error: CellErrorIcon,\n success: CellSuccessIcon,\n};\n\n// Default component for grid cells. Provides selection, on-hover highlighting,\n// cursor etc.\nexport function BaseCell<T>(props: GridCellProps<T>) {\n const {\n column,\n className,\n row,\n style,\n isFocused,\n isSelected,\n isEditable,\n children,\n validationStatus,\n validationMessage,\n validationType = \"light\",\n align,\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-base-cell\",\n css: baseCellCss,\n window: targetWindow,\n });\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableCellElement>();\n const cellId = getCellId(row.key, column);\n const hasValidation = !!validationStatus;\n const hasValidationMessage = !!validationMessage || hasValidation;\n const validationMessageId = `${cellId}-statusMessage`;\n return (\n <CellFrame\n ref={ref}\n id={cellId}\n data-row-index={row.index}\n data-column-index={column.index}\n data-testid={isFocused ? \"grid-cell-focused\" : undefined}\n // aria-colindex uses one-based array indexing\n aria-colindex={column.index + 1}\n role=\"gridcell\"\n separator={column.separator}\n isSelected={isSelected}\n isEditable={isEditable}\n className={clsx(className, {\n [withBaseName(\"hasValidation\")]: hasValidation,\n [withBaseName(`status-${validationStatus as string}`)]:\n validationStatus,\n })}\n style={style}\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n aria-invalid={validationStatus === \"error\" || undefined}\n aria-describedby={hasValidationMessage ? validationMessageId : undefined}\n >\n {hasValidationMessage ? (\n <div\n id={validationMessageId}\n className=\"salt-visuallyHidden\"\n aria-hidden\n role=\"status\"\n >\n {validationMessage\n ? validationMessage\n : `Cell validation state is ${validationStatus as string}`}\n </div>\n ) : null}\n <div className={clsx(withBaseName(\"valueContainer\"))}>{children}</div>\n {hasValidation && validationType === \"strong\" ? (\n <div\n className={clsx(withBaseName(\"statusContainer\"), {\n [withBaseName(`statusContainer-align-${align as string}`)]: align,\n })}\n >\n {icons[validationStatus]}\n </div>\n ) : null}\n {isFocused && isEditable && <CornerTag focusOnly={true} />}\n {isFocused && !isFocusableContent && <Cursor />}\n </CellFrame>\n );\n}\n"],"names":["makePrefixer","CellWarningIcon","CellErrorIcon","CellSuccessIcon","useWindow","useComponentCssInjection","baseCellCss","useFocusableContent","jsxs","CellFrame","clsx","jsx","CornerTag","Cursor"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,MAAM,YAAA,GAAeA,kBAAa,kBAAkB,CAAA;AAEpC,SAAA,SAAA,CAAa,QAAgB,MAA4B,EAAA;AACvE,EAAA,OAAO,IAAI,MAAM,CAAA,CAAA,EAAI,MAAO,CAAA,IAAA,CAAK,MAAM,EAAE,CAAA,CAAA;AAC3C;AAEA,MAAM,KAAQ,GAAA;AAAA,EACZ,OAAS,EAAAC,+BAAA;AAAA,EACT,KAAO,EAAAC,6BAAA;AAAA,EACP,OAAS,EAAAC;AACX,CAAA;AAIO,SAAS,SAAY,KAAyB,EAAA;AACnD,EAAM,MAAA;AAAA,IACJ,MAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,cAAiB,GAAA,OAAA;AAAA,IACjB;AAAA,GACE,GAAA,KAAA;AAEJ,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,gBAAA;AAAA,IACR,GAAK,EAAAC,UAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,GAAA,EAAK,kBAAoB,EAAA,OAAA,KAC/BC,6BAA0C,EAAA;AAC5C,EAAA,MAAM,MAAS,GAAA,SAAA,CAAU,GAAI,CAAA,GAAA,EAAK,MAAM,CAAA;AACxC,EAAM,MAAA,aAAA,GAAgB,CAAC,CAAC,gBAAA;AACxB,EAAM,MAAA,oBAAA,GAAuB,CAAC,CAAC,iBAAqB,IAAA,aAAA;AACpD,EAAM,MAAA,mBAAA,GAAsB,GAAG,MAAM,CAAA,cAAA,CAAA;AACrC,EACE,uBAAAC,eAAA;AAAA,IAACC,mBAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,EAAI,EAAA,MAAA;AAAA,MACJ,kBAAgB,GAAI,CAAA,KAAA;AAAA,MACpB,qBAAmB,MAAO,CAAA,KAAA;AAAA,MAC1B,aAAA,EAAa,YAAY,mBAAsB,GAAA,KAAA,CAAA;AAAA,MAE/C,eAAA,EAAe,OAAO,KAAQ,GAAA,CAAA;AAAA,MAC9B,IAAK,EAAA,UAAA;AAAA,MACL,WAAW,MAAO,CAAA,SAAA;AAAA,MAClB,UAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA,EAAWC,UAAK,SAAW,EAAA;AAAA,QACzB,CAAC,YAAA,CAAa,eAAe,CAAC,GAAG,aAAA;AAAA,QACjC,CAAC,YAAa,CAAA,CAAA,OAAA,EAAU,gBAA0B,CAAA,CAAE,CAAC,GACnD;AAAA,OACH,CAAA;AAAA,MACD,KAAA;AAAA,MACA,QAAU,EAAA,SAAA,IAAa,CAAC,kBAAA,GAAqB,CAAI,GAAA,CAAA,CAAA;AAAA,MACjD,OAAA;AAAA,MACA,cAAA,EAAc,qBAAqB,OAAW,IAAA,KAAA,CAAA;AAAA,MAC9C,kBAAA,EAAkB,uBAAuB,mBAAsB,GAAA,KAAA,CAAA;AAAA,MAE9D,QAAA,EAAA;AAAA,QACC,oBAAA,mBAAAC,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,EAAI,EAAA,mBAAA;AAAA,YACJ,SAAU,EAAA,qBAAA;AAAA,YACV,aAAW,EAAA,IAAA;AAAA,YACX,IAAK,EAAA,QAAA;AAAA,YAEJ,QAAA,EAAA,iBAAA,GACG,iBACA,GAAA,CAAA,yBAAA,EAA4B,gBAA0B,CAAA;AAAA;AAAA,SAE1D,GAAA,IAAA;AAAA,wBACJA,cAAA,CAAC,SAAI,SAAW,EAAAD,SAAA,CAAK,aAAa,gBAAgB,CAAC,GAAI,QAAS,EAAA,CAAA;AAAA,QAC/D,aAAA,IAAiB,mBAAmB,QACnC,mBAAAC,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAW,EAAAD,SAAA,CAAK,YAAa,CAAA,iBAAiB,CAAG,EAAA;AAAA,cAC/C,CAAC,YAAa,CAAA,CAAA,sBAAA,EAAyB,KAAe,CAAA,CAAE,CAAC,GAAG;AAAA,aAC7D,CAAA;AAAA,YAEA,gBAAM,gBAAgB;AAAA;AAAA,SAEvB,GAAA,IAAA;AAAA,QACH,SAAa,IAAA,UAAA,oBAAeC,cAAA,CAAAC,mBAAA,EAAA,EAAU,WAAW,IAAM,EAAA,CAAA;AAAA,QACvD,SAAa,IAAA,CAAC,kBAAsB,oBAAAD,cAAA,CAACE,aAAO,EAAA,EAAA;AAAA;AAAA;AAAA,GAC/C;AAEJ;;;;;"}
1
+ {"version":3,"file":"BaseCell.js","sources":["../src/BaseCell.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport type { GridColumnModel } from \"./Grid\";\nimport type { GridCellProps } from \"./GridColumn\";\nimport { Cursor, useFocusableContent } from \"./internal\";\nimport {\n CellErrorIcon,\n CellSuccessIcon,\n CellWarningIcon,\n} from \"./internal/CellStatusIcons\";\n\nimport baseCellCss from \"./BaseCell.css\";\n\nconst withBaseName = makePrefixer(\"saltGridBaseCell\");\n\nexport function getCellId<T>(rowKey: string, column: GridColumnModel<T>) {\n return `R${rowKey}C${column.info.props.id}`;\n}\n\nconst icons = {\n warning: CellWarningIcon,\n error: CellErrorIcon,\n success: CellSuccessIcon,\n};\n\n// Default component for grid cells. Provides selection, on-hover highlighting,\n// cursor etc.\nexport function BaseCell<T>(props: GridCellProps<T>) {\n const {\n column,\n className,\n row,\n style,\n isFocused,\n isSelected,\n isEditable,\n children,\n validationStatus,\n validationMessage,\n validationType = \"light\",\n align,\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-base-cell\",\n css: baseCellCss,\n window: targetWindow,\n });\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableCellElement>();\n const cellId = getCellId(row.key, column);\n const hasValidation = !!validationStatus;\n const hasValidationMessage = !!validationMessage || hasValidation;\n const validationMessageId = `${cellId}-statusMessage`;\n return (\n <CellFrame\n ref={ref}\n id={cellId}\n data-row-index={row.index}\n data-column-index={column.index}\n data-testid={isFocused ? \"grid-cell-focused\" : undefined}\n // aria-colindex uses one-based array indexing\n aria-colindex={column.index + 1}\n role=\"gridcell\"\n separator={column.separator}\n isSelected={isSelected}\n isEditable={isEditable}\n className={clsx(className, {\n [withBaseName(\"hasValidation\")]: hasValidation,\n [withBaseName(`status-${validationStatus as string}`)]:\n validationStatus,\n })}\n style={style}\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n aria-invalid={validationStatus === \"error\" || undefined}\n aria-describedby={hasValidationMessage ? validationMessageId : undefined}\n >\n {hasValidationMessage ? (\n <div\n id={validationMessageId}\n className=\"salt-visuallyHidden\"\n aria-hidden\n role=\"status\"\n >\n {validationMessage\n ? validationMessage\n : `Cell validation state is ${validationStatus as string}`}\n </div>\n ) : null}\n <div className={clsx(withBaseName(\"valueContainer\"))}>{children}</div>\n {hasValidation && validationType === \"strong\" ? (\n <div\n className={clsx(withBaseName(\"statusContainer\"), {\n [withBaseName(`statusContainer-align-${align as string}`)]: align,\n })}\n >\n {icons[validationStatus]}\n </div>\n ) : null}\n {isFocused && isEditable && <CornerTag focusOnly={true} />}\n {isFocused && !isFocusableContent && <Cursor />}\n </CellFrame>\n );\n}\n"],"names":["makePrefixer","CellWarningIcon","CellErrorIcon","CellSuccessIcon","useWindow","useComponentCssInjection","baseCellCss","useFocusableContent","jsxs","CellFrame","clsx","jsx","CornerTag","Cursor"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnDataContext.js","sources":["../src/ColumnDataContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { GridColumnModel } from \"./Grid\";\n\nexport interface ColumnDataContext<T> {\n getColById: (id: string) => GridColumnModel<T> | undefined;\n}\n\nexport const ColumnDataContext = createContext<\n ColumnDataContext<any> | undefined\n>(undefined);\n\nexport const useColumnDataContext = () => {\n const c = useContext(ColumnDataContext);\n if (!c) {\n throw new Error(\"useColumnDataContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAOa,MAAA,iBAAA,GAAoBA,oBAE/B,KAAS,CAAA;AAEJ,MAAM,uBAAuB,MAAM;AACxC,EAAM,MAAA,CAAA,GAAIC,iBAAW,iBAAiB,CAAA;AACtC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,gDAAgD,CAAA;AAAA;AAElE,EAAO,OAAA,CAAA;AACT;;;;;"}
1
+ {"version":3,"file":"ColumnDataContext.js","sources":["../src/ColumnDataContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { GridColumnModel } from \"./Grid\";\n\nexport interface ColumnDataContext<T> {\n getColById: (id: string) => GridColumnModel<T> | undefined;\n}\n\nexport const ColumnDataContext = createContext<\n ColumnDataContext<any> | undefined\n>(undefined);\n\nexport const useColumnDataContext = () => {\n const c = useContext(ColumnDataContext);\n if (!c) {\n throw new Error(\"useColumnDataContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAOa,MAAA,iBAAA,GAAoBA,oBAE/B,MAAS;AAEJ,MAAM,uBAAuB,MAAM;AACxC,EAAM,MAAA,CAAA,GAAIC,iBAAW,iBAAiB,CAAA;AACtC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,gDAAgD,CAAA;AAAA;AAElE,EAAO,OAAA,CAAA;AACT;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnDragContext.js","sources":["../src/ColumnDragContext.ts"],"sourcesContent":["import { type MouseEventHandler, createContext, useContext } from \"react\";\n\nexport interface ColumnDragContext {\n columnMove?: boolean;\n onColumnMoveHandleMouseDown: MouseEventHandler<HTMLDivElement>;\n}\n\nexport const ColumnDragContext = createContext<ColumnDragContext | undefined>(\n undefined,\n);\n\nexport const useColumnDragContext = () => {\n const c = useContext(ColumnDragContext);\n if (!c) {\n throw new Error(\"useColumnDragContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAOO,MAAM,iBAAoB,GAAAA,mBAAA;AAAA,EAC/B,KAAA;AACF;AAEO,MAAM,uBAAuB,MAAM;AACxC,EAAM,MAAA,CAAA,GAAIC,iBAAW,iBAAiB,CAAA;AACtC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,gDAAgD,CAAA;AAAA;AAElE,EAAO,OAAA,CAAA;AACT;;;;;"}
1
+ {"version":3,"file":"ColumnDragContext.js","sources":["../src/ColumnDragContext.ts"],"sourcesContent":["import { type MouseEventHandler, createContext, useContext } from \"react\";\n\nexport interface ColumnDragContext {\n columnMove?: boolean;\n onColumnMoveHandleMouseDown: MouseEventHandler<HTMLDivElement>;\n}\n\nexport const ColumnDragContext = createContext<ColumnDragContext | undefined>(\n undefined,\n);\n\nexport const useColumnDragContext = () => {\n const c = useContext(ColumnDragContext);\n if (!c) {\n throw new Error(\"useColumnDragContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAOO,MAAM,iBAAoB,GAAAA,mBAAA;AAAA,EAC/B;AACF;AAEO,MAAM,uBAAuB,MAAM;AACxC,EAAM,MAAA,CAAA,GAAIC,iBAAW,iBAAiB,CAAA;AACtC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,gDAAgD,CAAA;AAAA;AAElE,EAAO,OAAA,CAAA;AACT;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnSortContext.js","sources":["../src/ColumnSortContext.ts"],"sourcesContent":["import type { SetStateAction } from \"react\";\nimport { createContext, useContext } from \"react\";\nimport type { SortOrder } from \"./Grid\";\nimport type { GridColumnProps } from \"./GridColumn\";\n\nexport interface ColumnSortContext {\n sortByColumnId?: GridColumnProps[\"id\"];\n setSortByColumnId: (c: SetStateAction<GridColumnProps[\"id\"]>) => void;\n sortOrder: SortOrder;\n setSortOrder: (o: SortOrder) => void;\n onClickSortColumn: (colHeaderId: GridColumnProps[\"id\"]) => void;\n}\n\nexport const ColumnSortContext = createContext<ColumnSortContext | undefined>(\n undefined,\n);\n\nexport const useColumnSortContext = () => {\n const c = useContext(ColumnSortContext);\n if (!c) {\n throw new Error(\"useColumnSortContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAaO,MAAM,iBAAoB,GAAAA,mBAAA;AAAA,EAC/B,KAAA;AACF;AAEO,MAAM,uBAAuB,MAAM;AACxC,EAAM,MAAA,CAAA,GAAIC,iBAAW,iBAAiB,CAAA;AACtC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,gDAAgD,CAAA;AAAA;AAElE,EAAO,OAAA,CAAA;AACT;;;;;"}
1
+ {"version":3,"file":"ColumnSortContext.js","sources":["../src/ColumnSortContext.ts"],"sourcesContent":["import type { SetStateAction } from \"react\";\nimport { createContext, useContext } from \"react\";\nimport type { SortOrder } from \"./Grid\";\nimport type { GridColumnProps } from \"./GridColumn\";\n\nexport interface ColumnSortContext {\n sortByColumnId?: GridColumnProps[\"id\"];\n setSortByColumnId: (c: SetStateAction<GridColumnProps[\"id\"]>) => void;\n sortOrder: SortOrder;\n setSortOrder: (o: SortOrder) => void;\n onClickSortColumn: (colHeaderId: GridColumnProps[\"id\"]) => void;\n}\n\nexport const ColumnSortContext = createContext<ColumnSortContext | undefined>(\n undefined,\n);\n\nexport const useColumnSortContext = () => {\n const c = useContext(ColumnSortContext);\n if (!c) {\n throw new Error(\"useColumnSortContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAaO,MAAM,iBAAoB,GAAAA,mBAAA;AAAA,EAC/B;AACF;AAEO,MAAM,uBAAuB,MAAM;AACxC,EAAM,MAAA,CAAA,GAAIC,iBAAW,iBAAiB,CAAA;AACtC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,gDAAgD,CAAA;AAAA;AAElE,EAAO,OAAA,CAAA;AACT;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"CursorContext.js","sources":["../src/CursorContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport type FocusedPart = \"header\" | \"body\";\n\nexport interface CursorContext {\n isFocused: boolean;\n cursorRowIdx: number | undefined;\n cursorColIdx: number | undefined;\n moveCursor: (part: FocusedPart, rowIdx: number, colIdx: number) => void;\n focusedPart: FocusedPart;\n headerIsFocusable: boolean;\n}\n\nexport const CursorContext = createContext<CursorContext | undefined>(\n undefined,\n);\nexport const useCursorContext = () => {\n const c = useContext(CursorContext);\n if (!c) {\n throw new Error(\"useCursorContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAaO,MAAM,aAAgB,GAAAA,mBAAA;AAAA,EAC3B,KAAA;AACF;AACO,MAAM,mBAAmB,MAAM;AACpC,EAAM,MAAA,CAAA,GAAIC,iBAAW,aAAa,CAAA;AAClC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,4CAA4C,CAAA;AAAA;AAE9D,EAAO,OAAA,CAAA;AACT;;;;;"}
1
+ {"version":3,"file":"CursorContext.js","sources":["../src/CursorContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport type FocusedPart = \"header\" | \"body\";\n\nexport interface CursorContext {\n isFocused: boolean;\n cursorRowIdx: number | undefined;\n cursorColIdx: number | undefined;\n moveCursor: (part: FocusedPart, rowIdx: number, colIdx: number) => void;\n focusedPart: FocusedPart;\n headerIsFocusable: boolean;\n}\n\nexport const CursorContext = createContext<CursorContext | undefined>(\n undefined,\n);\nexport const useCursorContext = () => {\n const c = useContext(CursorContext);\n if (!c) {\n throw new Error(\"useCursorContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAaO,MAAM,aAAgB,GAAAA,mBAAA;AAAA,EAC3B;AACF;AACO,MAAM,mBAAmB,MAAM;AACpC,EAAM,MAAA,CAAA,GAAIC,iBAAW,aAAa,CAAA;AAClC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,4CAA4C,CAAA;AAAA;AAE9D,EAAO,OAAA,CAAA;AACT;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"EditorContext.js","sources":["../src/EditorContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport interface EditorContext {\n initialText?: string;\n editMode?: boolean;\n startEditMode: () => void;\n endEditMode: (value: string) => void;\n cancelEditMode: () => void;\n}\n\nexport const EditorContext = createContext<EditorContext | undefined>(\n undefined,\n);\nexport const useEditorContext = () => {\n const c = useContext(EditorContext);\n if (!c) {\n throw new Error(\"useEditorContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAUO,MAAM,aAAgB,GAAAA,mBAAA;AAAA,EAC3B,KAAA;AACF;AACO,MAAM,mBAAmB,MAAM;AACpC,EAAM,MAAA,CAAA,GAAIC,iBAAW,aAAa,CAAA;AAClC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,4CAA4C,CAAA;AAAA;AAE9D,EAAO,OAAA,CAAA;AACT;;;;;"}
1
+ {"version":3,"file":"EditorContext.js","sources":["../src/EditorContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport interface EditorContext {\n initialText?: string;\n editMode?: boolean;\n startEditMode: () => void;\n endEditMode: (value: string) => void;\n cancelEditMode: () => void;\n}\n\nexport const EditorContext = createContext<EditorContext | undefined>(\n undefined,\n);\nexport const useEditorContext = () => {\n const c = useContext(EditorContext);\n if (!c) {\n throw new Error(\"useEditorContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAUO,MAAM,aAAgB,GAAAA,mBAAA;AAAA,EAC3B;AACF;AACO,MAAM,mBAAmB,MAAM;AACpC,EAAM,MAAA,CAAA,GAAIC,iBAAW,aAAa,CAAA;AAClC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,4CAA4C,CAAA;AAAA;AAE9D,EAAO,OAAA,CAAA;AACT;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Grid.js","sources":["../src/Grid.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type CSSProperties,\n type KeyboardEvent,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { ColumnDataContext } from \"./ColumnDataContext\";\nimport { ColumnDragContext } from \"./ColumnDragContext\";\nimport type { ColumnGroupProps } from \"./ColumnGroup\";\nimport { ColumnSortContext } from \"./ColumnSortContext\";\nimport { CursorContext, type FocusedPart } from \"./CursorContext\";\nimport { EditorContext } from \"./EditorContext\"; // TODO remove\nimport type {\n CellValidationState,\n GridColumnInfo,\n GridColumnProps,\n} from \"./GridColumn\";\nimport { GridContext } from \"./GridContext\";\nimport { LayoutContext } from \"./LayoutContext\";\nimport { SelectionContext } from \"./SelectionContext\";\nimport { SizingContext } from \"./SizingContext\";\nimport {\n CellMeasure,\n LeftPart,\n MiddlePart,\n RightPart,\n Scrollable,\n type ScrollableProps,\n TopLeftPart,\n TopPart,\n TopRightPart,\n clamp,\n getFocusablePosition,\n useBodyVisibleAreaTop,\n useBodyVisibleColumnRange,\n useClientMidHeight,\n useClientMidWidth,\n useColumnMove,\n useColumnRange,\n useColumnRegistry,\n useColumnResize,\n useHeadVisibleColumnRange,\n useLeftScrolledOutWidth,\n useRangeSelection,\n useRowModels,\n useRowSelection,\n useScrollToCell,\n useSum,\n useSumRangeWidth,\n useSumWidth,\n useVisibleColumnGroupRange,\n useVisibleRowRange,\n} from \"./internal\";\nimport { ColumnDropTarget } from \"./internal/ColumnDropTarget\";\nimport { ColumnGhost } from \"./internal/ColumnGhost\";\n\nimport gridCss from \"./Grid.css\";\n\nconst withBaseName = makePrefixer(\"saltGrid\");\n\nexport type ColumnSeparatorType = \"regular\" | \"none\" | \"groupEdge\" | \"pinned\";\nexport type ColumnGroupRowSeparatorType = \"first\" | \"regular\" | \"last\";\nexport type ColumnGroupColumnSeparatorType = \"regular\" | \"none\" | \"pinned\";\nexport type GridRowSelectionMode = \"single\" | \"multi\" | \"none\";\nexport type GridCellSelectionMode = \"range\" | \"none\";\n\nexport enum SortOrder {\n ASC = \"asc\",\n DESC = \"desc\",\n NONE = \"none\",\n}\n\nexport type RowKeyGetter<T> = (row: T, index: number) => string;\n\nexport type GridColumnMoveHandler = (\n columnId: string,\n fromIndex: number,\n toIndex: number,\n) => void;\n\nexport interface GridProps<T = any> {\n /**\n * At least 1 children is expected, options are `ColumnGroup` or `GridColumn`.\n * */\n children: ReactNode;\n /**\n * If `true`, zebra stripes are enabled (odd/even rows have alternate colours)\n * */\n zebra?: boolean;\n /**\n * If `true`, grid header is hidden.\n * */\n hideHeader?: boolean;\n /**\n * If `true`, column separators are rendered.\n * */\n columnSeparators?: boolean;\n /**\n * If `true`, separators are rendered between pinned and unpinned columns.\n * */\n pinnedSeparators?: boolean;\n /**\n * Row data objects. Sparse arrays are supported.\n * */\n rowData: T[];\n /**\n * Should return unique string for a given row data object.\n * If rowData is sparse then this function should work with undefined row data\n * objects and create keys based on row index. `(row: T, index: number) => string`\n * */\n rowKeyGetter?: RowKeyGetter<T>;\n /**\n * Rows with these indices are selected by default.\n * */\n defaultSelectedRowIdxs?: number[];\n /**\n * Selected row indices for controlled mode.\n * */\n selectedRowIdxs?: number[];\n className?: string;\n style?: CSSProperties;\n /**\n * The variant to use. Options are `primary` and `secondary`. Default value is\n * `primary`. `secondary` variant changes grid background to reduce contrast.\n * */\n variant?: \"primary\" | \"secondary\";\n /**\n * Options are `single`, `multi` and `none`.\n * */\n rowSelectionMode?: GridRowSelectionMode;\n onRowSelected?: (selectedRowIdxs: number[]) => void;\n /**\n * If `true`, user will be able to move columns using drag and drop.\n * */\n columnMove?: boolean;\n /**\n * Accepts `(columnId: string, fromIndex: number, toIndex: number) => void`\n * */\n onColumnMoved?: GridColumnMoveHandler;\n /**\n * Options are `range` and `none`.\n * */\n cellSelectionMode?: GridCellSelectionMode;\n onVisibleRowRangeChange?: (start: number, end: number) => void;\n /**\n * If `true`, keyboard navigation is enabled for the header.\n * */\n headerIsFocusable?: boolean;\n\n getRowValidationStatus?: (\n row: GridRowModel<T>,\n ) => CellValidationState | undefined;\n}\n\nexport interface GridRowModel<T> {\n key: string;\n index: number;\n data: T;\n}\n\nexport interface GridColumnModel<T> {\n index: number;\n separator: ColumnSeparatorType;\n\n info: GridColumnInfo<T>;\n}\n\nexport interface GridColumnGroupModel {\n index: number;\n data: ColumnGroupProps;\n childrenIds: string[];\n rowSeparator: ColumnGroupRowSeparatorType;\n columnSeparator: ColumnGroupColumnSeparatorType;\n colSpan: number;\n}\n\nfunction defaultRowKeyGetter<T>(row: T, index: number): string {\n return `${index}`;\n}\n\nexport const Grid = function Grid<T>(props: GridProps<T>) {\n const {\n rowData,\n zebra,\n hideHeader,\n columnSeparators,\n pinnedSeparators = true,\n className,\n style,\n rowKeyGetter = defaultRowKeyGetter,\n children,\n defaultSelectedRowIdxs,\n selectedRowIdxs,\n variant = \"primary\",\n rowSelectionMode = \"multi\",\n onRowSelected,\n columnMove,\n onColumnMoved,\n cellSelectionMode = \"none\",\n onVisibleRowRangeChange,\n headerIsFocusable,\n getRowValidationStatus,\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-grid\",\n css: gridCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const scrollableRef = useRef<HTMLDivElement>(null);\n const middleRef = useRef<HTMLDivElement>(null);\n const topRef = useRef<HTMLDivElement>(null);\n const leftRef = useRef<HTMLDivElement>(null);\n const rightRef = useRef<HTMLDivElement>(null);\n const bottomRef = useRef<HTMLDivElement>(null);\n\n // What caused the latest scroll change. User means the UI (mouse events), table means the component initiated scrolling (scrollToCell was called for example)\n const [scrollSource, setScrollSource] = useState<\"user\" | \"table\">(\"user\");\n const [scrollLeft, setScrollLeft] = useState<number>(0);\n const [scrollTop, setScrollTop] = useState<number>(0);\n\n const [hoverRowKey, setHoverRowKey] = useState<string | undefined>(undefined);\n\n const [\n { clientWidth, clientHeight, scrollBarHeight, scrollBarWidth },\n setDimensions,\n ] = useState({\n clientWidth: 0,\n clientHeight: 0,\n scrollBarHeight: 0,\n scrollBarWidth: 0,\n });\n\n const [rowHeight, setRowHeight] = useState<number>(0);\n\n const [cursorRowIdx, setCursorRowIdx] = useState<number>(0);\n const [cursorColIdx, setCursorColIdx] = useState<number>(0);\n const [focusedPart, setFocusedPart] = useState<FocusedPart>(\n headerIsFocusable ? \"header\" : \"body\",\n );\n\n const [sortByColumnId, setSortByColumnId] =\n useState<GridColumnProps[\"id\"]>(\"\");\n const [sortOrder, setSortOrder] = useState<SortOrder>(SortOrder.NONE);\n\n const [editMode, setEditMode] = useState<boolean>(false);\n const [initialText, setInitialText] = useState<string | undefined>(undefined);\n\n const resizeClient: ScrollableProps<T>[\"resizeClient\"] = useCallback(\n (dimensions) => {\n setDimensions(dimensions);\n },\n [],\n );\n\n const {\n leftCols, // Columns pinned to left\n midCols, // Scrollable columns\n rightCols, // Columns pinned to right\n leftGroups,\n midGroups,\n rightGroups,\n contextValue,\n } = useColumnRegistry<T>(children);\n\n const midColsById = useMemo(\n () =>\n new Map<string, GridColumnModel<T>>(\n midCols.map(\n (c) => [c.info.props.id, c] as [string, GridColumnModel<T>],\n ),\n ),\n [midCols],\n );\n\n // Width of all columns pinned to left\n const leftWidth = useSumWidth(leftCols);\n // Width of all scrollable columns\n const midWidth = useSumWidth(midCols);\n // Width of all columns pinned to right\n const rightWidth = useSumWidth(rightCols);\n // Total width of all columns\n const totalWidth = useSum([leftWidth, midWidth, rightWidth]);\n\n const hasColumnGroups =\n leftGroups.length > 0 || midGroups.length > 0 || rightGroups.length > 0;\n\n const headRowCount = hideHeader ? 0 : hasColumnGroups ? 2 : 1; // TODO multiple group levels\n const rowCount = rowData.length;\n\n // Footer is not implemented yet.\n const botRowCount = 0; // TODO\n // Height of the header\n const topHeight = rowHeight * headRowCount;\n // Height of the middle part (virtual height)\n const midHeight = rowCount === 0 ? 0 : rowHeight * rowCount + 1;\n // Height of the footer\n const botHeight = botRowCount * rowHeight;\n // Total height of the grid (virtual)\n const totalHeight = useSum([topHeight, midHeight, botHeight]);\n // Client width of the middle part of the grid (viewport)\n const clientMidWidth = useClientMidWidth(clientWidth, leftWidth, rightWidth);\n // Unused width in the middle part, to be filled by an empty column with fake cells.\n const midGap = Math.max(0, Math.floor(clientMidWidth - midWidth));\n\n // Range of unpinned columns visible in the body of the grid (pinned columns are always visible).\n const bodyVisColRng = useBodyVisibleColumnRange(\n midCols,\n scrollLeft,\n clientMidWidth,\n );\n\n const midGrpByColId = useMemo(() => {\n const m = new Map<string, GridColumnGroupModel>();\n for (const g of midGroups) {\n for (const c of g.childrenIds) {\n m.set(c, g);\n }\n }\n return m;\n }, [midGroups]);\n\n // Range of visible column groups.\n const visColGrpRng = useVisibleColumnGroupRange(\n bodyVisColRng,\n midCols,\n midGrpByColId,\n leftGroups.length,\n );\n\n const visColGrps = useMemo(() => {\n return midGroups.slice(visColGrpRng.start, visColGrpRng.end);\n }, [visColGrpRng, midGroups]);\n\n const headVisColRng = useHeadVisibleColumnRange(\n bodyVisColRng,\n visColGrps,\n midColsById,\n leftCols.length,\n );\n\n const bodyScrOutColWh = useLeftScrolledOutWidth(midCols, bodyVisColRng);\n const headScrOutColWh = useLeftScrolledOutWidth(midCols, headVisColRng);\n\n const bodyVisAreaLeft = useSum([leftWidth, bodyScrOutColWh]);\n const headVisAreaLeft = useSum([leftWidth, headScrOutColWh]);\n const clientMidHeight = useClientMidHeight(\n clientHeight,\n topHeight,\n botHeight,\n );\n const visRowRng = useVisibleRowRange(\n scrollTop,\n clientMidHeight,\n rowHeight,\n rowCount,\n );\n\n const bodyVisAreaTop = useBodyVisibleAreaTop(rowHeight, visRowRng, topHeight);\n\n const bodyVisibleColumns = useColumnRange(midCols, bodyVisColRng);\n const headVisibleColumns = useColumnRange(midCols, headVisColRng);\n const bodyVisColWh = useSumRangeWidth(midCols, bodyVisColRng);\n\n const headVisColWh = bodyVisColWh; // TODO implement groups\n\n const rootStyle = useMemo(\n () => ({\n ...style,\n \"--grid-total-width\": `${totalWidth}px`,\n \"--grid-total-height\": `${totalHeight}px`,\n \"--grid-topPart-height\": `${topHeight}px`,\n \"--grid-leftPart-width\": `${leftWidth}px`,\n \"--grid-rightPart-width\": `${rightWidth}px`,\n \"--grid-bodyVisibleColumns-width\": `${bodyVisColWh}px`,\n \"--grid-bodyVisibleArea-top\": `${bodyVisAreaTop}px`,\n \"--grid-bodyVisibleArea-left\": `${bodyVisAreaLeft}px`,\n \"--grid-bottomHeight\": `${botHeight}px`,\n \"--grid-headerVisibleColumns-width\": `${headVisColWh}px`,\n \"--grid-headerVisibleArea-left\": `${headVisAreaLeft}px`,\n \"--grid-scrollBar-height\": `${scrollBarHeight}px`,\n \"--grid-scrollBar-width\": `${scrollBarWidth}px`,\n }),\n [\n style,\n totalHeight,\n totalWidth,\n topHeight,\n leftWidth,\n rightWidth,\n botHeight,\n bodyVisColWh,\n bodyVisAreaLeft,\n bodyVisAreaTop,\n headVisColWh,\n headVisAreaLeft,\n scrollBarHeight,\n scrollBarWidth,\n ],\n );\n\n const onWheel: EventListener = useCallback(\n (event) => {\n let { deltaX, deltaY, shiftKey } = event as WheelEvent;\n if (deltaX === 0 && shiftKey) {\n deltaX = deltaY;\n deltaY = 0;\n }\n const s = scrollableRef.current;\n if (s) {\n s.scrollLeft += deltaX;\n s.scrollTop += deltaY;\n if (\n !(\n (\n Math.round(s.scrollHeight - s.scrollTop) === s.clientHeight || // reached the bottom\n (s.scrollTop === 0 && deltaY < 0)\n ) // reached the top (upward scroll)\n )\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n },\n [scrollableRef.current],\n );\n\n const cols = useMemo(\n () => [...leftCols, ...midCols, ...rightCols],\n [leftCols, midCols, rightCols],\n );\n\n const colsById = useMemo(\n () =>\n new Map<string, GridColumnModel<T>>(\n cols.map((c) => [c.info.props.id, c] as [string, GridColumnModel<T>]),\n ),\n [cols],\n );\n\n const getColById = useCallback(\n (id: string) => {\n return colsById.get(id);\n },\n [colsById],\n );\n\n const columnDataContext: ColumnDataContext<T> = useMemo(\n () => ({\n getColById,\n }),\n [getColById],\n );\n\n const isSortMode = sortByColumnId && sortOrder !== SortOrder.NONE;\n\n const onSortOrderChange =\n getColById(sortByColumnId)?.info.props.onSortOrderChange;\n\n const valueGetter =\n getColById(sortByColumnId)?.info.props.getValue ||\n ((r: T) => {\n return r[sortByColumnId as keyof typeof r];\n });\n\n const customSortingFn = getColById(sortByColumnId)?.info.props.customSort;\n\n const sortedRowData = useMemo(() => {\n if (!isSortMode || onSortOrderChange) return rowData;\n\n if (customSortingFn) {\n return customSortingFn({ rowData, sortOrder });\n }\n\n const sortedData = [...rowData].sort((a, b) =>\n valueGetter(a) < valueGetter(b) ? -1 : 1,\n );\n\n if (sortOrder === SortOrder.DESC) {\n return sortedData.reverse();\n }\n\n return sortedData;\n }, [\n onSortOrderChange,\n valueGetter,\n customSortingFn,\n isSortMode,\n rowData,\n sortByColumnId,\n sortOrder,\n ]);\n\n const onClickSortColumn = useCallback(\n (colHeaderId: GridColumnProps[\"id\"]) => {\n if (sortByColumnId === colHeaderId) {\n switch (sortOrder) {\n case SortOrder.ASC:\n setSortOrder(SortOrder.DESC);\n break;\n case SortOrder.DESC:\n setSortOrder(SortOrder.NONE);\n break;\n default:\n setSortOrder(SortOrder.ASC);\n }\n } else {\n setSortByColumnId(colHeaderId);\n setSortOrder(SortOrder.ASC);\n }\n },\n [sortByColumnId, sortOrder],\n );\n\n const columnSortContext: ColumnSortContext = useMemo(\n () => ({\n sortByColumnId,\n setSortByColumnId,\n sortOrder,\n setSortOrder,\n onClickSortColumn,\n }),\n [\n sortByColumnId,\n setSortByColumnId,\n sortOrder,\n setSortOrder,\n onClickSortColumn,\n ],\n );\n\n const scroll = useCallback(\n (left?: number, top?: number, source?: \"user\" | \"table\") => {\n setScrollSource(source || \"user\");\n if (left !== undefined) {\n setScrollLeft(left);\n }\n if (top !== undefined) {\n setScrollTop(top);\n }\n },\n [setScrollLeft, setScrollTop, setScrollSource],\n );\n\n const scrollToCell = useScrollToCell(\n visRowRng,\n rowHeight,\n clientMidHeight,\n midCols,\n bodyVisColRng,\n clientMidWidth,\n scroll,\n );\n\n const focusCellElement = (\n part: FocusedPart,\n rowIdx: number,\n colIdx: number,\n ) => {\n setTimeout(() => {\n const selector =\n part === \"body\"\n ? `td[data-row-index=\"${rowIdx}\"][data-column-index=\"${colIdx}\"]`\n : `th[data-column-index=\"${colIdx}\"]`;\n const nodeToFocus = rootRef.current?.querySelector(selector);\n if (nodeToFocus) {\n (nodeToFocus as HTMLElement).focus({ preventScroll: true });\n } else {\n console.warn(`focusCellElement can't find the element`);\n }\n }, 0);\n };\n\n const startEditMode = (text?: string) => {\n if (editMode || cursorRowIdx === undefined || cursorColIdx === undefined) {\n return;\n }\n const c = cols[cursorColIdx];\n const isEditable = !!contextValue.getEditor(c.info.props.id);\n if (isEditable) {\n setInitialText(text);\n setEditMode(true);\n }\n };\n\n const endEditMode = (value: string) => {\n if (!editMode) {\n return;\n }\n if (cursorColIdx === undefined) {\n console.error(\"endEditMode: cursorColIdx is undefined in edit mode\");\n return;\n }\n const c = cols[cursorColIdx];\n const handler = c.info.props.onChange;\n if (cursorRowIdx === undefined) {\n console.error(\"endEditMode: cursorRowIdx is undefined in edit mode\");\n return;\n }\n if (!handler) {\n console.warn(\n `onChange is not specified for editable column \"${c.info.props.id}\".`,\n );\n } else {\n handler(sortedRowData[cursorRowIdx], cursorRowIdx, value);\n }\n setEditMode(false);\n focusCellElement(focusedPart, cursorRowIdx, cursorColIdx);\n };\n\n const cancelEditMode = () => {\n if (!editMode) {\n return;\n }\n setEditMode(false);\n if (cursorRowIdx != null && cursorColIdx != null) {\n focusCellElement(focusedPart, cursorRowIdx, cursorColIdx);\n }\n };\n\n const {\n selRowIdxs,\n isAllSelected,\n isAnySelected,\n selectAll,\n selectRows,\n unselectAll,\n onMouseDown: onRowSelectionMouseDown,\n } = useRowSelection(\n rowKeyGetter,\n sortedRowData,\n defaultSelectedRowIdxs,\n selectedRowIdxs,\n rowSelectionMode,\n onRowSelected,\n );\n\n const rangeSelection = useRangeSelection(cellSelectionMode);\n\n const moveCursor = useCallback(\n (part: FocusedPart, rowIdx: number, colIdx: number) => {\n if (!headerIsFocusable && part === \"header\") {\n console.warn(\n `Cannot move focus to the header. \"headerIsFocusable\" prop is false.`,\n );\n return;\n }\n setFocusedPart(part);\n colIdx = clamp(colIdx, 0, cols.length - 1);\n if (part === \"body\") {\n if (sortedRowData.length < 1 || cols.length < 1) {\n return;\n }\n rowIdx = clamp(rowIdx, 0, sortedRowData.length - 1);\n } else if (part === \"header\") {\n rowIdx = 0; // There is only one row in the header currently\n }\n setCursorRowIdx(rowIdx);\n setCursorColIdx(colIdx);\n scrollToCell(part, rowIdx, colIdx);\n focusCellElement(part, rowIdx, colIdx);\n if (part === \"body\") {\n rangeSelection.onCursorMove({ rowIdx, colIdx });\n }\n },\n [\n setCursorRowIdx,\n setCursorColIdx,\n sortedRowData,\n rowKeyGetter,\n cols,\n rootRef.current,\n scrollToCell,\n endEditMode,\n rangeSelection.onCursorMove,\n focusedPart,\n headerIsFocusable,\n ],\n );\n\n const rows = useRowModels(rowKeyGetter, sortedRowData, visRowRng);\n\n const isLeftRaised = scrollLeft > 0;\n const isRightRaised = scrollLeft + clientMidWidth < midWidth;\n const isHeaderRaised = scrollTop > 0;\n\n const resizeColumn = useCallback(\n (colIdx: number, width: number) => {\n const col = cols[colIdx];\n col.info.onWidthChanged(width);\n },\n [cols],\n );\n\n const onResizeHandleMouseDown = useColumnResize(cols, resizeColumn);\n\n const sizingContext: SizingContext = useMemo(\n () => ({\n resizeColumn,\n rowHeight,\n onResizeHandleMouseDown,\n }),\n [resizeColumn, rowHeight, onResizeHandleMouseDown],\n );\n\n const layoutContext: LayoutContext = useMemo(\n () => ({\n totalHeight,\n totalWidth,\n clientWidth,\n clientHeight,\n }),\n [totalHeight, totalWidth],\n );\n\n const editorContext: EditorContext = useMemo(\n () => ({\n initialText,\n editMode,\n startEditMode,\n endEditMode,\n cancelEditMode,\n }),\n [editMode, startEditMode, endEditMode, cancelEditMode, initialText],\n );\n\n const [isFocused, setFocused] = useState<boolean>(false);\n\n const onFocus = useCallback(() => {\n setFocused(true);\n }, []);\n\n const onBlur = useCallback(() => {\n setFocused(false);\n }, []);\n\n const cursorContext: CursorContext = useMemo(\n () => ({\n isFocused,\n cursorRowIdx,\n cursorColIdx,\n moveCursor,\n focusedPart,\n headerIsFocusable: Boolean(headerIsFocusable),\n }),\n [\n cursorRowIdx,\n cursorColIdx,\n moveCursor,\n isFocused,\n focusedPart,\n headerIsFocusable,\n ],\n );\n\n const onColumnMove: GridColumnMoveHandler = (\n columnId,\n fromIndex,\n toIndex,\n ) => {\n if (onColumnMoved && fromIndex !== toIndex) {\n onColumnMoved(columnId, fromIndex, toIndex);\n }\n };\n\n const {\n dragState,\n onColumnMoveHandleMouseDown,\n activeTarget,\n onColumnMoveCancel,\n } = useColumnMove(\n columnMove,\n rootRef,\n leftCols,\n midCols,\n rightCols,\n cols,\n scrollLeft,\n clientMidWidth,\n onColumnMove,\n );\n\n const columnDragContext: ColumnDragContext = useMemo(\n () => ({\n columnMove,\n onColumnMoveHandleMouseDown,\n }),\n [columnMove, onColumnMoveHandleMouseDown],\n );\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n onRowSelectionMouseDown(event);\n rangeSelection.onCellMouseDown(event);\n\n const target = event.target as HTMLElement;\n try {\n const { part, rowIndex, columnIndex } = getFocusablePosition(target);\n if (part === \"header\" && !headerIsFocusable) {\n return;\n }\n moveCursor(part, rowIndex, columnIndex);\n } catch (e) {\n // TODO\n }\n };\n\n const onKeyUp: KeyboardEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n const { key } = event;\n if (key === \"Shift\") {\n rangeSelection.onKeyboardRangeSelectionEnd();\n }\n },\n [rangeSelection.onKeyboardRangeSelectionEnd],\n );\n\n const editModeKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"F2\":\n case \"Enter\":\n startEditMode();\n break;\n case \"Backspace\":\n startEditMode(\"\");\n break;\n case \"Escape\":\n if (editMode) {\n cancelEditMode();\n break;\n }\n return false;\n default:\n if (\n !editMode &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n /^[\\w\\d ]$/.test(key)\n ) {\n startEditMode(key);\n } else {\n return false;\n }\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [startEditMode, editMode, cancelEditMode],\n );\n\n const selectionKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"Shift\":\n rangeSelection.onKeyboardRangeSelectionStart({\n rowIdx: cursorRowIdx || 0,\n colIdx: cursorColIdx || 0,\n });\n break;\n case \" \":\n if (focusedPart === \"body\") {\n if (event.ctrlKey) {\n if (cursorColIdx !== undefined) {\n rangeSelection.selectRange({\n start: { rowIdx: 0, colIdx: cursorColIdx },\n end: { rowIdx: sortedRowData.length, colIdx: cursorColIdx },\n });\n }\n } else {\n if (cursorRowIdx !== undefined) {\n selectRows({\n rowIndex: cursorRowIdx,\n isRange: false,\n incremental: true,\n unselectOtherRows: !event.shiftKey,\n });\n }\n }\n break;\n }\n return false;\n case \"a\":\n if (event.ctrlKey || event.metaKey) {\n rangeSelection.selectRange({\n start: { rowIdx: 0, colIdx: 0 },\n end: { rowIdx: sortedRowData.length, colIdx: cols.length },\n });\n selectAll();\n return true;\n }\n return false;\n default:\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [\n rangeSelection.selectRange,\n rangeSelection.onKeyboardRangeSelectionStart,\n selectRows,\n selectAll,\n cursorColIdx,\n cursorRowIdx,\n sortedRowData.length,\n cols.length,\n focusedPart,\n ],\n );\n\n const clipboardKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n if (\n key === \"c\" &&\n (event.ctrlKey || event.metaKey) &&\n rangeSelection.selectedCellRange\n ) {\n const { start, end } = rangeSelection.selectedCellRange;\n const c = (x: number, y: number) => x - y;\n const [minRow, maxRow] = [start.rowIdx, end.rowIdx].sort(c);\n const [minCol, maxCol] = [start.colIdx, end.colIdx].sort(c);\n const text: string[] = [];\n for (let r = minRow; r <= maxRow; ++r) {\n const row = sortedRowData[r];\n const rowText: string[] = [];\n for (let c = minCol; c <= maxCol; ++c) {\n const col = cols[c];\n const cellValue = col?.info.props.getValue?.(row);\n rowText.push(cellValue);\n }\n text.push(rowText.join(\"\\t\"));\n }\n navigator.clipboard.writeText(text.join(\"\\n\"));\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n return false;\n },\n [rangeSelection.selectedCellRange],\n );\n\n const pageSize = Math.max(1, visRowRng.length - 1);\n\n const navigationKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"ArrowLeft\":\n moveCursor(focusedPart, cursorRowIdx, (cursorColIdx || 0) - 1);\n break;\n case \"ArrowRight\":\n moveCursor(focusedPart, cursorRowIdx, (cursorColIdx || 0) + 1);\n break;\n case \"ArrowUp\":\n if (cursorRowIdx === 0 && headerIsFocusable) {\n moveCursor(\"header\", 0, cursorColIdx);\n } else {\n moveCursor(focusedPart, (cursorRowIdx || 0) - 1, cursorColIdx);\n }\n break;\n case \"ArrowDown\":\n if (focusedPart === \"header\") {\n moveCursor(\"body\", 0, cursorColIdx);\n } else {\n moveCursor(focusedPart, (cursorRowIdx || 0) + 1, cursorColIdx);\n }\n break;\n case \"PageUp\":\n if (cursorRowIdx === 0 && headerIsFocusable) {\n moveCursor(\"header\", 0, cursorColIdx);\n } else {\n moveCursor(\n focusedPart,\n (cursorRowIdx || 0) - pageSize,\n cursorColIdx,\n );\n }\n break;\n case \"PageDown\":\n if (focusedPart === \"header\") {\n moveCursor(\"body\", 0, cursorColIdx);\n } else {\n moveCursor(\n focusedPart,\n (cursorRowIdx || 0) + pageSize,\n cursorColIdx,\n );\n }\n break;\n case \"Home\":\n if (!event.ctrlKey) {\n moveCursor(focusedPart, cursorRowIdx, 0);\n } else {\n moveCursor(focusedPart, 0, 0);\n }\n break;\n case \"End\":\n if (!event.ctrlKey) {\n moveCursor(focusedPart, cursorRowIdx, cols.length - 1);\n } else {\n moveCursor(focusedPart, sortedRowData.length - 1, cols.length - 1);\n }\n break;\n case \"Tab\":\n if (\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n editMode &&\n cursorColIdx != null &&\n cursorRowIdx != null\n ) {\n if (!event.shiftKey) {\n if (cursorColIdx < cols.length - 1) {\n moveCursor(focusedPart, cursorRowIdx, cursorColIdx + 1);\n } else {\n if (cursorRowIdx < sortedRowData.length - 1) {\n moveCursor(focusedPart, cursorRowIdx + 1, 0);\n }\n }\n } else {\n if (cursorColIdx > 0) {\n moveCursor(focusedPart, cursorRowIdx, cursorColIdx - 1);\n } else {\n if (cursorRowIdx > 0) {\n moveCursor(focusedPart, cursorRowIdx - 1, cols.length - 1);\n }\n }\n }\n } else {\n return false;\n }\n break;\n case \"Enter\":\n if (\n editMode &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n !event.shiftKey\n ) {\n if (cursorRowIdx === undefined) {\n moveCursor(focusedPart, 0, 0);\n } else {\n moveCursor(focusedPart, cursorRowIdx + 1, cursorColIdx);\n }\n } else {\n return false;\n }\n break;\n default:\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [\n moveCursor,\n cursorRowIdx,\n cursorRowIdx,\n cols.length,\n sortedRowData.length,\n headerIsFocusable,\n pageSize,\n ],\n );\n\n const columnMoveKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n if (key === \"Escape\") {\n onColumnMoveCancel();\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n return false;\n },\n [],\n );\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n if (cursorColIdx !== undefined && cursorRowIdx !== undefined) {\n const column = cols[cursorColIdx];\n if (column.info.props.onKeyDown) {\n column.info.props.onKeyDown(event, cursorRowIdx);\n }\n }\n if (!event.isPropagationStopped()) {\n // each handler returns true or false\n // if the event is handled and should not be handled by anything else return true\n // if the event is not handled and we should keep trying other handlers return false\n [\n navigationKeyHandler,\n clipboardKeyHandler,\n selectionKeyHandler,\n editModeKeyHandler,\n columnMoveKeyHandler,\n ].find((handler) => {\n return handler(event);\n });\n }\n },\n [\n navigationKeyHandler,\n clipboardKeyHandler,\n selectionKeyHandler,\n editModeKeyHandler,\n columnMoveKeyHandler,\n ],\n );\n\n const selectionContext: SelectionContext = useMemo(\n () => ({\n selRowIdxs,\n selectRows,\n isAllSelected,\n isAnySelected,\n selectAll,\n unselectAll,\n selectedCellRange: rangeSelection?.selectedCellRange,\n }),\n [\n selRowIdxs,\n selectRows,\n isAllSelected,\n isAnySelected,\n selectAll,\n unselectAll,\n rangeSelection?.selectedCellRange,\n ],\n );\n\n useEffect(() => {\n if (onVisibleRowRangeChange) {\n onVisibleRowRangeChange(visRowRng.start, visRowRng.end);\n }\n }, [onVisibleRowRangeChange, visRowRng]);\n\n return (\n <GridContext.Provider value={contextValue}>\n <LayoutContext.Provider value={layoutContext}>\n <SelectionContext.Provider value={selectionContext}>\n <ColumnDragContext.Provider value={columnDragContext}>\n <CursorContext.Provider value={cursorContext}>\n <SizingContext.Provider value={sizingContext}>\n <EditorContext.Provider value={editorContext}>\n <ColumnDataContext.Provider value={columnDataContext}>\n <ColumnSortContext.Provider value={columnSortContext}>\n {props.children}\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"zebra\")]: zebra,\n [withBaseName(\"columnSeparators\")]:\n columnSeparators,\n [withBaseName(\"pinnedSeparators\")]:\n pinnedSeparators,\n [withBaseName(\"primaryBackground\")]:\n variant === \"primary\",\n [withBaseName(\"secondaryBackground\")]:\n variant === \"secondary\",\n },\n className,\n )}\n style={rootStyle}\n ref={rootRef}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onMouseDown={onMouseDown}\n onFocus={onFocus}\n onBlur={onBlur}\n data-name=\"grid-root\"\n role=\"grid\"\n aria-colcount={cols.length}\n aria-rowcount={rowCount + headRowCount}\n aria-multiselectable={rowSelectionMode === \"multi\"}\n >\n <CellMeasure setRowHeight={setRowHeight} />\n <Scrollable\n resizeClient={resizeClient}\n scrollLeft={scrollLeft}\n scrollTop={scrollTop}\n scrollSource={scrollSource}\n scroll={scroll}\n scrollerRef={scrollableRef}\n topRef={topRef}\n rightRef={rightRef}\n bottomRef={bottomRef}\n leftRef={leftRef}\n middleRef={middleRef}\n />\n {!hideHeader && leftCols.length > 0 && (\n <TopLeftPart\n onWheel={onWheel}\n columns={leftCols}\n columnGroups={leftGroups}\n rightShadow={isLeftRaised}\n bottomShadow={isHeaderRaised}\n />\n )}\n {!hideHeader && (\n <TopPart\n columns={headVisibleColumns}\n columnGroups={visColGrps}\n topRef={topRef}\n onWheel={onWheel}\n midGap={midGap}\n bottomShadow={isHeaderRaised}\n />\n )}\n {!hideHeader && rightCols.length > 0 && (\n <TopRightPart\n onWheel={onWheel}\n columns={rightCols}\n columnGroups={rightGroups}\n leftShadow={isRightRaised}\n bottomShadow={isHeaderRaised}\n />\n )}\n {leftCols.length > 0 && (\n <LeftPart\n leftRef={leftRef}\n onWheel={onWheel}\n columns={leftCols}\n rows={rows}\n rightShadow={isLeftRaised}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n zebra={zebra}\n getRowValidationStatus={getRowValidationStatus}\n />\n )}\n <MiddlePart\n middleRef={middleRef}\n onWheel={onWheel}\n columns={bodyVisibleColumns}\n rows={rows}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n midGap={midGap}\n zebra={zebra}\n getRowValidationStatus={getRowValidationStatus}\n />\n {rightCols.length > 0 && (\n <RightPart\n rightRef={rightRef}\n onWheel={onWheel}\n columns={rightCols}\n rows={rows}\n leftShadow={isRightRaised}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n zebra={zebra}\n getRowValidationStatus={getRowValidationStatus}\n />\n )}\n <ColumnDropTarget x={activeTarget?.x} />\n <ColumnGhost\n columns={cols}\n rows={rows}\n dragState={dragState}\n zebra={zebra}\n />\n </div>\n </ColumnSortContext.Provider>\n </ColumnDataContext.Provider>\n </EditorContext.Provider>\n </SizingContext.Provider>\n </CursorContext.Provider>\n </ColumnDragContext.Provider>\n </SelectionContext.Provider>\n </LayoutContext.Provider>\n </GridContext.Provider>\n );\n};\n"],"names":["makePrefixer","SortOrder","Grid","useWindow","useComponentCssInjection","gridCss","useRef","useState","useCallback","useColumnRegistry","useMemo","useSumWidth","useSum","useClientMidWidth","useBodyVisibleColumnRange","useVisibleColumnGroupRange","useHeadVisibleColumnRange","useLeftScrolledOutWidth","useClientMidHeight","useVisibleRowRange","useBodyVisibleAreaTop","useColumnRange","useSumRangeWidth","useScrollToCell","_a","useRowSelection","useRangeSelection","clamp","useRowModels","useColumnResize","useColumnMove","getFocusablePosition","_b","c","useEffect","jsx","GridContext","LayoutContext","SelectionContext","ColumnDragContext","CursorContext","SizingContext","EditorContext","ColumnDataContext","jsxs","ColumnSortContext","clsx","CellMeasure","Scrollable","TopLeftPart","TopPart","TopRightPart","LeftPart","MiddlePart","RightPart","ColumnDropTarget","ColumnGhost"],"mappings":"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"}
1
+ {"version":3,"file":"Grid.js","sources":["../src/Grid.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport {\n type CSSProperties,\n type KeyboardEvent,\n type KeyboardEventHandler,\n type MouseEventHandler,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { ColumnDataContext } from \"./ColumnDataContext\";\nimport { ColumnDragContext } from \"./ColumnDragContext\";\nimport type { ColumnGroupProps } from \"./ColumnGroup\";\nimport { ColumnSortContext } from \"./ColumnSortContext\";\nimport { CursorContext, type FocusedPart } from \"./CursorContext\";\nimport { EditorContext } from \"./EditorContext\"; // TODO remove\nimport type {\n CellValidationState,\n GridColumnInfo,\n GridColumnProps,\n} from \"./GridColumn\";\nimport { GridContext } from \"./GridContext\";\nimport { LayoutContext } from \"./LayoutContext\";\nimport { SelectionContext } from \"./SelectionContext\";\nimport { SizingContext } from \"./SizingContext\";\nimport {\n CellMeasure,\n LeftPart,\n MiddlePart,\n RightPart,\n Scrollable,\n type ScrollableProps,\n TopLeftPart,\n TopPart,\n TopRightPart,\n clamp,\n getFocusablePosition,\n useBodyVisibleAreaTop,\n useBodyVisibleColumnRange,\n useClientMidHeight,\n useClientMidWidth,\n useColumnMove,\n useColumnRange,\n useColumnRegistry,\n useColumnResize,\n useHeadVisibleColumnRange,\n useLeftScrolledOutWidth,\n useRangeSelection,\n useRowModels,\n useRowSelection,\n useScrollToCell,\n useSum,\n useSumRangeWidth,\n useSumWidth,\n useVisibleColumnGroupRange,\n useVisibleRowRange,\n} from \"./internal\";\nimport { ColumnDropTarget } from \"./internal/ColumnDropTarget\";\nimport { ColumnGhost } from \"./internal/ColumnGhost\";\n\nimport gridCss from \"./Grid.css\";\n\nconst withBaseName = makePrefixer(\"saltGrid\");\n\nexport type ColumnSeparatorType = \"regular\" | \"none\" | \"groupEdge\" | \"pinned\";\nexport type ColumnGroupRowSeparatorType = \"first\" | \"regular\" | \"last\";\nexport type ColumnGroupColumnSeparatorType = \"regular\" | \"none\" | \"pinned\";\nexport type GridRowSelectionMode = \"single\" | \"multi\" | \"none\";\nexport type GridCellSelectionMode = \"range\" | \"none\";\n\nexport enum SortOrder {\n ASC = \"asc\",\n DESC = \"desc\",\n NONE = \"none\",\n}\n\nexport type RowKeyGetter<T> = (row: T, index: number) => string;\n\nexport type GridColumnMoveHandler = (\n columnId: string,\n fromIndex: number,\n toIndex: number,\n) => void;\n\nexport interface GridProps<T = any> {\n /**\n * At least 1 children is expected, options are `ColumnGroup` or `GridColumn`.\n * */\n children: ReactNode;\n /**\n * If `true`, zebra stripes are enabled (odd/even rows have alternate colours)\n * */\n zebra?: boolean;\n /**\n * If `true`, grid header is hidden.\n * */\n hideHeader?: boolean;\n /**\n * If `true`, column separators are rendered.\n * */\n columnSeparators?: boolean;\n /**\n * If `true`, separators are rendered between pinned and unpinned columns.\n * */\n pinnedSeparators?: boolean;\n /**\n * Row data objects. Sparse arrays are supported.\n * */\n rowData: T[];\n /**\n * Should return unique string for a given row data object.\n * If rowData is sparse then this function should work with undefined row data\n * objects and create keys based on row index. `(row: T, index: number) => string`\n * */\n rowKeyGetter?: RowKeyGetter<T>;\n /**\n * Rows with these indices are selected by default.\n * */\n defaultSelectedRowIdxs?: number[];\n /**\n * Selected row indices for controlled mode.\n * */\n selectedRowIdxs?: number[];\n className?: string;\n style?: CSSProperties;\n /**\n * The variant to use. Options are `primary` and `secondary`. Default value is\n * `primary`. `secondary` variant changes grid background to reduce contrast.\n * */\n variant?: \"primary\" | \"secondary\";\n /**\n * Options are `single`, `multi` and `none`.\n * */\n rowSelectionMode?: GridRowSelectionMode;\n onRowSelected?: (selectedRowIdxs: number[]) => void;\n /**\n * If `true`, user will be able to move columns using drag and drop.\n * */\n columnMove?: boolean;\n /**\n * Accepts `(columnId: string, fromIndex: number, toIndex: number) => void`\n * */\n onColumnMoved?: GridColumnMoveHandler;\n /**\n * Options are `range` and `none`.\n * */\n cellSelectionMode?: GridCellSelectionMode;\n onVisibleRowRangeChange?: (start: number, end: number) => void;\n /**\n * If `true`, keyboard navigation is enabled for the header.\n * */\n headerIsFocusable?: boolean;\n\n getRowValidationStatus?: (\n row: GridRowModel<T>,\n ) => CellValidationState | undefined;\n}\n\nexport interface GridRowModel<T> {\n key: string;\n index: number;\n data: T;\n}\n\nexport interface GridColumnModel<T> {\n index: number;\n separator: ColumnSeparatorType;\n\n info: GridColumnInfo<T>;\n}\n\nexport interface GridColumnGroupModel {\n index: number;\n data: ColumnGroupProps;\n childrenIds: string[];\n rowSeparator: ColumnGroupRowSeparatorType;\n columnSeparator: ColumnGroupColumnSeparatorType;\n colSpan: number;\n}\n\nfunction defaultRowKeyGetter<T>(row: T, index: number): string {\n return `${index}`;\n}\n\nexport const Grid = function Grid<T>(props: GridProps<T>) {\n const {\n rowData,\n zebra,\n hideHeader,\n columnSeparators,\n pinnedSeparators = true,\n className,\n style,\n rowKeyGetter = defaultRowKeyGetter,\n children,\n defaultSelectedRowIdxs,\n selectedRowIdxs,\n variant = \"primary\",\n rowSelectionMode = \"multi\",\n onRowSelected,\n columnMove,\n onColumnMoved,\n cellSelectionMode = \"none\",\n onVisibleRowRangeChange,\n headerIsFocusable,\n getRowValidationStatus,\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-grid\",\n css: gridCss,\n window: targetWindow,\n });\n\n const rootRef = useRef<HTMLDivElement>(null);\n const scrollableRef = useRef<HTMLDivElement>(null);\n const middleRef = useRef<HTMLDivElement>(null);\n const topRef = useRef<HTMLDivElement>(null);\n const leftRef = useRef<HTMLDivElement>(null);\n const rightRef = useRef<HTMLDivElement>(null);\n const bottomRef = useRef<HTMLDivElement>(null);\n\n // What caused the latest scroll change. User means the UI (mouse events), table means the component initiated scrolling (scrollToCell was called for example)\n const [scrollSource, setScrollSource] = useState<\"user\" | \"table\">(\"user\");\n const [scrollLeft, setScrollLeft] = useState<number>(0);\n const [scrollTop, setScrollTop] = useState<number>(0);\n\n const [hoverRowKey, setHoverRowKey] = useState<string | undefined>(undefined);\n\n const [\n { clientWidth, clientHeight, scrollBarHeight, scrollBarWidth },\n setDimensions,\n ] = useState({\n clientWidth: 0,\n clientHeight: 0,\n scrollBarHeight: 0,\n scrollBarWidth: 0,\n });\n\n const [rowHeight, setRowHeight] = useState<number>(0);\n\n const [cursorRowIdx, setCursorRowIdx] = useState<number>(0);\n const [cursorColIdx, setCursorColIdx] = useState<number>(0);\n const [focusedPart, setFocusedPart] = useState<FocusedPart>(\n headerIsFocusable ? \"header\" : \"body\",\n );\n\n const [sortByColumnId, setSortByColumnId] =\n useState<GridColumnProps[\"id\"]>(\"\");\n const [sortOrder, setSortOrder] = useState<SortOrder>(SortOrder.NONE);\n\n const [editMode, setEditMode] = useState<boolean>(false);\n const [initialText, setInitialText] = useState<string | undefined>(undefined);\n\n const resizeClient: ScrollableProps<T>[\"resizeClient\"] = useCallback(\n (dimensions) => {\n setDimensions(dimensions);\n },\n [],\n );\n\n const {\n leftCols, // Columns pinned to left\n midCols, // Scrollable columns\n rightCols, // Columns pinned to right\n leftGroups,\n midGroups,\n rightGroups,\n contextValue,\n } = useColumnRegistry<T>(children);\n\n const midColsById = useMemo(\n () =>\n new Map<string, GridColumnModel<T>>(\n midCols.map(\n (c) => [c.info.props.id, c] as [string, GridColumnModel<T>],\n ),\n ),\n [midCols],\n );\n\n // Width of all columns pinned to left\n const leftWidth = useSumWidth(leftCols);\n // Width of all scrollable columns\n const midWidth = useSumWidth(midCols);\n // Width of all columns pinned to right\n const rightWidth = useSumWidth(rightCols);\n // Total width of all columns\n const totalWidth = useSum([leftWidth, midWidth, rightWidth]);\n\n const hasColumnGroups =\n leftGroups.length > 0 || midGroups.length > 0 || rightGroups.length > 0;\n\n const headRowCount = hideHeader ? 0 : hasColumnGroups ? 2 : 1; // TODO multiple group levels\n const rowCount = rowData.length;\n\n // Footer is not implemented yet.\n const botRowCount = 0; // TODO\n // Height of the header\n const topHeight = rowHeight * headRowCount;\n // Height of the middle part (virtual height)\n const midHeight = rowCount === 0 ? 0 : rowHeight * rowCount + 1;\n // Height of the footer\n const botHeight = botRowCount * rowHeight;\n // Total height of the grid (virtual)\n const totalHeight = useSum([topHeight, midHeight, botHeight]);\n // Client width of the middle part of the grid (viewport)\n const clientMidWidth = useClientMidWidth(clientWidth, leftWidth, rightWidth);\n // Unused width in the middle part, to be filled by an empty column with fake cells.\n const midGap = Math.max(0, Math.floor(clientMidWidth - midWidth));\n\n // Range of unpinned columns visible in the body of the grid (pinned columns are always visible).\n const bodyVisColRng = useBodyVisibleColumnRange(\n midCols,\n scrollLeft,\n clientMidWidth,\n );\n\n const midGrpByColId = useMemo(() => {\n const m = new Map<string, GridColumnGroupModel>();\n for (const g of midGroups) {\n for (const c of g.childrenIds) {\n m.set(c, g);\n }\n }\n return m;\n }, [midGroups]);\n\n // Range of visible column groups.\n const visColGrpRng = useVisibleColumnGroupRange(\n bodyVisColRng,\n midCols,\n midGrpByColId,\n leftGroups.length,\n );\n\n const visColGrps = useMemo(() => {\n return midGroups.slice(visColGrpRng.start, visColGrpRng.end);\n }, [visColGrpRng, midGroups]);\n\n const headVisColRng = useHeadVisibleColumnRange(\n bodyVisColRng,\n visColGrps,\n midColsById,\n leftCols.length,\n );\n\n const bodyScrOutColWh = useLeftScrolledOutWidth(midCols, bodyVisColRng);\n const headScrOutColWh = useLeftScrolledOutWidth(midCols, headVisColRng);\n\n const bodyVisAreaLeft = useSum([leftWidth, bodyScrOutColWh]);\n const headVisAreaLeft = useSum([leftWidth, headScrOutColWh]);\n const clientMidHeight = useClientMidHeight(\n clientHeight,\n topHeight,\n botHeight,\n );\n const visRowRng = useVisibleRowRange(\n scrollTop,\n clientMidHeight,\n rowHeight,\n rowCount,\n );\n\n const bodyVisAreaTop = useBodyVisibleAreaTop(rowHeight, visRowRng, topHeight);\n\n const bodyVisibleColumns = useColumnRange(midCols, bodyVisColRng);\n const headVisibleColumns = useColumnRange(midCols, headVisColRng);\n const bodyVisColWh = useSumRangeWidth(midCols, bodyVisColRng);\n\n const headVisColWh = bodyVisColWh; // TODO implement groups\n\n const rootStyle = useMemo(\n () => ({\n ...style,\n \"--grid-total-width\": `${totalWidth}px`,\n \"--grid-total-height\": `${totalHeight}px`,\n \"--grid-topPart-height\": `${topHeight}px`,\n \"--grid-leftPart-width\": `${leftWidth}px`,\n \"--grid-rightPart-width\": `${rightWidth}px`,\n \"--grid-bodyVisibleColumns-width\": `${bodyVisColWh}px`,\n \"--grid-bodyVisibleArea-top\": `${bodyVisAreaTop}px`,\n \"--grid-bodyVisibleArea-left\": `${bodyVisAreaLeft}px`,\n \"--grid-bottomHeight\": `${botHeight}px`,\n \"--grid-headerVisibleColumns-width\": `${headVisColWh}px`,\n \"--grid-headerVisibleArea-left\": `${headVisAreaLeft}px`,\n \"--grid-scrollBar-height\": `${scrollBarHeight}px`,\n \"--grid-scrollBar-width\": `${scrollBarWidth}px`,\n }),\n [\n style,\n totalHeight,\n totalWidth,\n topHeight,\n leftWidth,\n rightWidth,\n botHeight,\n bodyVisColWh,\n bodyVisAreaLeft,\n bodyVisAreaTop,\n headVisColWh,\n headVisAreaLeft,\n scrollBarHeight,\n scrollBarWidth,\n ],\n );\n\n const onWheel: EventListener = useCallback(\n (event) => {\n let { deltaX, deltaY, shiftKey } = event as WheelEvent;\n if (deltaX === 0 && shiftKey) {\n deltaX = deltaY;\n deltaY = 0;\n }\n const s = scrollableRef.current;\n if (s) {\n s.scrollLeft += deltaX;\n s.scrollTop += deltaY;\n if (\n !(\n (\n Math.round(s.scrollHeight - s.scrollTop) === s.clientHeight || // reached the bottom\n (s.scrollTop === 0 && deltaY < 0)\n ) // reached the top (upward scroll)\n )\n ) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n },\n [scrollableRef.current],\n );\n\n const cols = useMemo(\n () => [...leftCols, ...midCols, ...rightCols],\n [leftCols, midCols, rightCols],\n );\n\n const colsById = useMemo(\n () =>\n new Map<string, GridColumnModel<T>>(\n cols.map((c) => [c.info.props.id, c] as [string, GridColumnModel<T>]),\n ),\n [cols],\n );\n\n const getColById = useCallback(\n (id: string) => {\n return colsById.get(id);\n },\n [colsById],\n );\n\n const columnDataContext: ColumnDataContext<T> = useMemo(\n () => ({\n getColById,\n }),\n [getColById],\n );\n\n const isSortMode = sortByColumnId && sortOrder !== SortOrder.NONE;\n\n const onSortOrderChange =\n getColById(sortByColumnId)?.info.props.onSortOrderChange;\n\n const valueGetter =\n getColById(sortByColumnId)?.info.props.getValue ||\n ((r: T) => {\n return r[sortByColumnId as keyof typeof r];\n });\n\n const customSortingFn = getColById(sortByColumnId)?.info.props.customSort;\n\n const sortedRowData = useMemo(() => {\n if (!isSortMode || onSortOrderChange) return rowData;\n\n if (customSortingFn) {\n return customSortingFn({ rowData, sortOrder });\n }\n\n const sortedData = [...rowData].sort((a, b) =>\n valueGetter(a) < valueGetter(b) ? -1 : 1,\n );\n\n if (sortOrder === SortOrder.DESC) {\n return sortedData.reverse();\n }\n\n return sortedData;\n }, [\n onSortOrderChange,\n valueGetter,\n customSortingFn,\n isSortMode,\n rowData,\n sortByColumnId,\n sortOrder,\n ]);\n\n const onClickSortColumn = useCallback(\n (colHeaderId: GridColumnProps[\"id\"]) => {\n if (sortByColumnId === colHeaderId) {\n switch (sortOrder) {\n case SortOrder.ASC:\n setSortOrder(SortOrder.DESC);\n break;\n case SortOrder.DESC:\n setSortOrder(SortOrder.NONE);\n break;\n default:\n setSortOrder(SortOrder.ASC);\n }\n } else {\n setSortByColumnId(colHeaderId);\n setSortOrder(SortOrder.ASC);\n }\n },\n [sortByColumnId, sortOrder],\n );\n\n const columnSortContext: ColumnSortContext = useMemo(\n () => ({\n sortByColumnId,\n setSortByColumnId,\n sortOrder,\n setSortOrder,\n onClickSortColumn,\n }),\n [\n sortByColumnId,\n setSortByColumnId,\n sortOrder,\n setSortOrder,\n onClickSortColumn,\n ],\n );\n\n const scroll = useCallback(\n (left?: number, top?: number, source?: \"user\" | \"table\") => {\n setScrollSource(source || \"user\");\n if (left !== undefined) {\n setScrollLeft(left);\n }\n if (top !== undefined) {\n setScrollTop(top);\n }\n },\n [setScrollLeft, setScrollTop, setScrollSource],\n );\n\n const scrollToCell = useScrollToCell(\n visRowRng,\n rowHeight,\n clientMidHeight,\n midCols,\n bodyVisColRng,\n clientMidWidth,\n scroll,\n );\n\n const focusCellElement = (\n part: FocusedPart,\n rowIdx: number,\n colIdx: number,\n ) => {\n setTimeout(() => {\n const selector =\n part === \"body\"\n ? `td[data-row-index=\"${rowIdx}\"][data-column-index=\"${colIdx}\"]`\n : `th[data-column-index=\"${colIdx}\"]`;\n const nodeToFocus = rootRef.current?.querySelector(selector);\n if (nodeToFocus) {\n (nodeToFocus as HTMLElement).focus({ preventScroll: true });\n } else {\n console.warn(`focusCellElement can't find the element`);\n }\n }, 0);\n };\n\n const startEditMode = (text?: string) => {\n if (editMode || cursorRowIdx === undefined || cursorColIdx === undefined) {\n return;\n }\n const c = cols[cursorColIdx];\n const isEditable = !!contextValue.getEditor(c.info.props.id);\n if (isEditable) {\n setInitialText(text);\n setEditMode(true);\n }\n };\n\n const endEditMode = (value: string) => {\n if (!editMode) {\n return;\n }\n if (cursorColIdx === undefined) {\n console.error(\"endEditMode: cursorColIdx is undefined in edit mode\");\n return;\n }\n const c = cols[cursorColIdx];\n const handler = c.info.props.onChange;\n if (cursorRowIdx === undefined) {\n console.error(\"endEditMode: cursorRowIdx is undefined in edit mode\");\n return;\n }\n if (!handler) {\n console.warn(\n `onChange is not specified for editable column \"${c.info.props.id}\".`,\n );\n } else {\n handler(sortedRowData[cursorRowIdx], cursorRowIdx, value);\n }\n setEditMode(false);\n focusCellElement(focusedPart, cursorRowIdx, cursorColIdx);\n };\n\n const cancelEditMode = () => {\n if (!editMode) {\n return;\n }\n setEditMode(false);\n if (cursorRowIdx != null && cursorColIdx != null) {\n focusCellElement(focusedPart, cursorRowIdx, cursorColIdx);\n }\n };\n\n const {\n selRowIdxs,\n isAllSelected,\n isAnySelected,\n selectAll,\n selectRows,\n unselectAll,\n onMouseDown: onRowSelectionMouseDown,\n } = useRowSelection(\n rowKeyGetter,\n sortedRowData,\n defaultSelectedRowIdxs,\n selectedRowIdxs,\n rowSelectionMode,\n onRowSelected,\n );\n\n const rangeSelection = useRangeSelection(cellSelectionMode);\n\n const moveCursor = useCallback(\n (part: FocusedPart, rowIdx: number, colIdx: number) => {\n if (!headerIsFocusable && part === \"header\") {\n console.warn(\n `Cannot move focus to the header. \"headerIsFocusable\" prop is false.`,\n );\n return;\n }\n setFocusedPart(part);\n colIdx = clamp(colIdx, 0, cols.length - 1);\n if (part === \"body\") {\n if (sortedRowData.length < 1 || cols.length < 1) {\n return;\n }\n rowIdx = clamp(rowIdx, 0, sortedRowData.length - 1);\n } else if (part === \"header\") {\n rowIdx = 0; // There is only one row in the header currently\n }\n setCursorRowIdx(rowIdx);\n setCursorColIdx(colIdx);\n scrollToCell(part, rowIdx, colIdx);\n focusCellElement(part, rowIdx, colIdx);\n if (part === \"body\") {\n rangeSelection.onCursorMove({ rowIdx, colIdx });\n }\n },\n [\n setCursorRowIdx,\n setCursorColIdx,\n sortedRowData,\n rowKeyGetter,\n cols,\n rootRef.current,\n scrollToCell,\n endEditMode,\n rangeSelection.onCursorMove,\n focusedPart,\n headerIsFocusable,\n ],\n );\n\n const rows = useRowModels(rowKeyGetter, sortedRowData, visRowRng);\n\n const isLeftRaised = scrollLeft > 0;\n const isRightRaised = scrollLeft + clientMidWidth < midWidth;\n const isHeaderRaised = scrollTop > 0;\n\n const resizeColumn = useCallback(\n (colIdx: number, width: number) => {\n const col = cols[colIdx];\n col.info.onWidthChanged(width);\n },\n [cols],\n );\n\n const onResizeHandleMouseDown = useColumnResize(cols, resizeColumn);\n\n const sizingContext: SizingContext = useMemo(\n () => ({\n resizeColumn,\n rowHeight,\n onResizeHandleMouseDown,\n }),\n [resizeColumn, rowHeight, onResizeHandleMouseDown],\n );\n\n const layoutContext: LayoutContext = useMemo(\n () => ({\n totalHeight,\n totalWidth,\n clientWidth,\n clientHeight,\n }),\n [totalHeight, totalWidth],\n );\n\n const editorContext: EditorContext = useMemo(\n () => ({\n initialText,\n editMode,\n startEditMode,\n endEditMode,\n cancelEditMode,\n }),\n [editMode, startEditMode, endEditMode, cancelEditMode, initialText],\n );\n\n const [isFocused, setFocused] = useState<boolean>(false);\n\n const onFocus = useCallback(() => {\n setFocused(true);\n }, []);\n\n const onBlur = useCallback(() => {\n setFocused(false);\n }, []);\n\n const cursorContext: CursorContext = useMemo(\n () => ({\n isFocused,\n cursorRowIdx,\n cursorColIdx,\n moveCursor,\n focusedPart,\n headerIsFocusable: Boolean(headerIsFocusable),\n }),\n [\n cursorRowIdx,\n cursorColIdx,\n moveCursor,\n isFocused,\n focusedPart,\n headerIsFocusable,\n ],\n );\n\n const onColumnMove: GridColumnMoveHandler = (\n columnId,\n fromIndex,\n toIndex,\n ) => {\n if (onColumnMoved && fromIndex !== toIndex) {\n onColumnMoved(columnId, fromIndex, toIndex);\n }\n };\n\n const {\n dragState,\n onColumnMoveHandleMouseDown,\n activeTarget,\n onColumnMoveCancel,\n } = useColumnMove(\n columnMove,\n rootRef,\n leftCols,\n midCols,\n rightCols,\n cols,\n scrollLeft,\n clientMidWidth,\n onColumnMove,\n );\n\n const columnDragContext: ColumnDragContext = useMemo(\n () => ({\n columnMove,\n onColumnMoveHandleMouseDown,\n }),\n [columnMove, onColumnMoveHandleMouseDown],\n );\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n onRowSelectionMouseDown(event);\n rangeSelection.onCellMouseDown(event);\n\n const target = event.target as HTMLElement;\n try {\n const { part, rowIndex, columnIndex } = getFocusablePosition(target);\n if (part === \"header\" && !headerIsFocusable) {\n return;\n }\n moveCursor(part, rowIndex, columnIndex);\n } catch (e) {\n // TODO\n }\n };\n\n const onKeyUp: KeyboardEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n const { key } = event;\n if (key === \"Shift\") {\n rangeSelection.onKeyboardRangeSelectionEnd();\n }\n },\n [rangeSelection.onKeyboardRangeSelectionEnd],\n );\n\n const editModeKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"F2\":\n case \"Enter\":\n startEditMode();\n break;\n case \"Backspace\":\n startEditMode(\"\");\n break;\n case \"Escape\":\n if (editMode) {\n cancelEditMode();\n break;\n }\n return false;\n default:\n if (\n !editMode &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n /^[\\w\\d ]$/.test(key)\n ) {\n startEditMode(key);\n } else {\n return false;\n }\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [startEditMode, editMode, cancelEditMode],\n );\n\n const selectionKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"Shift\":\n rangeSelection.onKeyboardRangeSelectionStart({\n rowIdx: cursorRowIdx || 0,\n colIdx: cursorColIdx || 0,\n });\n break;\n case \" \":\n if (focusedPart === \"body\") {\n if (event.ctrlKey) {\n if (cursorColIdx !== undefined) {\n rangeSelection.selectRange({\n start: { rowIdx: 0, colIdx: cursorColIdx },\n end: { rowIdx: sortedRowData.length, colIdx: cursorColIdx },\n });\n }\n } else {\n if (cursorRowIdx !== undefined) {\n selectRows({\n rowIndex: cursorRowIdx,\n isRange: false,\n incremental: true,\n unselectOtherRows: !event.shiftKey,\n });\n }\n }\n break;\n }\n return false;\n case \"a\":\n if (event.ctrlKey || event.metaKey) {\n rangeSelection.selectRange({\n start: { rowIdx: 0, colIdx: 0 },\n end: { rowIdx: sortedRowData.length, colIdx: cols.length },\n });\n selectAll();\n return true;\n }\n return false;\n default:\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [\n rangeSelection.selectRange,\n rangeSelection.onKeyboardRangeSelectionStart,\n selectRows,\n selectAll,\n cursorColIdx,\n cursorRowIdx,\n sortedRowData.length,\n cols.length,\n focusedPart,\n ],\n );\n\n const clipboardKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n if (\n key === \"c\" &&\n (event.ctrlKey || event.metaKey) &&\n rangeSelection.selectedCellRange\n ) {\n const { start, end } = rangeSelection.selectedCellRange;\n const c = (x: number, y: number) => x - y;\n const [minRow, maxRow] = [start.rowIdx, end.rowIdx].sort(c);\n const [minCol, maxCol] = [start.colIdx, end.colIdx].sort(c);\n const text: string[] = [];\n for (let r = minRow; r <= maxRow; ++r) {\n const row = sortedRowData[r];\n const rowText: string[] = [];\n for (let c = minCol; c <= maxCol; ++c) {\n const col = cols[c];\n const cellValue = col?.info.props.getValue?.(row);\n rowText.push(cellValue);\n }\n text.push(rowText.join(\"\\t\"));\n }\n navigator.clipboard.writeText(text.join(\"\\n\"));\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n return false;\n },\n [rangeSelection.selectedCellRange],\n );\n\n const pageSize = Math.max(1, visRowRng.length - 1);\n\n const navigationKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n switch (key) {\n case \"ArrowLeft\":\n moveCursor(focusedPart, cursorRowIdx, (cursorColIdx || 0) - 1);\n break;\n case \"ArrowRight\":\n moveCursor(focusedPart, cursorRowIdx, (cursorColIdx || 0) + 1);\n break;\n case \"ArrowUp\":\n if (cursorRowIdx === 0 && headerIsFocusable) {\n moveCursor(\"header\", 0, cursorColIdx);\n } else {\n moveCursor(focusedPart, (cursorRowIdx || 0) - 1, cursorColIdx);\n }\n break;\n case \"ArrowDown\":\n if (focusedPart === \"header\") {\n moveCursor(\"body\", 0, cursorColIdx);\n } else {\n moveCursor(focusedPart, (cursorRowIdx || 0) + 1, cursorColIdx);\n }\n break;\n case \"PageUp\":\n if (cursorRowIdx === 0 && headerIsFocusable) {\n moveCursor(\"header\", 0, cursorColIdx);\n } else {\n moveCursor(\n focusedPart,\n (cursorRowIdx || 0) - pageSize,\n cursorColIdx,\n );\n }\n break;\n case \"PageDown\":\n if (focusedPart === \"header\") {\n moveCursor(\"body\", 0, cursorColIdx);\n } else {\n moveCursor(\n focusedPart,\n (cursorRowIdx || 0) + pageSize,\n cursorColIdx,\n );\n }\n break;\n case \"Home\":\n if (!event.ctrlKey) {\n moveCursor(focusedPart, cursorRowIdx, 0);\n } else {\n moveCursor(focusedPart, 0, 0);\n }\n break;\n case \"End\":\n if (!event.ctrlKey) {\n moveCursor(focusedPart, cursorRowIdx, cols.length - 1);\n } else {\n moveCursor(focusedPart, sortedRowData.length - 1, cols.length - 1);\n }\n break;\n case \"Tab\":\n if (\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n editMode &&\n cursorColIdx != null &&\n cursorRowIdx != null\n ) {\n if (!event.shiftKey) {\n if (cursorColIdx < cols.length - 1) {\n moveCursor(focusedPart, cursorRowIdx, cursorColIdx + 1);\n } else {\n if (cursorRowIdx < sortedRowData.length - 1) {\n moveCursor(focusedPart, cursorRowIdx + 1, 0);\n }\n }\n } else {\n if (cursorColIdx > 0) {\n moveCursor(focusedPart, cursorRowIdx, cursorColIdx - 1);\n } else {\n if (cursorRowIdx > 0) {\n moveCursor(focusedPart, cursorRowIdx - 1, cols.length - 1);\n }\n }\n }\n } else {\n return false;\n }\n break;\n case \"Enter\":\n if (\n editMode &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n !event.shiftKey\n ) {\n if (cursorRowIdx === undefined) {\n moveCursor(focusedPart, 0, 0);\n } else {\n moveCursor(focusedPart, cursorRowIdx + 1, cursorColIdx);\n }\n } else {\n return false;\n }\n break;\n default:\n return false;\n }\n event.preventDefault();\n event.stopPropagation();\n return true;\n },\n [\n moveCursor,\n cursorRowIdx,\n cursorRowIdx,\n cols.length,\n sortedRowData.length,\n headerIsFocusable,\n pageSize,\n ],\n );\n\n const columnMoveKeyHandler = useCallback(\n (event: KeyboardEvent<HTMLDivElement>) => {\n const { key } = event;\n if (key === \"Escape\") {\n onColumnMoveCancel();\n event.preventDefault();\n event.stopPropagation();\n return true;\n }\n return false;\n },\n [],\n );\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = useCallback(\n (event) => {\n if (cursorColIdx !== undefined && cursorRowIdx !== undefined) {\n const column = cols[cursorColIdx];\n if (column.info.props.onKeyDown) {\n column.info.props.onKeyDown(event, cursorRowIdx);\n }\n }\n if (!event.isPropagationStopped()) {\n // each handler returns true or false\n // if the event is handled and should not be handled by anything else return true\n // if the event is not handled and we should keep trying other handlers return false\n [\n navigationKeyHandler,\n clipboardKeyHandler,\n selectionKeyHandler,\n editModeKeyHandler,\n columnMoveKeyHandler,\n ].find((handler) => {\n return handler(event);\n });\n }\n },\n [\n navigationKeyHandler,\n clipboardKeyHandler,\n selectionKeyHandler,\n editModeKeyHandler,\n columnMoveKeyHandler,\n ],\n );\n\n const selectionContext: SelectionContext = useMemo(\n () => ({\n selRowIdxs,\n selectRows,\n isAllSelected,\n isAnySelected,\n selectAll,\n unselectAll,\n selectedCellRange: rangeSelection?.selectedCellRange,\n }),\n [\n selRowIdxs,\n selectRows,\n isAllSelected,\n isAnySelected,\n selectAll,\n unselectAll,\n rangeSelection?.selectedCellRange,\n ],\n );\n\n useEffect(() => {\n if (onVisibleRowRangeChange) {\n onVisibleRowRangeChange(visRowRng.start, visRowRng.end);\n }\n }, [onVisibleRowRangeChange, visRowRng]);\n\n return (\n <GridContext.Provider value={contextValue}>\n <LayoutContext.Provider value={layoutContext}>\n <SelectionContext.Provider value={selectionContext}>\n <ColumnDragContext.Provider value={columnDragContext}>\n <CursorContext.Provider value={cursorContext}>\n <SizingContext.Provider value={sizingContext}>\n <EditorContext.Provider value={editorContext}>\n <ColumnDataContext.Provider value={columnDataContext}>\n <ColumnSortContext.Provider value={columnSortContext}>\n {props.children}\n <div\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"zebra\")]: zebra,\n [withBaseName(\"columnSeparators\")]:\n columnSeparators,\n [withBaseName(\"pinnedSeparators\")]:\n pinnedSeparators,\n [withBaseName(\"primaryBackground\")]:\n variant === \"primary\",\n [withBaseName(\"secondaryBackground\")]:\n variant === \"secondary\",\n },\n className,\n )}\n style={rootStyle}\n ref={rootRef}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n onMouseDown={onMouseDown}\n onFocus={onFocus}\n onBlur={onBlur}\n data-name=\"grid-root\"\n role=\"grid\"\n aria-colcount={cols.length}\n aria-rowcount={rowCount + headRowCount}\n aria-multiselectable={rowSelectionMode === \"multi\"}\n >\n <CellMeasure setRowHeight={setRowHeight} />\n <Scrollable\n resizeClient={resizeClient}\n scrollLeft={scrollLeft}\n scrollTop={scrollTop}\n scrollSource={scrollSource}\n scroll={scroll}\n scrollerRef={scrollableRef}\n topRef={topRef}\n rightRef={rightRef}\n bottomRef={bottomRef}\n leftRef={leftRef}\n middleRef={middleRef}\n />\n {!hideHeader && leftCols.length > 0 && (\n <TopLeftPart\n onWheel={onWheel}\n columns={leftCols}\n columnGroups={leftGroups}\n rightShadow={isLeftRaised}\n bottomShadow={isHeaderRaised}\n />\n )}\n {!hideHeader && (\n <TopPart\n columns={headVisibleColumns}\n columnGroups={visColGrps}\n topRef={topRef}\n onWheel={onWheel}\n midGap={midGap}\n bottomShadow={isHeaderRaised}\n />\n )}\n {!hideHeader && rightCols.length > 0 && (\n <TopRightPart\n onWheel={onWheel}\n columns={rightCols}\n columnGroups={rightGroups}\n leftShadow={isRightRaised}\n bottomShadow={isHeaderRaised}\n />\n )}\n {leftCols.length > 0 && (\n <LeftPart\n leftRef={leftRef}\n onWheel={onWheel}\n columns={leftCols}\n rows={rows}\n rightShadow={isLeftRaised}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n zebra={zebra}\n getRowValidationStatus={getRowValidationStatus}\n />\n )}\n <MiddlePart\n middleRef={middleRef}\n onWheel={onWheel}\n columns={bodyVisibleColumns}\n rows={rows}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n midGap={midGap}\n zebra={zebra}\n getRowValidationStatus={getRowValidationStatus}\n />\n {rightCols.length > 0 && (\n <RightPart\n rightRef={rightRef}\n onWheel={onWheel}\n columns={rightCols}\n rows={rows}\n leftShadow={isRightRaised}\n hoverOverRowKey={hoverRowKey}\n setHoverOverRowKey={setHoverRowKey}\n zebra={zebra}\n getRowValidationStatus={getRowValidationStatus}\n />\n )}\n <ColumnDropTarget x={activeTarget?.x} />\n <ColumnGhost\n columns={cols}\n rows={rows}\n dragState={dragState}\n zebra={zebra}\n />\n </div>\n </ColumnSortContext.Provider>\n </ColumnDataContext.Provider>\n </EditorContext.Provider>\n </SizingContext.Provider>\n </CursorContext.Provider>\n </ColumnDragContext.Provider>\n </SelectionContext.Provider>\n </LayoutContext.Provider>\n </GridContext.Provider>\n );\n};\n"],"names":["makePrefixer","SortOrder","Grid","useWindow","useComponentCssInjection","gridCss","useRef","useState","useCallback","useColumnRegistry","useMemo","useSumWidth","useSum","useClientMidWidth","useBodyVisibleColumnRange","useVisibleColumnGroupRange","useHeadVisibleColumnRange","useLeftScrolledOutWidth","useClientMidHeight","useVisibleRowRange","useBodyVisibleAreaTop","useColumnRange","useSumRangeWidth","useScrollToCell","_a","useRowSelection","useRangeSelection","clamp","useRowModels","useColumnResize","useColumnMove","getFocusablePosition","_b","c","useEffect","jsx","GridContext","LayoutContext","SelectionContext","ColumnDragContext","CursorContext","SizingContext","EditorContext","ColumnDataContext","jsxs","ColumnSortContext","clsx","CellMeasure","Scrollable","TopLeftPart","TopPart","TopRightPart","LeftPart","MiddlePart","RightPart","ColumnDropTarget","ColumnGhost"],"mappings":"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"}
@@ -1 +1 @@
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":["createContext","useContext"],"mappings":";;;;AAsBO,MAAM,WAAc,GAAAA,mBAAA;AAAA,EACzB,KAAA;AACF;AAEO,MAAM,iBAAiB,MAAM;AAClC,EAAM,MAAA,CAAA,GAAIC,iBAAW,WAAW,CAAA;AAChC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,0CAA0C,CAAA;AAAA;AAE5D,EAAO,OAAA,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":["createContext","useContext"],"mappings":";;;;AAsBO,MAAM,WAAc,GAAAA,mBAAA;AAAA,EACzB;AACF;AAEO,MAAM,iBAAiB,MAAM;AAClC,EAAM,MAAA,CAAA,GAAIC,iBAAW,WAAW,CAAA;AAChC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,0CAA0C,CAAA;AAAA;AAE5D,EAAO,OAAA,CAAA;AACT;;;;;"}
@@ -1 +1 @@
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":["makePrefixer","useWindow","useComponentCssInjection","groupHeaderCellCss","useColumnDataContext","jsxs","jsx","clsx"],"mappings":";;;;;;;;;;AAWA,MAAM,YAAA,GAAeA,kBAAa,yBAAyB,CAAA;AAOpD,SAAS,gBAAgB,KAA6B,EAAA;AAC3D,EAAM,MAAA,EAAE,OAAU,GAAA,KAAA;AAElB,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,wBAAA;AAAA,IACR,GAAK,EAAAC,iBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,OAAA,EAAS,eAAiB,EAAA,YAAA,EAAiB,GAAA,KAAA;AACnD,EAAM,MAAA,EAAE,UAAW,EAAA,GAAIC,sCAAqB,EAAA;AAC5C,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,KAAM,CAAA,WAAA,CAAY,CAAC,CAAC,CAAA;AAElD,EACE,uBAAAC,eAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAW,YAAa,EAAA;AAAA,MACxB,OAAA;AAAA,MACA,cAAc,EAAA,OAAA;AAAA,MACd,eAAA,EAAA,CAAA,CAAgB,UAAY,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAA,KAAA,KAAS,CAAK,IAAA,CAAA;AAAA,MAC1C,aAAY,EAAA,qBAAA;AAAA,MACZ,oBAAkB,KAAM,CAAA,KAAA;AAAA,MACxB,IAAK,EAAA,cAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,QAAM,KAAA,CAAA,QAAA;AAAA,wBACPC,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAWC,SAAK,CAAA;AAAA,cACd,CAAC,YAAA,CAAa,cAAc,CAAC,GAAG,YAAiB,KAAA,SAAA;AAAA,cACjD,CAAC,YAAA,CAAa,wBAAwB,CAAC,GAAG,YAAiB,KAAA,OAAA;AAAA,cAC3D,CAAC,YAAA,CAAa,uBAAuB,CAAC,GAAG,YAAiB,KAAA;AAAA,aAC3D;AAAA;AAAA,SACH;AAAA,QACC,eAAA,KAAoB,4BAClBD,cAAA,CAAA,KAAA,EAAA,EAAI,WAAW,YAAa,CAAA,iBAAiB,GAAG,CAC/C,GAAA,IAAA;AAAA,QACH,eAAA,KAAoB,2BAClBA,cAAA,CAAA,KAAA,EAAA,EAAI,WAAW,YAAa,CAAA,iBAAiB,GAAG,CAC/C,GAAA;AAAA;AAAA;AAAA,GACN;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":["makePrefixer","useWindow","useComponentCssInjection","groupHeaderCellCss","useColumnDataContext","jsxs","jsx","clsx"],"mappings":";;;;;;;;;;AAWA,MAAM,YAAA,GAAeA,kBAAa,yBAAyB,CAAA;AAOpD,SAAS,gBAAgB,KAA6B,EAAA;AAC3D,EAAM,MAAA,EAAE,OAAU,GAAA,KAAA;AAElB,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,wBAAA;AAAA,IACR,GAAK,EAAAC,iBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,OAAA,EAAS,eAAiB,EAAA,YAAA,EAAiB,GAAA,KAAA;AACnD,EAAM,MAAA,EAAE,UAAW,EAAA,GAAIC,sCAAqB,EAAA;AAC5C,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,KAAM,CAAA,WAAA,CAAY,CAAC,CAAC,CAAA;AAElD,EACE,uBAAAC,eAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAW,YAAa,EAAA;AAAA,MACxB,OAAA;AAAA,MACA,cAAc,EAAA,OAAA;AAAA,MACd,eAAA,EAAA,CAAA,CAAgB,UAAY,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAA,KAAA,KAAS,CAAK,IAAA,CAAA;AAAA,MAC1C,aAAY,EAAA,qBAAA;AAAA,MACZ,oBAAkB,KAAM,CAAA,KAAA;AAAA,MACxB,IAAK,EAAA,cAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,QAAM,KAAA,CAAA,QAAA;AAAA,wBACPC,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAWC,SAAK,CAAA;AAAA,cACd,CAAC,YAAA,CAAa,cAAc,CAAC,GAAG,YAAiB,KAAA,SAAA;AAAA,cACjD,CAAC,YAAA,CAAa,wBAAwB,CAAC,GAAG,YAAiB,KAAA,OAAA;AAAA,cAC3D,CAAC,YAAA,CAAa,uBAAuB,CAAC,GAAG,YAAiB,KAAA;AAAA,aAC3D;AAAA;AAAA,SACH;AAAA,QACC,eAAA,KAAoB,4BAClBD,cAAA,CAAA,KAAA,EAAA,EAAI,WAAW,YAAa,CAAA,iBAAiB,GAAG,CAC/C,GAAA,IAAA;AAAA,QACH,eAAA,KAAoB,2BAClBA,cAAA,CAAA,KAAA,EAAA,EAAI,WAAW,YAAa,CAAA,iBAAiB,GAAG,CAC/C,GAAA;AAAA;AAAA;AAAA,GACN;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderCell.js","sources":["../src/HeaderCell.tsx"],"sourcesContent":["import {\n type FlexContentAlignment,\n makePrefixer,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { ArrowDownIcon, ArrowUpIcon } from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type KeyboardEventHandler, useRef } from \"react\";\n\nimport { useColumnDragContext } from \"./ColumnDragContext\";\nimport { useColumnSortContext } from \"./ColumnSortContext\";\nimport { type ColumnSeparatorType, SortOrder } from \"./Grid\";\nimport type { HeaderCellProps } from \"./GridColumn\";\nimport { useSizingContext } from \"./SizingContext\";\nimport { Cursor, useFocusableContent } from \"./internal\";\n\nimport headerCellCss from \"./HeaderCell.css\";\n\nconst withBaseName = makePrefixer(\"saltGridHeaderCell\");\n\nexport interface HeaderCellSeparatorProps {\n separatorType: ColumnSeparatorType;\n}\n\nexport function HeaderCellSeparator(props: HeaderCellSeparatorProps) {\n const className = withBaseName([props.separatorType, \"Separator\"].join(\"\"));\n return <div className={className} />;\n}\n\ntype AriaSortProps = \"none\" | \"ascending\" | \"descending\";\n\nexport function HeaderCell<T>(props: HeaderCellProps<T>) {\n const { column, children, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-header-cell\",\n css: headerCellCss,\n window: targetWindow,\n });\n\n const { separator } = column;\n const { align, id, headerClassName, sortable, onSortOrderChange } =\n column.info.props;\n const { onResizeHandleMouseDown } = useSizingContext();\n\n const { columnMove, onColumnMoveHandleMouseDown } = useColumnDragContext();\n const onMouseDown = columnMove ? onColumnMoveHandleMouseDown : undefined;\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableHeaderCellElement>();\n\n const {\n onClickSortColumn,\n setSortByColumnId,\n sortOrder,\n sortByColumnId,\n setSortOrder,\n } = useColumnSortContext();\n\n const valueAlignRight = align === \"right\";\n\n interface HeaderCellSortingIconProps {\n justify: FlexContentAlignment;\n }\n\n const HeaderCellSortingIcon = ({ justify }: HeaderCellSortingIconProps) => {\n const className = withBaseName(\"sortingIcon\");\n const icon = (\n <div\n className={clsx(className, {\n [withBaseName(\"sortingIconStart\")]: justify === \"start\",\n [withBaseName(\"sortingIconEnd\")]: justify === \"end\",\n })}\n aria-hidden\n >\n {sortOrder === SortOrder.ASC && <ArrowUpIcon />}\n {sortOrder === SortOrder.DESC && <ArrowDownIcon />}\n </div>\n );\n\n return icon;\n };\n\n const ariaSortMap = {\n asc: \"ascending\",\n desc: \"descending\",\n none: \"none\",\n };\n\n const ariaSort = ariaSortMap[sortOrder] as AriaSortProps;\n\n const order =\n sortOrder === SortOrder.ASC\n ? SortOrder.DESC\n : sortOrder === SortOrder.DESC\n ? SortOrder.NONE\n : SortOrder.ASC;\n\n const withSortOrder = sortOrder !== SortOrder.NONE && sortByColumnId === id;\n\n const onClick = () => {\n if (onSortOrderChange) {\n setSortByColumnId(id);\n setSortOrder(order);\n onSortOrderChange({ sortOrder: order });\n return;\n }\n setSortByColumnId(id);\n onClickSortColumn(id);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLTableHeaderCellElement> = (\n event,\n ) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n onClick();\n }\n };\n\n return (\n <th\n ref={ref}\n aria-colindex={column.index + 1}\n data-column-index={column.index}\n className={clsx(withBaseName(), headerClassName, {\n [withBaseName(\"sortable\")]: sortable,\n })}\n role=\"columnheader\"\n data-testid=\"column-header\"\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n onClick={sortable ? onClick : undefined}\n onKeyDown={sortable ? onKeyDown : undefined}\n aria-sort={sortByColumnId === id && sortable ? ariaSort : undefined}\n aria-label={column.info.props[\"aria-label\"]}\n >\n {sortByColumnId === id && sortable && valueAlignRight && (\n <HeaderCellSortingIcon justify=\"start\" />\n )}\n <div\n className={clsx(withBaseName(\"valueContainer\"), {\n [withBaseName(\"alignRight\")]: valueAlignRight,\n // both classNames below needed to ensure header cell title & sort icon do not overlap when column resized to be smaller\n [withBaseName(\"alignRightWithSortOrder\")]:\n valueAlignRight && withSortOrder,\n [withBaseName(\"alignLeftWithSortOrder\")]:\n !valueAlignRight && withSortOrder,\n })}\n onMouseDown={onMouseDown}\n >\n {children}\n </div>\n {sortByColumnId === id && sortable && !valueAlignRight && (\n <HeaderCellSortingIcon justify=\"end\" />\n )}\n <HeaderCellSeparator separatorType={separator} />\n <div\n data-testid={`column-${column.index}-resize-handle`}\n className={withBaseName(\"resizeHandle\")}\n onMouseDown={onResizeHandleMouseDown}\n />\n {isFocused && !isFocusableContent && <Cursor />}\n </th>\n );\n}\n\nexport function AutoSizeHeaderCell<T>(props: HeaderCellProps<T>) {\n const { column, children, isFocused } = props;\n const { separator } = column;\n const valueContainerRef = useRef<HTMLDivElement>(null);\n const { resizeColumn } = useSizingContext();\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableHeaderCellElement>();\n\n useIsomorphicLayoutEffect(() => {\n const width = valueContainerRef.current\n ? valueContainerRef.current.offsetWidth\n : undefined;\n if (width !== undefined && width !== column.info.width) {\n resizeColumn(column.index, width);\n }\n });\n\n return (\n <th\n ref={ref}\n aria-colindex={column.index + 1}\n data-column-index={column.index}\n className={withBaseName()}\n role=\"columnheader\"\n data-testid=\"column-header\"\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n >\n <div className={withBaseName(\"autosizeContainer\")}>\n <div\n ref={valueContainerRef}\n className={withBaseName(\"measuredContent\")}\n >\n {children}\n </div>\n </div>\n <HeaderCellSeparator separatorType={separator} />\n {isFocused && !isFocusableContent && <Cursor />}\n </th>\n );\n}\n"],"names":["makePrefixer","jsx","useWindow","useComponentCssInjection","headerCellCss","useSizingContext","useColumnDragContext","useFocusableContent","useColumnSortContext","jsxs","clsx","SortOrder","ArrowUpIcon","ArrowDownIcon","Cursor","useRef","useIsomorphicLayoutEffect"],"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":["makePrefixer","jsx","useWindow","useComponentCssInjection","headerCellCss","useSizingContext","useColumnDragContext","useFocusableContent","useColumnSortContext","jsxs","clsx","SortOrder","ArrowUpIcon","ArrowDownIcon","Cursor","useRef","useIsomorphicLayoutEffect"],"mappings":"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"}
@@ -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":["createContext"],"mappings":";;;;AASO,MAAM,aAAgB,GAAAA,mBAAA;AAAA,EAC3B,KAAA;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":["createContext"],"mappings":";;;;AASO,MAAM,aAAgB,GAAAA,mBAAA;AAAA,EAC3B;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 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":["useWindow","useComponentCssInjection","numericColumnCss","jsx","useRef","useEditorContext","useState","useEffect","jsxs","CellFrame","CornerTag","GridColumn"],"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":["useWindow","useComponentCssInjection","numericColumnCss","jsx","useRef","useEditorContext","useState","useEffect","jsxs","CellFrame","CornerTag","GridColumn"],"mappings":"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"}