@galaxy-io/dls 1.6.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +136 -116
- 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 +32 -20
- package/dist/charts/ChartFrame.d.ts +69 -116
- package/dist/charts/ChartFrame.js +253 -119
- package/dist/charts/ChartGroupProvider.d.ts +30 -41
- package/dist/charts/ChartGroupProvider.js +20 -7
- package/dist/charts/ChartLegend.d.ts +27 -48
- package/dist/charts/ChartLegend.js +206 -125
- package/dist/charts/ChartMarkTargets.d.ts +12 -28
- package/dist/charts/ChartMarkTargets.js +33 -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 +295 -0
- package/dist/charts/LineChart.d.ts +54 -47
- package/dist/charts/LineChart.js +159 -117
- package/dist/charts/PieChart.d.ts +32 -53
- package/dist/charts/PieChart.js +149 -135
- 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/constants.d.ts +96 -256
- package/dist/charts/constants.js +105 -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 +197 -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 +47 -116
- package/dist/charts/useChartInteraction.js +95 -71
- 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 +81 -17
- package/dist/drawer/Drawer.js +370 -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 +292 -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 +1077 -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 +99 -0
- package/dist/timeline/Timeline.js +269 -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 +851 -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 -27
- package/dist/inputs/SwitcherInput.js +0 -64
- 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,66 @@
|
|
|
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 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
|
-
* which is why selection needs no visual vocabulary of its own.
|
|
57
|
-
*
|
|
58
|
-
* Presentational and strictly read-only: this hook never writes it. The state
|
|
59
|
-
* lives with whatever the selection is filtering, so the chart and that thing
|
|
60
|
-
* cannot drift apart, and the DLS never has to pick toggle or multi-select
|
|
61
|
-
* semantics.
|
|
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. */
|
|
13
|
+
selection?: ChartSelectionInput | undefined;
|
|
14
|
+
/** How off-category marks recede. @default ChartMarkState.MUTED */
|
|
75
15
|
categoryMuteState?: ChartMarkState;
|
|
76
|
-
/**
|
|
16
|
+
/** No category interaction (static plot, loading, empty). The legend stays live. */
|
|
77
17
|
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
|
-
*/
|
|
18
|
+
/** Every mark is muted and following pauses. */
|
|
87
19
|
isLoading?: boolean;
|
|
20
|
+
/** Cells laid out in rows of `columns` (Heatmap): Up / Down move by a row, Home / End stay in the row. */
|
|
21
|
+
grid?: {
|
|
22
|
+
columns: number;
|
|
23
|
+
};
|
|
88
24
|
}
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
25
|
+
/** @internal Which marks a mark-state query is about. */
|
|
26
|
+
export interface ChartMarkStateArgs {
|
|
27
|
+
/** Omit for marks that belong to no category (a line). */
|
|
28
|
+
categoryIndex?: number | undefined;
|
|
29
|
+
/** Omit for marks that belong to no series. */
|
|
30
|
+
seriesKey?: string | undefined;
|
|
94
31
|
}
|
|
32
|
+
/** @internal What `useChartInteraction` returns. */
|
|
95
33
|
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
|
-
*/
|
|
34
|
+
/** The engaged category: this chart's own (pointer or keyboard), else the one a sibling follows. */
|
|
100
35
|
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
|
-
*/
|
|
36
|
+
/** True when this chart shows its tooltip for `activeIndex`. */
|
|
106
37
|
showTooltip: boolean;
|
|
38
|
+
/** The legend key being hovered. */
|
|
107
39
|
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
|
-
*/
|
|
40
|
+
/** Categories the selection names outright (persistent cursors). */
|
|
116
41
|
selectedCategoryIndices: ReadonlySet<number>;
|
|
117
|
-
/**
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
* The grammar is inherited from the reference and is the opposite of the
|
|
121
|
-
* obvious one: engaging something does not brighten it, it softens everything
|
|
122
|
-
* else.
|
|
123
|
-
*
|
|
124
|
-
* A mark has to survive *both* filters to stay active — the two axes
|
|
125
|
-
* intersect rather than override, so hovering a legend entry and a category
|
|
126
|
-
* at once leaves only their overlap lit.
|
|
127
|
-
*/
|
|
128
|
-
getMarkState: (args: MarkStateArgs) => ChartMarkState;
|
|
42
|
+
/** Emphasis of one mark, composed from selection, series and category. */
|
|
43
|
+
getMarkState: (args: ChartMarkStateArgs) => ChartMarkState;
|
|
44
|
+
/** Pointer entered a category's target. */
|
|
129
45
|
onCategoryEnter: (categoryIndex: number) => void;
|
|
46
|
+
/** Pointer left the plot. */
|
|
130
47
|
onCategoryLeave: () => void;
|
|
48
|
+
/** Pointer entered a legend entry. */
|
|
131
49
|
onSeriesEnter: (seriesKey: string) => void;
|
|
50
|
+
/** Pointer left a legend entry. */
|
|
132
51
|
onSeriesLeave: () => void;
|
|
52
|
+
/** Keyboard focus reached the plot: engage the last category, or the first. Returns it. */
|
|
53
|
+
onKeyboardFocus: () => number | null;
|
|
54
|
+
/** A navigation key; returns the newly engaged index, or `null` if the key does not navigate. */
|
|
55
|
+
onKeyboardMove: (key: string) => number | null;
|
|
56
|
+
/** Escape: clear the engaged category (focus stays). */
|
|
57
|
+
onKeyboardClear: () => void;
|
|
58
|
+
/** Focus left the plot. */
|
|
59
|
+
onKeyboardBlur: () => void;
|
|
133
60
|
}
|
|
134
|
-
|
|
135
|
-
export {
|
|
61
|
+
/** @internal The next index for a navigation key, stopping at the ends (no wrap). */
|
|
62
|
+
export declare function getNextCategoryIndex(current: number, key: string, count: number, grid?: {
|
|
63
|
+
columns: number;
|
|
64
|
+
}): number | null;
|
|
65
|
+
/** @internal Shared interaction model; see the module comment. */
|
|
66
|
+
export declare function useChartInteraction({ categoryCount, seriesKeys, categoryKeys, enableGroupSync, selection, categoryMuteState, isDisabled, isLoading, grid, }: UseChartInteractionOptions): ChartInteraction;
|
|
@@ -1,32 +1,58 @@
|
|
|
1
1
|
import { ChartMarkState } from "./types.js";
|
|
2
2
|
import { ChartGroupContext } from "./ChartGroupProvider.js";
|
|
3
|
-
import { useCallback, useContext, useEffect, useId, useMemo, useState } from "react";
|
|
3
|
+
import { useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from "react";
|
|
4
4
|
//#region src/charts/useChartInteraction.ts
|
|
5
|
-
/**
|
|
5
|
+
/**
|
|
6
|
+
* @internal Hover, keyboard, selection and group sync for every chart.
|
|
7
|
+
*
|
|
8
|
+
* Two local axes:
|
|
9
|
+
* - **Category**: an index along the plot, engaged by pointer hover or by the keyboard (the plot
|
|
10
|
+
* box is one tab stop; arrows move, Home / End jump, Escape clears). Engaging previews it: the
|
|
11
|
+
* tooltip opens and the rest recedes.
|
|
12
|
+
* - **Series**: a legend key, engaged by hovering a legend entry. Isolates that series.
|
|
13
|
+
*
|
|
14
|
+
* Plus a read-only source: inside a `ChartGroupProvider`, a chart that passes `categoryKeys`
|
|
15
|
+
* follows the category a sibling engages (matched by raw label). Following emphasizes; it opens
|
|
16
|
+
* the tooltip only when the provider shares tooltips. Series hover never syncs.
|
|
17
|
+
*
|
|
18
|
+
* And **selection**, supplied by the caller and never written here: it outranks hover. Clicks do
|
|
19
|
+
* not pin anything; they only report (the 1.x rationale).
|
|
20
|
+
*/
|
|
6
21
|
var NO_SELECTION = [];
|
|
7
22
|
var NO_SELECTED_INDICES = /* @__PURE__ */ new Set();
|
|
8
|
-
|
|
9
|
-
|
|
23
|
+
/** @internal The next index for a navigation key, stopping at the ends (no wrap). */
|
|
24
|
+
function getNextCategoryIndex(current, key, count, grid) {
|
|
25
|
+
if (count <= 0) return null;
|
|
26
|
+
const columns = grid ? Math.max(1, grid.columns) : count;
|
|
27
|
+
const rowStart = grid ? current - current % columns : 0;
|
|
28
|
+
const rowEnd = grid ? Math.min(count - 1, rowStart + columns - 1) : count - 1;
|
|
29
|
+
switch (key) {
|
|
30
|
+
case "ArrowRight": return Math.min(current + 1, rowEnd);
|
|
31
|
+
case "ArrowLeft": return Math.max(current - 1, rowStart);
|
|
32
|
+
case "Home": return rowStart;
|
|
33
|
+
case "End": return rowEnd;
|
|
34
|
+
case "ArrowDown": return grid && current + columns < count ? current + columns : grid ? current : null;
|
|
35
|
+
case "ArrowUp": return grid && current - columns >= 0 ? current - columns : grid ? current : null;
|
|
36
|
+
default: return null;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/** @internal Shared interaction model; see the module comment. */
|
|
40
|
+
function useChartInteraction({ categoryCount, seriesKeys, categoryKeys, enableGroupSync = true, selection, categoryMuteState = ChartMarkState.MUTED, isDisabled = false, isLoading = false, grid }) {
|
|
41
|
+
const [pointerIndex, setPointerIndex] = useState(null);
|
|
42
|
+
const [keyboardIndex, setKeyboardIndex] = useState(null);
|
|
10
43
|
const [hoveredSeriesKey, setHoveredSeriesKey] = useState(null);
|
|
44
|
+
/** The last engaged category, where keyboard focus resumes. */
|
|
45
|
+
const lastIndexRef = useRef(null);
|
|
11
46
|
const sync = useContext(ChartGroupContext);
|
|
12
47
|
const syncId = useId();
|
|
13
48
|
const canSync = sync !== null && categoryKeys !== void 0 && enableGroupSync;
|
|
14
49
|
const setActive = sync?.setActive;
|
|
15
50
|
const clearActive = sync?.clearActive;
|
|
16
|
-
const
|
|
51
|
+
const inRange = (index) => index !== null && index < categoryCount && !isDisabled ? index : null;
|
|
52
|
+
const localIndex = inRange(pointerIndex) ?? inRange(keyboardIndex);
|
|
53
|
+
if (localIndex !== null) lastIndexRef.current = localIndex;
|
|
17
54
|
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;
|
|
55
|
+
const localKey = canSync && localIndex !== null ? categoryKeys[localIndex] ?? null : null;
|
|
30
56
|
useEffect(() => {
|
|
31
57
|
if (!setActive || !clearActive) return;
|
|
32
58
|
if (localKey !== null) setActive({
|
|
@@ -41,16 +67,8 @@ function useChartInteraction({ categoryCount, seriesKeys, categoryKeys, enableGr
|
|
|
41
67
|
localKey
|
|
42
68
|
]);
|
|
43
69
|
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
70
|
const followedIndex = useMemo(() => {
|
|
53
|
-
if (!canSync || isLoading) return null;
|
|
71
|
+
if (!canSync || isLoading || isDisabled) return null;
|
|
54
72
|
const entry = sync.activeEntry;
|
|
55
73
|
if (entry === null || entry.sourceId === syncId) return null;
|
|
56
74
|
const index = categoryKeys.indexOf(entry.categoryKey);
|
|
@@ -58,43 +76,53 @@ function useChartInteraction({ categoryCount, seriesKeys, categoryKeys, enableGr
|
|
|
58
76
|
}, [
|
|
59
77
|
canSync,
|
|
60
78
|
isLoading,
|
|
79
|
+
isDisabled,
|
|
61
80
|
sync?.activeEntry,
|
|
62
81
|
syncId,
|
|
63
82
|
categoryKeys
|
|
64
83
|
]);
|
|
65
|
-
const
|
|
66
|
-
const showTooltip =
|
|
84
|
+
const activeIndex = localIndex ?? followedIndex;
|
|
85
|
+
const showTooltip = localIndex !== null || followedIndex !== null && (sync?.shouldShareTooltip ?? false);
|
|
67
86
|
const onCategoryEnter = useCallback((categoryIndex) => {
|
|
68
87
|
if (isDisabled) return;
|
|
69
|
-
|
|
70
|
-
}, [isDisabled]);
|
|
71
|
-
const onCategoryLeave = useCallback(() => {
|
|
72
|
-
if (isDisabled) return;
|
|
73
|
-
setHoveredIndex(null);
|
|
88
|
+
setPointerIndex(categoryIndex);
|
|
74
89
|
}, [isDisabled]);
|
|
75
|
-
const
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
const
|
|
79
|
-
|
|
90
|
+
const onCategoryLeave = useCallback(() => setPointerIndex(null), []);
|
|
91
|
+
const onSeriesEnter = useCallback((seriesKey) => setHoveredSeriesKey(seriesKey), []);
|
|
92
|
+
const onSeriesLeave = useCallback(() => setHoveredSeriesKey(null), []);
|
|
93
|
+
const onKeyboardFocus = useCallback(() => {
|
|
94
|
+
if (isDisabled || categoryCount === 0) return null;
|
|
95
|
+
const last = lastIndexRef.current;
|
|
96
|
+
const index = last !== null && last < categoryCount ? last : 0;
|
|
97
|
+
setKeyboardIndex(index);
|
|
98
|
+
return index;
|
|
99
|
+
}, [isDisabled, categoryCount]);
|
|
100
|
+
const onKeyboardMove = useCallback((key) => {
|
|
101
|
+
if (isDisabled || categoryCount === 0) return null;
|
|
102
|
+
const current = localIndex ?? lastIndexRef.current;
|
|
103
|
+
const next = current === null || current >= categoryCount ? getNextCategoryIndex(0, key, categoryCount, grid) === null ? null : 0 : getNextCategoryIndex(current, key, categoryCount, grid);
|
|
104
|
+
if (next === null) return null;
|
|
105
|
+
setPointerIndex(null);
|
|
106
|
+
setKeyboardIndex(next);
|
|
107
|
+
return next;
|
|
108
|
+
}, [
|
|
109
|
+
isDisabled,
|
|
110
|
+
categoryCount,
|
|
111
|
+
localIndex,
|
|
112
|
+
grid
|
|
113
|
+
]);
|
|
114
|
+
const onKeyboardClear = useCallback(() => {
|
|
115
|
+
setPointerIndex(null);
|
|
116
|
+
setKeyboardIndex(null);
|
|
80
117
|
}, []);
|
|
118
|
+
const onKeyboardBlur = useCallback(() => setKeyboardIndex(null), []);
|
|
81
119
|
const selectionList = useMemo(() => {
|
|
82
120
|
if (selection === void 0 || selection === null) return NO_SELECTION;
|
|
83
121
|
if (!Array.isArray(selection)) return [selection];
|
|
84
122
|
return selection.length === 0 ? NO_SELECTION : selection;
|
|
85
123
|
}, [selection]);
|
|
86
124
|
const hasSelection = selectionList.length > 0;
|
|
87
|
-
/**
|
|
88
|
-
* Whether one mark falls inside the selection.
|
|
89
|
-
*
|
|
90
|
-
* A descriptor is a conjunction of the fields it *carries*: an absent field
|
|
91
|
-
* constrains nothing, and a field the mark itself has no notion of cannot
|
|
92
|
-
* exclude it. The second half is what keeps `{ categoryKey: "00:00" }` from
|
|
93
|
-
* muting every LineChart stroke — a stroke spans all the categories and is
|
|
94
|
-
* asked about none — while still muting the bars outside that column.
|
|
95
|
-
*
|
|
96
|
-
* Several descriptors union: a mark inside any of them is selected.
|
|
97
|
-
*/
|
|
125
|
+
/** A descriptor is a conjunction of the fields it carries; a field the mark lacks never excludes it. */
|
|
98
126
|
const matchesSelection = useCallback(({ categoryIndex, seriesKey }) => {
|
|
99
127
|
if (!hasSelection) return true;
|
|
100
128
|
return selectionList.some((descriptor) => {
|
|
@@ -107,23 +135,13 @@ function useChartInteraction({ categoryCount, seriesKeys, categoryKeys, enableGr
|
|
|
107
135
|
selectionList,
|
|
108
136
|
categoryKeys
|
|
109
137
|
]);
|
|
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
138
|
const selectedCategoryIndices = useMemo(() => {
|
|
121
139
|
if (!hasSelection || categoryKeys === void 0) return NO_SELECTED_INDICES;
|
|
122
|
-
const
|
|
123
|
-
if (
|
|
140
|
+
const keys = new Set(selectionList.map((descriptor) => descriptor.categoryKey).filter((key) => key !== void 0));
|
|
141
|
+
if (keys.size === 0) return NO_SELECTED_INDICES;
|
|
124
142
|
const indices = /* @__PURE__ */ new Set();
|
|
125
143
|
categoryKeys.forEach((key, index) => {
|
|
126
|
-
if (
|
|
144
|
+
if (keys.has(key)) indices.add(index);
|
|
127
145
|
});
|
|
128
146
|
return indices;
|
|
129
147
|
}, [
|
|
@@ -137,19 +155,17 @@ function useChartInteraction({ categoryCount, seriesKeys, categoryKeys, enableGr
|
|
|
137
155
|
categoryIndex,
|
|
138
156
|
seriesKey
|
|
139
157
|
})) return ChartMarkState.MUTED;
|
|
140
|
-
const categoryMuted = categoryIndex !== void 0 && effectiveIndex !== null && categoryIndex !== effectiveIndex;
|
|
141
158
|
if (seriesKey !== void 0 && safeHoveredSeries !== null && seriesKey !== safeHoveredSeries) return ChartMarkState.MUTED;
|
|
142
|
-
|
|
143
|
-
return ChartMarkState.ACTIVE;
|
|
159
|
+
return categoryIndex !== void 0 && activeIndex !== null && categoryIndex !== activeIndex ? categoryMuteState : ChartMarkState.ACTIVE;
|
|
144
160
|
}, [
|
|
145
161
|
isLoading,
|
|
146
162
|
matchesSelection,
|
|
147
|
-
effectiveIndex,
|
|
148
163
|
safeHoveredSeries,
|
|
164
|
+
activeIndex,
|
|
149
165
|
categoryMuteState
|
|
150
166
|
]);
|
|
151
167
|
return useMemo(() => ({
|
|
152
|
-
activeIndex
|
|
168
|
+
activeIndex,
|
|
153
169
|
showTooltip,
|
|
154
170
|
hoveredSeriesKey: safeHoveredSeries,
|
|
155
171
|
selectedCategoryIndices,
|
|
@@ -157,9 +173,13 @@ function useChartInteraction({ categoryCount, seriesKeys, categoryKeys, enableGr
|
|
|
157
173
|
onCategoryEnter,
|
|
158
174
|
onCategoryLeave,
|
|
159
175
|
onSeriesEnter,
|
|
160
|
-
onSeriesLeave
|
|
176
|
+
onSeriesLeave,
|
|
177
|
+
onKeyboardFocus,
|
|
178
|
+
onKeyboardMove,
|
|
179
|
+
onKeyboardClear,
|
|
180
|
+
onKeyboardBlur
|
|
161
181
|
}), [
|
|
162
|
-
|
|
182
|
+
activeIndex,
|
|
163
183
|
showTooltip,
|
|
164
184
|
safeHoveredSeries,
|
|
165
185
|
selectedCategoryIndices,
|
|
@@ -167,8 +187,12 @@ function useChartInteraction({ categoryCount, seriesKeys, categoryKeys, enableGr
|
|
|
167
187
|
onCategoryEnter,
|
|
168
188
|
onCategoryLeave,
|
|
169
189
|
onSeriesEnter,
|
|
170
|
-
onSeriesLeave
|
|
190
|
+
onSeriesLeave,
|
|
191
|
+
onKeyboardFocus,
|
|
192
|
+
onKeyboardMove,
|
|
193
|
+
onKeyboardClear,
|
|
194
|
+
onKeyboardBlur
|
|
171
195
|
]);
|
|
172
196
|
}
|
|
173
197
|
//#endregion
|
|
174
|
-
export { useChartInteraction };
|
|
198
|
+
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 {};
|
|
@@ -1,13 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "./constants.js";
|
|
1
|
+
import { CHART_TOOLTIP_OFFSET } from "./constants.js";
|
|
3
2
|
import { clamp } from "./chartScales.js";
|
|
3
|
+
import { useElementClientSize } from "../hooks/useElementClientSize.js";
|
|
4
4
|
import { useMemo, useRef } from "react";
|
|
5
5
|
//#region src/charts/useChartTooltipPosition.ts
|
|
6
|
+
/**
|
|
7
|
+
* @internal Chart tooltip placement with edge collision handling (1.x logic): beside the anchor,
|
|
8
|
+
* flipped away from it, clamped inside the plot box. Computed in JS because clamping needs the
|
|
9
|
+
* tooltip's own measured size against the box's.
|
|
10
|
+
*/
|
|
11
|
+
/** @internal Vertical placement of the tooltip relative to its anchor. */
|
|
6
12
|
var ChartTooltipVerticalAlign = /* @__PURE__ */ function(ChartTooltipVerticalAlign) {
|
|
13
|
+
/** The anchor marks the top of something (the highest point in a column). */
|
|
7
14
|
ChartTooltipVerticalAlign["ABOVE"] = "ABOVE";
|
|
15
|
+
/** The anchor marks a position (a point on an arc). */
|
|
8
16
|
ChartTooltipVerticalAlign["CENTERED"] = "CENTERED";
|
|
9
17
|
return ChartTooltipVerticalAlign;
|
|
10
18
|
}({});
|
|
19
|
+
/** @internal Positions the chart tooltip. */
|
|
11
20
|
function useChartTooltipPosition({ anchorX, anchorY, containerWidth, containerHeight, anchorHalfWidth = 0, placeAwayFromX, verticalAlign = "ABOVE" }) {
|
|
12
21
|
const tooltipRef = useRef(null);
|
|
13
22
|
const { width: tooltipWidth, height: tooltipHeight } = useElementClientSize(tooltipRef);
|
|
@@ -15,12 +24,12 @@ function useChartTooltipPosition({ anchorX, anchorY, containerWidth, containerHe
|
|
|
15
24
|
const isMeasured = tooltipWidth !== void 0 && tooltipHeight !== void 0;
|
|
16
25
|
const w = tooltipWidth ?? 0;
|
|
17
26
|
const h = tooltipHeight ?? 0;
|
|
18
|
-
const rawX = (placeAwayFromX !== void 0 ? anchorX < placeAwayFromX : anchorX > containerWidth / 2) ? anchorX - anchorHalfWidth -
|
|
27
|
+
const rawX = (placeAwayFromX !== void 0 ? anchorX < placeAwayFromX : anchorX > containerWidth / 2) ? anchorX - anchorHalfWidth - CHART_TOOLTIP_OFFSET - w : anchorX + anchorHalfWidth + CHART_TOOLTIP_OFFSET;
|
|
19
28
|
const rawY = verticalAlign === "CENTERED" ? anchorY - h / 2 : Math.min(anchorY, containerHeight / 2);
|
|
20
29
|
return {
|
|
21
30
|
tooltipRef,
|
|
22
|
-
x: clamp(rawX, 0, Math.max(0, containerWidth - w)),
|
|
23
|
-
y: clamp(rawY, 0, Math.max(0, containerHeight - h)),
|
|
31
|
+
x: Math.round(clamp(rawX, 0, Math.max(0, containerWidth - w))),
|
|
32
|
+
y: Math.round(clamp(rawY, 0, Math.max(0, containerHeight - h))),
|
|
24
33
|
isMeasured
|
|
25
34
|
};
|
|
26
35
|
}, [
|
|
@@ -1,37 +1,15 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*
|
|
5
|
-
* Every chart resolved colour the same way — look the key up in the `series`
|
|
6
|
-
* record, take its slot, fall back to the palette — but each spelled it
|
|
7
|
-
* differently and each rebuilt the key list itself. Doing it once here is what
|
|
8
|
-
* makes "adding a series never recolours the existing ones" a property of the
|
|
9
|
-
* design rather than of three separate call sites remembering to use
|
|
10
|
-
* `indexOf` instead of the loop counter.
|
|
11
|
-
*/
|
|
1
|
+
import { type ChartSeriesColor } from "./chartPalette.js";
|
|
2
|
+
import { ChartPalette, type ChartSeriesStyles } from "./types.js";
|
|
3
|
+
/** @internal What `useSeriesColorResolver` returns. */
|
|
12
4
|
export interface SeriesColorResolver<TKey extends string> {
|
|
13
|
-
/**
|
|
14
|
-
* Series keys in `series` record order.
|
|
15
|
-
*
|
|
16
|
-
* Insertion order is what makes a key's palette slot stable regardless of
|
|
17
|
-
* which data happens to contain it, so this is never sorted.
|
|
18
|
-
*/
|
|
5
|
+
/** Series keys in `series` record order (never sorted: the order is what keeps slots stable). */
|
|
19
6
|
keys: TKey[];
|
|
20
|
-
/**
|
|
21
|
-
resolve: (key: TKey
|
|
22
|
-
/**
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
* own, so they take the ramp by position rather than by key.
|
|
27
|
-
*/
|
|
28
|
-
resolveByIndex: (index: number, explicit?: ChartPalette) => string;
|
|
29
|
-
/**
|
|
30
|
-
* Neutral, for a mark that names no series at all.
|
|
31
|
-
*
|
|
32
|
-
* The pie's folded bucket is not one of the slices, so borrowing a hue would
|
|
33
|
-
* imply it is.
|
|
34
|
-
*/
|
|
35
|
-
neutral: string;
|
|
7
|
+
/** Color of a series: its `hex`, its `color` slot, or its position in the automatic order. */
|
|
8
|
+
resolve: (key: TKey) => ChartSeriesColor;
|
|
9
|
+
/** Color by position, for marks that are not series (a stack's components). */
|
|
10
|
+
resolveByIndex: (index: number, explicit?: ChartPalette) => ChartSeriesColor;
|
|
11
|
+
/** Neutral, for a mark that names no series. */
|
|
12
|
+
neutral: ChartSeriesColor;
|
|
36
13
|
}
|
|
14
|
+
/** @internal Resolves series colors from the `series` record. */
|
|
37
15
|
export declare function useSeriesColorResolver<TKey extends string>(series: ChartSeriesStyles<TKey>): SeriesColorResolver<TKey>;
|