@rio-cloud/rio-uikit 2.3.0-beta.2 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/Marker.js +9 -5
  2. package/Table.js +10 -9
  3. package/TableNext.js +10 -9
  4. package/TableRowActionsDropdown.d.ts +2 -0
  5. package/TableRowActionsDropdown.js +5 -0
  6. package/TableRowActionsDropdown.js.map +1 -0
  7. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.d.ts +38 -3
  8. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.js +104 -109
  9. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.js.map +1 -1
  10. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.d.ts +24 -5
  11. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.js +60 -56
  12. package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.js.map +1 -1
  13. package/components/datepicker/DayPicker.js +72 -70
  14. package/components/datepicker/DayPicker.js.map +1 -1
  15. package/components/datepicker/DayPickerDropdown.d.ts +1 -0
  16. package/components/datepicker/DayPickerDropdown.js +61 -48
  17. package/components/datepicker/DayPickerDropdown.js.map +1 -1
  18. package/components/datepicker/useStackedDayPickerCalendars.js +26 -26
  19. package/components/datepicker/useStackedDayPickerCalendars.js.map +1 -1
  20. package/components/dropdown/ButtonDropdown.d.ts +4 -0
  21. package/components/dropdown/ButtonDropdown.js +82 -80
  22. package/components/dropdown/ButtonDropdown.js.map +1 -1
  23. package/components/listMenu/ListMenu.d.ts +8 -0
  24. package/components/listMenu/ListMenu.js +74 -66
  25. package/components/listMenu/ListMenu.js.map +1 -1
  26. package/components/map/components/Map.js +207 -156
  27. package/components/map/components/Map.js.map +1 -1
  28. package/components/map/components/MapContext.d.ts +3 -0
  29. package/components/map/components/MapContext.js +9 -6
  30. package/components/map/components/MapContext.js.map +1 -1
  31. package/components/map/components/features/MapZoom.js +19 -19
  32. package/components/map/components/features/MapZoom.js.map +1 -1
  33. package/components/map/components/features/Route.d.ts +65 -1
  34. package/components/map/components/features/Route.js +184 -98
  35. package/components/map/components/features/Route.js.map +1 -1
  36. package/components/map/components/features/basics/Marker.d.ts +21 -1
  37. package/components/map/components/features/basics/Marker.js +99 -40
  38. package/components/map/components/features/basics/Marker.js.map +1 -1
  39. package/components/map/components/features/basics/Polygon.d.ts +24 -1
  40. package/components/map/components/features/basics/Polygon.js +72 -19
  41. package/components/map/components/features/basics/Polygon.js.map +1 -1
  42. package/components/map/components/features/basics/Polyline.d.ts +29 -0
  43. package/components/map/components/features/basics/Polyline.js +69 -39
  44. package/components/map/components/features/basics/Polyline.js.map +1 -1
  45. package/components/map/components/features/layers/MarkerLayer.js +8 -8
  46. package/components/map/components/features/layers/MarkerLayer.js.map +1 -1
  47. package/components/map/components/features/layers/clustering/SimpleClusterLayer.js +13 -6
  48. package/components/map/components/features/layers/clustering/SimpleClusterLayer.js.map +1 -1
  49. package/components/map/utils/clustering.d.ts +1 -1
  50. package/components/map/utils/clustering.js +30 -30
  51. package/components/map/utils/clustering.js.map +1 -1
  52. package/components/map/utils/mapTypes.d.ts +141 -0
  53. package/components/map/utils/mapTypes.js.map +1 -1
  54. package/components/map/utils/mapUtils.d.ts +2 -0
  55. package/components/map/utils/mapUtils.js +4 -0
  56. package/components/map/utils/mapUtils.js.map +1 -1
  57. package/components/mapMarker/ClusterMapMarker.d.ts +2 -0
  58. package/components/mapMarker/ClusterMapMarker.js.map +1 -1
  59. package/components/mapMarker/SingleMapMarker.d.ts +2 -0
  60. package/components/mapMarker/SingleMapMarker.js.map +1 -1
  61. package/components/selects/ClearButton.js +9 -7
  62. package/components/selects/ClearButton.js.map +1 -1
  63. package/components/table/Table.d.ts +3 -1
  64. package/components/table/Table.js +239 -216
  65. package/components/table/Table.js.map +1 -1
  66. package/components/table/Table.types.d.ts +62 -4
  67. package/components/table/TableColumn.d.ts +8 -1
  68. package/components/table/TableColumn.js +66 -64
  69. package/components/table/TableColumn.js.map +1 -1
  70. package/components/table/TableExpandedRow.d.ts +4 -0
  71. package/components/table/TableExpandedRow.js +70 -67
  72. package/components/table/TableExpandedRow.js.map +1 -1
  73. package/components/table/TableGroupRow.d.ts +3 -1
  74. package/components/table/TableGroupRow.js +15 -14
  75. package/components/table/TableGroupRow.js.map +1 -1
  76. package/components/table/TableHeader.d.ts +9 -0
  77. package/components/table/TableHeader.js +110 -81
  78. package/components/table/TableHeader.js.map +1 -1
  79. package/components/table/TableHeaderColumn.d.ts +11 -1
  80. package/components/table/TableHeaderColumn.js +63 -58
  81. package/components/table/TableHeaderColumn.js.map +1 -1
  82. package/components/table/TableRow.d.ts +12 -0
  83. package/components/table/TableRow.js +78 -74
  84. package/components/table/TableRow.js.map +1 -1
  85. package/components/table/TableRowActionsDropdown.d.ts +11 -0
  86. package/components/table/TableRowActionsDropdown.js +22 -0
  87. package/components/table/TableRowActionsDropdown.js.map +1 -0
  88. package/components/table/TableStickyRowButton.d.ts +25 -0
  89. package/components/table/TableStickyRowButton.js +32 -0
  90. package/components/table/TableStickyRowButton.js.map +1 -0
  91. package/components/table/TableToolbar.d.ts +24 -3
  92. package/components/table/TableToolbar.js +78 -37
  93. package/components/table/TableToolbar.js.map +1 -1
  94. package/components/table/TableViewToggles.js +5 -5
  95. package/components/table/TableViewToggles.js.map +1 -1
  96. package/components/table/context/TableInteractionContext.d.ts +3 -0
  97. package/components/table/context/TableInteractionContext.js.map +1 -1
  98. package/components/table/context/TableLayoutContext.d.ts +1 -0
  99. package/components/table/context/TableLayoutContext.js.map +1 -1
  100. package/components/table/context/TableRenderContext.d.ts +1 -0
  101. package/components/table/context/TableRenderContext.js.map +1 -1
  102. package/components/table/layout/useHorizontalSectionSync.d.ts +2 -1
  103. package/components/table/layout/useHorizontalSectionSync.js +32 -31
  104. package/components/table/layout/useHorizontalSectionSync.js.map +1 -1
  105. package/components/table/layout/useMeasuredColumnMaxWidths.js +52 -54
  106. package/components/table/layout/useMeasuredColumnMaxWidths.js.map +1 -1
  107. package/components/table/layout/useTableLayout.d.ts +6 -2
  108. package/components/table/layout/useTableLayout.js +61 -48
  109. package/components/table/layout/useTableLayout.js.map +1 -1
  110. package/components/table/layout/useTableVirtualization.js +51 -56
  111. package/components/table/layout/useTableVirtualization.js.map +1 -1
  112. package/components/table/model/resolveResponsiveViewType.d.ts +2 -0
  113. package/components/table/model/resolveResponsiveViewType.js +27 -0
  114. package/components/table/model/resolveResponsiveViewType.js.map +1 -0
  115. package/components/table/render/header/TableDraggableHeaderCell.js +38 -36
  116. package/components/table/render/header/TableDraggableHeaderCell.js.map +1 -1
  117. package/components/table/render/header/TableHeader.types.d.ts +2 -0
  118. package/components/table/render/header/TableHeaderCellContent.js +16 -16
  119. package/components/table/render/header/TableHeaderCellContent.js.map +1 -1
  120. package/components/table/render/header/TableHeaderSelectionCell.d.ts +1 -0
  121. package/components/table/render/header/TableHeaderSelectionCell.js +13 -12
  122. package/components/table/render/header/TableHeaderSelectionCell.js.map +1 -1
  123. package/components/table/render/header/TableStaticHeaderCell.js +31 -29
  124. package/components/table/render/header/TableStaticHeaderCell.js.map +1 -1
  125. package/components/table/render/header/resolveHeaderCellClassName.d.ts +1 -0
  126. package/components/table/render/header/resolveHeaderCellClassName.js +10 -9
  127. package/components/table/render/header/resolveHeaderCellClassName.js.map +1 -1
  128. package/components/table/runtime/useResolvedRenderColumns.d.ts +4 -4
  129. package/components/table/runtime/useResolvedRenderColumns.js +13 -13
  130. package/components/table/runtime/useResolvedRenderColumns.js.map +1 -1
  131. package/components/table/runtime/useResolvedRenderHeader.d.ts +1 -1
  132. package/components/table/runtime/useResolvedRenderHeader.js.map +1 -1
  133. package/components/table/runtime/useResponsiveResolvedViewType.d.ts +23 -0
  134. package/components/table/runtime/useResponsiveResolvedViewType.js +22 -0
  135. package/components/table/runtime/useResponsiveResolvedViewType.js.map +1 -0
  136. package/components/table/selection/useInternalTableSelectionState.d.ts +2 -0
  137. package/components/table/selection/useInternalTableSelectionState.js +27 -17
  138. package/components/table/selection/useInternalTableSelectionState.js.map +1 -1
  139. package/components/table/selection/useTableSelection.d.ts +5 -1
  140. package/components/table/selection/useTableSelection.js +37 -26
  141. package/components/table/selection/useTableSelection.js.map +1 -1
  142. package/components/table/shared/parsePixelSize.d.ts +2 -0
  143. package/components/table/shared/parsePixelSize.js +13 -0
  144. package/components/table/shared/parsePixelSize.js.map +1 -0
  145. package/hooks/useDraggableElement.d.ts +27 -5
  146. package/hooks/useDraggableElement.js +100 -23
  147. package/hooks/useDraggableElement.js.map +1 -1
  148. package/hooks/usePopperDropdown.d.ts +1 -0
  149. package/hooks/usePopperDropdown.js +15 -12
  150. package/hooks/usePopperDropdown.js.map +1 -1
  151. package/hooks/useResizeObserver.d.ts +25 -6
  152. package/hooks/useResizeObserver.js +20 -18
  153. package/hooks/useResizeObserver.js.map +1 -1
  154. package/package.json +10 -10
  155. package/utils/analytics/createAnalyticsOverlayTooltip.js.map +1 -1
  156. package/utils/init/initConfig.js +5 -5
  157. package/utils/init/initConfig.js.map +1 -1
  158. package/version.d.ts +1 -1
  159. package/version.js +2 -2
  160. package/version.js.map +1 -1
