@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
package/dist/charts/constants.js
CHANGED
|
@@ -1,285 +1,119 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CONTROL_SIZE, RADIUS, SPACE } from "../theme/tokens/scales.js";
|
|
2
2
|
//#region src/charts/constants.ts
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
/** Height of a value-axis tick label box in px. */
|
|
4
|
+
* @internal Geometry and interaction constants for the chart family.
|
|
5
|
+
*
|
|
6
|
+
* wyw evaluates this module at build time (its values are interpolated into templates), so it
|
|
7
|
+
* imports nothing but the token scales: no React, no d3, no component. Values equal to a scale
|
|
8
|
+
* step are derived from `SPACE` / `RADIUS`; the rest are literals with a one-line reason.
|
|
9
|
+
*/
|
|
10
|
+
var px = (value) => Number.parseFloat(value);
|
|
11
|
+
/** @internal Height of one caption line (`caption` type step): every axis label and title. */
|
|
12
|
+
var CAPTION_LINE = px(SPACE[12]);
|
|
13
|
+
/** @internal Clear space between an axis label (or title) and the plot, its grid, or the next label row. */
|
|
14
|
+
var AXIS_LABEL_GAP = px(SPACE[8]);
|
|
15
|
+
/** @internal Grid lines extend this far past both plot edges: a short lead-in, clear of the labels. */
|
|
16
|
+
var GRID_LINE_BLEED = px(SPACE[4]);
|
|
17
|
+
/** @internal Space above the plot: half a value label box (its text clears the top) plus air for a dot. */
|
|
18
|
+
var PLOT_INSET_TOP = px(SPACE[8]);
|
|
19
|
+
/** @internal Space right of the plot: the grid bleed plus air for a line's end dot and cap. */
|
|
20
|
+
var PLOT_INSET_RIGHT = px(SPACE[8]);
|
|
21
|
+
/** @internal Gap between a value tick label and the plot edge: the grid bleed plus the label gap. */
|
|
22
|
+
var VALUE_AXIS_TICK_GAP = GRID_LINE_BLEED + AXIS_LABEL_GAP;
|
|
23
|
+
/** @internal Height of a value tick label box: taller than the caption line so it centers on its tick. */
|
|
25
24
|
var VALUE_AXIS_LABEL_HEIGHT = 20;
|
|
26
|
-
/**
|
|
27
|
-
var
|
|
28
|
-
/**
|
|
29
|
-
var
|
|
30
|
-
/**
|
|
31
|
-
var
|
|
32
|
-
/**
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
* runs straight into the rotated title, and the two axes visibly disagree.
|
|
40
|
-
*/
|
|
41
|
-
var AXIS_TITLE_GAP = 8;
|
|
42
|
-
/** Default approximate tick count on the value axis. */
|
|
25
|
+
/** @internal Gap between the plot's bottom edge and the category labels. */
|
|
26
|
+
var CATEGORY_AXIS_LABEL_GAP = AXIS_LABEL_GAP;
|
|
27
|
+
/** @internal Height of the category label box: one caption line, so the label gap is the visible gap. */
|
|
28
|
+
var CATEGORY_AXIS_LABEL_HEIGHT = CAPTION_LINE;
|
|
29
|
+
/** @internal Space below the plot: label gap + label line. */
|
|
30
|
+
var PLOT_INSET_BOTTOM = CATEGORY_AXIS_LABEL_GAP + CATEGORY_AXIS_LABEL_HEIGHT;
|
|
31
|
+
/** @internal Band reserved for an axis title: a caption line with 2px of air each side, so a rotated title stays inside the chart. */
|
|
32
|
+
var AXIS_TITLE_BAND = px(SPACE[16]);
|
|
33
|
+
/** @internal Clear space between an axis title and its tick labels. */
|
|
34
|
+
var AXIS_TITLE_GAP = AXIS_LABEL_GAP;
|
|
35
|
+
/** @internal Minimum distance between value ticks (a caption line plus the label gap): closer ticks are thinned so labels never crowd. */
|
|
36
|
+
var MIN_VALUE_TICK_SPACING = CAPTION_LINE + AXIS_LABEL_GAP;
|
|
37
|
+
/** @internal Default approximate tick count on the value axis. */
|
|
43
38
|
var DEFAULT_VALUE_TICK_COUNT = 5;
|
|
44
|
-
/**
|
|
45
|
-
var
|
|
46
|
-
/**
|
|
47
|
-
var
|
|
48
|
-
/**
|
|
49
|
-
var
|
|
50
|
-
/**
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
* Applied to every segment except the one sitting on the baseline, so each seam
|
|
60
|
-
* gets a gap and the bar still meets the axis flush.
|
|
61
|
-
*/
|
|
62
|
-
var STACK_SEGMENT_GAP = 2;
|
|
63
|
-
/** Minimum rendered height for a non-zero bar, in px. */
|
|
64
|
-
var MIN_BAR_LENGTH = 2;
|
|
65
|
-
/**
|
|
66
|
-
* Target gaps in px between groups, and between bars within a group.
|
|
67
|
-
*
|
|
68
|
-
* The within-group gap must stay clearly smaller than the between-group gap —
|
|
69
|
-
* that ratio is the only thing making a group read as a group. When the two are
|
|
70
|
-
* close, the eye has nothing to bind a group's bars together and the chart reads
|
|
71
|
-
* as one long row of unrelated bars.
|
|
72
|
-
*/
|
|
73
|
-
var GROUP_GAP_COMFORTABLE = 24;
|
|
74
|
-
var BAR_GAP_COMFORTABLE = 6;
|
|
75
|
-
var GROUP_GAP_MEDIUM = 16;
|
|
76
|
-
var BAR_GAP_MEDIUM = 4;
|
|
77
|
-
var GROUP_GAP_TIGHT = 12;
|
|
78
|
-
var BAR_GAP_TIGHT = 3;
|
|
79
|
-
/**
|
|
80
|
-
* Fraction of its available slot a bar actually fills.
|
|
81
|
-
*
|
|
82
|
-
* Bars sized to consume every last pixel of their group read as heavy, and the
|
|
83
|
-
* chart becomes a wall of colour rather than a set of measurements. Holding them
|
|
84
|
-
* back leaves air on both sides of each group without touching the gap between
|
|
85
|
-
* neighbouring bars.
|
|
86
|
-
*/
|
|
87
|
-
var BAR_WIDTH_RATIO = .8;
|
|
88
|
-
/**
|
|
89
|
-
* Ceiling on a single bar's thickness, in px.
|
|
90
|
-
*
|
|
91
|
-
* Without it a two- or three-category chart divides the whole plot between a
|
|
92
|
-
* handful of bars and produces slabs — the width stops carrying information the
|
|
93
|
-
* moment it exceeds what the eye needs to compare heights.
|
|
94
|
-
*/
|
|
95
|
-
var MAX_BAR_WIDTH = 44;
|
|
96
|
-
/** Below this many bars the chart always uses comfortable spacing. */
|
|
97
|
-
var MIN_BARS_FOR_TIGHT_SPACING = 13;
|
|
98
|
-
/**
|
|
99
|
-
* Ceiling on a gap, as a share of the space it divides.
|
|
100
|
-
*
|
|
101
|
-
* The gaps above are absolute pixel values chosen from chart-wide density, which
|
|
102
|
-
* says nothing about how much room a *single* category actually got. Forty
|
|
103
|
-
* categories in a 650px plot leave a 16px step, and a 24px gap subtracted from
|
|
104
|
-
* that goes negative — the width lands on its 1px floor and every bar renders as
|
|
105
|
-
* a hairline. Capping the gap proportionally keeps it honest at any density: it
|
|
106
|
-
* stays exactly as specified whenever there is room, and degrades smoothly when
|
|
107
|
-
* there is not.
|
|
108
|
-
*/
|
|
109
|
-
var MAX_GAP_SHARE = .3;
|
|
110
|
-
/** Plot widths above this stay comfortable; below the tight threshold go tight. */
|
|
111
|
-
var WIDTH_FOR_MEDIUM_SPACING = 650;
|
|
112
|
-
var WIDTH_FOR_TIGHT_SPACING = 500;
|
|
113
|
-
/** Grid lines extend this far past both plot edges, in px. */
|
|
114
|
-
var GRID_LINE_BLEED = 12;
|
|
115
|
-
var DEFAULT_LINE_STROKE_WIDTH = 1.5;
|
|
116
|
-
/** Radius of the dot marking a point on a hovered category, in px. */
|
|
39
|
+
/** @internal Width of one caption character, for arithmetic label sizing (SSR-safe, no DOM). */
|
|
40
|
+
var CAPTION_CHAR_WIDTH_PX = 6.2;
|
|
41
|
+
/** @internal Floor of the auto-sized left gutter. */
|
|
42
|
+
var MIN_AUTO_INSET_LEFT = px(SPACE[32]);
|
|
43
|
+
/** @internal Ceiling of the auto-sized left gutter, so a wide formatter cannot eat the plot (no step). */
|
|
44
|
+
var MAX_AUTO_INSET_LEFT = 96;
|
|
45
|
+
/** @internal The left gutter grows in steps of this, so plots stay aligned across charts. */
|
|
46
|
+
var AUTO_INSET_LEFT_STEP = px(SPACE[8]);
|
|
47
|
+
/** @internal Minimum space between category labels before the axis thins them (rows: one caption line apart). */
|
|
48
|
+
var MIN_CATEGORY_LABEL_GAP = px(SPACE[8]);
|
|
49
|
+
/** @internal Insets around a radial plot, which draws no axes. */
|
|
50
|
+
var RADIAL_PLOT_INSET = px(SPACE[8]);
|
|
51
|
+
/** @internal Every line's stroke width (no stroke token; the 1.x weight). */
|
|
52
|
+
var LINE_STROKE_WIDTH = 1.5;
|
|
53
|
+
/** @internal Radius of a point dot (the 1.x dot; no step). */
|
|
117
54
|
var LINE_POINT_RADIUS = 3.5;
|
|
118
|
-
/**
|
|
119
|
-
var
|
|
120
|
-
/**
|
|
121
|
-
var
|
|
122
|
-
/**
|
|
123
|
-
var
|
|
124
|
-
/**
|
|
125
|
-
var PIE_DONUT_INNER_RATIO = .62;
|
|
126
|
-
/**
|
|
127
|
-
* Share of the narrowest slice that its two inner pad insets may consume.
|
|
128
|
-
*
|
|
129
|
-
* d3 turns {@link PIE_PAD_ANGLE} into a *constant linear* gap, and holding that
|
|
130
|
-
* width at radius `r` costs an angular inset of `asin(gap / 2r)` — unbounded as
|
|
131
|
-
* `r` approaches zero. When the two insets no longer fit inside a slice's own
|
|
132
|
-
* span, d3 collapses that slice's inner edge rather than sweeping backwards. The
|
|
133
|
-
* collapse is what makes a hole-less pie look wrong: the gap edge stops being
|
|
134
|
-
* radial, so gaps sit at visibly different widths and lean at slight angles, and
|
|
135
|
-
* it bites hardest between the *narrowest* slices, where the span runs out
|
|
136
|
-
* first.
|
|
137
|
-
*
|
|
138
|
-
* So the inner radius is solved for rather than guessed: pick the radius that
|
|
139
|
-
* keeps both insets inside the narrowest slice, with this much of it spent. At
|
|
140
|
-
* 0.7 the measured gap spread is 1.01× (against 1.46× when the inner edge is
|
|
141
|
-
* left to collapse), and the remaining 30% is what absorbs the corner radius.
|
|
142
|
-
*/
|
|
143
|
-
var PIE_MAX_INSET_SHARE = .7;
|
|
144
|
-
/**
|
|
145
|
-
* Ceiling on the auto-derived inner radius, as a share of the outer radius.
|
|
146
|
-
*
|
|
147
|
-
* The radius needed grows without bound as the narrowest slice shrinks, so a
|
|
148
|
-
* single sliver would otherwise turn a pie into a donut. Past this point the
|
|
149
|
-
* hole is doing more visual damage than the uneven gap it fixes, so the gap is
|
|
150
|
-
* allowed to degrade instead — never worse than it renders today.
|
|
151
|
-
*/
|
|
152
|
-
var PIE_MAX_AUTO_INNER_RATIO = .06;
|
|
153
|
-
/** How far outside the arc the tooltip anchors, in px. */
|
|
154
|
-
var PIE_TOOLTIP_ANCHOR_INSET = 8;
|
|
155
|
-
/**
|
|
156
|
-
* Default share below which a slice is folded into an "Other" bucket.
|
|
157
|
-
*
|
|
158
|
-
* Slivers this thin are unreadable and effectively unhoverable, so grouping
|
|
159
|
-
* them communicates more than rendering each faithfully.
|
|
160
|
-
*/
|
|
161
|
-
var PIE_MIN_SLICE_SHARE = .02;
|
|
162
|
-
/** React key used for the bucket that absorbs slices below the fold threshold. */
|
|
163
|
-
var AGGREGATED_SLICE_KEY = "__other__";
|
|
164
|
-
/** Margin around a pie, which needs no axis gutters. */
|
|
165
|
-
var PIE_CHART_MARGIN = {
|
|
166
|
-
top: 8,
|
|
167
|
-
right: 8,
|
|
168
|
-
bottom: 8,
|
|
169
|
-
left: 8
|
|
170
|
-
};
|
|
171
|
-
/**
|
|
172
|
-
* Duration in ms for the tooltip's fade and glide.
|
|
173
|
-
*
|
|
174
|
-
* Sits inside the 75–150ms band the DLS uses everywhere else. Only the tooltip
|
|
175
|
-
* transitions — mark and legend emphasis snaps, because emphasis is feedback
|
|
176
|
-
* and feedback that eases in reads as lag.
|
|
177
|
-
*/
|
|
178
|
-
var CHART_TRANSITION_MS = 100;
|
|
179
|
-
/**
|
|
180
|
-
* Opacity ramp for the mark states.
|
|
181
|
-
*
|
|
182
|
-
* The grammar is inherited from the reference charts and is the opposite of the
|
|
183
|
-
* obvious one: hovering does not brighten the hovered mark, it *softens*
|
|
184
|
-
* everything else. `MUTED` applies to marks outside the hovered category or
|
|
185
|
-
* series.
|
|
186
|
-
*
|
|
187
|
-
* The step down from ACTIVE is deliberately steep. These are large filled areas
|
|
188
|
-
* — bars and arcs — and a filled shape still reads as present at an opacity
|
|
189
|
-
* where a hairline would have vanished, so a timid step barely registers as a
|
|
190
|
-
* highlight at all.
|
|
191
|
-
*/
|
|
55
|
+
/** @internal Dash and gap of a dashed line. */
|
|
56
|
+
var LINE_DASH = px(SPACE[4]);
|
|
57
|
+
/** @internal Opacity of an area fill (1.x `LINE_AREA_OPACITY`). */
|
|
58
|
+
var AREA_FILL_OPACITY = .12;
|
|
59
|
+
/** @internal Opacity of a stacked area band: bands never overlap, so they carry a firmer fill (AreaChart). */
|
|
60
|
+
var AREA_STACKED_FILL_OPACITY = .24;
|
|
61
|
+
/** @internal Opacity of `ChartMarkState.ACTIVE`. */
|
|
192
62
|
var CHART_MARK_OPACITY_ACTIVE = 1;
|
|
63
|
+
/** @internal Opacity of `ChartMarkState.MUTED`: steep, so a filled mark visibly recedes. */
|
|
193
64
|
var CHART_MARK_OPACITY_MUTED = .1;
|
|
194
|
-
/**
|
|
195
|
-
* The whisper tier, for `ChartMarkState.DIMMED`.
|
|
196
|
-
*
|
|
197
|
-
* Deliberately far gentler than MUTED: it is used where another affordance —
|
|
198
|
-
* BarChart's cursor band — already marks the hovered category, so the
|
|
199
|
-
* off-category marks only need to step back, not disappear.
|
|
200
|
-
*/
|
|
65
|
+
/** @internal Opacity of `ChartMarkState.DIMMED`: a whisper, where a cursor band already highlights. */
|
|
201
66
|
var CHART_MARK_OPACITY_DIMMED = .4;
|
|
202
|
-
/**
|
|
203
|
-
var
|
|
204
|
-
/**
|
|
205
|
-
var
|
|
206
|
-
/**
|
|
207
|
-
var
|
|
208
|
-
/**
|
|
209
|
-
var
|
|
210
|
-
/**
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
*
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
*/
|
|
219
|
-
var
|
|
220
|
-
/**
|
|
221
|
-
*
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
*/
|
|
67
|
+
/** @internal Corner radius on the outer end of a wide bar. */
|
|
68
|
+
var BAR_RADIUS = px(RADIUS.md);
|
|
69
|
+
/** @internal Corner radius of a bar narrower than `NARROW_BAR_WIDTH`. */
|
|
70
|
+
var BAR_RADIUS_NARROW = px(RADIUS.sm);
|
|
71
|
+
/** @internal Bars below this width use the smaller radius (1.x). */
|
|
72
|
+
var NARROW_BAR_WIDTH = 40;
|
|
73
|
+
/** @internal Seam between stacked segments; whole pixels so every seam renders alike. */
|
|
74
|
+
var STACK_SEGMENT_GAP = px(SPACE[2]);
|
|
75
|
+
/** @internal Minimum drawn length of a non-zero bar. */
|
|
76
|
+
var MIN_BAR_LENGTH = px(SPACE[2]);
|
|
77
|
+
/**
|
|
78
|
+
* @internal The gap between categories as a share of the category band. Gaps are proportional so
|
|
79
|
+
* a narrow chart keeps its bars; this share and the in-group one below reproduce the 1.x look at
|
|
80
|
+
* 480px and up, where the bars also hit their 44px ceiling or the gaps hit theirs.
|
|
81
|
+
*/
|
|
82
|
+
var CATEGORY_GAP_RATIO = .35;
|
|
83
|
+
/** @internal Floor of the category gap, so neighbouring categories never touch. */
|
|
84
|
+
var MIN_CATEGORY_GAP = px(SPACE[2]);
|
|
85
|
+
/**
|
|
86
|
+
* @internal Ceiling of the category gap. 1.x drew 24px plus 20% of each bar slot as air, so a wide
|
|
87
|
+
* grouped chart showed ~40px between groups; this ceiling keeps that look.
|
|
88
|
+
*/
|
|
89
|
+
var MAX_CATEGORY_GAP = px(SPACE[48]);
|
|
90
|
+
/** @internal The gap between bars in a group as a share of one bar's slot (the group gap binds a group). */
|
|
91
|
+
var BAR_GAP_RATIO = .2;
|
|
92
|
+
/** @internal Floor of the in-group gap: one hairline of air (no step). */
|
|
93
|
+
var MIN_BAR_GAP = 1;
|
|
94
|
+
/** @internal Ceiling of the in-group gap (the 1.x gap). */
|
|
95
|
+
var MAX_BAR_GAP = px(SPACE[4]);
|
|
96
|
+
/** @internal Gap between heatmap cells as a share of a cell's step: proportional, like the bar gaps. */
|
|
97
|
+
var HEATMAP_CELL_GAP_RATIO = .1;
|
|
98
|
+
/** @internal Floor of the heatmap cell gap: one hairline of air (no step). */
|
|
99
|
+
var MIN_HEATMAP_CELL_GAP = 1;
|
|
100
|
+
/** @internal Ceiling of the heatmap cell gap (the 1.x gap). */
|
|
101
|
+
var MAX_HEATMAP_CELL_GAP = px(SPACE[2]);
|
|
102
|
+
/** @internal Width of the seam between pie slices, constant in pixels at any radius (the stack seam). */
|
|
103
|
+
var PIE_SLICE_GAP = STACK_SEGMENT_GAP;
|
|
104
|
+
/** @internal Distance between the tooltip and its anchor. */
|
|
105
|
+
var CHART_TOOLTIP_OFFSET = px(SPACE[8]);
|
|
106
|
+
/** @internal Rows the built-in tooltip body shows before "+N more". */
|
|
107
|
+
var CHART_TOOLTIP_MAX_ROWS = 8;
|
|
108
|
+
/** @internal Gap between the plot box and a side-placed legend. */
|
|
109
|
+
var CHART_LEGEND_SIDE_GAP = px(SPACE[16]);
|
|
110
|
+
/** @internal Height a side legend gives up to its filter chips: the 8px top padding and a 20px `Chip SMALL`. */
|
|
111
|
+
var CHART_LEGEND_FILTER_EXTENT = px(SPACE[8]) + px(CONTROL_SIZE.xSmall);
|
|
112
|
+
/** @internal Widest the filter chips grow (one or two) before their labels truncate; a bottom legend always keeps this much room for them. */
|
|
113
|
+
var CHART_LEGEND_FILTER_MAX_WIDTH = 240;
|
|
114
|
+
/** @internal Height cap of the "+N more" legend list (about eight entries) before it scrolls. */
|
|
230
115
|
var CHART_LEGEND_OVERFLOW_MAX_HEIGHT = 208;
|
|
231
|
-
/**
|
|
232
|
-
|
|
233
|
-
* popover box — the list inside subtracts the Tooltip's 8px inset per side.
|
|
234
|
-
* Without one, a couple of short labels shrink-wrap into a scrunched box.
|
|
235
|
-
*/
|
|
236
|
-
var CHART_LEGEND_OVERFLOW_MIN_WIDTH = 160;
|
|
237
|
-
/**
|
|
238
|
-
* Approximate width of one CAPTION-size character.
|
|
239
|
-
*
|
|
240
|
-
* Axis sizing estimates label widths arithmetically rather than measuring the
|
|
241
|
-
* DOM, so it stays correct during build-time evaluation and server rendering.
|
|
242
|
-
*/
|
|
243
|
-
var CAPTION_CHAR_WIDTH_PX = 6.2;
|
|
244
|
-
/** Ceiling for an auto-sized left margin, so a wide formatter can't eat the plot. */
|
|
245
|
-
var MAX_AUTO_MARGIN_LEFT = 96;
|
|
246
|
-
/**
|
|
247
|
-
* Floor for an auto-sized left margin.
|
|
248
|
-
*
|
|
249
|
-
* Enough for a two- or three-character tick plus {@link VALUE_AXIS_TICK_GAP}, so
|
|
250
|
-
* an axis labelled `0`–`5` still has its numbers clear of the container edge
|
|
251
|
-
* rather than jammed against it.
|
|
252
|
-
*/
|
|
253
|
-
var MIN_AUTO_MARGIN_LEFT = 32;
|
|
254
|
-
/**
|
|
255
|
-
* Quantum for an auto-sized left margin, in px.
|
|
256
|
-
*
|
|
257
|
-
* Sizing the gutter to the widest tick means the plot origin moves whenever that
|
|
258
|
-
* label's width changes — live data crossing 999 → 1000 gains a digit and would
|
|
259
|
-
* shift every mark sideways. Rounding up to a step absorbs that: the margin only
|
|
260
|
-
* moves when a label crosses a real threshold, and two charts with similar ticks
|
|
261
|
-
* land on the *same* value, so stacked charts in a dashboard keep their plots
|
|
262
|
-
* aligned instead of each choosing its own origin.
|
|
263
|
-
*/
|
|
264
|
-
var AUTO_MARGIN_LEFT_STEP = 8;
|
|
265
|
-
/** Minimum px between category labels before AUTO mode starts skipping them. */
|
|
266
|
-
var MIN_CATEGORY_LABEL_GAP = 8;
|
|
267
|
-
/**
|
|
268
|
-
* Default assignment order for series colors.
|
|
269
|
-
*
|
|
270
|
-
* Purple leads to match the Galaxy brand. Galaxy blue is deliberately absent —
|
|
271
|
-
* it is structural only, reserved for primary actions and selection.
|
|
272
|
-
*/
|
|
273
|
-
var CHART_PALETTE_ORDER = [
|
|
274
|
-
ChartPalette.PURPLE,
|
|
275
|
-
ChartPalette.PINK,
|
|
276
|
-
ChartPalette.BLUE,
|
|
277
|
-
ChartPalette.TEAL,
|
|
278
|
-
ChartPalette.LIME,
|
|
279
|
-
ChartPalette.ORANGE,
|
|
280
|
-
ChartPalette.YELLOW,
|
|
281
|
-
ChartPalette.GREEN,
|
|
282
|
-
ChartPalette.RED
|
|
283
|
-
];
|
|
116
|
+
/** @internal 2:1, the aspect-ratio fallback of cartesian charts and PieChart. */
|
|
117
|
+
var CHART_DEFAULT_ASPECT_RATIO = 2;
|
|
284
118
|
//#endregion
|
|
285
|
-
export {
|
|
119
|
+
export { AREA_FILL_OPACITY, AREA_STACKED_FILL_OPACITY, AUTO_INSET_LEFT_STEP, AXIS_LABEL_GAP, AXIS_TITLE_BAND, AXIS_TITLE_GAP, BAR_GAP_RATIO, BAR_RADIUS, BAR_RADIUS_NARROW, CAPTION_CHAR_WIDTH_PX, CAPTION_LINE, CATEGORY_AXIS_LABEL_GAP, CATEGORY_AXIS_LABEL_HEIGHT, CATEGORY_GAP_RATIO, CHART_DEFAULT_ASPECT_RATIO, CHART_LEGEND_FILTER_EXTENT, CHART_LEGEND_FILTER_MAX_WIDTH, CHART_LEGEND_OVERFLOW_MAX_HEIGHT, CHART_LEGEND_SIDE_GAP, CHART_MARK_OPACITY_ACTIVE, CHART_MARK_OPACITY_DIMMED, CHART_MARK_OPACITY_MUTED, CHART_TOOLTIP_MAX_ROWS, CHART_TOOLTIP_OFFSET, DEFAULT_VALUE_TICK_COUNT, GRID_LINE_BLEED, HEATMAP_CELL_GAP_RATIO, LINE_DASH, LINE_POINT_RADIUS, LINE_STROKE_WIDTH, MAX_AUTO_INSET_LEFT, MAX_BAR_GAP, MAX_CATEGORY_GAP, MAX_HEATMAP_CELL_GAP, MIN_AUTO_INSET_LEFT, MIN_BAR_GAP, MIN_BAR_LENGTH, MIN_CATEGORY_GAP, MIN_CATEGORY_LABEL_GAP, MIN_HEATMAP_CELL_GAP, MIN_VALUE_TICK_SPACING, NARROW_BAR_WIDTH, PIE_SLICE_GAP, PLOT_INSET_BOTTOM, PLOT_INSET_RIGHT, PLOT_INSET_TOP, RADIAL_PLOT_INSET, STACK_SEGMENT_GAP, VALUE_AXIS_LABEL_HEIGHT, VALUE_AXIS_TICK_GAP };
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { ChartPalette } from "./types.js";
|
|
2
|
+
/** @internal Cell corner radius: `radius.sm`. */
|
|
3
|
+
export declare const HEATMAP_CELL_RADIUS: number;
|
|
4
|
+
/** @internal Number of ramp steps. */
|
|
5
|
+
export declare const HEATMAP_STEP_COUNT = 5;
|
|
6
|
+
/** @internal The aspect-ratio fallback is clamped to these, so cells stay near-square. */
|
|
7
|
+
export declare const HEATMAP_MIN_ASPECT_RATIO = 1;
|
|
8
|
+
/** @internal Upper bound of the aspect-ratio fallback. */
|
|
9
|
+
export declare const HEATMAP_MAX_ASPECT_RATIO = 4;
|
|
10
|
+
/** @internal Five ramp steps, lowest first. */
|
|
11
|
+
export type HeatmapRamp = readonly [string, string, string, string, string];
|
|
12
|
+
/** @internal Palette slot → its five-step ramp (`PRIMARY` / `SECONDARY` / `TERTIARY` → hues, never gray). */
|
|
13
|
+
export declare const HEATMAP_STEP_TO_TOKEN_MAP: Record<ChartPalette, HeatmapRamp>;
|
|
14
|
+
/** @internal The data a cell needs (Heatmap's `HeatmapCellDatum`, structurally). */
|
|
15
|
+
export interface HeatmapGeometryCell {
|
|
16
|
+
/** Column label. */
|
|
17
|
+
column: string;
|
|
18
|
+
/** Row label. */
|
|
19
|
+
row: string;
|
|
20
|
+
/** Reading, or `null` for none. */
|
|
21
|
+
value: number | null;
|
|
22
|
+
}
|
|
23
|
+
/** @internal Labels in first-seen order, unless given. */
|
|
24
|
+
export declare function getHeatmapLabels(cells: HeatmapGeometryCell[], explicitColumns?: string[], explicitRows?: string[]): {
|
|
25
|
+
columns: string[];
|
|
26
|
+
rows: string[];
|
|
27
|
+
};
|
|
28
|
+
/** @internal `[min, max]` of the ramp: the non-null extent, overridden by `valueDomain`. */
|
|
29
|
+
export declare function getHeatmapDomain(cells: HeatmapGeometryCell[], override?: {
|
|
30
|
+
min?: number | undefined;
|
|
31
|
+
max?: number | undefined;
|
|
32
|
+
}): [number, number];
|
|
33
|
+
/**
|
|
34
|
+
* @internal The ramp step of a value: equal intervals over `[min, max]`, clamped to 0–4; every
|
|
35
|
+
* value is step 2 when the domain has no width.
|
|
36
|
+
*/
|
|
37
|
+
export declare function getHeatmapStep(value: number, [min, max]: [number, number]): number;
|
|
38
|
+
/**
|
|
39
|
+
* @internal Left gutter that fits the widest row label (the value gutter's rule, plus one
|
|
40
|
+
* character: row labels are words, whose capitals run wider than the digit estimate).
|
|
41
|
+
*/
|
|
42
|
+
export declare function estimateRowLabelInset(labels: string[]): number;
|
|
43
|
+
/** @internal One cell, resolved to pixels. Flat index = `rowIndex * columns + columnIndex`. */
|
|
44
|
+
export interface HeatmapCell {
|
|
45
|
+
/** React key. */
|
|
46
|
+
id: string;
|
|
47
|
+
/** Column index. */
|
|
48
|
+
columnIndex: number;
|
|
49
|
+
/** Row index. */
|
|
50
|
+
rowIndex: number;
|
|
51
|
+
/** Column label. */
|
|
52
|
+
column: string;
|
|
53
|
+
/** Row label. */
|
|
54
|
+
row: string;
|
|
55
|
+
/** Reading, or `null` (no entry, or `value: null`). */
|
|
56
|
+
value: number | null;
|
|
57
|
+
/** Ramp step 0–4 (`null` for an empty cell). */
|
|
58
|
+
step: number | null;
|
|
59
|
+
/** Left edge. */
|
|
60
|
+
x: number;
|
|
61
|
+
/** Top edge. */
|
|
62
|
+
y: number;
|
|
63
|
+
/** Width. */
|
|
64
|
+
width: number;
|
|
65
|
+
/** Height. */
|
|
66
|
+
height: number;
|
|
67
|
+
}
|
|
68
|
+
/** @internal The finished geometry. */
|
|
69
|
+
export interface HeatmapGeometry {
|
|
70
|
+
/** Every cell, row-major. */
|
|
71
|
+
cells: HeatmapCell[];
|
|
72
|
+
/** Column step (cell width + gap). */
|
|
73
|
+
columnStep: number;
|
|
74
|
+
/** Row step (cell height + gap). */
|
|
75
|
+
rowStep: number;
|
|
76
|
+
/** Leading edge of each column's slot (cell x − half a gap), for the axis. */
|
|
77
|
+
columnPositions: number[];
|
|
78
|
+
/** Leading edge of each row's slot, for the axis. */
|
|
79
|
+
rowPositions: number[];
|
|
80
|
+
/** Gap between neighbouring columns, px (whole). */
|
|
81
|
+
gapX: number;
|
|
82
|
+
/** Gap between neighbouring rows, px (whole). */
|
|
83
|
+
gapY: number;
|
|
84
|
+
/** Any cell without a reading. */
|
|
85
|
+
hasEmptyCells: boolean;
|
|
86
|
+
}
|
|
87
|
+
/** @internal Builds a heatmap's cells. */
|
|
88
|
+
export declare function buildHeatmapGeometry({ cells, columns, rows, domain, plotWidth, plotHeight, }: {
|
|
89
|
+
cells: HeatmapGeometryCell[];
|
|
90
|
+
columns: string[];
|
|
91
|
+
rows: string[];
|
|
92
|
+
domain: [number, number];
|
|
93
|
+
plotWidth: number;
|
|
94
|
+
plotHeight: number;
|
|
95
|
+
}): HeatmapGeometry;
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { RADIUS } from "../theme/tokens/scales.js";
|
|
2
|
+
import { t } from "../theme/tokens/t.js";
|
|
3
|
+
import { ChartPalette } from "./types.js";
|
|
4
|
+
import { AUTO_INSET_LEFT_STEP, CAPTION_CHAR_WIDTH_PX, HEATMAP_CELL_GAP_RATIO, MAX_HEATMAP_CELL_GAP, MIN_AUTO_INSET_LEFT, VALUE_AXIS_TICK_GAP } from "./constants.js";
|
|
5
|
+
import { clamp, sanitizeValue } from "./chartScales.js";
|
|
6
|
+
import { CHART_PALETTE_TO_HUE_MAP } from "./chartPalette.js";
|
|
7
|
+
//#region src/charts/heatmapGeometry.ts
|
|
8
|
+
/**
|
|
9
|
+
* @internal Heatmap geometry and color ramp (Heatmap). Cells sit on whole pixels with a
|
|
10
|
+
* proportional gap (about 10% of a cell's step, 1–2px); each filled cell takes one of five token steps of its hue's ramp, quantized at
|
|
11
|
+
* equal intervals over the value domain. Pure: no React. The ramp is `t.*` strings
|
|
12
|
+
* (`var(--gx-…)`, one `color-mix` of two), so it follows the theme.
|
|
13
|
+
*/
|
|
14
|
+
/** @internal Cell corner radius: `radius.sm`. */
|
|
15
|
+
var HEATMAP_CELL_RADIUS = Number.parseFloat(RADIUS.sm);
|
|
16
|
+
/** @internal Number of ramp steps. */
|
|
17
|
+
var HEATMAP_STEP_COUNT = 5;
|
|
18
|
+
/** @internal The aspect-ratio fallback is clamped to these, so cells stay near-square. */
|
|
19
|
+
var HEATMAP_MIN_ASPECT_RATIO = 1;
|
|
20
|
+
/** @internal Upper bound of the aspect-ratio fallback. */
|
|
21
|
+
var HEATMAP_MAX_ASPECT_RATIO = 4;
|
|
22
|
+
/**
|
|
23
|
+
* The five token steps of one ramp, monotonic away from the canvas in both themes: the soft
|
|
24
|
+
* tint, halfway to the border, the border, the solid fill, and the solid fill a quarter of the way
|
|
25
|
+
* to `text.primary` (away from the canvas: lighter in dark, darker in light). Not the solid's
|
|
26
|
+
* `hovered`, which moves away from its own text color and so toward the canvas for some hues.
|
|
27
|
+
*/
|
|
28
|
+
function rampOf(hue) {
|
|
29
|
+
return [
|
|
30
|
+
t.color.background[hue],
|
|
31
|
+
`color-mix(in srgb, ${t.color.background[hue]}, ${t.color.border[hue]})`,
|
|
32
|
+
t.color.border[hue],
|
|
33
|
+
t.color.solid[hue].background,
|
|
34
|
+
`color-mix(in oklch, ${t.color.solid[hue].background}, ${t.color.text.primary} 25%)`
|
|
35
|
+
];
|
|
36
|
+
}
|
|
37
|
+
/** @internal Palette slot → its five-step ramp (`PRIMARY` / `SECONDARY` / `TERTIARY` → hues, never gray). */
|
|
38
|
+
var HEATMAP_STEP_TO_TOKEN_MAP = Object.fromEntries(Object.values(ChartPalette).map((palette) => [palette, rampOf(CHART_PALETTE_TO_HUE_MAP[palette])]));
|
|
39
|
+
/** @internal Labels in first-seen order, unless given. */
|
|
40
|
+
function getHeatmapLabels(cells, explicitColumns, explicitRows) {
|
|
41
|
+
const firstSeen = (pick) => {
|
|
42
|
+
const seen = /* @__PURE__ */ new Set();
|
|
43
|
+
for (const cell of cells) seen.add(pick(cell));
|
|
44
|
+
return [...seen];
|
|
45
|
+
};
|
|
46
|
+
return {
|
|
47
|
+
columns: explicitColumns ?? firstSeen((cell) => cell.column),
|
|
48
|
+
rows: explicitRows ?? firstSeen((cell) => cell.row)
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** @internal `[min, max]` of the ramp: the non-null extent, overridden by `valueDomain`. */
|
|
52
|
+
function getHeatmapDomain(cells, override) {
|
|
53
|
+
let min = Number.POSITIVE_INFINITY;
|
|
54
|
+
let max = Number.NEGATIVE_INFINITY;
|
|
55
|
+
for (const cell of cells) {
|
|
56
|
+
if (cell.value === null || !Number.isFinite(cell.value)) continue;
|
|
57
|
+
min = Math.min(min, cell.value);
|
|
58
|
+
max = Math.max(max, cell.value);
|
|
59
|
+
}
|
|
60
|
+
if (min > max) {
|
|
61
|
+
min = 0;
|
|
62
|
+
max = 0;
|
|
63
|
+
}
|
|
64
|
+
return [override?.min ?? min, override?.max ?? max];
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* @internal The ramp step of a value: equal intervals over `[min, max]`, clamped to 0–4; every
|
|
68
|
+
* value is step 2 when the domain has no width.
|
|
69
|
+
*/
|
|
70
|
+
function getHeatmapStep(value, [min, max]) {
|
|
71
|
+
if (max === min) return 2;
|
|
72
|
+
return clamp(Math.floor((value - min) / (max - min) * 5), 0, 4);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @internal Left gutter that fits the widest row label (the value gutter's rule, plus one
|
|
76
|
+
* character: row labels are words, whose capitals run wider than the digit estimate).
|
|
77
|
+
*/
|
|
78
|
+
function estimateRowLabelInset(labels) {
|
|
79
|
+
let widest = 0;
|
|
80
|
+
for (const label of labels) widest = Math.max(widest, (label.length + 1) * CAPTION_CHAR_WIDTH_PX);
|
|
81
|
+
const needed = Math.ceil(widest) + VALUE_AXIS_TICK_GAP;
|
|
82
|
+
return clamp(Math.ceil(needed / AUTO_INSET_LEFT_STEP) * AUTO_INSET_LEFT_STEP, MIN_AUTO_INSET_LEFT, 96);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* `count` cells across `length` px: the gap is `HEATMAP_CELL_GAP_RATIO` of the step, rounded and
|
|
86
|
+
* clamped to 1–2px (0 when a cell would drop under 1px); every edge snaps to a whole pixel and the
|
|
87
|
+
* gaps stay equal, so the grid reads as even rules.
|
|
88
|
+
*/
|
|
89
|
+
function layoutCellTrack(count, length) {
|
|
90
|
+
const step = length / count;
|
|
91
|
+
let gap = count > 1 ? clamp(Math.round(step * HEATMAP_CELL_GAP_RATIO), 1, MAX_HEATMAP_CELL_GAP) : 0;
|
|
92
|
+
if (step - gap < 1) gap = 0;
|
|
93
|
+
const pitch = (length + gap) / count;
|
|
94
|
+
const starts = [];
|
|
95
|
+
const sizes = [];
|
|
96
|
+
for (let index = 0; index < count; index += 1) {
|
|
97
|
+
const start = Math.round(index * pitch);
|
|
98
|
+
const end = Math.round((index + 1) * pitch) - gap;
|
|
99
|
+
starts.push(start);
|
|
100
|
+
sizes.push(Math.max(1, end - start));
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
starts,
|
|
104
|
+
sizes,
|
|
105
|
+
step: pitch,
|
|
106
|
+
gap
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
/** @internal Builds a heatmap's cells. */
|
|
110
|
+
function buildHeatmapGeometry({ cells, columns, rows, domain, plotWidth, plotHeight }) {
|
|
111
|
+
const values = /* @__PURE__ */ new Map();
|
|
112
|
+
for (const cell of cells) values.set(`${cell.column}\u0000${cell.row}`, cell.value === null ? null : sanitizeValue(cell.value));
|
|
113
|
+
let hasEmptyCells = false;
|
|
114
|
+
for (const row of rows) for (const column of columns) if ((values.get(`${column}\u0000${row}`) ?? null) === null) hasEmptyCells = true;
|
|
115
|
+
const geometry = {
|
|
116
|
+
cells: [],
|
|
117
|
+
columnStep: 0,
|
|
118
|
+
rowStep: 0,
|
|
119
|
+
columnPositions: [],
|
|
120
|
+
rowPositions: [],
|
|
121
|
+
gapX: 0,
|
|
122
|
+
gapY: 0,
|
|
123
|
+
hasEmptyCells
|
|
124
|
+
};
|
|
125
|
+
if (columns.length === 0 || rows.length === 0 || plotWidth <= 0 || plotHeight <= 0) return geometry;
|
|
126
|
+
const x = layoutCellTrack(columns.length, plotWidth);
|
|
127
|
+
const y = layoutCellTrack(rows.length, plotHeight);
|
|
128
|
+
geometry.columnStep = x.step;
|
|
129
|
+
geometry.rowStep = y.step;
|
|
130
|
+
geometry.gapX = x.gap;
|
|
131
|
+
geometry.gapY = y.gap;
|
|
132
|
+
geometry.columnPositions = x.starts.map((start) => start - x.gap / 2);
|
|
133
|
+
geometry.rowPositions = y.starts.map((start) => start - y.gap / 2);
|
|
134
|
+
rows.forEach((row, rowIndex) => {
|
|
135
|
+
columns.forEach((column, columnIndex) => {
|
|
136
|
+
const value = values.get(`${column}\u0000${row}`) ?? null;
|
|
137
|
+
geometry.cells.push({
|
|
138
|
+
id: `${rowIndex}:${columnIndex}`,
|
|
139
|
+
columnIndex,
|
|
140
|
+
rowIndex,
|
|
141
|
+
column,
|
|
142
|
+
row,
|
|
143
|
+
value,
|
|
144
|
+
step: value === null ? null : getHeatmapStep(value, domain),
|
|
145
|
+
x: x.starts[columnIndex] ?? 0,
|
|
146
|
+
y: y.starts[rowIndex] ?? 0,
|
|
147
|
+
width: x.sizes[columnIndex] ?? 0,
|
|
148
|
+
height: y.sizes[rowIndex] ?? 0
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
return geometry;
|
|
153
|
+
}
|
|
154
|
+
//#endregion
|
|
155
|
+
export { HEATMAP_CELL_RADIUS, HEATMAP_MAX_ASPECT_RATIO, HEATMAP_MIN_ASPECT_RATIO, HEATMAP_STEP_COUNT, HEATMAP_STEP_TO_TOKEN_MAP, buildHeatmapGeometry, estimateRowLabelInset, getHeatmapDomain, getHeatmapLabels, getHeatmapStep };
|