@rio-cloud/rio-uikit 2.3.0-beta.1 → 2.3.0-beta.3
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/DayPicker.js +6 -2
- package/DayPicker.js.map +1 -1
- package/DayPickerCalendar.d.ts +2 -0
- package/DayPickerCalendar.js +5 -0
- package/DayPickerCalendar.js.map +1 -0
- package/DayPickerPrototype.d.ts +2 -0
- package/DayPickerPrototype.js +5 -0
- package/DayPickerPrototype.js.map +1 -0
- package/Marker.js +9 -5
- package/TableNext.d.ts +2 -0
- package/TableNext.js +23 -0
- package/TableNext.js.map +1 -0
- package/TableToolbar.js +3 -2
- package/TableToolbar.js.map +1 -1
- 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/assetTree/Tree.js +13 -13
- package/components/charts/Area.d.ts +5 -3
- package/components/charts/Area.js +4 -3
- package/components/charts/Area.js.map +1 -1
- package/components/charts/AreaChart.js.map +1 -1
- package/components/charts/ComposedChart.js.map +1 -1
- package/components/clearableInput/ClearableInput.d.ts +30 -0
- package/components/clearableInput/ClearableInput.js +81 -78
- package/components/clearableInput/ClearableInput.js.map +1 -1
- package/components/datepicker/DayPicker.d.ts +4 -51
- package/components/datepicker/DayPicker.js +267 -257
- package/components/datepicker/DayPicker.js.map +1 -1
- package/components/datepicker/DayPickerCalendar.d.ts +4 -0
- package/components/datepicker/DayPickerCalendar.js +129 -0
- package/components/datepicker/DayPickerCalendar.js.map +1 -0
- package/components/datepicker/DayPickerDropdown.d.ts +19 -0
- package/components/datepicker/DayPickerDropdown.js +88 -0
- package/components/datepicker/DayPickerDropdown.js.map +1 -0
- package/components/datepicker/DayPickerDropdownFooter.d.ts +7 -0
- package/components/datepicker/DayPickerDropdownFooter.js +7 -0
- package/components/datepicker/DayPickerDropdownFooter.js.map +1 -0
- package/components/datepicker/DayPickerDropdownSidebar.d.ts +8 -0
- package/components/datepicker/DayPickerDropdownSidebar.js +7 -0
- package/components/datepicker/DayPickerDropdownSidebar.js.map +1 -0
- package/components/datepicker/DayPickerInput.d.ts +28 -0
- package/components/datepicker/DayPickerInput.js +65 -0
- package/components/datepicker/DayPickerInput.js.map +1 -0
- package/components/datepicker/DayPickerPrototype.d.ts +53 -0
- package/components/datepicker/DayPickerPrototype.js +285 -0
- package/components/datepicker/DayPickerPrototype.js.map +1 -0
- package/components/datepicker/dayPickerRangeSelectionUtils.d.ts +15 -0
- package/components/datepicker/dayPickerRangeSelectionUtils.js +31 -0
- package/components/datepicker/dayPickerRangeSelectionUtils.js.map +1 -0
- package/components/datepicker/dayPickerTypes.d.ts +517 -0
- package/components/datepicker/dayPickerTypes.js +7 -0
- package/components/datepicker/dayPickerTypes.js.map +1 -0
- package/components/datepicker/dayPickerUtils.d.ts +10 -0
- package/components/datepicker/dayPickerUtils.js +92 -0
- package/components/datepicker/dayPickerUtils.js.map +1 -0
- package/components/datepicker/useDayPickerInputState.d.ts +32 -0
- package/components/datepicker/useDayPickerInputState.js +85 -0
- package/components/datepicker/useDayPickerInputState.js.map +1 -0
- package/components/datepicker/useStackedDayPickerCalendars.d.ts +5 -0
- package/components/datepicker/useStackedDayPickerCalendars.js +39 -0
- package/components/datepicker/useStackedDayPickerCalendars.js.map +1 -0
- package/components/divider/Divider.js +6 -6
- package/components/dropdown/ButtonDropdown.d.ts +4 -0
- package/components/dropdown/ButtonDropdown.js +70 -68
- package/components/dropdown/ButtonDropdown.js.map +1 -1
- package/components/dropdown/DropdownToggleButton.d.ts +1 -0
- package/components/dropdown/DropdownToggleButton.js +17 -15
- package/components/dropdown/DropdownToggleButton.js.map +1 -1
- package/components/fade/FadeExpander.js +17 -20
- package/components/fade/FadeExpander.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/loadMore/LoadMoreProgress.js +6 -7
- package/components/map/components/Map.js +189 -157
- package/components/map/components/Map.js.map +1 -1
- package/components/map/components/MapContext.d.ts +1 -0
- package/components/map/components/MapContext.js +8 -7
- package/components/map/components/MapContext.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 +135 -0
- package/components/map/utils/mapTypes.js.map +1 -1
- package/components/map/utils/rendering.js +5 -5
- 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/popover/Popover.js +4 -4
- package/components/radiobutton/RadioCardGroup.js +3 -3
- package/components/rioglyph/RioglyphIconType.d.ts +1 -1
- package/components/selects/ClearButton.js +9 -7
- package/components/selects/ClearButton.js.map +1 -1
- package/components/selects/Multiselect.d.ts +6 -0
- package/components/selects/Multiselect.js +164 -150
- package/components/selects/Multiselect.js.map +1 -1
- package/components/selects/Select.js +39 -37
- package/components/selects/Select.js.map +1 -1
- package/components/table/Table.d.ts +27 -248
- package/components/table/Table.js +240 -214
- package/components/table/Table.js.map +1 -1
- package/components/table/Table.types.d.ts +302 -121
- package/components/table/TableBody.d.ts +65 -5
- package/components/table/TableBody.js +132 -2
- package/components/table/TableBody.js.map +1 -1
- package/components/table/TableCardsSorting.js +25 -32
- package/components/table/TableCardsSorting.js.map +1 -1
- package/components/table/TableColumn.d.ts +21 -6
- package/components/table/TableColumn.js +114 -2
- package/components/table/TableColumn.js.map +1 -1
- package/components/table/TableExpandedContentRow.d.ts +7 -7
- package/components/table/TableExpandedContentRow.js +107 -2
- package/components/table/TableExpandedContentRow.js.map +1 -1
- package/components/table/TableExpandedRow.d.ts +9 -4
- package/components/table/TableExpandedRow.js +147 -2
- package/components/table/TableExpandedRow.js.map +1 -1
- package/components/table/TableExpanderButton.js +13 -11
- package/components/table/TableExpanderButton.js.map +1 -1
- package/components/table/TableFooter.d.ts +10 -6
- package/components/table/TableFooter.js +49 -2
- package/components/table/TableFooter.js.map +1 -1
- package/components/table/TableGroupFooterRow.d.ts +7 -7
- package/components/table/TableGroupFooterRow.js +27 -2
- package/components/table/TableGroupFooterRow.js.map +1 -1
- package/components/table/TableGroupRow.d.ts +7 -7
- package/components/table/TableGroupRow.js +33 -2
- package/components/table/TableGroupRow.js.map +1 -1
- package/components/table/TableHeader.d.ts +26 -4
- package/components/table/TableHeader.js +117 -2
- package/components/table/TableHeader.js.map +1 -1
- package/components/table/TableHeaderColumn.d.ts +25 -9
- package/components/table/TableHeaderColumn.js +83 -2
- package/components/table/TableHeaderColumn.js.map +1 -1
- package/components/table/TableHeaderRow.d.ts +1 -1
- package/components/table/TableHeaderRow.js +11 -2
- package/components/table/TableHeaderRow.js.map +1 -1
- package/components/table/TableRow.d.ts +15 -4
- package/components/table/TableRow.js +109 -2
- package/components/table/TableRow.js.map +1 -1
- package/components/table/TableSpacerRow.d.ts +3 -2
- package/components/table/TableSpacerRow.js +26 -2
- package/components/table/TableSpacerRow.js.map +1 -1
- package/components/table/TableToolbar.d.ts +4 -23
- package/components/table/TableToolbar.js +39 -28
- package/components/table/TableToolbar.js.map +1 -1
- package/components/table/TableToolbarColumn.d.ts +31 -0
- package/components/table/TableToolbarColumn.js +33 -0
- package/components/table/TableToolbarColumn.js.map +1 -0
- package/components/table/TableViewToggles.d.ts +3 -3
- package/components/table/TableViewToggles.js.map +1 -1
- package/components/table/context/TableInteractionContext.d.ts +26 -0
- package/components/table/context/TableInteractionContext.js +7 -0
- package/components/table/context/TableInteractionContext.js.map +1 -0
- package/components/table/context/TableLayoutContext.d.ts +26 -0
- package/components/table/context/TableLayoutContext.js +7 -0
- package/components/table/context/TableLayoutContext.js.map +1 -0
- package/components/table/context/TableRenderConfigContext.d.ts +27 -0
- package/components/table/context/TableRenderConfigContext.js +7 -0
- package/components/table/context/TableRenderConfigContext.js.map +1 -0
- package/components/table/context/TableRenderContext.d.ts +85 -0
- package/components/table/context/TableRenderContext.js +7 -0
- package/components/table/context/TableRenderContext.js.map +1 -0
- package/components/table/context/TableStructureContext.d.ts +31 -0
- package/components/table/context/TableStructureContext.js +17 -0
- package/components/table/context/TableStructureContext.js.map +1 -0
- package/components/table/layout/columnSizing.d.ts +2 -2
- package/components/table/layout/columnSizing.js.map +1 -1
- package/components/table/layout/useDraggableColumns.d.ts +3 -3
- package/components/table/layout/useDraggableColumns.js +17 -17
- package/components/table/layout/useDraggableColumns.js.map +1 -1
- package/components/table/layout/useHorizontalSectionSync.d.ts +4 -1
- package/components/table/layout/useHorizontalSectionSync.js +36 -31
- package/components/table/layout/useHorizontalSectionSync.js.map +1 -1
- package/components/table/layout/useMeasuredColumnMaxWidths.d.ts +3 -3
- package/components/table/layout/useMeasuredColumnMaxWidths.js.map +1 -1
- package/components/table/layout/useResizableColumns.d.ts +5 -4
- package/components/table/layout/useResizableColumns.js +108 -67
- package/components/table/layout/useResizableColumns.js.map +1 -1
- package/components/table/layout/useTableBodyScrollBottom.d.ts +12 -0
- package/components/table/layout/useTableBodyScrollBottom.js +37 -0
- package/components/table/layout/useTableBodyScrollBottom.js.map +1 -0
- package/components/table/layout/useTableLayout.d.ts +18 -6
- package/components/table/layout/useTableLayout.js +51 -41
- package/components/table/layout/useTableLayout.js.map +1 -1
- package/components/table/layout/useTableVirtualization.d.ts +6 -6
- package/components/table/layout/useTableVirtualization.js +22 -22
- package/components/table/layout/useTableVirtualization.js.map +1 -1
- package/components/table/model/resolveRowMeta.d.ts +3 -2
- package/components/table/model/resolveRowMeta.js.map +1 -1
- package/components/table/model/resolveTableClassConfig.d.ts +2 -3
- package/components/table/model/resolveTableClassConfig.js.map +1 -1
- package/components/table/model/tableView.types.d.ts +41 -0
- package/components/table/native/TableSettingsListItem.js +1 -1
- package/components/table/native/TableSettingsListItem.js.map +1 -1
- package/components/table/render/body/TableBodyContent.d.ts +21 -0
- package/components/table/render/body/TableBodyContent.js +52 -0
- package/components/table/render/body/TableBodyContent.js.map +1 -0
- package/components/table/render/body/TableEmptyRow.js +2 -2
- package/components/table/render/body/TableEmptyRow.js.map +1 -1
- package/components/table/render/header/TableBatchDropdown.d.ts +5 -1
- package/components/table/render/header/TableBatchDropdown.js +17 -15
- package/components/table/render/header/TableBatchDropdown.js.map +1 -1
- package/components/table/render/header/TableColumnFilter.d.ts +2 -2
- package/components/table/render/header/TableColumnFilter.js +16 -14
- package/components/table/render/header/TableColumnFilter.js.map +1 -1
- package/components/table/render/header/TableDraggableHeaderCell.d.ts +2 -1
- package/components/table/render/header/TableDraggableHeaderCell.js +45 -33
- package/components/table/render/header/TableDraggableHeaderCell.js.map +1 -1
- package/components/table/render/header/TableHeader.types.d.ts +13 -9
- package/components/table/render/header/TableHeaderCellContent.d.ts +2 -1
- package/components/table/render/header/TableHeaderCellContent.js +16 -16
- package/components/table/render/header/TableHeaderCellContent.js.map +1 -1
- package/components/table/render/header/TableHeaderCellResizeHandle.d.ts +2 -1
- package/components/table/render/header/TableHeaderCellResizeHandle.js +8 -8
- package/components/table/render/header/TableHeaderCellResizeHandle.js.map +1 -1
- package/components/table/render/header/TableHeaderDragOverlay.d.ts +5 -4
- package/components/table/render/header/TableHeaderDragOverlay.js.map +1 -1
- package/components/table/render/header/TableStaticHeaderCell.d.ts +2 -1
- package/components/table/render/header/TableStaticHeaderCell.js +34 -20
- package/components/table/render/header/TableStaticHeaderCell.js.map +1 -1
- package/components/table/render/header/resolveAriaSort.d.ts +2 -1
- package/components/table/render/header/resolveAriaSort.js.map +1 -1
- package/components/table/render/header/resolveHeaderCellClassName.d.ts +5 -2
- package/components/table/render/header/resolveHeaderCellClassName.js +14 -12
- package/components/table/render/header/resolveHeaderCellClassName.js.map +1 -1
- package/components/table/render/header/resolveHeaderCellStyle.d.ts +2 -1
- package/components/table/render/header/resolveHeaderCellStyle.js.map +1 -1
- package/components/table/runtime/shouldAnimateBodyRows.d.ts +17 -0
- package/components/table/runtime/shouldAnimateBodyRows.js +5 -0
- package/components/table/runtime/shouldAnimateBodyRows.js.map +1 -0
- package/components/table/runtime/useRenderDraftState.d.ts +14 -0
- package/components/table/runtime/useRenderDraftState.js +80 -0
- package/components/table/runtime/useRenderDraftState.js.map +1 -0
- package/components/table/runtime/useResolvedRenderColumns.d.ts +43 -0
- package/components/table/runtime/useResolvedRenderColumns.js +113 -0
- package/components/table/runtime/useResolvedRenderColumns.js.map +1 -0
- package/components/table/runtime/useResolvedRenderHeader.d.ts +27 -0
- package/components/table/runtime/useResolvedRenderHeader.js +67 -0
- package/components/table/runtime/useResolvedRenderHeader.js.map +1 -0
- package/components/table/selection/useInternalTableSelectionState.d.ts +17 -0
- package/components/table/selection/useInternalTableSelectionState.js +28 -0
- package/components/table/selection/useInternalTableSelectionState.js.map +1 -0
- package/components/table/selection/useTableSelection.d.ts +3 -3
- package/components/table/selection/useTableSelection.js.map +1 -1
- package/components/table/shared/getCellContentOverflowClassName.d.ts +3 -0
- package/components/table/shared/getCellContentOverflowClassName.js +18 -0
- package/components/table/shared/getCellContentOverflowClassName.js.map +1 -0
- package/components/table/shared/getInteractiveRowProps.d.ts +3 -2
- package/components/table/shared/getInteractiveRowProps.js.map +1 -1
- 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/useUrlState.js +3 -3
- package/package.json +16 -17
- package/utils/analytics/createAnalyticsOverlayTooltip.js +57 -57
- package/utils/analytics/createAnalyticsOverlayTooltip.js.map +1 -1
- package/utils/analytics/useAnalyticsOverlayDom.js +3 -3
- package/utils/init/initConfig.js +5 -5
- package/utils/init/initConfig.js.map +1 -1
- package/utils/routeUtils.d.ts +5 -2
- package/utils/routeUtils.js +17 -17
- package/utils/routeUtils.js.map +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.js.map +1 -1
- package/components/table/TableCard.d.ts +0 -63
- package/components/table/TableCard.js +0 -150
- package/components/table/TableCard.js.map +0 -1
- package/components/table/model/buildTableViewModel.d.ts +0 -28
- package/components/table/model/buildTableViewModel.js +0 -221
- package/components/table/model/buildTableViewModel.js.map +0 -1
- package/components/table/model/resolveCellContent.d.ts +0 -2
- package/components/table/model/resolveCellContent.js +0 -5
- package/components/table/model/resolveCellContent.js.map +0 -1
- package/components/table/model/tableViewModel.types.d.ts +0 -153
- package/components/table/parse/parseBody.d.ts +0 -3
- package/components/table/parse/parseBody.js +0 -13
- package/components/table/parse/parseBody.js.map +0 -1
- package/components/table/parse/parseColumns.d.ts +0 -3
- package/components/table/parse/parseColumns.js +0 -81
- package/components/table/parse/parseColumns.js.map +0 -1
- package/components/table/parse/parseFooter.d.ts +0 -3
- package/components/table/parse/parseFooter.js +0 -39
- package/components/table/parse/parseFooter.js.map +0 -1
- package/components/table/parse/parseHeaders.d.ts +0 -4
- package/components/table/parse/parseHeaders.js +0 -89
- package/components/table/parse/parseHeaders.js.map +0 -1
- package/components/table/parse/parseRows.d.ts +0 -3
- package/components/table/parse/parseRows.js +0 -93
- package/components/table/parse/parseRows.js.map +0 -1
- package/components/table/parse/tableChildGuards.d.ts +0 -25
- package/components/table/parse/tableChildGuards.js +0 -29
- package/components/table/parse/tableChildGuards.js.map +0 -1
- package/components/table/render/body/TableBodyRow.d.ts +0 -16
- package/components/table/render/body/TableBodyRow.js +0 -84
- package/components/table/render/body/TableBodyRow.js.map +0 -1
- package/components/table/render/body/TableBodySection.d.ts +0 -20
- package/components/table/render/body/TableBodySection.js +0 -68
- package/components/table/render/body/TableBodySection.js.map +0 -1
- package/components/table/render/body/TableDataRow.d.ts +0 -15
- package/components/table/render/body/TableDataRow.js +0 -143
- package/components/table/render/body/TableDataRow.js.map +0 -1
- package/components/table/render/body/TableExpandedRow.d.ts +0 -8
- package/components/table/render/body/TableExpandedRow.js +0 -84
- package/components/table/render/body/TableExpandedRow.js.map +0 -1
- package/components/table/render/body/TableGroupRow.d.ts +0 -8
- package/components/table/render/body/TableGroupRow.js +0 -21
- package/components/table/render/body/TableGroupRow.js.map +0 -1
- package/components/table/render/body/TableSpacerRow.d.ts +0 -7
- package/components/table/render/body/TableSpacerRow.js +0 -15
- package/components/table/render/body/TableSpacerRow.js.map +0 -1
- package/components/table/render/footer/TableFooterCell.d.ts +0 -8
- package/components/table/render/footer/TableFooterCell.js +0 -31
- package/components/table/render/footer/TableFooterCell.js.map +0 -1
- package/components/table/render/footer/TableFooterSection.d.ts +0 -10
- package/components/table/render/footer/TableFooterSection.js +0 -28
- package/components/table/render/footer/TableFooterSection.js.map +0 -1
- package/components/table/render/header/TableHeaderSection.d.ts +0 -3
- package/components/table/render/header/TableHeaderSection.js +0 -104
- package/components/table/render/header/TableHeaderSection.js.map +0 -1
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { useMemo as f } from "react";
|
|
2
|
+
const z = (g) => {
|
|
3
|
+
const { renderHeaderColumns: i, resolvedRenderColumns: a, sortBy: l, sortDirection: h } = g;
|
|
4
|
+
return f(() => {
|
|
5
|
+
if (i.length === 0 || a.length === 0)
|
|
6
|
+
return;
|
|
7
|
+
const y = new Set(Array.isArray(l) ? l : l ? [l] : []), b = Math.max(...i.map((e) => e.row + e.rowSpan - 1), 1), d = Array.from({ length: b }, () => Array(a.length).fill(!1)), c = new Map(
|
|
8
|
+
a.map((e) => [e.columnKey, e])
|
|
9
|
+
), m = new Map(
|
|
10
|
+
a.map((e, r) => [e.columnKey, r + 1])
|
|
11
|
+
), w = (e, r) => {
|
|
12
|
+
for (let o = 1; o <= a.length - r + 1; o += 1)
|
|
13
|
+
if (d[e - 1]?.slice(o - 1, o - 1 + r).every((t) => !t))
|
|
14
|
+
return o;
|
|
15
|
+
return 1;
|
|
16
|
+
}, p = i.map((e) => {
|
|
17
|
+
const r = e.columnKey ? c.get(e.columnKey) : void 0, o = r?.columnKey ? {
|
|
18
|
+
key: r.columnKey,
|
|
19
|
+
label: r.label,
|
|
20
|
+
width: r.width,
|
|
21
|
+
mobileLabel: r.mobileLabel,
|
|
22
|
+
horizontalAlign: r.horizontalAlign,
|
|
23
|
+
headerClassName: r.headerClassName,
|
|
24
|
+
hideOnMobile: r.hideOnMobile,
|
|
25
|
+
sortable: r.sortable,
|
|
26
|
+
draggable: r.draggable,
|
|
27
|
+
resizeable: r.resizeable,
|
|
28
|
+
minResizeWidth: r.minResizeWidth,
|
|
29
|
+
maxResizeWidth: r.maxResizeWidth
|
|
30
|
+
} : void 0, n = r ? m.get(r.columnKey) ?? 1 : w(e.row, e.colSpan);
|
|
31
|
+
for (let t = e.row - 1; t < e.row - 1 + e.rowSpan; t += 1)
|
|
32
|
+
for (let s = n - 1; s < n - 1 + e.colSpan; s += 1)
|
|
33
|
+
d[t]?.[s] !== void 0 && (d[t][s] = !0);
|
|
34
|
+
return {
|
|
35
|
+
key: e.id,
|
|
36
|
+
columnKey: e.columnKey,
|
|
37
|
+
label: e.label,
|
|
38
|
+
icon: e.icon,
|
|
39
|
+
filter: e.filter,
|
|
40
|
+
hideLabel: e.hideLabel,
|
|
41
|
+
horizontalAlign: r?.horizontalAlign ?? e.horizontalAlign,
|
|
42
|
+
verticalAlign: r?.verticalAlign ?? e.verticalAlign,
|
|
43
|
+
className: void 0,
|
|
44
|
+
headerClassName: r?.headerClassName ?? e.headerClassName,
|
|
45
|
+
hideOnMobile: r?.hideOnMobile ?? e.hideOnMobile,
|
|
46
|
+
draggable: r?.draggable ?? e.draggable,
|
|
47
|
+
resizeable: r?.resizeable ?? e.resizeable,
|
|
48
|
+
sortable: r?.sortable ?? e.sortable,
|
|
49
|
+
sortDirection: e.columnKey && y.has(e.columnKey) ? h : void 0,
|
|
50
|
+
rowStart: e.row,
|
|
51
|
+
rowSpan: e.rowSpan,
|
|
52
|
+
columnStart: n,
|
|
53
|
+
colSpan: e.colSpan,
|
|
54
|
+
source: o
|
|
55
|
+
};
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
rowCount: b,
|
|
59
|
+
totalColumnCount: a.length,
|
|
60
|
+
columns: p
|
|
61
|
+
};
|
|
62
|
+
}, [i, a, l, h]);
|
|
63
|
+
};
|
|
64
|
+
export {
|
|
65
|
+
z as default
|
|
66
|
+
};
|
|
67
|
+
//# sourceMappingURL=useResolvedRenderHeader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useResolvedRenderHeader.js","sources":["../../../../src/components/table/runtime/useResolvedRenderHeader.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport type { RenderHeaderColumn } from '../context/TableRenderContext';\nimport type { TableViewHeader } from '../model/tableView.types';\nimport type { TableColumnDefinition, TableRowData, TableSortDirection } from '../Table.types';\n\ntype UseResolvedRenderHeaderProps<RowType extends TableRowData> = {\n renderHeaderColumns: RenderHeaderColumn<RowType>[];\n resolvedRenderColumns: RenderHeaderColumn<RowType>[];\n sortBy?: string | string[];\n sortDirection?: TableSortDirection;\n};\n\n/**\n * Builds the normalized header layout from registered header cells and the\n * already-resolved data columns.\n *\n * `useResolvedRenderColumns(...)` decides which columns actually exist after\n * reorder/resize behavior. This hook takes that flat column model plus the\n * registered header cells and computes the final header grid:\n * - row count\n * - column start positions\n * - row/column spans\n * - sortable state for the active sort key\n * - `source` metadata for downstream header/cell consumers\n *\n * The result is a stable header view model that `TableHeader` can render\n * without repeating placement logic.\n */\nconst useResolvedRenderHeader = <RowType extends TableRowData>(\n props: UseResolvedRenderHeaderProps<RowType>\n): TableViewHeader<RowType> | undefined => {\n const { renderHeaderColumns, resolvedRenderColumns, sortBy, sortDirection } = props;\n\n return useMemo<TableViewHeader<RowType> | undefined>(() => {\n if (renderHeaderColumns.length === 0 || resolvedRenderColumns.length === 0) {\n return;\n }\n\n const sortedColumnKeys = new Set(Array.isArray(sortBy) ? sortBy : sortBy ? [sortBy] : []);\n const rowCount = Math.max(...renderHeaderColumns.map(column => column.row + column.rowSpan - 1), 1);\n const occupied = Array.from({ length: rowCount }, () => Array(resolvedRenderColumns.length).fill(false));\n const resolvedRenderColumnsByKey = new Map(\n resolvedRenderColumns.map(column => [column.columnKey, column] as const)\n );\n const columnStartByKey = new Map(\n resolvedRenderColumns.map((column, index) => [column.columnKey, index + 1] as const)\n );\n\n // Group headers without a direct `columnKey` still need a column start.\n // Find the next free slot by walking the occupied grid from left to right.\n const findColumnStart = (rowStart: number, colSpan: number) => {\n for (let candidate = 1; candidate <= resolvedRenderColumns.length - colSpan + 1; candidate += 1) {\n const hasFreeSlot = occupied[rowStart - 1]\n ?.slice(candidate - 1, candidate - 1 + colSpan)\n .every(isUsed => !isUsed);\n\n if (hasFreeSlot) {\n return candidate;\n }\n }\n\n return 1;\n };\n\n const columns = renderHeaderColumns.map(column => {\n const resolvedRenderColumn = column.columnKey\n ? resolvedRenderColumnsByKey.get(column.columnKey)\n : undefined;\n const sourceColumnDefinition: TableColumnDefinition<RowType> | undefined = resolvedRenderColumn?.columnKey\n ? {\n key: resolvedRenderColumn.columnKey,\n label: resolvedRenderColumn.label,\n width: resolvedRenderColumn.width,\n mobileLabel: resolvedRenderColumn.mobileLabel,\n horizontalAlign: resolvedRenderColumn.horizontalAlign,\n headerClassName: resolvedRenderColumn.headerClassName,\n hideOnMobile: resolvedRenderColumn.hideOnMobile,\n sortable: resolvedRenderColumn.sortable,\n draggable: resolvedRenderColumn.draggable,\n resizeable: resolvedRenderColumn.resizeable,\n minResizeWidth: resolvedRenderColumn.minResizeWidth,\n maxResizeWidth: resolvedRenderColumn.maxResizeWidth,\n }\n : undefined;\n const columnStart = resolvedRenderColumn\n ? (columnStartByKey.get(resolvedRenderColumn.columnKey) ?? 1)\n : findColumnStart(column.row, column.colSpan);\n\n // Mark the occupied grid so following grouped header cells can find\n // the next free placement slot in multi-row header layouts.\n for (let rowIndex = column.row - 1; rowIndex < column.row - 1 + column.rowSpan; rowIndex += 1) {\n for (\n let columnIndex = columnStart - 1;\n columnIndex < columnStart - 1 + column.colSpan;\n columnIndex += 1\n ) {\n if (occupied[rowIndex]?.[columnIndex] !== undefined) {\n occupied[rowIndex][columnIndex] = true;\n }\n }\n }\n\n return {\n key: column.id,\n columnKey: column.columnKey,\n label: column.label,\n icon: column.icon,\n filter: column.filter,\n hideLabel: column.hideLabel,\n horizontalAlign: resolvedRenderColumn?.horizontalAlign ?? column.horizontalAlign,\n verticalAlign: resolvedRenderColumn?.verticalAlign ?? column.verticalAlign,\n className: undefined,\n headerClassName: resolvedRenderColumn?.headerClassName ?? column.headerClassName,\n hideOnMobile: resolvedRenderColumn?.hideOnMobile ?? column.hideOnMobile,\n draggable: resolvedRenderColumn?.draggable ?? column.draggable,\n resizeable: resolvedRenderColumn?.resizeable ?? column.resizeable,\n sortable: resolvedRenderColumn?.sortable ?? column.sortable,\n sortDirection: column.columnKey && sortedColumnKeys.has(column.columnKey) ? sortDirection : undefined,\n rowStart: column.row,\n rowSpan: column.rowSpan,\n columnStart,\n colSpan: column.colSpan,\n source: sourceColumnDefinition,\n };\n });\n\n return {\n rowCount,\n totalColumnCount: resolvedRenderColumns.length,\n columns,\n };\n }, [renderHeaderColumns, resolvedRenderColumns, sortBy, sortDirection]);\n};\n\nexport default useResolvedRenderHeader;\n"],"names":["useResolvedRenderHeader","props","renderHeaderColumns","resolvedRenderColumns","sortBy","sortDirection","useMemo","sortedColumnKeys","rowCount","column","occupied","resolvedRenderColumnsByKey","columnStartByKey","index","findColumnStart","rowStart","colSpan","candidate","isUsed","columns","resolvedRenderColumn","sourceColumnDefinition","columnStart","rowIndex","columnIndex"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { RenderBodyRow } from '../context/TableRenderContext';
|
|
2
|
+
import { TableRowData, TableRowId } from '../Table.types';
|
|
3
|
+
type UseInternalTableSelectionStateOptions<RowType extends TableRowData> = {
|
|
4
|
+
bodyRows: RenderBodyRow<RowType>[];
|
|
5
|
+
selectedRowIds?: TableRowId[];
|
|
6
|
+
onSelectionChange?: (rowIds: TableRowId[]) => void;
|
|
7
|
+
};
|
|
8
|
+
type UseInternalTableSelectionStateReturn = {
|
|
9
|
+
currentSelectedRowIds: TableRowId[];
|
|
10
|
+
selectedRowIdSet: Set<TableRowId>;
|
|
11
|
+
isAllRowsSelected: boolean;
|
|
12
|
+
isSomeRowsSelected: boolean;
|
|
13
|
+
handleToggleAllSelection: () => void;
|
|
14
|
+
handleToggleRowSelection: (rowId: TableRowId) => void;
|
|
15
|
+
};
|
|
16
|
+
declare const useInternalTableSelectionState: <RowType extends TableRowData>(props: UseInternalTableSelectionStateOptions<RowType>) => UseInternalTableSelectionStateReturn;
|
|
17
|
+
export default useInternalTableSelectionState;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { useMemo as o } from "react";
|
|
2
|
+
const f = (r) => {
|
|
3
|
+
const { bodyRows: c, selectedRowIds: w, onSelectionChange: n } = r, l = o(
|
|
4
|
+
() => c.filter((e) => e.kind === "data" && !e.disabled).map((e) => e.rowId),
|
|
5
|
+
[c]
|
|
6
|
+
), d = o(() => new Set(l), [l]), t = w ?? [], a = o(() => new Set(t), [t]), S = o(
|
|
7
|
+
() => t.filter((e) => d.has(e)),
|
|
8
|
+
[t, d]
|
|
9
|
+
), i = o(() => new Set(S), [S]), s = l.length > 0 && l.every((e) => i.has(e)), R = i.size > 0 && !s;
|
|
10
|
+
return {
|
|
11
|
+
currentSelectedRowIds: t,
|
|
12
|
+
selectedRowIdSet: a,
|
|
13
|
+
isAllRowsSelected: s,
|
|
14
|
+
isSomeRowsSelected: R,
|
|
15
|
+
handleToggleAllSelection: () => {
|
|
16
|
+
n?.(s ? [] : l);
|
|
17
|
+
},
|
|
18
|
+
handleToggleRowSelection: (e) => {
|
|
19
|
+
n && n(
|
|
20
|
+
a.has(e) ? t.filter((g) => g !== e) : [...t, e]
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export {
|
|
26
|
+
f as default
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=useInternalTableSelectionState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInternalTableSelectionState.js","sources":["../../../../src/components/table/selection/useInternalTableSelectionState.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport type { RenderBodyRow } from '../context/TableRenderContext';\nimport type { TableRowData, TableRowId } from '../Table.types';\n\ntype UseInternalTableSelectionStateOptions<RowType extends TableRowData> = {\n bodyRows: RenderBodyRow<RowType>[];\n selectedRowIds?: TableRowId[];\n onSelectionChange?: (rowIds: TableRowId[]) => void;\n};\n\ntype UseInternalTableSelectionStateReturn = {\n currentSelectedRowIds: TableRowId[];\n selectedRowIdSet: Set<TableRowId>;\n isAllRowsSelected: boolean;\n isSomeRowsSelected: boolean;\n handleToggleAllSelection: () => void;\n handleToggleRowSelection: (rowId: TableRowId) => void;\n};\n\nconst useInternalTableSelectionState = <RowType extends TableRowData>(\n props: UseInternalTableSelectionStateOptions<RowType>\n): UseInternalTableSelectionStateReturn => {\n const { bodyRows, selectedRowIds, onSelectionChange } = props;\n\n const selectableRowIds = useMemo(\n () => bodyRows.filter(row => row.kind === 'data' && !row.disabled).map(row => row.rowId),\n [bodyRows]\n );\n const selectableRowIdSet = useMemo(() => new Set(selectableRowIds), [selectableRowIds]);\n const currentSelectedRowIds = selectedRowIds ?? [];\n const selectedRowIdSet = useMemo(() => new Set(currentSelectedRowIds), [currentSelectedRowIds]);\n const normalizedSelectedRowIds = useMemo(\n () => currentSelectedRowIds.filter(rowId => selectableRowIdSet.has(rowId)),\n [currentSelectedRowIds, selectableRowIdSet]\n );\n const normalizedSelectedRowIdSet = useMemo(() => new Set(normalizedSelectedRowIds), [normalizedSelectedRowIds]);\n\n const isAllRowsSelected =\n selectableRowIds.length > 0 && selectableRowIds.every(rowId => normalizedSelectedRowIdSet.has(rowId));\n const isSomeRowsSelected = normalizedSelectedRowIdSet.size > 0 && !isAllRowsSelected;\n\n const handleToggleAllSelection = () => {\n onSelectionChange?.(isAllRowsSelected ? [] : selectableRowIds);\n };\n\n const handleToggleRowSelection = (rowId: TableRowId) => {\n if (!onSelectionChange) {\n return;\n }\n\n onSelectionChange(\n selectedRowIdSet.has(rowId)\n ? currentSelectedRowIds.filter(selectedRowId => selectedRowId !== rowId)\n : [...currentSelectedRowIds, rowId]\n );\n };\n\n return {\n currentSelectedRowIds,\n selectedRowIdSet,\n isAllRowsSelected,\n isSomeRowsSelected,\n handleToggleAllSelection,\n handleToggleRowSelection,\n };\n};\n\nexport default useInternalTableSelectionState;\n"],"names":["useInternalTableSelectionState","props","bodyRows","selectedRowIds","onSelectionChange","selectableRowIds","useMemo","row","selectableRowIdSet","currentSelectedRowIds","selectedRowIdSet","normalizedSelectedRowIds","rowId","normalizedSelectedRowIdSet","isAllRowsSelected","isSomeRowsSelected","selectedRowId"],"mappings":";AAoBA,MAAMA,IAAiC,CACnCC,MACuC;AACvC,QAAM,EAAE,UAAAC,GAAU,gBAAAC,GAAgB,mBAAAC,EAAA,IAAsBH,GAElDI,IAAmBC;AAAA,IACrB,MAAMJ,EAAS,OAAO,CAAAK,MAAOA,EAAI,SAAS,UAAU,CAACA,EAAI,QAAQ,EAAE,IAAI,CAAAA,MAAOA,EAAI,KAAK;AAAA,IACvF,CAACL,CAAQ;AAAA,EAAA,GAEPM,IAAqBF,EAAQ,MAAM,IAAI,IAAID,CAAgB,GAAG,CAACA,CAAgB,CAAC,GAChFI,IAAwBN,KAAkB,CAAA,GAC1CO,IAAmBJ,EAAQ,MAAM,IAAI,IAAIG,CAAqB,GAAG,CAACA,CAAqB,CAAC,GACxFE,IAA2BL;AAAA,IAC7B,MAAMG,EAAsB,OAAO,OAASD,EAAmB,IAAII,CAAK,CAAC;AAAA,IACzE,CAACH,GAAuBD,CAAkB;AAAA,EAAA,GAExCK,IAA6BP,EAAQ,MAAM,IAAI,IAAIK,CAAwB,GAAG,CAACA,CAAwB,CAAC,GAExGG,IACFT,EAAiB,SAAS,KAAKA,EAAiB,MAAM,CAAAO,MAASC,EAA2B,IAAID,CAAK,CAAC,GAClGG,IAAqBF,EAA2B,OAAO,KAAK,CAACC;AAkBnE,SAAO;AAAA,IACH,uBAAAL;AAAA,IACA,kBAAAC;AAAA,IACA,mBAAAI;AAAA,IACA,oBAAAC;AAAA,IACA,0BArB6B,MAAM;AACnC,MAAAX,IAAoBU,IAAoB,CAAA,IAAKT,CAAgB;AAAA,IACjE;AAAA,IAoBI,0BAlB6B,CAACO,MAAsB;AACpD,MAAKR,KAILA;AAAA,QACIM,EAAiB,IAAIE,CAAK,IACpBH,EAAsB,OAAO,CAAAO,MAAiBA,MAAkBJ,CAAK,IACrE,CAAC,GAAGH,GAAuBG,CAAK;AAAA,MAAA;AAAA,IAE9C;AAAA,EAQI;AAER;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { TableRowId } from '../Table.types';
|
|
1
|
+
import { TableRowData, TableRowId } from '../Table.types';
|
|
2
2
|
/**
|
|
3
3
|
* Configuration for `useTableSelection`.
|
|
4
4
|
*/
|
|
5
|
-
export type UseTableSelectionOptions<RowType extends
|
|
5
|
+
export type UseTableSelectionOptions<RowType extends TableRowData> = {
|
|
6
6
|
/**
|
|
7
7
|
* Data rows that participate in active-row and selection state.
|
|
8
8
|
*/
|
|
@@ -78,5 +78,5 @@ export type UseTableSelectionReturn = {
|
|
|
78
78
|
* row and selection in sync when rows change, and provides convenience helpers
|
|
79
79
|
* for single-row and all-row toggling.
|
|
80
80
|
*/
|
|
81
|
-
declare const useTableSelection: <RowType extends
|
|
81
|
+
declare const useTableSelection: <RowType extends TableRowData>(props: UseTableSelectionOptions<RowType>) => UseTableSelectionReturn;
|
|
82
82
|
export default useTableSelection;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTableSelection.js","sources":["../../../../src/components/table/selection/useTableSelection.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\n\nimport { resolveRowKey } from '../model/resolveRowMeta';\nimport type { TableRowId } from '../Table.types';\n\n/**\n * Configuration for `useTableSelection`.\n */\nexport type UseTableSelectionOptions<RowType extends
|
|
1
|
+
{"version":3,"file":"useTableSelection.js","sources":["../../../../src/components/table/selection/useTableSelection.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\n\nimport { resolveRowKey } from '../model/resolveRowMeta';\nimport type { TableRowData, TableRowId } from '../Table.types';\n\n/**\n * Configuration for `useTableSelection`.\n */\nexport type UseTableSelectionOptions<RowType extends TableRowData> = {\n /**\n * Data rows that participate in active-row and selection state.\n */\n rows: RowType[];\n\n /**\n * Optional key accessor used to derive stable row ids.\n *\n * If omitted, the row index is used as a fallback.\n */\n rowKey?: keyof RowType | ((row: RowType, rowIndex: number) => TableRowId);\n\n /**\n * Optional initially active row id.\n */\n initialActiveRowId?: TableRowId;\n\n /**\n * Optional initially selected row ids.\n */\n initialSelectedRowIds?: TableRowId[];\n};\n\n/**\n * Selection and active-row state returned by `useTableSelection`.\n */\nexport type UseTableSelectionReturn = {\n /**\n * Currently active row id.\n */\n activeRowId?: TableRowId;\n\n /**\n * Currently selected row ids.\n */\n selectedRowIds: TableRowId[];\n\n /**\n * Whether at least one row is currently selected.\n */\n hasSelection: boolean;\n\n /**\n * Whether all current rows are selected.\n */\n isAllSelected: boolean;\n\n /**\n * Checks whether a given row id is currently selected.\n */\n isRowSelected: (rowId: TableRowId) => boolean;\n\n /**\n * Sets the current active row id.\n */\n setActiveRowId: (rowId: TableRowId | undefined) => void;\n\n /**\n * Replaces the current selection with the provided row ids.\n */\n setSelectedRowIds: (rowIds: TableRowId[]) => void;\n\n /**\n * Toggles selection state for a single row id.\n */\n toggleRowSelection: (rowId: TableRowId) => void;\n\n /**\n * Selects or deselects all current rows.\n *\n * If `shouldSelect` is omitted, the hook toggles based on the current\n * all-selected state.\n */\n toggleAllSelection: (shouldSelect?: boolean) => void;\n\n /**\n * Clears the current selection.\n */\n clearSelection: () => void;\n};\n\n/**\n * Small helper hook for controlled table demos and simple table integrations\n * that need active-row state plus checkbox selection state.\n *\n * The hook derives stable row ids from `rows` and `rowKey`, keeps the active\n * row and selection in sync when rows change, and provides convenience helpers\n * for single-row and all-row toggling.\n */\nconst useTableSelection = <RowType extends TableRowData>(\n props: UseTableSelectionOptions<RowType>\n): UseTableSelectionReturn => {\n const { rows, rowKey, initialActiveRowId, initialSelectedRowIds = [] } = props;\n\n const rowIds = useMemo(() => rows.map((row, rowIndex) => resolveRowKey(row, rowIndex, rowKey)), [rows, rowKey]);\n const rowIdSet = useMemo(() => new Set(rowIds), [rowIds]);\n\n const [activeRowId, setActiveRowId] = useState<TableRowId | undefined>(initialActiveRowId);\n const [selectedRowIds, setSelectedRowIds] = useState<TableRowId[]>(initialSelectedRowIds);\n\n useEffect(() => {\n setSelectedRowIds(previousSelectedRowIds => previousSelectedRowIds.filter(rowId => rowIdSet.has(rowId)));\n setActiveRowId(previousActiveRowId =>\n previousActiveRowId !== undefined && rowIdSet.has(previousActiveRowId) ? previousActiveRowId : undefined\n );\n }, [rowIdSet]);\n\n const toggleRowSelection = (rowId: TableRowId) => {\n setSelectedRowIds(previousSelectedRowIds =>\n previousSelectedRowIds.includes(rowId)\n ? previousSelectedRowIds.filter(selectedRowId => selectedRowId !== rowId)\n : [...previousSelectedRowIds, rowId]\n );\n };\n\n const toggleAllSelection = (shouldSelect = !rowIds.every(rowId => selectedRowIds.includes(rowId))) => {\n setSelectedRowIds(shouldSelect ? rowIds : []);\n };\n\n const clearSelection = () => {\n setSelectedRowIds([]);\n };\n\n return {\n activeRowId,\n selectedRowIds,\n hasSelection: selectedRowIds.length > 0,\n isAllSelected: rowIds.length > 0 && rowIds.every(rowId => selectedRowIds.includes(rowId)),\n isRowSelected: rowId => selectedRowIds.includes(rowId),\n setActiveRowId,\n setSelectedRowIds,\n toggleRowSelection,\n toggleAllSelection,\n clearSelection,\n };\n};\n\nexport default useTableSelection;\n"],"names":["useTableSelection","props","rows","rowKey","initialActiveRowId","initialSelectedRowIds","rowIds","useMemo","row","rowIndex","resolveRowKey","rowIdSet","activeRowId","setActiveRowId","useState","selectedRowIds","setSelectedRowIds","useEffect","previousSelectedRowIds","rowId","previousActiveRowId","toggleRowSelection","selectedRowId","toggleAllSelection","shouldSelect","clearSelection"],"mappings":";;AAkGA,MAAMA,IAAoB,CACtBC,MAC0B;AAC1B,QAAM,EAAE,MAAAC,GAAM,QAAAC,GAAQ,oBAAAC,GAAoB,uBAAAC,IAAwB,CAAA,MAAOJ,GAEnEK,IAASC,EAAQ,MAAML,EAAK,IAAI,CAACM,GAAKC,MAAaC,EAAcF,GAAKC,GAAUN,CAAM,CAAC,GAAG,CAACD,GAAMC,CAAM,CAAC,GACxGQ,IAAWJ,EAAQ,MAAM,IAAI,IAAID,CAAM,GAAG,CAACA,CAAM,CAAC,GAElD,CAACM,GAAaC,CAAc,IAAIC,EAAiCV,CAAkB,GACnF,CAACW,GAAgBC,CAAiB,IAAIF,EAAuBT,CAAqB;AAExF,EAAAY,EAAU,MAAM;AACZ,IAAAD,EAAkB,CAAAE,MAA0BA,EAAuB,OAAO,CAAAC,MAASR,EAAS,IAAIQ,CAAK,CAAC,CAAC,GACvGN;AAAA,MAAe,OACXO,MAAwB,UAAaT,EAAS,IAAIS,CAAmB,IAAIA,IAAsB;AAAA,IAAA;AAAA,EAEvG,GAAG,CAACT,CAAQ,CAAC;AAEb,QAAMU,IAAqB,CAACF,MAAsB;AAC9C,IAAAH;AAAA,MAAkB,CAAAE,MACdA,EAAuB,SAASC,CAAK,IAC/BD,EAAuB,OAAO,CAAAI,MAAiBA,MAAkBH,CAAK,IACtE,CAAC,GAAGD,GAAwBC,CAAK;AAAA,IAAA;AAAA,EAE/C,GAEMI,IAAqB,CAACC,IAAe,CAAClB,EAAO,MAAM,CAAAa,MAASJ,EAAe,SAASI,CAAK,CAAC,MAAM;AAClG,IAAAH,EAAkBQ,IAAelB,IAAS,EAAE;AAAA,EAChD,GAEMmB,IAAiB,MAAM;AACzB,IAAAT,EAAkB,CAAA,CAAE;AAAA,EACxB;AAEA,SAAO;AAAA,IACH,aAAAJ;AAAA,IACA,gBAAAG;AAAA,IACA,cAAcA,EAAe,SAAS;AAAA,IACtC,eAAeT,EAAO,SAAS,KAAKA,EAAO,MAAM,CAAAa,MAASJ,EAAe,SAASI,CAAK,CAAC;AAAA,IACxF,eAAe,CAAAA,MAASJ,EAAe,SAASI,CAAK;AAAA,IACrD,gBAAAN;AAAA,IACA,mBAAAG;AAAA,IACA,oBAAAK;AAAA,IACA,oBAAAE;AAAA,IACA,gBAAAE;AAAA,EAAA;AAER;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
const s = (e = "hidden") => {
|
|
2
|
+
switch (e) {
|
|
3
|
+
case "visible":
|
|
4
|
+
return "overflow-visible";
|
|
5
|
+
case "ellipsis":
|
|
6
|
+
return "ellipsis-1";
|
|
7
|
+
case "ellipsis-2":
|
|
8
|
+
return "ellipsis-2";
|
|
9
|
+
case "ellipsis-3":
|
|
10
|
+
return "ellipsis-3";
|
|
11
|
+
default:
|
|
12
|
+
return "overflow-hidden";
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
export {
|
|
16
|
+
s as default
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=getCellContentOverflowClassName.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getCellContentOverflowClassName.js","sources":["../../../../src/components/table/shared/getCellContentOverflowClassName.ts"],"sourcesContent":["import type { TableCellOverflow } from '../Table.types';\n\nconst getCellContentOverflowClassName = (overflow: TableCellOverflow = 'hidden') => {\n switch (overflow) {\n case 'visible':\n return 'overflow-visible';\n case 'ellipsis':\n return 'ellipsis-1';\n case 'ellipsis-2':\n return 'ellipsis-2';\n case 'ellipsis-3':\n return 'ellipsis-3';\n default:\n return 'overflow-hidden';\n }\n};\n\nexport default getCellContentOverflowClassName;\n"],"names":["getCellContentOverflowClassName","overflow"],"mappings":"AAEA,MAAMA,IAAkC,CAACC,IAA8B,aAAa;AAChF,UAAQA,GAAA;AAAA,IACJ,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX;AACI,aAAO;AAAA,EAAA;AAEnB;"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { KeyboardEventHandler } from 'react';
|
|
2
|
-
|
|
2
|
+
import { TableRowData } from '../Table.types';
|
|
3
|
+
type GetInteractiveRowPropsArgs<RowType extends TableRowData> = {
|
|
3
4
|
isClickable: boolean;
|
|
4
5
|
onRowClick?: (row: RowType, rowIndex: number) => void;
|
|
5
6
|
row: RowType;
|
|
6
7
|
rowIndex: number;
|
|
7
8
|
};
|
|
8
|
-
export declare const getInteractiveRowProps: <RowType extends
|
|
9
|
+
export declare const getInteractiveRowProps: <RowType extends TableRowData>(args: GetInteractiveRowPropsArgs<RowType>) => {
|
|
9
10
|
isClickableClassName: string | undefined;
|
|
10
11
|
onClick: (() => void | undefined) | undefined;
|
|
11
12
|
onKeyDown: KeyboardEventHandler<HTMLDivElement> | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getInteractiveRowProps.js","sources":["../../../../src/components/table/shared/getInteractiveRowProps.ts"],"sourcesContent":["import type { KeyboardEventHandler } from 'react';\n\ntype GetInteractiveRowPropsArgs<RowType extends
|
|
1
|
+
{"version":3,"file":"getInteractiveRowProps.js","sources":["../../../../src/components/table/shared/getInteractiveRowProps.ts"],"sourcesContent":["import type { KeyboardEventHandler } from 'react';\n\nimport type { TableRowData } from '../Table.types';\n\ntype GetInteractiveRowPropsArgs<RowType extends TableRowData> = {\n isClickable: boolean;\n onRowClick?: (row: RowType, rowIndex: number) => void;\n row: RowType;\n rowIndex: number;\n};\n\nexport const getInteractiveRowProps = <RowType extends TableRowData>(args: GetInteractiveRowPropsArgs<RowType>) => {\n const { isClickable, onRowClick, row, rowIndex } = args;\n\n const onKeyDown: KeyboardEventHandler<HTMLDivElement> | undefined = isClickable\n ? event => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n onRowClick?.(row, rowIndex);\n }\n }\n : undefined;\n\n return {\n isClickableClassName: isClickable ? 'table-row-clickable' : undefined,\n onClick: isClickable ? () => onRowClick?.(row, rowIndex) : undefined,\n onKeyDown,\n tabIndex: isClickable ? 0 : undefined,\n };\n};\n"],"names":["getInteractiveRowProps","args","isClickable","onRowClick","row","rowIndex","event"],"mappings":"AAWO,MAAMA,IAAyB,CAA+BC,MAA8C;AAC/G,QAAM,EAAE,aAAAC,GAAa,YAAAC,GAAY,KAAAC,GAAK,UAAAC,MAAaJ;AAWnD,SAAO;AAAA,IACH,sBAAsBC,IAAc,wBAAwB;AAAA,IAC5D,SAASA,IAAc,MAAMC,IAAaC,GAAKC,CAAQ,IAAI;AAAA,IAC3D,WAZgEH,IAC9D,CAAAI,MAAS;AACL,OAAIA,EAAM,QAAQ,WAAWA,EAAM,QAAQ,SACvCA,EAAM,eAAA,GACNH,IAAaC,GAAKC,CAAQ;AAAA,IAElC,IACA;AAAA,IAMF,UAAUH,IAAc,IAAI;AAAA,EAAA;AAEpC;"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { MutableRefObject, PointerEvent as ReactPointerEvent } from 'react';
|
|
1
|
+
import { MutableRefObject, PointerEvent as ReactPointerEvent, ReactNode, RefObject } from 'react';
|
|
2
2
|
export type DraggablePosition = {
|
|
3
3
|
/**
|
|
4
|
-
* Top offset in pixels relative to the
|
|
4
|
+
* Top offset in pixels relative to the active positioning context.
|
|
5
5
|
*/
|
|
6
6
|
top: number;
|
|
7
7
|
/**
|
|
8
|
-
* Left offset in pixels relative to the
|
|
8
|
+
* Left offset in pixels relative to the active positioning context.
|
|
9
9
|
*/
|
|
10
10
|
left: number;
|
|
11
11
|
/**
|
|
@@ -29,7 +29,29 @@ export type UseDraggableResult<T extends HTMLElement> = {
|
|
|
29
29
|
/**
|
|
30
30
|
* Pointer down handler for the dedicated drag handle element.
|
|
31
31
|
*/
|
|
32
|
-
|
|
32
|
+
onDragHandleDown: (event: ReactPointerEvent<HTMLElement>) => void;
|
|
33
|
+
/**
|
|
34
|
+
* Renders the provided element through the shared portal root in viewport mode.
|
|
35
|
+
* An optional custom target can be passed for specialized overlay hosts.
|
|
36
|
+
* In container mode, the element is returned unchanged and this helper is usually not needed.
|
|
37
|
+
*/
|
|
38
|
+
renderElement: (element: ReactNode, target?: HTMLElement | null) => ReactNode;
|
|
39
|
+
};
|
|
40
|
+
export type UseDraggableElementOptions = {
|
|
41
|
+
/**
|
|
42
|
+
* Defines whether drag coordinates are resolved against the viewport or a collision container.
|
|
43
|
+
* Viewport mode also enables portal rendering via `renderElement`.
|
|
44
|
+
*/
|
|
45
|
+
positioning?: 'viewport' | 'container';
|
|
46
|
+
/**
|
|
47
|
+
* Optional initial position for the draggable element.
|
|
48
|
+
* Use `center` to center the element inside the active positioning context on mount.
|
|
49
|
+
*/
|
|
50
|
+
initialPosition?: 'center' | Pick<DraggablePosition, 'top' | 'left'>;
|
|
51
|
+
/**
|
|
52
|
+
* Optional container whose visible client rect is used as the drag boundary in container mode.
|
|
53
|
+
*/
|
|
54
|
+
collisionContainerRef?: RefObject<HTMLElement | null>;
|
|
33
55
|
};
|
|
34
|
-
declare const useDraggableElement: <T extends HTMLElement = HTMLDivElement>() => UseDraggableResult<T>;
|
|
56
|
+
declare const useDraggableElement: <T extends HTMLElement = HTMLDivElement>(options?: UseDraggableElementOptions) => UseDraggableResult<T>;
|
|
35
57
|
export default useDraggableElement;
|
|
@@ -1,49 +1,126 @@
|
|
|
1
|
-
import { useState as
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { useState as M, useRef as C, useEffect as Y, useCallback as H, useLayoutEffect as N } from "react";
|
|
2
|
+
import { createPortal as O } from "react-dom";
|
|
3
|
+
import { getOrCreatePortalRoot as W } from "../utils/portalRoot.js";
|
|
4
|
+
const y = 4, v = "is-dragging", s = (a, e, o) => Math.min(o, Math.max(e, a)), R = (a) => a?.current?.getBoundingClientRect() ?? null, I = (a, e, o) => a === "container" && o ? {
|
|
5
|
+
top: s(
|
|
6
|
+
(o.height - e.height) / 2,
|
|
7
|
+
0,
|
|
8
|
+
Math.max(0, o.height - e.height)
|
|
9
|
+
),
|
|
10
|
+
left: s(
|
|
11
|
+
(o.width - e.width) / 2,
|
|
12
|
+
0,
|
|
13
|
+
Math.max(0, o.width - e.width)
|
|
14
|
+
)
|
|
15
|
+
} : {
|
|
16
|
+
top: s(
|
|
17
|
+
(window.innerHeight - e.height) / 2,
|
|
18
|
+
0,
|
|
19
|
+
Math.max(0, window.innerHeight - e.height)
|
|
20
|
+
),
|
|
21
|
+
left: s(
|
|
22
|
+
(window.innerWidth - e.width) / 2,
|
|
23
|
+
0,
|
|
24
|
+
Math.max(0, window.innerWidth - e.width)
|
|
25
|
+
)
|
|
26
|
+
}, j = (a = {}) => {
|
|
27
|
+
const { positioning: e = "viewport", initialPosition: o, collisionContainerRef: d } = a, [u, D] = M(!1), [g, p] = M({ top: 0, left: 0, hasDragged: !1 }), [x, L] = M(null), h = C(null), w = C(null), c = e === "viewport";
|
|
28
|
+
Y(() => {
|
|
29
|
+
if (!c) {
|
|
30
|
+
L(null);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
L(W());
|
|
34
|
+
}, [c]);
|
|
35
|
+
const S = H(
|
|
36
|
+
(t, r) => {
|
|
37
|
+
if (!c)
|
|
38
|
+
return t;
|
|
39
|
+
const n = r ?? x;
|
|
40
|
+
return n ? O(t, n) : null;
|
|
41
|
+
},
|
|
42
|
+
[c, x]
|
|
43
|
+
);
|
|
44
|
+
N(() => {
|
|
45
|
+
if (g.hasDragged || !o)
|
|
46
|
+
return;
|
|
47
|
+
const t = h.current;
|
|
48
|
+
if (!t)
|
|
49
|
+
return;
|
|
50
|
+
const r = o === "center" ? I(
|
|
51
|
+
e,
|
|
52
|
+
t.getBoundingClientRect(),
|
|
53
|
+
R(d)
|
|
54
|
+
) : o;
|
|
55
|
+
p(
|
|
56
|
+
(n) => n.top === r.top && n.left === r.left ? n : { top: r.top, left: r.left, hasDragged: !1 }
|
|
57
|
+
);
|
|
58
|
+
}, [d, o, g.hasDragged, e]);
|
|
59
|
+
const T = H((t) => {
|
|
4
60
|
if (t.button !== 0)
|
|
5
61
|
return;
|
|
6
62
|
t.preventDefault(), t.stopPropagation();
|
|
7
|
-
const r =
|
|
63
|
+
const r = h.current;
|
|
8
64
|
if (!r)
|
|
9
65
|
return;
|
|
10
66
|
const n = r.getBoundingClientRect();
|
|
11
|
-
|
|
67
|
+
w.current = {
|
|
12
68
|
offsetX: t.clientX - n.left,
|
|
13
69
|
offsetY: t.clientY - n.top,
|
|
14
70
|
startX: t.clientX,
|
|
15
71
|
startY: t.clientY,
|
|
16
72
|
hasMoved: !1
|
|
17
|
-
},
|
|
73
|
+
}, D(!0);
|
|
18
74
|
}, []);
|
|
19
|
-
return
|
|
20
|
-
if (!
|
|
75
|
+
return Y(() => {
|
|
76
|
+
if (!u)
|
|
21
77
|
return;
|
|
22
78
|
const t = document.documentElement;
|
|
23
|
-
t.classList.add(
|
|
24
|
-
const r = (
|
|
25
|
-
const
|
|
26
|
-
if (!
|
|
79
|
+
t.classList.add(v);
|
|
80
|
+
const r = (B) => {
|
|
81
|
+
const i = w.current, P = h.current;
|
|
82
|
+
if (!i || !P)
|
|
83
|
+
return;
|
|
84
|
+
const { clientX: m, clientY: E } = B, _ = Math.hypot(m - i.startX, E - i.startY);
|
|
85
|
+
if (!i.hasMoved && _ < y)
|
|
27
86
|
return;
|
|
28
|
-
|
|
29
|
-
|
|
87
|
+
i.hasMoved || (i.hasMoved = !0);
|
|
88
|
+
const f = P.getBoundingClientRect(), l = R(d);
|
|
89
|
+
if (e === "container" && l) {
|
|
90
|
+
const A = s(
|
|
91
|
+
m - l.left - i.offsetX,
|
|
92
|
+
0,
|
|
93
|
+
Math.max(0, l.width - f.width)
|
|
94
|
+
), G = s(
|
|
95
|
+
E - l.top - i.offsetY,
|
|
96
|
+
0,
|
|
97
|
+
Math.max(0, l.height - f.height)
|
|
98
|
+
);
|
|
99
|
+
p({
|
|
100
|
+
top: G,
|
|
101
|
+
left: A,
|
|
102
|
+
hasDragged: !0
|
|
103
|
+
});
|
|
30
104
|
return;
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
top:
|
|
35
|
-
|
|
105
|
+
}
|
|
106
|
+
const X = {
|
|
107
|
+
left: s(m - i.offsetX, 0, Math.max(0, window.innerWidth - f.width)),
|
|
108
|
+
top: s(E - i.offsetY, 0, Math.max(0, window.innerHeight - f.height))
|
|
109
|
+
};
|
|
110
|
+
p({
|
|
111
|
+
top: X.top,
|
|
112
|
+
left: X.left,
|
|
36
113
|
hasDragged: !0
|
|
37
114
|
});
|
|
38
115
|
}, n = () => {
|
|
39
|
-
t.classList.remove(
|
|
116
|
+
t.classList.remove(v), D(!1), w.current = null;
|
|
40
117
|
};
|
|
41
118
|
return window.addEventListener("pointermove", r), window.addEventListener("pointerup", n), window.addEventListener("pointercancel", n), () => {
|
|
42
|
-
window.removeEventListener("pointermove", r), window.removeEventListener("pointerup", n), window.removeEventListener("pointercancel", n), t.classList.remove(
|
|
119
|
+
window.removeEventListener("pointermove", r), window.removeEventListener("pointerup", n), window.removeEventListener("pointercancel", n), t.classList.remove(v);
|
|
43
120
|
};
|
|
44
|
-
}, [
|
|
121
|
+
}, [d, u, e]), { draggableRef: h, isDragging: u, position: g, onDragHandleDown: T, renderElement: S };
|
|
45
122
|
};
|
|
46
123
|
export {
|
|
47
|
-
|
|
124
|
+
j as default
|
|
48
125
|
};
|
|
49
126
|
//# sourceMappingURL=useDraggableElement.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDraggableElement.js","sources":["../../src/hooks/useDraggableElement.ts"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type MutableRefObject,\n type PointerEvent as ReactPointerEvent,\n} from 'react';\n\nexport type DraggablePosition = {\n /**\n * Top offset in pixels relative to the viewport.\n */\n top: number;\n\n /**\n * Left offset in pixels relative to the viewport.\n */\n left: number;\n\n /**\n * Indicates whether the element has been moved by dragging at least once.\n */\n hasDragged: boolean;\n};\n\nexport type UseDraggableResult<T extends HTMLElement> = {\n /**\n * Ref that must be attached to the draggable element container.\n */\n draggableRef: MutableRefObject<T | null>;\n\n /**\n * Indicates whether a drag interaction is currently active.\n */\n isDragging: boolean;\n\n /**\n * Current draggable coordinates and drag-state metadata.\n */\n position: DraggablePosition;\n\n /**\n * Pointer down handler for the dedicated drag handle element.\n */\n onDragHandlePointerDown: (event: ReactPointerEvent<HTMLElement>) => void;\n};\n\ntype DraggableState = {\n offsetX: number;\n offsetY: number;\n startX: number;\n startY: number;\n hasMoved: boolean;\n};\n\nconst MOVEMENT_THRESHOLD_PX = 4;\nconst DRAGGING_CLASS_NAME = 'is-dragging';\n\nconst clampToRange = (value: number, min: number, max: number) => Math.min(max, Math.max(min, value));\n\nconst useDraggableElement = <T extends HTMLElement = HTMLDivElement>(): UseDraggableResult<T> => {\n const [isDragging, setIsDragging] = useState(false);\n const [position, setPosition] = useState<DraggablePosition>({ top: 0, left: 0, hasDragged: false });\n\n const draggableRef = useRef<T | null>(null);\n const dragStateRef = useRef<DraggableState | null>(null);\n\n const onDragHandlePointerDown = useCallback((event: ReactPointerEvent<HTMLElement>) => {\n if (event.button !== 0) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const draggableElement = draggableRef.current;\n if (!draggableElement) {\n return;\n }\n\n const rect = draggableElement.getBoundingClientRect();\n dragStateRef.current = {\n offsetX: event.clientX - rect.left,\n offsetY: event.clientY - rect.top,\n startX: event.clientX,\n startY: event.clientY,\n hasMoved: false,\n };\n setIsDragging(true);\n }, []);\n\n useEffect(() => {\n if (!isDragging) {\n return;\n }\n\n const rootElement = document.documentElement;\n rootElement.classList.add(DRAGGING_CLASS_NAME);\n\n const handlePointerMove = (event: PointerEvent) => {\n const dragState = dragStateRef.current;\n const draggableElement = draggableRef.current;\n if (!dragState || !draggableElement) {\n return;\n }\n\n const movedDistance = Math.hypot(event.clientX - dragState.startX, event.clientY - dragState.startY);\n if (!dragState.hasMoved && movedDistance < MOVEMENT_THRESHOLD_PX) {\n return;\n }\n\n if (!dragState.hasMoved) {\n dragState.hasMoved = true;\n }\n\n const rect = draggableElement.getBoundingClientRect();\n const maxLeft = Math.max(0, window.innerWidth - rect.width);\n const maxTop = Math.max(0, window.innerHeight - rect.height);\n const nextLeft = clampToRange(event.clientX - dragState.offsetX, 0, maxLeft);\n const nextTop = clampToRange(event.clientY - dragState.offsetY, 0, maxTop);\n\n setPosition({\n top: nextTop,\n left: nextLeft,\n hasDragged: true,\n });\n };\n\n const handlePointerRelease = () => {\n rootElement.classList.remove(DRAGGING_CLASS_NAME);\n setIsDragging(false);\n dragStateRef.current = null;\n };\n\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerRelease);\n window.addEventListener('pointercancel', handlePointerRelease);\n\n return () => {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerRelease);\n window.removeEventListener('pointercancel', handlePointerRelease);\n rootElement.classList.remove(DRAGGING_CLASS_NAME);\n };\n }, [isDragging]);\n\n return { draggableRef, isDragging, position, onDragHandlePointerDown };\n};\n\nexport default useDraggableElement;\n"],"names":["MOVEMENT_THRESHOLD_PX","DRAGGING_CLASS_NAME","clampToRange","value","min","max","useDraggableElement","isDragging","setIsDragging","useState","position","setPosition","draggableRef","useRef","dragStateRef","onDragHandlePointerDown","useCallback","event","draggableElement","rect","useEffect","rootElement","handlePointerMove","dragState","movedDistance","maxLeft","maxTop","nextLeft","nextTop","handlePointerRelease"],"mappings":";AAwDA,MAAMA,IAAwB,GACxBC,IAAsB,eAEtBC,IAAe,CAACC,GAAeC,GAAaC,MAAgB,KAAK,IAAIA,GAAK,KAAK,IAAID,GAAKD,CAAK,CAAC,GAE9FG,IAAsB,MAAqE;AAC7F,QAAM,CAACC,GAAYC,CAAa,IAAIC,EAAS,EAAK,GAC5C,CAACC,GAAUC,CAAW,IAAIF,EAA4B,EAAE,KAAK,GAAG,MAAM,GAAG,YAAY,GAAA,CAAO,GAE5FG,IAAeC,EAAiB,IAAI,GACpCC,IAAeD,EAA8B,IAAI,GAEjDE,IAA0BC,EAAY,CAACC,MAA0C;AACnF,QAAIA,EAAM,WAAW;AACjB;AAGJ,IAAAA,EAAM,eAAA,GACNA,EAAM,gBAAA;AAEN,UAAMC,IAAmBN,EAAa;AACtC,QAAI,CAACM;AACD;AAGJ,UAAMC,IAAOD,EAAiB,sBAAA;AAC9B,IAAAJ,EAAa,UAAU;AAAA,MACnB,SAASG,EAAM,UAAUE,EAAK;AAAA,MAC9B,SAASF,EAAM,UAAUE,EAAK;AAAA,MAC9B,QAAQF,EAAM;AAAA,MACd,QAAQA,EAAM;AAAA,MACd,UAAU;AAAA,IAAA,GAEdT,EAAc,EAAI;AAAA,EACtB,GAAG,CAAA,CAAE;AAEL,SAAAY,EAAU,MAAM;AACZ,QAAI,CAACb;AACD;AAGJ,UAAMc,IAAc,SAAS;AAC7B,IAAAA,EAAY,UAAU,IAAIpB,CAAmB;AAE7C,UAAMqB,IAAoB,CAACL,MAAwB;AAC/C,YAAMM,IAAYT,EAAa,SACzBI,IAAmBN,EAAa;AACtC,UAAI,CAACW,KAAa,CAACL;AACf;AAGJ,YAAMM,IAAgB,KAAK,MAAMP,EAAM,UAAUM,EAAU,QAAQN,EAAM,UAAUM,EAAU,MAAM;AACnG,UAAI,CAACA,EAAU,YAAYC,IAAgBxB;AACvC;AAGJ,MAAKuB,EAAU,aACXA,EAAU,WAAW;AAGzB,YAAMJ,IAAOD,EAAiB,sBAAA,GACxBO,IAAU,KAAK,IAAI,GAAG,OAAO,aAAaN,EAAK,KAAK,GACpDO,IAAS,KAAK,IAAI,GAAG,OAAO,cAAcP,EAAK,MAAM,GACrDQ,IAAWzB,EAAae,EAAM,UAAUM,EAAU,SAAS,GAAGE,CAAO,GACrEG,IAAU1B,EAAae,EAAM,UAAUM,EAAU,SAAS,GAAGG,CAAM;AAEzE,MAAAf,EAAY;AAAA,QACR,KAAKiB;AAAA,QACL,MAAMD;AAAA,QACN,YAAY;AAAA,MAAA,CACf;AAAA,IACL,GAEME,IAAuB,MAAM;AAC/B,MAAAR,EAAY,UAAU,OAAOpB,CAAmB,GAChDO,EAAc,EAAK,GACnBM,EAAa,UAAU;AAAA,IAC3B;AAEA,kBAAO,iBAAiB,eAAeQ,CAAiB,GACxD,OAAO,iBAAiB,aAAaO,CAAoB,GACzD,OAAO,iBAAiB,iBAAiBA,CAAoB,GAEtD,MAAM;AACT,aAAO,oBAAoB,eAAeP,CAAiB,GAC3D,OAAO,oBAAoB,aAAaO,CAAoB,GAC5D,OAAO,oBAAoB,iBAAiBA,CAAoB,GAChER,EAAY,UAAU,OAAOpB,CAAmB;AAAA,IACpD;AAAA,EACJ,GAAG,CAACM,CAAU,CAAC,GAER,EAAE,cAAAK,GAAc,YAAAL,GAAY,UAAAG,GAAU,yBAAAK,EAAA;AACjD;"}
|
|
1
|
+
{"version":3,"file":"useDraggableElement.js","sources":["../../src/hooks/useDraggableElement.ts"],"sourcesContent":["import {\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n type MutableRefObject,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n type RefObject,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { getOrCreatePortalRoot } from '../utils/portalRoot';\n\nexport type DraggablePosition = {\n /**\n * Top offset in pixels relative to the active positioning context.\n */\n top: number;\n\n /**\n * Left offset in pixels relative to the active positioning context.\n */\n left: number;\n\n /**\n * Indicates whether the element has been moved by dragging at least once.\n */\n hasDragged: boolean;\n};\n\nexport type UseDraggableResult<T extends HTMLElement> = {\n /**\n * Ref that must be attached to the draggable element container.\n */\n draggableRef: MutableRefObject<T | null>;\n\n /**\n * Indicates whether a drag interaction is currently active.\n */\n isDragging: boolean;\n\n /**\n * Current draggable coordinates and drag-state metadata.\n */\n position: DraggablePosition;\n\n /**\n * Pointer down handler for the dedicated drag handle element.\n */\n onDragHandleDown: (event: ReactPointerEvent<HTMLElement>) => void;\n\n /**\n * Renders the provided element through the shared portal root in viewport mode.\n * An optional custom target can be passed for specialized overlay hosts.\n * In container mode, the element is returned unchanged and this helper is usually not needed.\n */\n renderElement: (element: ReactNode, target?: HTMLElement | null) => ReactNode;\n};\n\nexport type UseDraggableElementOptions = {\n /**\n * Defines whether drag coordinates are resolved against the viewport or a collision container.\n * Viewport mode also enables portal rendering via `renderElement`.\n */\n positioning?: 'viewport' | 'container';\n\n /**\n * Optional initial position for the draggable element.\n * Use `center` to center the element inside the active positioning context on mount.\n */\n initialPosition?: 'center' | Pick<DraggablePosition, 'top' | 'left'>;\n\n /**\n * Optional container whose visible client rect is used as the drag boundary in container mode.\n */\n collisionContainerRef?: RefObject<HTMLElement | null>;\n};\n\ntype DraggableState = {\n offsetX: number;\n offsetY: number;\n startX: number;\n startY: number;\n hasMoved: boolean;\n};\n\nconst MOVEMENT_THRESHOLD_PX = 4;\nconst DRAGGING_CLASS_NAME = 'is-dragging';\n\nconst clampToRange = (value: number, min: number, max: number) => Math.min(max, Math.max(min, value));\n\nconst resolveCollisionContainerRect = (collisionContainerRef?: RefObject<HTMLElement | null>) =>\n collisionContainerRef?.current?.getBoundingClientRect() ?? null;\n\nconst resolveCenteredPosition = (\n positioning: UseDraggableElementOptions['positioning'],\n draggableRect: DOMRect,\n collisionContainerRect: DOMRect | null\n) => {\n if (positioning === 'container' && collisionContainerRect) {\n return {\n top: clampToRange(\n (collisionContainerRect.height - draggableRect.height) / 2,\n 0,\n Math.max(0, collisionContainerRect.height - draggableRect.height)\n ),\n left: clampToRange(\n (collisionContainerRect.width - draggableRect.width) / 2,\n 0,\n Math.max(0, collisionContainerRect.width - draggableRect.width)\n ),\n };\n }\n\n return {\n top: clampToRange(\n (window.innerHeight - draggableRect.height) / 2,\n 0,\n Math.max(0, window.innerHeight - draggableRect.height)\n ),\n left: clampToRange(\n (window.innerWidth - draggableRect.width) / 2,\n 0,\n Math.max(0, window.innerWidth - draggableRect.width)\n ),\n };\n};\n\nconst useDraggableElement = <T extends HTMLElement = HTMLDivElement>(\n options: UseDraggableElementOptions = {}\n): UseDraggableResult<T> => {\n const { positioning = 'viewport', initialPosition, collisionContainerRef } = options;\n\n const [isDragging, setIsDragging] = useState(false);\n const [position, setPosition] = useState<DraggablePosition>({ top: 0, left: 0, hasDragged: false });\n const [portalRoot, setPortalRoot] = useState<HTMLElement | null>(null);\n\n const draggableRef = useRef<T | null>(null);\n const dragStateRef = useRef<DraggableState | null>(null);\n const portalEnabled = positioning === 'viewport';\n\n useEffect(() => {\n if (!portalEnabled) {\n setPortalRoot(null);\n return;\n }\n\n setPortalRoot(getOrCreatePortalRoot());\n }, [portalEnabled]);\n\n const renderElement = useCallback(\n (element: ReactNode, target?: HTMLElement | null) => {\n if (!portalEnabled) {\n return element;\n }\n\n const renderTarget = target ?? portalRoot;\n return renderTarget ? createPortal(element, renderTarget) : null;\n },\n [portalEnabled, portalRoot]\n );\n\n useLayoutEffect(() => {\n if (position.hasDragged || !initialPosition) {\n return;\n }\n\n const draggableElement = draggableRef.current;\n if (!draggableElement) {\n return;\n }\n\n const nextPosition =\n initialPosition === 'center'\n ? resolveCenteredPosition(\n positioning,\n draggableElement.getBoundingClientRect(),\n resolveCollisionContainerRect(collisionContainerRef)\n )\n : initialPosition;\n\n setPosition(currentPosition =>\n currentPosition.top === nextPosition.top && currentPosition.left === nextPosition.left\n ? currentPosition\n : { top: nextPosition.top, left: nextPosition.left, hasDragged: false }\n );\n }, [collisionContainerRef, initialPosition, position.hasDragged, positioning]);\n\n const onDragHandleDown = useCallback((event: ReactPointerEvent<HTMLElement>) => {\n if (event.button !== 0) {\n return;\n }\n\n event.preventDefault();\n event.stopPropagation();\n\n const draggableElement = draggableRef.current;\n if (!draggableElement) {\n return;\n }\n\n const rect = draggableElement.getBoundingClientRect();\n dragStateRef.current = {\n offsetX: event.clientX - rect.left,\n offsetY: event.clientY - rect.top,\n startX: event.clientX,\n startY: event.clientY,\n hasMoved: false,\n };\n setIsDragging(true);\n }, []);\n\n useEffect(() => {\n if (!isDragging) {\n return;\n }\n\n const rootElement = document.documentElement;\n rootElement.classList.add(DRAGGING_CLASS_NAME);\n\n const handlePointerMove = (event: PointerEvent) => {\n const dragState = dragStateRef.current;\n const draggableElement = draggableRef.current;\n if (!dragState || !draggableElement) {\n return;\n }\n\n const { clientX, clientY } = event;\n\n const movedDistance = Math.hypot(clientX - dragState.startX, clientY - dragState.startY);\n if (!dragState.hasMoved && movedDistance < MOVEMENT_THRESHOLD_PX) {\n return;\n }\n\n if (!dragState.hasMoved) {\n dragState.hasMoved = true;\n }\n\n const rect = draggableElement.getBoundingClientRect();\n const collisionContainerRect = resolveCollisionContainerRect(collisionContainerRef);\n\n if (positioning === 'container' && collisionContainerRect) {\n const nextLeftPos = clampToRange(\n clientX - collisionContainerRect.left - dragState.offsetX,\n 0,\n Math.max(0, collisionContainerRect.width - rect.width)\n );\n\n const nextTopPos = clampToRange(\n clientY - collisionContainerRect.top - dragState.offsetY,\n 0,\n Math.max(0, collisionContainerRect.height - rect.height)\n );\n\n setPosition({\n top: nextTopPos,\n left: nextLeftPos,\n hasDragged: true,\n });\n\n return;\n }\n\n const nextPosition = {\n left: clampToRange(clientX - dragState.offsetX, 0, Math.max(0, window.innerWidth - rect.width)),\n top: clampToRange(clientY - dragState.offsetY, 0, Math.max(0, window.innerHeight - rect.height)),\n };\n\n setPosition({\n top: nextPosition.top,\n left: nextPosition.left,\n hasDragged: true,\n });\n };\n\n const handlePointerRelease = () => {\n rootElement.classList.remove(DRAGGING_CLASS_NAME);\n setIsDragging(false);\n dragStateRef.current = null;\n };\n\n window.addEventListener('pointermove', handlePointerMove);\n window.addEventListener('pointerup', handlePointerRelease);\n window.addEventListener('pointercancel', handlePointerRelease);\n\n return () => {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerup', handlePointerRelease);\n window.removeEventListener('pointercancel', handlePointerRelease);\n rootElement.classList.remove(DRAGGING_CLASS_NAME);\n };\n }, [collisionContainerRef, isDragging, positioning]);\n\n return { draggableRef, isDragging, position, onDragHandleDown, renderElement };\n};\n\nexport default useDraggableElement;\n"],"names":["MOVEMENT_THRESHOLD_PX","DRAGGING_CLASS_NAME","clampToRange","value","min","max","resolveCollisionContainerRect","collisionContainerRef","resolveCenteredPosition","positioning","draggableRect","collisionContainerRect","useDraggableElement","options","initialPosition","isDragging","setIsDragging","useState","position","setPosition","portalRoot","setPortalRoot","draggableRef","useRef","dragStateRef","portalEnabled","useEffect","getOrCreatePortalRoot","renderElement","useCallback","element","target","renderTarget","createPortal","useLayoutEffect","draggableElement","nextPosition","currentPosition","onDragHandleDown","event","rect","rootElement","handlePointerMove","dragState","clientX","clientY","movedDistance","nextLeftPos","nextTopPos","handlePointerRelease"],"mappings":"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"}
|
|
@@ -1,21 +1,24 @@
|
|
|
1
|
-
import { useRef as
|
|
2
|
-
import { usePopper as
|
|
3
|
-
const
|
|
4
|
-
const
|
|
1
|
+
import { useRef as d, useState as o, useCallback as i } from "react";
|
|
2
|
+
import { usePopper as b } from "react-popper";
|
|
3
|
+
const R = ({ placement: s = "bottom-start" } = {}) => {
|
|
4
|
+
const p = d(null), [r, n] = o(null), [l, t] = o(!1), e = b(p.current, r, {
|
|
5
5
|
placement: s
|
|
6
|
-
})
|
|
6
|
+
}), u = () => t(!0), c = () => t(!1), a = () => t((m) => !m), f = i(() => {
|
|
7
|
+
e.update?.();
|
|
8
|
+
}, [e.update]);
|
|
7
9
|
return {
|
|
8
10
|
isOpen: l,
|
|
9
|
-
open:
|
|
10
|
-
close:
|
|
11
|
-
toggle:
|
|
12
|
-
|
|
11
|
+
open: u,
|
|
12
|
+
close: c,
|
|
13
|
+
toggle: a,
|
|
14
|
+
update: f,
|
|
15
|
+
referenceRef: p,
|
|
13
16
|
popperElementRef: n,
|
|
14
|
-
popperStyles:
|
|
15
|
-
popperAttributes:
|
|
17
|
+
popperStyles: e.styles.popper,
|
|
18
|
+
popperAttributes: e.attributes.popper
|
|
16
19
|
};
|
|
17
20
|
};
|
|
18
21
|
export {
|
|
19
|
-
|
|
22
|
+
R as default
|
|
20
23
|
};
|
|
21
24
|
//# sourceMappingURL=usePopperDropdown.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePopperDropdown.js","sources":["../../src/hooks/usePopperDropdown.ts"],"sourcesContent":["import { type CSSProperties, useRef, useState } from 'react';\nimport { usePopper } from 'react-popper';\n\ntype UsePopperDropdownResult = {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n referenceRef: any;\n popperElementRef: (el: HTMLElement | null) => void;\n popperStyles: CSSProperties;\n popperAttributes: Record<string, any>;\n};\n\ntype UsePopperDropdownParams = {\n placement?: 'bottom-start' | 'bottom-end';\n};\n\nconst usePopperDropdown = ({ placement = 'bottom-start' }: UsePopperDropdownParams = {}) => {\n const referenceRef = useRef<HTMLElement>(null);\n const [popperElement, setPopperElement] = useState<HTMLElement | null>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const popper = usePopper(referenceRef.current, popperElement, {\n placement,\n });\n\n const open = () => setIsOpen(true);\n const close = () => setIsOpen(false);\n const toggle = () => setIsOpen(prev => !prev);\n\n return {\n isOpen,\n open,\n close,\n toggle,\n referenceRef,\n popperElementRef: setPopperElement,\n popperStyles: popper.styles.popper,\n popperAttributes: popper.attributes.popper,\n } as UsePopperDropdownResult;\n};\n\nexport default usePopperDropdown;\n"],"names":["usePopperDropdown","placement","referenceRef","useRef","popperElement","setPopperElement","useState","isOpen","setIsOpen","popper","usePopper","prev"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"usePopperDropdown.js","sources":["../../src/hooks/usePopperDropdown.ts"],"sourcesContent":["import { type CSSProperties, useCallback, useRef, useState } from 'react';\nimport { usePopper } from 'react-popper';\n\ntype UsePopperDropdownResult = {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n update: () => void;\n referenceRef: any;\n popperElementRef: (el: HTMLElement | null) => void;\n popperStyles: CSSProperties;\n popperAttributes: Record<string, any>;\n};\n\ntype UsePopperDropdownParams = {\n placement?: 'bottom-start' | 'bottom-end';\n};\n\nconst usePopperDropdown = ({ placement = 'bottom-start' }: UsePopperDropdownParams = {}) => {\n const referenceRef = useRef<HTMLElement>(null);\n const [popperElement, setPopperElement] = useState<HTMLElement | null>(null);\n const [isOpen, setIsOpen] = useState(false);\n\n const popper = usePopper(referenceRef.current, popperElement, {\n placement,\n });\n\n const open = () => setIsOpen(true);\n const close = () => setIsOpen(false);\n const toggle = () => setIsOpen(prev => !prev);\n const update = useCallback(() => {\n void popper.update?.();\n }, [popper.update]);\n\n return {\n isOpen,\n open,\n close,\n toggle,\n update,\n referenceRef,\n popperElementRef: setPopperElement,\n popperStyles: popper.styles.popper,\n popperAttributes: popper.attributes.popper,\n } as UsePopperDropdownResult;\n};\n\nexport default usePopperDropdown;\n"],"names":["usePopperDropdown","placement","referenceRef","useRef","popperElement","setPopperElement","useState","isOpen","setIsOpen","popper","usePopper","open","close","toggle","prev","update","useCallback"],"mappings":";;AAmBA,MAAMA,IAAoB,CAAC,EAAE,WAAAC,IAAY,eAAA,IAA4C,CAAA,MAAO;AACxF,QAAMC,IAAeC,EAAoB,IAAI,GACvC,CAACC,GAAeC,CAAgB,IAAIC,EAA6B,IAAI,GACrE,CAACC,GAAQC,CAAS,IAAIF,EAAS,EAAK,GAEpCG,IAASC,EAAUR,EAAa,SAASE,GAAe;AAAA,IAC1D,WAAAH;AAAA,EAAA,CACH,GAEKU,IAAO,MAAMH,EAAU,EAAI,GAC3BI,IAAQ,MAAMJ,EAAU,EAAK,GAC7BK,IAAS,MAAML,EAAU,CAAAM,MAAQ,CAACA,CAAI,GACtCC,IAASC,EAAY,MAAM;AAC7B,IAAKP,EAAO,SAAA;AAAA,EAChB,GAAG,CAACA,EAAO,MAAM,CAAC;AAElB,SAAO;AAAA,IACH,QAAAF;AAAA,IACA,MAAAI;AAAA,IACA,OAAAC;AAAA,IACA,QAAAC;AAAA,IACA,QAAAE;AAAA,IACA,cAAAb;AAAA,IACA,kBAAkBG;AAAA,IAClB,cAAcI,EAAO,OAAO;AAAA,IAC5B,kBAAkBA,EAAO,WAAW;AAAA,EAAA;AAE5C;"}
|
package/hooks/useUrlState.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { useRef as R, useEffect as D } from "react";
|
|
2
2
|
import { isNil as z, isEqual as v } from "es-toolkit";
|
|
3
|
-
import {
|
|
3
|
+
import { toQueryString as T, deserializeValue as M, serializeValue as A } from "../utils/routeUtils.js";
|
|
4
4
|
import E from "./useAfterMount.js";
|
|
5
5
|
import U from "./useLatest.js";
|
|
6
6
|
const C = (r) => {
|
|
7
7
|
const e = r.replace(/^\?/, "");
|
|
8
8
|
return new URLSearchParams(e).toString();
|
|
9
|
-
}, L = (r, e) => r.customDeserialize ? r.customDeserialize(e) :
|
|
9
|
+
}, L = (r, e) => r.customDeserialize ? r.customDeserialize(e) : M(e, r.type ?? "string"), N = (r, e) => r ?? e, I = (r) => {
|
|
10
10
|
const { valueToApply: e, currentStoreValue: t, urlRawValue: a, defaultValue: d } = r;
|
|
11
11
|
if (typeof e > "u" || v(e, t))
|
|
12
12
|
return !1;
|
|
@@ -74,7 +74,7 @@ const C = (r) => {
|
|
|
74
74
|
const w = O(o, V, k);
|
|
75
75
|
w !== m && (i = x({ nextParams: u, key: o.key, serializedValue: w }) || i, ((o.history ?? "push") === "push" || !k && K(o, m)) && (f = !0));
|
|
76
76
|
}), i) {
|
|
77
|
-
const o =
|
|
77
|
+
const o = T(u, e), V = u.toString();
|
|
78
78
|
l.current = V, n && (S && o === "" ? localStorage.removeItem(n) : localStorage.setItem(n, o));
|
|
79
79
|
const m = f ? "push" : "replace";
|
|
80
80
|
h.current(o, m);
|