@veeqo/ui 14.10.0-beta-1 → 14.10.0-beta-2

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 (90) hide show
  1. package/dist/components/DataTable/DataTable.cjs +3 -3
  2. package/dist/components/DataTable/DataTable.cjs.map +1 -1
  3. package/dist/components/DataTable/DataTable.js +3 -3
  4. package/dist/components/DataTable/DataTable.js.map +1 -1
  5. package/dist/components/DataTable/components/DataTable.module.scss.cjs +2 -2
  6. package/dist/components/DataTable/components/DataTable.module.scss.cjs.map +1 -1
  7. package/dist/components/DataTable/components/DataTable.module.scss.js +2 -2
  8. package/dist/components/DataTable/components/DataTable.module.scss.js.map +1 -1
  9. package/dist/components/DataTable/components/EmptyBodyContent.cjs +4 -1
  10. package/dist/components/DataTable/components/EmptyBodyContent.cjs.map +1 -1
  11. package/dist/components/DataTable/components/EmptyBodyContent.js +4 -1
  12. package/dist/components/DataTable/components/EmptyBodyContent.js.map +1 -1
  13. package/dist/components/DataTable/components/Header.cjs +1 -1
  14. package/dist/components/DataTable/components/Header.cjs.map +1 -1
  15. package/dist/components/DataTable/components/Header.js +1 -1
  16. package/dist/components/DataTable/components/Header.js.map +1 -1
  17. package/dist/components/DataTable/components/StickyHead.cjs +3 -11
  18. package/dist/components/DataTable/components/StickyHead.cjs.map +1 -1
  19. package/dist/components/DataTable/components/StickyHead.d.ts +2 -1
  20. package/dist/components/DataTable/components/StickyHead.js +3 -11
  21. package/dist/components/DataTable/components/StickyHead.js.map +1 -1
  22. package/dist/components/DataTable/components/TableGrid.cjs +38 -2
  23. package/dist/components/DataTable/components/TableGrid.cjs.map +1 -1
  24. package/dist/components/DataTable/components/TableGrid.d.ts +5 -6
  25. package/dist/components/DataTable/components/TableGrid.js +39 -3
  26. package/dist/components/DataTable/components/TableGrid.js.map +1 -1
  27. package/dist/components/DataTable/utils/generateTableCss.cjs +44 -80
  28. package/dist/components/DataTable/utils/generateTableCss.cjs.map +1 -1
  29. package/dist/components/DataTable/utils/generateTableCss.d.ts +7 -1
  30. package/dist/components/DataTable/utils/generateTableCss.js +44 -80
  31. package/dist/components/DataTable/utils/generateTableCss.js.map +1 -1
  32. package/dist/components/LegacyDataTable/LegacyDataTable.module.scss.cjs +2 -2
  33. package/dist/components/LegacyDataTable/LegacyDataTable.module.scss.cjs.map +1 -1
  34. package/dist/components/LegacyDataTable/LegacyDataTable.module.scss.js +2 -2
  35. package/dist/components/LegacyDataTable/LegacyDataTable.module.scss.js.map +1 -1
  36. package/dist/components/LegacyDataTable/SkeletonContent/SkeletonContent.module.scss.cjs +2 -2
  37. package/dist/components/LegacyDataTable/SkeletonContent/SkeletonContent.module.scss.cjs.map +1 -1
  38. package/dist/components/LegacyDataTable/SkeletonContent/SkeletonContent.module.scss.js +2 -2
  39. package/dist/components/LegacyDataTable/SkeletonContent/SkeletonContent.module.scss.js.map +1 -1
  40. package/dist/components/LegacyDataTable/cells/cells.module.scss.cjs +2 -2
  41. package/dist/components/LegacyDataTable/cells/cells.module.scss.cjs.map +1 -1
  42. package/dist/components/LegacyDataTable/cells/cells.module.scss.js +2 -2
  43. package/dist/components/LegacyDataTable/cells/cells.module.scss.js.map +1 -1
  44. package/dist/components/LegacyDataTable/styled.cjs +31 -36
  45. package/dist/components/LegacyDataTable/styled.cjs.map +1 -1
  46. package/dist/components/LegacyDataTable/styled.js +31 -36
  47. package/dist/components/LegacyDataTable/styled.js.map +1 -1
  48. package/dist/components/Search/Search.cjs +16 -10
  49. package/dist/components/Search/Search.cjs.map +1 -1
  50. package/dist/components/Search/Search.d.ts +1 -1
  51. package/dist/components/Search/Search.js +16 -10
  52. package/dist/components/Search/Search.js.map +1 -1
  53. package/dist/components/Search/Search.module.scss.cjs +9 -0
  54. package/dist/components/Search/Search.module.scss.cjs.map +1 -0
  55. package/dist/components/Search/Search.module.scss.js +7 -0
  56. package/dist/components/Search/Search.module.scss.js.map +1 -0
  57. package/dist/components/Stepper/Stepper.cjs +15 -8
  58. package/dist/components/Stepper/Stepper.cjs.map +1 -1
  59. package/dist/components/Stepper/Stepper.d.ts +1 -8
  60. package/dist/components/Stepper/Stepper.js +15 -8
  61. package/dist/components/Stepper/Stepper.js.map +1 -1
  62. package/dist/components/Stepper/Stepper.module.scss.cjs +9 -0
  63. package/dist/components/Stepper/Stepper.module.scss.cjs.map +1 -0
  64. package/dist/components/Stepper/Stepper.module.scss.js +7 -0
  65. package/dist/components/Stepper/Stepper.module.scss.js.map +1 -0
  66. package/dist/components/Stepper/types.d.ts +8 -0
  67. package/dist/components/Toggle/Toggle.cjs +11 -5
  68. package/dist/components/Toggle/Toggle.cjs.map +1 -1
  69. package/dist/components/Toggle/Toggle.js +11 -5
  70. package/dist/components/Toggle/Toggle.js.map +1 -1
  71. package/dist/components/Toggle/Toggle.module.scss.cjs +9 -0
  72. package/dist/components/Toggle/Toggle.module.scss.cjs.map +1 -0
  73. package/dist/components/Toggle/Toggle.module.scss.js +7 -0
  74. package/dist/components/Toggle/Toggle.module.scss.js.map +1 -0
  75. package/package.json +1 -1
  76. package/dist/components/Search/styled.cjs +0 -45
  77. package/dist/components/Search/styled.cjs.map +0 -1
  78. package/dist/components/Search/styled.d.ts +0 -308
  79. package/dist/components/Search/styled.js +0 -37
  80. package/dist/components/Search/styled.js.map +0 -1
  81. package/dist/components/Stepper/styled.cjs +0 -33
  82. package/dist/components/Stepper/styled.cjs.map +0 -1
  83. package/dist/components/Stepper/styled.d.ts +0 -12
  84. package/dist/components/Stepper/styled.js +0 -25
  85. package/dist/components/Stepper/styled.js.map +0 -1
  86. package/dist/components/Toggle/styled.cjs +0 -20
  87. package/dist/components/Toggle/styled.cjs.map +0 -1
  88. package/dist/components/Toggle/styled.d.ts +0 -12
  89. package/dist/components/Toggle/styled.js +0 -11
  90. package/dist/components/Toggle/styled.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"StickyHead.cjs","sources":["../../../../src/components/DataTable/components/StickyHead.tsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { CSSProperties, ReactNode, RefObject, useEffect, useRef, useState } from 'react';\nimport throttle from 'lodash.throttle';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { theme } from '../../../theme';\n\nimport { headerCellHeight } from '../constants';\nimport { TableGrid } from './TableGrid';\nimport { Shadows } from '../../../theme/modules/shadows';\n\nexport interface StickyHeadProps {\n tableCss: string;\n children?: ReactNode;\n intersectionTargetRef: RefObject<HTMLElement>;\n containerRef: RefObject<HTMLElement>;\n cellWidths: number[];\n stickyHeaderTop?: number;\n}\n\nexport function StickyHead({\n children,\n intersectionTargetRef,\n containerRef,\n cellWidths,\n tableCss,\n stickyHeaderTop = 0,\n}: StickyHeadProps) {\n const stickyContainerRef = useRef<HTMLDivElement>(null);\n const [isVisible, setIsVisible] = useState(false);\n const [containerRect, setContainerRect] = useState({\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n });\n\n const lastLeftValue = useRef<null | number>(null);\n const THROTTE_TIME_MS = 30;\n\n const updateContainerDimensions = () => {\n const targetRect = containerRef.current?.getBoundingClientRect();\n const newRect = {\n left: targetRect?.left || 0,\n width: targetRect?.width || 0,\n top: 0,\n height: 48,\n };\n setContainerRect(newRect);\n };\n\n const updateContainerScrollPosition = () => {\n if (!containerRef.current) return;\n const xScrollOffset = containerRef.current.scrollLeft;\n stickyContainerRef.current?.scrollTo(xScrollOffset, 0);\n };\n\n // Configure intersection observer to toggle sticky header on/off\n\n useEffect(() => {\n if (!intersectionTargetRef.current) return;\n const options = {\n rootMargin: `-${stickyHeaderTop}px 100% 0px 100%`,\n threshold: 1.0,\n };\n const intersectionCallback: IntersectionObserverCallback = (entries) => {\n entries.forEach((entry) => {\n setIsVisible(!entry.isIntersecting);\n });\n };\n const intersectionObserver = new IntersectionObserver(intersectionCallback, options);\n intersectionObserver.observe(intersectionTargetRef.current);\n return () => intersectionObserver.disconnect(); // eslint-disable-line consistent-return\n }, [intersectionTargetRef.current]);\n\n // Calculate sticky header position and size to match table container\n\n useEffect(() => {\n if (!isVisible) return;\n if (!containerRef.current) return;\n updateContainerDimensions();\n }, [containerRef.current, isVisible]);\n\n // Update dimensions when container element is resized\n\n useEffect(() => {\n if (!isVisible) return;\n if (!containerRef.current) return;\n const resizeObserverCallback = throttle(updateContainerDimensions, THROTTE_TIME_MS); // Throttle events\n const resizeObserver = new ResizeObserver(resizeObserverCallback);\n resizeObserver.observe(containerRef.current);\n return () => resizeObserver.disconnect(); // eslint-disable-line consistent-return\n }, [containerRef.current, isVisible]);\n\n // Update dimensions when document scrolls\n // will only call updateContainerDimensions on horizontal scroll\n useEffect(() => {\n if (!isVisible) return;\n if (!containerRef.current) return;\n const scrollCallback = throttle(() => {\n const { left } = containerRef.current?.getBoundingClientRect() || {};\n if (left && lastLeftValue.current !== left) {\n updateContainerDimensions();\n lastLeftValue.current = left;\n }\n }, THROTTE_TIME_MS); // Throttle events\n document.addEventListener('scroll', scrollCallback);\n return () => document.removeEventListener('scroll', scrollCallback); // eslint-disable-line consistent-return\n }, [containerRef.current, isVisible]);\n\n // Sync container scrolling\n\n useEffect(() => {\n updateContainerScrollPosition();\n }, [isVisible]);\n\n useEffect(() => {\n containerRef.current?.addEventListener('scroll', updateContainerScrollPosition);\n return () => {\n containerRef.current?.removeEventListener('scroll', updateContainerScrollPosition);\n };\n }, [containerRef.current]);\n\n // Render sticky header\n\n if (!isVisible) return null;\n\n const containerStyle: CSSProperties = {\n ...containerRect,\n height: headerCellHeight,\n position: 'fixed',\n zIndex: 5,\n overflowX: 'hidden',\n overflowY: 'hidden',\n borderBottom: `1px solid ${theme.colors.neutral.grey.base}`,\n borderTop: `1px solid ${theme.colors.neutral.grey.base}`,\n boxShadow: Shadows.base,\n top: `${stickyHeaderTop}px` || '0px',\n };\n\n // Generate styles to sync sticky columns with \"real\" columns\n const columnsCss = cellWidths\n .map(\n (width, index) => `\n & th:nth-child(${index + 1}) {\n width: ${width}px;\n }\n `,\n )\n .join('');\n // Append to generated table styles\n const allCss = tableCss + columnsCss;\n\n return (\n <div style={containerStyle} ref={stickyContainerRef}>\n <TableGrid css={allCss}>\n <thead>{children}</thead>\n </TableGrid>\n </div>\n );\n}\n"],"names":["useRef","useState","useEffect","throttle","ResizeObserver","headerCellHeight","theme","Shadows","React","TableGrid"],"mappings":"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"}
