@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,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Edits a short list of string pairs: HTTP headers for a connector, environment variables for a
|
|
3
|
+
* job, query parameters, metadata labels. Each pair is a row of two mono `TextInput`s (key, value)
|
|
4
|
+
* and a remove button; an "Add" button under the rows appends an empty pair and focuses its key.
|
|
5
|
+
* Pasting several `KEY=value` lines into a key field (a copied `.env` block) fills one row per
|
|
6
|
+
* line. The value is the list of pairs, with `value` / `defaultValue` / `onChange`; every
|
|
7
|
+
* keystroke reports the whole next list.
|
|
8
|
+
*
|
|
9
|
+
* A standalone KeyValueInput with `label` or `error` renders a `Field` around itself; inside a
|
|
10
|
+
* Field the group takes the Field's id and label, and the inner fields are shielded from the
|
|
11
|
+
* Field's context (each gets the description, error and disabled state explicitly). It never
|
|
12
|
+
* validates: duplicate or empty keys are the app's `error`. No 1.x equivalent.
|
|
13
|
+
*
|
|
14
|
+
* SSR: ids come from `useId`; focus moves run in an effect; nothing touches `window` or
|
|
15
|
+
* `document` at module scope.
|
|
16
|
+
*/
|
|
17
|
+
import { type AriaAttributes, type CSSProperties } from "react";
|
|
18
|
+
/** Canonical rungs; KeyValueInput supports all five. Every field and button in it uses the rung. */
|
|
19
|
+
export declare enum KeyValueInputSize {
|
|
20
|
+
/** 20px rows, 4px gaps. */
|
|
21
|
+
X_SMALL = "X_SMALL",
|
|
22
|
+
/** 24px rows, 4px gaps. */
|
|
23
|
+
SMALL = "SMALL",
|
|
24
|
+
/** 32px rows, 8px gaps. The default. */
|
|
25
|
+
MEDIUM = "MEDIUM",
|
|
26
|
+
/** 36px rows, 8px gaps. */
|
|
27
|
+
LARGE = "LARGE",
|
|
28
|
+
/** 40px rows, 8px gaps. */
|
|
29
|
+
X_LARGE = "X_LARGE"
|
|
30
|
+
}
|
|
31
|
+
/** Resting fill of every field (Constitution V-A surface set; the 1.x `InputVariant` members). */
|
|
32
|
+
export declare enum KeyValueInputVariant {
|
|
33
|
+
/** `background.base` fill. */
|
|
34
|
+
BASE = "BASE",
|
|
35
|
+
/** `background.primary` fill. The default. */
|
|
36
|
+
PRIMARY = "PRIMARY",
|
|
37
|
+
/** `background.secondary` fill. */
|
|
38
|
+
SECONDARY = "SECONDARY",
|
|
39
|
+
/** `background.tertiary` fill. */
|
|
40
|
+
TERTIARY = "TERTIARY"
|
|
41
|
+
}
|
|
42
|
+
/** One row. Both strings may be empty while the user is typing. */
|
|
43
|
+
export interface KeyValueInputPair {
|
|
44
|
+
/** The name: a header, a variable, a parameter. */
|
|
45
|
+
key: string;
|
|
46
|
+
/** The value for that key. */
|
|
47
|
+
value: string;
|
|
48
|
+
}
|
|
49
|
+
export interface KeyValueInputProps extends AriaAttributes {
|
|
50
|
+
/** Controlled rows, in display order. Pass it with `onChange`. */
|
|
51
|
+
value?: KeyValueInputPair[];
|
|
52
|
+
/**
|
|
53
|
+
* Initial rows while uncontrolled.
|
|
54
|
+
* @default []
|
|
55
|
+
*/
|
|
56
|
+
defaultValue?: KeyValueInputPair[];
|
|
57
|
+
/** Called with the whole next list on every edit, add, remove and paste. */
|
|
58
|
+
onChange?: (value: KeyValueInputPair[]) => void;
|
|
59
|
+
/**
|
|
60
|
+
* Control rung of every field and button: 20 / 24 / 32 / 36 / 40px rows.
|
|
61
|
+
* @default KeyValueInputSize.MEDIUM
|
|
62
|
+
*/
|
|
63
|
+
size?: KeyValueInputSize;
|
|
64
|
+
/**
|
|
65
|
+
* Resting fill of every field, from the surface set. Ignored with `isGhost`.
|
|
66
|
+
* @default KeyValueInputVariant.PRIMARY
|
|
67
|
+
*/
|
|
68
|
+
variant?: KeyValueInputVariant;
|
|
69
|
+
/**
|
|
70
|
+
* Ghost fields (1.x `TRANSPARENT`): every key and value field shows no fill and no hairline until
|
|
71
|
+
* hover or focus (Input's `isGhost`).
|
|
72
|
+
* @default false
|
|
73
|
+
*/
|
|
74
|
+
isGhost?: boolean;
|
|
75
|
+
/** Label above the rows, rendered through `Field`. For a description or a horizontal layout, wrap it in `Field` instead. */
|
|
76
|
+
label?: string;
|
|
77
|
+
/** Message from the app ("Header names must be unique"), shown under the rows through `Field`. It also marks every field invalid. */
|
|
78
|
+
error?: string;
|
|
79
|
+
/**
|
|
80
|
+
* Error borders and `aria-invalid` on every field, without a message. `error` implies it.
|
|
81
|
+
* @default false
|
|
82
|
+
*/
|
|
83
|
+
isError?: boolean;
|
|
84
|
+
/**
|
|
85
|
+
* No field, remove button or add button can be used. Shows the disabled look.
|
|
86
|
+
* @default false
|
|
87
|
+
*/
|
|
88
|
+
isDisabled?: boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Fields are focusable and selectable but not editable; no remove or add buttons.
|
|
91
|
+
* @default false
|
|
92
|
+
*/
|
|
93
|
+
isReadOnly?: boolean;
|
|
94
|
+
/**
|
|
95
|
+
* Required marker on the `label` (via `Field`). It does no validation.
|
|
96
|
+
* @default false
|
|
97
|
+
*/
|
|
98
|
+
isRequired?: boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Stretch to the parent's width. Without it, the control is 400px wide.
|
|
101
|
+
* @default false
|
|
102
|
+
*/
|
|
103
|
+
fillWidth?: boolean;
|
|
104
|
+
/** Accessible name of the group when there is no visible label (no `label` and no wrapping `Field`). */
|
|
105
|
+
ariaLabel?: string;
|
|
106
|
+
/**
|
|
107
|
+
* DOM id of the group. A wrapping `Field`'s id wins.
|
|
108
|
+
* @default useId()
|
|
109
|
+
*/
|
|
110
|
+
id?: string;
|
|
111
|
+
/** Any `data-*` attribute, forwarded to the group root. */
|
|
112
|
+
[dataAttribute: `data-${string}`]: string | number | boolean | undefined;
|
|
113
|
+
/** Extra class on the root: the `Field` wrapper when KeyValueInput renders one, otherwise the group. */
|
|
114
|
+
className?: string;
|
|
115
|
+
/** Inline style on the root; only for setting CSS custom properties. */
|
|
116
|
+
style?: CSSProperties;
|
|
117
|
+
}
|
|
118
|
+
/** Editable key/value rows (headers, environment variables) with add, remove and `.env` paste. */
|
|
119
|
+
declare const KeyValueInput: import("react").ForwardRefExoticComponent<KeyValueInputProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
120
|
+
export default KeyValueInput;
|
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
import { FontFamily } from "../theme/enums.js";
|
|
2
|
+
import { useControlledState } from "../hooks/useControlledState.js";
|
|
3
|
+
import Button, { ButtonSize, ButtonVariant } from "../buttons/Button.js";
|
|
4
|
+
import { useDevWarning } from "./internal/devWarn.js";
|
|
5
|
+
import { FieldContext } from "../hooks/useField.js";
|
|
6
|
+
import { isFilled } from "./internal/predicates.js";
|
|
7
|
+
import { useFieldWiring } from "./internal/fieldWiring.js";
|
|
8
|
+
import Field, { FieldSize } from "./Field.js";
|
|
9
|
+
import { rootStyle, useOwnField } from "./internal/ownField.js";
|
|
10
|
+
import { InputSize, InputVariant } from "./Input.js";
|
|
11
|
+
import TextInput from "./TextInput.js";
|
|
12
|
+
/* empty css */
|
|
13
|
+
import { styled } from "@linaria/react";
|
|
14
|
+
import { forwardRef, useEffect, useRef, useState } from "react";
|
|
15
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
16
|
+
import { cx } from "@linaria/core";
|
|
17
|
+
import { PlusIcon, TrashIcon } from "@phosphor-icons/react";
|
|
18
|
+
//#region src/inputs/KeyValueInput.tsx
|
|
19
|
+
/**
|
|
20
|
+
* Edits a short list of string pairs: HTTP headers for a connector, environment variables for a
|
|
21
|
+
* job, query parameters, metadata labels. Each pair is a row of two mono `TextInput`s (key, value)
|
|
22
|
+
* and a remove button; an "Add" button under the rows appends an empty pair and focuses its key.
|
|
23
|
+
* Pasting several `KEY=value` lines into a key field (a copied `.env` block) fills one row per
|
|
24
|
+
* line. The value is the list of pairs, with `value` / `defaultValue` / `onChange`; every
|
|
25
|
+
* keystroke reports the whole next list.
|
|
26
|
+
*
|
|
27
|
+
* A standalone KeyValueInput with `label` or `error` renders a `Field` around itself; inside a
|
|
28
|
+
* Field the group takes the Field's id and label, and the inner fields are shielded from the
|
|
29
|
+
* Field's context (each gets the description, error and disabled state explicitly). It never
|
|
30
|
+
* validates: duplicate or empty keys are the app's `error`. No 1.x equivalent.
|
|
31
|
+
*
|
|
32
|
+
* SSR: ids come from `useId`; focus moves run in an effect; nothing touches `window` or
|
|
33
|
+
* `document` at module scope.
|
|
34
|
+
*/
|
|
35
|
+
/** Canonical rungs; KeyValueInput supports all five. Every field and button in it uses the rung. */
|
|
36
|
+
var KeyValueInputSize = /* @__PURE__ */ function(KeyValueInputSize) {
|
|
37
|
+
/** 20px rows, 4px gaps. */
|
|
38
|
+
KeyValueInputSize["X_SMALL"] = "X_SMALL";
|
|
39
|
+
/** 24px rows, 4px gaps. */
|
|
40
|
+
KeyValueInputSize["SMALL"] = "SMALL";
|
|
41
|
+
/** 32px rows, 8px gaps. The default. */
|
|
42
|
+
KeyValueInputSize["MEDIUM"] = "MEDIUM";
|
|
43
|
+
/** 36px rows, 8px gaps. */
|
|
44
|
+
KeyValueInputSize["LARGE"] = "LARGE";
|
|
45
|
+
/** 40px rows, 8px gaps. */
|
|
46
|
+
KeyValueInputSize["X_LARGE"] = "X_LARGE";
|
|
47
|
+
return KeyValueInputSize;
|
|
48
|
+
}({});
|
|
49
|
+
/** Resting fill of every field (Constitution V-A surface set; the 1.x `InputVariant` members). */
|
|
50
|
+
var KeyValueInputVariant = /* @__PURE__ */ function(KeyValueInputVariant) {
|
|
51
|
+
/** `background.base` fill. */
|
|
52
|
+
KeyValueInputVariant["BASE"] = "BASE";
|
|
53
|
+
/** `background.primary` fill. The default. */
|
|
54
|
+
KeyValueInputVariant["PRIMARY"] = "PRIMARY";
|
|
55
|
+
/** `background.secondary` fill. */
|
|
56
|
+
KeyValueInputVariant["SECONDARY"] = "SECONDARY";
|
|
57
|
+
/** `background.tertiary` fill. */
|
|
58
|
+
KeyValueInputVariant["TERTIARY"] = "TERTIARY";
|
|
59
|
+
return KeyValueInputVariant;
|
|
60
|
+
}({});
|
|
61
|
+
/** The control's width without `fillWidth`: two fields of about the SelectInput width. */
|
|
62
|
+
/** The group: the rows, then the add button, then the live region. */
|
|
63
|
+
var Group = /*#__PURE__*/ styled("div")({
|
|
64
|
+
name: "Group",
|
|
65
|
+
class: "gx-KeyValueInput-Group-gofpoog",
|
|
66
|
+
propsAsIs: false
|
|
67
|
+
});
|
|
68
|
+
/** The rows, stretched to the group's width. */
|
|
69
|
+
var Rows = /*#__PURE__*/ styled("div")({
|
|
70
|
+
name: "Rows",
|
|
71
|
+
class: "gx-KeyValueInput-Rows-r1t1496n",
|
|
72
|
+
propsAsIs: false
|
|
73
|
+
});
|
|
74
|
+
/** One pair: key, value (twice the key's width) and the remove button, aligned across rows. */
|
|
75
|
+
var Row = /*#__PURE__*/ styled("div")({
|
|
76
|
+
name: "Row",
|
|
77
|
+
class: "gx-KeyValueInput-Row-rgbwsrt",
|
|
78
|
+
propsAsIs: false
|
|
79
|
+
});
|
|
80
|
+
/** Holds the key field and listens for a pasted `.env` block (TextInput takes no `onPaste`). */
|
|
81
|
+
var KeyCell = /*#__PURE__*/ styled("div")({
|
|
82
|
+
name: "KeyCell",
|
|
83
|
+
class: "gx-KeyValueInput-KeyCell-kiabogb",
|
|
84
|
+
propsAsIs: false
|
|
85
|
+
});
|
|
86
|
+
/** The polite live region for added and removed rows (`VisuallyHidden` takes no `role`). */
|
|
87
|
+
var StatusRegion = /*#__PURE__*/ styled("span")({
|
|
88
|
+
name: "StatusRegion",
|
|
89
|
+
class: "gx-KeyValueInput-StatusRegion-s1j4nof2",
|
|
90
|
+
propsAsIs: false
|
|
91
|
+
});
|
|
92
|
+
/** One gap per rung, for the rows, the columns and the space before the add button. */
|
|
93
|
+
var KEY_VALUE_INPUT_SIZE_TO_CSS_MAP = {
|
|
94
|
+
["X_SMALL"]: "gx-KeyValueInput-X_SMALL-x14q2aim",
|
|
95
|
+
["SMALL"]: "gx-KeyValueInput-SMALL-s1iblfrp",
|
|
96
|
+
["MEDIUM"]: "gx-KeyValueInput-MEDIUM-mcvz0me",
|
|
97
|
+
["LARGE"]: "gx-KeyValueInput-LARGE-lxtgl47",
|
|
98
|
+
["X_LARGE"]: "gx-KeyValueInput-X_LARGE-x1mu5zsx"
|
|
99
|
+
};
|
|
100
|
+
/** Read-only rows have no remove button, so the third column goes. */
|
|
101
|
+
var READ_ONLY_ROW_CSS = "gx-KeyValueInput-READ_ONLY_ROW_CSS-r1lp7xxb";
|
|
102
|
+
/** Stretch to the parent's width (the group, and the `Field` wrapper when there is one). */
|
|
103
|
+
var FILL_WIDTH_CSS = "gx-KeyValueInput-FILL_WIDTH_CSS-flbjeuq";
|
|
104
|
+
/** The fields' rung (identity). */
|
|
105
|
+
var KEY_VALUE_INPUT_SIZE_TO_INPUT_SIZE_MAP = {
|
|
106
|
+
["X_SMALL"]: InputSize.X_SMALL,
|
|
107
|
+
["SMALL"]: InputSize.SMALL,
|
|
108
|
+
["MEDIUM"]: InputSize.MEDIUM,
|
|
109
|
+
["LARGE"]: InputSize.LARGE,
|
|
110
|
+
["X_LARGE"]: InputSize.X_LARGE
|
|
111
|
+
};
|
|
112
|
+
/** The fields' fill (identity). */
|
|
113
|
+
var KEY_VALUE_INPUT_VARIANT_TO_INPUT_VARIANT_MAP = {
|
|
114
|
+
["BASE"]: InputVariant.BASE,
|
|
115
|
+
["PRIMARY"]: InputVariant.PRIMARY,
|
|
116
|
+
["SECONDARY"]: InputVariant.SECONDARY,
|
|
117
|
+
["TERTIARY"]: InputVariant.TERTIARY
|
|
118
|
+
};
|
|
119
|
+
/** The remove and add buttons' rung (identity): the icon-only square is as tall as the fields. */
|
|
120
|
+
var KEY_VALUE_INPUT_SIZE_TO_BUTTON_SIZE_MAP = {
|
|
121
|
+
["X_SMALL"]: ButtonSize.X_SMALL,
|
|
122
|
+
["SMALL"]: ButtonSize.SMALL,
|
|
123
|
+
["MEDIUM"]: ButtonSize.MEDIUM,
|
|
124
|
+
["LARGE"]: ButtonSize.LARGE,
|
|
125
|
+
["X_LARGE"]: ButtonSize.X_LARGE
|
|
126
|
+
};
|
|
127
|
+
/** The `Field` a KeyValueInput renders for its own `label` / `error` uses the same rung. */
|
|
128
|
+
var KEY_VALUE_INPUT_SIZE_TO_FIELD_SIZE_MAP = {
|
|
129
|
+
["X_SMALL"]: FieldSize.X_SMALL,
|
|
130
|
+
["SMALL"]: FieldSize.SMALL,
|
|
131
|
+
["MEDIUM"]: FieldSize.MEDIUM,
|
|
132
|
+
["LARGE"]: FieldSize.LARGE,
|
|
133
|
+
["X_LARGE"]: FieldSize.X_LARGE
|
|
134
|
+
};
|
|
135
|
+
/** Removes one pair of matching surrounding quotes (`"…"` or `'…'`). */
|
|
136
|
+
function unquote(text) {
|
|
137
|
+
if (text.length >= 2) {
|
|
138
|
+
const first = text[0];
|
|
139
|
+
if ((first === "\"" || first === "'") && text.endsWith(first)) return text.slice(1, -1);
|
|
140
|
+
}
|
|
141
|
+
return text;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Parses pasted `.env`-style lines: blank lines and `#` comments are skipped, a leading `export `
|
|
145
|
+
* is dropped, and each line splits at its first `=` (a line without one is a key with an empty
|
|
146
|
+
* value). Not a dotenv implementation.
|
|
147
|
+
*/
|
|
148
|
+
function parseLines(text) {
|
|
149
|
+
const pairs = [];
|
|
150
|
+
for (const rawLine of text.split(/\r\n|\r|\n/)) {
|
|
151
|
+
let line = rawLine.trim();
|
|
152
|
+
if (line === "" || line.startsWith("#")) continue;
|
|
153
|
+
if (line.startsWith("export ")) line = line.slice(7).trim();
|
|
154
|
+
const separator = line.indexOf("=");
|
|
155
|
+
if (separator === -1) {
|
|
156
|
+
pairs.push({
|
|
157
|
+
key: line,
|
|
158
|
+
value: ""
|
|
159
|
+
});
|
|
160
|
+
continue;
|
|
161
|
+
}
|
|
162
|
+
pairs.push({
|
|
163
|
+
key: line.slice(0, separator).trim(),
|
|
164
|
+
value: unquote(line.slice(separator + 1).trim())
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
return pairs;
|
|
168
|
+
}
|
|
169
|
+
/** The group, its rows and the add button, wired to the nearest Field (the input's own or the app's). */
|
|
170
|
+
function KeyValueGroup({ keyValueProps, forwardedRef, isRoot }) {
|
|
171
|
+
const { value, defaultValue = [], onChange, size = "MEDIUM", variant = "PRIMARY", isGhost = false, label: _label, error, isError = false, isDisabled = false, isReadOnly = false, isRequired = false, fillWidth = false, ariaLabel, id, "aria-describedby": ariaDescribedBy, className, style, ...rest } = keyValueProps;
|
|
172
|
+
const { field, controlId: groupId, describedBy: fieldDescribedBy, isInvalid, hasName } = useFieldWiring({
|
|
173
|
+
id,
|
|
174
|
+
ariaLabel,
|
|
175
|
+
ariaLabelAttribute: rest["aria-label"],
|
|
176
|
+
ariaLabelledBy: rest["aria-labelledby"],
|
|
177
|
+
ariaDescribedBy,
|
|
178
|
+
error,
|
|
179
|
+
isError,
|
|
180
|
+
isRequired
|
|
181
|
+
});
|
|
182
|
+
const [pairs, setPairs] = useControlledState({
|
|
183
|
+
value,
|
|
184
|
+
defaultValue,
|
|
185
|
+
onChange
|
|
186
|
+
});
|
|
187
|
+
const pairsRef = useRef(pairs);
|
|
188
|
+
pairsRef.current = pairs;
|
|
189
|
+
const [announcement, setAnnouncement] = useState("");
|
|
190
|
+
const keyRefs = useRef([]);
|
|
191
|
+
const valueRefs = useRef([]);
|
|
192
|
+
const addRef = useRef(null);
|
|
193
|
+
const pendingFocusRef = useRef(null);
|
|
194
|
+
const canEdit = !isDisabled && !isReadOnly;
|
|
195
|
+
const inputSize = KEY_VALUE_INPUT_SIZE_TO_INPUT_SIZE_MAP[size];
|
|
196
|
+
const inputVariant = KEY_VALUE_INPUT_VARIANT_TO_INPUT_VARIANT_MAP[variant];
|
|
197
|
+
const buttonSize = KEY_VALUE_INPUT_SIZE_TO_BUTTON_SIZE_MAP[size];
|
|
198
|
+
/** Sets the live region; a repeat of the same message is made distinct so it is read again. */
|
|
199
|
+
const announce = (message) => {
|
|
200
|
+
setAnnouncement((previous) => previous === message ? `${message} ` : message);
|
|
201
|
+
};
|
|
202
|
+
const commit = (next) => {
|
|
203
|
+
pairsRef.current = next;
|
|
204
|
+
setPairs(next);
|
|
205
|
+
};
|
|
206
|
+
const edit = (index, part, text) => {
|
|
207
|
+
const current = pairsRef.current;
|
|
208
|
+
const pair = current[index];
|
|
209
|
+
if (pair === void 0) return;
|
|
210
|
+
commit(current.map((item, position) => position === index ? {
|
|
211
|
+
...pair,
|
|
212
|
+
[part]: text
|
|
213
|
+
} : item));
|
|
214
|
+
};
|
|
215
|
+
const add = () => {
|
|
216
|
+
if (!canEdit) return;
|
|
217
|
+
const next = [...pairsRef.current, {
|
|
218
|
+
key: "",
|
|
219
|
+
value: ""
|
|
220
|
+
}];
|
|
221
|
+
pendingFocusRef.current = {
|
|
222
|
+
kind: "key",
|
|
223
|
+
index: next.length - 1
|
|
224
|
+
};
|
|
225
|
+
commit(next);
|
|
226
|
+
announce("Row added");
|
|
227
|
+
};
|
|
228
|
+
const remove = (index) => {
|
|
229
|
+
if (!canEdit) return;
|
|
230
|
+
const next = pairsRef.current.filter((_, position) => position !== index);
|
|
231
|
+
pendingFocusRef.current = index < next.length ? {
|
|
232
|
+
kind: "key",
|
|
233
|
+
index
|
|
234
|
+
} : index > 0 ? {
|
|
235
|
+
kind: "key",
|
|
236
|
+
index: index - 1
|
|
237
|
+
} : { kind: "add" };
|
|
238
|
+
commit(next);
|
|
239
|
+
announce("Row removed");
|
|
240
|
+
};
|
|
241
|
+
/** A paste with a newline or an `=` into a key field fills rows from its lines. */
|
|
242
|
+
const handleKeyPaste = (index) => (event) => {
|
|
243
|
+
if (!canEdit) return;
|
|
244
|
+
const text = event.clipboardData.getData("text");
|
|
245
|
+
if (!/[\r\n=]/.test(text)) return;
|
|
246
|
+
event.preventDefault();
|
|
247
|
+
const parsed = parseLines(text);
|
|
248
|
+
if (parsed.length === 0) return;
|
|
249
|
+
const current = pairsRef.current;
|
|
250
|
+
commit([
|
|
251
|
+
...current.slice(0, index),
|
|
252
|
+
...parsed,
|
|
253
|
+
...current.slice(index + 1)
|
|
254
|
+
]);
|
|
255
|
+
pendingFocusRef.current = {
|
|
256
|
+
kind: "value",
|
|
257
|
+
index: index + parsed.length - 1
|
|
258
|
+
};
|
|
259
|
+
announce(parsed.length === 1 ? "1 row added" : `${parsed.length} rows added`);
|
|
260
|
+
};
|
|
261
|
+
useEffect(() => {
|
|
262
|
+
const target = pendingFocusRef.current;
|
|
263
|
+
if (target === null) return;
|
|
264
|
+
pendingFocusRef.current = null;
|
|
265
|
+
(target.kind === "add" ? addRef.current : target.kind === "key" ? keyRefs.current[target.index] : valueRefs.current[target.index])?.focus();
|
|
266
|
+
});
|
|
267
|
+
useDevWarning(!hasName, "[@galaxy-io/dls] KeyValueInput has no accessible name. Pass `label`, wrap it in a labelled `Field`, or set `ariaLabel`.");
|
|
268
|
+
const rows = pairs.map((pair, index) => ({
|
|
269
|
+
pair,
|
|
270
|
+
index
|
|
271
|
+
}));
|
|
272
|
+
return /* @__PURE__ */ jsxs(Group, {
|
|
273
|
+
...field?.labelId === void 0 ? {} : { "aria-labelledby": field.labelId },
|
|
274
|
+
...rest,
|
|
275
|
+
ref: forwardedRef,
|
|
276
|
+
id: groupId,
|
|
277
|
+
role: "group",
|
|
278
|
+
"aria-label": ariaLabel ?? rest["aria-label"],
|
|
279
|
+
className: cx(KEY_VALUE_INPUT_SIZE_TO_CSS_MAP[size], fillWidth && FILL_WIDTH_CSS, isRoot ? className : void 0),
|
|
280
|
+
...rootStyle(isRoot, style),
|
|
281
|
+
children: [/* @__PURE__ */ jsxs(FieldContext.Provider, {
|
|
282
|
+
value: null,
|
|
283
|
+
children: [pairs.length > 0 && /* @__PURE__ */ jsx(Rows, { children: rows.map(({ pair, index }) => {
|
|
284
|
+
const rowNumber = index + 1;
|
|
285
|
+
return /* @__PURE__ */ jsxs(Row, {
|
|
286
|
+
className: cx(isReadOnly && READ_ONLY_ROW_CSS),
|
|
287
|
+
children: [
|
|
288
|
+
/* @__PURE__ */ jsx(KeyCell, {
|
|
289
|
+
onPaste: handleKeyPaste(index),
|
|
290
|
+
children: /* @__PURE__ */ jsx(TextInput, {
|
|
291
|
+
ref: (element) => {
|
|
292
|
+
keyRefs.current[index] = element;
|
|
293
|
+
},
|
|
294
|
+
value: pair.key,
|
|
295
|
+
onChange: (text) => edit(index, "key", text),
|
|
296
|
+
size: inputSize,
|
|
297
|
+
variant: inputVariant,
|
|
298
|
+
isGhost,
|
|
299
|
+
family: FontFamily.MONO,
|
|
300
|
+
placeholder: "Key",
|
|
301
|
+
ariaLabel: `Key ${rowNumber}`,
|
|
302
|
+
isError: isInvalid,
|
|
303
|
+
isDisabled,
|
|
304
|
+
isReadOnly,
|
|
305
|
+
fillWidth: true,
|
|
306
|
+
...fieldDescribedBy === void 0 ? {} : { "aria-describedby": fieldDescribedBy }
|
|
307
|
+
})
|
|
308
|
+
}),
|
|
309
|
+
/* @__PURE__ */ jsx(TextInput, {
|
|
310
|
+
ref: (element) => {
|
|
311
|
+
valueRefs.current[index] = element;
|
|
312
|
+
},
|
|
313
|
+
value: pair.value,
|
|
314
|
+
onChange: (text) => edit(index, "value", text),
|
|
315
|
+
size: inputSize,
|
|
316
|
+
variant: inputVariant,
|
|
317
|
+
isGhost,
|
|
318
|
+
family: FontFamily.MONO,
|
|
319
|
+
placeholder: "Value",
|
|
320
|
+
ariaLabel: `Value ${rowNumber}`,
|
|
321
|
+
isError: isInvalid,
|
|
322
|
+
isDisabled,
|
|
323
|
+
isReadOnly,
|
|
324
|
+
fillWidth: true,
|
|
325
|
+
...fieldDescribedBy === void 0 ? {} : { "aria-describedby": fieldDescribedBy }
|
|
326
|
+
}),
|
|
327
|
+
!isReadOnly && /* @__PURE__ */ jsx(Button, {
|
|
328
|
+
variant: ButtonVariant.TERTIARY,
|
|
329
|
+
size: buttonSize,
|
|
330
|
+
icon: TrashIcon,
|
|
331
|
+
ariaLabel: isFilled(pair.key) ? `Remove ${pair.key}` : `Remove row ${rowNumber}`,
|
|
332
|
+
isDisabled,
|
|
333
|
+
onClick: () => remove(index)
|
|
334
|
+
})
|
|
335
|
+
]
|
|
336
|
+
}, index);
|
|
337
|
+
}) }), !isReadOnly && /* @__PURE__ */ jsx(Button, {
|
|
338
|
+
ref: addRef,
|
|
339
|
+
variant: ButtonVariant.TERTIARY,
|
|
340
|
+
size: buttonSize,
|
|
341
|
+
icon: PlusIcon,
|
|
342
|
+
label: "Add",
|
|
343
|
+
isDisabled,
|
|
344
|
+
onClick: add
|
|
345
|
+
})]
|
|
346
|
+
}), /* @__PURE__ */ jsx(StatusRegion, {
|
|
347
|
+
role: "status",
|
|
348
|
+
"aria-live": "polite",
|
|
349
|
+
children: announcement
|
|
350
|
+
})]
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
/** Editable key/value rows (headers, environment variables) with add, remove and `.env` paste. */
|
|
354
|
+
var KeyValueInput = forwardRef(function KeyValueInput(props, ref) {
|
|
355
|
+
const { label, error, isRequired = false, size = "MEDIUM", fillWidth = false, id, className, style } = props;
|
|
356
|
+
const ownField = useOwnField({
|
|
357
|
+
componentName: "KeyValueInput",
|
|
358
|
+
label,
|
|
359
|
+
error,
|
|
360
|
+
isRequired,
|
|
361
|
+
size: KEY_VALUE_INPUT_SIZE_TO_FIELD_SIZE_MAP[size],
|
|
362
|
+
id,
|
|
363
|
+
className,
|
|
364
|
+
style,
|
|
365
|
+
rootClassName: fillWidth && FILL_WIDTH_CSS
|
|
366
|
+
});
|
|
367
|
+
if (ownField !== null) return /* @__PURE__ */ jsx(Field, {
|
|
368
|
+
...ownField,
|
|
369
|
+
children: /* @__PURE__ */ jsx(KeyValueGroup, {
|
|
370
|
+
keyValueProps: props,
|
|
371
|
+
forwardedRef: ref,
|
|
372
|
+
isRoot: false
|
|
373
|
+
})
|
|
374
|
+
});
|
|
375
|
+
return /* @__PURE__ */ jsx(KeyValueGroup, {
|
|
376
|
+
keyValueProps: props,
|
|
377
|
+
forwardedRef: ref,
|
|
378
|
+
isRoot: true
|
|
379
|
+
});
|
|
380
|
+
});
|
|
381
|
+
KeyValueInput.displayName = "KeyValueInput";
|
|
382
|
+
//#endregion
|
|
383
|
+
export { KeyValueInputSize, KeyValueInputVariant, KeyValueInput as default };
|