@veeqo/ui 9.9.0 → 9.9.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 (80) hide show
  1. package/dist/components/DataGrid/DataGrid.cjs +29 -4
  2. package/dist/components/DataGrid/DataGrid.cjs.map +1 -1
  3. package/dist/components/DataGrid/DataGrid.d.ts +2 -2
  4. package/dist/components/DataGrid/DataGrid.js +29 -4
  5. package/dist/components/DataGrid/DataGrid.js.map +1 -1
  6. package/dist/components/DataGrid/DataGrid.module.css.cjs +13 -0
  7. package/dist/components/DataGrid/DataGrid.module.css.cjs.map +1 -0
  8. package/dist/components/DataGrid/DataGrid.module.css.js +10 -0
  9. package/dist/components/DataGrid/DataGrid.module.css.js.map +1 -0
  10. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.cjs +4 -2
  11. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.cjs.map +1 -1
  12. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.js +4 -2
  13. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.js.map +1 -1
  14. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.module.css.cjs +3 -3
  15. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.module.css.cjs.map +1 -1
  16. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.module.css.js +3 -3
  17. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.module.css.js.map +1 -1
  18. package/dist/components/DataGrid/components/CellContent/CellContent.module.css.cjs +3 -3
  19. package/dist/components/DataGrid/components/CellContent/CellContent.module.css.cjs.map +1 -1
  20. package/dist/components/DataGrid/components/CellContent/CellContent.module.css.js +3 -3
  21. package/dist/components/DataGrid/components/CellContent/CellContent.module.css.js.map +1 -1
  22. package/dist/components/DataGrid/components/Footer/FooterCell/FooterCell.cjs +10 -2
  23. package/dist/components/DataGrid/components/Footer/FooterCell/FooterCell.cjs.map +1 -1
  24. package/dist/components/DataGrid/components/Footer/FooterCell/FooterCell.js +10 -2
  25. package/dist/components/DataGrid/components/Footer/FooterCell/FooterCell.js.map +1 -1
  26. package/dist/components/DataGrid/components/Footer/FooterCell/FooterCell.module.css.cjs +3 -3
  27. package/dist/components/DataGrid/components/Footer/FooterCell/FooterCell.module.css.cjs.map +1 -1
  28. package/dist/components/DataGrid/components/Footer/FooterCell/FooterCell.module.css.js +3 -3
  29. package/dist/components/DataGrid/components/Footer/FooterCell/FooterCell.module.css.js.map +1 -1
  30. package/dist/components/DataGrid/components/GridContainer/GridContainer.cjs +10 -5
  31. package/dist/components/DataGrid/components/GridContainer/GridContainer.cjs.map +1 -1
  32. package/dist/components/DataGrid/components/GridContainer/GridContainer.js +10 -5
  33. package/dist/components/DataGrid/components/GridContainer/GridContainer.js.map +1 -1
  34. package/dist/components/DataGrid/components/Header/HeaderCell/HeaderCell.cjs +29 -5
  35. package/dist/components/DataGrid/components/Header/HeaderCell/HeaderCell.cjs.map +1 -1
  36. package/dist/components/DataGrid/components/Header/HeaderCell/HeaderCell.js +30 -6
  37. package/dist/components/DataGrid/components/Header/HeaderCell/HeaderCell.js.map +1 -1
  38. package/dist/components/DataGrid/components/Header/HeaderCell/HeaderCell.module.css.cjs +9 -5
  39. package/dist/components/DataGrid/components/Header/HeaderCell/HeaderCell.module.css.cjs.map +1 -1
  40. package/dist/components/DataGrid/components/Header/HeaderCell/HeaderCell.module.css.js +8 -6
  41. package/dist/components/DataGrid/components/Header/HeaderCell/HeaderCell.module.css.js.map +1 -1
  42. package/dist/components/DataGrid/components/Header/HeaderCell/SortIcon/SortIcon.cjs +29 -0
  43. package/dist/components/DataGrid/components/Header/HeaderCell/SortIcon/SortIcon.cjs.map +1 -0
  44. package/dist/components/DataGrid/components/Header/HeaderCell/SortIcon/SortIcon.d.ts +10 -0
  45. package/dist/components/DataGrid/components/Header/HeaderCell/SortIcon/SortIcon.js +23 -0
  46. package/dist/components/DataGrid/components/Header/HeaderCell/SortIcon/SortIcon.js.map +1 -0
  47. package/dist/components/DataGrid/components/Header/HeaderCell/SortIcon/index.d.ts +1 -0
  48. package/dist/components/DataGrid/hooks/index.d.ts +3 -0
  49. package/dist/components/DataGrid/hooks/usePinnedColumnLayout.cjs +39 -0
  50. package/dist/components/DataGrid/hooks/usePinnedColumnLayout.cjs.map +1 -0
  51. package/dist/components/DataGrid/hooks/usePinnedColumnLayout.d.ts +15 -0
  52. package/dist/components/DataGrid/hooks/usePinnedColumnLayout.js +37 -0
  53. package/dist/components/DataGrid/hooks/usePinnedColumnLayout.js.map +1 -0
  54. package/dist/components/DataGrid/hooks/usePinnedColumnStyles.cjs +22 -0
  55. package/dist/components/DataGrid/hooks/usePinnedColumnStyles.cjs.map +1 -0
  56. package/dist/components/DataGrid/hooks/usePinnedColumnStyles.d.ts +13 -0
  57. package/dist/components/DataGrid/hooks/usePinnedColumnStyles.js +20 -0
  58. package/dist/components/DataGrid/hooks/usePinnedColumnStyles.js.map +1 -0
  59. package/dist/components/DataGrid/hooks/useSortingState.cjs +40 -0
  60. package/dist/components/DataGrid/hooks/useSortingState.cjs.map +1 -0
  61. package/dist/components/DataGrid/hooks/useSortingState.d.ts +23 -0
  62. package/dist/components/DataGrid/hooks/useSortingState.js +38 -0
  63. package/dist/components/DataGrid/hooks/useSortingState.js.map +1 -0
  64. package/dist/components/DataGrid/types/ColumnDefinition.d.ts +4 -2
  65. package/dist/components/DataGrid/types/DataGridProps.d.ts +15 -0
  66. package/dist/components/DataGrid/types/PinnedColumnState.d.ts +4 -0
  67. package/dist/components/DataGrid/types/SortState.d.ts +5 -0
  68. package/dist/components/DataGrid/types/enums.d.ts +1 -0
  69. package/dist/components/DataGrid/types/index.d.ts +2 -0
  70. package/dist/components/DataGrid/utils/ColumnMapper.cjs +1 -0
  71. package/dist/components/DataGrid/utils/ColumnMapper.cjs.map +1 -1
  72. package/dist/components/DataGrid/utils/ColumnMapper.js +1 -0
  73. package/dist/components/DataGrid/utils/ColumnMapper.js.map +1 -1
  74. package/dist/components/DataGrid/utils/index.d.ts +1 -0
  75. package/dist/components/DataGrid/utils/pinnedColumnUtils.cjs +33 -0
  76. package/dist/components/DataGrid/utils/pinnedColumnUtils.cjs.map +1 -0
  77. package/dist/components/DataGrid/utils/pinnedColumnUtils.d.ts +4 -0
  78. package/dist/components/DataGrid/utils/pinnedColumnUtils.js +30 -0
  79. package/dist/components/DataGrid/utils/pinnedColumnUtils.js.map +1 -0
  80. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePinnedColumnLayout.cjs","sources":["../../../../src/components/DataGrid/hooks/usePinnedColumnLayout.ts"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\n\nimport { useMemo } from 'react';\n\nimport { Table } from '@tanstack/react-table';\n\ntype UsePinnedColumnLayoutProps = {\n table: Table<any>;\n};\n\n/**\n * Hook which computes left and right positions for laying out pinned columns, which are then returned as CSS variables\n * to be applied to the table element.\n *\n * We do this so that pinned columns can be resized correctly, whilst avoiding having to re-render the table body and\n * header (since left/right properties must be applied to the <th> and <td> elements rather than the <col>).\n */\nexport const usePinnedColumnLayout = ({ table }: UsePinnedColumnLayoutProps) => {\n const pinnedColumnLayoutStyles = useMemo(() => {\n if (!table.getIsSomeColumnsPinned()) {\n return {};\n }\n\n const pinnedColumns = [\n ...table.getLeftVisibleLeafColumns(),\n ...table.getRightVisibleLeafColumns(),\n ];\n\n return pinnedColumns.reduce((styleObj, column) => {\n const pinLocation = column.getIsPinned();\n\n return {\n ...styleObj,\n [`--${column.id}-start`]:\n pinLocation === 'left' ? `${column.getStart('left')}px` : undefined,\n [`--${column.id}-after`]:\n pinLocation === 'right' ? `${column.getAfter('right')}px` : undefined,\n };\n }, {});\n }, [\n table.getState().columnSizing,\n table.getState().columnSizingInfo,\n table.getState().columnPinning,\n ]);\n\n return { pinnedColumnLayoutStyles };\n};\n"],"names":["useMemo"],"mappings":";;;;AAAA;AAUA;;;;;;AAMG;MACU,qBAAqB,GAAG,CAAC,EAAE,KAAK,EAA8B,KAAI;AAC7E,IAAA,MAAM,wBAAwB,GAAGA,aAAO,CAAC,MAAK;AAC5C,QAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE;AACnC,YAAA,OAAO,EAAE;AACV;AAED,QAAA,MAAM,aAAa,GAAG;YACpB,GAAG,KAAK,CAAC,yBAAyB,EAAE;YACpC,GAAG,KAAK,CAAC,0BAA0B,EAAE;SACtC;QAED,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAI;AAC/C,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE;YAExC,OAAO;AACL,gBAAA,GAAG,QAAQ;gBACX,CAAC,CAAA,EAAA,EAAK,MAAM,CAAC,EAAE,CAAA,MAAA,CAAQ,GACrB,WAAW,KAAK,MAAM,GAAG,CAAG,EAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAI,EAAA,CAAA,GAAG,SAAS;gBACrE,CAAC,CAAA,EAAA,EAAK,MAAM,CAAC,EAAE,CAAA,MAAA,CAAQ,GACrB,WAAW,KAAK,OAAO,GAAG,CAAG,EAAA,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAI,EAAA,CAAA,GAAG,SAAS;aACxE;SACF,EAAE,EAAE,CAAC;AACR,KAAC,EAAE;AACD,QAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,YAAY;AAC7B,QAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,gBAAgB;AACjC,QAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,aAAa;AAC/B,KAAA,CAAC;IAEF,OAAO,EAAE,wBAAwB,EAAE;AACrC;;;;"}
