@salt-ds/data-grid 1.0.28 → 1.0.30

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 (110) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist-cjs/BaseCell.js.map +1 -1
  3. package/dist-cjs/CellEditor.js.map +1 -1
  4. package/dist-cjs/CellFrame.js.map +1 -1
  5. package/dist-cjs/ColumnDataContext.js.map +1 -1
  6. package/dist-cjs/ColumnDragContext.js.map +1 -1
  7. package/dist-cjs/ColumnGroup.js.map +1 -1
  8. package/dist-cjs/ColumnSortContext.js.map +1 -1
  9. package/dist-cjs/CornerTag.js.map +1 -1
  10. package/dist-cjs/CursorContext.js.map +1 -1
  11. package/dist-cjs/DropdownCellEditor.js.map +1 -1
  12. package/dist-cjs/EditorContext.js.map +1 -1
  13. package/dist-cjs/Grid.js.map +1 -1
  14. package/dist-cjs/GridColumn.js.map +1 -1
  15. package/dist-cjs/GridContext.js.map +1 -1
  16. package/dist-cjs/GroupHeaderCell.js.map +1 -1
  17. package/dist-cjs/GroupHeaderCellValue.js.map +1 -1
  18. package/dist-cjs/HeaderCell.js.map +1 -1
  19. package/dist-cjs/HeaderCellValue.js.map +1 -1
  20. package/dist-cjs/LayoutContext.js.map +1 -1
  21. package/dist-cjs/NumberRange.js.map +1 -1
  22. package/dist-cjs/NumericColumn.js.map +1 -1
  23. package/dist-cjs/RowSelectionCheckboxCellValue.js.map +1 -1
  24. package/dist-cjs/RowSelectionCheckboxColumn.js.map +1 -1
  25. package/dist-cjs/RowSelectionCheckboxHeaderCellValue.js.map +1 -1
  26. package/dist-cjs/RowSelectionRadioCellValue.js.map +1 -1
  27. package/dist-cjs/RowSelectionRadioColumn.js.map +1 -1
  28. package/dist-cjs/RowSelectionRadioHeaderCell.js.map +1 -1
  29. package/dist-cjs/RowValidationStatus.js.map +1 -1
  30. package/dist-cjs/SelectionContext.js.map +1 -1
  31. package/dist-cjs/SizingContext.js.map +1 -1
  32. package/dist-cjs/TextCellEditor.js.map +1 -1
  33. package/dist-cjs/internal/CellMeasure.js.map +1 -1
  34. package/dist-cjs/internal/CellStatusIcons.js.map +1 -1
  35. package/dist-cjs/internal/ColumnDropTarget.js.map +1 -1
  36. package/dist-cjs/internal/ColumnGhost.js.map +1 -1
  37. package/dist-cjs/internal/Cursor.js.map +1 -1
  38. package/dist-cjs/internal/DefaultCellValue.js.map +1 -1
  39. package/dist-cjs/internal/FakeCell.js.map +1 -1
  40. package/dist-cjs/internal/FakeGroupCell.js.map +1 -1
  41. package/dist-cjs/internal/FakeHeaderCell.js.map +1 -1
  42. package/dist-cjs/internal/GroupHeaderRow.js.map +1 -1
  43. package/dist-cjs/internal/HeaderRow.js.map +1 -1
  44. package/dist-cjs/internal/LeftPart.js.map +1 -1
  45. package/dist-cjs/internal/MiddlePart.js.map +1 -1
  46. package/dist-cjs/internal/RightPart.js.map +1 -1
  47. package/dist-cjs/internal/Scrollable.js.map +1 -1
  48. package/dist-cjs/internal/TableBody.js.map +1 -1
  49. package/dist-cjs/internal/TableColGroup.js.map +1 -1
  50. package/dist-cjs/internal/TableRow.js.map +1 -1
  51. package/dist-cjs/internal/TopLeftPart.js.map +1 -1
  52. package/dist-cjs/internal/TopPart.js.map +1 -1
  53. package/dist-cjs/internal/TopRightPart.js.map +1 -1
  54. package/dist-cjs/internal/gridHooks.js.map +1 -1
  55. package/dist-cjs/internal/utils.js.map +1 -1
  56. package/dist-es/BaseCell.js.map +1 -1
  57. package/dist-es/CellEditor.js.map +1 -1
  58. package/dist-es/CellFrame.js.map +1 -1
  59. package/dist-es/ColumnDataContext.js.map +1 -1
  60. package/dist-es/ColumnDragContext.js.map +1 -1
  61. package/dist-es/ColumnGroup.js.map +1 -1
  62. package/dist-es/ColumnSortContext.js.map +1 -1
  63. package/dist-es/CornerTag.js.map +1 -1
  64. package/dist-es/CursorContext.js.map +1 -1
  65. package/dist-es/DropdownCellEditor.js.map +1 -1
  66. package/dist-es/EditorContext.js.map +1 -1
  67. package/dist-es/Grid.js.map +1 -1
  68. package/dist-es/GridColumn.js.map +1 -1
  69. package/dist-es/GridContext.js.map +1 -1
  70. package/dist-es/GroupHeaderCell.js.map +1 -1
  71. package/dist-es/GroupHeaderCellValue.js.map +1 -1
  72. package/dist-es/HeaderCell.js.map +1 -1
  73. package/dist-es/HeaderCellValue.js.map +1 -1
  74. package/dist-es/LayoutContext.js.map +1 -1
  75. package/dist-es/NumberRange.js.map +1 -1
  76. package/dist-es/NumericColumn.js.map +1 -1
  77. package/dist-es/RowSelectionCheckboxCellValue.js.map +1 -1
  78. package/dist-es/RowSelectionCheckboxColumn.js.map +1 -1
  79. package/dist-es/RowSelectionCheckboxHeaderCellValue.js.map +1 -1
  80. package/dist-es/RowSelectionRadioCellValue.js.map +1 -1
  81. package/dist-es/RowSelectionRadioColumn.js.map +1 -1
  82. package/dist-es/RowSelectionRadioHeaderCell.js.map +1 -1
  83. package/dist-es/RowValidationStatus.js.map +1 -1
  84. package/dist-es/SelectionContext.js.map +1 -1
  85. package/dist-es/SizingContext.js.map +1 -1
  86. package/dist-es/TextCellEditor.js.map +1 -1
  87. package/dist-es/internal/CellMeasure.js.map +1 -1
  88. package/dist-es/internal/CellStatusIcons.js.map +1 -1
  89. package/dist-es/internal/ColumnDropTarget.js.map +1 -1
  90. package/dist-es/internal/ColumnGhost.js.map +1 -1
  91. package/dist-es/internal/Cursor.js.map +1 -1
  92. package/dist-es/internal/DefaultCellValue.js.map +1 -1
  93. package/dist-es/internal/FakeCell.js.map +1 -1
  94. package/dist-es/internal/FakeGroupCell.js.map +1 -1
  95. package/dist-es/internal/FakeHeaderCell.js.map +1 -1
  96. package/dist-es/internal/GroupHeaderRow.js.map +1 -1
  97. package/dist-es/internal/HeaderRow.js.map +1 -1
  98. package/dist-es/internal/LeftPart.js.map +1 -1
  99. package/dist-es/internal/MiddlePart.js.map +1 -1
  100. package/dist-es/internal/RightPart.js.map +1 -1
  101. package/dist-es/internal/Scrollable.js.map +1 -1
  102. package/dist-es/internal/TableBody.js.map +1 -1
  103. package/dist-es/internal/TableColGroup.js.map +1 -1
  104. package/dist-es/internal/TableRow.js.map +1 -1
  105. package/dist-es/internal/TopLeftPart.js.map +1 -1
  106. package/dist-es/internal/TopPart.js.map +1 -1
  107. package/dist-es/internal/TopRightPart.js.map +1 -1
  108. package/dist-es/internal/gridHooks.js.map +1 -1
  109. package/dist-es/internal/utils.js.map +1 -1
  110. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # @salt-ds/data-grid
