@galaxy-io/dls 1.6.0 → 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 -27
- package/dist/inputs/SwitcherInput.js +0 -64
- 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,509 @@
|
|
|
1
|
+
import FocusScope, { FocusScopeAutoFocus } from "../a11y/FocusScope.js";
|
|
2
|
+
import VisuallyHidden from "../a11y/VisuallyHidden.js";
|
|
3
|
+
import Text, { TextSize, TextVariant, TextWeight } from "../text/Text.js";
|
|
4
|
+
import { useControlledOpenState } from "../hooks/useControlledOpenState.js";
|
|
5
|
+
import Flex, { AlignItems } from "../layout/Flex.js";
|
|
6
|
+
import Portal from "../layout/Portal.js";
|
|
7
|
+
import { OverlayLayer, useOverlay } from "../overlay/useOverlay.js";
|
|
8
|
+
import Kbd, { KbdSize, KbdVariant } from "../text/Kbd.js";
|
|
9
|
+
import Divider from "../layout/Divider.js";
|
|
10
|
+
import { OverlayNode } from "../overlay/OverlayProvider.js";
|
|
11
|
+
import ScaleFade from "../transform/ScaleFade.js";
|
|
12
|
+
import { useHotkey } from "../hooks/useHotkey.js";
|
|
13
|
+
import Icon, { IconVariant } from "../icons/Icon.js";
|
|
14
|
+
import Fade from "../transform/Fade.js";
|
|
15
|
+
import { useDebouncedValue } from "../hooks/useDebouncedValue.js";
|
|
16
|
+
import { useLocalStorage } from "../hooks/useLocalStorage.js";
|
|
17
|
+
import { InputSize } from "../inputs/Input.js";
|
|
18
|
+
import SearchInput from "../inputs/SearchInput.js";
|
|
19
|
+
/* empty css */
|
|
20
|
+
import { styled } from "@linaria/react";
|
|
21
|
+
import { forwardRef, useEffect, useId, useRef, useState } from "react";
|
|
22
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
23
|
+
import { cx } from "@linaria/core";
|
|
24
|
+
//#region src/navigation/CommandPalette.tsx
|
|
25
|
+
/**
|
|
26
|
+
* The app-wide "type to do anything" dialog, usually opened with ⌘K: a modal panel near the top of
|
|
27
|
+
* the screen with a search field and a list of commands. Typing filters the list; the arrow keys
|
|
28
|
+
* move a highlight while focus stays in the field; Enter runs the highlighted command and closes
|
|
29
|
+
* the palette. Commands come from the app as data (`items`), each with its own `onSelect`.
|
|
30
|
+
*
|
|
31
|
+
* Built from Modal's primitives (Portal, the overlay stack, Fade, ScaleFade, FocusScope, the
|
|
32
|
+
* backdrop and its scroll lock), not by rendering `Modal`, and its rows copy Menu's `MEDIUM` look
|
|
33
|
+
* in a `role="listbox"` driven by `aria-activedescendant`. It does not route, fetch or rank:
|
|
34
|
+
* `onSearch` hands the term to the app, and commands do the work in `onSelect`.
|
|
35
|
+
*
|
|
36
|
+
* SSR: nothing renders on the server (closed by default; `Portal` renders nothing there).
|
|
37
|
+
* `useHotkey` and `useLocalStorage` are SSR-safe; nothing touches `window`, `document` or
|
|
38
|
+
* `localStorage` at module scope.
|
|
39
|
+
*/
|
|
40
|
+
/** Panel width (no width token; the Menu / Tooltip module-constant precedent). */
|
|
41
|
+
/** Distance of the panel from the top of the viewport, at least `space[48]`. */
|
|
42
|
+
/** The list's own cap; the panel's max height caps it further on short screens. */
|
|
43
|
+
/** How many chosen commands recents keep. */
|
|
44
|
+
var COMMAND_PALETTE_RECENT_LIMIT = 5;
|
|
45
|
+
/** Option icon px: the `MEDIUM` rung's icon, one step below III-A.4 (Mitch, 2026-10-04). */
|
|
46
|
+
var COMMAND_PALETTE_ICON_PX = 14;
|
|
47
|
+
/** Quiet period before the result count is announced. */
|
|
48
|
+
var COMMAND_PALETTE_ANNOUNCE_DELAY_MS = 500;
|
|
49
|
+
/** The key `useLocalStorage` gets while recents are off (it reads an in-memory adapter then). */
|
|
50
|
+
var COMMAND_PALETTE_NO_STORAGE_KEY = "gx-command-palette:off";
|
|
51
|
+
/** The default open shortcut. */
|
|
52
|
+
var COMMAND_PALETTE_DEFAULT_HOT_KEYS = ["mod", "k"];
|
|
53
|
+
/** The fixed English strings (Decision 15). */
|
|
54
|
+
var RECENT_HEADING = "Recent";
|
|
55
|
+
var LIST_LABEL = "Commands";
|
|
56
|
+
/** A per-instance in-memory storage, used while `storageKey` is not set. */
|
|
57
|
+
function createMemoryStorage() {
|
|
58
|
+
const values = /* @__PURE__ */ new Map();
|
|
59
|
+
return {
|
|
60
|
+
getItem: (key) => values.get(key) ?? null,
|
|
61
|
+
setItem: (key, value) => {
|
|
62
|
+
values.set(key, value);
|
|
63
|
+
},
|
|
64
|
+
removeItem: (key) => {
|
|
65
|
+
values.delete(key);
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Focuses `target` outside the palette while the palette's FocusScope is still mounted for its
|
|
71
|
+
* exit. The exiting panel keeps the props it had while open (ScaleFade freezes them), so its trap
|
|
72
|
+
* would pull this focus back; the one `focusin` this call dispatches is stopped before it reaches
|
|
73
|
+
* the trap's document listener.
|
|
74
|
+
*/
|
|
75
|
+
function focusPastExitingTrap(target) {
|
|
76
|
+
const stop = (event) => event.stopImmediatePropagation();
|
|
77
|
+
window.addEventListener("focusin", stop, true);
|
|
78
|
+
try {
|
|
79
|
+
target.focus();
|
|
80
|
+
} finally {
|
|
81
|
+
window.removeEventListener("focusin", stop, true);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/** Whether an item matches the normalized term (label, description or keywords; `includes`). */
|
|
85
|
+
function matches(item, normalized) {
|
|
86
|
+
if (normalized === "") return true;
|
|
87
|
+
return [
|
|
88
|
+
item.label,
|
|
89
|
+
item.description ?? "",
|
|
90
|
+
...item.keywords ?? []
|
|
91
|
+
].some((field) => field.toLocaleLowerCase().includes(normalized));
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Scroll lock: while the backdrop is mounted (open or exiting) the page does not scroll. Keyed on
|
|
95
|
+
* this module's backdrop, so it holds until the last modal backdrop is gone.
|
|
96
|
+
*/
|
|
97
|
+
var Backdrop = /*#__PURE__*/ styled("div")({
|
|
98
|
+
name: "Backdrop",
|
|
99
|
+
class: "gx-CommandPalette-Backdrop-brnx8g7",
|
|
100
|
+
propsAsIs: false
|
|
101
|
+
});
|
|
102
|
+
/** The backdrop's Fade root: positioned just under the panel. Sets no opacity or visibility. */
|
|
103
|
+
var BACKDROP_FRAME_CSS = "gx-CommandPalette-BACKDROP_FRAME_CSS-bt8eslj";
|
|
104
|
+
/** Top-anchors the panel, so the search field never moves as results change. */
|
|
105
|
+
var Positioner = /*#__PURE__*/ styled("div")({
|
|
106
|
+
name: "Positioner",
|
|
107
|
+
class: "gx-CommandPalette-Positioner-pjnwubt",
|
|
108
|
+
propsAsIs: false
|
|
109
|
+
});
|
|
110
|
+
/** The panel's ScaleFade root: it grows from the top center. */
|
|
111
|
+
var FRAME_CSS = "gx-CommandPalette-FRAME_CSS-f1kamwsl";
|
|
112
|
+
var FOCUS_SCOPE_CSS = "gx-CommandPalette-FOCUS_SCOPE_CSS-fi5b22w";
|
|
113
|
+
var Panel = /*#__PURE__*/ styled("div")({
|
|
114
|
+
name: "Panel",
|
|
115
|
+
class: "gx-CommandPalette-Panel-p1prc77",
|
|
116
|
+
propsAsIs: false
|
|
117
|
+
});
|
|
118
|
+
var SearchRow = /*#__PURE__*/ styled("div")({
|
|
119
|
+
name: "SearchRow",
|
|
120
|
+
class: "gx-CommandPalette-SearchRow-sdnz5av",
|
|
121
|
+
propsAsIs: false
|
|
122
|
+
});
|
|
123
|
+
var List = /*#__PURE__*/ styled("div")({
|
|
124
|
+
name: "List",
|
|
125
|
+
class: "gx-CommandPalette-List-l1g0qafo",
|
|
126
|
+
propsAsIs: false
|
|
127
|
+
});
|
|
128
|
+
var SectionRoot = /*#__PURE__*/ styled("div")({
|
|
129
|
+
name: "SectionRoot",
|
|
130
|
+
class: "gx-CommandPalette-SectionRoot-sdve7ff",
|
|
131
|
+
propsAsIs: false
|
|
132
|
+
});
|
|
133
|
+
/** Menu's `MEDIUM` group label. */
|
|
134
|
+
var GroupLabel = /*#__PURE__*/ styled("div")({
|
|
135
|
+
name: "GroupLabel",
|
|
136
|
+
class: "gx-CommandPalette-GroupLabel-g1ovrvxh",
|
|
137
|
+
propsAsIs: false
|
|
138
|
+
});
|
|
139
|
+
/** A row, with Menu's `MEDIUM` metrics. Declared before the state classes composed onto it. */
|
|
140
|
+
var Option = /*#__PURE__*/ styled("div")({
|
|
141
|
+
name: "Option",
|
|
142
|
+
class: "gx-CommandPalette-Option-o3t756v",
|
|
143
|
+
propsAsIs: false
|
|
144
|
+
});
|
|
145
|
+
/** The highlighted row (state class, not an attribute selector). */
|
|
146
|
+
var ACTIVE_OPTION_CSS = "gx-CommandPalette-ACTIVE_OPTION_CSS-aw5unga";
|
|
147
|
+
/** Press on an enabled row. */
|
|
148
|
+
var ENABLED_OPTION_CSS = "gx-CommandPalette-ENABLED_OPTION_CSS-ee1ftms";
|
|
149
|
+
/** A disabled row: never highlighted, cannot be chosen. */
|
|
150
|
+
var DISABLED_OPTION_CSS = "gx-CommandPalette-DISABLED_OPTION_CSS-dam55s1";
|
|
151
|
+
/** `leading`: never squeezed. */
|
|
152
|
+
var Slot = /*#__PURE__*/ styled("span")({
|
|
153
|
+
name: "Slot",
|
|
154
|
+
class: "gx-CommandPalette-Slot-s1qhom4i",
|
|
155
|
+
propsAsIs: false
|
|
156
|
+
});
|
|
157
|
+
/** Label and description, stacked; the only part that shrinks. */
|
|
158
|
+
var Content = /*#__PURE__*/ styled("span")({
|
|
159
|
+
name: "Content",
|
|
160
|
+
class: "gx-CommandPalette-Content-ch398je",
|
|
161
|
+
propsAsIs: false
|
|
162
|
+
});
|
|
163
|
+
/** Icons and caps never shrink. */
|
|
164
|
+
var NO_SHRINK_CSS = "gx-CommandPalette-NO_SHRINK_CSS-n1x8ztqn";
|
|
165
|
+
var EmptyRow = /*#__PURE__*/ styled("div")({
|
|
166
|
+
name: "EmptyRow",
|
|
167
|
+
class: "gx-CommandPalette-EmptyRow-e102shtd",
|
|
168
|
+
propsAsIs: false
|
|
169
|
+
});
|
|
170
|
+
/** The empty message sits where the first row's label would. */
|
|
171
|
+
var EmptyLine = /*#__PURE__*/ styled("span")({
|
|
172
|
+
name: "EmptyLine",
|
|
173
|
+
class: "gx-CommandPalette-EmptyLine-e10x9e8c",
|
|
174
|
+
propsAsIs: false
|
|
175
|
+
});
|
|
176
|
+
var Hints = /*#__PURE__*/ styled("div")({
|
|
177
|
+
name: "Hints",
|
|
178
|
+
class: "gx-CommandPalette-Hints-h1qfhkvy",
|
|
179
|
+
propsAsIs: false
|
|
180
|
+
});
|
|
181
|
+
/** The key hints in the footer: caps and what they do. */
|
|
182
|
+
var HINTS = [
|
|
183
|
+
{
|
|
184
|
+
keys: [["up"], ["down"]],
|
|
185
|
+
label: "to navigate"
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
keys: [["enter"]],
|
|
189
|
+
label: "to select"
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
keys: [["esc"]],
|
|
193
|
+
label: "to close"
|
|
194
|
+
}
|
|
195
|
+
];
|
|
196
|
+
/** A modal search-and-run dialog over a list of commands. */
|
|
197
|
+
var CommandPalette = forwardRef(function CommandPalette({ items, isOpen: isOpenProp, defaultIsOpen = false, onOpenChange, placeholder = "Type a command or search", onSearch, isLoading = false, emptyMessage = "No results", storageKey, hotKeys = COMMAND_PALETTE_DEFAULT_HOT_KEYS, shouldBindHotKey = false, ariaLabel = "Command palette", id, className, style, ...rest }, ref) {
|
|
198
|
+
const generatedId = useId();
|
|
199
|
+
const listId = useId();
|
|
200
|
+
const headingIdBase = useId();
|
|
201
|
+
const { isOpen, setOpen } = useControlledOpenState({
|
|
202
|
+
isOpen: isOpenProp,
|
|
203
|
+
defaultIsOpen,
|
|
204
|
+
onOpenChange
|
|
205
|
+
});
|
|
206
|
+
const close = () => setOpen(false);
|
|
207
|
+
const { zIndex, isTopmost, overlayId } = useOverlay({
|
|
208
|
+
isOpen,
|
|
209
|
+
layer: OverlayLayer.MODAL,
|
|
210
|
+
onEscape: close
|
|
211
|
+
});
|
|
212
|
+
useHotkey(hotKeys.join("+"), () => setOpen(!isOpen), {
|
|
213
|
+
isEnabled: shouldBindHotKey && hotKeys.length > 0,
|
|
214
|
+
shouldPreventDefault: true
|
|
215
|
+
});
|
|
216
|
+
const [memoryStorage] = useState(createMemoryStorage);
|
|
217
|
+
const [recentIds, setRecentIds] = useLocalStorage(storageKey ?? COMMAND_PALETTE_NO_STORAGE_KEY, [], { storage: storageKey === void 0 ? memoryStorage : void 0 });
|
|
218
|
+
const [term, setTerm] = useState("");
|
|
219
|
+
const [activeId, setActiveId] = useState(null);
|
|
220
|
+
const [hasTyped, setHasTyped] = useState(false);
|
|
221
|
+
const [scrollRequest, setScrollRequest] = useState(0);
|
|
222
|
+
const readFocus = () => typeof document === "undefined" ? null : document.activeElement;
|
|
223
|
+
const [focusBeforeOpen, setFocusBeforeOpen] = useState(() => isOpen ? readFocus() : null);
|
|
224
|
+
const [wasOpen, setWasOpen] = useState(isOpen);
|
|
225
|
+
if (wasOpen !== isOpen) {
|
|
226
|
+
setWasOpen(isOpen);
|
|
227
|
+
if (isOpen) {
|
|
228
|
+
setTerm("");
|
|
229
|
+
setActiveId(null);
|
|
230
|
+
setHasTyped(false);
|
|
231
|
+
setFocusBeforeOpen(readFocus());
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const reportedTermRef = useRef("");
|
|
235
|
+
const handleSearch = (next) => {
|
|
236
|
+
reportedTermRef.current = next;
|
|
237
|
+
onSearch?.(next);
|
|
238
|
+
};
|
|
239
|
+
const onSearchRef = useRef(onSearch);
|
|
240
|
+
useEffect(() => {
|
|
241
|
+
onSearchRef.current = onSearch;
|
|
242
|
+
});
|
|
243
|
+
useEffect(() => {
|
|
244
|
+
if (isOpen || reportedTermRef.current === "") return;
|
|
245
|
+
reportedTermRef.current = "";
|
|
246
|
+
onSearchRef.current?.("");
|
|
247
|
+
}, [isOpen]);
|
|
248
|
+
const handleTermChange = (next) => {
|
|
249
|
+
setTerm(next);
|
|
250
|
+
setActiveId(null);
|
|
251
|
+
setHasTyped(true);
|
|
252
|
+
};
|
|
253
|
+
const normalized = term.trim().toLocaleLowerCase();
|
|
254
|
+
const visibleItems = onSearch === void 0 ? items.filter((item) => matches(item, normalized)) : items;
|
|
255
|
+
const recentItems = storageKey !== void 0 && term === "" ? recentIds.flatMap((recentId) => {
|
|
256
|
+
const item = items.find((candidate) => candidate.id === recentId);
|
|
257
|
+
return item !== void 0 && !item.isDisabled ? [item] : [];
|
|
258
|
+
}) : [];
|
|
259
|
+
const recentSet = new Set(recentItems.map((item) => item.id));
|
|
260
|
+
const sections = [];
|
|
261
|
+
if (recentItems.length > 0) sections.push({
|
|
262
|
+
key: "recent",
|
|
263
|
+
heading: RECENT_HEADING,
|
|
264
|
+
items: recentItems
|
|
265
|
+
});
|
|
266
|
+
const ungrouped = [];
|
|
267
|
+
const groups = /* @__PURE__ */ new Map();
|
|
268
|
+
for (const item of visibleItems) {
|
|
269
|
+
if (recentSet.has(item.id)) continue;
|
|
270
|
+
if (item.group === void 0) ungrouped.push(item);
|
|
271
|
+
else {
|
|
272
|
+
const groupItems = groups.get(item.group) ?? [];
|
|
273
|
+
groupItems.push(item);
|
|
274
|
+
groups.set(item.group, groupItems);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
if (ungrouped.length > 0) sections.push({
|
|
278
|
+
key: "ungrouped",
|
|
279
|
+
heading: null,
|
|
280
|
+
items: ungrouped
|
|
281
|
+
});
|
|
282
|
+
for (const [group, groupItems] of groups) sections.push({
|
|
283
|
+
key: `group:${group}`,
|
|
284
|
+
heading: group,
|
|
285
|
+
items: groupItems
|
|
286
|
+
});
|
|
287
|
+
const rows = sections.flatMap((section) => section.items);
|
|
288
|
+
const enabledRows = rows.filter((item) => !item.isDisabled);
|
|
289
|
+
const rowCount = rows.length;
|
|
290
|
+
const resolvedActiveId = enabledRows.some((item) => item.id === activeId) ? activeId : enabledRows[0]?.id ?? null;
|
|
291
|
+
if (isOpen && resolvedActiveId !== activeId) setActiveId(resolvedActiveId);
|
|
292
|
+
const activeIndex = rows.findIndex((item) => item.id === resolvedActiveId);
|
|
293
|
+
const optionId = (index) => `${listId}-${index}`;
|
|
294
|
+
const activeOptionId = activeIndex === -1 ? void 0 : optionId(activeIndex);
|
|
295
|
+
useEffect(() => {
|
|
296
|
+
if (scrollRequest === 0 || activeOptionId === void 0) return;
|
|
297
|
+
document.getElementById(activeOptionId)?.scrollIntoView({ block: "nearest" });
|
|
298
|
+
}, [scrollRequest, activeOptionId]);
|
|
299
|
+
const debouncedCount = useDebouncedValue(rowCount, COMMAND_PALETTE_ANNOUNCE_DELAY_MS);
|
|
300
|
+
const announcement = !hasTyped || isLoading ? "" : debouncedCount === 0 ? emptyMessage : `${debouncedCount} ${debouncedCount === 1 ? "result" : "results"}`;
|
|
301
|
+
const choose = (item) => {
|
|
302
|
+
if (item.isDisabled) return;
|
|
303
|
+
if (storageKey !== void 0) setRecentIds((previous) => [item.id, ...previous.filter((recentId) => recentId !== item.id)].slice(0, COMMAND_PALETTE_RECENT_LIMIT));
|
|
304
|
+
setOpen(false);
|
|
305
|
+
if ((focusBeforeOpen instanceof HTMLElement || focusBeforeOpen instanceof SVGElement) && focusBeforeOpen.isConnected) focusPastExitingTrap(focusBeforeOpen);
|
|
306
|
+
item.onSelect();
|
|
307
|
+
};
|
|
308
|
+
const move = (step) => {
|
|
309
|
+
if (enabledRows.length === 0) return;
|
|
310
|
+
const current = enabledRows.findIndex((item) => item.id === resolvedActiveId);
|
|
311
|
+
const next = enabledRows[current === -1 ? step === 1 ? 0 : enabledRows.length - 1 : (current + step + enabledRows.length) % enabledRows.length];
|
|
312
|
+
if (next === void 0) return;
|
|
313
|
+
setActiveId(next.id);
|
|
314
|
+
setScrollRequest((count) => count + 1);
|
|
315
|
+
};
|
|
316
|
+
const handleKeyDown = (event) => {
|
|
317
|
+
if (event.key === "ArrowDown" || event.key === "ArrowUp") {
|
|
318
|
+
event.preventDefault();
|
|
319
|
+
move(event.key === "ArrowDown" ? 1 : -1);
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
if (event.key === "Enter" && !event.nativeEvent.isComposing) {
|
|
323
|
+
event.preventDefault();
|
|
324
|
+
const item = rows[activeIndex];
|
|
325
|
+
if (item !== void 0) choose(item);
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
const [hasOpened, setHasOpened] = useState(isOpen);
|
|
329
|
+
if (isOpen && !hasOpened) setHasOpened(true);
|
|
330
|
+
const [isOpenOnFirstRender] = useState(isOpen);
|
|
331
|
+
const shouldAnimateOnMount = !isOpenOnFirstRender;
|
|
332
|
+
/** Whether the current press started on the backdrop while this palette was topmost. */
|
|
333
|
+
const isBackdropPressRef = useRef(false);
|
|
334
|
+
const handleBackdropPointerDown = (event) => {
|
|
335
|
+
isBackdropPressRef.current = event.target === event.currentTarget && isTopmost;
|
|
336
|
+
};
|
|
337
|
+
const handleBackdropClick = (_event) => {
|
|
338
|
+
const isBackdropPress = isBackdropPressRef.current;
|
|
339
|
+
isBackdropPressRef.current = false;
|
|
340
|
+
if (isBackdropPress) close();
|
|
341
|
+
};
|
|
342
|
+
if (!hasOpened) return null;
|
|
343
|
+
const labelling = rest["aria-labelledby"] !== void 0 ? {} : { "aria-label": ariaLabel };
|
|
344
|
+
const zStyle = { "--gx-command-palette-z": zIndex };
|
|
345
|
+
const hasList = rowCount > 0 || isLoading;
|
|
346
|
+
let rowIndex = 0;
|
|
347
|
+
const renderOption = (item) => {
|
|
348
|
+
const index = rowIndex;
|
|
349
|
+
rowIndex += 1;
|
|
350
|
+
const isActive = item.id === resolvedActiveId;
|
|
351
|
+
const isDisabled = item.isDisabled === true;
|
|
352
|
+
return /* @__PURE__ */ jsxs(Option, {
|
|
353
|
+
id: optionId(index),
|
|
354
|
+
role: "option",
|
|
355
|
+
"aria-selected": isActive,
|
|
356
|
+
"aria-disabled": isDisabled || void 0,
|
|
357
|
+
className: cx(isDisabled ? DISABLED_OPTION_CSS : ENABLED_OPTION_CSS, isActive && ACTIVE_OPTION_CSS),
|
|
358
|
+
onMouseDown: (event) => event.preventDefault(),
|
|
359
|
+
onPointerMove: () => {
|
|
360
|
+
if (!isDisabled && !isActive) setActiveId(item.id);
|
|
361
|
+
},
|
|
362
|
+
onClick: () => choose(item),
|
|
363
|
+
children: [
|
|
364
|
+
item.leading !== void 0 && /* @__PURE__ */ jsx(Slot, { children: item.leading }),
|
|
365
|
+
item.icon !== void 0 && /* @__PURE__ */ jsx(Icon, {
|
|
366
|
+
component: item.icon,
|
|
367
|
+
size: COMMAND_PALETTE_ICON_PX,
|
|
368
|
+
variant: isDisabled ? IconVariant.DISABLED : IconVariant.SECONDARY,
|
|
369
|
+
className: NO_SHRINK_CSS,
|
|
370
|
+
"aria-hidden": true
|
|
371
|
+
}),
|
|
372
|
+
/* @__PURE__ */ jsxs(Content, { children: [/* @__PURE__ */ jsx(Text, {
|
|
373
|
+
as: "span",
|
|
374
|
+
size: TextSize.BODY_MD,
|
|
375
|
+
variant: isDisabled ? TextVariant.DISABLED : TextVariant.PRIMARY,
|
|
376
|
+
lineClamp: 1,
|
|
377
|
+
children: item.label
|
|
378
|
+
}), item.description !== void 0 && /* @__PURE__ */ jsx(Text, {
|
|
379
|
+
as: "span",
|
|
380
|
+
size: TextSize.BODY_SM,
|
|
381
|
+
variant: isDisabled ? TextVariant.DISABLED : TextVariant.TERTIARY,
|
|
382
|
+
lineClamp: 1,
|
|
383
|
+
children: item.description
|
|
384
|
+
})] }),
|
|
385
|
+
item.hotKeys !== void 0 && item.hotKeys.length > 0 && /* @__PURE__ */ jsx(Kbd, {
|
|
386
|
+
hotKeys: item.hotKeys,
|
|
387
|
+
size: KbdSize.MEDIUM,
|
|
388
|
+
variant: KbdVariant.PRIMARY,
|
|
389
|
+
isDisabled,
|
|
390
|
+
className: NO_SHRINK_CSS,
|
|
391
|
+
"aria-hidden": true
|
|
392
|
+
})
|
|
393
|
+
]
|
|
394
|
+
}, item.id);
|
|
395
|
+
};
|
|
396
|
+
return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsxs(OverlayNode, {
|
|
397
|
+
overlayId,
|
|
398
|
+
children: [/* @__PURE__ */ jsx(Fade, {
|
|
399
|
+
isOpen,
|
|
400
|
+
shouldAnimateOnMount,
|
|
401
|
+
className: BACKDROP_FRAME_CSS,
|
|
402
|
+
style: zStyle,
|
|
403
|
+
children: /* @__PURE__ */ jsx(Backdrop, {
|
|
404
|
+
"aria-hidden": true,
|
|
405
|
+
onPointerDown: handleBackdropPointerDown,
|
|
406
|
+
onClick: handleBackdropClick
|
|
407
|
+
})
|
|
408
|
+
}), /* @__PURE__ */ jsx(Positioner, {
|
|
409
|
+
style: zStyle,
|
|
410
|
+
children: /* @__PURE__ */ jsx(ScaleFade, {
|
|
411
|
+
isOpen,
|
|
412
|
+
shouldAnimateOnMount,
|
|
413
|
+
className: FRAME_CSS,
|
|
414
|
+
children: /* @__PURE__ */ jsx(FocusScope, {
|
|
415
|
+
autoFocus: FocusScopeAutoFocus.FIRST,
|
|
416
|
+
className: FOCUS_SCOPE_CSS,
|
|
417
|
+
children: /* @__PURE__ */ jsxs(Panel, {
|
|
418
|
+
...rest,
|
|
419
|
+
...labelling,
|
|
420
|
+
ref,
|
|
421
|
+
id: id ?? generatedId,
|
|
422
|
+
role: "dialog",
|
|
423
|
+
"aria-modal": "true",
|
|
424
|
+
className,
|
|
425
|
+
style,
|
|
426
|
+
children: [
|
|
427
|
+
/* @__PURE__ */ jsx(SearchRow, { children: /* @__PURE__ */ jsx(SearchInput, {
|
|
428
|
+
value: term,
|
|
429
|
+
onChange: handleTermChange,
|
|
430
|
+
...onSearch === void 0 ? {} : { onSearch: handleSearch },
|
|
431
|
+
isLoading,
|
|
432
|
+
placeholder,
|
|
433
|
+
size: InputSize.LARGE,
|
|
434
|
+
isGhost: true,
|
|
435
|
+
fillWidth: true,
|
|
436
|
+
autoComplete: "off",
|
|
437
|
+
spellCheck: false,
|
|
438
|
+
ariaLabel,
|
|
439
|
+
...hasList ? { "aria-controls": listId } : {},
|
|
440
|
+
"aria-autocomplete": "list",
|
|
441
|
+
...activeOptionId === void 0 ? {} : { "aria-activedescendant": activeOptionId },
|
|
442
|
+
onKeyDown: handleKeyDown
|
|
443
|
+
}) }),
|
|
444
|
+
/* @__PURE__ */ jsx(Divider, {}),
|
|
445
|
+
hasList ? /* @__PURE__ */ jsx(List, {
|
|
446
|
+
id: listId,
|
|
447
|
+
role: "listbox",
|
|
448
|
+
"aria-label": LIST_LABEL,
|
|
449
|
+
children: sections.map((section, sectionIndex) => {
|
|
450
|
+
const headingId = `${headingIdBase}-${sectionIndex}`;
|
|
451
|
+
return section.heading === null ? /* @__PURE__ */ jsx(SectionRoot, {
|
|
452
|
+
role: "presentation",
|
|
453
|
+
children: section.items.map(renderOption)
|
|
454
|
+
}, section.key) : /* @__PURE__ */ jsxs(SectionRoot, {
|
|
455
|
+
role: "group",
|
|
456
|
+
"aria-labelledby": headingId,
|
|
457
|
+
children: [/* @__PURE__ */ jsx(GroupLabel, {
|
|
458
|
+
role: "presentation",
|
|
459
|
+
id: headingId,
|
|
460
|
+
children: /* @__PURE__ */ jsx(Text, {
|
|
461
|
+
as: "span",
|
|
462
|
+
size: TextSize.BODY_SM,
|
|
463
|
+
weight: TextWeight.MEDIUM,
|
|
464
|
+
variant: TextVariant.TERTIARY,
|
|
465
|
+
lineClamp: 1,
|
|
466
|
+
children: section.heading
|
|
467
|
+
})
|
|
468
|
+
}), section.items.map(renderOption)]
|
|
469
|
+
}, section.key);
|
|
470
|
+
})
|
|
471
|
+
}) : /* @__PURE__ */ jsx(EmptyRow, { children: /* @__PURE__ */ jsx(EmptyLine, { children: /* @__PURE__ */ jsx(Text, {
|
|
472
|
+
size: TextSize.BODY_MD,
|
|
473
|
+
variant: TextVariant.TERTIARY,
|
|
474
|
+
children: emptyMessage
|
|
475
|
+
}) }) }),
|
|
476
|
+
/* @__PURE__ */ jsx(Divider, {}),
|
|
477
|
+
/* @__PURE__ */ jsx(Hints, {
|
|
478
|
+
"aria-hidden": "true",
|
|
479
|
+
children: HINTS.map((hint) => /* @__PURE__ */ jsxs(Flex, {
|
|
480
|
+
as: "span",
|
|
481
|
+
alignItems: AlignItems.CENTER,
|
|
482
|
+
gap: 4,
|
|
483
|
+
children: [hint.keys.map((keys) => /* @__PURE__ */ jsx(Kbd, {
|
|
484
|
+
hotKeys: keys,
|
|
485
|
+
size: KbdSize.SMALL,
|
|
486
|
+
variant: KbdVariant.PRIMARY
|
|
487
|
+
}, keys.join("+"))), /* @__PURE__ */ jsx(Text, {
|
|
488
|
+
as: "span",
|
|
489
|
+
size: TextSize.BODY_SM,
|
|
490
|
+
variant: TextVariant.TERTIARY,
|
|
491
|
+
children: hint.label
|
|
492
|
+
})]
|
|
493
|
+
}, hint.label))
|
|
494
|
+
}),
|
|
495
|
+
/* @__PURE__ */ jsx(VisuallyHidden, {
|
|
496
|
+
"aria-live": "polite",
|
|
497
|
+
"aria-atomic": "true",
|
|
498
|
+
children: announcement
|
|
499
|
+
})
|
|
500
|
+
]
|
|
501
|
+
})
|
|
502
|
+
})
|
|
503
|
+
})
|
|
504
|
+
})]
|
|
505
|
+
}) });
|
|
506
|
+
});
|
|
507
|
+
CommandPalette.displayName = "CommandPalette";
|
|
508
|
+
//#endregion
|
|
509
|
+
export { CommandPalette as default };
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { type AriaAttributes, type CSSProperties } from "react";
|
|
2
|
+
/** Canonical rungs; Pagination supports all five (the rung of every button and the select). */
|
|
3
|
+
export declare enum PaginationSize {
|
|
4
|
+
/** 20px controls, caption text. */
|
|
5
|
+
X_SMALL = "X_SMALL",
|
|
6
|
+
/** 24px controls, body_sm text. The usual size in a table footer or a Topbar. */
|
|
7
|
+
SMALL = "SMALL",
|
|
8
|
+
/** 32px controls, body_md text. The default. */
|
|
9
|
+
MEDIUM = "MEDIUM",
|
|
10
|
+
/** 36px controls, body_lg text. */
|
|
11
|
+
LARGE = "LARGE",
|
|
12
|
+
/** 40px controls, body_lg text. */
|
|
13
|
+
X_LARGE = "X_LARGE"
|
|
14
|
+
}
|
|
15
|
+
/** Every prop except the page-size pair. */
|
|
16
|
+
interface PaginationBaseProps extends AriaAttributes {
|
|
17
|
+
/** Number of items across all pages. The page count is `ceil(total / pageSize)`, at least 1. */
|
|
18
|
+
total: number;
|
|
19
|
+
/** Controlled current page, 1-based. Values outside `1…pageCount` render as the nearest page. */
|
|
20
|
+
value?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Initial page while uncontrolled.
|
|
23
|
+
* @default 1
|
|
24
|
+
*/
|
|
25
|
+
defaultValue?: number;
|
|
26
|
+
/** Called with the page the user picks, and with the page that keeps the first visible item in view when the page size changes. Not called for the current page. */
|
|
27
|
+
onChange?: (page: number) => void;
|
|
28
|
+
/**
|
|
29
|
+
* Items per page. Controlled: the app slices or fetches with it.
|
|
30
|
+
* @default 25
|
|
31
|
+
*/
|
|
32
|
+
pageSize?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Shows the range of items on this page, "1–25 of 312", before the controls.
|
|
35
|
+
* @default false
|
|
36
|
+
*/
|
|
37
|
+
hasSummary?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Replaces the page-number buttons with "3 of 13" between the arrows, for narrow toolbars and panels.
|
|
40
|
+
* @default false
|
|
41
|
+
*/
|
|
42
|
+
isCompact?: boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Control rung of every button and the select: 20 / 24 / 32 / 36 / 40px tall.
|
|
45
|
+
* @default PaginationSize.MEDIUM
|
|
46
|
+
*/
|
|
47
|
+
size?: PaginationSize;
|
|
48
|
+
/**
|
|
49
|
+
* Disables every control (while a page loads). The summary stays.
|
|
50
|
+
* @default false
|
|
51
|
+
*/
|
|
52
|
+
isDisabled?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Stretch to the parent's width, with the summary at the start and the controls at the end.
|
|
55
|
+
* @default false
|
|
56
|
+
*/
|
|
57
|
+
fillWidth?: boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Name of the `<nav>` landmark. Set it when a page has more than one paginated list ("Runs pagination").
|
|
60
|
+
* @default Pagination
|
|
61
|
+
*/
|
|
62
|
+
ariaLabel?: string;
|
|
63
|
+
/** DOM id of the `<nav>`. */
|
|
64
|
+
id?: string;
|
|
65
|
+
/** Any `data-*` attribute, forwarded to the `<nav>`. */
|
|
66
|
+
[dataAttribute: `data-${string}`]: string | number | boolean | undefined;
|
|
67
|
+
/** Extra class on the `<nav>`. */
|
|
68
|
+
className?: string;
|
|
69
|
+
/** Inline style on the `<nav>`; only for setting CSS custom properties. */
|
|
70
|
+
style?: CSSProperties;
|
|
71
|
+
}
|
|
72
|
+
/** The rows-per-page select appears only when its choice can be reported. */
|
|
73
|
+
type PaginationPageSize = {
|
|
74
|
+
/** Shows a "Rows per page" select with these sizes, in this order. Requires `onPageSizeChange`. */
|
|
75
|
+
pageSizeOptions: number[];
|
|
76
|
+
/** Called with the size chosen in the select. */
|
|
77
|
+
onPageSizeChange: (pageSize: number) => void;
|
|
78
|
+
} | {
|
|
79
|
+
/** Shows a "Rows per page" select with these sizes, in this order. Requires `onPageSizeChange`. */
|
|
80
|
+
pageSizeOptions?: undefined;
|
|
81
|
+
/** Called with the size chosen in the select. */
|
|
82
|
+
onPageSizeChange?: (pageSize: number) => void;
|
|
83
|
+
};
|
|
84
|
+
export type PaginationProps = PaginationBaseProps & PaginationPageSize;
|
|
85
|
+
/** Moves between the pages of a list or table, with an optional summary and page-size select. */
|
|
86
|
+
declare const Pagination: import("react").ForwardRefExoticComponent<PaginationProps & import("react").RefAttributes<HTMLElement>>;
|
|
87
|
+
export default Pagination;
|