@@ -0,0 +1,15 @@
1
+ import { Table } from '@tanstack/react-table';
2
+ type UsePinnedColumnLayoutProps = {
3
+ table: Table<any>;
4
+ };
5
+ /**
6
+ * Hook which computes left and right positions for laying out pinned columns, which are then returned as CSS variables
7
+ * to be applied to the table element.
8
+ *
9
+ * We do this so that pinned columns can be resized correctly, whilst avoiding having to re-render the table body and
10
+ * header (since left/right properties must be applied to the <th> and <td> elements rather than the <col>).
11
+ */
12
+ export declare const usePinnedColumnLayout: ({ table }: UsePinnedColumnLayoutProps) => {
13
+ pinnedColumnLayoutStyles: {};
14
+ };
15
+ export {};
@@ -0,0 +1,37 @@
1
+ import { useMemo } from 'react';
2
+
3
+ /* eslint-disable react-hooks/exhaustive-deps */
4
+ /**
5
+ * Hook which computes left and right positions for laying out pinned columns, which are then returned as CSS variables
6
+ * to be applied to the table element.
7
+ *
8
+ * We do this so that pinned columns can be resized correctly, whilst avoiding having to re-render the table body and
9
+ * header (since left/right properties must be applied to the <th> and <td> elements rather than the <col>).
10
+ */
11
+ const usePinnedColumnLayout = ({ table }) => {
12
+ const pinnedColumnLayoutStyles = useMemo(() => {
13
+ if (!table.getIsSomeColumnsPinned()) {
14
+ return {};
15
+ }
16
+ const pinnedColumns = [
17
+ ...table.getLeftVisibleLeafColumns(),
18
+ ...table.getRightVisibleLeafColumns(),
19
+ ];
20
+ return pinnedColumns.reduce((styleObj, column) => {
21
+ const pinLocation = column.getIsPinned();
22
+ return {
23
+ ...styleObj,
24
+ [`--${column.id}-start`]: pinLocation === 'left' ? `${column.getStart('left')}px` : undefined,
25
+ [`--${column.id}-after`]: pinLocation === 'right' ? `${column.getAfter('right')}px` : undefined,
26
+ };
27
+ }, {});
28
+ }, [
29
+ table.getState().columnSizing,
30
+ table.getState().columnSizingInfo,
31
+ table.getState().columnPinning,
32
+ ]);
33
+ return { pinnedColumnLayoutStyles };
34
+ };
35
+
36
+ export { usePinnedColumnLayout };
37
+ //# sourceMappingURL=usePinnedColumnLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePinnedColumnLayout.js","sources":["../../../../src/components/DataGrid/hooks/usePinnedColumnLayout.ts"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\n\nimport { useMemo } from 'react';\n\nimport { Table } from '@tanstack/react-table';\n\ntype UsePinnedColumnLayoutProps = {\n table: Table<any>;\n};\n\n/**\n * Hook which computes left and right positions for laying out pinned columns, which are then returned as CSS variables\n * to be applied to the table element.\n *\n * We do this so that pinned columns can be resized correctly, whilst avoiding having to re-render the table body and\n * header (since left/right properties must be applied to the <th> and <td> elements rather than the <col>).\n */\nexport const usePinnedColumnLayout = ({ table }: UsePinnedColumnLayoutProps) => {\n const pinnedColumnLayoutStyles = useMemo(() => {\n if (!table.getIsSomeColumnsPinned()) {\n return {};\n }\n\n const pinnedColumns = [\n ...table.getLeftVisibleLeafColumns(),\n ...table.getRightVisibleLeafColumns(),\n ];\n\n return pinnedColumns.reduce((styleObj, column) => {\n const pinLocation = column.getIsPinned();\n\n return {\n ...styleObj,\n [`--${column.id}-start`]:\n pinLocation === 'left' ? `${column.getStart('left')}px` : undefined,\n [`--${column.id}-after`]:\n pinLocation === 'right' ? `${column.getAfter('right')}px` : undefined,\n };\n }, {});\n }, [\n table.getState().columnSizing,\n table.getState().columnSizingInfo,\n table.getState().columnPinning,\n ]);\n\n return { pinnedColumnLayoutStyles };\n};\n"],"names":[],"mappings":";;AAAA;AAUA;;;;;;AAMG;MACU,qBAAqB,GAAG,CAAC,EAAE,KAAK,EAA8B,KAAI;AAC7E,IAAA,MAAM,wBAAwB,GAAG,OAAO,CAAC,MAAK;AAC5C,QAAA,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE;AACnC,YAAA,OAAO,EAAE;AACV;AAED,QAAA,MAAM,aAAa,GAAG;YACpB,GAAG,KAAK,CAAC,yBAAyB,EAAE;YACpC,GAAG,KAAK,CAAC,0BAA0B,EAAE;SACtC;QAED,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,KAAI;AAC/C,YAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE;YAExC,OAAO;AACL,gBAAA,GAAG,QAAQ;gBACX,CAAC,CAAA,EAAA,EAAK,MAAM,CAAC,EAAE,CAAA,MAAA,CAAQ,GACrB,WAAW,KAAK,MAAM,GAAG,CAAG,EAAA,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAI,EAAA,CAAA,GAAG,SAAS;gBACrE,CAAC,CAAA,EAAA,EAAK,MAAM,CAAC,EAAE,CAAA,MAAA,CAAQ,GACrB,WAAW,KAAK,OAAO,GAAG,CAAG,EAAA,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAI,EAAA,CAAA,GAAG,SAAS;aACxE;SACF,EAAE,EAAE,CAAC;AACR,KAAC,EAAE;AACD,QAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,YAAY;AAC7B,QAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,gBAAgB;AACjC,QAAA,KAAK,CAAC,QAAQ,EAAE,CAAC,aAAa;AAC/B,KAAA,CAAC;IAEF,OAAO,EAAE,wBAAwB,EAAE;AACrC;;;;"}
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ var pinnedColumnUtils = require('../utils/pinnedColumnUtils.cjs');
4
+
5
+ /**
6
+ * Hook which returns class names, and styles that need to be computed on-the-fly, for pinned column cells.
7
+ */
8
+ const usePinnedColumnStyles = ({ column }) => {
9
+ if (!column.getIsPinned()) {
10
+ return {
11
+ pinnedCellClassName: '',
12
+ pinnedCellStyles: {},
13
+ };
14
+ }
15
+ return {
16
+ pinnedCellClassName: pinnedColumnUtils.getPinnedColumnClassNames(column),
17
+ pinnedCellStyles: pinnedColumnUtils.getPinnedColumnStyles(column),
18
+ };
19
+ };
20
+
21
+ exports.usePinnedColumnStyles = usePinnedColumnStyles;
22
+ //# sourceMappingURL=usePinnedColumnStyles.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePinnedColumnStyles.cjs","sources":["../../../../src/components/DataGrid/hooks/usePinnedColumnStyles.ts"],"sourcesContent":["import { Column } from '@tanstack/react-table';\n\nimport { getPinnedColumnClassNames, getPinnedColumnStyles } from '../utils/pinnedColumnUtils';\n\ntype UsePinnedColumnStylesProps = {\n column: Column<any, any>;\n};\n\n/**\n * Hook which returns class names, and styles that need to be computed on-the-fly, for pinned column cells.\n */\nexport const usePinnedColumnStyles = ({ column }: UsePinnedColumnStylesProps) => {\n if (!column.getIsPinned()) {\n return {\n pinnedCellClassName: '',\n pinnedCellStyles: {},\n };\n }\n\n return {\n pinnedCellClassName: getPinnedColumnClassNames(column),\n pinnedCellStyles: getPinnedColumnStyles(column),\n };\n};\n"],"names":["getPinnedColumnClassNames","getPinnedColumnStyles"],"mappings":";;;;AAQA;;AAEG;MACU,qBAAqB,GAAG,CAAC,EAAE,MAAM,EAA8B,KAAI;AAC9E,IAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;QACzB,OAAO;AACL,YAAA,mBAAmB,EAAE,EAAE;AACvB,YAAA,gBAAgB,EAAE,EAAE;SACrB;AACF;IAED,OAAO;AACL,QAAA,mBAAmB,EAAEA,2CAAyB,CAAC,MAAM,CAAC;AACtD,QAAA,gBAAgB,EAAEC,uCAAqB,CAAC,MAAM,CAAC;KAChD;AACH;;;;"}
@@ -0,0 +1,13 @@
1
+ /// <reference types="react" />
2
+ import { Column } from '@tanstack/react-table';
3
+ type UsePinnedColumnStylesProps = {
4
+ column: Column<any, any>;
5
+ };
6
+ /**
7
+ * Hook which returns class names, and styles that need to be computed on-the-fly, for pinned column cells.
8
+ */
9
+ export declare const usePinnedColumnStyles: ({ column }: UsePinnedColumnStylesProps) => {
10
+ pinnedCellClassName: any;
11
+ pinnedCellStyles: import("react").CSSProperties;
12
+ };
13
+ export {};
@@ -0,0 +1,20 @@
1
+ import { getPinnedColumnClassNames, getPinnedColumnStyles } from '../utils/pinnedColumnUtils.js';
2
+
3
+ /**
4
+ * Hook which returns class names, and styles that need to be computed on-the-fly, for pinned column cells.
5
+ */
6
+ const usePinnedColumnStyles = ({ column }) => {
7
+ if (!column.getIsPinned()) {
8
+ return {
9
+ pinnedCellClassName: '',
10
+ pinnedCellStyles: {},
11
+ };
12
+ }
13
+ return {
14
+ pinnedCellClassName: getPinnedColumnClassNames(column),
15
+ pinnedCellStyles: getPinnedColumnStyles(column),
16
+ };
17
+ };
18
+
19
+ export { usePinnedColumnStyles };
20
+ //# sourceMappingURL=usePinnedColumnStyles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePinnedColumnStyles.js","sources":["../../../../src/components/DataGrid/hooks/usePinnedColumnStyles.ts"],"sourcesContent":["import { Column } from '@tanstack/react-table';\n\nimport { getPinnedColumnClassNames, getPinnedColumnStyles } from '../utils/pinnedColumnUtils';\n\ntype UsePinnedColumnStylesProps = {\n column: Column<any, any>;\n};\n\n/**\n * Hook which returns class names, and styles that need to be computed on-the-fly, for pinned column cells.\n */\nexport const usePinnedColumnStyles = ({ column }: UsePinnedColumnStylesProps) => {\n if (!column.getIsPinned()) {\n return {\n pinnedCellClassName: '',\n pinnedCellStyles: {},\n };\n }\n\n return {\n pinnedCellClassName: getPinnedColumnClassNames(column),\n pinnedCellStyles: getPinnedColumnStyles(column),\n };\n};\n"],"names":[],"mappings":";;AAQA;;AAEG;MACU,qBAAqB,GAAG,CAAC,EAAE,MAAM,EAA8B,KAAI;AAC9E,IAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE;QACzB,OAAO;AACL,YAAA,mBAAmB,EAAE,EAAE;AACvB,YAAA,gBAAgB,EAAE,EAAE;SACrB;AACF;IAED,OAAO;AACL,QAAA,mBAAmB,EAAE,yBAAyB,CAAC,MAAM,CAAC;AACtD,QAAA,gBAAgB,EAAE,qBAAqB,CAAC,MAAM,CAAC;KAChD;AACH;;;;"}
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+
5
+ /**
6
+ * Hook which manages interop between sorting props and the internal TanStack sorting state.
7
+ */
8
+ const useSortingState = ({ columns, sortState, onSortChanged }) => {
9
+ const internalSortState = React.useMemo(() => {
10
+ if (!sortState || !onSortChanged)
11
+ return undefined;
12
+ return [{ id: sortState.columnId, desc: sortState.direction === 'desc' }];
13
+ // eslint-disable-next-line react-hooks/exhaustive-deps
14
+ }, [sortState]);
15
+ const setInternalSortState = React.useCallback((onUpdate) => {
16
+ if (!onSortChanged)
17
+ return;
18
+ // TanStack can either pass us a functional updater method, or the new sort object directly.
19
+ const newSortState = typeof onUpdate === 'function' ? onUpdate(internalSortState) : onUpdate;
20
+ if (!newSortState || newSortState.length === 0)
21
+ return;
22
+ const [{ id, desc }] = newSortState;
23
+ onSortChanged({
24
+ columnId: id,
25
+ direction: desc ? 'desc' : 'asc',
26
+ });
27
+ }, [onSortChanged, internalSortState]);
28
+ const enableSorting = React.useMemo(() => onSortChanged !== undefined && columns.some((column) => column.sortable), [columns, onSortChanged]);
29
+ return {
30
+ enableSorting,
31
+ sorting: internalSortState,
32
+ onSortingChange: setInternalSortState,
33
+ manualSorting: true,
34
+ enableSortingRemoval: false,
35
+ enableMultiRemove: false,
36
+ };
37
+ };
38
+
39
+ exports.useSortingState = useSortingState;
40
+ //# sourceMappingURL=useSortingState.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSortingState.cjs","sources":["../../../../src/components/DataGrid/hooks/useSortingState.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\n\nimport { OnChangeFn, SortingState } from '@tanstack/react-table';\n\nimport { ColumnDefinition } from '../types';\nimport { SortState } from '../types/SortState';\n\ntype UseSortingStateProps = {\n columns: ColumnDefinition<any>[];\n\n sortState?: SortState;\n onSortChanged?: (sortState: SortState) => void;\n};\n\n/**\n * Hook which manages interop between sorting props and the internal TanStack sorting state.\n */\nexport const useSortingState = ({ columns, sortState, onSortChanged }: UseSortingStateProps) => {\n const internalSortState = useMemo(() => {\n if (!sortState || !onSortChanged) return undefined;\n\n return [{ id: sortState.columnId, desc: sortState.direction === 'desc' }];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sortState]);\n\n const setInternalSortState: OnChangeFn<SortingState> = useCallback(\n (onUpdate) => {\n if (!onSortChanged) return;\n\n // TanStack can either pass us a functional updater method, or the new sort object directly.\n const newSortState =\n typeof onUpdate === 'function' ? onUpdate(internalSortState as SortingState) : onUpdate;\n\n if (!newSortState || newSortState.length === 0) return;\n\n const [{ id, desc }] = newSortState;\n\n onSortChanged({\n columnId: id,\n direction: desc ? 'desc' : 'asc',\n });\n },\n [onSortChanged, internalSortState],\n );\n\n const enableSorting = useMemo(\n () => onSortChanged !== undefined && columns.some((column) => column.sortable),\n [columns, onSortChanged],\n );\n\n return {\n enableSorting,\n sorting: internalSortState,\n onSortingChange: setInternalSortState,\n\n manualSorting: true,\n enableSortingRemoval: false,\n enableMultiRemove: false,\n };\n};\n"],"names":["useMemo","useCallback"],"mappings":";;;;AAcA;;AAEG;AACI,MAAM,eAAe,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAwB,KAAI;AAC7F,IAAA,MAAM,iBAAiB,GAAGA,aAAO,CAAC,MAAK;AACrC,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,SAAS;AAElD,QAAA,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;;AAE3E,KAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAEf,IAAA,MAAM,oBAAoB,GAA6BC,iBAAW,CAChE,CAAC,QAAQ,KAAI;AACX,QAAA,IAAI,CAAC,aAAa;YAAE;;AAGpB,QAAA,MAAM,YAAY,GAChB,OAAO,QAAQ,KAAK,UAAU,GAAG,QAAQ,CAAC,iBAAiC,CAAC,GAAG,QAAQ;AAEzF,QAAA,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE;QAEhD,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,YAAY;AAEnC,QAAA,aAAa,CAAC;AACZ,YAAA,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,KAAK;AACjC,SAAA,CAAC;AACJ,KAAC,EACD,CAAC,aAAa,EAAE,iBAAiB,CAAC,CACnC;AAED,IAAA,MAAM,aAAa,GAAGD,aAAO,CAC3B,MAAM,aAAa,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,EAC9E,CAAC,OAAO,EAAE,aAAa,CAAC,CACzB;IAED,OAAO;QACL,aAAa;AACb,QAAA,OAAO,EAAE,iBAAiB;AAC1B,QAAA,eAAe,EAAE,oBAAoB;AAErC,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,oBAAoB,EAAE,KAAK;AAC3B,QAAA,iBAAiB,EAAE,KAAK;KACzB;AACH;;;;"}
@@ -0,0 +1,23 @@
1
+ import { OnChangeFn, SortingState } from '@tanstack/react-table';
2
+ import { ColumnDefinition } from '../types';
3
+ import { SortState } from '../types/SortState';
4
+ type UseSortingStateProps = {
5
+ columns: ColumnDefinition<any>[];
6
+ sortState?: SortState;
7
+ onSortChanged?: (sortState: SortState) => void;
8
+ };
9
+ /**
10
+ * Hook which manages interop between sorting props and the internal TanStack sorting state.
11
+ */
12
+ export declare const useSortingState: ({ columns, sortState, onSortChanged }: UseSortingStateProps) => {
13
+ enableSorting: boolean;
14
+ sorting: {
15
+ id: string;
16
+ desc: boolean;
17
+ }[] | undefined;
18
+ onSortingChange: OnChangeFn<SortingState>;
19
+ manualSorting: boolean;
20
+ enableSortingRemoval: boolean;
21
+ enableMultiRemove: boolean;
22
+ };
23
+ export {};
@@ -0,0 +1,38 @@
1
+ import { useMemo, useCallback } from 'react';
2
+
3
+ /**
4
+ * Hook which manages interop between sorting props and the internal TanStack sorting state.
5
+ */
6
+ const useSortingState = ({ columns, sortState, onSortChanged }) => {
7
+ const internalSortState = useMemo(() => {
8
+ if (!sortState || !onSortChanged)
9
+ return undefined;
10
+ return [{ id: sortState.columnId, desc: sortState.direction === 'desc' }];
11
+ // eslint-disable-next-line react-hooks/exhaustive-deps
12
+ }, [sortState]);
13
+ const setInternalSortState = useCallback((onUpdate) => {
14
+ if (!onSortChanged)
15
+ return;
16
+ // TanStack can either pass us a functional updater method, or the new sort object directly.
17
+ const newSortState = typeof onUpdate === 'function' ? onUpdate(internalSortState) : onUpdate;
18
+ if (!newSortState || newSortState.length === 0)
19
+ return;
20
+ const [{ id, desc }] = newSortState;
21
+ onSortChanged({
22
+ columnId: id,
23
+ direction: desc ? 'desc' : 'asc',
24
+ });
25
+ }, [onSortChanged, internalSortState]);
26
+ const enableSorting = useMemo(() => onSortChanged !== undefined && columns.some((column) => column.sortable), [columns, onSortChanged]);
27
+ return {
28
+ enableSorting,
29
+ sorting: internalSortState,
30
+ onSortingChange: setInternalSortState,
31
+ manualSorting: true,
32
+ enableSortingRemoval: false,
33
+ enableMultiRemove: false,
34
+ };
35
+ };
36
+
37
+ export { useSortingState };
38
+ //# sourceMappingURL=useSortingState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSortingState.js","sources":["../../../../src/components/DataGrid/hooks/useSortingState.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\n\nimport { OnChangeFn, SortingState } from '@tanstack/react-table';\n\nimport { ColumnDefinition } from '../types';\nimport { SortState } from '../types/SortState';\n\ntype UseSortingStateProps = {\n columns: ColumnDefinition<any>[];\n\n sortState?: SortState;\n onSortChanged?: (sortState: SortState) => void;\n};\n\n/**\n * Hook which manages interop between sorting props and the internal TanStack sorting state.\n */\nexport const useSortingState = ({ columns, sortState, onSortChanged }: UseSortingStateProps) => {\n const internalSortState = useMemo(() => {\n if (!sortState || !onSortChanged) return undefined;\n\n return [{ id: sortState.columnId, desc: sortState.direction === 'desc' }];\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [sortState]);\n\n const setInternalSortState: OnChangeFn<SortingState> = useCallback(\n (onUpdate) => {\n if (!onSortChanged) return;\n\n // TanStack can either pass us a functional updater method, or the new sort object directly.\n const newSortState =\n typeof onUpdate === 'function' ? onUpdate(internalSortState as SortingState) : onUpdate;\n\n if (!newSortState || newSortState.length === 0) return;\n\n const [{ id, desc }] = newSortState;\n\n onSortChanged({\n columnId: id,\n direction: desc ? 'desc' : 'asc',\n });\n },\n [onSortChanged, internalSortState],\n );\n\n const enableSorting = useMemo(\n () => onSortChanged !== undefined && columns.some((column) => column.sortable),\n [columns, onSortChanged],\n );\n\n return {\n enableSorting,\n sorting: internalSortState,\n onSortingChange: setInternalSortState,\n\n manualSorting: true,\n enableSortingRemoval: false,\n enableMultiRemove: false,\n };\n};\n"],"names":[],"mappings":";;AAcA;;AAEG;AACI,MAAM,eAAe,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAwB,KAAI;AAC7F,IAAA,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAK;AACrC,QAAA,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,SAAS;AAElD,QAAA,OAAO,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;;AAE3E,KAAC,EAAE,CAAC,SAAS,CAAC,CAAC;AAEf,IAAA,MAAM,oBAAoB,GAA6B,WAAW,CAChE,CAAC,QAAQ,KAAI;AACX,QAAA,IAAI,CAAC,aAAa;YAAE;;AAGpB,QAAA,MAAM,YAAY,GAChB,OAAO,QAAQ,KAAK,UAAU,GAAG,QAAQ,CAAC,iBAAiC,CAAC,GAAG,QAAQ;AAEzF,QAAA,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE;QAEhD,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,YAAY;AAEnC,QAAA,aAAa,CAAC;AACZ,YAAA,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,IAAI,GAAG,MAAM,GAAG,KAAK;AACjC,SAAA,CAAC;AACJ,KAAC,EACD,CAAC,aAAa,EAAE,iBAAiB,CAAC,CACnC;AAED,IAAA,MAAM,aAAa,GAAG,OAAO,CAC3B,MAAM,aAAa,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC,EAC9E,CAAC,OAAO,EAAE,aAAa,CAAC,CACzB;IAED,OAAO;QACL,aAAa;AACb,QAAA,OAAO,EAAE,iBAAiB;AAC1B,QAAA,eAAe,EAAE,oBAAoB;AAErC,QAAA,aAAa,EAAE,IAAI;AACnB,QAAA,oBAAoB,EAAE,KAAK;AAC3B,QAAA,iBAAiB,EAAE,KAAK;KACzB;AACH;;;;"}
@@ -27,6 +27,10 @@ export type BaseColumnDefinition = {
27
27
  * provided to ensure columns are given necessary default width's for your content.
28
28
  */
29
29
  resizeable?: boolean;
30
+ /**
31
+ * Indicates whether the column is sortable or not.
32
+ */
33
+ sortable?: boolean;
30
34
  /**
31
35
  * Column width, only used when resizeable columns are enabled, otherwise the default table
32
36
  * layout algorithm will be used to determine the best fit.
@@ -46,8 +50,6 @@ export type BaseColumnDefinition = {
46
50
  /**
47
51
  * Optional getter used to create an `aria-label` for the column header. If none is provided, the
48
52
  * column's `title` will be used.
49
- *
50
- * TODO: Add sort direction and other information.
51
53
  */
52
54
  getAriaLabel?: () => string;
53
55
  /**
@@ -2,6 +2,8 @@ import React, { AriaAttributes, ReactElement } from 'react';
2
2
  import { SizeScale } from 'Theme/modules/sizes';
3
3
  import { BorderMode, ResizeMode } from './enums';
4
4
  import { ColumnDefinition } from './ColumnDefinition';
5
+ import { SortState } from './SortState';
6
+ import { PinnedColumnState } from './PinnedColumnState';
5
7
  export type CustomState = {
6
8
  iconSlot: ReactElement;
7
9
  heading: string;
@@ -58,6 +60,10 @@ export type DataGridProps = Pick<AriaAttributes, 'aria-label'> & {
58
60
  * Column ordering, an array of column ID's, can be used to reorder columns in the table.
59
61
  */
60
62
  columnOrdering?: string[];
63
+ /**
64
+ * Pinned columns, an object with two arrays of column ID's, one for columns pinned to the left and another for the right.
65
+ */
66
+ pinnedColumns?: PinnedColumnState;
61
67
  /** Rows */
62
68
  /**
63
69
  * Data to render within the table.
@@ -67,4 +73,13 @@ export type DataGridProps = Pick<AriaAttributes, 'aria-label'> & {
67
73
  * Getter which returns the ID to use for a row (a string). If one isn't provided, the row index will be used instead.
68
74
  */
69
75
  getRowId?: (row: any, index: number, parent?: any) => string;
76
+ /** Sorting */
77
+ /**
78
+ * The current sort state, including the selected column ID and sort direction.
79
+ */
80
+ sortState?: SortState;
81
+ /**
82
+ * Handler called when the sort state changes.
83
+ */
84
+ onSortChanged?: (sortState: SortState) => void;
70
85
  };
