@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,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Asks one yes/no question before an action runs ("Delete source?"). A preset over `Modal`
|
|
3
|
+
* (`ModalSize.SMALL`) with a fixed layout: the question as the title, an optional description, an
|
|
4
|
+
* optional type-to-confirm field, and two buttons, Cancel and the named action.
|
|
5
|
+
*
|
|
6
|
+
* `onConfirm` runs the action. When it returns a promise, the action button shows a spinner and the
|
|
7
|
+
* dialog stays open and blocking (Cancel disabled, no close button, Escape and the backdrop
|
|
8
|
+
* ignored) until it settles: it closes on resolve and stays open on reject, where the app shows
|
|
9
|
+
* `error`. `isDestructive` makes the action `ButtonVariant.ERROR`; `confirmValue` makes the user
|
|
10
|
+
* type a value before the action enables.
|
|
11
|
+
*
|
|
12
|
+
* Any other content makes it a `Modal`. No styles of its own; every surface is Modal's.
|
|
13
|
+
*
|
|
14
|
+
* SSR: Modal's (nothing renders on the server). Nothing at module scope.
|
|
15
|
+
*/
|
|
16
|
+
import { type AriaAttributes, type CSSProperties, type ReactNode } from "react";
|
|
17
|
+
export interface ConfirmDialogProps extends AriaAttributes {
|
|
18
|
+
/** The question, as the dialog title: "Delete source?". Names the dialog. */
|
|
19
|
+
header: string;
|
|
20
|
+
/** What happens if the user confirms. A string renders as secondary `Text`; a node (a mono `Span`) renders inside the same `Text`. Describes the dialog. */
|
|
21
|
+
description?: ReactNode;
|
|
22
|
+
/** The confirm button's label. Name the action ("Delete source", "Run sync"), not "OK". */
|
|
23
|
+
label: string;
|
|
24
|
+
/** Runs the action. It may return a promise: while it is pending the dialog shows a spinner and cannot be dismissed; it closes on resolve and stays open on reject. */
|
|
25
|
+
onConfirm: () => void;
|
|
26
|
+
/**
|
|
27
|
+
* The action deletes or cannot be undone: the confirm button is `ButtonVariant.ERROR` instead of `PRIMARY`.
|
|
28
|
+
* @default false
|
|
29
|
+
*/
|
|
30
|
+
isDestructive?: boolean;
|
|
31
|
+
/** Type-to-confirm. When set, the user must type this text exactly (surrounding spaces ignored) before the confirm button enables. */
|
|
32
|
+
confirmValue?: string;
|
|
33
|
+
/** A message under the description, for an action that failed. The app sets it, usually after `onConfirm` rejects. */
|
|
34
|
+
error?: string;
|
|
35
|
+
/** Controlled open state. When set, ConfirmDialog calls `onOpenChange` and lets the caller decide. */
|
|
36
|
+
isOpen?: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Initial open state while uncontrolled.
|
|
39
|
+
* @default false
|
|
40
|
+
*/
|
|
41
|
+
defaultIsOpen?: boolean;
|
|
42
|
+
/** Called with `false` on Cancel, Escape, a backdrop click, the close button, and after `onConfirm` succeeds. */
|
|
43
|
+
onOpenChange?: (isOpen: boolean) => void;
|
|
44
|
+
/** DOM id on the dialog panel. */
|
|
45
|
+
id?: string;
|
|
46
|
+
/** Any `data-*` attribute, forwarded to the dialog panel. */
|
|
47
|
+
[dataAttribute: `data-${string}`]: string | number | boolean | undefined;
|
|
48
|
+
/** Extra class on the dialog panel. */
|
|
49
|
+
className?: string;
|
|
50
|
+
/** Inline style on the dialog panel; only for setting CSS custom properties. */
|
|
51
|
+
style?: CSSProperties;
|
|
52
|
+
}
|
|
53
|
+
/** A yes/no question before an action: title, description, optional type-to-confirm, Cancel + action. */
|
|
54
|
+
declare const ConfirmDialog: import("react").ForwardRefExoticComponent<ConfirmDialogProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
55
|
+
export default ConfirmDialog;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { FontFamily } from "../theme/enums.js";
|
|
2
|
+
import Text, { TextVariant } from "../text/Text.js";
|
|
3
|
+
import { useControlledOpenState } from "../hooks/useControlledOpenState.js";
|
|
4
|
+
import Flex, { FlexDirection } from "../layout/Flex.js";
|
|
5
|
+
import Button, { ButtonVariant } from "../buttons/Button.js";
|
|
6
|
+
import Span from "../text/Span.js";
|
|
7
|
+
import TextInput from "../inputs/TextInput.js";
|
|
8
|
+
import Modal, { ModalSize } from "./Modal.js";
|
|
9
|
+
import { forwardRef, useEffect, useId, useRef, useState } from "react";
|
|
10
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
//#region src/modal/ConfirmDialog.tsx
|
|
12
|
+
/**
|
|
13
|
+
* Asks one yes/no question before an action runs ("Delete source?"). A preset over `Modal`
|
|
14
|
+
* (`ModalSize.SMALL`) with a fixed layout: the question as the title, an optional description, an
|
|
15
|
+
* optional type-to-confirm field, and two buttons, Cancel and the named action.
|
|
16
|
+
*
|
|
17
|
+
* `onConfirm` runs the action. When it returns a promise, the action button shows a spinner and the
|
|
18
|
+
* dialog stays open and blocking (Cancel disabled, no close button, Escape and the backdrop
|
|
19
|
+
* ignored) until it settles: it closes on resolve and stays open on reject, where the app shows
|
|
20
|
+
* `error`. `isDestructive` makes the action `ButtonVariant.ERROR`; `confirmValue` makes the user
|
|
21
|
+
* type a value before the action enables.
|
|
22
|
+
*
|
|
23
|
+
* Any other content makes it a `Modal`. No styles of its own; every surface is Modal's.
|
|
24
|
+
*
|
|
25
|
+
* SSR: Modal's (nothing renders on the server). Nothing at module scope.
|
|
26
|
+
*/
|
|
27
|
+
/** The fixed text of the dismiss button (as Modal's "Close"). */
|
|
28
|
+
var CANCEL_LABEL = "Cancel";
|
|
29
|
+
/** A value with a `then` method: what `await` would treat as a promise. */
|
|
30
|
+
var isThenable = (value) => typeof value === "object" && value !== null && typeof value.then === "function";
|
|
31
|
+
/** A yes/no question before an action: title, description, optional type-to-confirm, Cancel + action. */
|
|
32
|
+
var ConfirmDialog = forwardRef(function ConfirmDialog({ header, description, label, onConfirm, isDestructive = false, confirmValue, error, isOpen: isOpenProp, defaultIsOpen = false, onOpenChange, "aria-describedby": ariaDescribedBy, className, style, ...rest }, ref) {
|
|
33
|
+
const descriptionId = useId();
|
|
34
|
+
const promptId = useId();
|
|
35
|
+
const { isOpen, setOpen } = useControlledOpenState({
|
|
36
|
+
isOpen: isOpenProp,
|
|
37
|
+
defaultIsOpen,
|
|
38
|
+
onOpenChange
|
|
39
|
+
});
|
|
40
|
+
const [typed, setTyped] = useState("");
|
|
41
|
+
const [isPending, setIsPending] = useState(false);
|
|
42
|
+
const [wasOpen, setWasOpen] = useState(isOpen);
|
|
43
|
+
if (wasOpen !== isOpen) {
|
|
44
|
+
setWasOpen(isOpen);
|
|
45
|
+
if (isOpen) {
|
|
46
|
+
setTyped("");
|
|
47
|
+
setIsPending(false);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const isMountedRef = useRef(true);
|
|
51
|
+
useEffect(() => {
|
|
52
|
+
isMountedRef.current = true;
|
|
53
|
+
return () => {
|
|
54
|
+
isMountedRef.current = false;
|
|
55
|
+
};
|
|
56
|
+
}, []);
|
|
57
|
+
/** A pending action cannot be dismissed. */
|
|
58
|
+
const requestOpenChange = (next) => {
|
|
59
|
+
if (!next && isPending) return;
|
|
60
|
+
setOpen(next);
|
|
61
|
+
};
|
|
62
|
+
const isMatched = confirmValue === void 0 || typed.trim() === confirmValue.trim();
|
|
63
|
+
const confirm = () => {
|
|
64
|
+
if (!isMatched || isPending) return;
|
|
65
|
+
const result = onConfirm();
|
|
66
|
+
if (!isThenable(result)) {
|
|
67
|
+
setOpen(false);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
setIsPending(true);
|
|
71
|
+
result.then(() => {
|
|
72
|
+
if (!isMountedRef.current) return;
|
|
73
|
+
setIsPending(false);
|
|
74
|
+
setOpen(false);
|
|
75
|
+
}, () => {
|
|
76
|
+
if (!isMountedRef.current) return;
|
|
77
|
+
setIsPending(false);
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
const describedBy = ariaDescribedBy ?? (description === void 0 ? void 0 : descriptionId);
|
|
81
|
+
const hasBody = description !== void 0 || confirmValue !== void 0 || error !== void 0;
|
|
82
|
+
const footer = /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Button, {
|
|
83
|
+
label: CANCEL_LABEL,
|
|
84
|
+
variant: ButtonVariant.TERTIARY,
|
|
85
|
+
isDisabled: isPending,
|
|
86
|
+
onClick: () => requestOpenChange(false)
|
|
87
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
88
|
+
label,
|
|
89
|
+
variant: isDestructive ? ButtonVariant.ERROR : ButtonVariant.PRIMARY,
|
|
90
|
+
isLoading: isPending,
|
|
91
|
+
isDisabled: !isMatched,
|
|
92
|
+
onClick: confirm
|
|
93
|
+
})] });
|
|
94
|
+
return /* @__PURE__ */ jsx(Modal, {
|
|
95
|
+
...rest,
|
|
96
|
+
ref,
|
|
97
|
+
size: ModalSize.SMALL,
|
|
98
|
+
isOpen,
|
|
99
|
+
onOpenChange: requestOpenChange,
|
|
100
|
+
isDismissable: !isPending,
|
|
101
|
+
header,
|
|
102
|
+
footer,
|
|
103
|
+
...describedBy === void 0 ? {} : { "aria-describedby": describedBy },
|
|
104
|
+
...className === void 0 ? {} : { className },
|
|
105
|
+
...style === void 0 ? {} : { style },
|
|
106
|
+
children: hasBody ? /* @__PURE__ */ jsxs(Flex, {
|
|
107
|
+
direction: FlexDirection.COLUMN,
|
|
108
|
+
gap: 12,
|
|
109
|
+
children: [
|
|
110
|
+
description !== void 0 && /* @__PURE__ */ jsx(Text, {
|
|
111
|
+
id: descriptionId,
|
|
112
|
+
variant: TextVariant.SECONDARY,
|
|
113
|
+
children: description
|
|
114
|
+
}),
|
|
115
|
+
confirmValue !== void 0 && /* @__PURE__ */ jsxs(Flex, {
|
|
116
|
+
direction: FlexDirection.COLUMN,
|
|
117
|
+
gap: 8,
|
|
118
|
+
children: [/* @__PURE__ */ jsxs(Text, {
|
|
119
|
+
id: promptId,
|
|
120
|
+
children: [
|
|
121
|
+
"Type ",
|
|
122
|
+
/* @__PURE__ */ jsx(Span, {
|
|
123
|
+
family: FontFamily.MONO,
|
|
124
|
+
children: confirmValue
|
|
125
|
+
}),
|
|
126
|
+
" to confirm."
|
|
127
|
+
]
|
|
128
|
+
}), /* @__PURE__ */ jsx(TextInput, {
|
|
129
|
+
value: typed,
|
|
130
|
+
onChange: setTyped,
|
|
131
|
+
onEnter: confirm,
|
|
132
|
+
placeholder: confirmValue,
|
|
133
|
+
isDisabled: isPending,
|
|
134
|
+
fillWidth: true,
|
|
135
|
+
"aria-labelledby": promptId
|
|
136
|
+
})]
|
|
137
|
+
}),
|
|
138
|
+
error !== void 0 && /* @__PURE__ */ jsx("div", {
|
|
139
|
+
role: "alert",
|
|
140
|
+
children: /* @__PURE__ */ jsx(Text, {
|
|
141
|
+
variant: TextVariant.ERROR,
|
|
142
|
+
children: error
|
|
143
|
+
})
|
|
144
|
+
})
|
|
145
|
+
]
|
|
146
|
+
}) : void 0
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
ConfirmDialog.displayName = "ConfirmDialog";
|
|
150
|
+
//#endregion
|
|
151
|
+
export { ConfirmDialog as default };
|
package/dist/modal/Modal.d.ts
CHANGED
|
@@ -1,15 +1,65 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
*/
|
|
14
|
-
|
|
1
|
+
import { type AriaAttributes, type CSSProperties, type ReactNode } from "react";
|
|
2
|
+
/** Panel width. Canonical rung names (Constitution V); the values are widths, not control heights. */
|
|
3
|
+
export declare enum ModalSize {
|
|
4
|
+
/** 400px: a question or a notice (`ConfirmDialog`). */
|
|
5
|
+
SMALL = "SMALL",
|
|
6
|
+
/** 560px: a short form. The default. */
|
|
7
|
+
MEDIUM = "MEDIUM",
|
|
8
|
+
/** 720px: a longer form or a preview. */
|
|
9
|
+
LARGE = "LARGE",
|
|
10
|
+
/** Fills the viewport less 32px on each side. */
|
|
11
|
+
X_LARGE = "X_LARGE"
|
|
12
|
+
}
|
|
13
|
+
/** Every Modal prop except the name pair (`header` / `ariaLabel`). */
|
|
14
|
+
interface ModalBaseProps extends AriaAttributes {
|
|
15
|
+
/** The body. It scrolls when the panel reaches the viewport height. A string or number renders as `Text`. */
|
|
16
|
+
children?: ReactNode;
|
|
17
|
+
/** The actions row, end-aligned with an 8px gap. Put the least destructive action first. */
|
|
18
|
+
footer?: ReactNode;
|
|
19
|
+
/**
|
|
20
|
+
* Panel width: 400 / 560 / 720px, or `X_LARGE` to fill the viewport less 32px on each side.
|
|
21
|
+
* @default ModalSize.MEDIUM
|
|
22
|
+
*/
|
|
23
|
+
size?: ModalSize;
|
|
24
|
+
/**
|
|
25
|
+
* Escape, a backdrop click and the close button close the dialog. When `false` there is no close button, and only the app (usually a `footer` action) can close it.
|
|
26
|
+
* @default true
|
|
27
|
+
*/
|
|
28
|
+
isDismissable?: boolean;
|
|
29
|
+
/** Controlled open state. When set, Modal calls `onOpenChange` and lets the caller decide. */
|
|
30
|
+
isOpen?: boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Initial open state while uncontrolled.
|
|
33
|
+
* @default false
|
|
34
|
+
*/
|
|
35
|
+
defaultIsOpen?: boolean;
|
|
36
|
+
/** Called with `false` on Escape, a backdrop click and the close button. */
|
|
37
|
+
onOpenChange?: (isOpen: boolean) => void;
|
|
38
|
+
/** DOM id on the panel (`role="dialog"`). @default a `useId()` value */
|
|
39
|
+
id?: string;
|
|
40
|
+
/** Any `data-*` attribute, forwarded to the panel. */
|
|
41
|
+
[dataAttribute: `data-${string}`]: string | number | boolean | undefined;
|
|
42
|
+
/** Extra class on the panel. */
|
|
43
|
+
className?: string;
|
|
44
|
+
/** Inline style on the panel; only for setting CSS custom properties. */
|
|
45
|
+
style?: CSSProperties;
|
|
46
|
+
}
|
|
47
|
+
/** A title row names the dialog. */
|
|
48
|
+
interface ModalTitledProps {
|
|
49
|
+
/** The title row. A string renders as an `h2` `Text` and names the dialog; a node renders as it is. Required unless `ariaLabel` is set. */
|
|
50
|
+
header: ReactNode;
|
|
51
|
+
/** Accessible name of the dialog. Required by type when there is no `header`. */
|
|
52
|
+
ariaLabel?: string;
|
|
53
|
+
}
|
|
54
|
+
/** No title row: the accessible name is required. */
|
|
55
|
+
interface ModalUntitledProps {
|
|
56
|
+
/** The title row. A string renders as an `h2` `Text` and names the dialog; a node renders as it is. Required unless `ariaLabel` is set. */
|
|
57
|
+
header?: undefined;
|
|
58
|
+
/** Accessible name of the dialog. Required by type when there is no `header`. */
|
|
59
|
+
ariaLabel: string;
|
|
60
|
+
}
|
|
61
|
+
/** Modal props. Without a `header`, `ariaLabel` is required by the type. */
|
|
62
|
+
export type ModalProps = ModalBaseProps & (ModalTitledProps | ModalUntitledProps);
|
|
63
|
+
/** A blocking dialog over a dimmed page: title row, scrolling body, actions row. */
|
|
64
|
+
declare const Modal: import("react").ForwardRefExoticComponent<ModalProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
15
65
|
export default Modal;
|
package/dist/modal/Modal.js
CHANGED
|
@@ -1,58 +1,199 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
1
|
+
import FocusScope, { FocusScopeAutoFocus } from "../a11y/FocusScope.js";
|
|
2
|
+
import Text, { TextSize, TextWeight } from "../text/Text.js";
|
|
3
|
+
import { useControlledOpenState } from "../hooks/useControlledOpenState.js";
|
|
4
|
+
import Portal from "../layout/Portal.js";
|
|
5
|
+
import { OverlayLayer, useOverlay } from "../overlay/useOverlay.js";
|
|
6
|
+
import { OverlayNode } from "../overlay/OverlayProvider.js";
|
|
7
|
+
import ScaleFade from "../transform/ScaleFade.js";
|
|
8
|
+
import Button, { ButtonSize, ButtonVariant } from "../buttons/Button.js";
|
|
9
|
+
import Fade from "../transform/Fade.js";
|
|
4
10
|
/* empty css */
|
|
5
11
|
import { styled } from "@linaria/react";
|
|
6
|
-
import {
|
|
7
|
-
import { jsx } from "react/jsx-runtime";
|
|
8
|
-
import {
|
|
12
|
+
import { forwardRef, useId, useRef, useState } from "react";
|
|
13
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
14
|
+
import { cx } from "@linaria/core";
|
|
15
|
+
import { XIcon } from "@phosphor-icons/react";
|
|
9
16
|
//#region src/modal/Modal.tsx
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
/**
|
|
18
|
+
* The blocking dialog: a centered panel over a dimmed page holding one task the user must finish
|
|
19
|
+
* or dismiss before going back to the page. Modal draws the panel and its three regions (a title
|
|
20
|
+
* row, a scrolling body and an actions row), dims and locks the page behind it, traps focus inside
|
|
21
|
+
* and restores it on close, stacks above other overlays through the overlay stack, and animates in
|
|
22
|
+
* and out (`Fade` backdrop, `ScaleFade` panel). It has no trigger: the app opens it.
|
|
23
|
+
*
|
|
24
|
+
* A short yes/no question is `ConfirmDialog`; a panel beside the page is `Drawer`; an anchored
|
|
25
|
+
* panel is `Popover`.
|
|
26
|
+
*
|
|
27
|
+
* SSR: nothing renders on the server (closed by default, and `Portal` renders nothing there). The
|
|
28
|
+
* scroll lock is CSS keyed on the backdrop; nothing touches `window` or `document` at module scope.
|
|
29
|
+
*/
|
|
30
|
+
/** Panel width. Canonical rung names (Constitution V); the values are widths, not control heights. */
|
|
31
|
+
var ModalSize = /* @__PURE__ */ function(ModalSize) {
|
|
32
|
+
/** 400px: a question or a notice (`ConfirmDialog`). */
|
|
33
|
+
ModalSize["SMALL"] = "SMALL";
|
|
34
|
+
/** 560px: a short form. The default. */
|
|
35
|
+
ModalSize["MEDIUM"] = "MEDIUM";
|
|
36
|
+
/** 720px: a longer form or a preview. */
|
|
37
|
+
ModalSize["LARGE"] = "LARGE";
|
|
38
|
+
/** Fills the viewport less 32px on each side. */
|
|
39
|
+
ModalSize["X_LARGE"] = "X_LARGE";
|
|
40
|
+
return ModalSize;
|
|
41
|
+
}({});
|
|
42
|
+
/** The close button's accessible name (fixed English, as Input's "Clear"). */
|
|
43
|
+
var CLOSE_LABEL = "Close";
|
|
44
|
+
/**
|
|
45
|
+
* Scroll lock: while any modal backdrop is mounted (open or exiting) the page does not scroll.
|
|
46
|
+
* `overflow: hidden` on `html` keeps the scroll position; the package reset hides scrollbars, so
|
|
47
|
+
* nothing shifts. Keyed on the backdrop's class, so it ends with the last backdrop.
|
|
48
|
+
*/
|
|
49
|
+
var Backdrop = /*#__PURE__*/ styled("div")({
|
|
50
|
+
name: "Backdrop",
|
|
51
|
+
class: "gx-Modal-Backdrop-bepkv8n",
|
|
52
|
+
propsAsIs: false
|
|
20
53
|
});
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
54
|
+
/** The backdrop's Fade root: positioned just under the panel. Sets no opacity or visibility. */
|
|
55
|
+
var BACKDROP_FRAME_CSS = "gx-Modal-BACKDROP_FRAME_CSS-b1jgo9vf";
|
|
56
|
+
/** Centers the panel; passes clicks around it through to the backdrop. */
|
|
57
|
+
var Positioner = /*#__PURE__*/ styled("div")({
|
|
58
|
+
name: "Positioner",
|
|
59
|
+
class: "gx-Modal-Positioner-ptpk8hn",
|
|
24
60
|
propsAsIs: false
|
|
25
61
|
});
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
62
|
+
/** The panel's ScaleFade root: the flex chain that lets a tall body scroll. */
|
|
63
|
+
var FRAME_CSS = "gx-Modal-FRAME_CSS-fedvh3d";
|
|
64
|
+
var MODAL_SIZE_TO_CSS_MAP = {
|
|
65
|
+
["SMALL"]: "gx-Modal-SMALL-s1jpkb4q",
|
|
66
|
+
["MEDIUM"]: "gx-Modal-MEDIUM-mh1vj51",
|
|
67
|
+
["LARGE"]: "gx-Modal-LARGE-l1th1b6t",
|
|
68
|
+
["X_LARGE"]: "gx-Modal-X_LARGE-x1s4ejyc"
|
|
69
|
+
};
|
|
70
|
+
var FOCUS_SCOPE_CSS = "gx-Modal-FOCUS_SCOPE_CSS-f69bx3r";
|
|
71
|
+
var Panel = /*#__PURE__*/ styled("div")({
|
|
72
|
+
name: "Panel",
|
|
73
|
+
class: "gx-Modal-Panel-p14wx16q",
|
|
29
74
|
propsAsIs: false
|
|
30
75
|
});
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
*/
|
|
37
|
-
var
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
76
|
+
var Header = /*#__PURE__*/ styled("div")({
|
|
77
|
+
name: "Header",
|
|
78
|
+
class: "gx-Modal-Header-h1w4b032",
|
|
79
|
+
propsAsIs: false
|
|
80
|
+
});
|
|
81
|
+
/** While the close button shows: a long title never runs under it. */
|
|
82
|
+
var HAS_CLOSE_CSS = "gx-Modal-HAS_CLOSE_CSS-hbri8ij";
|
|
83
|
+
/** A node `header`: takes the row and may shrink. */
|
|
84
|
+
var HeaderNode = /*#__PURE__*/ styled("div")({
|
|
85
|
+
name: "HeaderNode",
|
|
86
|
+
class: "gx-Modal-HeaderNode-hxdonbm",
|
|
87
|
+
propsAsIs: false
|
|
88
|
+
});
|
|
89
|
+
var Body = /*#__PURE__*/ styled("div")({
|
|
90
|
+
name: "Body",
|
|
91
|
+
class: "gx-Modal-Body-b1c1q51w",
|
|
92
|
+
propsAsIs: false
|
|
93
|
+
});
|
|
94
|
+
var Footer = /*#__PURE__*/ styled("div")({
|
|
95
|
+
name: "Footer",
|
|
96
|
+
class: "gx-Modal-Footer-f1aye683",
|
|
97
|
+
propsAsIs: false
|
|
98
|
+
});
|
|
99
|
+
var CloseSlot = /*#__PURE__*/ styled("span")({
|
|
100
|
+
name: "CloseSlot",
|
|
101
|
+
class: "gx-Modal-CloseSlot-c1uq3md9",
|
|
102
|
+
propsAsIs: false
|
|
103
|
+
});
|
|
104
|
+
/** A blocking dialog over a dimmed page: title row, scrolling body, actions row. */
|
|
105
|
+
var Modal = forwardRef(function Modal({ children, header, footer, size = "MEDIUM", isDismissable = true, isOpen: isOpenProp, defaultIsOpen = false, onOpenChange, ariaLabel, id, className, style, ...rest }, ref) {
|
|
106
|
+
const generatedId = useId();
|
|
107
|
+
const titleId = useId();
|
|
108
|
+
const { isOpen, setOpen } = useControlledOpenState({
|
|
109
|
+
isOpen: isOpenProp,
|
|
110
|
+
defaultIsOpen,
|
|
111
|
+
onOpenChange
|
|
46
112
|
});
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
113
|
+
const close = () => setOpen(false);
|
|
114
|
+
const { zIndex, isTopmost, overlayId } = useOverlay({
|
|
115
|
+
isOpen,
|
|
116
|
+
layer: OverlayLayer.MODAL,
|
|
117
|
+
onEscape: isDismissable ? close : void 0
|
|
118
|
+
});
|
|
119
|
+
const [hasOpened, setHasOpened] = useState(isOpen);
|
|
120
|
+
if (isOpen && !hasOpened) setHasOpened(true);
|
|
121
|
+
const [isOpenOnFirstRender] = useState(isOpen);
|
|
122
|
+
const shouldAnimateOnMount = !isOpenOnFirstRender;
|
|
123
|
+
/** Whether the current press started on the backdrop while this modal was topmost. */
|
|
124
|
+
const isBackdropPressRef = useRef(false);
|
|
125
|
+
const handleBackdropPointerDown = (event) => {
|
|
126
|
+
isBackdropPressRef.current = event.target === event.currentTarget && isTopmost;
|
|
127
|
+
};
|
|
128
|
+
const handleBackdropClick = (_event) => {
|
|
129
|
+
const isBackdropPress = isBackdropPressRef.current;
|
|
130
|
+
isBackdropPressRef.current = false;
|
|
131
|
+
if (isBackdropPress && isDismissable) close();
|
|
132
|
+
};
|
|
133
|
+
if (!hasOpened) return null;
|
|
134
|
+
const hasHeaderRow = header !== void 0 || isDismissable;
|
|
135
|
+
const labelling = ariaLabel !== void 0 ? { "aria-label": ariaLabel } : rest["aria-labelledby"] !== void 0 || header === void 0 ? {} : { "aria-labelledby": titleId };
|
|
136
|
+
const zStyle = { "--gx-modal-z": zIndex };
|
|
137
|
+
return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsxs(OverlayNode, {
|
|
138
|
+
overlayId,
|
|
139
|
+
children: [/* @__PURE__ */ jsx(Fade, {
|
|
140
|
+
isOpen,
|
|
141
|
+
shouldAnimateOnMount,
|
|
142
|
+
className: BACKDROP_FRAME_CSS,
|
|
143
|
+
style: zStyle,
|
|
144
|
+
children: /* @__PURE__ */ jsx(Backdrop, {
|
|
145
|
+
"aria-hidden": true,
|
|
146
|
+
onPointerDown: handleBackdropPointerDown,
|
|
147
|
+
onClick: handleBackdropClick
|
|
148
|
+
})
|
|
149
|
+
}), /* @__PURE__ */ jsx(Positioner, {
|
|
150
|
+
style: zStyle,
|
|
151
|
+
children: /* @__PURE__ */ jsx(ScaleFade, {
|
|
152
|
+
isOpen,
|
|
153
|
+
shouldAnimateOnMount,
|
|
154
|
+
className: cx(FRAME_CSS, MODAL_SIZE_TO_CSS_MAP[size]),
|
|
155
|
+
children: /* @__PURE__ */ jsx(FocusScope, {
|
|
156
|
+
autoFocus: FocusScopeAutoFocus.FIRST,
|
|
157
|
+
className: FOCUS_SCOPE_CSS,
|
|
158
|
+
children: /* @__PURE__ */ jsxs(Panel, {
|
|
159
|
+
...rest,
|
|
160
|
+
...labelling,
|
|
161
|
+
ref,
|
|
162
|
+
id: id ?? generatedId,
|
|
163
|
+
role: "dialog",
|
|
164
|
+
"aria-modal": "true",
|
|
165
|
+
className,
|
|
166
|
+
style,
|
|
167
|
+
children: [
|
|
168
|
+
hasHeaderRow && /* @__PURE__ */ jsx(Header, {
|
|
169
|
+
className: cx(isDismissable && HAS_CLOSE_CSS),
|
|
170
|
+
children: typeof header === "string" ? /* @__PURE__ */ jsx(Text, {
|
|
171
|
+
as: "h2",
|
|
172
|
+
size: TextSize.BODY_LG,
|
|
173
|
+
weight: TextWeight.MEDIUM,
|
|
174
|
+
id: titleId,
|
|
175
|
+
children: header
|
|
176
|
+
}) : header !== void 0 ? /* @__PURE__ */ jsx(HeaderNode, {
|
|
177
|
+
id: titleId,
|
|
178
|
+
children: header
|
|
179
|
+
}) : null
|
|
180
|
+
}),
|
|
181
|
+
/* @__PURE__ */ jsx(Body, { children: typeof children === "string" || typeof children === "number" ? /* @__PURE__ */ jsx(Text, { children }) : children }),
|
|
182
|
+
footer !== void 0 && /* @__PURE__ */ jsx(Footer, { children: footer }),
|
|
183
|
+
isDismissable && /* @__PURE__ */ jsx(CloseSlot, { children: /* @__PURE__ */ jsx(Button, {
|
|
184
|
+
variant: ButtonVariant.TERTIARY,
|
|
185
|
+
size: ButtonSize.SMALL,
|
|
186
|
+
icon: XIcon,
|
|
187
|
+
ariaLabel: CLOSE_LABEL,
|
|
188
|
+
onClick: close
|
|
189
|
+
}) })
|
|
190
|
+
]
|
|
191
|
+
})
|
|
192
|
+
})
|
|
193
|
+
})
|
|
194
|
+
})]
|
|
195
|
+
}) });
|
|
196
|
+
});
|
|
197
|
+
Modal.displayName = "Modal";
|
|
57
198
|
//#endregion
|
|
58
|
-
export { Modal as default };
|
|
199
|
+
export { ModalSize, Modal as default };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { type Icon as PhosphorIcon } from "@phosphor-icons/react";
|
|
2
|
+
import { type AriaAttributes, type CSSProperties, type ElementType } from "react";
|
|
3
|
+
/** Canonical rungs, subset; only the text step applies (a crumb has no control height). */
|
|
4
|
+
export declare enum BreadcrumbsSize {
|
|
5
|
+
/** body_sm crumbs (12 / 16), 12px icons. Topbars and dense headers. */
|
|
6
|
+
SMALL = "SMALL",
|
|
7
|
+
/** body_md crumbs (13 / 16), 14px icons. The default. */
|
|
8
|
+
MEDIUM = "MEDIUM"
|
|
9
|
+
}
|
|
10
|
+
/** The mark drawn between crumbs. */
|
|
11
|
+
export declare enum BreadcrumbsSeparator {
|
|
12
|
+
/** A "/" in tertiary text. The default. */
|
|
13
|
+
SLASH = "SLASH",
|
|
14
|
+
/** A `CaretRightIcon` in the tertiary icon color. */
|
|
15
|
+
CARET = "CARET"
|
|
16
|
+
}
|
|
17
|
+
/** One crumb. */
|
|
18
|
+
export interface BreadcrumbItem {
|
|
19
|
+
/** Crumb text (a workspace, project or page name). Truncates when the trail is too wide. */
|
|
20
|
+
label: string;
|
|
21
|
+
/** Destination. Without it, a non-current crumb is plain text (a level with no page of its own). Ignored on the last item. */
|
|
22
|
+
href?: string;
|
|
23
|
+
/** Phosphor icon component before the label (`FolderIcon`, not `<FolderIcon />`). */
|
|
24
|
+
icon?: PhosphorIcon;
|
|
25
|
+
}
|
|
26
|
+
export interface BreadcrumbsProps extends AriaAttributes {
|
|
27
|
+
/** The trail from the top level down. The last item is the current page. */
|
|
28
|
+
items: BreadcrumbItem[];
|
|
29
|
+
/**
|
|
30
|
+
* The mark between crumbs: a slash or a right caret.
|
|
31
|
+
* @default BreadcrumbsSeparator.SLASH
|
|
32
|
+
*/
|
|
33
|
+
separator?: BreadcrumbsSeparator;
|
|
34
|
+
/**
|
|
35
|
+
* Most crumbs shown before the middle collapses into a "…" menu: the first crumb, "…", then the last `maxItems − 2`. Values below 3 count as 3; `Infinity` never collapses.
|
|
36
|
+
* @default 4
|
|
37
|
+
*/
|
|
38
|
+
maxItems?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Text step: `SMALL` is `body_sm`, `MEDIUM` is `body_md`.
|
|
41
|
+
* @default BreadcrumbsSize.MEDIUM
|
|
42
|
+
*/
|
|
43
|
+
size?: BreadcrumbsSize;
|
|
44
|
+
/**
|
|
45
|
+
* Router link component that renders every crumb link (and the overflow menu's links). It receives `href` and must forward its `ref`.
|
|
46
|
+
* @default "a"
|
|
47
|
+
*/
|
|
48
|
+
as?: ElementType;
|
|
49
|
+
/**
|
|
50
|
+
* Accessible name of the `nav` landmark.
|
|
51
|
+
* @default Breadcrumb
|
|
52
|
+
*/
|
|
53
|
+
ariaLabel?: string;
|
|
54
|
+
/** DOM id of the `nav`. */
|
|
55
|
+
id?: string;
|
|
56
|
+
/** Any `data-*` attribute, forwarded to the `nav`. */
|
|
57
|
+
[dataAttribute: `data-${string}`]: string | number | boolean | undefined;
|
|
58
|
+
/** Extra class on the `nav`. */
|
|
59
|
+
className?: string;
|
|
60
|
+
/** Inline style on the `nav`; only for setting CSS custom properties. */
|
|
61
|
+
style?: CSSProperties;
|
|
62
|
+
}
|
|
63
|
+
/** A trail of links up the app's hierarchy, ending at the current page. */
|
|
64
|
+
declare const Breadcrumbs: import("react").ForwardRefExoticComponent<BreadcrumbsProps & import("react").RefAttributes<HTMLElement>>;
|
|
65
|
+
export default Breadcrumbs;
|