@dynatrace/strato-components 3.4.1 → 3.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/buttons/button/Button.css +15 -15
- package/buttons/button/Button.sty.js +4 -4
- package/buttons/intent-button/IntentButton.css +1 -1
- package/buttons/intent-button/IntentButton.sty.js +1 -1
- package/buttons/notify-button/NotifyButton.css +2 -2
- package/buttons/notify-button/NotifyButton.sty.js +2 -2
- package/charts/categorical-bar/components/interactions/overlays/CategoricalBarChartInspectOverlay.css +2 -2
- package/charts/categorical-bar/components/interactions/overlays/CategoricalBarChartInspectOverlay.sty.js +2 -2
- package/charts/core/components/annotations/AnnotationsAtom.css +1 -1
- package/charts/core/components/annotations/AnnotationsAtom.sty.js +1 -1
- package/charts/core/components/annotations/components/canvas/AnnotationsCanvasLayout.css +1 -1
- package/charts/core/components/annotations/components/canvas/AnnotationsCanvasLayout.sty.js +1 -1
- package/charts/core/components/annotations/components/overlays/AnnotationsOverlays.css +1 -1
- package/charts/core/components/annotations/components/overlays/AnnotationsOverlays.sty.js +1 -1
- package/charts/core/components/annotations/components/overlays/AnnotationsScrollWrapper.css +1 -1
- package/charts/core/components/annotations/components/overlays/AnnotationsScrollWrapper.sty.js +1 -1
- package/charts/core/components/annotations/components/tooltip/AnnotationsTooltip.css +1 -1
- package/charts/core/components/annotations/components/tooltip/AnnotationsTooltip.sty.js +1 -1
- package/charts/core/components/annotations/types/numerical-annotations-config.d.ts +16 -0
- package/charts/core/components/annotations/types/numerical-annotations-config.js +15 -0
- package/charts/core/components/axes/Axis.css +1 -1
- package/charts/core/components/axes/Axis.sty.js +1 -1
- package/charts/core/components/axes/components/PanningControls/PanningControls.css +16 -16
- package/charts/core/components/axes/components/PanningControls/PanningControls.sty.js +2 -2
- package/charts/core/components/chart-grid/ChartGrid.css +3 -3
- package/charts/core/components/chart-grid/ChartGrid.sty.js +3 -3
- package/charts/core/components/chart-layout/components/styles.css +15 -15
- package/charts/core/components/chart-layout/components/styles.sty.js +4 -4
- package/charts/core/components/chart-layout/context/ChartLayoutOrientation.context.js +1 -1
- package/charts/core/components/chart-layout/hooks/useAutomaticRatio.js +8 -8
- package/charts/core/components/chart-layout/types/constants.d.ts +0 -3
- package/charts/core/components/chart-layout/types/constants.js +0 -5
- package/charts/core/components/chart-layout/utils/get-areas-size-on-drag.js +6 -5
- package/charts/core/components/chart-layout/utils/get-chart-layout-settings.js +1 -1
- package/charts/core/components/chart-layout/utils/orientation.js +6 -7
- package/charts/core/components/chart-layout/utils/sanitize-legend-ratio.js +1 -2
- package/charts/core/components/chart-states/ChartState.css +4 -4
- package/charts/core/components/chart-states/ChartState.sty.js +4 -4
- package/charts/core/components/crosshair/components/Magnifier.css +7 -7
- package/charts/core/components/crosshair/components/Magnifier.sty.js +7 -7
- package/charts/core/components/interactions-overlay/InteractionsOverlay.css +5 -5
- package/charts/core/components/interactions-overlay/InteractionsOverlay.sty.js +2 -2
- package/charts/core/components/interactions-overlay/utils/get-custom-context-menu-items.js +13 -5
- package/charts/core/components/legend/categorical/ChartLegend.css +1 -1
- package/charts/core/components/legend/categorical/ChartLegend.js +2 -3
- package/charts/core/components/legend/categorical/ChartLegend.sty.js +1 -1
- package/charts/core/components/legend/categorical/components/ChartLegendGrid.js +1 -1
- package/charts/core/components/legend/categorical/components/ChartLegendIcon/ChartLegendIcon.css +3 -3
- package/charts/core/components/legend/categorical/components/ChartLegendIcon/ChartLegendIcon.sty.js +3 -3
- package/charts/core/components/legend/categorical/components/ChartLegendItem/ChartLegendItem.css +17 -17
- package/charts/core/components/legend/categorical/components/ChartLegendItem/ChartLegendItem.sty.js +6 -6
- package/charts/core/components/legend/categorical/components/ChartLegendSeriesActions/ChartLegendSeriesActions.css +3 -3
- package/charts/core/components/legend/categorical/components/ChartLegendSeriesActions/ChartLegendSeriesActions.sty.js +1 -1
- package/charts/core/components/legend/categorical/components/ChartVirtualizedLegendGrid.css +8 -8
- package/charts/core/components/legend/categorical/components/ChartVirtualizedLegendGrid.sty.js +4 -4
- package/charts/core/components/legend/range/RangeLegend.css +3 -3
- package/charts/core/components/legend/range/RangeLegend.js +1 -1
- package/charts/core/components/legend/range/RangeLegend.sty.js +1 -1
- package/charts/core/components/legend/range/components/RangeLegendBoundaryLabel/RangeLegendBoundaryLabel.css +2 -2
- package/charts/core/components/legend/range/components/RangeLegendBoundaryLabel/RangeLegendBoundaryLabel.js +1 -1
- package/charts/core/components/legend/range/components/RangeLegendBoundaryLabel/RangeLegendBoundaryLabel.sty.js +1 -1
- package/charts/core/components/legend/range/components/RangeLegendItemLabel/RangeLegendItemLabel.css +1 -1
- package/charts/core/components/legend/range/components/RangeLegendItemLabel/RangeLegendItemLabel.js +1 -1
- package/charts/core/components/legend/range/components/RangeLegendItemLabel/RangeLegendItemLabel.sty.js +1 -1
- package/charts/core/components/legend/range/components/RangeLegendItemMarker/RangeLegendItemMarker.css +3 -3
- package/charts/core/components/legend/range/components/RangeLegendItemMarker/RangeLegendItemMarker.js +1 -1
- package/charts/core/components/legend/range/components/RangeLegendItemMarker/RangeLegendItemMarker.sty.js +1 -1
- package/charts/core/components/legend/range/components/RangeLegendMarkers/RangeLegendMarkers.css +3 -3
- package/charts/core/components/legend/range/components/RangeLegendMarkers/RangeLegendMarkers.js +1 -1
- package/charts/core/components/legend/range/components/RangeLegendMarkers/RangeLegendMarkers.sty.js +1 -1
- package/charts/core/components/legend/range/components/RangeLegendSegments/RangeLegendSegments.css +5 -5
- package/charts/core/components/legend/range/components/RangeLegendSegments/RangeLegendSegments.js +1 -1
- package/charts/core/components/legend/range/components/RangeLegendSegments/RangeLegendSegments.sty.js +1 -1
- package/charts/core/components/legend/range/components/RangeLegendSegmentsItem.js +1 -1
- package/charts/core/components/legend/range/components/RangeLegendSegmentsOverlay.js +1 -1
- package/charts/core/components/legend/range/hooks/use-boundary-labels.js +1 -1
- package/charts/core/components/legend/range/hooks/use-legend-boundary-label-collision-detector.js +1 -1
- package/charts/core/components/legend/range/hooks/use-legend-intermediate-label-collision-detector.js +1 -1
- package/charts/core/components/legend/range/hooks/use-legend-segment-keyboard-handler.js +1 -1
- package/charts/core/components/legend/range/hooks/use-legend-segments-overlay-handlers.js +1 -1
- package/charts/core/components/legend/range/utils/get-segment-item-position-and-size.js +1 -1
- package/charts/core/components/loader-overlay/LoaderOverlay.css +2 -2
- package/charts/core/components/loader-overlay/LoaderOverlay.sty.js +2 -2
- package/charts/core/components/overlay-tooltip/OverlayTooltip.d.ts +23 -0
- package/charts/core/components/overlay-tooltip/OverlayTooltip.js +12 -1
- package/charts/core/components/overlay-tooltip/_to-be-removed/HeaderTestTooltip.js +77 -1
- package/charts/core/components/overlay-tooltip/_to-be-removed/MyTooltip.d.ts +5 -0
- package/charts/core/components/overlay-tooltip/_to-be-removed/MyTooltip.js +49 -1
- package/charts/core/components/overlay-tooltip/_to-be-removed/_TruncationStory.js +1 -1
- package/charts/core/components/overlay-tooltip/components/TooltipPortal.js +2 -1
- package/charts/core/components/overlay-tooltip/components/global-actions/Action.d.ts +12 -5
- package/charts/core/components/overlay-tooltip/components/global-actions/Action.js +5 -3
- package/charts/core/components/overlay-tooltip/components/global-actions/ActionsPlaceholder.d.ts +5 -2
- package/charts/core/components/overlay-tooltip/components/global-actions/actions.css +5 -7
- package/charts/core/components/overlay-tooltip/components/global-actions/actions.sty.js +2 -2
- package/charts/core/components/overlay-tooltip/components/header/Header.css +6 -6
- package/charts/core/components/overlay-tooltip/components/header/Header.js +77 -45
- package/charts/core/components/overlay-tooltip/components/header/Header.sty.js +6 -6
- package/charts/core/components/overlay-tooltip/components/header/types/header.d.ts +39 -6
- package/charts/core/components/overlay-tooltip/components/header/utils/compute-header-display.d.ts +24 -0
- package/charts/core/components/overlay-tooltip/components/header/utils/compute-header-display.js +73 -0
- package/charts/core/components/overlay-tooltip/components/header/utils/compute-subheader-display.d.ts +13 -0
- package/charts/core/components/overlay-tooltip/components/header/utils/compute-subheader-display.js +39 -0
- package/charts/core/components/overlay-tooltip/components/header/utils/format-date-range.js +11 -2
- package/charts/core/components/overlay-tooltip/components/header/utils/format-value.js +1 -1
- package/charts/core/components/overlay-tooltip/components/header/utils/get-duration-content.js +1 -1
- package/charts/core/components/overlay-tooltip/components/header/utils/get-non-geometry-header.d.ts +3 -0
- package/charts/core/components/overlay-tooltip/components/header/utils/get-non-geometry-header.js +30 -0
- package/charts/core/components/overlay-tooltip/components/header/utils/get-show-range-duration.d.ts +1 -1
- package/charts/core/components/overlay-tooltip/components/header/utils/get-shown-header-text.d.ts +1 -1
- package/charts/core/components/overlay-tooltip/components/header/utils/get-value.d.ts +2 -0
- package/charts/core/components/overlay-tooltip/components/header/utils/get-value.js +34 -0
- package/charts/core/components/overlay-tooltip/components/header/{types → utils}/type-guards.d.ts +1 -0
- package/charts/core/components/overlay-tooltip/components/header/{types → utils}/type-guards.js +3 -1
- package/charts/core/components/overlay-tooltip/components/header/utils/value-formatters.js +1 -1
- package/charts/core/components/overlay-tooltip/components/series/SeriesItem.js +2 -2
- package/charts/core/components/overlay-tooltip/components/series/hooks/use-value-container-display-state.d.ts +1 -1
- package/charts/core/components/overlay-tooltip/components/series/seriesSymbol.css +2 -2
- package/charts/core/components/overlay-tooltip/components/series/seriesSymbol.sty.js +2 -2
- package/charts/core/components/overlay-tooltip/components/series/utils/get-display-text.d.ts +1 -1
- package/charts/core/components/overlay-tooltip/constants.d.ts +0 -1
- package/charts/core/components/overlay-tooltip/constants.js +0 -2
- package/charts/core/components/overlay-tooltip/hooks/useDynamicTooltip.js +1 -1
- package/charts/core/components/overlay-tooltip/tooltip.css +45 -44
- package/charts/core/components/overlay-tooltip/tooltip.sty.js +34 -34
- package/charts/core/components/overlay-tooltip/types/series.d.ts +71 -13
- package/charts/core/components/overlay-tooltip/types.d.ts +29 -6
- package/charts/core/components/overlay-tooltip/useTooltipReducer.js +4 -1
- package/charts/core/components/overlay-tooltip/utils/build-content.js +1 -1
- package/charts/core/components/overlay-tooltip/utils/text-truncation-header.d.ts +1 -1
- package/charts/core/components/overlays/ChartOverlaysBorder.css +5 -5
- package/charts/core/components/overlays/ChartOverlaysBorder.sty.js +5 -5
- package/charts/core/components/selection-area/DynamicSelectionArea.js +5 -2
- package/charts/core/components/selection-area/Intent.js +18 -25
- package/charts/core/components/selection-area/SelectionArea.css +9 -28
- package/charts/core/components/selection-area/SelectionArea.sty.d.ts +0 -5
- package/charts/core/components/selection-area/SelectionArea.sty.js +4 -14
- package/charts/core/components/selection-area/SelectionTooltipWithAsyncActions.d.ts +2 -3
- package/charts/core/components/selection-area/SelectionTooltipWithAsyncActions.js +42 -42
- package/charts/core/components/selection-area/tooltip/get-selection-tooltip-position.js +6 -2
- package/charts/core/components/series-action/ChartActionsMenuAsync.d.ts +3 -2
- package/charts/core/components/series-action/ChartActionsMenuAsync.js +4 -1
- package/charts/core/components/shape/BubbleShape/BubbleShape.css +5 -5
- package/charts/core/components/shape/BubbleShape/BubbleShape.sty.js +3 -3
- package/charts/core/components/shape/EmojiShape/EmojiShape.css +3 -3
- package/charts/core/components/shape/EmojiShape/EmojiShape.sty.js +1 -1
- package/charts/core/components/shape/IconShape/IconShape.css +3 -3
- package/charts/core/components/shape/IconShape/IconShape.sty.js +1 -1
- package/charts/core/components/shape/styles/DataPointShape.css +8 -8
- package/charts/core/components/shape/styles/DataPointShape.sty.js +4 -4
- package/charts/core/components/shape/type.d.ts +2 -2
- package/charts/core/components/shared-chart-interactions/SharedChartInteractions.css +1 -1
- package/charts/core/components/shared-chart-interactions/SharedChartInteractions.sty.js +1 -1
- package/charts/core/components/single-value-renderer/SingleValueRenderer.css +5 -5
- package/charts/core/components/single-value-renderer/SingleValueRenderer.sty.js +5 -5
- package/charts/core/components/single-value-renderer/components/ContentGrid.css +1 -1
- package/charts/core/components/single-value-renderer/components/ContentGrid.sty.js +1 -1
- package/charts/core/components/single-value-renderer/components/Icon.css +3 -3
- package/charts/core/components/single-value-renderer/components/Icon.sty.js +2 -2
- package/charts/core/components/single-value-renderer/components/Label.css +1 -1
- package/charts/core/components/single-value-renderer/components/Label.sty.js +1 -1
- package/charts/core/components/single-value-renderer/components/SingleValueToolbar.css +1 -1
- package/charts/core/components/single-value-renderer/components/SingleValueToolbar.sty.js +1 -1
- package/charts/core/components/single-value-renderer/components/Value.css +5 -5
- package/charts/core/components/single-value-renderer/components/Value.sty.js +3 -3
- package/charts/core/components/single-value-renderer/components/trend/Trend.css +3 -3
- package/charts/core/components/single-value-renderer/components/trend/Trend.sty.js +3 -3
- package/charts/core/components/single-value-renderer/components/trend/components/Icon.css +2 -2
- package/charts/core/components/single-value-renderer/components/trend/components/Icon.sty.js +1 -1
- package/charts/core/components/sparkline-display/Sparkline.css +6 -6
- package/charts/core/components/sparkline-display/Sparkline.sty.js +2 -2
- package/charts/core/components/sparkline-display/SparklineContainer.js +4 -14
- package/charts/core/components/sparkline-display/utils/get-adjusted-context-value-y-position.d.ts +19 -0
- package/charts/core/components/sparkline-display/utils/get-adjusted-context-value-y-position.js +33 -1
- package/charts/core/components/text-ellipsis/ChartTextEllipsis.css +7 -7
- package/charts/core/components/text-ellipsis/ChartTextEllipsis.d.ts +1 -5
- package/charts/core/components/text-ellipsis/ChartTextEllipsis.sty.js +3 -3
- package/charts/core/components/text-ellipsis/truncate-string.js +7 -3
- package/charts/core/components/threshold-bar/styles.css +9 -9
- package/charts/core/components/threshold-bar/styles.sty.js +2 -2
- package/charts/core/components/toolbar/ChartToolbarRenderer.css +16 -16
- package/charts/core/components/toolbar/ChartToolbarRenderer.sty.js +8 -8
- package/charts/core/components/toolbar/components/ChartDataMenu.css +2 -2
- package/charts/core/components/toolbar/components/ChartDataMenu.sty.js +1 -1
- package/charts/core/components/toolbar/components/Control.css +17 -17
- package/charts/core/components/toolbar/components/Control.sty.js +5 -5
- package/charts/core/components/toolbar/components/ToolbarMenu.css +4 -4
- package/charts/core/components/toolbar/components/ToolbarMenu.sty.js +2 -2
- package/charts/core/components/tooltip/ChartTooltip/ChartTooltip.css +6 -6
- package/charts/core/components/tooltip/ChartTooltip/ChartTooltip.sty.js +2 -2
- package/charts/core/components/tooltip/ChartTooltip/components/ActionItem/ActionItem.css +8 -8
- package/charts/core/components/tooltip/ChartTooltip/components/ActionItem/ActionItem.sty.js +3 -3
- package/charts/core/components/tooltip/ChartTooltip/components/SeriesItem/SeriesItem.css +2 -2
- package/charts/core/components/tooltip/ChartTooltip/components/SeriesItem/SeriesItem.sty.js +1 -1
- package/charts/core/components/tooltip/ChartTooltip/components/TimeFrameHeader/TimeFrameHeader.css +1 -1
- package/charts/core/components/tooltip/ChartTooltip/components/TimeFrameHeader/TimeFrameHeader.sty.js +1 -1
- package/charts/core/components/tooltip/InteractiveChartTooltip/components/BasicChartTooltip/BasicChartTooltip.css +6 -8
- package/charts/core/components/tooltip/InteractiveChartTooltip/components/BasicChartTooltip/BasicChartTooltip.js +5 -1
- package/charts/core/components/tooltip/InteractiveChartTooltip/components/BasicChartTooltip/BasicChartTooltip.sty.js +2 -2
- package/charts/core/components/tooltip/InteractiveChartTooltip/components/InteractiveChartTooltip.css +7 -7
- package/charts/core/components/tooltip/InteractiveChartTooltip/components/InteractiveChartTooltip.sty.js +6 -6
- package/charts/core/components/tooltip/InteractiveChartTooltip/headers/HeaderTooltip.css +1 -1
- package/charts/core/components/tooltip/InteractiveChartTooltip/headers/HeaderTooltip.sty.js +1 -1
- package/charts/core/components/tooltip/section-components/TooltipFooter/TooltipFooter.css +1 -1
- package/charts/core/components/tooltip/section-components/TooltipFooter/TooltipFooter.sty.js +1 -1
- package/charts/core/components/tooltip/section-components/TooltipHeader/TooltipHeader.css +2 -2
- package/charts/core/components/tooltip/section-components/TooltipHeader/TooltipHeader.sty.js +1 -1
- package/charts/core/components/tooltip/section-components/TooltipInfoContent/TooltipInfoContent.css +1 -1
- package/charts/core/components/tooltip/section-components/TooltipInfoContent/TooltipInfoContent.sty.js +1 -1
- package/charts/core/components/tooltip/section-components/TooltipItem/TooltipItem.css +3 -3
- package/charts/core/components/tooltip/section-components/TooltipItem/TooltipItem.sty.js +2 -2
- package/charts/core/components/tooltip/section-components/TooltipSymbolContent/TooltipSymbolContent.css +1 -1
- package/charts/core/components/tooltip/section-components/TooltipSymbolContent/TooltipSymbolContent.sty.js +1 -1
- package/charts/core/components/tooltip/section-components/VirtualizedTooltipBody/VirtualizedTooltipBody.css +2 -2
- package/charts/core/components/tooltip/section-components/VirtualizedTooltipBody/VirtualizedTooltipBody.sty.js +2 -2
- package/charts/core/components/tooltip/section-components/atoms/styles.css +3 -3
- package/charts/core/components/tooltip/section-components/atoms/styles.sty.js +3 -3
- package/charts/core/components/tooltip/shared/styles/SeriesBasedContent.css +12 -12
- package/charts/core/components/tooltip/shared/styles/SeriesBasedContent.sty.js +7 -7
- package/charts/core/components/tooltip/shared/styles/TooltipBody.css +1 -1
- package/charts/core/components/tooltip/shared/styles/TooltipBody.sty.js +1 -1
- package/charts/core/components/tooltip-atoms/components/HeaderChipAtom/HeaderChipAtom.css +1 -1
- package/charts/core/components/tooltip-atoms/components/HeaderChipAtom/HeaderChipAtom.sty.js +1 -1
- package/charts/core/components/tooltip-atoms/components/styles.css +4 -4
- package/charts/core/components/tooltip-atoms/components/styles.sty.js +4 -4
- package/charts/core/components/zoom/ZoomCursors.css +2 -2
- package/charts/core/components/zoom/ZoomCursors.sty.js +3 -3
- package/charts/core/constants.d.ts +9 -1
- package/charts/core/constants.js +9 -0
- package/charts/core/hooks/useOverlayEventHandlers.js +0 -19
- package/charts/core/hooks/usePointerAndScrollResponsiveChartBounds.d.ts +2 -0
- package/charts/core/hooks/usePointerAndScrollResponsiveChartBounds.js +58 -0
- package/charts/core/slots/Tooltip.d.ts +12 -0
- package/charts/core/slots/Tooltip.js +27 -0
- package/charts/core/types/formatter.d.ts +11 -0
- package/charts/core/types/tooltip.d.ts +19 -0
- package/charts/core/typographyStyles.css +1 -1
- package/charts/core/typographyStyles.sty.js +1 -1
- package/charts/core/utils/formatter-by-ticks.d.ts +3 -3
- package/charts/core/utils/formatter-by-ticks.js +4 -2
- package/charts/gantt-chart/GanttChartLine.css +1 -1
- package/charts/gantt-chart/GanttChartLine.sty.js +1 -1
- package/charts/gantt-chart/components/GanttChartLineRenderer.css +1 -1
- package/charts/gantt-chart/components/GanttChartLineRenderer.sty.js +1 -1
- package/charts/gantt-chart/components/tooltip/GanttChartTooltip.css +1 -1
- package/charts/gantt-chart/components/tooltip/GanttChartTooltip.sty.js +1 -1
- package/charts/gauge/components/GaugeChartLayout/GaugeChartLayout.css +1 -1
- package/charts/gauge/components/GaugeChartLayout/GaugeChartLayout.sty.js +1 -1
- package/charts/gauge/components/GaugeLabel/GaugeLabel.css +6 -6
- package/charts/gauge/components/GaugeLabel/GaugeLabel.sty.js +3 -3
- package/charts/gauge/components/GaugeLabelsWrapper/GaugeLabelsWrapper.css +3 -3
- package/charts/gauge/components/GaugeLabelsWrapper/GaugeLabelsWrapper.sty.js +1 -1
- package/charts/gauge/components/GaugeLayoutOverlay/GaugeLayoutOverlay.css +4 -4
- package/charts/gauge/components/GaugeLayoutOverlay/GaugeLayoutOverlay.sty.js +3 -3
- package/charts/gauge/components/GaugeResponsiveLabel/GaugeResponsiveLabel.css +2 -2
- package/charts/gauge/components/GaugeResponsiveLabel/GaugeResponsiveLabel.sty.js +2 -2
- package/charts/histogram/components/annotations-histogram/types.d.ts +5 -12
- package/charts/histogram/components/axes/HistogramValueBottomAxisArea/HistogramValueBottomAxisArea.css +1 -1
- package/charts/histogram/components/axes/HistogramValueBottomAxisArea/HistogramValueBottomAxisArea.sty.js +1 -1
- package/charts/histogram/components/overlays/HistogramExplore/HistogramTooltip.css +1 -1
- package/charts/histogram/components/overlays/HistogramExplore/HistogramTooltip.sty.js +1 -1
- package/charts/histogram/components/overlays/HistogramOverlays.css +2 -2
- package/charts/histogram/components/overlays/HistogramOverlays.sty.js +2 -2
- package/charts/histogram/components/overlays/HistogramSelectionArea/HistogramSelectionAreaTooltip.js +14 -17
- package/charts/honeycomb/HoneycombChart.css +1 -1
- package/charts/honeycomb/HoneycombChart.sty.js +1 -1
- package/charts/honeycomb/components/HiveOverlay.css +1 -1
- package/charts/honeycomb/components/HiveOverlay.sty.js +1 -1
- package/charts/honeycomb/components/canvas/HiveCanvasLayout.css +1 -1
- package/charts/honeycomb/components/canvas/HiveCanvasLayout.sty.js +1 -1
- package/charts/index.d.ts +9 -9
- package/charts/index.js +2 -0
- package/charts/meter-bar/shared/components/meter-bar-layout/MeterBarLayout.css +15 -15
- package/charts/meter-bar/shared/components/meter-bar-layout/MeterBarLayout.sty.js +10 -10
- package/charts/meter-bar/shared/components/meter-bar-layout/slots/Icon/Icon.css +2 -2
- package/charts/meter-bar/shared/components/meter-bar-layout/slots/Icon/Icon.sty.js +1 -1
- package/charts/meter-bar/shared/components/meter-bar-layout/slots/Label/Label.css +1 -1
- package/charts/meter-bar/shared/components/meter-bar-layout/slots/Label/Label.sty.js +1 -1
- package/charts/meter-bar/shared/components/meter-bar-layout/slots/Max/Max.css +1 -1
- package/charts/meter-bar/shared/components/meter-bar-layout/slots/Max/Max.sty.js +1 -1
- package/charts/meter-bar/shared/components/meter-bar-layout/slots/Min/Min.css +1 -1
- package/charts/meter-bar/shared/components/meter-bar-layout/slots/Min/Min.sty.js +1 -1
- package/charts/meter-bar/shared/components/meter-bar-layout/slots/Value/Value.css +1 -1
- package/charts/meter-bar/shared/components/meter-bar-layout/slots/Value/Value.sty.js +1 -1
- package/charts/meter-bar/shared/components/meter-bar-plot/MeterBarPlot.css +1 -1
- package/charts/meter-bar/shared/components/meter-bar-plot/MeterBarPlot.sty.js +1 -1
- package/charts/meter-bar/shared/components/meter-bar-tooltip/MeterBarTooltipItem/MeterBarTooltipItem.css +1 -1
- package/charts/meter-bar/shared/components/meter-bar-tooltip/MeterBarTooltipItem/MeterBarTooltipItem.sty.js +1 -1
- package/charts/meter-bar/shared/styles/element-size.css +4 -4
- package/charts/meter-bar/shared/styles/element-size.sty.js +1 -1
- package/charts/meter-bar/shared/styles.css +1 -1
- package/charts/meter-bar/shared/styles.sty.js +1 -1
- package/charts/meter-bar/single-meter-bar/components/MeterBarChartThresholds/MeterBarChartThresholds.css +1 -1
- package/charts/meter-bar/single-meter-bar/components/MeterBarChartThresholds/MeterBarChartThresholds.sty.js +1 -1
- package/charts/pie/DonutChart.d.ts +4 -0
- package/charts/pie/DonutChart.js +2 -0
- package/charts/pie/PieChart.d.ts +4 -0
- package/charts/pie/PieChart.js +2 -0
- package/charts/pie/components/InnerWrapper/components/InnerContainer/InnerContainer.css +1 -1
- package/charts/pie/components/InnerWrapper/components/InnerContainer/InnerContainer.sty.js +1 -1
- package/charts/pie/components/InnerWrapper/components/InnerDonut/InnerDonut.css +1 -1
- package/charts/pie/components/InnerWrapper/components/InnerDonut/InnerDonut.sty.js +1 -1
- package/charts/pie/components/PieChartInternal.js +1 -1
- package/charts/pie/components/PieChartLegend/PieChartLegend.js +1 -1
- package/charts/pie/components/PieChartOverlays/PieChartOverlays.css +1 -1
- package/charts/pie/components/PieChartOverlays/PieChartOverlays.sty.js +1 -1
- package/charts/pie/components/PieChartPlot/PieChartPlot.css +1 -1
- package/charts/pie/components/PieChartPlot/PieChartPlot.sty.js +1 -1
- package/charts/pie/components/PieChartTooltip/PieChartTooltip.js +12 -1
- package/charts/pie/context/PieChartTooltipContext.d.ts +3 -0
- package/charts/pie/context/PieChartTooltipContext.js +28 -0
- package/charts/pie/hooks/usePieChartTooltip.d.ts +1 -0
- package/charts/pie/hooks/usePieChartTooltip.js +25 -0
- package/charts/pie/providers/ChartProviders.js +16 -9
- package/charts/pie/slots/DonutChartTooltip.d.ts +8 -0
- package/charts/pie/slots/DonutChartTooltip.js +24 -0
- package/charts/pie/slots/PieChartTooltip.d.ts +8 -0
- package/charts/pie/slots/PieChartTooltip.js +24 -0
- package/charts/pie/types/pie-chart.config.d.ts +41 -1
- package/charts/pie/utils/iterate-slots.js +12 -1
- package/charts/pie/utils/pie-config.js +2 -1
- package/charts/single-value/SingleValue.css +1 -1
- package/charts/single-value/SingleValue.sty.js +1 -1
- package/charts/single-value-grid/SingleValueGrid.css +2 -2
- package/charts/single-value-grid/SingleValueGrid.sty.js +1 -1
- package/charts/single-value-grid/components/GlobalFontSizeVariables.css +1 -1
- package/charts/single-value-grid/components/GlobalFontSizeVariables.sty.js +1 -1
- package/charts/timeseries/components/axes/TimeseriesTimeBottomAxisArea/TimeseriesTimeBottomAxisArea.css +2 -2
- package/charts/timeseries/components/axes/TimeseriesTimeBottomAxisArea/TimeseriesTimeBottomAxisArea.sty.js +1 -1
- package/charts/timeseries/components/overlays/TimeseriesOverlays.css +4 -4
- package/charts/timeseries/components/overlays/TimeseriesOverlays.sty.js +4 -4
- package/charts/timeseries/components/overlays/TimeseriesSelection/TimeseriesSelectionAreaTooltip.js +17 -22
- package/charts/timeseries/components/thresholds/ThresholdIndicators.css +2 -2
- package/charts/timeseries/components/thresholds/ThresholdIndicators.sty.js +2 -2
- package/charts/tree-map/components/TreeMapOverlay/TreeMapOverlay.css +1 -1
- package/charts/tree-map/components/TreeMapOverlay/TreeMapOverlay.sty.js +1 -1
- package/charts/tree-map/constants.d.ts +1 -1
- package/charts/xy-chart/XYChart.d.ts +2 -2
- package/charts/xy-chart/XYChart.js +1 -1
- package/charts/xy-chart/XYChartRoot.d.ts +8 -0
- package/charts/xy-chart/XYChartRoot.js +4 -0
- package/charts/xy-chart/builders/XYChartImperativeHandlerBuilder.d.ts +2 -2
- package/charts/xy-chart/builders/XYChartImperativeHandlerBuilder.js +8 -4
- package/charts/xy-chart/components/annotations/XYChartAnnotationsArea.js +1 -1
- package/charts/xy-chart/components/annotations/utils/get-indicators-from-annotations.d.ts +2 -1
- package/charts/xy-chart/components/annotations/utils/get-indicators-from-annotations.js +2 -3
- package/charts/xy-chart/components/axes/AxisArea.css +1 -1
- package/charts/xy-chart/components/axes/AxisArea.sty.js +1 -1
- package/charts/xy-chart/components/axes/AxisTickWithTruncation.css +3 -3
- package/charts/xy-chart/components/axes/AxisTickWithTruncation.sty.js +3 -3
- package/charts/xy-chart/components/legend/XYLegend/xy-legend.css +1 -1
- package/charts/xy-chart/components/legend/XYLegend/xy-legend.sty.js +1 -1
- package/charts/xy-chart/components/overlay/explore/XYChartCrosshair.css +1 -1
- package/charts/xy-chart/components/overlay/explore/XYChartCrosshair.js +4 -1
- package/charts/xy-chart/components/overlay/explore/XYChartCrosshair.sty.js +1 -1
- package/charts/xy-chart/components/overlay/explore/XYChartExplore.css +2 -2
- package/charts/xy-chart/components/overlay/explore/XYChartExplore.sty.js +2 -2
- package/charts/xy-chart/components/overlay/utils/chartCrosshairDataTransformer.d.ts +2 -0
- package/charts/xy-chart/components/overlay/utils/chartCrosshairDataTransformer.js +15 -8
- package/charts/xy-chart/components/selection/TooltipHeader.css +2 -2
- package/charts/xy-chart/components/selection/TooltipHeader.d.ts +3 -1
- package/charts/xy-chart/components/selection/TooltipHeader.js +27 -27
- package/charts/xy-chart/components/selection/TooltipHeader.sty.js +2 -2
- package/charts/xy-chart/components/selection/XYChartSelectionArea.js +6 -1
- package/charts/xy-chart/components/selection/XYChartSelectionAreaTooltip.js +19 -15
- package/charts/xy-chart/components/selection/{Duration.d.ts → get-header-props.d.ts} +7 -2
- package/charts/xy-chart/components/selection/get-header-props.js +69 -0
- package/charts/xy-chart/components/thresholds/XYChartThresholdIndicators.css +1 -1
- package/charts/xy-chart/components/thresholds/XYChartThresholdIndicators.sty.js +1 -1
- package/charts/xy-chart/components/tooltip/ClosestPointTooltip/ClosestPointTooltip.js +1 -1
- package/charts/xy-chart/components/tooltip/HoveredPointTooltip/HoveredPointTooltip.js +4 -1
- package/charts/xy-chart/components/tooltip/HoveredPointTooltip/hooks/getHoveredPointTooltipBodyContent.d.ts +7 -3
- package/charts/xy-chart/components/tooltip/HoveredPointTooltip/hooks/getHoveredPointTooltipBodyContent.js +11 -6
- package/charts/xy-chart/components/tooltip/HoveredPointTooltip/hoveredPointTooltipBodyUtils.d.ts +3 -1
- package/charts/xy-chart/components/tooltip/HoveredPointTooltip/hoveredPointTooltipBodyUtils.js +7 -2
- package/charts/xy-chart/components/tooltip/XYChartTooltipContent.js +5 -2
- package/charts/xy-chart/components/tooltip/XYChartTooltipTemplate/XYChartTooltipTemplate.css +1 -1
- package/charts/xy-chart/components/tooltip/XYChartTooltipTemplate/XYChartTooltipTemplate.sty.js +1 -1
- package/charts/xy-chart/components/tooltip/utils/tooltip-styles.css +5 -5
- package/charts/xy-chart/components/tooltip/utils/tooltip-styles.sty.js +4 -4
- package/charts/xy-chart/constants/defaults.d.ts +1 -0
- package/charts/xy-chart/constants/defaults.js +2 -0
- package/charts/xy-chart/context/XYChartCustomTooltip.context.d.ts +9 -2
- package/charts/xy-chart/context/XYChartCustomTooltip.context.js +3 -1
- package/charts/xy-chart/context/XYChartData.context.d.ts +2 -0
- package/charts/xy-chart/hooks/useFormatCategory.d.ts +13 -0
- package/charts/xy-chart/hooks/useFormatCategory.js +60 -0
- package/charts/xy-chart/hooks/useXYChartConfig.d.ts +1 -6
- package/charts/xy-chart/hooks/useXYChartCustomTooltip.d.ts +1 -1
- package/charts/xy-chart/hooks/useXYChartDataProvider.d.ts +3 -2
- package/charts/xy-chart/hooks/useXYChartDataProvider.js +30 -2
- package/charts/xy-chart/layout/XYChartLayout.css +2 -2
- package/charts/xy-chart/layout/XYChartLayout.sty.js +2 -2
- package/charts/xy-chart/processing-strategies/strategies/area-series.js +9 -6
- package/charts/xy-chart/processing-strategies/strategies/bar-series.js +9 -6
- package/charts/xy-chart/processing-strategies/strategies/base-series.d.ts +1 -1
- package/charts/xy-chart/processing-strategies/strategies/base-series.js +7 -3
- package/charts/xy-chart/processing-strategies/strategies/dot-series.js +10 -7
- package/charts/xy-chart/processing-strategies/strategies/line-series.js +10 -7
- package/charts/xy-chart/processing-strategies/strategies/rect-series.js +15 -12
- package/charts/xy-chart/processing-strategies/types/processing-types.d.ts +1 -0
- package/charts/xy-chart/providers/XYChartAnnotationsDataProvider.js +3 -1
- package/charts/xy-chart/providers/XYChartAxesTicksProvider.d.ts +3 -1
- package/charts/xy-chart/providers/XYChartAxesTicksProvider.js +32 -6
- package/charts/xy-chart/providers/XYChartDataProvider.js +2 -0
- package/charts/xy-chart/slots/CustomTooltip.d.ts +3 -0
- package/charts/xy-chart/slots/Tooltip.d.ts +9 -0
- package/charts/xy-chart/slots/Tooltip.js +25 -0
- package/charts/xy-chart/types/xy-chart-internals.d.ts +5 -4
- package/charts/xy-chart/types/xy-chart-props.d.ts +12 -1
- package/charts/xy-chart/utils/calculate-axes-domains.d.ts +2 -2
- package/charts/xy-chart/utils/calculate-axes-domains.js +3 -3
- package/charts/xy-chart/utils/generate-nice-unit-ticks.d.ts +2 -2
- package/charts/xy-chart/utils/generate-nice-unit-ticks.js +5 -1
- package/charts/xy-chart/utils/get-ticks-formatted-by-config.d.ts +4 -4
- package/charts/xy-chart/utils/get-ticks-formatted-by-config.js +13 -7
- package/charts/xy-chart/utils/iterate-slots.js +11 -2
- package/charts/xy-chart/utils/type-guards.d.ts +4 -3
- package/charts/xy-chart/utils/xy-chart-configuration.d.ts +5 -3
- package/charts/xy-chart/utils/xy-chart-configuration.js +16 -2
- package/charts/xy-chart-adoption/histogram/HistogramToXY.d.ts +2 -1
- package/charts/xy-chart-adoption/histogram/HistogramToXY.js +126 -43
- package/charts/xy-chart-adoption/histogram/iterate-histogram-slots.js +58 -4
- package/charts/xy-chart-adoption/histogram/transformer-annotations-to-xy.d.ts +20 -0
- package/charts/xy-chart-adoption/histogram/transformer-annotations-to-xy.js +68 -0
- package/charts/xy-chart-adoption/histogram/transformer-data-to-xy.d.ts +1 -0
- package/charts/xy-chart-adoption/histogram/transformer-data-to-xy.js +17 -18
- package/charts/xy-chart-adoption/histogram/transformer-thresholds-to-xy.d.ts +4 -0
- package/charts/xy-chart-adoption/histogram/transformer-thresholds-to-xy.js +96 -0
- package/charts/xy-chart-adoption/histogram/types/slots.d.ts +15 -0
- package/charts/xy-chart-adoption/histogram/utils/axis-props-mapping.d.ts +2 -1
- package/charts/xy-chart-adoption/histogram/utils/axis-props-mapping.js +4 -3
- package/charts/xy-chart-adoption/histogram/utils/build-histogram-imperative-handle.d.ts +14 -0
- package/charts/xy-chart-adoption/histogram/utils/build-histogram-imperative-handle.js +36 -0
- package/charts/xy-chart-adoption/histogram/utils/build-y-axes-config.d.ts +12 -0
- package/charts/xy-chart-adoption/histogram/utils/build-y-axes-config.js +46 -0
- package/charts/xy-chart-adoption/histogram/utils/derive-xychart-props-from-config.d.ts +36 -0
- package/charts/xy-chart-adoption/histogram/utils/derive-xychart-props-from-config.js +33 -0
- package/charts/xy-chart-adoption/histogram/utils/serialize-histogram-config.d.ts +9 -0
- package/charts/xy-chart-adoption/histogram/utils/serialize-histogram-config.js +28 -0
- package/charts/xy-chart-adoption/timeseries/transformer-data-to-xy.d.ts +13 -0
- package/charts/xy-chart-adoption/timeseries/transformer-data-to-xy.js +44 -0
- package/content/accordion/Accordion.css +14 -14
- package/content/accordion/Accordion.sty.js +8 -8
- package/content/ai-loading-indicator/AiLoadingIndicator.css +12 -12
- package/content/ai-loading-indicator/AiLoadingIndicator.sty.js +4 -4
- package/content/ai-response/AiResponse.css +5 -5
- package/content/ai-response/AiResponse.sty.js +3 -2
- package/content/avatar/Avatar.css +13 -13
- package/content/avatar/Avatar.sty.js +4 -4
- package/content/avatar-group/AvatarGroup.css +3 -3
- package/content/avatar-group/AvatarGroup.sty.js +2 -2
- package/content/chip/BaseChip.css +48 -36
- package/content/chip/BaseChip.sty.js +5 -5
- package/content/chip/ChipContent.css +11 -11
- package/content/chip/ChipContent.sty.js +2 -2
- package/content/chip/ChipDeleteButton.css +26 -3
- package/content/chip/ChipDeleteButton.js +4 -1
- package/content/chip/ChipDeleteButton.sty.d.ts +6 -0
- package/content/chip/ChipDeleteButton.sty.js +8 -2
- package/content/chip/ChipKey.css +6 -6
- package/content/chip/ChipKey.sty.js +1 -1
- package/content/chip/GroupedChip.css +3 -3
- package/content/chip/GroupedChip.sty.js +3 -3
- package/content/chip-group/ChipGroup.css +4 -4
- package/content/chip-group/ChipGroup.js +9 -1
- package/content/chip-group/ChipGroup.sty.js +1 -1
- package/content/chip-group/Control.css +6 -6
- package/content/chip-group/Control.js +13 -3
- package/content/chip-group/Control.sty.d.ts +8 -1
- package/content/chip-group/Control.sty.js +3 -3
- package/content/code-snippet/CodeHighlight.css +27 -24
- package/content/code-snippet/CodeHighlight.sty.js +6 -5
- package/content/code-snippet/CodeSnippet.css +7 -4
- package/content/code-snippet/CodeSnippet.sty.js +3 -2
- package/content/code-snippet/HighlightExtended.js +22 -0
- package/content/code-snippet/prism-dql-language.d.ts +1 -0
- package/content/code-snippet/prism-dql-language.js +16 -6
- package/content/empty-state/EmptyState.css +28 -28
- package/content/empty-state/EmptyState.sty.js +7 -7
- package/content/empty-state/assets/VisualPresetVariants.js +1 -1
- package/content/empty-state/empty-state-utils.d.ts +1 -1
- package/content/empty-state/empty-state-utils.js +12 -4
- package/content/empty-state/slot-components/Footer.css +1 -1
- package/content/empty-state/slot-components/Footer.sty.js +1 -1
- package/content/empty-state/slot-components/Visual.css +3 -3
- package/content/empty-state/slot-components/Visual.sty.js +1 -1
- package/content/empty-state/slot-components/VisualPreset.js +1 -5
- package/content/expandable-text/ExpandableText.css +7 -7
- package/content/expandable-text/ExpandableText.sty.js +2 -2
- package/content/feature-highlight/FeatureHighlight.css +12 -12
- package/content/feature-highlight/FeatureHighlight.sty.js +3 -3
- package/content/health-indicator/styles.css +23 -23
- package/content/health-indicator/styles.sty.js +1 -1
- package/content/information-overlay/InformationOverlay.css +25 -25
- package/content/information-overlay/InformationOverlay.sty.js +5 -5
- package/content/keyboard-shortcut/KeyboardShortcut.css +14 -14
- package/content/keyboard-shortcut/KeyboardShortcut.sty.js +2 -2
- package/content/markdown/Markdown.css +3 -3
- package/content/markdown/Markdown.sty.js +1 -1
- package/content/markdown/transformers/typography-mapping.css +9 -9
- package/content/markdown/transformers/typography-mapping.sty.js +6 -6
- package/content/microguide/Microguide.css +11 -11
- package/content/microguide/Microguide.sty.js +7 -7
- package/content/progress/ProgressBar.css +71 -71
- package/content/progress/ProgressBar.sty.js +5 -5
- package/content/progress/ProgressBarIcon.css +2 -2
- package/content/progress/ProgressBarIcon.sty.js +1 -1
- package/content/progress/ProgressBarLabel.css +3 -3
- package/content/progress/ProgressBarLabel.sty.js +1 -1
- package/content/progress/ProgressBarValue.css +5 -5
- package/content/progress/ProgressBarValue.sty.js +1 -1
- package/content/progress/ProgressCircle.css +40 -40
- package/content/progress/ProgressCircle.sty.js +5 -5
- package/content/shared-components/Visual.css +3 -3
- package/content/shared-components/Visual.sty.js +1 -1
- package/content/skeleton/Skeleton.css +7 -7
- package/content/skeleton/Skeleton.sty.js +5 -5
- package/content/terminology-overlay/TerminologyOverlay.css +4 -4
- package/content/terminology-overlay/TerminologyOverlay.sty.js +1 -1
- package/core/components/app-root/AppRoot.css +74 -66
- package/core/components/app-root/AppRoot.js +5 -2
- package/core/components/app-root/AppRoot.sty.d.ts +1 -1
- package/core/components/app-root/AppRoot.sty.js +2 -2
- package/core/components/app-root/visual-refresh-overrides.d.ts +38 -0
- package/core/components/app-root/visual-refresh-overrides.js +64 -26
- package/core/components/focus-scope/FocusScope.js +4 -2
- package/core/components/visually-hidden/VisuallyHidden.css +1 -1
- package/core/components/visually-hidden/VisuallyHidden.js +3 -1
- package/core/components/visually-hidden/VisuallyHidden.sty.js +1 -1
- package/core/contexts/FocusContext.d.ts +0 -7
- package/core/contexts/FocusContext.js +0 -1
- package/core/dql/dql-common.d.ts +23 -0
- package/core/dql/dql-common.js +116 -0
- package/core/hooks/useModality.d.ts +8 -0
- package/core/hooks/useModality.js +31 -0
- package/core/index.d.ts +2 -2
- package/core/index.js +1 -1
- package/core/providers/FocusProvider.js +0 -88
- package/core/sdk/sdk-logger.js +2 -2
- package/core/styles/defaultChartValues.css +1 -1
- package/core/styles/defaultChartValues.sty.js +1 -1
- package/core/styles/focusRing.css +66 -66
- package/core/styles/focusRing.sty.d.ts +2 -2
- package/core/styles/focusRing.sty.js +4 -4
- package/core/styles/focusRingStatic.css +35 -33
- package/core/styles/focusRingStatic.sty.d.ts +7 -0
- package/core/styles/focusRingStatic.sty.js +1 -1
- package/core/styles/getVirtualFocusStyles.d.ts +14 -0
- package/core/styles/getVirtualFocusStyles.js +39 -0
- package/core/styles/useFocusRing.js +17 -7
- package/core/styles/virtualFocus.css +12 -0
- package/core/styles/virtualFocus.sty.d.ts +2 -0
- package/core/styles/virtualFocus.sty.js +24 -0
- package/core/utils/colorUtils.css +60 -60
- package/core/utils/colorUtils.sty.js +2 -2
- package/core/utils/is-visual-refresh-enabled.d.ts +5 -0
- package/core/utils/is-visual-refresh-enabled.js +28 -0
- package/core/utils/modality.d.ts +21 -0
- package/core/utils/modality.js +108 -0
- package/editors/base-code-editor/BaseCodeEditor.css +145 -127
- package/editors/base-code-editor/BaseCodeEditor.sty.js +3 -2
- package/editors/base-code-editor/configuration/getDefaultConfigurations.js +4 -3
- package/editors/dql-editor/dql/SuggestionPart.css +1 -1
- package/editors/dql-editor/dql/SuggestionPart.sty.js +1 -1
- package/editors/dql-editor/dql/dql.d.ts +0 -1
- package/editors/dql-editor/dql/dql.js +13 -47
- package/esm/buttons/button/Button.css +15 -15
- package/esm/buttons/button/Button.sty.js +4 -4
- package/esm/buttons/button/Button.sty.js.map +1 -1
- package/esm/buttons/intent-button/IntentButton.css +1 -1
- package/esm/buttons/intent-button/IntentButton.sty.js +1 -1
- package/esm/buttons/intent-button/IntentButton.sty.js.map +1 -1
- package/esm/buttons/notify-button/NotifyButton.css +2 -2
- package/esm/buttons/notify-button/NotifyButton.sty.js +2 -2
- package/esm/buttons/notify-button/NotifyButton.sty.js.map +1 -1
- package/esm/charts/categorical-bar/components/interactions/overlays/CategoricalBarChartInspectOverlay.css +2 -2
- package/esm/charts/categorical-bar/components/interactions/overlays/CategoricalBarChartInspectOverlay.sty.js +2 -2
- package/esm/charts/categorical-bar/components/interactions/overlays/CategoricalBarChartInspectOverlay.sty.js.map +1 -1
- package/esm/charts/core/components/annotations/AnnotationsAtom.css +1 -1
- package/esm/charts/core/components/annotations/AnnotationsAtom.sty.js +1 -1
- package/esm/charts/core/components/annotations/AnnotationsAtom.sty.js.map +1 -1
- package/esm/charts/core/components/annotations/components/canvas/AnnotationsCanvasLayout.css +1 -1
- package/esm/charts/core/components/annotations/components/canvas/AnnotationsCanvasLayout.sty.js +1 -1
- package/esm/charts/core/components/annotations/components/canvas/AnnotationsCanvasLayout.sty.js.map +1 -1
- package/esm/charts/core/components/annotations/components/overlays/AnnotationsOverlays.css +1 -1
- package/esm/charts/core/components/annotations/components/overlays/AnnotationsOverlays.sty.js +1 -1
- package/esm/charts/core/components/annotations/components/overlays/AnnotationsOverlays.sty.js.map +1 -1
- package/esm/charts/core/components/annotations/components/overlays/AnnotationsScrollWrapper.css +1 -1
- package/esm/charts/core/components/annotations/components/overlays/AnnotationsScrollWrapper.sty.js +1 -1
- package/esm/charts/core/components/annotations/components/overlays/AnnotationsScrollWrapper.sty.js.map +1 -1
- package/esm/charts/core/components/annotations/components/tooltip/AnnotationsTooltip.css +1 -1
- package/esm/charts/core/components/annotations/components/tooltip/AnnotationsTooltip.sty.js +1 -1
- package/esm/charts/core/components/annotations/components/tooltip/AnnotationsTooltip.sty.js.map +1 -1
- package/esm/charts/core/components/annotations/types/numerical-annotations-config.js +1 -0
- package/esm/charts/core/components/annotations/types/numerical-annotations-config.js.map +7 -0
- package/esm/charts/core/components/axes/Axis.css +1 -1
- package/esm/charts/core/components/axes/Axis.sty.js +1 -1
- package/esm/charts/core/components/axes/Axis.sty.js.map +1 -1
- package/esm/charts/core/components/axes/components/PanningControls/PanningControls.css +16 -16
- package/esm/charts/core/components/axes/components/PanningControls/PanningControls.sty.js +2 -2
- package/esm/charts/core/components/axes/components/PanningControls/PanningControls.sty.js.map +1 -1
- package/esm/charts/core/components/chart-grid/ChartGrid.css +3 -3
- package/esm/charts/core/components/chart-grid/ChartGrid.sty.js +3 -3
- package/esm/charts/core/components/chart-grid/ChartGrid.sty.js.map +1 -1
- package/esm/charts/core/components/chart-layout/components/styles.css +15 -15
- package/esm/charts/core/components/chart-layout/components/styles.sty.js +4 -4
- package/esm/charts/core/components/chart-layout/components/styles.sty.js.map +1 -1
- package/esm/charts/core/components/chart-layout/context/ChartLayoutOrientation.context.js +1 -1
- package/esm/charts/core/components/chart-layout/context/ChartLayoutOrientation.context.js.map +1 -1
- package/esm/charts/core/components/chart-layout/hooks/useAutomaticRatio.js +1 -1
- package/esm/charts/core/components/chart-layout/hooks/useAutomaticRatio.js.map +2 -2
- package/esm/charts/core/components/chart-layout/types/constants.js +0 -5
- package/esm/charts/core/components/chart-layout/types/constants.js.map +2 -2
- package/esm/charts/core/components/chart-layout/utils/get-areas-size-on-drag.js +2 -2
- package/esm/charts/core/components/chart-layout/utils/get-areas-size-on-drag.js.map +2 -2
- package/esm/charts/core/components/chart-layout/utils/get-chart-layout-settings.js +2 -3
- package/esm/charts/core/components/chart-layout/utils/get-chart-layout-settings.js.map +2 -2
- package/esm/charts/core/components/chart-layout/utils/orientation.js +1 -2
- package/esm/charts/core/components/chart-layout/utils/orientation.js.map +2 -2
- package/esm/charts/core/components/chart-layout/utils/sanitize-legend-ratio.js +1 -2
- package/esm/charts/core/components/chart-layout/utils/sanitize-legend-ratio.js.map +2 -2
- package/esm/charts/core/components/chart-states/ChartState.css +4 -4
- package/esm/charts/core/components/chart-states/ChartState.sty.js +4 -4
- package/esm/charts/core/components/chart-states/ChartState.sty.js.map +1 -1
- package/esm/charts/core/components/crosshair/components/Magnifier.css +7 -7
- package/esm/charts/core/components/crosshair/components/Magnifier.sty.js +7 -7
- package/esm/charts/core/components/crosshair/components/Magnifier.sty.js.map +1 -1
- package/esm/charts/core/components/interactions-overlay/InteractionsOverlay.css +5 -5
- package/esm/charts/core/components/interactions-overlay/InteractionsOverlay.sty.js +2 -2
- package/esm/charts/core/components/interactions-overlay/InteractionsOverlay.sty.js.map +1 -1
- package/esm/charts/core/components/interactions-overlay/utils/get-custom-context-menu-items.js +13 -7
- package/esm/charts/core/components/interactions-overlay/utils/get-custom-context-menu-items.js.map +2 -2
- package/esm/charts/core/components/legend/categorical/ChartLegend.css +1 -1
- package/esm/charts/core/components/legend/categorical/ChartLegend.js +1 -2
- package/esm/charts/core/components/legend/categorical/ChartLegend.js.map +2 -2
- package/esm/charts/core/components/legend/categorical/ChartLegend.sty.js +1 -1
- package/esm/charts/core/components/legend/categorical/ChartLegend.sty.js.map +1 -1
- package/esm/charts/core/components/legend/categorical/components/ChartLegendGrid.js +1 -1
- package/esm/charts/core/components/legend/categorical/components/ChartLegendGrid.js.map +2 -2
- package/esm/charts/core/components/legend/categorical/components/ChartLegendIcon/ChartLegendIcon.css +3 -3
- package/esm/charts/core/components/legend/categorical/components/ChartLegendIcon/ChartLegendIcon.sty.js +3 -3
- package/esm/charts/core/components/legend/categorical/components/ChartLegendIcon/ChartLegendIcon.sty.js.map +1 -1
- package/esm/charts/core/components/legend/categorical/components/ChartLegendItem/ChartLegendItem.css +17 -17
- package/esm/charts/core/components/legend/categorical/components/ChartLegendItem/ChartLegendItem.sty.js +6 -6
- package/esm/charts/core/components/legend/categorical/components/ChartLegendItem/ChartLegendItem.sty.js.map +1 -1
- package/esm/charts/core/components/legend/categorical/components/ChartLegendSeriesActions/ChartLegendSeriesActions.css +3 -3
- package/esm/charts/core/components/legend/categorical/components/ChartLegendSeriesActions/ChartLegendSeriesActions.sty.js +1 -1
- package/esm/charts/core/components/legend/categorical/components/ChartLegendSeriesActions/ChartLegendSeriesActions.sty.js.map +1 -1
- package/esm/charts/core/components/legend/categorical/components/ChartVirtualizedLegendGrid.css +8 -8
- package/esm/charts/core/components/legend/categorical/components/ChartVirtualizedLegendGrid.sty.js +4 -4
- package/esm/charts/core/components/legend/categorical/components/ChartVirtualizedLegendGrid.sty.js.map +1 -1
- package/esm/charts/core/components/legend/range/RangeLegend.css +3 -3
- package/esm/charts/core/components/legend/range/RangeLegend.js +1 -1
- package/esm/charts/core/components/legend/range/RangeLegend.js.map +2 -2
- package/esm/charts/core/components/legend/range/RangeLegend.sty.js +1 -1
- package/esm/charts/core/components/legend/range/RangeLegend.sty.js.map +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendBoundaryLabel/RangeLegendBoundaryLabel.css +2 -2
- package/esm/charts/core/components/legend/range/components/RangeLegendBoundaryLabel/RangeLegendBoundaryLabel.js +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendBoundaryLabel/RangeLegendBoundaryLabel.js.map +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendBoundaryLabel/RangeLegendBoundaryLabel.sty.js +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendBoundaryLabel/RangeLegendBoundaryLabel.sty.js.map +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendItemLabel/RangeLegendItemLabel.css +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendItemLabel/RangeLegendItemLabel.js +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendItemLabel/RangeLegendItemLabel.js.map +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendItemLabel/RangeLegendItemLabel.sty.js +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendItemLabel/RangeLegendItemLabel.sty.js.map +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendItemMarker/RangeLegendItemMarker.css +3 -3
- package/esm/charts/core/components/legend/range/components/RangeLegendItemMarker/RangeLegendItemMarker.js +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendItemMarker/RangeLegendItemMarker.js.map +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendItemMarker/RangeLegendItemMarker.sty.js +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendItemMarker/RangeLegendItemMarker.sty.js.map +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendMarkers/RangeLegendMarkers.css +3 -3
- package/esm/charts/core/components/legend/range/components/RangeLegendMarkers/RangeLegendMarkers.js +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendMarkers/RangeLegendMarkers.js.map +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendMarkers/RangeLegendMarkers.sty.js +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendMarkers/RangeLegendMarkers.sty.js.map +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendSegments/RangeLegendSegments.css +5 -5
- package/esm/charts/core/components/legend/range/components/RangeLegendSegments/RangeLegendSegments.js +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendSegments/RangeLegendSegments.js.map +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendSegments/RangeLegendSegments.sty.js +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendSegments/RangeLegendSegments.sty.js.map +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendSegmentsItem.js +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendSegmentsItem.js.map +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendSegmentsOverlay.js +1 -1
- package/esm/charts/core/components/legend/range/components/RangeLegendSegmentsOverlay.js.map +1 -1
- package/esm/charts/core/components/legend/range/hooks/use-boundary-labels.js +1 -1
- package/esm/charts/core/components/legend/range/hooks/use-boundary-labels.js.map +1 -1
- package/esm/charts/core/components/legend/range/hooks/use-legend-boundary-label-collision-detector.js +1 -1
- package/esm/charts/core/components/legend/range/hooks/use-legend-boundary-label-collision-detector.js.map +1 -1
- package/esm/charts/core/components/legend/range/hooks/use-legend-intermediate-label-collision-detector.js +1 -1
- package/esm/charts/core/components/legend/range/hooks/use-legend-intermediate-label-collision-detector.js.map +1 -1
- package/esm/charts/core/components/legend/range/hooks/use-legend-segment-keyboard-handler.js +1 -1
- package/esm/charts/core/components/legend/range/hooks/use-legend-segment-keyboard-handler.js.map +1 -1
- package/esm/charts/core/components/legend/range/hooks/use-legend-segments-overlay-handlers.js +1 -1
- package/esm/charts/core/components/legend/range/hooks/use-legend-segments-overlay-handlers.js.map +2 -2
- package/esm/charts/core/components/legend/range/utils/get-segment-item-position-and-size.js +1 -1
- package/esm/charts/core/components/legend/range/utils/get-segment-item-position-and-size.js.map +2 -2
- package/esm/charts/core/components/loader-overlay/LoaderOverlay.css +2 -2
- package/esm/charts/core/components/loader-overlay/LoaderOverlay.sty.js +2 -2
- package/esm/charts/core/components/loader-overlay/LoaderOverlay.sty.js.map +1 -1
- package/esm/charts/core/components/overlay-tooltip/OverlayTooltip.js +12 -1
- package/esm/charts/core/components/overlay-tooltip/OverlayTooltip.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/_to-be-removed/HeaderTestTooltip.js +77 -1
- package/esm/charts/core/components/overlay-tooltip/_to-be-removed/HeaderTestTooltip.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/_to-be-removed/MyTooltip.js +49 -1
- package/esm/charts/core/components/overlay-tooltip/_to-be-removed/MyTooltip.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/_to-be-removed/_TruncationStory.js +1 -1
- package/esm/charts/core/components/overlay-tooltip/_to-be-removed/_TruncationStory.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/components/TooltipPortal.js +2 -1
- package/esm/charts/core/components/overlay-tooltip/components/TooltipPortal.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/components/global-actions/Action.js +5 -3
- package/esm/charts/core/components/overlay-tooltip/components/global-actions/Action.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/components/global-actions/ActionsPlaceholder.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/components/global-actions/actions.css +5 -7
- package/esm/charts/core/components/overlay-tooltip/components/global-actions/actions.sty.js +2 -2
- package/esm/charts/core/components/overlay-tooltip/components/global-actions/actions.sty.js.map +1 -1
- package/esm/charts/core/components/overlay-tooltip/components/header/Header.css +6 -6
- package/esm/charts/core/components/overlay-tooltip/components/header/Header.js +78 -53
- package/esm/charts/core/components/overlay-tooltip/components/header/Header.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/components/header/Header.sty.js +6 -6
- package/esm/charts/core/components/overlay-tooltip/components/header/Header.sty.js.map +1 -1
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/compute-header-display.js +55 -0
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/compute-header-display.js.map +7 -0
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/compute-subheader-display.js +21 -0
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/compute-subheader-display.js.map +7 -0
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/format-date-range.js +11 -2
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/format-date-range.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/format-value.js +1 -1
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/format-value.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/get-duration-content.js +1 -1
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/get-duration-content.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/get-non-geometry-header.js +15 -0
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/get-non-geometry-header.js.map +7 -0
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/get-show-range-duration.js.map +1 -1
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/get-shown-header-text.js.map +1 -1
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/get-value.js +16 -0
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/get-value.js.map +7 -0
- package/esm/charts/core/components/overlay-tooltip/components/header/{types → utils}/type-guards.js +4 -2
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/type-guards.js.map +7 -0
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/value-formatters.js +1 -5
- package/esm/charts/core/components/overlay-tooltip/components/header/utils/value-formatters.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/components/series/SeriesItem.js +2 -2
- package/esm/charts/core/components/overlay-tooltip/components/series/SeriesItem.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/components/series/hooks/use-series-item-display-state.js.map +1 -1
- package/esm/charts/core/components/overlay-tooltip/components/series/hooks/use-value-container-display-state.js.map +1 -1
- package/esm/charts/core/components/overlay-tooltip/components/series/seriesSymbol.css +2 -2
- package/esm/charts/core/components/overlay-tooltip/components/series/seriesSymbol.sty.js +2 -2
- package/esm/charts/core/components/overlay-tooltip/components/series/seriesSymbol.sty.js.map +1 -1
- package/esm/charts/core/components/overlay-tooltip/components/series/utils/get-display-text.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/constants.js +0 -2
- package/esm/charts/core/components/overlay-tooltip/constants.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/hooks/useDynamicTooltip.js +1 -1
- package/esm/charts/core/components/overlay-tooltip/hooks/useDynamicTooltip.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/tooltip.css +45 -44
- package/esm/charts/core/components/overlay-tooltip/tooltip.sty.js +34 -34
- package/esm/charts/core/components/overlay-tooltip/tooltip.sty.js.map +1 -1
- package/esm/charts/core/components/overlay-tooltip/types.js.map +1 -1
- package/esm/charts/core/components/overlay-tooltip/useTooltipReducer.js +4 -1
- package/esm/charts/core/components/overlay-tooltip/useTooltipReducer.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/utils/build-content.js +1 -1
- package/esm/charts/core/components/overlay-tooltip/utils/build-content.js.map +2 -2
- package/esm/charts/core/components/overlay-tooltip/utils/text-truncation-header.js.map +2 -2
- package/esm/charts/core/components/overlays/ChartOverlaysBorder.css +5 -5
- package/esm/charts/core/components/overlays/ChartOverlaysBorder.sty.js +5 -5
- package/esm/charts/core/components/overlays/ChartOverlaysBorder.sty.js.map +1 -1
- package/esm/charts/core/components/selection-area/DynamicSelectionArea.js +5 -2
- package/esm/charts/core/components/selection-area/DynamicSelectionArea.js.map +2 -2
- package/esm/charts/core/components/selection-area/Intent.js +19 -29
- package/esm/charts/core/components/selection-area/Intent.js.map +2 -2
- package/esm/charts/core/components/selection-area/SelectionArea.css +9 -28
- package/esm/charts/core/components/selection-area/SelectionArea.sty.js +4 -14
- package/esm/charts/core/components/selection-area/SelectionArea.sty.js.map +2 -2
- package/esm/charts/core/components/selection-area/SelectionTooltipWithAsyncActions.js +43 -39
- package/esm/charts/core/components/selection-area/SelectionTooltipWithAsyncActions.js.map +2 -2
- package/esm/charts/core/components/selection-area/tooltip/get-selection-tooltip-position.js +6 -2
- package/esm/charts/core/components/selection-area/tooltip/get-selection-tooltip-position.js.map +2 -2
- package/esm/charts/core/components/series-action/ChartActionsMenuAsync.js +4 -1
- package/esm/charts/core/components/series-action/ChartActionsMenuAsync.js.map +2 -2
- package/esm/charts/core/components/shape/BubbleShape/BubbleShape.css +5 -5
- package/esm/charts/core/components/shape/BubbleShape/BubbleShape.sty.js +3 -3
- package/esm/charts/core/components/shape/BubbleShape/BubbleShape.sty.js.map +1 -1
- package/esm/charts/core/components/shape/EmojiShape/EmojiShape.css +3 -3
- package/esm/charts/core/components/shape/EmojiShape/EmojiShape.sty.js +1 -1
- package/esm/charts/core/components/shape/EmojiShape/EmojiShape.sty.js.map +1 -1
- package/esm/charts/core/components/shape/IconShape/IconShape.css +3 -3
- package/esm/charts/core/components/shape/IconShape/IconShape.sty.js +1 -1
- package/esm/charts/core/components/shape/IconShape/IconShape.sty.js.map +1 -1
- package/esm/charts/core/components/shape/styles/DataPointShape.css +8 -8
- package/esm/charts/core/components/shape/styles/DataPointShape.sty.js +4 -4
- package/esm/charts/core/components/shape/styles/DataPointShape.sty.js.map +1 -1
- package/esm/charts/core/components/shared-chart-interactions/SharedChartInteractions.css +1 -1
- package/esm/charts/core/components/shared-chart-interactions/SharedChartInteractions.sty.js +1 -1
- package/esm/charts/core/components/shared-chart-interactions/SharedChartInteractions.sty.js.map +1 -1
- package/esm/charts/core/components/single-value-renderer/SingleValueRenderer.css +5 -5
- package/esm/charts/core/components/single-value-renderer/SingleValueRenderer.sty.js +5 -5
- package/esm/charts/core/components/single-value-renderer/SingleValueRenderer.sty.js.map +1 -1
- package/esm/charts/core/components/single-value-renderer/components/ContentGrid.css +1 -1
- package/esm/charts/core/components/single-value-renderer/components/ContentGrid.sty.js +1 -1
- package/esm/charts/core/components/single-value-renderer/components/ContentGrid.sty.js.map +1 -1
- package/esm/charts/core/components/single-value-renderer/components/Icon.css +3 -3
- package/esm/charts/core/components/single-value-renderer/components/Icon.sty.js +2 -2
- package/esm/charts/core/components/single-value-renderer/components/Icon.sty.js.map +1 -1
- package/esm/charts/core/components/single-value-renderer/components/Label.css +1 -1
- package/esm/charts/core/components/single-value-renderer/components/Label.sty.js +1 -1
- package/esm/charts/core/components/single-value-renderer/components/Label.sty.js.map +1 -1
- package/esm/charts/core/components/single-value-renderer/components/SingleValueToolbar.css +1 -1
- package/esm/charts/core/components/single-value-renderer/components/SingleValueToolbar.sty.js +1 -1
- package/esm/charts/core/components/single-value-renderer/components/SingleValueToolbar.sty.js.map +1 -1
- package/esm/charts/core/components/single-value-renderer/components/Value.css +5 -5
- package/esm/charts/core/components/single-value-renderer/components/Value.sty.js +3 -3
- package/esm/charts/core/components/single-value-renderer/components/Value.sty.js.map +1 -1
- package/esm/charts/core/components/single-value-renderer/components/trend/Trend.css +3 -3
- package/esm/charts/core/components/single-value-renderer/components/trend/Trend.sty.js +3 -3
- package/esm/charts/core/components/single-value-renderer/components/trend/Trend.sty.js.map +1 -1
- package/esm/charts/core/components/single-value-renderer/components/trend/components/Icon.css +2 -2
- package/esm/charts/core/components/single-value-renderer/components/trend/components/Icon.sty.js +1 -1
- package/esm/charts/core/components/single-value-renderer/components/trend/components/Icon.sty.js.map +1 -1
- package/esm/charts/core/components/sparkline-display/Sparkline.css +6 -6
- package/esm/charts/core/components/sparkline-display/Sparkline.sty.js +2 -2
- package/esm/charts/core/components/sparkline-display/Sparkline.sty.js.map +1 -1
- package/esm/charts/core/components/sparkline-display/SparklineContainer.js +5 -15
- package/esm/charts/core/components/sparkline-display/SparklineContainer.js.map +2 -2
- package/esm/charts/core/components/sparkline-display/utils/get-adjusted-context-value-y-position.js +33 -1
- package/esm/charts/core/components/sparkline-display/utils/get-adjusted-context-value-y-position.js.map +2 -2
- package/esm/charts/core/components/text-ellipsis/ChartTextEllipsis.css +7 -7
- package/esm/charts/core/components/text-ellipsis/ChartTextEllipsis.js.map +2 -2
- package/esm/charts/core/components/text-ellipsis/ChartTextEllipsis.sty.js +3 -3
- package/esm/charts/core/components/text-ellipsis/ChartTextEllipsis.sty.js.map +1 -1
- package/esm/charts/core/components/text-ellipsis/truncate-string.js +7 -3
- package/esm/charts/core/components/text-ellipsis/truncate-string.js.map +2 -2
- package/esm/charts/core/components/threshold-bar/styles.css +9 -9
- package/esm/charts/core/components/threshold-bar/styles.sty.js +2 -2
- package/esm/charts/core/components/threshold-bar/styles.sty.js.map +1 -1
- package/esm/charts/core/components/toolbar/ChartToolbarRenderer.css +16 -16
- package/esm/charts/core/components/toolbar/ChartToolbarRenderer.sty.js +8 -8
- package/esm/charts/core/components/toolbar/ChartToolbarRenderer.sty.js.map +1 -1
- package/esm/charts/core/components/toolbar/components/ChartDataMenu.css +2 -2
- package/esm/charts/core/components/toolbar/components/ChartDataMenu.sty.js +1 -1
- package/esm/charts/core/components/toolbar/components/ChartDataMenu.sty.js.map +1 -1
- package/esm/charts/core/components/toolbar/components/Control.css +17 -17
- package/esm/charts/core/components/toolbar/components/Control.sty.js +5 -5
- package/esm/charts/core/components/toolbar/components/Control.sty.js.map +1 -1
- package/esm/charts/core/components/toolbar/components/ToolbarMenu.css +4 -4
- package/esm/charts/core/components/toolbar/components/ToolbarMenu.sty.js +2 -2
- package/esm/charts/core/components/toolbar/components/ToolbarMenu.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip/ChartTooltip/ChartTooltip.css +6 -6
- package/esm/charts/core/components/tooltip/ChartTooltip/ChartTooltip.sty.js +2 -2
- package/esm/charts/core/components/tooltip/ChartTooltip/ChartTooltip.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip/ChartTooltip/components/ActionItem/ActionItem.css +8 -8
- package/esm/charts/core/components/tooltip/ChartTooltip/components/ActionItem/ActionItem.sty.js +3 -3
- package/esm/charts/core/components/tooltip/ChartTooltip/components/ActionItem/ActionItem.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip/ChartTooltip/components/SeriesItem/SeriesItem.css +2 -2
- package/esm/charts/core/components/tooltip/ChartTooltip/components/SeriesItem/SeriesItem.sty.js +1 -1
- package/esm/charts/core/components/tooltip/ChartTooltip/components/SeriesItem/SeriesItem.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip/ChartTooltip/components/TimeFrameHeader/TimeFrameHeader.css +1 -1
- package/esm/charts/core/components/tooltip/ChartTooltip/components/TimeFrameHeader/TimeFrameHeader.sty.js +1 -1
- package/esm/charts/core/components/tooltip/ChartTooltip/components/TimeFrameHeader/TimeFrameHeader.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip/InteractiveChartTooltip/components/BasicChartTooltip/BasicChartTooltip.css +6 -8
- package/esm/charts/core/components/tooltip/InteractiveChartTooltip/components/BasicChartTooltip/BasicChartTooltip.js +5 -1
- package/esm/charts/core/components/tooltip/InteractiveChartTooltip/components/BasicChartTooltip/BasicChartTooltip.js.map +2 -2
- package/esm/charts/core/components/tooltip/InteractiveChartTooltip/components/BasicChartTooltip/BasicChartTooltip.sty.js +2 -2
- package/esm/charts/core/components/tooltip/InteractiveChartTooltip/components/BasicChartTooltip/BasicChartTooltip.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip/InteractiveChartTooltip/components/InteractiveChartTooltip.css +7 -7
- package/esm/charts/core/components/tooltip/InteractiveChartTooltip/components/InteractiveChartTooltip.sty.js +6 -6
- package/esm/charts/core/components/tooltip/InteractiveChartTooltip/components/InteractiveChartTooltip.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip/InteractiveChartTooltip/headers/HeaderTooltip.css +1 -1
- package/esm/charts/core/components/tooltip/InteractiveChartTooltip/headers/HeaderTooltip.sty.js +1 -1
- package/esm/charts/core/components/tooltip/InteractiveChartTooltip/headers/HeaderTooltip.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip/section-components/TooltipFooter/TooltipFooter.css +1 -1
- package/esm/charts/core/components/tooltip/section-components/TooltipFooter/TooltipFooter.sty.js +1 -1
- package/esm/charts/core/components/tooltip/section-components/TooltipFooter/TooltipFooter.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip/section-components/TooltipHeader/TooltipHeader.css +2 -2
- package/esm/charts/core/components/tooltip/section-components/TooltipHeader/TooltipHeader.sty.js +1 -1
- package/esm/charts/core/components/tooltip/section-components/TooltipHeader/TooltipHeader.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip/section-components/TooltipInfoContent/TooltipInfoContent.css +1 -1
- package/esm/charts/core/components/tooltip/section-components/TooltipInfoContent/TooltipInfoContent.sty.js +1 -1
- package/esm/charts/core/components/tooltip/section-components/TooltipInfoContent/TooltipInfoContent.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip/section-components/TooltipItem/TooltipItem.css +3 -3
- package/esm/charts/core/components/tooltip/section-components/TooltipItem/TooltipItem.sty.js +2 -2
- package/esm/charts/core/components/tooltip/section-components/TooltipItem/TooltipItem.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip/section-components/TooltipSymbolContent/TooltipSymbolContent.css +1 -1
- package/esm/charts/core/components/tooltip/section-components/TooltipSymbolContent/TooltipSymbolContent.sty.js +1 -1
- package/esm/charts/core/components/tooltip/section-components/TooltipSymbolContent/TooltipSymbolContent.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip/section-components/VirtualizedTooltipBody/VirtualizedTooltipBody.css +2 -2
- package/esm/charts/core/components/tooltip/section-components/VirtualizedTooltipBody/VirtualizedTooltipBody.sty.js +2 -2
- package/esm/charts/core/components/tooltip/section-components/VirtualizedTooltipBody/VirtualizedTooltipBody.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip/section-components/atoms/styles.css +3 -3
- package/esm/charts/core/components/tooltip/section-components/atoms/styles.sty.js +3 -3
- package/esm/charts/core/components/tooltip/section-components/atoms/styles.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip/shared/styles/SeriesBasedContent.css +12 -12
- package/esm/charts/core/components/tooltip/shared/styles/SeriesBasedContent.sty.js +7 -7
- package/esm/charts/core/components/tooltip/shared/styles/SeriesBasedContent.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip/shared/styles/TooltipBody.css +1 -1
- package/esm/charts/core/components/tooltip/shared/styles/TooltipBody.sty.js +1 -1
- package/esm/charts/core/components/tooltip/shared/styles/TooltipBody.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip-atoms/components/HeaderChipAtom/HeaderChipAtom.css +1 -1
- package/esm/charts/core/components/tooltip-atoms/components/HeaderChipAtom/HeaderChipAtom.sty.js +1 -1
- package/esm/charts/core/components/tooltip-atoms/components/HeaderChipAtom/HeaderChipAtom.sty.js.map +1 -1
- package/esm/charts/core/components/tooltip-atoms/components/styles.css +4 -4
- package/esm/charts/core/components/tooltip-atoms/components/styles.sty.js +4 -4
- package/esm/charts/core/components/tooltip-atoms/components/styles.sty.js.map +1 -1
- package/esm/charts/core/components/zoom/ZoomCursors.css +2 -2
- package/esm/charts/core/components/zoom/ZoomCursors.sty.js +3 -3
- package/esm/charts/core/components/zoom/ZoomCursors.sty.js.map +1 -1
- package/esm/charts/core/constants.js +9 -0
- package/esm/charts/core/constants.js.map +2 -2
- package/esm/charts/core/hooks/useOverlayEventHandlers.js +0 -19
- package/esm/charts/core/hooks/useOverlayEventHandlers.js.map +2 -2
- package/esm/charts/core/hooks/usePointerAndScrollResponsiveChartBounds.js +40 -0
- package/esm/charts/core/hooks/usePointerAndScrollResponsiveChartBounds.js.map +7 -0
- package/esm/charts/core/slots/Tooltip.js +9 -0
- package/esm/charts/core/slots/Tooltip.js.map +7 -0
- package/esm/charts/core/types/formatter.js.map +2 -2
- package/esm/charts/core/types/tooltip.js.map +2 -2
- package/esm/charts/core/typographyStyles.css +1 -1
- package/esm/charts/core/typographyStyles.sty.js +1 -1
- package/esm/charts/core/typographyStyles.sty.js.map +1 -1
- package/esm/charts/core/utils/formatter-by-ticks.js +4 -2
- package/esm/charts/core/utils/formatter-by-ticks.js.map +2 -2
- package/esm/charts/gantt-chart/GanttChartLine.css +1 -1
- package/esm/charts/gantt-chart/GanttChartLine.sty.js +1 -1
- package/esm/charts/gantt-chart/GanttChartLine.sty.js.map +1 -1
- package/esm/charts/gantt-chart/components/GanttChartLineRenderer.css +1 -1
- package/esm/charts/gantt-chart/components/GanttChartLineRenderer.sty.js +1 -1
- package/esm/charts/gantt-chart/components/GanttChartLineRenderer.sty.js.map +1 -1
- package/esm/charts/gantt-chart/components/tooltip/GanttChartTooltip.css +1 -1
- package/esm/charts/gantt-chart/components/tooltip/GanttChartTooltip.sty.js +1 -1
- package/esm/charts/gantt-chart/components/tooltip/GanttChartTooltip.sty.js.map +1 -1
- package/esm/charts/gauge/components/GaugeChartLayout/GaugeChartLayout.css +1 -1
- package/esm/charts/gauge/components/GaugeChartLayout/GaugeChartLayout.sty.js +1 -1
- package/esm/charts/gauge/components/GaugeChartLayout/GaugeChartLayout.sty.js.map +1 -1
- package/esm/charts/gauge/components/GaugeLabel/GaugeLabel.css +6 -6
- package/esm/charts/gauge/components/GaugeLabel/GaugeLabel.sty.js +3 -3
- package/esm/charts/gauge/components/GaugeLabel/GaugeLabel.sty.js.map +1 -1
- package/esm/charts/gauge/components/GaugeLabelsWrapper/GaugeLabelsWrapper.css +3 -3
- package/esm/charts/gauge/components/GaugeLabelsWrapper/GaugeLabelsWrapper.sty.js +1 -1
- package/esm/charts/gauge/components/GaugeLabelsWrapper/GaugeLabelsWrapper.sty.js.map +1 -1
- package/esm/charts/gauge/components/GaugeLayoutOverlay/GaugeLayoutOverlay.css +4 -4
- package/esm/charts/gauge/components/GaugeLayoutOverlay/GaugeLayoutOverlay.sty.js +3 -3
- package/esm/charts/gauge/components/GaugeLayoutOverlay/GaugeLayoutOverlay.sty.js.map +1 -1
- package/esm/charts/gauge/components/GaugeResponsiveLabel/GaugeResponsiveLabel.css +2 -2
- package/esm/charts/gauge/components/GaugeResponsiveLabel/GaugeResponsiveLabel.sty.js +2 -2
- package/esm/charts/gauge/components/GaugeResponsiveLabel/GaugeResponsiveLabel.sty.js.map +1 -1
- package/esm/charts/histogram/components/axes/HistogramValueBottomAxisArea/HistogramValueBottomAxisArea.css +1 -1
- package/esm/charts/histogram/components/axes/HistogramValueBottomAxisArea/HistogramValueBottomAxisArea.sty.js +1 -1
- package/esm/charts/histogram/components/axes/HistogramValueBottomAxisArea/HistogramValueBottomAxisArea.sty.js.map +1 -1
- package/esm/charts/histogram/components/overlays/HistogramExplore/HistogramTooltip.css +1 -1
- package/esm/charts/histogram/components/overlays/HistogramExplore/HistogramTooltip.sty.js +1 -1
- package/esm/charts/histogram/components/overlays/HistogramExplore/HistogramTooltip.sty.js.map +1 -1
- package/esm/charts/histogram/components/overlays/HistogramOverlays.css +2 -2
- package/esm/charts/histogram/components/overlays/HistogramOverlays.sty.js +2 -2
- package/esm/charts/histogram/components/overlays/HistogramOverlays.sty.js.map +1 -1
- package/esm/charts/histogram/components/overlays/HistogramSelectionArea/HistogramSelectionAreaTooltip.js +14 -17
- package/esm/charts/histogram/components/overlays/HistogramSelectionArea/HistogramSelectionAreaTooltip.js.map +2 -2
- package/esm/charts/honeycomb/HoneycombChart.css +1 -1
- package/esm/charts/honeycomb/HoneycombChart.sty.js +1 -1
- package/esm/charts/honeycomb/HoneycombChart.sty.js.map +1 -1
- package/esm/charts/honeycomb/components/HiveOverlay.css +1 -1
- package/esm/charts/honeycomb/components/HiveOverlay.sty.js +1 -1
- package/esm/charts/honeycomb/components/HiveOverlay.sty.js.map +1 -1
- package/esm/charts/honeycomb/components/canvas/HiveCanvasLayout.css +1 -1
- package/esm/charts/honeycomb/components/canvas/HiveCanvasLayout.sty.js +1 -1
- package/esm/charts/honeycomb/components/canvas/HiveCanvasLayout.sty.js.map +1 -1
- package/esm/charts/index.js +2 -0
- package/esm/charts/index.js.map +3 -3
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/MeterBarLayout.css +15 -15
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/MeterBarLayout.sty.js +10 -10
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/MeterBarLayout.sty.js.map +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/slots/Icon/Icon.css +2 -2
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/slots/Icon/Icon.sty.js +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/slots/Icon/Icon.sty.js.map +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/slots/Label/Label.css +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/slots/Label/Label.sty.js +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/slots/Label/Label.sty.js.map +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/slots/Max/Max.css +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/slots/Max/Max.sty.js +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/slots/Max/Max.sty.js.map +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/slots/Min/Min.css +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/slots/Min/Min.sty.js +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/slots/Min/Min.sty.js.map +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/slots/Value/Value.css +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/slots/Value/Value.sty.js +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-layout/slots/Value/Value.sty.js.map +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-plot/MeterBarPlot.css +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-plot/MeterBarPlot.sty.js +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-plot/MeterBarPlot.sty.js.map +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-tooltip/MeterBarTooltipItem/MeterBarTooltipItem.css +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-tooltip/MeterBarTooltipItem/MeterBarTooltipItem.sty.js +1 -1
- package/esm/charts/meter-bar/shared/components/meter-bar-tooltip/MeterBarTooltipItem/MeterBarTooltipItem.sty.js.map +1 -1
- package/esm/charts/meter-bar/shared/styles/element-size.css +4 -4
- package/esm/charts/meter-bar/shared/styles/element-size.sty.js +1 -1
- package/esm/charts/meter-bar/shared/styles/element-size.sty.js.map +1 -1
- package/esm/charts/meter-bar/shared/styles.css +1 -1
- package/esm/charts/meter-bar/shared/styles.sty.js +1 -1
- package/esm/charts/meter-bar/shared/styles.sty.js.map +1 -1
- package/esm/charts/meter-bar/single-meter-bar/components/MeterBarChartThresholds/MeterBarChartThresholds.css +1 -1
- package/esm/charts/meter-bar/single-meter-bar/components/MeterBarChartThresholds/MeterBarChartThresholds.sty.js +1 -1
- package/esm/charts/meter-bar/single-meter-bar/components/MeterBarChartThresholds/MeterBarChartThresholds.sty.js.map +1 -1
- package/esm/charts/pie/DonutChart.js +2 -0
- package/esm/charts/pie/DonutChart.js.map +2 -2
- package/esm/charts/pie/PieChart.js +2 -0
- package/esm/charts/pie/PieChart.js.map +2 -2
- package/esm/charts/pie/components/InnerWrapper/components/InnerContainer/InnerContainer.css +1 -1
- package/esm/charts/pie/components/InnerWrapper/components/InnerContainer/InnerContainer.sty.js +1 -1
- package/esm/charts/pie/components/InnerWrapper/components/InnerContainer/InnerContainer.sty.js.map +1 -1
- package/esm/charts/pie/components/InnerWrapper/components/InnerDonut/InnerDonut.css +1 -1
- package/esm/charts/pie/components/InnerWrapper/components/InnerDonut/InnerDonut.sty.js +1 -1
- package/esm/charts/pie/components/InnerWrapper/components/InnerDonut/InnerDonut.sty.js.map +1 -1
- package/esm/charts/pie/components/PieChartInternal.js +1 -1
- package/esm/charts/pie/components/PieChartInternal.js.map +2 -2
- package/esm/charts/pie/components/PieChartLegend/PieChartLegend.js +1 -1
- package/esm/charts/pie/components/PieChartLegend/PieChartLegend.js.map +2 -2
- package/esm/charts/pie/components/PieChartOverlays/PieChartOverlays.css +1 -1
- package/esm/charts/pie/components/PieChartOverlays/PieChartOverlays.sty.js +1 -1
- package/esm/charts/pie/components/PieChartOverlays/PieChartOverlays.sty.js.map +1 -1
- package/esm/charts/pie/components/PieChartPlot/PieChartPlot.css +1 -1
- package/esm/charts/pie/components/PieChartPlot/PieChartPlot.sty.js +1 -1
- package/esm/charts/pie/components/PieChartPlot/PieChartPlot.sty.js.map +1 -1
- package/esm/charts/pie/components/PieChartTooltip/PieChartTooltip.js +12 -1
- package/esm/charts/pie/components/PieChartTooltip/PieChartTooltip.js.map +2 -2
- package/esm/charts/pie/{contexts → context}/PieChartOverlayRefContext.js.map +1 -1
- package/esm/charts/pie/context/PieChartTooltipContext.js +10 -0
- package/esm/charts/pie/context/PieChartTooltipContext.js.map +7 -0
- package/esm/charts/pie/hooks/usePieChartTooltip.js +7 -0
- package/esm/charts/pie/hooks/usePieChartTooltip.js.map +7 -0
- package/esm/charts/pie/providers/ChartProviders.js +19 -9
- package/esm/charts/pie/providers/ChartProviders.js.map +2 -2
- package/esm/charts/pie/slots/DonutChartTooltip.js +6 -0
- package/esm/charts/pie/slots/DonutChartTooltip.js.map +7 -0
- package/esm/charts/pie/slots/PieChartTooltip.js +6 -0
- package/esm/charts/pie/slots/PieChartTooltip.js.map +7 -0
- package/esm/charts/pie/types/pie-chart.config.js.map +2 -2
- package/esm/charts/pie/utils/iterate-slots.js +12 -1
- package/esm/charts/pie/utils/iterate-slots.js.map +2 -2
- package/esm/charts/pie/utils/pie-config.js +2 -1
- package/esm/charts/pie/utils/pie-config.js.map +2 -2
- package/esm/charts/single-value/SingleValue.css +1 -1
- package/esm/charts/single-value/SingleValue.sty.js +1 -1
- package/esm/charts/single-value/SingleValue.sty.js.map +1 -1
- package/esm/charts/single-value-grid/SingleValueGrid.css +2 -2
- package/esm/charts/single-value-grid/SingleValueGrid.sty.js +1 -1
- package/esm/charts/single-value-grid/SingleValueGrid.sty.js.map +1 -1
- package/esm/charts/single-value-grid/components/GlobalFontSizeVariables.css +1 -1
- package/esm/charts/single-value-grid/components/GlobalFontSizeVariables.sty.js +1 -1
- package/esm/charts/single-value-grid/components/GlobalFontSizeVariables.sty.js.map +1 -1
- package/esm/charts/timeseries/components/axes/TimeseriesTimeBottomAxisArea/TimeseriesTimeBottomAxisArea.css +2 -2
- package/esm/charts/timeseries/components/axes/TimeseriesTimeBottomAxisArea/TimeseriesTimeBottomAxisArea.sty.js +1 -1
- package/esm/charts/timeseries/components/axes/TimeseriesTimeBottomAxisArea/TimeseriesTimeBottomAxisArea.sty.js.map +1 -1
- package/esm/charts/timeseries/components/overlays/TimeseriesOverlays.css +4 -4
- package/esm/charts/timeseries/components/overlays/TimeseriesOverlays.sty.js +4 -4
- package/esm/charts/timeseries/components/overlays/TimeseriesOverlays.sty.js.map +1 -1
- package/esm/charts/timeseries/components/overlays/TimeseriesSelection/TimeseriesSelectionAreaTooltip.js +17 -22
- package/esm/charts/timeseries/components/overlays/TimeseriesSelection/TimeseriesSelectionAreaTooltip.js.map +2 -2
- package/esm/charts/timeseries/components/thresholds/ThresholdIndicators.css +2 -2
- package/esm/charts/timeseries/components/thresholds/ThresholdIndicators.sty.js +2 -2
- package/esm/charts/timeseries/components/thresholds/ThresholdIndicators.sty.js.map +1 -1
- package/esm/charts/tree-map/components/TreeMapOverlay/TreeMapOverlay.css +1 -1
- package/esm/charts/tree-map/components/TreeMapOverlay/TreeMapOverlay.sty.js +1 -1
- package/esm/charts/tree-map/components/TreeMapOverlay/TreeMapOverlay.sty.js.map +1 -1
- package/esm/charts/xy-chart/XYChart.js +1 -1
- package/esm/charts/xy-chart/XYChart.js.map +2 -2
- package/esm/charts/xy-chart/XYChartRoot.js +4 -0
- package/esm/charts/xy-chart/XYChartRoot.js.map +2 -2
- package/esm/charts/xy-chart/builders/XYChartImperativeHandlerBuilder.js +8 -4
- package/esm/charts/xy-chart/builders/XYChartImperativeHandlerBuilder.js.map +2 -2
- package/esm/charts/xy-chart/components/annotations/XYChartAnnotationsArea.js +5 -2
- package/esm/charts/xy-chart/components/annotations/XYChartAnnotationsArea.js.map +2 -2
- package/esm/charts/xy-chart/components/annotations/utils/get-indicators-from-annotations.js +2 -3
- package/esm/charts/xy-chart/components/annotations/utils/get-indicators-from-annotations.js.map +2 -2
- package/esm/charts/xy-chart/components/axes/AxisArea.css +1 -1
- package/esm/charts/xy-chart/components/axes/AxisArea.sty.js +1 -1
- package/esm/charts/xy-chart/components/axes/AxisArea.sty.js.map +1 -1
- package/esm/charts/xy-chart/components/axes/AxisTickWithTruncation.css +3 -3
- package/esm/charts/xy-chart/components/axes/AxisTickWithTruncation.sty.js +3 -3
- package/esm/charts/xy-chart/components/axes/AxisTickWithTruncation.sty.js.map +1 -1
- package/esm/charts/xy-chart/components/legend/XYLegend/xy-legend.css +1 -1
- package/esm/charts/xy-chart/components/legend/XYLegend/xy-legend.sty.js +1 -1
- package/esm/charts/xy-chart/components/legend/XYLegend/xy-legend.sty.js.map +1 -1
- package/esm/charts/xy-chart/components/overlay/explore/XYChartCrosshair.css +1 -1
- package/esm/charts/xy-chart/components/overlay/explore/XYChartCrosshair.js +4 -1
- package/esm/charts/xy-chart/components/overlay/explore/XYChartCrosshair.js.map +2 -2
- package/esm/charts/xy-chart/components/overlay/explore/XYChartCrosshair.sty.js +1 -1
- package/esm/charts/xy-chart/components/overlay/explore/XYChartCrosshair.sty.js.map +1 -1
- package/esm/charts/xy-chart/components/overlay/explore/XYChartExplore.css +2 -2
- package/esm/charts/xy-chart/components/overlay/explore/XYChartExplore.sty.js +2 -2
- package/esm/charts/xy-chart/components/overlay/explore/XYChartExplore.sty.js.map +1 -1
- package/esm/charts/xy-chart/components/overlay/utils/chartCrosshairDataTransformer.js +15 -8
- package/esm/charts/xy-chart/components/overlay/utils/chartCrosshairDataTransformer.js.map +2 -2
- package/esm/charts/xy-chart/components/selection/TooltipHeader.css +2 -2
- package/esm/charts/xy-chart/components/selection/TooltipHeader.js +28 -28
- package/esm/charts/xy-chart/components/selection/TooltipHeader.js.map +2 -2
- package/esm/charts/xy-chart/components/selection/TooltipHeader.sty.js +2 -2
- package/esm/charts/xy-chart/components/selection/TooltipHeader.sty.js.map +1 -1
- package/esm/charts/xy-chart/components/selection/XYChartSelectionArea.js +6 -1
- package/esm/charts/xy-chart/components/selection/XYChartSelectionArea.js.map +2 -2
- package/esm/charts/xy-chart/components/selection/XYChartSelectionAreaTooltip.js +19 -15
- package/esm/charts/xy-chart/components/selection/XYChartSelectionAreaTooltip.js.map +2 -2
- package/esm/charts/xy-chart/components/selection/get-header-props.js +55 -0
- package/esm/charts/xy-chart/components/selection/get-header-props.js.map +7 -0
- package/esm/charts/xy-chart/components/thresholds/XYChartThresholdIndicators.css +1 -1
- package/esm/charts/xy-chart/components/thresholds/XYChartThresholdIndicators.sty.js +1 -1
- package/esm/charts/xy-chart/components/thresholds/XYChartThresholdIndicators.sty.js.map +1 -1
- package/esm/charts/xy-chart/components/tooltip/ClosestPointTooltip/ClosestPointTooltip.js +1 -1
- package/esm/charts/xy-chart/components/tooltip/ClosestPointTooltip/ClosestPointTooltip.js.map +2 -2
- package/esm/charts/xy-chart/components/tooltip/HoveredPointTooltip/HoveredPointTooltip.js +4 -1
- package/esm/charts/xy-chart/components/tooltip/HoveredPointTooltip/HoveredPointTooltip.js.map +2 -2
- package/esm/charts/xy-chart/components/tooltip/HoveredPointTooltip/hooks/getHoveredPointTooltipBodyContent.js +11 -6
- package/esm/charts/xy-chart/components/tooltip/HoveredPointTooltip/hooks/getHoveredPointTooltipBodyContent.js.map +2 -2
- package/esm/charts/xy-chart/components/tooltip/HoveredPointTooltip/hoveredPointTooltipBodyUtils.js +7 -2
- package/esm/charts/xy-chart/components/tooltip/HoveredPointTooltip/hoveredPointTooltipBodyUtils.js.map +2 -2
- package/esm/charts/xy-chart/components/tooltip/XYChartTooltipContent.js +5 -2
- package/esm/charts/xy-chart/components/tooltip/XYChartTooltipContent.js.map +2 -2
- package/esm/charts/xy-chart/components/tooltip/XYChartTooltipTemplate/XYChartTooltipTemplate.css +1 -1
- package/esm/charts/xy-chart/components/tooltip/XYChartTooltipTemplate/XYChartTooltipTemplate.sty.js +1 -1
- package/esm/charts/xy-chart/components/tooltip/XYChartTooltipTemplate/XYChartTooltipTemplate.sty.js.map +1 -1
- package/esm/charts/xy-chart/components/tooltip/utils/tooltip-styles.css +5 -5
- package/esm/charts/xy-chart/components/tooltip/utils/tooltip-styles.sty.js +4 -4
- package/esm/charts/xy-chart/components/tooltip/utils/tooltip-styles.sty.js.map +1 -1
- package/esm/charts/xy-chart/constants/defaults.js +2 -0
- package/esm/charts/xy-chart/constants/defaults.js.map +2 -2
- package/esm/charts/xy-chart/context/XYChartCustomTooltip.context.js +3 -1
- package/esm/charts/xy-chart/context/XYChartCustomTooltip.context.js.map +2 -2
- package/esm/charts/xy-chart/context/XYChartData.context.js.map +2 -2
- package/esm/charts/xy-chart/hooks/useFormatCategory.js +42 -0
- package/esm/charts/xy-chart/hooks/useFormatCategory.js.map +7 -0
- package/esm/charts/xy-chart/hooks/useXYChartDataProvider.js +30 -2
- package/esm/charts/xy-chart/hooks/useXYChartDataProvider.js.map +2 -2
- package/esm/charts/xy-chart/layout/XYChartLayout.css +2 -2
- package/esm/charts/xy-chart/layout/XYChartLayout.sty.js +2 -2
- package/esm/charts/xy-chart/layout/XYChartLayout.sty.js.map +1 -1
- package/esm/charts/xy-chart/processing-strategies/strategies/area-series.js +9 -6
- package/esm/charts/xy-chart/processing-strategies/strategies/area-series.js.map +2 -2
- package/esm/charts/xy-chart/processing-strategies/strategies/bar-series.js +9 -6
- package/esm/charts/xy-chart/processing-strategies/strategies/bar-series.js.map +2 -2
- package/esm/charts/xy-chart/processing-strategies/strategies/base-series.js +7 -3
- package/esm/charts/xy-chart/processing-strategies/strategies/base-series.js.map +2 -2
- package/esm/charts/xy-chart/processing-strategies/strategies/dot-series.js +10 -7
- package/esm/charts/xy-chart/processing-strategies/strategies/dot-series.js.map +2 -2
- package/esm/charts/xy-chart/processing-strategies/strategies/line-series.js +10 -7
- package/esm/charts/xy-chart/processing-strategies/strategies/line-series.js.map +2 -2
- package/esm/charts/xy-chart/processing-strategies/strategies/rect-series.js +15 -12
- package/esm/charts/xy-chart/processing-strategies/strategies/rect-series.js.map +2 -2
- package/esm/charts/xy-chart/providers/XYChartAnnotationsDataProvider.js +3 -1
- package/esm/charts/xy-chart/providers/XYChartAnnotationsDataProvider.js.map +2 -2
- package/esm/charts/xy-chart/providers/XYChartAxesTicksProvider.js +34 -6
- package/esm/charts/xy-chart/providers/XYChartAxesTicksProvider.js.map +2 -2
- package/esm/charts/xy-chart/providers/XYChartDataProvider.js +2 -0
- package/esm/charts/xy-chart/providers/XYChartDataProvider.js.map +2 -2
- package/esm/charts/xy-chart/slots/CustomTooltip.js.map +2 -2
- package/esm/charts/xy-chart/slots/Tooltip.js +7 -0
- package/esm/charts/xy-chart/slots/Tooltip.js.map +7 -0
- package/esm/charts/xy-chart/types/xy-chart-internals.js.map +2 -2
- package/esm/charts/xy-chart/utils/calculate-axes-domains.js +3 -3
- package/esm/charts/xy-chart/utils/calculate-axes-domains.js.map +2 -2
- package/esm/charts/xy-chart/utils/generate-nice-unit-ticks.js +5 -1
- package/esm/charts/xy-chart/utils/generate-nice-unit-ticks.js.map +2 -2
- package/esm/charts/xy-chart/utils/get-ticks-formatted-by-config.js +13 -7
- package/esm/charts/xy-chart/utils/get-ticks-formatted-by-config.js.map +2 -2
- package/esm/charts/xy-chart/utils/iterate-slots.js +11 -2
- package/esm/charts/xy-chart/utils/iterate-slots.js.map +2 -2
- package/esm/charts/xy-chart/utils/type-guards.js.map +2 -2
- package/esm/charts/xy-chart/utils/xy-chart-configuration.js +18 -2
- package/esm/charts/xy-chart/utils/xy-chart-configuration.js.map +2 -2
- package/esm/charts/xy-chart-adoption/histogram/HistogramToXY.js +133 -45
- package/esm/charts/xy-chart-adoption/histogram/HistogramToXY.js.map +2 -2
- package/esm/charts/xy-chart-adoption/histogram/iterate-histogram-slots.js +60 -4
- package/esm/charts/xy-chart-adoption/histogram/iterate-histogram-slots.js.map +2 -2
- package/esm/charts/xy-chart-adoption/histogram/transformer-annotations-to-xy.js +50 -0
- package/esm/charts/xy-chart-adoption/histogram/transformer-annotations-to-xy.js.map +7 -0
- package/esm/charts/xy-chart-adoption/histogram/transformer-data-to-xy.js +17 -18
- package/esm/charts/xy-chart-adoption/histogram/transformer-data-to-xy.js.map +3 -3
- package/esm/charts/xy-chart-adoption/histogram/transformer-thresholds-to-xy.js +83 -0
- package/esm/charts/xy-chart-adoption/histogram/transformer-thresholds-to-xy.js.map +7 -0
- package/esm/charts/xy-chart-adoption/histogram/utils/axis-props-mapping.js +4 -3
- package/esm/charts/xy-chart-adoption/histogram/utils/axis-props-mapping.js.map +2 -2
- package/esm/charts/xy-chart-adoption/histogram/utils/build-histogram-imperative-handle.js +18 -0
- package/esm/charts/xy-chart-adoption/histogram/utils/build-histogram-imperative-handle.js.map +7 -0
- package/esm/charts/xy-chart-adoption/histogram/utils/build-y-axes-config.js +28 -0
- package/esm/charts/xy-chart-adoption/histogram/utils/build-y-axes-config.js.map +7 -0
- package/esm/charts/xy-chart-adoption/histogram/utils/derive-xychart-props-from-config.js +15 -0
- package/esm/charts/xy-chart-adoption/histogram/utils/derive-xychart-props-from-config.js.map +7 -0
- package/esm/charts/xy-chart-adoption/histogram/utils/serialize-histogram-config.js +10 -0
- package/esm/charts/xy-chart-adoption/histogram/utils/serialize-histogram-config.js.map +7 -0
- package/esm/charts/xy-chart-adoption/timeseries/transformer-data-to-xy.js +26 -0
- package/esm/charts/xy-chart-adoption/timeseries/transformer-data-to-xy.js.map +7 -0
- package/esm/content/accordion/Accordion.css +14 -14
- package/esm/content/accordion/Accordion.sty.js +8 -8
- package/esm/content/accordion/Accordion.sty.js.map +1 -1
- package/esm/content/ai-loading-indicator/AiLoadingIndicator.css +12 -12
- package/esm/content/ai-loading-indicator/AiLoadingIndicator.sty.js +4 -4
- package/esm/content/ai-loading-indicator/AiLoadingIndicator.sty.js.map +1 -1
- package/esm/content/ai-response/AiResponse.css +5 -5
- package/esm/content/ai-response/AiResponse.sty.js +3 -2
- package/esm/content/ai-response/AiResponse.sty.js.map +2 -2
- package/esm/content/avatar/Avatar.css +13 -13
- package/esm/content/avatar/Avatar.sty.js +4 -4
- package/esm/content/avatar/Avatar.sty.js.map +1 -1
- package/esm/content/avatar-group/AvatarGroup.css +3 -3
- package/esm/content/avatar-group/AvatarGroup.sty.js +2 -2
- package/esm/content/avatar-group/AvatarGroup.sty.js.map +1 -1
- package/esm/content/chip/BaseChip.css +48 -36
- package/esm/content/chip/BaseChip.sty.js +5 -5
- package/esm/content/chip/BaseChip.sty.js.map +1 -1
- package/esm/content/chip/ChipContent.css +11 -11
- package/esm/content/chip/ChipContent.sty.js +2 -2
- package/esm/content/chip/ChipContent.sty.js.map +1 -1
- package/esm/content/chip/ChipDeleteButton.css +26 -3
- package/esm/content/chip/ChipDeleteButton.js +4 -1
- package/esm/content/chip/ChipDeleteButton.js.map +2 -2
- package/esm/content/chip/ChipDeleteButton.sty.js +8 -2
- package/esm/content/chip/ChipDeleteButton.sty.js.map +2 -2
- package/esm/content/chip/ChipKey.css +6 -6
- package/esm/content/chip/ChipKey.sty.js +1 -1
- package/esm/content/chip/ChipKey.sty.js.map +1 -1
- package/esm/content/chip/GroupedChip.css +3 -3
- package/esm/content/chip/GroupedChip.sty.js +3 -3
- package/esm/content/chip/GroupedChip.sty.js.map +1 -1
- package/esm/content/chip-group/ChipGroup.css +4 -4
- package/esm/content/chip-group/ChipGroup.js +9 -1
- package/esm/content/chip-group/ChipGroup.js.map +2 -2
- package/esm/content/chip-group/ChipGroup.sty.js +1 -1
- package/esm/content/chip-group/ChipGroup.sty.js.map +1 -1
- package/esm/content/chip-group/Control.css +6 -6
- package/esm/content/chip-group/Control.js +13 -3
- package/esm/content/chip-group/Control.js.map +2 -2
- package/esm/content/chip-group/Control.sty.js +3 -3
- package/esm/content/chip-group/Control.sty.js.map +2 -2
- package/esm/content/code-snippet/CodeHighlight.css +27 -24
- package/esm/content/code-snippet/CodeHighlight.sty.js +6 -5
- package/esm/content/code-snippet/CodeHighlight.sty.js.map +2 -2
- package/esm/content/code-snippet/CodeSnippet.css +7 -4
- package/esm/content/code-snippet/CodeSnippet.sty.js +3 -2
- package/esm/content/code-snippet/CodeSnippet.sty.js.map +2 -2
- package/esm/content/code-snippet/HighlightExtended.js +22 -0
- package/esm/content/code-snippet/HighlightExtended.js.map +2 -2
- package/esm/content/code-snippet/prism-dql-language.js +21 -6
- package/esm/content/code-snippet/prism-dql-language.js.map +2 -2
- package/esm/content/empty-state/EmptyState.css +28 -28
- package/esm/content/empty-state/EmptyState.sty.js +7 -7
- package/esm/content/empty-state/EmptyState.sty.js.map +1 -1
- package/esm/content/empty-state/assets/VisualPresetVariants.js +1 -1
- package/esm/content/empty-state/assets/VisualPresetVariants.js.map +1 -1
- package/esm/content/empty-state/empty-state-utils.js +12 -4
- package/esm/content/empty-state/empty-state-utils.js.map +2 -2
- package/esm/content/empty-state/slot-components/Footer.css +1 -1
- package/esm/content/empty-state/slot-components/Footer.sty.js +1 -1
- package/esm/content/empty-state/slot-components/Footer.sty.js.map +1 -1
- package/esm/content/empty-state/slot-components/Visual.css +3 -3
- package/esm/content/empty-state/slot-components/Visual.sty.js +1 -1
- package/esm/content/empty-state/slot-components/Visual.sty.js.map +1 -1
- package/esm/content/empty-state/slot-components/VisualPreset.js +2 -6
- package/esm/content/empty-state/slot-components/VisualPreset.js.map +2 -2
- package/esm/content/expandable-text/ExpandableText.css +7 -7
- package/esm/content/expandable-text/ExpandableText.sty.js +2 -2
- package/esm/content/expandable-text/ExpandableText.sty.js.map +1 -1
- package/esm/content/feature-highlight/FeatureHighlight.css +12 -12
- package/esm/content/feature-highlight/FeatureHighlight.sty.js +3 -3
- package/esm/content/feature-highlight/FeatureHighlight.sty.js.map +1 -1
- package/esm/content/health-indicator/styles.css +23 -23
- package/esm/content/health-indicator/styles.sty.js +1 -1
- package/esm/content/health-indicator/styles.sty.js.map +1 -1
- package/esm/content/information-overlay/InformationOverlay.css +25 -25
- package/esm/content/information-overlay/InformationOverlay.sty.js +5 -5
- package/esm/content/information-overlay/InformationOverlay.sty.js.map +1 -1
- package/esm/content/keyboard-shortcut/KeyboardShortcut.css +14 -14
- package/esm/content/keyboard-shortcut/KeyboardShortcut.sty.js +2 -2
- package/esm/content/keyboard-shortcut/KeyboardShortcut.sty.js.map +1 -1
- package/esm/content/markdown/Markdown.css +3 -3
- package/esm/content/markdown/Markdown.sty.js +1 -1
- package/esm/content/markdown/Markdown.sty.js.map +1 -1
- package/esm/content/markdown/transformers/typography-mapping.css +9 -9
- package/esm/content/markdown/transformers/typography-mapping.sty.js +6 -6
- package/esm/content/markdown/transformers/typography-mapping.sty.js.map +1 -1
- package/esm/content/microguide/Microguide.css +11 -11
- package/esm/content/microguide/Microguide.sty.js +7 -7
- package/esm/content/microguide/Microguide.sty.js.map +1 -1
- package/esm/content/progress/ProgressBar.css +71 -71
- package/esm/content/progress/ProgressBar.sty.js +5 -5
- package/esm/content/progress/ProgressBar.sty.js.map +1 -1
- package/esm/content/progress/ProgressBarIcon.css +2 -2
- package/esm/content/progress/ProgressBarIcon.sty.js +1 -1
- package/esm/content/progress/ProgressBarIcon.sty.js.map +1 -1
- package/esm/content/progress/ProgressBarLabel.css +3 -3
- package/esm/content/progress/ProgressBarLabel.sty.js +1 -1
- package/esm/content/progress/ProgressBarLabel.sty.js.map +1 -1
- package/esm/content/progress/ProgressBarValue.css +5 -5
- package/esm/content/progress/ProgressBarValue.sty.js +1 -1
- package/esm/content/progress/ProgressBarValue.sty.js.map +1 -1
- package/esm/content/progress/ProgressCircle.css +40 -40
- package/esm/content/progress/ProgressCircle.sty.js +5 -5
- package/esm/content/progress/ProgressCircle.sty.js.map +1 -1
- package/esm/content/shared-components/Visual.css +3 -3
- package/esm/content/shared-components/Visual.sty.js +1 -1
- package/esm/content/shared-components/Visual.sty.js.map +1 -1
- package/esm/content/skeleton/Skeleton.css +7 -7
- package/esm/content/skeleton/Skeleton.sty.js +5 -5
- package/esm/content/skeleton/Skeleton.sty.js.map +1 -1
- package/esm/content/terminology-overlay/TerminologyOverlay.css +4 -4
- package/esm/content/terminology-overlay/TerminologyOverlay.sty.js +1 -1
- package/esm/content/terminology-overlay/TerminologyOverlay.sty.js.map +1 -1
- package/esm/core/components/app-root/AppRoot.css +74 -66
- package/esm/core/components/app-root/AppRoot.js +5 -2
- package/esm/core/components/app-root/AppRoot.js.map +2 -2
- package/esm/core/components/app-root/AppRoot.sty.js +2 -2
- package/esm/core/components/app-root/AppRoot.sty.js.map +2 -2
- package/esm/core/components/app-root/visual-refresh-overrides.js +64 -26
- package/esm/core/components/app-root/visual-refresh-overrides.js.map +2 -2
- package/esm/core/components/focus-scope/FocusScope.js +4 -2
- package/esm/core/components/focus-scope/FocusScope.js.map +2 -2
- package/esm/core/components/visually-hidden/VisuallyHidden.css +1 -1
- package/esm/core/components/visually-hidden/VisuallyHidden.js +3 -1
- package/esm/core/components/visually-hidden/VisuallyHidden.js.map +2 -2
- package/esm/core/components/visually-hidden/VisuallyHidden.sty.js +1 -1
- package/esm/core/components/visually-hidden/VisuallyHidden.sty.js.map +1 -1
- package/esm/core/contexts/FocusContext.js +0 -1
- package/esm/core/contexts/FocusContext.js.map +2 -2
- package/esm/core/dql/dql-common.js +98 -0
- package/esm/core/dql/dql-common.js.map +7 -0
- package/esm/core/hooks/useModality.js +13 -0
- package/esm/core/hooks/useModality.js.map +7 -0
- package/esm/core/index.js +2 -2
- package/esm/core/index.js.map +2 -2
- package/esm/core/providers/FocusProvider.js +1 -89
- package/esm/core/providers/FocusProvider.js.map +2 -2
- package/esm/core/sdk/sdk-logger.js +2 -2
- package/esm/core/styles/defaultChartValues.css +1 -1
- package/esm/core/styles/defaultChartValues.sty.js +1 -1
- package/esm/core/styles/defaultChartValues.sty.js.map +1 -1
- package/esm/core/styles/focusRing.css +66 -66
- package/esm/core/styles/focusRing.sty.js +4 -4
- package/esm/core/styles/focusRing.sty.js.map +2 -2
- package/esm/core/styles/focusRingStatic.css +35 -33
- package/esm/core/styles/focusRingStatic.sty.js +1 -1
- package/esm/core/styles/focusRingStatic.sty.js.map +2 -2
- package/esm/core/styles/getVirtualFocusStyles.js +11 -0
- package/esm/core/styles/getVirtualFocusStyles.js.map +7 -0
- package/esm/core/styles/useFocusRing.js +7 -7
- package/esm/core/styles/useFocusRing.js.map +2 -2
- package/esm/core/styles/virtualFocus.css +12 -0
- package/esm/core/styles/virtualFocus.sty.js +6 -0
- package/esm/core/styles/virtualFocus.sty.js.map +7 -0
- package/esm/core/utils/colorUtils.css +60 -60
- package/esm/core/utils/colorUtils.sty.js +2 -2
- package/esm/core/utils/colorUtils.sty.js.map +1 -1
- package/esm/core/utils/is-visual-refresh-enabled.js +10 -0
- package/esm/core/utils/is-visual-refresh-enabled.js.map +7 -0
- package/esm/core/utils/modality.js +90 -0
- package/esm/core/utils/modality.js.map +7 -0
- package/esm/editors/base-code-editor/BaseCodeEditor.css +145 -127
- package/esm/editors/base-code-editor/BaseCodeEditor.sty.js +3 -2
- package/esm/editors/base-code-editor/BaseCodeEditor.sty.js.map +2 -2
- package/esm/editors/base-code-editor/configuration/getDefaultConfigurations.js +4 -3
- package/esm/editors/base-code-editor/configuration/getDefaultConfigurations.js.map +2 -2
- package/esm/editors/dql-editor/dql/SuggestionPart.css +1 -1
- package/esm/editors/dql-editor/dql/SuggestionPart.sty.js +1 -1
- package/esm/editors/dql-editor/dql/SuggestionPart.sty.js.map +1 -1
- package/esm/editors/dql-editor/dql/dql.js +18 -47
- package/esm/editors/dql-editor/dql/dql.js.map +2 -2
- package/esm/filters/filter-field/FilterField.css +123 -114
- package/esm/filters/filter-field/FilterField.sty.js +29 -28
- package/esm/filters/filter-field/FilterField.sty.js.map +2 -2
- package/esm/filters/filter-field/components/FilterFieldSuffixButtons.css +3 -3
- package/esm/filters/filter-field/components/FilterFieldSuffixButtons.sty.js +3 -3
- package/esm/filters/filter-field/components/FilterFieldSuffixButtons.sty.js.map +1 -1
- package/esm/filters/filter-field/components/FilterStatement.css +13 -13
- package/esm/filters/filter-field/components/FilterStatement.js +1 -1
- package/esm/filters/filter-field/components/FilterStatement.js.map +2 -2
- package/esm/filters/filter-field/components/FilterStatement.sty.js +8 -6
- package/esm/filters/filter-field/components/FilterStatement.sty.js.map +2 -2
- package/esm/filters/filter-field/hooks/useShowMore.js +2 -10
- package/esm/filters/filter-field/hooks/useShowMore.js.map +2 -2
- package/esm/filters/filter-field/suggestions/RecentPinnedSuggestionItem.css +12 -14
- package/esm/filters/filter-field/suggestions/RecentPinnedSuggestionItem.sty.js +4 -6
- package/esm/filters/filter-field/suggestions/RecentPinnedSuggestionItem.sty.js.map +2 -2
- package/esm/filters/filter-field/suggestions/Suggestion.css +27 -26
- package/esm/filters/filter-field/suggestions/Suggestion.js +2 -3
- package/esm/filters/filter-field/suggestions/Suggestion.js.map +2 -2
- package/esm/filters/filter-field/suggestions/Suggestion.sty.js +17 -15
- package/esm/filters/filter-field/suggestions/Suggestion.sty.js.map +2 -2
- package/esm/filters/filter-field/suggestions/SuggestionDetails.css +2 -2
- package/esm/filters/filter-field/suggestions/SuggestionDetails.sty.js +2 -2
- package/esm/filters/filter-field/suggestions/SuggestionDetails.sty.js.map +1 -1
- package/esm/filters/filter-field/suggestions/SuggestionGroup.css +6 -6
- package/esm/filters/filter-field/suggestions/SuggestionGroup.sty.js +5 -3
- package/esm/filters/filter-field/suggestions/SuggestionGroup.sty.js.map +2 -2
- package/esm/filters/filter-field/suggestions/SuggestionGroupLabel.css +1 -1
- package/esm/filters/filter-field/suggestions/SuggestionGroupLabel.sty.js +1 -1
- package/esm/filters/filter-field/suggestions/SuggestionGroupLabel.sty.js.map +1 -1
- package/esm/filters/filter-field/suggestions/SuggestionPin.js +7 -4
- package/esm/filters/filter-field/suggestions/SuggestionPin.js.map +2 -2
- package/esm/filters/filter-field/suggestions/SuggestionTips.css +7 -7
- package/esm/filters/filter-field/suggestions/SuggestionTips.sty.js +5 -5
- package/esm/filters/filter-field/suggestions/SuggestionTips.sty.js.map +1 -1
- package/esm/filters/filter-field/suggestions/SuggestionsOverlay.css +7 -7
- package/esm/filters/filter-field/suggestions/SuggestionsOverlay.sty.js +5 -5
- package/esm/filters/filter-field/suggestions/SuggestionsOverlay.sty.js.map +1 -1
- package/esm/filters/filter-field/utils/suggestions-utils/key-suggestions.js +3 -1
- package/esm/filters/filter-field/utils/suggestions-utils/key-suggestions.js.map +2 -2
- package/esm/filters/segment-selector/SegmentSelector.css +4 -4
- package/esm/filters/segment-selector/SegmentSelector.sty.js +4 -4
- package/esm/filters/segment-selector/SegmentSelector.sty.js.map +1 -1
- package/esm/filters/segment-selector/parts/EmptySegments.css +1 -1
- package/esm/filters/segment-selector/parts/EmptySegments.sty.js +1 -1
- package/esm/filters/segment-selector/parts/EmptySegments.sty.js.map +1 -1
- package/esm/filters/segment-selector/parts/Overlay.css +8 -8
- package/esm/filters/segment-selector/parts/Overlay.sty.js +8 -8
- package/esm/filters/segment-selector/parts/Overlay.sty.js.map +1 -1
- package/esm/filters/segment-selector/parts/ShowMorePanel/ShowMorePanel.css +4 -4
- package/esm/filters/segment-selector/parts/ShowMorePanel/ShowMorePanel.sty.js +4 -4
- package/esm/filters/segment-selector/parts/ShowMorePanel/ShowMorePanel.sty.js.map +1 -1
- package/esm/filters/segment-selector/parts/segmentsPresets/SegmentsPresets.css +38 -26
- package/esm/filters/segment-selector/parts/segmentsPresets/SegmentsPresets.sty.js +11 -10
- package/esm/filters/segment-selector/parts/segmentsPresets/SegmentsPresets.sty.js.map +2 -2
- package/esm/filters/segment-selector/parts/selectionBar/SegmentSelect.css +55 -19
- package/esm/filters/segment-selector/parts/selectionBar/SegmentSelect.js +3 -3
- package/esm/filters/segment-selector/parts/selectionBar/SegmentSelect.js.map +2 -2
- package/esm/filters/segment-selector/parts/selectionBar/SegmentSelect.sty.js +11 -6
- package/esm/filters/segment-selector/parts/selectionBar/SegmentSelect.sty.js.map +2 -2
- package/esm/filters/segment-selector/parts/selectionBar/SegmentSelectorTrigger.css +1 -1
- package/esm/filters/segment-selector/parts/selectionBar/SegmentSelectorTrigger.sty.js +1 -1
- package/esm/filters/segment-selector/parts/selectionBar/SegmentSelectorTrigger.sty.js.map +1 -1
- package/esm/filters/segment-selector/parts/selectionBar/ValueSelect.js +3 -3
- package/esm/filters/segment-selector/parts/selectionBar/ValueSelect.js.map +2 -2
- package/esm/filters/timeframe-selector/TimeframeSelector.css +1 -1
- package/esm/filters/timeframe-selector/TimeframeSelector.sty.js +1 -1
- package/esm/filters/timeframe-selector/TimeframeSelector.sty.js.map +1 -1
- package/esm/filters/timeframe-selector/TimeframeSelectorRoot.js +11 -9
- package/esm/filters/timeframe-selector/TimeframeSelectorRoot.js.map +2 -2
- package/esm/filters/timeframe-selector/components/custom-timeframe-selector/CustomTimeframeSelector.css +4 -4
- package/esm/filters/timeframe-selector/components/custom-timeframe-selector/CustomTimeframeSelector.js +12 -1
- package/esm/filters/timeframe-selector/components/custom-timeframe-selector/CustomTimeframeSelector.js.map +2 -2
- package/esm/filters/timeframe-selector/components/custom-timeframe-selector/CustomTimeframeSelector.sty.js +3 -3
- package/esm/filters/timeframe-selector/components/custom-timeframe-selector/CustomTimeframeSelector.sty.js.map +1 -1
- package/esm/filters/timeframe-selector/components/overlay/TimeframeSelectorOverlay.css +4 -4
- package/esm/filters/timeframe-selector/components/overlay/TimeframeSelectorOverlay.sty.js +4 -4
- package/esm/filters/timeframe-selector/components/overlay/TimeframeSelectorOverlay.sty.js.map +1 -1
- package/esm/filters/timeframe-selector/components/presets/PresetItem.js +1 -1
- package/esm/filters/timeframe-selector/components/presets/PresetItem.js.map +2 -2
- package/esm/filters/timeframe-selector/components/presets/Presets.css +27 -27
- package/esm/filters/timeframe-selector/components/presets/Presets.sty.js +11 -11
- package/esm/filters/timeframe-selector/components/presets/Presets.sty.js.map +1 -1
- package/esm/filters/timeframe-selector/components/trigger/Trigger.css +14 -4
- package/esm/filters/timeframe-selector/components/trigger/Trigger.js +10 -3
- package/esm/filters/timeframe-selector/components/trigger/Trigger.js.map +2 -2
- package/esm/filters/timeframe-selector/components/trigger/Trigger.sty.js +7 -3
- package/esm/filters/timeframe-selector/components/trigger/Trigger.sty.js.map +2 -2
- package/esm/filters/timeframe-selector/contexts/TimeframeSelectorContext.js +2 -1
- package/esm/filters/timeframe-selector/contexts/TimeframeSelectorContext.js.map +2 -2
- package/esm/forms/_base-input/BaseInput.css +148 -62
- package/esm/forms/_base-input/BaseInput.js +1 -3
- package/esm/forms/_base-input/BaseInput.js.map +2 -2
- package/esm/forms/_base-input/BaseInput.sty.js +13 -11
- package/esm/forms/_base-input/BaseInput.sty.js.map +2 -2
- package/esm/forms/_base-input/BaseInputContent.css +7 -7
- package/esm/forms/_base-input/BaseInputContent.sty.js +3 -1
- package/esm/forms/_base-input/BaseInputContent.sty.js.map +2 -2
- package/esm/forms/calendar/Calendar.css +47 -47
- package/esm/forms/calendar/Calendar.sty.js +22 -22
- package/esm/forms/calendar/Calendar.sty.js.map +2 -2
- package/esm/forms/calendar/CalendarRoot.js +4 -8
- package/esm/forms/calendar/CalendarRoot.js.map +2 -2
- package/esm/forms/calendar/components/CalendarItem.css +7 -7
- package/esm/forms/calendar/components/CalendarItem.sty.js +4 -4
- package/esm/forms/calendar/components/CalendarItem.sty.js.map +1 -1
- package/esm/forms/calendar/components/CalendarOutlineIcon.css +8 -8
- package/esm/forms/calendar/components/CalendarOutlineIcon.sty.js +5 -5
- package/esm/forms/calendar/components/CalendarOutlineIcon.sty.js.map +1 -1
- package/esm/forms/calendar/components/Day.js +4 -8
- package/esm/forms/calendar/components/Day.js.map +2 -2
- package/esm/forms/calendar/components/Days.js +2 -2
- package/esm/forms/calendar/components/Days.js.map +2 -2
- package/esm/forms/calendar/components/Month.js +2 -2
- package/esm/forms/calendar/components/Month.js.map +2 -2
- package/esm/forms/calendar/components/Weekdays.js +16 -30
- package/esm/forms/calendar/components/Weekdays.js.map +2 -2
- package/esm/forms/calendar/components/Year.js +2 -2
- package/esm/forms/calendar/components/Year.js.map +2 -2
- package/esm/forms/calendar/variables.sty.js +2 -2
- package/esm/forms/calendar/variables.sty.js.map +1 -1
- package/esm/forms/calendar/views/SelectMonthView.js +2 -2
- package/esm/forms/calendar/views/SelectMonthView.js.map +2 -2
- package/esm/forms/calendar/views/SelectYearView.js +2 -2
- package/esm/forms/calendar/views/SelectYearView.js.map +2 -2
- package/esm/forms/checkbox/Checkbox.css +20 -20
- package/esm/forms/checkbox/Checkbox.sty.js +3 -3
- package/esm/forms/checkbox/Checkbox.sty.js.map +1 -1
- package/esm/forms/date-time-picker/DateSelector.js +2 -0
- package/esm/forms/date-time-picker/DateSelector.js.map +2 -2
- package/esm/forms/date-time-picker/DateTimePicker.css +87 -59
- package/esm/forms/date-time-picker/DateTimePicker.sty.js +7 -6
- package/esm/forms/date-time-picker/DateTimePicker.sty.js.map +2 -2
- package/esm/forms/date-time-range-picker/DateRangeSelector.css +1 -6
- package/esm/forms/date-time-range-picker/DateRangeSelector.js +5 -5
- package/esm/forms/date-time-range-picker/DateRangeSelector.js.map +2 -2
- package/esm/forms/date-time-range-picker/DateRangeSelector.sty.js +1 -3
- package/esm/forms/date-time-range-picker/DateRangeSelector.sty.js.map +2 -2
- package/esm/forms/date-time-range-picker/DateTimeInput.css +11 -11
- package/esm/forms/date-time-range-picker/DateTimeInput.sty.js +3 -3
- package/esm/forms/date-time-range-picker/DateTimeInput.sty.js.map +1 -1
- package/esm/forms/date-time-range-picker/DateTimeRangePicker.css +30 -20
- package/esm/forms/date-time-range-picker/DateTimeRangePicker.js +14 -1
- package/esm/forms/date-time-range-picker/DateTimeRangePicker.js.map +2 -2
- package/esm/forms/date-time-range-picker/DateTimeRangePicker.sty.js +4 -4
- package/esm/forms/date-time-range-picker/DateTimeRangePicker.sty.js.map +1 -1
- package/esm/forms/date-time-range-picker/DateTimeRangePickerRoot.js +3 -7
- package/esm/forms/date-time-range-picker/DateTimeRangePickerRoot.js.map +2 -2
- package/esm/forms/date-time-range-picker/selection-copy-helpers.js +12 -9
- package/esm/forms/date-time-range-picker/selection-copy-helpers.js.map +2 -2
- package/esm/forms/date-time-range-picker/selection-helpers.js +506 -64
- package/esm/forms/date-time-range-picker/selection-helpers.js.map +2 -2
- package/esm/forms/date-time-range-picker/useSelectionInteractionHandlers.js +38 -5
- package/esm/forms/date-time-range-picker/useSelectionInteractionHandlers.js.map +2 -2
- package/esm/forms/forms-core/components/field-set/FieldSet.css +2 -2
- package/esm/forms/forms-core/components/field-set/FieldSet.sty.js +2 -2
- package/esm/forms/forms-core/components/field-set/FieldSet.sty.js.map +1 -1
- package/esm/forms/forms-core/components/form-field/FormField.sty.js +1 -1
- package/esm/forms/forms-core/components/form-field/FormField.sty.js.map +1 -1
- package/esm/forms/forms-core/components/form-field-messages/FormFieldMessageItem.css +5 -5
- package/esm/forms/forms-core/components/form-field-messages/FormFieldMessageItem.sty.js +2 -2
- package/esm/forms/forms-core/components/form-field-messages/FormFieldMessageItem.sty.js.map +1 -1
- package/esm/forms/forms-core/components/form-field-messages/FormFieldMessages.sty.js +1 -1
- package/esm/forms/forms-core/components/form-field-messages/FormFieldMessages.sty.js.map +1 -1
- package/esm/forms/forms-core/components/label/Label.css +5 -5
- package/esm/forms/forms-core/components/label/Label.sty.js +2 -2
- package/esm/forms/forms-core/components/label/Label.sty.js.map +1 -1
- package/esm/forms/forms-core/hooks/useFormFieldValidation.js +10 -4
- package/esm/forms/forms-core/hooks/useFormFieldValidation.js.map +2 -2
- package/esm/forms/hooks/useAutofillEvent.css +8 -8
- package/esm/forms/hooks/useAutofillEvent.sty.js +4 -4
- package/esm/forms/hooks/useAutofillEvent.sty.js.map +1 -1
- package/esm/forms/password-input/PasswordInput.js +7 -1
- package/esm/forms/password-input/PasswordInput.js.map +2 -2
- package/esm/forms/radio/styles.css +18 -18
- package/esm/forms/radio/styles.sty.js +8 -8
- package/esm/forms/radio/styles.sty.js.map +1 -1
- package/esm/forms/search-input/SearchInput.css +1 -1
- package/esm/forms/search-input/SearchInput.sty.js +1 -1
- package/esm/forms/search-input/SearchInput.sty.js.map +1 -1
- package/esm/forms/select/components/Control.js +3 -1
- package/esm/forms/select/components/Control.js.map +2 -2
- package/esm/forms/select/components/Menu.js +3 -4
- package/esm/forms/select/components/Menu.js.map +2 -2
- package/esm/forms/select/components/Option.js +7 -1
- package/esm/forms/select/components/Option.js.map +2 -2
- package/esm/forms/select/styles/Select.css +53 -53
- package/esm/forms/select/styles/Select.sty.js +27 -23
- package/esm/forms/select/styles/Select.sty.js.map +2 -2
- package/esm/forms/spin-buttons/SpinButton.css +8 -8
- package/esm/forms/spin-buttons/SpinButton.sty.js +2 -2
- package/esm/forms/spin-buttons/SpinButton.sty.js.map +1 -1
- package/esm/forms/spin-buttons/spin-button-group/hooks/useNavigateSpinButton.js +27 -14
- package/esm/forms/spin-buttons/spin-button-group/hooks/useNavigateSpinButton.js.map +2 -2
- package/esm/forms/spin-buttons/spin-button-group/hooks/useValueOverflow.js +4 -0
- package/esm/forms/spin-buttons/spin-button-group/hooks/useValueOverflow.js.map +2 -2
- package/esm/forms/spin-buttons/text-spin-button/hooks/useValueNavigation.js +14 -20
- package/esm/forms/spin-buttons/text-spin-button/hooks/useValueNavigation.js.map +2 -2
- package/esm/forms/switch/Switch.css +36 -36
- package/esm/forms/switch/Switch.sty.js +5 -5
- package/esm/forms/switch/Switch.sty.js.map +1 -1
- package/esm/forms/text-area/TextArea.css +79 -38
- package/esm/forms/text-area/TextArea.sty.js +4 -3
- package/esm/forms/text-area/TextArea.sty.js.map +2 -2
- package/esm/forms/toggle-button-group/Item.js +0 -6
- package/esm/forms/toggle-button-group/Item.js.map +2 -2
- package/esm/forms/toggle-button-group/ToggleButtonGroup.js +5 -10
- package/esm/forms/toggle-button-group/ToggleButtonGroup.js.map +2 -2
- package/esm/forms/toggle-button-group/styles.css +111 -34
- package/esm/forms/toggle-button-group/styles.sty.js +15 -15
- package/esm/forms/toggle-button-group/styles.sty.js.map +1 -1
- package/esm/layouts/app-header/AppHeader.css +1 -1
- package/esm/layouts/app-header/AppHeader.sty.js +1 -1
- package/esm/layouts/app-header/AppHeader.sty.js.map +1 -1
- package/esm/layouts/app-header/Navigation.css +9 -9
- package/esm/layouts/app-header/Navigation.sty.js +5 -5
- package/esm/layouts/app-header/Navigation.sty.js.map +1 -1
- package/esm/layouts/app-header/action-group/ActionButton.css +17 -17
- package/esm/layouts/app-header/action-group/ActionButton.sty.js +3 -3
- package/esm/layouts/app-header/action-group/ActionButton.sty.js.map +1 -1
- package/esm/layouts/app-header/action-group/ActionGroup.css +1 -1
- package/esm/layouts/app-header/action-group/ActionGroup.sty.js +1 -1
- package/esm/layouts/app-header/action-group/ActionGroup.sty.js.map +1 -1
- package/esm/layouts/app-header/action-group/NavItem.css +4 -4
- package/esm/layouts/app-header/action-group/NavItem.sty.js +3 -3
- package/esm/layouts/app-header/action-group/NavItem.sty.js.map +1 -1
- package/esm/layouts/app-header/app-icon/AppIcon.css +4 -4
- package/esm/layouts/app-header/app-icon/AppIcon.sty.js +1 -1
- package/esm/layouts/app-header/app-icon/AppIcon.sty.js.map +1 -1
- package/esm/layouts/container/Container.css +7 -4
- package/esm/layouts/container/Container.sty.js +2 -1
- package/esm/layouts/container/Container.sty.js.map +2 -2
- package/esm/layouts/divider/Divider.css +6 -6
- package/esm/layouts/divider/Divider.sty.js +1 -1
- package/esm/layouts/divider/Divider.sty.js.map +1 -1
- package/esm/layouts/index.js +3 -15
- package/esm/layouts/index.js.map +2 -2
- package/esm/layouts/input-group/InputGroup.css +27 -26
- package/esm/layouts/input-group/InputGroup.js +4 -1
- package/esm/layouts/input-group/InputGroup.js.map +2 -2
- package/esm/layouts/input-group/InputGroup.sty.js +2 -1
- package/esm/layouts/input-group/InputGroup.sty.js.map +2 -2
- package/esm/layouts/page/DetailView.css +5 -2
- package/esm/layouts/page/DetailView.sty.js +3 -2
- package/esm/layouts/page/DetailView.sty.js.map +2 -2
- package/esm/layouts/page/Header.css +4 -1
- package/esm/layouts/page/Header.sty.js +2 -1
- package/esm/layouts/page/Header.sty.js.map +2 -2
- package/esm/layouts/page/Main.css +10 -4
- package/esm/layouts/page/Main.sty.js +5 -4
- package/esm/layouts/page/Main.sty.js.map +2 -2
- package/esm/layouts/page/Page.css +4 -1
- package/esm/layouts/page/Page.sty.js +2 -1
- package/esm/layouts/page/Page.sty.js.map +2 -2
- package/esm/layouts/page/Panel.js +2 -2
- package/esm/layouts/page/Panel.js.map +2 -2
- package/esm/layouts/page/Sidebar.css +22 -22
- package/esm/layouts/page/Sidebar.sty.js +9 -8
- package/esm/layouts/page/Sidebar.sty.js.map +2 -2
- package/esm/layouts/page/panel.css +39 -14
- package/esm/layouts/page/panel.sty.js +11 -10
- package/esm/layouts/page/panel.sty.js.map +2 -2
- package/esm/layouts/page-layout/PageLayout.css +18 -6
- package/esm/layouts/page-layout/PageLayout.js.map +2 -2
- package/esm/layouts/page-layout/PageLayout.sty.js +7 -6
- package/esm/layouts/page-layout/PageLayout.sty.js.map +2 -2
- package/esm/layouts/page-layout/details-layout/DetailsControlBar.css +3 -3
- package/esm/layouts/page-layout/details-layout/DetailsControlBar.js +1 -3
- package/esm/layouts/page-layout/details-layout/DetailsControlBar.js.map +2 -2
- package/esm/layouts/page-layout/details-layout/DetailsControlBar.sty.js +3 -3
- package/esm/layouts/page-layout/details-layout/DetailsControlBar.sty.js.map +1 -1
- package/esm/layouts/page-layout/details-layout/DetailsLayout.css +8 -5
- package/esm/layouts/page-layout/details-layout/DetailsLayout.sty.js +6 -5
- package/esm/layouts/page-layout/details-layout/DetailsLayout.sty.js.map +2 -2
- package/esm/layouts/page-layout/details-layout/DetailsLayoutContext.js.map +1 -1
- package/esm/layouts/page-layout/details-layout/Overlay.css +48 -8
- package/esm/layouts/page-layout/details-layout/Overlay.js +4 -5
- package/esm/layouts/page-layout/details-layout/Overlay.js.map +2 -2
- package/esm/layouts/page-layout/details-layout/Overlay.sty.js +7 -6
- package/esm/layouts/page-layout/details-layout/Overlay.sty.js.map +2 -2
- package/esm/layouts/page-layout/shared/portal-slots.js +0 -1
- package/esm/layouts/page-layout/shared/portal-slots.js.map +2 -2
- package/esm/layouts/page-layout/sidebar-layout/SidebarLayout.css +75 -25
- package/esm/layouts/page-layout/sidebar-layout/SidebarLayout.sty.js +16 -15
- package/esm/layouts/page-layout/sidebar-layout/SidebarLayout.sty.js.map +2 -2
- package/esm/layouts/shared/resize-handle-styles.js +50 -0
- package/esm/layouts/shared/resize-handle-styles.js.map +7 -0
- package/esm/layouts/shared/visual-refresh-overrides.js +46 -0
- package/esm/layouts/shared/visual-refresh-overrides.js.map +7 -0
- package/esm/layouts/split-layout/SplitLayout.css +38 -13
- package/esm/layouts/split-layout/SplitLayout.js +1 -1
- package/esm/layouts/split-layout/SplitLayout.js.map +2 -2
- package/esm/layouts/split-layout/SplitLayout.sty.js +10 -9
- package/esm/layouts/split-layout/SplitLayout.sty.js.map +2 -2
- package/esm/layouts/split-layout/slots.js.map +2 -2
- package/esm/layouts/surface/Surface.css +39 -39
- package/esm/layouts/surface/Surface.sty.js +2 -2
- package/esm/layouts/surface/Surface.sty.js.map +1 -1
- package/esm/layouts/surface/variables.sty.js +1 -1
- package/esm/layouts/surface/variables.sty.js.map +1 -1
- package/esm/layouts/title-bar/TitleBar.css +5 -5
- package/esm/layouts/title-bar/TitleBar.sty.js +4 -4
- package/esm/layouts/title-bar/TitleBar.sty.js.map +1 -1
- package/esm/navigation/breadcrumbs/Breadcrumbs.css +9 -9
- package/esm/navigation/breadcrumbs/Breadcrumbs.sty.js +5 -5
- package/esm/navigation/breadcrumbs/Breadcrumbs.sty.js.map +1 -1
- package/esm/navigation/menu/Menu.css +15 -15
- package/esm/navigation/menu/Menu.js +9 -4
- package/esm/navigation/menu/Menu.js.map +2 -2
- package/esm/navigation/menu/Menu.sty.js +8 -8
- package/esm/navigation/menu/Menu.sty.js.map +1 -1
- package/esm/navigation/menu/Sub.js +9 -4
- package/esm/navigation/menu/Sub.js.map +2 -2
- package/esm/navigation/tabs/RenderTab.css +14 -14
- package/esm/navigation/tabs/RenderTab.sty.js +3 -3
- package/esm/navigation/tabs/RenderTab.sty.js.map +1 -1
- package/esm/navigation/tabs/TabPanel.css +3 -3
- package/esm/navigation/tabs/TabPanel.sty.js +2 -2
- package/esm/navigation/tabs/TabPanel.sty.js.map +1 -1
- package/esm/navigation/tabs/Tabs.css +9 -9
- package/esm/navigation/tabs/Tabs.sty.js +5 -5
- package/esm/navigation/tabs/Tabs.sty.js.map +1 -1
- package/esm/notifications/notification-settings/NotificationSettings.css +1 -1
- package/esm/notifications/notification-settings/NotificationSettings.sty.js +1 -1
- package/esm/notifications/notification-settings/NotificationSettings.sty.js.map +1 -1
- package/esm/notifications/toast/Toast.css +5 -5
- package/esm/notifications/toast/Toast.sty.js +4 -4
- package/esm/notifications/toast/Toast.sty.js.map +1 -1
- package/esm/notifications/toast/ToastContainer.css +17 -17
- package/esm/notifications/toast/ToastContainer.sty.js +1 -1
- package/esm/notifications/toast/ToastContainer.sty.js.map +1 -1
- package/esm/overlays/drawer/Drawer.css +9 -9
- package/esm/overlays/drawer/Drawer.sty.js +5 -5
- package/esm/overlays/drawer/Drawer.sty.js.map +1 -1
- package/esm/overlays/modal/Modal.css +7 -7
- package/esm/overlays/modal/Modal.sty.js +4 -4
- package/esm/overlays/modal/Modal.sty.js.map +1 -1
- package/esm/overlays/overlay/Overlay.css +1 -1
- package/esm/overlays/overlay/Overlay.sty.js +1 -1
- package/esm/overlays/overlay/Overlay.sty.js.map +1 -1
- package/esm/overlays/sheet/Sheet.css +6 -6
- package/esm/overlays/sheet/Sheet.sty.js +5 -5
- package/esm/overlays/sheet/Sheet.sty.js.map +1 -1
- package/esm/overlays/tooltip/Tooltip.js +2 -2
- package/esm/overlays/tooltip/Tooltip.js.map +2 -2
- package/esm/overlays/tooltip/tooltip.css +18 -18
- package/esm/overlays/tooltip/tooltip.sty.js +3 -3
- package/esm/overlays/tooltip/tooltip.sty.js.map +1 -1
- package/esm/styles/colorUtils.css +60 -60
- package/esm/styles/colorUtils.sty.js +2 -2
- package/esm/styles/colorUtils.sty.js.map +1 -1
- package/esm/styles/container.css +47 -47
- package/esm/styles/container.sty.js +2 -2
- package/esm/styles/container.sty.js.map +1 -1
- package/esm/styles/ellipsis.css +1 -1
- package/esm/styles/ellipsis.sty.js +1 -1
- package/esm/styles/ellipsis.sty.js.map +1 -1
- package/esm/styles/field.css +301 -257
- package/esm/styles/field.sty.js +2 -2
- package/esm/styles/field.sty.js.map +2 -2
- package/esm/styles/screen-reader-only.css +1 -1
- package/esm/styles/screen-reader-only.sty.js +1 -1
- package/esm/styles/screen-reader-only.sty.js.map +1 -1
- package/esm/styles/sprinkles.css +262 -262
- package/esm/styles/sprinkles.sty.js +1 -1
- package/esm/styles/sprinkles.sty.js.map +1 -1
- package/esm/styles/textStyle.css +8 -8
- package/esm/styles/textStyle.sty.js +1 -1
- package/esm/styles/textStyle.sty.js.map +1 -1
- package/esm/tables/DataTable/DataTable.css +2 -2
- package/esm/tables/DataTable/DataTable.sty.js +7 -7
- package/esm/tables/DataTable/DataTable.sty.js.map +1 -1
- package/esm/tables/DataTable/components/Alignment.css +6 -6
- package/esm/tables/DataTable/components/Alignment.sty.js +2 -2
- package/esm/tables/DataTable/components/Alignment.sty.js.map +1 -1
- package/esm/tables/DataTable/components/ColumnPinning/DataTablePinningShadowCells.css +6 -6
- package/esm/tables/DataTable/components/ColumnPinning/DataTablePinningShadowCells.sty.js +3 -3
- package/esm/tables/DataTable/components/ColumnPinning/DataTablePinningShadowCells.sty.js.map +1 -1
- package/esm/tables/DataTable/components/DataTableBody.css +2 -2
- package/esm/tables/DataTable/components/DataTableBody.sty.js +2 -2
- package/esm/tables/DataTable/components/DataTableBody.sty.js.map +1 -1
- package/esm/tables/DataTable/components/DataTableCell.css +101 -98
- package/esm/tables/DataTable/components/DataTableCell.sty.js +6 -5
- package/esm/tables/DataTable/components/DataTableCell.sty.js.map +2 -2
- package/esm/tables/DataTable/components/DataTableContent.js +2 -2
- package/esm/tables/DataTable/components/DataTableContent.js.map +2 -2
- package/esm/tables/DataTable/components/DataTableDefaultCell.css +21 -21
- package/esm/tables/DataTable/components/DataTableDefaultCell.sty.js +2 -1
- package/esm/tables/DataTable/components/DataTableDefaultCell.sty.js.map +2 -2
- package/esm/tables/DataTable/components/DataTableEmptyState.css +2 -2
- package/esm/tables/DataTable/components/DataTableEmptyState.sty.js +1 -1
- package/esm/tables/DataTable/components/DataTableEmptyState.sty.js.map +1 -1
- package/esm/tables/DataTable/components/DataTableHeader.css +2 -2
- package/esm/tables/DataTable/components/DataTableHeader.sty.js +2 -2
- package/esm/tables/DataTable/components/DataTableHeader.sty.js.map +1 -1
- package/esm/tables/DataTable/components/DataTableHeaderCell.css +66 -63
- package/esm/tables/DataTable/components/DataTableHeaderCell.js +2 -2
- package/esm/tables/DataTable/components/DataTableHeaderCell.js.map +2 -2
- package/esm/tables/DataTable/components/DataTableHeaderCell.sty.js +24 -23
- package/esm/tables/DataTable/components/DataTableHeaderCell.sty.js.map +2 -2
- package/esm/tables/DataTable/components/DataTableRow.css +13 -13
- package/esm/tables/DataTable/components/DataTableRow.sty.js +2 -1
- package/esm/tables/DataTable/components/DataTableRow.sty.js.map +2 -2
- package/esm/tables/DataTable/components/DataTableScrollShadow.css +10 -10
- package/esm/tables/DataTable/components/DataTableScrollShadow.sty.js +2 -2
- package/esm/tables/DataTable/components/DataTableScrollShadow.sty.js.map +1 -1
- package/esm/tables/DataTable/components/DataTableVirtualizationContainer.css +38 -12
- package/esm/tables/DataTable/components/DataTableVirtualizationContainer.js +3 -3
- package/esm/tables/DataTable/components/DataTableVirtualizationContainer.js.map +2 -2
- package/esm/tables/DataTable/components/DataTableVirtualizationContainer.sty.js +2 -1
- package/esm/tables/DataTable/components/DataTableVirtualizationContainer.sty.js.map +2 -2
- package/esm/tables/DataTable/components/TableActions/DataTableSelectionChip.css +9 -7
- package/esm/tables/DataTable/components/TableActions/DataTableSelectionChip.js +2 -2
- package/esm/tables/DataTable/components/TableActions/DataTableSelectionChip.js.map +2 -2
- package/esm/tables/DataTable/components/TableActions/DataTableSelectionChip.sty.js +2 -2
- package/esm/tables/DataTable/components/TableActions/DataTableSelectionChip.sty.js.map +2 -2
- package/esm/tables/DataTable/components/Toolbar/ColumnSettings/ColumnOrderSettings/ColumnOrderDragHandle.js +4 -4
- package/esm/tables/DataTable/components/Toolbar/ColumnSettings/ColumnOrderSettings/ColumnOrderDragHandle.js.map +2 -2
- package/esm/tables/DataTable/components/Toolbar/ColumnSettings/ColumnOrderSettings/ColumnOrderSettingsDragAndDrop.css +7 -7
- package/esm/tables/DataTable/components/Toolbar/ColumnSettings/ColumnOrderSettings/ColumnOrderSettingsDragAndDrop.sty.js +3 -3
- package/esm/tables/DataTable/components/Toolbar/ColumnSettings/ColumnOrderSettings/ColumnOrderSettingsDragAndDrop.sty.js.map +1 -1
- package/esm/tables/DataTable/components/Toolbar/ColumnSettings/DataTableColumnsList.css +5 -5
- package/esm/tables/DataTable/components/Toolbar/ColumnSettings/DataTableColumnsList.sty.js +3 -3
- package/esm/tables/DataTable/components/Toolbar/ColumnSettings/DataTableColumnsList.sty.js.map +1 -1
- package/esm/tables/DataTable/components/Toolbar/ColumnSettings/DataTableColumnsListItem.css +7 -7
- package/esm/tables/DataTable/components/Toolbar/ColumnSettings/DataTableColumnsListItem.sty.js +3 -3
- package/esm/tables/DataTable/components/Toolbar/ColumnSettings/DataTableColumnsListItem.sty.js.map +1 -1
- package/esm/tables/DataTable/components/Toolbar/ColumnSettings/DataTableVisibilityFilterControls.css +5 -5
- package/esm/tables/DataTable/components/Toolbar/ColumnSettings/DataTableVisibilityFilterControls.sty.js +3 -3
- package/esm/tables/DataTable/components/Toolbar/ColumnSettings/DataTableVisibilityFilterControls.sty.js.map +1 -1
- package/esm/tables/DataTable/components/Toolbar/DataTableToolbarMenu.js +4 -2
- package/esm/tables/DataTable/components/Toolbar/DataTableToolbarMenu.js.map +2 -2
- package/esm/tables/DataTable/components/Toolbar/Download/DataTableDownloadData.css +9 -0
- package/esm/tables/DataTable/components/Toolbar/Download/DataTableDownloadData.js +72 -49
- package/esm/tables/DataTable/components/Toolbar/Download/DataTableDownloadData.js.map +2 -2
- package/esm/tables/DataTable/components/Toolbar/Download/DataTableDownloadData.sty.js +9 -0
- package/esm/tables/DataTable/components/Toolbar/Download/DataTableDownloadData.sty.js.map +7 -0
- package/esm/tables/DataTable/constants.js +2 -0
- package/esm/tables/DataTable/constants.js.map +2 -2
- package/esm/tables/DataTable/features/ColumnOrder/ColumnOrder.css +8 -8
- package/esm/tables/DataTable/features/ColumnOrder/ColumnOrder.sty.js +4 -4
- package/esm/tables/DataTable/features/ColumnOrder/ColumnOrder.sty.js.map +1 -1
- package/esm/tables/DataTable/features/ColumnOrder/ColumnOrderDragAndDropContext.js +8 -8
- package/esm/tables/DataTable/features/ColumnOrder/ColumnOrderDragAndDropContext.js.map +2 -2
- package/esm/tables/DataTable/features/ColumnOrder/column-order-dnd-utils.js +4 -4
- package/esm/tables/DataTable/features/ColumnOrder/column-order-dnd-utils.js.map +2 -2
- package/esm/tables/DataTable/features/ColumnSizing/ColumnSizing.css +3 -3
- package/esm/tables/DataTable/features/ColumnSizing/ColumnSizing.sty.js +1 -1
- package/esm/tables/DataTable/features/ColumnSizing/ColumnSizing.sty.js.map +1 -1
- package/esm/tables/DataTable/features/ColumnTypes/ColumnTypes.css +1 -1
- package/esm/tables/DataTable/features/ColumnTypes/ColumnTypes.js +1 -1
- package/esm/tables/DataTable/features/ColumnTypes/ColumnTypes.js.map +1 -1
- package/esm/tables/DataTable/features/ColumnTypes/ColumnTypes.sty.js +1 -1
- package/esm/tables/DataTable/features/ColumnTypes/ColumnTypes.sty.js.map +1 -1
- package/esm/tables/DataTable/features/GanttChart/DataTableGanttAnnotationsIndicators.css +1 -1
- package/esm/tables/DataTable/features/GanttChart/DataTableGanttAnnotationsIndicators.sty.js +1 -1
- package/esm/tables/DataTable/features/GanttChart/DataTableGanttAnnotationsIndicators.sty.js.map +1 -1
- package/esm/tables/DataTable/features/GanttChart/DataTableGanttChartCell.css +3 -3
- package/esm/tables/DataTable/features/GanttChart/DataTableGanttChartCell.sty.js +3 -2
- package/esm/tables/DataTable/features/GanttChart/DataTableGanttChartCell.sty.js.map +2 -2
- package/esm/tables/DataTable/features/GanttChart/DataTableGanttChartGrid.css +1 -1
- package/esm/tables/DataTable/features/GanttChart/DataTableGanttChartGrid.sty.js +1 -1
- package/esm/tables/DataTable/features/GanttChart/DataTableGanttChartGrid.sty.js.map +1 -1
- package/esm/tables/DataTable/features/GanttChart/DataTableGanttChartHeader.css +4 -4
- package/esm/tables/DataTable/features/GanttChart/DataTableGanttChartHeader.sty.js +2 -1
- package/esm/tables/DataTable/features/GanttChart/DataTableGanttChartHeader.sty.js.map +2 -2
- package/esm/tables/DataTable/features/LoadingState/LoadingState.css +2 -2
- package/esm/tables/DataTable/features/LoadingState/LoadingState.sty.js +2 -2
- package/esm/tables/DataTable/features/LoadingState/LoadingState.sty.js.map +1 -1
- package/esm/tables/DataTable/features/RowDetails/RowDetails.css +13 -13
- package/esm/tables/DataTable/features/RowDetails/RowDetails.sty.js +3 -3
- package/esm/tables/DataTable/features/RowDetails/RowDetails.sty.js.map +1 -1
- package/esm/tables/DataTable/features/RowDetails/RowDetailsElement.js +2 -2
- package/esm/tables/DataTable/features/RowDetails/RowDetailsElement.js.map +2 -2
- package/esm/tables/DataTable/features/RowInteractivity/RowInteractivity.css +14 -14
- package/esm/tables/DataTable/features/RowInteractivity/RowInteractivity.js +31 -1
- package/esm/tables/DataTable/features/RowInteractivity/RowInteractivity.js.map +2 -2
- package/esm/tables/DataTable/features/RowInteractivity/RowInteractivity.sty.js +2 -1
- package/esm/tables/DataTable/features/RowInteractivity/RowInteractivity.sty.js.map +2 -2
- package/esm/tables/DataTable/features/RowOrder/RowOrder.css +8 -8
- package/esm/tables/DataTable/features/RowOrder/RowOrder.js +14 -9
- package/esm/tables/DataTable/features/RowOrder/RowOrder.js.map +2 -2
- package/esm/tables/DataTable/features/RowOrder/RowOrder.sty.js +3 -3
- package/esm/tables/DataTable/features/RowOrder/RowOrder.sty.js.map +1 -1
- package/esm/tables/DataTable/features/RowOrder/row-order-utils.js +3 -3
- package/esm/tables/DataTable/features/RowOrder/row-order-utils.js.map +2 -2
- package/esm/tables/DataTable/features/Sorting/Sorting.css +34 -34
- package/esm/tables/DataTable/features/Sorting/Sorting.sty.js +4 -3
- package/esm/tables/DataTable/features/Sorting/Sorting.sty.js.map +2 -2
- package/esm/tables/DataTable/features/SubRows/SubRows.css +19 -19
- package/esm/tables/DataTable/features/SubRows/SubRows.sty.js +6 -5
- package/esm/tables/DataTable/features/SubRows/SubRows.sty.js.map +2 -2
- package/esm/tables/DataTable/features/Thresholds/Thresholds.css +2 -2
- package/esm/tables/DataTable/features/Thresholds/Thresholds.sty.js +3 -3
- package/esm/tables/DataTable/features/Thresholds/Thresholds.sty.js.map +1 -1
- package/esm/tables/DataTable/features/UserActions/FloatingMenu.js +1 -0
- package/esm/tables/DataTable/features/UserActions/FloatingMenu.js.map +2 -2
- package/esm/tables/DataTable/features/UserActions/InlineUserActionsMenu.js +11 -0
- package/esm/tables/DataTable/features/UserActions/InlineUserActionsMenu.js.map +2 -2
- package/esm/tables/DataTable/features/UserActions/RowActions.css +4 -4
- package/esm/tables/DataTable/features/UserActions/RowActions.js +54 -32
- package/esm/tables/DataTable/features/UserActions/RowActions.js.map +2 -2
- package/esm/tables/DataTable/features/UserActions/RowActions.sty.js +2 -1
- package/esm/tables/DataTable/features/UserActions/RowActions.sty.js.map +2 -2
- package/esm/tables/DataTable/features/UserActions/UserActions.css +18 -18
- package/esm/tables/DataTable/features/UserActions/UserActions.js +12 -1
- package/esm/tables/DataTable/features/UserActions/UserActions.js.map +2 -2
- package/esm/tables/DataTable/features/UserActions/UserActions.sty.js +3 -2
- package/esm/tables/DataTable/features/UserActions/UserActions.sty.js.map +2 -2
- package/esm/tables/DataTable/features/VirtualScrolling/VirtualScrolling.js +45 -8
- package/esm/tables/DataTable/features/VirtualScrolling/VirtualScrolling.js.map +2 -2
- package/esm/tables/DataTable/messages.js +15 -10
- package/esm/tables/DataTable/messages.js.map +2 -2
- package/esm/tables/SimpleTable/SimpleTable.css +31 -25
- package/esm/tables/SimpleTable/SimpleTable.sty.js +2 -1
- package/esm/tables/SimpleTable/SimpleTable.sty.js.map +2 -2
- package/esm/tables/utils/data-table-border-width.js +12 -0
- package/esm/tables/utils/data-table-border-width.js.map +7 -0
- package/esm/typography/block-quote/Blockquote.css +2 -2
- package/esm/typography/block-quote/Blockquote.sty.js +1 -1
- package/esm/typography/block-quote/Blockquote.sty.js.map +1 -1
- package/esm/typography/code/Code.css +1 -1
- package/esm/typography/code/Code.sty.js +1 -1
- package/esm/typography/code/Code.sty.js.map +1 -1
- package/esm/typography/emphasis/Emphasis.css +1 -1
- package/esm/typography/emphasis/Emphasis.sty.js +1 -1
- package/esm/typography/emphasis/Emphasis.sty.js.map +1 -1
- package/esm/typography/external-link/ExternalLink.css +6 -6
- package/esm/typography/external-link/ExternalLink.sty.js +1 -1
- package/esm/typography/external-link/ExternalLink.sty.js.map +1 -1
- package/esm/typography/heading/Heading.css +7 -7
- package/esm/typography/heading/Heading.sty.js +1 -1
- package/esm/typography/heading/Heading.sty.js.map +1 -1
- package/esm/typography/highlight/Highlight.css +2 -2
- package/esm/typography/highlight/Highlight.sty.js +1 -1
- package/esm/typography/highlight/Highlight.sty.js.map +1 -1
- package/esm/typography/link/Link.css +4 -4
- package/esm/typography/link/Link.sty.js +1 -1
- package/esm/typography/link/Link.sty.js.map +1 -1
- package/esm/typography/list/List.css +4 -4
- package/esm/typography/list/List.sty.js +2 -2
- package/esm/typography/list/List.sty.js.map +1 -1
- package/esm/typography/paragraph/Paragraph.css +3 -3
- package/esm/typography/paragraph/Paragraph.sty.js +1 -1
- package/esm/typography/paragraph/Paragraph.sty.js.map +1 -1
- package/esm/typography/strikethrough/Strikethrough.css +1 -1
- package/esm/typography/strikethrough/Strikethrough.sty.js +1 -1
- package/esm/typography/strikethrough/Strikethrough.sty.js.map +1 -1
- package/esm/typography/strong/Strong.css +1 -1
- package/esm/typography/strong/Strong.sty.js +1 -1
- package/esm/typography/strong/Strong.sty.js.map +1 -1
- package/esm/typography/text/Text.css +3 -3
- package/esm/typography/text/Text.sty.js +1 -1
- package/esm/typography/text/Text.sty.js.map +1 -1
- package/esm/typography/text-ellipsis/TextEllipsis.css +6 -6
- package/esm/typography/text-ellipsis/TextEllipsis.sty.js +2 -2
- package/esm/typography/text-ellipsis/TextEllipsis.sty.js.map +1 -1
- package/filters/filter-field/FilterField.css +123 -114
- package/filters/filter-field/FilterField.sty.js +29 -28
- package/filters/filter-field/components/FilterFieldSuffixButtons.css +3 -3
- package/filters/filter-field/components/FilterFieldSuffixButtons.sty.js +3 -3
- package/filters/filter-field/components/FilterStatement.css +13 -13
- package/filters/filter-field/components/FilterStatement.js +1 -1
- package/filters/filter-field/components/FilterStatement.sty.js +8 -6
- package/filters/filter-field/hooks/useShowMore.js +2 -20
- package/filters/filter-field/suggestions/RecentPinnedSuggestionItem.css +12 -14
- package/filters/filter-field/suggestions/RecentPinnedSuggestionItem.sty.d.ts +0 -2
- package/filters/filter-field/suggestions/RecentPinnedSuggestionItem.sty.js +4 -6
- package/filters/filter-field/suggestions/Suggestion.css +27 -26
- package/filters/filter-field/suggestions/Suggestion.js +2 -3
- package/filters/filter-field/suggestions/Suggestion.sty.js +17 -15
- package/filters/filter-field/suggestions/SuggestionDetails.css +2 -2
- package/filters/filter-field/suggestions/SuggestionDetails.sty.js +2 -2
- package/filters/filter-field/suggestions/SuggestionGroup.css +6 -6
- package/filters/filter-field/suggestions/SuggestionGroup.sty.js +5 -3
- package/filters/filter-field/suggestions/SuggestionGroupLabel.css +1 -1
- package/filters/filter-field/suggestions/SuggestionGroupLabel.sty.js +1 -1
- package/filters/filter-field/suggestions/SuggestionPin.js +7 -4
- package/filters/filter-field/suggestions/SuggestionTips.css +7 -7
- package/filters/filter-field/suggestions/SuggestionTips.sty.js +5 -5
- package/filters/filter-field/suggestions/SuggestionsOverlay.css +7 -7
- package/filters/filter-field/suggestions/SuggestionsOverlay.sty.js +5 -5
- package/filters/filter-field/utils/suggestions-utils/key-suggestions.js +3 -1
- package/filters/segment-selector/SegmentSelector.css +4 -4
- package/filters/segment-selector/SegmentSelector.sty.js +4 -4
- package/filters/segment-selector/parts/EmptySegments.css +1 -1
- package/filters/segment-selector/parts/EmptySegments.sty.js +1 -1
- package/filters/segment-selector/parts/Overlay.css +8 -8
- package/filters/segment-selector/parts/Overlay.sty.js +8 -8
- package/filters/segment-selector/parts/ShowMorePanel/ShowMorePanel.css +4 -4
- package/filters/segment-selector/parts/ShowMorePanel/ShowMorePanel.sty.js +4 -4
- package/filters/segment-selector/parts/segmentsPresets/SegmentsPresets.css +38 -26
- package/filters/segment-selector/parts/segmentsPresets/SegmentsPresets.sty.js +11 -10
- package/filters/segment-selector/parts/selectionBar/SegmentSelect.css +55 -19
- package/filters/segment-selector/parts/selectionBar/SegmentSelect.js +3 -3
- package/filters/segment-selector/parts/selectionBar/SegmentSelect.sty.d.ts +3 -1
- package/filters/segment-selector/parts/selectionBar/SegmentSelect.sty.js +11 -6
- package/filters/segment-selector/parts/selectionBar/SegmentSelectorTrigger.css +1 -1
- package/filters/segment-selector/parts/selectionBar/SegmentSelectorTrigger.sty.js +1 -1
- package/filters/segment-selector/parts/selectionBar/ValueSelect.js +3 -3
- package/filters/timeframe-selector/TimeframeSelector.css +1 -1
- package/filters/timeframe-selector/TimeframeSelector.sty.js +1 -1
- package/filters/timeframe-selector/TimeframeSelectorRoot.js +10 -8
- package/filters/timeframe-selector/components/custom-timeframe-selector/CustomTimeframeSelector.css +4 -4
- package/filters/timeframe-selector/components/custom-timeframe-selector/CustomTimeframeSelector.js +12 -1
- package/filters/timeframe-selector/components/custom-timeframe-selector/CustomTimeframeSelector.sty.js +3 -3
- package/filters/timeframe-selector/components/overlay/TimeframeSelectorOverlay.css +4 -4
- package/filters/timeframe-selector/components/overlay/TimeframeSelectorOverlay.sty.js +4 -4
- package/filters/timeframe-selector/components/presets/PresetItem.js +1 -1
- package/filters/timeframe-selector/components/presets/Presets.css +27 -27
- package/filters/timeframe-selector/components/presets/Presets.sty.js +11 -11
- package/filters/timeframe-selector/components/trigger/Trigger.css +14 -4
- package/filters/timeframe-selector/components/trigger/Trigger.d.ts +1 -1
- package/filters/timeframe-selector/components/trigger/Trigger.js +10 -3
- package/filters/timeframe-selector/components/trigger/Trigger.sty.d.ts +1 -0
- package/filters/timeframe-selector/components/trigger/Trigger.sty.js +7 -3
- package/filters/timeframe-selector/contexts/TimeframeSelectorContext.d.ts +2 -0
- package/filters/timeframe-selector/contexts/TimeframeSelectorContext.js +2 -1
- package/forms/_base-input/BaseInput.css +148 -62
- package/forms/_base-input/BaseInput.js +1 -3
- package/forms/_base-input/BaseInput.sty.js +13 -11
- package/forms/_base-input/BaseInputContent.css +7 -7
- package/forms/_base-input/BaseInputContent.sty.js +3 -1
- package/forms/calendar/Calendar.css +47 -47
- package/forms/calendar/Calendar.sty.d.ts +11 -11
- package/forms/calendar/Calendar.sty.js +22 -22
- package/forms/calendar/CalendarRoot.js +4 -4
- package/forms/calendar/components/CalendarItem.css +7 -7
- package/forms/calendar/components/CalendarItem.sty.js +4 -4
- package/forms/calendar/components/CalendarOutlineIcon.css +8 -8
- package/forms/calendar/components/CalendarOutlineIcon.sty.js +5 -5
- package/forms/calendar/components/Day.js +4 -4
- package/forms/calendar/components/Days.js +2 -2
- package/forms/calendar/components/Month.js +1 -1
- package/forms/calendar/components/Weekdays.js +16 -26
- package/forms/calendar/components/Year.js +1 -1
- package/forms/calendar/variables.sty.js +2 -2
- package/forms/calendar/views/SelectMonthView.js +2 -2
- package/forms/calendar/views/SelectYearView.js +2 -2
- package/forms/checkbox/Checkbox.css +20 -20
- package/forms/checkbox/Checkbox.sty.js +3 -3
- package/forms/date-time-picker/DateSelector.js +2 -0
- package/forms/date-time-picker/DateTimePicker.css +87 -59
- package/forms/date-time-picker/DateTimePicker.sty.d.ts +15 -0
- package/forms/date-time-picker/DateTimePicker.sty.js +7 -6
- package/forms/date-time-range-picker/DateRangeSelector.css +1 -6
- package/forms/date-time-range-picker/DateRangeSelector.js +5 -5
- package/forms/date-time-range-picker/DateRangeSelector.sty.d.ts +0 -1
- package/forms/date-time-range-picker/DateRangeSelector.sty.js +1 -3
- package/forms/date-time-range-picker/DateTimeInput.css +11 -11
- package/forms/date-time-range-picker/DateTimeInput.sty.js +3 -3
- package/forms/date-time-range-picker/DateTimeRangePicker.css +30 -20
- package/forms/date-time-range-picker/DateTimeRangePicker.js +12 -1
- package/forms/date-time-range-picker/DateTimeRangePicker.sty.d.ts +11 -1
- package/forms/date-time-range-picker/DateTimeRangePicker.sty.js +4 -4
- package/forms/date-time-range-picker/DateTimeRangePickerRoot.js +3 -7
- package/forms/date-time-range-picker/selection-copy-helpers.js +12 -9
- package/forms/date-time-range-picker/selection-helpers.d.ts +38 -11
- package/forms/date-time-range-picker/selection-helpers.js +506 -64
- package/forms/date-time-range-picker/types.d.ts +5 -0
- package/forms/date-time-range-picker/useSelectionInteractionHandlers.js +37 -5
- package/forms/forms-core/components/field-set/FieldSet.css +2 -2
- package/forms/forms-core/components/field-set/FieldSet.sty.js +2 -2
- package/forms/forms-core/components/form-field/FormField.sty.js +1 -1
- package/forms/forms-core/components/form-field-messages/FormFieldMessageItem.css +5 -5
- package/forms/forms-core/components/form-field-messages/FormFieldMessageItem.sty.js +2 -2
- package/forms/forms-core/components/form-field-messages/FormFieldMessages.sty.js +1 -1
- package/forms/forms-core/components/label/Label.css +5 -5
- package/forms/forms-core/components/label/Label.sty.js +2 -2
- package/forms/forms-core/hooks/useFormFieldValidation.d.ts +14 -0
- package/forms/forms-core/hooks/useFormFieldValidation.js +10 -4
- package/forms/hooks/useAutofillEvent.css +8 -8
- package/forms/hooks/useAutofillEvent.sty.js +4 -4
- package/forms/password-input/PasswordInput.js +7 -1
- package/forms/radio/styles.css +18 -18
- package/forms/radio/styles.sty.js +8 -8
- package/forms/search-input/SearchInput.css +1 -1
- package/forms/search-input/SearchInput.sty.js +1 -1
- package/forms/select/components/Control.js +3 -1
- package/forms/select/components/Menu.js +3 -4
- package/forms/select/components/Option.js +7 -1
- package/forms/select/styles/Select.css +53 -53
- package/forms/select/styles/Select.sty.d.ts +9 -1
- package/forms/select/styles/Select.sty.js +27 -23
- package/forms/spin-buttons/SpinButton.css +8 -8
- package/forms/spin-buttons/SpinButton.sty.js +2 -2
- package/forms/spin-buttons/spin-button-group/hooks/useNavigateSpinButton.js +27 -14
- package/forms/spin-buttons/spin-button-group/hooks/useValueOverflow.js +4 -0
- package/forms/spin-buttons/text-spin-button/hooks/useValueNavigation.js +14 -20
- package/forms/switch/Switch.css +36 -36
- package/forms/switch/Switch.sty.js +5 -5
- package/forms/text-area/TextArea.css +79 -38
- package/forms/text-area/TextArea.sty.d.ts +51 -0
- package/forms/text-area/TextArea.sty.js +4 -3
- package/forms/toggle-button-group/Item.js +0 -6
- package/forms/toggle-button-group/ToggleButtonGroup.js +5 -10
- package/forms/toggle-button-group/styles.css +111 -34
- package/forms/toggle-button-group/styles.sty.js +15 -15
- package/lang/en.json +52 -28
- package/lang/ja.json +240 -102
- package/lang/uncompiled/en.json +19 -15
- package/lang/uncompiled/ja.json +114 -54
- package/layouts/app-header/AppHeader.css +1 -1
- package/layouts/app-header/AppHeader.sty.js +1 -1
- package/layouts/app-header/Navigation.css +9 -9
- package/layouts/app-header/Navigation.sty.js +5 -5
- package/layouts/app-header/action-group/ActionButton.css +17 -17
- package/layouts/app-header/action-group/ActionButton.sty.js +3 -3
- package/layouts/app-header/action-group/ActionGroup.css +1 -1
- package/layouts/app-header/action-group/ActionGroup.sty.js +1 -1
- package/layouts/app-header/action-group/NavItem.css +4 -4
- package/layouts/app-header/action-group/NavItem.sty.js +3 -3
- package/layouts/app-header/app-icon/AppIcon.css +4 -4
- package/layouts/app-header/app-icon/AppIcon.sty.js +1 -1
- package/layouts/container/Container.css +7 -4
- package/layouts/container/Container.sty.js +2 -1
- package/layouts/divider/Divider.css +6 -6
- package/layouts/divider/Divider.sty.js +1 -1
- package/layouts/index.d.ts +13 -9
- package/layouts/index.js +1 -5
- package/layouts/input-group/InputGroup.css +27 -26
- package/layouts/input-group/InputGroup.js +3 -0
- package/layouts/input-group/InputGroup.sty.js +2 -1
- package/layouts/page/DetailView.css +5 -2
- package/layouts/page/DetailView.sty.js +3 -2
- package/layouts/page/Header.css +4 -1
- package/layouts/page/Header.sty.js +2 -1
- package/layouts/page/Main.css +10 -4
- package/layouts/page/Main.sty.js +5 -4
- package/layouts/page/Page.css +4 -1
- package/layouts/page/Page.sty.js +2 -1
- package/layouts/page/Sidebar.css +22 -22
- package/layouts/page/Sidebar.sty.js +9 -8
- package/layouts/page/panel.css +39 -14
- package/layouts/page/panel.sty.js +11 -10
- package/layouts/page-layout/PageLayout.css +18 -6
- package/layouts/page-layout/PageLayout.d.ts +14 -8
- package/layouts/page-layout/PageLayout.sty.js +7 -6
- package/layouts/page-layout/details-layout/DetailsControlBar.css +3 -3
- package/layouts/page-layout/details-layout/DetailsControlBar.d.ts +8 -3
- package/layouts/page-layout/details-layout/DetailsControlBar.sty.js +3 -3
- package/layouts/page-layout/details-layout/DetailsLayout.css +8 -5
- package/layouts/page-layout/details-layout/DetailsLayout.sty.js +6 -5
- package/layouts/page-layout/details-layout/DetailsLayoutContext.d.ts +1 -1
- package/layouts/page-layout/details-layout/Overlay.css +48 -8
- package/layouts/page-layout/details-layout/Overlay.d.ts +1 -1
- package/layouts/page-layout/details-layout/Overlay.js +2 -3
- package/layouts/page-layout/details-layout/Overlay.sty.d.ts +1 -1
- package/layouts/page-layout/details-layout/Overlay.sty.js +7 -6
- package/layouts/page-layout/details-layout/slots.d.ts +5 -14
- package/layouts/page-layout/shared/collapsible.d.ts +2 -2
- package/layouts/page-layout/shared/portal-slots.d.ts +8 -4
- package/layouts/page-layout/shared/portal-slots.js +0 -1
- package/layouts/page-layout/sidebar-layout/SidebarLayout.css +75 -25
- package/layouts/page-layout/sidebar-layout/SidebarLayout.sty.js +16 -15
- package/layouts/page-layout/sidebar-layout/slots.d.ts +4 -5
- package/layouts/shared/resize-handle-styles.d.ts +36 -0
- package/layouts/shared/resize-handle-styles.js +78 -0
- package/layouts/shared/visual-refresh-overrides.d.ts +43 -0
- package/layouts/shared/visual-refresh-overrides.js +74 -0
- package/layouts/split-layout/SplitLayout.css +38 -13
- package/layouts/split-layout/SplitLayout.d.ts +9 -6
- package/layouts/split-layout/SplitLayout.js +1 -1
- package/layouts/split-layout/SplitLayout.sty.d.ts +1 -1
- package/layouts/split-layout/SplitLayout.sty.js +10 -9
- package/layouts/split-layout/slots.d.ts +8 -4
- package/layouts/surface/Surface.css +39 -39
- package/layouts/surface/Surface.sty.js +2 -2
- package/layouts/surface/variables.sty.js +1 -1
- package/layouts/title-bar/TitleBar.css +5 -5
- package/layouts/title-bar/TitleBar.sty.js +4 -4
- package/navigation/breadcrumbs/Breadcrumbs.css +9 -9
- package/navigation/breadcrumbs/Breadcrumbs.sty.js +5 -5
- package/navigation/menu/Menu.css +15 -15
- package/navigation/menu/Menu.js +8 -4
- package/navigation/menu/Menu.sty.js +8 -8
- package/navigation/menu/Sub.js +8 -4
- package/navigation/tabs/RenderTab.css +14 -14
- package/navigation/tabs/RenderTab.sty.js +3 -3
- package/navigation/tabs/TabPanel.css +3 -3
- package/navigation/tabs/TabPanel.sty.js +2 -2
- package/navigation/tabs/Tabs.css +9 -9
- package/navigation/tabs/Tabs.sty.js +5 -5
- package/notifications/notification-settings/NotificationSettings.css +1 -1
- package/notifications/notification-settings/NotificationSettings.sty.js +1 -1
- package/notifications/toast/Toast.css +5 -5
- package/notifications/toast/Toast.sty.js +4 -4
- package/notifications/toast/ToastContainer.css +17 -17
- package/notifications/toast/ToastContainer.sty.js +1 -1
- package/overlays/drawer/Drawer.css +9 -9
- package/overlays/drawer/Drawer.sty.js +5 -5
- package/overlays/modal/Modal.css +7 -7
- package/overlays/modal/Modal.sty.js +4 -4
- package/overlays/overlay/Overlay.css +1 -1
- package/overlays/overlay/Overlay.sty.js +1 -1
- package/overlays/sheet/Sheet.css +6 -6
- package/overlays/sheet/Sheet.sty.js +5 -5
- package/overlays/tooltip/Tooltip.js +2 -2
- package/overlays/tooltip/tooltip.css +18 -18
- package/overlays/tooltip/tooltip.sty.js +3 -3
- package/package.json +4 -4
- package/styles/colorUtils.css +60 -60
- package/styles/colorUtils.sty.js +2 -2
- package/styles/container.css +47 -47
- package/styles/container.sty.js +2 -2
- package/styles/ellipsis.css +1 -1
- package/styles/ellipsis.sty.js +1 -1
- package/styles/field.css +301 -257
- package/styles/field.sty.d.ts +34 -2
- package/styles/field.sty.js +2 -2
- package/styles/screen-reader-only.css +1 -1
- package/styles/screen-reader-only.sty.js +1 -1
- package/styles/sprinkles.css +262 -262
- package/styles/sprinkles.sty.js +1 -1
- package/styles/textStyle.css +8 -8
- package/styles/textStyle.sty.js +1 -1
- package/tables/DataTable/DataTable.css +2 -2
- package/tables/DataTable/DataTable.sty.js +7 -7
- package/tables/DataTable/components/Alignment.css +6 -6
- package/tables/DataTable/components/Alignment.sty.js +2 -2
- package/tables/DataTable/components/ColumnPinning/DataTablePinningShadowCells.css +6 -6
- package/tables/DataTable/components/ColumnPinning/DataTablePinningShadowCells.sty.js +3 -3
- package/tables/DataTable/components/DataTableBody.css +2 -2
- package/tables/DataTable/components/DataTableBody.sty.js +2 -2
- package/tables/DataTable/components/DataTableCell.css +101 -98
- package/tables/DataTable/components/DataTableCell.sty.js +6 -5
- package/tables/DataTable/components/DataTableContent.js +2 -2
- package/tables/DataTable/components/DataTableDefaultCell.css +21 -21
- package/tables/DataTable/components/DataTableDefaultCell.sty.js +2 -1
- package/tables/DataTable/components/DataTableEmptyState.css +2 -2
- package/tables/DataTable/components/DataTableEmptyState.sty.js +1 -1
- package/tables/DataTable/components/DataTableHeader.css +2 -2
- package/tables/DataTable/components/DataTableHeader.sty.js +2 -2
- package/tables/DataTable/components/DataTableHeaderCell.css +66 -63
- package/tables/DataTable/components/DataTableHeaderCell.js +2 -1
- package/tables/DataTable/components/DataTableHeaderCell.sty.js +24 -23
- package/tables/DataTable/components/DataTableRow.css +13 -13
- package/tables/DataTable/components/DataTableRow.sty.js +2 -1
- package/tables/DataTable/components/DataTableScrollShadow.css +10 -10
- package/tables/DataTable/components/DataTableScrollShadow.sty.js +2 -2
- package/tables/DataTable/components/DataTableVirtualizationContainer.css +38 -12
- package/tables/DataTable/components/DataTableVirtualizationContainer.js +3 -2
- package/tables/DataTable/components/DataTableVirtualizationContainer.sty.d.ts +44 -0
- package/tables/DataTable/components/DataTableVirtualizationContainer.sty.js +2 -1
- package/tables/DataTable/components/TableActions/DataTableSelectionChip.css +9 -7
- package/tables/DataTable/components/TableActions/DataTableSelectionChip.js +2 -2
- package/tables/DataTable/components/TableActions/DataTableSelectionChip.sty.js +2 -2
- package/tables/DataTable/components/Toolbar/ColumnSettings/ColumnOrderSettings/ColumnOrderDragHandle.js +3 -3
- package/tables/DataTable/components/Toolbar/ColumnSettings/ColumnOrderSettings/ColumnOrderSettingsDragAndDrop.css +7 -7
- package/tables/DataTable/components/Toolbar/ColumnSettings/ColumnOrderSettings/ColumnOrderSettingsDragAndDrop.sty.js +3 -3
- package/tables/DataTable/components/Toolbar/ColumnSettings/DataTableColumnsList.css +5 -5
- package/tables/DataTable/components/Toolbar/ColumnSettings/DataTableColumnsList.sty.js +3 -3
- package/tables/DataTable/components/Toolbar/ColumnSettings/DataTableColumnsListItem.css +7 -7
- package/tables/DataTable/components/Toolbar/ColumnSettings/DataTableColumnsListItem.sty.js +3 -3
- package/tables/DataTable/components/Toolbar/ColumnSettings/DataTableVisibilityFilterControls.css +5 -5
- package/tables/DataTable/components/Toolbar/ColumnSettings/DataTableVisibilityFilterControls.sty.js +3 -3
- package/tables/DataTable/components/Toolbar/DataTableToolbarMenu.js +4 -2
- package/tables/DataTable/components/Toolbar/Download/DataTableDownloadData.css +9 -0
- package/tables/DataTable/components/Toolbar/Download/DataTableDownloadData.d.ts +3 -2
- package/tables/DataTable/components/Toolbar/Download/DataTableDownloadData.js +81 -48
- package/tables/DataTable/components/Toolbar/Download/DataTableDownloadData.sty.d.ts +2 -0
- package/tables/DataTable/components/Toolbar/Download/DataTableDownloadData.sty.js +27 -0
- package/tables/DataTable/constants.d.ts +4 -2
- package/tables/DataTable/constants.js +2 -0
- package/tables/DataTable/features/ColumnOrder/ColumnOrder.css +8 -8
- package/tables/DataTable/features/ColumnOrder/ColumnOrder.sty.js +4 -4
- package/tables/DataTable/features/ColumnOrder/ColumnOrderDragAndDropContext.d.ts +1 -1
- package/tables/DataTable/features/ColumnOrder/ColumnOrderDragAndDropContext.js +2 -2
- package/tables/DataTable/features/ColumnOrder/column-order-dnd-utils.js +4 -3
- package/tables/DataTable/features/ColumnSizing/ColumnSizing.css +3 -3
- package/tables/DataTable/features/ColumnSizing/ColumnSizing.sty.js +1 -1
- package/tables/DataTable/features/ColumnTypes/ColumnTypes.css +1 -1
- package/tables/DataTable/features/ColumnTypes/ColumnTypes.js +1 -1
- package/tables/DataTable/features/ColumnTypes/ColumnTypes.sty.js +1 -1
- package/tables/DataTable/features/GanttChart/DataTableGanttAnnotationsIndicators.css +1 -1
- package/tables/DataTable/features/GanttChart/DataTableGanttAnnotationsIndicators.sty.js +1 -1
- package/tables/DataTable/features/GanttChart/DataTableGanttChartCell.css +3 -3
- package/tables/DataTable/features/GanttChart/DataTableGanttChartCell.sty.js +3 -2
- package/tables/DataTable/features/GanttChart/DataTableGanttChartGrid.css +1 -1
- package/tables/DataTable/features/GanttChart/DataTableGanttChartGrid.sty.js +1 -1
- package/tables/DataTable/features/GanttChart/DataTableGanttChartHeader.css +4 -4
- package/tables/DataTable/features/GanttChart/DataTableGanttChartHeader.sty.js +2 -1
- package/tables/DataTable/features/LoadingState/LoadingState.css +2 -2
- package/tables/DataTable/features/LoadingState/LoadingState.sty.js +2 -2
- package/tables/DataTable/features/RowDetails/RowDetails.css +13 -13
- package/tables/DataTable/features/RowDetails/RowDetails.sty.js +3 -3
- package/tables/DataTable/features/RowDetails/RowDetailsElement.js +2 -2
- package/tables/DataTable/features/RowInteractivity/RowInteractivity.css +14 -14
- package/tables/DataTable/features/RowInteractivity/RowInteractivity.js +31 -1
- package/tables/DataTable/features/RowInteractivity/RowInteractivity.sty.js +2 -1
- package/tables/DataTable/features/RowOrder/RowOrder.css +8 -8
- package/tables/DataTable/features/RowOrder/RowOrder.js +14 -9
- package/tables/DataTable/features/RowOrder/RowOrder.sty.js +3 -3
- package/tables/DataTable/features/RowOrder/row-order-utils.js +3 -2
- package/tables/DataTable/features/Sorting/Sorting.css +34 -34
- package/tables/DataTable/features/Sorting/Sorting.sty.js +4 -3
- package/tables/DataTable/features/SubRows/SubRows.css +19 -19
- package/tables/DataTable/features/SubRows/SubRows.sty.js +6 -5
- package/tables/DataTable/features/Thresholds/Thresholds.css +2 -2
- package/tables/DataTable/features/Thresholds/Thresholds.sty.js +3 -3
- package/tables/DataTable/features/UserActions/FloatingMenu.js +1 -0
- package/tables/DataTable/features/UserActions/InlineUserActionsMenu.js +11 -0
- package/tables/DataTable/features/UserActions/RowActions.css +4 -4
- package/tables/DataTable/features/UserActions/RowActions.js +54 -32
- package/tables/DataTable/features/UserActions/RowActions.sty.js +2 -1
- package/tables/DataTable/features/UserActions/UserActions.css +18 -18
- package/tables/DataTable/features/UserActions/UserActions.js +12 -1
- package/tables/DataTable/features/UserActions/UserActions.sty.js +3 -2
- package/tables/DataTable/features/UserActions/user-actions-types.d.ts +14 -0
- package/tables/DataTable/features/VirtualScrolling/VirtualScrolling.js +45 -8
- package/tables/DataTable/messages.d.ts +5 -0
- package/tables/DataTable/messages.js +15 -10
- package/tables/SimpleTable/SimpleTable.css +31 -25
- package/tables/SimpleTable/SimpleTable.sty.js +2 -1
- package/tables/utils/data-table-border-width.d.ts +6 -0
- package/tables/utils/data-table-border-width.js +27 -0
- package/typography/block-quote/Blockquote.css +2 -2
- package/typography/block-quote/Blockquote.sty.js +1 -1
- package/typography/code/Code.css +1 -1
- package/typography/code/Code.sty.js +1 -1
- package/typography/emphasis/Emphasis.css +1 -1
- package/typography/emphasis/Emphasis.sty.js +1 -1
- package/typography/external-link/ExternalLink.css +6 -6
- package/typography/external-link/ExternalLink.sty.js +1 -1
- package/typography/heading/Heading.css +7 -7
- package/typography/heading/Heading.sty.js +1 -1
- package/typography/highlight/Highlight.css +2 -2
- package/typography/highlight/Highlight.sty.js +1 -1
- package/typography/link/Link.css +4 -4
- package/typography/link/Link.sty.js +1 -1
- package/typography/list/List.css +4 -4
- package/typography/list/List.sty.js +2 -2
- package/typography/paragraph/Paragraph.css +3 -3
- package/typography/paragraph/Paragraph.sty.js +1 -1
- package/typography/strikethrough/Strikethrough.css +1 -1
- package/typography/strikethrough/Strikethrough.sty.js +1 -1
- package/typography/strong/Strong.css +1 -1
- package/typography/strong/Strong.sty.js +1 -1
- package/typography/text/Text.css +3 -3
- package/typography/text/Text.sty.js +1 -1
- package/typography/text-ellipsis/TextEllipsis.css +6 -6
- package/typography/text-ellipsis/TextEllipsis.sty.js +2 -2
- package/charts/xy-chart/components/selection/Duration.js +0 -100
- package/core/hooks/useFocusRing.d.ts +0 -61
- package/core/hooks/useFocusRing.js +0 -103
- package/esm/charts/core/components/overlay-tooltip/components/header/types/type-guards.js.map +0 -7
- package/esm/charts/xy-chart/components/selection/Duration.js +0 -79
- package/esm/charts/xy-chart/components/selection/Duration.js.map +0 -7
- package/esm/core/hooks/useFocusRing.js +0 -79
- package/esm/core/hooks/useFocusRing.js.map +0 -7
- /package/charts/pie/{contexts → context}/PieChartOverlayRefContext.d.ts +0 -0
- /package/charts/pie/{contexts → context}/PieChartOverlayRefContext.js +0 -0
- /package/esm/charts/pie/{contexts → context}/PieChartOverlayRefContext.js +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/forms/date-time-range-picker/selection-helpers.ts"],
|
|
4
|
-
"sourcesContent": ["import type { RefObject } from 'react';\n\nimport * as styles from './DateTimeInput.sty.js';\nimport type { DateTimeInputRef } from './types.js';\nimport { getStratoLogger } from '../../core/sdk/sdk-logger.js';\nimport type { SpinButtonHandler } from '../spin-buttons/spin-button-group/types.js';\n\n/** @internal */\nexport function checkIfValueTypeAlignment(textNode: Node): boolean {\n // There are a lot of hidden text nodes for the mix of spin button and expression\n // in the DateTimeInput.\n // In order to skip the hidden ones correctly, we need to check for parent value types.\n const closestDateTimeInput = textNode.parentElement?.closest(\n `.${styles.dateTimeInput}`,\n );\n const currentValueType = closestDateTimeInput?.getAttribute('data-valuetype');\n const closestValueTypeElement =\n textNode.parentElement?.closest('[data-valuetype]');\n\n // If the query resolves to the same dateTime input element, it means that there is no other defining parent.\n // In this case it may be a placeholder / separator text or any other node.\n if (closestDateTimeInput === closestValueTypeElement) {\n return true;\n }\n\n const nodeValueType = closestValueTypeElement?.getAttribute('data-valuetype');\n\n return nodeValueType === currentValueType;\n}\n\n/** Helper to walk backwards through text nodes. */\nfunction previousTextNode(root: HTMLElement, node: Node): Node | null {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null);\n\n let current = walker.lastChild();\n let found = false;\n while (current) {\n if (found) {\n // There are a lot of hidden text nodes for the mix of spin button and expression\n // in the DateTimeInput.\n // In order to skip the hidden ones correctly, we need to check for parent value types.\n if (checkIfValueTypeAlignment(current)) {\n return current;\n }\n }\n\n if (current === node) {\n found = true;\n }\n\n current = walker.previousNode();\n }\n\n return null;\n}\n\n/** Helper to walk forwards through text nodes. */\nfunction nextTextNode(root: HTMLElement, node: Node): Node | null {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null);\n\n let current = walker.nextNode();\n let found = false;\n\n while (current) {\n if (found) {\n // There are a lot of hidden text nodes for the mix of spin button and expression\n // in the DateTimeInput.\n // In order to skip the hidden ones correctly, we need to check for parent value types.\n if (checkIfValueTypeAlignment(current)) {\n return current;\n }\n }\n if (current === node) {\n found = true;\n }\n current = walker.nextNode();\n }\n\n return null;\n}\n\n/** Helper that finds the next character position to adjust the global selection. */\nfunction findNextCharacterPosition(\n root: HTMLElement,\n node: Node,\n offset: number,\n): { node: Node; offset: number } | null {\n if (\n node.nodeType === Node.TEXT_NODE &&\n node.nodeValue &&\n offset < node.nodeValue.length &&\n checkIfValueTypeAlignment(node)\n ) {\n return { node, offset: offset + 1 };\n }\n\n // When the selection lands on an element node (not a text node), the offset\n // represents a child index. Walk into that child subtree to find the first\n // text node from that position forward.\n if (node.nodeType !== Node.TEXT_NODE) {\n const childAtOffset = node.childNodes[offset];\n if (childAtOffset) {\n const walker = document.createTreeWalker(\n childAtOffset,\n NodeFilter.SHOW_TEXT,\n null,\n );\n const firstText =\n walker.firstChild() ??\n (childAtOffset.nodeType === Node.TEXT_NODE ? childAtOffset : null);\n if (\n firstText &&\n (checkIfValueTypeAlignment(firstText) ||\n getClosestContentEditable(firstText) !== null)\n ) {\n return { node: firstText, offset: 1 };\n }\n }\n\n // When focus is on an element boundary at the end of the element\n // (offset === childNodes.length), continue from the last text node inside\n // that element and move to the next text node in document order.\n if (offset > 0) {\n const previousChild = node.childNodes[offset - 1];\n if (previousChild) {\n const walker = document.createTreeWalker(\n previousChild,\n NodeFilter.SHOW_TEXT,\n null,\n );\n const lastText =\n walker.lastChild() ??\n (previousChild.nodeType === Node.TEXT_NODE ? previousChild : null);\n if (lastText) {\n let nextFromBoundary: Node | null = nextTextNode(root, lastText);\n while (\n nextFromBoundary !== null &&\n getClosestContentEditable(nextFromBoundary) === null\n ) {\n nextFromBoundary = nextTextNode(root, nextFromBoundary);\n }\n if (nextFromBoundary) {\n return { node: nextFromBoundary, offset: 1 };\n }\n }\n }\n }\n }\n\n // Keep visible separator text nodes (those outside spinbuttons) as valid\n // step targets so Shift+Arrow can land on separators before extending into\n // neighbouring spinbutton text.\n let next: Node | null = nextTextNode(root, node);\n\n // Keep one-step crossing between relative expression inputs by skipping\n // separator-only nodes when both sides are expression textboxes.\n if (\n isExpressionNode(node) &&\n next &&\n getClosestContentEditable(next) === null\n ) {\n const nextEditableNode: Node | null = nextTextNode(root, next);\n if (isExpressionNode(nextEditableNode)) {\n next = nextEditableNode;\n }\n }\n\n if (!next) {\n return null;\n }\n\n return { node: next, offset: 1 };\n}\n\n/** Helper that finds the previous character position to adjust the global selection. */\nfunction findPreviousCharacterPosition(\n root: HTMLElement,\n node: Node,\n offset: number,\n): { node: Node; offset: number } | null {\n if (\n node.nodeType === Node.TEXT_NODE &&\n offset > 0 &&\n checkIfValueTypeAlignment(node)\n ) {\n return { node, offset: offset - 1 };\n }\n\n // When the selection lands on an element node (not a text node), the offset\n // represents a child index. Walk into the child subtree at offset-1 to find\n // the last text node from that position backward (mirrors the forward logic\n // in findNextCharacterPosition).\n if (node.nodeType !== Node.TEXT_NODE && offset > 0) {\n const childAtOffset = node.childNodes[offset - 1];\n if (childAtOffset) {\n const walker = document.createTreeWalker(\n childAtOffset,\n NodeFilter.SHOW_TEXT,\n null,\n );\n const lastText =\n walker.lastChild() ??\n (childAtOffset.nodeType === Node.TEXT_NODE ? childAtOffset : null);\n if (\n lastText &&\n lastText.nodeValue &&\n (checkIfValueTypeAlignment(lastText) ||\n getClosestContentEditable(lastText) !== null)\n ) {\n return { node: lastText, offset: lastText.nodeValue.length - 1 };\n }\n }\n }\n\n // Keep visible separator text nodes as valid backward step targets so\n // Shift+Arrow does not jump directly into the previous spinbutton.\n let prev: Node | null = previousTextNode(root, node);\n if (\n isExpressionNode(node) &&\n prev &&\n getClosestContentEditable(prev) === null\n ) {\n const previousEditableNode: Node | null = previousTextNode(root, prev);\n if (isExpressionNode(previousEditableNode)) {\n prev = previousEditableNode;\n }\n }\n if (!prev || prev.nodeValue === null) {\n return null;\n }\n\n return { node: prev, offset: prev.nodeValue.length - 1 };\n}\n\n/** Helper to find the first textNode to apply selection */\nfunction findFirstCharacterPosition(\n root: HTMLElement,\n): { node: Node; offset: number } | null {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null);\n let current = walker.firstChild();\n while (current !== null) {\n // Skip hidden text nodes (e.g. relative date expression values when in absolute mode).\n if (checkIfValueTypeAlignment(current)) {\n return { node: current, offset: 0 };\n }\n current = walker.nextNode();\n }\n return null;\n}\n\n/** Helper to find the last textNode to apply selection */\nfunction findLastCharacterPosition(\n root: HTMLElement,\n): { node: Node; offset: number } | null {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null);\n let current = walker.lastChild();\n while (current !== null) {\n // Skip hidden text nodes (e.g. relative date expression values when in absolute mode).\n if (checkIfValueTypeAlignment(current)) {\n return { node: current, offset: current.nodeValue?.length ?? 0 };\n }\n current = walker.previousNode();\n }\n return null;\n}\n\nfunction compareSelectionPoints(\n firstNode: Node,\n firstOffset: number,\n secondNode: Node,\n secondOffset: number,\n): number {\n if (firstNode === secondNode) {\n return firstOffset - secondOffset;\n }\n\n const firstRange = document.createRange();\n firstRange.setStart(firstNode, firstOffset);\n firstRange.collapse(true);\n\n const secondRange = document.createRange();\n secondRange.setStart(secondNode, secondOffset);\n secondRange.collapse(true);\n\n return firstRange.compareBoundaryPoints(Range.START_TO_START, secondRange);\n}\n\nfunction selectionOverlapsSpinButton(\n selectionStartNode: Node,\n selectionStartOffset: number,\n selectionEndNode: Node,\n selectionEndOffset: number,\n spinButton: HTMLElement,\n): boolean {\n const spinButtonStart = findFirstCharacterPosition(spinButton);\n const spinButtonEnd = findLastCharacterPosition(spinButton);\n\n if (!spinButtonStart || !spinButtonEnd) {\n return false;\n }\n\n return (\n compareSelectionPoints(\n selectionStartNode,\n selectionStartOffset,\n spinButtonEnd.node,\n spinButtonEnd.offset,\n ) < 0 &&\n compareSelectionPoints(\n selectionEndNode,\n selectionEndOffset,\n spinButtonStart.node,\n spinButtonStart.offset,\n ) > 0\n );\n}\n\n/**\n * Helper function that removes the contenteditable attributes for selection manipulation\n * @param rootElement - Must contain all contenteditable children.\n * @param removeEventTarget - Where to bind the inverese event listener to\n * @param eventType - Inverse event type, when should the contenteditable attribute be added back\n * @param customRemovalFn - Called when the inverse event fires in order to execute custom logic.\n *\n * @internal\n */\nexport function removeContentEditable(\n rootElement: HTMLElement,\n removeEventTarget: Document | HTMLElement,\n eventType: 'mouseup' | 'keyup',\n customRemovalFn?: (event: Event, hasMultiElementSelection: boolean) => void,\n): void {\n // Guard against focus-side effects (e.g. spinbutton onFocus selectAll)\n // while cross-element selection is restored.\n rootElement.setAttribute('data-restoring-selection', '');\n\n const contentEditables =\n rootElement.querySelectorAll<HTMLElement>('[contenteditable]');\n for (const editable of contentEditables) {\n const previousValue = editable.getAttribute('contenteditable') ?? undefined;\n editable.removeAttribute('contenteditable');\n editable.dataset.wascontenteditable = previousValue;\n\n // Also temporarily remove tabIndex so the element isn't focusable during\n // the drag. Without this, the browser auto-focuses the first spin button\n // on mousedown when the component didn't have focus before, which disrupts\n // drag-select across multiple elements.\n if (editable.hasAttribute('tabindex')) {\n editable.dataset.wastabindex = editable.getAttribute('tabindex') ?? '';\n editable.removeAttribute('tabindex');\n }\n }\n\n const signal = new AbortController();\n\n removeEventTarget.addEventListener(\n eventType,\n (event: Event) => {\n const wasContentEditables = rootElement.querySelectorAll<HTMLElement>(\n '[data-wascontenteditable]',\n );\n\n // Snapshot the selection BEFORE restoring contentEditable. Firefox\n // discards the cross-element drag selection when contentEditable is added\n // back, so we must capture it here while it is still intact.\n const selectionBeforeRestore = window.getSelection();\n const snapshotAnchorNode = selectionBeforeRestore?.anchorNode ?? null;\n const snapshotAnchorOffset = selectionBeforeRestore?.anchorOffset ?? 0;\n const snapshotFocusNode = selectionBeforeRestore?.focusNode ?? null;\n const snapshotFocusOffset = selectionBeforeRestore?.focusOffset ?? 0;\n\n const hasMultiElementSelection =\n selectionBeforeRestore !== null &&\n selectionBeforeRestore.toString().length > 0 &&\n (snapshotAnchorNode !== snapshotFocusNode ||\n (snapshotAnchorNode !== null &&\n snapshotAnchorNode === snapshotFocusNode &&\n snapshotAnchorOffset !== snapshotFocusOffset &&\n snapshotAnchorNode?.nodeType === Node.ELEMENT_NODE));\n\n for (const editable of wasContentEditables) {\n const previousValue = editable.getAttribute('data-wascontenteditable');\n if (previousValue !== null) {\n editable.setAttribute('contenteditable', previousValue);\n }\n editable.removeAttribute('data-wascontenteditable');\n\n const wasTabIndex = editable.getAttribute('data-wastabindex');\n if (wasTabIndex !== null) {\n editable.setAttribute('tabindex', wasTabIndex);\n editable.removeAttribute('data-wastabindex');\n }\n }\n\n // Firefox discards the drag selection when contentEditable is added back, so we\n // re-apply it using the snapshot taken before the restoration loop. We do NOT call\n // focus() here \u2014 no spin button should be focused after a drag-select, so all\n // fields render with consistent selection height in Firefox.\n // ArrowUp/Down after a drag is handled by the container's onKeyDown which forwards\n // to the anchor spin button on demand.\n if (hasMultiElementSelection && snapshotAnchorNode && snapshotFocusNode) {\n // Check if endpoints are truly inside spinbutton content (not on boundaries/separators)\n const anchorNodeWasInContent = isEndpointInsideSpinButtonContent(\n snapshotAnchorNode,\n snapshotAnchorOffset,\n );\n const focusNodeWasInContent = isEndpointInsideSpinButtonContent(\n snapshotFocusNode,\n snapshotFocusOffset,\n );\n\n // Only resolve to spinbuttons and snap boundaries if endpoints were inside content\n const anchorSpinButton = anchorNodeWasInContent\n ? resolveSpinButton(snapshotAnchorNode, rootElement)\n : null;\n const focusSpinButton = focusNodeWasInContent\n ? resolveSpinButton(snapshotFocusNode, rootElement)\n : null;\n\n const anchorBeforeFocus =\n compareSelectionPoints(\n snapshotAnchorNode,\n snapshotAnchorOffset,\n snapshotFocusNode,\n snapshotFocusOffset,\n ) <= 0;\n\n const anchorPos =\n anchorSpinButton &&\n anchorSpinButton.getAttribute('role') === 'spinbutton'\n ? anchorBeforeFocus\n ? findFirstCharacterPosition(anchorSpinButton)\n : findLastCharacterPosition(anchorSpinButton)\n : { node: snapshotAnchorNode, offset: snapshotAnchorOffset };\n const focusPos =\n focusSpinButton &&\n focusSpinButton.getAttribute('role') === 'spinbutton'\n ? anchorBeforeFocus\n ? findLastCharacterPosition(focusSpinButton)\n : findFirstCharacterPosition(focusSpinButton)\n : { node: snapshotFocusNode, offset: snapshotFocusOffset };\n\n if (anchorPos && focusPos) {\n try {\n window\n .getSelection()\n ?.setBaseAndExtent(\n anchorPos.node,\n anchorPos.offset,\n focusPos.node,\n focusPos.offset,\n );\n } catch (error) {\n const logger = getStratoLogger('DateTimeRangePicker');\n logger.warn(\n 'setBaseAndExtent failed when restoring drag selection',\n error,\n );\n }\n }\n } else {\n // Single-element selection: restore the exact position. setBaseAndExtent is safe\n // here because anchor and focus are within the same contenteditable element.\n if (snapshotAnchorNode && snapshotFocusNode) {\n try {\n window\n .getSelection()\n ?.setBaseAndExtent(\n snapshotAnchorNode,\n snapshotAnchorOffset,\n snapshotFocusNode,\n snapshotFocusOffset,\n );\n } catch (error) {\n const logger = getStratoLogger('DateTimeRangePicker');\n logger.warn(\n 'setBaseAndExtent failed when restoring single-element selection',\n error,\n );\n }\n }\n }\n\n customRemovalFn?.(event, hasMultiElementSelection);\n\n rootElement.removeAttribute('data-restoring-selection');\n\n signal.abort();\n },\n { signal: signal.signal },\n );\n}\n\n/**\n * Helper function that allows to move the selection further on a character basis or\n * to the start / end of the TFS.\n * @param key - Provides the key which allows to extend the selection in the correct direction.\n * @internal\n */\nexport function extendSelection(\n key: 'ArrowLeft' | 'ArrowRight' | 'Home' | 'End',\n): void {\n const selection = window.getSelection();\n if (\n selection === null ||\n selection.anchorNode === null ||\n selection.focusNode === null ||\n selection.rangeCount < 1\n ) {\n return;\n }\n\n const anchorNode = selection.anchorNode;\n const anchorOffset = selection.anchorOffset;\n const focusNode = selection.focusNode;\n const focusOffset = selection.focusOffset;\n\n let nextPos: { node: Node; offset: number } | null = null;\n\n const root =\n focusNode.parentElement?.closest<HTMLDivElement>('.strato-inputgroup');\n if (root === null || root === undefined) {\n return;\n }\n\n if (key === 'ArrowLeft') {\n nextPos = findPreviousCharacterPosition(root, focusNode, focusOffset);\n } else if (key === 'ArrowRight') {\n nextPos = findNextCharacterPosition(root, focusNode, focusOffset);\n } else if (key === 'Home') {\n nextPos = findFirstCharacterPosition(root);\n } else if (key === 'End') {\n nextPos = findLastCharacterPosition(root);\n }\n if (nextPos) {\n // Use setBaseAndExtent instead of selection.extend() so the new focus\n // endpoint can cross contenteditable boundaries in Chrome without needing\n // to temporarily strip the contenteditable attribute.\n // Guard with data-restoring-selection so that Chrome's implicit auto-focus\n // of the anchor spinbutton during setBaseAndExtent does not trigger\n // selectAll() via onFocus.\n root.setAttribute('data-restoring-selection', '');\n try {\n selection.setBaseAndExtent(\n anchorNode,\n anchorOffset,\n nextPos.node,\n nextPos.offset,\n );\n } catch (error) {\n const logger = getStratoLogger('DateTimeRangePicker');\n logger.warn('setBaseAndExtent failed when extending selection', error);\n }\n root.removeAttribute('data-restoring-selection');\n // Mark the container so CSS can suppress the spin-button :focus background\n // while a Shift+Arrow selection is active. The attribute is cleared in\n // onFocus when the user re-engages with a spin button via normal interaction\n // (i.e. when selectAll() is about to be called).\n root.setAttribute('data-shift-selection', '');\n }\n}\n\n/**\n * Helper function that allows to expand the selection to the entire range.\n * @internal\n */\nexport function extendSelectionToAll(): void {\n const selection = window.getSelection();\n if (\n selection === null ||\n selection.focusNode === null ||\n selection.rangeCount < 1\n ) {\n return;\n }\n\n const focusNode = selection.focusNode;\n\n const root =\n focusNode.parentElement?.closest<HTMLDivElement>('.strato-inputgroup');\n if (root === null || root === undefined) {\n return;\n }\n\n // Focus the container (not a spin button) so that no spin button receives the :focus background style for consistent\n // selection height across all fields. In Chrome, setBaseAndExtent implicitly moves focus to the anchor spin button; the\n // data-restoring-selection guard ensures onFocus skips selectAll() to avoid collapsing the selection to only the first\n // spin button.\n // ArrowUp/Down in Firefox is handled by the container's onKeyDown intercept,\n // same as after a drag-select.\n root.setAttribute('data-restoring-selection', '');\n root.focus();\n\n const firstPosition = findFirstCharacterPosition(root);\n const lastPosition = findLastCharacterPosition(root);\n\n if (!firstPosition || !lastPosition) {\n root.removeAttribute('data-restoring-selection');\n return;\n }\n\n try {\n selection.setBaseAndExtent(\n firstPosition.node,\n firstPosition.offset,\n lastPosition.node,\n lastPosition.offset,\n );\n } catch (error) {\n const logger = getStratoLogger('DateTimeRangePicker');\n logger.warn(\n 'setBaseAndExtent failed when extending selection to all',\n error,\n );\n }\n root.removeAttribute('data-restoring-selection');\n}\n\n// Matches spinbuttons both in their normal state ([contenteditable]) and while\n// contenteditable is temporarily stripped during drag/key operations\n// ([data-wascontenteditable]).\nconst SPIN_BUTTON_SELECTOR = '[contenteditable], [data-wascontenteditable]';\n\nfunction getClosestContentEditable(node: Node): HTMLElement | null {\n return node.nodeType === Node.TEXT_NODE\n ? (node as Text).parentElement?.closest<HTMLElement>(\n SPIN_BUTTON_SELECTOR,\n ) ?? null\n : (node as Element).closest?.(SPIN_BUTTON_SELECTOR) ?? null;\n}\n\nfunction isExpressionNode(node: Node | null): boolean {\n return (\n node !== null &&\n getClosestContentEditable(node)?.getAttribute('role') === 'textbox'\n );\n}\n\n/**\n * Resolve a selection endpoint node to its containing spinbutton or, when the\n * endpoint lies on a separator between spinbuttons, to the nearest spinbutton.\n * Uses `[data-wascontenteditable]` to identify spinbuttons while contenteditable\n * is temporarily stripped during the drag, and falls back to the restored\n * `[contenteditable]` attribute afterwards.\n */\nfunction resolveSpinButton(node: Node, root: HTMLElement): HTMLElement | null {\n // Happy path: the node is inside a spinbutton.\n const direct = getClosestContentEditable(node);\n if (direct !== null) {\n return direct;\n }\n\n // Separator node: find the nearest preceding spinbutton in document order.\n return getNearestPrecedingSpinButton(node, root);\n}\n\n/**\n * When a drag ends on a separator (e.g. \"/\" or \".\"), the selection endpoint is\n * outside any spinbutton. Walk the contenteditable spinbuttons in document order\n * and return the one that immediately precedes the given node in document order.\n * Falls back to the first spinbutton when the node comes before all of them.\n */\nfunction getNearestPrecedingSpinButton(\n node: Node,\n root: HTMLElement,\n): HTMLElement | null {\n const spinButtons = Array.from(\n root.querySelectorAll<HTMLElement>(SPIN_BUTTON_SELECTOR),\n );\n if (spinButtons.length === 0) {\n return null;\n }\n\n let nearest: HTMLElement | null = null;\n for (const spinButton of spinButtons) {\n /*\n * compareDocumentPosition returns a bitmask that may vary depending on the browser and where the node lies\n * in the document; the bitwise & extracts the FOLLOWING bit regardless of other bits that may also be set.\n * e.g.:\n 0b000100 FOLLOWING\n | 0b010000 CONTAINED_BY\n ----------\n 0b010100 FOLLOWING | CONTAINED_BY (returned by compareDocumentPosition when node is a child of the spinButton)\n\n - node strictly after spinButton:\n 0b000100 FOLLOWING\n & 0b000100\n ----------\n 0b000100 \u2713\n\n - node is a child of spinButton:\n 0b010100 CONTAINED_BY | FOLLOWING\n & 0b000100\n ----------\n 0b000100 \u2713\n\n - node strictly before spinButton:\n 0b000010 PRECEDING\n & 0b000100\n ----------\n 0b000000 \u2717\n */\n const position = spinButton.compareDocumentPosition(node);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n nearest = spinButton;\n }\n }\n\n // If node precedes all spinbuttons, return the first one\n return nearest ?? spinButtons[0] ?? null;\n}\n\n/**\n * Determines whether a captured endpoint is truly inside spinbutton content.\n * Separator nodes and caret positions at spinbutton edges must preserve their\n * exact boundary instead of snapping to the whole spinbutton.\n */\nfunction isEndpointInsideSpinButtonContent(\n node: Node,\n offset: number,\n): boolean {\n const closest = getClosestContentEditable(node);\n if (!closest || closest.getAttribute('role') !== 'spinbutton') {\n return false;\n }\n\n const firstChild = closest.childNodes[0] ?? null;\n const leadingTextNode =\n firstChild?.nodeType === Node.TEXT_NODE\n ? firstChild\n : firstChild?.firstChild?.nodeType === Node.TEXT_NODE\n ? firstChild.firstChild\n : null;\n const isLeadingContentNode =\n node === firstChild ||\n node === leadingTextNode ||\n (node instanceof Element &&\n leadingTextNode !== null &&\n node.contains(leadingTextNode)) ||\n (node.nodeType === Node.TEXT_NODE &&\n firstChild instanceof Element &&\n firstChild.contains(node));\n const nodeLength =\n node.nodeType === Node.TEXT_NODE\n ? node.nodeValue?.length ?? 0\n : node.textContent?.length ?? 0;\n const isBoundaryOffset = offset === 0 || offset === nodeLength;\n\n return !(isLeadingContentNode && isBoundaryOffset);\n}\n\n/**\n * One entry in a spin-button undo snapshot.\n * Uses a stable inputRef + Map key pair instead of a direct handler reference\n * so that the undo step always resolves the *current* (post-re-render) handler.\n * @internal\n */\nexport type SpinButtonSnapshotEntry = {\n inputRef: RefObject<DateTimeInputRef>;\n key: Intl.DateTimeFormatPartTypes;\n previousText: string | null;\n};\n\ntype Entry = {\n inputRef: RefObject<DateTimeInputRef>;\n key: Intl.DateTimeFormatPartTypes;\n element: HTMLSpanElement;\n};\n\n/**\n * Inspects the spin buttons of the supplied inputs and returns a snapshot for\n * every spin button whose content overlaps the selected range.\n *\n * The snapshot captures the current `textContent` of each covered element so\n * it can later be passed to.\n * @internal\n */\nexport function buildSpinButtonSnapshot(\n anchorNode: Node | null,\n anchorOffset: number,\n focusNode: Node | null,\n focusOffset: number,\n inputRefs: RefObject<DateTimeInputRef>[],\n): SpinButtonSnapshotEntry[] {\n if (!anchorNode || !focusNode) {\n return [];\n }\n\n const anchorBeforeFocus =\n compareSelectionPoints(anchorNode, anchorOffset, focusNode, focusOffset) <=\n 0;\n const selectionStartNode = anchorBeforeFocus ? anchorNode : focusNode;\n const selectionStartOffset = anchorBeforeFocus ? anchorOffset : focusOffset;\n const selectionEndNode = anchorBeforeFocus ? focusNode : anchorNode;\n const selectionEndOffset = anchorBeforeFocus ? focusOffset : anchorOffset;\n\n const entries: Entry[] = [];\n for (const inputRef of inputRefs) {\n if (!inputRef.current) {\n continue;\n }\n\n for (const [\n key,\n handler,\n ] of inputRef.current.spinButtonHandlers.entries()) {\n const el = handler?.element.current;\n if (el) {\n entries.push({ inputRef, key, element: el });\n }\n }\n }\n\n return entries\n .filter(({ element }) =>\n selectionOverlapsSpinButton(\n selectionStartNode,\n selectionStartOffset,\n selectionEndNode,\n selectionEndOffset,\n element,\n ),\n )\n .map(({ inputRef, key, element }) => ({\n inputRef,\n key,\n previousText: element.textContent ?? null,\n }));\n}\n\n/**\n * Restores spin-button values from a previously captured snapshot.\n * For each entry the current handler is resolved via the stable `inputRef` +\n * Map key, so stale handler references from before a React re-render are never\n * used.\n * @internal\n */\nexport function restoreSpinButtonSnapshot(\n snapshot: SpinButtonSnapshotEntry[],\n): void {\n for (const { inputRef, key, previousText } of snapshot) {\n const handler = inputRef.current?.spinButtonHandlers.get(key);\n if (!handler) {\n continue;\n }\n\n if (handler.type === 'number') {\n // applyText updates DOM, internal state, and fires onChange atomically.\n handler.applyText(previousText ?? '', true);\n } else if (previousText !== null && previousText.length > 0) {\n // Write to DOM immediately to avoid a visual flash before re-render.\n if (handler.element.current) {\n handler.element.current.textContent = previousText;\n }\n // searchValue updates internal state and fires onChange.\n handler.searchValue(previousText.charAt(0), true);\n } else {\n handler.clearValue(true);\n }\n }\n}\n\n/**\n * After a bulk-clear, determines the expression value to apply for each affected input:\n * - **0 survivors** (all spin buttons cleared): resets the input to an empty expression (`\"\"`).\n * - **1 survivor** (exactly one spin button was outside the selection): carries its value\n * into expression mode via `setExpressionValue` rather than leaving a partial date.\n * - **2+ survivors** (partial deletion): leaves the remaining spin buttons as-is.\n *\n * **Must be called BEFORE the clear loop** so that textContent is read while\n * the DOM is still intact (TextSpinButton clears its DOM only on next render).\n * Returns a Map of inputRef \u2192 expression text for every input that qualifies.\n * After clearing, iterate the map and call `inputRef.current.setExpressionValue(text)`.\n * @internal\n */\nexport function findExpressionFallbacks(\n snapshot: SpinButtonSnapshotEntry[],\n): Map<RefObject<DateTimeInputRef>, string> {\n const result = new Map<RefObject<DateTimeInputRef>, string>();\n\n for (const inputRef of new Set(snapshot.map((e) => e.inputRef))) {\n if (!inputRef.current) {\n continue;\n }\n\n const clearedKeys = new Set(\n snapshot.filter((e) => e.inputRef === inputRef).map((e) => e.key),\n );\n\n // Collect the spin buttons that were NOT part of the deletion.\n const survivors = [...inputRef.current.spinButtonHandlers.entries()].filter(\n ([key]) => !clearedKeys.has(key),\n );\n\n if (survivors.length === 0) {\n // Everything was cleared \u2014 reset the input to an empty expression.\n result.set(inputRef, '');\n } else if (survivors.length === 1) {\n // Exactly one spin button survived \u2014 carry its value into expression mode.\n const [, handler] = survivors[0];\n const text = handler?.element.current?.textContent ?? '';\n if (text.length > 0) {\n result.set(inputRef, text);\n }\n }\n // 2+ survivors: partial deletion within the input, leave the spin buttons as-is.\n }\n\n return result;\n}\n\n/** Returns the spin-button handler for the first entry in a snapshot, or `undefined`.\n * Returns `undefined` when that entry is the first or second spin button in its\n * group \u2014 in those cases callers should fall back to expression-input focus.\n * @internal\n */\nexport function getFirstSnapshotHandler(snapshot: SpinButtonSnapshotEntry[]) {\n const first = snapshot[0];\n if (!first) {\n return undefined;\n }\n const spinButtonHandlers = first.inputRef.current?.spinButtonHandlers;\n if (!spinButtonHandlers) {\n return undefined;\n }\n\n // Count only entries belonging to the first inputRef so that a snapshot\n // spanning two inputs does not inflate the count and return a wrong result.\n const clearedInFirstInput = snapshot.filter(\n (e) => e.inputRef === first.inputRef,\n ).length;\n // It switches to relative input either when everything is cleared or when only the first spinbutton remains.\n const switchedToRelative = clearedInFirstInput >= spinButtonHandlers.size - 1;\n\n if (switchedToRelative) {\n return undefined;\n }\n\n return spinButtonHandlers.get(first.key);\n}\n\n/** Returns the spin-button handler for the last entry in a snapshot, or `undefined`.\n * Returns `undefined` when the last input's cleared count means it switched to\n * relative mode \u2014 callers should fall back to expression-input focus in that case.\n * @internal\n */\nexport function getLastSnapshotHandler(snapshot: SpinButtonSnapshotEntry[]) {\n const last = snapshot[snapshot.length - 1];\n if (!last) {\n return undefined;\n }\n const spinButtonHandlers = last.inputRef.current?.spinButtonHandlers;\n if (!spinButtonHandlers) {\n return undefined;\n }\n\n // Count only entries belonging to the last inputRef so that a snapshot\n // spanning two inputs does not inflate the count and return a wrong result.\n const clearedInLastInput = snapshot.filter(\n (e) => e.inputRef === last.inputRef,\n ).length;\n // It switches to relative input either when everything is cleared or when only the first spinbutton remains.\n const switchedToRelative = clearedInLastInput >= spinButtonHandlers.size - 1;\n\n if (switchedToRelative) {\n return undefined;\n }\n\n return spinButtonHandlers.get(last.key);\n}\n\n/**\n * Returns the first ref in `inputRefs` order that has an expression input to\n * focus after a bulk clear, considering both directly cleared expression inputs\n * and inputs that transitioned to expression mode via expressionFallbacks.\n * Using `inputRefs` order ensures focus lands on the leftmost affected input\n * even when the selection's anchor is in an already-empty expression input.\n * @internal\n */\nexport function findFirstExpressionFocusTarget(\n inputRefs: RefObject<DateTimeInputRef>[],\n affectedExpressionRefs: RefObject<DateTimeInputRef>[],\n expressionFallbacks: Map<RefObject<DateTimeInputRef>, string>,\n): RefObject<DateTimeInputRef> | undefined {\n const allAffected = new Set<RefObject<DateTimeInputRef>>([\n ...affectedExpressionRefs,\n ...expressionFallbacks.keys(),\n ]);\n return inputRefs.find((ref) => allAffected.has(ref));\n}\n\n/**\n * Returns the expression input element when the selection is non-collapsed but\n * covers only part of the text within a single expression input. In that case\n * the caller should handle the deletion explicitly rather than relying on the\n * bulk-clear path or native browser behaviour.\n * Returns null when the selection is not a partial single-expression selection.\n * @internal\n */\nexport function getPartialExpressionElement(\n selection: Selection,\n inputRefs: RefObject<DateTimeInputRef>[],\n): HTMLSpanElement | null {\n for (const ref of inputRefs) {\n const expressionElement = ref.current?.expressionInputRef;\n if (\n expressionElement &&\n expressionElement.contains(selection.anchorNode) &&\n expressionElement.contains(selection.focusNode) &&\n selection.toString().length < (expressionElement.textContent?.length ?? 0)\n ) {\n return expressionElement;\n }\n }\n return null;\n}\n\n/**\n * Returns expression boundaries touched by the current selection.\n * - Two different expressions: `[firstExpressionElement, lastExpressionElement]` in document order.\n * - Mixed boundary (one expression + one non-expression boundary): `[expressionElement, expressionElement]`.\n * - Otherwise: `null`.\n * @internal\n */\nexport function getCrossExpressionElements(\n selection: Selection,\n inputRefs: RefObject<DateTimeInputRef>[],\n): [HTMLSpanElement, HTMLSpanElement] | null {\n if (selection.rangeCount < 1) {\n return null;\n }\n\n const range = selection.getRangeAt(0);\n const startEl = inputRefs.find((ref) =>\n ref.current?.expressionInputRef?.contains(range.startContainer),\n )?.current?.expressionInputRef;\n const endEl = inputRefs.find((ref) =>\n ref.current?.expressionInputRef?.contains(range.endContainer),\n )?.current?.expressionInputRef;\n\n if (!startEl && !endEl) {\n return null;\n }\n\n if (startEl && !endEl) {\n return [startEl, startEl];\n }\n if (!startEl && endEl) {\n return [endEl, endEl];\n }\n\n if (!startEl || !endEl) {\n return null;\n }\n\n // A selection fully inside one expression is handled by the existing\n // single-expression paths (partial deletion or full bulk clear).\n if (startEl === endEl) {\n return null;\n }\n\n // Return in document order.\n const startFirst = !!(\n startEl.compareDocumentPosition(endEl) & Node.DOCUMENT_POSITION_FOLLOWING\n );\n return startFirst ? [startEl, endEl] : [endEl, startEl];\n}\n\n/**\n * Focuses an expression element and places the cursor at the given range,\n * or at the end of the element when no range is provided.\n * The data-restoring-selection guard tells the focus handler to skip selectAll().\n * @internal\n */\nexport function focusExpression(\n expressionElement: HTMLSpanElement,\n range?: Range,\n): void {\n const root = expressionElement.closest<HTMLElement>('.strato-inputgroup');\n root?.setAttribute('data-restoring-selection', '');\n expressionElement.focus();\n const sel = window.getSelection();\n if (sel) {\n if (!range) {\n range = document.createRange();\n range.selectNodeContents(expressionElement);\n range.collapse(false);\n }\n sel.removeAllRanges();\n sel.addRange(range);\n }\n root?.removeAttribute('data-restoring-selection');\n}\n\nfunction getOffsetWithinExpression(\n expressionElement: HTMLSpanElement,\n container: Node,\n offset: number,\n): number {\n const range = document.createRange();\n range.selectNodeContents(expressionElement);\n range.setEnd(container, offset);\n return range.toString().length;\n}\n\n/**\n * Deletes the selected range within a single expression input, collapses the\n * cursor to the deletion point, and fires an input event so the expression\n * handler can update React state.\n * @internal\n */\nexport function deletePartialExpression(\n selection: Selection,\n expressionElement: HTMLSpanElement,\n): void {\n const range = selection.getRangeAt(0);\n const text = expressionElement.textContent ?? '';\n\n const start = expressionElement.contains(range.startContainer)\n ? getOffsetWithinExpression(\n expressionElement,\n range.startContainer,\n range.startOffset,\n )\n : 0;\n const end = expressionElement.contains(range.endContainer)\n ? getOffsetWithinExpression(\n expressionElement,\n range.endContainer,\n range.endOffset,\n )\n : text.length;\n\n const from = Math.min(start, end);\n const to = Math.max(start, end);\n const nextText = `${text.slice(0, from)}${text.slice(to)}`;\n expressionElement.textContent = nextText;\n\n const nextRange = document.createRange();\n const node = expressionElement.firstChild;\n if (node && node.nodeType === Node.TEXT_NODE) {\n nextRange.setStart(node, Math.min(from, nextText.length));\n } else {\n nextRange.setStart(expressionElement, 0);\n }\n nextRange.collapse(true);\n\n focusExpression(expressionElement, nextRange);\n expressionElement.dispatchEvent(new InputEvent('input', { bubbles: true }));\n}\n\n/**\n * Plans a bulk clear operation by analyzing the current selection\n * and computing everything needed to clear affected spin buttons and expression inputs.\n * Must be called before any DOM writes so that textContent is still intact.\n * @internal\n */\nexport function planBulkClear(\n selection: Selection,\n inputRefs: RefObject<DateTimeInputRef>[],\n): {\n snapshot: SpinButtonSnapshotEntry[];\n affectedExpressionRefs: RefObject<DateTimeInputRef>[];\n expressionFallbacks: Map<RefObject<DateTimeInputRef>, string>;\n clearedExpressions: Array<{\n inputRef: RefObject<DateTimeInputRef>;\n previousText: string;\n }>;\n} {\n const affectedExpressionRefs = inputRefs.filter((ref) => {\n const expressionInputRef = ref.current?.expressionInputRef;\n return (\n expressionInputRef &&\n (expressionInputRef.contains(selection.anchorNode) ||\n expressionInputRef.contains(selection.focusNode))\n );\n });\n\n // Capture raw expression values before clearing (needed for undo).\n // Use inputRef.value (raw expression, e.g. \"now()-2h\") rather than\n // expressionInputRef.textContent (display text, e.g. \"-2h\") so that\n // setExpressionValue can re-parse and reformat it correctly on undo.\n const clearedExpressions = affectedExpressionRefs.map((ref) => ({\n inputRef: ref,\n previousText:\n ref.current?.inputRef?.value ??\n ref.current?.expressionInputRef?.textContent ??\n '',\n }));\n\n const anchorInExpression = affectedExpressionRefs.some((ref) =>\n ref.current?.expressionInputRef?.contains(selection.anchorNode),\n );\n const focusInExpression = affectedExpressionRefs.some((ref) =>\n ref.current?.expressionInputRef?.contains(selection.focusNode),\n );\n\n // Skip buildSpinButtonSnapshot only when BOTH boundaries are inside expression inputs.\n const snapshot =\n anchorInExpression && focusInExpression\n ? []\n : buildSpinButtonSnapshot(\n selection.anchorNode,\n selection.anchorOffset,\n selection.focusNode,\n selection.focusOffset,\n inputRefs,\n );\n\n return {\n snapshot,\n affectedExpressionRefs,\n expressionFallbacks: findExpressionFallbacks(snapshot),\n clearedExpressions,\n };\n}\n\n/**\n * Deletes the selected portion across two expression inputs using two separate\n * single-element ranges. Using one cross-element range with deleteContents()\n * does not modify text inside contenteditable boundaries; splitting into two\n * intra-element ranges avoids that limitation entirely.\n * Focus is placed at the end of whatever text remains in the first expression.\n * @internal\n */\nexport function deleteCrossExpressionPartial(\n selection: Selection,\n [firstExpressionElement, lastExpressionElement]: [\n HTMLSpanElement,\n HTMLSpanElement,\n ],\n): void {\n if (firstExpressionElement === lastExpressionElement) {\n deletePartialExpression(selection, firstExpressionElement);\n return;\n }\n\n const { startContainer, startOffset, endContainer, endOffset } =\n selection.getRangeAt(0);\n\n // Delete from the selection start to the end of firstExpressionElement.\n const fromRange = document.createRange();\n fromRange.setStart(startContainer, startOffset);\n fromRange.setEnd(\n firstExpressionElement,\n firstExpressionElement.childNodes.length,\n );\n fromRange.deleteContents();\n\n // Delete from the start of lastExpressionElement to the selection end.\n const toRange = document.createRange();\n toRange.setStart(lastExpressionElement, 0);\n toRange.setEnd(endContainer, endOffset);\n toRange.deleteContents();\n\n // Place cursor at the end of whatever text remains in the first expression.\n selection.removeAllRanges();\n focusExpression(firstExpressionElement);\n\n firstExpressionElement.dispatchEvent(\n new InputEvent('input', { bubbles: true }),\n );\n lastExpressionElement.dispatchEvent(\n new InputEvent('input', { bubbles: true }),\n );\n}\n\n/**\n * Returns the keyup callback passed to `removeContentEditable` after a\n * bulk-clear (cut or delete). Once the key is released and contenteditable\n * is restored, it decides where focus lands:\n * - If `firstElement` is `undefined` (the selection started at a leading spin\n * button), focus the first affected expression input.\n * - Otherwise keep focus on that spin button.\n * @internal\n */\nexport function restoreFocusAfterBulkClear(\n firstSpinButtonHandler: SpinButtonHandler | null | undefined,\n focusTarget: RefObject<DateTimeInputRef> | undefined,\n) {\n if (firstSpinButtonHandler) {\n firstSpinButtonHandler.element.current?.focus();\n firstSpinButtonHandler.selectAll();\n return;\n }\n\n const expressionElement = focusTarget?.current?.expressionInputRef;\n if (expressionElement) {\n requestAnimationFrame(() => {\n focusExpression(expressionElement);\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "AAEA,YAAY,YAAY;AAExB,SAAS,uBAAuB;AAIzB,SAAS,0BAA0B,UAAyB;AAIjE,QAAM,uBAAuB,SAAS,eAAe;AAAA,IACnD,IAAI,OAAO,aAAa;AAAA,EAC1B;AACA,QAAM,mBAAmB,sBAAsB,aAAa,gBAAgB;AAC5E,QAAM,0BACJ,SAAS,eAAe,QAAQ,kBAAkB;AAIpD,MAAI,yBAAyB,yBAAyB;AACpD,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,yBAAyB,aAAa,gBAAgB;AAE5E,SAAO,kBAAkB;AAC3B;AAGA,SAAS,iBAAiB,MAAmB,MAAyB;AACpE,QAAM,SAAS,SAAS,iBAAiB,MAAM,WAAW,WAAW,IAAI;AAEzE,MAAI,UAAU,OAAO,UAAU;AAC/B,MAAI,QAAQ;AACZ,SAAO,SAAS;AACd,QAAI,OAAO;AAIT,UAAI,0BAA0B,OAAO,GAAG;AACtC,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,YAAY,MAAM;AACpB,cAAQ;AAAA,IACV;AAEA,cAAU,OAAO,aAAa;AAAA,EAChC;AAEA,SAAO;AACT;AAGA,SAAS,aAAa,MAAmB,MAAyB;AAChE,QAAM,SAAS,SAAS,iBAAiB,MAAM,WAAW,WAAW,IAAI;AAEzE,MAAI,UAAU,OAAO,SAAS;AAC9B,MAAI,QAAQ;AAEZ,SAAO,SAAS;AACd,QAAI,OAAO;AAIT,UAAI,0BAA0B,OAAO,GAAG;AACtC,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,YAAY,MAAM;AACpB,cAAQ;AAAA,IACV;AACA,cAAU,OAAO,SAAS;AAAA,EAC5B;AAEA,SAAO;AACT;AAGA,SAAS,0BACP,MACA,MACA,QACuC;AACvC,MACE,KAAK,aAAa,KAAK,aACvB,KAAK,aACL,SAAS,KAAK,UAAU,UACxB,0BAA0B,IAAI,GAC9B;AACA,WAAO,EAAE,MAAM,QAAQ,SAAS,EAAE;AAAA,EACpC;AAKA,MAAI,KAAK,aAAa,KAAK,WAAW;AACpC,UAAM,gBAAgB,KAAK,WAAW,MAAM;AAC5C,QAAI,eAAe;AACjB,YAAM,SAAS,SAAS;AAAA,QACtB;AAAA,QACA,WAAW;AAAA,QACX;AAAA,MACF;AACA,YAAM,YACJ,OAAO,WAAW,MACjB,cAAc,aAAa,KAAK,YAAY,gBAAgB;AAC/D,UACE,cACC,0BAA0B,SAAS,KAClC,0BAA0B,SAAS,MAAM,OAC3C;AACA,eAAO,EAAE,MAAM,WAAW,QAAQ,EAAE;AAAA,MACtC;AAAA,IACF;AAKA,QAAI,SAAS,GAAG;AACd,YAAM,gBAAgB,KAAK,WAAW,SAAS,CAAC;AAChD,UAAI,eAAe;AACjB,cAAM,SAAS,SAAS;AAAA,UACtB;AAAA,UACA,WAAW;AAAA,UACX;AAAA,QACF;AACA,cAAM,WACJ,OAAO,UAAU,MAChB,cAAc,aAAa,KAAK,YAAY,gBAAgB;AAC/D,YAAI,UAAU;AACZ,cAAI,mBAAgC,aAAa,MAAM,QAAQ;AAC/D,iBACE,qBAAqB,QACrB,0BAA0B,gBAAgB,MAAM,MAChD;AACA,+BAAmB,aAAa,MAAM,gBAAgB;AAAA,UACxD;AACA,cAAI,kBAAkB;AACpB,mBAAO,EAAE,MAAM,kBAAkB,QAAQ,EAAE;AAAA,UAC7C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAKA,MAAI,OAAoB,aAAa,MAAM,IAAI;AAI/C,MACE,iBAAiB,IAAI,KACrB,QACA,0BAA0B,IAAI,MAAM,MACpC;AACA,UAAM,mBAAgC,aAAa,MAAM,IAAI;AAC7D,QAAI,iBAAiB,gBAAgB,GAAG;AACtC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,MAAM,MAAM,QAAQ,EAAE;AACjC;AAGA,SAAS,8BACP,MACA,MACA,QACuC;AACvC,MACE,KAAK,aAAa,KAAK,aACvB,SAAS,KACT,0BAA0B,IAAI,GAC9B;AACA,WAAO,EAAE,MAAM,QAAQ,SAAS,EAAE;AAAA,EACpC;AAMA,MAAI,KAAK,aAAa,KAAK,aAAa,SAAS,GAAG;AAClD,UAAM,gBAAgB,KAAK,WAAW,SAAS,CAAC;AAChD,QAAI,eAAe;AACjB,YAAM,SAAS,SAAS;AAAA,QACtB;AAAA,QACA,WAAW;AAAA,QACX;AAAA,MACF;AACA,YAAM,WACJ,OAAO,UAAU,MAChB,cAAc,aAAa,KAAK,YAAY,gBAAgB;AAC/D,UACE,YACA,SAAS,cACR,0BAA0B,QAAQ,KACjC,0BAA0B,QAAQ,MAAM,OAC1C;AACA,eAAO,EAAE,MAAM,UAAU,QAAQ,SAAS,UAAU,SAAS,EAAE;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAIA,MAAI,OAAoB,iBAAiB,MAAM,IAAI;AACnD,MACE,iBAAiB,IAAI,KACrB,QACA,0BAA0B,IAAI,MAAM,MACpC;AACA,UAAM,uBAAoC,iBAAiB,MAAM,IAAI;AACrE,QAAI,iBAAiB,oBAAoB,GAAG;AAC1C,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI,CAAC,QAAQ,KAAK,cAAc,MAAM;AACpC,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,MAAM,MAAM,QAAQ,KAAK,UAAU,SAAS,EAAE;AACzD;AAGA,SAAS,2BACP,MACuC;AACvC,QAAM,SAAS,SAAS,iBAAiB,MAAM,WAAW,WAAW,IAAI;AACzE,MAAI,UAAU,OAAO,WAAW;AAChC,SAAO,YAAY,MAAM;AAEvB,QAAI,0BAA0B,OAAO,GAAG;AACtC,aAAO,EAAE,MAAM,SAAS,QAAQ,EAAE;AAAA,IACpC;AACA,cAAU,OAAO,SAAS;AAAA,EAC5B;AACA,SAAO;AACT;AAGA,SAAS,0BACP,MACuC;AACvC,QAAM,SAAS,SAAS,iBAAiB,MAAM,WAAW,WAAW,IAAI;AACzE,MAAI,UAAU,OAAO,UAAU;AAC/B,SAAO,YAAY,MAAM;AAEvB,QAAI,0BAA0B,OAAO,GAAG;AACtC,aAAO,EAAE,MAAM,SAAS,QAAQ,QAAQ,WAAW,UAAU,EAAE;AAAA,IACjE;AACA,cAAU,OAAO,aAAa;AAAA,EAChC;AACA,SAAO;AACT;AAEA,SAAS,uBACP,WACA,aACA,YACA,cACQ;AACR,MAAI,cAAc,YAAY;AAC5B,WAAO,cAAc;AAAA,EACvB;AAEA,QAAM,aAAa,SAAS,YAAY;AACxC,aAAW,SAAS,WAAW,WAAW;AAC1C,aAAW,SAAS,IAAI;AAExB,QAAM,cAAc,SAAS,YAAY;AACzC,cAAY,SAAS,YAAY,YAAY;AAC7C,cAAY,SAAS,IAAI;AAEzB,SAAO,WAAW,sBAAsB,MAAM,gBAAgB,WAAW;AAC3E;AAEA,SAAS,4BACP,oBACA,sBACA,kBACA,oBACA,YACS;AACT,QAAM,kBAAkB,2BAA2B,UAAU;AAC7D,QAAM,gBAAgB,0BAA0B,UAAU;AAE1D,MAAI,CAAC,mBAAmB,CAAC,eAAe;AACtC,WAAO;AAAA,EACT;AAEA,SACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,cAAc;AAAA,EAChB,IAAI,KACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,EAClB,IAAI;AAER;AAWO,SAAS,sBACd,aACA,mBACA,WACA,iBACM;AAGN,cAAY,aAAa,4BAA4B,EAAE;AAEvD,QAAM,mBACJ,YAAY,iBAA8B,mBAAmB;AAC/D,aAAW,YAAY,kBAAkB;AACvC,UAAM,gBAAgB,SAAS,aAAa,iBAAiB,KAAK;AAClE,aAAS,gBAAgB,iBAAiB;AAC1C,aAAS,QAAQ,qBAAqB;AAMtC,QAAI,SAAS,aAAa,UAAU,GAAG;AACrC,eAAS,QAAQ,cAAc,SAAS,aAAa,UAAU,KAAK;AACpE,eAAS,gBAAgB,UAAU;AAAA,IACrC;AAAA,EACF;AAEA,QAAM,SAAS,IAAI,gBAAgB;AAEnC,oBAAkB;AAAA,IAChB;AAAA,IACA,CAAC,UAAiB;AAChB,YAAM,sBAAsB,YAAY;AAAA,QACtC;AAAA,MACF;AAKA,YAAM,yBAAyB,OAAO,aAAa;AACnD,YAAM,qBAAqB,wBAAwB,cAAc;AACjE,YAAM,uBAAuB,wBAAwB,gBAAgB;AACrE,YAAM,oBAAoB,wBAAwB,aAAa;AAC/D,YAAM,sBAAsB,wBAAwB,eAAe;AAEnE,YAAM,2BACJ,2BAA2B,QAC3B,uBAAuB,SAAS,EAAE,SAAS,MAC1C,uBAAuB,qBACrB,uBAAuB,QACtB,uBAAuB,qBACvB,yBAAyB,uBACzB,oBAAoB,aAAa,KAAK;AAE5C,iBAAW,YAAY,qBAAqB;AAC1C,cAAM,gBAAgB,SAAS,aAAa,yBAAyB;AACrE,YAAI,kBAAkB,MAAM;AAC1B,mBAAS,aAAa,mBAAmB,aAAa;AAAA,QACxD;AACA,iBAAS,gBAAgB,yBAAyB;AAElD,cAAM,cAAc,SAAS,aAAa,kBAAkB;AAC5D,YAAI,gBAAgB,MAAM;AACxB,mBAAS,aAAa,YAAY,WAAW;AAC7C,mBAAS,gBAAgB,kBAAkB;AAAA,QAC7C;AAAA,MACF;AAQA,UAAI,4BAA4B,sBAAsB,mBAAmB;AAEvE,cAAM,yBAAyB;AAAA,UAC7B;AAAA,UACA;AAAA,QACF;AACA,cAAM,wBAAwB;AAAA,UAC5B;AAAA,UACA;AAAA,QACF;AAGA,cAAM,mBAAmB,yBACrB,kBAAkB,oBAAoB,WAAW,IACjD;AACJ,cAAM,kBAAkB,wBACpB,kBAAkB,mBAAmB,WAAW,IAChD;AAEJ,cAAM,oBACJ;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,KAAK;AAEP,cAAM,YACJ,oBACA,iBAAiB,aAAa,MAAM,MAAM,eACtC,oBACE,2BAA2B,gBAAgB,IAC3C,0BAA0B,gBAAgB,IAC5C,EAAE,MAAM,oBAAoB,QAAQ,qBAAqB;AAC/D,cAAM,WACJ,mBACA,gBAAgB,aAAa,MAAM,MAAM,eACrC,oBACE,0BAA0B,eAAe,IACzC,2BAA2B,eAAe,IAC5C,EAAE,MAAM,mBAAmB,QAAQ,oBAAoB;AAE7D,YAAI,aAAa,UAAU;AACzB,cAAI;AACF,mBACG,aAAa,GACZ;AAAA,cACA,UAAU;AAAA,cACV,UAAU;AAAA,cACV,SAAS;AAAA,cACT,SAAS;AAAA,YACX;AAAA,UACJ,SAAS,OAAO;AACd,kBAAM,SAAS,gBAAgB,qBAAqB;AACpD,mBAAO;AAAA,cACL;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF,OAAO;AAGL,YAAI,sBAAsB,mBAAmB;AAC3C,cAAI;AACF,mBACG,aAAa,GACZ;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACJ,SAAS,OAAO;AACd,kBAAM,SAAS,gBAAgB,qBAAqB;AACpD,mBAAO;AAAA,cACL;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAEA,wBAAkB,OAAO,wBAAwB;AAEjD,kBAAY,gBAAgB,0BAA0B;AAEtD,aAAO,MAAM;AAAA,IACf;AAAA,IACA,EAAE,QAAQ,OAAO,OAAO;AAAA,EAC1B;AACF;AAQO,SAAS,gBACd,KACM;AACN,QAAM,YAAY,OAAO,aAAa;AACtC,MACE,cAAc,QACd,UAAU,eAAe,QACzB,UAAU,cAAc,QACxB,UAAU,aAAa,GACvB;AACA;AAAA,EACF;AAEA,QAAM,aAAa,UAAU;AAC7B,QAAM,eAAe,UAAU;AAC/B,QAAM,YAAY,UAAU;AAC5B,QAAM,cAAc,UAAU;AAE9B,MAAI,UAAiD;AAErD,QAAM,OACJ,UAAU,eAAe,QAAwB,oBAAoB;AACvE,MAAI,SAAS,QAAQ,SAAS,QAAW;AACvC;AAAA,EACF;AAEA,MAAI,QAAQ,aAAa;AACvB,cAAU,8BAA8B,MAAM,WAAW,WAAW;AAAA,EACtE,WAAW,QAAQ,cAAc;AAC/B,cAAU,0BAA0B,MAAM,WAAW,WAAW;AAAA,EAClE,WAAW,QAAQ,QAAQ;AACzB,cAAU,2BAA2B,IAAI;AAAA,EAC3C,WAAW,QAAQ,OAAO;AACxB,cAAU,0BAA0B,IAAI;AAAA,EAC1C;AACA,MAAI,SAAS;AAOX,SAAK,aAAa,4BAA4B,EAAE;AAChD,QAAI;AACF,gBAAU;AAAA,QACR;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,IACF,SAAS,OAAO;AACd,YAAM,SAAS,gBAAgB,qBAAqB;AACpD,aAAO,KAAK,oDAAoD,KAAK;AAAA,IACvE;AACA,SAAK,gBAAgB,0BAA0B;AAK/C,SAAK,aAAa,wBAAwB,EAAE;AAAA,EAC9C;AACF;AAMO,SAAS,uBAA6B;AAC3C,QAAM,YAAY,OAAO,aAAa;AACtC,MACE,cAAc,QACd,UAAU,cAAc,QACxB,UAAU,aAAa,GACvB;AACA;AAAA,EACF;AAEA,QAAM,YAAY,UAAU;AAE5B,QAAM,OACJ,UAAU,eAAe,QAAwB,oBAAoB;AACvE,MAAI,SAAS,QAAQ,SAAS,QAAW;AACvC;AAAA,EACF;AAQA,OAAK,aAAa,4BAA4B,EAAE;AAChD,OAAK,MAAM;AAEX,QAAM,gBAAgB,2BAA2B,IAAI;AACrD,QAAM,eAAe,0BAA0B,IAAI;AAEnD,MAAI,CAAC,iBAAiB,CAAC,cAAc;AACnC,SAAK,gBAAgB,0BAA0B;AAC/C;AAAA,EACF;AAEA,MAAI;AACF,cAAU;AAAA,MACR,cAAc;AAAA,MACd,cAAc;AAAA,MACd,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,EACF,SAAS,OAAO;AACd,UAAM,SAAS,gBAAgB,qBAAqB;AACpD,WAAO;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACA,OAAK,gBAAgB,0BAA0B;AACjD;AAKA,MAAM,uBAAuB;AAE7B,SAAS,0BAA0B,MAAgC;AACjE,SAAO,KAAK,aAAa,KAAK,YACzB,KAAc,eAAe;AAAA,IAC5B;AAAA,EACF,KAAK,OACJ,KAAiB,UAAU,oBAAoB,KAAK;AAC3D;AAEA,SAAS,iBAAiB,MAA4B;AACpD,SACE,SAAS,QACT,0BAA0B,IAAI,GAAG,aAAa,MAAM,MAAM;AAE9D;AASA,SAAS,kBAAkB,MAAY,MAAuC;AAE5E,QAAM,SAAS,0BAA0B,IAAI;AAC7C,MAAI,WAAW,MAAM;AACnB,WAAO;AAAA,EACT;AAGA,SAAO,8BAA8B,MAAM,IAAI;AACjD;AAQA,SAAS,8BACP,MACA,MACoB;AACpB,QAAM,cAAc,MAAM;AAAA,IACxB,KAAK,iBAA8B,oBAAoB;AAAA,EACzD;AACA,MAAI,YAAY,WAAW,GAAG;AAC5B,WAAO;AAAA,EACT;AAEA,MAAI,UAA8B;AAClC,aAAW,cAAc,aAAa;AA4BpC,UAAM,WAAW,WAAW,wBAAwB,IAAI;AACxD,QAAI,WAAW,KAAK,6BAA6B;AAC/C,gBAAU;AAAA,IACZ;AAAA,EACF;AAGA,SAAO,WAAW,YAAY,CAAC,KAAK;AACtC;AAOA,SAAS,kCACP,MACA,QACS;AACT,QAAM,UAAU,0BAA0B,IAAI;AAC9C,MAAI,CAAC,WAAW,QAAQ,aAAa,MAAM,MAAM,cAAc;AAC7D,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,QAAQ,WAAW,CAAC,KAAK;AAC5C,QAAM,kBACJ,YAAY,aAAa,KAAK,YAC1B,aACA,YAAY,YAAY,aAAa,KAAK,YAC1C,WAAW,aACX;AACN,QAAM,uBACJ,SAAS,cACT,SAAS,mBACR,gBAAgB,WACf,oBAAoB,QACpB,KAAK,SAAS,eAAe,KAC9B,KAAK,aAAa,KAAK,aACtB,sBAAsB,WACtB,WAAW,SAAS,IAAI;AAC5B,QAAM,aACJ,KAAK,aAAa,KAAK,YACnB,KAAK,WAAW,UAAU,IAC1B,KAAK,aAAa,UAAU;AAClC,QAAM,mBAAmB,WAAW,KAAK,WAAW;AAEpD,SAAO,EAAE,wBAAwB;AACnC;AA4BO,SAAS,wBACd,YACA,cACA,WACA,aACA,WAC2B;AAC3B,MAAI,CAAC,cAAc,CAAC,WAAW;AAC7B,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,oBACJ,uBAAuB,YAAY,cAAc,WAAW,WAAW,KACvE;AACF,QAAM,qBAAqB,oBAAoB,aAAa;AAC5D,QAAM,uBAAuB,oBAAoB,eAAe;AAChE,QAAM,mBAAmB,oBAAoB,YAAY;AACzD,QAAM,qBAAqB,oBAAoB,cAAc;AAE7D,QAAM,UAAmB,CAAC;AAC1B,aAAW,YAAY,WAAW;AAChC,QAAI,CAAC,SAAS,SAAS;AACrB;AAAA,IACF;AAEA,eAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF,KAAK,SAAS,QAAQ,mBAAmB,QAAQ,GAAG;AAClD,YAAM,KAAK,SAAS,QAAQ;AAC5B,UAAI,IAAI;AACN,gBAAQ,KAAK,EAAE,UAAU,KAAK,SAAS,GAAG,CAAC;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAEA,SAAO,QACJ;AAAA,IAAO,CAAC,EAAE,QAAQ,MACjB;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,EACC,IAAI,CAAC,EAAE,UAAU,KAAK,QAAQ,OAAO;AAAA,IACpC;AAAA,IACA;AAAA,IACA,cAAc,QAAQ,eAAe;AAAA,EACvC,EAAE;AACN;AASO,SAAS,0BACd,UACM;AACN,aAAW,EAAE,UAAU,KAAK,aAAa,KAAK,UAAU;AACtD,UAAM,UAAU,SAAS,SAAS,mBAAmB,IAAI,GAAG;AAC5D,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AAEA,QAAI,QAAQ,SAAS,UAAU;AAE7B,cAAQ,UAAU,gBAAgB,IAAI,IAAI;AAAA,IAC5C,WAAW,iBAAiB,QAAQ,aAAa,SAAS,GAAG;AAE3D,UAAI,QAAQ,QAAQ,SAAS;AAC3B,gBAAQ,QAAQ,QAAQ,cAAc;AAAA,MACxC;AAEA,cAAQ,YAAY,aAAa,OAAO,CAAC,GAAG,IAAI;AAAA,IAClD,OAAO;AACL,cAAQ,WAAW,IAAI;AAAA,IACzB;AAAA,EACF;AACF;AAeO,SAAS,wBACd,UAC0C;AAC1C,QAAM,SAAS,oBAAI,IAAyC;AAE5D,aAAW,YAAY,IAAI,IAAI,SAAS,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG;AAC/D,QAAI,CAAC,SAAS,SAAS;AACrB;AAAA,IACF;AAEA,UAAM,cAAc,IAAI;AAAA,MACtB,SAAS,OAAO,CAAC,MAAM,EAAE,aAAa,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG;AAAA,IAClE;AAGA,UAAM,YAAY,CAAC,GAAG,SAAS,QAAQ,mBAAmB,QAAQ,CAAC,EAAE;AAAA,MACnE,CAAC,CAAC,GAAG,MAAM,CAAC,YAAY,IAAI,GAAG;AAAA,IACjC;AAEA,QAAI,UAAU,WAAW,GAAG;AAE1B,aAAO,IAAI,UAAU,EAAE;AAAA,IACzB,WAAW,UAAU,WAAW,GAAG;AAEjC,YAAM,CAAC,EAAE,OAAO,IAAI,UAAU,CAAC;AAC/B,YAAM,OAAO,SAAS,QAAQ,SAAS,eAAe;AACtD,UAAI,KAAK,SAAS,GAAG;AACnB,eAAO,IAAI,UAAU,IAAI;AAAA,MAC3B;AAAA,IACF;AAAA,EAEF;AAEA,SAAO;AACT;AAOO,SAAS,wBAAwB,UAAqC;AAC3E,QAAM,QAAQ,SAAS,CAAC;AACxB,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AACA,QAAM,qBAAqB,MAAM,SAAS,SAAS;AACnD,MAAI,CAAC,oBAAoB;AACvB,WAAO;AAAA,EACT;AAIA,QAAM,sBAAsB,SAAS;AAAA,IACnC,CAAC,MAAM,EAAE,aAAa,MAAM;AAAA,EAC9B,EAAE;AAEF,QAAM,qBAAqB,uBAAuB,mBAAmB,OAAO;AAE5E,MAAI,oBAAoB;AACtB,WAAO;AAAA,EACT;AAEA,SAAO,mBAAmB,IAAI,MAAM,GAAG;AACzC;AAOO,SAAS,uBAAuB,UAAqC;AAC1E,QAAM,OAAO,SAAS,SAAS,SAAS,CAAC;AACzC,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AACA,QAAM,qBAAqB,KAAK,SAAS,SAAS;AAClD,MAAI,CAAC,oBAAoB;AACvB,WAAO;AAAA,EACT;AAIA,QAAM,qBAAqB,SAAS;AAAA,IAClC,CAAC,MAAM,EAAE,aAAa,KAAK;AAAA,EAC7B,EAAE;AAEF,QAAM,qBAAqB,sBAAsB,mBAAmB,OAAO;AAE3E,MAAI,oBAAoB;AACtB,WAAO;AAAA,EACT;AAEA,SAAO,mBAAmB,IAAI,KAAK,GAAG;AACxC;AAUO,SAAS,+BACd,WACA,wBACA,qBACyC;AACzC,QAAM,cAAc,oBAAI,IAAiC;AAAA,IACvD,GAAG;AAAA,IACH,GAAG,oBAAoB,KAAK;AAAA,EAC9B,CAAC;AACD,SAAO,UAAU,KAAK,CAAC,QAAQ,YAAY,IAAI,GAAG,CAAC;AACrD;AAUO,SAAS,4BACd,WACA,WACwB;AACxB,aAAW,OAAO,WAAW;AAC3B,UAAM,oBAAoB,IAAI,SAAS;AACvC,QACE,qBACA,kBAAkB,SAAS,UAAU,UAAU,KAC/C,kBAAkB,SAAS,UAAU,SAAS,KAC9C,UAAU,SAAS,EAAE,UAAU,kBAAkB,aAAa,UAAU,IACxE;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AASO,SAAS,2BACd,WACA,WAC2C;AAC3C,MAAI,UAAU,aAAa,GAAG;AAC5B,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,UAAU,WAAW,CAAC;AACpC,QAAM,UAAU,UAAU;AAAA,IAAK,CAAC,QAC9B,IAAI,SAAS,oBAAoB,SAAS,MAAM,cAAc;AAAA,EAChE,GAAG,SAAS;AACZ,QAAM,QAAQ,UAAU;AAAA,IAAK,CAAC,QAC5B,IAAI,SAAS,oBAAoB,SAAS,MAAM,YAAY;AAAA,EAC9D,GAAG,SAAS;AAEZ,MAAI,CAAC,WAAW,CAAC,OAAO;AACtB,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,CAAC,OAAO;AACrB,WAAO,CAAC,SAAS,OAAO;AAAA,EAC1B;AACA,MAAI,CAAC,WAAW,OAAO;AACrB,WAAO,CAAC,OAAO,KAAK;AAAA,EACtB;AAEA,MAAI,CAAC,WAAW,CAAC,OAAO;AACtB,WAAO;AAAA,EACT;AAIA,MAAI,YAAY,OAAO;AACrB,WAAO;AAAA,EACT;AAGA,QAAM,aAAa,CAAC,EAClB,QAAQ,wBAAwB,KAAK,IAAI,KAAK;AAEhD,SAAO,aAAa,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,OAAO;AACxD;AAQO,SAAS,gBACd,mBACA,OACM;AACN,QAAM,OAAO,kBAAkB,QAAqB,oBAAoB;AACxE,QAAM,aAAa,4BAA4B,EAAE;AACjD,oBAAkB,MAAM;AACxB,QAAM,MAAM,OAAO,aAAa;AAChC,MAAI,KAAK;AACP,QAAI,CAAC,OAAO;AACV,cAAQ,SAAS,YAAY;AAC7B,YAAM,mBAAmB,iBAAiB;AAC1C,YAAM,SAAS,KAAK;AAAA,IACtB;AACA,QAAI,gBAAgB;AACpB,QAAI,SAAS,KAAK;AAAA,EACpB;AACA,QAAM,gBAAgB,0BAA0B;AAClD;AAEA,SAAS,0BACP,mBACA,WACA,QACQ;AACR,QAAM,QAAQ,SAAS,YAAY;AACnC,QAAM,mBAAmB,iBAAiB;AAC1C,QAAM,OAAO,WAAW,MAAM;AAC9B,SAAO,MAAM,SAAS,EAAE;AAC1B;AAQO,SAAS,wBACd,WACA,mBACM;AACN,QAAM,QAAQ,UAAU,WAAW,CAAC;AACpC,QAAM,OAAO,kBAAkB,eAAe;AAE9C,QAAM,QAAQ,kBAAkB,SAAS,MAAM,cAAc,IACzD;AAAA,IACE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR,IACA;AACJ,QAAM,MAAM,kBAAkB,SAAS,MAAM,YAAY,IACrD;AAAA,IACE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR,IACA,KAAK;AAET,QAAM,OAAO,KAAK,IAAI,OAAO,GAAG;AAChC,QAAM,KAAK,KAAK,IAAI,OAAO,GAAG;AAC9B,QAAM,WAAW,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;AACxD,oBAAkB,cAAc;AAEhC,QAAM,YAAY,SAAS,YAAY;AACvC,QAAM,OAAO,kBAAkB;AAC/B,MAAI,QAAQ,KAAK,aAAa,KAAK,WAAW;AAC5C,cAAU,SAAS,MAAM,KAAK,IAAI,MAAM,SAAS,MAAM,CAAC;AAAA,EAC1D,OAAO;AACL,cAAU,SAAS,mBAAmB,CAAC;AAAA,EACzC;AACA,YAAU,SAAS,IAAI;AAEvB,kBAAgB,mBAAmB,SAAS;AAC5C,oBAAkB,cAAc,IAAI,WAAW,SAAS,EAAE,SAAS,KAAK,CAAC,CAAC;AAC5E;AAQO,SAAS,cACd,WACA,WASA;AACA,QAAM,yBAAyB,UAAU,OAAO,CAAC,QAAQ;AACvD,UAAM,qBAAqB,IAAI,SAAS;AACxC,WACE,uBACC,mBAAmB,SAAS,UAAU,UAAU,KAC/C,mBAAmB,SAAS,UAAU,SAAS;AAAA,EAErD,CAAC;AAMD,QAAM,qBAAqB,uBAAuB,IAAI,CAAC,SAAS;AAAA,IAC9D,UAAU;AAAA,IACV,cACE,IAAI,SAAS,UAAU,SACvB,IAAI,SAAS,oBAAoB,eACjC;AAAA,EACJ,EAAE;AAEF,QAAM,qBAAqB,uBAAuB;AAAA,IAAK,CAAC,QACtD,IAAI,SAAS,oBAAoB,SAAS,UAAU,UAAU;AAAA,EAChE;AACA,QAAM,oBAAoB,uBAAuB;AAAA,IAAK,CAAC,QACrD,IAAI,SAAS,oBAAoB,SAAS,UAAU,SAAS;AAAA,EAC/D;AAGA,QAAM,WACJ,sBAAsB,oBAClB,CAAC,IACD;AAAA,IACE,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,IACV;AAAA,EACF;AAEN,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,qBAAqB,wBAAwB,QAAQ;AAAA,IACrD;AAAA,EACF;AACF;AAUO,SAAS,6BACd,WACA,CAAC,wBAAwB,qBAAqB,GAIxC;AACN,MAAI,2BAA2B,uBAAuB;AACpD,4BAAwB,WAAW,sBAAsB;AACzD;AAAA,EACF;AAEA,QAAM,EAAE,gBAAgB,aAAa,cAAc,UAAU,IAC3D,UAAU,WAAW,CAAC;AAGxB,QAAM,YAAY,SAAS,YAAY;AACvC,YAAU,SAAS,gBAAgB,WAAW;AAC9C,YAAU;AAAA,IACR;AAAA,IACA,uBAAuB,WAAW;AAAA,EACpC;AACA,YAAU,eAAe;AAGzB,QAAM,UAAU,SAAS,YAAY;AACrC,UAAQ,SAAS,uBAAuB,CAAC;AACzC,UAAQ,OAAO,cAAc,SAAS;AACtC,UAAQ,eAAe;AAGvB,YAAU,gBAAgB;AAC1B,kBAAgB,sBAAsB;AAEtC,yBAAuB;AAAA,IACrB,IAAI,WAAW,SAAS,EAAE,SAAS,KAAK,CAAC;AAAA,EAC3C;AACA,wBAAsB;AAAA,IACpB,IAAI,WAAW,SAAS,EAAE,SAAS,KAAK,CAAC;AAAA,EAC3C;AACF;AAWO,SAAS,2BACd,wBACA,aACA;AACA,MAAI,wBAAwB;AAC1B,2BAAuB,QAAQ,SAAS,MAAM;AAC9C,2BAAuB,UAAU;AACjC;AAAA,EACF;AAEA,QAAM,oBAAoB,aAAa,SAAS;AAChD,MAAI,mBAAmB;AACrB,0BAAsB,MAAM;AAC1B,sBAAgB,iBAAiB;AAAA,IACnC,CAAC;AAAA,EACH;AACF;",
|
|
4
|
+
"sourcesContent": ["import type { RefObject } from 'react';\n\nimport * as styles from './DateTimeInput.sty.js';\nimport type { DateTimeInputRef } from './types.js';\nimport { getStratoLogger } from '../../core/sdk/sdk-logger.js';\nimport type { SpinButtonHandler } from '../spin-buttons/spin-button-group/types.js';\n\nfunction warnSelectionFailed(message: string, error: unknown): void {\n getStratoLogger('DateTimeRangePicker').warn(message, error);\n}\n\n/** @internal */\nexport function checkIfValueTypeAlignment(textNode: Node): boolean {\n // Skip hidden text nodes in DateTimeInput by checking parent value types.\n const closestDateTimeInput = textNode.parentElement?.closest(\n `.${styles.dateTimeInput}`,\n );\n const currentValueType = closestDateTimeInput?.getAttribute('data-valuetype');\n const closestValueTypeElement =\n textNode.parentElement?.closest('[data-valuetype]');\n\n // No more specific parent \u2014 likely a placeholder, separator, or other node.\n if (closestDateTimeInput === closestValueTypeElement) {\n return true;\n }\n\n const nodeValueType = closestValueTypeElement?.getAttribute('data-valuetype');\n\n return nodeValueType === currentValueType;\n}\n\n/** Helper to walk backwards through text nodes. */\nfunction previousTextNode(root: HTMLElement, node: Node): Node | null {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null);\n\n let current = walker.lastChild();\n let found = false;\n while (current) {\n if (found) {\n // Skip hidden text nodes by checking parent value types.\n if (checkIfValueTypeAlignment(current)) {\n return current;\n }\n }\n\n if (current === node) {\n found = true;\n }\n\n current = walker.previousNode();\n }\n\n return null;\n}\n\n/** Helper to walk forwards through text nodes. */\nfunction nextTextNode(root: HTMLElement, node: Node): Node | null {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null);\n\n let current = walker.nextNode();\n let found = false;\n\n while (current) {\n if (found) {\n // Skip hidden text nodes by checking parent value types.\n if (checkIfValueTypeAlignment(current)) {\n return current;\n }\n }\n if (current === node) {\n found = true;\n }\n current = walker.nextNode();\n }\n\n return null;\n}\n\n/** Helper that finds the next character position to adjust the global selection. */\nfunction findNextCharacterPosition(\n root: HTMLElement,\n node: Node,\n offset: number,\n): { node: Node; offset: number } | null {\n if (\n node.nodeType === Node.TEXT_NODE &&\n node.nodeValue &&\n offset < node.nodeValue.length &&\n checkIfValueTypeAlignment(node)\n ) {\n return { node, offset: offset + 1 };\n }\n\n // Element node: offset is a child index \u2014 walk into that child to find the first text node.\n if (node.nodeType !== Node.TEXT_NODE) {\n const childAtOffset = node.childNodes[offset];\n if (childAtOffset) {\n const walker = document.createTreeWalker(\n childAtOffset,\n NodeFilter.SHOW_TEXT,\n null,\n );\n const firstText =\n walker.firstChild() ??\n (childAtOffset.nodeType === Node.TEXT_NODE ? childAtOffset : null);\n if (\n firstText &&\n (checkIfValueTypeAlignment(firstText) ||\n getClosestContentEditable(firstText) !== null)\n ) {\n return { node: firstText, offset: 1 };\n }\n }\n\n // At element's end boundary: find the last text node inside and step to the next.\n if (offset > 0) {\n const previousChild = node.childNodes[offset - 1];\n if (previousChild) {\n const walker = document.createTreeWalker(\n previousChild,\n NodeFilter.SHOW_TEXT,\n null,\n );\n const lastText =\n walker.lastChild() ??\n (previousChild.nodeType === Node.TEXT_NODE ? previousChild : null);\n if (lastText) {\n let nextFromBoundary: Node | null = nextTextNode(root, lastText);\n while (\n nextFromBoundary !== null &&\n getClosestContentEditable(nextFromBoundary) === null\n ) {\n nextFromBoundary = nextTextNode(root, nextFromBoundary);\n }\n if (nextFromBoundary) {\n return { node: nextFromBoundary, offset: 1 };\n }\n }\n }\n }\n }\n\n // Keep separator text nodes as valid step targets for Shift+Arrow.\n let next: Node | null = nextTextNode(root, node);\n\n // Skip separator nodes between two expression textboxes for one-step crossing.\n if (\n isExpressionNode(node) &&\n next &&\n getClosestContentEditable(next) === null\n ) {\n const nextEditableNode: Node | null = nextTextNode(root, next);\n if (isExpressionNode(nextEditableNode)) {\n next = nextEditableNode;\n }\n }\n\n if (!next) {\n return null;\n }\n\n return { node: next, offset: 1 };\n}\n\n/** Helper that finds the previous character position to adjust the global selection. */\nfunction findPreviousCharacterPosition(\n root: HTMLElement,\n node: Node,\n offset: number,\n): { node: Node; offset: number } | null {\n if (\n node.nodeType === Node.TEXT_NODE &&\n offset > 0 &&\n checkIfValueTypeAlignment(node)\n ) {\n return { node, offset: offset - 1 };\n }\n\n // Element node: offset is a child index \u2014 walk into offset-1 child to find the last text node (mirrors forward logic).\n if (node.nodeType !== Node.TEXT_NODE && offset > 0) {\n const childAtOffset = node.childNodes[offset - 1];\n if (childAtOffset) {\n const walker = document.createTreeWalker(\n childAtOffset,\n NodeFilter.SHOW_TEXT,\n null,\n );\n const lastText =\n walker.lastChild() ??\n (childAtOffset.nodeType === Node.TEXT_NODE ? childAtOffset : null);\n if (\n lastText?.nodeValue &&\n (checkIfValueTypeAlignment(lastText) ||\n getClosestContentEditable(lastText) !== null)\n ) {\n return { node: lastText, offset: lastText.nodeValue.length - 1 };\n }\n }\n }\n\n // Keep separator text nodes as valid backward step targets for Shift+Arrow.\n let prev: Node | null = previousTextNode(root, node);\n if (\n isExpressionNode(node) &&\n prev &&\n getClosestContentEditable(prev) === null\n ) {\n const previousEditableNode: Node | null = previousTextNode(root, prev);\n if (isExpressionNode(previousEditableNode)) {\n prev = previousEditableNode;\n }\n }\n if (!prev || prev?.nodeValue === null) {\n return null;\n }\n\n return { node: prev, offset: prev.nodeValue.length - 1 };\n}\n\n/** Helper to find the first textNode to apply selection */\nfunction findFirstCharacterPosition(\n root: HTMLElement,\n): { node: Node; offset: number } | null {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null);\n let current = walker.firstChild();\n while (current !== null) {\n // Skip hidden text nodes (e.g. relative date expression values when in absolute mode).\n if (checkIfValueTypeAlignment(current)) {\n return { node: current, offset: 0 };\n }\n current = walker.nextNode();\n }\n return null;\n}\n\n/** Helper to find the last textNode to apply selection */\nfunction findLastCharacterPosition(\n root: HTMLElement,\n): { node: Node; offset: number } | null {\n const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, null);\n let current = walker.lastChild();\n while (current !== null) {\n // Skip hidden text nodes (e.g. relative date expression values when in absolute mode).\n if (checkIfValueTypeAlignment(current)) {\n return { node: current, offset: current.nodeValue?.length ?? 0 };\n }\n current = walker.previousNode();\n }\n return null;\n}\n\nfunction compareSelectionPoints(\n firstNode: Node,\n firstOffset: number,\n secondNode: Node,\n secondOffset: number,\n): number {\n if (firstNode === secondNode) {\n return firstOffset - secondOffset;\n }\n\n const firstRange = document.createRange();\n firstRange.setStart(firstNode, firstOffset);\n firstRange.collapse(true);\n\n const secondRange = document.createRange();\n secondRange.setStart(secondNode, secondOffset);\n secondRange.collapse(true);\n\n return firstRange.compareBoundaryPoints(Range.START_TO_START, secondRange);\n}\n\nfunction selectionOverlapsSpinButton(\n selectionStartNode: Node,\n selectionStartOffset: number,\n selectionEndNode: Node,\n selectionEndOffset: number,\n spinButton: HTMLElement,\n): boolean {\n const spinButtonStart = findFirstCharacterPosition(spinButton);\n const spinButtonEnd = findLastCharacterPosition(spinButton);\n\n if (!spinButtonStart || !spinButtonEnd) {\n return false;\n }\n\n return (\n compareSelectionPoints(\n selectionStartNode,\n selectionStartOffset,\n spinButtonEnd.node,\n spinButtonEnd.offset,\n ) < 0 &&\n compareSelectionPoints(\n selectionEndNode,\n selectionEndOffset,\n spinButtonStart.node,\n spinButtonStart.offset,\n ) > 0\n );\n}\n\n/**\n * Restores [contenteditable] and tabindex to all elements inside `root` that\n * had those attributes temporarily stripped (marked with [data-wascontenteditable]\n * / [data-wastabindex]).\n */\nfunction restoreContentEditableAttributes(root: HTMLElement): void {\n for (const editable of root.querySelectorAll<HTMLElement>(\n '[data-wascontenteditable]',\n )) {\n const previousValue = editable.getAttribute('data-wascontenteditable');\n if (previousValue !== null) {\n editable.setAttribute('contenteditable', previousValue);\n }\n editable.removeAttribute('data-wascontenteditable');\n\n const wasTabIndex = editable.getAttribute('data-wastabindex');\n if (wasTabIndex !== null) {\n editable.setAttribute('tabindex', wasTabIndex);\n editable.removeAttribute('data-wastabindex');\n }\n }\n // Clear drag-selected marks when CE is restored \u2014 :focus or native selection takes over.\n for (const el of root.querySelectorAll<HTMLElement>('[data-drag-selected]')) {\n el.removeAttribute('data-drag-selected');\n }\n}\n\n/**\n * Marks elements intersected by `range` with [data-drag-selected] for element-level accent styling.\n * Textboxes are excluded during live drags (native ::selection shows char-level highlight) and\n * included only for snapped post-mouseup ranges when `includeTextboxes` is true.\n * Element-level styling is used because Safari doesn't resolve CSS vars inside ::selection\n * on non-contenteditable elements.\n */\nfunction markDragSelectedElements(\n rootElement: HTMLElement,\n range: Range,\n { includeTextboxes = false }: { includeTextboxes?: boolean } = {},\n): void {\n for (const el of rootElement.querySelectorAll<HTMLElement>(\n '[data-drag-selected]',\n )) {\n el.removeAttribute('data-drag-selected');\n }\n\n // (a) Direct children of SpinButtonGroups: spinbuttons + separators\n for (const group of rootElement.querySelectorAll(\n '[data-valuetype=\"iso8601\"]',\n )) {\n for (const child of group.children) {\n if (range.intersectsNode(child)) {\n child.setAttribute('data-drag-selected', '');\n }\n }\n }\n\n // (b) Expression textbox inputs \u2014 only for snapped post-mouseup ranges\n if (includeTextboxes) {\n for (const textbox of rootElement.querySelectorAll('[role=\"textbox\"]')) {\n if (range.intersectsNode(textbox)) {\n textbox.setAttribute('data-drag-selected', '');\n }\n }\n }\n}\n\n// Tracks pending CE-restore AbortControllers per picker root.\n// CE is stripped during multi-element drags (Safari clips cross-element addRange to the active CE host)\n// and restored on the next real interaction. WeakMap avoids retaining roots after unmount.\nconst pendingRestoreSignals = new WeakMap<HTMLElement, AbortController>();\n\n/**\n * Endpoints captured by `deferContentEditableRestore` before re-attaching CE.\n * Safari clips the live selection to the active CE host after CE re-attachment,\n * so a bubble-phase Backspace/Delete handler can no longer see the full\n * multi-element range. Consumers read these to feed `planBulkClear`.\n * @internal\n */\nexport type SelectionEndpoints = {\n anchorNode: Node;\n anchorOffset: number;\n focusNode: Node;\n focusOffset: number;\n};\nconst lastPreRestoreEndpoints = new WeakMap<HTMLElement, SelectionEndpoints>();\n\n/**\n * Returns and clears the multi-element selection endpoints captured for `root`\n * by `deferContentEditableRestore` just before the most recent CE re-attach.\n * Returns `undefined` when no stash exists (no preceding multi-element\n * selection, or already consumed).\n * @internal\n */\nexport function consumePreRestoreEndpoints(\n root: HTMLElement,\n): SelectionEndpoints | undefined {\n const stash = lastPreRestoreEndpoints.get(root);\n lastPreRestoreEndpoints.delete(root);\n return stash;\n}\n\n/**\n * Restores [contenteditable] on the next real user interaction (mousedown or non-modifier keydown).\n * Listens on `document` (not rootElement) so clicks outside the picker still trigger the restore.\n * Modifier-only keys and Cmd/Ctrl+C are skipped to allow selection extension and copy.\n */\nfunction deferContentEditableRestore(root: HTMLElement): void {\n // Cancel any pending restore for this root before registering a new one.\n pendingRestoreSignals.get(root)?.abort();\n\n const restoreSignal = new AbortController();\n pendingRestoreSignals.set(root, restoreSignal);\n\n function handler(e: Event): void {\n if (e instanceof KeyboardEvent) {\n if (['Meta', 'Control', 'Alt', 'Shift'].includes(e.key)) {\n return;\n }\n if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === 'c') {\n return;\n }\n // Shift+Arrow/Home/End extends the current selection \u2014 keep CE stripped\n // so each subsequent step can cross spinbutton boundaries in Safari.\n if (\n e.shiftKey &&\n [\n 'ArrowLeft',\n 'ArrowRight',\n 'ArrowUp',\n 'ArrowDown',\n 'Home',\n 'End',\n ].includes(e.key)\n ) {\n return;\n }\n // Plain ArrowLeft/Right with a live multi-element selection: collapse to\n // the directional boundary before CE is restored. Firefox's default would\n // shrink the directional selection one step at a time (mirror of Shift+\n // Arrow extension), forcing the user to press Arrow N times to \"use up\" a\n // previous Shift+Arrow selection of N steps before the cursor moves.\n // Chrome/Safari already collapse natively; this normalizes Firefox.\n // Done here (capture phase) because Firefox discards cross-element\n // selections as soon as [contenteditable] is added back.\n if (\n !e.shiftKey &&\n !e.metaKey &&\n !e.ctrlKey &&\n !e.altKey &&\n (e.key === 'ArrowLeft' || e.key === 'ArrowRight')\n ) {\n const collapsed = collapseMultiElementSelection(\n root,\n e.key === 'ArrowLeft' ? 'left' : 'right',\n );\n if (collapsed) {\n e.preventDefault();\n // Stop the event so the boundary spinbutton's own keydown handler\n // doesn't immediately step further (handleArrowLeft would see\n // selection.start === 0 after onFocus \u2192 selectAll and move past it).\n e.stopPropagation();\n // collapseMultiElementSelection already restored CE and aborted the\n // signal \u2014 nothing left to do.\n return;\n }\n }\n }\n // Firefox discards cross-element selections the moment [contenteditable]\n // is re-added. Snapshot the current selection endpoints before restoring\n // CE, then recreate the range via setBaseAndExtent so that subsequent\n // bubble-phase handlers (Backspace/Delete bulkClear, Cmd+X, type-to-replace)\n // still see the multi-element selection. Same trick used at mouseup time\n // in removeContentEditable.\n const selection = globalThis.getSelection();\n const anchorNode = selection?.anchorNode ?? null;\n const anchorOffset = selection?.anchorOffset ?? 0;\n const focusNode = selection?.focusNode ?? null;\n const focusOffset = selection?.focusOffset ?? 0;\n const hasMultiElementSelection =\n selection !== null &&\n anchorNode !== null &&\n focusNode !== null &&\n anchorNode !== focusNode &&\n selection.toString().length > 0;\n\n // Stash the pre-restore endpoints for bubble-phase consumers (Safari only\n // truly needs them, but stashing unconditionally keeps the code path\n // browser-agnostic). Bubble handlers fall back to the live selection when\n // no stash is present.\n if (hasMultiElementSelection && anchorNode && focusNode) {\n lastPreRestoreEndpoints.set(root, {\n anchorNode,\n anchorOffset,\n focusNode,\n focusOffset,\n });\n }\n\n restoreContentEditableAttributes(root);\n pendingRestoreSignals.delete(root);\n restoreSignal.abort();\n\n if (hasMultiElementSelection && anchorNode && focusNode) {\n try {\n selection?.setBaseAndExtent(\n anchorNode,\n anchorOffset,\n focusNode,\n focusOffset,\n );\n } catch (error) {\n warnSelectionFailed(\n 'setBaseAndExtent failed when restoring selection after CE re-attach',\n error,\n );\n }\n }\n }\n document.addEventListener('mousedown', handler, {\n signal: restoreSignal.signal,\n capture: true,\n });\n document.addEventListener('keydown', handler, {\n signal: restoreSignal.signal,\n capture: true,\n });\n}\n\n/**\n * Strips [contenteditable] to allow cross-element selection, then restores it on the next `eventType`.\n * `initialAnchorSpinButton` is the spinbutton resolved from bounding-box geometry before CE is stripped \u2014\n * used when Safari misreports anchorNode as a container element on far-right clicks.\n * @internal\n */\nexport function removeContentEditable(\n rootElement: HTMLElement,\n removeEventTarget: Document | HTMLElement,\n eventType: 'mouseup' | 'keyup',\n customRemovalFn?: (event: Event, hasMultiElementSelection: boolean) => void,\n initialAnchorSpinButton?: HTMLElement | null,\n): void {\n // Guard against focus-side effects (e.g. spinbutton onFocus selectAll)\n // while cross-element selection is restored.\n rootElement.setAttribute('data-restoring-selection', '');\n\n const contentEditables =\n rootElement.querySelectorAll<HTMLElement>('[contenteditable]');\n for (const editable of contentEditables) {\n const previousValue = editable.getAttribute('contenteditable') ?? undefined;\n editable.removeAttribute('contenteditable');\n editable.dataset.wascontenteditable = previousValue;\n\n // Also strip tabindex to prevent auto-focus on mousedown during drag.\n if (editable.hasAttribute('tabindex')) {\n editable.dataset.wastabindex = editable.getAttribute('tabindex') ?? '';\n editable.removeAttribute('tabindex');\n }\n }\n\n const signal = new AbortController();\n\n // Safari reports the container element (not a text node) as anchorNode when the click lands in empty\n // space. Correct the drag anchor on mousemove using the pre-resolved spinbutton's last char position.\n // Subsequent moves no-op once anchorNode becomes a text node; Chrome/Firefox already report text nodes.\n if (initialAnchorSpinButton) {\n const anchorPos = findLastCharacterPosition(initialAnchorSpinButton);\n if (anchorPos) {\n rootElement.addEventListener(\n 'mousemove',\n () => {\n const sel = globalThis.getSelection();\n if (!sel || !sel.anchorNode) {\n return;\n }\n // Already corrected.\n if (sel.anchorNode.nodeType === Node.TEXT_NODE) {\n return;\n }\n const focusNode = sel.focusNode;\n const focusOffset = sel.focusOffset ?? 0;\n if (!focusNode) {\n return;\n }\n const anchorBeforeFocus =\n compareSelectionPoints(\n anchorPos.node,\n anchorPos.offset,\n focusNode,\n focusOffset,\n ) <= 0;\n try {\n sel.removeAllRanges();\n\n if (anchorBeforeFocus) {\n sel.setBaseAndExtent(\n anchorPos.node,\n anchorPos.offset,\n focusNode,\n focusOffset,\n );\n } else {\n sel.setBaseAndExtent(\n focusNode,\n focusOffset,\n anchorPos.node,\n anchorPos.offset,\n );\n }\n } catch (error) {\n warnSelectionFailed(\n 'selection anchor correction during drag failed',\n error,\n );\n }\n },\n { signal: signal.signal, capture: true },\n );\n }\n }\n\n // Update [data-drag-selected] on mousemove for element-level accent styling (Safari ::selection workaround).\n rootElement.addEventListener(\n 'mousemove',\n () => {\n const sel = globalThis.getSelection();\n if (!sel || sel.rangeCount === 0) {\n return;\n }\n const range = sel.getRangeAt(0);\n markDragSelectedElements(rootElement, range);\n },\n { signal: signal.signal, capture: true },\n );\n\n removeEventTarget.addEventListener(\n eventType,\n (event: Event) => {\n // Snapshot before restoring CE \u2014 Firefox discards cross-element selections when CE is re-added.\n const selectionBeforeRestore = globalThis.getSelection();\n const snapshotAnchorNode = selectionBeforeRestore?.anchorNode ?? null;\n const snapshotAnchorOffset = selectionBeforeRestore?.anchorOffset ?? 0;\n const snapshotFocusNode = selectionBeforeRestore?.focusNode ?? null;\n const snapshotFocusOffset = selectionBeforeRestore?.focusOffset ?? 0;\n\n const hasMultiElementSelection =\n selectionBeforeRestore !== null &&\n selectionBeforeRestore.toString().length > 0 &&\n (snapshotAnchorNode !== snapshotFocusNode ||\n (snapshotAnchorNode !== null &&\n snapshotAnchorNode === snapshotFocusNode &&\n snapshotAnchorOffset !== snapshotFocusOffset &&\n snapshotAnchorNode.nodeType === Node.ELEMENT_NODE));\n\n if (hasMultiElementSelection && snapshotAnchorNode && snapshotFocusNode) {\n // Multi-element path: keep CE stripped so Safari's setBaseAndExtent isn't clipped to the active\n // editing host. CE is restored lazily on the next real user interaction.\n\n // Safari may report a container element as anchorNode on empty-space clicks; use initialAnchorSpinButton instead.\n const anchorIsElementNode =\n snapshotAnchorNode.nodeType !== Node.TEXT_NODE;\n\n // Resolve anchor spinbutton: element-node \u2192 use precomputed; text in SB \u2192 resolve; text outside \u2192 null.\n const anchorNodeWasInContent = anchorIsElementNode\n ? initialAnchorSpinButton !== null\n : isEndpointInsideSpinButtonContent(\n snapshotAnchorNode,\n snapshotAnchorOffset,\n );\n\n let anchorSpinButton: HTMLElement | null;\n if (anchorIsElementNode) {\n anchorSpinButton = initialAnchorSpinButton ?? null;\n } else if (anchorNodeWasInContent) {\n anchorSpinButton = resolveSpinButton(\n snapshotAnchorNode,\n rootElement,\n snapshotAnchorOffset,\n );\n } else {\n anchorSpinButton = null;\n }\n\n // When anchor is an element node, derive a text-node position for direction detection.\n let anchorNodeForComparison: Node = snapshotAnchorNode;\n let anchorOffsetForComparison: number = snapshotAnchorOffset;\n if (anchorIsElementNode && anchorSpinButton) {\n const lastPos = findLastCharacterPosition(anchorSpinButton);\n if (lastPos) {\n anchorNodeForComparison = lastPos.node;\n anchorOffsetForComparison = lastPos.offset;\n }\n }\n\n const focusNodeWasInContent = isEndpointInsideSpinButtonContent(\n snapshotFocusNode,\n snapshotFocusOffset,\n );\n const focusSpinButton =\n focusNodeWasInContent || snapshotFocusNode.nodeType !== Node.TEXT_NODE\n ? resolveSpinButton(\n snapshotFocusNode,\n rootElement,\n snapshotFocusOffset,\n )\n : null;\n\n const anchorBeforeFocus =\n compareSelectionPoints(\n anchorNodeForComparison,\n anchorOffsetForComparison,\n snapshotFocusNode,\n snapshotFocusOffset,\n ) <= 0;\n\n let anchorPos: { node: Node; offset: number } | null;\n if (anchorSpinButton?.getAttribute('role') === 'spinbutton') {\n anchorPos = anchorBeforeFocus\n ? findFirstCharacterPosition(anchorSpinButton)\n : findLastCharacterPosition(anchorSpinButton);\n } else {\n anchorPos = {\n node: anchorNodeForComparison,\n offset: anchorOffsetForComparison,\n };\n }\n let focusPos: { node: Node; offset: number } | null;\n if (focusSpinButton?.getAttribute('role') === 'spinbutton') {\n focusPos = anchorBeforeFocus\n ? findLastCharacterPosition(focusSpinButton)\n : findFirstCharacterPosition(focusSpinButton);\n } else {\n focusPos = { node: snapshotFocusNode, offset: snapshotFocusOffset };\n }\n\n if (anchorPos && focusPos) {\n try {\n const range = document.createRange();\n if (anchorBeforeFocus) {\n range.setStart(anchorPos.node, anchorPos.offset);\n range.setEnd(focusPos.node, focusPos.offset);\n } else {\n range.setStart(focusPos.node, focusPos.offset);\n range.setEnd(anchorPos.node, anchorPos.offset);\n }\n const sel = globalThis.getSelection();\n sel?.setBaseAndExtent(\n anchorPos.node,\n anchorPos.offset,\n focusPos.node,\n focusPos.offset,\n );\n // Mark intersected elements for accent styling. Exclude textboxes \u2014 they need char-level selection.\n markDragSelectedElements(rootElement, range);\n } catch (error) {\n warnSelectionFailed(\n 'setBaseAndExtent failed when restoring drag selection',\n error,\n );\n }\n }\n\n customRemovalFn?.(event, hasMultiElementSelection);\n rootElement.removeAttribute('data-restoring-selection');\n\n // Restore CE on the next user interaction (mousedown / non-modifier keydown).\n deferContentEditableRestore(rootElement);\n } else {\n // Single-element path: restore CE immediately \u2014 both endpoints share the same editing host.\n restoreContentEditableAttributes(rootElement);\n\n if (snapshotAnchorNode && snapshotFocusNode) {\n try {\n globalThis\n .getSelection()\n ?.setBaseAndExtent(\n snapshotAnchorNode,\n snapshotAnchorOffset,\n snapshotFocusNode,\n snapshotFocusOffset,\n );\n } catch (error) {\n warnSelectionFailed(\n 'setBaseAndExtent failed when restoring single-element selection',\n error,\n );\n }\n }\n\n customRemovalFn?.(event, hasMultiElementSelection);\n rootElement.removeAttribute('data-restoring-selection');\n }\n\n signal.abort();\n },\n { signal: signal.signal },\n );\n}\n\n/**\n * For Shift+Arrow on absolute spinbuttons, snaps the focus endpoint to a spinbutton boundary\n * rather than stepping character by character (intra-spinbutton steps are visually silent).\n * Growing forward/backward includes the adjacent spinbutton fully; shrinking excludes the current one.\n * Returns null when focus is outside a spinbutton, falling through to char-by-char logic.\n */\nfunction findSpinButtonSnappedPosition(\n root: HTMLElement,\n anchorNode: Node,\n anchorOffset: number,\n focusNode: Node,\n focusOffset: number,\n direction: 'forward' | 'backward',\n): { node: Node; offset: number } | null {\n let spinButton: HTMLElement | null = null;\n\n if (focusNode.nodeType === Node.TEXT_NODE) {\n spinButton =\n (focusNode as Text).parentElement?.closest<HTMLElement>(\n '[role=\"spinbutton\"]',\n ) ?? null;\n } else if (\n focusNode instanceof HTMLElement &&\n focusNode.getAttribute('role') === 'spinbutton'\n ) {\n // selectNodeContents(el) sets focusNode to the element itself.\n spinButton = focusNode;\n }\n\n if (!spinButton) {\n return null;\n }\n\n const allSBs = Array.from(\n root.querySelectorAll<HTMLElement>('[role=\"spinbutton\"]'),\n );\n const idx = allSBs.indexOf(spinButton);\n\n // Determine whether the selection is growing or shrinking.\n const focusIsBeforeAnchor =\n compareSelectionPoints(focusNode, focusOffset, anchorNode, anchorOffset) <\n 0;\n const isGrowing =\n direction === 'forward' ? !focusIsBeforeAnchor : focusIsBeforeAnchor;\n\n if (direction === 'forward') {\n const nextSB = allSBs[idx + 1] ?? null;\n if (!nextSB) {\n return null;\n }\n // Growing: snap to far end of next SB. Shrinking: snap to near end (exclude current).\n return isGrowing\n ? findLastCharacterPosition(nextSB)\n : findFirstCharacterPosition(nextSB);\n }\n\n const prevSB = allSBs[idx - 1] ?? null;\n if (!prevSB) {\n return null;\n }\n return isGrowing\n ? findFirstCharacterPosition(prevSB)\n : findLastCharacterPosition(prevSB);\n}\n\nexport function extendSelection(\n key: 'ArrowLeft' | 'ArrowRight' | 'Home' | 'End',\n): void {\n const selection = globalThis.getSelection();\n if (\n selection === null ||\n selection.anchorNode === null ||\n selection.focusNode === null ||\n selection.rangeCount < 1\n ) {\n return;\n }\n\n const anchorNode = selection.anchorNode;\n const anchorOffset = selection.anchorOffset;\n const focusNode = selection.focusNode;\n const focusOffset = selection.focusOffset;\n\n let nextPos: { node: Node; offset: number } | null = null;\n\n const root =\n focusNode.nodeType === Node.TEXT_NODE\n ? (focusNode as Text).parentElement?.closest<HTMLDivElement>(\n '.strato-inputgroup',\n )\n : focusNode instanceof HTMLElement\n ? focusNode.closest<HTMLDivElement>('.strato-inputgroup')\n : null;\n if (root === null || root === undefined) {\n return;\n }\n\n if (key === 'ArrowLeft') {\n nextPos =\n findSpinButtonSnappedPosition(\n root,\n anchorNode,\n anchorOffset,\n focusNode,\n focusOffset,\n 'backward',\n ) ?? findPreviousCharacterPosition(root, focusNode, focusOffset);\n } else if (key === 'ArrowRight') {\n nextPos =\n findSpinButtonSnappedPosition(\n root,\n anchorNode,\n anchorOffset,\n focusNode,\n focusOffset,\n 'forward',\n ) ?? findNextCharacterPosition(root, focusNode, focusOffset);\n } else if (key === 'Home') {\n nextPos = findFirstCharacterPosition(root);\n } else if (key === 'End') {\n nextPos = findLastCharacterPosition(root);\n }\n\n // Skip the \"\u2192\" separator (outside any CE) so Shift+Arrow crosses it in one keypress.\n let crossedSeparator = false;\n while (nextPos && getClosestContentEditable(nextPos.node) === null) {\n crossedSeparator = true;\n const skipped =\n key === 'ArrowLeft' || key === 'Home'\n ? findPreviousCharacterPosition(root, nextPos.node, nextPos.offset)\n : findNextCharacterPosition(root, nextPos.node, nextPos.offset);\n if (!skipped) {\n break;\n }\n nextPos = skipped;\n }\n\n // After crossing a separator, snap to the boundary of the landing text node rather\n // than stepping one character into it (which is what findNext/PreviousCharacterPosition does).\n if (crossedSeparator && nextPos?.node.nodeType === Node.TEXT_NODE) {\n if (key === 'ArrowRight') {\n nextPos = { node: nextPos.node, offset: 0 };\n } else if (key === 'ArrowLeft') {\n nextPos = {\n node: nextPos.node,\n offset: nextPos.node.nodeValue?.length ?? 0,\n };\n }\n }\n\n if (!nextPos) {\n return;\n }\n\n // SPIN_BUTTON_SELECTOR covers both live [contenteditable] and temporarily stripped [data-wascontenteditable].\n const spinButtonFromNode = (node: Node): HTMLElement | null => {\n const el =\n node.nodeType === Node.TEXT_NODE\n ? (node as Text).parentElement\n : node instanceof HTMLElement\n ? node\n : null;\n const sb = el?.closest<HTMLElement>(SPIN_BUTTON_SELECTOR) ?? null;\n return sb?.getAttribute('role') === 'spinbutton' ? sb : null;\n };\n\n const anchorSB = spinButtonFromNode(anchorNode);\n\n // Strip CE when the new focus crosses into a different editing host \u2014 Safari clips setBaseAndExtent to the active one.\n const anchorCE = getClosestContentEditable(anchorNode);\n const nextCE = getClosestContentEditable(nextPos.node);\n const crossesBoundary = anchorCE !== null && anchorCE !== nextCE;\n\n if (crossesBoundary) {\n // selectNodeContents sets anchorNode to the element itself; resolve to a text-node position instead.\n let resolvedAnchorNode = anchorNode;\n let resolvedAnchorOffset = anchorOffset;\n if (anchorNode.nodeType !== Node.TEXT_NODE && anchorSB) {\n // Use the spinbutton boundary that covers the full anchor SB in the extension direction.\n const anchorBeforeFocus =\n compareSelectionPoints(\n anchorNode,\n anchorOffset,\n nextPos.node,\n nextPos.offset,\n ) <= 0;\n const resolved = anchorBeforeFocus\n ? findFirstCharacterPosition(anchorSB)\n : findLastCharacterPosition(anchorSB);\n if (resolved) {\n resolvedAnchorNode = resolved.node;\n resolvedAnchorOffset = resolved.offset;\n }\n }\n\n // Strip CE so Safari's addRange is not clipped to the editing host.\n root.setAttribute('data-restoring-selection', '');\n for (const editable of root.querySelectorAll<HTMLElement>(\n '[contenteditable]',\n )) {\n const prev = editable.getAttribute('contenteditable') ?? '';\n editable.removeAttribute('contenteditable');\n editable.dataset.wascontenteditable = prev;\n }\n\n try {\n // setBaseAndExtent preserves anchor/focus direction (addRange would flip them, reversing all subsequent steps).\n selection.setBaseAndExtent(\n resolvedAnchorNode,\n resolvedAnchorOffset,\n nextPos.node,\n nextPos.offset,\n );\n // Build a document-ordered Range for markDragSelectedElements.\n const anchorBeforeFocus =\n compareSelectionPoints(\n resolvedAnchorNode,\n resolvedAnchorOffset,\n nextPos.node,\n nextPos.offset,\n ) <= 0;\n const range = document.createRange();\n if (anchorBeforeFocus) {\n range.setStart(resolvedAnchorNode, resolvedAnchorOffset);\n range.setEnd(nextPos.node, nextPos.offset);\n } else {\n range.setStart(nextPos.node, nextPos.offset);\n range.setEnd(resolvedAnchorNode, resolvedAnchorOffset);\n }\n markDragSelectedElements(root, range);\n } catch (error) {\n warnSelectionFailed(\n 'setBaseAndExtent failed when extending cross-boundary selection',\n error,\n );\n }\n\n root.removeAttribute('data-restoring-selection');\n deferContentEditableRestore(root);\n } else {\n // Same editing host: setBaseAndExtent is safe. Guard prevents Chrome's implicit focus from triggering selectAll().\n root.setAttribute('data-restoring-selection', '');\n try {\n selection.setBaseAndExtent(\n anchorNode,\n anchorOffset,\n nextPos.node,\n nextPos.offset,\n );\n } catch (error) {\n warnSelectionFailed(\n 'setBaseAndExtent failed when extending selection',\n error,\n );\n }\n root.removeAttribute('data-restoring-selection');\n // Refresh [data-drag-selected] to clear stale marks when the selection shrinks.\n // Build the range from known positions rather than re-querying getSelection() to work with mocked Selection in tests.\n const updatedRange = new Range();\n const cmp = anchorNode.compareDocumentPosition(nextPos.node);\n if (\n cmp & Node.DOCUMENT_POSITION_FOLLOWING ||\n (cmp === 0 && anchorOffset <= nextPos.offset)\n ) {\n updatedRange.setStart(anchorNode, anchorOffset);\n updatedRange.setEnd(nextPos.node, nextPos.offset);\n } else {\n updatedRange.setStart(nextPos.node, nextPos.offset);\n updatedRange.setEnd(anchorNode, anchorOffset);\n }\n markDragSelectedElements(root, updatedRange);\n }\n // [data-shift-selection] suppresses :focus background while a Shift+Arrow selection is active; cleared in onFocus.\n root.setAttribute('data-shift-selection', '');\n}\n\n/**\n * Helper function that allows to expand the selection to the entire range.\n * @internal\n */\nexport function extendSelectionToAll(): void {\n const selection = globalThis.getSelection();\n if (\n selection === null ||\n selection.focusNode === null ||\n selection.rangeCount < 1\n ) {\n return;\n }\n\n const root =\n selection.focusNode.parentElement?.closest<HTMLDivElement>(\n '.strato-inputgroup',\n );\n if (root === null || root === undefined) {\n return;\n }\n\n const firstPosition = findFirstCharacterPosition(root);\n const lastPosition = findLastCharacterPosition(root);\n\n if (!firstPosition || !lastPosition) {\n return;\n }\n\n // Strip CE so Safari cannot clip addRange to the focused editing host (same pattern as removeContentEditable).\n root.setAttribute('data-restoring-selection', '');\n for (const editable of root.querySelectorAll<HTMLElement>(\n '[contenteditable]',\n )) {\n const prev = editable.getAttribute('contenteditable') ?? '';\n editable.removeAttribute('contenteditable');\n editable.dataset.wascontenteditable = prev;\n }\n\n try {\n const range = document.createRange();\n range.setStart(firstPosition.node, firstPosition.offset);\n range.setEnd(lastPosition.node, lastPosition.offset);\n selection.setBaseAndExtent(\n firstPosition.node,\n firstPosition.offset,\n lastPosition.node,\n lastPosition.offset,\n );\n // Mark all elements in the full range for element-level accent styling.\n markDragSelectedElements(root, range, { includeTextboxes: true });\n } catch (error) {\n warnSelectionFailed(\n 'setBaseAndExtent failed when extending selection to all',\n error,\n );\n }\n\n root.removeAttribute('data-restoring-selection');\n // Move focus to the container so that subsequent plain ArrowUp/ArrowDown keydowns\n // fire with event.target === container, enabling the container-level handler to\n // forward them to the anchor (first) spin button \u2014 the same mechanism used after\n // a drag-select. Without this, the previously-focused spin button keeps element\n // focus and increments the wrong field.\n root.focus();\n deferContentEditableRestore(root);\n}\n\nfunction getBoundaryNodes(\n direction: 'left' | 'right',\n anchorNode: Node,\n anchorOffset: number,\n focusNode: Node,\n focusOffset: number,\n) {\n const anchorBeforeFocus =\n compareSelectionPoints(anchorNode, anchorOffset, focusNode, focusOffset) <=\n 0;\n if (direction === 'left' && anchorBeforeFocus) {\n return { boundaryNode: anchorNode, boundaryOffset: anchorOffset };\n }\n return { boundaryNode: focusNode, boundaryOffset: focusOffset };\n}\n\n/**\n * Collapses a multi-element selection (anchorNode !== focusNode) to one of its\n * boundaries and focuses the spinbutton or expression input at that boundary.\n *\n * Mirrors the natural Chrome/Safari behaviour of plain ArrowLeft/ArrowRight on a\n * non-collapsed selection: ArrowLeft \u2192 collapse to start, ArrowRight \u2192 collapse\n * to end. Firefox does not collapse \u2014 it shrinks the selection one step at a\n * time \u2014 so without this helper a Shift+Arrow extension followed by plain\n * arrows would require N presses before the cursor finally moves on Firefox.\n *\n * Returns true when a collapse was performed (callers should preventDefault),\n * false when the selection does not need handling here.\n * @internal\n */\nexport function collapseMultiElementSelection(\n rootElement: HTMLElement,\n direction: 'left' | 'right',\n): boolean {\n const selection = globalThis.getSelection();\n if (selection === null || selection.rangeCount < 1 || selection.isCollapsed) {\n return false;\n }\n const anchorNode = selection.anchorNode;\n const focusNode = selection.focusNode;\n if (anchorNode === null || focusNode === null || anchorNode === focusNode) {\n return false;\n }\n if (!rootElement.contains(anchorNode) && !rootElement.contains(focusNode)) {\n return false;\n }\n\n const anchorOffset = selection.anchorOffset;\n const focusOffset = selection.focusOffset;\n\n const { boundaryNode, boundaryOffset } = getBoundaryNodes(\n direction,\n anchorNode,\n anchorOffset,\n focusNode,\n focusOffset,\n );\n\n // Cancel any deferred CE-restore (set up by Shift+Arrow / drag-select) and\n // restore [contenteditable] synchronously so .focus() below lands on a live\n // editable element. Also clears stale [data-drag-selected] marks.\n pendingRestoreSignals.get(rootElement)?.abort();\n pendingRestoreSignals.delete(rootElement);\n restoreContentEditableAttributes(rootElement);\n rootElement.removeAttribute('data-shift-selection');\n\n const target = resolveSpinButton(boundaryNode, rootElement, boundaryOffset);\n\n selection.removeAllRanges();\n\n if (target === null) {\n return false;\n }\n target.focus();\n return true;\n}\n\n// Matches spinbuttons in both normal ([contenteditable]) and temporarily stripped ([data-wascontenteditable]) states.\nconst SPIN_BUTTON_SELECTOR = '[contenteditable], [data-wascontenteditable]';\n\nfunction getClosestContentEditable(node: Node): HTMLElement | null {\n return node.nodeType === Node.TEXT_NODE\n ? (node as Text).parentElement?.closest<HTMLElement>(\n SPIN_BUTTON_SELECTOR,\n ) ?? null\n : (node as Element).closest?.(SPIN_BUTTON_SELECTOR) ?? null;\n}\n\nfunction isExpressionNode(node: Node | null): boolean {\n return (\n node !== null &&\n getClosestContentEditable(node)?.getAttribute('role') === 'textbox'\n );\n}\n\n/**\n * Resolve a selection endpoint node to its containing spinbutton or, when the\n * endpoint lies on a separator between spinbuttons, to the nearest spinbutton.\n * Uses `[data-wascontenteditable]` to identify spinbuttons while contenteditable\n * is temporarily stripped during the drag, and falls back to the restored\n * `[contenteditable]` attribute afterwards.\n *\n * @param offset - When `node` is an element node (not a text node), this is\n * the child index from the Selection API. The child just before this position\n * is used as the starting point for the reverse spinbutton search, so that a\n * click on empty space after the last spinbutton resolves to that spinbutton\n * rather than falling back to the first one.\n */\nfunction resolveSpinButton(\n node: Node,\n root: HTMLElement,\n offset?: number,\n): HTMLElement | null {\n // Happy path: the node is inside a spinbutton.\n const direct = getClosestContentEditable(node);\n if (direct !== null) {\n return direct;\n }\n\n // Element node: offset is a child index. Walk back from offset-1 to find the nearest spinbutton.\n if (node.nodeType !== Node.TEXT_NODE && offset !== undefined && offset > 0) {\n const childBefore = node.childNodes[offset - 1];\n if (childBefore) {\n const nearest = getNearestPrecedingSpinButton(childBefore, root);\n if (nearest) {\n return nearest;\n }\n }\n }\n\n // Separator or offset-0 element: fall back to nearest preceding spinbutton.\n return getNearestPrecedingSpinButton(node, root);\n}\n\n/**\n * When a drag ends on a separator (e.g. \"/\" or \".\"), the selection endpoint is\n * outside any spinbutton. Walk the contenteditable spinbuttons in document order\n * and return the one that immediately precedes the given node in document order.\n * Falls back to the first spinbutton when the node comes before all of them.\n */\nfunction getNearestPrecedingSpinButton(\n node: Node,\n root: HTMLElement,\n): HTMLElement | null {\n const spinButtons = Array.from(\n root.querySelectorAll<HTMLElement>(SPIN_BUTTON_SELECTOR),\n );\n if (spinButtons.length === 0) {\n return null;\n }\n\n let nearest: HTMLElement | null = null;\n for (const spinButton of spinButtons) {\n // DOCUMENT_POSITION_FOLLOWING is set for both \"after\" and \"contained by\" \u2014 both mean the node comes after this spinButton.\n const position = spinButton.compareDocumentPosition(node);\n if (position & Node.DOCUMENT_POSITION_FOLLOWING) {\n nearest = spinButton;\n }\n }\n\n // If node precedes all spinbuttons, return the first one\n return nearest ?? spinButtons[0] ?? null;\n}\n\n/**\n * Determines whether a captured endpoint is truly inside spinbutton content.\n * Separator nodes and caret positions at spinbutton edges must preserve their\n * exact boundary instead of snapping to the whole spinbutton.\n */\nfunction isEndpointInsideSpinButtonContent(\n node: Node,\n offset: number,\n): boolean {\n const closest = getClosestContentEditable(node);\n if (!closest || closest.getAttribute('role') !== 'spinbutton') {\n return false;\n }\n\n const firstChild = closest.childNodes[0] ?? null;\n const leadingTextNode =\n firstChild?.nodeType === Node.TEXT_NODE\n ? firstChild\n : firstChild?.firstChild?.nodeType === Node.TEXT_NODE\n ? firstChild.firstChild\n : null;\n const isLeadingContentNode =\n node === firstChild ||\n node === leadingTextNode ||\n (node instanceof Element &&\n leadingTextNode !== null &&\n node.contains(leadingTextNode)) ||\n (node.nodeType === Node.TEXT_NODE &&\n firstChild instanceof Element &&\n firstChild.contains(node));\n const nodeLength =\n node.nodeType === Node.TEXT_NODE\n ? node.nodeValue?.length ?? 0\n : node.textContent?.length ?? 0;\n const isBoundaryOffset = offset === 0 || offset === nodeLength;\n\n return !(isLeadingContentNode && isBoundaryOffset);\n}\n\n/**\n * One entry in a spin-button undo snapshot.\n * Uses a stable inputRef + Map key pair instead of a direct handler reference\n * so that the undo step always resolves the *current* (post-re-render) handler.\n * @internal\n */\nexport type SpinButtonSnapshotEntry = {\n inputRef: RefObject<DateTimeInputRef>;\n key: Intl.DateTimeFormatPartTypes;\n previousText: string | null;\n};\n\ntype Entry = {\n inputRef: RefObject<DateTimeInputRef>;\n key: Intl.DateTimeFormatPartTypes;\n element: HTMLSpanElement;\n};\n\n/**\n * Inspects the spin buttons of the supplied inputs and returns a snapshot for\n * every spin button whose content overlaps the selected range.\n *\n * The snapshot captures the current `textContent` of each covered element so\n * it can later be passed to.\n * @internal\n */\nexport function buildSpinButtonSnapshot(\n anchorNode: Node | null,\n anchorOffset: number,\n focusNode: Node | null,\n focusOffset: number,\n inputRefs: RefObject<DateTimeInputRef>[],\n): SpinButtonSnapshotEntry[] {\n if (!anchorNode || !focusNode) {\n return [];\n }\n\n const anchorBeforeFocus =\n compareSelectionPoints(anchorNode, anchorOffset, focusNode, focusOffset) <=\n 0;\n const selectionStartNode = anchorBeforeFocus ? anchorNode : focusNode;\n const selectionStartOffset = anchorBeforeFocus ? anchorOffset : focusOffset;\n const selectionEndNode = anchorBeforeFocus ? focusNode : anchorNode;\n const selectionEndOffset = anchorBeforeFocus ? focusOffset : anchorOffset;\n\n const entries: Entry[] = [];\n for (const inputRef of inputRefs) {\n if (!inputRef.current) {\n continue;\n }\n\n for (const [\n key,\n handler,\n ] of inputRef.current.spinButtonHandlers.entries()) {\n const el = handler?.element.current;\n if (el) {\n entries.push({ inputRef, key, element: el });\n }\n }\n }\n\n return entries\n .filter(({ element }) =>\n selectionOverlapsSpinButton(\n selectionStartNode,\n selectionStartOffset,\n selectionEndNode,\n selectionEndOffset,\n element,\n ),\n )\n .map(({ inputRef, key, element }) => ({\n inputRef,\n key,\n previousText: element.textContent ?? null,\n }));\n}\n\n/**\n * Restores spin-button values from a previously captured snapshot.\n * For each entry the current handler is resolved via the stable `inputRef` +\n * Map key, so stale handler references from before a React re-render are never\n * used.\n * @internal\n */\nexport function restoreSpinButtonSnapshot(\n snapshot: SpinButtonSnapshotEntry[],\n): void {\n for (const { inputRef, key, previousText } of snapshot) {\n const handler = inputRef.current?.spinButtonHandlers.get(key);\n if (!handler) {\n continue;\n }\n\n if (handler.type === 'number') {\n // applyText updates DOM, internal state, and fires onChange atomically.\n handler.applyText(previousText ?? '', true);\n } else if (previousText !== null && previousText.length > 0) {\n // Write to DOM immediately to avoid a visual flash before re-render.\n if (handler.element.current) {\n handler.element.current.textContent = previousText;\n }\n // searchValue updates internal state and fires onChange.\n handler.searchValue(previousText.charAt(0), true);\n } else {\n handler.clearValue(true);\n }\n }\n}\n\n/**\n * After a bulk-clear, determines the expression value to apply for each affected input:\n * - **0 survivors** (all spin buttons cleared): resets the input to an empty expression (`\"\"`).\n * - **1 survivor** (exactly one spin button was outside the selection): carries its value\n * into expression mode via `setExpressionValue` rather than leaving a partial date.\n * - **2+ survivors** (partial deletion): leaves the remaining spin buttons as-is.\n *\n * **Must be called BEFORE the clear loop** so that textContent is read while\n * the DOM is still intact (TextSpinButton clears its DOM only on next render).\n * Returns a Map of inputRef \u2192 expression text for every input that qualifies.\n * After clearing, iterate the map and call `inputRef.current.setExpressionValue(text)`.\n * @internal\n */\nexport function findExpressionFallbacks(\n snapshot: SpinButtonSnapshotEntry[],\n): Map<RefObject<DateTimeInputRef>, string> {\n const result = new Map<RefObject<DateTimeInputRef>, string>();\n\n for (const inputRef of new Set(snapshot.map((e) => e.inputRef))) {\n if (!inputRef.current) {\n continue;\n }\n\n const clearedKeys = new Set(\n snapshot.filter((e) => e.inputRef === inputRef).map((e) => e.key),\n );\n\n // Collect the spin buttons that were NOT part of the deletion.\n const survivors = [...inputRef.current.spinButtonHandlers.entries()].filter(\n ([key]) => !clearedKeys.has(key),\n );\n\n if (survivors.length === 0) {\n // Everything was cleared \u2014 reset the input to an empty expression.\n result.set(inputRef, '');\n } else if (survivors.length === 1) {\n // Exactly one spin button survived \u2014 carry its value into expression mode.\n const [, handler] = survivors[0];\n const text = handler?.element.current?.textContent ?? '';\n if (text.length > 0) {\n result.set(inputRef, text);\n }\n }\n // 2+ survivors: partial deletion within the input, leave the spin buttons as-is.\n }\n\n return result;\n}\n\n/** Returns the spin-button handler for the first entry in a snapshot, or `undefined`.\n * Returns `undefined` when that entry is the first or second spin button in its\n * group \u2014 in those cases callers should fall back to expression-input focus.\n * @internal\n */\nexport function getFirstSnapshotHandler(snapshot: SpinButtonSnapshotEntry[]) {\n const first = snapshot[0];\n if (!first) {\n return undefined;\n }\n const spinButtonHandlers = first.inputRef.current?.spinButtonHandlers;\n if (!spinButtonHandlers) {\n return undefined;\n }\n\n // Count only entries belonging to the first inputRef so that a snapshot\n // spanning two inputs does not inflate the count and return a wrong result.\n const clearedInFirstInput = snapshot.filter(\n (e) => e.inputRef === first.inputRef,\n ).length;\n // It switches to relative input either when everything is cleared or when only the first spinbutton remains.\n const switchedToRelative = clearedInFirstInput >= spinButtonHandlers.size - 1;\n\n if (switchedToRelative) {\n return undefined;\n }\n\n return spinButtonHandlers.get(first.key);\n}\n\n/** Returns the spin-button handler for the last entry in a snapshot, or `undefined`.\n * Returns `undefined` when the last input's cleared count means it switched to\n * relative mode \u2014 callers should fall back to expression-input focus in that case.\n * @internal\n */\nexport function getLastSnapshotHandler(snapshot: SpinButtonSnapshotEntry[]) {\n const last = snapshot[snapshot.length - 1];\n if (!last) {\n return undefined;\n }\n const spinButtonHandlers = last.inputRef.current?.spinButtonHandlers;\n if (!spinButtonHandlers) {\n return undefined;\n }\n\n // Count only entries belonging to the last inputRef so that a snapshot\n // spanning two inputs does not inflate the count and return a wrong result.\n const clearedInLastInput = snapshot.filter(\n (e) => e.inputRef === last.inputRef,\n ).length;\n // It switches to relative input either when everything is cleared or when only the first spinbutton remains.\n const switchedToRelative = clearedInLastInput >= spinButtonHandlers.size - 1;\n\n if (switchedToRelative) {\n return undefined;\n }\n\n return spinButtonHandlers.get(last.key);\n}\n\n/**\n * Returns the first ref in `inputRefs` order that has an expression input to\n * focus after a bulk clear, considering both directly cleared expression inputs\n * and inputs that transitioned to expression mode via expressionFallbacks.\n * Using `inputRefs` order ensures focus lands on the leftmost affected input\n * even when the selection's anchor is in an already-empty expression input.\n * @internal\n */\nexport function findFirstExpressionFocusTarget(\n inputRefs: RefObject<DateTimeInputRef>[],\n affectedExpressionRefs: RefObject<DateTimeInputRef>[],\n expressionFallbacks: Map<RefObject<DateTimeInputRef>, string>,\n): RefObject<DateTimeInputRef> | undefined {\n const allAffected = new Set<RefObject<DateTimeInputRef>>([\n ...affectedExpressionRefs,\n ...expressionFallbacks.keys(),\n ]);\n return inputRefs.find((ref) => allAffected.has(ref));\n}\n\n/**\n * Returns the expression input element when the selection is non-collapsed but\n * covers only part of the text within a single expression input. In that case\n * the caller should handle the deletion explicitly rather than relying on the\n * bulk-clear path or native browser behaviour.\n * Returns null when the selection is not a partial single-expression selection.\n * @internal\n */\nexport function getPartialExpressionElement(\n selection: Selection,\n inputRefs: RefObject<DateTimeInputRef>[],\n): HTMLSpanElement | null {\n for (const ref of inputRefs) {\n const expressionElement = ref.current?.expressionInputRef;\n if (\n expressionElement &&\n expressionElement.contains(selection.anchorNode) &&\n expressionElement.contains(selection.focusNode) &&\n selection.toString().length < (expressionElement.textContent?.length ?? 0)\n ) {\n return expressionElement;\n }\n }\n return null;\n}\n\n/**\n * Returns expression boundaries touched by the current selection.\n * - Two different expressions: `[firstExpressionElement, lastExpressionElement]` in document order.\n * - Mixed boundary (one expression + one non-expression boundary): `[expressionElement, expressionElement]`.\n * - Otherwise: `null`.\n * @internal\n */\nexport function getCrossExpressionElements(\n selection: Selection,\n inputRefs: RefObject<DateTimeInputRef>[],\n): [HTMLSpanElement, HTMLSpanElement] | null {\n if (selection.rangeCount < 1) {\n return null;\n }\n\n const range = selection.getRangeAt(0);\n const startEl = inputRefs.find((ref) =>\n ref.current?.expressionInputRef?.contains(range.startContainer),\n )?.current?.expressionInputRef;\n const endEl = inputRefs.find((ref) =>\n ref.current?.expressionInputRef?.contains(range.endContainer),\n )?.current?.expressionInputRef;\n\n if (!startEl && !endEl) {\n return null;\n }\n\n if (startEl && !endEl) {\n return [startEl, startEl];\n }\n if (!startEl && endEl) {\n return [endEl, endEl];\n }\n\n if (!startEl || !endEl) {\n return null;\n }\n\n // A selection fully inside one expression is handled by the existing\n // single-expression paths (partial deletion or full bulk clear).\n if (startEl === endEl) {\n return null;\n }\n\n // Return in document order.\n const startFirst = !!(\n startEl.compareDocumentPosition(endEl) & Node.DOCUMENT_POSITION_FOLLOWING\n );\n return startFirst ? [startEl, endEl] : [endEl, startEl];\n}\n\n/**\n * Focuses an expression element and places the cursor at the given range,\n * or at the end of the element when no range is provided.\n * The data-restoring-selection guard tells the focus handler to skip selectAll().\n * @internal\n */\nexport function focusExpression(\n expressionElement: HTMLSpanElement,\n range?: Range,\n): void {\n const root = expressionElement.closest<HTMLElement>('.strato-inputgroup');\n root?.setAttribute('data-restoring-selection', '');\n expressionElement.focus();\n const sel = globalThis.getSelection();\n if (sel) {\n if (!range) {\n range = document.createRange();\n range.selectNodeContents(expressionElement);\n range.collapse(false);\n }\n sel.setBaseAndExtent(\n range.startContainer,\n range.startOffset,\n range.endContainer,\n range.endOffset,\n );\n }\n root?.removeAttribute('data-restoring-selection');\n}\n\nfunction getOffsetWithinExpression(\n expressionElement: HTMLSpanElement,\n container: Node,\n offset: number,\n): number {\n const range = document.createRange();\n range.selectNodeContents(expressionElement);\n range.setEnd(container, offset);\n return range.toString().length;\n}\n\n/**\n * Deletes the selected range within a single expression input, collapses the\n * cursor to the deletion point, and fires an input event so the expression\n * handler can update React state.\n * @internal\n */\nexport function deletePartialExpression(\n selection: Selection,\n expressionElement: HTMLSpanElement,\n): void {\n const range = selection.getRangeAt(0);\n const text = expressionElement.textContent ?? '';\n\n const start = expressionElement.contains(range.startContainer)\n ? getOffsetWithinExpression(\n expressionElement,\n range.startContainer,\n range.startOffset,\n )\n : 0;\n const end = expressionElement.contains(range.endContainer)\n ? getOffsetWithinExpression(\n expressionElement,\n range.endContainer,\n range.endOffset,\n )\n : text.length;\n\n const from = Math.min(start, end);\n const to = Math.max(start, end);\n const nextText = `${text.slice(0, from)}${text.slice(to)}`;\n expressionElement.textContent = nextText;\n\n const nextRange = document.createRange();\n const node = expressionElement.firstChild;\n if (node?.nodeType === Node.TEXT_NODE) {\n nextRange.setStart(node, Math.min(from, nextText.length));\n } else {\n nextRange.setStart(expressionElement, 0);\n }\n nextRange.collapse(true);\n\n focusExpression(expressionElement, nextRange);\n expressionElement.dispatchEvent(new InputEvent('input', { bubbles: true }));\n}\n\n/**\n * Plans a bulk clear operation by analyzing the current selection\n * and computing everything needed to clear affected spin buttons and expression inputs.\n * Must be called before any DOM writes so that textContent is still intact.\n * @internal\n */\nexport function planBulkClear(\n selection: Selection,\n inputRefs: RefObject<DateTimeInputRef>[],\n endpointsOverride?: SelectionEndpoints,\n): {\n snapshot: SpinButtonSnapshotEntry[];\n affectedExpressionRefs: RefObject<DateTimeInputRef>[];\n expressionFallbacks: Map<RefObject<DateTimeInputRef>, string>;\n clearedExpressions: Array<{\n inputRef: RefObject<DateTimeInputRef>;\n previousText: string;\n }>;\n} {\n // Safari clips a freshly restored cross-CE selection to the active editing\n // host, so callers may pass the pre-restore endpoints captured by\n // `deferContentEditableRestore`. Fall back to the live selection otherwise.\n const anchorNode = endpointsOverride?.anchorNode ?? selection.anchorNode;\n const anchorOffset =\n endpointsOverride?.anchorOffset ?? selection.anchorOffset;\n const focusNode = endpointsOverride?.focusNode ?? selection.focusNode;\n const focusOffset = endpointsOverride?.focusOffset ?? selection.focusOffset;\n\n const affectedExpressionRefs = inputRefs.filter((ref) => {\n const expressionInputRef = ref.current?.expressionInputRef;\n return (\n expressionInputRef &&\n (expressionInputRef.contains(anchorNode) ||\n expressionInputRef.contains(focusNode))\n );\n });\n\n // Capture raw expression (inputRef.value e.g. \"now()-2h\", not display text) for correct undo via setExpressionValue.\n const clearedExpressions = affectedExpressionRefs.map((ref) => ({\n inputRef: ref,\n previousText:\n ref.current?.inputRef?.value ??\n ref.current?.expressionInputRef?.textContent ??\n '',\n }));\n\n const anchorInExpression = affectedExpressionRefs.some((ref) =>\n ref.current?.expressionInputRef?.contains(anchorNode),\n );\n const focusInExpression = affectedExpressionRefs.some((ref) =>\n ref.current?.expressionInputRef?.contains(focusNode),\n );\n\n // Skip buildSpinButtonSnapshot only when BOTH boundaries are inside expression inputs.\n const snapshot =\n anchorInExpression && focusInExpression\n ? []\n : buildSpinButtonSnapshot(\n anchorNode,\n anchorOffset,\n focusNode,\n focusOffset,\n inputRefs,\n );\n\n return {\n snapshot,\n affectedExpressionRefs,\n expressionFallbacks: findExpressionFallbacks(snapshot),\n clearedExpressions,\n };\n}\n\n/**\n * Deletes the selected portion across two expression inputs using two separate\n * single-element ranges. Using one cross-element range with deleteContents()\n * does not modify text inside contenteditable boundaries; splitting into two\n * intra-element ranges avoids that limitation entirely.\n * Focus is placed at the end of whatever text remains in the first expression.\n * @internal\n */\nexport function deleteCrossExpressionPartial(\n selection: Selection,\n [firstExpressionElement, lastExpressionElement]: [\n HTMLSpanElement,\n HTMLSpanElement,\n ],\n): void {\n if (firstExpressionElement === lastExpressionElement) {\n deletePartialExpression(selection, firstExpressionElement);\n return;\n }\n\n const { startContainer, startOffset, endContainer, endOffset } =\n selection.getRangeAt(0);\n\n // Delete from the selection start to the end of firstExpressionElement.\n const fromRange = document.createRange();\n fromRange.setStart(startContainer, startOffset);\n fromRange.setEnd(\n firstExpressionElement,\n firstExpressionElement.childNodes.length,\n );\n fromRange.deleteContents();\n\n // Delete from the start of lastExpressionElement to the selection end.\n const toRange = document.createRange();\n toRange.setStart(lastExpressionElement, 0);\n toRange.setEnd(endContainer, endOffset);\n toRange.deleteContents();\n\n // Place cursor at the end of whatever text remains in the first expression.\n selection.removeAllRanges();\n focusExpression(firstExpressionElement);\n\n firstExpressionElement.dispatchEvent(\n new InputEvent('input', { bubbles: true }),\n );\n lastExpressionElement.dispatchEvent(\n new InputEvent('input', { bubbles: true }),\n );\n}\n\n/**\n * Returns the keyup callback passed to `removeContentEditable` after a\n * bulk-clear (cut or delete). Once the key is released and contenteditable\n * is restored, it decides where focus lands:\n * - If `firstElement` is `undefined` (the selection started at a leading spin\n * button), focus the first affected expression input.\n * - Otherwise keep focus on that spin button.\n * @internal\n */\nexport function restoreFocusAfterBulkClear(\n firstSpinButtonHandler: SpinButtonHandler | null | undefined,\n focusTarget: RefObject<DateTimeInputRef> | undefined,\n) {\n if (firstSpinButtonHandler) {\n firstSpinButtonHandler.element.current?.focus();\n firstSpinButtonHandler.selectAll();\n return;\n }\n\n const expressionElement = focusTarget?.current?.expressionInputRef;\n if (expressionElement) {\n requestAnimationFrame(() => {\n focusExpression(expressionElement);\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AAEA,YAAY,YAAY;AAExB,SAAS,uBAAuB;AAGhC,SAAS,oBAAoB,SAAiB,OAAsB;AAClE,kBAAgB,qBAAqB,EAAE,KAAK,SAAS,KAAK;AAC5D;AAGO,SAAS,0BAA0B,UAAyB;AAEjE,QAAM,uBAAuB,SAAS,eAAe;AAAA,IACnD,IAAI,OAAO,aAAa;AAAA,EAC1B;AACA,QAAM,mBAAmB,sBAAsB,aAAa,gBAAgB;AAC5E,QAAM,0BACJ,SAAS,eAAe,QAAQ,kBAAkB;AAGpD,MAAI,yBAAyB,yBAAyB;AACpD,WAAO;AAAA,EACT;AAEA,QAAM,gBAAgB,yBAAyB,aAAa,gBAAgB;AAE5E,SAAO,kBAAkB;AAC3B;AAGA,SAAS,iBAAiB,MAAmB,MAAyB;AACpE,QAAM,SAAS,SAAS,iBAAiB,MAAM,WAAW,WAAW,IAAI;AAEzE,MAAI,UAAU,OAAO,UAAU;AAC/B,MAAI,QAAQ;AACZ,SAAO,SAAS;AACd,QAAI,OAAO;AAET,UAAI,0BAA0B,OAAO,GAAG;AACtC,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,YAAY,MAAM;AACpB,cAAQ;AAAA,IACV;AAEA,cAAU,OAAO,aAAa;AAAA,EAChC;AAEA,SAAO;AACT;AAGA,SAAS,aAAa,MAAmB,MAAyB;AAChE,QAAM,SAAS,SAAS,iBAAiB,MAAM,WAAW,WAAW,IAAI;AAEzE,MAAI,UAAU,OAAO,SAAS;AAC9B,MAAI,QAAQ;AAEZ,SAAO,SAAS;AACd,QAAI,OAAO;AAET,UAAI,0BAA0B,OAAO,GAAG;AACtC,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,YAAY,MAAM;AACpB,cAAQ;AAAA,IACV;AACA,cAAU,OAAO,SAAS;AAAA,EAC5B;AAEA,SAAO;AACT;AAGA,SAAS,0BACP,MACA,MACA,QACuC;AACvC,MACE,KAAK,aAAa,KAAK,aACvB,KAAK,aACL,SAAS,KAAK,UAAU,UACxB,0BAA0B,IAAI,GAC9B;AACA,WAAO,EAAE,MAAM,QAAQ,SAAS,EAAE;AAAA,EACpC;AAGA,MAAI,KAAK,aAAa,KAAK,WAAW;AACpC,UAAM,gBAAgB,KAAK,WAAW,MAAM;AAC5C,QAAI,eAAe;AACjB,YAAM,SAAS,SAAS;AAAA,QACtB;AAAA,QACA,WAAW;AAAA,QACX;AAAA,MACF;AACA,YAAM,YACJ,OAAO,WAAW,MACjB,cAAc,aAAa,KAAK,YAAY,gBAAgB;AAC/D,UACE,cACC,0BAA0B,SAAS,KAClC,0BAA0B,SAAS,MAAM,OAC3C;AACA,eAAO,EAAE,MAAM,WAAW,QAAQ,EAAE;AAAA,MACtC;AAAA,IACF;AAGA,QAAI,SAAS,GAAG;AACd,YAAM,gBAAgB,KAAK,WAAW,SAAS,CAAC;AAChD,UAAI,eAAe;AACjB,cAAM,SAAS,SAAS;AAAA,UACtB;AAAA,UACA,WAAW;AAAA,UACX;AAAA,QACF;AACA,cAAM,WACJ,OAAO,UAAU,MAChB,cAAc,aAAa,KAAK,YAAY,gBAAgB;AAC/D,YAAI,UAAU;AACZ,cAAI,mBAAgC,aAAa,MAAM,QAAQ;AAC/D,iBACE,qBAAqB,QACrB,0BAA0B,gBAAgB,MAAM,MAChD;AACA,+BAAmB,aAAa,MAAM,gBAAgB;AAAA,UACxD;AACA,cAAI,kBAAkB;AACpB,mBAAO,EAAE,MAAM,kBAAkB,QAAQ,EAAE;AAAA,UAC7C;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAGA,MAAI,OAAoB,aAAa,MAAM,IAAI;AAG/C,MACE,iBAAiB,IAAI,KACrB,QACA,0BAA0B,IAAI,MAAM,MACpC;AACA,UAAM,mBAAgC,aAAa,MAAM,IAAI;AAC7D,QAAI,iBAAiB,gBAAgB,GAAG;AACtC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,MAAM,MAAM,QAAQ,EAAE;AACjC;AAGA,SAAS,8BACP,MACA,MACA,QACuC;AACvC,MACE,KAAK,aAAa,KAAK,aACvB,SAAS,KACT,0BAA0B,IAAI,GAC9B;AACA,WAAO,EAAE,MAAM,QAAQ,SAAS,EAAE;AAAA,EACpC;AAGA,MAAI,KAAK,aAAa,KAAK,aAAa,SAAS,GAAG;AAClD,UAAM,gBAAgB,KAAK,WAAW,SAAS,CAAC;AAChD,QAAI,eAAe;AACjB,YAAM,SAAS,SAAS;AAAA,QACtB;AAAA,QACA,WAAW;AAAA,QACX;AAAA,MACF;AACA,YAAM,WACJ,OAAO,UAAU,MAChB,cAAc,aAAa,KAAK,YAAY,gBAAgB;AAC/D,UACE,UAAU,cACT,0BAA0B,QAAQ,KACjC,0BAA0B,QAAQ,MAAM,OAC1C;AACA,eAAO,EAAE,MAAM,UAAU,QAAQ,SAAS,UAAU,SAAS,EAAE;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAGA,MAAI,OAAoB,iBAAiB,MAAM,IAAI;AACnD,MACE,iBAAiB,IAAI,KACrB,QACA,0BAA0B,IAAI,MAAM,MACpC;AACA,UAAM,uBAAoC,iBAAiB,MAAM,IAAI;AACrE,QAAI,iBAAiB,oBAAoB,GAAG;AAC1C,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI,CAAC,QAAQ,MAAM,cAAc,MAAM;AACrC,WAAO;AAAA,EACT;AAEA,SAAO,EAAE,MAAM,MAAM,QAAQ,KAAK,UAAU,SAAS,EAAE;AACzD;AAGA,SAAS,2BACP,MACuC;AACvC,QAAM,SAAS,SAAS,iBAAiB,MAAM,WAAW,WAAW,IAAI;AACzE,MAAI,UAAU,OAAO,WAAW;AAChC,SAAO,YAAY,MAAM;AAEvB,QAAI,0BAA0B,OAAO,GAAG;AACtC,aAAO,EAAE,MAAM,SAAS,QAAQ,EAAE;AAAA,IACpC;AACA,cAAU,OAAO,SAAS;AAAA,EAC5B;AACA,SAAO;AACT;AAGA,SAAS,0BACP,MACuC;AACvC,QAAM,SAAS,SAAS,iBAAiB,MAAM,WAAW,WAAW,IAAI;AACzE,MAAI,UAAU,OAAO,UAAU;AAC/B,SAAO,YAAY,MAAM;AAEvB,QAAI,0BAA0B,OAAO,GAAG;AACtC,aAAO,EAAE,MAAM,SAAS,QAAQ,QAAQ,WAAW,UAAU,EAAE;AAAA,IACjE;AACA,cAAU,OAAO,aAAa;AAAA,EAChC;AACA,SAAO;AACT;AAEA,SAAS,uBACP,WACA,aACA,YACA,cACQ;AACR,MAAI,cAAc,YAAY;AAC5B,WAAO,cAAc;AAAA,EACvB;AAEA,QAAM,aAAa,SAAS,YAAY;AACxC,aAAW,SAAS,WAAW,WAAW;AAC1C,aAAW,SAAS,IAAI;AAExB,QAAM,cAAc,SAAS,YAAY;AACzC,cAAY,SAAS,YAAY,YAAY;AAC7C,cAAY,SAAS,IAAI;AAEzB,SAAO,WAAW,sBAAsB,MAAM,gBAAgB,WAAW;AAC3E;AAEA,SAAS,4BACP,oBACA,sBACA,kBACA,oBACA,YACS;AACT,QAAM,kBAAkB,2BAA2B,UAAU;AAC7D,QAAM,gBAAgB,0BAA0B,UAAU;AAE1D,MAAI,CAAC,mBAAmB,CAAC,eAAe;AACtC,WAAO;AAAA,EACT;AAEA,SACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,cAAc;AAAA,EAChB,IAAI,KACJ;AAAA,IACE;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,EAClB,IAAI;AAER;AAOA,SAAS,iCAAiC,MAAyB;AACjE,aAAW,YAAY,KAAK;AAAA,IAC1B;AAAA,EACF,GAAG;AACD,UAAM,gBAAgB,SAAS,aAAa,yBAAyB;AACrE,QAAI,kBAAkB,MAAM;AAC1B,eAAS,aAAa,mBAAmB,aAAa;AAAA,IACxD;AACA,aAAS,gBAAgB,yBAAyB;AAElD,UAAM,cAAc,SAAS,aAAa,kBAAkB;AAC5D,QAAI,gBAAgB,MAAM;AACxB,eAAS,aAAa,YAAY,WAAW;AAC7C,eAAS,gBAAgB,kBAAkB;AAAA,IAC7C;AAAA,EACF;AAEA,aAAW,MAAM,KAAK,iBAA8B,sBAAsB,GAAG;AAC3E,OAAG,gBAAgB,oBAAoB;AAAA,EACzC;AACF;AASA,SAAS,yBACP,aACA,OACA,EAAE,mBAAmB,MAAM,IAAoC,CAAC,GAC1D;AACN,aAAW,MAAM,YAAY;AAAA,IAC3B;AAAA,EACF,GAAG;AACD,OAAG,gBAAgB,oBAAoB;AAAA,EACzC;AAGA,aAAW,SAAS,YAAY;AAAA,IAC9B;AAAA,EACF,GAAG;AACD,eAAW,SAAS,MAAM,UAAU;AAClC,UAAI,MAAM,eAAe,KAAK,GAAG;AAC/B,cAAM,aAAa,sBAAsB,EAAE;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAGA,MAAI,kBAAkB;AACpB,eAAW,WAAW,YAAY,iBAAiB,kBAAkB,GAAG;AACtE,UAAI,MAAM,eAAe,OAAO,GAAG;AACjC,gBAAQ,aAAa,sBAAsB,EAAE;AAAA,MAC/C;AAAA,IACF;AAAA,EACF;AACF;AAKA,MAAM,wBAAwB,oBAAI,QAAsC;AAexE,MAAM,0BAA0B,oBAAI,QAAyC;AAStE,SAAS,2BACd,MACgC;AAChC,QAAM,QAAQ,wBAAwB,IAAI,IAAI;AAC9C,0BAAwB,OAAO,IAAI;AACnC,SAAO;AACT;AAOA,SAAS,4BAA4B,MAAyB;AAE5D,wBAAsB,IAAI,IAAI,GAAG,MAAM;AAEvC,QAAM,gBAAgB,IAAI,gBAAgB;AAC1C,wBAAsB,IAAI,MAAM,aAAa;AAE7C,WAAS,QAAQ,GAAgB;AAC/B,QAAI,aAAa,eAAe;AAC9B,UAAI,CAAC,QAAQ,WAAW,OAAO,OAAO,EAAE,SAAS,EAAE,GAAG,GAAG;AACvD;AAAA,MACF;AACA,WAAK,EAAE,WAAW,EAAE,YAAY,EAAE,IAAI,YAAY,MAAM,KAAK;AAC3D;AAAA,MACF;AAGA,UACE,EAAE,YACF;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,EAAE,SAAS,EAAE,GAAG,GAChB;AACA;AAAA,MACF;AASA,UACE,CAAC,EAAE,YACH,CAAC,EAAE,WACH,CAAC,EAAE,WACH,CAAC,EAAE,WACF,EAAE,QAAQ,eAAe,EAAE,QAAQ,eACpC;AACA,cAAM,YAAY;AAAA,UAChB;AAAA,UACA,EAAE,QAAQ,cAAc,SAAS;AAAA,QACnC;AACA,YAAI,WAAW;AACb,YAAE,eAAe;AAIjB,YAAE,gBAAgB;AAGlB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAOA,UAAM,YAAY,WAAW,aAAa;AAC1C,UAAM,aAAa,WAAW,cAAc;AAC5C,UAAM,eAAe,WAAW,gBAAgB;AAChD,UAAM,YAAY,WAAW,aAAa;AAC1C,UAAM,cAAc,WAAW,eAAe;AAC9C,UAAM,2BACJ,cAAc,QACd,eAAe,QACf,cAAc,QACd,eAAe,aACf,UAAU,SAAS,EAAE,SAAS;AAMhC,QAAI,4BAA4B,cAAc,WAAW;AACvD,8BAAwB,IAAI,MAAM;AAAA,QAChC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAEA,qCAAiC,IAAI;AACrC,0BAAsB,OAAO,IAAI;AACjC,kBAAc,MAAM;AAEpB,QAAI,4BAA4B,cAAc,WAAW;AACvD,UAAI;AACF,mBAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,SAAS,OAAO;AACd;AAAA,UACE;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,WAAS,iBAAiB,aAAa,SAAS;AAAA,IAC9C,QAAQ,cAAc;AAAA,IACtB,SAAS;AAAA,EACX,CAAC;AACD,WAAS,iBAAiB,WAAW,SAAS;AAAA,IAC5C,QAAQ,cAAc;AAAA,IACtB,SAAS;AAAA,EACX,CAAC;AACH;AAQO,SAAS,sBACd,aACA,mBACA,WACA,iBACA,yBACM;AAGN,cAAY,aAAa,4BAA4B,EAAE;AAEvD,QAAM,mBACJ,YAAY,iBAA8B,mBAAmB;AAC/D,aAAW,YAAY,kBAAkB;AACvC,UAAM,gBAAgB,SAAS,aAAa,iBAAiB,KAAK;AAClE,aAAS,gBAAgB,iBAAiB;AAC1C,aAAS,QAAQ,qBAAqB;AAGtC,QAAI,SAAS,aAAa,UAAU,GAAG;AACrC,eAAS,QAAQ,cAAc,SAAS,aAAa,UAAU,KAAK;AACpE,eAAS,gBAAgB,UAAU;AAAA,IACrC;AAAA,EACF;AAEA,QAAM,SAAS,IAAI,gBAAgB;AAKnC,MAAI,yBAAyB;AAC3B,UAAM,YAAY,0BAA0B,uBAAuB;AACnE,QAAI,WAAW;AACb,kBAAY;AAAA,QACV;AAAA,QACA,MAAM;AACJ,gBAAM,MAAM,WAAW,aAAa;AACpC,cAAI,CAAC,OAAO,CAAC,IAAI,YAAY;AAC3B;AAAA,UACF;AAEA,cAAI,IAAI,WAAW,aAAa,KAAK,WAAW;AAC9C;AAAA,UACF;AACA,gBAAM,YAAY,IAAI;AACtB,gBAAM,cAAc,IAAI,eAAe;AACvC,cAAI,CAAC,WAAW;AACd;AAAA,UACF;AACA,gBAAM,oBACJ;AAAA,YACE,UAAU;AAAA,YACV,UAAU;AAAA,YACV;AAAA,YACA;AAAA,UACF,KAAK;AACP,cAAI;AACF,gBAAI,gBAAgB;AAEpB,gBAAI,mBAAmB;AACrB,kBAAI;AAAA,gBACF,UAAU;AAAA,gBACV,UAAU;AAAA,gBACV;AAAA,gBACA;AAAA,cACF;AAAA,YACF,OAAO;AACL,kBAAI;AAAA,gBACF;AAAA,gBACA;AAAA,gBACA,UAAU;AAAA,gBACV,UAAU;AAAA,cACZ;AAAA,YACF;AAAA,UACF,SAAS,OAAO;AACd;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,QACA,EAAE,QAAQ,OAAO,QAAQ,SAAS,KAAK;AAAA,MACzC;AAAA,IACF;AAAA,EACF;AAGA,cAAY;AAAA,IACV;AAAA,IACA,MAAM;AACJ,YAAM,MAAM,WAAW,aAAa;AACpC,UAAI,CAAC,OAAO,IAAI,eAAe,GAAG;AAChC;AAAA,MACF;AACA,YAAM,QAAQ,IAAI,WAAW,CAAC;AAC9B,+BAAyB,aAAa,KAAK;AAAA,IAC7C;AAAA,IACA,EAAE,QAAQ,OAAO,QAAQ,SAAS,KAAK;AAAA,EACzC;AAEA,oBAAkB;AAAA,IAChB;AAAA,IACA,CAAC,UAAiB;AAEhB,YAAM,yBAAyB,WAAW,aAAa;AACvD,YAAM,qBAAqB,wBAAwB,cAAc;AACjE,YAAM,uBAAuB,wBAAwB,gBAAgB;AACrE,YAAM,oBAAoB,wBAAwB,aAAa;AAC/D,YAAM,sBAAsB,wBAAwB,eAAe;AAEnE,YAAM,2BACJ,2BAA2B,QAC3B,uBAAuB,SAAS,EAAE,SAAS,MAC1C,uBAAuB,qBACrB,uBAAuB,QACtB,uBAAuB,qBACvB,yBAAyB,uBACzB,mBAAmB,aAAa,KAAK;AAE3C,UAAI,4BAA4B,sBAAsB,mBAAmB;AAKvE,cAAM,sBACJ,mBAAmB,aAAa,KAAK;AAGvC,cAAM,yBAAyB,sBAC3B,4BAA4B,OAC5B;AAAA,UACE;AAAA,UACA;AAAA,QACF;AAEJ,YAAI;AACJ,YAAI,qBAAqB;AACvB,6BAAmB,2BAA2B;AAAA,QAChD,WAAW,wBAAwB;AACjC,6BAAmB;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,UACF;AAAA,QACF,OAAO;AACL,6BAAmB;AAAA,QACrB;AAGA,YAAI,0BAAgC;AACpC,YAAI,4BAAoC;AACxC,YAAI,uBAAuB,kBAAkB;AAC3C,gBAAM,UAAU,0BAA0B,gBAAgB;AAC1D,cAAI,SAAS;AACX,sCAA0B,QAAQ;AAClC,wCAA4B,QAAQ;AAAA,UACtC;AAAA,QACF;AAEA,cAAM,wBAAwB;AAAA,UAC5B;AAAA,UACA;AAAA,QACF;AACA,cAAM,kBACJ,yBAAyB,kBAAkB,aAAa,KAAK,YACzD;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,QACF,IACA;AAEN,cAAM,oBACJ;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,KAAK;AAEP,YAAI;AACJ,YAAI,kBAAkB,aAAa,MAAM,MAAM,cAAc;AAC3D,sBAAY,oBACR,2BAA2B,gBAAgB,IAC3C,0BAA0B,gBAAgB;AAAA,QAChD,OAAO;AACL,sBAAY;AAAA,YACV,MAAM;AAAA,YACN,QAAQ;AAAA,UACV;AAAA,QACF;AACA,YAAI;AACJ,YAAI,iBAAiB,aAAa,MAAM,MAAM,cAAc;AAC1D,qBAAW,oBACP,0BAA0B,eAAe,IACzC,2BAA2B,eAAe;AAAA,QAChD,OAAO;AACL,qBAAW,EAAE,MAAM,mBAAmB,QAAQ,oBAAoB;AAAA,QACpE;AAEA,YAAI,aAAa,UAAU;AACzB,cAAI;AACF,kBAAM,QAAQ,SAAS,YAAY;AACnC,gBAAI,mBAAmB;AACrB,oBAAM,SAAS,UAAU,MAAM,UAAU,MAAM;AAC/C,oBAAM,OAAO,SAAS,MAAM,SAAS,MAAM;AAAA,YAC7C,OAAO;AACL,oBAAM,SAAS,SAAS,MAAM,SAAS,MAAM;AAC7C,oBAAM,OAAO,UAAU,MAAM,UAAU,MAAM;AAAA,YAC/C;AACA,kBAAM,MAAM,WAAW,aAAa;AACpC,iBAAK;AAAA,cACH,UAAU;AAAA,cACV,UAAU;AAAA,cACV,SAAS;AAAA,cACT,SAAS;AAAA,YACX;AAEA,qCAAyB,aAAa,KAAK;AAAA,UAC7C,SAAS,OAAO;AACd;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,0BAAkB,OAAO,wBAAwB;AACjD,oBAAY,gBAAgB,0BAA0B;AAGtD,oCAA4B,WAAW;AAAA,MACzC,OAAO;AAEL,yCAAiC,WAAW;AAE5C,YAAI,sBAAsB,mBAAmB;AAC3C,cAAI;AACF,uBACG,aAAa,GACZ;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACF;AAAA,UACJ,SAAS,OAAO;AACd;AAAA,cACE;AAAA,cACA;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,0BAAkB,OAAO,wBAAwB;AACjD,oBAAY,gBAAgB,0BAA0B;AAAA,MACxD;AAEA,aAAO,MAAM;AAAA,IACf;AAAA,IACA,EAAE,QAAQ,OAAO,OAAO;AAAA,EAC1B;AACF;AAQA,SAAS,8BACP,MACA,YACA,cACA,WACA,aACA,WACuC;AACvC,MAAI,aAAiC;AAErC,MAAI,UAAU,aAAa,KAAK,WAAW;AACzC,iBACG,UAAmB,eAAe;AAAA,MACjC;AAAA,IACF,KAAK;AAAA,EACT,WACE,qBAAqB,eACrB,UAAU,aAAa,MAAM,MAAM,cACnC;AAEA,iBAAa;AAAA,EACf;AAEA,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,MAAM;AAAA,IACnB,KAAK,iBAA8B,qBAAqB;AAAA,EAC1D;AACA,QAAM,MAAM,OAAO,QAAQ,UAAU;AAGrC,QAAM,sBACJ,uBAAuB,WAAW,aAAa,YAAY,YAAY,IACvE;AACF,QAAM,YACJ,cAAc,YAAY,CAAC,sBAAsB;AAEnD,MAAI,cAAc,WAAW;AAC3B,UAAM,SAAS,OAAO,MAAM,CAAC,KAAK;AAClC,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACT;AAEA,WAAO,YACH,0BAA0B,MAAM,IAChC,2BAA2B,MAAM;AAAA,EACvC;AAEA,QAAM,SAAS,OAAO,MAAM,CAAC,KAAK;AAClC,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AACA,SAAO,YACH,2BAA2B,MAAM,IACjC,0BAA0B,MAAM;AACtC;AAEO,SAAS,gBACd,KACM;AACN,QAAM,YAAY,WAAW,aAAa;AAC1C,MACE,cAAc,QACd,UAAU,eAAe,QACzB,UAAU,cAAc,QACxB,UAAU,aAAa,GACvB;AACA;AAAA,EACF;AAEA,QAAM,aAAa,UAAU;AAC7B,QAAM,eAAe,UAAU;AAC/B,QAAM,YAAY,UAAU;AAC5B,QAAM,cAAc,UAAU;AAE9B,MAAI,UAAiD;AAErD,QAAM,OACJ,UAAU,aAAa,KAAK,YACvB,UAAmB,eAAe;AAAA,IACjC;AAAA,EACF,IACA,qBAAqB,cACrB,UAAU,QAAwB,oBAAoB,IACtD;AACN,MAAI,SAAS,QAAQ,SAAS,QAAW;AACvC;AAAA,EACF;AAEA,MAAI,QAAQ,aAAa;AACvB,cACE;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,KAAK,8BAA8B,MAAM,WAAW,WAAW;AAAA,EACnE,WAAW,QAAQ,cAAc;AAC/B,cACE;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,KAAK,0BAA0B,MAAM,WAAW,WAAW;AAAA,EAC/D,WAAW,QAAQ,QAAQ;AACzB,cAAU,2BAA2B,IAAI;AAAA,EAC3C,WAAW,QAAQ,OAAO;AACxB,cAAU,0BAA0B,IAAI;AAAA,EAC1C;AAGA,MAAI,mBAAmB;AACvB,SAAO,WAAW,0BAA0B,QAAQ,IAAI,MAAM,MAAM;AAClE,uBAAmB;AACnB,UAAM,UACJ,QAAQ,eAAe,QAAQ,SAC3B,8BAA8B,MAAM,QAAQ,MAAM,QAAQ,MAAM,IAChE,0BAA0B,MAAM,QAAQ,MAAM,QAAQ,MAAM;AAClE,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AACA,cAAU;AAAA,EACZ;AAIA,MAAI,oBAAoB,SAAS,KAAK,aAAa,KAAK,WAAW;AACjE,QAAI,QAAQ,cAAc;AACxB,gBAAU,EAAE,MAAM,QAAQ,MAAM,QAAQ,EAAE;AAAA,IAC5C,WAAW,QAAQ,aAAa;AAC9B,gBAAU;AAAA,QACR,MAAM,QAAQ;AAAA,QACd,QAAQ,QAAQ,KAAK,WAAW,UAAU;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAEA,MAAI,CAAC,SAAS;AACZ;AAAA,EACF;AAGA,QAAM,qBAAqB,CAAC,SAAmC;AAC7D,UAAM,KACJ,KAAK,aAAa,KAAK,YAClB,KAAc,gBACf,gBAAgB,cAChB,OACA;AACN,UAAM,KAAK,IAAI,QAAqB,oBAAoB,KAAK;AAC7D,WAAO,IAAI,aAAa,MAAM,MAAM,eAAe,KAAK;AAAA,EAC1D;AAEA,QAAM,WAAW,mBAAmB,UAAU;AAG9C,QAAM,WAAW,0BAA0B,UAAU;AACrD,QAAM,SAAS,0BAA0B,QAAQ,IAAI;AACrD,QAAM,kBAAkB,aAAa,QAAQ,aAAa;AAE1D,MAAI,iBAAiB;AAEnB,QAAI,qBAAqB;AACzB,QAAI,uBAAuB;AAC3B,QAAI,WAAW,aAAa,KAAK,aAAa,UAAU;AAEtD,YAAM,oBACJ;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV,KAAK;AACP,YAAM,WAAW,oBACb,2BAA2B,QAAQ,IACnC,0BAA0B,QAAQ;AACtC,UAAI,UAAU;AACZ,6BAAqB,SAAS;AAC9B,+BAAuB,SAAS;AAAA,MAClC;AAAA,IACF;AAGA,SAAK,aAAa,4BAA4B,EAAE;AAChD,eAAW,YAAY,KAAK;AAAA,MAC1B;AAAA,IACF,GAAG;AACD,YAAM,OAAO,SAAS,aAAa,iBAAiB,KAAK;AACzD,eAAS,gBAAgB,iBAAiB;AAC1C,eAAS,QAAQ,qBAAqB;AAAA,IACxC;AAEA,QAAI;AAEF,gBAAU;AAAA,QACR;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAEA,YAAM,oBACJ;AAAA,QACE;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV,KAAK;AACP,YAAM,QAAQ,SAAS,YAAY;AACnC,UAAI,mBAAmB;AACrB,cAAM,SAAS,oBAAoB,oBAAoB;AACvD,cAAM,OAAO,QAAQ,MAAM,QAAQ,MAAM;AAAA,MAC3C,OAAO;AACL,cAAM,SAAS,QAAQ,MAAM,QAAQ,MAAM;AAC3C,cAAM,OAAO,oBAAoB,oBAAoB;AAAA,MACvD;AACA,+BAAyB,MAAM,KAAK;AAAA,IACtC,SAAS,OAAO;AACd;AAAA,QACE;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAEA,SAAK,gBAAgB,0BAA0B;AAC/C,gCAA4B,IAAI;AAAA,EAClC,OAAO;AAEL,SAAK,aAAa,4BAA4B,EAAE;AAChD,QAAI;AACF,gBAAU;AAAA,QACR;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AAAA,IACF,SAAS,OAAO;AACd;AAAA,QACE;AAAA,QACA;AAAA,MACF;AAAA,IACF;AACA,SAAK,gBAAgB,0BAA0B;AAG/C,UAAM,eAAe,IAAI,MAAM;AAC/B,UAAM,MAAM,WAAW,wBAAwB,QAAQ,IAAI;AAC3D,QACE,MAAM,KAAK,+BACV,QAAQ,KAAK,gBAAgB,QAAQ,QACtC;AACA,mBAAa,SAAS,YAAY,YAAY;AAC9C,mBAAa,OAAO,QAAQ,MAAM,QAAQ,MAAM;AAAA,IAClD,OAAO;AACL,mBAAa,SAAS,QAAQ,MAAM,QAAQ,MAAM;AAClD,mBAAa,OAAO,YAAY,YAAY;AAAA,IAC9C;AACA,6BAAyB,MAAM,YAAY;AAAA,EAC7C;AAEA,OAAK,aAAa,wBAAwB,EAAE;AAC9C;AAMO,SAAS,uBAA6B;AAC3C,QAAM,YAAY,WAAW,aAAa;AAC1C,MACE,cAAc,QACd,UAAU,cAAc,QACxB,UAAU,aAAa,GACvB;AACA;AAAA,EACF;AAEA,QAAM,OACJ,UAAU,UAAU,eAAe;AAAA,IACjC;AAAA,EACF;AACF,MAAI,SAAS,QAAQ,SAAS,QAAW;AACvC;AAAA,EACF;AAEA,QAAM,gBAAgB,2BAA2B,IAAI;AACrD,QAAM,eAAe,0BAA0B,IAAI;AAEnD,MAAI,CAAC,iBAAiB,CAAC,cAAc;AACnC;AAAA,EACF;AAGA,OAAK,aAAa,4BAA4B,EAAE;AAChD,aAAW,YAAY,KAAK;AAAA,IAC1B;AAAA,EACF,GAAG;AACD,UAAM,OAAO,SAAS,aAAa,iBAAiB,KAAK;AACzD,aAAS,gBAAgB,iBAAiB;AAC1C,aAAS,QAAQ,qBAAqB;AAAA,EACxC;AAEA,MAAI;AACF,UAAM,QAAQ,SAAS,YAAY;AACnC,UAAM,SAAS,cAAc,MAAM,cAAc,MAAM;AACvD,UAAM,OAAO,aAAa,MAAM,aAAa,MAAM;AACnD,cAAU;AAAA,MACR,cAAc;AAAA,MACd,cAAc;AAAA,MACd,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAEA,6BAAyB,MAAM,OAAO,EAAE,kBAAkB,KAAK,CAAC;AAAA,EAClE,SAAS,OAAO;AACd;AAAA,MACE;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,OAAK,gBAAgB,0BAA0B;AAM/C,OAAK,MAAM;AACX,8BAA4B,IAAI;AAClC;AAEA,SAAS,iBACP,WACA,YACA,cACA,WACA,aACA;AACA,QAAM,oBACJ,uBAAuB,YAAY,cAAc,WAAW,WAAW,KACvE;AACF,MAAI,cAAc,UAAU,mBAAmB;AAC7C,WAAO,EAAE,cAAc,YAAY,gBAAgB,aAAa;AAAA,EAClE;AACA,SAAO,EAAE,cAAc,WAAW,gBAAgB,YAAY;AAChE;AAgBO,SAAS,8BACd,aACA,WACS;AACT,QAAM,YAAY,WAAW,aAAa;AAC1C,MAAI,cAAc,QAAQ,UAAU,aAAa,KAAK,UAAU,aAAa;AAC3E,WAAO;AAAA,EACT;AACA,QAAM,aAAa,UAAU;AAC7B,QAAM,YAAY,UAAU;AAC5B,MAAI,eAAe,QAAQ,cAAc,QAAQ,eAAe,WAAW;AACzE,WAAO;AAAA,EACT;AACA,MAAI,CAAC,YAAY,SAAS,UAAU,KAAK,CAAC,YAAY,SAAS,SAAS,GAAG;AACzE,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,UAAU;AAC/B,QAAM,cAAc,UAAU;AAE9B,QAAM,EAAE,cAAc,eAAe,IAAI;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAKA,wBAAsB,IAAI,WAAW,GAAG,MAAM;AAC9C,wBAAsB,OAAO,WAAW;AACxC,mCAAiC,WAAW;AAC5C,cAAY,gBAAgB,sBAAsB;AAElD,QAAM,SAAS,kBAAkB,cAAc,aAAa,cAAc;AAE1E,YAAU,gBAAgB;AAE1B,MAAI,WAAW,MAAM;AACnB,WAAO;AAAA,EACT;AACA,SAAO,MAAM;AACb,SAAO;AACT;AAGA,MAAM,uBAAuB;AAE7B,SAAS,0BAA0B,MAAgC;AACjE,SAAO,KAAK,aAAa,KAAK,YACzB,KAAc,eAAe;AAAA,IAC5B;AAAA,EACF,KAAK,OACJ,KAAiB,UAAU,oBAAoB,KAAK;AAC3D;AAEA,SAAS,iBAAiB,MAA4B;AACpD,SACE,SAAS,QACT,0BAA0B,IAAI,GAAG,aAAa,MAAM,MAAM;AAE9D;AAeA,SAAS,kBACP,MACA,MACA,QACoB;AAEpB,QAAM,SAAS,0BAA0B,IAAI;AAC7C,MAAI,WAAW,MAAM;AACnB,WAAO;AAAA,EACT;AAGA,MAAI,KAAK,aAAa,KAAK,aAAa,WAAW,UAAa,SAAS,GAAG;AAC1E,UAAM,cAAc,KAAK,WAAW,SAAS,CAAC;AAC9C,QAAI,aAAa;AACf,YAAM,UAAU,8BAA8B,aAAa,IAAI;AAC/D,UAAI,SAAS;AACX,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAGA,SAAO,8BAA8B,MAAM,IAAI;AACjD;AAQA,SAAS,8BACP,MACA,MACoB;AACpB,QAAM,cAAc,MAAM;AAAA,IACxB,KAAK,iBAA8B,oBAAoB;AAAA,EACzD;AACA,MAAI,YAAY,WAAW,GAAG;AAC5B,WAAO;AAAA,EACT;AAEA,MAAI,UAA8B;AAClC,aAAW,cAAc,aAAa;AAEpC,UAAM,WAAW,WAAW,wBAAwB,IAAI;AACxD,QAAI,WAAW,KAAK,6BAA6B;AAC/C,gBAAU;AAAA,IACZ;AAAA,EACF;AAGA,SAAO,WAAW,YAAY,CAAC,KAAK;AACtC;AAOA,SAAS,kCACP,MACA,QACS;AACT,QAAM,UAAU,0BAA0B,IAAI;AAC9C,MAAI,CAAC,WAAW,QAAQ,aAAa,MAAM,MAAM,cAAc;AAC7D,WAAO;AAAA,EACT;AAEA,QAAM,aAAa,QAAQ,WAAW,CAAC,KAAK;AAC5C,QAAM,kBACJ,YAAY,aAAa,KAAK,YAC1B,aACA,YAAY,YAAY,aAAa,KAAK,YAC1C,WAAW,aACX;AACN,QAAM,uBACJ,SAAS,cACT,SAAS,mBACR,gBAAgB,WACf,oBAAoB,QACpB,KAAK,SAAS,eAAe,KAC9B,KAAK,aAAa,KAAK,aACtB,sBAAsB,WACtB,WAAW,SAAS,IAAI;AAC5B,QAAM,aACJ,KAAK,aAAa,KAAK,YACnB,KAAK,WAAW,UAAU,IAC1B,KAAK,aAAa,UAAU;AAClC,QAAM,mBAAmB,WAAW,KAAK,WAAW;AAEpD,SAAO,EAAE,wBAAwB;AACnC;AA4BO,SAAS,wBACd,YACA,cACA,WACA,aACA,WAC2B;AAC3B,MAAI,CAAC,cAAc,CAAC,WAAW;AAC7B,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,oBACJ,uBAAuB,YAAY,cAAc,WAAW,WAAW,KACvE;AACF,QAAM,qBAAqB,oBAAoB,aAAa;AAC5D,QAAM,uBAAuB,oBAAoB,eAAe;AAChE,QAAM,mBAAmB,oBAAoB,YAAY;AACzD,QAAM,qBAAqB,oBAAoB,cAAc;AAE7D,QAAM,UAAmB,CAAC;AAC1B,aAAW,YAAY,WAAW;AAChC,QAAI,CAAC,SAAS,SAAS;AACrB;AAAA,IACF;AAEA,eAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF,KAAK,SAAS,QAAQ,mBAAmB,QAAQ,GAAG;AAClD,YAAM,KAAK,SAAS,QAAQ;AAC5B,UAAI,IAAI;AACN,gBAAQ,KAAK,EAAE,UAAU,KAAK,SAAS,GAAG,CAAC;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AAEA,SAAO,QACJ;AAAA,IAAO,CAAC,EAAE,QAAQ,MACjB;AAAA,MACE;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,EACC,IAAI,CAAC,EAAE,UAAU,KAAK,QAAQ,OAAO;AAAA,IACpC;AAAA,IACA;AAAA,IACA,cAAc,QAAQ,eAAe;AAAA,EACvC,EAAE;AACN;AASO,SAAS,0BACd,UACM;AACN,aAAW,EAAE,UAAU,KAAK,aAAa,KAAK,UAAU;AACtD,UAAM,UAAU,SAAS,SAAS,mBAAmB,IAAI,GAAG;AAC5D,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AAEA,QAAI,QAAQ,SAAS,UAAU;AAE7B,cAAQ,UAAU,gBAAgB,IAAI,IAAI;AAAA,IAC5C,WAAW,iBAAiB,QAAQ,aAAa,SAAS,GAAG;AAE3D,UAAI,QAAQ,QAAQ,SAAS;AAC3B,gBAAQ,QAAQ,QAAQ,cAAc;AAAA,MACxC;AAEA,cAAQ,YAAY,aAAa,OAAO,CAAC,GAAG,IAAI;AAAA,IAClD,OAAO;AACL,cAAQ,WAAW,IAAI;AAAA,IACzB;AAAA,EACF;AACF;AAeO,SAAS,wBACd,UAC0C;AAC1C,QAAM,SAAS,oBAAI,IAAyC;AAE5D,aAAW,YAAY,IAAI,IAAI,SAAS,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG;AAC/D,QAAI,CAAC,SAAS,SAAS;AACrB;AAAA,IACF;AAEA,UAAM,cAAc,IAAI;AAAA,MACtB,SAAS,OAAO,CAAC,MAAM,EAAE,aAAa,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG;AAAA,IAClE;AAGA,UAAM,YAAY,CAAC,GAAG,SAAS,QAAQ,mBAAmB,QAAQ,CAAC,EAAE;AAAA,MACnE,CAAC,CAAC,GAAG,MAAM,CAAC,YAAY,IAAI,GAAG;AAAA,IACjC;AAEA,QAAI,UAAU,WAAW,GAAG;AAE1B,aAAO,IAAI,UAAU,EAAE;AAAA,IACzB,WAAW,UAAU,WAAW,GAAG;AAEjC,YAAM,CAAC,EAAE,OAAO,IAAI,UAAU,CAAC;AAC/B,YAAM,OAAO,SAAS,QAAQ,SAAS,eAAe;AACtD,UAAI,KAAK,SAAS,GAAG;AACnB,eAAO,IAAI,UAAU,IAAI;AAAA,MAC3B;AAAA,IACF;AAAA,EAEF;AAEA,SAAO;AACT;AAOO,SAAS,wBAAwB,UAAqC;AAC3E,QAAM,QAAQ,SAAS,CAAC;AACxB,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AACA,QAAM,qBAAqB,MAAM,SAAS,SAAS;AACnD,MAAI,CAAC,oBAAoB;AACvB,WAAO;AAAA,EACT;AAIA,QAAM,sBAAsB,SAAS;AAAA,IACnC,CAAC,MAAM,EAAE,aAAa,MAAM;AAAA,EAC9B,EAAE;AAEF,QAAM,qBAAqB,uBAAuB,mBAAmB,OAAO;AAE5E,MAAI,oBAAoB;AACtB,WAAO;AAAA,EACT;AAEA,SAAO,mBAAmB,IAAI,MAAM,GAAG;AACzC;AAOO,SAAS,uBAAuB,UAAqC;AAC1E,QAAM,OAAO,SAAS,SAAS,SAAS,CAAC;AACzC,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AACA,QAAM,qBAAqB,KAAK,SAAS,SAAS;AAClD,MAAI,CAAC,oBAAoB;AACvB,WAAO;AAAA,EACT;AAIA,QAAM,qBAAqB,SAAS;AAAA,IAClC,CAAC,MAAM,EAAE,aAAa,KAAK;AAAA,EAC7B,EAAE;AAEF,QAAM,qBAAqB,sBAAsB,mBAAmB,OAAO;AAE3E,MAAI,oBAAoB;AACtB,WAAO;AAAA,EACT;AAEA,SAAO,mBAAmB,IAAI,KAAK,GAAG;AACxC;AAUO,SAAS,+BACd,WACA,wBACA,qBACyC;AACzC,QAAM,cAAc,oBAAI,IAAiC;AAAA,IACvD,GAAG;AAAA,IACH,GAAG,oBAAoB,KAAK;AAAA,EAC9B,CAAC;AACD,SAAO,UAAU,KAAK,CAAC,QAAQ,YAAY,IAAI,GAAG,CAAC;AACrD;AAUO,SAAS,4BACd,WACA,WACwB;AACxB,aAAW,OAAO,WAAW;AAC3B,UAAM,oBAAoB,IAAI,SAAS;AACvC,QACE,qBACA,kBAAkB,SAAS,UAAU,UAAU,KAC/C,kBAAkB,SAAS,UAAU,SAAS,KAC9C,UAAU,SAAS,EAAE,UAAU,kBAAkB,aAAa,UAAU,IACxE;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AASO,SAAS,2BACd,WACA,WAC2C;AAC3C,MAAI,UAAU,aAAa,GAAG;AAC5B,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,UAAU,WAAW,CAAC;AACpC,QAAM,UAAU,UAAU;AAAA,IAAK,CAAC,QAC9B,IAAI,SAAS,oBAAoB,SAAS,MAAM,cAAc;AAAA,EAChE,GAAG,SAAS;AACZ,QAAM,QAAQ,UAAU;AAAA,IAAK,CAAC,QAC5B,IAAI,SAAS,oBAAoB,SAAS,MAAM,YAAY;AAAA,EAC9D,GAAG,SAAS;AAEZ,MAAI,CAAC,WAAW,CAAC,OAAO;AACtB,WAAO;AAAA,EACT;AAEA,MAAI,WAAW,CAAC,OAAO;AACrB,WAAO,CAAC,SAAS,OAAO;AAAA,EAC1B;AACA,MAAI,CAAC,WAAW,OAAO;AACrB,WAAO,CAAC,OAAO,KAAK;AAAA,EACtB;AAEA,MAAI,CAAC,WAAW,CAAC,OAAO;AACtB,WAAO;AAAA,EACT;AAIA,MAAI,YAAY,OAAO;AACrB,WAAO;AAAA,EACT;AAGA,QAAM,aAAa,CAAC,EAClB,QAAQ,wBAAwB,KAAK,IAAI,KAAK;AAEhD,SAAO,aAAa,CAAC,SAAS,KAAK,IAAI,CAAC,OAAO,OAAO;AACxD;AAQO,SAAS,gBACd,mBACA,OACM;AACN,QAAM,OAAO,kBAAkB,QAAqB,oBAAoB;AACxE,QAAM,aAAa,4BAA4B,EAAE;AACjD,oBAAkB,MAAM;AACxB,QAAM,MAAM,WAAW,aAAa;AACpC,MAAI,KAAK;AACP,QAAI,CAAC,OAAO;AACV,cAAQ,SAAS,YAAY;AAC7B,YAAM,mBAAmB,iBAAiB;AAC1C,YAAM,SAAS,KAAK;AAAA,IACtB;AACA,QAAI;AAAA,MACF,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AACA,QAAM,gBAAgB,0BAA0B;AAClD;AAEA,SAAS,0BACP,mBACA,WACA,QACQ;AACR,QAAM,QAAQ,SAAS,YAAY;AACnC,QAAM,mBAAmB,iBAAiB;AAC1C,QAAM,OAAO,WAAW,MAAM;AAC9B,SAAO,MAAM,SAAS,EAAE;AAC1B;AAQO,SAAS,wBACd,WACA,mBACM;AACN,QAAM,QAAQ,UAAU,WAAW,CAAC;AACpC,QAAM,OAAO,kBAAkB,eAAe;AAE9C,QAAM,QAAQ,kBAAkB,SAAS,MAAM,cAAc,IACzD;AAAA,IACE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR,IACA;AACJ,QAAM,MAAM,kBAAkB,SAAS,MAAM,YAAY,IACrD;AAAA,IACE;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR,IACA,KAAK;AAET,QAAM,OAAO,KAAK,IAAI,OAAO,GAAG;AAChC,QAAM,KAAK,KAAK,IAAI,OAAO,GAAG;AAC9B,QAAM,WAAW,GAAG,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,KAAK,MAAM,EAAE,CAAC;AACxD,oBAAkB,cAAc;AAEhC,QAAM,YAAY,SAAS,YAAY;AACvC,QAAM,OAAO,kBAAkB;AAC/B,MAAI,MAAM,aAAa,KAAK,WAAW;AACrC,cAAU,SAAS,MAAM,KAAK,IAAI,MAAM,SAAS,MAAM,CAAC;AAAA,EAC1D,OAAO;AACL,cAAU,SAAS,mBAAmB,CAAC;AAAA,EACzC;AACA,YAAU,SAAS,IAAI;AAEvB,kBAAgB,mBAAmB,SAAS;AAC5C,oBAAkB,cAAc,IAAI,WAAW,SAAS,EAAE,SAAS,KAAK,CAAC,CAAC;AAC5E;AAQO,SAAS,cACd,WACA,WACA,mBASA;AAIA,QAAM,aAAa,mBAAmB,cAAc,UAAU;AAC9D,QAAM,eACJ,mBAAmB,gBAAgB,UAAU;AAC/C,QAAM,YAAY,mBAAmB,aAAa,UAAU;AAC5D,QAAM,cAAc,mBAAmB,eAAe,UAAU;AAEhE,QAAM,yBAAyB,UAAU,OAAO,CAAC,QAAQ;AACvD,UAAM,qBAAqB,IAAI,SAAS;AACxC,WACE,uBACC,mBAAmB,SAAS,UAAU,KACrC,mBAAmB,SAAS,SAAS;AAAA,EAE3C,CAAC;AAGD,QAAM,qBAAqB,uBAAuB,IAAI,CAAC,SAAS;AAAA,IAC9D,UAAU;AAAA,IACV,cACE,IAAI,SAAS,UAAU,SACvB,IAAI,SAAS,oBAAoB,eACjC;AAAA,EACJ,EAAE;AAEF,QAAM,qBAAqB,uBAAuB;AAAA,IAAK,CAAC,QACtD,IAAI,SAAS,oBAAoB,SAAS,UAAU;AAAA,EACtD;AACA,QAAM,oBAAoB,uBAAuB;AAAA,IAAK,CAAC,QACrD,IAAI,SAAS,oBAAoB,SAAS,SAAS;AAAA,EACrD;AAGA,QAAM,WACJ,sBAAsB,oBAClB,CAAC,IACD;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEN,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,qBAAqB,wBAAwB,QAAQ;AAAA,IACrD;AAAA,EACF;AACF;AAUO,SAAS,6BACd,WACA,CAAC,wBAAwB,qBAAqB,GAIxC;AACN,MAAI,2BAA2B,uBAAuB;AACpD,4BAAwB,WAAW,sBAAsB;AACzD;AAAA,EACF;AAEA,QAAM,EAAE,gBAAgB,aAAa,cAAc,UAAU,IAC3D,UAAU,WAAW,CAAC;AAGxB,QAAM,YAAY,SAAS,YAAY;AACvC,YAAU,SAAS,gBAAgB,WAAW;AAC9C,YAAU;AAAA,IACR;AAAA,IACA,uBAAuB,WAAW;AAAA,EACpC;AACA,YAAU,eAAe;AAGzB,QAAM,UAAU,SAAS,YAAY;AACrC,UAAQ,SAAS,uBAAuB,CAAC;AACzC,UAAQ,OAAO,cAAc,SAAS;AACtC,UAAQ,eAAe;AAGvB,YAAU,gBAAgB;AAC1B,kBAAgB,sBAAsB;AAEtC,yBAAuB;AAAA,IACrB,IAAI,WAAW,SAAS,EAAE,SAAS,KAAK,CAAC;AAAA,EAC3C;AACA,wBAAsB;AAAA,IACpB,IAAI,WAAW,SAAS,EAAE,SAAS,KAAK,CAAC;AAAA,EAC3C;AACF;AAWO,SAAS,2BACd,wBACA,aACA;AACA,MAAI,wBAAwB;AAC1B,2BAAuB,QAAQ,SAAS,MAAM;AAC9C,2BAAuB,UAAU;AACjC;AAAA,EACF;AAEA,QAAM,oBAAoB,aAAa,SAAS;AAChD,MAAI,mBAAmB;AACrB,0BAAsB,MAAM;AAC1B,sBAAgB,iBAAiB;AAAA,IACnC,CAAC;AAAA,EACH;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
deletePartialExpression,
|
|
18
18
|
getCrossExpressionElements,
|
|
19
19
|
deleteCrossExpressionPartial,
|
|
20
|
+
consumePreRestoreEndpoints,
|
|
20
21
|
getLastSnapshotHandler
|
|
21
22
|
} from "./selection-helpers.js";
|
|
22
23
|
function getInputRefs(dateInputFromRef, dateInputToRef) {
|
|
@@ -28,9 +29,27 @@ function useSelectionInteractionHandlers(touchedContainerRef, onFocusInput, date
|
|
|
28
29
|
if (event.button !== 0) {
|
|
29
30
|
return;
|
|
30
31
|
}
|
|
31
|
-
window.getSelection()?.removeAllRanges();
|
|
32
32
|
const root = event.currentTarget;
|
|
33
33
|
const triggerElement = event.target;
|
|
34
|
+
const clickedOnSpinButton = triggerElement instanceof HTMLElement && triggerElement.hasAttribute("contenteditable");
|
|
35
|
+
let initialAnchorSpinButton = null;
|
|
36
|
+
if (!clickedOnSpinButton) {
|
|
37
|
+
const spinButtons = Array.from(
|
|
38
|
+
root.querySelectorAll("[contenteditable]")
|
|
39
|
+
);
|
|
40
|
+
let bestRight = -Infinity;
|
|
41
|
+
for (const sb of spinButtons) {
|
|
42
|
+
const rect = sb.getBoundingClientRect();
|
|
43
|
+
if (rect.right <= event.clientX && rect.right > bestRight) {
|
|
44
|
+
initialAnchorSpinButton = sb;
|
|
45
|
+
bestRight = rect.right;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (initialAnchorSpinButton === null && spinButtons.length > 0) {
|
|
49
|
+
initialAnchorSpinButton = spinButtons[0] ?? null;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
window.getSelection()?.removeAllRanges();
|
|
34
53
|
if (root) {
|
|
35
54
|
removeContentEditable(
|
|
36
55
|
root,
|
|
@@ -44,7 +63,8 @@ function useSelectionInteractionHandlers(touchedContainerRef, onFocusInput, date
|
|
|
44
63
|
onFocusInput();
|
|
45
64
|
}
|
|
46
65
|
}
|
|
47
|
-
}
|
|
66
|
+
},
|
|
67
|
+
initialAnchorSpinButton
|
|
48
68
|
);
|
|
49
69
|
}
|
|
50
70
|
},
|
|
@@ -55,6 +75,7 @@ function useSelectionInteractionHandlers(touchedContainerRef, onFocusInput, date
|
|
|
55
75
|
const onKeyDown = useCallback(
|
|
56
76
|
async (event) => {
|
|
57
77
|
const hasModifierKey = event.metaKey === true || event.ctrlKey === true;
|
|
78
|
+
const pickerRoot = event.currentTarget;
|
|
58
79
|
if (event.key === "Shift" || event.key === "Control" || event.key === "Meta" || event.key === "Alt" || event.key === "Command") {
|
|
59
80
|
event.preventDefault();
|
|
60
81
|
return;
|
|
@@ -101,7 +122,11 @@ function useSelectionInteractionHandlers(touchedContainerRef, onFocusInput, date
|
|
|
101
122
|
const boundaryExpressionRef = isSameExpressionSelection ? inputRefs.find(
|
|
102
123
|
(inputRef) => inputRef.current?.expressionInputRef === crossExpressionElements[0]
|
|
103
124
|
) : void 0;
|
|
104
|
-
const plan2 = planBulkClear(
|
|
125
|
+
const plan2 = planBulkClear(
|
|
126
|
+
selection,
|
|
127
|
+
inputRefs,
|
|
128
|
+
consumePreRestoreEndpoints(pickerRoot)
|
|
129
|
+
);
|
|
105
130
|
lastClearedSnapshotRef.current = plan2.snapshot;
|
|
106
131
|
lastClearedExpressionsRef.current = plan2.clearedExpressions;
|
|
107
132
|
const firstSpinButtonHandler = getFirstSnapshotHandler(plan2.snapshot);
|
|
@@ -125,7 +150,11 @@ function useSelectionInteractionHandlers(touchedContainerRef, onFocusInput, date
|
|
|
125
150
|
);
|
|
126
151
|
return;
|
|
127
152
|
}
|
|
128
|
-
const plan = planBulkClear(
|
|
153
|
+
const plan = planBulkClear(
|
|
154
|
+
selection,
|
|
155
|
+
inputRefs,
|
|
156
|
+
consumePreRestoreEndpoints(pickerRoot)
|
|
157
|
+
);
|
|
129
158
|
const nextFocusedElementHandler = direction2 === "backward" ? getFirstSnapshotHandler(plan.snapshot) : getLastSnapshotHandler(plan.snapshot);
|
|
130
159
|
const expressionFocusTarget = findFirstExpressionFocusTarget(
|
|
131
160
|
inputRefs,
|
|
@@ -220,7 +249,11 @@ function useSelectionInteractionHandlers(touchedContainerRef, onFocusInput, date
|
|
|
220
249
|
if (selection && !selection.isCollapsed && selection.anchorNode !== selection.focusNode) {
|
|
221
250
|
event.preventDefault();
|
|
222
251
|
const inputRefs = getInputRefs(dateInputFromRef, dateInputToRef);
|
|
223
|
-
const plan = planBulkClear(
|
|
252
|
+
const plan = planBulkClear(
|
|
253
|
+
selection,
|
|
254
|
+
inputRefs,
|
|
255
|
+
consumePreRestoreEndpoints(pickerRoot)
|
|
256
|
+
);
|
|
224
257
|
const firstEntry = plan.snapshot[0];
|
|
225
258
|
const firstKey = firstEntry ? [
|
|
226
259
|
...firstEntry.inputRef.current?.spinButtonHandlers.keys() ?? []
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/forms/date-time-range-picker/useSelectionInteractionHandlers.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n useCallback,\n useRef,\n type MouseEvent as ReactMouseEvent,\n type KeyboardEvent as ReactKeyboardEvent,\n type RefObject,\n} from 'react';\n\nimport { isExpressionTriggerKey } from './expression-trigger-helpers.js';\nimport { buildTimeframeClipboardText } from './selection-copy-helpers.js';\nimport {\n extendSelection,\n extendSelectionToAll,\n removeContentEditable,\n restoreSpinButtonSnapshot,\n getFirstSnapshotHandler,\n findFirstExpressionFocusTarget,\n restoreFocusAfterBulkClear,\n planBulkClear,\n getPartialExpressionElement,\n deletePartialExpression,\n getCrossExpressionElements,\n deleteCrossExpressionPartial,\n type SpinButtonSnapshotEntry,\n getLastSnapshotHandler,\n} from './selection-helpers.js';\nimport type { DateTimeInputRef } from './types.js';\n\n/**\n * Builds an array of input references from the given refs.\n * @internal\n */\nfunction getInputRefs(\n dateInputFromRef: RefObject<DateTimeInputRef>,\n dateInputToRef?: RefObject<DateTimeInputRef>,\n): RefObject<DateTimeInputRef>[] {\n return [dateInputFromRef, ...(dateInputToRef ? [dateInputToRef] : [])];\n}\n\n/**\n * Hook that provides interaction handlers for selection behavior in date/time pickers.\n * Manages mouse and keyboard interactions including text selection and focus management.\n *\n * @param touchedContainerRef - Reference to the container that should be checked when forwarding focus\n * @param onFocusInput - Callback to focus the appropriate input(s) when needed\n * @param dateInputFromRef - Reference to the \"from\" DateTimeInput imperative handle\n * @param dateInputToRef - Reference to the optional \"to\" DateTimeInput imperative handle\n * @returns Object containing onMouseDown and onKeyDown event handlers\n *\n * @internal\n */\nexport function useSelectionInteractionHandlers(\n touchedContainerRef: RefObject<HTMLElement>,\n onFocusInput: () => void,\n dateInputFromRef: RefObject<DateTimeInputRef>,\n dateInputToRef?: RefObject<DateTimeInputRef>,\n): {\n onMouseDown: (event: ReactMouseEvent<HTMLDivElement>) => void;\n onKeyDown: (event: ReactKeyboardEvent<HTMLDivElement>) => void;\n} {\n const onMouseDown = useCallback(\n (event: ReactMouseEvent<HTMLDivElement>) => {\n if (event.button !== 0) {\n return;\n }\n window.getSelection()?.removeAllRanges();\n const root: HTMLElement = event.currentTarget;\n const triggerElement = event.target;\n if (root) {\n removeContentEditable(\n root,\n document,\n 'mouseup',\n (mouseUpEvent: Event, hasMultiElementSelection: boolean) => {\n if (\n !hasMultiElementSelection &&\n mouseUpEvent.target instanceof HTMLElement &&\n mouseUpEvent.target === triggerElement\n ) {\n // If the click landed on a contenteditable element (spin button\n // or expression input), focus it directly. Otherwise the click\n // was on the container or a non-interactive child, so forward\n // focus to the first input.\n if (mouseUpEvent.target.hasAttribute('contenteditable')) {\n mouseUpEvent.target.focus();\n } else {\n onFocusInput();\n }\n }\n },\n );\n }\n },\n [onFocusInput],\n );\n\n // Snapshot of the spin-button values wiped by the last bulk-clear.\n const lastClearedSnapshotRef = useRef<SpinButtonSnapshotEntry[]>([]);\n // Snapshot of expression values wiped by the last bulk-clear (for undo).\n const lastClearedExpressionsRef = useRef<\n { inputRef: RefObject<DateTimeInputRef>; previousText: string }[]\n >([]);\n\n const onKeyDown = useCallback(\n async (event: ReactKeyboardEvent<HTMLDivElement>) => {\n // Accept either Meta (Mac Cmd) or Ctrl as the modifier key so that the\n // handler works consistently across platforms and in automated test\n // environments (e.g. Playwright's Chromium) where the userAgent may not\n // reliably indicate the OS.\n const hasModifierKey = event.metaKey === true || event.ctrlKey === true;\n\n // If keydown event captures modifier keys by itself or a copy, do nothing\n if (\n event.key === 'Shift' ||\n event.key === 'Control' ||\n event.key === 'Meta' ||\n event.key === 'Alt' ||\n event.key === 'Command'\n ) {\n event.preventDefault();\n return;\n }\n\n // Applies the plan returned by planBulkClear: saves undo snapshots,\n // clears all affected spin buttons and expression inputs, and collapses\n // the selection.\n function applyBulkClear(\n plan: ReturnType<typeof planBulkClear>,\n selection: Selection,\n ) {\n const {\n snapshot,\n affectedExpressionRefs,\n expressionFallbacks,\n clearedExpressions,\n } = plan;\n lastClearedSnapshotRef.current = snapshot;\n lastClearedExpressionsRef.current = clearedExpressions;\n for (const { inputRef, key } of snapshot) {\n inputRef.current?.spinButtonHandlers.get(key)?.clearValue(true);\n }\n for (const [inputRef, text] of expressionFallbacks) {\n inputRef.current?.setExpressionValue(text);\n }\n for (const ref of affectedExpressionRefs) {\n ref.current?.setExpressionValue('');\n }\n selection.removeAllRanges();\n }\n\n // Computes the bulk-clear plan, applies it, and returns focus targets.\n // Used by delete, cut, and type-to-replace.\n function bulkClear(\n selection: Selection,\n direction: 'forward' | 'backward',\n ) {\n const inputRefs = getInputRefs(dateInputFromRef, dateInputToRef);\n\n const partialExpressionElement = getPartialExpressionElement(\n selection,\n inputRefs,\n );\n if (partialExpressionElement) {\n onBeforeExpressionDelete([partialExpressionElement], inputRefs);\n deletePartialExpression(selection, partialExpressionElement);\n return;\n }\n\n const crossExpressionElements = getCrossExpressionElements(\n selection,\n inputRefs,\n );\n if (crossExpressionElements) {\n const isSameExpressionSelection =\n crossExpressionElements[0] === crossExpressionElements[1];\n const expressionElementsForUndo = isSameExpressionSelection\n ? [crossExpressionElements[0]]\n : crossExpressionElements;\n onBeforeExpressionDelete(expressionElementsForUndo, inputRefs);\n\n const boundaryExpressionRef = isSameExpressionSelection\n ? inputRefs.find(\n (inputRef) =>\n inputRef.current?.expressionInputRef ===\n crossExpressionElements[0],\n )\n : undefined;\n\n const plan = planBulkClear(selection, inputRefs);\n lastClearedSnapshotRef.current = plan.snapshot;\n lastClearedExpressionsRef.current = plan.clearedExpressions;\n\n const firstSpinButtonHandler = getFirstSnapshotHandler(plan.snapshot);\n const expressionFocusTarget = findFirstExpressionFocusTarget(\n inputRefs,\n plan.affectedExpressionRefs,\n plan.expressionFallbacks,\n );\n\n deleteCrossExpressionPartial(selection, crossExpressionElements);\n\n for (const { inputRef, key } of plan.snapshot) {\n inputRef.current?.spinButtonHandlers.get(key)?.clearValue(true);\n }\n for (const [inputRef, text] of plan.expressionFallbacks) {\n if (inputRef !== boundaryExpressionRef) {\n inputRef.current?.setExpressionValue(text);\n }\n }\n\n restoreFocusAfterBulkClear(\n firstSpinButtonHandler,\n expressionFocusTarget,\n );\n\n return;\n }\n\n const plan = planBulkClear(selection, inputRefs);\n const nextFocusedElementHandler =\n direction === 'backward'\n ? getFirstSnapshotHandler(plan.snapshot)\n : getLastSnapshotHandler(plan.snapshot);\n const expressionFocusTarget = findFirstExpressionFocusTarget(\n inputRefs,\n plan.affectedExpressionRefs,\n plan.expressionFallbacks,\n );\n applyBulkClear(plan, selection);\n restoreFocusAfterBulkClear(\n nextFocusedElementHandler,\n expressionFocusTarget,\n );\n }\n\n // Saves the current text of each expression element as an undo snapshot\n // before a partial or cross-expression deletion that bypasses applyBulkClear.\n function onBeforeExpressionDelete(\n expressionElements: HTMLSpanElement[],\n inputRefs: RefObject<DateTimeInputRef>[],\n ) {\n lastClearedSnapshotRef.current = [];\n\n const expressionSnapshots: {\n inputRef: RefObject<DateTimeInputRef>;\n previousText: string;\n }[] = [];\n\n for (const exprEl of expressionElements) {\n let matchingRef: RefObject<DateTimeInputRef> | undefined;\n for (const inputRef of inputRefs) {\n if (inputRef.current?.expressionInputRef === exprEl) {\n matchingRef = inputRef;\n break;\n }\n }\n\n if (matchingRef) {\n expressionSnapshots.push({\n inputRef: matchingRef,\n previousText:\n matchingRef.current?.inputRef?.value ??\n exprEl.textContent ??\n '',\n });\n }\n }\n\n lastClearedExpressionsRef.current = expressionSnapshots;\n }\n\n // Handle select all with Ctrl + A\n if (hasModifierKey && event.key === 'a') {\n event.preventDefault();\n if (event.currentTarget instanceof HTMLElement) {\n // No need to remove contentEditable here: extendSelectionToAll explicitly focuses the first spin button\n // and then sets the cross-element range with addRange, keeping the focus on the already focused spin button.\n extendSelectionToAll();\n }\n return;\n }\n\n // Check if the selection should be expanded with Shift\n if (\n event.shiftKey === true &&\n (event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight' ||\n event.key === 'Home' ||\n event.key === 'End')\n ) {\n event.preventDefault();\n if (event.currentTarget instanceof HTMLElement) {\n // extendSelection uses setBaseAndExtent internally, which can cross\n // contenteditable boundaries without needing to strip the attribute.\n // No removeContentEditable / focus manipulation is needed here.\n extendSelection(event.key);\n }\n return;\n }\n\n // Handle undo (Ctrl/Cmd+Z): restore the last bulk-cleared values.\n if (hasModifierKey && event.key === 'z') {\n const snapshot = lastClearedSnapshotRef.current;\n const expressionEntries = lastClearedExpressionsRef.current;\n if (snapshot.length === 0 && expressionEntries.length === 0) {\n return;\n }\n event.preventDefault();\n restoreSpinButtonSnapshot(snapshot);\n lastClearedSnapshotRef.current = [];\n\n for (const { inputRef, previousText } of expressionEntries) {\n inputRef.current?.setExpressionValue(previousText);\n inputRef.current?.validate();\n }\n lastClearedExpressionsRef.current = [];\n\n if (snapshot.length > 0) {\n // Focus the first restored spin button (synchronous).\n getFirstSnapshotHandler(snapshot)?.element.current?.focus();\n } else {\n // Only expressions were restored \u2014 focus the first one after its rAF.\n requestAnimationFrame(() => {\n expressionEntries[0]?.inputRef.current?.expressionInputRef?.focus();\n });\n }\n return;\n }\n\n const isCut = hasModifierKey && event.key === 'x';\n const isDelete = event.key === 'Backspace' || event.key === 'Delete';\n const direction =\n isCut || event.key === 'Backspace' ? 'backward' : 'forward';\n\n if (isCut || isDelete) {\n const selection = window.getSelection();\n if (selection && !selection.isCollapsed) {\n event.preventDefault();\n\n const clipboardText = buildTimeframeClipboardText();\n // Apply the clear and update focus synchronously BEFORE awaiting the\n // clipboard write. This ensures the undo snapshot is saved inside the\n // current synchronous execution context so that a Ctrl+Z fired\n // immediately afterwards (e.g. in tests wrapped with act()) can always\n // find a non-empty lastClearedSnapshotRef.\n bulkClear(selection, direction);\n\n if (isCut) {\n if (clipboardText !== null) {\n try {\n await navigator.clipboard.writeText(clipboardText);\n } catch {\n // For now, we silently ignore clipboard write errors.\n }\n }\n }\n return;\n }\n }\n\n // When there is a cross-element selection and the user types a printable\n // character, bulk-clear the selection and forward the key to the anchor\n // spin button so it can process the character normally.\n // Intra-element selections (drag within a single spin button) are left\n // alone \u2014 the spin button's own beforeinput handler deals with those.\n if (\n !hasModifierKey &&\n !event.shiftKey &&\n event.key.length === 1 &&\n (isExpressionTriggerKey(event) || /^\\d$/.test(event.key))\n ) {\n const selection = window.getSelection();\n if (\n selection &&\n !selection.isCollapsed &&\n selection.anchorNode !== selection.focusNode\n ) {\n event.preventDefault();\n const inputRefs = getInputRefs(dateInputFromRef, dateInputToRef);\n const plan = planBulkClear(selection, inputRefs);\n\n // When ALL spin buttons of an affected input are cleared (0 survivors),\n // the input should switch to expression mode \u2014 use the full applyBulkClear\n // path (same as Delete). Detected by: expression fallbacks will fire AND\n // the selection starts at the first spin button of its input.\n // When the first spin button is the survivor (selection starts later),\n // skip expression fallbacks so the input stays in ISO mode and the typed\n // character lands in the first selected spin button.\n const firstEntry = plan.snapshot[0];\n const firstKey = firstEntry\n ? [\n ...(firstEntry.inputRef.current?.spinButtonHandlers.keys() ??\n []),\n ][0]\n : undefined;\n const expressionModeWillSwitch =\n plan.expressionFallbacks.size > 0 && firstEntry?.key === firstKey;\n\n if (expressionModeWillSwitch) {\n const firstSpinButtonHandler = getFirstSnapshotHandler(\n plan.snapshot,\n );\n const expressionFocusTarget = findFirstExpressionFocusTarget(\n inputRefs,\n plan.affectedExpressionRefs,\n plan.expressionFallbacks,\n );\n applyBulkClear(plan, selection);\n // Pre-fill the expression input with the typed character. Both this\n // call and the setExpressionValue('') inside applyBulkClear are\n // batched by React 18, so the expression input renders with the\n // character before the rAF in makeFocusAfterBulkClear fires.\n expressionFocusTarget?.current?.setExpressionValue(event.key);\n restoreFocusAfterBulkClear(\n firstSpinButtonHandler,\n expressionFocusTarget,\n );\n return;\n }\n\n // Save undo snapshot and clear only the spin buttons \u2014 skip expression\n // fallbacks so the input stays in ISO mode and focus can land on the\n // first spin button to receive the typed character.\n lastClearedSnapshotRef.current = plan.snapshot;\n lastClearedExpressionsRef.current = plan.clearedExpressions;\n for (const { inputRef, key } of plan.snapshot) {\n inputRef.current?.spinButtonHandlers.get(key)?.clearValue(true);\n }\n selection.removeAllRanges();\n\n // Get the handler for the first cleared spin button directly from\n // the snapshot. We cannot use getFirstSnapshotHandler here because\n // it intentionally returns undefined for the first/second keys\n // (designed for post-delete focus), which would swallow the character.\n const handler = firstEntry\n ? firstEntry.inputRef.current?.spinButtonHandlers.get(\n firstEntry.key,\n )\n : undefined;\n if (handler) {\n handler.element.current?.focus();\n if (handler.type === 'number') {\n handler.applyText(event.key, true);\n const newLength =\n handler.element.current?.textContent?.length ?? 0;\n handler.setSelection({ start: newLength, end: newLength });\n } else {\n handler.element.current?.dispatchEvent(\n new KeyboardEvent('keydown', {\n key: event.key,\n bubbles: true,\n cancelable: true,\n }),\n );\n }\n }\n return;\n }\n }\n\n // When the container itself has focus (post drag-select, no spin button focused),\n // intercept ArrowUp / ArrowDown and forward them to the anchor spin button.\n // This avoids the Firefox visual bug caused by focusing a spin button during\n // drag-restore \u2014 no focus() is called there, so the container holds focus.\n if (\n !event.shiftKey &&\n !hasModifierKey &&\n (event.key === 'ArrowUp' || event.key === 'ArrowDown') &&\n event.target === touchedContainerRef.current\n ) {\n const anchorSpinButton = getAnchorSpinButton();\n\n if (anchorSpinButton !== null) {\n event.preventDefault();\n // Focus the spin button. onFocus sees selectionSpansMultipleNodes = true\n // (the cross-element range is still intact) and skips selectAll().\n anchorSpinButton.focus();\n // Dispatch a synthetic keydown to trigger useValueNavigation on the spin button.\n anchorSpinButton.dispatchEvent(\n new KeyboardEvent('keydown', {\n key: event.key,\n bubbles: true,\n cancelable: true,\n }),\n );\n return;\n }\n }\n\n // Forward the focus when a key is pressed in this element.\n // If the container has focus with an active selection (post Cmd+A or drag),\n // forward to the anchor spin button so the key lands in the right field.\n // Otherwise fall back to onFocusInput() which focuses the first input.\n // Skip for modifier+key shortcuts (e.g. Cmd+C): focusing a spin button\n // collapses Firefox's cross-element selection before the copy event fires.\n if (event.target === touchedContainerRef.current && !hasModifierKey) {\n const anchorSpinButton = getAnchorSpinButton();\n\n if (anchorSpinButton !== null) {\n anchorSpinButton.focus();\n } else {\n onFocusInput();\n }\n }\n },\n [onFocusInput, touchedContainerRef, dateInputFromRef, dateInputToRef],\n );\n\n return { onMouseDown, onKeyDown };\n}\n\nfunction getAnchorSpinButton(): HTMLElement | null {\n const anchorNode = window.getSelection()?.anchorNode ?? null;\n if (anchorNode === null) {\n return null;\n }\n\n return anchorNode.nodeType === Node.TEXT_NODE\n ? (anchorNode as Text).parentElement?.closest<HTMLElement>(\n '[contenteditable]',\n ) ?? null\n : (anchorNode as HTMLElement | null)?.closest?.('[contenteditable]') ??\n null;\n}\n"],
|
|
5
|
-
"mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,OAIK;AAEP,SAAS,8BAA8B;AACvC,SAAS,mCAAmC;AAC5C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,OACK;AAOP,SAAS,aACP,kBACA,gBAC+B;AAC/B,SAAO,CAAC,kBAAkB,GAAI,iBAAiB,CAAC,cAAc,IAAI,CAAC,CAAE;AACvE;AAcO,SAAS,gCACd,qBACA,cACA,kBACA,gBAIA;AACA,QAAM,cAAc;AAAA,IAClB,CAAC,UAA2C;AAC1C,UAAI,MAAM,WAAW,GAAG;AACtB;AAAA,MACF;
|
|
4
|
+
"sourcesContent": ["import {\n useCallback,\n useRef,\n type MouseEvent as ReactMouseEvent,\n type KeyboardEvent as ReactKeyboardEvent,\n type RefObject,\n} from 'react';\n\nimport { isExpressionTriggerKey } from './expression-trigger-helpers.js';\nimport { buildTimeframeClipboardText } from './selection-copy-helpers.js';\nimport {\n extendSelection,\n extendSelectionToAll,\n removeContentEditable,\n restoreSpinButtonSnapshot,\n getFirstSnapshotHandler,\n findFirstExpressionFocusTarget,\n restoreFocusAfterBulkClear,\n planBulkClear,\n getPartialExpressionElement,\n deletePartialExpression,\n getCrossExpressionElements,\n deleteCrossExpressionPartial,\n consumePreRestoreEndpoints,\n type SpinButtonSnapshotEntry,\n getLastSnapshotHandler,\n} from './selection-helpers.js';\nimport type { DateTimeInputRef } from './types.js';\n\n/**\n * Builds an array of input references from the given refs.\n * @internal\n */\nfunction getInputRefs(\n dateInputFromRef: RefObject<DateTimeInputRef>,\n dateInputToRef?: RefObject<DateTimeInputRef>,\n): RefObject<DateTimeInputRef>[] {\n return [dateInputFromRef, ...(dateInputToRef ? [dateInputToRef] : [])];\n}\n\n/**\n * Hook that provides interaction handlers for selection behavior in date/time pickers.\n * Manages mouse and keyboard interactions including text selection and focus management.\n *\n * @param touchedContainerRef - Reference to the container that should be checked when forwarding focus\n * @param onFocusInput - Callback to focus the appropriate input(s) when needed\n * @param dateInputFromRef - Reference to the \"from\" DateTimeInput imperative handle\n * @param dateInputToRef - Reference to the optional \"to\" DateTimeInput imperative handle\n * @returns Object containing onMouseDown and onKeyDown event handlers\n *\n * @internal\n */\nexport function useSelectionInteractionHandlers(\n touchedContainerRef: RefObject<HTMLElement>,\n onFocusInput: () => void,\n dateInputFromRef: RefObject<DateTimeInputRef>,\n dateInputToRef?: RefObject<DateTimeInputRef>,\n): {\n onMouseDown: (event: ReactMouseEvent<HTMLDivElement>) => void;\n onKeyDown: (event: ReactKeyboardEvent<HTMLDivElement>) => void;\n} {\n const onMouseDown = useCallback(\n (event: ReactMouseEvent<HTMLDivElement>) => {\n if (event.button !== 0) {\n return;\n }\n // Only compute the anchor spinbutton for clicks in empty space (not on\n // a spinbutton element itself). For direct spinbutton clicks the browser's\n // native anchor is correct and must be preserved for single-element\n // intra-spinbutton drag to work normally.\n const root: HTMLElement = event.currentTarget;\n const triggerElement = event.target;\n const clickedOnSpinButton =\n triggerElement instanceof HTMLElement &&\n triggerElement.hasAttribute('contenteditable');\n let initialAnchorSpinButton: HTMLElement | null = null;\n if (!clickedOnSpinButton) {\n const spinButtons = Array.from(\n root.querySelectorAll<HTMLElement>('[contenteditable]'),\n );\n // Find the rightmost spinbutton whose right edge is at or before the\n // click x \u2014 that is the spinbutton the drag started on (or the last\n // one to its left when clicking in empty space).\n let bestRight = -Infinity;\n for (const sb of spinButtons) {\n const rect = sb.getBoundingClientRect();\n if (rect.right <= event.clientX && rect.right > bestRight) {\n initialAnchorSpinButton = sb;\n bestRight = rect.right;\n }\n }\n // Clicked before all spinbuttons \u2192 fall back to the first one.\n if (initialAnchorSpinButton === null && spinButtons.length > 0) {\n initialAnchorSpinButton = spinButtons[0] ?? null;\n }\n }\n window.getSelection()?.removeAllRanges();\n if (root) {\n removeContentEditable(\n root,\n document,\n 'mouseup',\n (mouseUpEvent: Event, hasMultiElementSelection: boolean) => {\n if (\n !hasMultiElementSelection &&\n mouseUpEvent.target instanceof HTMLElement &&\n mouseUpEvent.target === triggerElement\n ) {\n // If the click landed on a contenteditable element (spin button\n // or expression input), focus it directly. Otherwise the click\n // was on the container or a non-interactive child, so forward\n // focus to the first input.\n if (mouseUpEvent.target.hasAttribute('contenteditable')) {\n mouseUpEvent.target.focus();\n } else {\n onFocusInput();\n }\n }\n },\n initialAnchorSpinButton,\n );\n }\n },\n [onFocusInput],\n );\n\n // Snapshot of the spin-button values wiped by the last bulk-clear.\n const lastClearedSnapshotRef = useRef<SpinButtonSnapshotEntry[]>([]);\n // Snapshot of expression values wiped by the last bulk-clear (for undo).\n const lastClearedExpressionsRef = useRef<\n { inputRef: RefObject<DateTimeInputRef>; previousText: string }[]\n >([]);\n\n const onKeyDown = useCallback(\n async (event: ReactKeyboardEvent<HTMLDivElement>) => {\n // Accept either Meta (Mac Cmd) or Ctrl as the modifier key so that the\n // handler works consistently across platforms and in automated test\n // environments (e.g. Playwright's Chromium) where the userAgent may not\n // reliably indicate the OS.\n const hasModifierKey = event.metaKey === true || event.ctrlKey === true;\n const pickerRoot = event.currentTarget;\n\n // If keydown event captures modifier keys by itself or a copy, do nothing\n if (\n event.key === 'Shift' ||\n event.key === 'Control' ||\n event.key === 'Meta' ||\n event.key === 'Alt' ||\n event.key === 'Command'\n ) {\n event.preventDefault();\n return;\n }\n\n // Applies the plan returned by planBulkClear: saves undo snapshots,\n // clears all affected spin buttons and expression inputs, and collapses\n // the selection.\n function applyBulkClear(\n plan: ReturnType<typeof planBulkClear>,\n selection: Selection,\n ) {\n const {\n snapshot,\n affectedExpressionRefs,\n expressionFallbacks,\n clearedExpressions,\n } = plan;\n lastClearedSnapshotRef.current = snapshot;\n lastClearedExpressionsRef.current = clearedExpressions;\n for (const { inputRef, key } of snapshot) {\n inputRef.current?.spinButtonHandlers.get(key)?.clearValue(true);\n }\n for (const [inputRef, text] of expressionFallbacks) {\n inputRef.current?.setExpressionValue(text);\n }\n for (const ref of affectedExpressionRefs) {\n ref.current?.setExpressionValue('');\n }\n selection.removeAllRanges();\n }\n\n // Computes the bulk-clear plan, applies it, and returns focus targets.\n // Used by delete, cut, and type-to-replace.\n function bulkClear(\n selection: Selection,\n direction: 'forward' | 'backward',\n ) {\n const inputRefs = getInputRefs(dateInputFromRef, dateInputToRef);\n\n const partialExpressionElement = getPartialExpressionElement(\n selection,\n inputRefs,\n );\n if (partialExpressionElement) {\n onBeforeExpressionDelete([partialExpressionElement], inputRefs);\n deletePartialExpression(selection, partialExpressionElement);\n return;\n }\n\n const crossExpressionElements = getCrossExpressionElements(\n selection,\n inputRefs,\n );\n if (crossExpressionElements) {\n const isSameExpressionSelection =\n crossExpressionElements[0] === crossExpressionElements[1];\n const expressionElementsForUndo = isSameExpressionSelection\n ? [crossExpressionElements[0]]\n : crossExpressionElements;\n onBeforeExpressionDelete(expressionElementsForUndo, inputRefs);\n\n const boundaryExpressionRef = isSameExpressionSelection\n ? inputRefs.find(\n (inputRef) =>\n inputRef.current?.expressionInputRef ===\n crossExpressionElements[0],\n )\n : undefined;\n\n const plan = planBulkClear(\n selection,\n inputRefs,\n consumePreRestoreEndpoints(pickerRoot),\n );\n lastClearedSnapshotRef.current = plan.snapshot;\n lastClearedExpressionsRef.current = plan.clearedExpressions;\n\n const firstSpinButtonHandler = getFirstSnapshotHandler(plan.snapshot);\n const expressionFocusTarget = findFirstExpressionFocusTarget(\n inputRefs,\n plan.affectedExpressionRefs,\n plan.expressionFallbacks,\n );\n\n deleteCrossExpressionPartial(selection, crossExpressionElements);\n\n for (const { inputRef, key } of plan.snapshot) {\n inputRef.current?.spinButtonHandlers.get(key)?.clearValue(true);\n }\n for (const [inputRef, text] of plan.expressionFallbacks) {\n if (inputRef !== boundaryExpressionRef) {\n inputRef.current?.setExpressionValue(text);\n }\n }\n\n restoreFocusAfterBulkClear(\n firstSpinButtonHandler,\n expressionFocusTarget,\n );\n\n return;\n }\n\n const plan = planBulkClear(\n selection,\n inputRefs,\n consumePreRestoreEndpoints(pickerRoot),\n );\n const nextFocusedElementHandler =\n direction === 'backward'\n ? getFirstSnapshotHandler(plan.snapshot)\n : getLastSnapshotHandler(plan.snapshot);\n const expressionFocusTarget = findFirstExpressionFocusTarget(\n inputRefs,\n plan.affectedExpressionRefs,\n plan.expressionFallbacks,\n );\n applyBulkClear(plan, selection);\n restoreFocusAfterBulkClear(\n nextFocusedElementHandler,\n expressionFocusTarget,\n );\n }\n\n // Saves the current text of each expression element as an undo snapshot\n // before a partial or cross-expression deletion that bypasses applyBulkClear.\n function onBeforeExpressionDelete(\n expressionElements: HTMLSpanElement[],\n inputRefs: RefObject<DateTimeInputRef>[],\n ) {\n lastClearedSnapshotRef.current = [];\n\n const expressionSnapshots: {\n inputRef: RefObject<DateTimeInputRef>;\n previousText: string;\n }[] = [];\n\n for (const exprEl of expressionElements) {\n let matchingRef: RefObject<DateTimeInputRef> | undefined;\n for (const inputRef of inputRefs) {\n if (inputRef.current?.expressionInputRef === exprEl) {\n matchingRef = inputRef;\n break;\n }\n }\n\n if (matchingRef) {\n expressionSnapshots.push({\n inputRef: matchingRef,\n previousText:\n matchingRef.current?.inputRef?.value ??\n exprEl.textContent ??\n '',\n });\n }\n }\n\n lastClearedExpressionsRef.current = expressionSnapshots;\n }\n\n // Handle select all with Ctrl + A\n if (hasModifierKey && event.key === 'a') {\n event.preventDefault();\n if (event.currentTarget instanceof HTMLElement) {\n // No need to remove contentEditable here: extendSelectionToAll explicitly focuses the first spin button\n // and then sets the cross-element range with addRange, keeping the focus on the already focused spin button.\n extendSelectionToAll();\n }\n return;\n }\n\n // Check if the selection should be expanded with Shift\n if (\n event.shiftKey === true &&\n (event.key === 'ArrowLeft' ||\n event.key === 'ArrowRight' ||\n event.key === 'Home' ||\n event.key === 'End')\n ) {\n event.preventDefault();\n if (event.currentTarget instanceof HTMLElement) {\n // extendSelection uses setBaseAndExtent internally, which can cross\n // contenteditable boundaries without needing to strip the attribute.\n // No removeContentEditable / focus manipulation is needed here.\n extendSelection(event.key);\n }\n return;\n }\n\n // Handle undo (Ctrl/Cmd+Z): restore the last bulk-cleared values.\n if (hasModifierKey && event.key === 'z') {\n const snapshot = lastClearedSnapshotRef.current;\n const expressionEntries = lastClearedExpressionsRef.current;\n if (snapshot.length === 0 && expressionEntries.length === 0) {\n return;\n }\n event.preventDefault();\n restoreSpinButtonSnapshot(snapshot);\n lastClearedSnapshotRef.current = [];\n\n for (const { inputRef, previousText } of expressionEntries) {\n inputRef.current?.setExpressionValue(previousText);\n inputRef.current?.validate();\n }\n lastClearedExpressionsRef.current = [];\n\n if (snapshot.length > 0) {\n // Focus the first restored spin button (synchronous).\n getFirstSnapshotHandler(snapshot)?.element.current?.focus();\n } else {\n // Only expressions were restored \u2014 focus the first one after its rAF.\n requestAnimationFrame(() => {\n expressionEntries[0]?.inputRef.current?.expressionInputRef?.focus();\n });\n }\n return;\n }\n\n const isCut = hasModifierKey && event.key === 'x';\n const isDelete = event.key === 'Backspace' || event.key === 'Delete';\n const direction =\n isCut || event.key === 'Backspace' ? 'backward' : 'forward';\n\n if (isCut || isDelete) {\n const selection = window.getSelection();\n if (selection && !selection.isCollapsed) {\n event.preventDefault();\n\n const clipboardText = buildTimeframeClipboardText();\n // Apply the clear and update focus synchronously BEFORE awaiting the\n // clipboard write. This ensures the undo snapshot is saved inside the\n // current synchronous execution context so that a Ctrl+Z fired\n // immediately afterwards (e.g. in tests wrapped with act()) can always\n // find a non-empty lastClearedSnapshotRef.\n bulkClear(selection, direction);\n\n if (isCut) {\n if (clipboardText !== null) {\n try {\n await navigator.clipboard.writeText(clipboardText);\n } catch {\n // For now, we silently ignore clipboard write errors.\n }\n }\n }\n return;\n }\n }\n\n // When there is a cross-element selection and the user types a printable\n // character, bulk-clear the selection and forward the key to the anchor\n // spin button so it can process the character normally.\n // Intra-element selections (drag within a single spin button) are left\n // alone \u2014 the spin button's own beforeinput handler deals with those.\n if (\n !hasModifierKey &&\n !event.shiftKey &&\n event.key.length === 1 &&\n (isExpressionTriggerKey(event) || /^\\d$/.test(event.key))\n ) {\n const selection = window.getSelection();\n if (\n selection &&\n !selection.isCollapsed &&\n selection.anchorNode !== selection.focusNode\n ) {\n event.preventDefault();\n const inputRefs = getInputRefs(dateInputFromRef, dateInputToRef);\n const plan = planBulkClear(\n selection,\n inputRefs,\n consumePreRestoreEndpoints(pickerRoot),\n );\n\n // When ALL spin buttons of an affected input are cleared (0 survivors),\n // the input should switch to expression mode \u2014 use the full applyBulkClear\n // path (same as Delete). Detected by: expression fallbacks will fire AND\n // the selection starts at the first spin button of its input.\n // When the first spin button is the survivor (selection starts later),\n // skip expression fallbacks so the input stays in ISO mode and the typed\n // character lands in the first selected spin button.\n const firstEntry = plan.snapshot[0];\n const firstKey = firstEntry\n ? [\n ...(firstEntry.inputRef.current?.spinButtonHandlers.keys() ??\n []),\n ][0]\n : undefined;\n const expressionModeWillSwitch =\n plan.expressionFallbacks.size > 0 && firstEntry?.key === firstKey;\n\n if (expressionModeWillSwitch) {\n const firstSpinButtonHandler = getFirstSnapshotHandler(\n plan.snapshot,\n );\n const expressionFocusTarget = findFirstExpressionFocusTarget(\n inputRefs,\n plan.affectedExpressionRefs,\n plan.expressionFallbacks,\n );\n applyBulkClear(plan, selection);\n // Pre-fill the expression input with the typed character. Both this\n // call and the setExpressionValue('') inside applyBulkClear are\n // batched by React 18, so the expression input renders with the\n // character before the rAF in makeFocusAfterBulkClear fires.\n expressionFocusTarget?.current?.setExpressionValue(event.key);\n restoreFocusAfterBulkClear(\n firstSpinButtonHandler,\n expressionFocusTarget,\n );\n return;\n }\n\n // Save undo snapshot and clear only the spin buttons \u2014 skip expression\n // fallbacks so the input stays in ISO mode and focus can land on the\n // first spin button to receive the typed character.\n lastClearedSnapshotRef.current = plan.snapshot;\n lastClearedExpressionsRef.current = plan.clearedExpressions;\n for (const { inputRef, key } of plan.snapshot) {\n inputRef.current?.spinButtonHandlers.get(key)?.clearValue(true);\n }\n selection.removeAllRanges();\n\n // Get the handler for the first cleared spin button directly from\n // the snapshot. We cannot use getFirstSnapshotHandler here because\n // it intentionally returns undefined for the first/second keys\n // (designed for post-delete focus), which would swallow the character.\n const handler = firstEntry\n ? firstEntry.inputRef.current?.spinButtonHandlers.get(\n firstEntry.key,\n )\n : undefined;\n if (handler) {\n handler.element.current?.focus();\n if (handler.type === 'number') {\n handler.applyText(event.key, true);\n const newLength =\n handler.element.current?.textContent?.length ?? 0;\n handler.setSelection({ start: newLength, end: newLength });\n } else {\n handler.element.current?.dispatchEvent(\n new KeyboardEvent('keydown', {\n key: event.key,\n bubbles: true,\n cancelable: true,\n }),\n );\n }\n }\n return;\n }\n }\n\n // When the container itself has focus (post drag-select, no spin button focused),\n // intercept ArrowUp / ArrowDown and forward them to the anchor spin button.\n // This avoids the Firefox visual bug caused by focusing a spin button during\n // drag-restore \u2014 no focus() is called there, so the container holds focus.\n if (\n !event.shiftKey &&\n !hasModifierKey &&\n (event.key === 'ArrowUp' || event.key === 'ArrowDown') &&\n event.target === touchedContainerRef.current\n ) {\n const anchorSpinButton = getAnchorSpinButton();\n\n if (anchorSpinButton !== null) {\n event.preventDefault();\n // Focus the spin button. onFocus sees selectionSpansMultipleNodes = true\n // (the cross-element range is still intact) and skips selectAll().\n anchorSpinButton.focus();\n // Dispatch a synthetic keydown to trigger useValueNavigation on the spin button.\n anchorSpinButton.dispatchEvent(\n new KeyboardEvent('keydown', {\n key: event.key,\n bubbles: true,\n cancelable: true,\n }),\n );\n return;\n }\n }\n\n // Forward the focus when a key is pressed in this element.\n // If the container has focus with an active selection (post Cmd+A or drag),\n // forward to the anchor spin button so the key lands in the right field.\n // Otherwise fall back to onFocusInput() which focuses the first input.\n // Skip for modifier+key shortcuts (e.g. Cmd+C): focusing a spin button\n // collapses Firefox's cross-element selection before the copy event fires.\n if (event.target === touchedContainerRef.current && !hasModifierKey) {\n const anchorSpinButton = getAnchorSpinButton();\n\n if (anchorSpinButton !== null) {\n anchorSpinButton.focus();\n } else {\n onFocusInput();\n }\n }\n },\n [onFocusInput, touchedContainerRef, dateInputFromRef, dateInputToRef],\n );\n\n return { onMouseDown, onKeyDown };\n}\n\nfunction getAnchorSpinButton(): HTMLElement | null {\n const anchorNode = window.getSelection()?.anchorNode ?? null;\n if (anchorNode === null) {\n return null;\n }\n\n return anchorNode.nodeType === Node.TEXT_NODE\n ? (anchorNode as Text).parentElement?.closest<HTMLElement>(\n '[contenteditable]',\n ) ?? null\n : (anchorNode as HTMLElement | null)?.closest?.('[contenteditable]') ??\n null;\n}\n"],
|
|
5
|
+
"mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,OAIK;AAEP,SAAS,8BAA8B;AACvC,SAAS,mCAAmC;AAC5C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,OACK;AAOP,SAAS,aACP,kBACA,gBAC+B;AAC/B,SAAO,CAAC,kBAAkB,GAAI,iBAAiB,CAAC,cAAc,IAAI,CAAC,CAAE;AACvE;AAcO,SAAS,gCACd,qBACA,cACA,kBACA,gBAIA;AACA,QAAM,cAAc;AAAA,IAClB,CAAC,UAA2C;AAC1C,UAAI,MAAM,WAAW,GAAG;AACtB;AAAA,MACF;AAKA,YAAM,OAAoB,MAAM;AAChC,YAAM,iBAAiB,MAAM;AAC7B,YAAM,sBACJ,0BAA0B,eAC1B,eAAe,aAAa,iBAAiB;AAC/C,UAAI,0BAA8C;AAClD,UAAI,CAAC,qBAAqB;AACxB,cAAM,cAAc,MAAM;AAAA,UACxB,KAAK,iBAA8B,mBAAmB;AAAA,QACxD;AAIA,YAAI,YAAY;AAChB,mBAAW,MAAM,aAAa;AAC5B,gBAAM,OAAO,GAAG,sBAAsB;AACtC,cAAI,KAAK,SAAS,MAAM,WAAW,KAAK,QAAQ,WAAW;AACzD,sCAA0B;AAC1B,wBAAY,KAAK;AAAA,UACnB;AAAA,QACF;AAEA,YAAI,4BAA4B,QAAQ,YAAY,SAAS,GAAG;AAC9D,oCAA0B,YAAY,CAAC,KAAK;AAAA,QAC9C;AAAA,MACF;AACA,aAAO,aAAa,GAAG,gBAAgB;AACvC,UAAI,MAAM;AACR;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA,CAAC,cAAqB,6BAAsC;AAC1D,gBACE,CAAC,4BACD,aAAa,kBAAkB,eAC/B,aAAa,WAAW,gBACxB;AAKA,kBAAI,aAAa,OAAO,aAAa,iBAAiB,GAAG;AACvD,6BAAa,OAAO,MAAM;AAAA,cAC5B,OAAO;AACL,6BAAa;AAAA,cACf;AAAA,YACF;AAAA,UACF;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,YAAY;AAAA,EACf;AAGA,QAAM,yBAAyB,OAAkC,CAAC,CAAC;AAEnE,QAAM,4BAA4B,OAEhC,CAAC,CAAC;AAEJ,QAAM,YAAY;AAAA,IAChB,OAAO,UAA8C;AAKnD,YAAM,iBAAiB,MAAM,YAAY,QAAQ,MAAM,YAAY;AACnE,YAAM,aAAa,MAAM;AAGzB,UACE,MAAM,QAAQ,WACd,MAAM,QAAQ,aACd,MAAM,QAAQ,UACd,MAAM,QAAQ,SACd,MAAM,QAAQ,WACd;AACA,cAAM,eAAe;AACrB;AAAA,MACF;AAKA,eAAS,eACP,MACA,WACA;AACA,cAAM;AAAA,UACJ;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,IAAI;AACJ,+BAAuB,UAAU;AACjC,kCAA0B,UAAU;AACpC,mBAAW,EAAE,UAAU,IAAI,KAAK,UAAU;AACxC,mBAAS,SAAS,mBAAmB,IAAI,GAAG,GAAG,WAAW,IAAI;AAAA,QAChE;AACA,mBAAW,CAAC,UAAU,IAAI,KAAK,qBAAqB;AAClD,mBAAS,SAAS,mBAAmB,IAAI;AAAA,QAC3C;AACA,mBAAW,OAAO,wBAAwB;AACxC,cAAI,SAAS,mBAAmB,EAAE;AAAA,QACpC;AACA,kBAAU,gBAAgB;AAAA,MAC5B;AAIA,eAAS,UACP,WACAA,YACA;AACA,cAAM,YAAY,aAAa,kBAAkB,cAAc;AAE/D,cAAM,2BAA2B;AAAA,UAC/B;AAAA,UACA;AAAA,QACF;AACA,YAAI,0BAA0B;AAC5B,mCAAyB,CAAC,wBAAwB,GAAG,SAAS;AAC9D,kCAAwB,WAAW,wBAAwB;AAC3D;AAAA,QACF;AAEA,cAAM,0BAA0B;AAAA,UAC9B;AAAA,UACA;AAAA,QACF;AACA,YAAI,yBAAyB;AAC3B,gBAAM,4BACJ,wBAAwB,CAAC,MAAM,wBAAwB,CAAC;AAC1D,gBAAM,4BAA4B,4BAC9B,CAAC,wBAAwB,CAAC,CAAC,IAC3B;AACJ,mCAAyB,2BAA2B,SAAS;AAE7D,gBAAM,wBAAwB,4BAC1B,UAAU;AAAA,YACR,CAAC,aACC,SAAS,SAAS,uBAClB,wBAAwB,CAAC;AAAA,UAC7B,IACA;AAEJ,gBAAMC,QAAO;AAAA,YACX;AAAA,YACA;AAAA,YACA,2BAA2B,UAAU;AAAA,UACvC;AACA,iCAAuB,UAAUA,MAAK;AACtC,oCAA0B,UAAUA,MAAK;AAEzC,gBAAM,yBAAyB,wBAAwBA,MAAK,QAAQ;AACpE,gBAAMC,yBAAwB;AAAA,YAC5B;AAAA,YACAD,MAAK;AAAA,YACLA,MAAK;AAAA,UACP;AAEA,uCAA6B,WAAW,uBAAuB;AAE/D,qBAAW,EAAE,UAAU,IAAI,KAAKA,MAAK,UAAU;AAC7C,qBAAS,SAAS,mBAAmB,IAAI,GAAG,GAAG,WAAW,IAAI;AAAA,UAChE;AACA,qBAAW,CAAC,UAAU,IAAI,KAAKA,MAAK,qBAAqB;AACvD,gBAAI,aAAa,uBAAuB;AACtC,uBAAS,SAAS,mBAAmB,IAAI;AAAA,YAC3C;AAAA,UACF;AAEA;AAAA,YACE;AAAA,YACAC;AAAA,UACF;AAEA;AAAA,QACF;AAEA,cAAM,OAAO;AAAA,UACX;AAAA,UACA;AAAA,UACA,2BAA2B,UAAU;AAAA,QACvC;AACA,cAAM,4BACJF,eAAc,aACV,wBAAwB,KAAK,QAAQ,IACrC,uBAAuB,KAAK,QAAQ;AAC1C,cAAM,wBAAwB;AAAA,UAC5B;AAAA,UACA,KAAK;AAAA,UACL,KAAK;AAAA,QACP;AACA,uBAAe,MAAM,SAAS;AAC9B;AAAA,UACE;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAIA,eAAS,yBACP,oBACA,WACA;AACA,+BAAuB,UAAU,CAAC;AAElC,cAAM,sBAGA,CAAC;AAEP,mBAAW,UAAU,oBAAoB;AACvC,cAAI;AACJ,qBAAW,YAAY,WAAW;AAChC,gBAAI,SAAS,SAAS,uBAAuB,QAAQ;AACnD,4BAAc;AACd;AAAA,YACF;AAAA,UACF;AAEA,cAAI,aAAa;AACf,gCAAoB,KAAK;AAAA,cACvB,UAAU;AAAA,cACV,cACE,YAAY,SAAS,UAAU,SAC/B,OAAO,eACP;AAAA,YACJ,CAAC;AAAA,UACH;AAAA,QACF;AAEA,kCAA0B,UAAU;AAAA,MACtC;AAGA,UAAI,kBAAkB,MAAM,QAAQ,KAAK;AACvC,cAAM,eAAe;AACrB,YAAI,MAAM,yBAAyB,aAAa;AAG9C,+BAAqB;AAAA,QACvB;AACA;AAAA,MACF;AAGA,UACE,MAAM,aAAa,SAClB,MAAM,QAAQ,eACb,MAAM,QAAQ,gBACd,MAAM,QAAQ,UACd,MAAM,QAAQ,QAChB;AACA,cAAM,eAAe;AACrB,YAAI,MAAM,yBAAyB,aAAa;AAI9C,0BAAgB,MAAM,GAAG;AAAA,QAC3B;AACA;AAAA,MACF;AAGA,UAAI,kBAAkB,MAAM,QAAQ,KAAK;AACvC,cAAM,WAAW,uBAAuB;AACxC,cAAM,oBAAoB,0BAA0B;AACpD,YAAI,SAAS,WAAW,KAAK,kBAAkB,WAAW,GAAG;AAC3D;AAAA,QACF;AACA,cAAM,eAAe;AACrB,kCAA0B,QAAQ;AAClC,+BAAuB,UAAU,CAAC;AAElC,mBAAW,EAAE,UAAU,aAAa,KAAK,mBAAmB;AAC1D,mBAAS,SAAS,mBAAmB,YAAY;AACjD,mBAAS,SAAS,SAAS;AAAA,QAC7B;AACA,kCAA0B,UAAU,CAAC;AAErC,YAAI,SAAS,SAAS,GAAG;AAEvB,kCAAwB,QAAQ,GAAG,QAAQ,SAAS,MAAM;AAAA,QAC5D,OAAO;AAEL,gCAAsB,MAAM;AAC1B,8BAAkB,CAAC,GAAG,SAAS,SAAS,oBAAoB,MAAM;AAAA,UACpE,CAAC;AAAA,QACH;AACA;AAAA,MACF;AAEA,YAAM,QAAQ,kBAAkB,MAAM,QAAQ;AAC9C,YAAM,WAAW,MAAM,QAAQ,eAAe,MAAM,QAAQ;AAC5D,YAAM,YACJ,SAAS,MAAM,QAAQ,cAAc,aAAa;AAEpD,UAAI,SAAS,UAAU;AACrB,cAAM,YAAY,OAAO,aAAa;AACtC,YAAI,aAAa,CAAC,UAAU,aAAa;AACvC,gBAAM,eAAe;AAErB,gBAAM,gBAAgB,4BAA4B;AAMlD,oBAAU,WAAW,SAAS;AAE9B,cAAI,OAAO;AACT,gBAAI,kBAAkB,MAAM;AAC1B,kBAAI;AACF,sBAAM,UAAU,UAAU,UAAU,aAAa;AAAA,cACnD,QAAQ;AAAA,cAER;AAAA,YACF;AAAA,UACF;AACA;AAAA,QACF;AAAA,MACF;AAOA,UACE,CAAC,kBACD,CAAC,MAAM,YACP,MAAM,IAAI,WAAW,MACpB,uBAAuB,KAAK,KAAK,OAAO,KAAK,MAAM,GAAG,IACvD;AACA,cAAM,YAAY,OAAO,aAAa;AACtC,YACE,aACA,CAAC,UAAU,eACX,UAAU,eAAe,UAAU,WACnC;AACA,gBAAM,eAAe;AACrB,gBAAM,YAAY,aAAa,kBAAkB,cAAc;AAC/D,gBAAM,OAAO;AAAA,YACX;AAAA,YACA;AAAA,YACA,2BAA2B,UAAU;AAAA,UACvC;AASA,gBAAM,aAAa,KAAK,SAAS,CAAC;AAClC,gBAAM,WAAW,aACb;AAAA,YACE,GAAI,WAAW,SAAS,SAAS,mBAAmB,KAAK,KACvD,CAAC;AAAA,UACL,EAAE,CAAC,IACH;AACJ,gBAAM,2BACJ,KAAK,oBAAoB,OAAO,KAAK,YAAY,QAAQ;AAE3D,cAAI,0BAA0B;AAC5B,kBAAM,yBAAyB;AAAA,cAC7B,KAAK;AAAA,YACP;AACA,kBAAM,wBAAwB;AAAA,cAC5B;AAAA,cACA,KAAK;AAAA,cACL,KAAK;AAAA,YACP;AACA,2BAAe,MAAM,SAAS;AAK9B,mCAAuB,SAAS,mBAAmB,MAAM,GAAG;AAC5D;AAAA,cACE;AAAA,cACA;AAAA,YACF;AACA;AAAA,UACF;AAKA,iCAAuB,UAAU,KAAK;AACtC,oCAA0B,UAAU,KAAK;AACzC,qBAAW,EAAE,UAAU,IAAI,KAAK,KAAK,UAAU;AAC7C,qBAAS,SAAS,mBAAmB,IAAI,GAAG,GAAG,WAAW,IAAI;AAAA,UAChE;AACA,oBAAU,gBAAgB;AAM1B,gBAAM,UAAU,aACZ,WAAW,SAAS,SAAS,mBAAmB;AAAA,YAC9C,WAAW;AAAA,UACb,IACA;AACJ,cAAI,SAAS;AACX,oBAAQ,QAAQ,SAAS,MAAM;AAC/B,gBAAI,QAAQ,SAAS,UAAU;AAC7B,sBAAQ,UAAU,MAAM,KAAK,IAAI;AACjC,oBAAM,YACJ,QAAQ,QAAQ,SAAS,aAAa,UAAU;AAClD,sBAAQ,aAAa,EAAE,OAAO,WAAW,KAAK,UAAU,CAAC;AAAA,YAC3D,OAAO;AACL,sBAAQ,QAAQ,SAAS;AAAA,gBACvB,IAAI,cAAc,WAAW;AAAA,kBAC3B,KAAK,MAAM;AAAA,kBACX,SAAS;AAAA,kBACT,YAAY;AAAA,gBACd,CAAC;AAAA,cACH;AAAA,YACF;AAAA,UACF;AACA;AAAA,QACF;AAAA,MACF;AAMA,UACE,CAAC,MAAM,YACP,CAAC,mBACA,MAAM,QAAQ,aAAa,MAAM,QAAQ,gBAC1C,MAAM,WAAW,oBAAoB,SACrC;AACA,cAAM,mBAAmB,oBAAoB;AAE7C,YAAI,qBAAqB,MAAM;AAC7B,gBAAM,eAAe;AAGrB,2BAAiB,MAAM;AAEvB,2BAAiB;AAAA,YACf,IAAI,cAAc,WAAW;AAAA,cAC3B,KAAK,MAAM;AAAA,cACX,SAAS;AAAA,cACT,YAAY;AAAA,YACd,CAAC;AAAA,UACH;AACA;AAAA,QACF;AAAA,MACF;AAQA,UAAI,MAAM,WAAW,oBAAoB,WAAW,CAAC,gBAAgB;AACnE,cAAM,mBAAmB,oBAAoB;AAE7C,YAAI,qBAAqB,MAAM;AAC7B,2BAAiB,MAAM;AAAA,QACzB,OAAO;AACL,uBAAa;AAAA,QACf;AAAA,MACF;AAAA,IACF;AAAA,IACA,CAAC,cAAc,qBAAqB,kBAAkB,cAAc;AAAA,EACtE;AAEA,SAAO,EAAE,aAAa,UAAU;AAClC;AAEA,SAAS,sBAA0C;AACjD,QAAM,aAAa,OAAO,aAAa,GAAG,cAAc;AACxD,MAAI,eAAe,MAAM;AACvB,WAAO;AAAA,EACT;AAEA,SAAO,WAAW,aAAa,KAAK,YAC/B,WAAoB,eAAe;AAAA,IAClC;AAAA,EACF,KAAK,OACJ,YAAmC,UAAU,mBAAmB,KAC/D;AACR;",
|
|
6
6
|
"names": ["direction", "plan", "expressionFocusTarget"]
|
|
7
7
|
}
|