2
2
 
3
+ ## 1.0.30
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [3b02e9e]
8
+ - Updated dependencies [630f412]
9
+ - Updated dependencies [31e992a]
10
+ - Updated dependencies [9e27ba2]
11
+ - Updated dependencies [3ad2fc4]
12
+ - @salt-ds/core@1.50.0
13
+ - @salt-ds/lab@1.0.0-alpha.78
14
+
15
+ ## 1.0.29
16
+
17
+ ### Patch Changes
18
+
19
+ - Updated dependencies [848272a]
20
+ - Updated dependencies [378fc01]
21
+ - Updated dependencies [a2e614d]
22
+ - Updated dependencies [77ce501]
23
+ - Updated dependencies [1f53f12]
24
+ - Updated dependencies [22fed0d]
25
+ - Updated dependencies [770bc9c]
26
+ - Updated dependencies [54e4b19]
27
+ - Updated dependencies [bbb7dba]
28
+ - Updated dependencies [5d4898c]
29
+ - Updated dependencies [c3df8d8]
30
+ - @salt-ds/lab@1.0.0-alpha.77
31
+ - @salt-ds/core@1.49.0
32
+
3
33
  ## 1.0.28
4
34
 
5
35
  ### 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\";\nimport baseCellCss from \"./BaseCell.css\";\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\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,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,MAAA;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,EAAA;AAAA,MACjD,OAAA;AAAA,MACA,cAAA,EAAc,qBAAqB,OAAW,IAAA,MAAA;AAAA,MAC9C,kBAAA,EAAkB,uBAAuB,mBAAsB,GAAA,MAAA;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\";\nimport baseCellCss from \"./BaseCell.css\";\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\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":"CellEditor.js","sources":["../src/CellEditor.tsx"],"sourcesContent":["import { type ReactNode, useEffect, useMemo } from \"react\";\nimport { useGridContext } from \"./GridContext\";\n\nexport interface CellEditorInfo<T> {\n columnId: string;\n children: ReactNode;\n}\n\nexport interface CellEditorProps<T> {\n columnId?: string;\n children: ReactNode;\n}\n\n// Non-rendered component. Used as a child of GridColumn. Children prop is\n// expected to be a specific implementation of cell editor (text, dropdown etc)\n// Registers the editor in the grid. The grid then renders the editor when\n// edit mode is activated.\n// TODO This feature is experimental.\nexport function CellEditor<T>(props: CellEditorProps<T>) {\n const { children } = props;\n const columnId = props.columnId!;\n const grid = useGridContext();\n\n const info = useMemo(\n () => ({\n columnId,\n children,\n }),\n [columnId, children],\n );\n\n useEffect(() => {\n grid.onEditorAdded(info);\n return () => {\n grid.onEditorRemoved(info);\n };\n }, [info]);\n\n return null;\n}\n"],"names":["useGridContext","useMemo","useEffect"],"mappings":";;;;;AAkBO,SAAS,WAAc,KAA2B,EAAA;AACvD,EAAM,MAAA,EAAE,UAAa,GAAA,KAAA;AACrB,EAAA,MAAM,WAAW,KAAM,CAAA,QAAA;AACvB,EAAA,MAAM,OAAOA,0BAAe,EAAA;AAE5B,EAAA,MAAM,IAAO,GAAAC,aAAA;AAAA,IACX,OAAO;AAAA,MACL,QAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,UAAU,QAAQ;AAAA,GACrB;AAEA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAAA,KAC3B;AAAA,GACF,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAO,OAAA,IAAA;AACT;;;;"}
