@galaxy-io/dls 1.6.1 → 2.0.1
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/README.md +47 -50
- package/biome/index.json +74 -0
- package/biome/plugins/no-hex-literal.grit +20 -0
- package/biome/plugins/no-inline-style.grit +13 -0
- package/biome/plugins/no-margin.grit +9 -0
- package/biome/plugins/warn/no-hex-literal.grit +23 -0
- package/biome/plugins/warn/no-inline-style.grit +13 -0
- package/biome/plugins/warn/no-margin.grit +9 -0
- package/dist/a11y/FocusScope.d.ts +44 -0
- package/dist/a11y/FocusScope.js +229 -0
- package/dist/a11y/VisuallyHidden.d.ts +21 -0
- package/dist/a11y/VisuallyHidden.js +30 -0
- package/dist/avatar/Avatar.d.ts +56 -14
- package/dist/avatar/Avatar.js +250 -96
- package/dist/avatar/AvatarGroup.d.ts +43 -0
- package/dist/avatar/AvatarGroup.js +153 -0
- package/dist/backgrounds/GridBackground.d.ts +48 -0
- package/dist/backgrounds/GridBackground.js +146 -0
- package/dist/beacons/Beacon.d.ts +86 -22
- package/dist/beacons/Beacon.js +170 -47
- package/dist/brand/GalaxyFilamentWordmark.d.ts +30 -0
- package/dist/brand/GalaxyFilamentWordmark.js +39 -0
- package/dist/brand/GalaxyLogomark.d.ts +26 -0
- package/dist/brand/GalaxyLogomark.js +41 -0
- package/dist/brand/GalaxyLogomarkAnimation.d.ts +36 -0
- package/dist/brand/GalaxyLogomarkAnimation.js +107 -0
- package/dist/brand/GalaxyWordmark.d.ts +30 -0
- package/dist/brand/GalaxyWordmark.js +63 -0
- package/dist/brand/assets/galaxy-logomark-animation.js +136678 -0
- package/dist/brand/brandMark.d.ts +26 -0
- package/dist/brand/brandMark.js +35 -0
- package/dist/buttons/Button.d.ts +148 -59
- package/dist/buttons/Button.js +437 -227
- package/dist/buttons/ButtonGroup.d.ts +38 -0
- package/dist/buttons/ButtonGroup.js +68 -0
- package/dist/buttons/CopyButton.d.ts +77 -0
- package/dist/buttons/CopyButton.js +65 -0
- package/dist/charts/AreaChart.d.ts +49 -0
- package/dist/charts/AreaChart.js +31 -0
- package/dist/charts/BarChart.d.ts +54 -67
- package/dist/charts/BarChart.js +160 -124
- package/dist/charts/ChartAxis.d.ts +35 -40
- package/dist/charts/ChartAxis.js +114 -90
- package/dist/charts/ChartCategoryTargets.d.ts +12 -26
- package/dist/charts/ChartCategoryTargets.js +33 -20
- package/dist/charts/ChartFrame.d.ts +71 -116
- package/dist/charts/ChartFrame.js +306 -97
- package/dist/charts/ChartGroupProvider.d.ts +30 -41
- package/dist/charts/ChartGroupProvider.js +20 -7
- package/dist/charts/ChartLegend.d.ts +37 -48
- package/dist/charts/ChartLegend.js +243 -125
- package/dist/charts/ChartMarkTargets.d.ts +12 -28
- package/dist/charts/ChartMarkTargets.js +34 -20
- package/dist/charts/ChartPrimitives.d.ts +50 -305
- package/dist/charts/ChartPrimitives.js +65 -413
- package/dist/charts/ChartTooltip.d.ts +20 -26
- package/dist/charts/ChartTooltip.js +77 -40
- package/dist/charts/Heatmap.d.ts +35 -0
- package/dist/charts/Heatmap.js +307 -0
- package/dist/charts/LineChart.d.ts +54 -47
- package/dist/charts/LineChart.js +174 -121
- package/dist/charts/PieChart.d.ts +32 -53
- package/dist/charts/PieChart.js +159 -136
- package/dist/charts/Sparkline.d.ts +107 -0
- package/dist/charts/Sparkline.js +244 -0
- package/dist/charts/StatChart.d.ts +37 -13
- package/dist/charts/StatChart.js +82 -35
- package/dist/charts/barChartGeometry.d.ts +138 -86
- package/dist/charts/barChartGeometry.js +122 -101
- package/dist/charts/barChartLegend.d.ts +14 -18
- package/dist/charts/barChartLegend.js +18 -13
- package/dist/charts/chartFormat.d.ts +12 -18
- package/dist/charts/chartFormat.js +20 -52
- package/dist/charts/chartPalette.d.ts +33 -0
- package/dist/charts/chartPalette.js +68 -0
- package/dist/charts/chartScales.d.ts +41 -108
- package/dist/charts/chartScales.js +62 -128
- package/dist/charts/chartSelection.d.ts +15 -0
- package/dist/charts/chartSelection.js +22 -0
- package/dist/charts/constants.d.ts +100 -256
- package/dist/charts/constants.js +109 -275
- package/dist/charts/heatmapGeometry.d.ts +95 -0
- package/dist/charts/heatmapGeometry.js +155 -0
- package/dist/charts/lineChartGeometry.d.ts +108 -58
- package/dist/charts/lineChartGeometry.js +120 -78
- package/dist/charts/pieChartGeometry.d.ts +66 -40
- package/dist/charts/pieChartGeometry.js +68 -38
- package/dist/charts/types.d.ts +206 -466
- package/dist/charts/types.js +55 -144
- package/dist/charts/useCartesianChartLayout.d.ts +28 -59
- package/dist/charts/useCartesianChartLayout.js +47 -32
- package/dist/charts/useChartDimensions.d.ts +19 -40
- package/dist/charts/useChartDimensions.js +40 -56
- package/dist/charts/useChartFormatters.d.ts +6 -15
- package/dist/charts/useChartFormatters.js +4 -9
- package/dist/charts/useChartInteraction.d.ts +69 -116
- package/dist/charts/useChartInteraction.js +148 -78
- package/dist/charts/useChartTooltipPosition.d.ts +29 -39
- package/dist/charts/useChartTooltipPosition.js +14 -5
- package/dist/charts/useSeriesColorResolver.d.ts +11 -33
- package/dist/charts/useSeriesColorResolver.js +19 -12
- package/dist/chips/Chip.d.ts +155 -44
- package/dist/chips/Chip.js +329 -155
- package/dist/chips/ChipGroup.d.ts +53 -0
- package/dist/chips/ChipGroup.js +98 -0
- package/dist/drawer/Drawer.d.ts +83 -17
- package/dist/drawer/Drawer.js +399 -65
- package/dist/dropdown/Dropdown.d.ts +80 -63
- package/dist/dropdown/Dropdown.js +127 -129
- package/dist/editor/CodeEditor.d.ts +119 -40
- package/dist/editor/CodeEditor.js +490 -400
- package/dist/editor/CodeEditorReactWidget.d.ts +20 -17
- package/dist/editor/CodeEditorReactWidget.js +28 -21
- package/dist/feedback/Alert.d.ts +49 -0
- package/dist/feedback/Alert.js +172 -0
- package/dist/feedback/EmptyState.d.ts +39 -0
- package/dist/feedback/EmptyState.js +109 -0
- package/dist/feedback/ProgressBar.d.ts +125 -0
- package/dist/feedback/ProgressBar.js +183 -0
- package/dist/feedback/ProgressCircle.d.ts +99 -0
- package/dist/feedback/ProgressCircle.js +187 -0
- package/dist/feedback/Skeleton.d.ts +69 -0
- package/dist/feedback/Skeleton.js +130 -0
- package/dist/feedback/Spinner.d.ts +63 -0
- package/dist/feedback/Spinner.js +141 -0
- package/dist/fonts.css +70 -0
- package/dist/hooks/internal/useIsClient.d.ts +2 -0
- package/dist/hooks/internal/useIsClient.js +14 -0
- package/dist/hooks/useClipboard.d.ts +19 -0
- package/dist/hooks/useClipboard.js +45 -0
- package/dist/hooks/useControlledOpenState.d.ts +21 -0
- package/dist/hooks/useControlledOpenState.js +19 -0
- package/dist/hooks/useControlledState.d.ts +19 -0
- package/dist/hooks/useControlledState.js +22 -0
- package/dist/hooks/useDebouncedValue.d.ts +14 -0
- package/dist/hooks/useDebouncedValue.js +33 -0
- package/dist/hooks/useDisclosure.d.ts +26 -0
- package/dist/hooks/useDisclosure.js +36 -0
- package/dist/hooks/useDismiss.d.ts +23 -27
- package/dist/hooks/useDismiss.js +39 -27
- package/dist/hooks/useElementClientSize.d.ts +10 -10
- package/dist/hooks/useElementClientSize.js +8 -11
- package/dist/hooks/useElementWidth.d.ts +6 -13
- package/dist/hooks/useElementWidth.js +6 -14
- package/dist/hooks/useField.d.ts +47 -0
- package/dist/hooks/useField.js +40 -0
- package/dist/hooks/useHotkey.d.ts +77 -0
- package/dist/hooks/useHotkey.js +246 -0
- package/dist/hooks/useIsMac.d.ts +12 -0
- package/dist/hooks/useIsMac.js +27 -0
- package/dist/hooks/useIsomorphicLayoutEffect.d.ts +17 -0
- package/dist/hooks/useIsomorphicLayoutEffect.js +20 -0
- package/dist/hooks/useLocalStorage.d.ts +28 -0
- package/dist/hooks/useLocalStorage.js +145 -0
- package/dist/hooks/useMediaQuery.d.ts +11 -0
- package/dist/hooks/useMediaQuery.js +23 -0
- package/dist/hooks/usePrefersReducedMotion.d.ts +12 -0
- package/dist/hooks/usePrefersReducedMotion.js +25 -0
- package/dist/hooks/useResize.d.ts +42 -62
- package/dist/hooks/useResize.js +43 -31
- package/dist/icons/Icon.d.ts +64 -37
- package/dist/icons/Icon.js +96 -37
- package/dist/icons/internal/IconSlot.d.ts +10 -0
- package/dist/icons/internal/IconSlot.js +32 -0
- package/dist/inputs/CheckboxGroup.d.ts +115 -0
- package/dist/inputs/CheckboxGroup.js +183 -0
- package/dist/inputs/CheckboxInput.d.ts +98 -28
- package/dist/inputs/CheckboxInput.js +218 -88
- package/dist/inputs/ColorInput.d.ts +115 -29
- package/dist/inputs/ColorInput.js +748 -326
- package/dist/inputs/CopyInput.d.ts +49 -20
- package/dist/inputs/CopyInput.js +57 -49
- package/dist/inputs/CronInput.d.ts +94 -0
- package/dist/inputs/CronInput.js +618 -0
- package/dist/inputs/DateInput.d.ts +175 -28
- package/dist/inputs/DateInput.js +1109 -451
- package/dist/inputs/DurationInput.d.ts +101 -0
- package/dist/inputs/DurationInput.js +441 -0
- package/dist/inputs/Field.d.ts +75 -0
- package/dist/inputs/Field.js +247 -0
- package/dist/inputs/Fieldset.d.ts +53 -0
- package/dist/inputs/Fieldset.js +149 -0
- package/dist/inputs/FileInput.d.ts +110 -0
- package/dist/inputs/FileInput.js +476 -0
- package/dist/inputs/Input.d.ts +148 -187
- package/dist/inputs/Input.js +339 -259
- package/dist/inputs/KeyValueInput.d.ts +120 -0
- package/dist/inputs/KeyValueInput.js +383 -0
- package/dist/inputs/MultiSelectInput.d.ts +165 -54
- package/dist/inputs/MultiSelectInput.js +175 -559
- package/dist/inputs/NumberInput.d.ts +65 -9
- package/dist/inputs/NumberInput.js +197 -40
- package/dist/inputs/PasswordInput.d.ts +17 -12
- package/dist/inputs/PasswordInput.js +33 -33
- package/dist/inputs/PinInput.d.ts +117 -0
- package/dist/inputs/PinInput.js +364 -0
- package/dist/inputs/RadioGroup.d.ts +115 -0
- package/dist/inputs/RadioGroup.js +179 -0
- package/dist/inputs/RadioInput.d.ts +87 -24
- package/dist/inputs/RadioInput.js +182 -95
- package/dist/inputs/SearchInput.d.ts +66 -0
- package/dist/inputs/SearchInput.js +156 -0
- package/dist/inputs/SelectInput.d.ts +195 -55
- package/dist/inputs/SelectInput.js +1308 -446
- package/dist/inputs/SliderInput.d.ts +150 -30
- package/dist/inputs/SliderInput.js +441 -186
- package/dist/inputs/SwitchInput.d.ts +109 -0
- package/dist/inputs/SwitchInput.js +248 -0
- package/dist/inputs/TagInput.d.ts +117 -0
- package/dist/inputs/TagInput.js +408 -0
- package/dist/inputs/TextAreaInput.d.ts +146 -44
- package/dist/inputs/TextAreaInput.js +298 -198
- package/dist/inputs/TextInput.d.ts +4 -13
- package/dist/inputs/TextInput.js +13 -48
- package/dist/inputs/ToggleInput.d.ts +120 -22
- package/dist/inputs/ToggleInput.js +262 -116
- package/dist/inputs/internal/bareField.d.ts +18 -0
- package/dist/inputs/internal/bareField.js +38 -0
- package/dist/inputs/internal/devWarn.d.ts +7 -0
- package/dist/inputs/internal/devWarn.js +30 -0
- package/dist/inputs/internal/fieldFrame.d.ts +34 -0
- package/dist/inputs/internal/fieldFrame.js +64 -0
- package/dist/inputs/internal/fieldWiring.d.ts +50 -0
- package/dist/inputs/internal/fieldWiring.js +38 -0
- package/dist/inputs/internal/innerButton.d.ts +2 -0
- package/dist/inputs/internal/innerButton.js +24 -0
- package/dist/inputs/internal/ownField.d.ts +45 -0
- package/dist/inputs/internal/ownField.js +58 -0
- package/dist/inputs/internal/predicates.d.ts +9 -0
- package/dist/inputs/internal/predicates.js +11 -0
- package/dist/inputs/internal/useComboboxPopover.d.ts +46 -0
- package/dist/inputs/internal/useComboboxPopover.js +92 -0
- package/dist/json/JsonViewer.d.ts +62 -0
- package/dist/json/JsonViewer.js +483 -0
- package/dist/layout/Box.d.ts +87 -0
- package/dist/layout/Box.js +109 -0
- package/dist/layout/Divider.d.ts +25 -0
- package/dist/layout/Divider.js +70 -0
- package/dist/layout/Flex.d.ts +139 -0
- package/dist/layout/Flex.js +165 -0
- package/dist/layout/FlexItem.d.ts +72 -0
- package/dist/layout/FlexItem.js +84 -0
- package/dist/layout/Grid.d.ts +140 -0
- package/dist/layout/Grid.js +178 -0
- package/dist/layout/Portal.d.ts +29 -0
- package/dist/layout/Portal.js +27 -0
- package/dist/layout/ResizablePanels.d.ts +88 -0
- package/dist/layout/ResizablePanels.js +198 -0
- package/dist/layout/ResizeHandle.d.ts +48 -0
- package/dist/layout/ResizeHandle.js +143 -0
- package/dist/layout/ScrollArea.d.ts +30 -0
- package/dist/layout/ScrollArea.js +138 -0
- package/dist/links/Link.d.ts +101 -1
- package/dist/links/Link.js +166 -4
- package/dist/lists/BulletedList.d.ts +25 -7
- package/dist/lists/BulletedList.js +72 -27
- package/dist/lists/DescriptionList.d.ts +91 -0
- package/dist/lists/DescriptionList.js +147 -0
- package/dist/menu/ContextMenu.d.ts +64 -0
- package/dist/menu/ContextMenu.js +34 -0
- package/dist/menu/Menu.d.ts +280 -0
- package/dist/menu/Menu.js +1003 -0
- package/dist/modal/ConfirmDialog.d.ts +55 -0
- package/dist/modal/ConfirmDialog.js +151 -0
- package/dist/modal/Modal.d.ts +64 -14
- package/dist/modal/Modal.js +189 -48
- package/dist/navigation/Breadcrumbs.d.ts +65 -0
- package/dist/navigation/Breadcrumbs.js +243 -0
- package/dist/navigation/CommandPalette.d.ts +83 -0
- package/dist/navigation/CommandPalette.js +509 -0
- package/dist/navigation/Pagination.d.ts +87 -0
- package/dist/navigation/Pagination.js +300 -0
- package/dist/navigation/SidebarNav.d.ts +107 -0
- package/dist/navigation/SidebarNav.js +341 -0
- package/dist/navigation/Stepper.d.ts +52 -0
- package/dist/navigation/Stepper.js +207 -0
- package/dist/navigation/Tabs.d.ts +113 -0
- package/dist/navigation/Tabs.js +543 -0
- package/dist/navigation/Topbar.d.ts +20 -0
- package/dist/navigation/Topbar.js +62 -0
- package/dist/overlay/OverlayProvider.d.ts +28 -32
- package/dist/overlay/OverlayProvider.js +42 -93
- package/dist/overlay/useOverlay.d.ts +88 -12
- package/dist/overlay/useOverlay.js +220 -43
- package/dist/overlays/Popover.d.ts +114 -0
- package/dist/overlays/Popover.js +389 -0
- package/dist/shapes/Circle.d.ts +84 -8
- package/dist/shapes/Circle.js +122 -20
- package/dist/shapes/Square.d.ts +84 -8
- package/dist/shapes/Square.js +123 -20
- package/dist/styles/mixins.d.ts +35 -0
- package/dist/styles/mixins.js +60 -0
- package/dist/styles.css +1 -202
- package/dist/table/InfiniteSpreadsheet.d.ts +140 -10
- package/dist/table/InfiniteSpreadsheet.js +762 -225
- package/dist/table/InfiniteTable.d.ts +116 -14
- package/dist/table/InfiniteTable.js +287 -429
- package/dist/table/SpreadsheetCellEditor.d.ts +54 -6
- package/dist/table/SpreadsheetCellEditor.js +163 -84
- package/dist/table/TableCore.d.ts +252 -0
- package/dist/table/TableCore.js +1082 -0
- package/dist/table/VirtualizedInfiniteTable.d.ts +104 -14
- package/dist/table/VirtualizedInfiniteTable.js +280 -219
- package/dist/table/types.d.ts +66 -244
- package/dist/table/types.js +0 -51
- package/dist/table/useInfiniteScrollSentinel.d.ts +25 -21
- package/dist/table/useInfiniteScrollSentinel.js +38 -30
- package/dist/table/useSpreadsheetCellNavigation.d.ts +44 -0
- package/dist/table/useSpreadsheetCellNavigation.js +141 -0
- package/dist/table/useTableColumnLayout.d.ts +90 -25
- package/dist/table/useTableColumnLayout.js +255 -50
- package/dist/table/useTableKeyboardNavigation.d.ts +32 -21
- package/dist/table/useTableKeyboardNavigation.js +95 -71
- package/dist/table/useTableRowSelection.d.ts +24 -25
- package/dist/table/useTableRowSelection.js +57 -84
- package/dist/table/useTableVirtualizer.d.ts +20 -0
- package/dist/table/useTableVirtualizer.js +48 -0
- package/dist/text/Bold.d.ts +5 -6
- package/dist/text/Bold.js +16 -15
- package/dist/text/Code.d.ts +5 -6
- package/dist/text/Code.js +16 -25
- package/dist/text/CodeBlock.d.ts +77 -0
- package/dist/text/CodeBlock.js +373 -0
- package/dist/text/EditableText.d.ts +55 -15
- package/dist/text/EditableText.js +153 -135
- package/dist/text/Ellipsis.d.ts +34 -8
- package/dist/text/Ellipsis.js +55 -23
- package/dist/text/Kbd.d.ts +72 -0
- package/dist/text/Kbd.js +284 -0
- package/dist/text/MarkdownText.d.ts +27 -10
- package/dist/text/MarkdownText.js +317 -300
- package/dist/text/RequiredMarker.d.ts +17 -5
- package/dist/text/RequiredMarker.js +34 -36
- package/dist/text/Selectable.d.ts +5 -6
- package/dist/text/Selectable.js +16 -13
- package/dist/text/Span.d.ts +82 -0
- package/dist/text/Span.js +115 -0
- package/dist/text/Text.d.ts +128 -41
- package/dist/text/Text.js +209 -76
- package/dist/theme/GalaxyProvider.d.ts +75 -0
- package/dist/theme/GalaxyProvider.js +223 -0
- package/dist/theme/ThemeSwitcher.d.ts +52 -0
- package/dist/theme/ThemeSwitcher.js +94 -0
- package/dist/theme/enums.d.ts +118 -0
- package/dist/theme/enums.js +144 -0
- package/dist/theme/tokens/dark.d.ts +2 -0
- package/dist/theme/tokens/dark.js +275 -0
- package/dist/theme/tokens/generate.d.ts +15 -0
- package/dist/theme/tokens/generate.js +47 -0
- package/dist/theme/tokens/light.d.ts +2 -0
- package/dist/theme/tokens/light.js +274 -0
- package/dist/theme/tokens/palette.d.ts +14 -0
- package/dist/theme/tokens/palette.js +153 -0
- package/dist/theme/tokens/scales.d.ts +26 -0
- package/dist/theme/tokens/scales.js +154 -0
- package/dist/theme/tokens/t.d.ts +3 -0
- package/dist/theme/tokens/t.js +25 -0
- package/dist/theme/tokens/types.d.ts +189 -0
- package/dist/theme/tokens/types.js +0 -0
- package/dist/theme/useGalaxyTheme.d.ts +46 -0
- package/dist/theme/useGalaxyTheme.js +36 -0
- package/dist/theme/useInverseScope.d.ts +18 -0
- package/dist/theme/useInverseScope.js +33 -0
- package/dist/three/GalaxyLogomark3D.d.ts +46 -0
- package/dist/three/GalaxyLogomark3D.js +134 -0
- package/dist/three/assets/galaxy-logomark.js +4 -0
- package/dist/three/galaxyLogomark3DScene.d.ts +27 -0
- package/dist/three/galaxyLogomark3DScene.js +165 -0
- package/dist/timeline/Timeline.d.ts +120 -0
- package/dist/timeline/Timeline.js +301 -0
- package/dist/toast/Toast.d.ts +43 -19
- package/dist/toast/Toast.js +130 -89
- package/dist/toast/ToastProvider.d.ts +23 -23
- package/dist/toast/ToastProvider.js +298 -101
- package/dist/toast/ToastViewport.d.ts +12 -0
- package/dist/toast/ToastViewport.js +210 -0
- package/dist/toast/useToast.d.ts +139 -5
- package/dist/toast/useToast.js +15 -13
- package/dist/tokens.css +654 -0
- package/dist/tooltip/Tooltip.d.ts +64 -44
- package/dist/tooltip/Tooltip.js +280 -73
- package/dist/tooltip/internal/LazyTooltip.d.ts +7 -0
- package/dist/tooltip/internal/LazyTooltip.js +53 -0
- package/dist/transform/Fade.d.ts +33 -11
- package/dist/transform/Fade.js +71 -19
- package/dist/transform/Flasher.d.ts +25 -0
- package/dist/transform/Flasher.js +39 -0
- package/dist/transform/Rotate.d.ts +24 -12
- package/dist/transform/Rotate.js +36 -22
- package/dist/transform/ScaleFade.d.ts +36 -11
- package/dist/transform/ScaleFade.js +86 -28
- package/dist/transform/internal/CollapseMotion.d.ts +10 -0
- package/dist/transform/internal/CollapseMotion.js +65 -0
- package/dist/tree/Tree.d.ts +85 -0
- package/dist/tree/Tree.js +387 -0
- package/dist/tree/treeRow.d.ts +39 -0
- package/dist/tree/treeRow.js +75 -0
- package/dist/utils/colors.d.ts +46 -13
- package/dist/utils/colors.js +92 -34
- package/dist/utils/css.d.ts +23 -0
- package/dist/utils/css.js +30 -0
- package/dist/utils/format.d.ts +58 -0
- package/dist/utils/format.js +220 -0
- package/dist/vite/index.d.ts +16 -0
- package/dist/vite/index.js +52 -0
- package/dist/widget/Widget.d.ts +164 -48
- package/dist/widget/Widget.js +335 -96
- package/dist/widget/WidgetGroup.d.ts +36 -0
- package/dist/widget/WidgetGroup.js +103 -0
- package/package.json +855 -157
- package/dist/accordion/Accordion.d.ts +0 -54
- package/dist/accordion/Accordion.js +0 -183
- package/dist/assets/components/GalaxyFilamentWordmarkDark.d.ts +0 -3
- package/dist/assets/components/GalaxyFilamentWordmarkDark.js +0 -14
- package/dist/assets/components/GalaxyFilamentWordmarkLight.d.ts +0 -3
- package/dist/assets/components/GalaxyFilamentWordmarkLight.js +0 -14
- package/dist/assets/components/GalaxyLogomarkDark.d.ts +0 -3
- package/dist/assets/components/GalaxyLogomarkDark.js +0 -11
- package/dist/assets/components/GalaxyLogomarkLight.d.ts +0 -3
- package/dist/assets/components/GalaxyLogomarkLight.js +0 -17
- package/dist/assets/components/GalaxyWordmarkDark.d.ts +0 -3
- package/dist/assets/components/GalaxyWordmarkDark.js +0 -15
- package/dist/assets/components/GalaxyWordmarkLight.d.ts +0 -3
- package/dist/assets/components/GalaxyWordmarkLight.js +0 -28
- package/dist/assets/models/galaxy-animation.js +0 -136666
- package/dist/assets/models/galaxy-logomark.js +0 -4
- package/dist/avatar/AvatarShimmer.d.ts +0 -30
- package/dist/avatar/AvatarShimmer.js +0 -22
- package/dist/backgrounds/CellGridBackground.d.ts +0 -24
- package/dist/backgrounds/CellGridBackground.js +0 -44
- package/dist/backgrounds/CrossGridBackground.d.ts +0 -26
- package/dist/backgrounds/CrossGridBackground.js +0 -49
- package/dist/backgrounds/DotGridBackground.d.ts +0 -24
- package/dist/backgrounds/DotGridBackground.js +0 -47
- package/dist/badge/Badge.d.ts +0 -42
- package/dist/badge/Badge.js +0 -99
- package/dist/charts/ChartEmptyState.d.ts +0 -17
- package/dist/charts/ChartEmptyState.js +0 -29
- package/dist/charts/ProgressBar.d.ts +0 -29
- package/dist/charts/ProgressBar.js +0 -65
- package/dist/charts/chartTheme.d.ts +0 -18
- package/dist/charts/chartTheme.js +0 -26
- package/dist/containers/FlexItem.d.ts +0 -50
- package/dist/containers/FlexItem.js +0 -91
- package/dist/containers/FlexWrapper.d.ts +0 -96
- package/dist/containers/FlexWrapper.js +0 -143
- package/dist/containers/GridWrapper.d.ts +0 -79
- package/dist/containers/GridWrapper.js +0 -125
- package/dist/containers/Spacing.d.ts +0 -23
- package/dist/containers/Spacing.js +0 -59
- package/dist/containers/Wrapper.d.ts +0 -26
- package/dist/containers/Wrapper.js +0 -54
- package/dist/dividers/HorizontalDivider.d.ts +0 -7
- package/dist/dividers/HorizontalDivider.js +0 -39
- package/dist/dividers/VerticalDivider.d.ts +0 -6
- package/dist/dividers/VerticalDivider.js +0 -21
- package/dist/icons/GalaxyFilamentWordmark.d.ts +0 -11
- package/dist/icons/GalaxyFilamentWordmark.js +0 -25
- package/dist/icons/GalaxyLogomark.d.ts +0 -13
- package/dist/icons/GalaxyLogomark.js +0 -27
- package/dist/icons/GalaxyLogomark3D.d.ts +0 -56
- package/dist/icons/GalaxyLogomark3D.js +0 -319
- package/dist/icons/GalaxyLogomarkAnimation.d.ts +0 -18
- package/dist/icons/GalaxyLogomarkAnimation.js +0 -48
- package/dist/icons/GalaxyWordmark.d.ts +0 -11
- package/dist/icons/GalaxyWordmark.js +0 -25
- package/dist/inputs/MultiTextInput.d.ts +0 -32
- package/dist/inputs/MultiTextInput.js +0 -180
- package/dist/inputs/SwitcherInput.d.ts +0 -30
- package/dist/inputs/SwitcherInput.js +0 -81
- package/dist/inputs/hooks.d.ts +0 -10
- package/dist/inputs/hooks.js +0 -22
- package/dist/overlay/constants.d.ts +0 -28
- package/dist/overlay/constants.js +0 -37
- package/dist/resizable/HorizontalResizeHandle.d.ts +0 -17
- package/dist/resizable/HorizontalResizeHandle.js +0 -38
- package/dist/resizable/VerticalResizeHandle.d.ts +0 -18
- package/dist/resizable/VerticalResizeHandle.js +0 -39
- package/dist/table/SpreadsheetCell.d.ts +0 -21
- package/dist/table/SpreadsheetCell.js +0 -71
- package/dist/table/SpreadsheetHeaderCell.d.ts +0 -23
- package/dist/table/SpreadsheetHeaderCell.js +0 -91
- package/dist/table/SpreadsheetMenuItem.d.ts +0 -14
- package/dist/table/SpreadsheetMenuItem.js +0 -33
- package/dist/table/SpreadsheetPrimitives.d.ts +0 -172
- package/dist/table/SpreadsheetPrimitives.js +0 -105
- package/dist/table/SpreadsheetRow.d.ts +0 -33
- package/dist/table/SpreadsheetRow.js +0 -73
- package/dist/table/SpreadsheetRowActionCell.d.ts +0 -14
- package/dist/table/SpreadsheetRowActionCell.js +0 -51
- package/dist/table/TableExpandCell.d.ts +0 -11
- package/dist/table/TableExpandCell.js +0 -24
- package/dist/table/TableExpandedRow.d.ts +0 -16
- package/dist/table/TableExpandedRow.js +0 -77
- package/dist/table/TableHeaderCellContent.d.ts +0 -30
- package/dist/table/TableHeaderCellContent.js +0 -48
- package/dist/table/TablePrimitives.d.ts +0 -313
- package/dist/table/TablePrimitives.js +0 -302
- package/dist/table/TableSelectCell.d.ts +0 -18
- package/dist/table/TableSelectCell.js +0 -27
- package/dist/table/TableStatusRow.d.ts +0 -18
- package/dist/table/TableStatusRow.js +0 -50
- package/dist/table/useSpreadsheetEditing.d.ts +0 -13
- package/dist/table/useSpreadsheetEditing.js +0 -41
- package/dist/table/useTableColumnResize.d.ts +0 -38
- package/dist/table/useTableColumnResize.js +0 -155
- package/dist/table/useTableRowExpansion.d.ts +0 -24
- package/dist/table/useTableRowExpansion.js +0 -62
- package/dist/table/utils.d.ts +0 -50
- package/dist/table/utils.js +0 -78
- package/dist/text/HotKeys.d.ts +0 -30
- package/dist/text/HotKeys.js +0 -74
- package/dist/text/Paragraph.d.ts +0 -33
- package/dist/text/Paragraph.js +0 -83
- package/dist/text/TextShimmer.d.ts +0 -14
- package/dist/text/TextShimmer.js +0 -34
- package/dist/theme/GalaxyTheme.d.ts +0 -67
- package/dist/theme/GalaxyTheme.js +0 -119
- package/dist/theme/constants.d.ts +0 -8
- package/dist/theme/constants.js +0 -38
- package/dist/theme/index.d.ts +0 -6
- package/dist/theme/index.js +0 -7
- package/dist/theme/types.d.ts +0 -195
- package/dist/theme/types.js +0 -10
- package/dist/theme/typography.d.ts +0 -2
- package/dist/theme/typography.js +0 -73
- package/dist/theme/variants/dark.d.ts +0 -2
- package/dist/theme/variants/dark.js +0 -125
- package/dist/theme/variants/light.d.ts +0 -2
- package/dist/theme/variants/light.js +0 -125
- package/dist/toast/ToastContainer.d.ts +0 -10
- package/dist/toast/ToastContainer.js +0 -31
- package/dist/toast/ToastWrapper.d.ts +0 -6
- package/dist/toast/ToastWrapper.js +0 -27
- package/dist/transform/Flash.d.ts +0 -7
- package/dist/transform/Flash.js +0 -18
- package/dist/transform/Spin.d.ts +0 -14
- package/dist/transform/Spin.js +0 -25
- package/dist/utils/linaria.d.ts +0 -1
- package/dist/utils/linaria.js +0 -8
|
@@ -1,15 +1,10 @@
|
|
|
1
1
|
import { resolveLabelFormatter, resolveValueFormatter } from "./chartFormat.js";
|
|
2
2
|
import { useMemo } from "react";
|
|
3
3
|
//#region src/charts/useChartFormatters.ts
|
|
4
|
-
/**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
* from drifting apart — the recurring failure when each call site formats for
|
|
9
|
-
* itself.
|
|
10
|
-
*/
|
|
11
|
-
function useChartFormatters({ valueFormatter, valueUnit, labelFormatter }) {
|
|
12
|
-
const formatValue = useMemo(() => resolveValueFormatter(valueFormatter, valueUnit), [valueFormatter, valueUnit]);
|
|
4
|
+
/** @internal Resolves a chart's value and label formatters once per render. */
|
|
5
|
+
/** @internal Resolves `valueFormatter` (default `formatNumber(v, { precision: 2 })`) and `labelFormatter` (identity). */
|
|
6
|
+
function useChartFormatters(valueFormatter, labelFormatter) {
|
|
7
|
+
const formatValue = useMemo(() => resolveValueFormatter(valueFormatter), [valueFormatter]);
|
|
13
8
|
const formatLabel = useMemo(() => resolveLabelFormatter(labelFormatter), [labelFormatter]);
|
|
14
9
|
return useMemo(() => ({
|
|
15
10
|
formatValue,
|
|
@@ -1,135 +1,88 @@
|
|
|
1
|
-
import { ChartMarkState } from "./types";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
*
|
|
6
|
-
* Two independent axes, both hover-only:
|
|
7
|
-
*
|
|
8
|
-
* - **Category** — a numeric index along the plot. Hovering previews it: the
|
|
9
|
-
* tooltip opens and everything outside the category recedes.
|
|
10
|
-
* - **Series** — a legend key. Hovering (or focusing) a legend entry isolates
|
|
11
|
-
* that series.
|
|
12
|
-
*
|
|
13
|
-
* Plus one read-only source: inside a `ChartGroupProvider`, a chart that
|
|
14
|
-
* supplies {@link UseChartInteractionOptions.categoryKeys} follows the category
|
|
15
|
-
* hovered in a sibling chart, matched by raw label. Following emphasizes; it
|
|
16
|
-
* opens the tooltip only when the provider opts in via `sharedTooltip`, which
|
|
17
|
-
* is what {@link ChartInteraction.showTooltip} folds together. The series axis
|
|
18
|
-
* deliberately does not sync: series keys are chart-local vocabulary, and
|
|
19
|
-
* isolating "Delivered" in a chart that happens to share the name would
|
|
20
|
-
* correlate nothing.
|
|
21
|
-
*
|
|
22
|
-
* Plus one axis that is not hover at all: **selection**, supplied by the caller
|
|
23
|
-
* and never changed here. A selection is a commitment rather than a preview —
|
|
24
|
-
* it outranks both hover filters, and it releases only when the caller says so.
|
|
25
|
-
*
|
|
26
|
-
* Clicking deliberately does *not* pin the hover. That is what it used to do,
|
|
27
|
-
* with no effect outside the chart, and it read as the plot getting stuck. A
|
|
28
|
-
* click now only reports what was hit; whether anything lights up afterwards is
|
|
29
|
-
* the caller's `selection` to decide.
|
|
30
|
-
*/
|
|
31
|
-
interface UseChartInteractionOptions {
|
|
32
|
-
/** Number of hoverable categories. A shrinking count clears stale indices. */
|
|
1
|
+
import { ChartMarkState, type ChartSelection, type ChartSelectionInput } from "./types.js";
|
|
2
|
+
/** @internal Inputs of `useChartInteraction`. */
|
|
3
|
+
export interface UseChartInteractionOptions {
|
|
4
|
+
/** Number of categories (slices, cells). A shrinking count clears stale indices. */
|
|
33
5
|
categoryCount: number;
|
|
34
|
-
/** Legend keys
|
|
6
|
+
/** Legend keys rendered; a key that disappears clears a stale series hover. */
|
|
35
7
|
seriesKeys?: string[];
|
|
36
|
-
/**
|
|
37
|
-
* Raw category labels, index-aligned with {@link categoryCount}. Raw labels,
|
|
38
|
-
* never `labelFormatter` output — two charts formatting the same label
|
|
39
|
-
* differently must still match, and so must a caller's `selection`.
|
|
40
|
-
*
|
|
41
|
-
* Identity only. Opting into `ChartGroupProvider` sync is
|
|
42
|
-
* {@link enableGroupSync}, which used to be implied by supplying these — the
|
|
43
|
-
* two were split once selection needed the labels in a chart (PieChart) that
|
|
44
|
-
* must stay out of the sync group.
|
|
45
|
-
*/
|
|
8
|
+
/** Raw category labels, index-aligned. Needed for selection and sync. */
|
|
46
9
|
categoryKeys?: string[];
|
|
47
|
-
/**
|
|
48
|
-
* Follow a `ChartGroupProvider` sibling's hovered category. PieChart passes
|
|
49
|
-
* `false`: it has no category axis, so there is nothing to correlate.
|
|
50
|
-
* @default true
|
|
51
|
-
*/
|
|
10
|
+
/** Follow and publish to a `ChartGroupProvider`. PieChart and Heatmap pass `false`. @default true */
|
|
52
11
|
enableGroupSync?: boolean;
|
|
53
|
-
/**
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
*
|
|
63
|
-
* Normalized here rather than by each chart, so "one, several, or none" is
|
|
64
|
-
* spelled once.
|
|
65
|
-
*/
|
|
66
|
-
selection?: ChartSelectionInput;
|
|
67
|
-
/**
|
|
68
|
-
* How marks outside the active category recede. Defaults to
|
|
69
|
-
* {@link ChartMarkState.MUTED}; BarChart passes
|
|
70
|
-
* {@link ChartMarkState.DIMMED} because its cursor band already carries the
|
|
71
|
-
* category highlight and strong muting on top of it would shout. Only the
|
|
72
|
-
* category axis softens — series (legend) isolation always mutes fully,
|
|
73
|
-
* since there the muting *is* the affordance.
|
|
74
|
-
*/
|
|
12
|
+
/** The caller's selection: presentational, or the controlled filter with `isFilterable`. */
|
|
13
|
+
selection?: ChartSelectionInput | undefined;
|
|
14
|
+
/** Clicks toggle the filter; the filter chips' × and Escape clear it. @default false */
|
|
15
|
+
isFilterable?: boolean;
|
|
16
|
+
/** Initial filter while uncontrolled, with `isFilterable`. */
|
|
17
|
+
defaultSelection?: ChartSelectionInput | undefined;
|
|
18
|
+
/** Called with the new filter, with `isFilterable`. */
|
|
19
|
+
onSelectionChange?: ((selection: ChartSelection[]) => void) | undefined;
|
|
20
|
+
/** How off-category marks recede. @default ChartMarkState.MUTED */
|
|
75
21
|
categoryMuteState?: ChartMarkState;
|
|
76
|
-
/**
|
|
22
|
+
/** No category interaction (static plot, loading, empty). The legend stays live. */
|
|
77
23
|
isDisabled?: boolean;
|
|
78
|
-
/**
|
|
79
|
-
* Render every mark muted, whatever the two axes say.
|
|
80
|
-
*
|
|
81
|
-
* Distinct from {@link isDisabled}, which suppresses *input*. Loading suppresses
|
|
82
|
-
* *emphasis*: there is nothing yet worth drawing attention to. Folded in here
|
|
83
|
-
* rather than left to each mark, because the alternative is the same
|
|
84
|
-
* `isLoading ? MUTED : getMarkState(…)` ternary hand-copied at every mark —
|
|
85
|
-
* which is exactly how one of them came to be missing it.
|
|
86
|
-
*/
|
|
24
|
+
/** Every mark is muted and following pauses. */
|
|
87
25
|
isLoading?: boolean;
|
|
26
|
+
/** Cells laid out in rows of `columns` (Heatmap): Up / Down move by a row, Home / End stay in the row. */
|
|
27
|
+
grid?: {
|
|
28
|
+
columns: number;
|
|
29
|
+
};
|
|
88
30
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
31
|
+
/** @internal Which marks a mark-state query is about. */
|
|
32
|
+
export interface ChartMarkStateArgs {
|
|
33
|
+
/** Omit for marks that belong to no category (a line). */
|
|
34
|
+
categoryIndex?: number | undefined;
|
|
35
|
+
/** Omit for marks that belong to no series. */
|
|
36
|
+
seriesKey?: string | undefined;
|
|
94
37
|
}
|
|
38
|
+
/** @internal What `useChartInteraction` returns. */
|
|
95
39
|
export interface ChartInteraction {
|
|
96
|
-
/**
|
|
97
|
-
* The active category — this chart's own hover, or failing that the category
|
|
98
|
-
* a `ChartGroupProvider` sibling is hovering, resolved to a local index.
|
|
99
|
-
*/
|
|
40
|
+
/** The engaged category: this chart's own (pointer or keyboard), else the one a sibling follows. */
|
|
100
41
|
activeIndex: number | null;
|
|
101
|
-
/**
|
|
102
|
-
* True when this chart should present its tooltip for {@link activeIndex}:
|
|
103
|
-
* its own pointer hover always, a synced sibling's only when the
|
|
104
|
-
* `ChartGroupProvider` opts in via `sharedTooltip`.
|
|
105
|
-
*/
|
|
42
|
+
/** True when this chart shows its tooltip for `activeIndex`. */
|
|
106
43
|
showTooltip: boolean;
|
|
44
|
+
/** The legend key being hovered. */
|
|
107
45
|
hoveredSeriesKey: string | null;
|
|
108
|
-
/**
|
|
109
|
-
* Categories a {@link UseChartInteractionOptions.selection} names outright.
|
|
110
|
-
*
|
|
111
|
-
* Drives the persistent cursor a cartesian chart draws at a selected
|
|
112
|
-
* category. A descriptor carrying only a `seriesKey` names no category and
|
|
113
|
-
* contributes nothing here — "every failure" should mute the other series,
|
|
114
|
-
* not band every column on the axis.
|
|
115
|
-
*/
|
|
46
|
+
/** Categories the selection names outright (persistent cursors). */
|
|
116
47
|
selectedCategoryIndices: ReadonlySet<number>;
|
|
117
|
-
/**
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
48
|
+
/** Clicks filter (`isFilterable`). */
|
|
49
|
+
isFilterable: boolean;
|
|
50
|
+
/** Something is pinned (or the caller's selection is not empty). */
|
|
51
|
+
hasSelection: boolean;
|
|
52
|
+
/** The selection as a list (the pinned filter with `isFilterable`). */
|
|
53
|
+
selection: readonly ChartSelection[];
|
|
54
|
+
/** One click on a descriptor: pin, unpin, switch, or (additive) add / remove. No-op unless filterable. */
|
|
55
|
+
toggleSelection: (descriptor: ChartSelection, isAdditive: boolean) => void;
|
|
56
|
+
/** Replace the filter (a chip's × dropping one part of a pin). No-op unless filterable. */
|
|
57
|
+
setSelection: (selection: ChartSelection[]) => void;
|
|
58
|
+
/** Clear the filter (the chip's ×, Escape). No-op unless filterable. */
|
|
59
|
+
clearSelection: () => void;
|
|
60
|
+
/** A legend entry's emphasis: the hovered entry, else whether the selection covers its series. */
|
|
61
|
+
getSeriesState: (seriesKey: string) => ChartMarkState;
|
|
62
|
+
/** The series is pinned on its own (`{ seriesKey }` is in the filter): its legend entry reads pressed. */
|
|
63
|
+
isSeriesPinned: (seriesKey: string) => boolean;
|
|
64
|
+
/** Emphasis of one mark, composed from selection, series and category. */
|
|
65
|
+
getMarkState: (args: ChartMarkStateArgs) => ChartMarkState;
|
|
66
|
+
/** Pointer entered a category's target. */
|
|
129
67
|
onCategoryEnter: (categoryIndex: number) => void;
|
|
68
|
+
/** Pointer left the plot. */
|
|
130
69
|
onCategoryLeave: () => void;
|
|
70
|
+
/** Pointer entered a legend entry. */
|
|
131
71
|
onSeriesEnter: (seriesKey: string) => void;
|
|
72
|
+
/** Pointer left a legend entry. */
|
|
132
73
|
onSeriesLeave: () => void;
|
|
74
|
+
/** Keyboard focus reached the plot: engage the last category, or the first. Returns it. */
|
|
75
|
+
onKeyboardFocus: () => number | null;
|
|
76
|
+
/** A navigation key; returns the newly engaged index, or `null` if the key does not navigate. */
|
|
77
|
+
onKeyboardMove: (key: string) => number | null;
|
|
78
|
+
/** Escape: clear the engaged category (focus stays). */
|
|
79
|
+
onKeyboardClear: () => void;
|
|
80
|
+
/** Focus left the plot. */
|
|
81
|
+
onKeyboardBlur: () => void;
|
|
133
82
|
}
|
|
134
|
-
|
|
135
|
-
export {
|
|
83
|
+
/** @internal The next index for a navigation key, stopping at the ends (no wrap). */
|
|
84
|
+
export declare function getNextCategoryIndex(current: number, key: string, count: number, grid?: {
|
|
85
|
+
columns: number;
|
|
86
|
+
}): number | null;
|
|
87
|
+
/** @internal Shared interaction model; see the module comment. */
|
|
88
|
+
export declare function useChartInteraction({ categoryCount, seriesKeys, categoryKeys, enableGroupSync, selection, isFilterable, defaultSelection, onSelectionChange, categoryMuteState, isDisabled, isLoading, grid, }: UseChartInteractionOptions): ChartInteraction;
|
|
@@ -1,32 +1,62 @@
|
|
|
1
|
+
import { useControlledState } from "../hooks/useControlledState.js";
|
|
1
2
|
import { ChartMarkState } from "./types.js";
|
|
3
|
+
import { isSameSelection, toSelectionList, toggleSelection } from "./chartSelection.js";
|
|
2
4
|
import { ChartGroupContext } from "./ChartGroupProvider.js";
|
|
3
|
-
import { useCallback, useContext, useEffect, useId, useMemo, useState } from "react";
|
|
5
|
+
import { useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from "react";
|
|
4
6
|
//#region src/charts/useChartInteraction.ts
|
|
5
|
-
/**
|
|
6
|
-
|
|
7
|
+
/**
|
|
8
|
+
* @internal Hover, keyboard, selection and group sync for every chart.
|
|
9
|
+
*
|
|
10
|
+
* Two local axes:
|
|
11
|
+
* - **Category**: an index along the plot, engaged by pointer hover or by the keyboard (the plot
|
|
12
|
+
* box is one tab stop; arrows move, Home / End jump, Escape clears). Engaging previews it: the
|
|
13
|
+
* tooltip opens and the rest recedes.
|
|
14
|
+
* - **Series**: a legend key, engaged by hovering a legend entry. Isolates that series.
|
|
15
|
+
*
|
|
16
|
+
* Plus a read-only source: inside a `ChartGroupProvider`, a chart that passes `categoryKeys`
|
|
17
|
+
* follows the category a sibling engages (matched by raw label). Following emphasizes; it opens
|
|
18
|
+
* the tooltip only when the provider shares tooltips. Series hover never syncs.
|
|
19
|
+
*
|
|
20
|
+
* And **selection**: the marks that hold full strength while the rest recede. Without
|
|
21
|
+
* `isFilterable` it is the caller's, presentational, and clicks only report. With `isFilterable`
|
|
22
|
+
* it is the chart's filter (controlled or not): legend and plot clicks toggle descriptors in it, and
|
|
23
|
+
* the filter chips' × or Escape clear it. A pinned selection outranks category hover; hovering a legend entry
|
|
24
|
+
* previews that series over it.
|
|
25
|
+
*/
|
|
7
26
|
var NO_SELECTED_INDICES = /* @__PURE__ */ new Set();
|
|
8
|
-
|
|
9
|
-
|
|
27
|
+
/** @internal The next index for a navigation key, stopping at the ends (no wrap). */
|
|
28
|
+
function getNextCategoryIndex(current, key, count, grid) {
|
|
29
|
+
if (count <= 0) return null;
|
|
30
|
+
const columns = grid ? Math.max(1, grid.columns) : count;
|
|
31
|
+
const rowStart = grid ? current - current % columns : 0;
|
|
32
|
+
const rowEnd = grid ? Math.min(count - 1, rowStart + columns - 1) : count - 1;
|
|
33
|
+
switch (key) {
|
|
34
|
+
case "ArrowRight": return Math.min(current + 1, rowEnd);
|
|
35
|
+
case "ArrowLeft": return Math.max(current - 1, rowStart);
|
|
36
|
+
case "Home": return rowStart;
|
|
37
|
+
case "End": return rowEnd;
|
|
38
|
+
case "ArrowDown": return grid && current + columns < count ? current + columns : grid ? current : null;
|
|
39
|
+
case "ArrowUp": return grid && current - columns >= 0 ? current - columns : grid ? current : null;
|
|
40
|
+
default: return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** @internal Shared interaction model; see the module comment. */
|
|
44
|
+
function useChartInteraction({ categoryCount, seriesKeys, categoryKeys, enableGroupSync = true, selection, isFilterable = false, defaultSelection, onSelectionChange, categoryMuteState = ChartMarkState.MUTED, isDisabled = false, isLoading = false, grid }) {
|
|
45
|
+
const [pointerIndex, setPointerIndex] = useState(null);
|
|
46
|
+
const [keyboardIndex, setKeyboardIndex] = useState(null);
|
|
10
47
|
const [hoveredSeriesKey, setHoveredSeriesKey] = useState(null);
|
|
48
|
+
/** The last engaged category, where keyboard focus resumes. */
|
|
49
|
+
const lastIndexRef = useRef(null);
|
|
11
50
|
const sync = useContext(ChartGroupContext);
|
|
12
51
|
const syncId = useId();
|
|
13
52
|
const canSync = sync !== null && categoryKeys !== void 0 && enableGroupSync;
|
|
14
53
|
const setActive = sync?.setActive;
|
|
15
54
|
const clearActive = sync?.clearActive;
|
|
16
|
-
const
|
|
55
|
+
const inRange = (index) => index !== null && index < categoryCount && !isDisabled ? index : null;
|
|
56
|
+
const localIndex = inRange(pointerIndex) ?? inRange(keyboardIndex);
|
|
57
|
+
if (localIndex !== null) lastIndexRef.current = localIndex;
|
|
17
58
|
const safeHoveredSeries = hoveredSeriesKey !== null && (seriesKeys === void 0 || seriesKeys.includes(hoveredSeriesKey)) ? hoveredSeriesKey : null;
|
|
18
|
-
|
|
19
|
-
* Publish this chart's hover to the sync group.
|
|
20
|
-
*
|
|
21
|
-
* An effect over the derived label rather than calls inside the pointer
|
|
22
|
-
* handlers, so three edge cases collapse into one place: data shrinking
|
|
23
|
-
* under a resting pointer (the `safeHovered` guard nulls the key → clears),
|
|
24
|
-
* the label at the resting index changing (republishes what is now under
|
|
25
|
-
* the pointer), and unmount while source (the cleanup effect below).
|
|
26
|
-
* Source-only writes still hold — `localKey` derives from `safeHovered`,
|
|
27
|
-
* which only this chart's own pointer sets.
|
|
28
|
-
*/
|
|
29
|
-
const localKey = canSync && safeHovered !== null ? categoryKeys[safeHovered] ?? null : null;
|
|
59
|
+
const localKey = canSync && localIndex !== null ? categoryKeys[localIndex] ?? null : null;
|
|
30
60
|
useEffect(() => {
|
|
31
61
|
if (!setActive || !clearActive) return;
|
|
32
62
|
if (localKey !== null) setActive({
|
|
@@ -41,16 +71,8 @@ function useChartInteraction({ categoryCount, seriesKeys, categoryKeys, enableGr
|
|
|
41
71
|
localKey
|
|
42
72
|
]);
|
|
43
73
|
useEffect(() => () => clearActive?.(syncId), [clearActive, syncId]);
|
|
44
|
-
/**
|
|
45
|
-
* The category a sibling is hovering, resolved to this chart's own index.
|
|
46
|
-
*
|
|
47
|
-
* `isLoading` blocks following — the marks are force-muted anyway, but
|
|
48
|
-
* without the guard LineChart would still draw its cursor and dots through
|
|
49
|
-
* a loading plot. An unmatched label resolves to no crosshair at all, which
|
|
50
|
-
* is how charts with partially overlapping categories degrade.
|
|
51
|
-
*/
|
|
52
74
|
const followedIndex = useMemo(() => {
|
|
53
|
-
if (!canSync || isLoading) return null;
|
|
75
|
+
if (!canSync || isLoading || isDisabled) return null;
|
|
54
76
|
const entry = sync.activeEntry;
|
|
55
77
|
if (entry === null || entry.sourceId === syncId) return null;
|
|
56
78
|
const index = categoryKeys.indexOf(entry.categoryKey);
|
|
@@ -58,43 +80,72 @@ function useChartInteraction({ categoryCount, seriesKeys, categoryKeys, enableGr
|
|
|
58
80
|
}, [
|
|
59
81
|
canSync,
|
|
60
82
|
isLoading,
|
|
83
|
+
isDisabled,
|
|
61
84
|
sync?.activeEntry,
|
|
62
85
|
syncId,
|
|
63
86
|
categoryKeys
|
|
64
87
|
]);
|
|
65
|
-
const
|
|
66
|
-
const showTooltip =
|
|
88
|
+
const activeIndex = localIndex ?? followedIndex;
|
|
89
|
+
const showTooltip = localIndex !== null || followedIndex !== null && (sync?.shouldShareTooltip ?? false);
|
|
67
90
|
const onCategoryEnter = useCallback((categoryIndex) => {
|
|
68
91
|
if (isDisabled) return;
|
|
69
|
-
|
|
70
|
-
}, [isDisabled]);
|
|
71
|
-
const onCategoryLeave = useCallback(() => {
|
|
72
|
-
if (isDisabled) return;
|
|
73
|
-
setHoveredIndex(null);
|
|
92
|
+
setPointerIndex(categoryIndex);
|
|
74
93
|
}, [isDisabled]);
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const
|
|
79
|
-
|
|
94
|
+
const onCategoryLeave = useCallback(() => setPointerIndex(null), []);
|
|
95
|
+
const onSeriesEnter = useCallback((seriesKey) => setHoveredSeriesKey(seriesKey), []);
|
|
96
|
+
const onSeriesLeave = useCallback(() => setHoveredSeriesKey(null), []);
|
|
97
|
+
const onKeyboardFocus = useCallback(() => {
|
|
98
|
+
if (isDisabled || categoryCount === 0) return null;
|
|
99
|
+
const last = lastIndexRef.current;
|
|
100
|
+
const index = last !== null && last < categoryCount ? last : 0;
|
|
101
|
+
setKeyboardIndex(index);
|
|
102
|
+
return index;
|
|
103
|
+
}, [isDisabled, categoryCount]);
|
|
104
|
+
const onKeyboardMove = useCallback((key) => {
|
|
105
|
+
if (isDisabled || categoryCount === 0) return null;
|
|
106
|
+
const current = localIndex ?? lastIndexRef.current;
|
|
107
|
+
const next = current === null || current >= categoryCount ? getNextCategoryIndex(0, key, categoryCount, grid) === null ? null : 0 : getNextCategoryIndex(current, key, categoryCount, grid);
|
|
108
|
+
if (next === null) return null;
|
|
109
|
+
setPointerIndex(null);
|
|
110
|
+
setKeyboardIndex(next);
|
|
111
|
+
return next;
|
|
112
|
+
}, [
|
|
113
|
+
isDisabled,
|
|
114
|
+
categoryCount,
|
|
115
|
+
localIndex,
|
|
116
|
+
grid
|
|
117
|
+
]);
|
|
118
|
+
const onKeyboardClear = useCallback(() => {
|
|
119
|
+
setPointerIndex(null);
|
|
120
|
+
setKeyboardIndex(null);
|
|
80
121
|
}, []);
|
|
81
|
-
const
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
122
|
+
const onKeyboardBlur = useCallback(() => setKeyboardIndex(null), []);
|
|
123
|
+
const [selectionList, setSelectionList] = useControlledState({
|
|
124
|
+
value: useMemo(() => selection === void 0 ? void 0 : toSelectionList(selection), [selection]),
|
|
125
|
+
defaultValue: isFilterable ? toSelectionList(defaultSelection) : [],
|
|
126
|
+
onChange: onSelectionChange
|
|
127
|
+
});
|
|
86
128
|
const hasSelection = selectionList.length > 0;
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
129
|
+
const toggleSelection$1 = useCallback((descriptor, isAdditive) => {
|
|
130
|
+
if (!isFilterable) return;
|
|
131
|
+
setSelectionList(toggleSelection(selectionList, descriptor, isAdditive));
|
|
132
|
+
}, [
|
|
133
|
+
isFilterable,
|
|
134
|
+
selectionList,
|
|
135
|
+
setSelectionList
|
|
136
|
+
]);
|
|
137
|
+
const setSelection = useCallback((next) => {
|
|
138
|
+
if (isFilterable) setSelectionList(next);
|
|
139
|
+
}, [isFilterable, setSelectionList]);
|
|
140
|
+
const clearSelection = useCallback(() => {
|
|
141
|
+
if (!isFilterable || selectionList.length === 0) return;
|
|
142
|
+
setSelectionList([]);
|
|
143
|
+
}, [
|
|
144
|
+
isFilterable,
|
|
145
|
+
selectionList,
|
|
146
|
+
setSelectionList
|
|
147
|
+
]);
|
|
148
|
+
/** A descriptor is a conjunction of the fields it carries; a field the mark lacks never excludes it. */
|
|
98
149
|
const matchesSelection = useCallback(({ categoryIndex, seriesKey }) => {
|
|
99
150
|
if (!hasSelection) return true;
|
|
100
151
|
return selectionList.some((descriptor) => {
|
|
@@ -107,23 +158,13 @@ function useChartInteraction({ categoryCount, seriesKeys, categoryKeys, enableGr
|
|
|
107
158
|
selectionList,
|
|
108
159
|
categoryKeys
|
|
109
160
|
]);
|
|
110
|
-
/**
|
|
111
|
-
* Resolved once rather than per mark: the cursor a cartesian chart draws at a
|
|
112
|
-
* selected category needs the set, and every mark would otherwise re-scan
|
|
113
|
-
* every descriptor.
|
|
114
|
-
*
|
|
115
|
-
* Deliberately not pruned when the data shrinks under it, unlike the hover
|
|
116
|
-
* indices above. A selection is the caller's state and describes what they
|
|
117
|
-
* asked for; a key that is momentarily absent from the data — mid-refetch,
|
|
118
|
-
* say — simply matches nothing until it returns.
|
|
119
|
-
*/
|
|
120
161
|
const selectedCategoryIndices = useMemo(() => {
|
|
121
162
|
if (!hasSelection || categoryKeys === void 0) return NO_SELECTED_INDICES;
|
|
122
|
-
const
|
|
123
|
-
if (
|
|
163
|
+
const keys = new Set(selectionList.map((descriptor) => descriptor.categoryKey).filter((key) => key !== void 0));
|
|
164
|
+
if (keys.size === 0) return NO_SELECTED_INDICES;
|
|
124
165
|
const indices = /* @__PURE__ */ new Set();
|
|
125
166
|
categoryKeys.forEach((key, index) => {
|
|
126
|
-
if (
|
|
167
|
+
if (keys.has(key)) indices.add(index);
|
|
127
168
|
});
|
|
128
169
|
return indices;
|
|
129
170
|
}, [
|
|
@@ -133,42 +174,71 @@ function useChartInteraction({ categoryCount, seriesKeys, categoryKeys, enableGr
|
|
|
133
174
|
]);
|
|
134
175
|
const getMarkState = useCallback(({ categoryIndex, seriesKey }) => {
|
|
135
176
|
if (isLoading) return ChartMarkState.MUTED;
|
|
177
|
+
if (seriesKey !== void 0 && safeHoveredSeries !== null) return seriesKey === safeHoveredSeries ? ChartMarkState.ACTIVE : ChartMarkState.MUTED;
|
|
136
178
|
if (!matchesSelection({
|
|
137
179
|
categoryIndex,
|
|
138
180
|
seriesKey
|
|
139
181
|
})) return ChartMarkState.MUTED;
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
if (categoryMuted) return categoryMuteState;
|
|
143
|
-
return ChartMarkState.ACTIVE;
|
|
182
|
+
if (hasSelection) return ChartMarkState.ACTIVE;
|
|
183
|
+
return categoryIndex !== void 0 && activeIndex !== null && categoryIndex !== activeIndex ? categoryMuteState : ChartMarkState.ACTIVE;
|
|
144
184
|
}, [
|
|
145
185
|
isLoading,
|
|
146
186
|
matchesSelection,
|
|
147
|
-
effectiveIndex,
|
|
148
187
|
safeHoveredSeries,
|
|
188
|
+
hasSelection,
|
|
189
|
+
activeIndex,
|
|
149
190
|
categoryMuteState
|
|
150
191
|
]);
|
|
192
|
+
const getSeriesState = useCallback((seriesKey) => {
|
|
193
|
+
if (safeHoveredSeries !== null) return seriesKey === safeHoveredSeries ? ChartMarkState.ACTIVE : ChartMarkState.MUTED;
|
|
194
|
+
return matchesSelection({ seriesKey }) ? ChartMarkState.ACTIVE : ChartMarkState.MUTED;
|
|
195
|
+
}, [safeHoveredSeries, matchesSelection]);
|
|
196
|
+
const isSeriesPinned = useCallback((seriesKey) => isFilterable && selectionList.some((item) => isSameSelection(item, { seriesKey })), [isFilterable, selectionList]);
|
|
151
197
|
return useMemo(() => ({
|
|
152
|
-
activeIndex
|
|
198
|
+
activeIndex,
|
|
153
199
|
showTooltip,
|
|
154
200
|
hoveredSeriesKey: safeHoveredSeries,
|
|
155
201
|
selectedCategoryIndices,
|
|
202
|
+
isFilterable,
|
|
203
|
+
hasSelection,
|
|
204
|
+
selection: selectionList,
|
|
205
|
+
toggleSelection: toggleSelection$1,
|
|
206
|
+
setSelection,
|
|
207
|
+
clearSelection,
|
|
208
|
+
getSeriesState,
|
|
209
|
+
isSeriesPinned,
|
|
156
210
|
getMarkState,
|
|
157
211
|
onCategoryEnter,
|
|
158
212
|
onCategoryLeave,
|
|
159
213
|
onSeriesEnter,
|
|
160
|
-
onSeriesLeave
|
|
214
|
+
onSeriesLeave,
|
|
215
|
+
onKeyboardFocus,
|
|
216
|
+
onKeyboardMove,
|
|
217
|
+
onKeyboardClear,
|
|
218
|
+
onKeyboardBlur
|
|
161
219
|
}), [
|
|
162
|
-
|
|
220
|
+
activeIndex,
|
|
163
221
|
showTooltip,
|
|
164
222
|
safeHoveredSeries,
|
|
165
223
|
selectedCategoryIndices,
|
|
224
|
+
isFilterable,
|
|
225
|
+
hasSelection,
|
|
226
|
+
selectionList,
|
|
227
|
+
toggleSelection$1,
|
|
228
|
+
setSelection,
|
|
229
|
+
clearSelection,
|
|
230
|
+
getSeriesState,
|
|
231
|
+
isSeriesPinned,
|
|
166
232
|
getMarkState,
|
|
167
233
|
onCategoryEnter,
|
|
168
234
|
onCategoryLeave,
|
|
169
235
|
onSeriesEnter,
|
|
170
|
-
onSeriesLeave
|
|
236
|
+
onSeriesLeave,
|
|
237
|
+
onKeyboardFocus,
|
|
238
|
+
onKeyboardMove,
|
|
239
|
+
onKeyboardClear,
|
|
240
|
+
onKeyboardBlur
|
|
171
241
|
]);
|
|
172
242
|
}
|
|
173
243
|
//#endregion
|
|
174
|
-
export { useChartInteraction };
|
|
244
|
+
export { getNextCategoryIndex, useChartInteraction };
|
|
@@ -1,53 +1,43 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* tooltip's own size measured against a percentage of the container's, and
|
|
6
|
-
* `min()`/`max()` cannot resolve two different percentage bases in one
|
|
7
|
-
* expression. Any CSS-only attempt works until the first long label.
|
|
2
|
+
* @internal Chart tooltip placement with edge collision handling (1.x logic): beside the anchor,
|
|
3
|
+
* flipped away from it, clamped inside the plot box. Computed in JS because clamping needs the
|
|
4
|
+
* tooltip's own measured size against the box's.
|
|
8
5
|
*/
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
import { type RefObject } from "react";
|
|
7
|
+
/** @internal Vertical placement of the tooltip relative to its anchor. */
|
|
8
|
+
export declare enum ChartTooltipVerticalAlign {
|
|
9
|
+
/** The anchor marks the top of something (the highest point in a column). */
|
|
10
|
+
ABOVE = "ABOVE",
|
|
11
|
+
/** The anchor marks a position (a point on an arc). */
|
|
12
|
+
CENTERED = "CENTERED"
|
|
13
|
+
}
|
|
14
|
+
/** @internal Inputs of `useChartTooltipPosition`. */
|
|
15
|
+
export interface UseChartTooltipPositionOptions {
|
|
16
|
+
/** Anchor x in plot-box coordinates. */
|
|
11
17
|
anchorX: number;
|
|
18
|
+
/** Anchor y in plot-box coordinates. */
|
|
12
19
|
anchorY: number;
|
|
13
|
-
/**
|
|
20
|
+
/** Plot box width. */
|
|
14
21
|
containerWidth: number;
|
|
22
|
+
/** Plot box height. */
|
|
15
23
|
containerHeight: number;
|
|
16
|
-
/** Half
|
|
17
|
-
anchorHalfWidth?: number;
|
|
18
|
-
/**
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
* Radial charts need this. Their anchor already sits on the arc's outer edge,
|
|
23
|
-
* so "which half of the container am I in" points the tooltip back over the
|
|
24
|
-
* middle of the chart — across the very slices it describes, and across any
|
|
25
|
-
* donut-hole content. Passing the centre pushes it outward instead.
|
|
26
|
-
*/
|
|
27
|
-
placeAwayFromX?: number;
|
|
28
|
-
/**
|
|
29
|
-
* Where the tooltip sits vertically relative to its anchor.
|
|
30
|
-
*
|
|
31
|
-
* `ABOVE` suits an anchor that marks the top of something (a bar, the highest
|
|
32
|
-
* point in a column). `CENTERED` suits an anchor that marks a position rather
|
|
33
|
-
* than a top, such as a point on an arc.
|
|
34
|
-
*/
|
|
35
|
-
verticalAlign?: ChartTooltipVerticalAlign;
|
|
36
|
-
}
|
|
37
|
-
export declare enum ChartTooltipVerticalAlign {
|
|
38
|
-
ABOVE = "ABOVE",
|
|
39
|
-
CENTERED = "CENTERED"
|
|
24
|
+
/** Half the anchored category's width, so the tooltip sits beside it. */
|
|
25
|
+
anchorHalfWidth?: number | undefined;
|
|
26
|
+
/** An x to move away from instead of the box's midline (radial charts pass their center). */
|
|
27
|
+
placeAwayFromX?: number | undefined;
|
|
28
|
+
/** @default ChartTooltipVerticalAlign.ABOVE */
|
|
29
|
+
verticalAlign?: ChartTooltipVerticalAlign | undefined;
|
|
40
30
|
}
|
|
31
|
+
/** @internal The tooltip's measured position. */
|
|
41
32
|
export interface ChartTooltipPosition {
|
|
42
33
|
/** Attach to the tooltip element so it can be measured. */
|
|
43
|
-
tooltipRef:
|
|
34
|
+
tooltipRef: RefObject<HTMLDivElement>;
|
|
35
|
+
/** Left edge in plot-box coordinates. */
|
|
44
36
|
x: number;
|
|
37
|
+
/** Top edge in plot-box coordinates. */
|
|
45
38
|
y: number;
|
|
46
|
-
/**
|
|
47
|
-
* False for the first frame after the content changes, while the measured
|
|
48
|
-
* size is still stale. Gating visibility on it hides the reflow.
|
|
49
|
-
*/
|
|
39
|
+
/** `false` until the tooltip has been measured once. */
|
|
50
40
|
isMeasured: boolean;
|
|
51
41
|
}
|
|
42
|
+
/** @internal Positions the chart tooltip. */
|
|
52
43
|
export declare function useChartTooltipPosition({ anchorX, anchorY, containerWidth, containerHeight, anchorHalfWidth, placeAwayFromX, verticalAlign, }: UseChartTooltipPositionOptions): ChartTooltipPosition;
|
|
53
|
-
export {};
|