1
+ {"version":3,"file":"StickyHead.cjs","sources":["../../../../src/components/DataTable/components/StickyHead.tsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { CSSProperties, ReactNode, RefObject, useEffect, useRef, useState } from 'react';\nimport throttle from 'lodash.throttle';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { theme } from '../../../theme';\n\nimport { headerCellHeight } from '../constants';\nimport { TableGrid } from './TableGrid';\nimport { TableCssOutput } from '../utils/generateTableCss';\nimport { Shadows } from '../../../theme/modules/shadows';\n\nexport interface StickyHeadProps {\n tableCss: TableCssOutput;\n children?: ReactNode;\n intersectionTargetRef: RefObject<HTMLElement>;\n containerRef: RefObject<HTMLElement>;\n cellWidths: number[];\n stickyHeaderTop?: number;\n}\n\nexport function StickyHead({\n children,\n intersectionTargetRef,\n containerRef,\n cellWidths,\n tableCss,\n stickyHeaderTop = 0,\n}: StickyHeadProps) {\n const stickyContainerRef = useRef<HTMLDivElement>(null);\n const [isVisible, setIsVisible] = useState(false);\n const [containerRect, setContainerRect] = useState({\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n });\n\n const lastLeftValue = useRef<null | number>(null);\n const THROTTE_TIME_MS = 30;\n\n const updateContainerDimensions = () => {\n const targetRect = containerRef.current?.getBoundingClientRect();\n const newRect = {\n left: targetRect?.left || 0,\n width: targetRect?.width || 0,\n top: 0,\n height: 48,\n };\n setContainerRect(newRect);\n };\n\n const updateContainerScrollPosition = () => {\n if (!containerRef.current) return;\n const xScrollOffset = containerRef.current.scrollLeft;\n stickyContainerRef.current?.scrollTo(xScrollOffset, 0);\n };\n\n // Configure intersection observer to toggle sticky header on/off\n\n useEffect(() => {\n if (!intersectionTargetRef.current) return;\n const options = {\n rootMargin: `-${stickyHeaderTop}px 100% 0px 100%`,\n threshold: 1.0,\n };\n const intersectionCallback: IntersectionObserverCallback = (entries) => {\n entries.forEach((entry) => {\n setIsVisible(!entry.isIntersecting);\n });\n };\n const intersectionObserver = new IntersectionObserver(intersectionCallback, options);\n intersectionObserver.observe(intersectionTargetRef.current);\n return () => intersectionObserver.disconnect(); // eslint-disable-line consistent-return\n }, [intersectionTargetRef.current]);\n\n // Calculate sticky header position and size to match table container\n\n useEffect(() => {\n if (!isVisible) return;\n if (!containerRef.current) return;\n updateContainerDimensions();\n }, [containerRef.current, isVisible]);\n\n // Update dimensions when container element is resized\n\n useEffect(() => {\n if (!isVisible) return;\n if (!containerRef.current) return;\n const resizeObserverCallback = throttle(updateContainerDimensions, THROTTE_TIME_MS); // Throttle events\n const resizeObserver = new ResizeObserver(resizeObserverCallback);\n resizeObserver.observe(containerRef.current);\n return () => resizeObserver.disconnect(); // eslint-disable-line consistent-return\n }, [containerRef.current, isVisible]);\n\n // Update dimensions when document scrolls\n // will only call updateContainerDimensions on horizontal scroll\n useEffect(() => {\n if (!isVisible) return;\n if (!containerRef.current) return;\n const scrollCallback = throttle(() => {\n const { left } = containerRef.current?.getBoundingClientRect() || {};\n if (left && lastLeftValue.current !== left) {\n updateContainerDimensions();\n lastLeftValue.current = left;\n }\n }, THROTTE_TIME_MS); // Throttle events\n document.addEventListener('scroll', scrollCallback);\n return () => document.removeEventListener('scroll', scrollCallback); // eslint-disable-line consistent-return\n }, [containerRef.current, isVisible]);\n\n // Sync container scrolling\n\n useEffect(() => {\n updateContainerScrollPosition();\n }, [isVisible]);\n\n useEffect(() => {\n containerRef.current?.addEventListener('scroll', updateContainerScrollPosition);\n return () => {\n containerRef.current?.removeEventListener('scroll', updateContainerScrollPosition);\n };\n }, [containerRef.current]);\n\n // Render sticky header\n\n if (!isVisible) return null;\n\n const containerStyle: CSSProperties = {\n ...containerRect,\n height: headerCellHeight,\n position: 'fixed',\n zIndex: 5,\n overflowX: 'hidden',\n overflowY: 'hidden',\n borderBottom: `1px solid ${theme.colors.neutral.grey.base}`,\n borderTop: `1px solid ${theme.colors.neutral.grey.base}`,\n boxShadow: Shadows.base,\n top: `${stickyHeaderTop}px` || '0px',\n };\n\n // Generate rules to sync sticky columns with \"real\" columns\n const columnRules = cellWidths.map(\n (width, index) => `th:nth-child(${index + 1}) { width: ${width}px; }`,\n );\n\n return (\n <div style={containerStyle} ref={stickyContainerRef}>\n <TableGrid tableCss={tableCss} extraRules={columnRules}>\n <thead>{children}</thead>\n </TableGrid>\n </div>\n );\n}\n"],"names":["useRef","useState","useEffect","throttle","ResizeObserver","headerCellHeight","theme","Shadows","React","TableGrid"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import React, { ReactNode, RefObject } from 'react';
2
+ import { TableCssOutput } from '../utils/generateTableCss';
2
3
  export interface StickyHeadProps {
3
- tableCss: string;
4
+ tableCss: TableCssOutput;
4
5
  children?: ReactNode;
5
6
  intersectionTargetRef: RefObject<HTMLElement>;
6
7
  containerRef: RefObject<HTMLElement>;
@@ -117,18 +117,10 @@ function StickyHead({ children, intersectionTargetRef, containerRef, cellWidths,
117
117
  boxShadow: Shadows.base,
118
118
  top: `${stickyHeaderTop}px` || '0px',
119
119
  };
120
- // Generate styles to sync sticky columns with "real" columns
121
- const columnsCss = cellWidths
122
- .map((width, index) => `
123
- & th:nth-child(${index + 1}) {
124
- width: ${width}px;
125
- }
126
- `)
127
- .join('');
128
- // Append to generated table styles
129
- const allCss = tableCss + columnsCss;
120
+ // Generate rules to sync sticky columns with "real" columns
121
+ const columnRules = cellWidths.map((width, index) => `th:nth-child(${index + 1}) { width: ${width}px; }`);
130
122
  return (React__default.createElement("div", { style: containerStyle, ref: stickyContainerRef },
131
- React__default.createElement(TableGrid, { css: allCss },
123
+ React__default.createElement(TableGrid, { tableCss: tableCss, extraRules: columnRules },
132
124
  React__default.createElement("thead", null, children))));
133
125
  }
134
126
 
@@ -1 +1 @@
1
- {"version":3,"file":"StickyHead.js","sources":["../../../../src/components/DataTable/components/StickyHead.tsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { CSSProperties, ReactNode, RefObject, useEffect, useRef, useState } from 'react';\nimport throttle from 'lodash.throttle';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { theme } from '../../../theme';\n\nimport { headerCellHeight } from '../constants';\nimport { TableGrid } from './TableGrid';\nimport { Shadows } from '../../../theme/modules/shadows';\n\nexport interface StickyHeadProps {\n tableCss: string;\n children?: ReactNode;\n intersectionTargetRef: RefObject<HTMLElement>;\n containerRef: RefObject<HTMLElement>;\n cellWidths: number[];\n stickyHeaderTop?: number;\n}\n\nexport function StickyHead({\n children,\n intersectionTargetRef,\n containerRef,\n cellWidths,\n tableCss,\n stickyHeaderTop = 0,\n}: StickyHeadProps) {\n const stickyContainerRef = useRef<HTMLDivElement>(null);\n const [isVisible, setIsVisible] = useState(false);\n const [containerRect, setContainerRect] = useState({\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n });\n\n const lastLeftValue = useRef<null | number>(null);\n const THROTTE_TIME_MS = 30;\n\n const updateContainerDimensions = () => {\n const targetRect = containerRef.current?.getBoundingClientRect();\n const newRect = {\n left: targetRect?.left || 0,\n width: targetRect?.width || 0,\n top: 0,\n height: 48,\n };\n setContainerRect(newRect);\n };\n\n const updateContainerScrollPosition = () => {\n if (!containerRef.current) return;\n const xScrollOffset = containerRef.current.scrollLeft;\n stickyContainerRef.current?.scrollTo(xScrollOffset, 0);\n };\n\n // Configure intersection observer to toggle sticky header on/off\n\n useEffect(() => {\n if (!intersectionTargetRef.current) return;\n const options = {\n rootMargin: `-${stickyHeaderTop}px 100% 0px 100%`,\n threshold: 1.0,\n };\n const intersectionCallback: IntersectionObserverCallback = (entries) => {\n entries.forEach((entry) => {\n setIsVisible(!entry.isIntersecting);\n });\n };\n const intersectionObserver = new IntersectionObserver(intersectionCallback, options);\n intersectionObserver.observe(intersectionTargetRef.current);\n return () => intersectionObserver.disconnect(); // eslint-disable-line consistent-return\n }, [intersectionTargetRef.current]);\n\n // Calculate sticky header position and size to match table container\n\n useEffect(() => {\n if (!isVisible) return;\n if (!containerRef.current) return;\n updateContainerDimensions();\n }, [containerRef.current, isVisible]);\n\n // Update dimensions when container element is resized\n\n useEffect(() => {\n if (!isVisible) return;\n if (!containerRef.current) return;\n const resizeObserverCallback = throttle(updateContainerDimensions, THROTTE_TIME_MS); // Throttle events\n const resizeObserver = new ResizeObserver(resizeObserverCallback);\n resizeObserver.observe(containerRef.current);\n return () => resizeObserver.disconnect(); // eslint-disable-line consistent-return\n }, [containerRef.current, isVisible]);\n\n // Update dimensions when document scrolls\n // will only call updateContainerDimensions on horizontal scroll\n useEffect(() => {\n if (!isVisible) return;\n if (!containerRef.current) return;\n const scrollCallback = throttle(() => {\n const { left } = containerRef.current?.getBoundingClientRect() || {};\n if (left && lastLeftValue.current !== left) {\n updateContainerDimensions();\n lastLeftValue.current = left;\n }\n }, THROTTE_TIME_MS); // Throttle events\n document.addEventListener('scroll', scrollCallback);\n return () => document.removeEventListener('scroll', scrollCallback); // eslint-disable-line consistent-return\n }, [containerRef.current, isVisible]);\n\n // Sync container scrolling\n\n useEffect(() => {\n updateContainerScrollPosition();\n }, [isVisible]);\n\n useEffect(() => {\n containerRef.current?.addEventListener('scroll', updateContainerScrollPosition);\n return () => {\n containerRef.current?.removeEventListener('scroll', updateContainerScrollPosition);\n };\n }, [containerRef.current]);\n\n // Render sticky header\n\n if (!isVisible) return null;\n\n const containerStyle: CSSProperties = {\n ...containerRect,\n height: headerCellHeight,\n position: 'fixed',\n zIndex: 5,\n overflowX: 'hidden',\n overflowY: 'hidden',\n borderBottom: `1px solid ${theme.colors.neutral.grey.base}`,\n borderTop: `1px solid ${theme.colors.neutral.grey.base}`,\n boxShadow: Shadows.base,\n top: `${stickyHeaderTop}px` || '0px',\n };\n\n // Generate styles to sync sticky columns with \"real\" columns\n const columnsCss = cellWidths\n .map(\n (width, index) => `\n & th:nth-child(${index + 1}) {\n width: ${width}px;\n }\n `,\n )\n .join('');\n // Append to generated table styles\n const allCss = tableCss + columnsCss;\n\n return (\n <div style={containerStyle} ref={stickyContainerRef}>\n <TableGrid css={allCss}>\n <thead>{children}</thead>\n </TableGrid>\n </div>\n );\n}\n"],"names":["React"],"mappings":";;;;;;;;AAAA;SAmBgB,UAAU,CAAC,EACzB,QAAQ,EACR,qBAAqB,EACrB,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,eAAe,GAAG,CAAC,GACH,EAAA;AAChB,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAiB,IAAI,CAAC;IACvD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACjD,IAAA,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC;AACjD,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,MAAM,EAAE,CAAC;AACV,KAAA,CAAC;AAEF,IAAA,MAAM,aAAa,GAAG,MAAM,CAAgB,IAAI,CAAC;IACjD,MAAM,eAAe,GAAG,EAAE;IAE1B,MAAM,yBAAyB,GAAG,MAAK;;QACrC,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,YAAY,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,qBAAqB,EAAE;AAChE,QAAA,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,CAAA,UAAU,KAAA,IAAA,IAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,KAAI,CAAC;YAC3B,KAAK,EAAE,CAAA,UAAU,KAAA,IAAA,IAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,KAAI,CAAC;AAC7B,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,MAAM,EAAE,EAAE;SACX;QACD,gBAAgB,CAAC,OAAO,CAAC;AAC3B,IAAA,CAAC;IAED,MAAM,6BAA6B,GAAG,MAAK;;QACzC,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE;AAC3B,QAAA,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU;QACrD,CAAA,EAAA,GAAA,kBAAkB,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;AACxD,IAAA,CAAC;;IAID,SAAS,CAAC,MAAK;QACb,IAAI,CAAC,qBAAqB,CAAC,OAAO;YAAE;AACpC,QAAA,MAAM,OAAO,GAAG;YACd,UAAU,EAAE,CAAA,CAAA,EAAI,eAAe,CAAA,gBAAA,CAAkB;AACjD,YAAA,SAAS,EAAE,GAAG;SACf;AACD,QAAA,MAAM,oBAAoB,GAAiC,CAAC,OAAO,KAAI;AACrE,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACxB,gBAAA,YAAY,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;AACrC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;QACD,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,oBAAoB,EAAE,OAAO,CAAC;AACpF,QAAA,oBAAoB,CAAC,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC;QAC3D,OAAO,MAAM,oBAAoB,CAAC,UAAU,EAAE,CAAC;AACjD,IAAA,CAAC,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;;IAInC,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,SAAS;YAAE;QAChB,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE;AAC3B,QAAA,yBAAyB,EAAE;IAC7B,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;;IAIrC,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,SAAS;YAAE;QAChB,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE;QAC3B,MAAM,sBAAsB,GAAG,QAAQ,CAAC,yBAAyB,EAAE,eAAe,CAAC,CAAC;AACpF,QAAA,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,sBAAsB,CAAC;AACjE,QAAA,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;QAC5C,OAAO,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;IAC3C,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;;;IAIrC,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,SAAS;YAAE;QAChB,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE;AAC3B,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAK;;AACnC,YAAA,MAAM,EAAE,IAAI,EAAE,GAAG,CAAA,CAAA,EAAA,GAAA,YAAY,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,qBAAqB,EAAE,KAAI,EAAE;AACpE,YAAA,IAAI,IAAI,IAAI,aAAa,CAAC,OAAO,KAAK,IAAI,EAAE;AAC1C,gBAAA,yBAAyB,EAAE;AAC3B,gBAAA,aAAa,CAAC,OAAO,GAAG,IAAI;AAC7B,YAAA;AACH,QAAA,CAAC,EAAE,eAAe,CAAC,CAAC;AACpB,QAAA,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,CAAC;AACnD,QAAA,OAAO,MAAM,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACtE,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;;IAIrC,SAAS,CAAC,MAAK;AACb,QAAA,6BAA6B,EAAE;AACjC,IAAA,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAEf,SAAS,CAAC,MAAK;;QACb,CAAA,EAAA,GAAA,YAAY,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,gBAAgB,CAAC,QAAQ,EAAE,6BAA6B,CAAC;AAC/E,QAAA,OAAO,MAAK;;YACV,CAAA,EAAA,GAAA,YAAY,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,mBAAmB,CAAC,QAAQ,EAAE,6BAA6B,CAAC;AACpF,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;;AAI1B,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,IAAI;AAE3B,IAAA,MAAM,cAAc,GAAkB;AACpC,QAAA,GAAG,aAAa;AAChB,QAAA,MAAM,EAAE,gBAAgB;AACxB,QAAA,QAAQ,EAAE,OAAO;AACjB,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAA,CAAE;QAC3D,SAAS,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAA,CAAE;QACxD,SAAS,EAAE,OAAO,CAAC,IAAI;AACvB,QAAA,GAAG,EAAE,CAAA,EAAG,eAAe,CAAA,EAAA,CAAI,IAAI,KAAK;KACrC;;IAGD,MAAM,UAAU,GAAG;AAChB,SAAA,GAAG,CACF,CAAC,KAAK,EAAE,KAAK,KAAK;AACH,mBAAA,EAAA,KAAK,GAAG,CAAC,CAAA;eACf,KAAK,CAAA;;GAEjB;SAEE,IAAI,CAAC,EAAE,CAAC;;AAEX,IAAA,MAAM,MAAM,GAAG,QAAQ,GAAG,UAAU;IAEpC,QACEA,sCAAK,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,kBAAkB,EAAA;AACjD,QAAAA,cAAA,CAAA,aAAA,CAAC,SAAS,EAAA,EAAC,GAAG,EAAE,MAAM,EAAA;AACpB,YAAAA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ,QAAQ,CAAS,CACf,CACR;AAEV;;;;"}
1
+ {"version":3,"file":"StickyHead.js","sources":["../../../../src/components/DataTable/components/StickyHead.tsx"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport React, { CSSProperties, ReactNode, RefObject, useEffect, useRef, useState } from 'react';\nimport throttle from 'lodash.throttle';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport { theme } from '../../../theme';\n\nimport { headerCellHeight } from '../constants';\nimport { TableGrid } from './TableGrid';\nimport { TableCssOutput } from '../utils/generateTableCss';\nimport { Shadows } from '../../../theme/modules/shadows';\n\nexport interface StickyHeadProps {\n tableCss: TableCssOutput;\n children?: ReactNode;\n intersectionTargetRef: RefObject<HTMLElement>;\n containerRef: RefObject<HTMLElement>;\n cellWidths: number[];\n stickyHeaderTop?: number;\n}\n\nexport function StickyHead({\n children,\n intersectionTargetRef,\n containerRef,\n cellWidths,\n tableCss,\n stickyHeaderTop = 0,\n}: StickyHeadProps) {\n const stickyContainerRef = useRef<HTMLDivElement>(null);\n const [isVisible, setIsVisible] = useState(false);\n const [containerRect, setContainerRect] = useState({\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n });\n\n const lastLeftValue = useRef<null | number>(null);\n const THROTTE_TIME_MS = 30;\n\n const updateContainerDimensions = () => {\n const targetRect = containerRef.current?.getBoundingClientRect();\n const newRect = {\n left: targetRect?.left || 0,\n width: targetRect?.width || 0,\n top: 0,\n height: 48,\n };\n setContainerRect(newRect);\n };\n\n const updateContainerScrollPosition = () => {\n if (!containerRef.current) return;\n const xScrollOffset = containerRef.current.scrollLeft;\n stickyContainerRef.current?.scrollTo(xScrollOffset, 0);\n };\n\n // Configure intersection observer to toggle sticky header on/off\n\n useEffect(() => {\n if (!intersectionTargetRef.current) return;\n const options = {\n rootMargin: `-${stickyHeaderTop}px 100% 0px 100%`,\n threshold: 1.0,\n };\n const intersectionCallback: IntersectionObserverCallback = (entries) => {\n entries.forEach((entry) => {\n setIsVisible(!entry.isIntersecting);\n });\n };\n const intersectionObserver = new IntersectionObserver(intersectionCallback, options);\n intersectionObserver.observe(intersectionTargetRef.current);\n return () => intersectionObserver.disconnect(); // eslint-disable-line consistent-return\n }, [intersectionTargetRef.current]);\n\n // Calculate sticky header position and size to match table container\n\n useEffect(() => {\n if (!isVisible) return;\n if (!containerRef.current) return;\n updateContainerDimensions();\n }, [containerRef.current, isVisible]);\n\n // Update dimensions when container element is resized\n\n useEffect(() => {\n if (!isVisible) return;\n if (!containerRef.current) return;\n const resizeObserverCallback = throttle(updateContainerDimensions, THROTTE_TIME_MS); // Throttle events\n const resizeObserver = new ResizeObserver(resizeObserverCallback);\n resizeObserver.observe(containerRef.current);\n return () => resizeObserver.disconnect(); // eslint-disable-line consistent-return\n }, [containerRef.current, isVisible]);\n\n // Update dimensions when document scrolls\n // will only call updateContainerDimensions on horizontal scroll\n useEffect(() => {\n if (!isVisible) return;\n if (!containerRef.current) return;\n const scrollCallback = throttle(() => {\n const { left } = containerRef.current?.getBoundingClientRect() || {};\n if (left && lastLeftValue.current !== left) {\n updateContainerDimensions();\n lastLeftValue.current = left;\n }\n }, THROTTE_TIME_MS); // Throttle events\n document.addEventListener('scroll', scrollCallback);\n return () => document.removeEventListener('scroll', scrollCallback); // eslint-disable-line consistent-return\n }, [containerRef.current, isVisible]);\n\n // Sync container scrolling\n\n useEffect(() => {\n updateContainerScrollPosition();\n }, [isVisible]);\n\n useEffect(() => {\n containerRef.current?.addEventListener('scroll', updateContainerScrollPosition);\n return () => {\n containerRef.current?.removeEventListener('scroll', updateContainerScrollPosition);\n };\n }, [containerRef.current]);\n\n // Render sticky header\n\n if (!isVisible) return null;\n\n const containerStyle: CSSProperties = {\n ...containerRect,\n height: headerCellHeight,\n position: 'fixed',\n zIndex: 5,\n overflowX: 'hidden',\n overflowY: 'hidden',\n borderBottom: `1px solid ${theme.colors.neutral.grey.base}`,\n borderTop: `1px solid ${theme.colors.neutral.grey.base}`,\n boxShadow: Shadows.base,\n top: `${stickyHeaderTop}px` || '0px',\n };\n\n // Generate rules to sync sticky columns with \"real\" columns\n const columnRules = cellWidths.map(\n (width, index) => `th:nth-child(${index + 1}) { width: ${width}px; }`,\n );\n\n return (\n <div style={containerStyle} ref={stickyContainerRef}>\n <TableGrid tableCss={tableCss} extraRules={columnRules}>\n <thead>{children}</thead>\n </TableGrid>\n </div>\n );\n}\n"],"names":["React"],"mappings":";;;;;;;;AAAA;SAoBgB,UAAU,CAAC,EACzB,QAAQ,EACR,qBAAqB,EACrB,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,eAAe,GAAG,CAAC,GACH,EAAA;AAChB,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAiB,IAAI,CAAC;IACvD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC;AACjD,IAAA,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAC;AACjD,QAAA,GAAG,EAAE,CAAC;AACN,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,CAAC;AACR,QAAA,MAAM,EAAE,CAAC;AACV,KAAA,CAAC;AAEF,IAAA,MAAM,aAAa,GAAG,MAAM,CAAgB,IAAI,CAAC;IACjD,MAAM,eAAe,GAAG,EAAE;IAE1B,MAAM,yBAAyB,GAAG,MAAK;;QACrC,MAAM,UAAU,GAAG,CAAA,EAAA,GAAA,YAAY,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,qBAAqB,EAAE;AAChE,QAAA,MAAM,OAAO,GAAG;YACd,IAAI,EAAE,CAAA,UAAU,KAAA,IAAA,IAAV,UAAU,uBAAV,UAAU,CAAE,IAAI,KAAI,CAAC;YAC3B,KAAK,EAAE,CAAA,UAAU,KAAA,IAAA,IAAV,UAAU,uBAAV,UAAU,CAAE,KAAK,KAAI,CAAC;AAC7B,YAAA,GAAG,EAAE,CAAC;AACN,YAAA,MAAM,EAAE,EAAE;SACX;QACD,gBAAgB,CAAC,OAAO,CAAC;AAC3B,IAAA,CAAC;IAED,MAAM,6BAA6B,GAAG,MAAK;;QACzC,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE;AAC3B,QAAA,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,UAAU;QACrD,CAAA,EAAA,GAAA,kBAAkB,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;AACxD,IAAA,CAAC;;IAID,SAAS,CAAC,MAAK;QACb,IAAI,CAAC,qBAAqB,CAAC,OAAO;YAAE;AACpC,QAAA,MAAM,OAAO,GAAG;YACd,UAAU,EAAE,CAAA,CAAA,EAAI,eAAe,CAAA,gBAAA,CAAkB;AACjD,YAAA,SAAS,EAAE,GAAG;SACf;AACD,QAAA,MAAM,oBAAoB,GAAiC,CAAC,OAAO,KAAI;AACrE,YAAA,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AACxB,gBAAA,YAAY,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;AACrC,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC;QACD,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,CAAC,oBAAoB,EAAE,OAAO,CAAC;AACpF,QAAA,oBAAoB,CAAC,OAAO,CAAC,qBAAqB,CAAC,OAAO,CAAC;QAC3D,OAAO,MAAM,oBAAoB,CAAC,UAAU,EAAE,CAAC;AACjD,IAAA,CAAC,EAAE,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC;;IAInC,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,SAAS;YAAE;QAChB,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE;AAC3B,QAAA,yBAAyB,EAAE;IAC7B,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;;IAIrC,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,SAAS;YAAE;QAChB,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE;QAC3B,MAAM,sBAAsB,GAAG,QAAQ,CAAC,yBAAyB,EAAE,eAAe,CAAC,CAAC;AACpF,QAAA,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,sBAAsB,CAAC;AACjE,QAAA,cAAc,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC;QAC5C,OAAO,MAAM,cAAc,CAAC,UAAU,EAAE,CAAC;IAC3C,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;;;IAIrC,SAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,SAAS;YAAE;QAChB,IAAI,CAAC,YAAY,CAAC,OAAO;YAAE;AAC3B,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAK;;AACnC,YAAA,MAAM,EAAE,IAAI,EAAE,GAAG,CAAA,CAAA,EAAA,GAAA,YAAY,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,qBAAqB,EAAE,KAAI,EAAE;AACpE,YAAA,IAAI,IAAI,IAAI,aAAa,CAAC,OAAO,KAAK,IAAI,EAAE;AAC1C,gBAAA,yBAAyB,EAAE;AAC3B,gBAAA,aAAa,CAAC,OAAO,GAAG,IAAI;AAC7B,YAAA;AACH,QAAA,CAAC,EAAE,eAAe,CAAC,CAAC;AACpB,QAAA,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,cAAc,CAAC;AACnD,QAAA,OAAO,MAAM,QAAQ,CAAC,mBAAmB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;IACtE,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;;IAIrC,SAAS,CAAC,MAAK;AACb,QAAA,6BAA6B,EAAE;AACjC,IAAA,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;IAEf,SAAS,CAAC,MAAK;;QACb,CAAA,EAAA,GAAA,YAAY,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,gBAAgB,CAAC,QAAQ,EAAE,6BAA6B,CAAC;AAC/E,QAAA,OAAO,MAAK;;YACV,CAAA,EAAA,GAAA,YAAY,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,mBAAmB,CAAC,QAAQ,EAAE,6BAA6B,CAAC;AACpF,QAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;;AAI1B,IAAA,IAAI,CAAC,SAAS;AAAE,QAAA,OAAO,IAAI;AAE3B,IAAA,MAAM,cAAc,GAAkB;AACpC,QAAA,GAAG,aAAa;AAChB,QAAA,MAAM,EAAE,gBAAgB;AACxB,QAAA,QAAQ,EAAE,OAAO;AACjB,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,SAAS,EAAE,QAAQ;AACnB,QAAA,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAA,CAAE;QAC3D,SAAS,EAAE,CAAA,UAAA,EAAa,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAA,CAAE;QACxD,SAAS,EAAE,OAAO,CAAC,IAAI;AACvB,QAAA,GAAG,EAAE,CAAA,EAAG,eAAe,CAAA,EAAA,CAAI,IAAI,KAAK;KACrC;;IAGD,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAChC,CAAC,KAAK,EAAE,KAAK,KAAK,gBAAgB,KAAK,GAAG,CAAC,CAAA,WAAA,EAAc,KAAK,CAAA,KAAA,CAAO,CACtE;IAED,QACEA,sCAAK,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,kBAAkB,EAAA;QACjDA,cAAA,CAAA,aAAA,CAAC,SAAS,IAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAA;AACpD,YAAAA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ,QAAQ,CAAS,CACf,CACR;AAEV;;;;"}
@@ -10,10 +10,46 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
10
10
 
11
11
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
12
12
 
13
- const TableGrid = React__default.default.forwardRef(({ css, className, children, style, ...rest }, ref) => {
13
+ /**
14
+ * Prefixes each selector in a rule with the scope selector.
15
+ * Handles comma-separated selector lists (e.g. "th::after, td::after { ... }")
16
+ * by scoping every selector, not just the first.
17
+ */
18
+ function scopeRule(scopeSelector, rule) {
19
+ const braceIndex = rule.indexOf('{');
20
+ if (braceIndex === -1)
21
+ return `${scopeSelector} ${rule}`;
22
+ const selectorPart = rule.slice(0, braceIndex).trim();
23
+ const bodyPart = rule.slice(braceIndex);
24
+ const scopedSelectors = selectorPart
25
+ .split(',')
26
+ .map((selector) => `${scopeSelector} ${selector.trim()}`)
27
+ .join(', ');
28
+ return `${scopedSelectors} ${bodyPart}`;
29
+ }
30
+ /**
31
+ * Builds a complete scoped stylesheet from properties and rules.
32
+ * No CSS nesting dependency.
33
+ */
34
+ function buildScopedStyle(scopeSelector, properties, rules) {
35
+ const parts = [];
36
+ if (properties) {
37
+ parts.push(`${scopeSelector} { ${properties} }`);
38
+ }
39
+ rules.forEach((rule) => {
40
+ parts.push(scopeRule(scopeSelector, rule));
41
+ });
42
+ return parts.join('\n');
43
+ }
44
+ const TableGrid = React__default.default.forwardRef(({ tableCss, extraRules, className, children, style, ...rest }, ref) => {
14
45
  const tableId = useTableId.useTableId();
46
+ const scopeSelector = `[data-table-id="${tableId}"]`;
47
+ const scopedStyle = React.useMemo(() => {
48
+ const allRules = extraRules ? [...tableCss.rules, ...extraRules] : tableCss.rules;
49
+ return buildScopedStyle(scopeSelector, tableCss.properties, allRules);
50
+ }, [tableCss, extraRules, scopeSelector]);
15
51
  return (React__default.default.createElement(React__default.default.Fragment, null,
16
- css && (React__default.default.createElement("style", null, `[data-table-id="${tableId}"] { ${css} }`)),
52
+ scopedStyle && React__default.default.createElement("style", null, scopedStyle),
17
53
  React__default.default.createElement("table", { ref: ref, "data-table-id": tableId, className: buildClassnames.buildClassnames([DataTable_module.tableGrid, className]), style: style, ...rest }, children)));
18
54
  });
19
55
  TableGrid.displayName = 'TableGrid';
@@ -1 +1 @@
1
- {"version":3,"file":"TableGrid.cjs","sources":["../../../../src/components/DataTable/components/TableGrid.tsx"],"sourcesContent":["import React from 'react';\nimport { buildClassnames } from '../../../utils';\nimport { useTableId } from '../hooks/useTableId';\nimport styles from './DataTable.module.scss';\n\nexport interface TableGridProps extends React.TableHTMLAttributes<HTMLTableElement> {\n /**\n * Dynamic CSS string from generateTableCss. Rendered in a scoped <style> tag.\n * Requires native CSS nesting support (Chrome 120+, Firefox 117+, Safari 17.2+).\n * @internal Only accepts output from generateTableCss. Do not pass user-controlled strings.\n */\n css: string;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport const TableGrid = React.forwardRef<HTMLTableElement, TableGridProps>(\n ({ css, className, children, style, ...rest }, ref) => {\n const tableId = useTableId();\n\n return (\n <>\n {/* SAFETY: css must only contain internally-generated CSS from generateTableCss.\n Do not pass user-controlled strings.\n NOTE: Relies on CSS nesting (Chrome 120+, Firefox 117+, Safari 17.2+). */}\n {css && (\n <style>{`[data-table-id=\"${tableId}\"] { ${css} }`}</style>\n )}\n <table\n ref={ref}\n data-table-id={tableId}\n className={buildClassnames([styles.tableGrid, className])}\n style={style}\n {...rest}\n >\n {children}\n </table>\n </>\n );\n },\n);\n\nTableGrid.displayName = 'TableGrid';\n"],"names":["React","useTableId","buildClassnames","styles"],"mappings":";;;;;;;;;;;;AAgBO,MAAM,SAAS,GAAGA,sBAAK,CAAC,UAAU,CACvC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,KAAI;AACpD,IAAA,MAAM,OAAO,GAAGC,qBAAU,EAAE;AAE5B,IAAA,QACED,sBAAA,CAAA,aAAA,CAAAA,sBAAA,CAAA,QAAA,EAAA,IAAA;QAIG,GAAG,KACFA,sBAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ,CAAA,gBAAA,EAAmB,OAAO,CAAA,KAAA,EAAQ,GAAG,CAAA,EAAA,CAAI,CAAS,CAC3D;AACD,QAAAA,sBAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,GAAG,EAAE,GAAG,EAAA,eAAA,EACO,OAAO,EACtB,SAAS,EAAEE,+BAAe,CAAC,CAACC,gBAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EACzD,KAAK,EAAE,KAAK,EAAA,GACR,IAAI,EAAA,EAEP,QAAQ,CACH,CACP;AAEP,CAAC;AAGH,SAAS,CAAC,WAAW,GAAG,WAAW;;;;"}
1
+ {"version":3,"file":"TableGrid.cjs","sources":["../../../../src/components/DataTable/components/TableGrid.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { buildClassnames } from '../../../utils';\nimport { useTableId } from '../hooks/useTableId';\nimport { TableCssOutput } from '../utils/generateTableCss';\nimport styles from './DataTable.module.scss';\n\nexport interface TableGridProps extends React.TableHTMLAttributes<HTMLTableElement> {\n /** Structured CSS output from generateTableCss */\n tableCss: TableCssOutput;\n /** Additional CSS rules to scope to this table (e.g. StickyHead column widths) */\n extraRules?: string[];\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Prefixes each selector in a rule with the scope selector.\n * Handles comma-separated selector lists (e.g. \"th::after, td::after { ... }\")\n * by scoping every selector, not just the first.\n */\nfunction scopeRule(scopeSelector: string, rule: string): string {\n const braceIndex = rule.indexOf('{');\n if (braceIndex === -1) return `${scopeSelector} ${rule}`;\n\n const selectorPart = rule.slice(0, braceIndex).trim();\n const bodyPart = rule.slice(braceIndex);\n\n const scopedSelectors = selectorPart\n .split(',')\n .map((selector) => `${scopeSelector} ${selector.trim()}`)\n .join(', ');\n\n return `${scopedSelectors} ${bodyPart}`;\n}\n\n/**\n * Builds a complete scoped stylesheet from properties and rules.\n * No CSS nesting dependency.\n */\nfunction buildScopedStyle(scopeSelector: string, properties: string, rules: string[]): string {\n const parts: string[] = [];\n\n if (properties) {\n parts.push(`${scopeSelector} { ${properties} }`);\n }\n\n rules.forEach((rule) => {\n parts.push(scopeRule(scopeSelector, rule));\n });\n\n return parts.join('\\n');\n}\n\nexport const TableGrid = React.forwardRef<HTMLTableElement, TableGridProps>(\n ({ tableCss, extraRules, className, children, style, ...rest }, ref) => {\n const tableId = useTableId();\n const scopeSelector = `[data-table-id=\"${tableId}\"]`;\n\n const scopedStyle = useMemo(() => {\n const allRules = extraRules ? [...tableCss.rules, ...extraRules] : tableCss.rules;\n return buildScopedStyle(scopeSelector, tableCss.properties, allRules);\n }, [tableCss, extraRules, scopeSelector]);\n\n return (\n <>\n {scopedStyle && <style>{scopedStyle}</style>}\n <table\n ref={ref}\n data-table-id={tableId}\n className={buildClassnames([styles.tableGrid, className])}\n style={style}\n {...rest}\n >\n {children}\n </table>\n </>\n );\n },\n);\n\nTableGrid.displayName = 'TableGrid';\n"],"names":["React","useTableId","useMemo","buildClassnames","styles"],"mappings":";;;;;;;;;;;;AAeA;;;;AAIG;AACH,SAAS,SAAS,CAAC,aAAqB,EAAE,IAAY,EAAA;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;IACpC,IAAI,UAAU,KAAK,EAAE;AAAE,QAAA,OAAO,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,IAAI,EAAE;AAExD,IAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;IAEvC,MAAM,eAAe,GAAG;SACrB,KAAK,CAAC,GAAG;AACT,SAAA,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,QAAQ,CAAC,IAAI,EAAE,EAAE;SACvD,IAAI,CAAC,IAAI,CAAC;AAEb,IAAA,OAAO,CAAA,EAAG,eAAe,CAAA,CAAA,EAAI,QAAQ,EAAE;AACzC;AAEA;;;AAGG;AACH,SAAS,gBAAgB,CAAC,aAAqB,EAAE,UAAkB,EAAE,KAAe,EAAA;IAClF,MAAM,KAAK,GAAa,EAAE;AAE1B,IAAA,IAAI,UAAU,EAAE;QACd,KAAK,CAAC,IAAI,CAAC,CAAA,EAAG,aAAa,CAAA,GAAA,EAAM,UAAU,CAAA,EAAA,CAAI,CAAC;AACjD,IAAA;AAED,IAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;QACrB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAC5C,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB;AAEO,MAAM,SAAS,GAAGA,sBAAK,CAAC,UAAU,CACvC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,KAAI;AACrE,IAAA,MAAM,OAAO,GAAGC,qBAAU,EAAE;AAC5B,IAAA,MAAM,aAAa,GAAG,CAAA,gBAAA,EAAmB,OAAO,IAAI;AAEpD,IAAA,MAAM,WAAW,GAAGC,aAAO,CAAC,MAAK;QAC/B,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK;QACjF,OAAO,gBAAgB,CAAC,aAAa,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;IACvE,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AAEzC,IAAA,QACEF,sBAAA,CAAA,aAAA,CAAAA,sBAAA,CAAA,QAAA,EAAA,IAAA;QACG,WAAW,IAAIA,sBAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ,WAAW,CAAS;AAC5C,QAAAA,sBAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,GAAG,EAAE,GAAG,EAAA,eAAA,EACO,OAAO,EACtB,SAAS,EAAEG,+BAAe,CAAC,CAACC,gBAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EACzD,KAAK,EAAE,KAAK,EAAA,GACR,IAAI,EAAA,EAEP,QAAQ,CACH,CACP;AAEP,CAAC;AAGH,SAAS,CAAC,WAAW,GAAG,WAAW;;;;"}
@@ -1,11 +1,10 @@
1
1
  import React from 'react';
2
+ import { TableCssOutput } from '../utils/generateTableCss';
2
3
  export interface TableGridProps extends React.TableHTMLAttributes<HTMLTableElement> {
3
- /**
4
- * Dynamic CSS string from generateTableCss. Rendered in a scoped <style> tag.
5
- * Requires native CSS nesting support (Chrome 120+, Firefox 117+, Safari 17.2+).
6
- * @internal Only accepts output from generateTableCss. Do not pass user-controlled strings.
7
- */
8
- css: string;
4
+ /** Structured CSS output from generateTableCss */
5
+ tableCss: TableCssOutput;
6
+ /** Additional CSS rules to scope to this table (e.g. StickyHead column widths) */
7
+ extraRules?: string[];
9
8
  children?: React.ReactNode;
10
9
  className?: string;
11
10
  }
@@ -1,13 +1,49 @@
1
- import React__default from 'react';
1
+ import React__default, { useMemo } from 'react';
2
2
  import { buildClassnames } from '../../../utils/buildClassnames.js';
3
3
  import 'uid/secure';
4
4
  import { useTableId } from '../hooks/useTableId.js';
5
5
  import styles from './DataTable.module.scss.js';
6
6
 
7
- const TableGrid = React__default.forwardRef(({ css, className, children, style, ...rest }, ref) => {
7
+ /**
8
+ * Prefixes each selector in a rule with the scope selector.
9
+ * Handles comma-separated selector lists (e.g. "th::after, td::after { ... }")
10
+ * by scoping every selector, not just the first.
11
+ */
12
+ function scopeRule(scopeSelector, rule) {
13
+ const braceIndex = rule.indexOf('{');
14
+ if (braceIndex === -1)
15
+ return `${scopeSelector} ${rule}`;
16
+ const selectorPart = rule.slice(0, braceIndex).trim();
17
+ const bodyPart = rule.slice(braceIndex);
18
+ const scopedSelectors = selectorPart
19
+ .split(',')
20
+ .map((selector) => `${scopeSelector} ${selector.trim()}`)
21
+ .join(', ');
22
+ return `${scopedSelectors} ${bodyPart}`;
23
+ }
24
+ /**
25
+ * Builds a complete scoped stylesheet from properties and rules.
26
+ * No CSS nesting dependency.
27
+ */
28
+ function buildScopedStyle(scopeSelector, properties, rules) {
29
+ const parts = [];
30
+ if (properties) {
31
+ parts.push(`${scopeSelector} { ${properties} }`);
32
+ }
33
+ rules.forEach((rule) => {
34
+ parts.push(scopeRule(scopeSelector, rule));
35
+ });
36
+ return parts.join('\n');
37
+ }
38
+ const TableGrid = React__default.forwardRef(({ tableCss, extraRules, className, children, style, ...rest }, ref) => {
8
39
  const tableId = useTableId();
40
+ const scopeSelector = `[data-table-id="${tableId}"]`;
41
+ const scopedStyle = useMemo(() => {
42
+ const allRules = extraRules ? [...tableCss.rules, ...extraRules] : tableCss.rules;
43
+ return buildScopedStyle(scopeSelector, tableCss.properties, allRules);
44
+ }, [tableCss, extraRules, scopeSelector]);
9
45
  return (React__default.createElement(React__default.Fragment, null,
10
- css && (React__default.createElement("style", null, `[data-table-id="${tableId}"] { ${css} }`)),
46
+ scopedStyle && React__default.createElement("style", null, scopedStyle),
11
47
  React__default.createElement("table", { ref: ref, "data-table-id": tableId, className: buildClassnames([styles.tableGrid, className]), style: style, ...rest }, children)));
12
48
  });
13
49
  TableGrid.displayName = 'TableGrid';
@@ -1 +1 @@
1
- {"version":3,"file":"TableGrid.js","sources":["../../../../src/components/DataTable/components/TableGrid.tsx"],"sourcesContent":["import React from 'react';\nimport { buildClassnames } from '../../../utils';\nimport { useTableId } from '../hooks/useTableId';\nimport styles from './DataTable.module.scss';\n\nexport interface TableGridProps extends React.TableHTMLAttributes<HTMLTableElement> {\n /**\n * Dynamic CSS string from generateTableCss. Rendered in a scoped <style> tag.\n * Requires native CSS nesting support (Chrome 120+, Firefox 117+, Safari 17.2+).\n * @internal Only accepts output from generateTableCss. Do not pass user-controlled strings.\n */\n css: string;\n children?: React.ReactNode;\n className?: string;\n}\n\nexport const TableGrid = React.forwardRef<HTMLTableElement, TableGridProps>(\n ({ css, className, children, style, ...rest }, ref) => {\n const tableId = useTableId();\n\n return (\n <>\n {/* SAFETY: css must only contain internally-generated CSS from generateTableCss.\n Do not pass user-controlled strings.\n NOTE: Relies on CSS nesting (Chrome 120+, Firefox 117+, Safari 17.2+). */}\n {css && (\n <style>{`[data-table-id=\"${tableId}\"] { ${css} }`}</style>\n )}\n <table\n ref={ref}\n data-table-id={tableId}\n className={buildClassnames([styles.tableGrid, className])}\n style={style}\n {...rest}\n >\n {children}\n </table>\n </>\n );\n },\n);\n\nTableGrid.displayName = 'TableGrid';\n"],"names":["React"],"mappings":";;;;;;AAgBO,MAAM,SAAS,GAAGA,cAAK,CAAC,UAAU,CACvC,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,KAAI;AACpD,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE;AAE5B,IAAA,QACEA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA;QAIG,GAAG,KACFA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ,CAAA,gBAAA,EAAmB,OAAO,CAAA,KAAA,EAAQ,GAAG,CAAA,EAAA,CAAI,CAAS,CAC3D;AACD,QAAAA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,GAAG,EAAE,GAAG,EAAA,eAAA,EACO,OAAO,EACtB,SAAS,EAAE,eAAe,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EACzD,KAAK,EAAE,KAAK,EAAA,GACR,IAAI,EAAA,EAEP,QAAQ,CACH,CACP;AAEP,CAAC;AAGH,SAAS,CAAC,WAAW,GAAG,WAAW;;;;"}
1
+ {"version":3,"file":"TableGrid.js","sources":["../../../../src/components/DataTable/components/TableGrid.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { buildClassnames } from '../../../utils';\nimport { useTableId } from '../hooks/useTableId';\nimport { TableCssOutput } from '../utils/generateTableCss';\nimport styles from './DataTable.module.scss';\n\nexport interface TableGridProps extends React.TableHTMLAttributes<HTMLTableElement> {\n /** Structured CSS output from generateTableCss */\n tableCss: TableCssOutput;\n /** Additional CSS rules to scope to this table (e.g. StickyHead column widths) */\n extraRules?: string[];\n children?: React.ReactNode;\n className?: string;\n}\n\n/**\n * Prefixes each selector in a rule with the scope selector.\n * Handles comma-separated selector lists (e.g. \"th::after, td::after { ... }\")\n * by scoping every selector, not just the first.\n */\nfunction scopeRule(scopeSelector: string, rule: string): string {\n const braceIndex = rule.indexOf('{');\n if (braceIndex === -1) return `${scopeSelector} ${rule}`;\n\n const selectorPart = rule.slice(0, braceIndex).trim();\n const bodyPart = rule.slice(braceIndex);\n\n const scopedSelectors = selectorPart\n .split(',')\n .map((selector) => `${scopeSelector} ${selector.trim()}`)\n .join(', ');\n\n return `${scopedSelectors} ${bodyPart}`;\n}\n\n/**\n * Builds a complete scoped stylesheet from properties and rules.\n * No CSS nesting dependency.\n */\nfunction buildScopedStyle(scopeSelector: string, properties: string, rules: string[]): string {\n const parts: string[] = [];\n\n if (properties) {\n parts.push(`${scopeSelector} { ${properties} }`);\n }\n\n rules.forEach((rule) => {\n parts.push(scopeRule(scopeSelector, rule));\n });\n\n return parts.join('\\n');\n}\n\nexport const TableGrid = React.forwardRef<HTMLTableElement, TableGridProps>(\n ({ tableCss, extraRules, className, children, style, ...rest }, ref) => {\n const tableId = useTableId();\n const scopeSelector = `[data-table-id=\"${tableId}\"]`;\n\n const scopedStyle = useMemo(() => {\n const allRules = extraRules ? [...tableCss.rules, ...extraRules] : tableCss.rules;\n return buildScopedStyle(scopeSelector, tableCss.properties, allRules);\n }, [tableCss, extraRules, scopeSelector]);\n\n return (\n <>\n {scopedStyle && <style>{scopedStyle}</style>}\n <table\n ref={ref}\n data-table-id={tableId}\n className={buildClassnames([styles.tableGrid, className])}\n style={style}\n {...rest}\n >\n {children}\n </table>\n </>\n );\n },\n);\n\nTableGrid.displayName = 'TableGrid';\n"],"names":["React"],"mappings":";;;;;;AAeA;;;;AAIG;AACH,SAAS,SAAS,CAAC,aAAqB,EAAE,IAAY,EAAA;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;IACpC,IAAI,UAAU,KAAK,EAAE;AAAE,QAAA,OAAO,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,IAAI,EAAE;AAExD,IAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE;IACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;IAEvC,MAAM,eAAe,GAAG;SACrB,KAAK,CAAC,GAAG;AACT,SAAA,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAA,EAAG,aAAa,CAAA,CAAA,EAAI,QAAQ,CAAC,IAAI,EAAE,EAAE;SACvD,IAAI,CAAC,IAAI,CAAC;AAEb,IAAA,OAAO,CAAA,EAAG,eAAe,CAAA,CAAA,EAAI,QAAQ,EAAE;AACzC;AAEA;;;AAGG;AACH,SAAS,gBAAgB,CAAC,aAAqB,EAAE,UAAkB,EAAE,KAAe,EAAA;IAClF,MAAM,KAAK,GAAa,EAAE;AAE1B,IAAA,IAAI,UAAU,EAAE;QACd,KAAK,CAAC,IAAI,CAAC,CAAA,EAAG,aAAa,CAAA,GAAA,EAAM,UAAU,CAAA,EAAA,CAAI,CAAC;AACjD,IAAA;AAED,IAAA,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,KAAI;QACrB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;AAC5C,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AACzB;AAEO,MAAM,SAAS,GAAGA,cAAK,CAAC,UAAU,CACvC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,KAAI;AACrE,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE;AAC5B,IAAA,MAAM,aAAa,GAAG,CAAA,gBAAA,EAAmB,OAAO,IAAI;AAEpD,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAK;QAC/B,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,GAAG,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK;QACjF,OAAO,gBAAgB,CAAC,aAAa,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;IACvE,CAAC,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AAEzC,IAAA,QACEA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA;QACG,WAAW,IAAIA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ,WAAW,CAAS;AAC5C,QAAAA,cAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,GAAG,EAAE,GAAG,EAAA,eAAA,EACO,OAAO,EACtB,SAAS,EAAE,eAAe,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,EACzD,KAAK,EAAE,KAAK,EAAA,GACR,IAAI,EAAA,EAEP,QAAQ,CACH,CACP;AAEP,CAAC;AAGH,SAAS,CAAC,WAAW,GAAG,WAAW;;;;"}
@@ -5,86 +5,50 @@ var parseWidth = require('./parseWidth.cjs');
5
5
  var sumAll = require('./sumAll.cjs');
6
6
 
7
7
  function generateTableCss({ pinnedLeft, pinnedRight, cellWidths, scrollPosition, stripingMode, columnWidths, columns, enableTransition = true, }) {
8
- const pinnedLeftStyles = pinnedLeft.map((_, index) => `
9
- th:nth-child(${index + 1}),
10
- td:nth-child(${index + 1}) {
11
- position: sticky;
12
- left: ${cellWidths ? sumAll.sumAllBeforeIndex(cellWidths, index + 1) : 0}px;
13
- z-index: 2;
14
- }
15
- `);
16
- const pinnedRightStyles = pinnedRight.map((_, index) => `
17
- th:nth-last-child(${index + 1}),
18
- td:nth-last-child(${index + 1}) {
19
- position: sticky;
20
- right: ${cellWidths ? sumAll.sumAllAfterIndex(cellWidths, cellWidths.length - index) : 0}px;
21
- }
22
- `);
23
- const isLeftShadowVisible = !!scrollPosition && scrollPosition !== 'start' && scrollPosition !== 'none';
24
- const leftShadow = `
25
- th:nth-child(${pinnedLeft.length})::after,
26
- td:nth-child(${pinnedLeft.length})::after {
27
- position: absolute;
28
- transform: translate(100%);
29
- top: 0;
30
- right: 0;
31
- bottom: -1px;
32
- width: 30px;
33
- content: "";
34
- pointer-events: none;
35
- box-sizing: border-box;
36
- box-shadow: ${isLeftShadowVisible ? 'inset 10px 0 10px -8px rgb(0 0 0 / 25%)' : 'none'};
37
- }
38
- `;
39
- const isRightShadowVisible = !!scrollPosition && scrollPosition !== 'end' && scrollPosition !== 'none';
40
- const rightShadow = `
41
- th:nth-last-child(${pinnedRight.length})::after,
42
- td:nth-last-child(${pinnedRight.length})::after {
43
- position: absolute;
44
- transform: translate(-100%);
45
- top: 0;
46
- left: 0;
47
- bottom: -1px;
48
- width: 30px;
49
- content: "";
50
- pointer-events: none;
51
- box-sizing: border-box;
52
- box-shadow: ${isRightShadowVisible ? 'inset -10px 0 10px -8px rgb(0 0 0 / 25%)' : 'none'};
53
- }
54
- `;
55
- const stripingRow = `
56
- tr:nth-child(odd) > td {
57
- background-color: ${index.theme.colors.neutral.grey.lightest};
58
- }
59
-
60
- tr + tr > td {
61
- border-top: 1px solid ${index.theme.colors.neutral.grey.base};
62
- }
63
- `;
64
- const stripingNested = `
65
- tbody:nth-of-type(odd) > tr > td {
66
- background-color: ${index.theme.colors.neutral.grey.lightest};
67
- }
68
-
69
- tbody + tbody > tr:first-child > td {
70
- border-top: 1px solid ${index.theme.colors.neutral.grey.base};
71
- }
72
- `;
73
- return `
74
- grid-template-columns: ${columns.map((column) => { var _a; return parseWidth.parseWidth((_a = columnWidths[column.id]) !== null && _a !== void 0 ? _a : column.width); }).join(' ')};
75
-
76
- th::after, td::after {
77
- transition: box-shadow ${enableTransition ? '.3s' : '0s'};
78
- }
79
-
80
- ${pinnedLeft.length > 0 ? pinnedLeftStyles : ''}
81
- ${pinnedRight.length > 0 ? pinnedRightStyles : ''}
82
-
83
- ${pinnedLeft.length > 0 ? leftShadow : ''}
84
- ${pinnedRight.length > 0 ? rightShadow : ''}
85
-
86
- ${stripingMode === 'nested' ? stripingNested : stripingRow}
87
- `;
8
+ const rules = [];
9
+ // Pinned left columns
10
+ if (pinnedLeft.length > 0) {
11
+ pinnedLeft.forEach((_, index) => {
12
+ rules.push(`th:nth-child(${index + 1}), td:nth-child(${index + 1}) { position: sticky; left: ${cellWidths ? sumAll.sumAllBeforeIndex(cellWidths, index + 1) : 0}px; z-index: 2; }`);
13
+ });
14
+ }
15
+ // Pinned right columns
16
+ if (pinnedRight.length > 0) {
17
+ pinnedRight.forEach((_, index) => {
18
+ rules.push(`th:nth-last-child(${index + 1}), td:nth-last-child(${index + 1}) { position: sticky; right: ${cellWidths ? sumAll.sumAllAfterIndex(cellWidths, cellWidths.length - index) : 0}px; }`);
19
+ });
20
+ }
21
+ // Pseudo-element transition (only needed when pinned columns have shadows)
22
+ if (pinnedLeft.length > 0 || pinnedRight.length > 0) {
23
+ rules.push(`th::after, td::after { transition: box-shadow ${enableTransition ? '.3s' : '0s'}; }`);
24
+ }
25
+ // Left shadow
26
+ if (pinnedLeft.length > 0) {
27
+ const isLeftShadowVisible = !!scrollPosition && scrollPosition !== 'start' && scrollPosition !== 'none';
28
+ rules.push(`th:nth-child(${pinnedLeft.length})::after, td:nth-child(${pinnedLeft.length})::after { position: absolute; transform: translate(100%); top: 0; right: 0; bottom: -1px; width: 30px; content: ""; pointer-events: none; box-sizing: border-box; box-shadow: ${isLeftShadowVisible ? 'inset 10px 0 10px -8px rgb(0 0 0 / 25%)' : 'none'}; }`);
29
+ }
30
+ // Right shadow
31
+ if (pinnedRight.length > 0) {
32
+ const isRightShadowVisible = !!scrollPosition && scrollPosition !== 'end' && scrollPosition !== 'none';
33
+ rules.push(`th:nth-last-child(${pinnedRight.length})::after, td:nth-last-child(${pinnedRight.length})::after { position: absolute; transform: translate(-100%); top: 0; left: 0; bottom: -1px; width: 30px; content: ""; pointer-events: none; box-sizing: border-box; box-shadow: ${isRightShadowVisible ? 'inset -10px 0 10px -8px rgb(0 0 0 / 25%)' : 'none'}; }`);
34
+ }
35
+ // Striping
36
+ if (stripingMode === 'nested') {
37
+ rules.push(`tbody:nth-of-type(odd) > tr > td { background-color: ${index.theme.colors.neutral.grey.lightest}; }`);
38
+ rules.push(`tbody + tbody > tr:first-child > td { border-top: 1px solid ${index.theme.colors.neutral.grey.base}; }`);
39
+ }
40
+ else {
41
+ rules.push(`tr:nth-child(odd) > td { background-color: ${index.theme.colors.neutral.grey.lightest}; }`);
42
+ rules.push(`tr + tr > td { border-top: 1px solid ${index.theme.colors.neutral.grey.base}; }`);
43
+ }
44
+ // Grid template columns (applied as a property on the table element)
45
+ const gridTemplateColumns = columns
46
+ .map((column) => { var _a; return parseWidth.parseWidth((_a = columnWidths[column.id]) !== null && _a !== void 0 ? _a : column.width); })
47
+ .join(' ');
48
+ return {
49
+ properties: `grid-template-columns: ${gridTemplateColumns};`,
50
+ rules,
51
+ };
88
52
  }
89
53
 
90
54
  exports.generateTableCss = generateTableCss;
@@ -1 +1 @@
1
- {"version":3,"file":"generateTableCss.cjs","sources":["../../../../src/components/DataTable/utils/generateTableCss.ts"],"sourcesContent":["import { theme } from '../../../theme';\nimport { parseWidth } from './parseWidth';\nimport { sumAllAfterIndex, sumAllBeforeIndex } from './sumAll';\n\nimport { ColumnConfigs, ColumnWidthsType, StripingMode } from '../types';\nimport { ScrollPosition } from '../../../hooks/useScrollPosition/types';\n\nexport type GenerateTableCssArgs = {\n pinnedLeft: ColumnConfigs;\n pinnedRight: ColumnConfigs;\n cellWidths: Array<number>;\n scrollPosition: ScrollPosition;\n stripingMode?: StripingMode;\n columnWidths: ColumnWidthsType;\n columns: ColumnConfigs;\n enableTransition?: boolean;\n};\n\nexport function generateTableCss({\n pinnedLeft,\n pinnedRight,\n cellWidths,\n scrollPosition,\n stripingMode,\n columnWidths,\n columns,\n enableTransition = true,\n}: GenerateTableCssArgs) {\n const pinnedLeftStyles = pinnedLeft.map(\n (_: any, index: number) => `\n th:nth-child(${index + 1}),\n td:nth-child(${index + 1}) {\n position: sticky;\n left: ${cellWidths ? sumAllBeforeIndex(cellWidths, index + 1) : 0}px;\n z-index: 2;\n }\n `,\n );\n\n const pinnedRightStyles = pinnedRight.map(\n (_: any, index: number) => `\n th:nth-last-child(${index + 1}),\n td:nth-last-child(${index + 1}) {\n position: sticky;\n right: ${cellWidths ? sumAllAfterIndex(cellWidths, cellWidths.length - index) : 0}px;\n }\n `,\n );\n\n const isLeftShadowVisible =\n !!scrollPosition && scrollPosition !== 'start' && scrollPosition !== 'none';\n const leftShadow = `\n th:nth-child(${pinnedLeft.length})::after,\n td:nth-child(${pinnedLeft.length})::after {\n position: absolute;\n transform: translate(100%);\n top: 0;\n right: 0;\n bottom: -1px;\n width: 30px;\n content: \"\";\n pointer-events: none;\n box-sizing: border-box;\n box-shadow: ${isLeftShadowVisible ? 'inset 10px 0 10px -8px rgb(0 0 0 / 25%)' : 'none'};\n }\n `;\n\n const isRightShadowVisible =\n !!scrollPosition && scrollPosition !== 'end' && scrollPosition !== 'none';\n const rightShadow = `\n th:nth-last-child(${pinnedRight.length})::after,\n td:nth-last-child(${pinnedRight.length})::after {\n position: absolute;\n transform: translate(-100%);\n top: 0;\n left: 0;\n bottom: -1px;\n width: 30px;\n content: \"\";\n pointer-events: none;\n box-sizing: border-box;\n box-shadow: ${isRightShadowVisible ? 'inset -10px 0 10px -8px rgb(0 0 0 / 25%)' : 'none'};\n }\n `;\n\n const stripingRow = `\n tr:nth-child(odd) > td {\n background-color: ${theme.colors.neutral.grey.lightest};\n }\n\n tr + tr > td {\n border-top: 1px solid ${theme.colors.neutral.grey.base};\n }\n `;\n\n const stripingNested = `\n tbody:nth-of-type(odd) > tr > td {\n background-color: ${theme.colors.neutral.grey.lightest};\n }\n\n tbody + tbody > tr:first-child > td {\n border-top: 1px solid ${theme.colors.neutral.grey.base};\n }\n `;\n\n return `\n grid-template-columns: ${columns.map((column) => parseWidth(columnWidths[column.id] ?? column.width)).join(' ')};\n\n th::after, td::after {\n transition: box-shadow ${enableTransition ? '.3s' : '0s'};\n }\n\n ${pinnedLeft.length > 0 ? pinnedLeftStyles : ''}\n ${pinnedRight.length > 0 ? pinnedRightStyles : ''}\n\n ${pinnedLeft.length > 0 ? leftShadow : ''}\n ${pinnedRight.length > 0 ? rightShadow : ''}\n\n ${stripingMode === 'nested' ? stripingNested : stripingRow}\n `;\n}\n"],"names":["sumAllBeforeIndex","sumAllAfterIndex","theme","parseWidth"],"mappings":"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"}
1
+ {"version":3,"file":"generateTableCss.cjs","sources":["../../../../src/components/DataTable/utils/generateTableCss.ts"],"sourcesContent":["import { theme } from '../../../theme';\nimport { parseWidth } from './parseWidth';\nimport { sumAllAfterIndex, sumAllBeforeIndex } from './sumAll';\n\nimport { ColumnConfigs, ColumnWidthsType, StripingMode } from '../types';\nimport { ScrollPosition } from '../../../hooks/useScrollPosition/types';\n\nexport type GenerateTableCssArgs = {\n pinnedLeft: ColumnConfigs;\n pinnedRight: ColumnConfigs;\n cellWidths: Array<number>;\n scrollPosition: ScrollPosition;\n stripingMode?: StripingMode;\n columnWidths: ColumnWidthsType;\n columns: ColumnConfigs;\n enableTransition?: boolean;\n};\n\nexport type TableCssOutput = {\n /** CSS declarations applied directly to the table element (e.g. grid-template-columns) */\n properties: string;\n /** Fully-formed CSS rule blocks to be scoped to the table instance */\n rules: string[];\n};\n\nexport function generateTableCss({\n pinnedLeft,\n pinnedRight,\n cellWidths,\n scrollPosition,\n stripingMode,\n columnWidths,\n columns,\n enableTransition = true,\n}: GenerateTableCssArgs): TableCssOutput {\n const rules: string[] = [];\n\n // Pinned left columns\n if (pinnedLeft.length > 0) {\n pinnedLeft.forEach((_: any, index: number) => {\n rules.push(\n `th:nth-child(${index + 1}), td:nth-child(${index + 1}) { position: sticky; left: ${cellWidths ? sumAllBeforeIndex(cellWidths, index + 1) : 0}px; z-index: 2; }`,\n );\n });\n }\n\n // Pinned right columns\n if (pinnedRight.length > 0) {\n pinnedRight.forEach((_: any, index: number) => {\n rules.push(\n `th:nth-last-child(${index + 1}), td:nth-last-child(${index + 1}) { position: sticky; right: ${cellWidths ? sumAllAfterIndex(cellWidths, cellWidths.length - index) : 0}px; }`,\n );\n });\n }\n\n // Pseudo-element transition (only needed when pinned columns have shadows)\n if (pinnedLeft.length > 0 || pinnedRight.length > 0) {\n rules.push(`th::after, td::after { transition: box-shadow ${enableTransition ? '.3s' : '0s'}; }`);\n }\n\n // Left shadow\n if (pinnedLeft.length > 0) {\n const isLeftShadowVisible =\n !!scrollPosition && scrollPosition !== 'start' && scrollPosition !== 'none';\n rules.push(\n `th:nth-child(${pinnedLeft.length})::after, td:nth-child(${pinnedLeft.length})::after { position: absolute; transform: translate(100%); top: 0; right: 0; bottom: -1px; width: 30px; content: \"\"; pointer-events: none; box-sizing: border-box; box-shadow: ${isLeftShadowVisible ? 'inset 10px 0 10px -8px rgb(0 0 0 / 25%)' : 'none'}; }`,\n );\n }\n\n // Right shadow\n if (pinnedRight.length > 0) {\n const isRightShadowVisible =\n !!scrollPosition && scrollPosition !== 'end' && scrollPosition !== 'none';\n rules.push(\n `th:nth-last-child(${pinnedRight.length})::after, td:nth-last-child(${pinnedRight.length})::after { position: absolute; transform: translate(-100%); top: 0; left: 0; bottom: -1px; width: 30px; content: \"\"; pointer-events: none; box-sizing: border-box; box-shadow: ${isRightShadowVisible ? 'inset -10px 0 10px -8px rgb(0 0 0 / 25%)' : 'none'}; }`,\n );\n }\n\n // Striping\n if (stripingMode === 'nested') {\n rules.push(\n `tbody:nth-of-type(odd) > tr > td { background-color: ${theme.colors.neutral.grey.lightest}; }`,\n );\n rules.push(\n `tbody + tbody > tr:first-child > td { border-top: 1px solid ${theme.colors.neutral.grey.base}; }`,\n );\n } else {\n rules.push(\n `tr:nth-child(odd) > td { background-color: ${theme.colors.neutral.grey.lightest}; }`,\n );\n rules.push(\n `tr + tr > td { border-top: 1px solid ${theme.colors.neutral.grey.base}; }`,\n );\n }\n\n // Grid template columns (applied as a property on the table element)\n const gridTemplateColumns = columns\n .map((column) => parseWidth(columnWidths[column.id] ?? column.width))\n .join(' ');\n\n return {\n properties: `grid-template-columns: ${gridTemplateColumns};`,\n rules,\n };\n}\n"],"names":["sumAllBeforeIndex","sumAllAfterIndex","theme","parseWidth"],"mappings":"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"}
@@ -10,4 +10,10 @@ export type GenerateTableCssArgs = {
10
10
  columns: ColumnConfigs;
11
11
  enableTransition?: boolean;
12
12
  };
13
- export declare function generateTableCss({ pinnedLeft, pinnedRight, cellWidths, scrollPosition, stripingMode, columnWidths, columns, enableTransition, }: GenerateTableCssArgs): string;
13
+ export type TableCssOutput = {
14
+ /** CSS declarations applied directly to the table element (e.g. grid-template-columns) */
15
+ properties: string;
16
+ /** Fully-formed CSS rule blocks to be scoped to the table instance */
17
+ rules: string[];
18
+ };
19
+ export declare function generateTableCss({ pinnedLeft, pinnedRight, cellWidths, scrollPosition, stripingMode, columnWidths, columns, enableTransition, }: GenerateTableCssArgs): TableCssOutput;