@cloudscape-design/components 3.0.1308 → 3.0.1309

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 (137) hide show
  1. package/collection-preferences/content-display/content-display-option.js +1 -1
  2. package/collection-preferences/content-display/content-display-option.js.map +1 -1
  3. package/collection-preferences/content-display/index.d.ts +3 -7
  4. package/collection-preferences/content-display/index.d.ts.map +1 -1
  5. package/collection-preferences/content-display/index.js +63 -27
  6. package/collection-preferences/content-display/index.js.map +1 -1
  7. package/collection-preferences/content-display/utils.d.ts +41 -2
  8. package/collection-preferences/content-display/utils.d.ts.map +1 -1
  9. package/collection-preferences/content-display/utils.js +107 -13
  10. package/collection-preferences/content-display/utils.js.map +1 -1
  11. package/collection-preferences/index.d.ts.map +1 -1
  12. package/collection-preferences/index.js +2 -2
  13. package/collection-preferences/index.js.map +1 -1
  14. package/collection-preferences/interfaces.d.ts +30 -2
  15. package/collection-preferences/interfaces.d.ts.map +1 -1
  16. package/collection-preferences/interfaces.js.map +1 -1
  17. package/collection-preferences/styles.css.js +38 -36
  18. package/collection-preferences/styles.scoped.css +81 -37
  19. package/collection-preferences/styles.selectors.js +38 -36
  20. package/collection-preferences/utils.d.ts +1 -0
  21. package/collection-preferences/utils.d.ts.map +1 -1
  22. package/collection-preferences/utils.js +14 -0
  23. package/collection-preferences/utils.js.map +1 -1
  24. package/i18n/messages/all.all.js +1 -1
  25. package/i18n/messages/all.all.json +1 -1
  26. package/i18n/messages/all.en.js +1 -1
  27. package/i18n/messages/all.en.json +1 -1
  28. package/i18n/messages-types.d.ts +4 -0
  29. package/i18n/messages-types.d.ts.map +1 -1
  30. package/i18n/messages-types.js.map +1 -1
  31. package/internal/base-component/styles.scoped.css +1 -1
  32. package/internal/environment.js +2 -2
  33. package/internal/environment.json +2 -2
  34. package/internal/manifest.json +1 -1
  35. package/manifest.json +2 -2
  36. package/package.json +1 -1
  37. package/pagination/internal.d.ts.map +1 -1
  38. package/pagination/internal.js +4 -1
  39. package/pagination/internal.js.map +1 -1
  40. package/table/column-groups/col-group.d.ts +12 -0
  41. package/table/column-groups/col-group.d.ts.map +1 -0
  42. package/table/column-groups/col-group.js +24 -0
  43. package/table/column-groups/col-group.js.map +1 -0
  44. package/table/column-groups/split-utils.d.ts +31 -0
  45. package/table/column-groups/split-utils.d.ts.map +1 -0
  46. package/table/column-groups/split-utils.js +43 -0
  47. package/table/column-groups/split-utils.js.map +1 -0
  48. package/table/column-groups/use-column-groups.d.ts +7 -0
  49. package/table/column-groups/use-column-groups.d.ts.map +1 -0
  50. package/table/column-groups/use-column-groups.js +23 -0
  51. package/table/column-groups/use-column-groups.js.map +1 -0
  52. package/table/column-groups/utils.d.ts +54 -0
  53. package/table/column-groups/utils.d.ts.map +1 -0
  54. package/table/column-groups/utils.js +204 -0
  55. package/table/column-groups/utils.js.map +1 -0
  56. package/table/header-cell/common-props.d.ts +23 -0
  57. package/table/header-cell/common-props.d.ts.map +1 -0
  58. package/table/header-cell/common-props.js +4 -0
  59. package/table/header-cell/common-props.js.map +1 -0
  60. package/table/header-cell/group-header-cell.d.ts +45 -0
  61. package/table/header-cell/group-header-cell.d.ts.map +1 -0
  62. package/table/header-cell/group-header-cell.js +44 -0
  63. package/table/header-cell/group-header-cell.js.map +1 -0
  64. package/table/header-cell/index.d.ts +12 -22
  65. package/table/header-cell/index.d.ts.map +1 -1
  66. package/table/header-cell/index.js +3 -3
  67. package/table/header-cell/index.js.map +1 -1
  68. package/table/header-cell/styles.css.js +33 -30
  69. package/table/header-cell/styles.scoped.css +92 -68
  70. package/table/header-cell/styles.selectors.js +33 -30
  71. package/table/header-cell/th-element.d.ts +16 -0
  72. package/table/header-cell/th-element.d.ts.map +1 -1
  73. package/table/header-cell/th-element.js +6 -4
  74. package/table/header-cell/th-element.js.map +1 -1
  75. package/table/index.d.ts.map +1 -1
  76. package/table/index.js +5 -2
  77. package/table/index.js.map +1 -1
  78. package/table/interfaces.d.ts +37 -1
  79. package/table/interfaces.d.ts.map +1 -1
  80. package/table/interfaces.js.map +1 -1
  81. package/table/internal.d.ts.map +1 -1
  82. package/table/internal.js +17 -5
  83. package/table/internal.js.map +1 -1
  84. package/table/resizer/index.d.ts +9 -2
  85. package/table/resizer/index.d.ts.map +1 -1
  86. package/table/resizer/index.js +5 -5
  87. package/table/resizer/index.js.map +1 -1
  88. package/table/resizer/styles.css.js +16 -13
  89. package/table/resizer/styles.scoped.css +36 -26
  90. package/table/resizer/styles.selectors.js +16 -13
  91. package/table/sticky-header.d.ts +3 -0
  92. package/table/sticky-header.d.ts.map +1 -1
  93. package/table/sticky-header.js +7 -2
  94. package/table/sticky-header.js.map +1 -1
  95. package/table/sticky-scrolling.d.ts.map +1 -1
  96. package/table/sticky-scrolling.js +6 -1
  97. package/table/sticky-scrolling.js.map +1 -1
  98. package/table/styles.css.js +35 -34
  99. package/table/styles.scoped.css +47 -41
  100. package/table/styles.selectors.js +35 -34
  101. package/table/table-role/grid-navigation.d.ts.map +1 -1
  102. package/table/table-role/grid-navigation.js +5 -7
  103. package/table/table-role/grid-navigation.js.map +1 -1
  104. package/table/table-role/table-role-helper.d.ts +3 -0
  105. package/table/table-role/table-role-helper.d.ts.map +1 -1
  106. package/table/table-role/table-role-helper.js +9 -4
  107. package/table/table-role/table-role-helper.js.map +1 -1
  108. package/table/table-role/utils.d.ts +19 -0
  109. package/table/table-role/utils.d.ts.map +1 -1
  110. package/table/table-role/utils.js +86 -7
  111. package/table/table-role/utils.js.map +1 -1
  112. package/table/thead.d.ts +5 -0
  113. package/table/thead.d.ts.map +1 -1
  114. package/table/thead.js +145 -18
  115. package/table/thead.js.map +1 -1
  116. package/table/use-column-widths.d.ts +4 -0
  117. package/table/use-column-widths.d.ts.map +1 -1
  118. package/table/use-column-widths.js +68 -18
  119. package/table/use-column-widths.js.map +1 -1
  120. package/table/use-sticky-header.d.ts.map +1 -1
  121. package/table/use-sticky-header.js +4 -1
  122. package/table/use-sticky-header.js.map +1 -1
  123. package/table/utils.d.ts.map +1 -1
  124. package/table/utils.js +14 -4
  125. package/table/utils.js.map +1 -1
  126. package/test-utils/dom/collection-preferences/content-display-preference.d.ts +28 -2
  127. package/test-utils/dom/collection-preferences/content-display-preference.js +60 -2
  128. package/test-utils/dom/collection-preferences/content-display-preference.js.map +1 -1
  129. package/test-utils/dom/table/index.d.ts +18 -1
  130. package/test-utils/dom/table/index.js +22 -3
  131. package/test-utils/dom/table/index.js.map +1 -1
  132. package/test-utils/selectors/collection-preferences/content-display-preference.d.ts +28 -2
  133. package/test-utils/selectors/collection-preferences/content-display-preference.js +52 -2
  134. package/test-utils/selectors/collection-preferences/content-display-preference.js.map +1 -1
  135. package/test-utils/selectors/table/index.d.ts +18 -1
  136. package/test-utils/selectors/table/index.js +22 -3
  137. package/test-utils/selectors/table/index.js.map +1 -1
