@veeqo/ui 9.10.2 → 9.11.0

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 (49) hide show
  1. package/dist/components/Accordion/Accordion.cjs +4 -4
  2. package/dist/components/Accordion/Accordion.cjs.map +1 -1
  3. package/dist/components/Accordion/Accordion.js +4 -4
  4. package/dist/components/Accordion/Accordion.js.map +1 -1
  5. package/dist/components/DataGrid/DataGrid.cjs +22 -52
  6. package/dist/components/DataGrid/DataGrid.cjs.map +1 -1
  7. package/dist/components/DataGrid/DataGrid.d.ts +1 -1
  8. package/dist/components/DataGrid/DataGrid.js +22 -52
  9. package/dist/components/DataGrid/DataGrid.js.map +1 -1
  10. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.cjs +9 -0
  11. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.cjs.map +1 -1
  12. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.js +9 -0
  13. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.js.map +1 -1
  14. package/dist/components/DataGrid/components/Columns/Columns.cjs +9 -8
  15. package/dist/components/DataGrid/components/Columns/Columns.cjs.map +1 -1
  16. package/dist/components/DataGrid/components/Columns/Columns.js +9 -8
  17. package/dist/components/DataGrid/components/Columns/Columns.js.map +1 -1
  18. package/dist/components/DataGrid/components/GridContainer/GridContainer.cjs +7 -0
  19. package/dist/components/DataGrid/components/GridContainer/GridContainer.cjs.map +1 -1
  20. package/dist/components/DataGrid/components/GridContainer/GridContainer.js +7 -0
  21. package/dist/components/DataGrid/components/GridContainer/GridContainer.js.map +1 -1
  22. package/dist/components/DataGrid/components/Header/HeaderCell/HeaderCell.cjs +10 -2
  23. package/dist/components/DataGrid/components/Header/HeaderCell/HeaderCell.cjs.map +1 -1
  24. package/dist/components/DataGrid/components/Header/HeaderCell/HeaderCell.js +10 -2
  25. package/dist/components/DataGrid/components/Header/HeaderCell/HeaderCell.js.map +1 -1
  26. package/dist/components/DataGrid/components/Header/HeaderCell/HeaderCell.module.scss.cjs +2 -2
  27. package/dist/components/DataGrid/components/Header/HeaderCell/HeaderCell.module.scss.cjs.map +1 -1
  28. package/dist/components/DataGrid/components/Header/HeaderCell/HeaderCell.module.scss.js +2 -2
  29. package/dist/components/DataGrid/components/Header/HeaderCell/HeaderCell.module.scss.js.map +1 -1
  30. package/dist/components/DataGrid/hooks/index.d.ts +4 -0
  31. package/dist/components/DataGrid/hooks/useColumnState.cjs +67 -0
  32. package/dist/components/DataGrid/hooks/useColumnState.cjs.map +1 -0
  33. package/dist/components/DataGrid/hooks/useColumnState.d.ts +14 -0
  34. package/dist/components/DataGrid/hooks/useColumnState.js +65 -0
  35. package/dist/components/DataGrid/hooks/useColumnState.js.map +1 -0
  36. package/dist/components/DataGrid/hooks/useColumnWidthState.cjs +52 -0
  37. package/dist/components/DataGrid/hooks/useColumnWidthState.cjs.map +1 -0
  38. package/dist/components/DataGrid/hooks/useColumnWidthState.d.ts +25 -0
  39. package/dist/components/DataGrid/hooks/useColumnWidthState.js +50 -0
  40. package/dist/components/DataGrid/hooks/useColumnWidthState.js.map +1 -0
  41. package/dist/components/DataGrid/types/ColumnWidths.d.ts +1 -0
  42. package/dist/components/DataGrid/types/DataGridProps.d.ts +10 -0
  43. package/dist/components/DataGrid/utils/index.d.ts +0 -1
  44. package/package.json +1 -1
  45. package/dist/components/DataGrid/utils/isLastColumn.cjs +0 -11
  46. package/dist/components/DataGrid/utils/isLastColumn.cjs.map +0 -1
  47. package/dist/components/DataGrid/utils/isLastColumn.d.ts +0 -2
  48. package/dist/components/DataGrid/utils/isLastColumn.js +0 -9
  49. package/dist/components/DataGrid/utils/isLastColumn.js.map +0 -1
@@ -29,8 +29,8 @@ const Accordion = ({ className, children, label, iconSlot, glyphColor = colors.c
29
29
  React__default.default.createElement(Text.Text, { variant: summaryTextVariant }, label)),
30
30
  React__default.default.createElement(styled.Right, null,
31
31
  React__default.default.createElement(framerMotion.motion.span, { animate: {
32
- rotate: shouldOpen ? 180 : 0,
33
- } },
32
+ rotate: shouldOpen ? 0 : 180,
33
+ }, initial: { rotate: 180 } },
34
34
  React__default.default.createElement(UpArrowIcon.UpArrowIcon, { name: shouldOpen ? 'downArrow' : 'upArrow' })))),
35
35
  !!description && React__default.default.createElement(styled.Description, { variant: "hintText" }, description)),
36
36
  shouldOpen && (React__default.default.createElement(styled.UnstyledAccordionContent, { ...FRAMER_MOTION_CONFIG }, children))));
@@ -43,8 +43,8 @@ const Accordion = ({ className, children, label, iconSlot, glyphColor = colors.c
43
43
  React__default.default.createElement(Text.Text, { variant: summaryTextVariant }, label)),
44
44
  React__default.default.createElement(styled.Right, null,
45
45
  React__default.default.createElement(framerMotion.motion.span, { animate: {
46
- rotate: shouldOpen ? 180 : 0,
47
- } },
46
+ rotate: shouldOpen ? 0 : 180,
47
+ }, initial: { rotate: 180 } },
48
48
  React__default.default.createElement(UpArrowIcon.UpArrowIcon, { name: shouldOpen ? 'downArrow' : 'upArrow' })))),
49
49
  !!description && React__default.default.createElement(styled.Description, { variant: "hintText" }, description)),
50
50
  shouldOpen && React__default.default.createElement(styled.AccordionContent, { ...FRAMER_MOTION_CONFIG }, children)));
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.cjs","sources":["../../../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import React, { FC, useState } from 'react';\n\nimport { motion } from 'framer-motion';\nimport {\n Top,\n Text,\n Left,\n Right,\n Description,\n AccordionDetails,\n AccordionContent,\n AccordionSummary,\n UnstyledAccordionSummary,\n UnstyledAccordionContent,\n} from './styled';\nimport { colors } from '../../theme/modules/colors';\nimport { UpArrowIcon } from '../../tempIcons/UpArrowIcon';\nimport { AccordionProps } from './types';\n\nexport const Accordion: FC<AccordionProps> = ({\n className,\n children,\n label,\n iconSlot,\n glyphColor = colors.neutral.ink.lightest,\n timeout = 350,\n description,\n shouldOpenOnMount,\n variant = 'default',\n summaryTextVariant = 'body',\n}: AccordionProps) => {\n const [shouldOpen, setShouldOpen] = useState(!!shouldOpenOnMount);\n const handleOpen = () => setShouldOpen(!shouldOpen);\n\n const FRAMER_MOTION_CONFIG = {\n initial: { opacity: 0 },\n exit: { opacity: 0 },\n animate: { opacity: 1 },\n transition: { from: 0, type: 'tween', duration: timeout / 1000 },\n };\n\n if (variant === 'unstyled') {\n return (\n <AccordionDetails open={!!shouldOpenOnMount} className={className}>\n <UnstyledAccordionSummary onClick={handleOpen}>\n <Top>\n <Left glyphColor={glyphColor}>\n {iconSlot}\n <Text variant={summaryTextVariant}>{label}</Text>\n </Left>\n <Right>\n <motion.span\n animate={{\n rotate: shouldOpen ? 180 : 0,\n }}\n >\n <UpArrowIcon name={shouldOpen ? 'downArrow' : 'upArrow'} />\n </motion.span>\n </Right>\n </Top>\n {!!description && <Description variant=\"hintText\">{description}</Description>}\n </UnstyledAccordionSummary>\n {shouldOpen && (\n <UnstyledAccordionContent {...FRAMER_MOTION_CONFIG}>{children}</UnstyledAccordionContent>\n )}\n </AccordionDetails>\n );\n }\n\n return (\n <AccordionDetails open={!!shouldOpenOnMount} className={className}>\n <AccordionSummary onClick={handleOpen}>\n <Top>\n <Left glyphColor={glyphColor}>\n {iconSlot}\n <Text variant={summaryTextVariant}>{label}</Text>\n </Left>\n <Right>\n <motion.span\n animate={{\n rotate: shouldOpen ? 180 : 0,\n }}\n >\n <UpArrowIcon name={shouldOpen ? 'downArrow' : 'upArrow'} />\n </motion.span>\n </Right>\n </Top>\n {!!description && <Description variant=\"hintText\">{description}</Description>}\n </AccordionSummary>\n {shouldOpen && <AccordionContent {...FRAMER_MOTION_CONFIG}>{children}</AccordionContent>}\n </AccordionDetails>\n );\n};\n"],"names":["colors","useState","React","AccordionDetails","UnstyledAccordionSummary","Top","Left","Text","Right","motion","UpArrowIcon","Description","UnstyledAccordionContent","AccordionSummary","AccordionContent"],"mappings":"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"}
1
+ {"version":3,"file":"Accordion.cjs","sources":["../../../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import React, { FC, useState } from 'react';\n\nimport { motion } from 'framer-motion';\nimport {\n Top,\n Text,\n Left,\n Right,\n Description,\n AccordionDetails,\n AccordionContent,\n AccordionSummary,\n UnstyledAccordionSummary,\n UnstyledAccordionContent,\n} from './styled';\nimport { colors } from '../../theme/modules/colors';\nimport { UpArrowIcon } from '../../tempIcons/UpArrowIcon';\nimport { AccordionProps } from './types';\n\nexport const Accordion: FC<AccordionProps> = ({\n className,\n children,\n label,\n iconSlot,\n glyphColor = colors.neutral.ink.lightest,\n timeout = 350,\n description,\n shouldOpenOnMount,\n variant = 'default',\n summaryTextVariant = 'body',\n}: AccordionProps) => {\n const [shouldOpen, setShouldOpen] = useState(!!shouldOpenOnMount);\n const handleOpen = () => setShouldOpen(!shouldOpen);\n\n const FRAMER_MOTION_CONFIG = {\n initial: { opacity: 0 },\n exit: { opacity: 0 },\n animate: { opacity: 1 },\n transition: { from: 0, type: 'tween', duration: timeout / 1000 },\n };\n\n if (variant === 'unstyled') {\n return (\n <AccordionDetails open={!!shouldOpenOnMount} className={className}>\n <UnstyledAccordionSummary onClick={handleOpen}>\n <Top>\n <Left glyphColor={glyphColor}>\n {iconSlot}\n <Text variant={summaryTextVariant}>{label}</Text>\n </Left>\n <Right>\n <motion.span\n animate={{\n rotate: shouldOpen ? 0 : 180,\n }}\n initial={{ rotate: 180 }}\n >\n <UpArrowIcon name={shouldOpen ? 'downArrow' : 'upArrow'} />\n </motion.span>\n </Right>\n </Top>\n {!!description && <Description variant=\"hintText\">{description}</Description>}\n </UnstyledAccordionSummary>\n {shouldOpen && (\n <UnstyledAccordionContent {...FRAMER_MOTION_CONFIG}>{children}</UnstyledAccordionContent>\n )}\n </AccordionDetails>\n );\n }\n\n return (\n <AccordionDetails open={!!shouldOpenOnMount} className={className}>\n <AccordionSummary onClick={handleOpen}>\n <Top>\n <Left glyphColor={glyphColor}>\n {iconSlot}\n <Text variant={summaryTextVariant}>{label}</Text>\n </Left>\n <Right>\n <motion.span\n animate={{\n rotate: shouldOpen ? 0 : 180,\n }}\n initial={{ rotate: 180 }}\n >\n <UpArrowIcon name={shouldOpen ? 'downArrow' : 'upArrow'} />\n </motion.span>\n </Right>\n </Top>\n {!!description && <Description variant=\"hintText\">{description}</Description>}\n </AccordionSummary>\n {shouldOpen && <AccordionContent {...FRAMER_MOTION_CONFIG}>{children}</AccordionContent>}\n </AccordionDetails>\n );\n};\n"],"names":["colors","useState","React","AccordionDetails","UnstyledAccordionSummary","Top","Left","Text","Right","motion","UpArrowIcon","Description","UnstyledAccordionContent","AccordionSummary","AccordionContent"],"mappings":"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"}
@@ -23,8 +23,8 @@ const Accordion = ({ className, children, label, iconSlot, glyphColor = colors.n
23
23
  React__default.createElement(Text, { variant: summaryTextVariant }, label)),
24
24
  React__default.createElement(Right, null,
25
25
  React__default.createElement(motion.span, { animate: {
26
- rotate: shouldOpen ? 180 : 0,
27
- } },
26
+ rotate: shouldOpen ? 0 : 180,
27
+ }, initial: { rotate: 180 } },
28
28
  React__default.createElement(UpArrowIcon, { name: shouldOpen ? 'downArrow' : 'upArrow' })))),
