@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,129 +1,338 @@
|
|
|
1
|
+
import Skeleton, { SkeletonVariant } from "../feedback/Skeleton.js";
|
|
1
2
|
import { ChartKind, ChartLegendPlacement } from "./types.js";
|
|
2
|
-
import "./constants.js";
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import {
|
|
10
|
-
|
|
3
|
+
import { CHART_LEGEND_FILTER_EXTENT, CHART_LEGEND_SIDE_GAP } from "./constants.js";
|
|
4
|
+
import Chip, { ChipSize } from "../chips/Chip.js";
|
|
5
|
+
import EmptyState, { EmptyStateSize } from "../feedback/EmptyState.js";
|
|
6
|
+
import { isAdditiveEvent } from "./chartSelection.js";
|
|
7
|
+
import { ChartCategoryTargets } from "./ChartCategoryTargets.js";
|
|
8
|
+
import { ChartLegend } from "./ChartLegend.js";
|
|
9
|
+
import { ChartMarkTargets } from "./ChartMarkTargets.js";
|
|
10
|
+
import { ChartTooltip } from "./ChartTooltip.js";
|
|
11
|
+
/* empty css */
|
|
12
|
+
import { styled } from "@linaria/react";
|
|
13
|
+
import { useCallback, useMemo, useState } from "react";
|
|
11
14
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
15
|
+
import { cx } from "@linaria/core";
|
|
16
|
+
import { FunnelSimpleIcon } from "@phosphor-icons/react";
|
|
12
17
|
//#region src/charts/ChartFrame.tsx
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
18
|
+
/**
|
|
19
|
+
* @internal The shell every chart renders into: the root (sizing, legend placement, passthrough),
|
|
20
|
+
* the measured plot box (one tab stop when interactive), the SVG and its inset translate, axes,
|
|
21
|
+
* marks, hit targets, the in-chart tooltip, the empty and loading overlays, the live region and
|
|
22
|
+
* the legend. On a filterable chart dismissible filter chips follow the legend entries while
|
|
23
|
+
* something is pinned. One pin shows a chip per part ("06:00" and "Failed" for one segment): a
|
|
24
|
+
* chip's × drops that part and keeps the other. Several pins collapse into one "3 filters" chip
|
|
25
|
+
* (the list in its tooltip) whose × clears them all. It knows nothing about scales or geometry: axes and marks arrive as nodes, and every
|
|
26
|
+
* coordinate handed to it is in plot space (the frame adds the insets once).
|
|
27
|
+
*
|
|
28
|
+
* Sizing: the root fills its parent (`width` / `height: 100%`); against a parent of indefinite
|
|
29
|
+
* height the percentage computes to `auto` and `aspect-ratio: var(--gx-chart-aspect-ratio)`
|
|
30
|
+
* applies, so a chart never needs a size prop and never collapses to 0×0.
|
|
31
|
+
*/
|
|
32
|
+
var Root = /*#__PURE__*/ styled("div")({
|
|
33
|
+
name: "Root",
|
|
34
|
+
class: "gx-ChartFrame-rd05unv",
|
|
35
|
+
propsAsIs: false
|
|
36
|
+
});
|
|
37
|
+
/** @internal Legend placement → root layout. */
|
|
38
|
+
var CHART_LEGEND_PLACEMENT_TO_CSS_MAP = {
|
|
39
|
+
[ChartLegendPlacement.BOTTOM]: "gx-ChartFrame-ChartLegendPlacement_BOTTOM-c1m9ui7b",
|
|
40
|
+
[ChartLegendPlacement.RIGHT]: "gx-ChartFrame-ChartLegendPlacement_RIGHT-cq532vv"
|
|
41
|
+
};
|
|
42
|
+
/** The measured element; anchors the SVG, overlays and tooltip. */
|
|
43
|
+
var PlotBox = /*#__PURE__*/ styled("div")({
|
|
44
|
+
name: "PlotBox",
|
|
45
|
+
class: "gx-ChartFrame-PlotBox-pl7aabu",
|
|
46
|
+
propsAsIs: false
|
|
47
|
+
});
|
|
48
|
+
/** The plot box as one tab stop: the focus ring draws around the plot, not the whole chart. */
|
|
49
|
+
var PLOT_INTERACTIVE_CSS = "gx-ChartFrame-PLOT_INTERACTIVE_CSS-p27fgao";
|
|
50
|
+
var ChartSvg = /*#__PURE__*/ styled("svg")({
|
|
51
|
+
name: "ChartSvg",
|
|
52
|
+
class: "gx-ChartFrame-ChartSvg-c1n7y3iq",
|
|
53
|
+
propsAsIs: false
|
|
54
|
+
});
|
|
55
|
+
/** The empty-state overlay: over the plot box only, so the axes keep their size. */
|
|
56
|
+
var Overlay = /*#__PURE__*/ styled("div")({
|
|
57
|
+
name: "Overlay",
|
|
58
|
+
class: "gx-ChartFrame-Overlay-o1itt7vl",
|
|
59
|
+
propsAsIs: false
|
|
60
|
+
});
|
|
61
|
+
/** A standalone `Skeleton RECT` that takes the whole plot box. */
|
|
62
|
+
var LOADING_SKELETON_CSS = "gx-ChartFrame-LOADING_SKELETON_CSS-l1oi7u1q";
|
|
63
|
+
/**
|
|
64
|
+
* A chart's own legend (Heatmap's steps) with the filter chip after it. Both carry the legend's 8px
|
|
65
|
+
* top padding and center on each other, so the chip centers on the legend's text line.
|
|
66
|
+
*/
|
|
67
|
+
var CustomLegendBar = /*#__PURE__*/ styled("div")({
|
|
68
|
+
name: "CustomLegendBar",
|
|
69
|
+
class: "gx-ChartFrame-CustomLegendBar-c1jrxj0u",
|
|
70
|
+
propsAsIs: false
|
|
71
|
+
});
|
|
72
|
+
/**
|
|
73
|
+
* The chips after a chart's own legend. Its height (the 8px top padding and a 20px chip) is kept
|
|
74
|
+
* while nothing is pinned, so the plot above never moves when a chip appears.
|
|
75
|
+
*/
|
|
76
|
+
var CustomFilterSlot = /*#__PURE__*/ styled("div")({
|
|
77
|
+
name: "CustomFilterSlot",
|
|
78
|
+
class: "gx-ChartFrame-CustomFilterSlot-celuo85",
|
|
79
|
+
propsAsIs: false
|
|
80
|
+
});
|
|
81
|
+
var LiveRegion = /*#__PURE__*/ styled("div")({
|
|
82
|
+
name: "LiveRegion",
|
|
83
|
+
class: "gx-ChartFrame-LiveRegion-lvgwxyl",
|
|
84
|
+
propsAsIs: false
|
|
85
|
+
});
|
|
86
|
+
/** The default accessible name, phrased once so the charts cannot drift. */
|
|
87
|
+
function deriveAriaLabel(kind, categories, series) {
|
|
88
|
+
switch (kind) {
|
|
89
|
+
case ChartKind.LINE: return `Line chart, ${categories} categories, ${series} series`;
|
|
90
|
+
case ChartKind.AREA: return `Area chart, ${categories} categories, ${series} series`;
|
|
91
|
+
case ChartKind.BAR: return `Bar chart, ${categories} categories, ${series} series`;
|
|
92
|
+
case ChartKind.PIE: return `Pie chart, ${categories} slices`;
|
|
93
|
+
case ChartKind.HEATMAP: return `Heatmap, ${categories} cells`;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/** The live-region sentence for a category: "Q2. Revenue 1,200. Cost 800." */
|
|
97
|
+
function describeTooltip(model) {
|
|
98
|
+
if (model === null) return "";
|
|
99
|
+
if (model.rows.length === 0) return `${model.label}. No data.`;
|
|
100
|
+
const rows = model.rows.map((row) => `${row.label} ${row.value === null ? "no data" : row.formattedValue}.`);
|
|
101
|
+
return `${model.label}. ${rows.join(" ")}`;
|
|
102
|
+
}
|
|
103
|
+
var NAVIGATION_KEYS = new Set([
|
|
104
|
+
"ArrowRight",
|
|
105
|
+
"ArrowLeft",
|
|
106
|
+
"ArrowUp",
|
|
107
|
+
"ArrowDown",
|
|
108
|
+
"Home",
|
|
109
|
+
"End"
|
|
110
|
+
]);
|
|
111
|
+
/** @internal The chart shell. */
|
|
112
|
+
function ChartFrame({ rootRef, plotRef, id, className, style, rest, dimensions, interaction, kind, categoryCount, ariaLabel, aspectRatio, axes, children, plotOverlay, plotClassName, describeCategory, hasTooltip, buildCategoryTooltip, renderTooltip, categoryTargets, markTargets, targetsTransform, onCategorySelect, onMarkSelect, anchorHalfWidth, placeAwayFromX, verticalAlign, isEmpty, isLoading, placeholder, hasLegend, legendItems, legendPlacement, legendSwatch, tooltipSwatch, legend, formatCategoryKey }) {
|
|
113
|
+
const { width, height, insets, isMeasured } = dimensions;
|
|
114
|
+
const [announcement, setAnnouncement] = useState("");
|
|
115
|
+
const { rootPassthrough, plotAria } = useMemo(() => {
|
|
116
|
+
const root = {};
|
|
117
|
+
const aria = {};
|
|
118
|
+
for (const [key, value] of Object.entries(rest)) if (key.startsWith("aria-")) aria[key] = value;
|
|
119
|
+
else root[key] = value;
|
|
120
|
+
return {
|
|
121
|
+
rootPassthrough: root,
|
|
122
|
+
plotAria: aria
|
|
123
|
+
};
|
|
124
|
+
}, [rest]);
|
|
125
|
+
const { "aria-label": passedAriaLabel, ...plotAriaRest } = plotAria;
|
|
126
|
+
const resolvedAriaLabel = ariaLabel ?? (typeof passedAriaLabel === "string" ? passedAriaLabel : void 0) ?? deriveAriaLabel(kind, categoryCount, legendItems.length);
|
|
127
|
+
const isInteractive = (hasTooltip || onCategorySelect !== void 0) && !isLoading && !isEmpty;
|
|
27
128
|
const tooltipModel = useMemo(() => {
|
|
28
|
-
if (
|
|
129
|
+
if (!hasTooltip || isLoading || !interaction.showTooltip || interaction.activeIndex === null) return null;
|
|
29
130
|
const model = buildCategoryTooltip(interaction.activeIndex);
|
|
30
|
-
if (model === null) return null;
|
|
31
|
-
|
|
32
|
-
|
|
131
|
+
if (model === null || model.rows.length === 0 && renderTooltip !== void 0) return null;
|
|
132
|
+
return {
|
|
133
|
+
...model,
|
|
134
|
+
anchorX: model.anchorX + insets.left,
|
|
135
|
+
anchorY: model.anchorY + insets.top
|
|
136
|
+
};
|
|
33
137
|
}, [
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
interaction.activeIndex,
|
|
138
|
+
hasTooltip,
|
|
139
|
+
isLoading,
|
|
37
140
|
interaction.showTooltip,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
* Memoized for correctness, not arithmetic cost. `ChartTooltip` retains the
|
|
44
|
-
* last model by *identity* so it can keep its content while fading out, and
|
|
45
|
-
* adjusts that state during render when the identity changes. A fresh object
|
|
46
|
-
* on every parent render would therefore trigger an extra render pass on
|
|
47
|
-
* every render — including every pointer move — without ever looping or
|
|
48
|
-
* visibly breaking.
|
|
49
|
-
*/
|
|
50
|
-
const positionedTooltip = useMemo(() => tooltipModel === null ? null : {
|
|
51
|
-
...tooltipModel,
|
|
52
|
-
anchorX: tooltipModel.anchorX + margin.left,
|
|
53
|
-
anchorY: tooltipModel.anchorY + margin.top
|
|
54
|
-
}, [
|
|
55
|
-
tooltipModel,
|
|
56
|
-
margin.left,
|
|
57
|
-
margin.top
|
|
141
|
+
interaction.activeIndex,
|
|
142
|
+
buildCategoryTooltip,
|
|
143
|
+
renderTooltip,
|
|
144
|
+
insets.left,
|
|
145
|
+
insets.top
|
|
58
146
|
]);
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
147
|
+
const announce = useCallback((index) => {
|
|
148
|
+
if (index === null) setAnnouncement("");
|
|
149
|
+
else if (describeCategory) setAnnouncement(describeCategory(index));
|
|
150
|
+
else setAnnouncement(describeTooltip(buildCategoryTooltip(index)));
|
|
151
|
+
}, [buildCategoryTooltip, describeCategory]);
|
|
152
|
+
const handleKeyDown = (event) => {
|
|
153
|
+
if (event.target !== event.currentTarget) return;
|
|
154
|
+
if (NAVIGATION_KEYS.has(event.key)) {
|
|
155
|
+
const next = interaction.onKeyboardMove(event.key);
|
|
156
|
+
if (next === null) return;
|
|
157
|
+
event.preventDefault();
|
|
158
|
+
announce(next);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (event.key === "Enter" || event.key === " ") {
|
|
162
|
+
if (event.key === " ") event.preventDefault();
|
|
163
|
+
if (onCategorySelect && interaction.activeIndex !== null) {
|
|
164
|
+
event.preventDefault();
|
|
165
|
+
onCategorySelect(interaction.activeIndex, isAdditiveEvent(event));
|
|
166
|
+
}
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (event.key !== "Escape") return;
|
|
170
|
+
if (interaction.activeIndex !== null) {
|
|
171
|
+
event.preventDefault();
|
|
172
|
+
event.stopPropagation();
|
|
173
|
+
interaction.onKeyboardClear();
|
|
174
|
+
setAnnouncement("");
|
|
175
|
+
} else if (interaction.isFilterable && interaction.hasSelection) {
|
|
176
|
+
event.preventDefault();
|
|
177
|
+
event.stopPropagation();
|
|
178
|
+
interaction.clearSelection();
|
|
179
|
+
setAnnouncement("Filter cleared.");
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
const handleLegendClick = (seriesKey, isAdditive) => interaction.toggleSelection({ seriesKey }, isAdditive);
|
|
183
|
+
const handleFilterDismiss = (rest) => {
|
|
184
|
+
if (rest === null) interaction.clearSelection();
|
|
185
|
+
else interaction.setSelection([rest]);
|
|
186
|
+
if (isInteractive) plotRef.current?.focus();
|
|
187
|
+
};
|
|
188
|
+
const handleFocus = (event) => {
|
|
189
|
+
if (event.target !== event.currentTarget) return;
|
|
190
|
+
let isKeyboardFocus = true;
|
|
191
|
+
try {
|
|
192
|
+
isKeyboardFocus = event.currentTarget.matches(":focus-visible");
|
|
193
|
+
} catch {}
|
|
194
|
+
if (isKeyboardFocus) announce(interaction.onKeyboardFocus());
|
|
195
|
+
};
|
|
196
|
+
const handleBlur = (event) => {
|
|
197
|
+
if (event.target !== event.currentTarget) return;
|
|
198
|
+
interaction.onKeyboardBlur();
|
|
199
|
+
};
|
|
200
|
+
const plotA11yProps = isInteractive ? {
|
|
201
|
+
tabIndex: 0,
|
|
202
|
+
role: "group",
|
|
203
|
+
"aria-roledescription": "chart",
|
|
204
|
+
"aria-label": resolvedAriaLabel,
|
|
205
|
+
onKeyDown: handleKeyDown,
|
|
206
|
+
onFocus: handleFocus,
|
|
207
|
+
onBlur: handleBlur
|
|
208
|
+
} : {
|
|
209
|
+
role: "img",
|
|
210
|
+
"aria-label": resolvedAriaLabel
|
|
211
|
+
};
|
|
212
|
+
const isSkeleton = isLoading && isEmpty;
|
|
213
|
+
const isSideLegend = legendPlacement === ChartLegendPlacement.RIGHT;
|
|
214
|
+
const categoryLabel = (key) => formatCategoryKey?.(key) ?? key;
|
|
215
|
+
const seriesLabel = (key) => legendItems.find((item) => item.key === key)?.label ?? key;
|
|
216
|
+
const describePin = (pin) => [pin.categoryKey === void 0 ? void 0 : categoryLabel(pin.categoryKey), pin.seriesKey === void 0 ? void 0 : seriesLabel(pin.seriesKey)].filter((part) => part !== void 0).join(" · ");
|
|
217
|
+
/** One chip per part of a single pin; one "N filters" chip for several. */
|
|
218
|
+
const filterChipParts = (() => {
|
|
219
|
+
const pins = interaction.selection;
|
|
220
|
+
const [pin] = pins;
|
|
221
|
+
if (!interaction.isFilterable || pin === void 0) return [];
|
|
222
|
+
if (pins.length > 1) return [{
|
|
223
|
+
key: "all",
|
|
224
|
+
label: `${pins.length} filters`,
|
|
225
|
+
rest: null
|
|
226
|
+
}];
|
|
227
|
+
const parts = [];
|
|
228
|
+
if (pin.categoryKey !== void 0) parts.push({
|
|
229
|
+
key: "category",
|
|
230
|
+
label: categoryLabel(pin.categoryKey),
|
|
231
|
+
rest: pin.seriesKey === void 0 ? null : { seriesKey: pin.seriesKey }
|
|
232
|
+
});
|
|
233
|
+
if (pin.seriesKey !== void 0) parts.push({
|
|
234
|
+
key: "series",
|
|
235
|
+
label: seriesLabel(pin.seriesKey),
|
|
236
|
+
rest: pin.categoryKey === void 0 ? null : { categoryKey: pin.categoryKey }
|
|
237
|
+
});
|
|
238
|
+
return parts;
|
|
239
|
+
})();
|
|
240
|
+
const filterChip = filterChipParts.length === 0 ? null : filterChipParts.map((part, index) => /* @__PURE__ */ jsx(Chip, {
|
|
241
|
+
size: ChipSize.SMALL,
|
|
242
|
+
...index === 0 && { icon: FunnelSimpleIcon },
|
|
243
|
+
label: part.label,
|
|
244
|
+
tooltip: part.key === "all" ? interaction.selection.map(describePin).join(", ") : "",
|
|
245
|
+
onDismiss: () => handleFilterDismiss(part.rest)
|
|
246
|
+
}, part.key));
|
|
247
|
+
const legendNode = !hasLegend || isSkeleton ? null : legend ?? /* @__PURE__ */ jsx(ChartLegend, {
|
|
248
|
+
items: legendItems,
|
|
249
|
+
placement: legendPlacement,
|
|
250
|
+
swatch: legendSwatch,
|
|
251
|
+
inset: isSideLegend ? CHART_LEGEND_SIDE_GAP : insets.left,
|
|
252
|
+
extent: isSideLegend ? Math.max(0, height - (interaction.isFilterable ? CHART_LEGEND_FILTER_EXTENT : 0)) : 0,
|
|
253
|
+
isFixedExtent: !interaction.isFilterable,
|
|
254
|
+
hasFilterSlot: interaction.isFilterable,
|
|
255
|
+
filter: filterChip,
|
|
256
|
+
getEntryState: interaction.getSeriesState,
|
|
257
|
+
isEntryPinned: interaction.isSeriesPinned,
|
|
258
|
+
onItemClick: interaction.isFilterable ? handleLegendClick : void 0,
|
|
259
|
+
onItemEnter: interaction.onSeriesEnter,
|
|
260
|
+
onItemLeave: interaction.onSeriesLeave
|
|
261
|
+
});
|
|
262
|
+
const hasTargets = isMeasured && isInteractive && categoryTargets.length > 0;
|
|
263
|
+
const rootStyle = {
|
|
264
|
+
"--gx-chart-aspect-ratio": aspectRatio,
|
|
265
|
+
...style
|
|
266
|
+
};
|
|
267
|
+
return /* @__PURE__ */ jsxs(Root, {
|
|
268
|
+
...rootPassthrough,
|
|
269
|
+
ref: rootRef,
|
|
270
|
+
id,
|
|
271
|
+
"aria-busy": isLoading || void 0,
|
|
272
|
+
className: cx(CHART_LEGEND_PLACEMENT_TO_CSS_MAP[legendPlacement], className),
|
|
273
|
+
style: rootStyle,
|
|
274
|
+
children: [/* @__PURE__ */ jsxs(PlotBox, {
|
|
275
|
+
...plotAriaRest,
|
|
276
|
+
...plotA11yProps,
|
|
277
|
+
ref: plotRef,
|
|
278
|
+
className: cx(isInteractive && PLOT_INTERACTIVE_CSS, plotClassName),
|
|
72
279
|
children: [
|
|
73
|
-
isMeasured && /* @__PURE__ */
|
|
280
|
+
isMeasured && !isSkeleton && /* @__PURE__ */ jsx(ChartSvg, {
|
|
281
|
+
"aria-hidden": "true",
|
|
74
282
|
width,
|
|
75
283
|
height,
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
"aria-describedby": descriptionId,
|
|
79
|
-
children: [ariaDescription && /* @__PURE__ */ jsx("desc", {
|
|
80
|
-
id: descriptionId,
|
|
81
|
-
children: ariaDescription
|
|
82
|
-
}), /* @__PURE__ */ jsxs("g", {
|
|
83
|
-
transform: `translate(${margin.left}, ${margin.top})`,
|
|
284
|
+
children: /* @__PURE__ */ jsxs("g", {
|
|
285
|
+
transform: `translate(${insets.left}, ${insets.top})`,
|
|
84
286
|
children: [
|
|
85
287
|
axes,
|
|
86
288
|
/* @__PURE__ */ jsx("g", { children }),
|
|
87
|
-
hasTargets &&
|
|
88
|
-
transform:
|
|
89
|
-
onMouseLeave: interaction.onCategoryLeave,
|
|
289
|
+
hasTargets && /* @__PURE__ */ jsxs("g", {
|
|
290
|
+
transform: targetsTransform,
|
|
90
291
|
children: [/* @__PURE__ */ jsx(ChartCategoryTargets, {
|
|
91
292
|
targets: categoryTargets,
|
|
92
|
-
interaction,
|
|
293
|
+
onEnter: interaction.onCategoryEnter,
|
|
294
|
+
onLeave: interaction.onCategoryLeave,
|
|
93
295
|
onSelect: onCategorySelect
|
|
94
296
|
}), onMarkSelect && markTargets && markTargets.length > 0 && /* @__PURE__ */ jsx(ChartMarkTargets, {
|
|
95
297
|
targets: markTargets,
|
|
96
|
-
interaction,
|
|
298
|
+
onEnter: interaction.onCategoryEnter,
|
|
299
|
+
onLeave: interaction.onCategoryLeave,
|
|
97
300
|
onSelect: onMarkSelect
|
|
98
301
|
})]
|
|
99
302
|
})
|
|
100
303
|
]
|
|
101
|
-
})
|
|
304
|
+
})
|
|
102
305
|
}),
|
|
103
|
-
isMeasured && plotOverlay,
|
|
104
|
-
isMeasured && !
|
|
105
|
-
|
|
306
|
+
isMeasured && !isSkeleton && plotOverlay,
|
|
307
|
+
isMeasured && isEmpty && !isLoading && /* @__PURE__ */ jsx(Overlay, { children: /* @__PURE__ */ jsx(EmptyState, {
|
|
308
|
+
size: EmptyStateSize.SMALL,
|
|
309
|
+
header: placeholder,
|
|
310
|
+
role: "status"
|
|
311
|
+
}) }),
|
|
312
|
+
isSkeleton && /* @__PURE__ */ jsx(Skeleton, {
|
|
313
|
+
variant: SkeletonVariant.RECT,
|
|
314
|
+
className: LOADING_SKELETON_CSS
|
|
315
|
+
}),
|
|
316
|
+
isMeasured && hasTooltip && !isSkeleton && /* @__PURE__ */ jsx(ChartTooltip, {
|
|
317
|
+
model: tooltipModel,
|
|
106
318
|
containerWidth: width,
|
|
107
319
|
containerHeight: height,
|
|
108
320
|
anchorHalfWidth,
|
|
109
|
-
placeAwayFromX: placeAwayFromX === void 0 ? void 0 : placeAwayFromX +
|
|
321
|
+
placeAwayFromX: placeAwayFromX === void 0 ? void 0 : placeAwayFromX + insets.left,
|
|
110
322
|
verticalAlign,
|
|
111
|
-
|
|
112
|
-
|
|
323
|
+
renderTooltip,
|
|
324
|
+
swatch: tooltipSwatch
|
|
113
325
|
}),
|
|
114
|
-
|
|
326
|
+
/* @__PURE__ */ jsx(LiveRegion, {
|
|
327
|
+
"aria-live": "polite",
|
|
328
|
+
children: announcement
|
|
329
|
+
})
|
|
115
330
|
]
|
|
116
|
-
}),
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
verticalExtent: legendRight ? height : void 0,
|
|
121
|
-
maxItems: legendMaxItems,
|
|
122
|
-
hoveredKey: interaction.hoveredSeriesKey,
|
|
123
|
-
onItemEnter: interaction.onSeriesEnter,
|
|
124
|
-
onItemLeave: interaction.onSeriesLeave
|
|
125
|
-
})]
|
|
331
|
+
}), legendNode !== null && (interaction.isFilterable && legend !== void 0 ? /* @__PURE__ */ jsxs(CustomLegendBar, { children: [legendNode, /* @__PURE__ */ jsx(CustomFilterSlot, {
|
|
332
|
+
"aria-hidden": filterChip === null || void 0,
|
|
333
|
+
children: filterChip
|
|
334
|
+
})] }) : legendNode)]
|
|
126
335
|
});
|
|
127
|
-
}
|
|
336
|
+
}
|
|
128
337
|
//#endregion
|
|
129
|
-
export { ChartFrame
|
|
338
|
+
export { ChartFrame };
|
|
@@ -1,57 +1,46 @@
|
|
|
1
|
-
import { type PropsWithChildren } from "react";
|
|
2
1
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* ChartGroupProvider links the cartesian charts inside it: hovering or arrowing to a category in
|
|
3
|
+
* one chart shows the same category in every sibling, matched by raw category label. It renders
|
|
4
|
+
* no DOM. Only `LineChart`, `AreaChart` and `BarChart` join; each syncs with its nearest provider,
|
|
5
|
+
* so a nested provider isolates a subset. Series (legend) hover stays local, and `PieChart` never
|
|
6
|
+
* syncs (it has no category axis).
|
|
7
|
+
*
|
|
8
|
+
* Plain context state is the right transport: entries change once per category crossed, not per
|
|
9
|
+
* pointer move, so a sweep across a chart re-renders the group a handful of times.
|
|
5
10
|
*/
|
|
11
|
+
import { type ReactNode } from "react";
|
|
12
|
+
/** @internal The category one chart is engaging (hover or keyboard), broadcast to its siblings. */
|
|
6
13
|
export interface ChartGroupSyncEntry {
|
|
7
|
-
/** `useId` of the chart
|
|
14
|
+
/** `useId` of the chart that produced this entry. */
|
|
8
15
|
sourceId: string;
|
|
9
|
-
/**
|
|
10
|
-
* The raw category label under the pointer — never `labelFormatter` output,
|
|
11
|
-
* so two charts formatting the same label differently still match.
|
|
12
|
-
*/
|
|
16
|
+
/** The raw category label, never `labelFormatter` output, so differently formatted charts still match. */
|
|
13
17
|
categoryKey: string;
|
|
14
18
|
}
|
|
19
|
+
/** @internal What the provider shares with its charts. */
|
|
15
20
|
export interface ChartGroupContextValue {
|
|
21
|
+
/** The engaged category, or `null`. */
|
|
16
22
|
activeEntry: ChartGroupSyncEntry | null;
|
|
23
|
+
/** Publishes an entry (deduplicated by value). */
|
|
17
24
|
setActive: (entry: ChartGroupSyncEntry) => void;
|
|
18
|
-
/** Clears only if
|
|
25
|
+
/** Clears the entry only if it belongs to `sourceId`. */
|
|
19
26
|
clearActive: (sourceId: string) => void;
|
|
20
27
|
/** Followers open their own tooltip at the synced category. */
|
|
21
|
-
|
|
28
|
+
shouldShareTooltip: boolean;
|
|
22
29
|
}
|
|
30
|
+
/** @internal Read by the chart modules; apps never read it. */
|
|
23
31
|
export declare const ChartGroupContext: import("react").Context<ChartGroupContextValue | null>;
|
|
24
|
-
/**
|
|
25
|
-
* Shares the hovered category between the cartesian charts inside it.
|
|
26
|
-
*
|
|
27
|
-
* Hovering a category in one chart shows the same category emphasized in every
|
|
28
|
-
* sibling — matched by raw category label, so charts whose category sets only
|
|
29
|
-
* partially overlap simply show nothing for the labels they lack. By default
|
|
30
|
-
* the tooltip stays local to the chart under the pointer; siblings get the
|
|
31
|
-
* quiet emphasis only (LineChart its cursor line and dots, BarChart its band
|
|
32
|
-
* tint and gentle dim). `sharedTooltip` opts every synced chart into opening its
|
|
33
|
-
* own tooltip at the shared category — the tooltip anchors to the category's
|
|
34
|
-
* geometry, not the pointer, so a follower's opens exactly where a local
|
|
35
|
-
* hover's would.
|
|
36
|
-
*
|
|
37
|
-
* Scope, deliberately narrow:
|
|
38
|
-
* - Only the category axis syncs. Legend (series) hover stays local.
|
|
39
|
-
* - PieChart never participates — it has no category axis.
|
|
40
|
-
* - There is no per-chart opt-out prop. The opt-out is rendering the chart
|
|
41
|
-
* outside the provider, and nesting a second provider isolates a subset —
|
|
42
|
-
* charts sync with their nearest ancestor.
|
|
43
|
-
*
|
|
44
|
-
* Renders no DOM and holds no layout opinion — unlike `OverlayProvider` it is
|
|
45
|
-
* not a page-root singleton, and several can coexist on a page.
|
|
46
|
-
*
|
|
47
|
-
* Plain context state is the right transport here: entries change at category
|
|
48
|
-
* granularity (once per hit band crossed, not per mousemove), so a sweep
|
|
49
|
-
* across a chart re-renders the group a handful of times. No subscription or
|
|
50
|
-
* selector machinery is warranted.
|
|
51
|
-
*/
|
|
52
32
|
export interface ChartGroupProviderProps {
|
|
53
|
-
/**
|
|
54
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Every synced chart opens its own tooltip at the shared category. Off: siblings show only the quiet emphasis (cursor, band).
|
|
35
|
+
* @default false
|
|
36
|
+
*/
|
|
37
|
+
shouldShareTooltip?: boolean;
|
|
38
|
+
/** The charts (and any layout around them). Only `LineChart`, `AreaChart` and `BarChart` join the sync; they sync with their nearest provider. */
|
|
39
|
+
children?: ReactNode;
|
|
40
|
+
}
|
|
41
|
+
/** Syncs the hovered or focused category across the cartesian charts inside it. */
|
|
42
|
+
declare function ChartGroupProvider({ shouldShareTooltip, children }: ChartGroupProviderProps): import("react").JSX.Element;
|
|
43
|
+
declare namespace ChartGroupProvider {
|
|
44
|
+
var displayName: string;
|
|
55
45
|
}
|
|
56
|
-
export declare const ChartGroupProvider: ({ sharedTooltip, children, }: PropsWithChildren<ChartGroupProviderProps>) => import("react").JSX.Element;
|
|
57
46
|
export default ChartGroupProvider;
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import { createContext, useCallback, useMemo, useState } from "react";
|
|
2
2
|
import { jsx } from "react/jsx-runtime";
|
|
3
3
|
//#region src/charts/ChartGroupProvider.tsx
|
|
4
|
+
/**
|
|
5
|
+
* ChartGroupProvider links the cartesian charts inside it: hovering or arrowing to a category in
|
|
6
|
+
* one chart shows the same category in every sibling, matched by raw category label. It renders
|
|
7
|
+
* no DOM. Only `LineChart`, `AreaChart` and `BarChart` join; each syncs with its nearest provider,
|
|
8
|
+
* so a nested provider isolates a subset. Series (legend) hover stays local, and `PieChart` never
|
|
9
|
+
* syncs (it has no category axis).
|
|
10
|
+
*
|
|
11
|
+
* Plain context state is the right transport: entries change once per category crossed, not per
|
|
12
|
+
* pointer move, so a sweep across a chart re-renders the group a handful of times.
|
|
13
|
+
*/
|
|
14
|
+
/** @internal Read by the chart modules; apps never read it. */
|
|
4
15
|
var ChartGroupContext = createContext(null);
|
|
5
|
-
|
|
16
|
+
/** Syncs the hovered or focused category across the cartesian charts inside it. */
|
|
17
|
+
function ChartGroupProvider({ shouldShareTooltip = false, children }) {
|
|
6
18
|
const [activeEntry, setActiveEntry] = useState(null);
|
|
7
19
|
const setActive = useCallback((entry) => {
|
|
8
20
|
setActiveEntry((prev) => prev !== null && prev.sourceId === entry.sourceId && prev.categoryKey === entry.categoryKey ? prev : entry);
|
|
@@ -10,21 +22,22 @@ var ChartGroupProvider = ({ sharedTooltip = false, children }) => {
|
|
|
10
22
|
const clearActive = useCallback((sourceId) => {
|
|
11
23
|
setActiveEntry((prev) => prev !== null && prev.sourceId === sourceId ? null : prev);
|
|
12
24
|
}, []);
|
|
13
|
-
const
|
|
25
|
+
const value = useMemo(() => ({
|
|
14
26
|
activeEntry,
|
|
15
27
|
setActive,
|
|
16
28
|
clearActive,
|
|
17
|
-
|
|
29
|
+
shouldShareTooltip
|
|
18
30
|
}), [
|
|
19
31
|
activeEntry,
|
|
20
32
|
setActive,
|
|
21
33
|
clearActive,
|
|
22
|
-
|
|
34
|
+
shouldShareTooltip
|
|
23
35
|
]);
|
|
24
36
|
return /* @__PURE__ */ jsx(ChartGroupContext.Provider, {
|
|
25
|
-
value
|
|
37
|
+
value,
|
|
26
38
|
children
|
|
27
39
|
});
|
|
28
|
-
}
|
|
40
|
+
}
|
|
41
|
+
ChartGroupProvider.displayName = "ChartGroupProvider";
|
|
29
42
|
//#endregion
|
|
30
|
-
export { ChartGroupContext, ChartGroupProvider
|
|
43
|
+
export { ChartGroupContext, ChartGroupProvider as default };
|