@@ -1,3 +1,3 @@
1
1
  {
2
- "commit": "8ddbc9281c7c0600b2d5c12af1e0ae4eacbc884b"
2
+ "commit": "c158a478904bc2bdf92940131a95a09c1327a71f"
3
3
  }
package/manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "artifactId": "7442326887",
2
+ "artifactId": "7486020158",
3
3
  "repoName": "components",
4
- "commitSha": "8ddbc9281c7c0600b2d5c12af1e0ae4eacbc884b"
4
+ "commitSha": "c158a478904bc2bdf92940131a95a09c1327a71f"
5
5
  }
package/package.json CHANGED
@@ -167,7 +167,7 @@
167
167
  "./internal/base-component/index.js",
168
168
  "./internal/base-component/styles.css.js"
169
169
  ],
170
- "version": "3.0.1308",
170
+ "version": "3.0.1309",
171
171
  "repository": {
172
172
  "type": "git",
173
173
  "url": "https://github.com/cloudscape-design/components.git"
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/pagination/internal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAgBhD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAKlF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AA+E/C,QAAA,MAAM,kBAAkB,0HAwOvB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../../src/pagination/internal.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA2B,MAAM,OAAO,CAAC;AAgBhD,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAKlF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAmF/C,QAAA,MAAM,kBAAkB,0HAwOvB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -17,11 +17,14 @@ import { getPaginationState, range } from './utils';
17
17
  import styles from './styles.css.js';
18
18
  function PageButton({ className, ariaLabel, disabled, pageIndex, isCurrent = false, children, onClick, ...rest }) {
19
19
  function handleClick(event) {
20
+ if (disabled) {
21
+ return;
22
+ }
20
23
  event.preventDefault();
21
24
  onClick(pageIndex);
22
25
  }
23
26
  return (React.createElement("li", { className: styles['page-item'], ...copyAnalyticsMetadataAttribute(rest) },
24
- React.createElement("button", { className: clsx(className, styles.button, disabled && styles['button-disabled'], isCurrent && styles['button-current']), type: "button", "aria-label": ariaLabel, disabled: disabled, onClick: handleClick, "aria-current": isCurrent, ...(disabled
27
+ React.createElement("button", { className: clsx(className, styles.button, disabled && styles['button-disabled'], isCurrent && styles['button-current']), type: "button", "aria-label": ariaLabel, "aria-disabled": disabled ? true : undefined, tabIndex: disabled ? -1 : 0, onClick: handleClick, "aria-current": isCurrent, ...(disabled
25
28
  ? {}
26
29
  : getAnalyticsMetadataAttribute({
27
30
  action: 'click',
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/pagination/internal.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { useRef, useState } from 'react';\nimport clsx from 'clsx';\n\nimport {\n copyAnalyticsMetadataAttribute,\n getAnalyticsMetadataAttribute,\n} from '@cloudscape-design/component-toolkit/internal/analytics-metadata';\n\nimport InternalButton from '../button/internal';\nimport { useInternalI18n } from '../i18n/context';\nimport InternalIcon from '../icon/internal';\nimport { BaseChangeDetail } from '../input/interfaces';\nimport InternalInput from '../input/internal';\nimport { getBaseProps } from '../internal/base-component';\nimport { useTableComponentsContext } from '../internal/context/table-component-context';\nimport { fireNonCancelableEvent, NonCancelableCustomEvent } from '../internal/events';\nimport { InternalBaseComponentProps } from '../internal/hooks/use-base-component';\nimport { usePrevious } from '../internal/hooks/use-previous';\nimport InternalPopover from '../popover/internal';\nimport InternalSpaceBetween from '../space-between/internal';\nimport { GeneratedAnalyticsMetadataPaginationClick } from './analytics-metadata/interfaces';\nimport { PaginationProps } from './interfaces';\nimport { getPaginationState, range } from './utils';\n\nimport styles from './styles.css.js';\n\ninterface PageButtonProps {\n className?: string;\n ariaLabel: string;\n disabled?: boolean;\n pageIndex: number;\n isCurrent?: boolean;\n children?: React.ReactNode;\n onClick: (requestedIndex: number) => void;\n}\n\nfunction PageButton({\n className,\n ariaLabel,\n disabled,\n pageIndex,\n isCurrent = false,\n children,\n onClick,\n ...rest\n}: PageButtonProps) {\n function handleClick(event: React.MouseEvent) {\n event.preventDefault();\n onClick(pageIndex);\n }\n return (\n <li className={styles['page-item']} {...copyAnalyticsMetadataAttribute(rest)}>\n <button\n className={clsx(\n className,\n styles.button,\n disabled && styles['button-disabled'],\n isCurrent && styles['button-current']\n )}\n type=\"button\"\n aria-label={ariaLabel}\n disabled={disabled}\n onClick={handleClick}\n aria-current={isCurrent}\n {...(disabled\n ? {}\n : getAnalyticsMetadataAttribute({\n action: 'click',\n detail: {\n label: { root: 'self' },\n },\n } as GeneratedAnalyticsMetadataPaginationClick))}\n >\n {children}\n </button>\n </li>\n );\n}\n\nfunction PageNumber({ pageIndex, ...rest }: PageButtonProps) {\n return (\n <PageButton\n className={styles['page-number']}\n pageIndex={pageIndex}\n {...rest}\n {...(rest.disabled\n ? {}\n : getAnalyticsMetadataAttribute({\n detail: {\n position: `${pageIndex}`,\n },\n }))}\n >\n {pageIndex}\n </PageButton>\n );\n}\n\ntype InternalPaginationProps = PaginationProps & InternalBaseComponentProps;\n\nconst InternalPagination = React.forwardRef(\n (\n {\n openEnd,\n currentPageIndex,\n ariaLabels,\n i18nStrings,\n pagesCount,\n disabled,\n onChange,\n onNextPageClick,\n onPreviousPageClick,\n __internalRootRef,\n jumpToPage,\n ...rest\n }: InternalPaginationProps,\n ref: React.Ref<PaginationProps.Ref>\n ) => {\n const baseProps = getBaseProps(rest);\n const { leftDots, leftIndex, rightIndex, rightDots } = getPaginationState(currentPageIndex, pagesCount, openEnd);\n const [jumpToPageValue, setJumpToPageValue] = useState(currentPageIndex?.toString());\n const previousLoading = usePrevious(jumpToPage?.loading);\n const jumpToPageInputRef = useRef<HTMLInputElement>(null);\n const [hasError, setHasError] = useState(false);\n\n const i18n = useInternalI18n('pagination');\n\n // Expose setError function via ref\n React.useImperativeHandle(ref, () => ({\n setError: (error: boolean) => setHasError(error),\n }));\n\n // Sync input with currentPageIndex after loading completes\n React.useEffect(() => {\n if (previousLoading && !jumpToPage?.loading) {\n setJumpToPageValue(String(currentPageIndex));\n }\n }, [previousLoading, jumpToPage?.loading, currentPageIndex]);\n\n const paginationLabel = ariaLabels?.paginationLabel ?? '';\n const nextPageLabel = i18n('ariaLabels.nextPageLabel', ariaLabels?.nextPageLabel) ?? '';\n const previousPageLabel = i18n('ariaLabels.previousPageLabel', ariaLabels?.previousPageLabel) ?? '';\n const pageNumberLabelFn =\n i18n('ariaLabels.pageLabel', ariaLabels?.pageLabel, format => pageNumber => format({ pageNumber })) ??\n ((pageNumber: number) => `${pageNumber}`);\n\n const jumpToPageLabel = i18n('i18nStrings.jumpToPageInputLabel', i18nStrings?.jumpToPageInputLabel) ?? '';\n const jumpToPageButtonLabel = i18n('ariaLabels.jumpToPageButtonLabel', ariaLabels?.jumpToPageButton) ?? '';\n const jumpToPageError = i18n('i18nStrings.jumpToPageError', i18nStrings?.jumpToPageError) ?? '';\n const jumpToPageLoadingText = i18n('i18nStrings.jumpToPageLoadingText', i18nStrings?.jumpToPageLoadingText) ?? '';\n\n function handlePrevPageClick(requestedPageIndex: number) {\n handlePageClick(requestedPageIndex);\n fireNonCancelableEvent(onPreviousPageClick, {\n requestedPageAvailable: true,\n requestedPageIndex: requestedPageIndex,\n });\n }\n\n function handleNextPageClick(requestedPageIndex: number) {\n handlePageClick(requestedPageIndex);\n fireNonCancelableEvent(onNextPageClick, {\n requestedPageAvailable: currentPageIndex < pagesCount,\n requestedPageIndex: requestedPageIndex,\n });\n }\n\n function handlePageClick(requestedPageIndex: number, errorState?: boolean) {\n setJumpToPageValue(String(requestedPageIndex));\n setHasError(!!errorState); // Clear error on successful navigation\n fireNonCancelableEvent(onChange, { currentPageIndex: requestedPageIndex });\n }\n\n function handleJumpToPageClick(requestedPageIndex: number) {\n const adjustedIndex = Math.max(1, Math.floor(requestedPageIndex));\n\n if (openEnd) {\n // Open-end: always navigate, parent will handle async loading\n handlePageClick(adjustedIndex);\n } else {\n // Closed-end: validate range\n if (adjustedIndex >= 1 && adjustedIndex <= pagesCount) {\n handlePageClick(adjustedIndex);\n } else {\n // Out of range - set error and navigate to last page\n handlePageClick(pagesCount, true);\n }\n }\n jumpToPageInputRef.current?.focus();\n }\n\n // Auto-clear error when user types in the input\n const handleInputChange = (e: NonCancelableCustomEvent<BaseChangeDetail>) => {\n setJumpToPageValue(e.detail.value);\n if (hasError) {\n setHasError(false);\n }\n };\n\n const previousButtonDisabled = disabled || currentPageIndex === 1;\n const nextButtonDisabled = disabled || (!openEnd && (pagesCount === 0 || currentPageIndex === pagesCount));\n const tableComponentContext = useTableComponentsContext();\n if (tableComponentContext?.paginationRef?.current) {\n tableComponentContext.paginationRef.current.currentPageIndex = currentPageIndex;\n tableComponentContext.paginationRef.current.totalPageCount = pagesCount;\n tableComponentContext.paginationRef.current.openEnd = openEnd;\n }\n\n const jumpToPageButton = (\n <InternalButton\n iconName=\"arrow-right\"\n variant=\"icon\"\n loading={jumpToPage?.loading}\n loadingText={jumpToPageLoadingText}\n ariaLabel={jumpToPage?.loading ? jumpToPageLoadingText : jumpToPageButtonLabel}\n onClick={() => handleJumpToPageClick(Number(jumpToPageValue))}\n disabled={!jumpToPageValue || Number(jumpToPageValue) === currentPageIndex}\n />\n );\n\n return (\n <ul\n aria-label={paginationLabel}\n {...baseProps}\n className={clsx(baseProps.className, styles.root, disabled && styles['root-disabled'])}\n ref={__internalRootRef}\n >\n <PageButton\n className={styles.arrow}\n pageIndex={currentPageIndex - 1}\n ariaLabel={previousPageLabel}\n disabled={previousButtonDisabled}\n onClick={handlePrevPageClick}\n {...(previousButtonDisabled\n ? {}\n : getAnalyticsMetadataAttribute({\n detail: {\n position: 'prev',\n },\n }))}\n >\n <InternalIcon name=\"angle-left\" variant={disabled ? 'disabled' : 'normal'} />\n </PageButton>\n <PageNumber\n pageIndex={1}\n isCurrent={currentPageIndex === 1}\n disabled={disabled}\n ariaLabel={pageNumberLabelFn(1)}\n onClick={handlePageClick}\n />\n {leftDots && <li className={styles.dots}>...</li>}\n {range(leftIndex, rightIndex).map(pageIndex => (\n <PageNumber\n key={pageIndex}\n isCurrent={currentPageIndex === pageIndex}\n pageIndex={pageIndex}\n disabled={disabled}\n ariaLabel={pageNumberLabelFn(pageIndex)}\n onClick={handlePageClick}\n />\n ))}\n {rightDots && <li className={styles.dots}>...</li>}\n {!openEnd && pagesCount > 1 && (\n <PageNumber\n isCurrent={currentPageIndex === pagesCount}\n pageIndex={pagesCount}\n disabled={disabled}\n ariaLabel={pageNumberLabelFn(pagesCount)}\n onClick={handlePageClick}\n />\n )}\n <PageButton\n className={styles.arrow}\n pageIndex={currentPageIndex + 1}\n ariaLabel={nextPageLabel}\n disabled={nextButtonDisabled}\n onClick={handleNextPageClick}\n {...(nextButtonDisabled\n ? {}\n : getAnalyticsMetadataAttribute({\n detail: {\n position: 'next',\n },\n }))}\n >\n <InternalIcon name=\"angle-right\" variant={disabled ? 'disabled' : 'normal'} />\n </PageButton>\n {jumpToPage && (\n <li className={styles['jump-to-page']}>\n <InternalSpaceBetween size=\"xxs\" direction=\"horizontal\" alignItems=\"end\">\n <div className={styles['jump-to-page-input']}>\n <InternalInput\n ref={jumpToPageInputRef}\n type=\"number\"\n value={jumpToPageValue}\n __inlineLabelText={jumpToPageLabel || undefined}\n __fullWidth={true}\n ariaLabel={jumpToPageLabel || undefined}\n nativeInputAttributes={{\n min: 1,\n max: !openEnd ? pagesCount : undefined,\n }}\n onChange={handleInputChange}\n onBlur={() => setHasError(false)}\n onKeyDown={e => {\n if (e.detail.keyCode === 13 && jumpToPageValue && Number(jumpToPageValue) !== currentPageIndex) {\n handleJumpToPageClick(Number(jumpToPageValue));\n }\n }}\n />\n </div>\n {hasError && !jumpToPage?.loading ? (\n <InternalPopover\n size=\"medium\"\n dismissButton={false}\n __visible={true}\n content={jumpToPageError}\n position=\"bottom\"\n triggerType=\"custom\"\n __onVisibleChange={({ detail }) => !detail.visible && setHasError(false)}\n >\n {jumpToPageButton}\n </InternalPopover>\n ) : (\n jumpToPageButton\n )}\n </InternalSpaceBetween>\n </li>\n )}\n </ul>\n );\n }\n);\n\nexport default InternalPagination;\n"]}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/pagination/internal.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { useRef, useState } from 'react';\nimport clsx from 'clsx';\n\nimport {\n copyAnalyticsMetadataAttribute,\n getAnalyticsMetadataAttribute,\n} from '@cloudscape-design/component-toolkit/internal/analytics-metadata';\n\nimport InternalButton from '../button/internal';\nimport { useInternalI18n } from '../i18n/context';\nimport InternalIcon from '../icon/internal';\nimport { BaseChangeDetail } from '../input/interfaces';\nimport InternalInput from '../input/internal';\nimport { getBaseProps } from '../internal/base-component';\nimport { useTableComponentsContext } from '../internal/context/table-component-context';\nimport { fireNonCancelableEvent, NonCancelableCustomEvent } from '../internal/events';\nimport { InternalBaseComponentProps } from '../internal/hooks/use-base-component';\nimport { usePrevious } from '../internal/hooks/use-previous';\nimport InternalPopover from '../popover/internal';\nimport InternalSpaceBetween from '../space-between/internal';\nimport { GeneratedAnalyticsMetadataPaginationClick } from './analytics-metadata/interfaces';\nimport { PaginationProps } from './interfaces';\nimport { getPaginationState, range } from './utils';\n\nimport styles from './styles.css.js';\n\ninterface PageButtonProps {\n className?: string;\n ariaLabel: string;\n disabled?: boolean;\n pageIndex: number;\n isCurrent?: boolean;\n children?: React.ReactNode;\n onClick: (requestedIndex: number) => void;\n}\n\nfunction PageButton({\n className,\n ariaLabel,\n disabled,\n pageIndex,\n isCurrent = false,\n children,\n onClick,\n ...rest\n}: PageButtonProps) {\n function handleClick(event: React.MouseEvent) {\n if (disabled) {\n return;\n }\n event.preventDefault();\n onClick(pageIndex);\n }\n return (\n <li className={styles['page-item']} {...copyAnalyticsMetadataAttribute(rest)}>\n <button\n className={clsx(\n className,\n styles.button,\n disabled && styles['button-disabled'],\n isCurrent && styles['button-current']\n )}\n type=\"button\"\n aria-label={ariaLabel}\n aria-disabled={disabled ? true : undefined}\n tabIndex={disabled ? -1 : 0}\n onClick={handleClick}\n aria-current={isCurrent}\n {...(disabled\n ? {}\n : getAnalyticsMetadataAttribute({\n action: 'click',\n detail: {\n label: { root: 'self' },\n },\n } as GeneratedAnalyticsMetadataPaginationClick))}\n >\n {children}\n </button>\n </li>\n );\n}\n\nfunction PageNumber({ pageIndex, ...rest }: PageButtonProps) {\n return (\n <PageButton\n className={styles['page-number']}\n pageIndex={pageIndex}\n {...rest}\n {...(rest.disabled\n ? {}\n : getAnalyticsMetadataAttribute({\n detail: {\n position: `${pageIndex}`,\n },\n }))}\n >\n {pageIndex}\n </PageButton>\n );\n}\n\ntype InternalPaginationProps = PaginationProps & InternalBaseComponentProps;\n\nconst InternalPagination = React.forwardRef(\n (\n {\n openEnd,\n currentPageIndex,\n ariaLabels,\n i18nStrings,\n pagesCount,\n disabled,\n onChange,\n onNextPageClick,\n onPreviousPageClick,\n __internalRootRef,\n jumpToPage,\n ...rest\n }: InternalPaginationProps,\n ref: React.Ref<PaginationProps.Ref>\n ) => {\n const baseProps = getBaseProps(rest);\n const { leftDots, leftIndex, rightIndex, rightDots } = getPaginationState(currentPageIndex, pagesCount, openEnd);\n const [jumpToPageValue, setJumpToPageValue] = useState(currentPageIndex?.toString());\n const previousLoading = usePrevious(jumpToPage?.loading);\n const jumpToPageInputRef = useRef<HTMLInputElement>(null);\n const [hasError, setHasError] = useState(false);\n\n const i18n = useInternalI18n('pagination');\n\n // Expose setError function via ref\n React.useImperativeHandle(ref, () => ({\n setError: (error: boolean) => setHasError(error),\n }));\n\n // Sync input with currentPageIndex after loading completes\n React.useEffect(() => {\n if (previousLoading && !jumpToPage?.loading) {\n setJumpToPageValue(String(currentPageIndex));\n }\n }, [previousLoading, jumpToPage?.loading, currentPageIndex]);\n\n const paginationLabel = ariaLabels?.paginationLabel ?? '';\n const nextPageLabel = i18n('ariaLabels.nextPageLabel', ariaLabels?.nextPageLabel) ?? '';\n const previousPageLabel = i18n('ariaLabels.previousPageLabel', ariaLabels?.previousPageLabel) ?? '';\n const pageNumberLabelFn =\n i18n('ariaLabels.pageLabel', ariaLabels?.pageLabel, format => pageNumber => format({ pageNumber })) ??\n ((pageNumber: number) => `${pageNumber}`);\n\n const jumpToPageLabel = i18n('i18nStrings.jumpToPageInputLabel', i18nStrings?.jumpToPageInputLabel) ?? '';\n const jumpToPageButtonLabel = i18n('ariaLabels.jumpToPageButtonLabel', ariaLabels?.jumpToPageButton) ?? '';\n const jumpToPageError = i18n('i18nStrings.jumpToPageError', i18nStrings?.jumpToPageError) ?? '';\n const jumpToPageLoadingText = i18n('i18nStrings.jumpToPageLoadingText', i18nStrings?.jumpToPageLoadingText) ?? '';\n\n function handlePrevPageClick(requestedPageIndex: number) {\n handlePageClick(requestedPageIndex);\n fireNonCancelableEvent(onPreviousPageClick, {\n requestedPageAvailable: true,\n requestedPageIndex: requestedPageIndex,\n });\n }\n\n function handleNextPageClick(requestedPageIndex: number) {\n handlePageClick(requestedPageIndex);\n fireNonCancelableEvent(onNextPageClick, {\n requestedPageAvailable: currentPageIndex < pagesCount,\n requestedPageIndex: requestedPageIndex,\n });\n }\n\n function handlePageClick(requestedPageIndex: number, errorState?: boolean) {\n setJumpToPageValue(String(requestedPageIndex));\n setHasError(!!errorState); // Clear error on successful navigation\n fireNonCancelableEvent(onChange, { currentPageIndex: requestedPageIndex });\n }\n\n function handleJumpToPageClick(requestedPageIndex: number) {\n const adjustedIndex = Math.max(1, Math.floor(requestedPageIndex));\n\n if (openEnd) {\n // Open-end: always navigate, parent will handle async loading\n handlePageClick(adjustedIndex);\n } else {\n // Closed-end: validate range\n if (adjustedIndex >= 1 && adjustedIndex <= pagesCount) {\n handlePageClick(adjustedIndex);\n } else {\n // Out of range - set error and navigate to last page\n handlePageClick(pagesCount, true);\n }\n }\n jumpToPageInputRef.current?.focus();\n }\n\n // Auto-clear error when user types in the input\n const handleInputChange = (e: NonCancelableCustomEvent<BaseChangeDetail>) => {\n setJumpToPageValue(e.detail.value);\n if (hasError) {\n setHasError(false);\n }\n };\n\n const previousButtonDisabled = disabled || currentPageIndex === 1;\n const nextButtonDisabled = disabled || (!openEnd && (pagesCount === 0 || currentPageIndex === pagesCount));\n const tableComponentContext = useTableComponentsContext();\n if (tableComponentContext?.paginationRef?.current) {\n tableComponentContext.paginationRef.current.currentPageIndex = currentPageIndex;\n tableComponentContext.paginationRef.current.totalPageCount = pagesCount;\n tableComponentContext.paginationRef.current.openEnd = openEnd;\n }\n\n const jumpToPageButton = (\n <InternalButton\n iconName=\"arrow-right\"\n variant=\"icon\"\n loading={jumpToPage?.loading}\n loadingText={jumpToPageLoadingText}\n ariaLabel={jumpToPage?.loading ? jumpToPageLoadingText : jumpToPageButtonLabel}\n onClick={() => handleJumpToPageClick(Number(jumpToPageValue))}\n disabled={!jumpToPageValue || Number(jumpToPageValue) === currentPageIndex}\n />\n );\n\n return (\n <ul\n aria-label={paginationLabel}\n {...baseProps}\n className={clsx(baseProps.className, styles.root, disabled && styles['root-disabled'])}\n ref={__internalRootRef}\n >\n <PageButton\n className={styles.arrow}\n pageIndex={currentPageIndex - 1}\n ariaLabel={previousPageLabel}\n disabled={previousButtonDisabled}\n onClick={handlePrevPageClick}\n {...(previousButtonDisabled\n ? {}\n : getAnalyticsMetadataAttribute({\n detail: {\n position: 'prev',\n },\n }))}\n >\n <InternalIcon name=\"angle-left\" variant={disabled ? 'disabled' : 'normal'} />\n </PageButton>\n <PageNumber\n pageIndex={1}\n isCurrent={currentPageIndex === 1}\n disabled={disabled}\n ariaLabel={pageNumberLabelFn(1)}\n onClick={handlePageClick}\n />\n {leftDots && <li className={styles.dots}>...</li>}\n {range(leftIndex, rightIndex).map(pageIndex => (\n <PageNumber\n key={pageIndex}\n isCurrent={currentPageIndex === pageIndex}\n pageIndex={pageIndex}\n disabled={disabled}\n ariaLabel={pageNumberLabelFn(pageIndex)}\n onClick={handlePageClick}\n />\n ))}\n {rightDots && <li className={styles.dots}>...</li>}\n {!openEnd && pagesCount > 1 && (\n <PageNumber\n isCurrent={currentPageIndex === pagesCount}\n pageIndex={pagesCount}\n disabled={disabled}\n ariaLabel={pageNumberLabelFn(pagesCount)}\n onClick={handlePageClick}\n />\n )}\n <PageButton\n className={styles.arrow}\n pageIndex={currentPageIndex + 1}\n ariaLabel={nextPageLabel}\n disabled={nextButtonDisabled}\n onClick={handleNextPageClick}\n {...(nextButtonDisabled\n ? {}\n : getAnalyticsMetadataAttribute({\n detail: {\n position: 'next',\n },\n }))}\n >\n <InternalIcon name=\"angle-right\" variant={disabled ? 'disabled' : 'normal'} />\n </PageButton>\n {jumpToPage && (\n <li className={styles['jump-to-page']}>\n <InternalSpaceBetween size=\"xxs\" direction=\"horizontal\" alignItems=\"end\">\n <div className={styles['jump-to-page-input']}>\n <InternalInput\n ref={jumpToPageInputRef}\n type=\"number\"\n value={jumpToPageValue}\n __inlineLabelText={jumpToPageLabel || undefined}\n __fullWidth={true}\n ariaLabel={jumpToPageLabel || undefined}\n nativeInputAttributes={{\n min: 1,\n max: !openEnd ? pagesCount : undefined,\n }}\n onChange={handleInputChange}\n onBlur={() => setHasError(false)}\n onKeyDown={e => {\n if (e.detail.keyCode === 13 && jumpToPageValue && Number(jumpToPageValue) !== currentPageIndex) {\n handleJumpToPageClick(Number(jumpToPageValue));\n }\n }}\n />\n </div>\n {hasError && !jumpToPage?.loading ? (\n <InternalPopover\n size=\"medium\"\n dismissButton={false}\n __visible={true}\n content={jumpToPageError}\n position=\"bottom\"\n triggerType=\"custom\"\n __onVisibleChange={({ detail }) => !detail.visible && setHasError(false)}\n >\n {jumpToPageButton}\n </InternalPopover>\n ) : (\n jumpToPageButton\n )}\n </InternalSpaceBetween>\n </li>\n )}\n </ul>\n );\n }\n);\n\nexport default InternalPagination;\n"]}
@@ -0,0 +1,12 @@
1
+ import { TableProps } from '../interfaces';
2
+ export declare function TableColGroup({
3
+ visibleColumnDefinitions,
4
+ hasSelection,
5
+ sticky,
6
+ selectionColumnId
7
+ }: {
8
+ visibleColumnDefinitions: ReadonlyArray<TableProps.ColumnDefinition<any>>;
9
+ hasSelection: boolean;
10
+ sticky?: boolean;
11
+ selectionColumnId?: PropertyKey;
12
+ }): JSX.Element;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"col-group.d.ts","sourceRoot":"","sources":["../../../../src/table/column-groups/col-group.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAU3C,wBAAgB,aAAa,CAAC,EAC5B,wBAAwB,EACxB,YAAY,EACZ,MAAc,EACd,iBAAiB,GAClB,EAAE;IACD,wBAAwB,EAAE,aAAa,CAAC,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,YAAY,EAAE,OAAO,CAAC;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,iBAAiB,CAAC,EAAE,WAAW,CAAC;CACjC,eAkBA"}
@@ -0,0 +1,24 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import React from 'react';
4
+ import { useColumnWidths } from '../use-column-widths';
5
+ import { getColumnKey } from '../utils';
6
+ /*
7
+ * Renders a <colgroup> with <col> elements for each column.
8
+ * With table-layout:fixed, <col> widths control actual column widths,
9
+ * which makes colspan headers automatically span the correct width.
10
+ * Must be rendered inside ColumnWidthsProvider.
11
+ */
12
+ export function TableColGroup({ visibleColumnDefinitions, hasSelection, sticky = false, selectionColumnId, }) {
13
+ const { getColumnStyles, setCol } = useColumnWidths();
14
+ return (React.createElement("colgroup", null,
15
+ hasSelection && (React.createElement("col", { style: sticky && selectionColumnId ? { width: getColumnStyles(true, selectionColumnId).width } : undefined })),
16
+ visibleColumnDefinitions.map((column, colIndex) => {
17
+ const columnId = getColumnKey(column, colIndex);
18
+ if (sticky) {
19
+ return React.createElement("col", { key: String(columnId), style: { width: getColumnStyles(true, columnId).width } });
20
+ }
21
+ return React.createElement("col", { key: columnId, "data-column-id": String(columnId), ref: node => setCol(columnId, node) });
22
+ })));
23
+ }
24
+ //# sourceMappingURL=col-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"col-group.js","sourceRoot":"","sources":["../../../../src/table/column-groups/col-group.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExC;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,wBAAwB,EACxB,YAAY,EACZ,MAAM,GAAG,KAAK,EACd,iBAAiB,GAMlB;IACC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;IACtD,OAAO,CACL;QACG,YAAY,IAAI,CACf,6BACE,KAAK,EAAE,MAAM,IAAI,iBAAiB,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,eAAe,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,GAC1G,CACH;QACA,wBAAwB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YACjD,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAChD,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,6BAAK,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,EAAE,GAAI,CAAC;YACjG,CAAC;YACD,OAAO,6BAAK,GAAG,EAAE,QAAQ,oBAAkB,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAI,CAAC;QACvG,CAAC,CAAC,CACO,CACZ,CAAC;AACJ,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React from 'react';\n\nimport { TableProps } from '../interfaces';\nimport { useColumnWidths } from '../use-column-widths';\nimport { getColumnKey } from '../utils';\n\n/*\n * Renders a <colgroup> with <col> elements for each column.\n * With table-layout:fixed, <col> widths control actual column widths,\n * which makes colspan headers automatically span the correct width.\n * Must be rendered inside ColumnWidthsProvider.\n */\nexport function TableColGroup({\n visibleColumnDefinitions,\n hasSelection,\n sticky = false,\n selectionColumnId,\n}: {\n visibleColumnDefinitions: ReadonlyArray<TableProps.ColumnDefinition<any>>;\n hasSelection: boolean;\n sticky?: boolean;\n selectionColumnId?: PropertyKey;\n}) {\n const { getColumnStyles, setCol } = useColumnWidths();\n return (\n <colgroup>\n {hasSelection && (\n <col\n style={sticky && selectionColumnId ? { width: getColumnStyles(true, selectionColumnId).width } : undefined}\n />\n )}\n {visibleColumnDefinitions.map((column, colIndex) => {\n const columnId = getColumnKey(column, colIndex);\n if (sticky) {\n return <col key={String(columnId)} style={{ width: getColumnStyles(true, columnId).width }} />;\n }\n return <col key={columnId} data-column-id={String(columnId)} ref={node => setCol(columnId, node)} />;\n })}\n </colgroup>\n );\n}\n"]}
@@ -0,0 +1,31 @@
1
+ import { ColumnGroupsLayout, HeaderRowColumn } from './utils';
2
+ /**
3
+ * Describes how a group header is split by a single sticky column boundary.
4
+ * `stickyColspan` is the number of columns on the sticky side.
5
+ * `staticColspan` is the number of columns on the scrollable side.
6
+ * When both are 0, the group is not affected by this boundary.
7
+ */
8
+ export interface StickyGroupSplit {
9
+ stickyColspan: number;
10
+ staticColspan: number;
11
+ }
12
+ /** Returns all column IDs that are descendants of the given group (including nested subgroups). */
13
+ export declare function getGroupColumnIds(columnGroupsLayout: ColumnGroupsLayout<any>, groupId: string): string[];
14
+ /**
15
+ * Computes how a group header cell is split by a sticky boundary.
16
+ * Call once for sticky-first and once for sticky-last.
17
+ *
18
+ * @param stickyCount - number of sticky columns from that side (first or last)
19
+ * @param side - which boundary to check
20
+ */
21
+ export declare function getGroupSplit({
22
+ col,
23
+ stickyCount,
24
+ side,
25
+ totalColumns
26
+ }: {
27
+ col: HeaderRowColumn<any>;
28
+ stickyCount: number;
29
+ side: 'first' | 'last';
30
+ totalColumns: number;
31
+ }): StickyGroupSplit;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-utils.d.ts","sourceRoot":"","sources":["../../../../src/table/column-groups/split-utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,mGAAmG;AACnG,wBAAgB,iBAAiB,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CASxG;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAC5B,GAAG,EACH,WAAW,EACX,IAAI,EACJ,YAAY,GACb,EAAE;IACD,GAAG,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,gBAAgB,CAuBnB"}
@@ -0,0 +1,43 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ /** Returns all column IDs that are descendants of the given group (including nested subgroups). */
4
+ export function getGroupColumnIds(columnGroupsLayout, groupId) {
5
+ const columnsRow = columnGroupsLayout.rows[columnGroupsLayout.rows.length - 1];
6
+ const childIds = [];
7
+ for (const col of columnsRow.columns) {
8
+ if (!col.isGroup && col.parentGroupIds.includes(groupId)) {
9
+ childIds.push(col.id);
10
+ }
11
+ }
12
+ return childIds;
13
+ }
14
+ /**
15
+ * Computes how a group header cell is split by a sticky boundary.
16
+ * Call once for sticky-first and once for sticky-last.
17
+ *
18
+ * @param stickyCount - number of sticky columns from that side (first or last)
19
+ * @param side - which boundary to check
20
+ */
21
+ export function getGroupSplit({ col, stickyCount, side, totalColumns, }) {
22
+ if (!col.isGroup || stickyCount === 0) {
23
+ return { stickyColspan: 0, staticColspan: 0 };
24
+ }
25
+ const groupStart = col.colIndex;
26
+ const groupEnd = col.colIndex + col.colSpan - 1;
27
+ if (side === 'first') {
28
+ const lastStickyFirst = stickyCount - 1;
29
+ if (groupStart <= lastStickyFirst && groupEnd > lastStickyFirst) {
30
+ const stickyColspan = lastStickyFirst - groupStart + 1;
31
+ return { stickyColspan, staticColspan: col.colSpan - stickyColspan };
32
+ }
33
+ }
34
+ else {
35
+ const firstStickyLast = totalColumns - stickyCount;
36
+ if (groupStart < firstStickyLast && groupEnd >= firstStickyLast) {
37
+ const staticColspan = firstStickyLast - groupStart;
38
+ return { stickyColspan: col.colSpan - staticColspan, staticColspan };
39
+ }
40
+ }
41
+ return { stickyColspan: 0, staticColspan: 0 };
42
+ }
43
+ //# sourceMappingURL=split-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-utils.js","sourceRoot":"","sources":["../../../../src/table/column-groups/split-utils.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAetC,mGAAmG;AACnG,MAAM,UAAU,iBAAiB,CAAC,kBAA2C,EAAE,OAAe;IAC5F,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/E,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,GAAG,EACH,WAAW,EACX,IAAI,EACJ,YAAY,GAMb;IACC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;IAChD,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC;IAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC;IAEhD,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,eAAe,GAAG,WAAW,GAAG,CAAC,CAAC;QACxC,IAAI,UAAU,IAAI,eAAe,IAAI,QAAQ,GAAG,eAAe,EAAE,CAAC;YAChE,MAAM,aAAa,GAAG,eAAe,GAAG,UAAU,GAAG,CAAC,CAAC;YACvD,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,CAAC,OAAO,GAAG,aAAa,EAAE,CAAC;QACvE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,eAAe,GAAG,YAAY,GAAG,WAAW,CAAC;QACnD,IAAI,UAAU,GAAG,eAAe,IAAI,QAAQ,IAAI,eAAe,EAAE,CAAC;YAChE,MAAM,aAAa,GAAG,eAAe,GAAG,UAAU,CAAC;YACnD,OAAO,EAAE,aAAa,EAAE,GAAG,CAAC,OAAO,GAAG,aAAa,EAAE,aAAa,EAAE,CAAC;QACvE,CAAC;IACH,CAAC;IAED,OAAO,EAAE,aAAa,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;AAChD,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { ColumnGroupsLayout, HeaderRowColumn } from './utils';\n\n/**\n * Describes how a group header is split by a single sticky column boundary.\n * `stickyColspan` is the number of columns on the sticky side.\n * `staticColspan` is the number of columns on the scrollable side.\n * When both are 0, the group is not affected by this boundary.\n */\nexport interface StickyGroupSplit {\n stickyColspan: number;\n staticColspan: number;\n}\n\n/** Returns all column IDs that are descendants of the given group (including nested subgroups). */\nexport function getGroupColumnIds(columnGroupsLayout: ColumnGroupsLayout<any>, groupId: string): string[] {\n const columnsRow = columnGroupsLayout.rows[columnGroupsLayout.rows.length - 1];\n const childIds: string[] = [];\n for (const col of columnsRow.columns) {\n if (!col.isGroup && col.parentGroupIds.includes(groupId)) {\n childIds.push(col.id);\n }\n }\n return childIds;\n}\n\n/**\n * Computes how a group header cell is split by a sticky boundary.\n * Call once for sticky-first and once for sticky-last.\n *\n * @param stickyCount - number of sticky columns from that side (first or last)\n * @param side - which boundary to check\n */\nexport function getGroupSplit({\n col,\n stickyCount,\n side,\n totalColumns,\n}: {\n col: HeaderRowColumn<any>;\n stickyCount: number;\n side: 'first' | 'last';\n totalColumns: number;\n}): StickyGroupSplit {\n if (!col.isGroup || stickyCount === 0) {\n return { stickyColspan: 0, staticColspan: 0 };\n }\n\n const groupStart = col.colIndex;\n const groupEnd = col.colIndex + col.colSpan - 1;\n\n if (side === 'first') {\n const lastStickyFirst = stickyCount - 1;\n if (groupStart <= lastStickyFirst && groupEnd > lastStickyFirst) {\n const stickyColspan = lastStickyFirst - groupStart + 1;\n return { stickyColspan, staticColspan: col.colSpan - stickyColspan };\n }\n } else {\n const firstStickyLast = totalColumns - stickyCount;\n if (groupStart < firstStickyLast && groupEnd >= firstStickyLast) {\n const staticColspan = firstStickyLast - groupStart;\n return { stickyColspan: col.colSpan - staticColspan, staticColspan };\n }\n }\n\n return { stickyColspan: 0, staticColspan: 0 };\n}\n"]}
@@ -0,0 +1,7 @@
1
+ import { TableProps } from '../interfaces';
2
+ export declare function useColumnGroups<T>(columnDefinitions: ReadonlyArray<TableProps.ColumnDefinition<T>>, visibleColumns: string[], groupDefinitions?: ReadonlyArray<TableProps.GroupDefinition>, columnDisplay?: ReadonlyArray<TableProps.ColumnDisplayProperties>): {
3
+ groupColumnMap: Map<string, string[]> | undefined;
4
+ rows: import("./utils").HeaderRow<T>[];
5
+ maxDepth: number;
6
+ columnToParentIds: Map<string, string[]>;
7
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-column-groups.d.ts","sourceRoot":"","sources":["../../../../src/table/column-groups/use-column-groups.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,wBAAgB,eAAe,CAAC,CAAC,EAC/B,iBAAiB,EAAE,aAAa,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAChE,cAAc,EAAE,MAAM,EAAE,EACxB,gBAAgB,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,EAC5D,aAAa,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,uBAAuB,CAAC;;;;;EAqBlE"}
@@ -0,0 +1,23 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { calculateHierarchyTree } from './utils';
4
+ export function useColumnGroups(columnDefinitions, visibleColumns, groupDefinitions, columnDisplay) {
5
+ const layout = calculateHierarchyTree(columnDefinitions, visibleColumns, groupDefinitions !== null && groupDefinitions !== void 0 ? groupDefinitions : [], columnDisplay);
6
+ let groupColumnMap;
7
+ if (layout.rows.length > 1) {
8
+ groupColumnMap = new Map();
9
+ const columnsRow = layout.rows[layout.rows.length - 1];
10
+ for (const row of layout.rows) {
11
+ for (const col of row.columns) {
12
+ if (col.isGroup) {
13
+ const childColumnIds = columnsRow.columns
14
+ .filter(l => !l.isGroup && l.parentGroupIds.includes(col.id))
15
+ .map(l => l.id);
16
+ groupColumnMap.set(col.id, childColumnIds);
17
+ }
18
+ }
19
+ }
20
+ }
21
+ return { ...layout, groupColumnMap };
22
+ }
23
+ //# sourceMappingURL=use-column-groups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-column-groups.js","sourceRoot":"","sources":["../../../../src/table/column-groups/use-column-groups.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAGtC,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAEjD,MAAM,UAAU,eAAe,CAC7B,iBAAgE,EAChE,cAAwB,EACxB,gBAA4D,EAC5D,aAAiE;IAEjE,MAAM,MAAM,GAAG,sBAAsB,CAAC,iBAAiB,EAAE,cAAc,EAAE,gBAAgB,aAAhB,gBAAgB,cAAhB,gBAAgB,GAAI,EAAE,EAAE,aAAa,CAAC,CAAC;IAEhH,IAAI,cAAiD,CAAC;IACtD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,cAAc,GAAG,IAAI,GAAG,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAC9B,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC9B,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBAChB,MAAM,cAAc,GAAG,UAAU,CAAC,OAAO;yBACtC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;yBAC5D,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClB,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,GAAG,MAAM,EAAE,cAAc,EAAE,CAAC;AACvC,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { TableProps } from '../interfaces';\nimport { calculateHierarchyTree } from './utils';\n\nexport function useColumnGroups<T>(\n columnDefinitions: ReadonlyArray<TableProps.ColumnDefinition<T>>,\n visibleColumns: string[],\n groupDefinitions?: ReadonlyArray<TableProps.GroupDefinition>,\n columnDisplay?: ReadonlyArray<TableProps.ColumnDisplayProperties>\n) {\n const layout = calculateHierarchyTree(columnDefinitions, visibleColumns, groupDefinitions ?? [], columnDisplay);\n\n let groupColumnMap: Map<string, string[]> | undefined;\n if (layout.rows.length > 1) {\n groupColumnMap = new Map();\n const columnsRow = layout.rows[layout.rows.length - 1];\n for (const row of layout.rows) {\n for (const col of row.columns) {\n if (col.isGroup) {\n const childColumnIds = columnsRow.columns\n .filter(l => !l.isGroup && l.parentGroupIds.includes(col.id))\n .map(l => l.id);\n groupColumnMap.set(col.id, childColumnIds);\n }\n }\n }\n }\n\n return { ...layout, groupColumnMap };\n}\n"]}
@@ -0,0 +1,54 @@
1
+ import { TableProps } from '../interfaces';
2
+ export interface HeaderRowColumn<T> {
3
+ id: string;
4
+ header?: React.ReactNode;
5
+ colSpan: number;
6
+ rowSpan: number;
7
+ isGroup: boolean;
8
+ columnDefinition?: TableProps.ColumnDefinition<T>;
9
+ groupDefinition?: TableProps.GroupDefinition;
10
+ parentGroupIds: string[];
11
+ colIndex: number;
12
+ }
13
+ export interface HeaderRow<T> {
14
+ columns: HeaderRowColumn<T>[];
15
+ }
16
+ export interface ColumnGroupsLayout<T> {
17
+ rows: HeaderRow<T>[];
18
+ maxDepth: number;
19
+ columnToParentIds: Map<string, string[]>;
20
+ }
21
+ export interface TableHeaderNodeProps<T> {
22
+ columnDefinition?: TableProps.ColumnDefinition<T>;
23
+ groupDefinition?: TableProps.GroupDefinition;
24
+ isRoot?: boolean;
25
+ colSpan?: number;
26
+ rowSpan?: number;
27
+ rowIndex?: number;
28
+ colIndex?: number;
29
+ }
30
+ /**
31
+ * A node in the table header tree.
32
+ * - Column nodes map to column definitions.
33
+ * - Internal nodes map to group definitions.
34
+ * - The root is a virtual container (never rendered).
35
+ */
36
+ export declare class TableHeaderNode<T> {
37
+ readonly id: string;
38
+ readonly isRoot: boolean;
39
+ readonly columnDefinition?: TableProps.ColumnDefinition<T>;
40
+ readonly groupDefinition?: TableProps.GroupDefinition;
41
+ colSpan: number;
42
+ rowSpan: number;
43
+ rowIndex: number;
44
+ colIndex: number;
45
+ subTreeHeight: number;
46
+ children: TableHeaderNode<T>[];
47
+ parent?: TableHeaderNode<T>;
48
+ constructor(id: string, props?: TableHeaderNodeProps<T>);
49
+ get isGroup(): boolean;
50
+ get isColumn(): boolean;
51
+ addChild(child: TableHeaderNode<T>): void;
52
+ }
53
+ export declare function calculateHierarchyTree<T>(columnDefinitions: ReadonlyArray<TableProps.ColumnDefinition<T>>, visibleColumnIds: readonly string[], groupDefinitions: ReadonlyArray<TableProps.GroupDefinition>, columnDisplay?: ReadonlyArray<TableProps.ColumnDisplayProperties>): ColumnGroupsLayout<T>;
54
+ export declare function getColumnGroupsDepth(columnDisplay?: ReadonlyArray<TableProps.ColumnDisplayProperties>): number;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/table/column-groups/utils.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAClD,eAAe,CAAC,EAAE,UAAU,CAAC,eAAe,CAAC;IAC7C,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,gBAAgB,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAClD,eAAe,CAAC,EAAE,UAAU,CAAC,eAAe,CAAC;IAC7C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,qBAAa,eAAe,CAAC,CAAC;IAC5B,SAAgB,EAAE,EAAE,MAAM,CAAC;IAC3B,SAAgB,MAAM,EAAE,OAAO,CAAC;IAChC,SAAgB,gBAAgB,CAAC,EAAE,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAClE,SAAgB,eAAe,CAAC,EAAE,UAAU,CAAC,eAAe,CAAC;IAEtD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAK;IAE1B,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAM;IACpC,MAAM,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;gBAEvB,EAAE,EAAE,MAAM,EAAE,KAAK,GAAE,oBAAoB,CAAC,CAAC,CAAM;IAW3D,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;CAI1C;AAkGD,wBAAgB,sBAAsB,CAAC,CAAC,EACtC,iBAAiB,EAAE,aAAa,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAChE,gBAAgB,EAAE,SAAS,MAAM,EAAE,EACnC,gBAAgB,EAAE,aAAa,CAAC,UAAU,CAAC,eAAe,CAAC,EAC3D,aAAa,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,uBAAuB,CAAC,GAChE,kBAAkB,CAAC,CAAC,CAAC,CAyCvB;AAuDD,wBAAgB,oBAAoB,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,uBAAuB,CAAC,GAAG,MAAM,CAW9G"}
@@ -0,0 +1,204 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { warnOnce } from '@cloudscape-design/component-toolkit/internal';
4
+ import { getVisibleColumnDefinitions } from '../utils';
5
+ /**
6
+ * A node in the table header tree.
7
+ * - Column nodes map to column definitions.
8
+ * - Internal nodes map to group definitions.
9
+ * - The root is a virtual container (never rendered).
10
+ */
11
+ export class TableHeaderNode {
12
+ constructor(id, props = {}) {
13
+ var _a, _b, _c, _d, _e;
14
+ this.subTreeHeight = 1;
15
+ this.children = [];
16
+ this.id = id;
17
+ this.isRoot = (_a = props.isRoot) !== null && _a !== void 0 ? _a : false;
18
+ this.columnDefinition = props.columnDefinition;
19
+ this.groupDefinition = props.groupDefinition;
20
+ this.colSpan = (_b = props.colSpan) !== null && _b !== void 0 ? _b : 1;
21
+ this.rowSpan = (_c = props.rowSpan) !== null && _c !== void 0 ? _c : 1;
22
+ this.rowIndex = (_d = props.rowIndex) !== null && _d !== void 0 ? _d : -1;
23
+ this.colIndex = (_e = props.colIndex) !== null && _e !== void 0 ? _e : -1;
24
+ }
25
+ get isGroup() {
26
+ return !!this.groupDefinition;
27
+ }
28
+ get isColumn() {
29
+ return !this.isRoot && this.children.length === 0;
30
+ }
31
+ addChild(child) {
32
+ this.children.push(child);
33
+ child.parent = this;
34
+ }
35
+ }
36
+ /**
37
+ * Builds the tree from the nested columnDisplay structure.
38
+ * Groups are only attached if they contain at least one visible descendant.
39
+ */
40
+ function buildTreeFromColumnDisplay(displayItems, nodeMap, parent) {
41
+ for (const item of displayItems) {
42
+ if (item.type === 'group') {
43
+ const groupNode = nodeMap.get(item.id);
44
+ if (!groupNode) {
45
+ warnOnce('[Table]', `Group "${item.id}" referenced in columnDisplay not found in groupDefinitions. Skipping.`);
46
+ continue;
47
+ }
48
+ buildTreeFromColumnDisplay(item.children, nodeMap, groupNode);
49
+ // Only attach group if it has visible descendants. The recursive call above
50
+ // only adds children that are either visible columns or nested groups with
51
+ // their own visible descendants, so this check handles all nesting levels.
52
+ if (groupNode.children.length > 0) {
53
+ parent.addChild(groupNode);
54
+ }
55
+ }
56
+ else {
57
+ if (!item.visible) {
58
+ continue;
59
+ }
60
+ const colNode = nodeMap.get(item.id);
61
+ if (colNode) {
62
+ parent.addChild(colNode);
63
+ }
64
+ }
65
+ }
66
+ }
67
+ /**
68
+ * Fallback when no columnDisplay is provided: all visible columns attach directly to root.
69
+ */
70
+ function buildTreeFromVisibleColumns(visibleColumns, nodeMap, root) {
71
+ for (const col of visibleColumns) {
72
+ // Columns without IDs cannot participate in grouping, they have no key
73
+ // to match against columnDisplay entries or groupDefinitions.
74
+ if (!col.id) {
75
+ continue;
76
+ }
77
+ const node = nodeMap.get(col.id);
78
+ if (node) {
79
+ root.addChild(node);
80
+ }
81
+ }
82
+ }
83
+ function computeSubTreeHeights(node) {
84
+ if (node.isColumn || node.children.length === 0) {
85
+ node.subTreeHeight = 1;
86
+ return 1;
87
+ }
88
+ const maxChildHeight = Math.max(...node.children.map(child => computeSubTreeHeights(child)));
89
+ node.subTreeHeight = maxChildHeight + 1;
90
+ return node.subTreeHeight;
91
+ }
92
+ function computeRowSpansAndIndices(node, treeHeight, ancestorRows = 0) {
93
+ const maxChildHeight = Math.max(...node.children.map(c => c.subTreeHeight), 0);
94
+ node.rowSpan = treeHeight - ancestorRows - maxChildHeight;
95
+ if (node.parent) {
96
+ node.rowIndex = node.parent.rowIndex + node.parent.rowSpan;
97
+ }
98
+ for (const child of node.children) {
99
+ computeRowSpansAndIndices(child, treeHeight, ancestorRows + node.rowSpan);
100
+ }
101
+ }
102
+ function computeColSpansAndIndices(node, startCol = 0) {
103
+ node.colIndex = startCol;
104
+ if (node.isColumn) {
105
+ node.colSpan = 1;
106
+ return startCol + 1;
107
+ }
108
+ let nextCol = startCol;
109
+ for (const child of node.children) {
110
+ nextCol = computeColSpansAndIndices(child, nextCol);
111
+ }
112
+ node.colSpan = nextCol - startCol;
113
+ return nextCol;
114
+ }
115
+ export function calculateHierarchyTree(columnDefinitions, visibleColumnIds, groupDefinitions, columnDisplay) {
116
+ const visibleColumns = getVisibleColumnDefinitions({
117
+ columnDisplay,
118
+ visibleColumns: visibleColumnIds,
119
+ columnDefinitions,
120
+ });
121
+ const nodeMap = new Map();
122
+ for (const col of visibleColumns) {
123
+ if (col.id) {
124
+ nodeMap.set(col.id, new TableHeaderNode(col.id, { columnDefinition: col }));
125
+ }
126
+ }
127
+ for (const group of groupDefinitions) {
128
+ nodeMap.set(group.id, new TableHeaderNode(group.id, { groupDefinition: group }));
129
+ }
130
+ const root = new TableHeaderNode('*', { isRoot: true });
131
+ if (columnDisplay && columnDisplay.length > 0) {
132
+ buildTreeFromColumnDisplay(columnDisplay, nodeMap, root);
133
+ }
134
+ else {
135
+ buildTreeFromVisibleColumns(visibleColumns, nodeMap, root);
136
+ }
137
+ computeSubTreeHeights(root);
138
+ const treeHeight = root.subTreeHeight - 1;
139
+ root.rowIndex = -1;
140
+ root.rowSpan = 1;
141
+ root.colSpan = visibleColumns.length;
142
+ for (const child of root.children) {
143
+ computeRowSpansAndIndices(child, treeHeight);
144
+ }
145
+ computeColSpansAndIndices(root);
146
+ return buildOutput(root, treeHeight);
147
+ }
148
+ function getParentChain(node) {
149
+ const chain = [];
150
+ let current = node.parent;
151
+ while (current && !current.isRoot) {
152
+ chain.unshift(current.id);
153
+ current = current.parent;
154
+ }
155
+ return chain;
156
+ }
157
+ function buildOutput(root, maxDepth) {
158
+ var _a, _b, _c;
159
+ const rowsMap = new Map();
160
+ const columnToParentIds = new Map();
161
+ const queue = [...root.children];
162
+ while (queue.length > 0) {
163
+ const node = queue.shift();
164
+ const parentChain = getParentChain(node);
165
+ const entry = {
166
+ id: node.id,
167
+ header: (_b = (_a = node.groupDefinition) === null || _a === void 0 ? void 0 : _a.header) !== null && _b !== void 0 ? _b : (_c = node.columnDefinition) === null || _c === void 0 ? void 0 : _c.header,
168
+ colSpan: node.colSpan,
169
+ rowSpan: node.rowSpan,
170
+ isGroup: node.isGroup,
171
+ columnDefinition: node.columnDefinition,
172
+ groupDefinition: node.groupDefinition,
173
+ parentGroupIds: parentChain,
174
+ colIndex: node.colIndex,
175
+ };
176
+ if (!rowsMap.has(node.rowIndex)) {
177
+ rowsMap.set(node.rowIndex, []);
178
+ }
179
+ rowsMap.get(node.rowIndex).push(entry);
180
+ if (node.isColumn && node.columnDefinition && parentChain.length > 0) {
181
+ columnToParentIds.set(node.id, parentChain);
182
+ }
183
+ queue.push(...node.children);
184
+ }
185
+ // Sort row indices to ensure rows are ordered top-to-bottom,
186
+ // then sort columns within each row by their horizontal position.
187
+ const rows = Array.from(rowsMap.keys())
188
+ .sort((a, b) => a - b)
189
+ .map(key => ({ columns: rowsMap.get(key).sort((a, b) => a.colIndex - b.colIndex) }));
190
+ return { rows, maxDepth, columnToParentIds };
191
+ }
192
+ export function getColumnGroupsDepth(columnDisplay) {
193
+ if (!columnDisplay) {
194
+ return 0;
195
+ }
196
+ let maxDepth = 0;
197
+ for (const item of columnDisplay) {
198
+ if (item.type === 'group') {
199
+ maxDepth = Math.max(maxDepth, 1 + getColumnGroupsDepth(item.children));
200
+ }
201
+ }
202
+ return maxDepth;
203
+ }
204
+ //# sourceMappingURL=utils.js.map