@salt-ds/data-grid 1.0.3 → 1.0.4-alpha.1

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 (103) hide show
  1. package/dist-cjs/packages/grid/src/BaseCell.css.js +1 -1
  2. package/dist-cjs/packages/grid/src/BaseCell.js +35 -3
  3. package/dist-cjs/packages/grid/src/BaseCell.js.map +1 -1
  4. package/dist-cjs/packages/grid/src/ColumnSortContext.js +20 -0
  5. package/dist-cjs/packages/grid/src/ColumnSortContext.js.map +1 -0
  6. package/dist-cjs/packages/grid/src/Grid.js +211 -128
  7. package/dist-cjs/packages/grid/src/Grid.js.map +1 -1
  8. package/dist-cjs/packages/grid/src/GridColumn.js +1 -1
  9. package/dist-cjs/packages/grid/src/GridColumn.js.map +1 -1
  10. package/dist-cjs/packages/grid/src/HeaderCell.css.js +1 -1
  11. package/dist-cjs/packages/grid/src/HeaderCell.js +66 -2
  12. package/dist-cjs/packages/grid/src/HeaderCell.js.map +1 -1
  13. package/dist-cjs/packages/grid/src/NumericColumn.js +12 -0
  14. package/dist-cjs/packages/grid/src/NumericColumn.js.map +1 -1
  15. package/dist-cjs/packages/grid/src/RowSelectionCheckboxCellValue.js +2 -2
  16. package/dist-cjs/packages/grid/src/RowSelectionCheckboxCellValue.js.map +1 -1
  17. package/dist-cjs/packages/grid/src/RowSelectionCheckboxColumn.js +14 -7
  18. package/dist-cjs/packages/grid/src/RowSelectionCheckboxColumn.js.map +1 -1
  19. package/dist-cjs/packages/grid/src/RowSelectionCheckboxHeaderCellValue.js +2 -2
  20. package/dist-cjs/packages/grid/src/RowSelectionCheckboxHeaderCellValue.js.map +1 -1
  21. package/dist-cjs/packages/grid/src/RowSelectionRadioCellValue.js +2 -2
  22. package/dist-cjs/packages/grid/src/RowSelectionRadioCellValue.js.map +1 -1
  23. package/dist-cjs/packages/grid/src/RowSelectionRadioColumn.js +11 -7
  24. package/dist-cjs/packages/grid/src/RowSelectionRadioColumn.js.map +1 -1
  25. package/dist-cjs/packages/grid/src/RowSelectionRadioHeaderCell.js +2 -2
  26. package/dist-cjs/packages/grid/src/RowSelectionRadioHeaderCell.js.map +1 -1
  27. package/dist-cjs/packages/grid/src/RowValidationStatus.js +13 -0
  28. package/dist-cjs/packages/grid/src/RowValidationStatus.js.map +1 -0
  29. package/dist-cjs/packages/grid/src/TextCellEditor.js +12 -0
  30. package/dist-cjs/packages/grid/src/TextCellEditor.js.map +1 -1
  31. package/dist-cjs/packages/grid/src/index.js +1 -0
  32. package/dist-cjs/packages/grid/src/index.js.map +1 -1
  33. package/dist-cjs/packages/grid/src/internal/Cell.css.js +1 -1
  34. package/dist-cjs/packages/grid/src/internal/CellStatusIcons.js +46 -0
  35. package/dist-cjs/packages/grid/src/internal/CellStatusIcons.js.map +1 -0
  36. package/dist-cjs/packages/grid/src/internal/LeftPart.js +4 -2
  37. package/dist-cjs/packages/grid/src/internal/LeftPart.js.map +1 -1
  38. package/dist-cjs/packages/grid/src/internal/MiddlePart.js +4 -2
  39. package/dist-cjs/packages/grid/src/internal/MiddlePart.js.map +1 -1
  40. package/dist-cjs/packages/grid/src/internal/RightPart.js +4 -2
  41. package/dist-cjs/packages/grid/src/internal/RightPart.js.map +1 -1
  42. package/dist-cjs/packages/grid/src/internal/TableBody.js +11 -4
  43. package/dist-cjs/packages/grid/src/internal/TableBody.js.map +1 -1
  44. package/dist-cjs/packages/grid/src/internal/TableRow.css.js +1 -1
  45. package/dist-cjs/packages/grid/src/internal/TableRow.js +33 -12
  46. package/dist-cjs/packages/grid/src/internal/TableRow.js.map +1 -1
  47. package/dist-es/packages/grid/src/BaseCell.css.js +1 -1
  48. package/dist-es/packages/grid/src/BaseCell.js +35 -3
  49. package/dist-es/packages/grid/src/BaseCell.js.map +1 -1
  50. package/dist-es/packages/grid/src/ColumnSortContext.js +15 -0
  51. package/dist-es/packages/grid/src/ColumnSortContext.js.map +1 -0
  52. package/dist-es/packages/grid/src/Grid.js +211 -129
  53. package/dist-es/packages/grid/src/Grid.js.map +1 -1
  54. package/dist-es/packages/grid/src/GridColumn.js +1 -1
  55. package/dist-es/packages/grid/src/GridColumn.js.map +1 -1
  56. package/dist-es/packages/grid/src/HeaderCell.css.js +1 -1
  57. package/dist-es/packages/grid/src/HeaderCell.js +66 -2
  58. package/dist-es/packages/grid/src/HeaderCell.js.map +1 -1
  59. package/dist-es/packages/grid/src/NumericColumn.js +12 -0
  60. package/dist-es/packages/grid/src/NumericColumn.js.map +1 -1
  61. package/dist-es/packages/grid/src/RowSelectionCheckboxCellValue.js +2 -2
  62. package/dist-es/packages/grid/src/RowSelectionCheckboxCellValue.js.map +1 -1
  63. package/dist-es/packages/grid/src/RowSelectionCheckboxColumn.js +14 -7
  64. package/dist-es/packages/grid/src/RowSelectionCheckboxColumn.js.map +1 -1
  65. package/dist-es/packages/grid/src/RowSelectionCheckboxHeaderCellValue.js +2 -2
  66. package/dist-es/packages/grid/src/RowSelectionCheckboxHeaderCellValue.js.map +1 -1
  67. package/dist-es/packages/grid/src/RowSelectionRadioCellValue.js +1 -1
  68. package/dist-es/packages/grid/src/RowSelectionRadioCellValue.js.map +1 -1
  69. package/dist-es/packages/grid/src/RowSelectionRadioColumn.js +11 -7
  70. package/dist-es/packages/grid/src/RowSelectionRadioColumn.js.map +1 -1
  71. package/dist-es/packages/grid/src/RowSelectionRadioHeaderCell.js +1 -1
  72. package/dist-es/packages/grid/src/RowSelectionRadioHeaderCell.js.map +1 -1
  73. package/dist-es/packages/grid/src/RowValidationStatus.js +9 -0
  74. package/dist-es/packages/grid/src/RowValidationStatus.js.map +1 -0
  75. package/dist-es/packages/grid/src/TextCellEditor.js +12 -0
  76. package/dist-es/packages/grid/src/TextCellEditor.js.map +1 -1
  77. package/dist-es/packages/grid/src/index.js +1 -1
  78. package/dist-es/packages/grid/src/internal/Cell.css.js +1 -1
  79. package/dist-es/packages/grid/src/internal/CellStatusIcons.js +40 -0
  80. package/dist-es/packages/grid/src/internal/CellStatusIcons.js.map +1 -0
  81. package/dist-es/packages/grid/src/internal/LeftPart.js +4 -2
  82. package/dist-es/packages/grid/src/internal/LeftPart.js.map +1 -1
  83. package/dist-es/packages/grid/src/internal/MiddlePart.js +4 -2
  84. package/dist-es/packages/grid/src/internal/MiddlePart.js.map +1 -1
  85. package/dist-es/packages/grid/src/internal/RightPart.js +4 -2
  86. package/dist-es/packages/grid/src/internal/RightPart.js.map +1 -1
  87. package/dist-es/packages/grid/src/internal/TableBody.js +11 -4
  88. package/dist-es/packages/grid/src/internal/TableBody.js.map +1 -1
  89. package/dist-es/packages/grid/src/internal/TableRow.css.js +1 -1
  90. package/dist-es/packages/grid/src/internal/TableRow.js +33 -12
  91. package/dist-es/packages/grid/src/internal/TableRow.js.map +1 -1
  92. package/dist-es/packages/grid/src/internal/gridHooks.js +1 -1
  93. package/dist-types/ColumnSortContext.d.ts +12 -0
  94. package/dist-types/Grid.d.ts +7 -1
  95. package/dist-types/GridColumn.d.ts +54 -2
  96. package/dist-types/RowValidationStatus.d.ts +7 -0
  97. package/dist-types/internal/CellStatusIcons.d.ts +4 -0
  98. package/dist-types/internal/LeftPart.d.ts +2 -0
  99. package/dist-types/internal/MiddlePart.d.ts +2 -0
  100. package/dist-types/internal/RightPart.d.ts +2 -0
  101. package/dist-types/internal/TableBody.d.ts +2 -0
  102. package/dist-types/internal/TableRow.d.ts +2 -1
  103. package/package.json +6 -4
