@salt-ds/data-grid 1.0.28 → 1.0.29

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 +18 -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
@@ -1 +1 @@
1
- {"version":3,"file":"GridContext.js","sources":["../src/GridContext.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { CellEditorInfo } from \"./CellEditor\";\nimport type { ColumnGroupProps } from \"./ColumnGroup\";\nimport type { GridColumnInfo } from \"./GridColumn\";\n\nexport interface GridContext<T> {\n getChildIndex: (columnId: string) => number;\n\n onColumnAdded: (columnInfo: GridColumnInfo<T>) => void;\n onColumnRemoved: (index: number, columnInfo: GridColumnInfo<T>) => void;\n onColumnGroupAdded: (colGroupProps: ColumnGroupProps) => void;\n onColumnGroupRemoved: (\n index: number,\n colGroupProps: ColumnGroupProps,\n ) => void;\n\n onEditorAdded: (editorInfo: CellEditorInfo<T>) => void;\n onEditorRemoved: (editorInfo: CellEditorInfo<T>) => void;\n\n getEditor: (columnId: string) => CellEditorInfo<T> | undefined;\n}\n\nexport const GridContext = createContext<GridContext<any> | undefined>(\n undefined,\n);\n\nexport const useGridContext = () => {\n const c = useContext(GridContext);\n if (!c) {\n throw new Error(\"useGridContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAsBO,MAAM,WAAc,GAAAA,mBAAA;AAAA,EACzB;AACF;AAEO,MAAM,iBAAiB,MAAM;AAClC,EAAM,MAAA,CAAA,GAAIC,iBAAW,WAAW,CAAA;AAChC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,0CAA0C,CAAA;AAAA;AAE5D,EAAO,OAAA,CAAA;AACT;;;;;"}
1
+ {"version":3,"file":"GridContext.js","sources":["../src/GridContext.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { CellEditorInfo } from \"./CellEditor\";\nimport type { ColumnGroupProps } from \"./ColumnGroup\";\nimport type { GridColumnInfo } from \"./GridColumn\";\n\nexport interface GridContext<T> {\n getChildIndex: (columnId: string) => number;\n\n onColumnAdded: (columnInfo: GridColumnInfo<T>) => void;\n onColumnRemoved: (index: number, columnInfo: GridColumnInfo<T>) => void;\n onColumnGroupAdded: (colGroupProps: ColumnGroupProps) => void;\n onColumnGroupRemoved: (\n index: number,\n colGroupProps: ColumnGroupProps,\n ) => void;\n\n onEditorAdded: (editorInfo: CellEditorInfo<T>) => void;\n onEditorRemoved: (editorInfo: CellEditorInfo<T>) => void;\n\n getEditor: (columnId: string) => CellEditorInfo<T> | undefined;\n}\n\nexport const GridContext = createContext<GridContext<any> | undefined>(\n undefined,\n);\n\nexport const useGridContext = () => {\n const c = useContext(GridContext);\n if (!c) {\n throw new Error(\"useGridContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAsBO,MAAM,WAAA,GAAcA,mBAAA;AAAA,EACzB;AACF;AAEO,MAAM,iBAAiB,MAAM;AAClC,EAAA,MAAM,CAAA,GAAIC,iBAAW,WAAW,CAAA;AAChC,EAAA,IAAI,CAAC,CAAA,EAAG;AACN,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AACA,EAAA,OAAO,CAAA;AACT;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"GroupHeaderCell.js","sources":["../src/GroupHeaderCell.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport type { ReactNode } from \"react\";\n\nimport { useColumnDataContext } from \"./ColumnDataContext\";\nimport type { GridColumnGroupModel } from \"./Grid\";\n\nimport groupHeaderCellCss from \"./GroupHeaderCell.css\";\n\nconst withBaseName = makePrefixer(\"saltGridGroupHeaderCell\");\n\nexport interface GroupHeaderCellProps {\n group: GridColumnGroupModel;\n children: ReactNode;\n}\n\nexport function GroupHeaderCell(props: GroupHeaderCellProps) {\n const { group } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-group-header-cell\",\n css: groupHeaderCellCss,\n window: targetWindow,\n });\n\n const { colSpan, columnSeparator, rowSeparator } = group;\n const { getColById } = useColumnDataContext();\n const firstChild = getColById(group.childrenIds[0]);\n\n return (\n <th\n className={withBaseName()}\n colSpan={colSpan}\n aria-colspan={colSpan}\n aria-colindex={(firstChild?.index ?? 0) + 1}\n data-testid=\"column-group-header\"\n data-group-index={group.index}\n role=\"columnheader\"\n >\n {props.children}\n <div\n className={clsx({\n [withBaseName(\"rowSeparator\")]: rowSeparator === \"regular\",\n [withBaseName(\"firstGroupRowSeparator\")]: rowSeparator === \"first\",\n [withBaseName(\"lastGroupRowSeparator\")]: rowSeparator === \"last\",\n })}\n />\n {columnSeparator === \"regular\" ? (\n <div className={withBaseName(\"columnSeparator\")} />\n ) : null}\n {columnSeparator === \"pinned\" ? (\n <div className={withBaseName(\"pinnedSeparator\")} />\n ) : null}\n </th>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","groupHeaderCellCss","useColumnDataContext","jsxs","jsx","clsx"],"mappings":";;;;;;;;;;AAWA,MAAM,YAAA,GAAeA,kBAAa,yBAAyB,CAAA;AAOpD,SAAS,gBAAgB,KAA6B,EAAA;AAC3D,EAAM,MAAA,EAAE,OAAU,GAAA,KAAA;AAElB,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,wBAAA;AAAA,IACR,GAAK,EAAAC,iBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,OAAA,EAAS,eAAiB,EAAA,YAAA,EAAiB,GAAA,KAAA;AACnD,EAAM,MAAA,EAAE,UAAW,EAAA,GAAIC,sCAAqB,EAAA;AAC5C,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,KAAM,CAAA,WAAA,CAAY,CAAC,CAAC,CAAA;AAElD,EACE,uBAAAC,eAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAW,YAAa,EAAA;AAAA,MACxB,OAAA;AAAA,MACA,cAAc,EAAA,OAAA;AAAA,MACd,eAAA,EAAA,CAAA,CAAgB,UAAY,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAA,KAAA,KAAS,CAAK,IAAA,CAAA;AAAA,MAC1C,aAAY,EAAA,qBAAA;AAAA,MACZ,oBAAkB,KAAM,CAAA,KAAA;AAAA,MACxB,IAAK,EAAA,cAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,QAAM,KAAA,CAAA,QAAA;AAAA,wBACPC,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAWC,SAAK,CAAA;AAAA,cACd,CAAC,YAAA,CAAa,cAAc,CAAC,GAAG,YAAiB,KAAA,SAAA;AAAA,cACjD,CAAC,YAAA,CAAa,wBAAwB,CAAC,GAAG,YAAiB,KAAA,OAAA;AAAA,cAC3D,CAAC,YAAA,CAAa,uBAAuB,CAAC,GAAG,YAAiB,KAAA;AAAA,aAC3D;AAAA;AAAA,SACH;AAAA,QACC,eAAA,KAAoB,4BAClBD,cAAA,CAAA,KAAA,EAAA,EAAI,WAAW,YAAa,CAAA,iBAAiB,GAAG,CAC/C,GAAA,IAAA;AAAA,QACH,eAAA,KAAoB,2BAClBA,cAAA,CAAA,KAAA,EAAA,EAAI,WAAW,YAAa,CAAA,iBAAiB,GAAG,CAC/C,GAAA;AAAA;AAAA;AAAA,GACN;AAEJ;;;;"}
1
+ {"version":3,"file":"GroupHeaderCell.js","sources":["../src/GroupHeaderCell.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport type { ReactNode } from \"react\";\n\nimport { useColumnDataContext } from \"./ColumnDataContext\";\nimport type { GridColumnGroupModel } from \"./Grid\";\n\nimport groupHeaderCellCss from \"./GroupHeaderCell.css\";\n\nconst withBaseName = makePrefixer(\"saltGridGroupHeaderCell\");\n\nexport interface GroupHeaderCellProps {\n group: GridColumnGroupModel;\n children: ReactNode;\n}\n\nexport function GroupHeaderCell(props: GroupHeaderCellProps) {\n const { group } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-group-header-cell\",\n css: groupHeaderCellCss,\n window: targetWindow,\n });\n\n const { colSpan, columnSeparator, rowSeparator } = group;\n const { getColById } = useColumnDataContext();\n const firstChild = getColById(group.childrenIds[0]);\n\n return (\n <th\n className={withBaseName()}\n colSpan={colSpan}\n aria-colspan={colSpan}\n aria-colindex={(firstChild?.index ?? 0) + 1}\n data-testid=\"column-group-header\"\n data-group-index={group.index}\n role=\"columnheader\"\n >\n {props.children}\n <div\n className={clsx({\n [withBaseName(\"rowSeparator\")]: rowSeparator === \"regular\",\n [withBaseName(\"firstGroupRowSeparator\")]: rowSeparator === \"first\",\n [withBaseName(\"lastGroupRowSeparator\")]: rowSeparator === \"last\",\n })}\n />\n {columnSeparator === \"regular\" ? (\n <div className={withBaseName(\"columnSeparator\")} />\n ) : null}\n {columnSeparator === \"pinned\" ? (\n <div className={withBaseName(\"pinnedSeparator\")} />\n ) : null}\n </th>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","groupHeaderCellCss","useColumnDataContext","jsxs","jsx","clsx"],"mappings":";;;;;;;;;;AAWA,MAAM,YAAA,GAAeA,kBAAa,yBAAyB,CAAA;AAOpD,SAAS,gBAAgB,KAAA,EAA6B;AAC3D,EAAA,MAAM,EAAE,OAAM,GAAI,KAAA;AAElB,EAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,wBAAA;AAAA,IACR,GAAA,EAAKC,iBAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,OAAA,EAAS,eAAA,EAAiB,YAAA,EAAa,GAAI,KAAA;AACnD,EAAA,MAAM,EAAE,UAAA,EAAW,GAAIC,sCAAA,EAAqB;AAC5C,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,KAAA,CAAM,WAAA,CAAY,CAAC,CAAC,CAAA;AAElD,EAAA,uBACEC,eAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAW,YAAA,EAAa;AAAA,MACxB,OAAA;AAAA,MACA,cAAA,EAAc,OAAA;AAAA,MACd,eAAA,EAAA,CAAA,CAAgB,UAAA,IAAA,IAAA,GAAA,MAAA,GAAA,UAAA,CAAY,KAAA,KAAS,CAAA,IAAK,CAAA;AAAA,MAC1C,aAAA,EAAY,qBAAA;AAAA,MACZ,oBAAkB,KAAA,CAAM,KAAA;AAAA,MACxB,IAAA,EAAK,cAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,QAAA,KAAA,CAAM,QAAA;AAAA,wBACPC,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAWC,SAAA,CAAK;AAAA,cACd,CAAC,YAAA,CAAa,cAAc,CAAC,GAAG,YAAA,KAAiB,SAAA;AAAA,cACjD,CAAC,YAAA,CAAa,wBAAwB,CAAC,GAAG,YAAA,KAAiB,OAAA;AAAA,cAC3D,CAAC,YAAA,CAAa,uBAAuB,CAAC,GAAG,YAAA,KAAiB;AAAA,aAC3D;AAAA;AAAA,SACH;AAAA,QACC,eAAA,KAAoB,4BACnBD,cAAA,CAAC,KAAA,EAAA,EAAI,WAAW,YAAA,CAAa,iBAAiB,GAAG,CAAA,GAC/C,IAAA;AAAA,QACH,eAAA,KAAoB,2BACnBA,cAAA,CAAC,KAAA,EAAA,EAAI,WAAW,YAAA,CAAa,iBAAiB,GAAG,CAAA,GAC/C;AAAA;AAAA;AAAA,GACN;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"GroupHeaderCellValue.js","sources":["../src/GroupHeaderCellValue.tsx"],"sourcesContent":["import type { ColumnGroupCellValueProps } from \"./ColumnGroup\";\n\nexport function GroupHeaderCellValue(props: ColumnGroupCellValueProps) {\n const { group } = props;\n const title = group.data.name;\n return <span>{title}</span>;\n}\n"],"names":["jsx"],"mappings":";;;;AAEO,SAAS,qBAAqB,KAAkC,EAAA;AACrE,EAAM,MAAA,EAAE,OAAU,GAAA,KAAA;AAClB,EAAM,MAAA,KAAA,GAAQ,MAAM,IAAK,CAAA,IAAA;AACzB,EAAO,uBAAAA,cAAA,CAAC,UAAM,QAAM,EAAA,KAAA,EAAA,CAAA;AACtB;;;;"}
1
+ {"version":3,"file":"GroupHeaderCellValue.js","sources":["../src/GroupHeaderCellValue.tsx"],"sourcesContent":["import type { ColumnGroupCellValueProps } from \"./ColumnGroup\";\n\nexport function GroupHeaderCellValue(props: ColumnGroupCellValueProps) {\n const { group } = props;\n const title = group.data.name;\n return <span>{title}</span>;\n}\n"],"names":["jsx"],"mappings":";;;;AAEO,SAAS,qBAAqB,KAAA,EAAkC;AACrE,EAAA,MAAM,EAAE,OAAM,GAAI,KAAA;AAClB,EAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,IAAA;AACzB,EAAA,uBAAOA,cAAA,CAAC,UAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AACtB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderCell.js","sources":["../src/HeaderCell.tsx"],"sourcesContent":["import {\n type FlexContentAlignment,\n makePrefixer,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { ArrowDownIcon, ArrowUpIcon } from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type KeyboardEventHandler, useRef } from \"react\";\n\nimport { useColumnDragContext } from \"./ColumnDragContext\";\nimport { useColumnSortContext } from \"./ColumnSortContext\";\nimport { type ColumnSeparatorType, SortOrder } from \"./Grid\";\nimport type { HeaderCellProps } from \"./GridColumn\";\nimport headerCellCss from \"./HeaderCell.css\";\nimport { Cursor, useFocusableContent } from \"./internal\";\nimport { useSizingContext } from \"./SizingContext\";\n\nconst withBaseName = makePrefixer(\"saltGridHeaderCell\");\n\nexport interface HeaderCellSeparatorProps {\n separatorType: ColumnSeparatorType;\n}\n\nexport function HeaderCellSeparator(props: HeaderCellSeparatorProps) {\n const className = withBaseName([props.separatorType, \"Separator\"].join(\"\"));\n return <div className={className} />;\n}\n\ninterface HeaderCellSortingIconProps {\n justify: FlexContentAlignment;\n sortOrder: SortOrder;\n}\n\nconst HeaderCellSortingIcon = ({\n justify,\n sortOrder,\n}: HeaderCellSortingIconProps) => {\n const className = withBaseName(\"sortingIcon\");\n return (\n <div\n className={clsx(className, {\n [withBaseName(\"sortingIconStart\")]: justify === \"start\",\n [withBaseName(\"sortingIconEnd\")]: justify === \"end\",\n })}\n aria-hidden\n >\n {sortOrder === SortOrder.ASC && <ArrowUpIcon />}\n {sortOrder === SortOrder.DESC && <ArrowDownIcon />}\n </div>\n );\n};\n\ntype AriaSortProps = \"none\" | \"ascending\" | \"descending\";\n\nexport function HeaderCell<T>(props: HeaderCellProps<T>) {\n const { column, children, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-header-cell\",\n css: headerCellCss,\n window: targetWindow,\n });\n\n const { separator } = column;\n const { align, id, headerClassName, sortable, onSortOrderChange } =\n column.info.props;\n const { onResizeHandleMouseDown } = useSizingContext();\n\n const { columnMove, onColumnMoveHandleMouseDown } = useColumnDragContext();\n const onMouseDown = columnMove ? onColumnMoveHandleMouseDown : undefined;\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableHeaderCellElement>();\n\n const {\n onClickSortColumn,\n setSortByColumnId,\n sortOrder,\n sortByColumnId,\n setSortOrder,\n } = useColumnSortContext();\n\n const valueAlignRight = align === \"right\";\n\n const ariaSortMap = {\n asc: \"ascending\",\n desc: \"descending\",\n none: \"none\",\n };\n\n const ariaSort = ariaSortMap[sortOrder] as AriaSortProps;\n\n const order =\n sortOrder === SortOrder.ASC\n ? SortOrder.DESC\n : sortOrder === SortOrder.DESC\n ? SortOrder.NONE\n : SortOrder.ASC;\n\n const withSortOrder = sortOrder !== SortOrder.NONE && sortByColumnId === id;\n\n const onClick = () => {\n if (onSortOrderChange) {\n setSortByColumnId(id);\n setSortOrder(order);\n onSortOrderChange({ sortOrder: order });\n return;\n }\n setSortByColumnId(id);\n onClickSortColumn(id);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLTableHeaderCellElement> = (\n event,\n ) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n onClick();\n }\n };\n\n return (\n <th\n ref={ref}\n aria-colindex={column.index + 1}\n data-column-index={column.index}\n className={clsx(withBaseName(), headerClassName, {\n [withBaseName(\"sortable\")]: sortable,\n })}\n role=\"columnheader\"\n data-testid=\"column-header\"\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n onClick={sortable ? onClick : undefined}\n onKeyDown={sortable ? onKeyDown : undefined}\n aria-sort={sortByColumnId === id && sortable ? ariaSort : undefined}\n aria-label={column.info.props[\"aria-label\"]}\n >\n {sortByColumnId === id && sortable && valueAlignRight && (\n <HeaderCellSortingIcon justify=\"start\" sortOrder={sortOrder} />\n )}\n <div\n className={clsx(withBaseName(\"valueContainer\"), {\n [withBaseName(\"alignRight\")]: valueAlignRight,\n // both classNames below needed to ensure header cell title & sort icon do not overlap when column resized to be smaller\n [withBaseName(\"alignRightWithSortOrder\")]:\n valueAlignRight && withSortOrder,\n [withBaseName(\"alignLeftWithSortOrder\")]:\n !valueAlignRight && withSortOrder,\n })}\n onMouseDown={onMouseDown}\n >\n {children}\n </div>\n {sortByColumnId === id && sortable && !valueAlignRight && (\n <HeaderCellSortingIcon justify=\"end\" sortOrder={sortOrder} />\n )}\n <HeaderCellSeparator separatorType={separator} />\n <div\n data-testid={`column-${column.index}-resize-handle`}\n className={withBaseName(\"resizeHandle\")}\n onMouseDown={onResizeHandleMouseDown}\n />\n {isFocused && !isFocusableContent && <Cursor />}\n </th>\n );\n}\n\nexport function AutoSizeHeaderCell<T>(props: HeaderCellProps<T>) {\n const { column, children, isFocused } = props;\n const { separator } = column;\n const valueContainerRef = useRef<HTMLDivElement>(null);\n const { resizeColumn } = useSizingContext();\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableHeaderCellElement>();\n\n useIsomorphicLayoutEffect(() => {\n const width = valueContainerRef.current\n ? valueContainerRef.current.offsetWidth\n : undefined;\n if (width !== undefined && width !== column.info.width) {\n resizeColumn(column.index, width);\n }\n });\n\n return (\n <th\n ref={ref}\n aria-colindex={column.index + 1}\n data-column-index={column.index}\n className={withBaseName()}\n role=\"columnheader\"\n data-testid=\"column-header\"\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n >\n <div className={withBaseName(\"autosizeContainer\")}>\n <div\n ref={valueContainerRef}\n className={withBaseName(\"measuredContent\")}\n >\n {children}\n </div>\n </div>\n <HeaderCellSeparator separatorType={separator} />\n {isFocused && !isFocusableContent && <Cursor />}\n </th>\n );\n}\n"],"names":["makePrefixer","jsx","jsxs","clsx","SortOrder","ArrowUpIcon","ArrowDownIcon","useWindow","useComponentCssInjection","headerCellCss","useSizingContext","useColumnDragContext","useFocusableContent","useColumnSortContext","Cursor","useRef","useIsomorphicLayoutEffect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,MAAM,YAAA,GAAeA,kBAAa,oBAAoB,CAAA;AAM/C,SAAS,oBAAoB,KAAiC,EAAA;AACnE,EAAM,MAAA,SAAA,GAAY,aAAa,CAAC,KAAA,CAAM,eAAe,WAAW,CAAA,CAAE,IAAK,CAAA,EAAE,CAAC,CAAA;AAC1E,EAAO,uBAAAC,cAAA,CAAC,SAAI,SAAsB,EAAA,CAAA;AACpC;AAOA,MAAM,wBAAwB,CAAC;AAAA,EAC7B,OAAA;AAAA,EACA;AACF,CAAkC,KAAA;AAChC,EAAM,MAAA,SAAA,GAAY,aAAa,aAAa,CAAA;AAC5C,EACE,uBAAAC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,UAAK,SAAW,EAAA;AAAA,QACzB,CAAC,YAAA,CAAa,kBAAkB,CAAC,GAAG,OAAY,KAAA,OAAA;AAAA,QAChD,CAAC,YAAA,CAAa,gBAAgB,CAAC,GAAG,OAAY,KAAA;AAAA,OAC/C,CAAA;AAAA,MACD,aAAW,EAAA,IAAA;AAAA,MAEV,QAAA,EAAA;AAAA,QAAc,SAAA,KAAAC,cAAA,CAAU,GAAO,oBAAAH,cAAA,CAACI,iBAAY,EAAA,EAAA,CAAA;AAAA,QAC5C,SAAc,KAAAD,cAAA,CAAU,IAAQ,oBAAAH,cAAA,CAACK,mBAAc,EAAA,EAAA;AAAA;AAAA;AAAA,GAClD;AAEJ,CAAA;AAIO,SAAS,WAAc,KAA2B,EAAA;AACvD,EAAA,MAAM,EAAE,MAAA,EAAQ,QAAU,EAAA,SAAA,EAAc,GAAA,KAAA;AAExC,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,kBAAA;AAAA,IACR,GAAK,EAAAC,YAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,EAAE,WAAc,GAAA,MAAA;AACtB,EAAM,MAAA,EAAE,OAAO,EAAI,EAAA,eAAA,EAAiB,UAAU,iBAAkB,EAAA,GAC9D,OAAO,IAAK,CAAA,KAAA;AACd,EAAM,MAAA,EAAE,uBAAwB,EAAA,GAAIC,8BAAiB,EAAA;AAErD,EAAA,MAAM,EAAE,UAAA,EAAY,2BAA4B,EAAA,GAAIC,sCAAqB,EAAA;AACzE,EAAM,MAAA,WAAA,GAAc,aAAa,2BAA8B,GAAA,MAAA;AAE/D,EAAA,MAAM,EAAE,GAAA,EAAK,kBAAoB,EAAA,OAAA,KAC/BC,6BAAgD,EAAA;AAElD,EAAM,MAAA;AAAA,IACJ,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,MACEC,sCAAqB,EAAA;AAEzB,EAAA,MAAM,kBAAkB,KAAU,KAAA,OAAA;AAElC,EAAA,MAAM,WAAc,GAAA;AAAA,IAClB,GAAK,EAAA,WAAA;AAAA,IACL,IAAM,EAAA,YAAA;AAAA,IACN,IAAM,EAAA;AAAA,GACR;AAEA,EAAM,MAAA,QAAA,GAAW,YAAY,SAAS,CAAA;AAEtC,EAAM,MAAA,KAAA,GACJ,SAAc,KAAAT,cAAA,CAAU,GACpB,GAAAA,cAAA,CAAU,IACV,GAAA,SAAA,KAAcA,cAAU,CAAA,IAAA,GACtBA,cAAU,CAAA,IAAA,GACVA,cAAU,CAAA,GAAA;AAElB,EAAA,MAAM,aAAgB,GAAA,SAAA,KAAcA,cAAU,CAAA,IAAA,IAAQ,cAAmB,KAAA,EAAA;AAEzE,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,IAAI,iBAAmB,EAAA;AACrB,MAAA,iBAAA,CAAkB,EAAE,CAAA;AACpB,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAkB,iBAAA,CAAA,EAAE,SAAW,EAAA,KAAA,EAAO,CAAA;AACtC,MAAA;AAAA;AAEF,IAAA,iBAAA,CAAkB,EAAE,CAAA;AACpB,IAAA,iBAAA,CAAkB,EAAE,CAAA;AAAA,GACtB;AAEA,EAAM,MAAA,SAAA,GAA8D,CAClE,KACG,KAAA;AACH,IAAA,IAAI,KAAM,CAAA,GAAA,KAAQ,OAAW,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AAC9C,MAAQ,OAAA,EAAA;AAAA;AACV,GACF;AAEA,EACE,uBAAAF,eAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,eAAA,EAAe,OAAO,KAAQ,GAAA,CAAA;AAAA,MAC9B,qBAAmB,MAAO,CAAA,KAAA;AAAA,MAC1B,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,eAAiB,EAAA;AAAA,QAC/C,CAAC,YAAA,CAAa,UAAU,CAAC,GAAG;AAAA,OAC7B,CAAA;AAAA,MACD,IAAK,EAAA,cAAA;AAAA,MACL,aAAY,EAAA,eAAA;AAAA,MACZ,QAAU,EAAA,SAAA,IAAa,CAAC,kBAAA,GAAqB,CAAI,GAAA,EAAA;AAAA,MACjD,OAAA;AAAA,MACA,OAAA,EAAS,WAAW,OAAU,GAAA,MAAA;AAAA,MAC9B,SAAA,EAAW,WAAW,SAAY,GAAA,MAAA;AAAA,MAClC,WAAW,EAAA,cAAA,KAAmB,EAAM,IAAA,QAAA,GAAW,QAAW,GAAA,MAAA;AAAA,MAC1D,YAAY,EAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,YAAY,CAAA;AAAA,MAEzC,QAAA,EAAA;AAAA,QAAA,cAAA,KAAmB,MAAM,QAAY,IAAA,eAAA,mCACnC,qBAAsB,EAAA,EAAA,OAAA,EAAQ,SAAQ,SAAsB,EAAA,CAAA;AAAA,wBAE/DF,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAW,EAAAE,SAAA,CAAK,YAAa,CAAA,gBAAgB,CAAG,EAAA;AAAA,cAC9C,CAAC,YAAA,CAAa,YAAY,CAAC,GAAG,eAAA;AAAA;AAAA,cAE9B,CAAC,YAAA,CAAa,yBAAyB,CAAC,GACtC,eAAmB,IAAA,aAAA;AAAA,cACrB,CAAC,YAAa,CAAA,wBAAwB,CAAC,GACrC,CAAC,eAAmB,IAAA;AAAA,aACvB,CAAA;AAAA,YACD,WAAA;AAAA,YAEC;AAAA;AAAA,SACH;AAAA,QACC,cAAA,KAAmB,MAAM,QAAY,IAAA,CAAC,mCACpCF,cAAA,CAAA,qBAAA,EAAA,EAAsB,OAAQ,EAAA,KAAA,EAAM,SAAsB,EAAA,CAAA;AAAA,wBAE7DA,cAAA,CAAC,mBAAoB,EAAA,EAAA,aAAA,EAAe,SAAW,EAAA,CAAA;AAAA,wBAC/CA,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,aAAA,EAAa,CAAU,OAAA,EAAA,MAAA,CAAO,KAAK,CAAA,cAAA,CAAA;AAAA,YACnC,SAAA,EAAW,aAAa,cAAc,CAAA;AAAA,YACtC,WAAa,EAAA;AAAA;AAAA,SACf;AAAA,QACC,SAAa,IAAA,CAAC,kBAAsB,oBAAAA,cAAA,CAACa,aAAO,EAAA,EAAA;AAAA;AAAA;AAAA,GAC/C;AAEJ;AAEO,SAAS,mBAAsB,KAA2B,EAAA;AAC/D,EAAA,MAAM,EAAE,MAAA,EAAQ,QAAU,EAAA,SAAA,EAAc,GAAA,KAAA;AACxC,EAAM,MAAA,EAAE,WAAc,GAAA,MAAA;AACtB,EAAM,MAAA,iBAAA,GAAoBC,aAAuB,IAAI,CAAA;AACrD,EAAM,MAAA,EAAE,YAAa,EAAA,GAAIL,8BAAiB,EAAA;AAE1C,EAAA,MAAM,EAAE,GAAA,EAAK,kBAAoB,EAAA,OAAA,KAC/BE,6BAAgD,EAAA;AAElD,EAAAI,8BAAA,CAA0B,MAAM;AAC9B,IAAA,MAAM,KAAQ,GAAA,iBAAA,CAAkB,OAC5B,GAAA,iBAAA,CAAkB,QAAQ,WAC1B,GAAA,MAAA;AACJ,IAAA,IAAI,KAAU,KAAA,MAAA,IAAa,KAAU,KAAA,MAAA,CAAO,KAAK,KAAO,EAAA;AACtD,MAAa,YAAA,CAAA,MAAA,CAAO,OAAO,KAAK,CAAA;AAAA;AAClC,GACD,CAAA;AAED,EACE,uBAAAd,eAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,eAAA,EAAe,OAAO,KAAQ,GAAA,CAAA;AAAA,MAC9B,qBAAmB,MAAO,CAAA,KAAA;AAAA,MAC1B,WAAW,YAAa,EAAA;AAAA,MACxB,IAAK,EAAA,cAAA;AAAA,MACL,aAAY,EAAA,eAAA;AAAA,MACZ,QAAU,EAAA,SAAA,IAAa,CAAC,kBAAA,GAAqB,CAAI,GAAA,EAAA;AAAA,MACjD,OAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAD,cAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAW,YAAa,CAAA,mBAAmB,CAC9C,EAAA,QAAA,kBAAAA,cAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAK,EAAA,iBAAA;AAAA,YACL,SAAA,EAAW,aAAa,iBAAiB,CAAA;AAAA,YAExC;AAAA;AAAA,SAEL,EAAA,CAAA;AAAA,wBACAA,cAAA,CAAC,mBAAoB,EAAA,EAAA,aAAA,EAAe,SAAW,EAAA,CAAA;AAAA,QAC9C,SAAa,IAAA,CAAC,kBAAsB,oBAAAA,cAAA,CAACa,aAAO,EAAA,EAAA;AAAA;AAAA;AAAA,GAC/C;AAEJ;;;;;;"}
1
+ {"version":3,"file":"HeaderCell.js","sources":["../src/HeaderCell.tsx"],"sourcesContent":["import {\n type FlexContentAlignment,\n makePrefixer,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { ArrowDownIcon, ArrowUpIcon } from \"@salt-ds/icons\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { type KeyboardEventHandler, useRef } from \"react\";\n\nimport { useColumnDragContext } from \"./ColumnDragContext\";\nimport { useColumnSortContext } from \"./ColumnSortContext\";\nimport { type ColumnSeparatorType, SortOrder } from \"./Grid\";\nimport type { HeaderCellProps } from \"./GridColumn\";\nimport headerCellCss from \"./HeaderCell.css\";\nimport { Cursor, useFocusableContent } from \"./internal\";\nimport { useSizingContext } from \"./SizingContext\";\n\nconst withBaseName = makePrefixer(\"saltGridHeaderCell\");\n\nexport interface HeaderCellSeparatorProps {\n separatorType: ColumnSeparatorType;\n}\n\nexport function HeaderCellSeparator(props: HeaderCellSeparatorProps) {\n const className = withBaseName([props.separatorType, \"Separator\"].join(\"\"));\n return <div className={className} />;\n}\n\ninterface HeaderCellSortingIconProps {\n justify: FlexContentAlignment;\n sortOrder: SortOrder;\n}\n\nconst HeaderCellSortingIcon = ({\n justify,\n sortOrder,\n}: HeaderCellSortingIconProps) => {\n const className = withBaseName(\"sortingIcon\");\n return (\n <div\n className={clsx(className, {\n [withBaseName(\"sortingIconStart\")]: justify === \"start\",\n [withBaseName(\"sortingIconEnd\")]: justify === \"end\",\n })}\n aria-hidden\n >\n {sortOrder === SortOrder.ASC && <ArrowUpIcon />}\n {sortOrder === SortOrder.DESC && <ArrowDownIcon />}\n </div>\n );\n};\n\ntype AriaSortProps = \"none\" | \"ascending\" | \"descending\";\n\nexport function HeaderCell<T>(props: HeaderCellProps<T>) {\n const { column, children, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-header-cell\",\n css: headerCellCss,\n window: targetWindow,\n });\n\n const { separator } = column;\n const { align, id, headerClassName, sortable, onSortOrderChange } =\n column.info.props;\n const { onResizeHandleMouseDown } = useSizingContext();\n\n const { columnMove, onColumnMoveHandleMouseDown } = useColumnDragContext();\n const onMouseDown = columnMove ? onColumnMoveHandleMouseDown : undefined;\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableHeaderCellElement>();\n\n const {\n onClickSortColumn,\n setSortByColumnId,\n sortOrder,\n sortByColumnId,\n setSortOrder,\n } = useColumnSortContext();\n\n const valueAlignRight = align === \"right\";\n\n const ariaSortMap = {\n asc: \"ascending\",\n desc: \"descending\",\n none: \"none\",\n };\n\n const ariaSort = ariaSortMap[sortOrder] as AriaSortProps;\n\n const order =\n sortOrder === SortOrder.ASC\n ? SortOrder.DESC\n : sortOrder === SortOrder.DESC\n ? SortOrder.NONE\n : SortOrder.ASC;\n\n const withSortOrder = sortOrder !== SortOrder.NONE && sortByColumnId === id;\n\n const onClick = () => {\n if (onSortOrderChange) {\n setSortByColumnId(id);\n setSortOrder(order);\n onSortOrderChange({ sortOrder: order });\n return;\n }\n setSortByColumnId(id);\n onClickSortColumn(id);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLTableHeaderCellElement> = (\n event,\n ) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n onClick();\n }\n };\n\n return (\n <th\n ref={ref}\n aria-colindex={column.index + 1}\n data-column-index={column.index}\n className={clsx(withBaseName(), headerClassName, {\n [withBaseName(\"sortable\")]: sortable,\n })}\n role=\"columnheader\"\n data-testid=\"column-header\"\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n onClick={sortable ? onClick : undefined}\n onKeyDown={sortable ? onKeyDown : undefined}\n aria-sort={sortByColumnId === id && sortable ? ariaSort : undefined}\n aria-label={column.info.props[\"aria-label\"]}\n >\n {sortByColumnId === id && sortable && valueAlignRight && (\n <HeaderCellSortingIcon justify=\"start\" sortOrder={sortOrder} />\n )}\n <div\n className={clsx(withBaseName(\"valueContainer\"), {\n [withBaseName(\"alignRight\")]: valueAlignRight,\n // both classNames below needed to ensure header cell title & sort icon do not overlap when column resized to be smaller\n [withBaseName(\"alignRightWithSortOrder\")]:\n valueAlignRight && withSortOrder,\n [withBaseName(\"alignLeftWithSortOrder\")]:\n !valueAlignRight && withSortOrder,\n })}\n onMouseDown={onMouseDown}\n >\n {children}\n </div>\n {sortByColumnId === id && sortable && !valueAlignRight && (\n <HeaderCellSortingIcon justify=\"end\" sortOrder={sortOrder} />\n )}\n <HeaderCellSeparator separatorType={separator} />\n <div\n data-testid={`column-${column.index}-resize-handle`}\n className={withBaseName(\"resizeHandle\")}\n onMouseDown={onResizeHandleMouseDown}\n />\n {isFocused && !isFocusableContent && <Cursor />}\n </th>\n );\n}\n\nexport function AutoSizeHeaderCell<T>(props: HeaderCellProps<T>) {\n const { column, children, isFocused } = props;\n const { separator } = column;\n const valueContainerRef = useRef<HTMLDivElement>(null);\n const { resizeColumn } = useSizingContext();\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableHeaderCellElement>();\n\n useIsomorphicLayoutEffect(() => {\n const width = valueContainerRef.current\n ? valueContainerRef.current.offsetWidth\n : undefined;\n if (width !== undefined && width !== column.info.width) {\n resizeColumn(column.index, width);\n }\n });\n\n return (\n <th\n ref={ref}\n aria-colindex={column.index + 1}\n data-column-index={column.index}\n className={withBaseName()}\n role=\"columnheader\"\n data-testid=\"column-header\"\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n >\n <div className={withBaseName(\"autosizeContainer\")}>\n <div\n ref={valueContainerRef}\n className={withBaseName(\"measuredContent\")}\n >\n {children}\n </div>\n </div>\n <HeaderCellSeparator separatorType={separator} />\n {isFocused && !isFocusableContent && <Cursor />}\n </th>\n );\n}\n"],"names":["makePrefixer","jsx","jsxs","clsx","SortOrder","ArrowUpIcon","ArrowDownIcon","useWindow","useComponentCssInjection","headerCellCss","useSizingContext","useColumnDragContext","useFocusableContent","useColumnSortContext","Cursor","useRef","useIsomorphicLayoutEffect"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderCellValue.js","sources":["../src/HeaderCellValue.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport type { GridHeaderValueProps } from \"./GridColumn\";\n\nconst withBaseName = makePrefixer(\"saltGridHeaderCell\");\n\nexport function HeaderCellValue<T>(props: GridHeaderValueProps<T>) {\n const { column } = props;\n const title = column.info.props.name;\n return <span className={withBaseName(\"text\")}>{title}</span>;\n}\n"],"names":["makePrefixer"],"mappings":";;;;;AAGA,MAAM,YAAA,GAAeA,kBAAa,oBAAoB,CAAA;AAE/C,SAAS,gBAAmB,KAAgC,EAAA;AACjE,EAAM,MAAA,EAAE,QAAW,GAAA,KAAA;AACnB,EAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,IAAA,CAAK,KAAM,CAAA,IAAA;AAChC,EAAA,sCAAQ,MAAK,EAAA,EAAA,SAAA,EAAW,YAAa,CAAA,MAAM,GAAI,QAAM,EAAA,KAAA,EAAA,CAAA;AACvD;;;;"}
1
+ {"version":3,"file":"HeaderCellValue.js","sources":["../src/HeaderCellValue.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport type { GridHeaderValueProps } from \"./GridColumn\";\n\nconst withBaseName = makePrefixer(\"saltGridHeaderCell\");\n\nexport function HeaderCellValue<T>(props: GridHeaderValueProps<T>) {\n const { column } = props;\n const title = column.info.props.name;\n return <span className={withBaseName(\"text\")}>{title}</span>;\n}\n"],"names":["makePrefixer"],"mappings":";;;;;AAGA,MAAM,YAAA,GAAeA,kBAAa,oBAAoB,CAAA;AAE/C,SAAS,gBAAmB,KAAA,EAAgC;AACjE,EAAA,MAAM,EAAE,QAAO,GAAI,KAAA;AACnB,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,IAAA;AAChC,EAAA,sCAAQ,MAAA,EAAA,EAAK,SAAA,EAAW,YAAA,CAAa,MAAM,GAAI,QAAA,EAAA,KAAA,EAAM,CAAA;AACvD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"LayoutContext.js","sources":["../src/LayoutContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport interface LayoutContext {\n totalWidth: number;\n totalHeight: number;\n clientWidth: number;\n clientHeight: number;\n}\n\nexport const LayoutContext = createContext<LayoutContext | undefined>(\n undefined,\n);\n\nexport const useLayoutContext = () => {\n const c = useContext(LayoutContext);\n if (!c) {\n throw new Error(\"useLayoutContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext"],"mappings":";;;;AASO,MAAM,aAAgB,GAAAA,mBAAA;AAAA,EAC3B;AACF;;;;"}
1
+ {"version":3,"file":"LayoutContext.js","sources":["../src/LayoutContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport interface LayoutContext {\n totalWidth: number;\n totalHeight: number;\n clientWidth: number;\n clientHeight: number;\n}\n\nexport const LayoutContext = createContext<LayoutContext | undefined>(\n undefined,\n);\n\nexport const useLayoutContext = () => {\n const c = useContext(LayoutContext);\n if (!c) {\n throw new Error(\"useLayoutContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext"],"mappings":";;;;AASO,MAAM,aAAA,GAAgBA,mBAAA;AAAA,EAC3B;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"NumberRange.js","sources":["../src/NumberRange.ts"],"sourcesContent":["export function range(\n ...args: [number] | [number, number] | [number, number, number]\n): number[] {\n let start = 0;\n let end = 0;\n let step = 1;\n if (args.length < 2) {\n end = args[0];\n } else {\n start = args[0];\n end = args[1]!;\n if (args.length > 2) {\n step = args[2]!;\n }\n }\n return [...Array(end - start).keys()].map((i) => start + i * step);\n}\n\nexport class NumberRange {\n public readonly start: number;\n\n public readonly end: number;\n\n public constructor(start: number, end: number) {\n if (end < start) {\n throw new Error(`Invalid start and end: [${start}, ${end}]`);\n }\n this.start = start;\n this.end = end;\n }\n\n public get length(): number {\n return this.end - this.start;\n }\n\n public map<T>(fn: (i: number) => T): T[] {\n return range(this.start, this.end).map(fn);\n }\n\n public forEach(fn: (i: number) => void): void {\n range(this.start, this.end).forEach(fn);\n }\n\n public *[Symbol.iterator]() {\n for (let i = this.start; i < this.end; ++i) {\n yield i;\n }\n }\n\n public static equals(a: NumberRange | undefined, b: NumberRange | undefined) {\n if (!a) {\n return !b;\n }\n return !b ? false : a.start === b.start && a.end === b.end;\n }\n\n public update(start: number, end: number) {\n return this.end !== end || this.start !== start\n ? new NumberRange(start, end)\n : this;\n }\n\n public static empty: NumberRange = new NumberRange(0, 0);\n\n public toString() {\n return `[${this.start}, ${this.end}]`;\n }\n\n public contains(n: number) {\n return this.start <= n && n < this.end;\n }\n}\n"],"names":[],"mappings":";;AAAO,SAAS,SACX,IACO,EAAA;AACV,EAAA,IAAI,KAAQ,GAAA,CAAA;AACZ,EAAA,IAAI,GAAM,GAAA,CAAA;AACV,EAAA,IAAI,IAAO,GAAA,CAAA;AACX,EAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,IAAA,GAAA,GAAM,KAAK,CAAC,CAAA;AAAA,GACP,MAAA;AACL,IAAA,KAAA,GAAQ,KAAK,CAAC,CAAA;AACd,IAAA,GAAA,GAAM,KAAK,CAAC,CAAA;AACZ,IAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,MAAA,IAAA,GAAO,KAAK,CAAC,CAAA;AAAA;AACf;AAEF,EAAA,OAAO,CAAC,GAAG,KAAM,CAAA,GAAA,GAAM,KAAK,CAAE,CAAA,IAAA,EAAM,CAAA,CAAE,GAAI,CAAA,CAAC,CAAM,KAAA,KAAA,GAAQ,IAAI,IAAI,CAAA;AACnE;AAEO,MAAM,YAAA,GAAN,MAAM,YAAY,CAAA;AAAA,EAKhB,WAAA,CAAY,OAAe,GAAa,EAAA;AAC7C,IAAA,IAAI,MAAM,KAAO,EAAA;AACf,MAAA,MAAM,IAAI,KAAM,CAAA,CAAA,wBAAA,EAA2B,KAAK,CAAA,EAAA,EAAK,GAAG,CAAG,CAAA,CAAA,CAAA;AAAA;AAE7D,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AACb,IAAA,IAAA,CAAK,GAAM,GAAA,GAAA;AAAA;AACb,EAEA,IAAW,MAAiB,GAAA;AAC1B,IAAO,OAAA,IAAA,CAAK,MAAM,IAAK,CAAA,KAAA;AAAA;AACzB,EAEO,IAAO,EAA2B,EAAA;AACvC,IAAA,OAAO,MAAM,IAAK,CAAA,KAAA,EAAO,KAAK,GAAG,CAAA,CAAE,IAAI,EAAE,CAAA;AAAA;AAC3C,EAEO,QAAQ,EAA+B,EAAA;AAC5C,IAAA,KAAA,CAAM,KAAK,KAAO,EAAA,IAAA,CAAK,GAAG,CAAA,CAAE,QAAQ,EAAE,CAAA;AAAA;AACxC,EAEA,EAAS,MAAO,CAAA,QAAQ,CAAI,GAAA;AAC1B,IAAA,KAAA,IAAS,IAAI,IAAK,CAAA,KAAA,EAAO,IAAI,IAAK,CAAA,GAAA,EAAK,EAAE,CAAG,EAAA;AAC1C,MAAM,MAAA,CAAA;AAAA;AACR;AACF,EAEA,OAAc,MAAO,CAAA,CAAA,EAA4B,CAA4B,EAAA;AAC3E,IAAA,IAAI,CAAC,CAAG,EAAA;AACN,MAAA,OAAO,CAAC,CAAA;AAAA;AAEV,IAAO,OAAA,CAAC,IAAI,KAAQ,GAAA,CAAA,CAAE,UAAU,CAAE,CAAA,KAAA,IAAS,CAAE,CAAA,GAAA,KAAQ,CAAE,CAAA,GAAA;AAAA;AACzD,EAEO,MAAA,CAAO,OAAe,GAAa,EAAA;AACxC,IAAO,OAAA,IAAA,CAAK,GAAQ,KAAA,GAAA,IAAO,IAAK,CAAA,KAAA,KAAU,QACtC,IAAI,YAAA,CAAY,KAAO,EAAA,GAAG,CAC1B,GAAA,IAAA;AAAA;AACN,EAIO,QAAW,GAAA;AAChB,IAAA,OAAO,CAAI,CAAA,EAAA,IAAA,CAAK,KAAK,CAAA,EAAA,EAAK,KAAK,GAAG,CAAA,CAAA,CAAA;AAAA;AACpC,EAEO,SAAS,CAAW,EAAA;AACzB,IAAA,OAAO,IAAK,CAAA,KAAA,IAAS,CAAK,IAAA,CAAA,GAAI,IAAK,CAAA,GAAA;AAAA;AAEvC,CAAA;AArDa,YAAA,CA4CG,KAAqB,GAAA,IAAI,YAAY,CAAA,CAAA,EAAG,CAAC,CAAA;AA5ClD,IAAM,WAAN,GAAA;;;;;"}
1
+ {"version":3,"file":"NumberRange.js","sources":["../src/NumberRange.ts"],"sourcesContent":["export function range(\n ...args: [number] | [number, number] | [number, number, number]\n): number[] {\n let start = 0;\n let end = 0;\n let step = 1;\n if (args.length < 2) {\n end = args[0];\n } else {\n start = args[0];\n end = args[1]!;\n if (args.length > 2) {\n step = args[2]!;\n }\n }\n return [...Array(end - start).keys()].map((i) => start + i * step);\n}\n\nexport class NumberRange {\n public readonly start: number;\n\n public readonly end: number;\n\n public constructor(start: number, end: number) {\n if (end < start) {\n throw new Error(`Invalid start and end: [${start}, ${end}]`);\n }\n this.start = start;\n this.end = end;\n }\n\n public get length(): number {\n return this.end - this.start;\n }\n\n public map<T>(fn: (i: number) => T): T[] {\n return range(this.start, this.end).map(fn);\n }\n\n public forEach(fn: (i: number) => void): void {\n range(this.start, this.end).forEach(fn);\n }\n\n public *[Symbol.iterator]() {\n for (let i = this.start; i < this.end; ++i) {\n yield i;\n }\n }\n\n public static equals(a: NumberRange | undefined, b: NumberRange | undefined) {\n if (!a) {\n return !b;\n }\n return !b ? false : a.start === b.start && a.end === b.end;\n }\n\n public update(start: number, end: number) {\n return this.end !== end || this.start !== start\n ? new NumberRange(start, end)\n : this;\n }\n\n public static empty: NumberRange = new NumberRange(0, 0);\n\n public toString() {\n return `[${this.start}, ${this.end}]`;\n }\n\n public contains(n: number) {\n return this.start <= n && n < this.end;\n }\n}\n"],"names":[],"mappings":";;AAAO,SAAS,SACX,IAAA,EACO;AACV,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,GAAA,GAAM,CAAA;AACV,EAAA,IAAI,IAAA,GAAO,CAAA;AACX,EAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,IAAA,GAAA,GAAM,KAAK,CAAC,CAAA;AAAA,EACd,CAAA,MAAO;AACL,IAAA,KAAA,GAAQ,KAAK,CAAC,CAAA;AACd,IAAA,GAAA,GAAM,KAAK,CAAC,CAAA;AACZ,IAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,MAAA,IAAA,GAAO,KAAK,CAAC,CAAA;AAAA,IACf;AAAA,EACF;AACA,EAAA,OAAO,CAAC,GAAG,KAAA,CAAM,GAAA,GAAM,KAAK,CAAA,CAAE,IAAA,EAAM,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,KAAA,GAAQ,IAAI,IAAI,CAAA;AACnE;AAEO,MAAM,YAAA,GAAN,MAAM,YAAA,CAAY;AAAA,EAKhB,WAAA,CAAY,OAAe,GAAA,EAAa;AAC7C,IAAA,IAAI,MAAM,KAAA,EAAO;AACf,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,KAAK,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,IAC7D;AACA,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,GAAA,GAAM,GAAA;AAAA,EACb;AAAA,EAEA,IAAW,MAAA,GAAiB;AAC1B,IAAA,OAAO,IAAA,CAAK,MAAM,IAAA,CAAK,KAAA;AAAA,EACzB;AAAA,EAEO,IAAO,EAAA,EAA2B;AACvC,IAAA,OAAO,MAAM,IAAA,CAAK,KAAA,EAAO,KAAK,GAAG,CAAA,CAAE,IAAI,EAAE,CAAA;AAAA,EAC3C;AAAA,EAEO,QAAQ,EAAA,EAA+B;AAC5C,IAAA,KAAA,CAAM,KAAK,KAAA,EAAO,IAAA,CAAK,GAAG,CAAA,CAAE,QAAQ,EAAE,CAAA;AAAA,EACxC;AAAA,EAEA,EAAS,MAAA,CAAO,QAAQ,CAAA,GAAI;AAC1B,IAAA,KAAA,IAAS,IAAI,IAAA,CAAK,KAAA,EAAO,IAAI,IAAA,CAAK,GAAA,EAAK,EAAE,CAAA,EAAG;AAC1C,MAAA,MAAM,CAAA;AAAA,IACR;AAAA,EACF;AAAA,EAEA,OAAc,MAAA,CAAO,CAAA,EAA4B,CAAA,EAA4B;AAC3E,IAAA,IAAI,CAAC,CAAA,EAAG;AACN,MAAA,OAAO,CAAC,CAAA;AAAA,IACV;AACA,IAAA,OAAO,CAAC,IAAI,KAAA,GAAQ,CAAA,CAAE,UAAU,CAAA,CAAE,KAAA,IAAS,CAAA,CAAE,GAAA,KAAQ,CAAA,CAAE,GAAA;AAAA,EACzD;AAAA,EAEO,MAAA,CAAO,OAAe,GAAA,EAAa;AACxC,IAAA,OAAO,IAAA,CAAK,GAAA,KAAQ,GAAA,IAAO,IAAA,CAAK,KAAA,KAAU,QACtC,IAAI,YAAA,CAAY,KAAA,EAAO,GAAG,CAAA,GAC1B,IAAA;AAAA,EACN;AAAA,EAIO,QAAA,GAAW;AAChB,IAAA,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,CAAA,EAAA,EAAK,KAAK,GAAG,CAAA,CAAA,CAAA;AAAA,EACpC;AAAA,EAEO,SAAS,CAAA,EAAW;AACzB,IAAA,OAAO,IAAA,CAAK,KAAA,IAAS,CAAA,IAAK,CAAA,GAAI,IAAA,CAAK,GAAA;AAAA,EACrC;AACF,CAAA;AArDa,YAAA,CA4CG,KAAA,GAAqB,IAAI,YAAA,CAAY,CAAA,EAAG,CAAC,CAAA;AA5ClD,IAAM,WAAA,GAAN;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"NumericColumn.js","sources":["../src/NumericColumn.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n type ChangeEventHandler,\n type KeyboardEventHandler,\n type ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport { useEditorContext } from \"./EditorContext\";\nimport type { GridColumnModel, GridRowModel } from \"./Grid\";\nimport {\n type GridCellValueProps,\n GridColumn,\n type GridColumnProps,\n} from \"./GridColumn\";\n\nimport numericColumnCss from \"./NumericColumn.css\";\n\nexport interface NumericColumnProps<T> extends GridColumnProps<T> {\n precision: number;\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nexport function NumericCellValue<T>(props: GridCellValueProps<T>) {\n const { column, value } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-numeric-column\",\n css: numericColumnCss,\n window: targetWindow,\n });\n\n const columnProps = column.info.props as NumericColumnProps<T>;\n const { precision } = columnProps;\n const text = isNumber(value) ? value.toFixed(precision) : \"\";\n return <div className=\"saltGridNumericCellValue\">{text}</div>;\n}\n\nexport interface NumericEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n children?: ReactNode;\n}\n\nexport function NumericCellEditor<T>(props: NumericEditorProps<T>) {\n const { column, row } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data),\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n useEffect(() => {\n const input = inputRef.current;\n const focusOut = (event: FocusEvent) => {\n if (!input?.contains(event.target as Node)) {\n endEditMode(editorText);\n }\n };\n\n // This uses the capture phase to detect clicks outside the input to avoid a race condition where the component gets unmounted when edit mode ends.\n document?.addEventListener(\"mousedown\", focusOut, true);\n\n return () => {\n document?.removeEventListener(\"mousedown\", focusOut, true);\n };\n }, [endEditMode, editorText]);\n\n return (\n <CellFrame\n separator={column?.separator}\n className=\"saltGridNumericCellEditor\"\n >\n <div className=\"saltGridNumericCellEditor-inputContainer\">\n <input\n ref={inputRef}\n data-testid=\"grid-cell-editor-input\"\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </CellFrame>\n );\n}\n\nexport function NumericColumn<T>(props: NumericColumnProps<T>) {\n return (\n <GridColumn\n {...props}\n align={\"right\"}\n cellValueComponent={NumericCellValue}\n >\n {props.children}\n </GridColumn>\n );\n}\n"],"names":["useWindow","useComponentCssInjection","numericColumnCss","jsx","useRef","useEditorContext","useState","useEffect","jsxs","CellFrame","CornerTag","GridColumn"],"mappings":"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"}
1
+ {"version":3,"file":"NumericColumn.js","sources":["../src/NumericColumn.tsx"],"sourcesContent":["import { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n type ChangeEventHandler,\n type KeyboardEventHandler,\n type ReactNode,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport { useEditorContext } from \"./EditorContext\";\nimport type { GridColumnModel, GridRowModel } from \"./Grid\";\nimport {\n type GridCellValueProps,\n GridColumn,\n type GridColumnProps,\n} from \"./GridColumn\";\n\nimport numericColumnCss from \"./NumericColumn.css\";\n\nexport interface NumericColumnProps<T> extends GridColumnProps<T> {\n precision: number;\n}\n\nfunction isNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nexport function NumericCellValue<T>(props: GridCellValueProps<T>) {\n const { column, value } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-numeric-column\",\n css: numericColumnCss,\n window: targetWindow,\n });\n\n const columnProps = column.info.props as NumericColumnProps<T>;\n const { precision } = columnProps;\n const text = isNumber(value) ? value.toFixed(precision) : \"\";\n return <div className=\"saltGridNumericCellValue\">{text}</div>;\n}\n\nexport interface NumericEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n children?: ReactNode;\n}\n\nexport function NumericCellEditor<T>(props: NumericEditorProps<T>) {\n const { column, row } = props;\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data),\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n useEffect(() => {\n const input = inputRef.current;\n const focusOut = (event: FocusEvent) => {\n if (!input?.contains(event.target as Node)) {\n endEditMode(editorText);\n }\n };\n\n // This uses the capture phase to detect clicks outside the input to avoid a race condition where the component gets unmounted when edit mode ends.\n document?.addEventListener(\"mousedown\", focusOut, true);\n\n return () => {\n document?.removeEventListener(\"mousedown\", focusOut, true);\n };\n }, [endEditMode, editorText]);\n\n return (\n <CellFrame\n separator={column?.separator}\n className=\"saltGridNumericCellEditor\"\n >\n <div className=\"saltGridNumericCellEditor-inputContainer\">\n <input\n ref={inputRef}\n data-testid=\"grid-cell-editor-input\"\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </CellFrame>\n );\n}\n\nexport function NumericColumn<T>(props: NumericColumnProps<T>) {\n return (\n <GridColumn\n {...props}\n align={\"right\"}\n cellValueComponent={NumericCellValue}\n >\n {props.children}\n </GridColumn>\n );\n}\n"],"names":["useWindow","useComponentCssInjection","numericColumnCss","jsx","useRef","useEditorContext","useState","useEffect","jsxs","CellFrame","CornerTag","GridColumn"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionCheckboxCellValue.js","sources":["../src/RowSelectionCheckboxCellValue.tsx"],"sourcesContent":["import { Checkbox } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport type { MouseEventHandler } from \"react\";\nimport checkboxCellCss from \"./CheckboxCell.css\";\nimport { useCursorContext } from \"./CursorContext\";\nimport type { GridCellValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nexport function RowSelectionCheckboxCellValue<T>(props: GridCellValueProps<T>) {\n const { row, column, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const { selRowIdxs, selectRows } = useSelectionContext();\n const { moveCursor } = useCursorContext();\n\n const isSelected = selRowIdxs.has(row.index);\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n selectRows({ rowIndex: row.index, incremental: true });\n moveCursor(\"body\", row.index, column.index);\n event.preventDefault();\n event.stopPropagation();\n };\n\n return (\n <div className=\"saltGridCheckboxContainer\" onMouseDown={onMouseDown}>\n <Checkbox\n data-testid=\"grid-row-selection-checkbox\"\n inputProps={{\n \"aria-label\": \"Select Row\",\n tabIndex: isFocused ? 0 : -1,\n }}\n checked={isSelected}\n />\n </div>\n );\n}\n"],"names":["useWindow","useComponentCssInjection","checkboxCellCss","useSelectionContext","useCursorContext","jsx","Checkbox"],"mappings":";;;;;;;;;;AAUO,SAAS,8BAAiC,KAA8B,EAAA;AAC7E,EAAA,MAAM,EAAE,GAAA,EAAK,MAAQ,EAAA,SAAA,EAAc,GAAA,KAAA;AAEnC,EAAA,MAAM,eAAeA,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAC,YAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,UAAA,EAAY,UAAW,EAAA,GAAIC,oCAAoB,EAAA;AACvD,EAAM,MAAA,EAAE,UAAW,EAAA,GAAIC,8BAAiB,EAAA;AAExC,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,GAAI,CAAA,GAAA,CAAI,KAAK,CAAA;AAE3C,EAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,IAAA,UAAA,CAAW,EAAE,QAAU,EAAA,GAAA,CAAI,KAAO,EAAA,WAAA,EAAa,MAAM,CAAA;AACrD,IAAA,UAAA,CAAW,MAAQ,EAAA,GAAA,CAAI,KAAO,EAAA,MAAA,CAAO,KAAK,CAAA;AAC1C,IAAA,KAAA,CAAM,cAAe,EAAA;AACrB,IAAA,KAAA,CAAM,eAAgB,EAAA;AAAA,GACxB;AAEA,EAAA,uBACGC,cAAA,CAAA,KAAA,EAAA,EAAI,SAAU,EAAA,2BAAA,EAA4B,WACzC,EAAA,QAAA,kBAAAA,cAAA;AAAA,IAACC,aAAA;AAAA,IAAA;AAAA,MACC,aAAY,EAAA,6BAAA;AAAA,MACZ,UAAY,EAAA;AAAA,QACV,YAAc,EAAA,YAAA;AAAA,QACd,QAAA,EAAU,YAAY,CAAI,GAAA;AAAA,OAC5B;AAAA,MACA,OAAS,EAAA;AAAA;AAAA,GAEb,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"RowSelectionCheckboxCellValue.js","sources":["../src/RowSelectionCheckboxCellValue.tsx"],"sourcesContent":["import { Checkbox } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport type { MouseEventHandler } from \"react\";\nimport checkboxCellCss from \"./CheckboxCell.css\";\nimport { useCursorContext } from \"./CursorContext\";\nimport type { GridCellValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nexport function RowSelectionCheckboxCellValue<T>(props: GridCellValueProps<T>) {\n const { row, column, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const { selRowIdxs, selectRows } = useSelectionContext();\n const { moveCursor } = useCursorContext();\n\n const isSelected = selRowIdxs.has(row.index);\n\n const onMouseDown: MouseEventHandler<HTMLDivElement> = (event) => {\n selectRows({ rowIndex: row.index, incremental: true });\n moveCursor(\"body\", row.index, column.index);\n event.preventDefault();\n event.stopPropagation();\n };\n\n return (\n <div className=\"saltGridCheckboxContainer\" onMouseDown={onMouseDown}>\n <Checkbox\n data-testid=\"grid-row-selection-checkbox\"\n inputProps={{\n \"aria-label\": \"Select Row\",\n tabIndex: isFocused ? 0 : -1,\n }}\n checked={isSelected}\n />\n </div>\n );\n}\n"],"names":["useWindow","useComponentCssInjection","checkboxCellCss","useSelectionContext","useCursorContext","jsx","Checkbox"],"mappings":";;;;;;;;;;AAUO,SAAS,8BAAiC,KAAA,EAA8B;AAC7E,EAAA,MAAM,EAAE,GAAA,EAAK,MAAA,EAAQ,SAAA,EAAU,GAAI,KAAA;AAEnC,EAAA,MAAM,eAAeA,gBAAA,EAAU;AAC/B,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,oBAAA;AAAA,IACR,GAAA,EAAKC,YAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,UAAA,EAAY,UAAA,EAAW,GAAIC,oCAAA,EAAoB;AACvD,EAAA,MAAM,EAAE,UAAA,EAAW,GAAIC,8BAAA,EAAiB;AAExC,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA;AAE3C,EAAA,MAAM,WAAA,GAAiD,CAAC,KAAA,KAAU;AAChE,IAAA,UAAA,CAAW,EAAE,QAAA,EAAU,GAAA,CAAI,KAAA,EAAO,WAAA,EAAa,MAAM,CAAA;AACrD,IAAA,UAAA,CAAW,MAAA,EAAQ,GAAA,CAAI,KAAA,EAAO,MAAA,CAAO,KAAK,CAAA;AAC1C,IAAA,KAAA,CAAM,cAAA,EAAe;AACrB,IAAA,KAAA,CAAM,eAAA,EAAgB;AAAA,EACxB,CAAA;AAEA,EAAA,uBACEC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EAA4B,WAAA,EACzC,QAAA,kBAAAA,cAAA;AAAA,IAACC,aAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAY,6BAAA;AAAA,MACZ,UAAA,EAAY;AAAA,QACV,YAAA,EAAc,YAAA;AAAA,QACd,QAAA,EAAU,YAAY,CAAA,GAAI;AAAA,OAC5B;AAAA,MACA,OAAA,EAAS;AAAA;AAAA,GACX,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionCheckboxColumn.js","sources":["../src/RowSelectionCheckboxColumn.tsx"],"sourcesContent":["import { type KeyboardEvent, useCallback } from \"react\";\nimport { GridColumn, type GridColumnProps } from \"./GridColumn\";\nimport { AutoSizeHeaderCell } from \"./HeaderCell\";\nimport { RowSelectionCheckboxCellValue } from \"./RowSelectionCheckboxCellValue\";\nimport { RowSelectionCheckboxHeaderCellValue } from \"./RowSelectionCheckboxHeaderCellValue\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nexport type RowSelectionCheckboxColumnProps<T> = Omit<\n GridColumnProps<T>,\n \"width\" | \"name\"\n>;\n\nexport function RowSelectionCheckboxColumn<T>(\n props: RowSelectionCheckboxColumnProps<T>,\n) {\n const { selectRows } = useSelectionContext();\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>, rowIndex: number) => {\n if (event.key === \" \") {\n selectRows({\n rowIndex,\n incremental: true,\n });\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [selectRows],\n );\n\n return (\n <GridColumn\n {...props}\n defaultWidth={100}\n headerComponent={AutoSizeHeaderCell}\n headerValueComponent={RowSelectionCheckboxHeaderCellValue}\n cellValueComponent={RowSelectionCheckboxCellValue}\n onKeyDown={onKeyDown}\n />\n );\n}\n"],"names":["useSelectionContext","useCallback","jsx","GridColumn","AutoSizeHeaderCell","RowSelectionCheckboxHeaderCellValue","RowSelectionCheckboxCellValue"],"mappings":";;;;;;;;;;AAYO,SAAS,2BACd,KACA,EAAA;AACA,EAAM,MAAA,EAAE,UAAW,EAAA,GAAIA,oCAAoB,EAAA;AAE3C,EAAA,MAAM,SAAY,GAAAC,iBAAA;AAAA,IAChB,CAAC,OAAsC,QAAqB,KAAA;AAC1D,MAAI,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AACrB,QAAW,UAAA,CAAA;AAAA,UACT,QAAA;AAAA,UACA,WAAa,EAAA;AAAA,SACd,CAAA;AACD,QAAA,KAAA,CAAM,cAAe,EAAA;AACrB,QAAA,KAAA,CAAM,eAAgB,EAAA;AAAA;AACxB,KACF;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EACE,uBAAAC,cAAA;AAAA,IAACC,qBAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,YAAc,EAAA,GAAA;AAAA,MACd,eAAiB,EAAAC,6BAAA;AAAA,MACjB,oBAAsB,EAAAC,uEAAA;AAAA,MACtB,kBAAoB,EAAAC,2DAAA;AAAA,MACpB;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"RowSelectionCheckboxColumn.js","sources":["../src/RowSelectionCheckboxColumn.tsx"],"sourcesContent":["import { type KeyboardEvent, useCallback } from \"react\";\nimport { GridColumn, type GridColumnProps } from \"./GridColumn\";\nimport { AutoSizeHeaderCell } from \"./HeaderCell\";\nimport { RowSelectionCheckboxCellValue } from \"./RowSelectionCheckboxCellValue\";\nimport { RowSelectionCheckboxHeaderCellValue } from \"./RowSelectionCheckboxHeaderCellValue\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nexport type RowSelectionCheckboxColumnProps<T> = Omit<\n GridColumnProps<T>,\n \"width\" | \"name\"\n>;\n\nexport function RowSelectionCheckboxColumn<T>(\n props: RowSelectionCheckboxColumnProps<T>,\n) {\n const { selectRows } = useSelectionContext();\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>, rowIndex: number) => {\n if (event.key === \" \") {\n selectRows({\n rowIndex,\n incremental: true,\n });\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [selectRows],\n );\n\n return (\n <GridColumn\n {...props}\n defaultWidth={100}\n headerComponent={AutoSizeHeaderCell}\n headerValueComponent={RowSelectionCheckboxHeaderCellValue}\n cellValueComponent={RowSelectionCheckboxCellValue}\n onKeyDown={onKeyDown}\n />\n );\n}\n"],"names":["useSelectionContext","useCallback","jsx","GridColumn","AutoSizeHeaderCell","RowSelectionCheckboxHeaderCellValue","RowSelectionCheckboxCellValue"],"mappings":";;;;;;;;;;AAYO,SAAS,2BACd,KAAA,EACA;AACA,EAAA,MAAM,EAAE,UAAA,EAAW,GAAIA,oCAAA,EAAoB;AAE3C,EAAA,MAAM,SAAA,GAAYC,iBAAA;AAAA,IAChB,CAAC,OAAsC,QAAA,KAAqB;AAC1D,MAAA,IAAI,KAAA,CAAM,QAAQ,GAAA,EAAK;AACrB,QAAA,UAAA,CAAW;AAAA,UACT,QAAA;AAAA,UACA,WAAA,EAAa;AAAA,SACd,CAAA;AACD,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,KAAA,CAAM,eAAA,EAAgB;AAAA,MACxB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,uBACEC,cAAA;AAAA,IAACC,qBAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,YAAA,EAAc,GAAA;AAAA,MACd,eAAA,EAAiBC,6BAAA;AAAA,MACjB,oBAAA,EAAsBC,uEAAA;AAAA,MACtB,kBAAA,EAAoBC,2DAAA;AAAA,MACpB;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionCheckboxHeaderCellValue.js","sources":["../src/RowSelectionCheckboxHeaderCellValue.tsx"],"sourcesContent":["import { Checkbox } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport type { KeyboardEventHandler, MouseEventHandler } from \"react\";\nimport checkboxCellCss from \"./CheckboxCell.css\";\nimport type { GridHeaderValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nexport function RowSelectionCheckboxHeaderCellValue<T>(\n props: GridHeaderValueProps<T>,\n) {\n const { isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const { selectAll, unselectAll, isAllSelected, isAnySelected } =\n useSelectionContext();\n\n const onMousedown: MouseEventHandler<HTMLDivElement> = (event) => {\n if (isAllSelected) {\n unselectAll();\n } else {\n selectAll();\n }\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = (event) => {\n if (event.key === \" \") {\n if (isAllSelected) {\n unselectAll();\n } else {\n selectAll();\n }\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n return (\n <div\n onMouseDown={onMousedown}\n className=\"saltGridCheckboxContainer\"\n onKeyDown={onKeyDown}\n >\n <Checkbox\n data-testid=\"grid-row-select-all-checkbox\"\n inputProps={{\n \"aria-label\": \"Select All\",\n tabIndex: isFocused ? 0 : -1,\n }}\n checked={isAllSelected}\n indeterminate={!isAllSelected && isAnySelected}\n />\n </div>\n );\n}\n"],"names":["useWindow","useComponentCssInjection","checkboxCellCss","useSelectionContext","jsx","Checkbox"],"mappings":";;;;;;;;;AAQO,SAAS,oCACd,KACA,EAAA;AACA,EAAM,MAAA,EAAE,WAAc,GAAA,KAAA;AAEtB,EAAA,MAAM,eAAeA,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAC,YAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,SAAW,EAAA,WAAA,EAAa,aAAe,EAAA,aAAA,KAC7CC,oCAAoB,EAAA;AAEtB,EAAM,MAAA,WAAA,GAAiD,CAAC,KAAU,KAAA;AAChE,IAAA,IAAI,aAAe,EAAA;AACjB,MAAY,WAAA,EAAA;AAAA,KACP,MAAA;AACL,MAAU,SAAA,EAAA;AAAA;AACZ,GACF;AAEA,EAAM,MAAA,SAAA,GAAkD,CAAC,KAAU,KAAA;AACjE,IAAI,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AACrB,MAAA,IAAI,aAAe,EAAA;AACjB,QAAY,WAAA,EAAA;AAAA,OACP,MAAA;AACL,QAAU,SAAA,EAAA;AAAA;AAEZ,MAAA,KAAA,CAAM,cAAe,EAAA;AACrB,MAAA,KAAA,CAAM,eAAgB,EAAA;AAAA;AACxB,GACF;AAEA,EACE,uBAAAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAa,EAAA,WAAA;AAAA,MACb,SAAU,EAAA,2BAAA;AAAA,MACV,SAAA;AAAA,MAEA,QAAA,kBAAAA,cAAA;AAAA,QAACC,aAAA;AAAA,QAAA;AAAA,UACC,aAAY,EAAA,8BAAA;AAAA,UACZ,UAAY,EAAA;AAAA,YACV,YAAc,EAAA,YAAA;AAAA,YACd,QAAA,EAAU,YAAY,CAAI,GAAA;AAAA,WAC5B;AAAA,UACA,OAAS,EAAA,aAAA;AAAA,UACT,aAAA,EAAe,CAAC,aAAiB,IAAA;AAAA;AAAA;AACnC;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"RowSelectionCheckboxHeaderCellValue.js","sources":["../src/RowSelectionCheckboxHeaderCellValue.tsx"],"sourcesContent":["import { Checkbox } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport type { KeyboardEventHandler, MouseEventHandler } from \"react\";\nimport checkboxCellCss from \"./CheckboxCell.css\";\nimport type { GridHeaderValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nexport function RowSelectionCheckboxHeaderCellValue<T>(\n props: GridHeaderValueProps<T>,\n) {\n const { isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const { selectAll, unselectAll, isAllSelected, isAnySelected } =\n useSelectionContext();\n\n const onMousedown: MouseEventHandler<HTMLDivElement> = (event) => {\n if (isAllSelected) {\n unselectAll();\n } else {\n selectAll();\n }\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> = (event) => {\n if (event.key === \" \") {\n if (isAllSelected) {\n unselectAll();\n } else {\n selectAll();\n }\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n return (\n <div\n onMouseDown={onMousedown}\n className=\"saltGridCheckboxContainer\"\n onKeyDown={onKeyDown}\n >\n <Checkbox\n data-testid=\"grid-row-select-all-checkbox\"\n inputProps={{\n \"aria-label\": \"Select All\",\n tabIndex: isFocused ? 0 : -1,\n }}\n checked={isAllSelected}\n indeterminate={!isAllSelected && isAnySelected}\n />\n </div>\n );\n}\n"],"names":["useWindow","useComponentCssInjection","checkboxCellCss","useSelectionContext","jsx","Checkbox"],"mappings":";;;;;;;;;AAQO,SAAS,oCACd,KAAA,EACA;AACA,EAAA,MAAM,EAAE,WAAU,GAAI,KAAA;AAEtB,EAAA,MAAM,eAAeA,gBAAA,EAAU;AAC/B,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,oBAAA;AAAA,IACR,GAAA,EAAKC,YAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,SAAA,EAAW,WAAA,EAAa,aAAA,EAAe,aAAA,KAC7CC,oCAAA,EAAoB;AAEtB,EAAA,MAAM,WAAA,GAAiD,CAAC,KAAA,KAAU;AAChE,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,WAAA,EAAY;AAAA,IACd,CAAA,MAAO;AACL,MAAA,SAAA,EAAU;AAAA,IACZ;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,SAAA,GAAkD,CAAC,KAAA,KAAU;AACjE,IAAA,IAAI,KAAA,CAAM,QAAQ,GAAA,EAAK;AACrB,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,WAAA,EAAY;AAAA,MACd,CAAA,MAAO;AACL,QAAA,SAAA,EAAU;AAAA,MACZ;AACA,MAAA,KAAA,CAAM,cAAA,EAAe;AACrB,MAAA,KAAA,CAAM,eAAA,EAAgB;AAAA,IACxB;AAAA,EACF,CAAA;AAEA,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAa,WAAA;AAAA,MACb,SAAA,EAAU,2BAAA;AAAA,MACV,SAAA;AAAA,MAEA,QAAA,kBAAAA,cAAA;AAAA,QAACC,aAAA;AAAA,QAAA;AAAA,UACC,aAAA,EAAY,8BAAA;AAAA,UACZ,UAAA,EAAY;AAAA,YACV,YAAA,EAAc,YAAA;AAAA,YACd,QAAA,EAAU,YAAY,CAAA,GAAI;AAAA,WAC5B;AAAA,UACA,OAAA,EAAS,aAAA;AAAA,UACT,aAAA,EAAe,CAAC,aAAA,IAAiB;AAAA;AAAA;AACnC;AAAA,GACF;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionRadioCellValue.js","sources":["../src/RowSelectionRadioCellValue.tsx"],"sourcesContent":["import { RadioButton } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport checkboxCellCss from \"./CheckboxCell.css\";\nimport type { GridCellValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nexport function RowSelectionRadioCellValue<T>(props: GridCellValueProps<T>) {\n const { row, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const { selRowIdxs } = useSelectionContext();\n\n const isSelected = selRowIdxs.has(row.index);\n\n return (\n <div className=\"saltGridCheckboxContainer\">\n <RadioButton\n checked={isSelected}\n data-testid=\"grid-row-selection-radiobox\"\n tabIndex={isFocused ? 0 : -1}\n />\n </div>\n );\n}\n"],"names":["useWindow","useComponentCssInjection","checkboxCellCss","useSelectionContext","jsx","RadioButton"],"mappings":";;;;;;;;;AAOO,SAAS,2BAA8B,KAA8B,EAAA;AAC1E,EAAM,MAAA,EAAE,GAAK,EAAA,SAAA,EAAc,GAAA,KAAA;AAE3B,EAAA,MAAM,eAAeA,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAC,YAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,EAAE,UAAW,EAAA,GAAIC,oCAAoB,EAAA;AAE3C,EAAA,MAAM,UAAa,GAAA,UAAA,CAAW,GAAI,CAAA,GAAA,CAAI,KAAK,CAAA;AAE3C,EACE,uBAAAC,cAAA,CAAC,KAAI,EAAA,EAAA,SAAA,EAAU,2BACb,EAAA,QAAA,kBAAAA,cAAA;AAAA,IAACC,gBAAA;AAAA,IAAA;AAAA,MACC,OAAS,EAAA,UAAA;AAAA,MACT,aAAY,EAAA,6BAAA;AAAA,MACZ,QAAA,EAAU,YAAY,CAAI,GAAA;AAAA;AAAA,GAE9B,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"RowSelectionRadioCellValue.js","sources":["../src/RowSelectionRadioCellValue.tsx"],"sourcesContent":["import { RadioButton } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport checkboxCellCss from \"./CheckboxCell.css\";\nimport type { GridCellValueProps } from \"./GridColumn\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nexport function RowSelectionRadioCellValue<T>(props: GridCellValueProps<T>) {\n const { row, isFocused } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n const { selRowIdxs } = useSelectionContext();\n\n const isSelected = selRowIdxs.has(row.index);\n\n return (\n <div className=\"saltGridCheckboxContainer\">\n <RadioButton\n checked={isSelected}\n data-testid=\"grid-row-selection-radiobox\"\n tabIndex={isFocused ? 0 : -1}\n />\n </div>\n );\n}\n"],"names":["useWindow","useComponentCssInjection","checkboxCellCss","useSelectionContext","jsx","RadioButton"],"mappings":";;;;;;;;;AAOO,SAAS,2BAA8B,KAAA,EAA8B;AAC1E,EAAA,MAAM,EAAE,GAAA,EAAK,SAAA,EAAU,GAAI,KAAA;AAE3B,EAAA,MAAM,eAAeA,gBAAA,EAAU;AAC/B,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,oBAAA;AAAA,IACR,GAAA,EAAKC,YAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,UAAA,EAAW,GAAIC,oCAAA,EAAoB;AAE3C,EAAA,MAAM,UAAA,GAAa,UAAA,CAAW,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA;AAE3C,EAAA,uBACEC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,kBAAAA,cAAA;AAAA,IAACC,gBAAA;AAAA,IAAA;AAAA,MACC,OAAA,EAAS,UAAA;AAAA,MACT,aAAA,EAAY,6BAAA;AAAA,MACZ,QAAA,EAAU,YAAY,CAAA,GAAI;AAAA;AAAA,GAC5B,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionRadioColumn.js","sources":["../src/RowSelectionRadioColumn.tsx"],"sourcesContent":["import { type KeyboardEvent, useCallback } from \"react\";\nimport { GridColumn, type GridColumnProps } from \"./GridColumn\";\nimport { RowSelectionRadioCellValue } from \"./RowSelectionRadioCellValue\";\nimport { RowSelectionRadioHeaderCell } from \"./RowSelectionRadioHeaderCell\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nexport type RowSelectionRadioColumnProps<T> = Omit<\n GridColumnProps<T>,\n \"width\" | \"name\"\n>;\n\nexport function RowSelectionRadioColumn<T>(\n props: RowSelectionRadioColumnProps<T>,\n) {\n const { selectRows } = useSelectionContext();\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>, rowIndex: number) => {\n if (event.key === \" \") {\n selectRows({ rowIndex });\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [selectRows],\n );\n\n return (\n <GridColumn\n {...props}\n defaultWidth={100}\n headerComponent={RowSelectionRadioHeaderCell}\n cellValueComponent={RowSelectionRadioCellValue}\n onKeyDown={onKeyDown}\n />\n );\n}\n"],"names":["useSelectionContext","useCallback","jsx","GridColumn","RowSelectionRadioHeaderCell","RowSelectionRadioCellValue"],"mappings":";;;;;;;;;AAWO,SAAS,wBACd,KACA,EAAA;AACA,EAAM,MAAA,EAAE,UAAW,EAAA,GAAIA,oCAAoB,EAAA;AAE3C,EAAA,MAAM,SAAY,GAAAC,iBAAA;AAAA,IAChB,CAAC,OAAsC,QAAqB,KAAA;AAC1D,MAAI,IAAA,KAAA,CAAM,QAAQ,GAAK,EAAA;AACrB,QAAW,UAAA,CAAA,EAAE,UAAU,CAAA;AACvB,QAAA,KAAA,CAAM,cAAe,EAAA;AACrB,QAAA,KAAA,CAAM,eAAgB,EAAA;AAAA;AACxB,KACF;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EACE,uBAAAC,cAAA;AAAA,IAACC,qBAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,YAAc,EAAA,GAAA;AAAA,MACd,eAAiB,EAAAC,uDAAA;AAAA,MACjB,kBAAoB,EAAAC,qDAAA;AAAA,MACpB;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"RowSelectionRadioColumn.js","sources":["../src/RowSelectionRadioColumn.tsx"],"sourcesContent":["import { type KeyboardEvent, useCallback } from \"react\";\nimport { GridColumn, type GridColumnProps } from \"./GridColumn\";\nimport { RowSelectionRadioCellValue } from \"./RowSelectionRadioCellValue\";\nimport { RowSelectionRadioHeaderCell } from \"./RowSelectionRadioHeaderCell\";\nimport { useSelectionContext } from \"./SelectionContext\";\n\nexport type RowSelectionRadioColumnProps<T> = Omit<\n GridColumnProps<T>,\n \"width\" | \"name\"\n>;\n\nexport function RowSelectionRadioColumn<T>(\n props: RowSelectionRadioColumnProps<T>,\n) {\n const { selectRows } = useSelectionContext();\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent<HTMLDivElement>, rowIndex: number) => {\n if (event.key === \" \") {\n selectRows({ rowIndex });\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [selectRows],\n );\n\n return (\n <GridColumn\n {...props}\n defaultWidth={100}\n headerComponent={RowSelectionRadioHeaderCell}\n cellValueComponent={RowSelectionRadioCellValue}\n onKeyDown={onKeyDown}\n />\n );\n}\n"],"names":["useSelectionContext","useCallback","jsx","GridColumn","RowSelectionRadioHeaderCell","RowSelectionRadioCellValue"],"mappings":";;;;;;;;;AAWO,SAAS,wBACd,KAAA,EACA;AACA,EAAA,MAAM,EAAE,UAAA,EAAW,GAAIA,oCAAA,EAAoB;AAE3C,EAAA,MAAM,SAAA,GAAYC,iBAAA;AAAA,IAChB,CAAC,OAAsC,QAAA,KAAqB;AAC1D,MAAA,IAAI,KAAA,CAAM,QAAQ,GAAA,EAAK;AACrB,QAAA,UAAA,CAAW,EAAE,UAAU,CAAA;AACvB,QAAA,KAAA,CAAM,cAAA,EAAe;AACrB,QAAA,KAAA,CAAM,eAAA,EAAgB;AAAA,MACxB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,UAAU;AAAA,GACb;AAEA,EAAA,uBACEC,cAAA;AAAA,IAACC,qBAAA;AAAA,IAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,YAAA,EAAc,GAAA;AAAA,MACd,eAAA,EAAiBC,uDAAA;AAAA,MACjB,kBAAA,EAAoBC,qDAAA;AAAA,MACpB;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RowSelectionRadioHeaderCell.js","sources":["../src/RowSelectionRadioHeaderCell.tsx"],"sourcesContent":["import { RadioButtonIcon } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport checkboxCellCss from \"./CheckboxCell.css\";\nimport type { HeaderCellProps } from \"./GridColumn\";\nimport { AutoSizeHeaderCell } from \"./HeaderCell\";\n\nexport function RowSelectionRadioHeaderCell<T>(props: HeaderCellProps<T>) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n return (\n <AutoSizeHeaderCell {...props}>\n <div className={clsx(\"saltGridCheckboxContainer\", \"saltGrid-hidden\")}>\n <RadioButtonIcon />\n </div>\n </AutoSizeHeaderCell>\n );\n}\n"],"names":["useWindow","useComponentCssInjection","checkboxCellCss","jsx","AutoSizeHeaderCell","clsx","RadioButtonIcon"],"mappings":";;;;;;;;;;AAQO,SAAS,4BAA+B,KAA2B,EAAA;AACxE,EAAA,MAAM,eAAeA,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,oBAAA;AAAA,IACR,GAAK,EAAAC,YAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,uBACGC,cAAA,CAAAC,6BAAA,EAAA,EAAoB,GAAG,KAAA,EACtB,yCAAC,KAAI,EAAA,EAAA,SAAA,EAAWC,SAAK,CAAA,2BAAA,EAA6B,iBAAiB,CAAA,EACjE,QAAC,kBAAAF,cAAA,CAAAG,oBAAA,EAAA,EAAgB,GACnB,CACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"RowSelectionRadioHeaderCell.js","sources":["../src/RowSelectionRadioHeaderCell.tsx"],"sourcesContent":["import { RadioButtonIcon } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport checkboxCellCss from \"./CheckboxCell.css\";\nimport type { HeaderCellProps } from \"./GridColumn\";\nimport { AutoSizeHeaderCell } from \"./HeaderCell\";\n\nexport function RowSelectionRadioHeaderCell<T>(props: HeaderCellProps<T>) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-checkbox-cell\",\n css: checkboxCellCss,\n window: targetWindow,\n });\n\n return (\n <AutoSizeHeaderCell {...props}>\n <div className={clsx(\"saltGridCheckboxContainer\", \"saltGrid-hidden\")}>\n <RadioButtonIcon />\n </div>\n </AutoSizeHeaderCell>\n );\n}\n"],"names":["useWindow","useComponentCssInjection","checkboxCellCss","jsx","AutoSizeHeaderCell","clsx","RadioButtonIcon"],"mappings":";;;;;;;;;;AAQO,SAAS,4BAA+B,KAAA,EAA2B;AACxE,EAAA,MAAM,eAAeA,gBAAA,EAAU;AAC/B,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,oBAAA;AAAA,IACR,GAAA,EAAKC,YAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,uBACEC,cAAA,CAACC,6BAAA,EAAA,EAAoB,GAAG,KAAA,EACtB,yCAAC,KAAA,EAAA,EAAI,SAAA,EAAWC,SAAA,CAAK,2BAAA,EAA6B,iBAAiB,CAAA,EACjE,QAAA,kBAAAF,cAAA,CAACG,oBAAA,EAAA,EAAgB,GACnB,CAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"RowValidationStatus.js","sources":["../src/RowValidationStatus.tsx"],"sourcesContent":["import { StatusIndicator } from \"@salt-ds/core\";\nimport { createContext, useContext } from \"react\";\nimport {\n type CellValidationState,\n GridColumn,\n type GridColumnProps,\n} from \"./GridColumn\";\n\nexport const RowValidationStatusContext = createContext<{\n status?: CellValidationState;\n}>({});\n\nexport type RowValidationStatusColumnProps<T> = Omit<\n GridColumnProps<T>,\n \"width\" | \"name\"\n>;\n\nexport function RowValidationStatusColumn<T>(\n props: RowValidationStatusColumnProps<T>,\n) {\n return (\n <GridColumn\n aria-label=\"Row status\"\n defaultWidth={30}\n cellValueComponent={RowValidationCell}\n {...props}\n />\n );\n}\n\nconst knownStatus = new Set([\"error\", \"warning\", \"success\"]);\n\nfunction RowValidationCell() {\n const rowValidationContext = useContext(RowValidationStatusContext);\n if (\n !rowValidationContext?.status ||\n !knownStatus.has(rowValidationContext.status)\n )\n return null;\n\n const validationStatus = rowValidationContext.status;\n\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n width: \"100%\",\n }}\n >\n <StatusIndicator\n aria-label={`Row ${validationStatus}`}\n status={validationStatus}\n />\n </div>\n );\n}\n"],"names":["createContext"],"mappings":";;;;;;;AAQa,MAAA,0BAAA,GAA6BA,mBAEvC,CAAA,EAAE;;;;"}
1
+ {"version":3,"file":"RowValidationStatus.js","sources":["../src/RowValidationStatus.tsx"],"sourcesContent":["import { StatusIndicator } from \"@salt-ds/core\";\nimport { createContext, useContext } from \"react\";\nimport {\n type CellValidationState,\n GridColumn,\n type GridColumnProps,\n} from \"./GridColumn\";\n\nexport const RowValidationStatusContext = createContext<{\n status?: CellValidationState;\n}>({});\n\nexport type RowValidationStatusColumnProps<T> = Omit<\n GridColumnProps<T>,\n \"width\" | \"name\"\n>;\n\nexport function RowValidationStatusColumn<T>(\n props: RowValidationStatusColumnProps<T>,\n) {\n return (\n <GridColumn\n aria-label=\"Row status\"\n defaultWidth={30}\n cellValueComponent={RowValidationCell}\n {...props}\n />\n );\n}\n\nconst knownStatus = new Set([\"error\", \"warning\", \"success\"]);\n\nfunction RowValidationCell() {\n const rowValidationContext = useContext(RowValidationStatusContext);\n if (\n !rowValidationContext?.status ||\n !knownStatus.has(rowValidationContext.status)\n )\n return null;\n\n const validationStatus = rowValidationContext.status;\n\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n height: \"100%\",\n width: \"100%\",\n }}\n >\n <StatusIndicator\n aria-label={`Row ${validationStatus}`}\n status={validationStatus}\n />\n </div>\n );\n}\n"],"names":["createContext"],"mappings":";;;;;;;AAQO,MAAM,0BAAA,GAA6BA,mBAAA,CAEvC,EAAE;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SelectionContext.js","sources":["../src/SelectionContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { CellRange, SelectRowsOptions } from \"./internal\";\n\nexport interface SelectionContext {\n selectedCellRange: CellRange | undefined;\n selRowIdxs: Set<number>;\n isAnySelected: boolean;\n isAllSelected: boolean;\n selectRows: (args: SelectRowsOptions) => void;\n selectAll: () => void;\n unselectAll: () => void;\n}\n\nexport const SelectionContext = createContext<SelectionContext | undefined>(\n undefined,\n);\n\nexport const useSelectionContext = () => {\n const c = useContext(SelectionContext);\n if (!c) {\n throw new Error(\"useSelectionContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAaO,MAAM,gBAAmB,GAAAA,mBAAA;AAAA,EAC9B;AACF;AAEO,MAAM,sBAAsB,MAAM;AACvC,EAAM,MAAA,CAAA,GAAIC,iBAAW,gBAAgB,CAAA;AACrC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,+CAA+C,CAAA;AAAA;AAEjE,EAAO,OAAA,CAAA;AACT;;;;;"}
1
+ {"version":3,"file":"SelectionContext.js","sources":["../src/SelectionContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { CellRange, SelectRowsOptions } from \"./internal\";\n\nexport interface SelectionContext {\n selectedCellRange: CellRange | undefined;\n selRowIdxs: Set<number>;\n isAnySelected: boolean;\n isAllSelected: boolean;\n selectRows: (args: SelectRowsOptions) => void;\n selectAll: () => void;\n unselectAll: () => void;\n}\n\nexport const SelectionContext = createContext<SelectionContext | undefined>(\n undefined,\n);\n\nexport const useSelectionContext = () => {\n const c = useContext(SelectionContext);\n if (!c) {\n throw new Error(\"useSelectionContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AAaO,MAAM,gBAAA,GAAmBA,mBAAA;AAAA,EAC9B;AACF;AAEO,MAAM,sBAAsB,MAAM;AACvC,EAAA,MAAM,CAAA,GAAIC,iBAAW,gBAAgB,CAAA;AACrC,EAAA,IAAI,CAAC,CAAA,EAAG;AACN,IAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,EACjE;AACA,EAAA,OAAO,CAAA;AACT;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SizingContext.js","sources":["../src/SizingContext.ts"],"sourcesContent":["import type { MouseEvent } from \"react\";\nimport { createContext, useContext } from \"react\";\n\nexport interface SizingContext {\n rowHeight: number;\n resizeColumn: (colIdx: number, width: number) => void;\n onResizeHandleMouseDown: (event: MouseEvent<HTMLDivElement>) => void;\n}\n\nexport const SizingContext = createContext<SizingContext | undefined>(\n undefined,\n);\nexport const useSizingContext = () => {\n const c = useContext(SizingContext);\n if (!c) {\n throw new Error(\"useSizingContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AASO,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":"SizingContext.js","sources":["../src/SizingContext.ts"],"sourcesContent":["import type { MouseEvent } from \"react\";\nimport { createContext, useContext } from \"react\";\n\nexport interface SizingContext {\n rowHeight: number;\n resizeColumn: (colIdx: number, width: number) => void;\n onResizeHandleMouseDown: (event: MouseEvent<HTMLDivElement>) => void;\n}\n\nexport const SizingContext = createContext<SizingContext | undefined>(\n undefined,\n);\nexport const useSizingContext = () => {\n const c = useContext(SizingContext);\n if (!c) {\n throw new Error(\"useSizingContext invoked outside of a Grid\");\n }\n return c;\n};\n"],"names":["createContext","useContext"],"mappings":";;;;AASO,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":"TextCellEditor.js","sources":["../src/TextCellEditor.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n type ChangeEventHandler,\n type KeyboardEventHandler,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport { useEditorContext } from \"./EditorContext\";\nimport type { GridColumnModel, GridRowModel } from \"./Grid\";\n\nimport textCellEditorCss from \"./TextCellEditor.css\";\n\nconst withBaseName = makePrefixer(\"saltGridTextCellEditor\");\n\nexport interface TextCellEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n}\n\nexport function TextCellEditor<T>(props: TextCellEditorProps<T>) {\n const { column, row } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-text-cell-editor\",\n css: textCellEditorCss,\n window: targetWindow,\n });\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data),\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n useEffect(() => {\n const input = inputRef.current;\n const focusOut = (event: FocusEvent) => {\n if (!input?.contains(event.target as Node)) {\n endEditMode(editorText);\n }\n };\n\n // This uses the capture phase to detect clicks outside the input to avoid a race condition where the component gets unmounted when edit mode ends.\n document?.addEventListener(\"mousedown\", focusOut, true);\n\n return () => {\n document?.removeEventListener(\"mousedown\", focusOut, true);\n };\n }, [endEditMode, editorText]);\n\n return (\n <CellFrame separator={column?.separator} className={withBaseName()}>\n <div className={withBaseName(\"inputContainer\")}>\n <input\n data-testid=\"grid-cell-editor-input\"\n ref={inputRef}\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </CellFrame>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","textCellEditorCss","useRef","useEditorContext","useState","useEffect","CellFrame","jsx","CornerTag"],"mappings":"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"}
1
+ {"version":3,"file":"TextCellEditor.js","sources":["../src/TextCellEditor.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport {\n type ChangeEventHandler,\n type KeyboardEventHandler,\n useEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { CellFrame } from \"./CellFrame\";\nimport { CornerTag } from \"./CornerTag\";\nimport { useEditorContext } from \"./EditorContext\";\nimport type { GridColumnModel, GridRowModel } from \"./Grid\";\n\nimport textCellEditorCss from \"./TextCellEditor.css\";\n\nconst withBaseName = makePrefixer(\"saltGridTextCellEditor\");\n\nexport interface TextCellEditorProps<T> {\n row?: GridRowModel<T>;\n column?: GridColumnModel<T>;\n}\n\nexport function TextCellEditor<T>(props: TextCellEditorProps<T>) {\n const { column, row } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-text-cell-editor\",\n css: textCellEditorCss,\n window: targetWindow,\n });\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const { endEditMode, cancelEditMode, initialText } = useEditorContext();\n\n const [editorText, setEditorText] = useState<string>(\n initialText != null ? initialText : column!.info.props.getValue!(row!.data),\n );\n\n const initialSelectionRef = useRef(!!initialText);\n\n const onChange: ChangeEventHandler<HTMLInputElement> = (e) => {\n setEditorText(e.target.value);\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (event.key === \"Enter\") {\n endEditMode(editorText);\n return;\n }\n if (event.key === \"Escape\") {\n cancelEditMode();\n return;\n }\n if (event.key === \"Tab\") {\n endEditMode(editorText);\n event.preventDefault();\n return;\n }\n event.stopPropagation();\n };\n\n useEffect(() => {\n if (inputRef.current && !initialSelectionRef.current) {\n inputRef.current.select();\n initialSelectionRef.current = true;\n }\n }, [inputRef.current]);\n\n useEffect(() => {\n const input = inputRef.current;\n const focusOut = (event: FocusEvent) => {\n if (!input?.contains(event.target as Node)) {\n endEditMode(editorText);\n }\n };\n\n // This uses the capture phase to detect clicks outside the input to avoid a race condition where the component gets unmounted when edit mode ends.\n document?.addEventListener(\"mousedown\", focusOut, true);\n\n return () => {\n document?.removeEventListener(\"mousedown\", focusOut, true);\n };\n }, [endEditMode, editorText]);\n\n return (\n <CellFrame separator={column?.separator} className={withBaseName()}>\n <div className={withBaseName(\"inputContainer\")}>\n <input\n data-testid=\"grid-cell-editor-input\"\n ref={inputRef}\n autoFocus={true}\n value={editorText}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n </div>\n <CornerTag />\n </CellFrame>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","textCellEditorCss","useRef","useEditorContext","useState","useEffect","CellFrame","jsx","CornerTag"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CellMeasure.js","sources":["../src/internal/CellMeasure.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useEffect, useRef } from \"react\";\n\nimport cellMeasureCss from \"./CellMeasure.css\";\n\nconst withBaseName = makePrefixer(\"saltGridCellMeasure\");\n\nexport interface CellMeasureProps<T> {\n setRowHeight: (rowHeight: number) => void;\n}\n\n// Renders a cell in invisible location, measures its height and provides it to\n// the grid.\nexport function CellMeasure<T>(props: CellMeasureProps<T>) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-cell-measure\",\n css: cellMeasureCss,\n window: targetWindow,\n });\n\n const rowRef = useRef<HTMLTableRowElement>(null);\n const heightRef = useRef<number>(-1);\n\n const { setRowHeight } = props;\n\n useEffect(() => {\n if (rowRef.current) {\n const height = rowRef.current.getBoundingClientRect().height;\n if (heightRef.current !== height) {\n // console.log(`Row height changing to ${height}px`);\n heightRef.current = height;\n setRowHeight(height);\n }\n }\n });\n\n return (\n <div className={withBaseName()}>\n <table aria-hidden>\n <thead>\n <tr ref={rowRef}>\n <th>Invisible Cell</th>\n </tr>\n </thead>\n </table>\n </div>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","cellMeasureCss","useRef","useEffect","jsx"],"mappings":";;;;;;;;;AAOA,MAAM,YAAA,GAAeA,kBAAa,qBAAqB,CAAA;AAQhD,SAAS,YAAe,KAA4B,EAAA;AACzD,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,mBAAA;AAAA,IACR,GAAK,EAAAC,aAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,MAAA,GAASC,aAA4B,IAAI,CAAA;AAC/C,EAAM,MAAA,SAAA,GAAYA,aAAe,EAAE,CAAA;AAEnC,EAAM,MAAA,EAAE,cAAiB,GAAA,KAAA;AAEzB,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAO,OAAS,EAAA;AAClB,MAAA,MAAM,MAAS,GAAA,MAAA,CAAO,OAAQ,CAAA,qBAAA,EAAwB,CAAA,MAAA;AACtD,MAAI,IAAA,SAAA,CAAU,YAAY,MAAQ,EAAA;AAEhC,QAAA,SAAA,CAAU,OAAU,GAAA,MAAA;AACpB,QAAA,YAAA,CAAa,MAAM,CAAA;AAAA;AACrB;AACF,GACD,CAAA;AAED,EACE,uBAAAC,cAAA,CAAC,SAAI,SAAW,EAAA,YAAA,IACd,QAAC,kBAAAA,cAAA,CAAA,OAAA,EAAA,EAAM,eAAW,IAChB,EAAA,QAAA,kBAAAA,cAAA,CAAC,WACC,QAAC,kBAAAA,cAAA,CAAA,IAAA,EAAA,EAAG,KAAK,MACP,EAAA,QAAA,kBAAAA,cAAA,CAAC,QAAG,QAAc,EAAA,gBAAA,EAAA,CAAA,EACpB,CACF,EAAA,CAAA,EACF,CACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"CellMeasure.js","sources":["../src/internal/CellMeasure.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useEffect, useRef } from \"react\";\n\nimport cellMeasureCss from \"./CellMeasure.css\";\n\nconst withBaseName = makePrefixer(\"saltGridCellMeasure\");\n\nexport interface CellMeasureProps<T> {\n setRowHeight: (rowHeight: number) => void;\n}\n\n// Renders a cell in invisible location, measures its height and provides it to\n// the grid.\nexport function CellMeasure<T>(props: CellMeasureProps<T>) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-cell-measure\",\n css: cellMeasureCss,\n window: targetWindow,\n });\n\n const rowRef = useRef<HTMLTableRowElement>(null);\n const heightRef = useRef<number>(-1);\n\n const { setRowHeight } = props;\n\n useEffect(() => {\n if (rowRef.current) {\n const height = rowRef.current.getBoundingClientRect().height;\n if (heightRef.current !== height) {\n // console.log(`Row height changing to ${height}px`);\n heightRef.current = height;\n setRowHeight(height);\n }\n }\n });\n\n return (\n <div className={withBaseName()}>\n <table aria-hidden>\n <thead>\n <tr ref={rowRef}>\n <th>Invisible Cell</th>\n </tr>\n </thead>\n </table>\n </div>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","cellMeasureCss","useRef","useEffect","jsx"],"mappings":";;;;;;;;;AAOA,MAAM,YAAA,GAAeA,kBAAa,qBAAqB,CAAA;AAQhD,SAAS,YAAe,KAAA,EAA4B;AACzD,EAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,mBAAA;AAAA,IACR,GAAA,EAAKC,aAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,MAAA,GAASC,aAA4B,IAAI,CAAA;AAC/C,EAAA,MAAM,SAAA,GAAYA,aAAe,EAAE,CAAA;AAEnC,EAAA,MAAM,EAAE,cAAa,GAAI,KAAA;AAEzB,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,qBAAA,EAAsB,CAAE,MAAA;AACtD,MAAA,IAAI,SAAA,CAAU,YAAY,MAAA,EAAQ;AAEhC,QAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AACpB,QAAA,YAAA,CAAa,MAAM,CAAA;AAAA,MACrB;AAAA,IACF;AAAA,EACF,CAAC,CAAA;AAED,EAAA,uBACEC,cAAA,CAAC,SAAI,SAAA,EAAW,YAAA,IACd,QAAA,kBAAAA,cAAA,CAAC,OAAA,EAAA,EAAM,eAAW,IAAA,EAChB,QAAA,kBAAAA,cAAA,CAAC,WACC,QAAA,kBAAAA,cAAA,CAAC,IAAA,EAAA,EAAG,KAAK,MAAA,EACP,QAAA,kBAAAA,cAAA,CAAC,QAAG,QAAA,EAAA,gBAAA,EAAc,CAAA,EACpB,CAAA,EACF,CAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"CellStatusIcons.js","sources":["../src/internal/CellStatusIcons.tsx"],"sourcesContent":["export const CellWarningIcon = (\n <svg\n aria-hidden\n height=\"1em\"\n viewBox=\"0 0 10 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M4.6188 0L9.2376 8H0L4.6188 0Z\" />\n </svg>\n);\n\nexport const CellErrorIcon = (\n <svg\n aria-hidden\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 8 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"4\" cy=\"4\" r=\"4\" />\n </svg>\n);\n\nexport const CellSuccessIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13.7668 2.63645L5.06034 12.0309L0.277532 7.56074L1.47248 6.28223L4.97136 9.55242L12.4832 1.4469L13.7668 2.63645Z\"\n fill=\"#24874B\"\n />\n </svg>\n);\n"],"names":["jsx"],"mappings":";;;;AAAO,MAAM,eACX,mBAAAA,cAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,aAAW,EAAA,IAAA;AAAA,IACX,MAAO,EAAA,KAAA;AAAA,IACP,OAAQ,EAAA,UAAA;AAAA,IACR,IAAK,EAAA,MAAA;AAAA,IACL,KAAM,EAAA,4BAAA;AAAA,IAEN,QAAA,kBAAAA,cAAA,CAAC,MAAK,EAAA,EAAA,CAAA,EAAE,gCAAiC,EAAA;AAAA;AAC3C;AAGK,MAAM,aACX,mBAAAA,cAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,aAAW,EAAA,IAAA;AAAA,IACX,KAAM,EAAA,KAAA;AAAA,IACN,MAAO,EAAA,KAAA;AAAA,IACP,OAAQ,EAAA,SAAA;AAAA,IACR,IAAK,EAAA,MAAA;AAAA,IACL,KAAM,EAAA,4BAAA;AAAA,IAEN,yCAAC,QAAO,EAAA,EAAA,EAAA,EAAG,KAAI,EAAG,EAAA,GAAA,EAAI,GAAE,GAAI,EAAA;AAAA;AAC9B;AAGK,MAAM,eACX,mBAAAA,cAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,KAAM,EAAA,4BAAA;AAAA,IACN,KAAM,EAAA,KAAA;AAAA,IACN,OAAQ,EAAA,WAAA;AAAA,IACR,IAAK,EAAA,MAAA;AAAA,IAEL,QAAA,kBAAAA,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAS,EAAA,SAAA;AAAA,QACT,QAAS,EAAA,SAAA;AAAA,QACT,CAAE,EAAA,mHAAA;AAAA,QACF,IAAK,EAAA;AAAA;AAAA;AACP;AACF;;;;;;"}
1
+ {"version":3,"file":"CellStatusIcons.js","sources":["../src/internal/CellStatusIcons.tsx"],"sourcesContent":["export const CellWarningIcon = (\n <svg\n aria-hidden\n height=\"1em\"\n viewBox=\"0 0 10 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path d=\"M4.6188 0L9.2376 8H0L4.6188 0Z\" />\n </svg>\n);\n\nexport const CellErrorIcon = (\n <svg\n aria-hidden\n width=\"1em\"\n height=\"1em\"\n viewBox=\"0 0 8 8\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle cx=\"4\" cy=\"4\" r=\"4\" />\n </svg>\n);\n\nexport const CellSuccessIcon = (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"1em\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M13.7668 2.63645L5.06034 12.0309L0.277532 7.56074L1.47248 6.28223L4.97136 9.55242L12.4832 1.4469L13.7668 2.63645Z\"\n fill=\"#24874B\"\n />\n </svg>\n);\n"],"names":["jsx"],"mappings":";;;;AAAO,MAAM,eAAA,mBACXA,cAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,aAAA,EAAW,IAAA;AAAA,IACX,MAAA,EAAO,KAAA;AAAA,IACP,OAAA,EAAQ,UAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,KAAA,EAAM,4BAAA;AAAA,IAEN,QAAA,kBAAAA,cAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,gCAAA,EAAiC;AAAA;AAC3C;AAGK,MAAM,aAAA,mBACXA,cAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,aAAA,EAAW,IAAA;AAAA,IACX,KAAA,EAAM,KAAA;AAAA,IACN,MAAA,EAAO,KAAA;AAAA,IACP,OAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IACL,KAAA,EAAM,4BAAA;AAAA,IAEN,yCAAC,QAAA,EAAA,EAAO,EAAA,EAAG,KAAI,EAAA,EAAG,GAAA,EAAI,GAAE,GAAA,EAAI;AAAA;AAC9B;AAGK,MAAM,eAAA,mBACXA,cAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,KAAA,EAAM,4BAAA;AAAA,IACN,KAAA,EAAM,KAAA;AAAA,IACN,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,MAAA;AAAA,IAEL,QAAA,kBAAAA,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,mHAAA;AAAA,QACF,IAAA,EAAK;AAAA;AAAA;AACP;AACF;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnDropTarget.js","sources":["../src/internal/ColumnDropTarget.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useMemo } from \"react\";\n\nimport columDropTargetCss from \"./ColumnDropTarget.css\";\n\nconst withBaseName = makePrefixer(\"saltGridColumnDropTarget\");\n\nexport interface ColumnDropTargetProps {\n x?: number;\n}\n\n// When the user drags a column, this component is used to show the potential\n// drop target. Experimental feature. No UX yet.\nexport function ColumnDropTarget(props: ColumnDropTargetProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-column-drop-target\",\n css: columDropTargetCss,\n window: targetWindow,\n });\n\n const { x = 0 } = props;\n\n const style = useMemo(() => {\n return {\n left: `${x - 2}px`,\n };\n }, [x]);\n\n if (props.x === undefined) {\n return null;\n }\n\n return <div className={withBaseName()} style={style} />;\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","columDropTargetCss","useMemo","jsx"],"mappings":";;;;;;;;;AAOA,MAAM,YAAA,GAAeA,kBAAa,0BAA0B,CAAA;AAQrD,SAAS,iBAAiB,KAA8B,EAAA;AAC7D,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,yBAAA;AAAA,IACR,GAAK,EAAAC,kBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAM,MAAA,EAAE,CAAI,GAAA,CAAA,EAAM,GAAA,KAAA;AAElB,EAAM,MAAA,KAAA,GAAQC,cAAQ,MAAM;AAC1B,IAAO,OAAA;AAAA,MACL,IAAA,EAAM,CAAG,EAAA,CAAA,GAAI,CAAC,CAAA,EAAA;AAAA,KAChB;AAAA,GACF,EAAG,CAAC,CAAC,CAAC,CAAA;AAEN,EAAI,IAAA,KAAA,CAAM,MAAM,MAAW,EAAA;AACzB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,uBAAQC,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,YAAA,IAAgB,KAAc,EAAA,CAAA;AACvD;;;;"}
1
+ {"version":3,"file":"ColumnDropTarget.js","sources":["../src/internal/ColumnDropTarget.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { useMemo } from \"react\";\n\nimport columDropTargetCss from \"./ColumnDropTarget.css\";\n\nconst withBaseName = makePrefixer(\"saltGridColumnDropTarget\");\n\nexport interface ColumnDropTargetProps {\n x?: number;\n}\n\n// When the user drags a column, this component is used to show the potential\n// drop target. Experimental feature. No UX yet.\nexport function ColumnDropTarget(props: ColumnDropTargetProps) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-column-drop-target\",\n css: columDropTargetCss,\n window: targetWindow,\n });\n\n const { x = 0 } = props;\n\n const style = useMemo(() => {\n return {\n left: `${x - 2}px`,\n };\n }, [x]);\n\n if (props.x === undefined) {\n return null;\n }\n\n return <div className={withBaseName()} style={style} />;\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","columDropTargetCss","useMemo","jsx"],"mappings":";;;;;;;;;AAOA,MAAM,YAAA,GAAeA,kBAAa,0BAA0B,CAAA;AAQrD,SAAS,iBAAiB,KAAA,EAA8B;AAC7D,EAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,yBAAA;AAAA,IACR,GAAA,EAAKC,kBAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,EAAE,CAAA,GAAI,CAAA,EAAE,GAAI,KAAA;AAElB,EAAA,MAAM,KAAA,GAAQC,cAAQ,MAAM;AAC1B,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA,EAAA;AAAA,KAChB;AAAA,EACF,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA;AAEN,EAAA,IAAI,KAAA,CAAM,MAAM,MAAA,EAAW;AACzB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBAAOC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,IAAgB,KAAA,EAAc,CAAA;AACvD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnGhost.js","sources":["../src/internal/ColumnGhost.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport type { CSSProperties } from \"react\";\n\nimport type { GridColumnModel, GridRowModel } from \"../Grid\";\nimport columnGhostCss from \"./ColumnGhost.css\";\nimport type { ColumnDragState } from \"./gridHooks\";\nimport { HeaderRow } from \"./HeaderRow\";\nimport { TableBody } from \"./TableBody\";\nimport { TableColGroup } from \"./TableColGroup\";\n\nconst withBaseName = makePrefixer(\"saltGridColumnGhost\");\n\nexport interface ColumnGhostProps<T> {\n dragState?: ColumnDragState;\n columns: GridColumnModel<T>[];\n rows: GridRowModel<T>[];\n zebra?: boolean;\n}\n\n// When the user drags a column this component renders a partially transparent\n// copy of the dragged column.\nexport function ColumnGhost<T = any>(props: ColumnGhostProps<T>) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-column-ghost\",\n css: columnGhostCss,\n window: targetWindow,\n });\n\n if (!props.dragState) {\n return null;\n }\n\n const { columnIndex, x, y } = props.dragState;\n const { columns, rows, zebra } = props;\n const movingColumn = columns[columnIndex];\n\n const style: CSSProperties = {\n left: x,\n top: y,\n };\n\n return (\n <div className={withBaseName()} style={style}>\n <table aria-hidden>\n <TableColGroup columns={[movingColumn]} />\n <thead>\n <HeaderRow columns={[movingColumn]} />\n </thead>\n <TableBody\n columns={[movingColumn]}\n rows={rows}\n setHoverRowKey={() => {}}\n zebra={zebra}\n />\n </table>\n </div>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","columnGhostCss","jsx","jsxs","TableColGroup","HeaderRow","TableBody"],"mappings":";;;;;;;;;;;AAYA,MAAM,YAAA,GAAeA,kBAAa,qBAAqB,CAAA;AAWhD,SAAS,YAAqB,KAA4B,EAAA;AAC/D,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,mBAAA;AAAA,IACR,GAAK,EAAAC,aAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAI,IAAA,CAAC,MAAM,SAAW,EAAA;AACpB,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,MAAM,EAAE,WAAA,EAAa,CAAG,EAAA,CAAA,KAAM,KAAM,CAAA,SAAA;AACpC,EAAA,MAAM,EAAE,OAAA,EAAS,IAAM,EAAA,KAAA,EAAU,GAAA,KAAA;AACjC,EAAM,MAAA,YAAA,GAAe,QAAQ,WAAW,CAAA;AAExC,EAAA,MAAM,KAAuB,GAAA;AAAA,IAC3B,IAAM,EAAA,CAAA;AAAA,IACN,GAAK,EAAA;AAAA,GACP;AAEA,EACE,uBAAAC,cAAA,CAAC,SAAI,SAAW,EAAA,YAAA,IAAgB,KAC9B,EAAA,QAAA,kBAAAC,eAAA,CAAC,OAAM,EAAA,EAAA,aAAA,EAAW,IAChB,EAAA,QAAA,EAAA;AAAA,oBAAAD,cAAA,CAACE,2BAAc,EAAA,EAAA,OAAA,EAAS,CAAC,YAAY,CAAG,EAAA,CAAA;AAAA,oBACxCF,cAAA,CAAC,WACC,QAAC,kBAAAA,cAAA,CAAAG,mBAAA,EAAA,EAAU,SAAS,CAAC,YAAY,GAAG,CACtC,EAAA,CAAA;AAAA,oBACAH,cAAA;AAAA,MAACI,mBAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,CAAC,YAAY,CAAA;AAAA,QACtB,IAAA;AAAA,QACA,gBAAgB,MAAM;AAAA,SAAC;AAAA,QACvB;AAAA;AAAA;AACF,GAAA,EACF,CACF,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ColumnGhost.js","sources":["../src/internal/ColumnGhost.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport type { CSSProperties } from \"react\";\n\nimport type { GridColumnModel, GridRowModel } from \"../Grid\";\nimport columnGhostCss from \"./ColumnGhost.css\";\nimport type { ColumnDragState } from \"./gridHooks\";\nimport { HeaderRow } from \"./HeaderRow\";\nimport { TableBody } from \"./TableBody\";\nimport { TableColGroup } from \"./TableColGroup\";\n\nconst withBaseName = makePrefixer(\"saltGridColumnGhost\");\n\nexport interface ColumnGhostProps<T> {\n dragState?: ColumnDragState;\n columns: GridColumnModel<T>[];\n rows: GridRowModel<T>[];\n zebra?: boolean;\n}\n\n// When the user drags a column this component renders a partially transparent\n// copy of the dragged column.\nexport function ColumnGhost<T = any>(props: ColumnGhostProps<T>) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-column-ghost\",\n css: columnGhostCss,\n window: targetWindow,\n });\n\n if (!props.dragState) {\n return null;\n }\n\n const { columnIndex, x, y } = props.dragState;\n const { columns, rows, zebra } = props;\n const movingColumn = columns[columnIndex];\n\n const style: CSSProperties = {\n left: x,\n top: y,\n };\n\n return (\n <div className={withBaseName()} style={style}>\n <table aria-hidden>\n <TableColGroup columns={[movingColumn]} />\n <thead>\n <HeaderRow columns={[movingColumn]} />\n </thead>\n <TableBody\n columns={[movingColumn]}\n rows={rows}\n setHoverRowKey={() => {}}\n zebra={zebra}\n />\n </table>\n </div>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","columnGhostCss","jsx","jsxs","TableColGroup","HeaderRow","TableBody"],"mappings":";;;;;;;;;;;AAYA,MAAM,YAAA,GAAeA,kBAAa,qBAAqB,CAAA;AAWhD,SAAS,YAAqB,KAAA,EAA4B;AAC/D,EAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,mBAAA;AAAA,IACR,GAAA,EAAKC,aAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,IAAI,CAAC,MAAM,SAAA,EAAW;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,EAAE,WAAA,EAAa,CAAA,EAAG,CAAA,KAAM,KAAA,CAAM,SAAA;AACpC,EAAA,MAAM,EAAE,OAAA,EAAS,IAAA,EAAM,KAAA,EAAM,GAAI,KAAA;AACjC,EAAA,MAAM,YAAA,GAAe,QAAQ,WAAW,CAAA;AAExC,EAAA,MAAM,KAAA,GAAuB;AAAA,IAC3B,IAAA,EAAM,CAAA;AAAA,IACN,GAAA,EAAK;AAAA,GACP;AAEA,EAAA,uBACEC,cAAA,CAAC,SAAI,SAAA,EAAW,YAAA,IAAgB,KAAA,EAC9B,QAAA,kBAAAC,eAAA,CAAC,OAAA,EAAA,EAAM,aAAA,EAAW,IAAA,EAChB,QAAA,EAAA;AAAA,oBAAAD,cAAA,CAACE,2BAAA,EAAA,EAAc,OAAA,EAAS,CAAC,YAAY,CAAA,EAAG,CAAA;AAAA,oBACxCF,cAAA,CAAC,WACC,QAAA,kBAAAA,cAAA,CAACG,mBAAA,EAAA,EAAU,SAAS,CAAC,YAAY,GAAG,CAAA,EACtC,CAAA;AAAA,oBACAH,cAAA;AAAA,MAACI,mBAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,CAAC,YAAY,CAAA;AAAA,QACtB,IAAA;AAAA,QACA,gBAAgB,MAAM;AAAA,QAAC,CAAA;AAAA,QACvB;AAAA;AAAA;AACF,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Cursor.js","sources":["../src/internal/Cursor.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport cursorCss from \"./Cursor.css\";\n\nconst withBaseName = makePrefixer(\"saltGridCursor\");\n\n// This is probably obsolete. Cursor is rendered using cell borders now.\nexport function Cursor() {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-cursor\",\n css: cursorCss,\n window: targetWindow,\n });\n\n return <div className={withBaseName()} />;\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","cursorCss","jsx"],"mappings":";;;;;;;;AAMA,MAAM,YAAA,GAAeA,kBAAa,gBAAgB,CAAA;AAG3C,SAAS,MAAS,GAAA;AACvB,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,aAAA;AAAA,IACR,GAAK,EAAAC,QAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,uBAAQC,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,YAAA,EAAgB,EAAA,CAAA;AACzC;;;;"}
1
+ {"version":3,"file":"Cursor.js","sources":["../src/internal/Cursor.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport cursorCss from \"./Cursor.css\";\n\nconst withBaseName = makePrefixer(\"saltGridCursor\");\n\n// This is probably obsolete. Cursor is rendered using cell borders now.\nexport function Cursor() {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-cursor\",\n css: cursorCss,\n window: targetWindow,\n });\n\n return <div className={withBaseName()} />;\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","cursorCss","jsx"],"mappings":";;;;;;;;AAMA,MAAM,YAAA,GAAeA,kBAAa,gBAAgB,CAAA;AAG3C,SAAS,MAAA,GAAS;AACvB,EAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,aAAA;AAAA,IACR,GAAA,EAAKC,QAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,uBAAOC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,EAAa,EAAG,CAAA;AACzC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultCellValue.js","sources":["../src/internal/DefaultCellValue.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport type { ReactNode } from \"react\";\n\nimport type { GridCellValueProps } from \"../GridColumn\";\n\nimport defaultCellValueCss from \"./DefaultCellValue.css\";\n\nconst withBaseName = makePrefixer(\"saltGridDefaultCellValue\");\n\n// Default component for cell value wrappers. Rendered as a child of cell\n// components (<td>s)\nexport function DefaultCellValue<T>(props: GridCellValueProps<T>) {\n const { value } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-default-cell-value\",\n css: defaultCellValueCss,\n window: targetWindow,\n });\n\n return (\n <div\n className={clsx(withBaseName(), {\n [withBaseName(\"alignRight\")]: props.column.info.props.align === \"right\",\n })}\n >\n {value as ReactNode}\n </div>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","defaultCellValueCss","jsx","clsx"],"mappings":";;;;;;;;;AAUA,MAAM,YAAA,GAAeA,kBAAa,0BAA0B,CAAA;AAIrD,SAAS,iBAAoB,KAA8B,EAAA;AAChE,EAAM,MAAA,EAAE,OAAU,GAAA,KAAA;AAElB,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,yBAAA;AAAA,IACR,GAAK,EAAAC,kBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EACE,uBAAAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,SAAK,CAAA,YAAA,EAAgB,EAAA;AAAA,QAC9B,CAAC,aAAa,YAAY,CAAC,GAAG,KAAM,CAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,KAAU,KAAA;AAAA,OACjE,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;;;;"}
1
+ {"version":3,"file":"DefaultCellValue.js","sources":["../src/internal/DefaultCellValue.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport type { ReactNode } from \"react\";\n\nimport type { GridCellValueProps } from \"../GridColumn\";\n\nimport defaultCellValueCss from \"./DefaultCellValue.css\";\n\nconst withBaseName = makePrefixer(\"saltGridDefaultCellValue\");\n\n// Default component for cell value wrappers. Rendered as a child of cell\n// components (<td>s)\nexport function DefaultCellValue<T>(props: GridCellValueProps<T>) {\n const { value } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-default-cell-value\",\n css: defaultCellValueCss,\n window: targetWindow,\n });\n\n return (\n <div\n className={clsx(withBaseName(), {\n [withBaseName(\"alignRight\")]: props.column.info.props.align === \"right\",\n })}\n >\n {value as ReactNode}\n </div>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","defaultCellValueCss","jsx","clsx"],"mappings":";;;;;;;;;AAUA,MAAM,YAAA,GAAeA,kBAAa,0BAA0B,CAAA;AAIrD,SAAS,iBAAoB,KAAA,EAA8B;AAChE,EAAA,MAAM,EAAE,OAAM,GAAI,KAAA;AAElB,EAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,yBAAA;AAAA,IACR,GAAA,EAAKC,kBAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWC,SAAA,CAAK,YAAA,EAAa,EAAG;AAAA,QAC9B,CAAC,aAAa,YAAY,CAAC,GAAG,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,KAAA,KAAU;AAAA,OACjE,CAAA;AAAA,MAEA,QAAA,EAAA;AAAA;AAAA,GACH;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"FakeCell.js","sources":["../src/internal/FakeCell.tsx"],"sourcesContent":["import { CellFrame } from \"../CellFrame\";\nimport type { GridCellProps } from \"../GridColumn\";\n\nexport type FakeCellProps<T> = Pick<GridCellProps<T>, \"row\">;\n\n// When there is unused space (total width of all columns is less than the\n// available client width of the grid) a column with fake cells is rendered to\n// fill this space. Zebra and row selection/hover highlighting is applied to\n// this column. Fake cells can't have keyboard focus or render any values.\nexport function FakeCell<T>(props: FakeCellProps<T>) {\n const { row } = props;\n\n return (\n <CellFrame\n className=\"saltGridFakeCell\"\n data-row-index={row.index}\n data-column-index={-1}\n />\n );\n}\n"],"names":["jsx","CellFrame"],"mappings":";;;;;AASO,SAAS,SAAY,KAAyB,EAAA;AACnD,EAAM,MAAA,EAAE,KAAQ,GAAA,KAAA;AAEhB,EACE,uBAAAA,cAAA;AAAA,IAACC,mBAAA;AAAA,IAAA;AAAA,MACC,SAAU,EAAA,kBAAA;AAAA,MACV,kBAAgB,GAAI,CAAA,KAAA;AAAA,MACpB,mBAAmB,EAAA;AAAA;AAAA,GACrB;AAEJ;;;;"}
1
+ {"version":3,"file":"FakeCell.js","sources":["../src/internal/FakeCell.tsx"],"sourcesContent":["import { CellFrame } from \"../CellFrame\";\nimport type { GridCellProps } from \"../GridColumn\";\n\nexport type FakeCellProps<T> = Pick<GridCellProps<T>, \"row\">;\n\n// When there is unused space (total width of all columns is less than the\n// available client width of the grid) a column with fake cells is rendered to\n// fill this space. Zebra and row selection/hover highlighting is applied to\n// this column. Fake cells can't have keyboard focus or render any values.\nexport function FakeCell<T>(props: FakeCellProps<T>) {\n const { row } = props;\n\n return (\n <CellFrame\n className=\"saltGridFakeCell\"\n data-row-index={row.index}\n data-column-index={-1}\n />\n );\n}\n"],"names":["jsx","CellFrame"],"mappings":";;;;;AASO,SAAS,SAAY,KAAA,EAAyB;AACnD,EAAA,MAAM,EAAE,KAAI,GAAI,KAAA;AAEhB,EAAA,uBACEA,cAAA;AAAA,IAACC,mBAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,kBAAA;AAAA,MACV,kBAAgB,GAAA,CAAI,KAAA;AAAA,MACpB,mBAAA,EAAmB;AAAA;AAAA,GACrB;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"FakeGroupCell.js","sources":["../src/internal/FakeGroupCell.tsx"],"sourcesContent":["export function FakeGroupCell() {\n return <th />;\n}\n"],"names":[],"mappings":";;;;AAAO,SAAS,aAAgB,GAAA;AAC9B,EAAA,sCAAQ,IAAG,EAAA,EAAA,CAAA;AACb;;;;"}
1
+ {"version":3,"file":"FakeGroupCell.js","sources":["../src/internal/FakeGroupCell.tsx"],"sourcesContent":["export function FakeGroupCell() {\n return <th />;\n}\n"],"names":[],"mappings":";;;;AAAO,SAAS,aAAA,GAAgB;AAC9B,EAAA,sCAAQ,IAAA,EAAA,EAAG,CAAA;AACb;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"FakeHeaderCell.js","sources":["../src/internal/FakeHeaderCell.tsx"],"sourcesContent":["// See FakeCell.tsx\nexport function FakeHeaderCell() {\n return <th data-testid=\"grid-fake-column-header\" />;\n}\n"],"names":["jsx"],"mappings":";;;;AACO,SAAS,cAAiB,GAAA;AAC/B,EAAO,uBAAAA,cAAA,CAAC,IAAG,EAAA,EAAA,aAAA,EAAY,yBAA0B,EAAA,CAAA;AACnD;;;;"}
1
+ {"version":3,"file":"FakeHeaderCell.js","sources":["../src/internal/FakeHeaderCell.tsx"],"sourcesContent":["// See FakeCell.tsx\nexport function FakeHeaderCell() {\n return <th data-testid=\"grid-fake-column-header\" />;\n}\n"],"names":["jsx"],"mappings":";;;;AACO,SAAS,cAAA,GAAiB;AAC/B,EAAA,uBAAOA,cAAA,CAAC,IAAA,EAAA,EAAG,aAAA,EAAY,yBAAA,EAA0B,CAAA;AACnD;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"GroupHeaderRow.js","sources":["../src/internal/GroupHeaderRow.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport type { GridColumnGroupModel } from \"../Grid\";\nimport { GroupHeaderCell } from \"../GroupHeaderCell\";\nimport { GroupHeaderCellValue } from \"../GroupHeaderCellValue\";\n\nimport { FakeGroupCell } from \"./FakeGroupCell\";\n\nimport groupHeaderRowCss from \"./GroupHeaderRow.css\";\n\nconst withBaseName = makePrefixer(\"saltGridGroupHeaderRow\");\n\nexport interface GroupHeaderRowProps<T> {\n groups: GridColumnGroupModel[];\n gap?: number;\n}\n\nexport function GroupHeaderRow<T>(props: GroupHeaderRowProps<T>) {\n const { groups, gap } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-group-header-row\",\n css: groupHeaderRowCss,\n window: targetWindow,\n });\n\n if (groups.length === 0) {\n return null;\n }\n return (\n <tr className={withBaseName()}>\n {groups.map((group) => {\n const Cell = group.data.headerComponent || GroupHeaderCell;\n const CellValue =\n group.data.headerValueComponent || GroupHeaderCellValue;\n return (\n <Cell key={group.data.id} group={group}>\n <CellValue group={group} />\n </Cell>\n );\n })}\n {gap !== undefined && gap > 0 ? <FakeGroupCell /> : null}\n </tr>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","groupHeaderRowCss","jsxs","GroupHeaderCell","GroupHeaderCellValue","jsx","FakeGroupCell"],"mappings":";;;;;;;;;;;AAYA,MAAM,YAAA,GAAeA,kBAAa,wBAAwB,CAAA;AAOnD,SAAS,eAAkB,KAA+B,EAAA;AAC/D,EAAM,MAAA,EAAE,MAAQ,EAAA,GAAA,EAAQ,GAAA,KAAA;AAExB,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,uBAAA;AAAA,IACR,GAAK,EAAAC,gBAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAI,IAAA,MAAA,CAAO,WAAW,CAAG,EAAA;AACvB,IAAO,OAAA,IAAA;AAAA;AAET,EAAA,uBACGC,eAAA,CAAA,IAAA,EAAA,EAAG,SAAW,EAAA,YAAA,EACZ,EAAA,QAAA,EAAA;AAAA,IAAO,MAAA,CAAA,GAAA,CAAI,CAAC,KAAU,KAAA;AACrB,MAAM,MAAA,IAAA,GAAO,KAAM,CAAA,IAAA,CAAK,eAAmB,IAAAC,+BAAA;AAC3C,MAAM,MAAA,SAAA,GACJ,KAAM,CAAA,IAAA,CAAK,oBAAwB,IAAAC,yCAAA;AACrC,MACE,uBAAAC,cAAA,CAAC,QAAyB,KACxB,EAAA,QAAA,kBAAAA,cAAA,CAAC,aAAU,KAAc,EAAA,CAAA,EAAA,EADhB,KAAM,CAAA,IAAA,CAAK,EAEtB,CAAA;AAAA,KAEH,CAAA;AAAA,IACA,QAAQ,MAAa,IAAA,GAAA,GAAM,CAAI,mBAAAA,cAAA,CAACC,+BAAc,CAAK,GAAA;AAAA,GACtD,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"GroupHeaderRow.js","sources":["../src/internal/GroupHeaderRow.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport type { GridColumnGroupModel } from \"../Grid\";\nimport { GroupHeaderCell } from \"../GroupHeaderCell\";\nimport { GroupHeaderCellValue } from \"../GroupHeaderCellValue\";\n\nimport { FakeGroupCell } from \"./FakeGroupCell\";\n\nimport groupHeaderRowCss from \"./GroupHeaderRow.css\";\n\nconst withBaseName = makePrefixer(\"saltGridGroupHeaderRow\");\n\nexport interface GroupHeaderRowProps<T> {\n groups: GridColumnGroupModel[];\n gap?: number;\n}\n\nexport function GroupHeaderRow<T>(props: GroupHeaderRowProps<T>) {\n const { groups, gap } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-group-header-row\",\n css: groupHeaderRowCss,\n window: targetWindow,\n });\n\n if (groups.length === 0) {\n return null;\n }\n return (\n <tr className={withBaseName()}>\n {groups.map((group) => {\n const Cell = group.data.headerComponent || GroupHeaderCell;\n const CellValue =\n group.data.headerValueComponent || GroupHeaderCellValue;\n return (\n <Cell key={group.data.id} group={group}>\n <CellValue group={group} />\n </Cell>\n );\n })}\n {gap !== undefined && gap > 0 ? <FakeGroupCell /> : null}\n </tr>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","groupHeaderRowCss","jsxs","GroupHeaderCell","GroupHeaderCellValue","jsx","FakeGroupCell"],"mappings":";;;;;;;;;;;AAYA,MAAM,YAAA,GAAeA,kBAAa,wBAAwB,CAAA;AAOnD,SAAS,eAAkB,KAAA,EAA+B;AAC/D,EAAA,MAAM,EAAE,MAAA,EAAQ,GAAA,EAAI,GAAI,KAAA;AAExB,EAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,uBAAA;AAAA,IACR,GAAA,EAAKC,gBAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,uBACEC,eAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAW,YAAA,EAAa,EACzB,QAAA,EAAA;AAAA,IAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACrB,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,CAAK,eAAA,IAAmBC,+BAAA;AAC3C,MAAA,MAAM,SAAA,GACJ,KAAA,CAAM,IAAA,CAAK,oBAAA,IAAwBC,yCAAA;AACrC,MAAA,uBACEC,cAAA,CAAC,QAAyB,KAAA,EACxB,QAAA,kBAAAA,cAAA,CAAC,aAAU,KAAA,EAAc,CAAA,EAAA,EADhB,KAAA,CAAM,IAAA,CAAK,EAEtB,CAAA;AAAA,IAEJ,CAAC,CAAA;AAAA,IACA,QAAQ,MAAA,IAAa,GAAA,GAAM,CAAA,mBAAIA,cAAA,CAACC,+BAAc,CAAA,GAAK;AAAA,GAAA,EACtD,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"HeaderRow.js","sources":["../src/internal/HeaderRow.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport { useCursorContext } from \"../CursorContext\";\nimport type { GridColumnModel } from \"../Grid\";\nimport { HeaderCell } from \"../HeaderCell\";\nimport { HeaderCellValue } from \"../HeaderCellValue\";\n\nimport { FakeHeaderCell } from \"./FakeHeaderCell\";\n\nimport headerRowCss from \"./HeaderRow.css\";\n\nconst withBaseName = makePrefixer(\"saltGridHeaderRow\");\n\nexport interface HeaderRowProps<T> {\n columns: GridColumnModel<T>[];\n gap?: number;\n}\n\nexport function HeaderRow<T>(props: HeaderRowProps<T>) {\n const { columns, gap } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-header-row\",\n css: headerRowCss,\n window: targetWindow,\n });\n\n const { cursorColIdx, focusedPart, headerIsFocusable } = useCursorContext();\n\n const ariaRowIndex = headerIsFocusable ? 1 : undefined;\n\n return (\n <tr className={withBaseName()} aria-rowindex={ariaRowIndex}>\n {columns.map((column) => {\n const Cell = column.info.props.headerComponent || HeaderCell;\n const CellValue =\n column.info.props.headerValueComponent || HeaderCellValue;\n const isFocused =\n focusedPart === \"header\" && cursorColIdx === column.index;\n return (\n <Cell\n key={column.info.props.id}\n column={column}\n isFocused={isFocused}\n >\n <CellValue column={column} isFocused={isFocused} />\n </Cell>\n );\n })}\n {gap !== undefined && gap > 0 ? <FakeHeaderCell /> : null}\n </tr>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","headerRowCss","useCursorContext","HeaderCell","HeaderCellValue","jsx","FakeHeaderCell"],"mappings":";;;;;;;;;;;;AAaA,MAAM,YAAA,GAAeA,kBAAa,mBAAmB,CAAA;AAO9C,SAAS,UAAa,KAA0B,EAAA;AACrD,EAAM,MAAA,EAAE,OAAS,EAAA,GAAA,EAAQ,GAAA,KAAA;AAEzB,EAAA,MAAM,eAAeC,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,EAAA,MAAM,EAAE,YAAA,EAAc,WAAa,EAAA,iBAAA,KAAsBC,8BAAiB,EAAA;AAE1E,EAAM,MAAA,YAAA,GAAe,oBAAoB,CAAI,GAAA,MAAA;AAE7C,EAAA,uCACG,IAAG,EAAA,EAAA,SAAA,EAAW,YAAa,EAAA,EAAG,iBAAe,YAC3C,EAAA,QAAA,EAAA;AAAA,IAAQ,OAAA,CAAA,GAAA,CAAI,CAAC,MAAW,KAAA;AACvB,MAAA,MAAM,IAAO,GAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,eAAmB,IAAAC,qBAAA;AAClD,MAAA,MAAM,SACJ,GAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,oBAAwB,IAAAC,+BAAA;AAC5C,MAAA,MAAM,SACJ,GAAA,WAAA,KAAgB,QAAY,IAAA,YAAA,KAAiB,MAAO,CAAA,KAAA;AACtD,MACE,uBAAAC,cAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UAEC,MAAA;AAAA,UACA,SAAA;AAAA,UAEA,QAAA,kBAAAA,cAAA,CAAC,SAAU,EAAA,EAAA,MAAA,EAAgB,SAAsB,EAAA;AAAA,SAAA;AAAA,QAJ5C,MAAA,CAAO,KAAK,KAAM,CAAA;AAAA,OAKzB;AAAA,KAEH,CAAA;AAAA,IACA,QAAQ,MAAa,IAAA,GAAA,GAAM,CAAI,mBAAAA,cAAA,CAACC,iCAAe,CAAK,GAAA;AAAA,GACvD,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"HeaderRow.js","sources":["../src/internal/HeaderRow.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\n\nimport { useCursorContext } from \"../CursorContext\";\nimport type { GridColumnModel } from \"../Grid\";\nimport { HeaderCell } from \"../HeaderCell\";\nimport { HeaderCellValue } from \"../HeaderCellValue\";\n\nimport { FakeHeaderCell } from \"./FakeHeaderCell\";\n\nimport headerRowCss from \"./HeaderRow.css\";\n\nconst withBaseName = makePrefixer(\"saltGridHeaderRow\");\n\nexport interface HeaderRowProps<T> {\n columns: GridColumnModel<T>[];\n gap?: number;\n}\n\nexport function HeaderRow<T>(props: HeaderRowProps<T>) {\n const { columns, gap } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-header-row\",\n css: headerRowCss,\n window: targetWindow,\n });\n\n const { cursorColIdx, focusedPart, headerIsFocusable } = useCursorContext();\n\n const ariaRowIndex = headerIsFocusable ? 1 : undefined;\n\n return (\n <tr className={withBaseName()} aria-rowindex={ariaRowIndex}>\n {columns.map((column) => {\n const Cell = column.info.props.headerComponent || HeaderCell;\n const CellValue =\n column.info.props.headerValueComponent || HeaderCellValue;\n const isFocused =\n focusedPart === \"header\" && cursorColIdx === column.index;\n return (\n <Cell\n key={column.info.props.id}\n column={column}\n isFocused={isFocused}\n >\n <CellValue column={column} isFocused={isFocused} />\n </Cell>\n );\n })}\n {gap !== undefined && gap > 0 ? <FakeHeaderCell /> : null}\n </tr>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","headerRowCss","useCursorContext","HeaderCell","HeaderCellValue","jsx","FakeHeaderCell"],"mappings":";;;;;;;;;;;;AAaA,MAAM,YAAA,GAAeA,kBAAa,mBAAmB,CAAA;AAO9C,SAAS,UAAa,KAAA,EAA0B;AACrD,EAAA,MAAM,EAAE,OAAA,EAAS,GAAA,EAAI,GAAI,KAAA;AAEzB,EAAA,MAAM,eAAeC,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,MAAM,EAAE,YAAA,EAAc,WAAA,EAAa,iBAAA,KAAsBC,8BAAA,EAAiB;AAE1E,EAAA,MAAM,YAAA,GAAe,oBAAoB,CAAA,GAAI,MAAA;AAE7C,EAAA,uCACG,IAAA,EAAA,EAAG,SAAA,EAAW,YAAA,EAAa,EAAG,iBAAe,YAAA,EAC3C,QAAA,EAAA;AAAA,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AACvB,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,eAAA,IAAmBC,qBAAA;AAClD,MAAA,MAAM,SAAA,GACJ,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,oBAAA,IAAwBC,+BAAA;AAC5C,MAAA,MAAM,SAAA,GACJ,WAAA,KAAgB,QAAA,IAAY,YAAA,KAAiB,MAAA,CAAO,KAAA;AACtD,MAAA,uBACEC,cAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UAEC,MAAA;AAAA,UACA,SAAA;AAAA,UAEA,QAAA,kBAAAA,cAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAgB,SAAA,EAAsB;AAAA,SAAA;AAAA,QAJ5C,MAAA,CAAO,KAAK,KAAA,CAAM;AAAA,OAKzB;AAAA,IAEJ,CAAC,CAAA;AAAA,IACA,QAAQ,MAAA,IAAa,GAAA,GAAM,CAAA,mBAAIA,cAAA,CAACC,iCAAe,CAAA,GAAK;AAAA,GAAA,EACvD,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"LeftPart.js","sources":["../src/internal/LeftPart.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport type { RefObject } from \"react\";\n\nimport type { GridColumnModel, GridRowModel } from \"../Grid\";\nimport type { CellValidationState } from \"../GridColumn\";\nimport { useActiveOnWheel } from \"./gridHooks\";\nimport leftPartCss from \"./LeftPart.css\";\nimport { TableBody } from \"./TableBody\";\nimport { TableColGroup } from \"./TableColGroup\";\n\nconst withBaseName = makePrefixer(\"saltGridLeftPart\");\n\nexport interface LeftPartProps<T> {\n leftRef: RefObject<HTMLDivElement>;\n onWheel: EventListener;\n rightShadow?: boolean;\n columns: GridColumnModel<T>[];\n rows: GridRowModel<T>[];\n hoverOverRowKey?: string;\n setHoverOverRowKey: (key: string | undefined) => void;\n zebra?: boolean;\n getRowValidationStatus?: (\n row: GridRowModel<T>,\n ) => CellValidationState | undefined;\n}\n\nexport function LeftPart<T>(props: LeftPartProps<T>) {\n const {\n leftRef,\n onWheel,\n rightShadow,\n columns,\n rows,\n hoverOverRowKey,\n setHoverOverRowKey,\n zebra,\n getRowValidationStatus,\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-left-part\",\n css: leftPartCss,\n window: targetWindow,\n });\n\n const tableRef = useActiveOnWheel(onWheel);\n\n if (columns.length === 0) {\n return null;\n }\n\n return (\n <div\n ref={leftRef}\n className={clsx(withBaseName(), {\n [withBaseName(\"rightShadow\")]: rightShadow,\n })}\n >\n <div className={withBaseName(\"space\")} data-testid=\"grid-left-part\">\n <table ref={tableRef} role=\"presentation\">\n <TableColGroup columns={columns} />\n <TableBody\n columns={columns}\n rows={rows}\n hoverRowKey={hoverOverRowKey}\n setHoverRowKey={setHoverOverRowKey}\n zebra={zebra}\n getRowValidationStatus={getRowValidationStatus}\n />\n </table>\n </div>\n </div>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","leftPartCss","useActiveOnWheel","jsx","clsx","jsxs","TableColGroup","TableBody"],"mappings":";;;;;;;;;;;;AAaA,MAAM,YAAA,GAAeA,kBAAa,kBAAkB,CAAA;AAgB7C,SAAS,SAAY,KAAyB,EAAA;AACnD,EAAM,MAAA;AAAA,IACJ,OAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,KAAA;AAAA,IACA;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,EAAM,MAAA,QAAA,GAAWC,2BAAiB,OAAO,CAAA;AAEzC,EAAI,IAAA,OAAA,CAAQ,WAAW,CAAG,EAAA;AACxB,IAAO,OAAA,IAAA;AAAA;AAGT,EACE,uBAAAC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAK,EAAA,OAAA;AAAA,MACL,SAAA,EAAWC,SAAK,CAAA,YAAA,EAAgB,EAAA;AAAA,QAC9B,CAAC,YAAA,CAAa,aAAa,CAAC,GAAG;AAAA,OAChC,CAAA;AAAA,MAED,QAAC,kBAAAD,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,YAAA,CAAa,OAAO,CAAA,EAAG,aAAY,EAAA,gBAAA,EACjD,QAAC,kBAAAE,eAAA,CAAA,OAAA,EAAA,EAAM,GAAK,EAAA,QAAA,EAAU,MAAK,cACzB,EAAA,QAAA,EAAA;AAAA,wBAAAF,cAAA,CAACG,+BAAc,OAAkB,EAAA,CAAA;AAAA,wBACjCH,cAAA;AAAA,UAACI,mBAAA;AAAA,UAAA;AAAA,YACC,OAAA;AAAA,YACA,IAAA;AAAA,YACA,WAAa,EAAA,eAAA;AAAA,YACb,cAAgB,EAAA,kBAAA;AAAA,YAChB,KAAA;AAAA,YACA;AAAA;AAAA;AACF,OAAA,EACF,CACF,EAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"LeftPart.js","sources":["../src/internal/LeftPart.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport type { RefObject } from \"react\";\n\nimport type { GridColumnModel, GridRowModel } from \"../Grid\";\nimport type { CellValidationState } from \"../GridColumn\";\nimport { useActiveOnWheel } from \"./gridHooks\";\nimport leftPartCss from \"./LeftPart.css\";\nimport { TableBody } from \"./TableBody\";\nimport { TableColGroup } from \"./TableColGroup\";\n\nconst withBaseName = makePrefixer(\"saltGridLeftPart\");\n\nexport interface LeftPartProps<T> {\n leftRef: RefObject<HTMLDivElement>;\n onWheel: EventListener;\n rightShadow?: boolean;\n columns: GridColumnModel<T>[];\n rows: GridRowModel<T>[];\n hoverOverRowKey?: string;\n setHoverOverRowKey: (key: string | undefined) => void;\n zebra?: boolean;\n getRowValidationStatus?: (\n row: GridRowModel<T>,\n ) => CellValidationState | undefined;\n}\n\nexport function LeftPart<T>(props: LeftPartProps<T>) {\n const {\n leftRef,\n onWheel,\n rightShadow,\n columns,\n rows,\n hoverOverRowKey,\n setHoverOverRowKey,\n zebra,\n getRowValidationStatus,\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-left-part\",\n css: leftPartCss,\n window: targetWindow,\n });\n\n const tableRef = useActiveOnWheel(onWheel);\n\n if (columns.length === 0) {\n return null;\n }\n\n return (\n <div\n ref={leftRef}\n className={clsx(withBaseName(), {\n [withBaseName(\"rightShadow\")]: rightShadow,\n })}\n >\n <div className={withBaseName(\"space\")} data-testid=\"grid-left-part\">\n <table ref={tableRef} role=\"presentation\">\n <TableColGroup columns={columns} />\n <TableBody\n columns={columns}\n rows={rows}\n hoverRowKey={hoverOverRowKey}\n setHoverRowKey={setHoverOverRowKey}\n zebra={zebra}\n getRowValidationStatus={getRowValidationStatus}\n />\n </table>\n </div>\n </div>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","leftPartCss","useActiveOnWheel","jsx","clsx","jsxs","TableColGroup","TableBody"],"mappings":";;;;;;;;;;;;AAaA,MAAM,YAAA,GAAeA,kBAAa,kBAAkB,CAAA;AAgB7C,SAAS,SAAY,KAAA,EAAyB;AACnD,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,eAAA;AAAA,IACA,kBAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,gBAAA;AAAA,IACR,GAAA,EAAKC,UAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,QAAA,GAAWC,2BAAiB,OAAO,CAAA;AAEzC,EAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEC,cAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,GAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAWC,SAAA,CAAK,YAAA,EAAa,EAAG;AAAA,QAC9B,CAAC,YAAA,CAAa,aAAa,CAAC,GAAG;AAAA,OAChC,CAAA;AAAA,MAED,QAAA,kBAAAD,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,CAAa,OAAO,CAAA,EAAG,aAAA,EAAY,gBAAA,EACjD,QAAA,kBAAAE,eAAA,CAAC,OAAA,EAAA,EAAM,GAAA,EAAK,QAAA,EAAU,MAAK,cAAA,EACzB,QAAA,EAAA;AAAA,wBAAAF,cAAA,CAACG,+BAAc,OAAA,EAAkB,CAAA;AAAA,wBACjCH,cAAA;AAAA,UAACI,mBAAA;AAAA,UAAA;AAAA,YACC,OAAA;AAAA,YACA,IAAA;AAAA,YACA,WAAA,EAAa,eAAA;AAAA,YACb,cAAA,EAAgB,kBAAA;AAAA,YAChB,KAAA;AAAA,YACA;AAAA;AAAA;AACF,OAAA,EACF,CAAA,EACF;AAAA;AAAA,GACF;AAEJ;;;;"}