@veeqo/ui 9.9.5 → 9.10.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 (91) hide show
  1. package/dist/components/Anchor/Anchor.cjs +34 -8
  2. package/dist/components/Anchor/Anchor.cjs.map +1 -1
  3. package/dist/components/Anchor/Anchor.d.ts +14 -8
  4. package/dist/components/Anchor/Anchor.js +35 -9
  5. package/dist/components/Anchor/Anchor.js.map +1 -1
  6. package/dist/components/Anchor/index.d.ts +2 -1
  7. package/dist/components/Anchor/isExternalLink.cjs +37 -0
  8. package/dist/components/Anchor/isExternalLink.cjs.map +1 -0
  9. package/dist/components/Anchor/isExternalLink.d.ts +13 -0
  10. package/dist/components/Anchor/isExternalLink.js +34 -0
  11. package/dist/components/Anchor/isExternalLink.js.map +1 -0
  12. package/dist/components/Anchor/styled.cjs +27 -2
  13. package/dist/components/Anchor/styled.cjs.map +1 -1
  14. package/dist/components/Anchor/styled.d.ts +10 -1
  15. package/dist/components/Anchor/styled.js +24 -2
  16. package/dist/components/Anchor/styled.js.map +1 -1
  17. package/dist/components/Anchor/types.d.ts +45 -0
  18. package/dist/components/Anchor/utils/urlUtils.cjs +48 -0
  19. package/dist/components/Anchor/utils/urlUtils.cjs.map +1 -0
  20. package/dist/components/Anchor/utils/urlUtils.d.ts +32 -0
  21. package/dist/components/Anchor/utils/urlUtils.js +42 -0
  22. package/dist/components/Anchor/utils/urlUtils.js.map +1 -0
  23. package/dist/components/DataGrid/DataGrid.cjs +12 -3
  24. package/dist/components/DataGrid/DataGrid.cjs.map +1 -1
  25. package/dist/components/DataGrid/DataGrid.d.ts +1 -1
  26. package/dist/components/DataGrid/DataGrid.js +13 -4
  27. package/dist/components/DataGrid/DataGrid.js.map +1 -1
  28. package/dist/components/DataGrid/components/Body/Body.cjs +4 -1
  29. package/dist/components/DataGrid/components/Body/Body.cjs.map +1 -1
  30. package/dist/components/DataGrid/components/Body/Body.js +4 -1
  31. package/dist/components/DataGrid/components/Body/Body.js.map +1 -1
  32. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.cjs +9 -2
  33. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.cjs.map +1 -1
  34. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.d.ts +9 -1
  35. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.js +9 -2
  36. package/dist/components/DataGrid/components/Body/BodyCell/BodyCell.js.map +1 -1
  37. package/dist/components/DataGrid/components/Body/BodyCell/hooks/index.d.ts +1 -0
  38. package/dist/components/DataGrid/components/Body/BodyCell/hooks/useExpandableCell.cjs +34 -0
  39. package/dist/components/DataGrid/components/Body/BodyCell/hooks/useExpandableCell.cjs.map +1 -0
  40. package/dist/components/DataGrid/components/Body/BodyCell/hooks/useExpandableCell.d.ts +21 -0
  41. package/dist/components/DataGrid/components/Body/BodyCell/hooks/useExpandableCell.js +32 -0
  42. package/dist/components/DataGrid/components/Body/BodyCell/hooks/useExpandableCell.js.map +1 -0
  43. package/dist/components/DataGrid/components/Body/Row/Row.cjs +1 -1
  44. package/dist/components/DataGrid/components/Body/Row/Row.cjs.map +1 -1
  45. package/dist/components/DataGrid/components/Body/Row/Row.d.ts +5 -1
  46. package/dist/components/DataGrid/components/Body/Row/Row.js +1 -1
  47. package/dist/components/DataGrid/components/Body/Row/Row.js.map +1 -1
  48. package/dist/components/DataGrid/components/CellContent/CellContent.cjs +5 -2
  49. package/dist/components/DataGrid/components/CellContent/CellContent.cjs.map +1 -1
  50. package/dist/components/DataGrid/components/CellContent/CellContent.d.ts +7 -2
  51. package/dist/components/DataGrid/components/CellContent/CellContent.js +5 -2
  52. package/dist/components/DataGrid/components/CellContent/CellContent.js.map +1 -1
  53. package/dist/components/DataGrid/components/CellContent/ExpandButton/ExpandButton.cjs +20 -0
  54. package/dist/components/DataGrid/components/CellContent/ExpandButton/ExpandButton.cjs.map +1 -0
  55. package/dist/components/DataGrid/components/CellContent/ExpandButton/ExpandButton.d.ts +9 -0
  56. package/dist/components/DataGrid/components/CellContent/ExpandButton/ExpandButton.js +14 -0
  57. package/dist/components/DataGrid/components/CellContent/ExpandButton/ExpandButton.js.map +1 -0
  58. package/dist/components/DataGrid/components/CellContent/ExpandButton/ExpandButton.module.scss.cjs +9 -0
  59. package/dist/components/DataGrid/components/CellContent/ExpandButton/ExpandButton.module.scss.cjs.map +1 -0
  60. package/dist/components/DataGrid/components/CellContent/ExpandButton/ExpandButton.module.scss.js +7 -0
  61. package/dist/components/DataGrid/components/CellContent/ExpandButton/ExpandButton.module.scss.js.map +1 -0
  62. package/dist/components/DataGrid/components/CellContent/ExpandButton/index.d.ts +2 -0
  63. package/dist/components/DataGrid/hooks/useExpandedState.cjs +34 -0
  64. package/dist/components/DataGrid/hooks/useExpandedState.cjs.map +1 -0
  65. package/dist/components/DataGrid/hooks/useExpandedState.d.ts +9 -0
  66. package/dist/components/DataGrid/hooks/useExpandedState.js +32 -0
  67. package/dist/components/DataGrid/hooks/useExpandedState.js.map +1 -0
  68. package/dist/components/DataGrid/types/DataGridProps.d.ts +6 -0
  69. package/dist/components/DataGrid/types/RowGroupingConfiguration.d.ts +22 -0
  70. package/dist/components/DataGrid/types/index.d.ts +1 -0
  71. package/dist/components/DataGrid/utils/getAriaRoles.cjs +12 -6
  72. package/dist/components/DataGrid/utils/getAriaRoles.cjs.map +1 -1
  73. package/dist/components/DataGrid/utils/getAriaRoles.d.ts +4 -1
  74. package/dist/components/DataGrid/utils/getAriaRoles.js +12 -6
  75. package/dist/components/DataGrid/utils/getAriaRoles.js.map +1 -1
  76. package/dist/index.cjs +0 -2
  77. package/dist/index.cjs.map +1 -1
  78. package/dist/index.js +0 -1
  79. package/dist/index.js.map +1 -1
  80. package/dist/tempIcons/LaunchIcon.cjs +13 -0
  81. package/dist/tempIcons/LaunchIcon.cjs.map +1 -0
  82. package/dist/tempIcons/LaunchIcon.d.ts +2 -0
  83. package/dist/tempIcons/LaunchIcon.js +7 -0
  84. package/dist/tempIcons/LaunchIcon.js.map +1 -0
  85. package/dist/utils/index.d.ts +0 -1
  86. package/package.json +1 -1
  87. package/dist/utils/isExternalLink.cjs +0 -30
  88. package/dist/utils/isExternalLink.cjs.map +0 -1
  89. package/dist/utils/isExternalLink.d.ts +0 -9
  90. package/dist/utils/isExternalLink.js +0 -27
  91. package/dist/utils/isExternalLink.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Row.js","sources":["../../../../../../src/components/DataGrid/components/Body/Row/Row.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Row as RowItem } from '@tanstack/react-table';\n\nimport { buildClassnames } from '../../../../../utils';\n\ntype RowProps = {\n /**\n * The row within the TanStack Table instance.\n */\n row: RowItem<any>;\n\n /**\n * Whether rows should be striped or not.\n */\n striped: boolean;\n\n /**\n * Child elements (table cells).\n */\n children: React.ReactNode;\n};\n\nexport const Row = ({ row, striped, children }: RowProps) => (\n <tr\n className={buildClassnames(['data-grid-row', striped ? 'striped' : undefined])}\n key={row.id}\n // 0-based index + header row.\n aria-rowindex={row.index + 2}\n >\n {children}\n </tr>\n);\n"],"names":["React"],"mappings":";;;;MAuBa,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAY,MACtDA,cACE,CAAA,aAAA,CAAA,IAAA,EAAA,EAAA,SAAS,EAAE,eAAe,CAAC,CAAC,eAAe,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC,EAC9E,GAAG,EAAE,GAAG,CAAC,EAAE,EAAA,eAAA,EAEI,GAAG,CAAC,KAAK,GAAG,CAAC,EAE3B,EAAA,QAAQ,CACN;;;;"}
1
+ {"version":3,"file":"Row.js","sources":["../../../../../../src/components/DataGrid/components/Body/Row/Row.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Row as RowItem } from '@tanstack/react-table';\n\nimport { buildClassnames } from '../../../../../utils';\n\ntype RowProps = {\n /**\n * The row within the TanStack Table instance.\n */\n row: RowItem<any>;\n\n /**\n * Whether rows should be striped or not.\n */\n striped: boolean;\n\n /**\n * Whether row expanding is enabled.\n */\n enableExpanding: boolean;\n\n /**\n * Child elements (table cells).\n */\n children: React.ReactNode;\n};\n\nexport const Row = ({ row, striped, enableExpanding, children }: RowProps) => (\n <tr\n className={buildClassnames(['data-grid-row', striped ? 'striped' : undefined])}\n key={row.id}\n // 0-based index + header row.\n aria-rowindex={row.index + 2}\n aria-level={enableExpanding ? row.depth + 1 : undefined}\n >\n {children}\n </tr>\n);\n"],"names":["React"],"mappings":";;;;AA4BO,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAY,MACvEA,cAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EACE,SAAS,EAAE,eAAe,CAAC,CAAC,eAAe,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC,EAC9E,GAAG,EAAE,GAAG,CAAC,EAAE,EAAA,eAAA,EAEI,GAAG,CAAC,KAAK,GAAG,CAAC,EAChB,YAAA,EAAA,eAAe,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,GAAG,SAAS,EAAA,EAEtD,QAAQ,CACN;;;;"}
@@ -4,6 +4,7 @@ var React = require('react');
4
4
  var buildClassnames = require('../../../../utils/buildClassnames.cjs');
5
5
  require('uid/secure');
6
6
  var CellContent_module = require('./CellContent.module.scss.cjs');
7
+ var ExpandButton = require('./ExpandButton/ExpandButton.cjs');
7
8
 
8
9
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
9
10
 
@@ -13,8 +14,10 @@ const cellContentClassname = buildClassnames.buildClassnames([CellContent_module
13
14
  /**
14
15
  * Wrapper for content displayed within a non-header cell in the grid.
15
16
  */
16
- const CellContent = ({ contentStyle, children }) => {
17
- return (React__default.default.createElement("div", { "data-testid": "data-grid-cell-content", className: cellContentClassname, style: contentStyle }, children));
17
+ const CellContent = ({ contentStyle, children, expandButtonProps }) => {
18
+ return (React__default.default.createElement(React__default.default.Fragment, null,
19
+ expandButtonProps && React__default.default.createElement(ExpandButton.ExpandButton, { ...expandButtonProps }),
20
+ React__default.default.createElement("div", { "data-testid": "data-grid-cell-content", className: cellContentClassname, style: contentStyle }, children)));
18
21
  };
19
22
 
20
23
  exports.CellContent = CellContent;
@@ -1 +1 @@
1
- {"version":3,"file":"CellContent.cjs","sources":["../../../../../src/components/DataGrid/components/CellContent/CellContent.tsx"],"sourcesContent":["import React from 'react';\n\nimport { buildClassnames } from '../../../../utils';\n\nimport styles from './CellContent.module.scss';\n\nexport interface CellContentProps {\n /**\n * Styles to be applied to the cell content wrapper.\n */\n contentStyle: Pick<React.CSSProperties, 'marginLeft' | 'justifyContent' | 'textAlign'>;\n\n /**\n * Child elements.\n */\n children?: React.ReactNode;\n}\n\nconst cellContentClassname = buildClassnames([styles.cellContent, 'data-grid-cell-content']);\n\n/**\n * Wrapper for content displayed within a non-header cell in the grid.\n */\nexport const CellContent = ({ contentStyle, children }: CellContentProps) => {\n return (\n <div data-testid=\"data-grid-cell-content\" className={cellContentClassname} style={contentStyle}>\n {children}\n </div>\n );\n};\n"],"names":["buildClassnames","styles","React"],"mappings":";;;;;;;;;;;AAkBA,MAAM,oBAAoB,GAAGA,+BAAe,CAAC,CAACC,kBAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;AAE5F;;AAEG;AACU,MAAA,WAAW,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAoB,KAAI;AAC1E,IAAA,QACEC,sBAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,aAAA,EAAiB,wBAAwB,EAAC,SAAS,EAAE,oBAAoB,EAAE,KAAK,EAAE,YAAY,EAAA,EAC3F,QAAQ,CACL;AAEV;;;;"}
1
+ {"version":3,"file":"CellContent.cjs","sources":["../../../../../src/components/DataGrid/components/CellContent/CellContent.tsx"],"sourcesContent":["import React from 'react';\n\nimport { buildClassnames } from '../../../../utils';\n\nimport styles from './CellContent.module.scss';\nimport { ExpandButton, ExpandButtonProps } from './ExpandButton';\n\nexport interface CellContentProps {\n /**\n * Styles to be applied to the cell content wrapper.\n */\n contentStyle: Pick<\n React.CSSProperties,\n 'marginLeft' | 'justifyContent' | 'textAlign' | 'marginLeft'\n >;\n\n /**\n * Child elements.\n */\n children?: React.ReactNode;\n\n /**\n * Props for an expand/collapse button, if applicable.\n */\n expandButtonProps?: ExpandButtonProps;\n}\n\nconst cellContentClassname = buildClassnames([styles.cellContent, 'data-grid-cell-content']);\n\n/**\n * Wrapper for content displayed within a non-header cell in the grid.\n */\nexport const CellContent = ({ contentStyle, children, expandButtonProps }: CellContentProps) => {\n return (\n <>\n {expandButtonProps && <ExpandButton {...expandButtonProps} />}\n <div\n data-testid=\"data-grid-cell-content\"\n className={cellContentClassname}\n style={contentStyle}\n >\n {children}\n </div>\n </>\n );\n};\n"],"names":["buildClassnames","styles","React","ExpandButton"],"mappings":";;;;;;;;;;;;AA2BA,MAAM,oBAAoB,GAAGA,+BAAe,CAAC,CAACC,kBAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;AAE5F;;AAEG;AACI,MAAM,WAAW,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAoB,KAAI;AAC7F,IAAA,QACEC,sBAAA,CAAA,aAAA,CAAAA,sBAAA,CAAA,QAAA,EAAA,IAAA;AACG,QAAA,iBAAiB,IAAIA,sBAAA,CAAA,aAAA,CAACC,yBAAY,EAAA,EAAA,GAAK,iBAAiB,EAAI,CAAA;AAC7D,QAAAD,sBAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,aAAA,EACc,wBAAwB,EACpC,SAAS,EAAE,oBAAoB,EAC/B,KAAK,EAAE,YAAY,EAElB,EAAA,QAAQ,CACL,CACL;AAEP;;;;"}
@@ -1,15 +1,20 @@
1
1
  import React from 'react';
2
+ import { ExpandButtonProps } from './ExpandButton';
2
3
  export interface CellContentProps {
3
4
  /**
4
5
  * Styles to be applied to the cell content wrapper.
5
6
  */
6
- contentStyle: Pick<React.CSSProperties, 'marginLeft' | 'justifyContent' | 'textAlign'>;
7
+ contentStyle: Pick<React.CSSProperties, 'marginLeft' | 'justifyContent' | 'textAlign' | 'marginLeft'>;
7
8
  /**
8
9
  * Child elements.
9
10
  */
10
11
  children?: React.ReactNode;
12
+ /**
13
+ * Props for an expand/collapse button, if applicable.
14
+ */
15
+ expandButtonProps?: ExpandButtonProps;
11
16
  }
12
17
  /**
13
18
  * Wrapper for content displayed within a non-header cell in the grid.
14
19
  */
15
- export declare const CellContent: ({ contentStyle, children }: CellContentProps) => React.JSX.Element;
20
+ export declare const CellContent: ({ contentStyle, children, expandButtonProps }: CellContentProps) => React.JSX.Element;
@@ -2,13 +2,16 @@ import React__default from 'react';
2
2
  import { buildClassnames } from '../../../../utils/buildClassnames.js';
3
3
  import 'uid/secure';
4
4
  import styles from './CellContent.module.scss.js';
5
+ import { ExpandButton } from './ExpandButton/ExpandButton.js';
5
6
 
6
7
  const cellContentClassname = buildClassnames([styles.cellContent, 'data-grid-cell-content']);
7
8
  /**
8
9
  * Wrapper for content displayed within a non-header cell in the grid.
9
10
  */
10
- const CellContent = ({ contentStyle, children }) => {
11
- return (React__default.createElement("div", { "data-testid": "data-grid-cell-content", className: cellContentClassname, style: contentStyle }, children));
11
+ const CellContent = ({ contentStyle, children, expandButtonProps }) => {
12
+ return (React__default.createElement(React__default.Fragment, null,
13
+ expandButtonProps && React__default.createElement(ExpandButton, { ...expandButtonProps }),
14
+ React__default.createElement("div", { "data-testid": "data-grid-cell-content", className: cellContentClassname, style: contentStyle }, children)));
12
15
  };
13
16
 
14
17
  export { CellContent };
@@ -1 +1 @@
1
- {"version":3,"file":"CellContent.js","sources":["../../../../../src/components/DataGrid/components/CellContent/CellContent.tsx"],"sourcesContent":["import React from 'react';\n\nimport { buildClassnames } from '../../../../utils';\n\nimport styles from './CellContent.module.scss';\n\nexport interface CellContentProps {\n /**\n * Styles to be applied to the cell content wrapper.\n */\n contentStyle: Pick<React.CSSProperties, 'marginLeft' | 'justifyContent' | 'textAlign'>;\n\n /**\n * Child elements.\n */\n children?: React.ReactNode;\n}\n\nconst cellContentClassname = buildClassnames([styles.cellContent, 'data-grid-cell-content']);\n\n/**\n * Wrapper for content displayed within a non-header cell in the grid.\n */\nexport const CellContent = ({ contentStyle, children }: CellContentProps) => {\n return (\n <div data-testid=\"data-grid-cell-content\" className={cellContentClassname} style={contentStyle}>\n {children}\n </div>\n );\n};\n"],"names":["React"],"mappings":";;;;;AAkBA,MAAM,oBAAoB,GAAG,eAAe,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;AAE5F;;AAEG;AACU,MAAA,WAAW,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAoB,KAAI;AAC1E,IAAA,QACEA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,aAAA,EAAiB,wBAAwB,EAAC,SAAS,EAAE,oBAAoB,EAAE,KAAK,EAAE,YAAY,EAAA,EAC3F,QAAQ,CACL;AAEV;;;;"}
1
+ {"version":3,"file":"CellContent.js","sources":["../../../../../src/components/DataGrid/components/CellContent/CellContent.tsx"],"sourcesContent":["import React from 'react';\n\nimport { buildClassnames } from '../../../../utils';\n\nimport styles from './CellContent.module.scss';\nimport { ExpandButton, ExpandButtonProps } from './ExpandButton';\n\nexport interface CellContentProps {\n /**\n * Styles to be applied to the cell content wrapper.\n */\n contentStyle: Pick<\n React.CSSProperties,\n 'marginLeft' | 'justifyContent' | 'textAlign' | 'marginLeft'\n >;\n\n /**\n * Child elements.\n */\n children?: React.ReactNode;\n\n /**\n * Props for an expand/collapse button, if applicable.\n */\n expandButtonProps?: ExpandButtonProps;\n}\n\nconst cellContentClassname = buildClassnames([styles.cellContent, 'data-grid-cell-content']);\n\n/**\n * Wrapper for content displayed within a non-header cell in the grid.\n */\nexport const CellContent = ({ contentStyle, children, expandButtonProps }: CellContentProps) => {\n return (\n <>\n {expandButtonProps && <ExpandButton {...expandButtonProps} />}\n <div\n data-testid=\"data-grid-cell-content\"\n className={cellContentClassname}\n style={contentStyle}\n >\n {children}\n </div>\n </>\n );\n};\n"],"names":["React"],"mappings":";;;;;;AA2BA,MAAM,oBAAoB,GAAG,eAAe,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;AAE5F;;AAEG;AACI,MAAM,WAAW,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,iBAAiB,EAAoB,KAAI;AAC7F,IAAA,QACEA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA;AACG,QAAA,iBAAiB,IAAIA,cAAA,CAAA,aAAA,CAAC,YAAY,EAAA,EAAA,GAAK,iBAAiB,EAAI,CAAA;AAC7D,QAAAA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,aAAA,EACc,wBAAwB,EACpC,SAAS,EAAE,oBAAoB,EAC/B,KAAK,EAAE,YAAY,EAElB,EAAA,QAAQ,CACL,CACL;AAEP;;;;"}
@@ -0,0 +1,20 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var DownArrowIcon = require('../../../../../tempIcons/DownArrowIcon.cjs');
5
+ var RightArrowIcon = require('../../../../../tempIcons/RightArrowIcon.cjs');
6
+ require('../../../../../theme/modules/sizes.cjs');
7
+ var Button = require('../../../../Button/Button.cjs');
8
+ var ExpandButton_module = require('./ExpandButton.module.scss.cjs');
9
+
10
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
11
+
12
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
13
+
14
+ const ExpandButton = ({ isExpanded, onToggle, containerStyle }) => {
15
+ return (React__default.default.createElement("div", { className: ExpandButton_module.expandButtonContainer, style: containerStyle },
16
+ React__default.default.createElement(Button.Button, { size: "sm", variant: "flat", className: ExpandButton_module.expandButton, iconSlot: isExpanded ? React__default.default.createElement(DownArrowIcon.DownArrowIcon, null) : React__default.default.createElement(RightArrowIcon.RightArrowIcon, null), onClick: onToggle, "aria-label": isExpanded ? 'Collapse row' : 'Expand row', "aria-expanded": isExpanded })));
17
+ };
18
+
19
+ exports.ExpandButton = ExpandButton;
20
+ //# sourceMappingURL=ExpandButton.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpandButton.cjs","sources":["../../../../../../src/components/DataGrid/components/CellContent/ExpandButton/ExpandButton.tsx"],"sourcesContent":["import React from 'react';\n\nimport { DownArrowIcon, RightArrowIcon } from '../../../../../tempIcons';\nimport { Button } from '../../../../Button';\n\nimport styles from './ExpandButton.module.scss';\n\ntype ExpandButtonProps = {\n isExpanded: boolean;\n onToggle: () => void;\n containerStyle?: React.CSSProperties;\n};\n\nconst ExpandButton = ({ isExpanded, onToggle, containerStyle }: ExpandButtonProps) => {\n return (\n <div className={styles.expandButtonContainer} style={containerStyle}>\n <Button\n size=\"sm\"\n variant=\"flat\"\n className={styles.expandButton}\n iconSlot={isExpanded ? <DownArrowIcon /> : <RightArrowIcon />}\n onClick={onToggle}\n aria-label={isExpanded ? 'Collapse row' : 'Expand row'}\n aria-expanded={isExpanded}\n />\n </div>\n );\n};\n\nexport { ExpandButton };\nexport type { ExpandButtonProps };\n"],"names":["React","styles","Button","DownArrowIcon","RightArrowIcon"],"mappings":";;;;;;;;;;;;;AAaM,MAAA,YAAY,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAqB,KAAI;IACnF,QACEA,sBAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAEC,mBAAM,CAAC,qBAAqB,EAAE,KAAK,EAAE,cAAc,EAAA;QACjED,sBAAC,CAAA,aAAA,CAAAE,aAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,MAAM,EACd,SAAS,EAAED,mBAAM,CAAC,YAAY,EAC9B,QAAQ,EAAE,UAAU,GAAGD,sBAAA,CAAA,aAAA,CAACG,2BAAa,EAAA,IAAA,CAAG,GAAGH,qCAACI,6BAAc,EAAA,IAAA,CAAG,EAC7D,OAAO,EAAE,QAAQ,EAAA,YAAA,EACL,UAAU,GAAG,cAAc,GAAG,YAAY,mBACvC,UAAU,EAAA,CACzB,CACE;AAEV;;;;"}
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ type ExpandButtonProps = {
3
+ isExpanded: boolean;
4
+ onToggle: () => void;
5
+ containerStyle?: React.CSSProperties;
6
+ };
7
+ declare const ExpandButton: ({ isExpanded, onToggle, containerStyle }: ExpandButtonProps) => React.JSX.Element;
8
+ export { ExpandButton };
9
+ export type { ExpandButtonProps };
@@ -0,0 +1,14 @@
1
+ import React__default from 'react';
2
+ import { DownArrowIcon } from '../../../../../tempIcons/DownArrowIcon.js';
3
+ import { RightArrowIcon } from '../../../../../tempIcons/RightArrowIcon.js';
4
+ import '../../../../../theme/modules/sizes.js';
5
+ import { Button } from '../../../../Button/Button.js';
6
+ import styles from './ExpandButton.module.scss.js';
7
+
8
+ const ExpandButton = ({ isExpanded, onToggle, containerStyle }) => {
9
+ return (React__default.createElement("div", { className: styles.expandButtonContainer, style: containerStyle },
10
+ React__default.createElement(Button, { size: "sm", variant: "flat", className: styles.expandButton, iconSlot: isExpanded ? React__default.createElement(DownArrowIcon, null) : React__default.createElement(RightArrowIcon, null), onClick: onToggle, "aria-label": isExpanded ? 'Collapse row' : 'Expand row', "aria-expanded": isExpanded })));
11
+ };
12
+
13
+ export { ExpandButton };
14
+ //# sourceMappingURL=ExpandButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpandButton.js","sources":["../../../../../../src/components/DataGrid/components/CellContent/ExpandButton/ExpandButton.tsx"],"sourcesContent":["import React from 'react';\n\nimport { DownArrowIcon, RightArrowIcon } from '../../../../../tempIcons';\nimport { Button } from '../../../../Button';\n\nimport styles from './ExpandButton.module.scss';\n\ntype ExpandButtonProps = {\n isExpanded: boolean;\n onToggle: () => void;\n containerStyle?: React.CSSProperties;\n};\n\nconst ExpandButton = ({ isExpanded, onToggle, containerStyle }: ExpandButtonProps) => {\n return (\n <div className={styles.expandButtonContainer} style={containerStyle}>\n <Button\n size=\"sm\"\n variant=\"flat\"\n className={styles.expandButton}\n iconSlot={isExpanded ? <DownArrowIcon /> : <RightArrowIcon />}\n onClick={onToggle}\n aria-label={isExpanded ? 'Collapse row' : 'Expand row'}\n aria-expanded={isExpanded}\n />\n </div>\n );\n};\n\nexport { ExpandButton };\nexport type { ExpandButtonProps };\n"],"names":["React"],"mappings":";;;;;;;AAaM,MAAA,YAAY,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,EAAqB,KAAI;IACnF,QACEA,cAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAE,MAAM,CAAC,qBAAqB,EAAE,KAAK,EAAE,cAAc,EAAA;QACjEA,cAAC,CAAA,aAAA,CAAA,MAAM,IACL,IAAI,EAAC,IAAI,EACT,OAAO,EAAC,MAAM,EACd,SAAS,EAAE,MAAM,CAAC,YAAY,EAC9B,QAAQ,EAAE,UAAU,GAAGA,cAAA,CAAA,aAAA,CAAC,aAAa,EAAA,IAAA,CAAG,GAAGA,6BAAC,cAAc,EAAA,IAAA,CAAG,EAC7D,OAAO,EAAE,QAAQ,EAAA,YAAA,EACL,UAAU,GAAG,cAAc,GAAG,YAAY,mBACvC,UAAU,EAAA,CACzB,CACE;AAEV;;;;"}
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ var ___$insertStyle = require('../../../../../_virtual/____insertStyle.cjs');
4
+
5
+ ___$insertStyle("._expandButton_153ka_1[aria-expanded] {\n padding: var(--sizes-none);\n width: var(--sizes-6);\n height: var(--sizes-6);\n}\n\n._expandButtonContainer_153ka_7 {\n display: flex;\n height: 100%;\n position: absolute;\n top: var(--sizes-none);\n align-items: center;\n justify-content: flex-end;\n}");
6
+ var styles = {"expandButton":"_expandButton_153ka_1","expandButtonContainer":"_expandButtonContainer_153ka_7"};
7
+
8
+ module.exports = styles;
9
+ //# sourceMappingURL=ExpandButton.module.scss.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpandButton.module.scss.cjs","sources":["../../../../../../src/components/DataGrid/components/CellContent/ExpandButton/ExpandButton.module.scss"],"sourcesContent":[".expandButton[aria-expanded] {\n padding: var(--sizes-none);\n width: var(--sizes-6);\n height: var(--sizes-6);\n}\n\n.expandButtonContainer {\n display: flex;\n height: 100%;\n\n position: absolute;\n top: var(--sizes-none);\n\n align-items: center;\n justify-content: flex-end;\n}\n"],"names":[],"mappings":";;;;AACE,eAAA,CAAA,mTAAA;AACA,aAAA,CAAA,cAAA,CAAA,uBAAA,CAAA,uBAAA,CAAA,gCAAA;;;;"}
@@ -0,0 +1,7 @@
1
+ import insertStyle from '../../../../../_virtual/____insertStyle.js';
2
+
3
+ insertStyle("._expandButton_153ka_1[aria-expanded] {\n padding: var(--sizes-none);\n width: var(--sizes-6);\n height: var(--sizes-6);\n}\n\n._expandButtonContainer_153ka_7 {\n display: flex;\n height: 100%;\n position: absolute;\n top: var(--sizes-none);\n align-items: center;\n justify-content: flex-end;\n}");
4
+ var styles = {"expandButton":"_expandButton_153ka_1","expandButtonContainer":"_expandButtonContainer_153ka_7"};
5
+
6
+ export { styles as default };
7
+ //# sourceMappingURL=ExpandButton.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExpandButton.module.scss.js","sources":["../../../../../../src/components/DataGrid/components/CellContent/ExpandButton/ExpandButton.module.scss"],"sourcesContent":[".expandButton[aria-expanded] {\n padding: var(--sizes-none);\n width: var(--sizes-6);\n height: var(--sizes-6);\n}\n\n.expandButtonContainer {\n display: flex;\n height: 100%;\n\n position: absolute;\n top: var(--sizes-none);\n\n align-items: center;\n justify-content: flex-end;\n}\n"],"names":["___$insertStyle"],"mappings":";;AACEA,WAAA,CAAA,mTAAA;AACA,aAAA,CAAA,cAAA,CAAA,uBAAA,CAAA,uBAAA,CAAA,gCAAA;;;;"}
@@ -0,0 +1,2 @@
1
+ export { ExpandButton } from './ExpandButton';
2
+ export type { ExpandButtonProps } from './ExpandButton';
@@ -0,0 +1,34 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+
5
+ const useExpandedState = (rowGrouping) => {
6
+ const { getChildData, expandedRows, onRowExpanded } = rowGrouping || {};
7
+ const internalExpandedState = React.useMemo(() => {
8
+ if (!expandedRows || !onRowExpanded)
9
+ return {};
10
+ return expandedRows;
11
+ }, [expandedRows, onRowExpanded]);
12
+ const setInternalExpandedState = React.useCallback((onUpdate) => {
13
+ if (!onRowExpanded)
14
+ return;
15
+ const newExpandedState = typeof onUpdate === 'function' ? onUpdate(internalExpandedState) : onUpdate;
16
+ onRowExpanded(newExpandedState);
17
+ }, [onRowExpanded, internalExpandedState]);
18
+ const enableExpanding = !!getChildData;
19
+ const getRowCanExpand = React.useCallback((row) => {
20
+ if (!getChildData)
21
+ return false;
22
+ return getChildData(row.original) !== undefined;
23
+ }, [getChildData]);
24
+ return {
25
+ enableExpanding,
26
+ getSubRows: getChildData,
27
+ getRowCanExpand,
28
+ expanded: internalExpandedState,
29
+ onExpandedChange: setInternalExpandedState,
30
+ };
31
+ };
32
+
33
+ exports.useExpandedState = useExpandedState;
34
+ //# sourceMappingURL=useExpandedState.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useExpandedState.cjs","sources":["../../../../src/components/DataGrid/hooks/useExpandedState.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\n\nimport { ExpandedState, OnChangeFn } from '@tanstack/react-table';\nimport { RowGroupingConfiguration } from '../types';\n\nexport const useExpandedState = (rowGrouping?: RowGroupingConfiguration) => {\n const { getChildData, expandedRows, onRowExpanded } = rowGrouping || {};\n\n const internalExpandedState = useMemo(() => {\n if (!expandedRows || !onRowExpanded) return {};\n\n return expandedRows;\n }, [expandedRows, onRowExpanded]);\n\n const setInternalExpandedState: OnChangeFn<ExpandedState> = useCallback(\n (onUpdate) => {\n if (!onRowExpanded) return;\n\n const newExpandedState =\n typeof onUpdate === 'function' ? onUpdate(internalExpandedState) : onUpdate;\n\n onRowExpanded(newExpandedState);\n },\n [onRowExpanded, internalExpandedState],\n );\n\n const enableExpanding = !!getChildData;\n const getRowCanExpand = useCallback(\n (row: any) => {\n if (!getChildData) return false;\n\n return getChildData(row.original) !== undefined;\n },\n [getChildData],\n );\n\n return {\n enableExpanding,\n getSubRows: getChildData,\n getRowCanExpand,\n expanded: internalExpandedState,\n onExpandedChange: setInternalExpandedState,\n };\n};\n"],"names":["useMemo","useCallback"],"mappings":";;;;AAKa,MAAA,gBAAgB,GAAG,CAAC,WAAsC,KAAI;IACzE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,WAAW,IAAI,EAAE;AAEvE,IAAA,MAAM,qBAAqB,GAAGA,aAAO,CAAC,MAAK;AACzC,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,EAAE;AAE9C,QAAA,OAAO,YAAY;AACrB,KAAC,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AAEjC,IAAA,MAAM,wBAAwB,GAA8BC,iBAAW,CACrE,CAAC,QAAQ,KAAI;AACX,QAAA,IAAI,CAAC,aAAa;YAAE;AAEpB,QAAA,MAAM,gBAAgB,GACpB,OAAO,QAAQ,KAAK,UAAU,GAAG,QAAQ,CAAC,qBAAqB,CAAC,GAAG,QAAQ;QAE7E,aAAa,CAAC,gBAAgB,CAAC;AACjC,KAAC,EACD,CAAC,aAAa,EAAE,qBAAqB,CAAC,CACvC;AAED,IAAA,MAAM,eAAe,GAAG,CAAC,CAAC,YAAY;AACtC,IAAA,MAAM,eAAe,GAAGA,iBAAW,CACjC,CAAC,GAAQ,KAAI;AACX,QAAA,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,KAAK;QAE/B,OAAO,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,SAAS;AACjD,KAAC,EACD,CAAC,YAAY,CAAC,CACf;IAED,OAAO;QACL,eAAe;AACf,QAAA,UAAU,EAAE,YAAY;QACxB,eAAe;AACf,QAAA,QAAQ,EAAE,qBAAqB;AAC/B,QAAA,gBAAgB,EAAE,wBAAwB;KAC3C;AACH;;;;"}
@@ -0,0 +1,9 @@
1
+ import { ExpandedState, OnChangeFn } from '@tanstack/react-table';
2
+ import { RowGroupingConfiguration } from '../types';
3
+ export declare const useExpandedState: (rowGrouping?: RowGroupingConfiguration) => {
4
+ enableExpanding: boolean;
5
+ getSubRows: ((row: any) => any) | undefined;
6
+ getRowCanExpand: (row: any) => boolean;
7
+ expanded: import("../types").ExpandedRows;
8
+ onExpandedChange: OnChangeFn<ExpandedState>;
9
+ };
@@ -0,0 +1,32 @@
1
+ import { useMemo, useCallback } from 'react';
2
+
3
+ const useExpandedState = (rowGrouping) => {
4
+ const { getChildData, expandedRows, onRowExpanded } = rowGrouping || {};
5
+ const internalExpandedState = useMemo(() => {
6
+ if (!expandedRows || !onRowExpanded)
7
+ return {};
8
+ return expandedRows;
9
+ }, [expandedRows, onRowExpanded]);
10
+ const setInternalExpandedState = useCallback((onUpdate) => {
11
+ if (!onRowExpanded)
12
+ return;
13
+ const newExpandedState = typeof onUpdate === 'function' ? onUpdate(internalExpandedState) : onUpdate;
14
+ onRowExpanded(newExpandedState);
15
+ }, [onRowExpanded, internalExpandedState]);
16
+ const enableExpanding = !!getChildData;
17
+ const getRowCanExpand = useCallback((row) => {
18
+ if (!getChildData)
19
+ return false;
20
+ return getChildData(row.original) !== undefined;
21
+ }, [getChildData]);
22
+ return {
23
+ enableExpanding,
24
+ getSubRows: getChildData,
25
+ getRowCanExpand,
26
+ expanded: internalExpandedState,
27
+ onExpandedChange: setInternalExpandedState,
28
+ };
29
+ };
30
+
31
+ export { useExpandedState };
32
+ //# sourceMappingURL=useExpandedState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useExpandedState.js","sources":["../../../../src/components/DataGrid/hooks/useExpandedState.ts"],"sourcesContent":["import { useCallback, useMemo } from 'react';\n\nimport { ExpandedState, OnChangeFn } from '@tanstack/react-table';\nimport { RowGroupingConfiguration } from '../types';\n\nexport const useExpandedState = (rowGrouping?: RowGroupingConfiguration) => {\n const { getChildData, expandedRows, onRowExpanded } = rowGrouping || {};\n\n const internalExpandedState = useMemo(() => {\n if (!expandedRows || !onRowExpanded) return {};\n\n return expandedRows;\n }, [expandedRows, onRowExpanded]);\n\n const setInternalExpandedState: OnChangeFn<ExpandedState> = useCallback(\n (onUpdate) => {\n if (!onRowExpanded) return;\n\n const newExpandedState =\n typeof onUpdate === 'function' ? onUpdate(internalExpandedState) : onUpdate;\n\n onRowExpanded(newExpandedState);\n },\n [onRowExpanded, internalExpandedState],\n );\n\n const enableExpanding = !!getChildData;\n const getRowCanExpand = useCallback(\n (row: any) => {\n if (!getChildData) return false;\n\n return getChildData(row.original) !== undefined;\n },\n [getChildData],\n );\n\n return {\n enableExpanding,\n getSubRows: getChildData,\n getRowCanExpand,\n expanded: internalExpandedState,\n onExpandedChange: setInternalExpandedState,\n };\n};\n"],"names":[],"mappings":";;AAKa,MAAA,gBAAgB,GAAG,CAAC,WAAsC,KAAI;IACzE,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,GAAG,WAAW,IAAI,EAAE;AAEvE,IAAA,MAAM,qBAAqB,GAAG,OAAO,CAAC,MAAK;AACzC,QAAA,IAAI,CAAC,YAAY,IAAI,CAAC,aAAa;AAAE,YAAA,OAAO,EAAE;AAE9C,QAAA,OAAO,YAAY;AACrB,KAAC,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;AAEjC,IAAA,MAAM,wBAAwB,GAA8B,WAAW,CACrE,CAAC,QAAQ,KAAI;AACX,QAAA,IAAI,CAAC,aAAa;YAAE;AAEpB,QAAA,MAAM,gBAAgB,GACpB,OAAO,QAAQ,KAAK,UAAU,GAAG,QAAQ,CAAC,qBAAqB,CAAC,GAAG,QAAQ;QAE7E,aAAa,CAAC,gBAAgB,CAAC;AACjC,KAAC,EACD,CAAC,aAAa,EAAE,qBAAqB,CAAC,CACvC;AAED,IAAA,MAAM,eAAe,GAAG,CAAC,CAAC,YAAY;AACtC,IAAA,MAAM,eAAe,GAAG,WAAW,CACjC,CAAC,GAAQ,KAAI;AACX,QAAA,IAAI,CAAC,YAAY;AAAE,YAAA,OAAO,KAAK;QAE/B,OAAO,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,SAAS;AACjD,KAAC,EACD,CAAC,YAAY,CAAC,CACf;IAED,OAAO;QACL,eAAe;AACf,QAAA,UAAU,EAAE,YAAY;QACxB,eAAe;AACf,QAAA,QAAQ,EAAE,qBAAqB;AAC/B,QAAA,gBAAgB,EAAE,wBAAwB;KAC3C;AACH;;;;"}
@@ -4,6 +4,7 @@ import { BorderMode, ResizeMode, SelectionMode } from './enums';
4
4
  import { ColumnDefinition } from './ColumnDefinition';
5
5
  import { SortState } from './SortState';
6
6
  import { PinnedColumnState } from './PinnedColumnState';
7
+ import { RowGroupingConfiguration } from './RowGroupingConfiguration';
7
8
  export type CustomState = {
8
9
  iconSlot: ReactElement;
9
10
  heading: string;
@@ -104,4 +105,9 @@ export type DataGridProps = Pick<AriaAttributes, 'aria-label'> & {
104
105
  * Handler called when the row selection is changed.
105
106
  */
106
107
  onSelectionChanged?: (selectedRows: string[]) => void;
108
+ /** Row grouping */
109
+ /**
110
+ * Row grouping configuration for rendering nested data in the grid.
111
+ */
112
+ rowGrouping?: RowGroupingConfiguration;
107
113
  };
@@ -0,0 +1,22 @@
1
+ export type ExpandedRows = true | Record<string, boolean>;
2
+ /**
3
+ * Configuration for row grouping within the `DataGrid` component.
4
+ */
5
+ export type RowGroupingConfiguration<TRow = any> = {
6
+ /**
7
+ * Getter used to fetch children within the tree data structure.
8
+ * @param row The row data to fetch children for.
9
+ * @returns The children of the given row.
10
+ */
11
+ getChildData: (row: TRow) => any;
12
+ /**
13
+ * Expanded row state. This can either be:
14
+ * - `true` - every row is expanded by default.
15
+ * - a record of row ID's to a boolean value indicating whether the row is expanded or not.
16
+ */
17
+ expandedRows: ExpandedRows;
18
+ /**
19
+ * Setter called when a row is expanded within the table.
20
+ */
21
+ onRowExpanded: (expandedRows: ExpandedRows) => void;
22
+ };
@@ -4,3 +4,4 @@ export { AriaRoles } from './AriaRoles';
4
4
  export { ColumnDefinition } from './ColumnDefinition';
5
5
  export { SortState } from './SortState';
6
6
  export { PinnedColumnState } from './PinnedColumnState';
7
+ export { RowGroupingConfiguration, ExpandedRows } from './RowGroupingConfiguration';
@@ -1,15 +1,21 @@
1
1
  'use strict';
2
2
 
3
- const getAriaRoles = (enableKeyboardNavigation) => {
4
- if (!enableKeyboardNavigation) {
3
+ const getAriaRoles = ({ enableKeyboardNavigation, rowGrouping, }) => {
4
+ if (rowGrouping) {
5
5
  return {
6
- table: 'table',
7
- cell: 'cell',
6
+ table: 'treegrid',
7
+ cell: 'gridcell',
8
+ };
9
+ }
10
+ if (enableKeyboardNavigation) {
11
+ return {
12
+ table: 'grid',
13
+ cell: 'gridcell',
8
14
  };
9
15
  }
10
16
  return {
11
- table: 'grid',
12
- cell: 'gridcell',
17
+ table: 'table',
18
+ cell: 'cell',
13
19
  };
14
20
  };
15
21
 
@@ -1 +1 @@
1
- {"version":3,"file":"getAriaRoles.cjs","sources":["../../../../src/components/DataGrid/utils/getAriaRoles.ts"],"sourcesContent":["import { AriaRoles } from '../types/AriaRoles';\n\nexport const getAriaRoles = (enableKeyboardNavigation: boolean): AriaRoles => {\n if (!enableKeyboardNavigation) {\n return {\n table: 'table',\n cell: 'cell',\n };\n }\n\n return {\n table: 'grid',\n cell: 'gridcell',\n };\n};\n"],"names":[],"mappings":";;AAEa,MAAA,YAAY,GAAG,CAAC,wBAAiC,KAAe;IAC3E,IAAI,CAAC,wBAAwB,EAAE;QAC7B,OAAO;AACL,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE,MAAM;SACb;AACF;IAED,OAAO;AACL,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,IAAI,EAAE,UAAU;KACjB;AACH;;;;"}
1
+ {"version":3,"file":"getAriaRoles.cjs","sources":["../../../../src/components/DataGrid/utils/getAriaRoles.ts"],"sourcesContent":["import { DataGridProps } from '../types';\nimport { AriaRoles } from '../types/AriaRoles';\n\ntype GetAriaRolesProps = Pick<DataGridProps, 'enableKeyboardNavigation' | 'rowGrouping'>;\n\nexport const getAriaRoles = ({\n enableKeyboardNavigation,\n rowGrouping,\n}: GetAriaRolesProps): AriaRoles => {\n if (rowGrouping) {\n return {\n table: 'treegrid',\n cell: 'gridcell',\n };\n }\n\n if (enableKeyboardNavigation) {\n return {\n table: 'grid',\n cell: 'gridcell',\n };\n }\n\n return {\n table: 'table',\n cell: 'cell',\n };\n};\n"],"names":[],"mappings":";;AAKa,MAAA,YAAY,GAAG,CAAC,EAC3B,wBAAwB,EACxB,WAAW,GACO,KAAe;AACjC,IAAA,IAAI,WAAW,EAAE;QACf,OAAO;AACL,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,IAAI,EAAE,UAAU;SACjB;AACF;AAED,IAAA,IAAI,wBAAwB,EAAE;QAC5B,OAAO;AACL,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,IAAI,EAAE,UAAU;SACjB;AACF;IAED,OAAO;AACL,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,IAAI,EAAE,MAAM;KACb;AACH;;;;"}
@@ -1,2 +1,5 @@
1
+ import { DataGridProps } from '../types';
1
2
  import { AriaRoles } from '../types/AriaRoles';
2
- export declare const getAriaRoles: (enableKeyboardNavigation: boolean) => AriaRoles;
3
+ type GetAriaRolesProps = Pick<DataGridProps, 'enableKeyboardNavigation' | 'rowGrouping'>;
4
+ export declare const getAriaRoles: ({ enableKeyboardNavigation, rowGrouping, }: GetAriaRolesProps) => AriaRoles;
5
+ export {};
@@ -1,13 +1,19 @@
1
- const getAriaRoles = (enableKeyboardNavigation) => {
2
- if (!enableKeyboardNavigation) {
1
+ const getAriaRoles = ({ enableKeyboardNavigation, rowGrouping, }) => {
2
+ if (rowGrouping) {
3
3
  return {
4
- table: 'table',
5
- cell: 'cell',
4
+ table: 'treegrid',
5
+ cell: 'gridcell',
6
+ };
7
+ }
8
+ if (enableKeyboardNavigation) {
9
+ return {
10
+ table: 'grid',
11
+ cell: 'gridcell',
6
12
  };
7
13
  }
8
14
  return {
9
- table: 'grid',
10
- cell: 'gridcell',
15
+ table: 'table',
16
+ cell: 'cell',
11
17
  };
12
18
  };
13
19
 
@@ -1 +1 @@
1
- {"version":3,"file":"getAriaRoles.js","sources":["../../../../src/components/DataGrid/utils/getAriaRoles.ts"],"sourcesContent":["import { AriaRoles } from '../types/AriaRoles';\n\nexport const getAriaRoles = (enableKeyboardNavigation: boolean): AriaRoles => {\n if (!enableKeyboardNavigation) {\n return {\n table: 'table',\n cell: 'cell',\n };\n }\n\n return {\n table: 'grid',\n cell: 'gridcell',\n };\n};\n"],"names":[],"mappings":"AAEa,MAAA,YAAY,GAAG,CAAC,wBAAiC,KAAe;IAC3E,IAAI,CAAC,wBAAwB,EAAE;QAC7B,OAAO;AACL,YAAA,KAAK,EAAE,OAAO;AACd,YAAA,IAAI,EAAE,MAAM;SACb;AACF;IAED,OAAO;AACL,QAAA,KAAK,EAAE,MAAM;AACb,QAAA,IAAI,EAAE,UAAU;KACjB;AACH;;;;"}
1
+ {"version":3,"file":"getAriaRoles.js","sources":["../../../../src/components/DataGrid/utils/getAriaRoles.ts"],"sourcesContent":["import { DataGridProps } from '../types';\nimport { AriaRoles } from '../types/AriaRoles';\n\ntype GetAriaRolesProps = Pick<DataGridProps, 'enableKeyboardNavigation' | 'rowGrouping'>;\n\nexport const getAriaRoles = ({\n enableKeyboardNavigation,\n rowGrouping,\n}: GetAriaRolesProps): AriaRoles => {\n if (rowGrouping) {\n return {\n table: 'treegrid',\n cell: 'gridcell',\n };\n }\n\n if (enableKeyboardNavigation) {\n return {\n table: 'grid',\n cell: 'gridcell',\n };\n }\n\n return {\n table: 'table',\n cell: 'cell',\n };\n};\n"],"names":[],"mappings":"AAKa,MAAA,YAAY,GAAG,CAAC,EAC3B,wBAAwB,EACxB,WAAW,GACO,KAAe;AACjC,IAAA,IAAI,WAAW,EAAE;QACf,OAAO;AACL,YAAA,KAAK,EAAE,UAAU;AACjB,YAAA,IAAI,EAAE,UAAU;SACjB;AACF;AAED,IAAA,IAAI,wBAAwB,EAAE;QAC5B,OAAO;AACL,YAAA,KAAK,EAAE,MAAM;AACb,YAAA,IAAI,EAAE,UAAU;SACjB;AACF;IAED,OAAO;AACL,QAAA,KAAK,EAAE,OAAO;AACd,QAAA,IAAI,EAAE,MAAM;KACb;AACH;;;;"}
package/dist/index.cjs CHANGED
@@ -93,7 +93,6 @@ var withDeprecated = require('./hoc/withDeprecated.cjs');
93
93
  var buildClassnames = require('./utils/buildClassnames.cjs');
94
94
  var color = require('./utils/color.cjs');
95
95
  var generateId = require('./utils/generateId.cjs');
96
- var isExternalLink = require('./utils/isExternalLink.cjs');
97
96
  var index$7 = require('./theme/index.cjs');
98
97
  var ActiveCheckboxIcon = require('./tempIcons/ActiveCheckboxIcon.cjs');
99
98
  var ActiveRadioIcon = require('./tempIcons/ActiveRadioIcon.cjs');
@@ -245,7 +244,6 @@ exports.buildClassnames = buildClassnames.buildClassnames;
245
244
  exports.getOpaqueHexColor = color.getOpaqueHexColor;
246
245
  exports.hexToRgb = color.hexToRgb;
247
246
  exports.generateId = generateId.generateId;
248
- exports.isExternalLink = isExternalLink.isExternalLink;
249
247
  exports.theme = index$7.theme;
250
248
  exports.ActiveCheckboxIcon = ActiveCheckboxIcon.ActiveCheckboxIcon;
251
249
  exports.ActiveRadioIcon = ActiveRadioIcon.ActiveRadioIcon;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/dist/index.js CHANGED
@@ -91,7 +91,6 @@ export { withDeprecated } from './hoc/withDeprecated.js';
91
91
  export { buildClassnames } from './utils/buildClassnames.js';
92
92
  export { getOpaqueHexColor, hexToRgb } from './utils/color.js';
93
93
  export { generateId } from './utils/generateId.js';
94
- export { isExternalLink } from './utils/isExternalLink.js';
95
94
  export { theme } from './theme/index.js';
96
95
  export { ActiveCheckboxIcon } from './tempIcons/ActiveCheckboxIcon.js';
97
96
  export { ActiveRadioIcon } from './tempIcons/ActiveRadioIcon.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+
5
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
6
+
7
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
8
+
9
+ const LaunchIcon = (props) => (React__default.default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props },
10
+ React__default.default.createElement("path", { d: "M19 19H5V5H12V3H5C3.89 3 3 3.9 3 5V19C3 20.1 3.89 21 5 21H19C20.1 21 21 20.1 21 19V12H19V19ZM14 3V5H17.59L7.76 14.83L9.17 16.24L19 6.41V10H21V3H14Z", fill: "currentColor" })));
11
+
12
+ exports.LaunchIcon = LaunchIcon;
13
+ //# sourceMappingURL=LaunchIcon.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LaunchIcon.cjs","sources":["../../src/tempIcons/LaunchIcon.tsx"],"sourcesContent":["import React from 'react';\n\nexport const LaunchIcon = (props: any) => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M19 19H5V5H12V3H5C3.89 3 3 3.9 3 5V19C3 20.1 3.89 21 5 21H19C20.1 21 21 20.1 21 19V12H19V19ZM14 3V5H17.59L7.76 14.83L9.17 16.24L19 6.41V10H21V3H14Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n"],"names":["React"],"mappings":";;;;;;;;MAEa,UAAU,GAAG,CAAC,KAAU,MACnCA,sBAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,4BAA4B,EAAA,GAAK,KAAK,EAAA;IAC/EA,sBACE,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,CAAC,EAAC,qJAAqJ,EACvJ,IAAI,EAAC,cAAc,EAAA,CACnB,CACE;;;;"}
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const LaunchIcon: (props: any) => React.JSX.Element;
@@ -0,0 +1,7 @@
1
+ import React__default from 'react';
2
+
3
+ const LaunchIcon = (props) => (React__default.createElement("svg", { viewBox: "0 0 24 24", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props },
4
+ React__default.createElement("path", { d: "M19 19H5V5H12V3H5C3.89 3 3 3.9 3 5V19C3 20.1 3.89 21 5 21H19C20.1 21 21 20.1 21 19V12H19V19ZM14 3V5H17.59L7.76 14.83L9.17 16.24L19 6.41V10H21V3H14Z", fill: "currentColor" })));
5
+
6
+ export { LaunchIcon };
7
+ //# sourceMappingURL=LaunchIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LaunchIcon.js","sources":["../../src/tempIcons/LaunchIcon.tsx"],"sourcesContent":["import React from 'react';\n\nexport const LaunchIcon = (props: any) => (\n <svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...props}>\n <path\n d=\"M19 19H5V5H12V3H5C3.89 3 3 3.9 3 5V19C3 20.1 3.89 21 5 21H19C20.1 21 21 20.1 21 19V12H19V19ZM14 3V5H17.59L7.76 14.83L9.17 16.24L19 6.41V10H21V3H14Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n"],"names":["React"],"mappings":";;MAEa,UAAU,GAAG,CAAC,KAAU,MACnCA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,KAAK,EAAC,4BAA4B,EAAA,GAAK,KAAK,EAAA;IAC/EA,cACE,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,CAAC,EAAC,qJAAqJ,EACvJ,IAAI,EAAC,cAAc,EAAA,CACnB,CACE;;;;"}
@@ -1,4 +1,3 @@
1
1
  export { buildClassnames } from './buildClassnames';
2
2
  export { getOpaqueHexColor, hexToRgb } from './color';
3
3
  export { generateId } from './generateId';
4
- export { isExternalLink } from './isExternalLink';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@veeqo/ui",
3
- "version": "9.9.5",
3
+ "version": "9.10.1",
4
4
  "description": "New optimised component library for Veeqo.",
5
5
  "author": "Robert Wealthall",
6
6
  "license": "ISC",
@@ -1,30 +0,0 @@
1
- 'use strict';
2
-
3
- const defaultAllowedHostnames = ['app.veeqo.com'];
4
- /**
5
- * Check if a URL/path string is an external link
6
- * @param {string} urlOrPath - URL or path
7
- * @param {string[]} allowedHostnames - List of allowed hostnames - default: ['app.veeqo.com']
8
-
9
- * @returns {Boolean}
10
- */
11
- function isExternalLink(urlOrPath, allowedHostnames = defaultAllowedHostnames) {
12
- // Check if the string starts with 'http://' or 'https://'
13
- if (urlOrPath.startsWith('http://') || urlOrPath.startsWith('https://')) {
14
- const { hostname: urlHostname } = new URL(urlOrPath);
15
- // Compare the hostname to a list of allowed hostnames
16
- return !allowedHostnames.some((hostname) => urlHostname.toLowerCase() === hostname.toLowerCase());
17
- }
18
- // Check if the string starts with '//'
19
- if (urlOrPath.startsWith('//')) {
20
- const { hostname } = new URL(`http:${urlOrPath}`);
21
- // Compare the hostname to a list of allowed hostnames (case-insensitive)
22
- return !allowedHostnames.some((allowedHostname) => hostname.toLowerCase() === allowedHostname.toLowerCase());
23
- }
24
- // It's a partial path, consider it internal
25
- return false;
26
- }
27
-
28
- exports.defaultAllowedHostnames = defaultAllowedHostnames;
29
- exports.isExternalLink = isExternalLink;
30
- //# sourceMappingURL=isExternalLink.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isExternalLink.cjs","sources":["../../src/utils/isExternalLink.ts"],"sourcesContent":["export const defaultAllowedHostnames = ['app.veeqo.com'];\n\n/**\n * Check if a URL/path string is an external link\n * @param {string} urlOrPath - URL or path\n * @param {string[]} allowedHostnames - List of allowed hostnames - default: ['app.veeqo.com']\n\n * @returns {Boolean}\n */\nexport function isExternalLink(\n urlOrPath: string,\n allowedHostnames: string[] = defaultAllowedHostnames,\n) {\n // Check if the string starts with 'http://' or 'https://'\n if (urlOrPath.startsWith('http://') || urlOrPath.startsWith('https://')) {\n const { hostname: urlHostname } = new URL(urlOrPath);\n // Compare the hostname to a list of allowed hostnames\n return !allowedHostnames.some(\n (hostname) => urlHostname.toLowerCase() === hostname.toLowerCase(),\n );\n }\n\n // Check if the string starts with '//'\n if (urlOrPath.startsWith('//')) {\n const { hostname } = new URL(`http:${urlOrPath}`);\n // Compare the hostname to a list of allowed hostnames (case-insensitive)\n return !allowedHostnames.some(\n (allowedHostname) => hostname.toLowerCase() === allowedHostname.toLowerCase(),\n );\n }\n\n // It's a partial path, consider it internal\n return false;\n}\n"],"names":[],"mappings":";;AAAa,MAAA,uBAAuB,GAAG,CAAC,eAAe;AAEvD;;;;;;AAMG;SACa,cAAc,CAC5B,SAAiB,EACjB,mBAA6B,uBAAuB,EAAA;;AAGpD,IAAA,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QACvE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC;;QAEpD,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAC3B,CAAC,QAAQ,KAAK,WAAW,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CACnE;AACF;;AAGD,IAAA,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QAC9B,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,CAAQ,KAAA,EAAA,SAAS,CAAE,CAAA,CAAC;;QAEjD,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAC3B,CAAC,eAAe,KAAK,QAAQ,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,WAAW,EAAE,CAC9E;AACF;;AAGD,IAAA,OAAO,KAAK;AACd;;;;;"}
@@ -1,9 +0,0 @@
1
- export declare const defaultAllowedHostnames: string[];
2
- /**
3
- * Check if a URL/path string is an external link
4
- * @param {string} urlOrPath - URL or path
5
- * @param {string[]} allowedHostnames - List of allowed hostnames - default: ['app.veeqo.com']
6
-
7
- * @returns {Boolean}
8
- */
9
- export declare function isExternalLink(urlOrPath: string, allowedHostnames?: string[]): boolean;
@@ -1,27 +0,0 @@
1
- const defaultAllowedHostnames = ['app.veeqo.com'];
2
- /**
3
- * Check if a URL/path string is an external link
4
- * @param {string} urlOrPath - URL or path
5
- * @param {string[]} allowedHostnames - List of allowed hostnames - default: ['app.veeqo.com']
6
-
7
- * @returns {Boolean}
8
- */
9
- function isExternalLink(urlOrPath, allowedHostnames = defaultAllowedHostnames) {
10
- // Check if the string starts with 'http://' or 'https://'
11
- if (urlOrPath.startsWith('http://') || urlOrPath.startsWith('https://')) {
12
- const { hostname: urlHostname } = new URL(urlOrPath);
13
- // Compare the hostname to a list of allowed hostnames
14
- return !allowedHostnames.some((hostname) => urlHostname.toLowerCase() === hostname.toLowerCase());
15
- }
16
- // Check if the string starts with '//'
17
- if (urlOrPath.startsWith('//')) {
18
- const { hostname } = new URL(`http:${urlOrPath}`);
19
- // Compare the hostname to a list of allowed hostnames (case-insensitive)
20
- return !allowedHostnames.some((allowedHostname) => hostname.toLowerCase() === allowedHostname.toLowerCase());
21
- }
22
- // It's a partial path, consider it internal
23
- return false;
24
- }
25
-
26
- export { defaultAllowedHostnames, isExternalLink };
27
- //# sourceMappingURL=isExternalLink.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"isExternalLink.js","sources":["../../src/utils/isExternalLink.ts"],"sourcesContent":["export const defaultAllowedHostnames = ['app.veeqo.com'];\n\n/**\n * Check if a URL/path string is an external link\n * @param {string} urlOrPath - URL or path\n * @param {string[]} allowedHostnames - List of allowed hostnames - default: ['app.veeqo.com']\n\n * @returns {Boolean}\n */\nexport function isExternalLink(\n urlOrPath: string,\n allowedHostnames: string[] = defaultAllowedHostnames,\n) {\n // Check if the string starts with 'http://' or 'https://'\n if (urlOrPath.startsWith('http://') || urlOrPath.startsWith('https://')) {\n const { hostname: urlHostname } = new URL(urlOrPath);\n // Compare the hostname to a list of allowed hostnames\n return !allowedHostnames.some(\n (hostname) => urlHostname.toLowerCase() === hostname.toLowerCase(),\n );\n }\n\n // Check if the string starts with '//'\n if (urlOrPath.startsWith('//')) {\n const { hostname } = new URL(`http:${urlOrPath}`);\n // Compare the hostname to a list of allowed hostnames (case-insensitive)\n return !allowedHostnames.some(\n (allowedHostname) => hostname.toLowerCase() === allowedHostname.toLowerCase(),\n );\n }\n\n // It's a partial path, consider it internal\n return false;\n}\n"],"names":[],"mappings":"AAAa,MAAA,uBAAuB,GAAG,CAAC,eAAe;AAEvD;;;;;;AAMG;SACa,cAAc,CAC5B,SAAiB,EACjB,mBAA6B,uBAAuB,EAAA;;AAGpD,IAAA,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;QACvE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC;;QAEpD,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAC3B,CAAC,QAAQ,KAAK,WAAW,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,WAAW,EAAE,CACnE;AACF;;AAGD,IAAA,IAAI,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QAC9B,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,CAAQ,KAAA,EAAA,SAAS,CAAE,CAAA,CAAC;;QAEjD,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAC3B,CAAC,eAAe,KAAK,QAAQ,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,WAAW,EAAE,CAC9E;AACF;;AAGD,IAAA,OAAO,KAAK;AACd;;;;"}