@@ -0,0 +1,4 @@
1
+ export type PinnedColumnState = {
2
+ left: string[];
3
+ right: string[];
4
+ };
@@ -0,0 +1,5 @@
1
+ import { SortDirection } from './enums';
2
+ export type SortState = {
3
+ columnId: string;
4
+ direction: SortDirection;
5
+ };
@@ -1,2 +1,3 @@
1
1
  export type ResizeMode = 'onChange' | 'onEnd' | 'off';
2
2
  export type BorderMode = 'full' | 'vertical' | 'none';
3
+ export type SortDirection = 'asc' | 'desc';
@@ -2,3 +2,5 @@ export { ResizeMode, BorderMode } from './enums';
2
2
  export { DataGridProps } from './DataGridProps';
3
3
  export { AriaRoles } from './AriaRoles';
4
4
  export { ColumnDefinition } from './ColumnDefinition';
5
+ export { SortState } from './SortState';
6
+ export { PinnedColumnState } from './PinnedColumnState';
@@ -61,6 +61,7 @@ class ColumnMapper {
61
61
  const sharedColumnProps = {
62
62
  id: definition.id,
63
63
  enableResizing: !!definition.resizeable,
64
+ enableSorting: !!definition.sortable,
64
65
  header: (_a = definition.renderHeader) !== null && _a !== undefined ? _a : definition.title,
65
66
  footer: definition.renderFooter,
66
67
  size: (_b = definition.width) !== null && _b !== undefined ? _b : constants.DEFAULT_COLUMN_WIDTH,
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnMapper.cjs","sources":["../../../../src/components/DataGrid/utils/ColumnMapper.ts"],"sourcesContent":["import { ColumnDef, ColumnHelper, createColumnHelper } from '@tanstack/react-table';\nimport { ColumnDefinition, DataColumnDefinition, ColumnAlignment } from '../types/ColumnDefinition';\nimport {\n DEFAULT_CELL_ALIGN,\n DEFAULT_COLUMN_MAXIMUM_WIDTH,\n DEFAULT_COLUMN_MINIMUM_WIDTH,\n DEFAULT_COLUMN_WIDTH,\n} from '../constants';\n\n/**\n * Helper method which checks whether a given column definition is a `DataColumn`.\n * @param column The column definition to check.\n * @returns True if the column definition is a `DataColumn`, false otherwise.\n */\nconst isDataColumn = <T>(column: ColumnDefinition<T>): column is DataColumnDefinition<T> => {\n return (column as DataColumnDefinition<T>).field !== undefined;\n};\n \n/**\n * Maps a column alignment to the equivalent flexbox alignment.\n * @param align The column alingment to map.\n * @returns The flexbox alignment.\n */\nfunction alignmentToFlex(align: ColumnAlignment) {\n switch (align) {\n case 'left':\n return 'flex-start';\n case 'center':\n return 'center';\n case 'right':\n return 'flex-end';\n default:\n return 'flex-start';\n }\n}\n\n/**\n * Validates a column definition, ensuring required properties are defined and values make sense.\n * @param definition The column definition to validate.\n * @throws Error if the column definition is invalid.\n */\nconst validateColumnDefinition = (definition: ColumnDefinition<any>) => {\n if (!definition.id) {\n throw new Error(\"[ColumnMapper] Column definition is missing an 'id' property.\");\n }\n\n if (!isDataColumn(definition)) {\n if (!definition.renderCell) {\n throw new Error(\n `[ColumnMapper] Column '${definition.id}' is a display column but is missing a 'renderCell' property.`,\n );\n }\n }\n\n if (definition.width && definition.minWidth && definition.width < definition.minWidth) {\n throw new Error(\n `[ColumnMapper] Column '${definition.id}' has a size of ${definition.width} which is smaller than its minimum size of ${definition.minWidth}.`,\n );\n }\n\n if (definition.width && definition.maxWidth && definition.width > definition.maxWidth) {\n throw new Error(\n `[ColumnMapper] Column '${definition.id}' has a size of ${definition.width} which is larger than its maximum size of ${definition.maxWidth}.`,\n );\n }\n};\n\n/**\n * Mapper which validates and converts our ColumnDefinition's to a ColumnDef for use in TanStack Table.\n */\nexport class ColumnMapper {\n private columnHelper: ColumnHelper<any>;\n\n constructor() {\n this.columnHelper = createColumnHelper<any>();\n }\n\n mapColumnDefinition(definition: ColumnDefinition<any>): ColumnDef<any, any> {\n const sharedColumnProps = {\n id: definition.id,\n enableResizing: !!definition.resizeable,\n\n header: definition.renderHeader ?? definition.title,\n footer: definition.renderFooter,\n\n size: definition.width ?? DEFAULT_COLUMN_WIDTH,\n maxSize: definition.maxWidth ?? DEFAULT_COLUMN_MAXIMUM_WIDTH,\n minSize: definition.minWidth ?? DEFAULT_COLUMN_MINIMUM_WIDTH,\n\n meta: {\n rowHeader: !!definition.rowHeader,\n // Generate flex and text alignment based off column.align\n justifyContent: alignmentToFlex(definition.align ?? DEFAULT_CELL_ALIGN),\n textAlign: definition.align ?? DEFAULT_CELL_ALIGN,\n getAriaLabel: definition.getAriaLabel,\n },\n };\n\n validateColumnDefinition(definition);\n\n if (isDataColumn(definition)) {\n return this.columnHelper.accessor(definition.field, {\n ...sharedColumnProps,\n // enableSorting: definition.sortable ?? false,\n cell: definition.renderCell\n ? (context) => definition.renderCell!(context.getValue(), context.row.original)\n : (context) => context.getValue(),\n });\n }\n\n return this.columnHelper.display({\n ...sharedColumnProps,\n cell: (context) => definition.renderCell(context.row.original),\n });\n }\n}\n"],"names":["createColumnHelper","DEFAULT_COLUMN_WIDTH","DEFAULT_COLUMN_MAXIMUM_WIDTH","DEFAULT_COLUMN_MINIMUM_WIDTH","DEFAULT_CELL_ALIGN"],"mappings":"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"}
1
+ {"version":3,"file":"ColumnMapper.cjs","sources":["../../../../src/components/DataGrid/utils/ColumnMapper.ts"],"sourcesContent":["import { ColumnDef, ColumnHelper, createColumnHelper } from '@tanstack/react-table';\nimport { ColumnDefinition, DataColumnDefinition, ColumnAlignment } from '../types/ColumnDefinition';\nimport {\n DEFAULT_CELL_ALIGN,\n DEFAULT_COLUMN_MAXIMUM_WIDTH,\n DEFAULT_COLUMN_MINIMUM_WIDTH,\n DEFAULT_COLUMN_WIDTH,\n} from '../constants';\n\n/**\n * Helper method which checks whether a given column definition is a `DataColumn`.\n * @param column The column definition to check.\n * @returns True if the column definition is a `DataColumn`, false otherwise.\n */\nconst isDataColumn = <T>(column: ColumnDefinition<T>): column is DataColumnDefinition<T> => {\n return (column as DataColumnDefinition<T>).field !== undefined;\n};\n\n/**\n * Maps a column alignment to the equivalent flexbox alignment.\n * @param align The column alingment to map.\n * @returns The flexbox alignment.\n */\nfunction alignmentToFlex(align: ColumnAlignment) {\n switch (align) {\n case 'left':\n return 'flex-start';\n case 'center':\n return 'center';\n case 'right':\n return 'flex-end';\n default:\n return 'flex-start';\n }\n}\n\n/**\n * Validates a column definition, ensuring required properties are defined and values make sense.\n * @param definition The column definition to validate.\n * @throws Error if the column definition is invalid.\n */\nconst validateColumnDefinition = (definition: ColumnDefinition<any>) => {\n if (!definition.id) {\n throw new Error(\"[ColumnMapper] Column definition is missing an 'id' property.\");\n }\n\n if (!isDataColumn(definition)) {\n if (!definition.renderCell) {\n throw new Error(\n `[ColumnMapper] Column '${definition.id}' is a display column but is missing a 'renderCell' property.`,\n );\n }\n }\n\n if (definition.width && definition.minWidth && definition.width < definition.minWidth) {\n throw new Error(\n `[ColumnMapper] Column '${definition.id}' has a size of ${definition.width} which is smaller than its minimum size of ${definition.minWidth}.`,\n );\n }\n\n if (definition.width && definition.maxWidth && definition.width > definition.maxWidth) {\n throw new Error(\n `[ColumnMapper] Column '${definition.id}' has a size of ${definition.width} which is larger than its maximum size of ${definition.maxWidth}.`,\n );\n }\n};\n\n/**\n * Mapper which validates and converts our ColumnDefinition's to a ColumnDef for use in TanStack Table.\n */\nexport class ColumnMapper {\n private columnHelper: ColumnHelper<any>;\n\n constructor() {\n this.columnHelper = createColumnHelper<any>();\n }\n\n mapColumnDefinition(definition: ColumnDefinition<any>): ColumnDef<any, any> {\n const sharedColumnProps = {\n id: definition.id,\n enableResizing: !!definition.resizeable,\n enableSorting: !!definition.sortable,\n\n header: definition.renderHeader ?? definition.title,\n footer: definition.renderFooter,\n\n size: definition.width ?? DEFAULT_COLUMN_WIDTH,\n maxSize: definition.maxWidth ?? DEFAULT_COLUMN_MAXIMUM_WIDTH,\n minSize: definition.minWidth ?? DEFAULT_COLUMN_MINIMUM_WIDTH,\n\n meta: {\n rowHeader: !!definition.rowHeader,\n // Generate flex and text alignment based off column.align\n justifyContent: alignmentToFlex(definition.align ?? DEFAULT_CELL_ALIGN),\n textAlign: definition.align ?? DEFAULT_CELL_ALIGN,\n getAriaLabel: definition.getAriaLabel,\n },\n };\n\n validateColumnDefinition(definition);\n\n if (isDataColumn(definition)) {\n return this.columnHelper.accessor(definition.field, {\n ...sharedColumnProps,\n // enableSorting: definition.sortable ?? false,\n cell: definition.renderCell\n ? (context) => definition.renderCell!(context.getValue(), context.row.original)\n : (context) => context.getValue(),\n });\n }\n\n return this.columnHelper.display({\n ...sharedColumnProps,\n cell: (context) => definition.renderCell(context.row.original),\n });\n }\n}\n"],"names":["createColumnHelper","DEFAULT_COLUMN_WIDTH","DEFAULT_COLUMN_MAXIMUM_WIDTH","DEFAULT_COLUMN_MINIMUM_WIDTH","DEFAULT_CELL_ALIGN"],"mappings":"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"}
@@ -59,6 +59,7 @@ class ColumnMapper {
59
59
  const sharedColumnProps = {
60
60
  id: definition.id,
61
61
  enableResizing: !!definition.resizeable,
62
+ enableSorting: !!definition.sortable,
62
63
  header: (_a = definition.renderHeader) !== null && _a !== undefined ? _a : definition.title,
63
64
  footer: definition.renderFooter,
64
65
  size: (_b = definition.width) !== null && _b !== undefined ? _b : DEFAULT_COLUMN_WIDTH,
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnMapper.js","sources":["../../../../src/components/DataGrid/utils/ColumnMapper.ts"],"sourcesContent":["import { ColumnDef, ColumnHelper, createColumnHelper } from '@tanstack/react-table';\nimport { ColumnDefinition, DataColumnDefinition, ColumnAlignment } from '../types/ColumnDefinition';\nimport {\n DEFAULT_CELL_ALIGN,\n DEFAULT_COLUMN_MAXIMUM_WIDTH,\n DEFAULT_COLUMN_MINIMUM_WIDTH,\n DEFAULT_COLUMN_WIDTH,\n} from '../constants';\n\n/**\n * Helper method which checks whether a given column definition is a `DataColumn`.\n * @param column The column definition to check.\n * @returns True if the column definition is a `DataColumn`, false otherwise.\n */\nconst isDataColumn = <T>(column: ColumnDefinition<T>): column is DataColumnDefinition<T> => {\n return (column as DataColumnDefinition<T>).field !== undefined;\n};\n \n/**\n * Maps a column alignment to the equivalent flexbox alignment.\n * @param align The column alingment to map.\n * @returns The flexbox alignment.\n */\nfunction alignmentToFlex(align: ColumnAlignment) {\n switch (align) {\n case 'left':\n return 'flex-start';\n case 'center':\n return 'center';\n case 'right':\n return 'flex-end';\n default:\n return 'flex-start';\n }\n}\n\n/**\n * Validates a column definition, ensuring required properties are defined and values make sense.\n * @param definition The column definition to validate.\n * @throws Error if the column definition is invalid.\n */\nconst validateColumnDefinition = (definition: ColumnDefinition<any>) => {\n if (!definition.id) {\n throw new Error(\"[ColumnMapper] Column definition is missing an 'id' property.\");\n }\n\n if (!isDataColumn(definition)) {\n if (!definition.renderCell) {\n throw new Error(\n `[ColumnMapper] Column '${definition.id}' is a display column but is missing a 'renderCell' property.`,\n );\n }\n }\n\n if (definition.width && definition.minWidth && definition.width < definition.minWidth) {\n throw new Error(\n `[ColumnMapper] Column '${definition.id}' has a size of ${definition.width} which is smaller than its minimum size of ${definition.minWidth}.`,\n );\n }\n\n if (definition.width && definition.maxWidth && definition.width > definition.maxWidth) {\n throw new Error(\n `[ColumnMapper] Column '${definition.id}' has a size of ${definition.width} which is larger than its maximum size of ${definition.maxWidth}.`,\n );\n }\n};\n\n/**\n * Mapper which validates and converts our ColumnDefinition's to a ColumnDef for use in TanStack Table.\n */\nexport class ColumnMapper {\n private columnHelper: ColumnHelper<any>;\n\n constructor() {\n this.columnHelper = createColumnHelper<any>();\n }\n\n mapColumnDefinition(definition: ColumnDefinition<any>): ColumnDef<any, any> {\n const sharedColumnProps = {\n id: definition.id,\n enableResizing: !!definition.resizeable,\n\n header: definition.renderHeader ?? definition.title,\n footer: definition.renderFooter,\n\n size: definition.width ?? DEFAULT_COLUMN_WIDTH,\n maxSize: definition.maxWidth ?? DEFAULT_COLUMN_MAXIMUM_WIDTH,\n minSize: definition.minWidth ?? DEFAULT_COLUMN_MINIMUM_WIDTH,\n\n meta: {\n rowHeader: !!definition.rowHeader,\n // Generate flex and text alignment based off column.align\n justifyContent: alignmentToFlex(definition.align ?? DEFAULT_CELL_ALIGN),\n textAlign: definition.align ?? DEFAULT_CELL_ALIGN,\n getAriaLabel: definition.getAriaLabel,\n },\n };\n\n validateColumnDefinition(definition);\n\n if (isDataColumn(definition)) {\n return this.columnHelper.accessor(definition.field, {\n ...sharedColumnProps,\n // enableSorting: definition.sortable ?? false,\n cell: definition.renderCell\n ? (context) => definition.renderCell!(context.getValue(), context.row.original)\n : (context) => context.getValue(),\n });\n }\n\n return this.columnHelper.display({\n ...sharedColumnProps,\n cell: (context) => definition.renderCell(context.row.original),\n });\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ColumnMapper.js","sources":["../../../../src/components/DataGrid/utils/ColumnMapper.ts"],"sourcesContent":["import { ColumnDef, ColumnHelper, createColumnHelper } from '@tanstack/react-table';\nimport { ColumnDefinition, DataColumnDefinition, ColumnAlignment } from '../types/ColumnDefinition';\nimport {\n DEFAULT_CELL_ALIGN,\n DEFAULT_COLUMN_MAXIMUM_WIDTH,\n DEFAULT_COLUMN_MINIMUM_WIDTH,\n DEFAULT_COLUMN_WIDTH,\n} from '../constants';\n\n/**\n * Helper method which checks whether a given column definition is a `DataColumn`.\n * @param column The column definition to check.\n * @returns True if the column definition is a `DataColumn`, false otherwise.\n */\nconst isDataColumn = <T>(column: ColumnDefinition<T>): column is DataColumnDefinition<T> => {\n return (column as DataColumnDefinition<T>).field !== undefined;\n};\n\n/**\n * Maps a column alignment to the equivalent flexbox alignment.\n * @param align The column alingment to map.\n * @returns The flexbox alignment.\n */\nfunction alignmentToFlex(align: ColumnAlignment) {\n switch (align) {\n case 'left':\n return 'flex-start';\n case 'center':\n return 'center';\n case 'right':\n return 'flex-end';\n default:\n return 'flex-start';\n }\n}\n\n/**\n * Validates a column definition, ensuring required properties are defined and values make sense.\n * @param definition The column definition to validate.\n * @throws Error if the column definition is invalid.\n */\nconst validateColumnDefinition = (definition: ColumnDefinition<any>) => {\n if (!definition.id) {\n throw new Error(\"[ColumnMapper] Column definition is missing an 'id' property.\");\n }\n\n if (!isDataColumn(definition)) {\n if (!definition.renderCell) {\n throw new Error(\n `[ColumnMapper] Column '${definition.id}' is a display column but is missing a 'renderCell' property.`,\n );\n }\n }\n\n if (definition.width && definition.minWidth && definition.width < definition.minWidth) {\n throw new Error(\n `[ColumnMapper] Column '${definition.id}' has a size of ${definition.width} which is smaller than its minimum size of ${definition.minWidth}.`,\n );\n }\n\n if (definition.width && definition.maxWidth && definition.width > definition.maxWidth) {\n throw new Error(\n `[ColumnMapper] Column '${definition.id}' has a size of ${definition.width} which is larger than its maximum size of ${definition.maxWidth}.`,\n );\n }\n};\n\n/**\n * Mapper which validates and converts our ColumnDefinition's to a ColumnDef for use in TanStack Table.\n */\nexport class ColumnMapper {\n private columnHelper: ColumnHelper<any>;\n\n constructor() {\n this.columnHelper = createColumnHelper<any>();\n }\n\n mapColumnDefinition(definition: ColumnDefinition<any>): ColumnDef<any, any> {\n const sharedColumnProps = {\n id: definition.id,\n enableResizing: !!definition.resizeable,\n enableSorting: !!definition.sortable,\n\n header: definition.renderHeader ?? definition.title,\n footer: definition.renderFooter,\n\n size: definition.width ?? DEFAULT_COLUMN_WIDTH,\n maxSize: definition.maxWidth ?? DEFAULT_COLUMN_MAXIMUM_WIDTH,\n minSize: definition.minWidth ?? DEFAULT_COLUMN_MINIMUM_WIDTH,\n\n meta: {\n rowHeader: !!definition.rowHeader,\n // Generate flex and text alignment based off column.align\n justifyContent: alignmentToFlex(definition.align ?? DEFAULT_CELL_ALIGN),\n textAlign: definition.align ?? DEFAULT_CELL_ALIGN,\n getAriaLabel: definition.getAriaLabel,\n },\n };\n\n validateColumnDefinition(definition);\n\n if (isDataColumn(definition)) {\n return this.columnHelper.accessor(definition.field, {\n ...sharedColumnProps,\n // enableSorting: definition.sortable ?? false,\n cell: definition.renderCell\n ? (context) => definition.renderCell!(context.getValue(), context.row.original)\n : (context) => context.getValue(),\n });\n }\n\n return this.columnHelper.display({\n ...sharedColumnProps,\n cell: (context) => definition.renderCell(context.row.original),\n });\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export { isLastColumn } from './isLastColumn';
2
2
  export { ColumnMapper } from './ColumnMapper';
3
3
  export { getAriaRoles } from './getAriaRoles';
4
+ export { getPinnedColumnStyles, getPinnedColumnClassNames } from './pinnedColumnUtils';
@@ -0,0 +1,33 @@
1
+ 'use strict';
2
+
3
+ var DataGrid_module = require('../DataGrid.module.css.cjs');
4
+
5
+ const getPinnedColumnStyles = (column) => {
6
+ const isPinned = column.getIsPinned();
7
+ if (!isPinned) {
8
+ return {};
9
+ }
10
+ return {
11
+ left: isPinned === 'left' ? `var(--${column.id}-start)` : undefined,
12
+ right: isPinned === 'right' ? `var(--${column.id}-after)` : undefined,
13
+ opacity: isPinned ? 0.95 : undefined,
14
+ position: isPinned ? 'sticky' : undefined,
15
+ zIndex: isPinned ? 1 : undefined,
16
+ };
17
+ };
18
+ const getPinnedColumnClassNames = (column) => {
19
+ const isPinned = column.getIsPinned();
20
+ const isLastLeftPinnedColumn = isPinned === 'left' && column.getIsLastColumn('left');
21
+ const isFirstRightPinnedColumn = isPinned === 'right' && column.getIsFirstColumn('right');
22
+ if (isLastLeftPinnedColumn) {
23
+ return DataGrid_module.pinnedColumnLeft;
24
+ }
25
+ if (isFirstRightPinnedColumn) {
26
+ return DataGrid_module.pinnedColumnRight;
27
+ }
28
+ return '';
29
+ };
30
+
31
+ exports.getPinnedColumnClassNames = getPinnedColumnClassNames;
32
+ exports.getPinnedColumnStyles = getPinnedColumnStyles;
33
+ //# sourceMappingURL=pinnedColumnUtils.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pinnedColumnUtils.cjs","sources":["../../../../src/components/DataGrid/utils/pinnedColumnUtils.ts"],"sourcesContent":["import { Column } from '@tanstack/react-table';\nimport { CSSProperties } from 'react';\n\nimport { pinnedColumnLeft, pinnedColumnRight } from '../DataGrid.module.css';\n\nexport const getPinnedColumnStyles = (column: Column<any>): CSSProperties => {\n const isPinned = column.getIsPinned();\n\n if (!isPinned) {\n return {};\n }\n\n return {\n left: isPinned === 'left' ? `var(--${column.id}-start)` : undefined,\n right: isPinned === 'right' ? `var(--${column.id}-after)` : undefined,\n opacity: isPinned ? 0.95 : undefined,\n position: isPinned ? 'sticky' : undefined,\n zIndex: isPinned ? 1 : undefined,\n };\n};\n\nexport const getPinnedColumnClassNames = (column: Column<any>) => {\n const isPinned = column.getIsPinned();\n\n const isLastLeftPinnedColumn = isPinned === 'left' && column.getIsLastColumn('left');\n const isFirstRightPinnedColumn = isPinned === 'right' && column.getIsFirstColumn('right');\n\n if (isLastLeftPinnedColumn) {\n return pinnedColumnLeft;\n }\n\n if (isFirstRightPinnedColumn) {\n return pinnedColumnRight;\n }\n\n return '';\n};\n"],"names":["pinnedColumnLeft","pinnedColumnRight"],"mappings":";;;;AAKa,MAAA,qBAAqB,GAAG,CAAC,MAAmB,KAAmB;AAC1E,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE;IAErC,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,OAAO,EAAE;AACV;IAED,OAAO;AACL,QAAA,IAAI,EAAE,QAAQ,KAAK,MAAM,GAAG,CAAS,MAAA,EAAA,MAAM,CAAC,EAAE,CAAA,OAAA,CAAS,GAAG,SAAS;AACnE,QAAA,KAAK,EAAE,QAAQ,KAAK,OAAO,GAAG,CAAS,MAAA,EAAA,MAAM,CAAC,EAAE,CAAA,OAAA,CAAS,GAAG,SAAS;QACrE,OAAO,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS;QACpC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;QACzC,MAAM,EAAE,QAAQ,GAAG,CAAC,GAAG,SAAS;KACjC;AACH;AAEa,MAAA,yBAAyB,GAAG,CAAC,MAAmB,KAAI;AAC/D,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE;AAErC,IAAA,MAAM,sBAAsB,GAAG,QAAQ,KAAK,MAAM,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC;AACpF,IAAA,MAAM,wBAAwB,GAAG,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAEzF,IAAA,IAAI,sBAAsB,EAAE;AAC1B,QAAA,OAAOA,gCAAgB;AACxB;AAED,IAAA,IAAI,wBAAwB,EAAE;AAC5B,QAAA,OAAOC,iCAAiB;AACzB;AAED,IAAA,OAAO,EAAE;AACX;;;;;"}
@@ -0,0 +1,4 @@
1
+ import { Column } from '@tanstack/react-table';
2
+ import { CSSProperties } from 'react';
3
+ export declare const getPinnedColumnStyles: (column: Column<any>) => CSSProperties;
4
+ export declare const getPinnedColumnClassNames: (column: Column<any>) => any;
@@ -0,0 +1,30 @@
1
+ import { pinnedColumnLeft, pinnedColumnRight } from '../DataGrid.module.css.js';
2
+
3
+ const getPinnedColumnStyles = (column) => {
4
+ const isPinned = column.getIsPinned();
5
+ if (!isPinned) {
6
+ return {};
7
+ }
8
+ return {
9
+ left: isPinned === 'left' ? `var(--${column.id}-start)` : undefined,
10
+ right: isPinned === 'right' ? `var(--${column.id}-after)` : undefined,
11
+ opacity: isPinned ? 0.95 : undefined,
12
+ position: isPinned ? 'sticky' : undefined,
13
+ zIndex: isPinned ? 1 : undefined,
14
+ };
15
+ };
16
+ const getPinnedColumnClassNames = (column) => {
17
+ const isPinned = column.getIsPinned();
18
+ const isLastLeftPinnedColumn = isPinned === 'left' && column.getIsLastColumn('left');
19
+ const isFirstRightPinnedColumn = isPinned === 'right' && column.getIsFirstColumn('right');
20
+ if (isLastLeftPinnedColumn) {
21
+ return pinnedColumnLeft;
22
+ }
23
+ if (isFirstRightPinnedColumn) {
24
+ return pinnedColumnRight;
25
+ }
26
+ return '';
27
+ };
28
+
29
+ export { getPinnedColumnClassNames, getPinnedColumnStyles };
30
+ //# sourceMappingURL=pinnedColumnUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pinnedColumnUtils.js","sources":["../../../../src/components/DataGrid/utils/pinnedColumnUtils.ts"],"sourcesContent":["import { Column } from '@tanstack/react-table';\nimport { CSSProperties } from 'react';\n\nimport { pinnedColumnLeft, pinnedColumnRight } from '../DataGrid.module.css';\n\nexport const getPinnedColumnStyles = (column: Column<any>): CSSProperties => {\n const isPinned = column.getIsPinned();\n\n if (!isPinned) {\n return {};\n }\n\n return {\n left: isPinned === 'left' ? `var(--${column.id}-start)` : undefined,\n right: isPinned === 'right' ? `var(--${column.id}-after)` : undefined,\n opacity: isPinned ? 0.95 : undefined,\n position: isPinned ? 'sticky' : undefined,\n zIndex: isPinned ? 1 : undefined,\n };\n};\n\nexport const getPinnedColumnClassNames = (column: Column<any>) => {\n const isPinned = column.getIsPinned();\n\n const isLastLeftPinnedColumn = isPinned === 'left' && column.getIsLastColumn('left');\n const isFirstRightPinnedColumn = isPinned === 'right' && column.getIsFirstColumn('right');\n\n if (isLastLeftPinnedColumn) {\n return pinnedColumnLeft;\n }\n\n if (isFirstRightPinnedColumn) {\n return pinnedColumnRight;\n }\n\n return '';\n};\n"],"names":[],"mappings":";;AAKa,MAAA,qBAAqB,GAAG,CAAC,MAAmB,KAAmB;AAC1E,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE;IAErC,IAAI,CAAC,QAAQ,EAAE;AACb,QAAA,OAAO,EAAE;AACV;IAED,OAAO;AACL,QAAA,IAAI,EAAE,QAAQ,KAAK,MAAM,GAAG,CAAS,MAAA,EAAA,MAAM,CAAC,EAAE,CAAA,OAAA,CAAS,GAAG,SAAS;AACnE,QAAA,KAAK,EAAE,QAAQ,KAAK,OAAO,GAAG,CAAS,MAAA,EAAA,MAAM,CAAC,EAAE,CAAA,OAAA,CAAS,GAAG,SAAS;QACrE,OAAO,EAAE,QAAQ,GAAG,IAAI,GAAG,SAAS;QACpC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS;QACzC,MAAM,EAAE,QAAQ,GAAG,CAAC,GAAG,SAAS;KACjC;AACH;AAEa,MAAA,yBAAyB,GAAG,CAAC,MAAmB,KAAI;AAC/D,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,EAAE;AAErC,IAAA,MAAM,sBAAsB,GAAG,QAAQ,KAAK,MAAM,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC;AACpF,IAAA,MAAM,wBAAwB,GAAG,QAAQ,KAAK,OAAO,IAAI,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC;AAEzF,IAAA,IAAI,sBAAsB,EAAE;AAC1B,QAAA,OAAO,gBAAgB;AACxB;AAED,IAAA,IAAI,wBAAwB,EAAE;AAC5B,QAAA,OAAO,iBAAiB;AACzB;AAED,IAAA,OAAO,EAAE;AACX;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veeqo/ui",
3
- "version": "9.9.0",
3
+ "version": "9.9.1",
4
4
  "description": "New optimised component library for Veeqo.",
5
5
  "author": "Robert Wealthall",
6
6
  "license": "ISC",