@@ -1,85 +1,83 @@
1
- import { useState as S, useRef as p, useMemo as w, useLayoutEffect as R } from "react";
2
- const A = 1, E = (t) => {
1
+ import { useState as A, useRef as z, useMemo as F, useLayoutEffect as N } from "react";
2
+ import a from "../../../hooks/useResizeObserver.js";
3
+ const j = 1, x = (t) => {
3
4
  const e = t?.trim().match(/^(-?\d+(?:\.\d+)?)px$/);
4
5
  return e ? Number(e[1]) : void 0;
5
- }, x = (t) => {
6
+ }, C = (t) => {
6
7
  const e = t.getBoundingClientRect().width;
7
8
  return e > 0 ? Math.ceil(e) : t.scrollWidth;
8
- }, O = (t) => {
9
+ }, P = (t) => {
9
10
  if (!t)
10
11
  return 0;
11
12
  const e = window.getComputedStyle(t), n = Number.parseFloat(e.columnGap || e.gap || "0");
12
13
  return Number.isFinite(n) ? Math.ceil(n) : 0;
13
- }, q = (t) => {
14
+ }, T = (t) => {
14
15
  const e = t.querySelector(".table-head-label");
15
16
  if (e) {
16
- const s = t.querySelector(".sort-arrows");
17
- return x(e) + (s ? x(s) : 0) + (s ? O(t.querySelector(".table-head-button")) : 0);
17
+ const o = t.querySelector(".sort-arrows");
18
+ return C(e) + (o ? C(o) : 0) + (o ? P(t.querySelector(".table-head-button")) : 0);
18
19
  }
19
20
  return (t.querySelector(".table-cell-content, .table-head-button-label") ?? t).scrollWidth;
20
- }, z = (t, e) => Object.fromEntries(
21
- Object.entries(e).map(([n, s]) => {
22
- const i = t[n], u = E(i), r = E(s);
21
+ }, _ = (t, e) => Object.fromEntries(
22
+ Object.entries(e).map(([n, o]) => {
23
+ const u = t[n], i = x(u), r = x(o);
23
24
  return [
24
25
  n,
25
- u !== void 0 && r !== void 0 && Math.abs(u - r) <= A ? i : s
26
+ i !== void 0 && r !== void 0 && Math.abs(i - r) <= j ? u : o
26
27
  ];
27
28
  })
28
- ), P = (t) => {
29
- const { columns: e, enabled: n, tableWrapperRef: s } = t, [i, u] = S({}), r = p(""), a = p({}), y = w(
30
- () => e.map((o) => `${o.key}:${o.width === void 0 ? "auto" : String(o.width)}`).join("|"),
29
+ ), D = (t) => {
30
+ const { columns: e, enabled: n, tableWrapperRef: o } = t, [u, i] = A({}), r = z(""), c = z({}), g = F(
31
+ () => e.map((l) => `${l.key}:${l.width === void 0 ? "auto" : String(l.width)}`).join("|"),
31
32
  [e]
32
- );
33
- return R(() => {
34
- const o = s.current;
35
- if (!n || !o) {
36
- r.current && (r.current = "", a.current = {}, u({}));
33
+ ), s = o.current, v = s?.querySelector(".table-head") ?? null, w = s?.querySelector(".table-body") ?? null, R = s?.querySelector(".table-footer") ?? null, q = s?.querySelector(".table-scroll-content") ?? null, [, , b] = a(s), [, , S] = a(v), [, , M] = a(w), [, , f] = a(R), [, , p] = a(q);
34
+ return N(() => {
35
+ if (!n || !s) {
36
+ r.current && (r.current = "", c.current = {}, i({}));
37
37
  return;
38
38
  }
39
39
  if (e.length === 0) {
40
- r.current && (r.current = "", a.current = {}, u({}));
40
+ r.current && (r.current = "", c.current = {}, i({}));
41
41
  return;
42
42
  }
43
- const h = e.filter((c) => c.width === void 0);
44
- if (h.length === 0) {
45
- r.current && (r.current = "", a.current = {}, u({}));
43
+ const l = e.filter((d) => d.width === void 0);
44
+ if (l.length === 0) {
45
+ r.current && (r.current = "", c.current = {}, i({}));
46
46
  return;
47
47
  }
48
- const m = () => {
49
- const c = Array.from(o.querySelectorAll("[data-column]")), C = Object.fromEntries(
50
- h.flatMap((M) => {
51
- const W = c.filter((d) => d.dataset.column === M.key).reduce(
52
- (d, g) => Math.max(d, q(g)),
48
+ (() => {
49
+ const d = Array.from(s.querySelectorAll("[data-column]")), k = Object.fromEntries(
50
+ l.flatMap((E) => {
51
+ const y = d.filter((h) => h.dataset.column === E.key).reduce(
52
+ (h, O) => Math.max(h, T(O)),
53
53
  0
54
54
  );
55
- return W > 0 ? [[M.key, `${Math.ceil(W)}px`]] : [];
55
+ return y > 0 ? [[E.key, `${Math.ceil(y)}px`]] : [];
56
56
  })
57
- ), l = z(
58
- a.current,
59
- C
60
- ), f = JSON.stringify(l);
61
- f !== r.current && (r.current = f, a.current = l, u(l));
62
- };
63
- m();
64
- const v = [
65
- o,
66
- ...Array.from(
67
- o.querySelectorAll(
68
- ".table-head, .table-body, .table-footer, .table-scroll-content"
69
- )
70
- )
71
- ], b = new ResizeObserver(() => {
72
- m();
73
- });
74
- return v.forEach((c) => {
75
- b.observe(c);
76
- }), () => {
77
- b.disconnect();
78
- };
79
- }, [y, n, s]), i;
57
+ ), m = _(
58
+ c.current,
59
+ k
60
+ ), W = JSON.stringify(m);
61
+ W !== r.current && (r.current = W, c.current = m, i(m));
62
+ })();
63
+ }, [
64
+ g,
65
+ n,
66
+ s,
67
+ b.blockSize,
68
+ b.inlineSize,
69
+ S.blockSize,
70
+ S.inlineSize,
71
+ M.blockSize,
72
+ M.inlineSize,
73
+ f.blockSize,
74
+ f.inlineSize,
75
+ p.blockSize,
76
+ p.inlineSize
77
+ ]), u;
80
78
  };
81
79
  export {
82
- z as stabilizeMeasuredColumnMaxWidths,
83
- P as useMeasuredColumnMaxWidths
80
+ _ as stabilizeMeasuredColumnMaxWidths,
81
+ D as useMeasuredColumnMaxWidths
84
82
  };
85
83
  //# sourceMappingURL=useMeasuredColumnMaxWidths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMeasuredColumnMaxWidths.js","sources":["../../../../src/components/table/layout/useMeasuredColumnMaxWidths.ts"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState, type RefObject } from 'react';\n\nimport type { TableColumnDefinition, TableRowData } from '../Table.types';\n\nconst MEASURED_WIDTH_JITTER_TOLERANCE_PX = 1;\n\nconst parsePixelWidth = (width?: string) => {\n const match = width?.trim().match(/^(-?\\d+(?:\\.\\d+)?)px$/);\n\n return match ? Number(match[1]) : undefined;\n};\n\nconst measureRenderedWidth = (element: HTMLElement) => {\n const renderedWidth = element.getBoundingClientRect().width;\n\n return renderedWidth > 0 ? Math.ceil(renderedWidth) : element.scrollWidth;\n};\n\nconst resolveFlexGapWidth = (element: HTMLElement | null) => {\n if (!element) {\n return 0;\n }\n\n const styles = window.getComputedStyle(element);\n const gap = Number.parseFloat(styles.columnGap || styles.gap || '0');\n\n return Number.isFinite(gap) ? Math.ceil(gap) : 0;\n};\n\nconst measureColumnContentWidth = (element: HTMLElement) => {\n const headerLabelElement = element.querySelector<HTMLElement>('.table-head-label');\n\n if (headerLabelElement) {\n const sortArrowsElement = element.querySelector<HTMLElement>('.sort-arrows');\n\n return (\n measureRenderedWidth(headerLabelElement) +\n (sortArrowsElement ? measureRenderedWidth(sortArrowsElement) : 0) +\n (sortArrowsElement ? resolveFlexGapWidth(element.querySelector<HTMLElement>('.table-head-button')) : 0)\n );\n }\n\n const contentElement =\n element.querySelector<HTMLElement>('.table-cell-content, .table-head-button-label') ?? element;\n\n return contentElement.scrollWidth;\n};\n\nexport const stabilizeMeasuredColumnMaxWidths = (\n previousMeasuredColumnMaxWidths: Record<string, string>,\n nextMeasuredColumnMaxWidths: Record<string, string>\n) =>\n Object.fromEntries(\n Object.entries(nextMeasuredColumnMaxWidths).map(([columnKey, nextMeasuredWidth]) => {\n const previousMeasuredWidth = previousMeasuredColumnMaxWidths[columnKey];\n const previousMeasuredWidthPx = parsePixelWidth(previousMeasuredWidth);\n const nextMeasuredWidthPx = parsePixelWidth(nextMeasuredWidth);\n\n return [\n columnKey,\n previousMeasuredWidthPx !== undefined &&\n nextMeasuredWidthPx !== undefined &&\n Math.abs(previousMeasuredWidthPx - nextMeasuredWidthPx) <= MEASURED_WIDTH_JITTER_TOLERANCE_PX\n ? previousMeasuredWidth\n : nextMeasuredWidth,\n ];\n })\n );\n\ntype UseMeasuredColumnMaxWidthsProps<RowType extends TableRowData> = {\n columns: TableColumnDefinition<RowType>[];\n enabled: boolean;\n tableWrapperRef: RefObject<HTMLDivElement | null>;\n};\n\nexport const useMeasuredColumnMaxWidths = <RowType extends TableRowData>(\n props: UseMeasuredColumnMaxWidthsProps<RowType>\n) => {\n const { columns, enabled, tableWrapperRef } = props;\n const [measuredColumnMaxWidths, setMeasuredColumnMaxWidths] = useState<Record<string, string>>({});\n const previousMeasuredWidthsRef = useRef('');\n const previousMeasuredColumnMaxWidthsRef = useRef<Record<string, string>>({});\n const columnsSignature = useMemo(\n () =>\n columns\n .map(column => `${column.key}:${column.width === undefined ? 'auto' : String(column.width)}`)\n .join('|'),\n [columns]\n );\n\n useLayoutEffect(() => {\n const wrapperElement = tableWrapperRef.current;\n\n if (!enabled || !wrapperElement) {\n if (previousMeasuredWidthsRef.current) {\n previousMeasuredWidthsRef.current = '';\n previousMeasuredColumnMaxWidthsRef.current = {};\n setMeasuredColumnMaxWidths({});\n }\n\n return;\n }\n\n if (columns.length === 0) {\n if (previousMeasuredWidthsRef.current) {\n previousMeasuredWidthsRef.current = '';\n previousMeasuredColumnMaxWidthsRef.current = {};\n setMeasuredColumnMaxWidths({});\n }\n\n return;\n }\n\n const columnsWithoutWidth = columns.filter(column => column.width === undefined);\n\n if (columnsWithoutWidth.length === 0) {\n if (previousMeasuredWidthsRef.current) {\n previousMeasuredWidthsRef.current = '';\n previousMeasuredColumnMaxWidthsRef.current = {};\n setMeasuredColumnMaxWidths({});\n }\n\n return;\n }\n\n const measureColumnMaxWidths = () => {\n const columnElements = Array.from(wrapperElement.querySelectorAll<HTMLElement>('[data-column]'));\n const nextMeasuredColumnMaxWidths = Object.fromEntries(\n columnsWithoutWidth.flatMap(column => {\n const matchingElements = columnElements.filter(element => element.dataset.column === column.key);\n const measuredWidth = matchingElements.reduce(\n (largestWidth, element) => Math.max(largestWidth, measureColumnContentWidth(element)),\n 0\n );\n\n return measuredWidth > 0 ? [[column.key, `${Math.ceil(measuredWidth)}px`]] : [];\n })\n );\n const stabilizedMeasuredColumnMaxWidths = stabilizeMeasuredColumnMaxWidths(\n previousMeasuredColumnMaxWidthsRef.current,\n nextMeasuredColumnMaxWidths\n );\n const serializedMeasuredWidths = JSON.stringify(stabilizedMeasuredColumnMaxWidths);\n\n if (serializedMeasuredWidths !== previousMeasuredWidthsRef.current) {\n previousMeasuredWidthsRef.current = serializedMeasuredWidths;\n previousMeasuredColumnMaxWidthsRef.current = stabilizedMeasuredColumnMaxWidths;\n setMeasuredColumnMaxWidths(stabilizedMeasuredColumnMaxWidths);\n }\n };\n\n measureColumnMaxWidths();\n\n const observedElements = [\n wrapperElement,\n ...Array.from(\n wrapperElement.querySelectorAll<HTMLElement>(\n '.table-head, .table-body, .table-footer, .table-scroll-content'\n )\n ),\n ];\n const resizeObserver = new ResizeObserver(() => {\n measureColumnMaxWidths();\n });\n\n observedElements.forEach(element => {\n resizeObserver.observe(element);\n });\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [columnsSignature, enabled, tableWrapperRef]);\n\n return measuredColumnMaxWidths;\n};\n"],"names":["MEASURED_WIDTH_JITTER_TOLERANCE_PX","parsePixelWidth","width","match","measureRenderedWidth","element","renderedWidth","resolveFlexGapWidth","styles","gap","measureColumnContentWidth","headerLabelElement","sortArrowsElement","stabilizeMeasuredColumnMaxWidths","previousMeasuredColumnMaxWidths","nextMeasuredColumnMaxWidths","columnKey","nextMeasuredWidth","previousMeasuredWidth","previousMeasuredWidthPx","nextMeasuredWidthPx","useMeasuredColumnMaxWidths","props","columns","enabled","tableWrapperRef","measuredColumnMaxWidths","setMeasuredColumnMaxWidths","useState","previousMeasuredWidthsRef","useRef","previousMeasuredColumnMaxWidthsRef","columnsSignature","useMemo","column","useLayoutEffect","wrapperElement","columnsWithoutWidth","measureColumnMaxWidths","columnElements","measuredWidth","largestWidth","stabilizedMeasuredColumnMaxWidths","serializedMeasuredWidths","observedElements","resizeObserver"],"mappings":"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"}
1
+ {"version":3,"file":"useMeasuredColumnMaxWidths.js","sources":["../../../../src/components/table/layout/useMeasuredColumnMaxWidths.ts"],"sourcesContent":["import { useLayoutEffect, useMemo, useRef, useState, type RefObject } from 'react';\n\nimport useResizeObserver from '../../../useResizeObserver';\nimport type { TableColumnDefinition, TableRowData } from '../Table.types';\n\nconst MEASURED_WIDTH_JITTER_TOLERANCE_PX = 1;\n\nconst parsePixelWidth = (width?: string) => {\n const match = width?.trim().match(/^(-?\\d+(?:\\.\\d+)?)px$/);\n\n return match ? Number(match[1]) : undefined;\n};\n\nconst measureRenderedWidth = (element: HTMLElement) => {\n const renderedWidth = element.getBoundingClientRect().width;\n\n return renderedWidth > 0 ? Math.ceil(renderedWidth) : element.scrollWidth;\n};\n\nconst resolveFlexGapWidth = (element: HTMLElement | null) => {\n if (!element) {\n return 0;\n }\n\n const styles = window.getComputedStyle(element);\n const gap = Number.parseFloat(styles.columnGap || styles.gap || '0');\n\n return Number.isFinite(gap) ? Math.ceil(gap) : 0;\n};\n\nconst measureColumnContentWidth = (element: HTMLElement) => {\n const headerLabelElement = element.querySelector<HTMLElement>('.table-head-label');\n\n if (headerLabelElement) {\n const sortArrowsElement = element.querySelector<HTMLElement>('.sort-arrows');\n\n return (\n measureRenderedWidth(headerLabelElement) +\n (sortArrowsElement ? measureRenderedWidth(sortArrowsElement) : 0) +\n (sortArrowsElement ? resolveFlexGapWidth(element.querySelector<HTMLElement>('.table-head-button')) : 0)\n );\n }\n\n const contentElement =\n element.querySelector<HTMLElement>('.table-cell-content, .table-head-button-label') ?? element;\n\n return contentElement.scrollWidth;\n};\n\nexport const stabilizeMeasuredColumnMaxWidths = (\n previousMeasuredColumnMaxWidths: Record<string, string>,\n nextMeasuredColumnMaxWidths: Record<string, string>\n) =>\n Object.fromEntries(\n Object.entries(nextMeasuredColumnMaxWidths).map(([columnKey, nextMeasuredWidth]) => {\n const previousMeasuredWidth = previousMeasuredColumnMaxWidths[columnKey];\n const previousMeasuredWidthPx = parsePixelWidth(previousMeasuredWidth);\n const nextMeasuredWidthPx = parsePixelWidth(nextMeasuredWidth);\n\n return [\n columnKey,\n previousMeasuredWidthPx !== undefined &&\n nextMeasuredWidthPx !== undefined &&\n Math.abs(previousMeasuredWidthPx - nextMeasuredWidthPx) <= MEASURED_WIDTH_JITTER_TOLERANCE_PX\n ? previousMeasuredWidth\n : nextMeasuredWidth,\n ];\n })\n );\n\ntype UseMeasuredColumnMaxWidthsProps<RowType extends TableRowData> = {\n columns: TableColumnDefinition<RowType>[];\n enabled: boolean;\n tableWrapperRef: RefObject<HTMLDivElement | null>;\n};\n\nexport const useMeasuredColumnMaxWidths = <RowType extends TableRowData>(\n props: UseMeasuredColumnMaxWidthsProps<RowType>\n) => {\n const { columns, enabled, tableWrapperRef } = props;\n const [measuredColumnMaxWidths, setMeasuredColumnMaxWidths] = useState<Record<string, string>>({});\n const previousMeasuredWidthsRef = useRef('');\n const previousMeasuredColumnMaxWidthsRef = useRef<Record<string, string>>({});\n const columnsSignature = useMemo(\n () =>\n columns\n .map(column => `${column.key}:${column.width === undefined ? 'auto' : String(column.width)}`)\n .join('|'),\n [columns]\n );\n const wrapperElement = tableWrapperRef.current;\n const tableHeadElement = wrapperElement?.querySelector<HTMLDivElement>('.table-head') ?? null;\n const tableBodyElement = wrapperElement?.querySelector<HTMLDivElement>('.table-body') ?? null;\n const tableFooterElement = wrapperElement?.querySelector<HTMLDivElement>('.table-footer') ?? null;\n const tableScrollContentElement = wrapperElement?.querySelector<HTMLDivElement>('.table-scroll-content') ?? null;\n const [, , wrapperSize] = useResizeObserver(wrapperElement);\n const [, , tableHeadSize] = useResizeObserver(tableHeadElement);\n const [, , tableBodySize] = useResizeObserver(tableBodyElement);\n const [, , tableFooterSize] = useResizeObserver(tableFooterElement);\n const [, , tableScrollContentSize] = useResizeObserver(tableScrollContentElement);\n\n useLayoutEffect(() => {\n if (!enabled || !wrapperElement) {\n if (previousMeasuredWidthsRef.current) {\n previousMeasuredWidthsRef.current = '';\n previousMeasuredColumnMaxWidthsRef.current = {};\n setMeasuredColumnMaxWidths({});\n }\n\n return;\n }\n\n if (columns.length === 0) {\n if (previousMeasuredWidthsRef.current) {\n previousMeasuredWidthsRef.current = '';\n previousMeasuredColumnMaxWidthsRef.current = {};\n setMeasuredColumnMaxWidths({});\n }\n\n return;\n }\n\n const columnsWithoutWidth = columns.filter(column => column.width === undefined);\n\n if (columnsWithoutWidth.length === 0) {\n if (previousMeasuredWidthsRef.current) {\n previousMeasuredWidthsRef.current = '';\n previousMeasuredColumnMaxWidthsRef.current = {};\n setMeasuredColumnMaxWidths({});\n }\n\n return;\n }\n\n const measureColumnMaxWidths = () => {\n const columnElements = Array.from(wrapperElement.querySelectorAll<HTMLElement>('[data-column]'));\n const nextMeasuredColumnMaxWidths = Object.fromEntries(\n columnsWithoutWidth.flatMap(column => {\n const matchingElements = columnElements.filter(element => element.dataset.column === column.key);\n const measuredWidth = matchingElements.reduce(\n (largestWidth, element) => Math.max(largestWidth, measureColumnContentWidth(element)),\n 0\n );\n\n return measuredWidth > 0 ? [[column.key, `${Math.ceil(measuredWidth)}px`]] : [];\n })\n );\n const stabilizedMeasuredColumnMaxWidths = stabilizeMeasuredColumnMaxWidths(\n previousMeasuredColumnMaxWidthsRef.current,\n nextMeasuredColumnMaxWidths\n );\n const serializedMeasuredWidths = JSON.stringify(stabilizedMeasuredColumnMaxWidths);\n\n if (serializedMeasuredWidths !== previousMeasuredWidthsRef.current) {\n previousMeasuredWidthsRef.current = serializedMeasuredWidths;\n previousMeasuredColumnMaxWidthsRef.current = stabilizedMeasuredColumnMaxWidths;\n setMeasuredColumnMaxWidths(stabilizedMeasuredColumnMaxWidths);\n }\n };\n\n measureColumnMaxWidths();\n }, [\n columnsSignature,\n enabled,\n wrapperElement,\n wrapperSize.blockSize,\n wrapperSize.inlineSize,\n tableHeadSize.blockSize,\n tableHeadSize.inlineSize,\n tableBodySize.blockSize,\n tableBodySize.inlineSize,\n tableFooterSize.blockSize,\n tableFooterSize.inlineSize,\n tableScrollContentSize.blockSize,\n tableScrollContentSize.inlineSize,\n ]);\n\n return measuredColumnMaxWidths;\n};\n"],"names":["MEASURED_WIDTH_JITTER_TOLERANCE_PX","parsePixelWidth","width","match","measureRenderedWidth","element","renderedWidth","resolveFlexGapWidth","styles","gap","measureColumnContentWidth","headerLabelElement","sortArrowsElement","stabilizeMeasuredColumnMaxWidths","previousMeasuredColumnMaxWidths","nextMeasuredColumnMaxWidths","columnKey","nextMeasuredWidth","previousMeasuredWidth","previousMeasuredWidthPx","nextMeasuredWidthPx","useMeasuredColumnMaxWidths","props","columns","enabled","tableWrapperRef","measuredColumnMaxWidths","setMeasuredColumnMaxWidths","useState","previousMeasuredWidthsRef","useRef","previousMeasuredColumnMaxWidthsRef","columnsSignature","useMemo","column","wrapperElement","tableHeadElement","tableBodyElement","tableFooterElement","tableScrollContentElement","wrapperSize","useResizeObserver","tableHeadSize","tableBodySize","tableFooterSize","tableScrollContentSize","useLayoutEffect","columnsWithoutWidth","columnElements","measuredWidth","largestWidth","stabilizedMeasuredColumnMaxWidths","serializedMeasuredWidths"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { CSSProperties } from 'react';
2
- import { TableCardsStyleSettings, TableColumnDefinition, TableRowData } from '../Table.types';
2
+ import { TableCardsStyleSettings, TableColumnDefinition, TableRowData, TableStickyReference } from '../Table.types';
3
3
  export type TableColumnWithArea<RowType extends TableRowData> = {
4
4
  column: TableColumnDefinition<RowType>;
5
5
  columnIndex: number;
@@ -12,6 +12,7 @@ type UseTableLayoutProps<RowType extends TableRowData> = {
12
12
  hasFooterCells?: boolean;
13
13
  rowSeparatorWidth?: number | string;
14
14
  showSelectionColumn?: boolean;
15
+ stickyReference?: TableStickyReference;
15
16
  style?: CSSProperties;
16
17
  };
17
18
  type InternalTableStyle = CSSProperties & {
@@ -21,16 +22,19 @@ type InternalTableStyle = CSSProperties & {
21
22
  '--table-cards-max'?: string;
22
23
  '--table-column-count'?: string;
23
24
  '--table-row-separator-width'?: string;
25
+ '--table-sticky-reference-top'?: string;
24
26
  '--table-width'?: string;
25
27
  };
26
28
  export declare const useTableLayout: <RowType extends TableRowData>(props: UseTableLayoutProps<RowType>) => {
27
29
  columnsWithAreas: TableColumnWithArea<RowType>[];
28
30
  handleBodyScroll: (event: import('react').UIEvent<HTMLElement> | undefined) => void;
29
- hasHorizontalScrollOffset: boolean;
31
+ hasHorizontalScrollEndOffset: boolean;
32
+ hasHorizontalScrollStartOffset: boolean;
30
33
  tableUseOverflow: boolean;
31
34
  tableWrapperRef: import('react').MutableRefObject<HTMLDivElement | null>;
32
35
  tableFooterRowRef: import('react').RefObject<HTMLDivElement>;
33
36
  tableHeadRowRef: import('react').RefObject<HTMLDivElement>;
37
+ wrapperWidth: number | undefined;
34
38
  wrapperStyle: InternalTableStyle;
35
39
  };
36
40
  export {};
@@ -1,59 +1,72 @@
1
- import { useMeasuredColumnMaxWidths as N } from "./useMeasuredColumnMaxWidths.js";
2
- import { MIN_COLUMN_WIDTH_PX as O } from "../tableSizing.constants.js";
3
- import { toCssSize as l, getColumnTrack as R } from "./columnSizing.js";
4
- import { useHorizontalSectionSync as L } from "./useHorizontalSectionSync.js";
1
+ import L from "../shared/parsePixelSize.js";
2
+ import { useMeasuredColumnMaxWidths as k } from "./useMeasuredColumnMaxWidths.js";
3
+ import { MIN_COLUMN_WIDTH_PX as N } from "../tableSizing.constants.js";
4
+ import { toCssSize as i, getColumnTrack as B } from "./columnSizing.js";
5
+ import { useHorizontalSectionSync as E } from "./useHorizontalSectionSync.js";
5
6
  import $ from "../../../hooks/useResizeObserver.js";
6
- const h = 50, B = (r) => {
7
- if (!r)
8
- return;
9
- const a = r.trim().match(/^(-?\d+(?:\.\d+)?)px$/);
10
- if (a)
11
- return Number(a[1]);
12
- }, j = (r) => {
13
- const { bodyMaxHeight: a, cardsStyle: d, columns: n, hasFooterCells: p, rowSeparatorWidth: u, showSelectionColumn: i, style: b } = r, [c, , { inlineSize: f }] = $(), t = n.map((e, o) => ({
7
+ const d = 50, F = (m) => {
8
+ const {
9
+ bodyMaxHeight: p,
10
+ cardsStyle: s,
11
+ columns: r,
12
+ hasFooterCells: h,
13
+ rowSeparatorWidth: f,
14
+ showSelectionColumn: n,
15
+ stickyReference: b = "applicationLayout",
16
+ style: u
17
+ } = m, [l, , { inlineSize: S }] = $(), t = r.map((e, a) => ({
14
18
  column: e,
15
- columnIndex: o,
16
- areaName: `table-col-${o + 1}`
17
- })), s = f ?? c.current?.clientWidth, W = (i ? h : 0) + n.reduce((e, o) => {
18
- if (o.width === void 0)
19
- return e + O;
20
- const H = B(l(o.width));
21
- return e + (H ?? 0);
22
- }, 0), m = s !== void 0 && W > s, S = s !== void 0 ? `${s}px` : "100%", { handleBodyScroll: w, hasHorizontalScrollOffset: x, tableFooterRowRef: C, tableHeadRowRef: M } = L({
23
- enabled: !!a,
24
- hasFooterCells: p
25
- }), T = N({
26
- columns: n,
27
- enabled: m,
28
- tableWrapperRef: c
29
- }), g = t.length > 0 ? [
30
- i ? `${h}px` : void 0,
31
- ...t.map(({ column: e }) => R(e, T[e.key]))
32
- ].filter(Boolean).join(" ") : "minmax(0, 1fr)", y = t.length > 0 ? `"${[
33
- i ? "table-selection" : void 0,
19
+ columnIndex: a,
20
+ areaName: `table-col-${a + 1}`
21
+ })), o = S ?? l.current?.clientWidth, W = (n ? d : 0) + r.reduce((e, a) => {
22
+ if (a.width === void 0)
23
+ return e + N;
24
+ const _ = L(i(a.width));
25
+ return e + (_ ?? 0);
26
+ }, 0), c = o !== void 0 && W > o, w = o !== void 0 ? `${o}px` : "100%", {
27
+ handleBodyScroll: y,
28
+ hasHorizontalScrollEndOffset: x,
29
+ hasHorizontalScrollStartOffset: C,
30
+ tableFooterRowRef: M,
31
+ tableHeadRowRef: T
32
+ } = E({
33
+ enabled: !!p,
34
+ hasFooterCells: h
35
+ }), g = k({
36
+ columns: r,
37
+ enabled: c,
38
+ tableWrapperRef: l
39
+ }), v = t.length > 0 ? [
40
+ n ? `${d}px` : void 0,
41
+ ...t.map(({ column: e }) => B(e, g[e.key]))
42
+ ].filter(Boolean).join(" ") : "minmax(0, 1fr)", z = t.length > 0 ? `"${[
43
+ n ? "table-selection" : void 0,
34
44
  ...t.map(({ areaName: e }) => e)
35
- ].filter(Boolean).join(" ")}"` : "none", _ = l(d?.minWidth) ?? "280px", v = l(d?.maxWidth) ?? "1fr", z = {
36
- ...b ?? {},
37
- "--table-columns": g,
38
- "--table-areas": y,
39
- "--table-cards-min": _,
40
- "--table-cards-max": v,
41
- "--table-column-count": String(n.length + (i ? 1 : 0)),
42
- "--table-row-separator-width": l(u),
43
- "--table-width": S
45
+ ].filter(Boolean).join(" ")}"` : "none", H = i(s?.minWidth), O = i(s?.maxWidth), R = {
46
+ ...u ?? {},
47
+ "--table-columns": v,
48
+ "--table-areas": z,
49
+ "--table-cards-min": H,
50
+ "--table-cards-max": O,
51
+ "--table-column-count": String(r.length + (n ? 1 : 0)),
52
+ "--table-row-separator-width": i(f),
53
+ "--table-sticky-reference-top": b === "container" ? "0px" : "var(--table-sticky-offset)",
54
+ "--table-width": w
44
55
  };
45
56
  return {
46
57
  columnsWithAreas: t,
47
- handleBodyScroll: w,
48
- hasHorizontalScrollOffset: x,
49
- tableUseOverflow: m,
50
- tableWrapperRef: c,
51
- tableFooterRowRef: C,
52
- tableHeadRowRef: M,
53
- wrapperStyle: z
58
+ handleBodyScroll: y,
59
+ hasHorizontalScrollEndOffset: x,
60
+ hasHorizontalScrollStartOffset: C,
61
+ tableUseOverflow: c,
62
+ tableWrapperRef: l,
63
+ tableFooterRowRef: M,
64
+ tableHeadRowRef: T,
65
+ wrapperWidth: o,
66
+ wrapperStyle: R
54
67
  };
55
68
  };
56
69
  export {
57
- j as useTableLayout
70
+ F as useTableLayout
58
71
  };
59
72
  //# sourceMappingURL=useTableLayout.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useTableLayout.js","sources":["../../../../src/components/table/layout/useTableLayout.ts"],"sourcesContent":["import type { CSSProperties } from 'react';\n\nimport type { TableCardsStyleSettings, TableColumnDefinition, TableRowData } from '../Table.types';\nimport { useMeasuredColumnMaxWidths } from './useMeasuredColumnMaxWidths';\nimport { MIN_COLUMN_WIDTH_PX } from '../tableSizing.constants';\nimport { getColumnTrack, toCssSize } from './columnSizing';\nimport { useHorizontalSectionSync } from './useHorizontalSectionSync';\nimport useResizeObserver from '../../../useResizeObserver';\n\nconst TABLE_SELECTION_COLUMN_WIDTH_PX = 50;\n\nconst parsePixelSize = (value?: string) => {\n if (!value) {\n return;\n }\n\n const match = value.trim().match(/^(-?\\d+(?:\\.\\d+)?)px$/);\n\n if (!match) {\n return;\n }\n\n return Number(match[1]);\n};\n\nexport type TableColumnWithArea<RowType extends TableRowData> = {\n column: TableColumnDefinition<RowType>;\n columnIndex: number;\n areaName: string;\n};\n\ntype UseTableLayoutProps<RowType extends TableRowData> = {\n bodyMaxHeight?: string;\n cardsStyle?: TableCardsStyleSettings;\n columns: TableColumnDefinition<RowType>[];\n hasFooterCells?: boolean;\n rowSeparatorWidth?: number | string;\n showSelectionColumn?: boolean;\n style?: CSSProperties;\n};\n\ntype InternalTableStyle = CSSProperties & {\n '--table-columns'?: string;\n '--table-areas'?: string;\n '--table-cards-min'?: string;\n '--table-cards-max'?: string;\n '--table-column-count'?: string;\n '--table-row-separator-width'?: string;\n '--table-width'?: string;\n};\n\nexport const useTableLayout = <RowType extends TableRowData>(props: UseTableLayoutProps<RowType>) => {\n const { bodyMaxHeight, cardsStyle, columns, hasFooterCells, rowSeparatorWidth, showSelectionColumn, style } = props;\n const [tableWrapperRef, , { inlineSize }] = useResizeObserver<HTMLDivElement>();\n\n const columnsWithAreas: TableColumnWithArea<RowType>[] = columns.map((column, columnIndex) => ({\n column,\n columnIndex,\n areaName: `table-col-${columnIndex + 1}`,\n }));\n\n const wrapperWidth = inlineSize ?? tableWrapperRef.current?.clientWidth;\n\n const minWidthTotal =\n (showSelectionColumn ? TABLE_SELECTION_COLUMN_WIDTH_PX : 0) +\n columns.reduce((totalWidth, column) => {\n if (column.width === undefined) {\n return totalWidth + MIN_COLUMN_WIDTH_PX;\n }\n\n const columnWidth = parsePixelSize(toCssSize(column.width));\n\n return totalWidth + (columnWidth ?? 0);\n }, 0);\n\n const tableUseOverflow = wrapperWidth !== undefined && minWidthTotal > wrapperWidth;\n const tableWidth = wrapperWidth !== undefined ? `${wrapperWidth}px` : '100%';\n\n const { handleBodyScroll, hasHorizontalScrollOffset, tableFooterRowRef, tableHeadRowRef } =\n useHorizontalSectionSync({\n enabled: !!bodyMaxHeight,\n hasFooterCells,\n });\n\n const measuredColumnMaxWidths = useMeasuredColumnMaxWidths({\n columns,\n enabled: tableUseOverflow,\n tableWrapperRef,\n });\n\n const gridTemplateColumns =\n columnsWithAreas.length > 0\n ? [\n showSelectionColumn ? `${TABLE_SELECTION_COLUMN_WIDTH_PX}px` : undefined,\n ...columnsWithAreas.map(({ column }) => getColumnTrack(column, measuredColumnMaxWidths[column.key])),\n ]\n .filter(Boolean)\n .join(' ')\n : 'minmax(0, 1fr)';\n\n const gridTemplateAreas =\n columnsWithAreas.length > 0\n ? `\"${[\n showSelectionColumn ? 'table-selection' : undefined,\n ...columnsWithAreas.map(({ areaName }) => areaName),\n ]\n .filter(Boolean)\n .join(' ')}\"`\n : 'none';\n\n const cardsMinWidth = toCssSize(cardsStyle?.minWidth) ?? '280px';\n const cardsMaxWidth = toCssSize(cardsStyle?.maxWidth) ?? '1fr';\n\n const wrapperStyle: InternalTableStyle = {\n ...(style ?? {}),\n '--table-columns': gridTemplateColumns,\n '--table-areas': gridTemplateAreas,\n '--table-cards-min': cardsMinWidth,\n '--table-cards-max': cardsMaxWidth,\n '--table-column-count': String(columns.length + (showSelectionColumn ? 1 : 0)),\n '--table-row-separator-width': toCssSize(rowSeparatorWidth),\n '--table-width': tableWidth,\n };\n\n return {\n columnsWithAreas,\n handleBodyScroll,\n hasHorizontalScrollOffset,\n tableUseOverflow,\n tableWrapperRef,\n tableFooterRowRef,\n tableHeadRowRef,\n wrapperStyle,\n };\n};\n"],"names":["TABLE_SELECTION_COLUMN_WIDTH_PX","parsePixelSize","value","match","useTableLayout","props","bodyMaxHeight","cardsStyle","columns","hasFooterCells","rowSeparatorWidth","showSelectionColumn","style","tableWrapperRef","inlineSize","useResizeObserver","columnsWithAreas","column","columnIndex","wrapperWidth","minWidthTotal","totalWidth","MIN_COLUMN_WIDTH_PX","columnWidth","toCssSize","tableUseOverflow","tableWidth","handleBodyScroll","hasHorizontalScrollOffset","tableFooterRowRef","tableHeadRowRef","useHorizontalSectionSync","measuredColumnMaxWidths","useMeasuredColumnMaxWidths","gridTemplateColumns","getColumnTrack","gridTemplateAreas","areaName","cardsMinWidth","cardsMaxWidth","wrapperStyle"],"mappings":";;;;;AASA,MAAMA,IAAkC,IAElCC,IAAiB,CAACC,MAAmB;AACvC,MAAI,CAACA;AACD;AAGJ,QAAMC,IAAQD,EAAM,KAAA,EAAO,MAAM,uBAAuB;AAExD,MAAKC;AAIL,WAAO,OAAOA,EAAM,CAAC,CAAC;AAC1B,GA4BaC,IAAiB,CAA+BC,MAAwC;AACjG,QAAM,EAAE,eAAAC,GAAe,YAAAC,GAAY,SAAAC,GAAS,gBAAAC,GAAgB,mBAAAC,GAAmB,qBAAAC,GAAqB,OAAAC,MAAUP,GACxG,CAACQ,GAAA,EAAmB,EAAE,YAAAC,EAAA,CAAY,IAAIC,EAAA,GAEtCC,IAAmDR,EAAQ,IAAI,CAACS,GAAQC,OAAiB;AAAA,IAC3F,QAAAD;AAAA,IACA,aAAAC;AAAA,IACA,UAAU,aAAaA,IAAc,CAAC;AAAA,EAAA,EACxC,GAEIC,IAAeL,KAAcD,EAAgB,SAAS,aAEtDO,KACDT,IAAsBX,IAAkC,KACzDQ,EAAQ,OAAO,CAACa,GAAYJ,MAAW;AACnC,QAAIA,EAAO,UAAU;AACjB,aAAOI,IAAaC;AAGxB,UAAMC,IAActB,EAAeuB,EAAUP,EAAO,KAAK,CAAC;AAE1D,WAAOI,KAAcE,KAAe;AAAA,EACxC,GAAG,CAAC,GAEFE,IAAmBN,MAAiB,UAAaC,IAAgBD,GACjEO,IAAaP,MAAiB,SAAY,GAAGA,CAAY,OAAO,QAEhE,EAAE,kBAAAQ,GAAkB,2BAAAC,GAA2B,mBAAAC,GAAmB,iBAAAC,EAAA,IACpEC,EAAyB;AAAA,IACrB,SAAS,CAAC,CAACzB;AAAA,IACX,gBAAAG;AAAA,EAAA,CACH,GAECuB,IAA0BC,EAA2B;AAAA,IACvD,SAAAzB;AAAA,IACA,SAASiB;AAAA,IACT,iBAAAZ;AAAA,EAAA,CACH,GAEKqB,IACFlB,EAAiB,SAAS,IACpB;AAAA,IACIL,IAAsB,GAAGX,CAA+B,OAAO;AAAA,IAC/D,GAAGgB,EAAiB,IAAI,CAAC,EAAE,QAAAC,EAAA,MAAakB,EAAelB,GAAQe,EAAwBf,EAAO,GAAG,CAAC,CAAC;AAAA,EAAA,EAElG,OAAO,OAAO,EACd,KAAK,GAAG,IACb,kBAEJmB,IACFpB,EAAiB,SAAS,IACpB,IAAI;AAAA,IACAL,IAAsB,oBAAoB;AAAA,IAC1C,GAAGK,EAAiB,IAAI,CAAC,EAAE,UAAAqB,EAAA,MAAeA,CAAQ;AAAA,EAAA,EAEjD,OAAO,OAAO,EACd,KAAK,GAAG,CAAC,MACd,QAEJC,IAAgBd,EAAUjB,GAAY,QAAQ,KAAK,SACnDgC,IAAgBf,EAAUjB,GAAY,QAAQ,KAAK,OAEnDiC,IAAmC;AAAA,IACrC,GAAI5B,KAAS,CAAA;AAAA,IACb,mBAAmBsB;AAAA,IACnB,iBAAiBE;AAAA,IACjB,qBAAqBE;AAAA,IACrB,qBAAqBC;AAAA,IACrB,wBAAwB,OAAO/B,EAAQ,UAAUG,IAAsB,IAAI,EAAE;AAAA,IAC7E,+BAA+Ba,EAAUd,CAAiB;AAAA,IAC1D,iBAAiBgB;AAAA,EAAA;AAGrB,SAAO;AAAA,IACH,kBAAAV;AAAA,IACA,kBAAAW;AAAA,IACA,2BAAAC;AAAA,IACA,kBAAAH;AAAA,IACA,iBAAAZ;AAAA,IACA,mBAAAgB;AAAA,IACA,iBAAAC;AAAA,IACA,cAAAU;AAAA,EAAA;AAER;"}
1
+ {"version":3,"file":"useTableLayout.js","sources":["../../../../src/components/table/layout/useTableLayout.ts"],"sourcesContent":["import type { CSSProperties } from 'react';\n\nimport parsePixelSize from '../shared/parsePixelSize';\nimport type {\n TableCardsStyleSettings,\n TableColumnDefinition,\n TableRowData,\n TableStickyReference,\n} from '../Table.types';\nimport { useMeasuredColumnMaxWidths } from './useMeasuredColumnMaxWidths';\nimport { MIN_COLUMN_WIDTH_PX } from '../tableSizing.constants';\nimport { getColumnTrack, toCssSize } from './columnSizing';\nimport { useHorizontalSectionSync } from './useHorizontalSectionSync';\nimport useResizeObserver from '../../../useResizeObserver';\n\nconst TABLE_SELECTION_COLUMN_WIDTH_PX = 50;\n\nexport type TableColumnWithArea<RowType extends TableRowData> = {\n column: TableColumnDefinition<RowType>;\n columnIndex: number;\n areaName: string;\n};\n\ntype UseTableLayoutProps<RowType extends TableRowData> = {\n bodyMaxHeight?: string;\n cardsStyle?: TableCardsStyleSettings;\n columns: TableColumnDefinition<RowType>[];\n hasFooterCells?: boolean;\n rowSeparatorWidth?: number | string;\n showSelectionColumn?: boolean;\n stickyReference?: TableStickyReference;\n style?: CSSProperties;\n};\n\ntype InternalTableStyle = CSSProperties & {\n '--table-columns'?: string;\n '--table-areas'?: string;\n '--table-cards-min'?: string;\n '--table-cards-max'?: string;\n '--table-column-count'?: string;\n '--table-row-separator-width'?: string;\n '--table-sticky-reference-top'?: string;\n '--table-width'?: string;\n};\n\nexport const useTableLayout = <RowType extends TableRowData>(props: UseTableLayoutProps<RowType>) => {\n const {\n bodyMaxHeight,\n cardsStyle,\n columns,\n hasFooterCells,\n rowSeparatorWidth,\n showSelectionColumn,\n stickyReference = 'applicationLayout',\n style,\n } = props;\n const [tableWrapperRef, , { inlineSize }] = useResizeObserver<HTMLDivElement>();\n\n const columnsWithAreas: TableColumnWithArea<RowType>[] = columns.map((column, columnIndex) => ({\n column,\n columnIndex,\n areaName: `table-col-${columnIndex + 1}`,\n }));\n\n const wrapperWidth = inlineSize ?? tableWrapperRef.current?.clientWidth;\n\n const minWidthTotal =\n (showSelectionColumn ? TABLE_SELECTION_COLUMN_WIDTH_PX : 0) +\n columns.reduce((totalWidth, column) => {\n if (column.width === undefined) {\n return totalWidth + MIN_COLUMN_WIDTH_PX;\n }\n\n const columnWidth = parsePixelSize(toCssSize(column.width));\n\n return totalWidth + (columnWidth ?? 0);\n }, 0);\n\n const tableUseOverflow = wrapperWidth !== undefined && minWidthTotal > wrapperWidth;\n const tableWidth = wrapperWidth !== undefined ? `${wrapperWidth}px` : '100%';\n\n const {\n handleBodyScroll,\n hasHorizontalScrollEndOffset,\n hasHorizontalScrollStartOffset,\n tableFooterRowRef,\n tableHeadRowRef,\n } = useHorizontalSectionSync({\n enabled: !!bodyMaxHeight,\n hasFooterCells,\n });\n\n const measuredColumnMaxWidths = useMeasuredColumnMaxWidths({\n columns,\n enabled: tableUseOverflow,\n tableWrapperRef,\n });\n\n const gridTemplateColumns =\n columnsWithAreas.length > 0\n ? [\n showSelectionColumn ? `${TABLE_SELECTION_COLUMN_WIDTH_PX}px` : undefined,\n ...columnsWithAreas.map(({ column }) => getColumnTrack(column, measuredColumnMaxWidths[column.key])),\n ]\n .filter(Boolean)\n .join(' ')\n : 'minmax(0, 1fr)';\n\n const gridTemplateAreas =\n columnsWithAreas.length > 0\n ? `\"${[\n showSelectionColumn ? 'table-selection' : undefined,\n ...columnsWithAreas.map(({ areaName }) => areaName),\n ]\n .filter(Boolean)\n .join(' ')}\"`\n : 'none';\n\n const cardsMinWidth = toCssSize(cardsStyle?.minWidth);\n const cardsMaxWidth = toCssSize(cardsStyle?.maxWidth);\n\n const wrapperStyle: InternalTableStyle = {\n ...(style ?? {}),\n '--table-columns': gridTemplateColumns,\n '--table-areas': gridTemplateAreas,\n '--table-cards-min': cardsMinWidth,\n '--table-cards-max': cardsMaxWidth,\n '--table-column-count': String(columns.length + (showSelectionColumn ? 1 : 0)),\n '--table-row-separator-width': toCssSize(rowSeparatorWidth),\n '--table-sticky-reference-top': stickyReference === 'container' ? '0px' : 'var(--table-sticky-offset)',\n '--table-width': tableWidth,\n };\n\n return {\n columnsWithAreas,\n handleBodyScroll,\n hasHorizontalScrollEndOffset,\n hasHorizontalScrollStartOffset,\n tableUseOverflow,\n tableWrapperRef,\n tableFooterRowRef,\n tableHeadRowRef,\n wrapperWidth,\n wrapperStyle,\n };\n};\n"],"names":["TABLE_SELECTION_COLUMN_WIDTH_PX","useTableLayout","props","bodyMaxHeight","cardsStyle","columns","hasFooterCells","rowSeparatorWidth","showSelectionColumn","stickyReference","style","tableWrapperRef","inlineSize","useResizeObserver","columnsWithAreas","column","columnIndex","wrapperWidth","minWidthTotal","totalWidth","MIN_COLUMN_WIDTH_PX","columnWidth","parsePixelSize","toCssSize","tableUseOverflow","tableWidth","handleBodyScroll","hasHorizontalScrollEndOffset","hasHorizontalScrollStartOffset","tableFooterRowRef","tableHeadRowRef","useHorizontalSectionSync","measuredColumnMaxWidths","useMeasuredColumnMaxWidths","gridTemplateColumns","getColumnTrack","gridTemplateAreas","areaName","cardsMinWidth","cardsMaxWidth","wrapperStyle"],"mappings":";;;;;;AAeA,MAAMA,IAAkC,IA8B3BC,IAAiB,CAA+BC,MAAwC;AACjG,QAAM;AAAA,IACF,eAAAC;AAAA,IACA,YAAAC;AAAA,IACA,SAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,iBAAAC,IAAkB;AAAA,IAClB,OAAAC;AAAA,EAAA,IACAR,GACE,CAACS,GAAA,EAAmB,EAAE,YAAAC,EAAA,CAAY,IAAIC,EAAA,GAEtCC,IAAmDT,EAAQ,IAAI,CAACU,GAAQC,OAAiB;AAAA,IAC3F,QAAAD;AAAA,IACA,aAAAC;AAAA,IACA,UAAU,aAAaA,IAAc,CAAC;AAAA,EAAA,EACxC,GAEIC,IAAeL,KAAcD,EAAgB,SAAS,aAEtDO,KACDV,IAAsBR,IAAkC,KACzDK,EAAQ,OAAO,CAACc,GAAYJ,MAAW;AACnC,QAAIA,EAAO,UAAU;AACjB,aAAOI,IAAaC;AAGxB,UAAMC,IAAcC,EAAeC,EAAUR,EAAO,KAAK,CAAC;AAE1D,WAAOI,KAAcE,KAAe;AAAA,EACxC,GAAG,CAAC,GAEFG,IAAmBP,MAAiB,UAAaC,IAAgBD,GACjEQ,IAAaR,MAAiB,SAAY,GAAGA,CAAY,OAAO,QAEhE;AAAA,IACF,kBAAAS;AAAA,IACA,8BAAAC;AAAA,IACA,gCAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,iBAAAC;AAAA,EAAA,IACAC,EAAyB;AAAA,IACzB,SAAS,CAAC,CAAC5B;AAAA,IACX,gBAAAG;AAAA,EAAA,CACH,GAEK0B,IAA0BC,EAA2B;AAAA,IACvD,SAAA5B;AAAA,IACA,SAASmB;AAAA,IACT,iBAAAb;AAAA,EAAA,CACH,GAEKuB,IACFpB,EAAiB,SAAS,IACpB;AAAA,IACIN,IAAsB,GAAGR,CAA+B,OAAO;AAAA,IAC/D,GAAGc,EAAiB,IAAI,CAAC,EAAE,QAAAC,EAAA,MAAaoB,EAAepB,GAAQiB,EAAwBjB,EAAO,GAAG,CAAC,CAAC;AAAA,EAAA,EAElG,OAAO,OAAO,EACd,KAAK,GAAG,IACb,kBAEJqB,IACFtB,EAAiB,SAAS,IACpB,IAAI;AAAA,IACAN,IAAsB,oBAAoB;AAAA,IAC1C,GAAGM,EAAiB,IAAI,CAAC,EAAE,UAAAuB,EAAA,MAAeA,CAAQ;AAAA,EAAA,EAEjD,OAAO,OAAO,EACd,KAAK,GAAG,CAAC,MACd,QAEJC,IAAgBf,EAAUnB,GAAY,QAAQ,GAC9CmC,IAAgBhB,EAAUnB,GAAY,QAAQ,GAE9CoC,IAAmC;AAAA,IACrC,GAAI9B,KAAS,CAAA;AAAA,IACb,mBAAmBwB;AAAA,IACnB,iBAAiBE;AAAA,IACjB,qBAAqBE;AAAA,IACrB,qBAAqBC;AAAA,IACrB,wBAAwB,OAAOlC,EAAQ,UAAUG,IAAsB,IAAI,EAAE;AAAA,IAC7E,+BAA+Be,EAAUhB,CAAiB;AAAA,IAC1D,gCAAgCE,MAAoB,cAAc,QAAQ;AAAA,IAC1E,iBAAiBgB;AAAA,EAAA;AAGrB,SAAO;AAAA,IACH,kBAAAX;AAAA,IACA,kBAAAY;AAAA,IACA,8BAAAC;AAAA,IACA,gCAAAC;AAAA,IACA,kBAAAJ;AAAA,IACA,iBAAAb;AAAA,IACA,mBAAAkB;AAAA,IACA,iBAAAC;AAAA,IACA,cAAAb;AAAA,IACA,cAAAuB;AAAA,EAAA;AAER;"}
@@ -1,92 +1,87 @@
1
- import { useState as M, useCallback as c, useEffect as T, useMemo as O } from "react";
2
- const V = 50, E = (m, i) => m.start === i.start && m.end === i.end, I = (m) => {
3
- const { enabled: i, overscan: d, rows: r, scrollContainer: v, viewportHeightFallback: w } = m, [l, H] = M({
1
+ import { useState as B, useCallback as a, useEffect as E, useMemo as I } from "react";
2
+ import L from "../../../hooks/useResizeObserver.js";
3
+ const O = 50, x = (d, i) => d.start === i.start && d.end === i.end, P = (d) => {
4
+ const { enabled: i, overscan: u, rows: r, scrollContainer: k, viewportHeightFallback: w } = d, c = k?.view ?? null, [, , { blockSize: f }] = L(c), [l, H] = B({
4
5
  itemHeights: {},
5
6
  scrollTop: 0,
6
7
  viewportHeight: 0,
7
8
  visibleRange: { start: 0, end: 10 }
8
- }), b = c(() => v?.view ?? null, [v]), f = c(() => {
9
+ }), v = a(() => c, [c]), p = a(() => {
9
10
  const e = Object.values(l.itemHeights);
10
- return e.length === 0 ? V : e.reduce((t, n) => t + n, 0) / e.length;
11
- }, [l.itemHeights]), g = c(
12
- (e) => l.itemHeights[e] ?? f(),
13
- [f, l.itemHeights]
14
- ), p = c(
11
+ return e.length === 0 ? O : e.reduce((t, n) => t + n, 0) / e.length;
12
+ }, [l.itemHeights]), h = a(
13
+ (e) => l.itemHeights[e] ?? p(),
14
+ [p, l.itemHeights]
15
+ ), T = a(
15
16
  (e) => {
16
17
  let t = 0;
17
18
  for (let n = 0; n < e; n++)
18
- t += g(n);
19
+ t += h(n);
19
20
  return t;
20
21
  },
21
- [g]
22
- ), x = c(() => {
22
+ [h]
23
+ ), V = a(() => {
23
24
  let e = 0;
24
25
  for (let t = 0; t < r.length; t++)
25
- e += g(t);
26
+ e += h(t);
26
27
  return e;
27
- }, [g, r.length]), h = c(
28
+ }, [h, r.length]), m = a(
28
29
  (e, t) => {
29
30
  if (!i || r.length === 0)
30
31
  return { start: 0, end: r.length };
31
- let n = 0, a = 0;
32
+ let n = 0, g = 0;
32
33
  for (; n < r.length; ) {
33
- const o = g(n);
34
- if (a + o > e - d * o)
34
+ const o = h(n);
35
+ if (g + o > e - u * o)
35
36
  break;
36
- a += o, n++;
37
+ g += o, n++;
37
38
  }
38
39
  let s = n;
39
40
  for (; s < r.length; ) {
40
- const o = g(s);
41
- if (a > e + t + d * o)
41
+ const o = h(s);
42
+ if (g > e + t + u * o)
42
43
  break;
43
- a += o, s++;
44
+ g += o, s++;
44
45
  }
45
46
  return {
46
- start: Math.max(0, n - d),
47
- end: Math.min(r.length, s + d)
47
+ start: Math.max(0, n - u),
48
+ end: Math.min(r.length, s + u)
48
49
  };
49
50
  },
50
- [i, g, d, r.length]
51
- ), u = c(() => {
52
- const e = b();
51
+ [i, h, u, r.length]
52
+ ), b = a(() => {
53
+ const e = v();
53
54
  if (!e)
54
55
  return;
55
- const t = e.clientHeight || w || 0, n = e.scrollTop, a = h(n, t);
56
+ const t = e.clientHeight || f || w || 0, n = e.scrollTop, g = m(n, t);
56
57
  H(
57
- (s) => s.scrollTop === n && s.viewportHeight === t && E(s.visibleRange, a) ? s : {
58
+ (s) => s.scrollTop === n && s.viewportHeight === t && x(s.visibleRange, g) ? s : {
58
59
  ...s,
59
60
  scrollTop: n,
60
61
  viewportHeight: t,
61
- visibleRange: a
62
+ visibleRange: g
62
63
  }
63
64
  );
64
- }, [h, b, w]);
65
- T(() => {
66
- if (!i)
67
- return;
68
- const e = b();
69
- if (!e)
70
- return;
71
- u(), e.addEventListener("scroll", u, { passive: !0 });
72
- const t = new ResizeObserver(u);
73
- return t.observe(e), () => {
74
- e.removeEventListener("scroll", u), t.disconnect();
75
- };
76
- }, [i, b, u]), T(() => {
65
+ }, [m, v, f, w]);
66
+ E(() => {
67
+ if (i && c)
68
+ return b(), c.addEventListener("scroll", b, { passive: !0 }), () => {
69
+ c.removeEventListener("scroll", b);
70
+ };
71
+ }, [i, b, c]), E(() => {
77
72
  i && H((e) => {
78
- const t = h(e.scrollTop, e.viewportHeight);
79
- return E(e.visibleRange, t) ? e : {
73
+ const t = m(e.scrollTop, e.viewportHeight);
74
+ return x(e.visibleRange, t) ? e : {
80
75
  ...e,
81
76
  visibleRange: t
82
77
  };
83
78
  });
84
- }, [h, i, r]);
85
- const k = c(
79
+ }, [m, i, r]);
80
+ const z = a(
86
81
  (e, t) => {
87
82
  if (!t)
88
83
  return;
89
- const n = t.getBoundingClientRect(), a = window.getComputedStyle(t), s = n.height + Number.parseFloat(a.marginTop || "0") + Number.parseFloat(a.marginBottom || "0");
84
+ const n = t.getBoundingClientRect(), g = window.getComputedStyle(t), s = n.height + Number.parseFloat(g.marginTop || "0") + Number.parseFloat(g.marginBottom || "0");
90
85
  s <= 0 || H((o) => {
91
86
  if (o.itemHeights[e] === s)
92
87
  return o;
@@ -99,27 +94,27 @@ const V = 50, E = (m, i) => m.start === i.start && m.end === i.end, I = (m) => {
99
94
  };
100
95
  return {
101
96
  ...R,
102
- visibleRange: h(R.scrollTop, R.viewportHeight)
97
+ visibleRange: m(R.scrollTop, R.viewportHeight)
103
98
  };
104
99
  });
105
100
  },
106
- [h]
107
- ), z = O(
101
+ [m]
102
+ ), C = I(
108
103
  () => i ? r.slice(l.visibleRange.start, l.visibleRange.end).map((e, t) => ({
109
104
  index: l.visibleRange.start + t,
110
105
  row: e
111
106
  })) : [],
112
107
  [i, r, l.visibleRange.end, l.visibleRange.start]
113
- ), C = i ? p(l.visibleRange.start) : 0, F = i ? Math.max(0, x() - p(l.visibleRange.end)) : 0;
108
+ ), F = i ? T(l.visibleRange.start) : 0, M = i ? Math.max(0, V() - T(l.visibleRange.end)) : 0;
114
109
  return {
115
110
  isVirtualized: i,
116
- measureRow: k,
117
- paddingBottom: F,
118
- paddingTop: C,
119
- virtualRows: z
111
+ measureRow: z,
112
+ paddingBottom: M,
113
+ paddingTop: F,
114
+ virtualRows: C
120
115
  };
121
116
  };
122
117
  export {
123
- I as default
118
+ P as default
124
119
  };
125
120
  //# sourceMappingURL=useTableVirtualization.js.map