@galaxy-io/dls 1.6.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -50
- package/biome/index.json +74 -0
- package/biome/plugins/no-hex-literal.grit +20 -0
- package/biome/plugins/no-inline-style.grit +13 -0
- package/biome/plugins/no-margin.grit +9 -0
- package/biome/plugins/warn/no-hex-literal.grit +23 -0
- package/biome/plugins/warn/no-inline-style.grit +13 -0
- package/biome/plugins/warn/no-margin.grit +9 -0
- package/dist/a11y/FocusScope.d.ts +44 -0
- package/dist/a11y/FocusScope.js +229 -0
- package/dist/a11y/VisuallyHidden.d.ts +21 -0
- package/dist/a11y/VisuallyHidden.js +30 -0
- package/dist/avatar/Avatar.d.ts +56 -14
- package/dist/avatar/Avatar.js +250 -96
- package/dist/avatar/AvatarGroup.d.ts +43 -0
- package/dist/avatar/AvatarGroup.js +153 -0
- package/dist/backgrounds/GridBackground.d.ts +48 -0
- package/dist/backgrounds/GridBackground.js +146 -0
- package/dist/beacons/Beacon.d.ts +86 -22
- package/dist/beacons/Beacon.js +170 -47
- package/dist/brand/GalaxyFilamentWordmark.d.ts +30 -0
- package/dist/brand/GalaxyFilamentWordmark.js +39 -0
- package/dist/brand/GalaxyLogomark.d.ts +26 -0
- package/dist/brand/GalaxyLogomark.js +41 -0
- package/dist/brand/GalaxyLogomarkAnimation.d.ts +36 -0
- package/dist/brand/GalaxyLogomarkAnimation.js +107 -0
- package/dist/brand/GalaxyWordmark.d.ts +30 -0
- package/dist/brand/GalaxyWordmark.js +63 -0
- package/dist/brand/assets/galaxy-logomark-animation.js +136678 -0
- package/dist/brand/brandMark.d.ts +26 -0
- package/dist/brand/brandMark.js +35 -0
- package/dist/buttons/Button.d.ts +148 -59
- package/dist/buttons/Button.js +437 -227
- package/dist/buttons/ButtonGroup.d.ts +38 -0
- package/dist/buttons/ButtonGroup.js +68 -0
- package/dist/buttons/CopyButton.d.ts +77 -0
- package/dist/buttons/CopyButton.js +65 -0
- package/dist/charts/AreaChart.d.ts +49 -0
- package/dist/charts/AreaChart.js +31 -0
- package/dist/charts/BarChart.d.ts +54 -67
- package/dist/charts/BarChart.js +136 -116
- package/dist/charts/ChartAxis.d.ts +35 -40
- package/dist/charts/ChartAxis.js +114 -90
- package/dist/charts/ChartCategoryTargets.d.ts +12 -26
- package/dist/charts/ChartCategoryTargets.js +32 -20
- package/dist/charts/ChartFrame.d.ts +69 -116
- package/dist/charts/ChartFrame.js +253 -119
- package/dist/charts/ChartGroupProvider.d.ts +30 -41
- package/dist/charts/ChartGroupProvider.js +20 -7
- package/dist/charts/ChartLegend.d.ts +27 -48
- package/dist/charts/ChartLegend.js +206 -125
- package/dist/charts/ChartMarkTargets.d.ts +12 -28
- package/dist/charts/ChartMarkTargets.js +33 -20
- package/dist/charts/ChartPrimitives.d.ts +50 -305
- package/dist/charts/ChartPrimitives.js +65 -413
- package/dist/charts/ChartTooltip.d.ts +20 -26
- package/dist/charts/ChartTooltip.js +77 -40
- package/dist/charts/Heatmap.d.ts +35 -0
- package/dist/charts/Heatmap.js +295 -0
- package/dist/charts/LineChart.d.ts +54 -47
- package/dist/charts/LineChart.js +159 -117
- package/dist/charts/PieChart.d.ts +32 -53
- package/dist/charts/PieChart.js +149 -135
- package/dist/charts/Sparkline.d.ts +107 -0
- package/dist/charts/Sparkline.js +244 -0
- package/dist/charts/StatChart.d.ts +37 -13
- package/dist/charts/StatChart.js +82 -35
- package/dist/charts/barChartGeometry.d.ts +138 -86
- package/dist/charts/barChartGeometry.js +122 -101
- package/dist/charts/barChartLegend.d.ts +14 -18
- package/dist/charts/barChartLegend.js +18 -13
- package/dist/charts/chartFormat.d.ts +12 -18
- package/dist/charts/chartFormat.js +20 -52
- package/dist/charts/chartPalette.d.ts +33 -0
- package/dist/charts/chartPalette.js +68 -0
- package/dist/charts/chartScales.d.ts +41 -108
- package/dist/charts/chartScales.js +62 -128
- package/dist/charts/constants.d.ts +96 -256
- package/dist/charts/constants.js +105 -275
- package/dist/charts/heatmapGeometry.d.ts +95 -0
- package/dist/charts/heatmapGeometry.js +155 -0
- package/dist/charts/lineChartGeometry.d.ts +108 -58
- package/dist/charts/lineChartGeometry.js +120 -78
- package/dist/charts/pieChartGeometry.d.ts +66 -40
- package/dist/charts/pieChartGeometry.js +68 -38
- package/dist/charts/types.d.ts +197 -466
- package/dist/charts/types.js +55 -144
- package/dist/charts/useCartesianChartLayout.d.ts +28 -59
- package/dist/charts/useCartesianChartLayout.js +47 -32
- package/dist/charts/useChartDimensions.d.ts +19 -40
- package/dist/charts/useChartDimensions.js +40 -56
- package/dist/charts/useChartFormatters.d.ts +6 -15
- package/dist/charts/useChartFormatters.js +4 -9
- package/dist/charts/useChartInteraction.d.ts +47 -116
- package/dist/charts/useChartInteraction.js +95 -71
- package/dist/charts/useChartTooltipPosition.d.ts +29 -39
- package/dist/charts/useChartTooltipPosition.js +14 -5
- package/dist/charts/useSeriesColorResolver.d.ts +11 -33
- package/dist/charts/useSeriesColorResolver.js +19 -12
- package/dist/chips/Chip.d.ts +155 -44
- package/dist/chips/Chip.js +329 -155
- package/dist/chips/ChipGroup.d.ts +53 -0
- package/dist/chips/ChipGroup.js +98 -0
- package/dist/drawer/Drawer.d.ts +81 -17
- package/dist/drawer/Drawer.js +370 -65
- package/dist/dropdown/Dropdown.d.ts +80 -63
- package/dist/dropdown/Dropdown.js +127 -129
- package/dist/editor/CodeEditor.d.ts +119 -40
- package/dist/editor/CodeEditor.js +490 -400
- package/dist/editor/CodeEditorReactWidget.d.ts +20 -17
- package/dist/editor/CodeEditorReactWidget.js +28 -21
- package/dist/feedback/Alert.d.ts +49 -0
- package/dist/feedback/Alert.js +172 -0
- package/dist/feedback/EmptyState.d.ts +39 -0
- package/dist/feedback/EmptyState.js +109 -0
- package/dist/feedback/ProgressBar.d.ts +125 -0
- package/dist/feedback/ProgressBar.js +183 -0
- package/dist/feedback/ProgressCircle.d.ts +99 -0
- package/dist/feedback/ProgressCircle.js +187 -0
- package/dist/feedback/Skeleton.d.ts +69 -0
- package/dist/feedback/Skeleton.js +130 -0
- package/dist/feedback/Spinner.d.ts +63 -0
- package/dist/feedback/Spinner.js +141 -0
- package/dist/fonts.css +70 -0
- package/dist/hooks/internal/useIsClient.d.ts +2 -0
- package/dist/hooks/internal/useIsClient.js +14 -0
- package/dist/hooks/useClipboard.d.ts +19 -0
- package/dist/hooks/useClipboard.js +45 -0
- package/dist/hooks/useControlledOpenState.d.ts +21 -0
- package/dist/hooks/useControlledOpenState.js +19 -0
- package/dist/hooks/useControlledState.d.ts +19 -0
- package/dist/hooks/useControlledState.js +22 -0
- package/dist/hooks/useDebouncedValue.d.ts +14 -0
- package/dist/hooks/useDebouncedValue.js +33 -0
- package/dist/hooks/useDisclosure.d.ts +26 -0
- package/dist/hooks/useDisclosure.js +36 -0
- package/dist/hooks/useDismiss.d.ts +23 -27
- package/dist/hooks/useDismiss.js +39 -27
- package/dist/hooks/useElementClientSize.d.ts +10 -10
- package/dist/hooks/useElementClientSize.js +8 -11
- package/dist/hooks/useElementWidth.d.ts +6 -13
- package/dist/hooks/useElementWidth.js +6 -14
- package/dist/hooks/useField.d.ts +47 -0
- package/dist/hooks/useField.js +40 -0
- package/dist/hooks/useHotkey.d.ts +77 -0
- package/dist/hooks/useHotkey.js +246 -0
- package/dist/hooks/useIsMac.d.ts +12 -0
- package/dist/hooks/useIsMac.js +27 -0
- package/dist/hooks/useIsomorphicLayoutEffect.d.ts +17 -0
- package/dist/hooks/useIsomorphicLayoutEffect.js +20 -0
- package/dist/hooks/useLocalStorage.d.ts +28 -0
- package/dist/hooks/useLocalStorage.js +145 -0
- package/dist/hooks/useMediaQuery.d.ts +11 -0
- package/dist/hooks/useMediaQuery.js +23 -0
- package/dist/hooks/usePrefersReducedMotion.d.ts +12 -0
- package/dist/hooks/usePrefersReducedMotion.js +25 -0
- package/dist/hooks/useResize.d.ts +42 -62
- package/dist/hooks/useResize.js +43 -31
- package/dist/icons/Icon.d.ts +64 -37
- package/dist/icons/Icon.js +96 -37
- package/dist/icons/internal/IconSlot.d.ts +10 -0
- package/dist/icons/internal/IconSlot.js +32 -0
- package/dist/inputs/CheckboxGroup.d.ts +115 -0
- package/dist/inputs/CheckboxGroup.js +183 -0
- package/dist/inputs/CheckboxInput.d.ts +98 -28
- package/dist/inputs/CheckboxInput.js +218 -88
- package/dist/inputs/ColorInput.d.ts +115 -29
- package/dist/inputs/ColorInput.js +748 -326
- package/dist/inputs/CopyInput.d.ts +49 -20
- package/dist/inputs/CopyInput.js +57 -49
- package/dist/inputs/CronInput.d.ts +94 -0
- package/dist/inputs/CronInput.js +618 -0
- package/dist/inputs/DateInput.d.ts +175 -28
- package/dist/inputs/DateInput.js +1109 -451
- package/dist/inputs/DurationInput.d.ts +101 -0
- package/dist/inputs/DurationInput.js +441 -0
- package/dist/inputs/Field.d.ts +75 -0
- package/dist/inputs/Field.js +247 -0
- package/dist/inputs/Fieldset.d.ts +53 -0
- package/dist/inputs/Fieldset.js +149 -0
- package/dist/inputs/FileInput.d.ts +110 -0
- package/dist/inputs/FileInput.js +476 -0
- package/dist/inputs/Input.d.ts +148 -187
- package/dist/inputs/Input.js +339 -259
- package/dist/inputs/KeyValueInput.d.ts +120 -0
- package/dist/inputs/KeyValueInput.js +383 -0
- package/dist/inputs/MultiSelectInput.d.ts +165 -54
- package/dist/inputs/MultiSelectInput.js +175 -559
- package/dist/inputs/NumberInput.d.ts +65 -9
- package/dist/inputs/NumberInput.js +197 -40
- package/dist/inputs/PasswordInput.d.ts +17 -12
- package/dist/inputs/PasswordInput.js +33 -33
- package/dist/inputs/PinInput.d.ts +117 -0
- package/dist/inputs/PinInput.js +364 -0
- package/dist/inputs/RadioGroup.d.ts +115 -0
- package/dist/inputs/RadioGroup.js +179 -0
- package/dist/inputs/RadioInput.d.ts +87 -24
- package/dist/inputs/RadioInput.js +182 -95
- package/dist/inputs/SearchInput.d.ts +66 -0
- package/dist/inputs/SearchInput.js +156 -0
- package/dist/inputs/SelectInput.d.ts +195 -55
- package/dist/inputs/SelectInput.js +1308 -446
- package/dist/inputs/SliderInput.d.ts +150 -30
- package/dist/inputs/SliderInput.js +441 -186
- package/dist/inputs/SwitchInput.d.ts +109 -0
- package/dist/inputs/SwitchInput.js +248 -0
- package/dist/inputs/TagInput.d.ts +117 -0
- package/dist/inputs/TagInput.js +408 -0
- package/dist/inputs/TextAreaInput.d.ts +146 -44
- package/dist/inputs/TextAreaInput.js +292 -198
- package/dist/inputs/TextInput.d.ts +4 -13
- package/dist/inputs/TextInput.js +13 -48
- package/dist/inputs/ToggleInput.d.ts +120 -22
- package/dist/inputs/ToggleInput.js +262 -116
- package/dist/inputs/internal/bareField.d.ts +18 -0
- package/dist/inputs/internal/bareField.js +38 -0
- package/dist/inputs/internal/devWarn.d.ts +7 -0
- package/dist/inputs/internal/devWarn.js +30 -0
- package/dist/inputs/internal/fieldFrame.d.ts +34 -0
- package/dist/inputs/internal/fieldFrame.js +64 -0
- package/dist/inputs/internal/fieldWiring.d.ts +50 -0
- package/dist/inputs/internal/fieldWiring.js +38 -0
- package/dist/inputs/internal/innerButton.d.ts +2 -0
- package/dist/inputs/internal/innerButton.js +24 -0
- package/dist/inputs/internal/ownField.d.ts +45 -0
- package/dist/inputs/internal/ownField.js +58 -0
- package/dist/inputs/internal/predicates.d.ts +9 -0
- package/dist/inputs/internal/predicates.js +11 -0
- package/dist/inputs/internal/useComboboxPopover.d.ts +46 -0
- package/dist/inputs/internal/useComboboxPopover.js +92 -0
- package/dist/json/JsonViewer.d.ts +62 -0
- package/dist/json/JsonViewer.js +483 -0
- package/dist/layout/Box.d.ts +87 -0
- package/dist/layout/Box.js +109 -0
- package/dist/layout/Divider.d.ts +25 -0
- package/dist/layout/Divider.js +70 -0
- package/dist/layout/Flex.d.ts +139 -0
- package/dist/layout/Flex.js +165 -0
- package/dist/layout/FlexItem.d.ts +72 -0
- package/dist/layout/FlexItem.js +84 -0
- package/dist/layout/Grid.d.ts +140 -0
- package/dist/layout/Grid.js +178 -0
- package/dist/layout/Portal.d.ts +29 -0
- package/dist/layout/Portal.js +27 -0
- package/dist/layout/ResizablePanels.d.ts +88 -0
- package/dist/layout/ResizablePanels.js +198 -0
- package/dist/layout/ResizeHandle.d.ts +48 -0
- package/dist/layout/ResizeHandle.js +143 -0
- package/dist/layout/ScrollArea.d.ts +30 -0
- package/dist/layout/ScrollArea.js +138 -0
- package/dist/links/Link.d.ts +101 -1
- package/dist/links/Link.js +166 -4
- package/dist/lists/BulletedList.d.ts +25 -7
- package/dist/lists/BulletedList.js +72 -27
- package/dist/lists/DescriptionList.d.ts +91 -0
- package/dist/lists/DescriptionList.js +147 -0
- package/dist/menu/ContextMenu.d.ts +64 -0
- package/dist/menu/ContextMenu.js +34 -0
- package/dist/menu/Menu.d.ts +280 -0
- package/dist/menu/Menu.js +1003 -0
- package/dist/modal/ConfirmDialog.d.ts +55 -0
- package/dist/modal/ConfirmDialog.js +151 -0
- package/dist/modal/Modal.d.ts +64 -14
- package/dist/modal/Modal.js +189 -48
- package/dist/navigation/Breadcrumbs.d.ts +65 -0
- package/dist/navigation/Breadcrumbs.js +243 -0
- package/dist/navigation/CommandPalette.d.ts +83 -0
- package/dist/navigation/CommandPalette.js +509 -0
- package/dist/navigation/Pagination.d.ts +87 -0
- package/dist/navigation/Pagination.js +300 -0
- package/dist/navigation/SidebarNav.d.ts +107 -0
- package/dist/navigation/SidebarNav.js +341 -0
- package/dist/navigation/Stepper.d.ts +52 -0
- package/dist/navigation/Stepper.js +207 -0
- package/dist/navigation/Tabs.d.ts +113 -0
- package/dist/navigation/Tabs.js +543 -0
- package/dist/navigation/Topbar.d.ts +20 -0
- package/dist/navigation/Topbar.js +62 -0
- package/dist/overlay/OverlayProvider.d.ts +28 -32
- package/dist/overlay/OverlayProvider.js +42 -93
- package/dist/overlay/useOverlay.d.ts +88 -12
- package/dist/overlay/useOverlay.js +220 -43
- package/dist/overlays/Popover.d.ts +114 -0
- package/dist/overlays/Popover.js +389 -0
- package/dist/shapes/Circle.d.ts +84 -8
- package/dist/shapes/Circle.js +122 -20
- package/dist/shapes/Square.d.ts +84 -8
- package/dist/shapes/Square.js +123 -20
- package/dist/styles/mixins.d.ts +35 -0
- package/dist/styles/mixins.js +60 -0
- package/dist/styles.css +1 -202
- package/dist/table/InfiniteSpreadsheet.d.ts +140 -10
- package/dist/table/InfiniteSpreadsheet.js +762 -225
- package/dist/table/InfiniteTable.d.ts +116 -14
- package/dist/table/InfiniteTable.js +287 -429
- package/dist/table/SpreadsheetCellEditor.d.ts +54 -6
- package/dist/table/SpreadsheetCellEditor.js +163 -84
- package/dist/table/TableCore.d.ts +252 -0
- package/dist/table/TableCore.js +1077 -0
- package/dist/table/VirtualizedInfiniteTable.d.ts +104 -14
- package/dist/table/VirtualizedInfiniteTable.js +280 -219
- package/dist/table/types.d.ts +66 -244
- package/dist/table/types.js +0 -51
- package/dist/table/useInfiniteScrollSentinel.d.ts +25 -21
- package/dist/table/useInfiniteScrollSentinel.js +38 -30
- package/dist/table/useSpreadsheetCellNavigation.d.ts +44 -0
- package/dist/table/useSpreadsheetCellNavigation.js +141 -0
- package/dist/table/useTableColumnLayout.d.ts +90 -25
- package/dist/table/useTableColumnLayout.js +255 -50
- package/dist/table/useTableKeyboardNavigation.d.ts +32 -21
- package/dist/table/useTableKeyboardNavigation.js +95 -71
- package/dist/table/useTableRowSelection.d.ts +24 -25
- package/dist/table/useTableRowSelection.js +57 -84
- package/dist/table/useTableVirtualizer.d.ts +20 -0
- package/dist/table/useTableVirtualizer.js +48 -0
- package/dist/text/Bold.d.ts +5 -6
- package/dist/text/Bold.js +16 -15
- package/dist/text/Code.d.ts +5 -6
- package/dist/text/Code.js +16 -25
- package/dist/text/CodeBlock.d.ts +77 -0
- package/dist/text/CodeBlock.js +373 -0
- package/dist/text/EditableText.d.ts +55 -15
- package/dist/text/EditableText.js +153 -135
- package/dist/text/Ellipsis.d.ts +34 -8
- package/dist/text/Ellipsis.js +55 -23
- package/dist/text/Kbd.d.ts +72 -0
- package/dist/text/Kbd.js +284 -0
- package/dist/text/MarkdownText.d.ts +27 -10
- package/dist/text/MarkdownText.js +317 -300
- package/dist/text/RequiredMarker.d.ts +17 -5
- package/dist/text/RequiredMarker.js +34 -36
- package/dist/text/Selectable.d.ts +5 -6
- package/dist/text/Selectable.js +16 -13
- package/dist/text/Span.d.ts +82 -0
- package/dist/text/Span.js +115 -0
- package/dist/text/Text.d.ts +128 -41
- package/dist/text/Text.js +209 -76
- package/dist/theme/GalaxyProvider.d.ts +75 -0
- package/dist/theme/GalaxyProvider.js +223 -0
- package/dist/theme/ThemeSwitcher.d.ts +52 -0
- package/dist/theme/ThemeSwitcher.js +94 -0
- package/dist/theme/enums.d.ts +118 -0
- package/dist/theme/enums.js +144 -0
- package/dist/theme/tokens/dark.d.ts +2 -0
- package/dist/theme/tokens/dark.js +275 -0
- package/dist/theme/tokens/generate.d.ts +15 -0
- package/dist/theme/tokens/generate.js +47 -0
- package/dist/theme/tokens/light.d.ts +2 -0
- package/dist/theme/tokens/light.js +274 -0
- package/dist/theme/tokens/palette.d.ts +14 -0
- package/dist/theme/tokens/palette.js +153 -0
- package/dist/theme/tokens/scales.d.ts +26 -0
- package/dist/theme/tokens/scales.js +154 -0
- package/dist/theme/tokens/t.d.ts +3 -0
- package/dist/theme/tokens/t.js +25 -0
- package/dist/theme/tokens/types.d.ts +189 -0
- package/dist/theme/tokens/types.js +0 -0
- package/dist/theme/useGalaxyTheme.d.ts +46 -0
- package/dist/theme/useGalaxyTheme.js +36 -0
- package/dist/theme/useInverseScope.d.ts +18 -0
- package/dist/theme/useInverseScope.js +33 -0
- package/dist/three/GalaxyLogomark3D.d.ts +46 -0
- package/dist/three/GalaxyLogomark3D.js +134 -0
- package/dist/three/assets/galaxy-logomark.js +4 -0
- package/dist/three/galaxyLogomark3DScene.d.ts +27 -0
- package/dist/three/galaxyLogomark3DScene.js +165 -0
- package/dist/timeline/Timeline.d.ts +99 -0
- package/dist/timeline/Timeline.js +269 -0
- package/dist/toast/Toast.d.ts +43 -19
- package/dist/toast/Toast.js +130 -89
- package/dist/toast/ToastProvider.d.ts +23 -23
- package/dist/toast/ToastProvider.js +298 -101
- package/dist/toast/ToastViewport.d.ts +12 -0
- package/dist/toast/ToastViewport.js +210 -0
- package/dist/toast/useToast.d.ts +139 -5
- package/dist/toast/useToast.js +15 -13
- package/dist/tokens.css +654 -0
- package/dist/tooltip/Tooltip.d.ts +64 -44
- package/dist/tooltip/Tooltip.js +280 -73
- package/dist/tooltip/internal/LazyTooltip.d.ts +7 -0
- package/dist/tooltip/internal/LazyTooltip.js +53 -0
- package/dist/transform/Fade.d.ts +33 -11
- package/dist/transform/Fade.js +71 -19
- package/dist/transform/Flasher.d.ts +25 -0
- package/dist/transform/Flasher.js +39 -0
- package/dist/transform/Rotate.d.ts +24 -12
- package/dist/transform/Rotate.js +36 -22
- package/dist/transform/ScaleFade.d.ts +36 -11
- package/dist/transform/ScaleFade.js +86 -28
- package/dist/transform/internal/CollapseMotion.d.ts +10 -0
- package/dist/transform/internal/CollapseMotion.js +65 -0
- package/dist/tree/Tree.d.ts +85 -0
- package/dist/tree/Tree.js +387 -0
- package/dist/tree/treeRow.d.ts +39 -0
- package/dist/tree/treeRow.js +75 -0
- package/dist/utils/colors.d.ts +46 -13
- package/dist/utils/colors.js +92 -34
- package/dist/utils/css.d.ts +23 -0
- package/dist/utils/css.js +30 -0
- package/dist/utils/format.d.ts +58 -0
- package/dist/utils/format.js +220 -0
- package/dist/vite/index.d.ts +16 -0
- package/dist/vite/index.js +52 -0
- package/dist/widget/Widget.d.ts +164 -48
- package/dist/widget/Widget.js +335 -96
- package/dist/widget/WidgetGroup.d.ts +36 -0
- package/dist/widget/WidgetGroup.js +103 -0
- package/package.json +851 -157
- package/dist/accordion/Accordion.d.ts +0 -54
- package/dist/accordion/Accordion.js +0 -183
- package/dist/assets/components/GalaxyFilamentWordmarkDark.d.ts +0 -3
- package/dist/assets/components/GalaxyFilamentWordmarkDark.js +0 -14
- package/dist/assets/components/GalaxyFilamentWordmarkLight.d.ts +0 -3
- package/dist/assets/components/GalaxyFilamentWordmarkLight.js +0 -14
- package/dist/assets/components/GalaxyLogomarkDark.d.ts +0 -3
- package/dist/assets/components/GalaxyLogomarkDark.js +0 -11
- package/dist/assets/components/GalaxyLogomarkLight.d.ts +0 -3
- package/dist/assets/components/GalaxyLogomarkLight.js +0 -17
- package/dist/assets/components/GalaxyWordmarkDark.d.ts +0 -3
- package/dist/assets/components/GalaxyWordmarkDark.js +0 -15
- package/dist/assets/components/GalaxyWordmarkLight.d.ts +0 -3
- package/dist/assets/components/GalaxyWordmarkLight.js +0 -28
- package/dist/assets/models/galaxy-animation.js +0 -136666
- package/dist/assets/models/galaxy-logomark.js +0 -4
- package/dist/avatar/AvatarShimmer.d.ts +0 -30
- package/dist/avatar/AvatarShimmer.js +0 -22
- package/dist/backgrounds/CellGridBackground.d.ts +0 -24
- package/dist/backgrounds/CellGridBackground.js +0 -44
- package/dist/backgrounds/CrossGridBackground.d.ts +0 -26
- package/dist/backgrounds/CrossGridBackground.js +0 -49
- package/dist/backgrounds/DotGridBackground.d.ts +0 -24
- package/dist/backgrounds/DotGridBackground.js +0 -47
- package/dist/badge/Badge.d.ts +0 -42
- package/dist/badge/Badge.js +0 -99
- package/dist/charts/ChartEmptyState.d.ts +0 -17
- package/dist/charts/ChartEmptyState.js +0 -29
- package/dist/charts/ProgressBar.d.ts +0 -29
- package/dist/charts/ProgressBar.js +0 -65
- package/dist/charts/chartTheme.d.ts +0 -18
- package/dist/charts/chartTheme.js +0 -26
- package/dist/containers/FlexItem.d.ts +0 -50
- package/dist/containers/FlexItem.js +0 -91
- package/dist/containers/FlexWrapper.d.ts +0 -96
- package/dist/containers/FlexWrapper.js +0 -143
- package/dist/containers/GridWrapper.d.ts +0 -79
- package/dist/containers/GridWrapper.js +0 -125
- package/dist/containers/Spacing.d.ts +0 -23
- package/dist/containers/Spacing.js +0 -59
- package/dist/containers/Wrapper.d.ts +0 -26
- package/dist/containers/Wrapper.js +0 -54
- package/dist/dividers/HorizontalDivider.d.ts +0 -7
- package/dist/dividers/HorizontalDivider.js +0 -39
- package/dist/dividers/VerticalDivider.d.ts +0 -6
- package/dist/dividers/VerticalDivider.js +0 -21
- package/dist/icons/GalaxyFilamentWordmark.d.ts +0 -11
- package/dist/icons/GalaxyFilamentWordmark.js +0 -25
- package/dist/icons/GalaxyLogomark.d.ts +0 -13
- package/dist/icons/GalaxyLogomark.js +0 -27
- package/dist/icons/GalaxyLogomark3D.d.ts +0 -56
- package/dist/icons/GalaxyLogomark3D.js +0 -319
- package/dist/icons/GalaxyLogomarkAnimation.d.ts +0 -18
- package/dist/icons/GalaxyLogomarkAnimation.js +0 -48
- package/dist/icons/GalaxyWordmark.d.ts +0 -11
- package/dist/icons/GalaxyWordmark.js +0 -25
- package/dist/inputs/MultiTextInput.d.ts +0 -32
- package/dist/inputs/MultiTextInput.js +0 -180
- package/dist/inputs/SwitcherInput.d.ts +0 -30
- package/dist/inputs/SwitcherInput.js +0 -81
- package/dist/inputs/hooks.d.ts +0 -10
- package/dist/inputs/hooks.js +0 -22
- package/dist/overlay/constants.d.ts +0 -28
- package/dist/overlay/constants.js +0 -37
- package/dist/resizable/HorizontalResizeHandle.d.ts +0 -17
- package/dist/resizable/HorizontalResizeHandle.js +0 -38
- package/dist/resizable/VerticalResizeHandle.d.ts +0 -18
- package/dist/resizable/VerticalResizeHandle.js +0 -39
- package/dist/table/SpreadsheetCell.d.ts +0 -21
- package/dist/table/SpreadsheetCell.js +0 -71
- package/dist/table/SpreadsheetHeaderCell.d.ts +0 -23
- package/dist/table/SpreadsheetHeaderCell.js +0 -91
- package/dist/table/SpreadsheetMenuItem.d.ts +0 -14
- package/dist/table/SpreadsheetMenuItem.js +0 -33
- package/dist/table/SpreadsheetPrimitives.d.ts +0 -172
- package/dist/table/SpreadsheetPrimitives.js +0 -105
- package/dist/table/SpreadsheetRow.d.ts +0 -33
- package/dist/table/SpreadsheetRow.js +0 -73
- package/dist/table/SpreadsheetRowActionCell.d.ts +0 -14
- package/dist/table/SpreadsheetRowActionCell.js +0 -51
- package/dist/table/TableExpandCell.d.ts +0 -11
- package/dist/table/TableExpandCell.js +0 -24
- package/dist/table/TableExpandedRow.d.ts +0 -16
- package/dist/table/TableExpandedRow.js +0 -77
- package/dist/table/TableHeaderCellContent.d.ts +0 -30
- package/dist/table/TableHeaderCellContent.js +0 -48
- package/dist/table/TablePrimitives.d.ts +0 -313
- package/dist/table/TablePrimitives.js +0 -302
- package/dist/table/TableSelectCell.d.ts +0 -18
- package/dist/table/TableSelectCell.js +0 -27
- package/dist/table/TableStatusRow.d.ts +0 -18
- package/dist/table/TableStatusRow.js +0 -50
- package/dist/table/useSpreadsheetEditing.d.ts +0 -13
- package/dist/table/useSpreadsheetEditing.js +0 -41
- package/dist/table/useTableColumnResize.d.ts +0 -38
- package/dist/table/useTableColumnResize.js +0 -155
- package/dist/table/useTableRowExpansion.d.ts +0 -24
- package/dist/table/useTableRowExpansion.js +0 -62
- package/dist/table/utils.d.ts +0 -50
- package/dist/table/utils.js +0 -78
- package/dist/text/HotKeys.d.ts +0 -30
- package/dist/text/HotKeys.js +0 -74
- package/dist/text/Paragraph.d.ts +0 -33
- package/dist/text/Paragraph.js +0 -83
- package/dist/text/TextShimmer.d.ts +0 -14
- package/dist/text/TextShimmer.js +0 -34
- package/dist/theme/GalaxyTheme.d.ts +0 -67
- package/dist/theme/GalaxyTheme.js +0 -119
- package/dist/theme/constants.d.ts +0 -8
- package/dist/theme/constants.js +0 -38
- package/dist/theme/index.d.ts +0 -6
- package/dist/theme/index.js +0 -7
- package/dist/theme/types.d.ts +0 -195
- package/dist/theme/types.js +0 -10
- package/dist/theme/typography.d.ts +0 -2
- package/dist/theme/typography.js +0 -73
- package/dist/theme/variants/dark.d.ts +0 -2
- package/dist/theme/variants/dark.js +0 -125
- package/dist/theme/variants/light.d.ts +0 -2
- package/dist/theme/variants/light.js +0 -125
- package/dist/toast/ToastContainer.d.ts +0 -10
- package/dist/toast/ToastContainer.js +0 -31
- package/dist/toast/ToastWrapper.d.ts +0 -6
- package/dist/toast/ToastWrapper.js +0 -27
- package/dist/transform/Flash.d.ts +0 -7
- package/dist/transform/Flash.js +0 -18
- package/dist/transform/Spin.d.ts +0 -14
- package/dist/transform/Spin.js +0 -25
- package/dist/utils/linaria.d.ts +0 -1
- package/dist/utils/linaria.js +0 -8
|
@@ -1,115 +1,312 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
1
|
+
import VisuallyHidden from "../a11y/VisuallyHidden.js";
|
|
2
|
+
import { Placement } from "../theme/enums.js";
|
|
3
|
+
import { DURATION } from "../theme/tokens/scales.js";
|
|
4
|
+
import Portal from "../layout/Portal.js";
|
|
5
|
+
import { ToastContext } from "./useToast.js";
|
|
6
|
+
import { Suspense, lazy, useContext, useEffect, useState, useSyncExternalStore } from "react";
|
|
5
7
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
-
import { AnimatePresence } from "framer-motion";
|
|
7
|
-
import { createPortal } from "react-dom";
|
|
8
8
|
//#region src/toast/ToastProvider.tsx
|
|
9
|
-
var ToastContext = createContext(void 0);
|
|
10
|
-
var DEFAULT_TIMEOUT = 3e3;
|
|
11
|
-
var toastCounter = 0;
|
|
12
|
-
var nextToastId = () => `toast-${++toastCounter}`;
|
|
13
|
-
var positionKey = (toast) => JSON.stringify([
|
|
14
|
-
toast.top,
|
|
15
|
-
toast.right,
|
|
16
|
-
toast.bottom,
|
|
17
|
-
toast.left
|
|
18
|
-
]);
|
|
19
9
|
/**
|
|
20
|
-
*
|
|
21
|
-
* `
|
|
10
|
+
* The toast root: one queue per React root, the timers, the screen-reader announcements and the
|
|
11
|
+
* placement regions. `GalaxyProvider` mounts it (inside `OverlayProvider`), so apps never do;
|
|
12
|
+
* mount it yourself only in a React root that has no `GalaxyProvider`. A nested `ToastProvider`
|
|
13
|
+
* reuses the outer queue.
|
|
14
|
+
*
|
|
15
|
+
* The regions (`ToastViewport`, the only toast module that imports `ScaleFade` and so
|
|
16
|
+
* `framer-motion`) load lazily with the first toast, so `GalaxyProvider` never requires the
|
|
17
|
+
* optional `framer-motion` peer. The two live regions are static, so they exist before the first
|
|
18
|
+
* toast, as live regions must.
|
|
19
|
+
*
|
|
20
|
+
* It renders no element around `children`. SSR: nothing renders on the server (`Portal`, and no
|
|
21
|
+
* entries); the store is created in render-time state, and timers and listeners start in effects.
|
|
22
22
|
*/
|
|
23
|
-
var
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
23
|
+
var VARIANT_PRIMARY = "PRIMARY";
|
|
24
|
+
var VARIANT_SUCCESS = "SUCCESS";
|
|
25
|
+
var VARIANT_ERROR = "ERROR";
|
|
26
|
+
var TOAST_VARIANT_TO_SEVERITY_LABEL_MAP = {
|
|
27
|
+
PRIMARY: "Note",
|
|
28
|
+
SUCCESS: "Success",
|
|
29
|
+
WARNING: "Warning",
|
|
30
|
+
ERROR: "Error"
|
|
31
|
+
};
|
|
32
|
+
/** Only `ERROR` is announced assertively. */
|
|
33
|
+
var TOAST_VARIANT_TO_POLITENESS_MAP = {
|
|
34
|
+
PRIMARY: "polite",
|
|
35
|
+
SUCCESS: "polite",
|
|
36
|
+
WARNING: "polite",
|
|
37
|
+
ERROR: "assertive"
|
|
38
|
+
};
|
|
39
|
+
/** How long a toast stays, by default. */
|
|
40
|
+
var TOAST_DEFAULT_DURATION_MS = 5e3;
|
|
41
|
+
/** Open toasts per region; a sixth dismisses the oldest. */
|
|
42
|
+
var TOAST_MAX_PER_PLACEMENT = 5;
|
|
43
|
+
/** How long a dismissed toast stays in the queue so its ScaleFade exit can run: `duration.base`. */
|
|
44
|
+
var TOAST_EXIT_MS = Number.parseFloat(DURATION.base);
|
|
45
|
+
/** The regions; loaded with the first toast. Creating a lazy component touches no browser global. */
|
|
46
|
+
var ToastViewportLazy = lazy(() => import("./ToastViewport.js"));
|
|
47
|
+
/** Applies the defaults to `toast()`'s argument. */
|
|
48
|
+
function resolveOptions(input) {
|
|
49
|
+
const { id, variant, isLoading, duration, isPersistent, placement, ...rest } = typeof input === "string" ? { header: input } : input;
|
|
50
|
+
return {
|
|
51
|
+
...rest,
|
|
52
|
+
...id === void 0 ? {} : { id },
|
|
53
|
+
variant: variant ?? VARIANT_PRIMARY,
|
|
54
|
+
isLoading: isLoading ?? false,
|
|
55
|
+
duration: duration ?? TOAST_DEFAULT_DURATION_MS,
|
|
56
|
+
isPersistent: isPersistent ?? false,
|
|
57
|
+
placement: placement ?? Placement.BOTTOM_END
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
/** Normalizes one phase of `toast.promise` to options. */
|
|
61
|
+
function phaseOptions(phase) {
|
|
62
|
+
return typeof phase === "string" ? { header: phase } : phase;
|
|
63
|
+
}
|
|
64
|
+
/** Creates the per-root store. Called once per root, in render-time state (never at module scope). */
|
|
65
|
+
function createToastStore() {
|
|
66
|
+
let entries = [];
|
|
67
|
+
let counter = 0;
|
|
68
|
+
let sequence = 0;
|
|
69
|
+
let hasHadEntries = false;
|
|
70
|
+
let isRunning = false;
|
|
71
|
+
let isHidden = false;
|
|
72
|
+
const pausedPlacements = /* @__PURE__ */ new Set();
|
|
73
|
+
const timers = /* @__PURE__ */ new Map();
|
|
74
|
+
const removals = /* @__PURE__ */ new Map();
|
|
75
|
+
const listeners = /* @__PURE__ */ new Set();
|
|
76
|
+
const announceListeners = /* @__PURE__ */ new Set();
|
|
77
|
+
const emit = () => {
|
|
78
|
+
for (const listener of listeners) listener();
|
|
79
|
+
};
|
|
80
|
+
const announce = (options) => {
|
|
81
|
+
const announcement = {
|
|
82
|
+
politeness: TOAST_VARIANT_TO_POLITENESS_MAP[options.variant],
|
|
83
|
+
label: TOAST_VARIANT_TO_SEVERITY_LABEL_MAP[options.variant],
|
|
84
|
+
header: options.header,
|
|
85
|
+
...options.description === void 0 ? {} : { description: options.description }
|
|
86
|
+
};
|
|
87
|
+
for (const listener of announceListeners) listener(announcement);
|
|
88
|
+
};
|
|
89
|
+
const clearTimer = (id) => {
|
|
90
|
+
const timer = timers.get(id);
|
|
91
|
+
if (timer?.handle != null) clearTimeout(timer.handle);
|
|
92
|
+
timers.delete(id);
|
|
93
|
+
};
|
|
94
|
+
/** Starts or pauses every open toast's countdown to match the current conditions. */
|
|
95
|
+
const syncTimers = () => {
|
|
96
|
+
const now = Date.now();
|
|
97
|
+
for (const entry of entries) {
|
|
98
|
+
if (!entry.isOpen) continue;
|
|
99
|
+
const timer = timers.get(entry.id);
|
|
100
|
+
if (timer === void 0) continue;
|
|
101
|
+
const shouldRun = isRunning && !isHidden && !entry.options.isLoading && !entry.options.isPersistent && !pausedPlacements.has(entry.options.placement);
|
|
102
|
+
if (shouldRun && timer.handle === null) {
|
|
103
|
+
timer.startedAt = now;
|
|
104
|
+
const { id } = entry;
|
|
105
|
+
timer.handle = setTimeout(() => dismiss(id), Math.max(timer.remaining, 0));
|
|
106
|
+
} else if (!shouldRun && timer.handle !== null) {
|
|
107
|
+
clearTimeout(timer.handle);
|
|
108
|
+
timer.handle = null;
|
|
109
|
+
timer.remaining -= now - (timer.startedAt ?? now);
|
|
110
|
+
timer.startedAt = null;
|
|
57
111
|
}
|
|
58
|
-
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
/** Removes a closed entry right away (a reused id, or the end of its exit). */
|
|
115
|
+
const removeEntry = (id) => {
|
|
116
|
+
const removal = removals.get(id);
|
|
117
|
+
if (removal !== void 0) clearTimeout(removal);
|
|
118
|
+
removals.delete(id);
|
|
119
|
+
entries = entries.filter((entry) => entry.id !== id || entry.isOpen);
|
|
120
|
+
};
|
|
121
|
+
const closeEntries = (shouldClose) => {
|
|
122
|
+
const closed = [];
|
|
123
|
+
entries = entries.map((entry) => {
|
|
124
|
+
if (!entry.isOpen || !shouldClose(entry)) return entry;
|
|
125
|
+
const next = {
|
|
126
|
+
...entry,
|
|
127
|
+
isOpen: false
|
|
128
|
+
};
|
|
129
|
+
closed.push(next);
|
|
130
|
+
return next;
|
|
59
131
|
});
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
132
|
+
if (closed.length === 0) return;
|
|
133
|
+
for (const entry of closed) {
|
|
134
|
+
clearTimer(entry.id);
|
|
135
|
+
const { id } = entry;
|
|
136
|
+
removals.set(id, setTimeout(() => {
|
|
137
|
+
removeEntry(id);
|
|
138
|
+
emit();
|
|
139
|
+
}, TOAST_EXIT_MS));
|
|
140
|
+
}
|
|
141
|
+
emit();
|
|
142
|
+
for (const entry of closed) entry.options.onDismiss?.();
|
|
143
|
+
};
|
|
144
|
+
const dismiss = (id) => {
|
|
145
|
+
closeEntries((entry) => id === void 0 || entry.id === id);
|
|
146
|
+
};
|
|
147
|
+
const show = (input) => {
|
|
148
|
+
const { id: requestedId, ...options } = resolveOptions(input);
|
|
149
|
+
const existing = requestedId === void 0 ? void 0 : entries.find((entry) => entry.id === requestedId && entry.isOpen);
|
|
150
|
+
let id;
|
|
151
|
+
if (existing !== void 0) {
|
|
152
|
+
id = existing.id;
|
|
153
|
+
entries = entries.map((entry) => entry === existing ? {
|
|
154
|
+
...entry,
|
|
155
|
+
options
|
|
156
|
+
} : entry);
|
|
157
|
+
clearTimer(id);
|
|
158
|
+
timers.set(id, {
|
|
159
|
+
remaining: options.duration,
|
|
160
|
+
startedAt: null,
|
|
161
|
+
handle: null
|
|
162
|
+
});
|
|
163
|
+
} else {
|
|
164
|
+
counter += 1;
|
|
165
|
+
id = requestedId ?? `toast-${counter}`;
|
|
166
|
+
removeEntry(id);
|
|
167
|
+
sequence += 1;
|
|
168
|
+
entries = [...entries, {
|
|
169
|
+
id,
|
|
170
|
+
options,
|
|
171
|
+
isOpen: true,
|
|
172
|
+
sequence
|
|
173
|
+
}];
|
|
174
|
+
timers.set(id, {
|
|
175
|
+
remaining: options.duration,
|
|
176
|
+
startedAt: null,
|
|
177
|
+
handle: null
|
|
178
|
+
});
|
|
179
|
+
hasHadEntries = true;
|
|
180
|
+
}
|
|
181
|
+
const open = entries.filter((entry) => entry.isOpen && entry.options.placement === options.placement);
|
|
182
|
+
const overflow = open.length - TOAST_MAX_PER_PLACEMENT;
|
|
183
|
+
if (overflow > 0) {
|
|
184
|
+
const oldest = new Set(open.slice(0, overflow).map((entry) => entry.id));
|
|
185
|
+
closeEntries((entry) => oldest.has(entry.id));
|
|
186
|
+
}
|
|
187
|
+
syncTimers();
|
|
188
|
+
emit();
|
|
189
|
+
announce(options);
|
|
190
|
+
return id;
|
|
191
|
+
};
|
|
192
|
+
const isOpenId = (id) => entries.some((entry) => entry.id === id && entry.isOpen);
|
|
193
|
+
const promise = (task, phases) => {
|
|
194
|
+
const id = show({
|
|
195
|
+
variant: VARIANT_PRIMARY,
|
|
196
|
+
...phaseOptions(phases.loading),
|
|
197
|
+
isLoading: true
|
|
72
198
|
});
|
|
73
|
-
|
|
74
|
-
if (!
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
199
|
+
task.then((value) => {
|
|
200
|
+
if (!isOpenId(id)) return;
|
|
201
|
+
show({
|
|
202
|
+
variant: VARIANT_SUCCESS,
|
|
203
|
+
...phaseOptions(typeof phases.success === "function" ? phases.success(value) : phases.success),
|
|
204
|
+
isLoading: false,
|
|
205
|
+
id
|
|
206
|
+
});
|
|
207
|
+
}, (reason) => {
|
|
208
|
+
if (!isOpenId(id)) return;
|
|
209
|
+
show({
|
|
210
|
+
variant: VARIANT_ERROR,
|
|
211
|
+
...phaseOptions(typeof phases.error === "function" ? phases.error(reason) : phases.error),
|
|
212
|
+
isLoading: false,
|
|
213
|
+
id
|
|
214
|
+
});
|
|
78
215
|
});
|
|
79
|
-
|
|
216
|
+
return id;
|
|
217
|
+
};
|
|
218
|
+
const toast = Object.assign(show, { promise });
|
|
219
|
+
return {
|
|
220
|
+
api: {
|
|
221
|
+
toast,
|
|
222
|
+
dismiss
|
|
223
|
+
},
|
|
224
|
+
toast,
|
|
225
|
+
dismiss,
|
|
226
|
+
subscribe: (listener) => {
|
|
227
|
+
listeners.add(listener);
|
|
228
|
+
return () => listeners.delete(listener);
|
|
229
|
+
},
|
|
230
|
+
getEntries: () => entries,
|
|
231
|
+
getHasHadEntries: () => hasHadEntries,
|
|
232
|
+
onAnnounce: (listener) => {
|
|
233
|
+
announceListeners.add(listener);
|
|
234
|
+
return () => announceListeners.delete(listener);
|
|
235
|
+
},
|
|
236
|
+
setPlacementPaused: (placement, isPaused) => {
|
|
237
|
+
if (isPaused) pausedPlacements.add(placement);
|
|
238
|
+
else pausedPlacements.delete(placement);
|
|
239
|
+
syncTimers();
|
|
240
|
+
},
|
|
241
|
+
setHidden: (nextIsHidden) => {
|
|
242
|
+
isHidden = nextIsHidden;
|
|
243
|
+
syncTimers();
|
|
244
|
+
},
|
|
245
|
+
start: () => {
|
|
246
|
+
isRunning = true;
|
|
247
|
+
syncTimers();
|
|
248
|
+
},
|
|
249
|
+
stop: () => {
|
|
250
|
+
isRunning = false;
|
|
251
|
+
syncTimers();
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
var NO_ENTRIES_SUBSCRIBE = () => () => {};
|
|
256
|
+
var getFalse = () => false;
|
|
257
|
+
/** The two persistent live regions; each new or updated toast is read once in one of them. */
|
|
258
|
+
function Announcer({ store }) {
|
|
259
|
+
const [polite, setPolite] = useState(null);
|
|
260
|
+
const [assertive, setAssertive] = useState(null);
|
|
80
261
|
useEffect(() => {
|
|
81
|
-
|
|
262
|
+
let frame = 0;
|
|
263
|
+
const unsubscribe = store.onAnnounce((announcement) => {
|
|
264
|
+
const set = announcement.politeness === "assertive" ? setAssertive : setPolite;
|
|
265
|
+
set(null);
|
|
266
|
+
cancelAnimationFrame(frame);
|
|
267
|
+
frame = requestAnimationFrame(() => set(announcement));
|
|
268
|
+
});
|
|
82
269
|
return () => {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
});
|
|
86
|
-
refs.clear();
|
|
270
|
+
unsubscribe();
|
|
271
|
+
cancelAnimationFrame(frame);
|
|
87
272
|
};
|
|
88
|
-
}, []);
|
|
89
|
-
const
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
273
|
+
}, [store]);
|
|
274
|
+
const render = (announcement) => announcement === null ? null : /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
275
|
+
announcement.label,
|
|
276
|
+
": ",
|
|
277
|
+
announcement.header,
|
|
278
|
+
".",
|
|
279
|
+
announcement.description === void 0 ? null : /* @__PURE__ */ jsxs(Fragment$1, { children: [" ", announcement.description] })
|
|
280
|
+
] });
|
|
281
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(VisuallyHidden, {
|
|
282
|
+
"aria-live": "polite",
|
|
283
|
+
"aria-atomic": "true",
|
|
284
|
+
children: render(polite)
|
|
285
|
+
}), /* @__PURE__ */ jsx(VisuallyHidden, {
|
|
286
|
+
"aria-live": "assertive",
|
|
287
|
+
"aria-atomic": "true",
|
|
288
|
+
children: render(assertive)
|
|
289
|
+
})] });
|
|
290
|
+
}
|
|
291
|
+
/** Holds the toast queue and renders its regions and live regions. */
|
|
292
|
+
function ToastProvider({ children }) {
|
|
293
|
+
const outerStore = useContext(ToastContext);
|
|
294
|
+
const [ownStore] = useState(() => outerStore === null ? createToastStore() : null);
|
|
295
|
+
const hasHadEntries = useSyncExternalStore(ownStore?.subscribe ?? NO_ENTRIES_SUBSCRIBE, ownStore?.getHasHadEntries ?? getFalse, getFalse);
|
|
296
|
+
useEffect(() => {
|
|
297
|
+
if (ownStore === null) return;
|
|
298
|
+
ownStore.start();
|
|
299
|
+
return () => ownStore.stop();
|
|
300
|
+
}, [ownStore]);
|
|
301
|
+
if (ownStore === null) return /* @__PURE__ */ jsx(Fragment$1, { children });
|
|
106
302
|
return /* @__PURE__ */ jsxs(ToastContext.Provider, {
|
|
107
|
-
value:
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
303
|
+
value: ownStore,
|
|
304
|
+
children: [children, /* @__PURE__ */ jsxs(Portal, { children: [/* @__PURE__ */ jsx(Announcer, { store: ownStore }), hasHadEntries && /* @__PURE__ */ jsx(Suspense, {
|
|
305
|
+
fallback: null,
|
|
306
|
+
children: /* @__PURE__ */ jsx(ToastViewportLazy, { store: ownStore })
|
|
307
|
+
})] })]
|
|
112
308
|
});
|
|
113
|
-
}
|
|
309
|
+
}
|
|
310
|
+
ToastProvider.displayName = "ToastProvider";
|
|
114
311
|
//#endregion
|
|
115
|
-
export {
|
|
312
|
+
export { ToastProvider as default };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ToastContextValue } from "./useToast.js";
|
|
2
|
+
/** @internal Loaded by ToastProvider; apps use useToast. */
|
|
3
|
+
export interface ToastViewportProps {
|
|
4
|
+
/** The provider's store. */
|
|
5
|
+
store: ToastContextValue;
|
|
6
|
+
}
|
|
7
|
+
/** @internal Loaded by ToastProvider; apps use useToast. Renders the placement regions. */
|
|
8
|
+
declare function ToastViewport({ store }: ToastViewportProps): import("react").JSX.Element;
|
|
9
|
+
declare namespace ToastViewport {
|
|
10
|
+
var displayName: string;
|
|
11
|
+
}
|
|
12
|
+
export default ToastViewport;
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { Placement } from "../theme/enums.js";
|
|
2
|
+
import ScaleFade from "../transform/ScaleFade.js";
|
|
3
|
+
import { useHotkey } from "../hooks/useHotkey.js";
|
|
4
|
+
import Toast from "./Toast.js";
|
|
5
|
+
/* empty css */
|
|
6
|
+
import { styled } from "@linaria/react";
|
|
7
|
+
import { useEffect, useRef, useSyncExternalStore } from "react";
|
|
8
|
+
import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
|
|
9
|
+
import { cx } from "@linaria/core";
|
|
10
|
+
//#region src/toast/ToastViewport.tsx
|
|
11
|
+
/**
|
|
12
|
+
* @internal Loaded by ToastProvider; apps use useToast. The placement regions: one fixed `<ol>`
|
|
13
|
+
* per placement that has toasts, each toast an `<li>` animated in and out by `ScaleFade`. It also
|
|
14
|
+
* pauses a region's timers while the pointer is over it or focus is inside it (and every region
|
|
15
|
+
* while the tab is hidden), binds F8 to reach the newest toasts, and dismisses the focused toast
|
|
16
|
+
* on Escape.
|
|
17
|
+
*
|
|
18
|
+
* `ToastProvider` loads this module with `React.lazy` when the first toast is shown, so
|
|
19
|
+
* `framer-motion` (through `ScaleFade`) is only needed once an app shows a toast.
|
|
20
|
+
*/
|
|
21
|
+
/** Placements in DOM order. */
|
|
22
|
+
var TOAST_PLACEMENTS = [
|
|
23
|
+
Placement.TOP_START,
|
|
24
|
+
Placement.TOP,
|
|
25
|
+
Placement.TOP_END,
|
|
26
|
+
Placement.BOTTOM_START,
|
|
27
|
+
Placement.BOTTOM,
|
|
28
|
+
Placement.BOTTOM_END
|
|
29
|
+
];
|
|
30
|
+
/** The region's accessible name. */
|
|
31
|
+
var REGION_LABEL = "Notifications";
|
|
32
|
+
var NO_ENTRIES = [];
|
|
33
|
+
/**
|
|
34
|
+
* A placement region. Takes no pointer input itself (only its items do). `--gx-toast-inset` is
|
|
35
|
+
* the distance from the screen edges: `space[24]`, or `space[16]` on narrow screens.
|
|
36
|
+
*/
|
|
37
|
+
var Region = /*#__PURE__*/ styled("ol")({
|
|
38
|
+
name: "Region",
|
|
39
|
+
class: "gx-ToastViewport-Region-rut9ebb",
|
|
40
|
+
propsAsIs: false
|
|
41
|
+
});
|
|
42
|
+
/** Side, alignment and order per placement: the newest toast is nearest the screen edge. */
|
|
43
|
+
var TOAST_PLACEMENT_TO_CSS_MAP = {
|
|
44
|
+
[Placement.TOP_START]: "gx-ToastViewport-Placement_TOP_START-puv7dc9",
|
|
45
|
+
[Placement.TOP]: "gx-ToastViewport-Placement_TOP-p79888u",
|
|
46
|
+
[Placement.TOP_END]: "gx-ToastViewport-Placement_TOP_END-po8x2as",
|
|
47
|
+
[Placement.BOTTOM_START]: "gx-ToastViewport-Placement_BOTTOM_START-p92b9bh",
|
|
48
|
+
[Placement.BOTTOM]: "gx-ToastViewport-Placement_BOTTOM-p1y493wv",
|
|
49
|
+
[Placement.BOTTOM_END]: "gx-ToastViewport-Placement_BOTTOM_END-pym40ia"
|
|
50
|
+
};
|
|
51
|
+
/** One toast; takes pointer input. */
|
|
52
|
+
var Item = /*#__PURE__*/ styled("li")({
|
|
53
|
+
name: "Item",
|
|
54
|
+
class: "gx-ToastViewport-Item-iktx1uh",
|
|
55
|
+
propsAsIs: false
|
|
56
|
+
});
|
|
57
|
+
/** ScaleFade grows each toast from the screen edge it belongs to. */
|
|
58
|
+
var TOAST_PLACEMENT_TO_TRANSFORM_ORIGIN_MAP = {
|
|
59
|
+
[Placement.TOP_START]: "gx-ToastViewport-Placement_TOP_START-pat4pzx",
|
|
60
|
+
[Placement.TOP]: "gx-ToastViewport-Placement_TOP-p18lapkd",
|
|
61
|
+
[Placement.TOP_END]: "gx-ToastViewport-Placement_TOP_END-p1lcgtv1",
|
|
62
|
+
[Placement.BOTTOM_START]: "gx-ToastViewport-Placement_BOTTOM_START-p1i0hsic",
|
|
63
|
+
[Placement.BOTTOM]: "gx-ToastViewport-Placement_BOTTOM-pim0uhi",
|
|
64
|
+
[Placement.BOTTOM_END]: "gx-ToastViewport-Placement_BOTTOM_END-p18eqp6y"
|
|
65
|
+
};
|
|
66
|
+
/** Whether `element` can take focus back. */
|
|
67
|
+
function isFocusable(element) {
|
|
68
|
+
return (element instanceof HTMLElement || element instanceof SVGElement) && element.isConnected;
|
|
69
|
+
}
|
|
70
|
+
/** One toast in its region; hands focus back when it closes while holding it. */
|
|
71
|
+
function ToastItem({ entry, store, returnFocusRef }) {
|
|
72
|
+
const itemRef = useRef(null);
|
|
73
|
+
const { options, id } = entry;
|
|
74
|
+
useEffect(() => {
|
|
75
|
+
if (entry.isOpen) return;
|
|
76
|
+
const item = itemRef.current;
|
|
77
|
+
const returnTo = returnFocusRef.current;
|
|
78
|
+
if (item?.contains(document.activeElement) && isFocusable(returnTo)) returnTo.focus();
|
|
79
|
+
}, [entry.isOpen, returnFocusRef]);
|
|
80
|
+
const handleKeyDown = (event) => {
|
|
81
|
+
if (event.key !== "Escape" || event.defaultPrevented) return;
|
|
82
|
+
event.preventDefault();
|
|
83
|
+
store.dismiss(id);
|
|
84
|
+
};
|
|
85
|
+
return /* @__PURE__ */ jsx(Item, {
|
|
86
|
+
ref: itemRef,
|
|
87
|
+
onKeyDown: handleKeyDown,
|
|
88
|
+
children: /* @__PURE__ */ jsx(ScaleFade, {
|
|
89
|
+
isOpen: entry.isOpen,
|
|
90
|
+
shouldAnimateOnMount: true,
|
|
91
|
+
className: TOAST_PLACEMENT_TO_TRANSFORM_ORIGIN_MAP[options.placement],
|
|
92
|
+
children: /* @__PURE__ */ jsx(Toast, {
|
|
93
|
+
variant: options.variant,
|
|
94
|
+
header: options.header,
|
|
95
|
+
...options.description === void 0 ? {} : { description: options.description },
|
|
96
|
+
...options.icon === void 0 ? {} : { icon: options.icon },
|
|
97
|
+
...options.action === void 0 ? {} : { action: {
|
|
98
|
+
label: options.action.label,
|
|
99
|
+
onClick: () => {
|
|
100
|
+
options.action?.onClick();
|
|
101
|
+
store.dismiss(id);
|
|
102
|
+
}
|
|
103
|
+
} },
|
|
104
|
+
isLoading: options.isLoading,
|
|
105
|
+
onDismiss: () => store.dismiss(id)
|
|
106
|
+
})
|
|
107
|
+
})
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/** One placement region: pauses its timers while hovered or focused. */
|
|
111
|
+
function ToastRegion({ placement, entries, store, returnFocusRef, regionRefs }) {
|
|
112
|
+
const isPointerInsideRef = useRef(false);
|
|
113
|
+
const isFocusInsideRef = useRef(false);
|
|
114
|
+
const syncPause = () => store.setPlacementPaused(placement, isPointerInsideRef.current || isFocusInsideRef.current);
|
|
115
|
+
useEffect(() => () => store.setPlacementPaused(placement, false), [store, placement]);
|
|
116
|
+
const handleFocus = (event) => {
|
|
117
|
+
event.stopPropagation();
|
|
118
|
+
if (event.currentTarget.contains(event.relatedTarget)) return;
|
|
119
|
+
isFocusInsideRef.current = true;
|
|
120
|
+
syncPause();
|
|
121
|
+
};
|
|
122
|
+
const handleBlur = (event) => {
|
|
123
|
+
if (event.currentTarget.contains(event.relatedTarget)) return;
|
|
124
|
+
isFocusInsideRef.current = false;
|
|
125
|
+
syncPause();
|
|
126
|
+
};
|
|
127
|
+
/**
|
|
128
|
+
* Tab moves through the region's buttons natively (kept from an open modal's trap, as focus
|
|
129
|
+
* is); Escape on the region itself dismisses its newest open toast.
|
|
130
|
+
*/
|
|
131
|
+
const handleKeyDown = (event) => {
|
|
132
|
+
if (event.key === "Tab") {
|
|
133
|
+
event.stopPropagation();
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
if (event.key !== "Escape" || event.defaultPrevented) return;
|
|
137
|
+
if (event.target !== event.currentTarget) return;
|
|
138
|
+
const newest = entries.findLast((entry) => entry.isOpen);
|
|
139
|
+
if (newest === void 0) return;
|
|
140
|
+
event.preventDefault();
|
|
141
|
+
store.dismiss(newest.id);
|
|
142
|
+
const returnTo = returnFocusRef.current;
|
|
143
|
+
if (isFocusable(returnTo)) returnTo.focus();
|
|
144
|
+
};
|
|
145
|
+
return /* @__PURE__ */ jsx(Region, {
|
|
146
|
+
ref: (node) => {
|
|
147
|
+
if (node === null) regionRefs.delete(placement);
|
|
148
|
+
else regionRefs.set(placement, node);
|
|
149
|
+
},
|
|
150
|
+
"aria-label": REGION_LABEL,
|
|
151
|
+
tabIndex: -1,
|
|
152
|
+
className: cx(TOAST_PLACEMENT_TO_CSS_MAP[placement]),
|
|
153
|
+
onPointerEnter: () => {
|
|
154
|
+
isPointerInsideRef.current = true;
|
|
155
|
+
syncPause();
|
|
156
|
+
},
|
|
157
|
+
onPointerLeave: () => {
|
|
158
|
+
isPointerInsideRef.current = false;
|
|
159
|
+
syncPause();
|
|
160
|
+
},
|
|
161
|
+
onFocus: handleFocus,
|
|
162
|
+
onBlur: handleBlur,
|
|
163
|
+
onKeyDown: handleKeyDown,
|
|
164
|
+
children: entries.map((entry) => /* @__PURE__ */ jsx(ToastItem, {
|
|
165
|
+
entry,
|
|
166
|
+
store,
|
|
167
|
+
returnFocusRef
|
|
168
|
+
}, `${entry.id}:${entry.sequence}`))
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
/** @internal Loaded by ToastProvider; apps use useToast. Renders the placement regions. */
|
|
172
|
+
function ToastViewport({ store }) {
|
|
173
|
+
const entries = useSyncExternalStore(store.subscribe, store.getEntries, () => NO_ENTRIES);
|
|
174
|
+
const returnFocusRef = useRef(null);
|
|
175
|
+
const regionRefs = useRef(/* @__PURE__ */ new Map()).current;
|
|
176
|
+
useEffect(() => {
|
|
177
|
+
const update = () => store.setHidden(document.visibilityState === "hidden");
|
|
178
|
+
update();
|
|
179
|
+
document.addEventListener("visibilitychange", update);
|
|
180
|
+
return () => {
|
|
181
|
+
document.removeEventListener("visibilitychange", update);
|
|
182
|
+
store.setHidden(false);
|
|
183
|
+
};
|
|
184
|
+
}, [store]);
|
|
185
|
+
const newest = entries.filter((entry) => entry.isOpen).reduce((latest, entry) => latest === void 0 || entry.sequence > latest.sequence ? entry : latest, void 0);
|
|
186
|
+
useHotkey("f8", () => {
|
|
187
|
+
if (newest === void 0) return;
|
|
188
|
+
const region = regionRefs.get(newest.options.placement);
|
|
189
|
+
if (region === void 0) return;
|
|
190
|
+
if (!region.contains(document.activeElement)) returnFocusRef.current = document.activeElement;
|
|
191
|
+
region.focus();
|
|
192
|
+
}, {
|
|
193
|
+
shouldPreventDefault: true,
|
|
194
|
+
isEnabled: newest !== void 0
|
|
195
|
+
});
|
|
196
|
+
return /* @__PURE__ */ jsx(Fragment$1, { children: TOAST_PLACEMENTS.map((placement) => {
|
|
197
|
+
const placed = entries.filter((entry) => entry.options.placement === placement);
|
|
198
|
+
if (placed.length === 0) return null;
|
|
199
|
+
return /* @__PURE__ */ jsx(ToastRegion, {
|
|
200
|
+
placement,
|
|
201
|
+
entries: placed,
|
|
202
|
+
store,
|
|
203
|
+
returnFocusRef,
|
|
204
|
+
regionRefs
|
|
205
|
+
}, placement);
|
|
206
|
+
}) });
|
|
207
|
+
}
|
|
208
|
+
ToastViewport.displayName = "ToastViewport";
|
|
209
|
+
//#endregion
|
|
210
|
+
export { ToastViewport as default };
|