@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
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import Text, { TextWeight } from "../text/Text.js";
|
|
2
|
+
/* empty css */
|
|
3
|
+
import { styled } from "@linaria/react";
|
|
4
|
+
import { forwardRef } from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
//#region src/navigation/Topbar.tsx
|
|
7
|
+
/**
|
|
8
|
+
* The 48px bar across the top of a page: where you are on the left, what you can do on the right.
|
|
9
|
+
* A `<header>` with a bottom hairline and three slots in a row: `leading` (a sidebar toggle, a
|
|
10
|
+
* back button, a brand mark), the main content (`children`: breadcrumbs or the page title) and
|
|
11
|
+
* `actions` at the end (search, the assistant, the account). It owns the height, the rule, the
|
|
12
|
+
* spacing and the left / right split; everything inside is composed from other components. It
|
|
13
|
+
* does not stick, route or collapse. In an app frame it sits above the page's scrolling region.
|
|
14
|
+
*
|
|
15
|
+
* Outside `main`, `article`, `aside`, `nav` and `section` the `<header>` is the page's `banner`
|
|
16
|
+
* landmark, so use one Topbar per page. New in 2.0 (from the rafa prototype).
|
|
17
|
+
*/
|
|
18
|
+
/** The bar: 48px, a bottom hairline, `background.base` (the top of the page, not chrome). */
|
|
19
|
+
var Root = /*#__PURE__*/ styled("header")({
|
|
20
|
+
name: "Root",
|
|
21
|
+
class: "gx-Topbar-r1xyq67l",
|
|
22
|
+
propsAsIs: false
|
|
23
|
+
});
|
|
24
|
+
var Leading = /*#__PURE__*/ styled("div")({
|
|
25
|
+
name: "Leading",
|
|
26
|
+
class: "gx-Topbar-Leading-ly1m7jx",
|
|
27
|
+
propsAsIs: false
|
|
28
|
+
});
|
|
29
|
+
/** Grows to push `actions` to the end; clips a trail that does not fit instead of pushing them out. */
|
|
30
|
+
var Content = /*#__PURE__*/ styled("div")({
|
|
31
|
+
name: "Content",
|
|
32
|
+
class: "gx-Topbar-Content-cmm5l4g",
|
|
33
|
+
propsAsIs: false
|
|
34
|
+
});
|
|
35
|
+
var Actions = /*#__PURE__*/ styled("div")({
|
|
36
|
+
name: "Actions",
|
|
37
|
+
class: "gx-Topbar-Actions-acmt9iy",
|
|
38
|
+
propsAsIs: false
|
|
39
|
+
});
|
|
40
|
+
/** The page bar: `leading`, the title or breadcrumbs, and `actions` at the end. */
|
|
41
|
+
var Topbar = forwardRef(function Topbar({ children, leading, actions, className, style, ...rest }, ref) {
|
|
42
|
+
return /* @__PURE__ */ jsxs(Root, {
|
|
43
|
+
...rest,
|
|
44
|
+
ref,
|
|
45
|
+
className,
|
|
46
|
+
style,
|
|
47
|
+
children: [
|
|
48
|
+
leading && /* @__PURE__ */ jsx(Leading, { children: leading }),
|
|
49
|
+
/* @__PURE__ */ jsx(Content, { children: typeof children === "string" ? /* @__PURE__ */ jsx(Text, {
|
|
50
|
+
as: "span",
|
|
51
|
+
weight: TextWeight.MEDIUM,
|
|
52
|
+
lineClamp: 1,
|
|
53
|
+
shouldTooltipOnOverflow: true,
|
|
54
|
+
children
|
|
55
|
+
}) : children }),
|
|
56
|
+
actions && /* @__PURE__ */ jsx(Actions, { children: actions })
|
|
57
|
+
]
|
|
58
|
+
});
|
|
59
|
+
});
|
|
60
|
+
Topbar.displayName = "Topbar";
|
|
61
|
+
//#endregion
|
|
62
|
+
export { Topbar as default };
|
|
@@ -1,37 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The root of the overlay stack: one store per app and one Escape listener that reaches only the
|
|
3
|
+
* topmost registered overlay. `GalaxyProvider` mounts it, so apps never do; mount it yourself only
|
|
4
|
+
* in a React root that has no `GalaxyProvider`. A nested `OverlayProvider` (a scoped
|
|
5
|
+
* `GalaxyProvider`) reuses the outer stack.
|
|
6
|
+
*
|
|
7
|
+
* `OverlayNode` marks the subtree of an open overlay, so overlays opened inside it stack above it.
|
|
8
|
+
*
|
|
9
|
+
* Both render no element. SSR: the listener attaches in an effect; nothing touches `document` at
|
|
10
|
+
* module scope.
|
|
11
|
+
*/
|
|
12
|
+
import { type ReactNode } from "react";
|
|
13
|
+
export interface OverlayProviderProps {
|
|
14
|
+
/** The app. Mounted by `GalaxyProvider`; mount it yourself only in a React root that has no `GalaxyProvider`. */
|
|
15
|
+
children: ReactNode;
|
|
10
16
|
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
dismissOnOverlayClick?: boolean;
|
|
17
|
+
export interface OverlayNodeProps {
|
|
18
|
+
/** The `overlayId` from this overlay's `useOverlay`. Overlays rendered inside stack above this one. */
|
|
19
|
+
overlayId: string;
|
|
20
|
+
/** The overlay's content (inside its `Portal`). */
|
|
21
|
+
children: ReactNode;
|
|
17
22
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
23
|
+
/** Holds the overlay stack and routes Escape to the topmost overlay. */
|
|
24
|
+
declare function OverlayProvider({ children }: OverlayProviderProps): import("react").JSX.Element;
|
|
25
|
+
declare namespace OverlayProvider {
|
|
26
|
+
var displayName: string;
|
|
21
27
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
28
|
+
/** Marks an open overlay's content, so overlays opened inside it stack above it. */
|
|
29
|
+
export declare function OverlayNode({ overlayId, children }: OverlayNodeProps): import("react").JSX.Element;
|
|
30
|
+
export declare namespace OverlayNode {
|
|
31
|
+
var displayName: string;
|
|
26
32
|
}
|
|
27
|
-
export declare const OverlayContext: import("react").Context<OverlayContextValue | null>;
|
|
28
|
-
/**
|
|
29
|
-
* Coordinates every `Modal` and `Drawer` on the page. Mount it once near the
|
|
30
|
-
* root, above anything that opens an overlay.
|
|
31
|
-
*
|
|
32
|
-
* Renders one shared backdrop for the whole stack and routes Escape to the
|
|
33
|
-
* topmost overlay only, so nesting a modal over a drawer behaves.
|
|
34
|
-
*/
|
|
35
|
-
export declare const OverlayProvider: ({ children }: PropsWithChildren) => import("react").JSX.Element;
|
|
36
33
|
export default OverlayProvider;
|
|
37
|
-
export { getOverlayZIndex, OVERLAY_LAYER_PRIORITY, OVERLAY_Z_INDEX, OVERLAY_Z_INDEX_BASE, OVERLAY_Z_INDEX_STEP, OverlayLayer, } from "./constants";
|
|
@@ -1,99 +1,48 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
import { styled } from "@linaria/react";
|
|
5
|
-
import { createContext, useCallback, useMemo, useRef, useState } from "react";
|
|
6
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
-
import { createPortal } from "react-dom";
|
|
1
|
+
import { OverlayParentContext, OverlayStoreContext, createOverlayStore, isOverlayEscape } from "./useOverlay.js";
|
|
2
|
+
import { useContext, useEffect, useState } from "react";
|
|
3
|
+
import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
|
|
8
4
|
//#region src/overlay/OverlayProvider.tsx
|
|
9
|
-
var OverlayContext = createContext(null);
|
|
10
|
-
var _exp = () => ({ theme }) => theme.color.opacity.bw48;
|
|
11
|
-
var _exp2 = () => ({ isVisible }) => isVisible ? "blur(4px)" : "blur(0px)";
|
|
12
|
-
var _exp3 = () => ({ isVisible }) => isVisible ? 1 : 0;
|
|
13
|
-
var _exp4 = () => ({ isVisible }) => isVisible ? "visible" : "hidden";
|
|
14
|
-
var _exp5 = () => ({ isVisible }) => isVisible ? "backdrop-filter 0.2s ease-out, opacity 0.2s ease-out" : "none";
|
|
15
|
-
var _exp6 = () => ({ $zIndex }) => $zIndex;
|
|
16
|
-
var _exp7 = () => ({ isVisible }) => isVisible ? "auto" : "none";
|
|
17
|
-
var SharedOverlay = withTheme(/*#__PURE__*/ styled("div")({
|
|
18
|
-
name: "SharedOverlay",
|
|
19
|
-
class: "s1hpu3t7",
|
|
20
|
-
propsAsIs: false,
|
|
21
|
-
vars: {
|
|
22
|
-
"s1hpu3t7-0": [_exp()],
|
|
23
|
-
"s1hpu3t7-1": [_exp2()],
|
|
24
|
-
"s1hpu3t7-2": [_exp3()],
|
|
25
|
-
"s1hpu3t7-3": [_exp4()],
|
|
26
|
-
"s1hpu3t7-4": [_exp5()],
|
|
27
|
-
"s1hpu3t7-5": [_exp6()],
|
|
28
|
-
"s1hpu3t7-6": [_exp7()]
|
|
29
|
-
}
|
|
30
|
-
}));
|
|
31
5
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
6
|
+
* The root of the overlay stack: one store per app and one Escape listener that reaches only the
|
|
7
|
+
* topmost registered overlay. `GalaxyProvider` mounts it, so apps never do; mount it yourself only
|
|
8
|
+
* in a React root that has no `GalaxyProvider`. A nested `OverlayProvider` (a scoped
|
|
9
|
+
* `GalaxyProvider`) reuses the outer stack.
|
|
34
10
|
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
11
|
+
* `OverlayNode` marks the subtree of an open overlay, so overlays opened inside it stack above it.
|
|
12
|
+
*
|
|
13
|
+
* Both render no element. SSR: the listener attaches in an effect; nothing touches `document` at
|
|
14
|
+
* module scope.
|
|
37
15
|
*/
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
const
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
}, []);
|
|
67
|
-
const unregister = useCallback((id) => {
|
|
68
|
-
setOverlays((prev) => prev.filter((entry) => entry.id !== id));
|
|
69
|
-
}, []);
|
|
70
|
-
const topmost = useMemo(() => {
|
|
71
|
-
if (overlays.length === 0) return null;
|
|
72
|
-
return overlays.reduce((top, entry) => entry.zIndex > top.zIndex ? entry : top, overlays[0]);
|
|
73
|
-
}, [overlays]);
|
|
74
|
-
const handleOverlayClick = useCallback(() => {
|
|
75
|
-
if (!topmost || !topmost.dismissOnOverlayClick) return;
|
|
76
|
-
topmost.onDismiss();
|
|
77
|
-
}, [topmost]);
|
|
78
|
-
const contextValue = useMemo(() => ({
|
|
79
|
-
register,
|
|
80
|
-
unregister,
|
|
81
|
-
overlays
|
|
82
|
-
}), [
|
|
83
|
-
register,
|
|
84
|
-
unregister,
|
|
85
|
-
overlays
|
|
86
|
-
]);
|
|
87
|
-
const isVisible = !!topmost;
|
|
88
|
-
const backdropZIndex = topmost ? topmost.zIndex - 1 : OVERLAY_Z_INDEX_BASE - 1;
|
|
89
|
-
return /* @__PURE__ */ jsxs(OverlayContext.Provider, {
|
|
90
|
-
value: contextValue,
|
|
91
|
-
children: [children, createPortal(/* @__PURE__ */ jsx(SharedOverlay, {
|
|
92
|
-
isVisible,
|
|
93
|
-
$zIndex: backdropZIndex,
|
|
94
|
-
onClick: handleOverlayClick
|
|
95
|
-
}), document.body)]
|
|
16
|
+
/** Holds the overlay stack and routes Escape to the topmost overlay. */
|
|
17
|
+
function OverlayProvider({ children }) {
|
|
18
|
+
const outerStore = useContext(OverlayStoreContext);
|
|
19
|
+
const [ownStore] = useState(() => outerStore === null ? createOverlayStore() : null);
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
if (ownStore === null) return;
|
|
22
|
+
const handleKeyDown = (event) => {
|
|
23
|
+
if (!isOverlayEscape(event)) return;
|
|
24
|
+
const onEscapeRef = ownStore.getTopmostEscape();
|
|
25
|
+
if (onEscapeRef === null) return;
|
|
26
|
+
event.preventDefault();
|
|
27
|
+
onEscapeRef.current?.();
|
|
28
|
+
};
|
|
29
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
30
|
+
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
31
|
+
}, [ownStore]);
|
|
32
|
+
if (ownStore === null) return /* @__PURE__ */ jsx(Fragment$1, { children });
|
|
33
|
+
return /* @__PURE__ */ jsx(OverlayStoreContext.Provider, {
|
|
34
|
+
value: ownStore,
|
|
35
|
+
children
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
OverlayProvider.displayName = "OverlayProvider";
|
|
39
|
+
/** Marks an open overlay's content, so overlays opened inside it stack above it. */
|
|
40
|
+
function OverlayNode({ overlayId, children }) {
|
|
41
|
+
return /* @__PURE__ */ jsx(OverlayParentContext.Provider, {
|
|
42
|
+
value: overlayId,
|
|
43
|
+
children
|
|
96
44
|
});
|
|
97
|
-
}
|
|
45
|
+
}
|
|
46
|
+
OverlayNode.displayName = "OverlayNode";
|
|
98
47
|
//#endregion
|
|
99
|
-
export {
|
|
48
|
+
export { OverlayNode, OverlayProvider as default };
|
|
@@ -1,18 +1,94 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The stacking and Escape coordinator for everything that floats above the page. An overlay calls
|
|
3
|
+
* `useOverlay` while it is open: the hook registers it in one stack per app (held by
|
|
4
|
+
* `OverlayProvider`, which `GalaxyProvider` mounts) and returns the `zIndex` to render at and
|
|
5
|
+
* whether it is the topmost. The root routes Escape to the topmost overlay only.
|
|
6
|
+
*
|
|
7
|
+
* Order: by layer (`z.dropdown` < `z.drawer` < `z.modal` < `z.tooltip`), then by nesting (an
|
|
8
|
+
* overlay rendered inside another's `OverlayNode` sits above it, in at least its layer), then by
|
|
9
|
+
* the order they opened.
|
|
10
|
+
*
|
|
11
|
+
* The stack renders nothing, moves no focus, draws no backdrop and handles no pointer events.
|
|
12
|
+
*
|
|
13
|
+
* SSR: nothing here touches `window` or `document` at module scope. Registration runs in a layout
|
|
14
|
+
* effect on the client; the server snapshot is the closed state.
|
|
15
|
+
*/
|
|
16
|
+
import { type MutableRefObject } from "react";
|
|
17
|
+
/** The `z` layer an overlay belongs to. Layers never interleave: a higher layer is always above a lower one. */
|
|
18
|
+
export declare enum OverlayLayer {
|
|
19
|
+
/** Anchored panels: Popover, Dropdown, Menu, ContextMenu, SelectInput, DateInput, ColorInput (`z.dropdown`, 1000). */
|
|
20
|
+
DROPDOWN = "DROPDOWN",
|
|
21
|
+
/** Drawers (`z.drawer`, 1100). */
|
|
22
|
+
DRAWER = "DRAWER",
|
|
23
|
+
/** Modals, ConfirmDialog, CommandPalette (`z.modal`, 1200). */
|
|
24
|
+
MODAL = "MODAL",
|
|
25
|
+
/** Tooltips (`z.tooltip`, 1400). */
|
|
26
|
+
TOOLTIP = "TOOLTIP"
|
|
27
|
+
}
|
|
28
|
+
/** Options for `useOverlay`. */
|
|
29
|
+
export interface UseOverlayOptions {
|
|
30
|
+
/** Whether the overlay is open. It is in the stack while `true`. Pass the overlay's own open state. */
|
|
31
|
+
isOpen: boolean;
|
|
32
|
+
/** Which `z` layer it belongs to. Modals always sit above drawers, drawers above dropdowns, tooltips above everything. */
|
|
33
|
+
layer: OverlayLayer;
|
|
34
|
+
/** Called when Escape is pressed while this overlay is the topmost. When omitted, Escape does nothing while it is topmost and does not reach the overlays below. */
|
|
35
|
+
onEscape?: (() => void) | undefined;
|
|
36
|
+
}
|
|
37
|
+
/** What `useOverlay` returns. */
|
|
38
|
+
export interface UseOverlayResult {
|
|
39
|
+
/** The z-index to render at: its layer's base plus its rank in that layer. While closed (or before registration), the base of its own layer. */
|
|
4
40
|
zIndex: number;
|
|
5
|
-
/**
|
|
41
|
+
/** `true` while it is the highest overlay in the stack. `false` while closed. */
|
|
6
42
|
isTopmost: boolean;
|
|
43
|
+
/** This overlay's id in the stack (a `useId()` value). Pass it to `OverlayNode` around the overlay's content. */
|
|
44
|
+
overlayId: string;
|
|
7
45
|
}
|
|
46
|
+
/** One registered overlay's place in the stack. Identity is stable until a value changes. */
|
|
47
|
+
interface OverlaySnapshot {
|
|
48
|
+
zIndex: number;
|
|
49
|
+
isTopmost: boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The per-root stack. Plain JS, created in `OverlayProvider`'s state (never at module scope).
|
|
53
|
+
* @internal Shared with `OverlayProvider`; not part of the public API.
|
|
54
|
+
*/
|
|
55
|
+
export interface OverlayStore {
|
|
56
|
+
register: (id: string, layer: OverlayLayer, parentId: string | null, onEscapeRef: MutableRefObject<(() => void) | undefined>) => void;
|
|
57
|
+
update: (id: string, layer: OverlayLayer, parentId: string | null) => void;
|
|
58
|
+
unregister: (id: string) => void;
|
|
59
|
+
subscribe: (listener: () => void) => () => void;
|
|
60
|
+
getSnapshot: (id: string) => OverlaySnapshot | null;
|
|
61
|
+
/** The topmost entry's Escape callback holder, or `null` while the stack is empty. */
|
|
62
|
+
getTopmostEscape: () => MutableRefObject<(() => void) | undefined> | null;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Creates one stack.
|
|
66
|
+
* @internal Used by `OverlayProvider`.
|
|
67
|
+
*/
|
|
68
|
+
export declare function createOverlayStore(): OverlayStore;
|
|
69
|
+
/**
|
|
70
|
+
* The enclosing root's stack, or `null` outside any `OverlayProvider`.
|
|
71
|
+
* @internal Provided by `OverlayProvider`.
|
|
72
|
+
*/
|
|
73
|
+
export declare const OverlayStoreContext: import("react").Context<OverlayStore | null>;
|
|
74
|
+
/**
|
|
75
|
+
* The `overlayId` of the nearest enclosing `OverlayNode`, or `null`.
|
|
76
|
+
* @internal Provided by `OverlayNode`.
|
|
77
|
+
*/
|
|
78
|
+
export declare const OverlayParentContext: import("react").Context<string | null>;
|
|
79
|
+
/**
|
|
80
|
+
* Whether an Escape keydown should reach an overlay: not already handled, not mid IME
|
|
81
|
+
* composition, not a key repeat (holding Escape closes one layer, not all of them).
|
|
82
|
+
* @internal Shared with `OverlayProvider`.
|
|
83
|
+
*/
|
|
84
|
+
export declare function isOverlayEscape(event: KeyboardEvent): boolean;
|
|
8
85
|
/**
|
|
9
|
-
* Registers an overlay in the
|
|
10
|
-
*
|
|
11
|
-
* building your own overlay that must interleave correctly with theirs.
|
|
86
|
+
* Registers an overlay in the app's stack while `isOpen`, and returns its `zIndex`, whether it is
|
|
87
|
+
* the topmost, and the `overlayId` to pass to `OverlayNode`.
|
|
12
88
|
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
89
|
+
* @example
|
|
90
|
+
* const { zIndex, overlayId } = useOverlay({ isOpen, layer: OverlayLayer.DROPDOWN, onEscape: () => setIsOpen(false) });
|
|
91
|
+
* <Portal><OverlayNode overlayId={overlayId}><Panel style={{ "--gx-popover-z": zIndex }}>…</Panel></OverlayNode></Portal>
|
|
16
92
|
*/
|
|
17
|
-
export declare
|
|
18
|
-
export
|
|
93
|
+
export declare function useOverlay({ isOpen, layer, onEscape }: UseOverlayOptions): UseOverlayResult;
|
|
94
|
+
export {};
|
|
@@ -1,55 +1,232 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { useContext, useEffect, useId } from "react";
|
|
1
|
+
import { useIsomorphicLayoutEffect } from "../hooks/useIsomorphicLayoutEffect.js";
|
|
2
|
+
import { Z } from "../theme/tokens/scales.js";
|
|
3
|
+
import { createContext, useContext, useEffect, useId, useRef, useSyncExternalStore } from "react";
|
|
4
4
|
//#region src/overlay/useOverlay.ts
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
* it
|
|
8
|
-
*
|
|
6
|
+
* The stacking and Escape coordinator for everything that floats above the page. An overlay calls
|
|
7
|
+
* `useOverlay` while it is open: the hook registers it in one stack per app (held by
|
|
8
|
+
* `OverlayProvider`, which `GalaxyProvider` mounts) and returns the `zIndex` to render at and
|
|
9
|
+
* whether it is the topmost. The root routes Escape to the topmost overlay only.
|
|
9
10
|
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* Order: by layer (`z.dropdown` < `z.drawer` < `z.modal` < `z.tooltip`), then by nesting (an
|
|
12
|
+
* overlay rendered inside another's `OverlayNode` sits above it, in at least its layer), then by
|
|
13
|
+
* the order they opened.
|
|
14
|
+
*
|
|
15
|
+
* The stack renders nothing, moves no focus, draws no backdrop and handles no pointer events.
|
|
16
|
+
*
|
|
17
|
+
* SSR: nothing here touches `window` or `document` at module scope. Registration runs in a layout
|
|
18
|
+
* effect on the client; the server snapshot is the closed state.
|
|
13
19
|
*/
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
20
|
+
/** The `z` layer an overlay belongs to. Layers never interleave: a higher layer is always above a lower one. */
|
|
21
|
+
var OverlayLayer = /* @__PURE__ */ function(OverlayLayer) {
|
|
22
|
+
/** Anchored panels: Popover, Dropdown, Menu, ContextMenu, SelectInput, DateInput, ColorInput (`z.dropdown`, 1000). */
|
|
23
|
+
OverlayLayer["DROPDOWN"] = "DROPDOWN";
|
|
24
|
+
/** Drawers (`z.drawer`, 1100). */
|
|
25
|
+
OverlayLayer["DRAWER"] = "DRAWER";
|
|
26
|
+
/** Modals, ConfirmDialog, CommandPalette (`z.modal`, 1200). */
|
|
27
|
+
OverlayLayer["MODAL"] = "MODAL";
|
|
28
|
+
/** Tooltips (`z.tooltip`, 1400). */
|
|
29
|
+
OverlayLayer["TOOLTIP"] = "TOOLTIP";
|
|
30
|
+
return OverlayLayer;
|
|
31
|
+
}({});
|
|
32
|
+
/** Layer → its base z-index, read as numbers from the `z` scale (logic, not CSS). */
|
|
33
|
+
var OVERLAY_LAYER_TO_Z_MAP = {
|
|
34
|
+
["DROPDOWN"]: Z.dropdown,
|
|
35
|
+
["DRAWER"]: Z.drawer,
|
|
36
|
+
["MODAL"]: Z.modal,
|
|
37
|
+
["TOOLTIP"]: Z.tooltip
|
|
38
|
+
};
|
|
39
|
+
/** The highest rank within a layer. The `z` steps are 100 apart, so layers never interleave. */
|
|
40
|
+
var OVERLAY_MAX_RANK = 99;
|
|
41
|
+
/**
|
|
42
|
+
* Creates one stack.
|
|
43
|
+
* @internal Used by `OverlayProvider`.
|
|
44
|
+
*/
|
|
45
|
+
function createOverlayStore() {
|
|
46
|
+
const entries = /* @__PURE__ */ new Map();
|
|
47
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
48
|
+
let snapshots = /* @__PURE__ */ new Map();
|
|
49
|
+
let topmostId = null;
|
|
50
|
+
let sequenceCounter = 0;
|
|
51
|
+
/** Effective layer, sort key and depth, following registered parents (memoized per pass). */
|
|
52
|
+
const computeOrder = () => {
|
|
53
|
+
const memo = /* @__PURE__ */ new Map();
|
|
54
|
+
const resolve = (id, entry) => {
|
|
55
|
+
const cached = memo.get(id);
|
|
56
|
+
if (cached !== void 0) return cached;
|
|
57
|
+
const ownZ = OVERLAY_LAYER_TO_Z_MAP[entry.layer];
|
|
58
|
+
const parent = entry.parentId === null ? void 0 : entries.get(entry.parentId);
|
|
59
|
+
let order;
|
|
60
|
+
if (entry.parentId !== null && parent !== void 0) {
|
|
61
|
+
const parentOrder = resolve(entry.parentId, parent);
|
|
62
|
+
order = {
|
|
63
|
+
id,
|
|
64
|
+
layerZ: Math.max(ownZ, parentOrder.layerZ),
|
|
65
|
+
key: Math.max(entry.sequence, parentOrder.key),
|
|
66
|
+
depth: parentOrder.depth + 1,
|
|
67
|
+
sequence: entry.sequence
|
|
68
|
+
};
|
|
69
|
+
} else order = {
|
|
70
|
+
id,
|
|
71
|
+
layerZ: ownZ,
|
|
72
|
+
key: entry.sequence,
|
|
73
|
+
depth: 0,
|
|
74
|
+
sequence: entry.sequence
|
|
75
|
+
};
|
|
76
|
+
memo.set(id, order);
|
|
77
|
+
return order;
|
|
30
78
|
};
|
|
79
|
+
for (const [id, entry] of entries) resolve(id, entry);
|
|
80
|
+
return [...memo.values()].sort((a, b) => a.layerZ - b.layerZ || a.key - b.key || a.depth - b.depth || a.sequence - b.sequence);
|
|
81
|
+
};
|
|
82
|
+
/** Recomputes every snapshot, keeps unchanged ones by identity, and notifies on any change. */
|
|
83
|
+
const recompute = () => {
|
|
84
|
+
const sorted = computeOrder();
|
|
85
|
+
const next = /* @__PURE__ */ new Map();
|
|
86
|
+
const last = sorted[sorted.length - 1];
|
|
87
|
+
topmostId = last === void 0 ? null : last.id;
|
|
88
|
+
let rank = 0;
|
|
89
|
+
let previousLayerZ = null;
|
|
90
|
+
for (const order of sorted) {
|
|
91
|
+
rank = order.layerZ === previousLayerZ ? rank + 1 : 0;
|
|
92
|
+
previousLayerZ = order.layerZ;
|
|
93
|
+
const zIndex = order.layerZ + Math.min(rank, OVERLAY_MAX_RANK);
|
|
94
|
+
const isTopmost = order.id === topmostId;
|
|
95
|
+
const previous = snapshots.get(order.id);
|
|
96
|
+
next.set(order.id, previous !== void 0 && previous.zIndex === zIndex && previous.isTopmost === isTopmost ? previous : {
|
|
97
|
+
zIndex,
|
|
98
|
+
isTopmost
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
snapshots = next;
|
|
102
|
+
for (const listener of listeners) listener();
|
|
103
|
+
};
|
|
104
|
+
return {
|
|
105
|
+
register(id, layer, parentId, onEscapeRef) {
|
|
106
|
+
sequenceCounter += 1;
|
|
107
|
+
entries.set(id, {
|
|
108
|
+
layer,
|
|
109
|
+
parentId,
|
|
110
|
+
sequence: sequenceCounter,
|
|
111
|
+
onEscapeRef
|
|
112
|
+
});
|
|
113
|
+
recompute();
|
|
114
|
+
},
|
|
115
|
+
update(id, layer, parentId) {
|
|
116
|
+
const entry = entries.get(id);
|
|
117
|
+
if (entry === void 0 || entry.layer === layer && entry.parentId === parentId) return;
|
|
118
|
+
entries.set(id, {
|
|
119
|
+
...entry,
|
|
120
|
+
layer,
|
|
121
|
+
parentId
|
|
122
|
+
});
|
|
123
|
+
recompute();
|
|
124
|
+
},
|
|
125
|
+
unregister(id) {
|
|
126
|
+
if (!entries.delete(id)) return;
|
|
127
|
+
recompute();
|
|
128
|
+
},
|
|
129
|
+
subscribe(listener) {
|
|
130
|
+
listeners.add(listener);
|
|
131
|
+
return () => {
|
|
132
|
+
listeners.delete(listener);
|
|
133
|
+
};
|
|
134
|
+
},
|
|
135
|
+
getSnapshot(id) {
|
|
136
|
+
return snapshots.get(id) ?? null;
|
|
137
|
+
},
|
|
138
|
+
getTopmostEscape() {
|
|
139
|
+
if (topmostId === null) return null;
|
|
140
|
+
return entries.get(topmostId)?.onEscapeRef ?? null;
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* The enclosing root's stack, or `null` outside any `OverlayProvider`.
|
|
146
|
+
* @internal Provided by `OverlayProvider`.
|
|
147
|
+
*/
|
|
148
|
+
var OverlayStoreContext = createContext(null);
|
|
149
|
+
/**
|
|
150
|
+
* The `overlayId` of the nearest enclosing `OverlayNode`, or `null`.
|
|
151
|
+
* @internal Provided by `OverlayNode`.
|
|
152
|
+
*/
|
|
153
|
+
var OverlayParentContext = createContext(null);
|
|
154
|
+
/**
|
|
155
|
+
* Whether an Escape keydown should reach an overlay: not already handled, not mid IME
|
|
156
|
+
* composition, not a key repeat (holding Escape closes one layer, not all of them).
|
|
157
|
+
* @internal Shared with `OverlayProvider`.
|
|
158
|
+
*/
|
|
159
|
+
function isOverlayEscape(event) {
|
|
160
|
+
return event.key === "Escape" && !event.defaultPrevented && !event.isComposing && !event.repeat;
|
|
161
|
+
}
|
|
162
|
+
/** No root: there is nothing to subscribe to. */
|
|
163
|
+
var subscribeToNothing = () => () => {};
|
|
164
|
+
var getNoSnapshot = () => null;
|
|
165
|
+
/**
|
|
166
|
+
* Registers an overlay in the app's stack while `isOpen`, and returns its `zIndex`, whether it is
|
|
167
|
+
* the topmost, and the `overlayId` to pass to `OverlayNode`.
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* const { zIndex, overlayId } = useOverlay({ isOpen, layer: OverlayLayer.DROPDOWN, onEscape: () => setIsOpen(false) });
|
|
171
|
+
* <Portal><OverlayNode overlayId={overlayId}><Panel style={{ "--gx-popover-z": zIndex }}>…</Panel></OverlayNode></Portal>
|
|
172
|
+
*/
|
|
173
|
+
function useOverlay({ isOpen, layer, onEscape }) {
|
|
174
|
+
const store = useContext(OverlayStoreContext);
|
|
175
|
+
const parentId = useContext(OverlayParentContext);
|
|
176
|
+
const overlayId = useId();
|
|
177
|
+
const onEscapeRef = useRef(onEscape);
|
|
178
|
+
onEscapeRef.current = onEscape;
|
|
179
|
+
const placementRef = useRef({
|
|
180
|
+
layer,
|
|
181
|
+
parentId
|
|
182
|
+
});
|
|
183
|
+
placementRef.current = {
|
|
184
|
+
layer,
|
|
185
|
+
parentId
|
|
186
|
+
};
|
|
187
|
+
useIsomorphicLayoutEffect(() => {
|
|
188
|
+
if (store === null || !isOpen) return;
|
|
189
|
+
store.register(overlayId, placementRef.current.layer, placementRef.current.parentId, onEscapeRef);
|
|
190
|
+
return () => store.unregister(overlayId);
|
|
191
|
+
}, [
|
|
192
|
+
store,
|
|
193
|
+
isOpen,
|
|
194
|
+
overlayId
|
|
195
|
+
]);
|
|
196
|
+
useIsomorphicLayoutEffect(() => {
|
|
197
|
+
if (store === null || !isOpen) return;
|
|
198
|
+
store.update(overlayId, layer, parentId);
|
|
31
199
|
}, [
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
200
|
+
store,
|
|
201
|
+
isOpen,
|
|
202
|
+
overlayId,
|
|
35
203
|
layer,
|
|
36
|
-
|
|
37
|
-
register,
|
|
38
|
-
unregister
|
|
204
|
+
parentId
|
|
39
205
|
]);
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
return {
|
|
45
|
-
zIndex: entry.zIndex,
|
|
46
|
-
isTopmost: entry.zIndex === maxZIndex
|
|
206
|
+
useEffect(() => {
|
|
207
|
+
if (store !== null || !isOpen) return;
|
|
208
|
+
const handleKeyDown = (event) => {
|
|
209
|
+
if (isOverlayEscape(event)) onEscapeRef.current?.();
|
|
47
210
|
};
|
|
48
|
-
|
|
211
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
212
|
+
return () => document.removeEventListener("keydown", handleKeyDown);
|
|
213
|
+
}, [store, isOpen]);
|
|
214
|
+
const snapshot = useSyncExternalStore(store === null ? subscribeToNothing : store.subscribe, () => store === null ? null : store.getSnapshot(overlayId), getNoSnapshot);
|
|
215
|
+
if (store === null) return {
|
|
216
|
+
zIndex: OVERLAY_LAYER_TO_Z_MAP[layer],
|
|
217
|
+
isTopmost: isOpen,
|
|
218
|
+
overlayId
|
|
219
|
+
};
|
|
220
|
+
if (snapshot === null || !isOpen) return {
|
|
221
|
+
zIndex: OVERLAY_LAYER_TO_Z_MAP[layer],
|
|
222
|
+
isTopmost: false,
|
|
223
|
+
overlayId
|
|
224
|
+
};
|
|
49
225
|
return {
|
|
50
|
-
zIndex:
|
|
51
|
-
isTopmost:
|
|
226
|
+
zIndex: snapshot.zIndex,
|
|
227
|
+
isTopmost: snapshot.isTopmost,
|
|
228
|
+
overlayId
|
|
52
229
|
};
|
|
53
|
-
}
|
|
230
|
+
}
|
|
54
231
|
//#endregion
|
|
55
|
-
export {
|
|
232
|
+
export { OverlayLayer, OverlayParentContext, OverlayStoreContext, createOverlayStore, isOverlayEscape, useOverlay };
|