1
+ {"version":3,"file":"CellEditor.js","sources":["../src/CellEditor.tsx"],"sourcesContent":["import { type ReactNode, useEffect, useMemo } from \"react\";\nimport { useGridContext } from \"./GridContext\";\n\nexport interface CellEditorInfo<T> {\n columnId: string;\n children: ReactNode;\n}\n\nexport interface CellEditorProps<T> {\n columnId?: string;\n children: ReactNode;\n}\n\n// Non-rendered component. Used as a child of GridColumn. Children prop is\n// expected to be a specific implementation of cell editor (text, dropdown etc)\n// Registers the editor in the grid. The grid then renders the editor when\n// edit mode is activated.\n// TODO This feature is experimental.\nexport function CellEditor<T>(props: CellEditorProps<T>) {\n const { children } = props;\n const columnId = props.columnId!;\n const grid = useGridContext();\n\n const info = useMemo(\n () => ({\n columnId,\n children,\n }),\n [columnId, children],\n );\n\n useEffect(() => {\n grid.onEditorAdded(info);\n return () => {\n grid.onEditorRemoved(info);\n };\n }, [info]);\n\n return null;\n}\n"],"names":["useGridContext","useMemo","useEffect"],"mappings":";;;;;AAkBO,SAAS,WAAc,KAAA,EAA2B;AACvD,EAAA,MAAM,EAAE,UAAS,GAAI,KAAA;AACrB,EAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,EAAA,MAAM,OAAOA,0BAAA,EAAe;AAE5B,EAAA,MAAM,IAAA,GAAOC,aAAA;AAAA,IACX,OAAO;AAAA,MACL,QAAA;AAAA,MACA;AAAA,KACF,CAAA;AAAA,IACA,CAAC,UAAU,QAAQ;AAAA,GACrB;AAEA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,gBAAgB,IAAI,CAAA;AAAA,IAC3B,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAA,OAAO,IAAA;AACT;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"CellFrame.js","sources":["../src/CellFrame.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 { forwardRef, type HTMLAttributes } from \"react\";\nimport cellCss from \"./CellFrame.css\";\nimport type { ColumnSeparatorType } from \"./Grid\";\n\nexport interface CellProps extends HTMLAttributes<HTMLTableCellElement> {\n isSelected?: boolean;\n isEditable?: boolean;\n separator?: ColumnSeparatorType;\n}\n\n// TODO: rename the prefix in next major version to match component name.\nconst withBaseName = makePrefixer(\"saltGridCell\");\n\n/** Cell frame used for creating custom cells and editors */\nexport const CellFrame = forwardRef<HTMLTableCellElement, CellProps>(\n function CellFrame(props, ref) {\n const {\n children,\n separator,\n isSelected,\n isEditable,\n className,\n ...tdProps\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-cell\",\n css: cellCss,\n window: targetWindow,\n });\n\n return (\n <td\n ref={ref}\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"selected\")]: isSelected,\n [withBaseName(\"editable\")]: isEditable,\n [withBaseName(\"regularSeparator\")]:\n separator === \"regular\" || separator === \"groupEdge\",\n [withBaseName(\"pinnedSeparator\")]: separator === \"pinned\",\n },\n className,\n )}\n {...tdProps}\n >\n <div className={withBaseName(\"body\")}>{children}</div>\n <div className={withBaseName(\"columnSeparator\")} />\n <div className={withBaseName(\"rowSeparator\")} />\n <div className={withBaseName(\"topSeparator\")} />\n </td>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","CellFrame","useWindow","useComponentCssInjection","cellCss","jsxs","clsx","jsx"],"mappings":";;;;;;;;;;AAeA,MAAM,YAAA,GAAeA,kBAAa,cAAc,CAAA;AAGzC,MAAM,SAAY,GAAAC,gBAAA;AAAA,EACvB,SAASC,UAAU,CAAA,KAAA,EAAO,GAAK,EAAA;AAC7B,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AAEJ,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,WAAA;AAAA,MACR,GAAK,EAAAC,WAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IACE,uBAAAC,eAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAW,EAAAC,SAAA;AAAA,UACT,YAAa,EAAA;AAAA,UACb;AAAA,YACE,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,UAAA;AAAA,YAC5B,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,UAAA;AAAA,YAC5B,CAAC,YAAa,CAAA,kBAAkB,CAAC,GAC/B,SAAA,KAAc,aAAa,SAAc,KAAA,WAAA;AAAA,YAC3C,CAAC,YAAA,CAAa,iBAAiB,CAAC,GAAG,SAAc,KAAA;AAAA,WACnD;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,OAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,YAAa,CAAA,MAAM,GAAI,QAAS,EAAA,CAAA;AAAA,0BAC/CA,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,YAAA,CAAa,iBAAiB,CAAG,EAAA,CAAA;AAAA,0BAChDA,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,YAAA,CAAa,cAAc,CAAG,EAAA,CAAA;AAAA,0BAC7CA,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,YAAA,CAAa,cAAc,CAAG,EAAA;AAAA;AAAA;AAAA,KAChD;AAAA;AAGN;;;;"}
1
+ {"version":3,"file":"CellFrame.js","sources":["../src/CellFrame.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 { forwardRef, type HTMLAttributes } from \"react\";\nimport cellCss from \"./CellFrame.css\";\nimport type { ColumnSeparatorType } from \"./Grid\";\n\nexport interface CellProps extends HTMLAttributes<HTMLTableCellElement> {\n isSelected?: boolean;\n isEditable?: boolean;\n separator?: ColumnSeparatorType;\n}\n\n// TODO: rename the prefix in next major version to match component name.\nconst withBaseName = makePrefixer(\"saltGridCell\");\n\n/** Cell frame used for creating custom cells and editors */\nexport const CellFrame = forwardRef<HTMLTableCellElement, CellProps>(\n function CellFrame(props, ref) {\n const {\n children,\n separator,\n isSelected,\n isEditable,\n className,\n ...tdProps\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-cell\",\n css: cellCss,\n window: targetWindow,\n });\n\n return (\n <td\n ref={ref}\n className={clsx(\n withBaseName(),\n {\n [withBaseName(\"selected\")]: isSelected,\n [withBaseName(\"editable\")]: isEditable,\n [withBaseName(\"regularSeparator\")]:\n separator === \"regular\" || separator === \"groupEdge\",\n [withBaseName(\"pinnedSeparator\")]: separator === \"pinned\",\n },\n className,\n )}\n {...tdProps}\n >\n <div className={withBaseName(\"body\")}>{children}</div>\n <div className={withBaseName(\"columnSeparator\")} />\n <div className={withBaseName(\"rowSeparator\")} />\n <div className={withBaseName(\"topSeparator\")} />\n </td>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","CellFrame","useWindow","useComponentCssInjection","cellCss","jsxs","clsx","jsx"],"mappings":";;;;;;;;;;AAeA,MAAM,YAAA,GAAeA,kBAAa,cAAc,CAAA;AAGzC,MAAM,SAAA,GAAYC,gBAAA;AAAA,EACvB,SAASC,UAAAA,CAAU,KAAA,EAAO,GAAA,EAAK;AAC7B,IAAA,MAAM;AAAA,MACJ,QAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,KAAA;AAEJ,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,WAAA;AAAA,MACR,GAAA,EAAKC,WAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,uBACEC,eAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,SAAA,EAAWC,SAAA;AAAA,UACT,YAAA,EAAa;AAAA,UACb;AAAA,YACE,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,UAAA;AAAA,YAC5B,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG,UAAA;AAAA,YAC5B,CAAC,YAAA,CAAa,kBAAkB,CAAC,GAC/B,SAAA,KAAc,aAAa,SAAA,KAAc,WAAA;AAAA,YAC3C,CAAC,YAAA,CAAa,iBAAiB,CAAC,GAAG,SAAA,KAAc;AAAA,WACnD;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,OAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,CAAa,MAAM,GAAI,QAAA,EAAS,CAAA;AAAA,0BAChDA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,CAAa,iBAAiB,CAAA,EAAG,CAAA;AAAA,0BACjDA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,CAAa,cAAc,CAAA,EAAG,CAAA;AAAA,0BAC9CA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,CAAa,cAAc,CAAA,EAAG;AAAA;AAAA;AAAA,KAChD;AAAA,EAEJ;AACF;;;;"}
@@ -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,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
+ {"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":";;;;AAOO,MAAM,iBAAA,GAAoBA,oBAE/B,MAAS;AAEJ,MAAM,uBAAuB,MAAM;AACxC,EAAA,MAAM,CAAA,GAAIC,iBAAW,iBAAiB,CAAA;AACtC,EAAA,IAAI,CAAC,CAAA,EAAG;AACN,IAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,CAAA;AACT;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnDragContext.js","sources":["../src/ColumnDragContext.ts"],"sourcesContent":["import { createContext, type MouseEventHandler, 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
+ {"version":3,"file":"ColumnDragContext.js","sources":["../src/ColumnDragContext.ts"],"sourcesContent":["import { createContext, type MouseEventHandler, 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,iBAAA,GAAoBA,mBAAA;AAAA,EAC/B;AACF;AAEO,MAAM,uBAAuB,MAAM;AACxC,EAAA,MAAM,CAAA,GAAIC,iBAAW,iBAAiB,CAAA;AACtC,EAAA,IAAI,CAAC,CAAA,EAAG;AACN,IAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,CAAA;AACT;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnGroup.js","sources":["../src/ColumnGroup.tsx"],"sourcesContent":["import {\n Children,\n type ComponentType,\n cloneElement,\n isValidElement,\n type ReactNode,\n useEffect,\n useRef,\n} from \"react\";\nimport type { GridColumnGroupModel } from \"./Grid\";\nimport type { GridColumnPin } from \"./GridColumn\";\nimport { useGridContext } from \"./GridContext\";\n\nexport interface ColumnGroupCellProps {\n group: GridColumnGroupModel;\n}\n\nexport interface ColumnGroupCellValueProps {\n group: GridColumnGroupModel;\n}\n\nexport interface ColumnGroupProps {\n children: ReactNode;\n name: string;\n id: string;\n pinned?: GridColumnPin;\n headerComponent?: ComponentType<ColumnGroupCellProps>;\n headerValueComponent?: ComponentType<ColumnGroupCellValueProps>;\n}\n\nexport function ColumnGroup(props: ColumnGroupProps) {\n const pinned = props.pinned || null;\n const indexRef = useRef<number>();\n const grid = useGridContext();\n useEffect(() => {\n indexRef.current = grid.getChildIndex(props.id);\n grid.onColumnGroupAdded(props);\n return () => {\n grid.onColumnGroupRemoved(indexRef.current!, props);\n };\n });\n const childrenWithPinnedOverridden = Children.map(props.children, (child) => {\n if (isValidElement<ColumnGroupProps>(child)) {\n return cloneElement(child, { pinned });\n }\n return child;\n });\n return <>{childrenWithPinnedOverridden}</>;\n}\n"],"names":["useRef","useGridContext","useEffect","Children","isValidElement","cloneElement"],"mappings":";;;;;;AA8BO,SAAS,YAAY,KAAyB,EAAA;AACnD,EAAM,MAAA,MAAA,GAAS,MAAM,MAAU,IAAA,IAAA;AAC/B,EAAA,MAAM,WAAWA,YAAe,EAAA;AAChC,EAAA,MAAM,OAAOC,0BAAe,EAAA;AAC5B,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,OAAU,GAAA,IAAA,CAAK,aAAc,CAAA,KAAA,CAAM,EAAE,CAAA;AAC9C,IAAA,IAAA,CAAK,mBAAmB,KAAK,CAAA;AAC7B,IAAA,OAAO,MAAM;AACX,MAAK,IAAA,CAAA,oBAAA,CAAqB,QAAS,CAAA,OAAA,EAAU,KAAK,CAAA;AAAA,KACpD;AAAA,GACD,CAAA;AACD,EAAA,MAAM,+BAA+BC,cAAS,CAAA,GAAA,CAAI,KAAM,CAAA,QAAA,EAAU,CAAC,KAAU,KAAA;AAC3E,IAAI,IAAAC,oBAAA,CAAiC,KAAK,CAAG,EAAA;AAC3C,MAAA,OAAOC,kBAAa,CAAA,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA;AAAA;AAEvC,IAAO,OAAA,KAAA;AAAA,GACR,CAAA;AACD,EAAA,6DAAU,QAA6B,EAAA,4BAAA,EAAA,CAAA;AACzC;;;;"}
1
+ {"version":3,"file":"ColumnGroup.js","sources":["../src/ColumnGroup.tsx"],"sourcesContent":["import {\n Children,\n type ComponentType,\n cloneElement,\n isValidElement,\n type ReactNode,\n useEffect,\n useRef,\n} from \"react\";\nimport type { GridColumnGroupModel } from \"./Grid\";\nimport type { GridColumnPin } from \"./GridColumn\";\nimport { useGridContext } from \"./GridContext\";\n\nexport interface ColumnGroupCellProps {\n group: GridColumnGroupModel;\n}\n\nexport interface ColumnGroupCellValueProps {\n group: GridColumnGroupModel;\n}\n\nexport interface ColumnGroupProps {\n children: ReactNode;\n name: string;\n id: string;\n pinned?: GridColumnPin;\n headerComponent?: ComponentType<ColumnGroupCellProps>;\n headerValueComponent?: ComponentType<ColumnGroupCellValueProps>;\n}\n\nexport function ColumnGroup(props: ColumnGroupProps) {\n const pinned = props.pinned || null;\n const indexRef = useRef<number>();\n const grid = useGridContext();\n useEffect(() => {\n indexRef.current = grid.getChildIndex(props.id);\n grid.onColumnGroupAdded(props);\n return () => {\n grid.onColumnGroupRemoved(indexRef.current!, props);\n };\n });\n const childrenWithPinnedOverridden = Children.map(props.children, (child) => {\n if (isValidElement<ColumnGroupProps>(child)) {\n return cloneElement(child, { pinned });\n }\n return child;\n });\n return <>{childrenWithPinnedOverridden}</>;\n}\n"],"names":["useRef","useGridContext","useEffect","Children","isValidElement","cloneElement"],"mappings":";;;;;;AA8BO,SAAS,YAAY,KAAA,EAAyB;AACnD,EAAA,MAAM,MAAA,GAAS,MAAM,MAAA,IAAU,IAAA;AAC/B,EAAA,MAAM,WAAWA,YAAA,EAAe;AAChC,EAAA,MAAM,OAAOC,0BAAA,EAAe;AAC5B,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,OAAA,GAAU,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,EAAE,CAAA;AAC9C,IAAA,IAAA,CAAK,mBAAmB,KAAK,CAAA;AAC7B,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,oBAAA,CAAqB,QAAA,CAAS,OAAA,EAAU,KAAK,CAAA;AAAA,IACpD,CAAA;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,+BAA+BC,cAAA,CAAS,GAAA,CAAI,KAAA,CAAM,QAAA,EAAU,CAAC,KAAA,KAAU;AAC3E,IAAA,IAAIC,oBAAA,CAAiC,KAAK,CAAA,EAAG;AAC3C,MAAA,OAAOC,kBAAA,CAAa,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAA;AAAA,IACvC;AACA,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AACD,EAAA,6DAAU,QAAA,EAAA,4BAAA,EAA6B,CAAA;AACzC;;;;"}
@@ -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;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,iBAAA,GAAoBA,mBAAA;AAAA,EAC/B;AACF;AAEO,MAAM,uBAAuB,MAAM;AACxC,EAAA,MAAM,CAAA,GAAIC,iBAAW,iBAAiB,CAAA;AACtC,EAAA,IAAI,CAAC,CAAA,EAAG;AACN,IAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,CAAA;AACT;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"CornerTag.js","sources":["../src/CornerTag.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport cornerTagCss from \"./CornerTag.css\";\n\nexport interface CornerTagProps {\n focusOnly?: boolean; // Show when the parent is focused, hide when not\n}\n\nexport function CornerTag(props: CornerTagProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-corner-tag\",\n css: cornerTagCss,\n window: targetWindow,\n });\n\n return (\n <div\n className={\n props.focusOnly ? \"saltGridCornerTag-focusOnly\" : \"saltGridCornerTag\"\n }\n />\n );\n}\n"],"names":["useWindow","useComponentCssInjection","cornerTagCss","jsx"],"mappings":";;;;;;;AASO,SAAS,UAAU,KAAuB,EAAA;AAC/C,EAAA,MAAM,eAAeA,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,WAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EACE,uBAAAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EACE,KAAM,CAAA,SAAA,GAAY,6BAAgC,GAAA;AAAA;AAAA,GAEtD;AAEJ;;;;"}
1
+ {"version":3,"file":"CornerTag.js","sources":["../src/CornerTag.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport cornerTagCss from \"./CornerTag.css\";\n\nexport interface CornerTagProps {\n focusOnly?: boolean; // Show when the parent is focused, hide when not\n}\n\nexport function CornerTag(props: CornerTagProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-corner-tag\",\n css: cornerTagCss,\n window: targetWindow,\n });\n\n return (\n <div\n className={\n props.focusOnly ? \"saltGridCornerTag-focusOnly\" : \"saltGridCornerTag\"\n }\n />\n );\n}\n"],"names":["useWindow","useComponentCssInjection","cornerTagCss","jsx"],"mappings":";;;;;;;AASO,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,MAAM,eAAeA,gBAAA,EAAU;AAC/B,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,iBAAA;AAAA,IACR,GAAA,EAAKC,WAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EACE,KAAA,CAAM,SAAA,GAAY,6BAAA,GAAgC;AAAA;AAAA,GAEtD;AAEJ;;;;"}
@@ -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;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,aAAA,GAAgBA,mBAAA;AAAA,EAC3B;AACF;AACO,MAAM,mBAAmB,MAAM;AACpC,EAAA,MAAM,CAAA,GAAIC,iBAAW,aAAa,CAAA;AAClC,EAAA,IAAI,CAAC,CAAA,EAAG;AACN,IAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,EAC9D;AACA,EAAA,OAAO,CAAA;AACT;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownCellEditor.js","sources":["../src/DropdownCellEditor.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport {\n Dropdown,\n type SelectHandler,\n type SelectionChangeHandler,\n} from \"@salt-ds/lab\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useEffect, useRef } from \"react\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport dropdownCellEditorCss from \"./DropdownCellEditor.css\";\nimport { useEditorContext } from \"./EditorContext\";\nimport type { GridColumnModel, GridRowModel } from \"./Grid\";\n\nconst withBaseName = makePrefixer(\"saltGridDropdownCellEditor\");\n\nexport interface DropdownCellEditorProps<T> {\n options: ReadonlyArray<string>;\n // Row and column are provided by the grid. See TableRow.tsx\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n}\n\nexport function DropdownCellEditor<T>(props: DropdownCellEditorProps<T>) {\n const { options, column, row } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dropdown-cell-editor\",\n css: dropdownCellEditorCss,\n window: targetWindow,\n });\n\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const value = column!.info.props.getValue!(row!.data);\n\n const { endEditMode } = useEditorContext();\n\n const onSelectionChange: SelectionChangeHandler = (event, item) => {\n if (item) {\n endEditMode(item);\n }\n };\n\n const onSelect: SelectHandler = (event, item) => {\n if (item) {\n endEditMode(item);\n }\n };\n\n useEffect(() => {\n if (triggerRef.current) {\n triggerRef.current.focus();\n }\n }, [triggerRef.current]);\n\n const triggerComponent = (\n <div\n tabIndex={0}\n ref={triggerRef}\n className={withBaseName(\"currentValue\")}\n data-testid=\"grid-cell-editor-trigger\"\n >\n {value}\n </div>\n );\n\n return (\n <CellFrame separator={column?.separator} className={withBaseName()}>\n <div className={withBaseName(\"dropdownContainer\")}>\n {options && options.length > 0 ? (\n <Dropdown\n isOpen={true}\n source={options}\n defaultSelected={value}\n onSelectionChange={onSelectionChange}\n onSelect={onSelect}\n triggerComponent={triggerComponent}\n width={column!.info.width! - 5}\n />\n ) : (\n triggerComponent\n )}\n </div>\n <CornerTag />\n </CellFrame>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","dropdownCellEditorCss","useRef","useEditorContext","useEffect","jsx","CellFrame","Dropdown","CornerTag"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,YAAA,GAAeA,kBAAa,4BAA4B,CAAA;AASvD,SAAS,mBAAsB,KAAmC,EAAA;AACvE,EAAA,MAAM,EAAE,OAAA,EAAS,MAAQ,EAAA,GAAA,EAAQ,GAAA,KAAA;AAEjC,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,2BAAA;AAAA,IACR,GAAK,EAAAC,oBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,UAAA,GAAaC,aAAuB,IAAI,CAAA;AAE9C,EAAA,MAAM,QAAQ,MAAQ,CAAA,IAAA,CAAK,KAAM,CAAA,QAAA,CAAU,IAAK,IAAI,CAAA;AAEpD,EAAM,MAAA,EAAE,WAAY,EAAA,GAAIC,8BAAiB,EAAA;AAEzC,EAAM,MAAA,iBAAA,GAA4C,CAAC,KAAA,EAAO,IAAS,KAAA;AACjE,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,WAAA,CAAY,IAAI,CAAA;AAAA;AAClB,GACF;AAEA,EAAM,MAAA,QAAA,GAA0B,CAAC,KAAA,EAAO,IAAS,KAAA;AAC/C,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,WAAA,CAAY,IAAI,CAAA;AAAA;AAClB,GACF;AAEA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAW,OAAS,EAAA;AACtB,MAAA,UAAA,CAAW,QAAQ,KAAM,EAAA;AAAA;AAC3B,GACC,EAAA,CAAC,UAAW,CAAA,OAAO,CAAC,CAAA;AAEvB,EAAA,MAAM,gBACJ,mBAAAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,QAAU,EAAA,CAAA;AAAA,MACV,GAAK,EAAA,UAAA;AAAA,MACL,SAAA,EAAW,aAAa,cAAc,CAAA;AAAA,MACtC,aAAY,EAAA,0BAAA;AAAA,MAEX,QAAA,EAAA;AAAA;AAAA,GACH;AAGF,EAAA,uCACGC,mBAAU,EAAA,EAAA,SAAA,EAAW,iCAAQ,SAAW,EAAA,SAAA,EAAW,cAClD,EAAA,QAAA,EAAA;AAAA,oBAACD,cAAA,CAAA,KAAA,EAAA,EAAI,WAAW,YAAa,CAAA,mBAAmB,GAC7C,QAAW,EAAA,OAAA,IAAA,OAAA,CAAQ,SAAS,CAC3B,mBAAAA,cAAA;AAAA,MAACE,YAAA;AAAA,MAAA;AAAA,QACC,MAAQ,EAAA,IAAA;AAAA,QACR,MAAQ,EAAA,OAAA;AAAA,QACR,eAAiB,EAAA,KAAA;AAAA,QACjB,iBAAA;AAAA,QACA,QAAA;AAAA,QACA,gBAAA;AAAA,QACA,KAAA,EAAO,MAAQ,CAAA,IAAA,CAAK,KAAS,GAAA;AAAA;AAAA,QAG/B,gBAEJ,EAAA,CAAA;AAAA,mCACCC,mBAAU,EAAA,EAAA;AAAA,GACb,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"DropdownCellEditor.js","sources":["../src/DropdownCellEditor.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport {\n Dropdown,\n type SelectHandler,\n type SelectionChangeHandler,\n} from \"@salt-ds/lab\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useEffect, useRef } from \"react\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport dropdownCellEditorCss from \"./DropdownCellEditor.css\";\nimport { useEditorContext } from \"./EditorContext\";\nimport type { GridColumnModel, GridRowModel } from \"./Grid\";\n\nconst withBaseName = makePrefixer(\"saltGridDropdownCellEditor\");\n\nexport interface DropdownCellEditorProps<T> {\n options: ReadonlyArray<string>;\n // Row and column are provided by the grid. See TableRow.tsx\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n}\n\nexport function DropdownCellEditor<T>(props: DropdownCellEditorProps<T>) {\n const { options, column, row } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-dropdown-cell-editor\",\n css: dropdownCellEditorCss,\n window: targetWindow,\n });\n\n const triggerRef = useRef<HTMLDivElement>(null);\n\n const value = column!.info.props.getValue!(row!.data);\n\n const { endEditMode } = useEditorContext();\n\n const onSelectionChange: SelectionChangeHandler = (event, item) => {\n if (item) {\n endEditMode(item);\n }\n };\n\n const onSelect: SelectHandler = (event, item) => {\n if (item) {\n endEditMode(item);\n }\n };\n\n useEffect(() => {\n if (triggerRef.current) {\n triggerRef.current.focus();\n }\n }, [triggerRef.current]);\n\n const triggerComponent = (\n <div\n tabIndex={0}\n ref={triggerRef}\n className={withBaseName(\"currentValue\")}\n data-testid=\"grid-cell-editor-trigger\"\n >\n {value}\n </div>\n );\n\n return (\n <CellFrame separator={column?.separator} className={withBaseName()}>\n <div className={withBaseName(\"dropdownContainer\")}>\n {options && options.length > 0 ? (\n <Dropdown\n isOpen={true}\n source={options}\n defaultSelected={value}\n onSelectionChange={onSelectionChange}\n onSelect={onSelect}\n triggerComponent={triggerComponent}\n width={column!.info.width! - 5}\n />\n ) : (\n triggerComponent\n )}\n </div>\n <CornerTag />\n </CellFrame>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","dropdownCellEditorCss","useRef","useEditorContext","useEffect","jsx","CellFrame","Dropdown","CornerTag"],"mappings":";;;;;;;;;;;;;AAgBA,MAAM,YAAA,GAAeA,kBAAa,4BAA4B,CAAA;AASvD,SAAS,mBAAsB,KAAA,EAAmC;AACvE,EAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAQ,GAAA,EAAI,GAAI,KAAA;AAEjC,EAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,2BAAA;AAAA,IACR,GAAA,EAAKC,oBAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,UAAA,GAAaC,aAAuB,IAAI,CAAA;AAE9C,EAAA,MAAM,QAAQ,MAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,QAAA,CAAU,IAAK,IAAI,CAAA;AAEpD,EAAA,MAAM,EAAE,WAAA,EAAY,GAAIC,8BAAA,EAAiB;AAEzC,EAAA,MAAM,iBAAA,GAA4C,CAAC,KAAA,EAAO,IAAA,KAAS;AACjE,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,WAAA,CAAY,IAAI,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,QAAA,GAA0B,CAAC,KAAA,EAAO,IAAA,KAAS;AAC/C,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,WAAA,CAAY,IAAI,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,UAAA,CAAW,QAAQ,KAAA,EAAM;AAAA,IAC3B;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,CAAW,OAAO,CAAC,CAAA;AAEvB,EAAA,MAAM,gBAAA,mBACJC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAU,CAAA;AAAA,MACV,GAAA,EAAK,UAAA;AAAA,MACL,SAAA,EAAW,aAAa,cAAc,CAAA;AAAA,MACtC,aAAA,EAAY,0BAAA;AAAA,MAEX,QAAA,EAAA;AAAA;AAAA,GACH;AAGF,EAAA,uCACGC,mBAAA,EAAA,EAAU,SAAA,EAAW,iCAAQ,SAAA,EAAW,SAAA,EAAW,cAAa,EAC/D,QAAA,EAAA;AAAA,oBAAAD,cAAA,CAAC,KAAA,EAAA,EAAI,WAAW,YAAA,CAAa,mBAAmB,GAC7C,QAAA,EAAA,OAAA,IAAW,OAAA,CAAQ,SAAS,CAAA,mBAC3BA,cAAA;AAAA,MAACE,YAAA;AAAA,MAAA;AAAA,QACC,MAAA,EAAQ,IAAA;AAAA,QACR,MAAA,EAAQ,OAAA;AAAA,QACR,eAAA,EAAiB,KAAA;AAAA,QACjB,iBAAA;AAAA,QACA,QAAA;AAAA,QACA,gBAAA;AAAA,QACA,KAAA,EAAO,MAAA,CAAQ,IAAA,CAAK,KAAA,GAAS;AAAA;AAAA,QAG/B,gBAAA,EAEJ,CAAA;AAAA,mCACCC,mBAAA,EAAA,EAAU;AAAA,GAAA,EACb,CAAA;AAEJ;;;;"}
@@ -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;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,aAAA,GAAgBA,mBAAA;AAAA,EAC3B;AACF;AACO,MAAM,mBAAmB,MAAM;AACpC,EAAA,MAAM,CAAA,GAAIC,iBAAW,aAAa,CAAA;AAClC,EAAA,IAAI,CAAC,CAAA,EAAG;AACN,IAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,EAC9D;AACA,EAAA,OAAO,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 gridCss from \"./Grid.css\";\nimport type {\n CellValidationState,\n GridColumnInfo,\n GridColumnProps,\n} from \"./GridColumn\";\nimport { GridContext } from \"./GridContext\";\nimport {\n CellMeasure,\n clamp,\n getFocusablePosition,\n LeftPart,\n MiddlePart,\n RightPart,\n Scrollable,\n type ScrollableProps,\n TopLeftPart,\n TopPart,\n TopRightPart,\n useBodyVisibleAreaTop,\n useBodyVisibleColumnRange,\n useClientMidHeight,\n useClientMidWidth,\n useColumnMove,\n useColumnRange,\n useColumnRegistry,\n useColumnResize,\n useHeadVisibleColumnRange,\n useLeftScrolledOutWidth,\n useRangeSelection,\n useRowModels,\n useRowSelection,\n useScrollToCell,\n useSum,\n useSumRangeWidth,\n useSumWidth,\n useVisibleColumnGroupRange,\n useVisibleRowRange,\n} from \"./internal\";\nimport { ColumnDropTarget } from \"./internal/ColumnDropTarget\";\nimport { ColumnGhost } from \"./internal/ColumnGhost\";\nimport { LayoutContext } from \"./LayoutContext\";\nimport { SelectionContext } from \"./SelectionContext\";\nimport { SizingContext } from \"./SizingContext\";\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 gridCss from \"./Grid.css\";\nimport type {\n CellValidationState,\n GridColumnInfo,\n GridColumnProps,\n} from \"./GridColumn\";\nimport { GridContext } from \"./GridContext\";\nimport {\n CellMeasure,\n clamp,\n getFocusablePosition,\n LeftPart,\n MiddlePart,\n RightPart,\n Scrollable,\n type ScrollableProps,\n TopLeftPart,\n TopPart,\n TopRightPart,\n useBodyVisibleAreaTop,\n useBodyVisibleColumnRange,\n useClientMidHeight,\n useClientMidWidth,\n useColumnMove,\n useColumnRange,\n useColumnRegistry,\n useColumnResize,\n useHeadVisibleColumnRange,\n useLeftScrolledOutWidth,\n useRangeSelection,\n useRowModels,\n useRowSelection,\n useScrollToCell,\n useSum,\n useSumRangeWidth,\n useSumWidth,\n useVisibleColumnGroupRange,\n useVisibleRowRange,\n} from \"./internal\";\nimport { ColumnDropTarget } from \"./internal/ColumnDropTarget\";\nimport { ColumnGhost } from \"./internal/ColumnGhost\";\nimport { LayoutContext } from \"./LayoutContext\";\nimport { SelectionContext } from \"./SelectionContext\";\nimport { SizingContext } from \"./SizingContext\";\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":"GridColumn.js","sources":["../src/GridColumn.tsx"],"sourcesContent":["import {\n Children,\n type ComponentType,\n type CSSProperties,\n cloneElement,\n isValidElement,\n type KeyboardEvent,\n type ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport type { GridColumnModel, GridRowModel, SortOrder } from \"./Grid\";\nimport { useGridContext } from \"./GridContext\";\n\nexport type GridColumnPin = \"left\" | \"right\" | null;\n\nexport type CellValidationState = \"error\" | \"warning\" | \"success\";\ntype CellValidationType = \"strong\" | \"light\";\n\nexport interface GridCellProps<T, U = any> {\n row: GridRowModel<T>;\n column: GridColumnModel<T>;\n className?: string;\n style?: CSSProperties;\n isFocused?: boolean;\n isSelected?: boolean;\n isEditable?: boolean;\n children?: ReactNode;\n align?: GridColumnProps[\"align\"];\n value?: U;\n validationStatus?: CellValidationState;\n validationMessage?: string;\n validationType?: CellValidationType;\n}\n\nexport interface GridCellValueProps<T, U = any> {\n row: GridRowModel<T>;\n column: GridColumnModel<T>;\n isFocused?: boolean;\n value?: U;\n validationStatus?: CellValidationState;\n validationMessage?: string;\n validationType?: CellValidationType;\n}\n\nexport interface HeaderCellProps<T> {\n column: GridColumnModel<T>;\n children: ReactNode;\n isFocused?: boolean;\n}\n\nexport interface GridHeaderValueProps<T> {\n column: GridColumnModel<T>;\n isFocused?: boolean;\n}\n\nexport interface GridEditorProps<T> {\n row: GridRowModel<T>;\n column: GridColumnModel<T>;\n}\n\nexport interface GridColumnProps<T = any> {\n /**\n * Unique identifier of the column.\n * */\n id: string; // TODO make optional\n /**\n * Enables sorting (by sort order: `asc | desc | none`) for the column.\n * To enable column header's keyboard navigation on sort,\n * users need to set `headerIsFocusable` prop to `true` in Grid component.\n * To customise how GridColumn data sorts, use also `customSort` or `onSortOrderChanged`.\n * */\n sortable?: boolean;\n /**\n * Custom sorting function. Use for client side sorting.\n * */\n customSort?: (args: { rowData: T[]; sortOrder: SortOrder }) => T[];\n /**\n * Exposes GridColumn sort order. Use for server side sorting.\n * */\n onSortOrderChange?: (args: { sortOrder: SortOrder }) => void;\n /**\n * Name is displayed on the column header by default.\n * */\n name?: string;\n /**\n * Default width of the column in `px`.\n * */\n defaultWidth?: number;\n /**\n * Min width of the column.\n * */\n minWidth?: number;\n /**\n * Callback invoked when the user resizes the column.\n * */\n onWidthChanged?: (width: number) => void;\n /**\n * Whether the column should be pinned `left` or `right`. By default columns\n * are unpinned. Accepts `\"left\" | \"right\" | null`.\n * */\n pinned?: GridColumnPin;\n /**\n * Text align for the header and cells.\n * */\n align?: \"left\" | \"right\";\n /**\n * Component to render for every cell in the column. Useful when major\n * customization is needed. Use this only if `cellValueComponent` is not\n * sufficient. Default implementation of cell component takes care of\n * selection, hover, focus and other basic grid features.\n * */\n cellComponent?: ComponentType<GridCellProps<T>>;\n /**\n * Component to render inside every cell. This is the preferred way of\n * customizing grid cells.\n * */\n cellValueComponent?: ComponentType<GridCellValueProps<T>>;\n /**\n * Cell value getter. Should return the value to be displayed in the cell\n * for the given row data item.\n * */\n getValue?: (rowData: T) => any;\n /**\n * Cell validation status getter. Should return one of the known validation status names: \"none\" | \"error\" | \"warning\"\n * If you require a custom validation status, you can achieve that by providing a custom cell component.\n * */\n getValidationStatus?: (\n value: GridCellValueProps<T>,\n ) => CellValidationState | undefined;\n /**\n * Cell validation status message getter. Should return a string description of the validation state that can be used for the screen reader.\n * This prop is optional but if you don't provide a function a default message will be used.\n * */\n getValidationMessage?: (value: GridCellValueProps<T>) => string | undefined;\n /**\n * Cell validation type. Determines the visual style of the validation. The available values are \"strong\" and \"light\". Strong will display the icon\n * along side the background and border. Light will only affect border and background. Use light if you are validation the whole row, and optionally\n * strong on one of the columns, and strong if you are validating user input on a particular cell.\n * The default value is \"light\".\n * */\n validationType?: GridCellProps<T>[\"validationType\"];\n /**\n * CSS class to be applied to the column header.\n * Useful for minor customizations\n * */\n headerClassName?: string;\n /**\n * Custom header component. Use this when `headerValueComponent` doesn't\n * provide enough flexibility.\n * */\n headerComponent?: ComponentType<HeaderCellProps<T>>;\n /**\n * Renders the content of the column header. This is the preferred way of\n * customizing column headers.\n * */\n headerValueComponent?: ComponentType<GridHeaderValueProps<T>>;\n /**\n * A callback to be invoked when the user modifies a cell value.\n * */\n onChange?: (row: T, rowIndex: number, value: string) => void;\n /**\n * A callback to be invoked on key down when the focus is in this column.\n */\n onKeyDown?: (event: KeyboardEvent<HTMLDivElement>, rowIndex: number) => void;\n /**\n * Children is optional, and accepts non-rendered elements i.e. `CellEditor`\n */\n children?: ReactNode;\n /**\n * aria-label is optional, and accepts any string value\n */\n \"aria-label\"?: string;\n}\n\nexport interface GridColumnInfo<T> {\n width: number;\n onWidthChanged: (width: number) => void;\n props: GridColumnProps<T>;\n}\n\nexport const GridColumn = function GridColumn<T = any>(\n props: GridColumnProps<T>,\n) {\n const { defaultWidth } = props;\n const indexRef = useRef<number>();\n const [width, setWidth] = useState<number>(\n defaultWidth !== undefined ? defaultWidth : 100,\n );\n\n const grid = useGridContext();\n\n const onWidthChanged = (w: number) => {\n setWidth(w);\n if (props.onWidthChanged) {\n props.onWidthChanged(w);\n }\n };\n\n const info: GridColumnInfo<T> = {\n width,\n onWidthChanged,\n props,\n };\n\n useEffect(() => {\n indexRef.current = grid.getChildIndex(props.id);\n grid.onColumnAdded(info);\n return () => {\n grid.onColumnRemoved(indexRef.current!, info);\n };\n });\n\n return (\n <>\n {Children.map(props.children, (ch) =>\n isValidElement(ch)\n ? cloneElement(ch, { columnId: props.id } as any)\n : ch,\n )}\n </>\n );\n};\n"],"names":["GridColumn","useRef","useState","useGridContext","useEffect","Children","isValidElement","cloneElement"],"mappings":";;;;;;AAsLa,MAAA,UAAA,GAAa,SAASA,WAAAA,CACjC,KACA,EAAA;AACA,EAAM,MAAA,EAAE,cAAiB,GAAA,KAAA;AACzB,EAAA,MAAM,WAAWC,YAAe,EAAA;AAChC,EAAM,MAAA,CAAC,KAAO,EAAA,QAAQ,CAAI,GAAAC,cAAA;AAAA,IACxB,YAAA,KAAiB,SAAY,YAAe,GAAA;AAAA,GAC9C;AAEA,EAAA,MAAM,OAAOC,0BAAe,EAAA;AAE5B,EAAM,MAAA,cAAA,GAAiB,CAAC,CAAc,KAAA;AACpC,IAAA,QAAA,CAAS,CAAC,CAAA;AACV,IAAA,IAAI,MAAM,cAAgB,EAAA;AACxB,MAAA,KAAA,CAAM,eAAe,CAAC,CAAA;AAAA;AACxB,GACF;AAEA,EAAA,MAAM,IAA0B,GAAA;AAAA,IAC9B,KAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,OAAU,GAAA,IAAA,CAAK,aAAc,CAAA,KAAA,CAAM,EAAE,CAAA;AAC9C,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAK,IAAA,CAAA,eAAA,CAAgB,QAAS,CAAA,OAAA,EAAU,IAAI,CAAA;AAAA,KAC9C;AAAA,GACD,CAAA;AAED,EAAA,6DAEK,QAAS,EAAAC,cAAA,CAAA,GAAA;AAAA,IAAI,KAAM,CAAA,QAAA;AAAA,IAAU,CAAC,EAAA,KAC7BC,oBAAe,CAAA,EAAE,CACb,GAAAC,kBAAA,CAAa,EAAI,EAAA,EAAE,QAAU,EAAA,KAAA,CAAM,EAAG,EAAQ,CAC9C,GAAA;AAAA,GAER,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"GridColumn.js","sources":["../src/GridColumn.tsx"],"sourcesContent":["import {\n Children,\n type ComponentType,\n type CSSProperties,\n cloneElement,\n isValidElement,\n type KeyboardEvent,\n type ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport type { GridColumnModel, GridRowModel, SortOrder } from \"./Grid\";\nimport { useGridContext } from \"./GridContext\";\n\nexport type GridColumnPin = \"left\" | \"right\" | null;\n\nexport type CellValidationState = \"error\" | \"warning\" | \"success\";\ntype CellValidationType = \"strong\" | \"light\";\n\nexport interface GridCellProps<T, U = any> {\n row: GridRowModel<T>;\n column: GridColumnModel<T>;\n className?: string;\n style?: CSSProperties;\n isFocused?: boolean;\n isSelected?: boolean;\n isEditable?: boolean;\n children?: ReactNode;\n align?: GridColumnProps[\"align\"];\n value?: U;\n validationStatus?: CellValidationState;\n validationMessage?: string;\n validationType?: CellValidationType;\n}\n\nexport interface GridCellValueProps<T, U = any> {\n row: GridRowModel<T>;\n column: GridColumnModel<T>;\n isFocused?: boolean;\n value?: U;\n validationStatus?: CellValidationState;\n validationMessage?: string;\n validationType?: CellValidationType;\n}\n\nexport interface HeaderCellProps<T> {\n column: GridColumnModel<T>;\n children: ReactNode;\n isFocused?: boolean;\n}\n\nexport interface GridHeaderValueProps<T> {\n column: GridColumnModel<T>;\n isFocused?: boolean;\n}\n\nexport interface GridEditorProps<T> {\n row: GridRowModel<T>;\n column: GridColumnModel<T>;\n}\n\nexport interface GridColumnProps<T = any> {\n /**\n * Unique identifier of the column.\n * */\n id: string; // TODO make optional\n /**\n * Enables sorting (by sort order: `asc | desc | none`) for the column.\n * To enable column header's keyboard navigation on sort,\n * users need to set `headerIsFocusable` prop to `true` in Grid component.\n * To customise how GridColumn data sorts, use also `customSort` or `onSortOrderChanged`.\n * */\n sortable?: boolean;\n /**\n * Custom sorting function. Use for client side sorting.\n * */\n customSort?: (args: { rowData: T[]; sortOrder: SortOrder }) => T[];\n /**\n * Exposes GridColumn sort order. Use for server side sorting.\n * */\n onSortOrderChange?: (args: { sortOrder: SortOrder }) => void;\n /**\n * Name is displayed on the column header by default.\n * */\n name?: string;\n /**\n * Default width of the column in `px`.\n * */\n defaultWidth?: number;\n /**\n * Min width of the column.\n * */\n minWidth?: number;\n /**\n * Callback invoked when the user resizes the column.\n * */\n onWidthChanged?: (width: number) => void;\n /**\n * Whether the column should be pinned `left` or `right`. By default columns\n * are unpinned. Accepts `\"left\" | \"right\" | null`.\n * */\n pinned?: GridColumnPin;\n /**\n * Text align for the header and cells.\n * */\n align?: \"left\" | \"right\";\n /**\n * Component to render for every cell in the column. Useful when major\n * customization is needed. Use this only if `cellValueComponent` is not\n * sufficient. Default implementation of cell component takes care of\n * selection, hover, focus and other basic grid features.\n * */\n cellComponent?: ComponentType<GridCellProps<T>>;\n /**\n * Component to render inside every cell. This is the preferred way of\n * customizing grid cells.\n * */\n cellValueComponent?: ComponentType<GridCellValueProps<T>>;\n /**\n * Cell value getter. Should return the value to be displayed in the cell\n * for the given row data item.\n * */\n getValue?: (rowData: T) => any;\n /**\n * Cell validation status getter. Should return one of the known validation status names: \"none\" | \"error\" | \"warning\"\n * If you require a custom validation status, you can achieve that by providing a custom cell component.\n * */\n getValidationStatus?: (\n value: GridCellValueProps<T>,\n ) => CellValidationState | undefined;\n /**\n * Cell validation status message getter. Should return a string description of the validation state that can be used for the screen reader.\n * This prop is optional but if you don't provide a function a default message will be used.\n * */\n getValidationMessage?: (value: GridCellValueProps<T>) => string | undefined;\n /**\n * Cell validation type. Determines the visual style of the validation. The available values are \"strong\" and \"light\". Strong will display the icon\n * along side the background and border. Light will only affect border and background. Use light if you are validation the whole row, and optionally\n * strong on one of the columns, and strong if you are validating user input on a particular cell.\n * The default value is \"light\".\n * */\n validationType?: GridCellProps<T>[\"validationType\"];\n /**\n * CSS class to be applied to the column header.\n * Useful for minor customizations\n * */\n headerClassName?: string;\n /**\n * Custom header component. Use this when `headerValueComponent` doesn't\n * provide enough flexibility.\n * */\n headerComponent?: ComponentType<HeaderCellProps<T>>;\n /**\n * Renders the content of the column header. This is the preferred way of\n * customizing column headers.\n * */\n headerValueComponent?: ComponentType<GridHeaderValueProps<T>>;\n /**\n * A callback to be invoked when the user modifies a cell value.\n * */\n onChange?: (row: T, rowIndex: number, value: string) => void;\n /**\n * A callback to be invoked on key down when the focus is in this column.\n */\n onKeyDown?: (event: KeyboardEvent<HTMLDivElement>, rowIndex: number) => void;\n /**\n * Children is optional, and accepts non-rendered elements i.e. `CellEditor`\n */\n children?: ReactNode;\n /**\n * aria-label is optional, and accepts any string value\n */\n \"aria-label\"?: string;\n}\n\nexport interface GridColumnInfo<T> {\n width: number;\n onWidthChanged: (width: number) => void;\n props: GridColumnProps<T>;\n}\n\nexport const GridColumn = function GridColumn<T = any>(\n props: GridColumnProps<T>,\n) {\n const { defaultWidth } = props;\n const indexRef = useRef<number>();\n const [width, setWidth] = useState<number>(\n defaultWidth !== undefined ? defaultWidth : 100,\n );\n\n const grid = useGridContext();\n\n const onWidthChanged = (w: number) => {\n setWidth(w);\n if (props.onWidthChanged) {\n props.onWidthChanged(w);\n }\n };\n\n const info: GridColumnInfo<T> = {\n width,\n onWidthChanged,\n props,\n };\n\n useEffect(() => {\n indexRef.current = grid.getChildIndex(props.id);\n grid.onColumnAdded(info);\n return () => {\n grid.onColumnRemoved(indexRef.current!, info);\n };\n });\n\n return (\n <>\n {Children.map(props.children, (ch) =>\n isValidElement(ch)\n ? cloneElement(ch, { columnId: props.id } as any)\n : ch,\n )}\n </>\n );\n};\n"],"names":["GridColumn","useRef","useState","useGridContext","useEffect","Children","isValidElement","cloneElement"],"mappings":";;;;;;AAsLO,MAAM,UAAA,GAAa,SAASA,WAAAA,CACjC,KAAA,EACA;AACA,EAAA,MAAM,EAAE,cAAa,GAAI,KAAA;AACzB,EAAA,MAAM,WAAWC,YAAA,EAAe;AAChC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,cAAA;AAAA,IACxB,YAAA,KAAiB,SAAY,YAAA,GAAe;AAAA,GAC9C;AAEA,EAAA,MAAM,OAAOC,0BAAA,EAAe;AAE5B,EAAA,MAAM,cAAA,GAAiB,CAAC,CAAA,KAAc;AACpC,IAAA,QAAA,CAAS,CAAC,CAAA;AACV,IAAA,IAAI,MAAM,cAAA,EAAgB;AACxB,MAAA,KAAA,CAAM,eAAe,CAAC,CAAA;AAAA,IACxB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,IAAA,GAA0B;AAAA,IAC9B,KAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,QAAA,CAAS,OAAA,GAAU,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,EAAE,CAAA;AAC9C,IAAA,IAAA,CAAK,cAAc,IAAI,CAAA;AACvB,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,eAAA,CAAgB,QAAA,CAAS,OAAA,EAAU,IAAI,CAAA;AAAA,IAC9C,CAAA;AAAA,EACF,CAAC,CAAA;AAED,EAAA,6DAEK,QAAA,EAAAC,cAAA,CAAS,GAAA;AAAA,IAAI,KAAA,CAAM,QAAA;AAAA,IAAU,CAAC,EAAA,KAC7BC,oBAAA,CAAe,EAAE,CAAA,GACbC,kBAAA,CAAa,EAAA,EAAI,EAAE,QAAA,EAAU,KAAA,CAAM,EAAA,EAAW,CAAA,GAC9C;AAAA,GACN,EACF,CAAA;AAEJ;;;;"}