@@ -11,13 +11,13 @@ var clsx = require('clsx');
11
11
  var FakeCell = require('./FakeCell.js');
12
12
  var DefaultCellValue = require('./DefaultCellValue.js');
13
13
  var GridContext = require('../GridContext.js');
14
+ var RowValidationStatus = require('../RowValidationStatus.js');
14
15
 
15
16
  const withBaseName = core.makePrefixer("saltGridTableRow");
16
17
  function TableRow(props) {
17
18
  const {
18
19
  row,
19
20
  isSelected,
20
- isFollowedBySelected,
21
21
  zebra,
22
22
  isHoverOver,
23
23
  columns,
@@ -27,7 +27,8 @@ function TableRow(props) {
27
27
  gap,
28
28
  editorColIdx,
29
29
  isCellSelected,
30
- headerIsFocusable
30
+ headerIsFocusable,
31
+ validationStatus: rowValidationStatus
31
32
  } = props;
32
33
  const grid = GridContext.useGridContext();
33
34
  if (!row.key) {
@@ -41,8 +42,8 @@ function TableRow(props) {
41
42
  [withBaseName("zebra")]: zebra,
42
43
  [withBaseName("hover")]: isHoverOver,
43
44
  [withBaseName("selected")]: isSelected,
44
- [withBaseName("followedBySelected")]: isFollowedBySelected && !isSelected,
45
- [withBaseName("first")]: row.index === 0
45
+ [withBaseName("first")]: row.index === 0,
46
+ [withBaseName(`validationStatus-${rowValidationStatus}`)]: rowValidationStatus
46
47
  }),
47
48
  onMouseEnter,
48
49
  onMouseLeave,
@@ -51,6 +52,7 @@ function TableRow(props) {
51
52
  role: "row",
52
53
  children: [
53
54
  columns.map((column, i) => {
55
+ var _a, _b, _c, _d;
54
56
  const colKey = column.info.props.id;
55
57
  const editorInfo = grid.getEditor(column.info.props.id);
56
58
  const isEditable = !!editorInfo;
@@ -71,19 +73,38 @@ function TableRow(props) {
71
73
  const value = column.info.props.getValue && row.data ? column.info.props.getValue(row.data) : null;
72
74
  const isFocused = cursorColIdx === column.index;
73
75
  const isSelected2 = isCellSelected && isCellSelected(row.index, column.index);
74
- return /* @__PURE__ */ jsxRuntime.jsx(Cell, {
76
+ const validationFnArg = {
75
77
  row,
76
78
  column,
77
79
  isFocused,
78
- isSelected: isSelected2,
79
- isEditable,
80
- children: /* @__PURE__ */ jsxRuntime.jsx(CellValue, {
81
- column,
80
+ value
81
+ };
82
+ const validationStatus = (_b = (_a = column.info.props).getValidationStatus) == null ? void 0 : _b.call(_a, validationFnArg);
83
+ const validationMessage = validationStatus && ((_d = (_c = column.info.props).getValidationMessage) == null ? void 0 : _d.call(_c, validationFnArg));
84
+ return /* @__PURE__ */ jsxRuntime.jsx(RowValidationStatus.RowValidationStatusContext.Provider, {
85
+ value: { status: rowValidationStatus },
86
+ children: /* @__PURE__ */ jsxRuntime.jsx(Cell, {
82
87
  row,
88
+ column,
89
+ isFocused,
90
+ isSelected: isSelected2,
91
+ isEditable,
92
+ validationStatus,
93
+ validationMessage,
94
+ validationType: column.info.props.validationType,
83
95
  value,
84
- isFocused
85
- })
86
- }, colKey);
96
+ align: column.info.props.align,
97
+ children: /* @__PURE__ */ jsxRuntime.jsx(CellValue, {
98
+ column,
99
+ row,
100
+ value,
101
+ isFocused,
102
+ validationStatus,
103
+ validationMessage,
104
+ validationType: column.info.props.validationType
105
+ })
106
+ }, colKey)
107
+ });
87
108
  }),
88
109
  gap !== void 0 && gap > 0 ? /* @__PURE__ */ jsxRuntime.jsx(FakeCell.FakeCell, {
89
110
  row
@@ -1 +1 @@
1
- {"version":3,"file":"TableRow.js","sources":["../src/internal/TableRow.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n isValidElement,\n MouseEventHandler,\n} from \"react\";\nimport \"./TableRow.css\";\nimport { BaseCell } from \"../BaseCell\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { GridColumnModel, GridRowModel } from \"../Grid\";\nimport { FakeCell } from \"./FakeCell\";\nimport { DefaultCellValue } from \"./DefaultCellValue\";\nimport { useGridContext } from \"../GridContext\";\n\nconst withBaseName = makePrefixer(\"saltGridTableRow\");\n\nexport interface TableRowProps<T> {\n row: GridRowModel<T>;\n isSelected?: boolean; // Render selected background and the bottom border. Top border is rendered by the previous row (it gets isFollowedBySelected = true)\n isFollowedBySelected?: boolean; // Next row is selected. Render the bottom border.\n isHoverOver?: boolean;\n zebra?: boolean;\n columns: GridColumnModel<T>[];\n cursorColIdx?: number;\n onMouseEnter?: MouseEventHandler<HTMLTableRowElement>;\n onMouseLeave?: MouseEventHandler<HTMLTableRowElement>;\n gap?: number;\n editorColIdx?: number;\n isCellSelected?: (rowIdx: number, colIdx: number) => boolean;\n headerIsFocusable?: boolean;\n}\n\nexport function TableRow<T>(props: TableRowProps<T>) {\n const {\n row,\n isSelected,\n isFollowedBySelected,\n zebra,\n isHoverOver,\n columns,\n onMouseEnter,\n onMouseLeave,\n cursorColIdx,\n gap,\n editorColIdx,\n isCellSelected,\n headerIsFocusable,\n } = props;\n\n const grid = useGridContext();\n\n if (!row.key) {\n throw new Error(`Invalid row`);\n }\n\n const ariaRowIndex = headerIsFocusable ? row.index + 2 : row.index + 1;\n\n return (\n <tr\n aria-rowindex={ariaRowIndex}\n aria-selected={isSelected ? true : undefined}\n className={clsx(withBaseName(), {\n [withBaseName(\"zebra\")]: zebra,\n [withBaseName(\"hover\")]: isHoverOver,\n [withBaseName(\"selected\")]: isSelected,\n [withBaseName(\"followedBySelected\")]:\n isFollowedBySelected && !isSelected,\n [withBaseName(\"first\")]: row.index === 0,\n })}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n data-row-index={row.index}\n data-row-key={row.key}\n role=\"row\"\n >\n {columns.map((column, i) => {\n const colKey = column.info.props.id;\n const editorInfo = grid.getEditor(column.info.props.id);\n const isEditable = !!editorInfo;\n\n if (editorColIdx === column.index) {\n if (isEditable) {\n if (isValidElement(editorInfo.children)) {\n const editorElement = Children.only(editorInfo.children);\n return cloneElement(editorElement, {\n key: colKey,\n row,\n column,\n } as any);\n }\n }\n }\n\n const Cell = column.info.props.cellComponent || BaseCell;\n const CellValue =\n column.info.props.cellValueComponent || DefaultCellValue;\n const value =\n column.info.props.getValue && row.data\n ? column.info.props.getValue(row.data)\n : null;\n const isFocused = cursorColIdx === column.index;\n const isSelected =\n isCellSelected && isCellSelected(row.index, column.index);\n\n return (\n <Cell\n key={colKey}\n row={row}\n column={column}\n isFocused={isFocused}\n isSelected={isSelected}\n isEditable={isEditable}\n >\n <CellValue\n column={column}\n row={row}\n value={value}\n isFocused={isFocused}\n />\n </Cell>\n );\n })}\n {gap !== undefined && gap > 0 ? <FakeCell row={row} /> : null}\n </tr>\n );\n}\n"],"names":["makePrefixer","useGridContext","jsxs","clsx","isValidElement","Children","cloneElement","BaseCell","DefaultCellValue","isSelected","jsx","FakeCell"],"mappings":"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"}
1
+ {"version":3,"file":"TableRow.js","sources":["../src/internal/TableRow.tsx"],"sourcesContent":["import {\n Children,\n cloneElement,\n isValidElement,\n MouseEventHandler,\n} from \"react\";\nimport \"./TableRow.css\";\nimport { BaseCell } from \"../BaseCell\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { clsx } from \"clsx\";\nimport { GridColumnModel, GridRowModel } from \"../Grid\";\nimport { FakeCell } from \"./FakeCell\";\nimport { DefaultCellValue } from \"./DefaultCellValue\";\nimport { useGridContext } from \"../GridContext\";\nimport { CellValidationState } from \"../GridColumn\";\nimport { RowValidationStatusContext } from \"../RowValidationStatus\";\n\nconst withBaseName = makePrefixer(\"saltGridTableRow\");\n\nexport interface TableRowProps<T> {\n row: GridRowModel<T>;\n isSelected?: boolean;\n isHoverOver?: boolean;\n zebra?: boolean;\n columns: GridColumnModel<T>[];\n cursorColIdx?: number;\n onMouseEnter?: MouseEventHandler<HTMLTableRowElement>;\n onMouseLeave?: MouseEventHandler<HTMLTableRowElement>;\n gap?: number;\n editorColIdx?: number;\n isCellSelected?: (rowIdx: number, colIdx: number) => boolean;\n headerIsFocusable?: boolean;\n validationStatus?: CellValidationState;\n}\n\nexport function TableRow<T>(props: TableRowProps<T>) {\n const {\n row,\n isSelected,\n zebra,\n isHoverOver,\n columns,\n onMouseEnter,\n onMouseLeave,\n cursorColIdx,\n gap,\n editorColIdx,\n isCellSelected,\n headerIsFocusable,\n validationStatus: rowValidationStatus,\n } = props;\n\n const grid = useGridContext();\n\n if (!row.key) {\n throw new Error(`Invalid row`);\n }\n\n const ariaRowIndex = headerIsFocusable ? row.index + 2 : row.index + 1;\n\n return (\n <tr\n aria-rowindex={ariaRowIndex}\n aria-selected={isSelected ? true : undefined}\n className={clsx(withBaseName(), {\n [withBaseName(\"zebra\")]: zebra,\n [withBaseName(\"hover\")]: isHoverOver,\n [withBaseName(\"selected\")]: isSelected,\n [withBaseName(\"first\")]: row.index === 0,\n [withBaseName(`validationStatus-${rowValidationStatus}`)]:\n rowValidationStatus,\n })}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n data-row-index={row.index}\n data-row-key={row.key}\n role=\"row\"\n >\n {columns.map((column, i) => {\n const colKey = column.info.props.id;\n const editorInfo = grid.getEditor(column.info.props.id);\n const isEditable = !!editorInfo;\n\n if (editorColIdx === column.index) {\n if (isEditable) {\n if (isValidElement(editorInfo.children)) {\n const editorElement = Children.only(editorInfo.children);\n return cloneElement(editorElement, {\n key: colKey,\n row,\n column,\n } as any);\n }\n }\n }\n\n const Cell = column.info.props.cellComponent || BaseCell;\n const CellValue =\n column.info.props.cellValueComponent || DefaultCellValue;\n const value =\n column.info.props.getValue && row.data\n ? column.info.props.getValue(row.data)\n : null;\n const isFocused = cursorColIdx === column.index;\n const isSelected =\n isCellSelected && isCellSelected(row.index, column.index);\n const validationFnArg = {\n row,\n column,\n isFocused,\n value,\n };\n const validationStatus =\n column.info.props.getValidationStatus?.(validationFnArg);\n const validationMessage =\n validationStatus &&\n column.info.props.getValidationMessage?.(validationFnArg);\n\n return (\n <RowValidationStatusContext.Provider\n value={{ status: rowValidationStatus }}\n >\n <Cell\n key={colKey}\n row={row}\n column={column}\n isFocused={isFocused}\n isSelected={isSelected}\n isEditable={isEditable}\n validationStatus={validationStatus}\n validationMessage={validationMessage}\n validationType={column.info.props.validationType}\n value={value}\n align={column.info.props.align}\n >\n <CellValue\n column={column}\n row={row}\n value={value}\n isFocused={isFocused}\n validationStatus={validationStatus}\n validationMessage={validationMessage}\n validationType={column.info.props.validationType}\n />\n </Cell>\n </RowValidationStatusContext.Provider>\n );\n })}\n {gap !== undefined && gap > 0 ? <FakeCell row={row} /> : null}\n </tr>\n );\n}\n"],"names":["makePrefixer","useGridContext","jsxs","clsx","isValidElement","Children","cloneElement","BaseCell","DefaultCellValue","isSelected","jsx","RowValidationStatusContext","FakeCell"],"mappings":";;;;;;;;;;;;;;;AAiBA,MAAM,YAAA,GAAeA,kBAAa,kBAAkB,CAAA,CAAA;AAkB7C,SAAS,SAAY,KAAyB,EAAA;AACnD,EAAM,MAAA;AAAA,IACJ,GAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,OAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,GAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA,gBAAkB,EAAA,mBAAA;AAAA,GAChB,GAAA,KAAA,CAAA;AAEJ,EAAA,MAAM,OAAOC,0BAAe,EAAA,CAAA;AAE5B,EAAI,IAAA,CAAC,IAAI,GAAK,EAAA;AACZ,IAAM,MAAA,IAAI,MAAM,CAAa,WAAA,CAAA,CAAA,CAAA;AAAA,GAC/B;AAEA,EAAA,MAAM,eAAe,iBAAoB,GAAA,GAAA,CAAI,KAAQ,GAAA,CAAA,GAAI,IAAI,KAAQ,GAAA,CAAA,CAAA;AAErE,EAAA,uBACGC,eAAA,CAAA,IAAA,EAAA;AAAA,IACC,eAAe,EAAA,YAAA;AAAA,IACf,eAAA,EAAe,aAAa,IAAO,GAAA,KAAA,CAAA;AAAA,IACnC,SAAA,EAAWC,SAAK,CAAA,YAAA,EAAgB,EAAA;AAAA,MAC9B,CAAC,YAAa,CAAA,OAAO,CAAI,GAAA,KAAA;AAAA,MACzB,CAAC,YAAa,CAAA,OAAO,CAAI,GAAA,WAAA;AAAA,MACzB,CAAC,YAAa,CAAA,UAAU,CAAI,GAAA,UAAA;AAAA,MAC5B,CAAC,YAAA,CAAa,OAAO,CAAA,GAAI,IAAI,KAAU,KAAA,CAAA;AAAA,MACvC,CAAC,YAAA,CAAa,CAAoB,iBAAA,EAAA,mBAAA,CAAA,CAAqB,CACrD,GAAA,mBAAA;AAAA,KACH,CAAA;AAAA,IACD,YAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAgB,GAAI,CAAA,KAAA;AAAA,IACpB,gBAAc,GAAI,CAAA,GAAA;AAAA,IAClB,IAAK,EAAA,KAAA;AAAA,IAEJ,QAAA,EAAA;AAAA,MAAQ,OAAA,CAAA,GAAA,CAAI,CAAC,MAAA,EAAQ,CAAM,KAAA;AA9ElC,QAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA+EQ,QAAM,MAAA,MAAA,GAAS,MAAO,CAAA,IAAA,CAAK,KAAM,CAAA,EAAA,CAAA;AACjC,QAAA,MAAM,aAAa,IAAK,CAAA,SAAA,CAAU,MAAO,CAAA,IAAA,CAAK,MAAM,EAAE,CAAA,CAAA;AACtD,QAAM,MAAA,UAAA,GAAa,CAAC,CAAC,UAAA,CAAA;AAErB,QAAI,IAAA,YAAA,KAAiB,OAAO,KAAO,EAAA;AACjC,UAAA,IAAI,UAAY,EAAA;AACd,YAAI,IAAAC,oBAAA,CAAe,UAAW,CAAA,QAAQ,CAAG,EAAA;AACvC,cAAA,MAAM,aAAgB,GAAAC,cAAA,CAAS,IAAK,CAAA,UAAA,CAAW,QAAQ,CAAA,CAAA;AACvD,cAAA,OAAOC,mBAAa,aAAe,EAAA;AAAA,gBACjC,GAAK,EAAA,MAAA;AAAA,gBACL,GAAA;AAAA,gBACA,MAAA;AAAA,eACM,CAAA,CAAA;AAAA,aACV;AAAA,WACF;AAAA,SACF;AAEA,QAAA,MAAM,IAAO,GAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,aAAiB,IAAAC,iBAAA,CAAA;AAChD,QAAA,MAAM,SACJ,GAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,kBAAsB,IAAAC,iCAAA,CAAA;AAC1C,QAAA,MAAM,KACJ,GAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,QAAY,IAAA,GAAA,CAAI,IAC9B,GAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,QAAS,CAAA,GAAA,CAAI,IAAI,CACnC,GAAA,IAAA,CAAA;AACN,QAAM,MAAA,SAAA,GAAY,iBAAiB,MAAO,CAAA,KAAA,CAAA;AAC1C,QAAA,MAAMC,cACJ,cAAkB,IAAA,cAAA,CAAe,GAAI,CAAA,KAAA,EAAO,OAAO,KAAK,CAAA,CAAA;AAC1D,QAAA,MAAM,eAAkB,GAAA;AAAA,UACtB,GAAA;AAAA,UACA,MAAA;AAAA,UACA,SAAA;AAAA,UACA,KAAA;AAAA,SACF,CAAA;AACA,QAAA,MAAM,gBACJ,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,IAAK,CAAA,KAAA,EAAM,wBAAlB,IAAwC,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,eAAA,CAAA,CAAA;AAC1C,QAAA,MAAM,oBACJ,gBACA,KAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAO,IAAK,CAAA,KAAA,EAAM,yBAAlB,IAAyC,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,eAAA,CAAA,CAAA,CAAA;AAE3C,QACE,uBAAAC,cAAA,CAACC,+CAA2B,QAA3B,EAAA;AAAA,UACC,KAAA,EAAO,EAAE,MAAA,EAAQ,mBAAoB,EAAA;AAAA,UAErC,QAAC,kBAAAD,cAAA,CAAA,IAAA,EAAA;AAAA,YAEC,GAAA;AAAA,YACA,MAAA;AAAA,YACA,SAAA;AAAA,YACA,UAAYD,EAAAA,WAAAA;AAAA,YACZ,UAAA;AAAA,YACA,gBAAA;AAAA,YACA,iBAAA;AAAA,YACA,cAAA,EAAgB,MAAO,CAAA,IAAA,CAAK,KAAM,CAAA,cAAA;AAAA,YAClC,KAAA;AAAA,YACA,KAAA,EAAO,MAAO,CAAA,IAAA,CAAK,KAAM,CAAA,KAAA;AAAA,YAEzB,QAAC,kBAAAC,cAAA,CAAA,SAAA,EAAA;AAAA,cACC,MAAA;AAAA,cACA,GAAA;AAAA,cACA,KAAA;AAAA,cACA,SAAA;AAAA,cACA,gBAAA;AAAA,cACA,iBAAA;AAAA,cACA,cAAA,EAAgB,MAAO,CAAA,IAAA,CAAK,KAAM,CAAA,cAAA;AAAA,aACpC,CAAA;AAAA,WAAA,EApBK,MAqBP,CAAA;AAAA,SACF,CAAA,CAAA;AAAA,OAEH,CAAA;AAAA,MACA,GAAQ,KAAA,KAAA,CAAA,IAAa,GAAM,GAAA,CAAA,mBAAKA,cAAA,CAAAE,iBAAA,EAAA;AAAA,QAAS,GAAA;AAAA,OAAU,CAAK,GAAA,IAAA;AAAA,KAAA;AAAA,GAC3D,CAAA,CAAA;AAEJ;;;;"}
@@ -1,6 +1,6 @@
1
1
  import styleInject from '../../../node_modules/style-inject/dist/style-inject.es.js';
2
2
 
3
- var css_248z = ".saltGridBaseCell-valueContainer {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n box-sizing: border-box;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: calc(var(--grid-row-height) - 2px);\n border-style: solid;\n border-width: 1px;\n border-color: transparent;\n --grid-cell-padding: 0 calc(var(--grid-padding) - 1px);\n}\n\n.saltGridCell-editable .saltGridBaseCell-valueContainer {\n border-style: solid;\n border-width: 1px;\n border-color: var(--grid-editableCell-borderColor);\n}\n\n.saltGridCell-editable:hover .saltGridBaseCell-valueContainer {\n border-color: var(--grid-editableCell-borderColor-hover);\n}\n\n.saltGridCell-editable:focus .saltGridBaseCell-valueContainer {\n border-color: transparent;\n}\n";
3
+ var css_248z = ".saltGridBaseCell-valueContainer {\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n box-sizing: border-box;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: calc(var(--grid-row-height) - 2px);\n border-style: solid;\n border-width: 1px;\n border-color: transparent;\n --grid-cell-padding: 0 calc(var(--grid-padding) - 1px);\n}\n\n.saltGridCell-editable .saltGridBaseCell-valueContainer {\n border-style: solid;\n border-width: 1px;\n border-color: var(--grid-editableCell-borderColor);\n}\n\n.saltGridCell-editable:hover .saltGridBaseCell-valueContainer {\n border-color: var(--grid-editableCell-borderColor-hover);\n}\n\n.saltGridCell-editable:focus .saltGridBaseCell-valueContainer {\n border-color: transparent;\n}\n\n.saltGridBaseCell-status-error {\n --status-border-color: var(--salt-status-error-borderColor);\n --status-background-color: var(--salt-status-error-background-emphasize);\n}\n\n.saltGridBaseCell-status-warning {\n --status-border-color: var(--salt-status-warning-borderColor);\n --status-background-color: var(--salt-status-warning-background-emphasize);\n}\n\n.saltGridBaseCell-status-success {\n --status-border-color: var(--salt-status-success-borderColor);\n --status-background-color: var(--salt-status-success-background-emphasize);\n}\n\n.saltGridCell-editable .saltGridBaseCell-valueContainer {\n border-color: var(--status-border-color);\n}\n\n.saltGridBaseCell-hasValidation:focus .saltGridCursor {\n border-color: var(--status-border-color);\n}\n\n.saltGridBaseCell-hasValidation:focus .saltGridCornerTag-focusOnly {\n border-left-color: var(--status-border-color);\n}\n\n.saltGridBaseCell-valueContainer {\n background-color: var(--status-background-color);\n}\n\n.salt-density-high {\n --grid-statusIndicator-size: 5px;\n}\n\n.salt-density-medium {\n --grid-statusIndicator-size: 6px;\n}\n\n.salt-density-low {\n --grid-statusIndicator-size: 7px;\n}\n\n.salt-density-touch {\n --grid-statusIndicator-size: 9px;\n}\n\n.saltGridBaseCell-statusContainer {\n font-size: var(--saltGrid-statusIndicator-size, var(--grid-statusIndicator-size));\n position: absolute;\n bottom: 3px;\n right: 3px;\n}\n\n.saltGridBaseCell-statusContainer svg {\n display: block;\n fill: var(--status-border-color);\n}\n\n.saltGridBaseCell-statusContainer.saltGridBaseCell-statusContainer-align-right {\n right: auto;\n left: 3px;\n}\n";
4
4
  styleInject(css_248z);
5
5
 
6
6
  export { css_248z as default };
@@ -23,11 +23,17 @@ import './internal/TopRightPart.js';
23
23
  import './internal/FakeCell.css.js';
24
24
  import './internal/DefaultCellValue.js';
25
25
  import { CornerTag } from './CornerTag.js';
26
+ import { CellWarningIcon, CellErrorIcon, CellSuccessIcon } from './internal/CellStatusIcons.js';
26
27
 
27
28
  const withBaseName = makePrefixer("saltGridBaseCell");
28
29
  function getCellId(rowKey, column) {
29
30
  return `R${rowKey}C${column.info.props.id}`;
30
31
  }
32
+ const icons = {
33
+ warning: CellWarningIcon,
34
+ error: CellErrorIcon,
35
+ success: CellSuccessIcon
36
+ };
31
37
  function BaseCell(props) {
32
38
  const {
33
39
  column,
@@ -37,12 +43,20 @@ function BaseCell(props) {
37
43
  isFocused,
38
44
  isSelected,
39
45
  isEditable,
40
- children
46
+ children,
47
+ validationStatus,
48
+ validationMessage,
49
+ validationType = "light",
50
+ align
41
51
  } = props;
42
52
  const { ref, isFocusableContent, onFocus } = useFocusableContent();
53
+ const cellId = getCellId(row.key, column);
54
+ const hasValidation = !!validationStatus;
55
+ const hasValidationMessage = !!validationMessage || hasValidation;
56
+ const validationMessageId = `${cellId}-statusMessage`;
43
57
  return /* @__PURE__ */ jsxs(Cell, {
44
58
  ref,
45
- id: getCellId(row.key, column),
59
+ id: cellId,
46
60
  "data-row-index": row.index,
47
61
  "data-column-index": column.index,
48
62
  "data-testid": isFocused ? "grid-cell-focused" : void 0,
@@ -51,15 +65,33 @@ function BaseCell(props) {
51
65
  separator: column.separator,
52
66
  isSelected,
53
67
  isEditable,
54
- className,
68
+ className: clsx(className, {
69
+ [withBaseName("hasValidation")]: hasValidation,
70
+ [withBaseName(`status-${validationStatus}`)]: validationStatus
71
+ }),
55
72
  style,
56
73
  tabIndex: isFocused && !isFocusableContent ? 0 : -1,
57
74
  onFocus,
75
+ "aria-invalid": validationStatus === "error" || void 0,
76
+ "aria-describedby": hasValidationMessage ? validationMessageId : void 0,
58
77
  children: [
78
+ hasValidationMessage ? /* @__PURE__ */ jsx("div", {
79
+ id: validationMessageId,
80
+ className: "salt-visuallyHidden",
81
+ "aria-hidden": true,
82
+ role: "status",
83
+ children: validationMessage ? validationMessage : `Cell validation state is ${validationStatus}`
84
+ }) : null,
59
85
  /* @__PURE__ */ jsx("div", {
60
86
  className: clsx(withBaseName("valueContainer")),
61
87
  children
62
88
  }),
89
+ hasValidation && validationType === "strong" ? /* @__PURE__ */ jsx("div", {
90
+ className: clsx(withBaseName("statusContainer"), {
91
+ [withBaseName(`statusContainer-align-${align}`)]: align
92
+ }),
93
+ children: icons[validationStatus]
94
+ }) : null,
63
95
  isFocused && isEditable && /* @__PURE__ */ jsx(CornerTag, {
64
96
  focusOnly: true
65
97
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"BaseCell.js","sources":["../src/BaseCell.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport \"./BaseCell.css\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { GridCellProps } from \"./GridColumn\";\nimport { GridColumnModel } from \"./Grid\";\nimport { Cell, Cursor, useFocusableContent } from \"./internal\";\nimport { CornerTag } from \"./CornerTag\";\n\nconst withBaseName = makePrefixer(\"saltGridBaseCell\");\n\nexport function getCellId<T>(rowKey: string, column: GridColumnModel<T>) {\n return `R${rowKey}C${column.info.props.id}`;\n}\n\n// Default component for grid cells. Provides selection, on-hover highlighting,\n// cursor etc.\nexport function BaseCell<T>(props: GridCellProps<T>) {\n const {\n column,\n className,\n row,\n style,\n isFocused,\n isSelected,\n isEditable,\n children,\n } = props;\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableCellElement>();\n\n return (\n <Cell\n ref={ref}\n id={getCellId(row.key, column)}\n data-row-index={row.index}\n data-column-index={column.index}\n data-testid={isFocused ? \"grid-cell-focused\" : undefined}\n // aria-colindex uses one-based array indexing\n aria-colindex={column.index + 1}\n role=\"gridcell\"\n separator={column.separator}\n isSelected={isSelected}\n isEditable={isEditable}\n className={className}\n style={style}\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n >\n <div className={clsx(withBaseName(\"valueContainer\"))}>{children}</div>\n {isFocused && isEditable && <CornerTag focusOnly={true} />}\n {isFocused && !isFocusableContent && <Cursor />}\n </Cell>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAM,YAAA,GAAe,aAAa,kBAAkB,CAAA,CAAA;AAEpC,SAAA,SAAA,CAAa,QAAgB,MAA4B,EAAA;AACvE,EAAA,OAAO,CAAI,CAAA,EAAA,MAAA,CAAA,CAAA,EAAU,MAAO,CAAA,IAAA,CAAK,KAAM,CAAA,EAAA,CAAA,CAAA,CAAA;AACzC,CAAA;AAIO,SAAS,SAAY,KAAyB,EAAA;AACnD,EAAM,MAAA;AAAA,IACJ,MAAA;AAAA,IACA,SAAA;AAAA,IACA,GAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,GACE,GAAA,KAAA,CAAA;AAEJ,EAAA,MAAM,EAAE,GAAA,EAAK,kBAAoB,EAAA,OAAA,KAC/B,mBAA0C,EAAA,CAAA;AAE5C,EAAA,uBACG,IAAA,CAAA,IAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,EAAI,EAAA,SAAA,CAAU,GAAI,CAAA,GAAA,EAAK,MAAM,CAAA;AAAA,IAC7B,kBAAgB,GAAI,CAAA,KAAA;AAAA,IACpB,qBAAmB,MAAO,CAAA,KAAA;AAAA,IAC1B,aAAA,EAAa,YAAY,mBAAsB,GAAA,KAAA,CAAA;AAAA,IAE/C,eAAA,EAAe,OAAO,KAAQ,GAAA,CAAA;AAAA,IAC9B,IAAK,EAAA,UAAA;AAAA,IACL,WAAW,MAAO,CAAA,SAAA;AAAA,IAClB,UAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAU,EAAA,SAAA,IAAa,CAAC,kBAAA,GAAqB,CAAI,GAAA,CAAA,CAAA;AAAA,IACjD,OAAA;AAAA,IAEA,QAAA,EAAA;AAAA,sBAAC,GAAA,CAAA,KAAA,EAAA;AAAA,QAAI,SAAW,EAAA,IAAA,CAAK,YAAa,CAAA,gBAAgB,CAAC,CAAA;AAAA,QAAI,QAAA;AAAA,OAAS,CAAA;AAAA,MAC/D,SAAA,IAAa,8BAAe,GAAA,CAAA,SAAA,EAAA;AAAA,QAAU,SAAW,EAAA,IAAA;AAAA,OAAM,CAAA;AAAA,MACvD,SAAa,IAAA,CAAC,kBAAsB,oBAAA,GAAA,CAAC,MAAO,EAAA,EAAA,CAAA;AAAA,KAAA;AAAA,GAC/C,CAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"BaseCell.js","sources":["../src/BaseCell.tsx"],"sourcesContent":["import { clsx } from \"clsx\";\nimport \"./BaseCell.css\";\nimport { makePrefixer } from \"@salt-ds/core\";\nimport { GridCellProps } from \"./GridColumn\";\nimport { GridColumnModel } from \"./Grid\";\nimport { Cell, Cursor, useFocusableContent } from \"./internal\";\nimport { CornerTag } from \"./CornerTag\";\nimport {\n CellErrorIcon,\n CellSuccessIcon,\n CellWarningIcon,\n} from \"./internal/CellStatusIcons\";\n\nconst withBaseName = makePrefixer(\"saltGridBaseCell\");\n\nexport function getCellId<T>(rowKey: string, column: GridColumnModel<T>) {\n return `R${rowKey}C${column.info.props.id}`;\n}\n\nconst icons = {\n warning: CellWarningIcon,\n error: CellErrorIcon,\n success: CellSuccessIcon,\n};\n\n// Default component for grid cells. Provides selection, on-hover highlighting,\n// cursor etc.\nexport function BaseCell<T>(props: GridCellProps<T>) {\n const {\n column,\n className,\n row,\n style,\n isFocused,\n isSelected,\n isEditable,\n children,\n validationStatus,\n validationMessage,\n validationType = \"light\",\n align,\n } = props;\n\n const { ref, isFocusableContent, onFocus } =\n useFocusableContent<HTMLTableCellElement>();\n const cellId = getCellId(row.key, column);\n const hasValidation = !!validationStatus;\n const hasValidationMessage = !!validationMessage || hasValidation;\n const validationMessageId = `${cellId}-statusMessage`;\n return (\n <Cell\n ref={ref}\n id={cellId}\n data-row-index={row.index}\n data-column-index={column.index}\n data-testid={isFocused ? \"grid-cell-focused\" : undefined}\n // aria-colindex uses one-based array indexing\n aria-colindex={column.index + 1}\n role=\"gridcell\"\n separator={column.separator}\n isSelected={isSelected}\n isEditable={isEditable}\n className={clsx(className, {\n [withBaseName(\"hasValidation\")]: hasValidation,\n [withBaseName(`status-${validationStatus as string}`)]:\n validationStatus,\n })}\n style={style}\n tabIndex={isFocused && !isFocusableContent ? 0 : -1}\n onFocus={onFocus}\n aria-invalid={validationStatus === \"error\" || undefined}\n aria-describedby={hasValidationMessage ? validationMessageId : undefined}\n >\n {hasValidationMessage ? (\n <div\n id={validationMessageId}\n className=\"salt-visuallyHidden\"\n aria-hidden\n role=\"status\"\n >\n {validationMessage\n ? validationMessage\n : `Cell validation state is ${validationStatus as string}`}\n </div>\n ) : null}\n <div className={clsx(withBaseName(\"valueContainer\"))}>{children}</div>\n {hasValidation && validationType === \"strong\" ? (\n <div\n className={clsx(withBaseName(\"statusContainer\"), {\n [withBaseName(`statusContainer-align-${align as string}`)]: align,\n })}\n >\n {icons[validationStatus]}\n </div>\n ) : null}\n {isFocused && isEditable && <CornerTag focusOnly={true} />}\n {isFocused && !isFocusableContent && <Cursor />}\n </Cell>\n );\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { createContext, useContext } from 'react';
2
+
3
+ const ColumnSortContext = createContext(
4
+ void 0
5
+ );
6
+ const useColumnSortContext = () => {
7
+ const c = useContext(ColumnSortContext);
8
+ if (!c) {
9
+ throw new Error(`useColumnSortContext invoked outside of a Grid`);
10
+ }
11
+ return c;
12
+ };
13
+
14
+ export { ColumnSortContext, useColumnSortContext };
15
+ //# sourceMappingURL=ColumnSortContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColumnSortContext.js","sources":["../src/ColumnSortContext.ts"],"sourcesContent":["import React, { createContext, useContext } from \"react\";\nimport { SortOrder } from \"./Grid\";\nimport { GridColumnProps } from \"./GridColumn\";\n\nexport interface ColumnSortContext {\n sortByColumnId?: GridColumnProps[\"id\"];\n setSortByColumnId: (c: React.SetStateAction<GridColumnProps[\"id\"]>) => void;\n sortOrder: SortOrder;\n setSortOrder: (o: SortOrder) => void;\n onClickSortColumn: (colHeaderId: GridColumnProps[\"id\"]) => void;\n}\n\nexport const ColumnSortContext = createContext<ColumnSortContext | undefined>(\n undefined\n);\n\nexport const useColumnSortContext = () => {\n const c = useContext(ColumnSortContext);\n if (!c) {\n throw new Error(`useColumnSortContext invoked outside of a Grid`);\n }\n return c;\n};\n"],"names":[],"mappings":";;AAYO,MAAM,iBAAoB,GAAA,aAAA;AAAA,EAC/B,KAAA,CAAA;AACF,EAAA;AAEO,MAAM,uBAAuB,MAAM;AACxC,EAAM,MAAA,CAAA,GAAI,WAAW,iBAAiB,CAAA,CAAA;AACtC,EAAA,IAAI,CAAC,CAAG,EAAA;AACN,IAAM,MAAA,IAAI,MAAM,CAAgD,8CAAA,CAAA,CAAA,CAAA;AAAA,GAClE;AACA,EAAO,OAAA,CAAA,CAAA;AACT;;;;"}