29
29
  !!description && React__default.createElement(Description, { variant: "hintText" }, description)),
30
30
  shouldOpen && (React__default.createElement(UnstyledAccordionContent, { ...FRAMER_MOTION_CONFIG }, children))));
@@ -37,8 +37,8 @@ const Accordion = ({ className, children, label, iconSlot, glyphColor = colors.n
37
37
  React__default.createElement(Text, { variant: summaryTextVariant }, label)),
38
38
  React__default.createElement(Right, null,
39
39
  React__default.createElement(motion.span, { animate: {
40
- rotate: shouldOpen ? 180 : 0,
41
- } },
40
+ rotate: shouldOpen ? 0 : 180,
41
+ }, initial: { rotate: 180 } },
42
42
  React__default.createElement(UpArrowIcon, { name: shouldOpen ? 'downArrow' : 'upArrow' })))),
43
43
  !!description && React__default.createElement(Description, { variant: "hintText" }, description)),
44
44
  shouldOpen && React__default.createElement(AccordionContent, { ...FRAMER_MOTION_CONFIG }, children)));
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.js","sources":["../../../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import React, { FC, useState } from 'react';\n\nimport { motion } from 'framer-motion';\nimport {\n Top,\n Text,\n Left,\n Right,\n Description,\n AccordionDetails,\n AccordionContent,\n AccordionSummary,\n UnstyledAccordionSummary,\n UnstyledAccordionContent,\n} from './styled';\nimport { colors } from '../../theme/modules/colors';\nimport { UpArrowIcon } from '../../tempIcons/UpArrowIcon';\nimport { AccordionProps } from './types';\n\nexport const Accordion: FC<AccordionProps> = ({\n className,\n children,\n label,\n iconSlot,\n glyphColor = colors.neutral.ink.lightest,\n timeout = 350,\n description,\n shouldOpenOnMount,\n variant = 'default',\n summaryTextVariant = 'body',\n}: AccordionProps) => {\n const [shouldOpen, setShouldOpen] = useState(!!shouldOpenOnMount);\n const handleOpen = () => setShouldOpen(!shouldOpen);\n\n const FRAMER_MOTION_CONFIG = {\n initial: { opacity: 0 },\n exit: { opacity: 0 },\n animate: { opacity: 1 },\n transition: { from: 0, type: 'tween', duration: timeout / 1000 },\n };\n\n if (variant === 'unstyled') {\n return (\n <AccordionDetails open={!!shouldOpenOnMount} className={className}>\n <UnstyledAccordionSummary onClick={handleOpen}>\n <Top>\n <Left glyphColor={glyphColor}>\n {iconSlot}\n <Text variant={summaryTextVariant}>{label}</Text>\n </Left>\n <Right>\n <motion.span\n animate={{\n rotate: shouldOpen ? 180 : 0,\n }}\n >\n <UpArrowIcon name={shouldOpen ? 'downArrow' : 'upArrow'} />\n </motion.span>\n </Right>\n </Top>\n {!!description && <Description variant=\"hintText\">{description}</Description>}\n </UnstyledAccordionSummary>\n {shouldOpen && (\n <UnstyledAccordionContent {...FRAMER_MOTION_CONFIG}>{children}</UnstyledAccordionContent>\n )}\n </AccordionDetails>\n );\n }\n\n return (\n <AccordionDetails open={!!shouldOpenOnMount} className={className}>\n <AccordionSummary onClick={handleOpen}>\n <Top>\n <Left glyphColor={glyphColor}>\n {iconSlot}\n <Text variant={summaryTextVariant}>{label}</Text>\n </Left>\n <Right>\n <motion.span\n animate={{\n rotate: shouldOpen ? 180 : 0,\n }}\n >\n <UpArrowIcon name={shouldOpen ? 'downArrow' : 'upArrow'} />\n </motion.span>\n </Right>\n </Top>\n {!!description && <Description variant=\"hintText\">{description}</Description>}\n </AccordionSummary>\n {shouldOpen && <AccordionContent {...FRAMER_MOTION_CONFIG}>{children}</AccordionContent>}\n </AccordionDetails>\n );\n};\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"Accordion.js","sources":["../../../src/components/Accordion/Accordion.tsx"],"sourcesContent":["import React, { FC, useState } from 'react';\n\nimport { motion } from 'framer-motion';\nimport {\n Top,\n Text,\n Left,\n Right,\n Description,\n AccordionDetails,\n AccordionContent,\n AccordionSummary,\n UnstyledAccordionSummary,\n UnstyledAccordionContent,\n} from './styled';\nimport { colors } from '../../theme/modules/colors';\nimport { UpArrowIcon } from '../../tempIcons/UpArrowIcon';\nimport { AccordionProps } from './types';\n\nexport const Accordion: FC<AccordionProps> = ({\n className,\n children,\n label,\n iconSlot,\n glyphColor = colors.neutral.ink.lightest,\n timeout = 350,\n description,\n shouldOpenOnMount,\n variant = 'default',\n summaryTextVariant = 'body',\n}: AccordionProps) => {\n const [shouldOpen, setShouldOpen] = useState(!!shouldOpenOnMount);\n const handleOpen = () => setShouldOpen(!shouldOpen);\n\n const FRAMER_MOTION_CONFIG = {\n initial: { opacity: 0 },\n exit: { opacity: 0 },\n animate: { opacity: 1 },\n transition: { from: 0, type: 'tween', duration: timeout / 1000 },\n };\n\n if (variant === 'unstyled') {\n return (\n <AccordionDetails open={!!shouldOpenOnMount} className={className}>\n <UnstyledAccordionSummary onClick={handleOpen}>\n <Top>\n <Left glyphColor={glyphColor}>\n {iconSlot}\n <Text variant={summaryTextVariant}>{label}</Text>\n </Left>\n <Right>\n <motion.span\n animate={{\n rotate: shouldOpen ? 0 : 180,\n }}\n initial={{ rotate: 180 }}\n >\n <UpArrowIcon name={shouldOpen ? 'downArrow' : 'upArrow'} />\n </motion.span>\n </Right>\n </Top>\n {!!description && <Description variant=\"hintText\">{description}</Description>}\n </UnstyledAccordionSummary>\n {shouldOpen && (\n <UnstyledAccordionContent {...FRAMER_MOTION_CONFIG}>{children}</UnstyledAccordionContent>\n )}\n </AccordionDetails>\n );\n }\n\n return (\n <AccordionDetails open={!!shouldOpenOnMount} className={className}>\n <AccordionSummary onClick={handleOpen}>\n <Top>\n <Left glyphColor={glyphColor}>\n {iconSlot}\n <Text variant={summaryTextVariant}>{label}</Text>\n </Left>\n <Right>\n <motion.span\n animate={{\n rotate: shouldOpen ? 0 : 180,\n }}\n initial={{ rotate: 180 }}\n >\n <UpArrowIcon name={shouldOpen ? 'downArrow' : 'upArrow'} />\n </motion.span>\n </Right>\n </Top>\n {!!description && <Description variant=\"hintText\">{description}</Description>}\n </AccordionSummary>\n {shouldOpen && <AccordionContent {...FRAMER_MOTION_CONFIG}>{children}</AccordionContent>}\n </AccordionDetails>\n );\n};\n"],"names":["React"],"mappings":"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"}
@@ -6,7 +6,6 @@ require('../../hooks/useFocusVisible.cjs');
6
6
  require('uid/secure');
7
7
  var useDragToScroll = require('../../hooks/useDragToScroll.cjs');
8
8
  require('lodash.throttle');
9
- var ColumnMapper = require('./utils/ColumnMapper.cjs');
10
9
  var getAriaRoles = require('./utils/getAriaRoles.cjs');
11
10
  var Columns = require('./components/Columns/Columns.cjs');
12
11
  var Header = require('./components/Header/Header.cjs');
@@ -14,11 +13,11 @@ var Body = require('./components/Body/Body.cjs');
14
13
  var Footer = require('./components/Footer/Footer.cjs');
15
14
  var GridContainer = require('./components/GridContainer/GridContainer.cjs');
16
15
  var useSortingState = require('./hooks/useSortingState.cjs');
16
+ var useSelectionState = require('./hooks/useSelectionState.cjs');
17
17
  var usePinnedColumnLayout = require('./hooks/usePinnedColumnLayout.cjs');
18
18
  var useKeyboardNavigation = require('./hooks/useKeyboardNavigation.cjs');
19
- var useSelectionState = require('./hooks/useSelectionState.cjs');
20
- var constants = require('./constants.cjs');
21
- var SelectionColumnDefinition = require('./columns/SelectionColumnDefinition.cjs');
19
+ var useColumnState = require('./hooks/useColumnState.cjs');
20
+ var useColumnWidthState = require('./hooks/useColumnWidthState.cjs');
22
21
  var useExpandedState = require('./hooks/useExpandedState.cjs');
23
22
 
24
23
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
@@ -43,7 +42,10 @@ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
43
42
  *
44
43
  * *Important: This component uses CSS modules, and therefore requires a `<ThemeInjector />` to be present on your page.*
45
44
  */
46
- const DataGrid = ({ density = 'base', striped = true, borderMode = 'full', resizeMode = 'off', containerStyle, enableKeyboardNavigation = false, columns, hiddenColumns, columnOrdering, pinnedColumns, data, getRowId, sortState, onSortChanged, selectionMode, selectedRows, disabledRows, onSelectionChanged, rowGrouping, 'aria-label': ariaLabel, }) => {
45
+ const DataGrid = ({ density = 'base', striped = true, borderMode = 'full', resizeMode = 'off', containerStyle, enableKeyboardNavigation = false, columns, hiddenColumns, columnOrdering, pinnedColumns, data, getRowId, sortState, onSortChanged, selectionMode, selectedRows, disabledRows, onSelectionChanged, rowGrouping, columnWidths, onColumnsResized, 'aria-label': ariaLabel, }) => {
46
+ /**
47
+ * Refs to the table and table container. Used for keyboard navigation and drag-to-scroll.
48
+ */
47
49
  const containerRef = React.useRef(null);
48
50
  const tableRef = React.useRef(null);
49
51
  const showFooter = React.useMemo(() => columns.some((column) => column.renderFooter), [columns]);
@@ -61,54 +63,20 @@ const DataGrid = ({ density = 'base', striped = true, borderMode = 'full', resiz
61
63
  const { enableSorting, enableMultiRemove, enableSortingRemoval, manualSorting, sorting, onSortingChange, } = useSortingState.useSortingState({ columns, sortState, onSortChanged });
62
64
  const { expanded, onExpandedChange, enableExpanding, getRowCanExpand, getSubRows } = useExpandedState.useExpandedState(rowGrouping);
63
65
  /**
64
- * Mapping of column definitions.
66
+ * Hooks to setup column state, including visibility, ordering, pinning, and width(s).
65
67
  */
66
- const columnMapper = React.useRef(new ColumnMapper.ColumnMapper());
67
- const mappedColumnDefinitions = React.useMemo(() => {
68
- const mappedColumns = columns.map((column) => columnMapper.current.mapColumnDefinition(column));
69
- if (enableRowSelection) {
70
- mappedColumns.unshift(SelectionColumnDefinition.SelectionColumnDefinition);
71
- }
72
- return mappedColumns;
73
- }, [columns, enableRowSelection]);
74
- /**
75
- * Stable references for column states (visibility, order, pinning).
76
- */
77
- // Column render order - the order of the array indicates the order on screen.
78
- const columnOrder = React.useMemo(() => {
79
- if (!columnOrdering || columnOrdering.length === 0) {
80
- return undefined;
81
- }
82
- // If we have a custom column order, we need to make sure the selection column always appears first.
83
- if (enableRowSelection) {
84
- return ['selection', ...columnOrdering];
85
- }
86
- return columnOrdering;
87
- }, [columnOrdering, enableRowSelection]);
88
- // Column visibiilty - record of column ID's to visibility, where false/no value = hidden.
89
- const columnVisibility = React.useMemo(() => {
90
- // We can't have no columns visible - if the array is empty we show them all.
91
- if (!hiddenColumns || hiddenColumns.length === columns.length) {
92
- return undefined;
93
- }
94
- return columns.reduce((acc, column) => ({
95
- ...acc,
96
- [column.id]: !hiddenColumns.includes(column.id),
97
- }), {});
98
- }, [hiddenColumns, columns]);
99
- // Pinned columns
100
- const columnPinning = React.useMemo(() => {
101
- var _a, _b;
102
- let left = (_a = pinnedColumns === null || pinnedColumns === undefined ? undefined : pinnedColumns.left) !== null && _a !== undefined ? _a : [];
103
- // If we have any left-pinned columns, we need to include the selection column as it should appear first.
104
- if (enableRowSelection && left.length > 0) {
105
- left = [constants.SELECTION_COLUMN_ID, ...left];
106
- }
107
- return {
108
- left,
109
- right: (_b = pinnedColumns === null || pinnedColumns === undefined ? undefined : pinnedColumns.right) !== null && _b !== undefined ? _b : [],
110
- };
111
- }, [pinnedColumns, enableRowSelection]);
68
+ const { mappedColumnDefinitions, columnOrder, columnVisibility, columnPinning } = useColumnState.useColumnState({
69
+ columns,
70
+ hiddenColumns,
71
+ columnOrdering,
72
+ pinnedColumns,
73
+ enableRowSelection: !!enableRowSelection,
74
+ });
75
+ const { columnSizing, onColumnSizingChange } = useColumnWidthState.useColumnWidthState({
76
+ mappedColumnDefinitions,
77
+ columnWidths,
78
+ onColumnsResized,
79
+ });
112
80
  /**
113
81
  * Setup the TanStack table, including mapped column definitions, row data, and any additional state such as
114
82
  * column visibility and ordering.
@@ -119,6 +87,7 @@ const DataGrid = ({ density = 'base', striped = true, borderMode = 'full', resiz
119
87
  // Column settings
120
88
  columnResizeMode: resizeMode === 'off' ? undefined : resizeMode,
121
89
  enableColumnResizing,
90
+ onColumnSizingChange,
122
91
  // Row model
123
92
  getRowId,
124
93
  getCoreRowModel: reactTable.getCoreRowModel(),
@@ -148,6 +117,7 @@ const DataGrid = ({ density = 'base', striped = true, borderMode = 'full', resiz
148
117
  sorting,
149
118
  rowSelection,
150
119
  expanded,
120
+ columnSizing,
151
121
  },
152
122
  });
153
123
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"DataGrid.cjs","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"sourcesContent":["import React, { useMemo, useRef } from 'react';\nimport { getCoreRowModel, getExpandedRowModel, useReactTable } from '@tanstack/react-table';\n\nimport { useDragToScroll } from '../../hooks';\n\nimport { DataGridProps } from './types';\nimport { ColumnMapper, getAriaRoles } from './utils';\nimport { GridContainer, Header, Body, Footer, Columns } from './components';\nimport { MemoizedBody } from './components/Body';\n\nimport { usePinnedColumnLayout, useSortingState, useKeyboardNavigation } from './hooks';\n\nimport { useSelectionState } from './hooks/useSelectionState';\nimport { SELECTION_COLUMN_ID } from './constants';\nimport { SelectionColumnDefinition } from './columns';\nimport { useExpandedState } from './hooks/useExpandedState';\n\n/**\n * [WIP]\n *\n * A DataGrid component which renders data in a two-dimensional format, with columns and rows. Unlike the `DataTable`\n * component, the `DataGrid` supports both flat and hierarchical (tree) data.\n *\n * Under the hood, it uses [TanStack Table](http://tanstack.com/table/) for table management, and aims to replicate functionality\n * available in major third party grid components such as CloudScape's Table component, AgGrid, etc.\n *\n * Supported features include:\n * - Pinning, resizing (incl. smooth resizing), reordering, and hiding of columns\n * - Selection (single and multiple) and disabling of rows.\n * - Rendering of arbitrarily nested data, expanding/collapsing, and custom full-width 'group' rows.\n * - In-built keyboard navigation with arrow keys, and drag to scroll.\n * - Configurable density.\n *\n * *Important: This component uses CSS modules, and therefore requires a `<ThemeInjector />` to be present on your page.*\n */\nexport const DataGrid = ({\n density = 'base',\n striped = true,\n borderMode = 'full',\n resizeMode = 'off',\n containerStyle,\n enableKeyboardNavigation = false,\n\n columns,\n hiddenColumns,\n columnOrdering,\n pinnedColumns,\n\n data,\n getRowId,\n\n sortState,\n onSortChanged,\n\n selectionMode,\n selectedRows,\n disabledRows,\n onSelectionChanged,\n\n rowGrouping,\n\n 'aria-label': ariaLabel,\n}: DataGridProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const tableRef = useRef<HTMLTableElement>(null);\n\n const showFooter = useMemo(() => columns.some((column) => column.renderFooter), [columns]);\n const ariaRoles = useMemo(\n () => getAriaRoles({ enableKeyboardNavigation, rowGrouping }),\n [enableKeyboardNavigation, rowGrouping],\n );\n const enableColumnResizing = useMemo(() => resizeMode !== 'off', [resizeMode]);\n\n /**\n * Hooks to handle state for selection, sorting, and expanded/collapsed.\n */\n\n const { enableRowSelection, enableMultiRowSelection, rowSelection, onRowSelectionChange } =\n useSelectionState({\n selectionMode,\n selectedRows,\n disabledRows,\n onSelectionChanged,\n });\n\n const {\n enableSorting,\n enableMultiRemove,\n enableSortingRemoval,\n manualSorting,\n sorting,\n onSortingChange,\n } = useSortingState({ columns, sortState, onSortChanged });\n\n const { expanded, onExpandedChange, enableExpanding, getRowCanExpand, getSubRows } =\n useExpandedState(rowGrouping);\n\n /**\n * Mapping of column definitions.\n */\n const columnMapper = useRef(new ColumnMapper());\n const mappedColumnDefinitions = useMemo(() => {\n const mappedColumns = columns.map((column) => columnMapper.current.mapColumnDefinition(column));\n\n if (enableRowSelection) {\n mappedColumns.unshift(SelectionColumnDefinition);\n }\n\n return mappedColumns;\n }, [columns, enableRowSelection]);\n\n /**\n * Stable references for column states (visibility, order, pinning).\n */\n\n // Column render order - the order of the array indicates the order on screen.\n const columnOrder = useMemo(() => {\n if (!columnOrdering || columnOrdering.length === 0) {\n return undefined;\n }\n\n // If we have a custom column order, we need to make sure the selection column always appears first.\n if (enableRowSelection) {\n return ['selection', ...columnOrdering];\n }\n\n return columnOrdering;\n }, [columnOrdering, enableRowSelection]);\n\n // Column visibiilty - record of column ID's to visibility, where false/no value = hidden.\n const columnVisibility = useMemo(() => {\n // We can't have no columns visible - if the array is empty we show them all.\n if (!hiddenColumns || hiddenColumns.length === columns.length) {\n return undefined;\n }\n\n return columns.reduce(\n (acc, column) => ({\n ...acc,\n [column.id]: !hiddenColumns.includes(column.id),\n }),\n {},\n );\n }, [hiddenColumns, columns]);\n\n // Pinned columns\n const columnPinning = useMemo(() => {\n let left = pinnedColumns?.left ?? [];\n\n // If we have any left-pinned columns, we need to include the selection column as it should appear first.\n if (enableRowSelection && left.length > 0) {\n left = [SELECTION_COLUMN_ID, ...left];\n }\n\n return {\n left,\n right: pinnedColumns?.right ?? [],\n };\n }, [pinnedColumns, enableRowSelection]);\n\n /**\n * Setup the TanStack table, including mapped column definitions, row data, and any additional state such as\n * column visibility and ordering.\n */\n const table = useReactTable<any>({\n data,\n columns: mappedColumnDefinitions,\n\n // Column settings\n columnResizeMode: resizeMode === 'off' ? undefined : resizeMode,\n enableColumnResizing,\n\n // Row model\n getRowId,\n getCoreRowModel: getCoreRowModel(),\n\n // Sorting\n enableSorting,\n enableSortingRemoval,\n enableMultiRemove,\n manualSorting,\n onSortingChange,\n\n // Pinning\n enableColumnPinning: columnPinning.left.length + columnPinning.right.length > 0,\n\n // Selection\n enableRowSelection,\n enableMultiRowSelection,\n onRowSelectionChange,\n\n // Row grouping\n getSubRows,\n getRowCanExpand,\n onExpandedChange,\n enableExpanding,\n getExpandedRowModel: enableExpanding ? getExpandedRowModel() : undefined,\n\n // Inject external table state\n state: {\n columnOrder,\n columnVisibility,\n columnPinning,\n sorting,\n rowSelection,\n expanded,\n },\n });\n\n /**\n * Pinned column layout\n */\n const { pinnedColumnLayoutStyles } = usePinnedColumnLayout({ table });\n\n /**\n * Other hooks\n */\n useDragToScroll({ targetRef: containerRef, ignoreClassName: 'data-grid-column-resizer' });\n useKeyboardNavigation({ tableRef, enableKeyboardNavigation });\n\n return (\n <GridContainer\n containerRef={containerRef}\n tableRef={tableRef}\n borderMode={borderMode}\n containerStyles={{ ...containerStyle, ...pinnedColumnLayoutStyles }}\n ariaRoles={ariaRoles}\n enableResizeableColumns={enableColumnResizing}\n density={density}\n table={table}\n aria-label={ariaLabel}\n >\n {/* Columns */}\n {enableColumnResizing && <Columns table={table} />}\n\n {/* Header */}\n <Header table={table} />\n\n {/* Body */}\n {table.getState().columnSizingInfo.isResizingColumn ? (\n <MemoizedBody table={table} ariaRoles={ariaRoles} striped={striped} />\n ) : (\n <Body table={table} ariaRoles={ariaRoles} striped={striped} />\n )}\n\n {/* Footer */}\n {showFooter && <Footer table={table} ariaRoles={ariaRoles} />}\n </GridContainer>\n );\n};\n"],"names":["useRef","useMemo","getAriaRoles","useSelectionState","useSortingState","useExpandedState","ColumnMapper","SelectionColumnDefinition","SELECTION_COLUMN_ID","useReactTable","getCoreRowModel","getExpandedRowModel","usePinnedColumnLayout","useDragToScroll","useKeyboardNavigation","React","GridContainer","Columns","Header","MemoizedBody","Body","Footer"],"mappings":"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"}
1
+ {"version":3,"file":"DataGrid.cjs","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"sourcesContent":["import React, { useMemo, useRef } from 'react';\nimport { getCoreRowModel, getExpandedRowModel, useReactTable } from '@tanstack/react-table';\n\nimport { useDragToScroll } from '../../hooks';\n\nimport { DataGridProps } from './types';\nimport { getAriaRoles } from './utils';\nimport { GridContainer, Header, Body, Footer, Columns } from './components';\nimport { MemoizedBody } from './components/Body';\n\nimport {\n usePinnedColumnLayout,\n useSortingState,\n useKeyboardNavigation,\n useColumnState,\n useExpandedState,\n useColumnWidthState,\n useSelectionState,\n} from './hooks';\n\n/**\n * [WIP]\n *\n * A DataGrid component which renders data in a two-dimensional format, with columns and rows. Unlike the `DataTable`\n * component, the `DataGrid` supports both flat and hierarchical (tree) data.\n *\n * Under the hood, it uses [TanStack Table](http://tanstack.com/table/) for table management, and aims to replicate functionality\n * available in major third party grid components such as CloudScape's Table component, AgGrid, etc.\n *\n * Supported features include:\n * - Pinning, resizing (incl. smooth resizing), reordering, and hiding of columns\n * - Selection (single and multiple) and disabling of rows.\n * - Rendering of arbitrarily nested data, expanding/collapsing, and custom full-width 'group' rows.\n * - In-built keyboard navigation with arrow keys, and drag to scroll.\n * - Configurable density.\n *\n * *Important: This component uses CSS modules, and therefore requires a `<ThemeInjector />` to be present on your page.*\n */\nexport const DataGrid = ({\n density = 'base',\n striped = true,\n borderMode = 'full',\n resizeMode = 'off',\n containerStyle,\n enableKeyboardNavigation = false,\n\n columns,\n hiddenColumns,\n columnOrdering,\n pinnedColumns,\n\n data,\n getRowId,\n\n sortState,\n onSortChanged,\n\n selectionMode,\n selectedRows,\n disabledRows,\n onSelectionChanged,\n\n rowGrouping,\n\n columnWidths,\n onColumnsResized,\n\n 'aria-label': ariaLabel,\n}: DataGridProps) => {\n /**\n * Refs to the table and table container. Used for keyboard navigation and drag-to-scroll.\n */\n const containerRef = useRef<HTMLDivElement>(null);\n const tableRef = useRef<HTMLTableElement>(null);\n\n const showFooter = useMemo(() => columns.some((column) => column.renderFooter), [columns]);\n const ariaRoles = useMemo(\n () => getAriaRoles({ enableKeyboardNavigation, rowGrouping }),\n [enableKeyboardNavigation, rowGrouping],\n );\n const enableColumnResizing = useMemo(() => resizeMode !== 'off', [resizeMode]);\n\n /**\n * Hooks to handle state for selection, sorting, and expanded/collapsed.\n */\n const { enableRowSelection, enableMultiRowSelection, rowSelection, onRowSelectionChange } =\n useSelectionState({\n selectionMode,\n selectedRows,\n disabledRows,\n onSelectionChanged,\n });\n\n const {\n enableSorting,\n enableMultiRemove,\n enableSortingRemoval,\n manualSorting,\n sorting,\n onSortingChange,\n } = useSortingState({ columns, sortState, onSortChanged });\n\n const { expanded, onExpandedChange, enableExpanding, getRowCanExpand, getSubRows } =\n useExpandedState(rowGrouping);\n\n /**\n * Hooks to setup column state, including visibility, ordering, pinning, and width(s).\n */\n const { mappedColumnDefinitions, columnOrder, columnVisibility, columnPinning } = useColumnState({\n columns,\n hiddenColumns,\n columnOrdering,\n pinnedColumns,\n enableRowSelection: !!enableRowSelection,\n });\n\n const { columnSizing, onColumnSizingChange } = useColumnWidthState({\n mappedColumnDefinitions,\n columnWidths,\n onColumnsResized,\n });\n\n /**\n * Setup the TanStack table, including mapped column definitions, row data, and any additional state such as\n * column visibility and ordering.\n */\n const table = useReactTable<any>({\n data,\n columns: mappedColumnDefinitions,\n\n // Column settings\n columnResizeMode: resizeMode === 'off' ? undefined : resizeMode,\n enableColumnResizing,\n onColumnSizingChange,\n\n // Row model\n getRowId,\n getCoreRowModel: getCoreRowModel(),\n\n // Sorting\n enableSorting,\n enableSortingRemoval,\n enableMultiRemove,\n manualSorting,\n onSortingChange,\n\n // Pinning\n enableColumnPinning: columnPinning.left.length + columnPinning.right.length > 0,\n\n // Selection\n enableRowSelection,\n enableMultiRowSelection,\n onRowSelectionChange,\n\n // Row grouping\n getSubRows,\n getRowCanExpand,\n onExpandedChange,\n enableExpanding,\n getExpandedRowModel: enableExpanding ? getExpandedRowModel() : undefined,\n\n // Inject external table state\n state: {\n columnOrder,\n columnVisibility,\n columnPinning,\n sorting,\n rowSelection,\n expanded,\n columnSizing,\n },\n });\n\n /**\n * Pinned column layout\n */\n const { pinnedColumnLayoutStyles } = usePinnedColumnLayout({ table });\n\n /**\n * Other hooks\n */\n useDragToScroll({ targetRef: containerRef, ignoreClassName: 'data-grid-column-resizer' });\n useKeyboardNavigation({ tableRef, enableKeyboardNavigation });\n\n return (\n <GridContainer\n containerRef={containerRef}\n tableRef={tableRef}\n borderMode={borderMode}\n containerStyles={{ ...containerStyle, ...pinnedColumnLayoutStyles }}\n ariaRoles={ariaRoles}\n enableResizeableColumns={enableColumnResizing}\n density={density}\n table={table}\n aria-label={ariaLabel}\n >\n {/* Columns */}\n {enableColumnResizing && <Columns table={table} />}\n\n {/* Header */}\n <Header table={table} />\n\n {/* Body */}\n {table.getState().columnSizingInfo.isResizingColumn ? (\n <MemoizedBody table={table} ariaRoles={ariaRoles} striped={striped} />\n ) : (\n <Body table={table} ariaRoles={ariaRoles} striped={striped} />\n )}\n\n {/* Footer */}\n {showFooter && <Footer table={table} ariaRoles={ariaRoles} />}\n </GridContainer>\n );\n};\n"],"names":["useRef","useMemo","getAriaRoles","useSelectionState","useSortingState","useExpandedState","useColumnState","useColumnWidthState","useReactTable","getCoreRowModel","getExpandedRowModel","usePinnedColumnLayout","useDragToScroll","useKeyboardNavigation","React","GridContainer","Columns","Header","MemoizedBody","Body","Footer"],"mappings":"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"}
@@ -18,4 +18,4 @@ import { DataGridProps } from './types';
18
18
  *
19
19
  * *Important: This component uses CSS modules, and therefore requires a `<ThemeInjector />` to be present on your page.*
20
20
  */
21
- export declare const DataGrid: ({ density, striped, borderMode, resizeMode, containerStyle, enableKeyboardNavigation, columns, hiddenColumns, columnOrdering, pinnedColumns, data, getRowId, sortState, onSortChanged, selectionMode, selectedRows, disabledRows, onSelectionChanged, rowGrouping, "aria-label": ariaLabel, }: DataGridProps) => React.JSX.Element;
21
+ export declare const DataGrid: ({ density, striped, borderMode, resizeMode, containerStyle, enableKeyboardNavigation, columns, hiddenColumns, columnOrdering, pinnedColumns, data, getRowId, sortState, onSortChanged, selectionMode, selectedRows, disabledRows, onSelectionChanged, rowGrouping, columnWidths, onColumnsResized, "aria-label": ariaLabel, }: DataGridProps) => React.JSX.Element;
@@ -4,7 +4,6 @@ import '../../hooks/useFocusVisible.js';
4
4
  import 'uid/secure';
5
5
  import { useDragToScroll } from '../../hooks/useDragToScroll.js';
6
6
  import 'lodash.throttle';
7
- import { ColumnMapper } from './utils/ColumnMapper.js';
8
7
  import { getAriaRoles } from './utils/getAriaRoles.js';
9
8
  import { Columns } from './components/Columns/Columns.js';
10
9
  import { Header } from './components/Header/Header.js';
@@ -12,11 +11,11 @@ import { MemoizedBody, Body } from './components/Body/Body.js';
12
11
  import { Footer } from './components/Footer/Footer.js';
13
12
  import { GridContainer } from './components/GridContainer/GridContainer.js';
14
13
  import { useSortingState } from './hooks/useSortingState.js';
14
+ import { useSelectionState } from './hooks/useSelectionState.js';
15
15
  import { usePinnedColumnLayout } from './hooks/usePinnedColumnLayout.js';
16
16
  import { useKeyboardNavigation } from './hooks/useKeyboardNavigation.js';
17
- import { useSelectionState } from './hooks/useSelectionState.js';
18
- import { SELECTION_COLUMN_ID } from './constants.js';
19
- import { SelectionColumnDefinition } from './columns/SelectionColumnDefinition.js';
17
+ import { useColumnState } from './hooks/useColumnState.js';
18
+ import { useColumnWidthState } from './hooks/useColumnWidthState.js';
20
19
  import { useExpandedState } from './hooks/useExpandedState.js';
21
20
 
22
21
  /**
@@ -37,7 +36,10 @@ import { useExpandedState } from './hooks/useExpandedState.js';
37
36
  *
38
37
  * *Important: This component uses CSS modules, and therefore requires a `<ThemeInjector />` to be present on your page.*
39
38
  */
40
- const DataGrid = ({ density = 'base', striped = true, borderMode = 'full', resizeMode = 'off', containerStyle, enableKeyboardNavigation = false, columns, hiddenColumns, columnOrdering, pinnedColumns, data, getRowId, sortState, onSortChanged, selectionMode, selectedRows, disabledRows, onSelectionChanged, rowGrouping, 'aria-label': ariaLabel, }) => {
39
+ const DataGrid = ({ density = 'base', striped = true, borderMode = 'full', resizeMode = 'off', containerStyle, enableKeyboardNavigation = false, columns, hiddenColumns, columnOrdering, pinnedColumns, data, getRowId, sortState, onSortChanged, selectionMode, selectedRows, disabledRows, onSelectionChanged, rowGrouping, columnWidths, onColumnsResized, 'aria-label': ariaLabel, }) => {
40
+ /**
41
+ * Refs to the table and table container. Used for keyboard navigation and drag-to-scroll.
42
+ */
41
43
  const containerRef = useRef(null);
42
44
  const tableRef = useRef(null);
43
45
  const showFooter = useMemo(() => columns.some((column) => column.renderFooter), [columns]);
@@ -55,54 +57,20 @@ const DataGrid = ({ density = 'base', striped = true, borderMode = 'full', resiz
55
57
  const { enableSorting, enableMultiRemove, enableSortingRemoval, manualSorting, sorting, onSortingChange, } = useSortingState({ columns, sortState, onSortChanged });
56
58
  const { expanded, onExpandedChange, enableExpanding, getRowCanExpand, getSubRows } = useExpandedState(rowGrouping);
57
59
  /**
58
- * Mapping of column definitions.
60
+ * Hooks to setup column state, including visibility, ordering, pinning, and width(s).
59
61
  */
60
- const columnMapper = useRef(new ColumnMapper());
61
- const mappedColumnDefinitions = useMemo(() => {
62
- const mappedColumns = columns.map((column) => columnMapper.current.mapColumnDefinition(column));
63
- if (enableRowSelection) {
64
- mappedColumns.unshift(SelectionColumnDefinition);
65
- }
66
- return mappedColumns;
67
- }, [columns, enableRowSelection]);
68
- /**
69
- * Stable references for column states (visibility, order, pinning).
70
- */
71
- // Column render order - the order of the array indicates the order on screen.
72
- const columnOrder = useMemo(() => {
73
- if (!columnOrdering || columnOrdering.length === 0) {
74
- return undefined;
75
- }
76
- // If we have a custom column order, we need to make sure the selection column always appears first.
77
- if (enableRowSelection) {
78
- return ['selection', ...columnOrdering];
79
- }
80
- return columnOrdering;
81
- }, [columnOrdering, enableRowSelection]);
82
- // Column visibiilty - record of column ID's to visibility, where false/no value = hidden.
83
- const columnVisibility = useMemo(() => {
84
- // We can't have no columns visible - if the array is empty we show them all.
85
- if (!hiddenColumns || hiddenColumns.length === columns.length) {
86
- return undefined;
87
- }
88
- return columns.reduce((acc, column) => ({
89
- ...acc,
90
- [column.id]: !hiddenColumns.includes(column.id),
91
- }), {});
92
- }, [hiddenColumns, columns]);
93
- // Pinned columns
94
- const columnPinning = useMemo(() => {
95
- var _a, _b;
96
- let left = (_a = pinnedColumns === null || pinnedColumns === undefined ? undefined : pinnedColumns.left) !== null && _a !== undefined ? _a : [];
97
- // If we have any left-pinned columns, we need to include the selection column as it should appear first.
98
- if (enableRowSelection && left.length > 0) {
99
- left = [SELECTION_COLUMN_ID, ...left];
100
- }
101
- return {
102
- left,
103
- right: (_b = pinnedColumns === null || pinnedColumns === undefined ? undefined : pinnedColumns.right) !== null && _b !== undefined ? _b : [],
104
- };
105
- }, [pinnedColumns, enableRowSelection]);
62
+ const { mappedColumnDefinitions, columnOrder, columnVisibility, columnPinning } = useColumnState({
63
+ columns,
64
+ hiddenColumns,
65
+ columnOrdering,
66
+ pinnedColumns,
67
+ enableRowSelection: !!enableRowSelection,
68
+ });
69
+ const { columnSizing, onColumnSizingChange } = useColumnWidthState({
70
+ mappedColumnDefinitions,
71
+ columnWidths,
72
+ onColumnsResized,
73
+ });
106
74
  /**
107
75
  * Setup the TanStack table, including mapped column definitions, row data, and any additional state such as
108
76
  * column visibility and ordering.
@@ -113,6 +81,7 @@ const DataGrid = ({ density = 'base', striped = true, borderMode = 'full', resiz
113
81
  // Column settings
114
82
  columnResizeMode: resizeMode === 'off' ? undefined : resizeMode,
115
83
  enableColumnResizing,
84
+ onColumnSizingChange,
116
85
  // Row model
117
86
  getRowId,
118
87
  getCoreRowModel: getCoreRowModel(),
@@ -142,6 +111,7 @@ const DataGrid = ({ density = 'base', striped = true, borderMode = 'full', resiz
142
111
  sorting,
143
112
  rowSelection,
144
113
  expanded,
114
+ columnSizing,
145
115
  },
146
116
  });
147
117
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"DataGrid.js","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"sourcesContent":["import React, { useMemo, useRef } from 'react';\nimport { getCoreRowModel, getExpandedRowModel, useReactTable } from '@tanstack/react-table';\n\nimport { useDragToScroll } from '../../hooks';\n\nimport { DataGridProps } from './types';\nimport { ColumnMapper, getAriaRoles } from './utils';\nimport { GridContainer, Header, Body, Footer, Columns } from './components';\nimport { MemoizedBody } from './components/Body';\n\nimport { usePinnedColumnLayout, useSortingState, useKeyboardNavigation } from './hooks';\n\nimport { useSelectionState } from './hooks/useSelectionState';\nimport { SELECTION_COLUMN_ID } from './constants';\nimport { SelectionColumnDefinition } from './columns';\nimport { useExpandedState } from './hooks/useExpandedState';\n\n/**\n * [WIP]\n *\n * A DataGrid component which renders data in a two-dimensional format, with columns and rows. Unlike the `DataTable`\n * component, the `DataGrid` supports both flat and hierarchical (tree) data.\n *\n * Under the hood, it uses [TanStack Table](http://tanstack.com/table/) for table management, and aims to replicate functionality\n * available in major third party grid components such as CloudScape's Table component, AgGrid, etc.\n *\n * Supported features include:\n * - Pinning, resizing (incl. smooth resizing), reordering, and hiding of columns\n * - Selection (single and multiple) and disabling of rows.\n * - Rendering of arbitrarily nested data, expanding/collapsing, and custom full-width 'group' rows.\n * - In-built keyboard navigation with arrow keys, and drag to scroll.\n * - Configurable density.\n *\n * *Important: This component uses CSS modules, and therefore requires a `<ThemeInjector />` to be present on your page.*\n */\nexport const DataGrid = ({\n density = 'base',\n striped = true,\n borderMode = 'full',\n resizeMode = 'off',\n containerStyle,\n enableKeyboardNavigation = false,\n\n columns,\n hiddenColumns,\n columnOrdering,\n pinnedColumns,\n\n data,\n getRowId,\n\n sortState,\n onSortChanged,\n\n selectionMode,\n selectedRows,\n disabledRows,\n onSelectionChanged,\n\n rowGrouping,\n\n 'aria-label': ariaLabel,\n}: DataGridProps) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const tableRef = useRef<HTMLTableElement>(null);\n\n const showFooter = useMemo(() => columns.some((column) => column.renderFooter), [columns]);\n const ariaRoles = useMemo(\n () => getAriaRoles({ enableKeyboardNavigation, rowGrouping }),\n [enableKeyboardNavigation, rowGrouping],\n );\n const enableColumnResizing = useMemo(() => resizeMode !== 'off', [resizeMode]);\n\n /**\n * Hooks to handle state for selection, sorting, and expanded/collapsed.\n */\n\n const { enableRowSelection, enableMultiRowSelection, rowSelection, onRowSelectionChange } =\n useSelectionState({\n selectionMode,\n selectedRows,\n disabledRows,\n onSelectionChanged,\n });\n\n const {\n enableSorting,\n enableMultiRemove,\n enableSortingRemoval,\n manualSorting,\n sorting,\n onSortingChange,\n } = useSortingState({ columns, sortState, onSortChanged });\n\n const { expanded, onExpandedChange, enableExpanding, getRowCanExpand, getSubRows } =\n useExpandedState(rowGrouping);\n\n /**\n * Mapping of column definitions.\n */\n const columnMapper = useRef(new ColumnMapper());\n const mappedColumnDefinitions = useMemo(() => {\n const mappedColumns = columns.map((column) => columnMapper.current.mapColumnDefinition(column));\n\n if (enableRowSelection) {\n mappedColumns.unshift(SelectionColumnDefinition);\n }\n\n return mappedColumns;\n }, [columns, enableRowSelection]);\n\n /**\n * Stable references for column states (visibility, order, pinning).\n */\n\n // Column render order - the order of the array indicates the order on screen.\n const columnOrder = useMemo(() => {\n if (!columnOrdering || columnOrdering.length === 0) {\n return undefined;\n }\n\n // If we have a custom column order, we need to make sure the selection column always appears first.\n if (enableRowSelection) {\n return ['selection', ...columnOrdering];\n }\n\n return columnOrdering;\n }, [columnOrdering, enableRowSelection]);\n\n // Column visibiilty - record of column ID's to visibility, where false/no value = hidden.\n const columnVisibility = useMemo(() => {\n // We can't have no columns visible - if the array is empty we show them all.\n if (!hiddenColumns || hiddenColumns.length === columns.length) {\n return undefined;\n }\n\n return columns.reduce(\n (acc, column) => ({\n ...acc,\n [column.id]: !hiddenColumns.includes(column.id),\n }),\n {},\n );\n }, [hiddenColumns, columns]);\n\n // Pinned columns\n const columnPinning = useMemo(() => {\n let left = pinnedColumns?.left ?? [];\n\n // If we have any left-pinned columns, we need to include the selection column as it should appear first.\n if (enableRowSelection && left.length > 0) {\n left = [SELECTION_COLUMN_ID, ...left];\n }\n\n return {\n left,\n right: pinnedColumns?.right ?? [],\n };\n }, [pinnedColumns, enableRowSelection]);\n\n /**\n * Setup the TanStack table, including mapped column definitions, row data, and any additional state such as\n * column visibility and ordering.\n */\n const table = useReactTable<any>({\n data,\n columns: mappedColumnDefinitions,\n\n // Column settings\n columnResizeMode: resizeMode === 'off' ? undefined : resizeMode,\n enableColumnResizing,\n\n // Row model\n getRowId,\n getCoreRowModel: getCoreRowModel(),\n\n // Sorting\n enableSorting,\n enableSortingRemoval,\n enableMultiRemove,\n manualSorting,\n onSortingChange,\n\n // Pinning\n enableColumnPinning: columnPinning.left.length + columnPinning.right.length > 0,\n\n // Selection\n enableRowSelection,\n enableMultiRowSelection,\n onRowSelectionChange,\n\n // Row grouping\n getSubRows,\n getRowCanExpand,\n onExpandedChange,\n enableExpanding,\n getExpandedRowModel: enableExpanding ? getExpandedRowModel() : undefined,\n\n // Inject external table state\n state: {\n columnOrder,\n columnVisibility,\n columnPinning,\n sorting,\n rowSelection,\n expanded,\n },\n });\n\n /**\n * Pinned column layout\n */\n const { pinnedColumnLayoutStyles } = usePinnedColumnLayout({ table });\n\n /**\n * Other hooks\n */\n useDragToScroll({ targetRef: containerRef, ignoreClassName: 'data-grid-column-resizer' });\n useKeyboardNavigation({ tableRef, enableKeyboardNavigation });\n\n return (\n <GridContainer\n containerRef={containerRef}\n tableRef={tableRef}\n borderMode={borderMode}\n containerStyles={{ ...containerStyle, ...pinnedColumnLayoutStyles }}\n ariaRoles={ariaRoles}\n enableResizeableColumns={enableColumnResizing}\n density={density}\n table={table}\n aria-label={ariaLabel}\n >\n {/* Columns */}\n {enableColumnResizing && <Columns table={table} />}\n\n {/* Header */}\n <Header table={table} />\n\n {/* Body */}\n {table.getState().columnSizingInfo.isResizingColumn ? (\n <MemoizedBody table={table} ariaRoles={ariaRoles} striped={striped} />\n ) : (\n <Body table={table} ariaRoles={ariaRoles} striped={striped} />\n )}\n\n {/* Footer */}\n {showFooter && <Footer table={table} ariaRoles={ariaRoles} />}\n </GridContainer>\n );\n};\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"DataGrid.js","sources":["../../../src/components/DataGrid/DataGrid.tsx"],"sourcesContent":["import React, { useMemo, useRef } from 'react';\nimport { getCoreRowModel, getExpandedRowModel, useReactTable } from '@tanstack/react-table';\n\nimport { useDragToScroll } from '../../hooks';\n\nimport { DataGridProps } from './types';\nimport { getAriaRoles } from './utils';\nimport { GridContainer, Header, Body, Footer, Columns } from './components';\nimport { MemoizedBody } from './components/Body';\n\nimport {\n usePinnedColumnLayout,\n useSortingState,\n useKeyboardNavigation,\n useColumnState,\n useExpandedState,\n useColumnWidthState,\n useSelectionState,\n} from './hooks';\n\n/**\n * [WIP]\n *\n * A DataGrid component which renders data in a two-dimensional format, with columns and rows. Unlike the `DataTable`\n * component, the `DataGrid` supports both flat and hierarchical (tree) data.\n *\n * Under the hood, it uses [TanStack Table](http://tanstack.com/table/) for table management, and aims to replicate functionality\n * available in major third party grid components such as CloudScape's Table component, AgGrid, etc.\n *\n * Supported features include:\n * - Pinning, resizing (incl. smooth resizing), reordering, and hiding of columns\n * - Selection (single and multiple) and disabling of rows.\n * - Rendering of arbitrarily nested data, expanding/collapsing, and custom full-width 'group' rows.\n * - In-built keyboard navigation with arrow keys, and drag to scroll.\n * - Configurable density.\n *\n * *Important: This component uses CSS modules, and therefore requires a `<ThemeInjector />` to be present on your page.*\n */\nexport const DataGrid = ({\n density = 'base',\n striped = true,\n borderMode = 'full',\n resizeMode = 'off',\n containerStyle,\n enableKeyboardNavigation = false,\n\n columns,\n hiddenColumns,\n columnOrdering,\n pinnedColumns,\n\n data,\n getRowId,\n\n sortState,\n onSortChanged,\n\n selectionMode,\n selectedRows,\n disabledRows,\n onSelectionChanged,\n\n rowGrouping,\n\n columnWidths,\n onColumnsResized,\n\n 'aria-label': ariaLabel,\n}: DataGridProps) => {\n /**\n * Refs to the table and table container. Used for keyboard navigation and drag-to-scroll.\n */\n const containerRef = useRef<HTMLDivElement>(null);\n const tableRef = useRef<HTMLTableElement>(null);\n\n const showFooter = useMemo(() => columns.some((column) => column.renderFooter), [columns]);\n const ariaRoles = useMemo(\n () => getAriaRoles({ enableKeyboardNavigation, rowGrouping }),\n [enableKeyboardNavigation, rowGrouping],\n );\n const enableColumnResizing = useMemo(() => resizeMode !== 'off', [resizeMode]);\n\n /**\n * Hooks to handle state for selection, sorting, and expanded/collapsed.\n */\n const { enableRowSelection, enableMultiRowSelection, rowSelection, onRowSelectionChange } =\n useSelectionState({\n selectionMode,\n selectedRows,\n disabledRows,\n onSelectionChanged,\n });\n\n const {\n enableSorting,\n enableMultiRemove,\n enableSortingRemoval,\n manualSorting,\n sorting,\n onSortingChange,\n } = useSortingState({ columns, sortState, onSortChanged });\n\n const { expanded, onExpandedChange, enableExpanding, getRowCanExpand, getSubRows } =\n useExpandedState(rowGrouping);\n\n /**\n * Hooks to setup column state, including visibility, ordering, pinning, and width(s).\n */\n const { mappedColumnDefinitions, columnOrder, columnVisibility, columnPinning } = useColumnState({\n columns,\n hiddenColumns,\n columnOrdering,\n pinnedColumns,\n enableRowSelection: !!enableRowSelection,\n });\n\n const { columnSizing, onColumnSizingChange } = useColumnWidthState({\n mappedColumnDefinitions,\n columnWidths,\n onColumnsResized,\n });\n\n /**\n * Setup the TanStack table, including mapped column definitions, row data, and any additional state such as\n * column visibility and ordering.\n */\n const table = useReactTable<any>({\n data,\n columns: mappedColumnDefinitions,\n\n // Column settings\n columnResizeMode: resizeMode === 'off' ? undefined : resizeMode,\n enableColumnResizing,\n onColumnSizingChange,\n\n // Row model\n getRowId,\n getCoreRowModel: getCoreRowModel(),\n\n // Sorting\n enableSorting,\n enableSortingRemoval,\n enableMultiRemove,\n manualSorting,\n onSortingChange,\n\n // Pinning\n enableColumnPinning: columnPinning.left.length + columnPinning.right.length > 0,\n\n // Selection\n enableRowSelection,\n enableMultiRowSelection,\n onRowSelectionChange,\n\n // Row grouping\n getSubRows,\n getRowCanExpand,\n onExpandedChange,\n enableExpanding,\n getExpandedRowModel: enableExpanding ? getExpandedRowModel() : undefined,\n\n // Inject external table state\n state: {\n columnOrder,\n columnVisibility,\n columnPinning,\n sorting,\n rowSelection,\n expanded,\n columnSizing,\n },\n });\n\n /**\n * Pinned column layout\n */\n const { pinnedColumnLayoutStyles } = usePinnedColumnLayout({ table });\n\n /**\n * Other hooks\n */\n useDragToScroll({ targetRef: containerRef, ignoreClassName: 'data-grid-column-resizer' });\n useKeyboardNavigation({ tableRef, enableKeyboardNavigation });\n\n return (\n <GridContainer\n containerRef={containerRef}\n tableRef={tableRef}\n borderMode={borderMode}\n containerStyles={{ ...containerStyle, ...pinnedColumnLayoutStyles }}\n ariaRoles={ariaRoles}\n enableResizeableColumns={enableColumnResizing}\n density={density}\n table={table}\n aria-label={ariaLabel}\n >\n {/* Columns */}\n {enableColumnResizing && <Columns table={table} />}\n\n {/* Header */}\n <Header table={table} />\n\n {/* Body */}\n {table.getState().columnSizingInfo.isResizingColumn ? (\n <MemoizedBody table={table} ariaRoles={ariaRoles} striped={striped} />\n ) : (\n <Body table={table} ariaRoles={ariaRoles} striped={striped} />\n )}\n\n {/* Footer */}\n {showFooter && <Footer table={table} ariaRoles={ariaRoles} />}\n </GridContainer>\n );\n};\n"],"names":["React"],"mappings":"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"}
@@ -6,6 +6,15 @@ var buildClassnames = require('../../../../../utils/buildClassnames.cjs');
6
6
  require('uid/secure');
7
7
  var CellContent = require('../../CellContent/CellContent.cjs');
8
8
  var usePinnedColumnStyles = require('../../../hooks/usePinnedColumnStyles.cjs');
9
+ require('../../../../Stack/Stack.cjs');
10
+ require('../../../../../theme/modules/shadows.cjs');
11
+ require('../../../../../theme/modules/sizes.cjs');
12
+ require('../../../../../theme/modules/text.cjs');
13
+ require('styled-components');
14
+ require('../../../../Choice/components/styled.cjs');
15
+ require('../../../../Text/Text.cjs');
16
+ require('../../../../Checkbox/styled.cjs');
17
+ require('../../../../Radio/Radio.cjs');
9
18
  var useExpandableCell = require('./hooks/useExpandableCell.cjs');
10
19
  var BodyCell_module = require('./BodyCell.module.scss.cjs');
11
20
 
@@ -1 +1 @@
1
- {"version":3,"file":"BodyCell.cjs","sources":["../../../../../../src/components/DataGrid/components/Body/BodyCell/BodyCell.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Cell, flexRender } from '@tanstack/react-table';\n\nimport { buildClassnames } from '../../../../../utils';\n\nimport { AriaRoles } from '../../../types';\nimport { CellContent } from '../../CellContent';\nimport { usePinnedColumnStyles } from '../../../hooks';\n\nimport { useExpandableCell } from './hooks';\nimport styles from './BodyCell.module.scss';\n\ntype ColumnCellProps = {\n /**\n * Cell within the TanStack Table instance.\n */\n cell: Cell<any, any>;\n\n /**\n * ARIA roles for the grid.\n */\n ariaRoles: AriaRoles;\n\n /**\n * Whether row selection is enabled.\n */\n enableRowSelection: boolean;\n\n /**\n * Whether row expanding is enabled for the grid.\n */\n enableExpanding: boolean;\n};\n\n/**\n * Renders a cell element, and its content, for a given column and row, within the grid body.\n */\nexport const BodyCell = ({\n cell,\n ariaRoles,\n enableRowSelection,\n enableExpanding,\n}: ColumnCellProps) => {\n const { justifyContent, textAlign, rowHeader } = cell.column.columnDef.meta!;\n const CellElement = rowHeader ? 'th' : 'td';\n\n const { pinnedCellClassName, pinnedCellStyles } = usePinnedColumnStyles({ column: cell.column });\n\n const { expandButtonProps, contentMarginLeft } = useExpandableCell({\n cell,\n enableExpanding,\n enableRowSelection,\n });\n\n const bodyCellClassname = buildClassnames([\n styles.bodyCell,\n pinnedCellClassName,\n 'data-grid-cell',\n ]);\n\n return (\n <CellElement\n className={bodyCellClassname}\n aria-colindex={cell.column.getIndex() + 1}\n scope={rowHeader ? 'row' : undefined}\n role={rowHeader ? 'rowheader' : ariaRoles.cell}\n style={pinnedCellStyles}\n >\n <CellContent\n contentStyle={\n {\n marginLeft: contentMarginLeft,\n justifyContent,\n textAlign,\n } as React.CSSProperties\n }\n expandButtonProps={expandButtonProps}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </CellContent>\n </CellElement>\n );\n};\n"],"names":["usePinnedColumnStyles","useExpandableCell","buildClassnames","styles","React","CellContent","flexRender"],"mappings":";;;;;;;;;;;;;;;AAmCA;;AAEG;AACI,MAAM,QAAQ,GAAG,CAAC,EACvB,IAAI,EACJ,SAAS,EACT,kBAAkB,EAClB,eAAe,GACC,KAAI;AACpB,IAAA,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAK;IAC5E,MAAM,WAAW,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI;AAE3C,IAAA,MAAM,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,GAAGA,2CAAqB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAEhG,IAAA,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,GAAGC,mCAAiB,CAAC;QACjE,IAAI;QACJ,eAAe;QACf,kBAAkB;AACnB,KAAA,CAAC;IAEF,MAAM,iBAAiB,GAAGC,+BAAe,CAAC;AACxC,QAAAC,eAAM,CAAC,QAAQ;QACf,mBAAmB;QACnB,gBAAgB;AACjB,KAAA,CAAC;IAEF,QACEC,qCAAC,WAAW,EAAA,EACV,SAAS,EAAE,iBAAiB,mBACb,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EACzC,KAAK,EAAE,SAAS,GAAG,KAAK,GAAG,SAAS,EACpC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC,IAAI,EAC9C,KAAK,EAAE,gBAAgB,EAAA;QAEvBA,sBAAC,CAAA,aAAA,CAAAC,uBAAW,EACV,EAAA,YAAY,EACV;AACE,gBAAA,UAAU,EAAE,iBAAiB;gBAC7B,cAAc;gBACd,SAAS;aACa,EAE1B,iBAAiB,EAAE,iBAAiB,EAAA,EAEnCC,qBAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAC9C,CACF;AAElB;;;;"}
1
+ {"version":3,"file":"BodyCell.cjs","sources":["../../../../../../src/components/DataGrid/components/Body/BodyCell/BodyCell.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Cell, flexRender } from '@tanstack/react-table';\n\nimport { buildClassnames } from '../../../../../utils';\n\nimport { AriaRoles } from '../../../types';\nimport { CellContent } from '../../CellContent';\nimport { usePinnedColumnStyles } from '../../../hooks';\n\nimport { useExpandableCell } from './hooks';\nimport styles from './BodyCell.module.scss';\n\ntype ColumnCellProps = {\n /**\n * Cell within the TanStack Table instance.\n */\n cell: Cell<any, any>;\n\n /**\n * ARIA roles for the grid.\n */\n ariaRoles: AriaRoles;\n\n /**\n * Whether row selection is enabled.\n */\n enableRowSelection: boolean;\n\n /**\n * Whether row expanding is enabled for the grid.\n */\n enableExpanding: boolean;\n};\n\n/**\n * Renders a cell element, and its content, for a given column and row, within the grid body.\n */\nexport const BodyCell = ({\n cell,\n ariaRoles,\n enableRowSelection,\n enableExpanding,\n}: ColumnCellProps) => {\n const { justifyContent, textAlign, rowHeader } = cell.column.columnDef.meta!;\n const CellElement = rowHeader ? 'th' : 'td';\n\n const { pinnedCellClassName, pinnedCellStyles } = usePinnedColumnStyles({ column: cell.column });\n\n const { expandButtonProps, contentMarginLeft } = useExpandableCell({\n cell,\n enableExpanding,\n enableRowSelection,\n });\n\n const bodyCellClassname = buildClassnames([\n styles.bodyCell,\n pinnedCellClassName,\n 'data-grid-cell',\n ]);\n\n return (\n <CellElement\n className={bodyCellClassname}\n aria-colindex={cell.column.getIndex() + 1}\n scope={rowHeader ? 'row' : undefined}\n role={rowHeader ? 'rowheader' : ariaRoles.cell}\n style={pinnedCellStyles}\n >\n <CellContent\n contentStyle={\n {\n marginLeft: contentMarginLeft,\n justifyContent,\n textAlign,\n } as React.CSSProperties\n }\n expandButtonProps={expandButtonProps}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </CellContent>\n </CellElement>\n );\n};\n"],"names":["usePinnedColumnStyles","useExpandableCell","buildClassnames","styles","React","CellContent","flexRender"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAmCA;;AAEG;AACI,MAAM,QAAQ,GAAG,CAAC,EACvB,IAAI,EACJ,SAAS,EACT,kBAAkB,EAClB,eAAe,GACC,KAAI;AACpB,IAAA,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAK;IAC5E,MAAM,WAAW,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI;AAE3C,IAAA,MAAM,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,GAAGA,2CAAqB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAEhG,IAAA,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,GAAGC,mCAAiB,CAAC;QACjE,IAAI;QACJ,eAAe;QACf,kBAAkB;AACnB,KAAA,CAAC;IAEF,MAAM,iBAAiB,GAAGC,+BAAe,CAAC;AACxC,QAAAC,eAAM,CAAC,QAAQ;QACf,mBAAmB;QACnB,gBAAgB;AACjB,KAAA,CAAC;IAEF,QACEC,qCAAC,WAAW,EAAA,EACV,SAAS,EAAE,iBAAiB,mBACb,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EACzC,KAAK,EAAE,SAAS,GAAG,KAAK,GAAG,SAAS,EACpC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC,IAAI,EAC9C,KAAK,EAAE,gBAAgB,EAAA;QAEvBA,sBAAC,CAAA,aAAA,CAAAC,uBAAW,EACV,EAAA,YAAY,EACV;AACE,gBAAA,UAAU,EAAE,iBAAiB;gBAC7B,cAAc;gBACd,SAAS;aACa,EAE1B,iBAAiB,EAAE,iBAAiB,EAAA,EAEnCC,qBAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAC9C,CACF;AAElB;;;;"}
@@ -4,6 +4,15 @@ import { buildClassnames } from '../../../../../utils/buildClassnames.js';
4
4
  import 'uid/secure';
5
5
  import { CellContent } from '../../CellContent/CellContent.js';
6
6
  import { usePinnedColumnStyles } from '../../../hooks/usePinnedColumnStyles.js';
7
+ import '../../../../Stack/Stack.js';
8
+ import '../../../../../theme/modules/shadows.js';
9
+ import '../../../../../theme/modules/sizes.js';
10
+ import '../../../../../theme/modules/text.js';
11
+ import 'styled-components';
12
+ import '../../../../Choice/components/styled.js';
13
+ import '../../../../Text/Text.js';
14
+ import '../../../../Checkbox/styled.js';
15
+ import '../../../../Radio/Radio.js';
7
16
  import { useExpandableCell } from './hooks/useExpandableCell.js';
8
17
  import styles from './BodyCell.module.scss.js';
9
18
 
@@ -1 +1 @@
1
- {"version":3,"file":"BodyCell.js","sources":["../../../../../../src/components/DataGrid/components/Body/BodyCell/BodyCell.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Cell, flexRender } from '@tanstack/react-table';\n\nimport { buildClassnames } from '../../../../../utils';\n\nimport { AriaRoles } from '../../../types';\nimport { CellContent } from '../../CellContent';\nimport { usePinnedColumnStyles } from '../../../hooks';\n\nimport { useExpandableCell } from './hooks';\nimport styles from './BodyCell.module.scss';\n\ntype ColumnCellProps = {\n /**\n * Cell within the TanStack Table instance.\n */\n cell: Cell<any, any>;\n\n /**\n * ARIA roles for the grid.\n */\n ariaRoles: AriaRoles;\n\n /**\n * Whether row selection is enabled.\n */\n enableRowSelection: boolean;\n\n /**\n * Whether row expanding is enabled for the grid.\n */\n enableExpanding: boolean;\n};\n\n/**\n * Renders a cell element, and its content, for a given column and row, within the grid body.\n */\nexport const BodyCell = ({\n cell,\n ariaRoles,\n enableRowSelection,\n enableExpanding,\n}: ColumnCellProps) => {\n const { justifyContent, textAlign, rowHeader } = cell.column.columnDef.meta!;\n const CellElement = rowHeader ? 'th' : 'td';\n\n const { pinnedCellClassName, pinnedCellStyles } = usePinnedColumnStyles({ column: cell.column });\n\n const { expandButtonProps, contentMarginLeft } = useExpandableCell({\n cell,\n enableExpanding,\n enableRowSelection,\n });\n\n const bodyCellClassname = buildClassnames([\n styles.bodyCell,\n pinnedCellClassName,\n 'data-grid-cell',\n ]);\n\n return (\n <CellElement\n className={bodyCellClassname}\n aria-colindex={cell.column.getIndex() + 1}\n scope={rowHeader ? 'row' : undefined}\n role={rowHeader ? 'rowheader' : ariaRoles.cell}\n style={pinnedCellStyles}\n >\n <CellContent\n contentStyle={\n {\n marginLeft: contentMarginLeft,\n justifyContent,\n textAlign,\n } as React.CSSProperties\n }\n expandButtonProps={expandButtonProps}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </CellContent>\n </CellElement>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;;;AAmCA;;AAEG;AACI,MAAM,QAAQ,GAAG,CAAC,EACvB,IAAI,EACJ,SAAS,EACT,kBAAkB,EAClB,eAAe,GACC,KAAI;AACpB,IAAA,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAK;IAC5E,MAAM,WAAW,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI;AAE3C,IAAA,MAAM,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,GAAG,qBAAqB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAEhG,IAAA,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,CAAC;QACjE,IAAI;QACJ,eAAe;QACf,kBAAkB;AACnB,KAAA,CAAC;IAEF,MAAM,iBAAiB,GAAG,eAAe,CAAC;AACxC,QAAA,MAAM,CAAC,QAAQ;QACf,mBAAmB;QACnB,gBAAgB;AACjB,KAAA,CAAC;IAEF,QACEA,6BAAC,WAAW,EAAA,EACV,SAAS,EAAE,iBAAiB,mBACb,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EACzC,KAAK,EAAE,SAAS,GAAG,KAAK,GAAG,SAAS,EACpC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC,IAAI,EAC9C,KAAK,EAAE,gBAAgB,EAAA;QAEvBA,cAAC,CAAA,aAAA,CAAA,WAAW,EACV,EAAA,YAAY,EACV;AACE,gBAAA,UAAU,EAAE,iBAAiB;gBAC7B,cAAc;gBACd,SAAS;aACa,EAE1B,iBAAiB,EAAE,iBAAiB,EAAA,EAEnC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAC9C,CACF;AAElB;;;;"}
1
+ {"version":3,"file":"BodyCell.js","sources":["../../../../../../src/components/DataGrid/components/Body/BodyCell/BodyCell.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Cell, flexRender } from '@tanstack/react-table';\n\nimport { buildClassnames } from '../../../../../utils';\n\nimport { AriaRoles } from '../../../types';\nimport { CellContent } from '../../CellContent';\nimport { usePinnedColumnStyles } from '../../../hooks';\n\nimport { useExpandableCell } from './hooks';\nimport styles from './BodyCell.module.scss';\n\ntype ColumnCellProps = {\n /**\n * Cell within the TanStack Table instance.\n */\n cell: Cell<any, any>;\n\n /**\n * ARIA roles for the grid.\n */\n ariaRoles: AriaRoles;\n\n /**\n * Whether row selection is enabled.\n */\n enableRowSelection: boolean;\n\n /**\n * Whether row expanding is enabled for the grid.\n */\n enableExpanding: boolean;\n};\n\n/**\n * Renders a cell element, and its content, for a given column and row, within the grid body.\n */\nexport const BodyCell = ({\n cell,\n ariaRoles,\n enableRowSelection,\n enableExpanding,\n}: ColumnCellProps) => {\n const { justifyContent, textAlign, rowHeader } = cell.column.columnDef.meta!;\n const CellElement = rowHeader ? 'th' : 'td';\n\n const { pinnedCellClassName, pinnedCellStyles } = usePinnedColumnStyles({ column: cell.column });\n\n const { expandButtonProps, contentMarginLeft } = useExpandableCell({\n cell,\n enableExpanding,\n enableRowSelection,\n });\n\n const bodyCellClassname = buildClassnames([\n styles.bodyCell,\n pinnedCellClassName,\n 'data-grid-cell',\n ]);\n\n return (\n <CellElement\n className={bodyCellClassname}\n aria-colindex={cell.column.getIndex() + 1}\n scope={rowHeader ? 'row' : undefined}\n role={rowHeader ? 'rowheader' : ariaRoles.cell}\n style={pinnedCellStyles}\n >\n <CellContent\n contentStyle={\n {\n marginLeft: contentMarginLeft,\n justifyContent,\n textAlign,\n } as React.CSSProperties\n }\n expandButtonProps={expandButtonProps}\n >\n {flexRender(cell.column.columnDef.cell, cell.getContext())}\n </CellContent>\n </CellElement>\n );\n};\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;;;;;AAmCA;;AAEG;AACI,MAAM,QAAQ,GAAG,CAAC,EACvB,IAAI,EACJ,SAAS,EACT,kBAAkB,EAClB,eAAe,GACC,KAAI;AACpB,IAAA,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAK;IAC5E,MAAM,WAAW,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI;AAE3C,IAAA,MAAM,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,GAAG,qBAAqB,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AAEhG,IAAA,MAAM,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,CAAC;QACjE,IAAI;QACJ,eAAe;QACf,kBAAkB;AACnB,KAAA,CAAC;IAEF,MAAM,iBAAiB,GAAG,eAAe,CAAC;AACxC,QAAA,MAAM,CAAC,QAAQ;QACf,mBAAmB;QACnB,gBAAgB;AACjB,KAAA,CAAC;IAEF,QACEA,6BAAC,WAAW,EAAA,EACV,SAAS,EAAE,iBAAiB,mBACb,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,EACzC,KAAK,EAAE,SAAS,GAAG,KAAK,GAAG,SAAS,EACpC,IAAI,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS,CAAC,IAAI,EAC9C,KAAK,EAAE,gBAAgB,EAAA;QAEvBA,cAAC,CAAA,aAAA,CAAA,WAAW,EACV,EAAA,YAAY,EACV;AACE,gBAAA,UAAU,EAAE,iBAAiB;gBAC7B,cAAc;gBACd,SAAS;aACa,EAE1B,iBAAiB,EAAE,iBAAiB,EAAA,EAEnC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAC9C,CACF;AAElB;;;;"}
@@ -5,8 +5,6 @@ require('../../../../hooks/useFocusVisible.cjs');
5
5
  require('uid/secure');
6
6
  var useResizeObserver = require('../../../../hooks/useResizeObserver.cjs');
7
7
  require('lodash.throttle');
8
- var isLastColumn = require('../../utils/isLastColumn.cjs');
9
- require('@tanstack/react-table');
10
8
 
11
9
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
12
10
 
@@ -21,17 +19,20 @@ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
21
19
  */
22
20
  const Columns = ({ table }) => {
23
21
  const headers = table.getLeafHeaders();
24
- // Setup state and hook to observe the last column in the table. If the last column is larger than its
25
- // default size, we allow it to render with `width: auto;` to ensure the table fills the container.
26
- // If the last column is smaller than its default size, the table should start to 'overflow' its parent,
27
- // so we switch to using a fixed width on the column instead.
22
+ /**
23
+ * Setup state and hook to observe the last column in the table. If the last column is larger than its
24
+ * default size, we allow it to render with `width: auto;` to ensure the table fills the container.
25
+ *
26
+ * If the last column is smaller than its default size, the table should start to 'overflow' its parent,
27
+ * so we switch to using a fixed width on the column instead.
28
+ */
28
29
  const lastColumnRef = React.useRef(null);
29
30
  const [lastColumnAuto, setLastColumnAuto] = React.useState(true);
30
31
  useResizeObserver.useResizeObserver({
31
32
  targetRef: lastColumnRef,
32
33
  resizeHandler: ({ width }) => {
33
34
  const lastHeader = headers[headers.length - 1];
34
- if (width <= lastHeader.column.columnDef.size) {
35
+ if (width <= lastHeader.column.getSize()) {
35
36
  setLastColumnAuto(false);
36
37
  }
37
38
  else {
@@ -42,7 +43,7 @@ const Columns = ({ table }) => {
42
43
  });
43
44
  // Memoized columns.
44
45
  const columns = React.useMemo(() => (React__default.default.createElement("colgroup", null, headers.map((header) => {
45
- const lastColumn = isLastColumn.isLastColumn(table, header.column);
46
+ const lastColumn = header.column.getIsLastColumn();
46
47
  const columnWidth = lastColumn && lastColumnAuto ? 'auto' : `${header.column.getSize()}px`;
47
48
  return (React__default.default.createElement("col", { ref: lastColumn ? lastColumnRef : undefined, key: header.column.id, style: { width: columnWidth, minWidth: header.column.columnDef.minSize } }));
48
49
  }))),