@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.
- package/Marker.js +9 -5
- package/Table.js +10 -9
- package/TableNext.js +10 -9
- package/TableRowActionsDropdown.d.ts +2 -0
- package/TableRowActionsDropdown.js +5 -0
- package/TableRowActionsDropdown.js.map +1 -0
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.d.ts +38 -3
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.js +104 -109
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisBanner.js.map +1 -1
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.d.ts +24 -5
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.js +60 -56
- package/components/analyticsAnalysisOverlay/AnalyticsAnalysisOverlay.js.map +1 -1
- package/components/datepicker/DayPicker.js +72 -70
- package/components/datepicker/DayPicker.js.map +1 -1
- package/components/datepicker/DayPickerDropdown.d.ts +1 -0
- package/components/datepicker/DayPickerDropdown.js +61 -48
- package/components/datepicker/DayPickerDropdown.js.map +1 -1
- package/components/datepicker/useStackedDayPickerCalendars.js +26 -26
- package/components/datepicker/useStackedDayPickerCalendars.js.map +1 -1
- package/components/dropdown/ButtonDropdown.d.ts +4 -0
- package/components/dropdown/ButtonDropdown.js +82 -80
- package/components/dropdown/ButtonDropdown.js.map +1 -1
- package/components/listMenu/ListMenu.d.ts +8 -0
- package/components/listMenu/ListMenu.js +74 -66
- package/components/listMenu/ListMenu.js.map +1 -1
- package/components/map/components/Map.js +207 -156
- package/components/map/components/Map.js.map +1 -1
- package/components/map/components/MapContext.d.ts +3 -0
- package/components/map/components/MapContext.js +9 -6
- package/components/map/components/MapContext.js.map +1 -1
- package/components/map/components/features/MapZoom.js +19 -19
- package/components/map/components/features/MapZoom.js.map +1 -1
- package/components/map/components/features/Route.d.ts +65 -1
- package/components/map/components/features/Route.js +184 -98
- package/components/map/components/features/Route.js.map +1 -1
- package/components/map/components/features/basics/Marker.d.ts +21 -1
- package/components/map/components/features/basics/Marker.js +99 -40
- package/components/map/components/features/basics/Marker.js.map +1 -1
- package/components/map/components/features/basics/Polygon.d.ts +24 -1
- package/components/map/components/features/basics/Polygon.js +72 -19
- package/components/map/components/features/basics/Polygon.js.map +1 -1
- package/components/map/components/features/basics/Polyline.d.ts +29 -0
- package/components/map/components/features/basics/Polyline.js +69 -39
- package/components/map/components/features/basics/Polyline.js.map +1 -1
- package/components/map/components/features/layers/MarkerLayer.js +8 -8
- package/components/map/components/features/layers/MarkerLayer.js.map +1 -1
- package/components/map/components/features/layers/clustering/SimpleClusterLayer.js +13 -6
- package/components/map/components/features/layers/clustering/SimpleClusterLayer.js.map +1 -1
- package/components/map/utils/clustering.d.ts +1 -1
- package/components/map/utils/clustering.js +30 -30
- package/components/map/utils/clustering.js.map +1 -1
- package/components/map/utils/mapTypes.d.ts +141 -0
- package/components/map/utils/mapTypes.js.map +1 -1
- package/components/map/utils/mapUtils.d.ts +2 -0
- package/components/map/utils/mapUtils.js +4 -0
- package/components/map/utils/mapUtils.js.map +1 -1
- package/components/mapMarker/ClusterMapMarker.d.ts +2 -0
- package/components/mapMarker/ClusterMapMarker.js.map +1 -1
- package/components/mapMarker/SingleMapMarker.d.ts +2 -0
- package/components/mapMarker/SingleMapMarker.js.map +1 -1
- package/components/selects/ClearButton.js +9 -7
- package/components/selects/ClearButton.js.map +1 -1
- package/components/table/Table.d.ts +3 -1
- package/components/table/Table.js +239 -216
- package/components/table/Table.js.map +1 -1
- package/components/table/Table.types.d.ts +62 -4
- package/components/table/TableColumn.d.ts +8 -1
- package/components/table/TableColumn.js +66 -64
- package/components/table/TableColumn.js.map +1 -1
- package/components/table/TableExpandedRow.d.ts +4 -0
- package/components/table/TableExpandedRow.js +70 -67
- package/components/table/TableExpandedRow.js.map +1 -1
- package/components/table/TableGroupRow.d.ts +3 -1
- package/components/table/TableGroupRow.js +15 -14
- package/components/table/TableGroupRow.js.map +1 -1
- package/components/table/TableHeader.d.ts +9 -0
- package/components/table/TableHeader.js +110 -81
- package/components/table/TableHeader.js.map +1 -1
- package/components/table/TableHeaderColumn.d.ts +11 -1
- package/components/table/TableHeaderColumn.js +63 -58
- package/components/table/TableHeaderColumn.js.map +1 -1
- package/components/table/TableRow.d.ts +12 -0
- package/components/table/TableRow.js +78 -74
- package/components/table/TableRow.js.map +1 -1
- package/components/table/TableRowActionsDropdown.d.ts +11 -0
- package/components/table/TableRowActionsDropdown.js +22 -0
- package/components/table/TableRowActionsDropdown.js.map +1 -0
- package/components/table/TableStickyRowButton.d.ts +25 -0
- package/components/table/TableStickyRowButton.js +32 -0
- package/components/table/TableStickyRowButton.js.map +1 -0
- package/components/table/TableToolbar.d.ts +24 -3
- package/components/table/TableToolbar.js +78 -37
- package/components/table/TableToolbar.js.map +1 -1
- package/components/table/TableViewToggles.js +5 -5
- package/components/table/TableViewToggles.js.map +1 -1
- package/components/table/context/TableInteractionContext.d.ts +3 -0
- package/components/table/context/TableInteractionContext.js.map +1 -1
- package/components/table/context/TableLayoutContext.d.ts +1 -0
- package/components/table/context/TableLayoutContext.js.map +1 -1
- package/components/table/context/TableRenderContext.d.ts +1 -0
- package/components/table/context/TableRenderContext.js.map +1 -1
- package/components/table/layout/useHorizontalSectionSync.d.ts +2 -1
- package/components/table/layout/useHorizontalSectionSync.js +32 -31
- package/components/table/layout/useHorizontalSectionSync.js.map +1 -1
- package/components/table/layout/useMeasuredColumnMaxWidths.js +52 -54
- package/components/table/layout/useMeasuredColumnMaxWidths.js.map +1 -1
- package/components/table/layout/useTableLayout.d.ts +6 -2
- package/components/table/layout/useTableLayout.js +61 -48
- package/components/table/layout/useTableLayout.js.map +1 -1
- package/components/table/layout/useTableVirtualization.js +51 -56
- package/components/table/layout/useTableVirtualization.js.map +1 -1
- package/components/table/model/resolveResponsiveViewType.d.ts +2 -0
- package/components/table/model/resolveResponsiveViewType.js +27 -0
- package/components/table/model/resolveResponsiveViewType.js.map +1 -0
- package/components/table/render/header/TableDraggableHeaderCell.js +38 -36
- package/components/table/render/header/TableDraggableHeaderCell.js.map +1 -1
- package/components/table/render/header/TableHeader.types.d.ts +2 -0
- package/components/table/render/header/TableHeaderCellContent.js +16 -16
- package/components/table/render/header/TableHeaderCellContent.js.map +1 -1
- package/components/table/render/header/TableHeaderSelectionCell.d.ts +1 -0
- package/components/table/render/header/TableHeaderSelectionCell.js +13 -12
- package/components/table/render/header/TableHeaderSelectionCell.js.map +1 -1
- package/components/table/render/header/TableStaticHeaderCell.js +31 -29
- package/components/table/render/header/TableStaticHeaderCell.js.map +1 -1
- package/components/table/render/header/resolveHeaderCellClassName.d.ts +1 -0
- package/components/table/render/header/resolveHeaderCellClassName.js +10 -9
- package/components/table/render/header/resolveHeaderCellClassName.js.map +1 -1
- package/components/table/runtime/useResolvedRenderColumns.d.ts +4 -4
- package/components/table/runtime/useResolvedRenderColumns.js +13 -13
- package/components/table/runtime/useResolvedRenderColumns.js.map +1 -1
- package/components/table/runtime/useResolvedRenderHeader.d.ts +1 -1
- package/components/table/runtime/useResolvedRenderHeader.js.map +1 -1
- package/components/table/runtime/useResponsiveResolvedViewType.d.ts +23 -0
- package/components/table/runtime/useResponsiveResolvedViewType.js +22 -0
- package/components/table/runtime/useResponsiveResolvedViewType.js.map +1 -0
- package/components/table/selection/useInternalTableSelectionState.d.ts +2 -0
- package/components/table/selection/useInternalTableSelectionState.js +27 -17
- package/components/table/selection/useInternalTableSelectionState.js.map +1 -1
- package/components/table/selection/useTableSelection.d.ts +5 -1
- package/components/table/selection/useTableSelection.js +37 -26
- package/components/table/selection/useTableSelection.js.map +1 -1
- package/components/table/shared/parsePixelSize.d.ts +2 -0
- package/components/table/shared/parsePixelSize.js +13 -0
- package/components/table/shared/parsePixelSize.js.map +1 -0
- package/hooks/useDraggableElement.d.ts +27 -5
- package/hooks/useDraggableElement.js +100 -23
- package/hooks/useDraggableElement.js.map +1 -1
- package/hooks/usePopperDropdown.d.ts +1 -0
- package/hooks/usePopperDropdown.js +15 -12
- package/hooks/usePopperDropdown.js.map +1 -1
- package/hooks/useResizeObserver.d.ts +25 -6
- package/hooks/useResizeObserver.js +20 -18
- package/hooks/useResizeObserver.js.map +1 -1
- package/package.json +10 -10
- package/utils/analytics/createAnalyticsOverlayTooltip.js.map +1 -1
- package/utils/init/initConfig.js +5 -5
- package/utils/init/initConfig.js.map +1 -1
- package/version.d.ts +1 -1
- package/version.js +2 -2
- package/version.js.map +1 -1
|
@@ -1,85 +1,83 @@
|
|
|
1
|
-
import { useState as
|
|
2
|
-
|
|
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
|
-
},
|
|
6
|
+
}, C = (t) => {
|
|
6
7
|
const e = t.getBoundingClientRect().width;
|
|
7
8
|
return e > 0 ? Math.ceil(e) : t.scrollWidth;
|
|
8
|
-
},
|
|
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
|
-
},
|
|
14
|
+
}, T = (t) => {
|
|
14
15
|
const e = t.querySelector(".table-head-label");
|
|
15
16
|
if (e) {
|
|
16
|
-
const
|
|
17
|
-
return
|
|
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
|
-
},
|
|
21
|
-
Object.entries(e).map(([n,
|
|
22
|
-
const
|
|
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
|
-
|
|
26
|
+
i !== void 0 && r !== void 0 && Math.abs(i - r) <= j ? u : o
|
|
26
27
|
];
|
|
27
28
|
})
|
|
28
|
-
),
|
|
29
|
-
const { columns: e, enabled: n, tableWrapperRef:
|
|
30
|
-
() => e.map((
|
|
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
|
|
34
|
-
|
|
35
|
-
|
|
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 = "",
|
|
40
|
+
r.current && (r.current = "", c.current = {}, i({}));
|
|
41
41
|
return;
|
|
42
42
|
}
|
|
43
|
-
const
|
|
44
|
-
if (
|
|
45
|
-
r.current && (r.current = "",
|
|
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
|
-
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
const
|
|
52
|
-
(
|
|
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
|
|
55
|
+
return y > 0 ? [[E.key, `${Math.ceil(y)}px`]] : [];
|
|
56
56
|
})
|
|
57
|
-
),
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
),
|
|
61
|
-
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
|
|
83
|
-
|
|
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
|
-
|
|
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
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
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
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
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:
|
|
16
|
-
areaName: `table-col-${
|
|
17
|
-
})),
|
|
18
|
-
if (
|
|
19
|
-
return e +
|
|
20
|
-
const
|
|
21
|
-
return e + (
|
|
22
|
-
}, 0),
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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",
|
|
36
|
-
...
|
|
37
|
-
"--table-columns":
|
|
38
|
-
"--table-areas":
|
|
39
|
-
"--table-cards-min":
|
|
40
|
-
"--table-cards-max":
|
|
41
|
-
"--table-column-count": String(
|
|
42
|
-
"--table-row-separator-width":
|
|
43
|
-
"--table-
|
|
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:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
|
2
|
-
|
|
3
|
-
|
|
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
|
-
}),
|
|
9
|
+
}), v = a(() => c, [c]), p = a(() => {
|
|
9
10
|
const e = Object.values(l.itemHeights);
|
|
10
|
-
return e.length === 0 ?
|
|
11
|
-
}, [l.itemHeights]),
|
|
12
|
-
(e) => l.itemHeights[e] ??
|
|
13
|
-
[
|
|
14
|
-
),
|
|
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 +=
|
|
19
|
+
t += h(n);
|
|
19
20
|
return t;
|
|
20
21
|
},
|
|
21
|
-
[
|
|
22
|
-
),
|
|
22
|
+
[h]
|
|
23
|
+
), V = a(() => {
|
|
23
24
|
let e = 0;
|
|
24
25
|
for (let t = 0; t < r.length; t++)
|
|
25
|
-
e +=
|
|
26
|
+
e += h(t);
|
|
26
27
|
return e;
|
|
27
|
-
}, [
|
|
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,
|
|
32
|
+
let n = 0, g = 0;
|
|
32
33
|
for (; n < r.length; ) {
|
|
33
|
-
const o =
|
|
34
|
-
if (
|
|
34
|
+
const o = h(n);
|
|
35
|
+
if (g + o > e - u * o)
|
|
35
36
|
break;
|
|
36
|
-
|
|
37
|
+
g += o, n++;
|
|
37
38
|
}
|
|
38
39
|
let s = n;
|
|
39
40
|
for (; s < r.length; ) {
|
|
40
|
-
const o =
|
|
41
|
-
if (
|
|
41
|
+
const o = h(s);
|
|
42
|
+
if (g > e + t + u * o)
|
|
42
43
|
break;
|
|
43
|
-
|
|
44
|
+
g += o, s++;
|
|
44
45
|
}
|
|
45
46
|
return {
|
|
46
|
-
start: Math.max(0, n -
|
|
47
|
-
end: Math.min(r.length, s +
|
|
47
|
+
start: Math.max(0, n - u),
|
|
48
|
+
end: Math.min(r.length, s + u)
|
|
48
49
|
};
|
|
49
50
|
},
|
|
50
|
-
[i,
|
|
51
|
-
),
|
|
52
|
-
const e =
|
|
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,
|
|
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 &&
|
|
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:
|
|
62
|
+
visibleRange: g
|
|
62
63
|
}
|
|
63
64
|
);
|
|
64
|
-
}, [
|
|
65
|
-
|
|
66
|
-
if (
|
|
67
|
-
return
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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 =
|
|
79
|
-
return
|
|
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
|
-
}, [
|
|
85
|
-
const
|
|
79
|
+
}, [m, i, r]);
|
|
80
|
+
const z = a(
|
|
86
81
|
(e, t) => {
|
|
87
82
|
if (!t)
|
|
88
83
|
return;
|
|
89
|
-
const n = t.getBoundingClientRect(),
|
|
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:
|
|
97
|
+
visibleRange: m(R.scrollTop, R.viewportHeight)
|
|
103
98
|
};
|
|
104
99
|
});
|
|
105
100
|
},
|
|
106
|
-
[
|
|
107
|
-
),
|
|
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
|
-
),
|
|
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:
|
|
117
|
-
paddingBottom:
|
|
118
|
-
paddingTop:
|
|
119
|
-
virtualRows:
|
|
111
|
+
measureRow: z,
|
|
112
|
+
paddingBottom: M,
|
|
113
|
+
paddingTop: F,
|
|
114
|
+
virtualRows: C
|
|
120
115
|
};
|
|
121
116
|
};
|
|
122
117
|
export {
|
|
123
|
-
|
|
118
|
+
P as default
|
|
124
119
|
};
|
|
125
120
|
//# sourceMappingURL=useTableVirtualization.js.map
|