@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,408 @@
|
|
|
1
|
+
import VisuallyHidden from "../a11y/VisuallyHidden.js";
|
|
2
|
+
import { useControlledState } from "../hooks/useControlledState.js";
|
|
3
|
+
import Chip, { ChipSize, ChipVariant } from "../chips/Chip.js";
|
|
4
|
+
import { useDevWarning } from "./internal/devWarn.js";
|
|
5
|
+
import { useFieldWiring } from "./internal/fieldWiring.js";
|
|
6
|
+
import Field, { FieldSize } from "./Field.js";
|
|
7
|
+
import { rootStyle, useOwnField } from "./internal/ownField.js";
|
|
8
|
+
/* empty css */
|
|
9
|
+
import { styled } from "@linaria/react";
|
|
10
|
+
import { forwardRef, useRef, useState } from "react";
|
|
11
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
12
|
+
import { cx } from "@linaria/core";
|
|
13
|
+
import { useMergeRefs } from "@floating-ui/react";
|
|
14
|
+
//#region src/inputs/TagInput.tsx
|
|
15
|
+
/**
|
|
16
|
+
* The field for a free-form list of short strings: tags, email recipients, allowed domains, label
|
|
17
|
+
* keys. The user types an entry and presses Enter or a separator (a comma by default) and the
|
|
18
|
+
* entry becomes a chip; pasting a list adds every entry at once. Each chip has a × to remove it,
|
|
19
|
+
* and Backspace in the empty field removes the last one. The value is the list of strings, with
|
|
20
|
+
* `value` / `defaultValue` / `onChange`; the text being typed is not part of it until committed.
|
|
21
|
+
* Entries are trimmed and duplicates are dropped. The field draws Input's frame and grows to new
|
|
22
|
+
* lines as chips wrap.
|
|
23
|
+
*
|
|
24
|
+
* The app can mark entries invalid with `isTagInvalid`; TagInput shows them as error chips but
|
|
25
|
+
* never decides validity itself. A standalone TagInput with `label` or `error` renders a `Field`
|
|
26
|
+
* around itself; inside a Field it reads the Field's wiring with `useField()`. Replaces 1.x
|
|
27
|
+
* `MultiTextInput` (`InputSize` / `InputVariant` → `TagInputSize` / `TagInputVariant`,
|
|
28
|
+
* `separator` → `separators`, `width` removed).
|
|
29
|
+
*
|
|
30
|
+
* SSR: ids come from `useId`; nothing touches `window` or `document` at module scope or during
|
|
31
|
+
* render.
|
|
32
|
+
*/
|
|
33
|
+
/** Canonical rungs; TagInput supports all five. One line of the field is the rung height. */
|
|
34
|
+
var TagInputSize = /* @__PURE__ */ function(TagInputSize) {
|
|
35
|
+
/** 20px line, 16px chips, caption text. */
|
|
36
|
+
TagInputSize["X_SMALL"] = "X_SMALL";
|
|
37
|
+
/** 24px line, 16px chips, body_sm text. */
|
|
38
|
+
TagInputSize["SMALL"] = "SMALL";
|
|
39
|
+
/** 32px line, 20px chips, body_md text. The default. */
|
|
40
|
+
TagInputSize["MEDIUM"] = "MEDIUM";
|
|
41
|
+
/** 36px line, 24px chips, body_lg text. */
|
|
42
|
+
TagInputSize["LARGE"] = "LARGE";
|
|
43
|
+
/** 40px line, 28px chips, body_lg text. */
|
|
44
|
+
TagInputSize["X_LARGE"] = "X_LARGE";
|
|
45
|
+
return TagInputSize;
|
|
46
|
+
}({});
|
|
47
|
+
/** Resting fill of the field (Constitution V-A surface set; the 1.x `InputVariant` members, unchanged). */
|
|
48
|
+
var TagInputVariant = /* @__PURE__ */ function(TagInputVariant) {
|
|
49
|
+
/** `background.base` fill. */
|
|
50
|
+
TagInputVariant["BASE"] = "BASE";
|
|
51
|
+
/** `background.primary` fill. The default. */
|
|
52
|
+
TagInputVariant["PRIMARY"] = "PRIMARY";
|
|
53
|
+
/** `background.secondary` fill. */
|
|
54
|
+
TagInputVariant["SECONDARY"] = "SECONDARY";
|
|
55
|
+
/** `background.tertiary` fill. */
|
|
56
|
+
TagInputVariant["TERTIARY"] = "TERTIARY";
|
|
57
|
+
return TagInputVariant;
|
|
58
|
+
}({});
|
|
59
|
+
/** The field's width without `fillWidth` (the SelectInput default). */
|
|
60
|
+
/** The narrowest the text input gets before it wraps to a new line (the 1.x `min-width`). */
|
|
61
|
+
/** Default separators: a comma. */
|
|
62
|
+
var TAG_INPUT_DEFAULT_SEPARATORS = [","];
|
|
63
|
+
/** A paste also splits on these, so a column copied from a spreadsheet or a file splits by line. */
|
|
64
|
+
var TAG_INPUT_PASTE_SEPARATORS = [
|
|
65
|
+
"\n",
|
|
66
|
+
"\r",
|
|
67
|
+
" "
|
|
68
|
+
];
|
|
69
|
+
/**
|
|
70
|
+
* The visual box: the chips, then the text input. One line of chips is exactly the rung height;
|
|
71
|
+
* each wrapped line adds a chip and a 4px gap. Focus is drawn here as `border.focused` on the
|
|
72
|
+
* hairline plus a 1px inset (`FIELD_FOCUS`), whenever the text input has focus. The hairline is drawn by `::before`
|
|
73
|
+
* over the frame's edge, in the frame's own `border-color` (which the variant, hover, focus and
|
|
74
|
+
* error rules set on a zero-width border), so the height is `chip + 2 × inset` at every device
|
|
75
|
+
* pixel ratio: a 0.5px border in the box would round up to 1px on 1x screens and add a pixel to
|
|
76
|
+
* the line.
|
|
77
|
+
*/
|
|
78
|
+
var Frame = /*#__PURE__*/ styled("div")({
|
|
79
|
+
name: "Frame",
|
|
80
|
+
class: "gx-TagInput-Frame-f1wkm731",
|
|
81
|
+
propsAsIs: false
|
|
82
|
+
});
|
|
83
|
+
/** One tag's chip; it may shrink to the line, so a long tag truncates inside the chip. */
|
|
84
|
+
var TagItem = /*#__PURE__*/ styled("span")({
|
|
85
|
+
name: "TagItem",
|
|
86
|
+
class: "gx-TagInput-TagItem-t17uxts3",
|
|
87
|
+
propsAsIs: false
|
|
88
|
+
});
|
|
89
|
+
/** The text being typed: no chrome of its own; it takes the rest of the line, at least 80px. */
|
|
90
|
+
var Draft = /*#__PURE__*/ styled("input")({
|
|
91
|
+
name: "Draft",
|
|
92
|
+
class: "gx-TagInput-Draft-d1nfwt42",
|
|
93
|
+
propsAsIs: false
|
|
94
|
+
});
|
|
95
|
+
/** The polite live region for added, removed and duplicate tags (`VisuallyHidden` takes no `role`). */
|
|
96
|
+
var StatusRegion = /*#__PURE__*/ styled("span")({
|
|
97
|
+
name: "StatusRegion",
|
|
98
|
+
class: "gx-TagInput-StatusRegion-s1c7eovr",
|
|
99
|
+
propsAsIs: false
|
|
100
|
+
});
|
|
101
|
+
/** While there are no tags, the text starts where a TextInput's text does at the same rung. */
|
|
102
|
+
var EMPTY_DRAFT_CSS = "gx-TagInput-EMPTY_DRAFT_CSS-eq5t364";
|
|
103
|
+
/**
|
|
104
|
+
* Line height, chip height, inset and text offset per rung, plus the text input's type. One line
|
|
105
|
+
* is `chip + 2 × inset` in border-box: 16 + 2×2, 16 + 2×4, 20 + 2×6, 24 + 2×6, 28 + 2×6.
|
|
106
|
+
*/
|
|
107
|
+
var TAG_INPUT_SIZE_TO_CSS_MAP = {
|
|
108
|
+
["X_SMALL"]: "gx-TagInput-X_SMALL-x8akds0",
|
|
109
|
+
["SMALL"]: "gx-TagInput-SMALL-sq012y8",
|
|
110
|
+
["MEDIUM"]: "gx-TagInput-MEDIUM-m1fsqjlf",
|
|
111
|
+
["LARGE"]: "gx-TagInput-LARGE-l10yf1a",
|
|
112
|
+
["X_LARGE"]: "gx-TagInput-X_LARGE-xxkesin"
|
|
113
|
+
};
|
|
114
|
+
/** Rest look per variant: fill and hairline color (the shared `FIELD_SURFACE_TO_REST_MAP` fragments). */
|
|
115
|
+
var TAG_INPUT_VARIANT_TO_CSS_MAP = {
|
|
116
|
+
["BASE"]: "gx-TagInput-BASE-b1mm0zeo",
|
|
117
|
+
["PRIMARY"]: "gx-TagInput-PRIMARY-p1cnbmmu",
|
|
118
|
+
["SECONDARY"]: "gx-TagInput-SECONDARY-s8g5ipk",
|
|
119
|
+
["TERTIARY"]: "gx-TagInput-TERTIARY-t1sqgv1g"
|
|
120
|
+
};
|
|
121
|
+
/** `isGhost`: no fill and no hairline at rest. Declared after the variant map, which it replaces. */
|
|
122
|
+
var GHOST_CSS = "gx-TagInput-GHOST_CSS-g1bbep7t";
|
|
123
|
+
/**
|
|
124
|
+
* Hover on an editable field (2026-10-03 field-frame resolution): `border.hovered`. Focus keeps
|
|
125
|
+
* `border.focused`.
|
|
126
|
+
*/
|
|
127
|
+
var TAG_INPUT_VARIANT_TO_HOVER_CSS_MAP = {
|
|
128
|
+
["BASE"]: "gx-TagInput-BASE-bu44p55",
|
|
129
|
+
["PRIMARY"]: "gx-TagInput-PRIMARY-p15utnv6",
|
|
130
|
+
["SECONDARY"]: "gx-TagInput-SECONDARY-s1dgogmr",
|
|
131
|
+
["TERTIARY"]: "gx-TagInput-TERTIARY-t1chy3wt"
|
|
132
|
+
};
|
|
133
|
+
/** Hover on an editable ghost field: the frame appears, `border.hovered` with no fill. */
|
|
134
|
+
var GHOST_HOVER_CSS = "gx-TagInput-GHOST_HOVER_CSS-gvbd3pq";
|
|
135
|
+
/** Error border at rest, on hover and with focus (the 1px inset focus line is red too). */
|
|
136
|
+
var ERROR_CSS = "gx-TagInput-ERROR_CSS-e1xtw92t";
|
|
137
|
+
/**
|
|
138
|
+
* Disabled: the variant's resting fill and hairline are kept (`border.disabled` is not used on
|
|
139
|
+
* frames); the field reads as disabled through the chips, `text.disabled` and the cursor.
|
|
140
|
+
*/
|
|
141
|
+
var DISABLED_CSS = "gx-TagInput-DISABLED_CSS-dnya61k";
|
|
142
|
+
/** Stretch to the parent's width (frame, and the `Field` wrapper when there is one). */
|
|
143
|
+
var FILL_WIDTH_CSS = "gx-TagInput-FILL_WIDTH_CSS-frlh1fb";
|
|
144
|
+
/** Chip rung per field rung (MultiSelectInput's): 2 to 6px inside the line. */
|
|
145
|
+
var TAG_INPUT_SIZE_TO_CHIP_SIZE_MAP = {
|
|
146
|
+
["X_SMALL"]: ChipSize.X_SMALL,
|
|
147
|
+
["SMALL"]: ChipSize.X_SMALL,
|
|
148
|
+
["MEDIUM"]: ChipSize.SMALL,
|
|
149
|
+
["LARGE"]: ChipSize.MEDIUM,
|
|
150
|
+
["X_LARGE"]: ChipSize.LARGE
|
|
151
|
+
};
|
|
152
|
+
/** A chip is always one fill step away from the field behind it (the 1.x map; a ghost field's chips are `SECONDARY`). */
|
|
153
|
+
var TAG_INPUT_VARIANT_TO_CHIP_VARIANT_MAP = {
|
|
154
|
+
["BASE"]: ChipVariant.SECONDARY,
|
|
155
|
+
["PRIMARY"]: ChipVariant.SECONDARY,
|
|
156
|
+
["SECONDARY"]: ChipVariant.PRIMARY,
|
|
157
|
+
["TERTIARY"]: ChipVariant.SECONDARY
|
|
158
|
+
};
|
|
159
|
+
/** The `Field` a TagInput renders for its own `label` / `error` uses the same rung. */
|
|
160
|
+
var TAG_INPUT_SIZE_TO_FIELD_SIZE_MAP = {
|
|
161
|
+
["X_SMALL"]: FieldSize.X_SMALL,
|
|
162
|
+
["SMALL"]: FieldSize.SMALL,
|
|
163
|
+
["MEDIUM"]: FieldSize.MEDIUM,
|
|
164
|
+
["LARGE"]: FieldSize.LARGE,
|
|
165
|
+
["X_LARGE"]: FieldSize.X_LARGE
|
|
166
|
+
};
|
|
167
|
+
/** Splits `text` at every character in `separators`. */
|
|
168
|
+
function splitOn(text, separators) {
|
|
169
|
+
const segments = [];
|
|
170
|
+
let current = "";
|
|
171
|
+
for (const character of text) if (separators.includes(character)) {
|
|
172
|
+
segments.push(current);
|
|
173
|
+
current = "";
|
|
174
|
+
} else current += character;
|
|
175
|
+
segments.push(current);
|
|
176
|
+
return segments;
|
|
177
|
+
}
|
|
178
|
+
/** "No tags", "1 tag", "3 tags", "3 tags, 1 invalid". */
|
|
179
|
+
function countText(count, invalidCount) {
|
|
180
|
+
const tags = count === 0 ? "No tags" : count === 1 ? "1 tag" : `${count} tags`;
|
|
181
|
+
return invalidCount > 0 ? `${tags}, ${invalidCount} invalid` : tags;
|
|
182
|
+
}
|
|
183
|
+
/** The frame, its chips and the text input, wired to the nearest Field (the input's own or the app's). */
|
|
184
|
+
function TagFrame({ tagProps, forwardedRef, isRoot }) {
|
|
185
|
+
const { value, defaultValue = [], onChange, separators = TAG_INPUT_DEFAULT_SEPARATORS, isTagInvalid, size = "MEDIUM", variant = "PRIMARY", isGhost = false, label: _label, placeholder, error, isError = false, isDisabled = false, isReadOnly = false, isRequired = false, fillWidth = false, ariaLabel, onBlur, id, "aria-describedby": ariaDescribedBy, className, style, ...rest } = tagProps;
|
|
186
|
+
const wiring = useFieldWiring({
|
|
187
|
+
id,
|
|
188
|
+
ariaLabel,
|
|
189
|
+
ariaLabelAttribute: rest["aria-label"],
|
|
190
|
+
ariaLabelledBy: rest["aria-labelledby"],
|
|
191
|
+
ariaDescribedBy,
|
|
192
|
+
describedByIds: (controlId) => [`${controlId}-count`],
|
|
193
|
+
error,
|
|
194
|
+
isError,
|
|
195
|
+
isRequired
|
|
196
|
+
});
|
|
197
|
+
const { controlId: inputId, describedBy, isRequired: isRequiredState, hasName } = wiring;
|
|
198
|
+
const countId = `${inputId}-count`;
|
|
199
|
+
const innerRef = useRef(null);
|
|
200
|
+
const mergedRef = useMergeRefs([innerRef, forwardedRef]);
|
|
201
|
+
const [tags, setTags] = useControlledState({
|
|
202
|
+
value,
|
|
203
|
+
defaultValue,
|
|
204
|
+
onChange
|
|
205
|
+
});
|
|
206
|
+
const tagsRef = useRef(tags);
|
|
207
|
+
tagsRef.current = tags;
|
|
208
|
+
const [draft, setDraft] = useState("");
|
|
209
|
+
const [announcement, setAnnouncement] = useState("");
|
|
210
|
+
const canEdit = !isDisabled && !isReadOnly;
|
|
211
|
+
const invalidCount = isTagInvalid === void 0 ? 0 : tags.filter(isTagInvalid).length;
|
|
212
|
+
const isInvalid = wiring.isInvalid || invalidCount > 0;
|
|
213
|
+
const chipSize = TAG_INPUT_SIZE_TO_CHIP_SIZE_MAP[size];
|
|
214
|
+
const chipVariant = isGhost ? ChipVariant.SECONDARY : TAG_INPUT_VARIANT_TO_CHIP_VARIANT_MAP[variant];
|
|
215
|
+
/** Sets the live region; a repeat of the same message is made distinct so it is read again. */
|
|
216
|
+
const announce = (message) => {
|
|
217
|
+
setAnnouncement((previous) => previous === message ? `${message} ` : message);
|
|
218
|
+
};
|
|
219
|
+
/** Trims, drops empty entries and duplicates, appends the rest, and calls `onChange` once. */
|
|
220
|
+
const commit = (entries) => {
|
|
221
|
+
const next = [...tagsRef.current];
|
|
222
|
+
const added = [];
|
|
223
|
+
const duplicates = [];
|
|
224
|
+
for (const entry of entries) {
|
|
225
|
+
const tag = entry.trim();
|
|
226
|
+
if (tag === "") continue;
|
|
227
|
+
if (next.includes(tag)) {
|
|
228
|
+
duplicates.push(tag);
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
next.push(tag);
|
|
232
|
+
added.push(tag);
|
|
233
|
+
}
|
|
234
|
+
const messages = [];
|
|
235
|
+
if (added.length === 1) messages.push(`Added ${added[0]}`);
|
|
236
|
+
else if (added.length > 1) messages.push(`Added ${added.length} tags`);
|
|
237
|
+
if (duplicates.length > 0) messages.push(`${duplicates[0]} is already added`);
|
|
238
|
+
if (messages.length > 0) announce(messages.join(". "));
|
|
239
|
+
if (added.length === 0) return;
|
|
240
|
+
tagsRef.current = next;
|
|
241
|
+
setTags(next);
|
|
242
|
+
};
|
|
243
|
+
/** Removes the tag at `index` and announces it. */
|
|
244
|
+
const remove = (index) => {
|
|
245
|
+
const current = tagsRef.current;
|
|
246
|
+
const tag = current[index];
|
|
247
|
+
if (tag === void 0) return;
|
|
248
|
+
const next = current.filter((_, position) => position !== index);
|
|
249
|
+
tagsRef.current = next;
|
|
250
|
+
setTags(next);
|
|
251
|
+
announce(`Removed ${tag}`);
|
|
252
|
+
};
|
|
253
|
+
/** New draft text: every complete segment before the last separator commits; the rest stays. */
|
|
254
|
+
const applyDraft = (text) => {
|
|
255
|
+
const segments = splitOn(text, separators);
|
|
256
|
+
if (segments.length === 1) {
|
|
257
|
+
setDraft(text);
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
260
|
+
const rest = segments.pop() ?? "";
|
|
261
|
+
commit(segments);
|
|
262
|
+
setDraft(rest);
|
|
263
|
+
};
|
|
264
|
+
const handleChange = (event) => {
|
|
265
|
+
if (!canEdit) return;
|
|
266
|
+
if (event.nativeEvent.isComposing) {
|
|
267
|
+
setDraft(event.target.value);
|
|
268
|
+
return;
|
|
269
|
+
}
|
|
270
|
+
applyDraft(event.target.value);
|
|
271
|
+
};
|
|
272
|
+
const handleCompositionEnd = (event) => {
|
|
273
|
+
if (!canEdit) return;
|
|
274
|
+
applyDraft(event.currentTarget.value);
|
|
275
|
+
};
|
|
276
|
+
const handleKeyDown = (event) => {
|
|
277
|
+
if (event.nativeEvent.isComposing || !canEdit) return;
|
|
278
|
+
if (event.key === "Enter") {
|
|
279
|
+
if (draft.trim() === "") return;
|
|
280
|
+
event.preventDefault();
|
|
281
|
+
commit([draft]);
|
|
282
|
+
setDraft("");
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
if (event.key === "Backspace") {
|
|
286
|
+
const input = event.currentTarget;
|
|
287
|
+
const isAtStart = input.selectionStart === 0 && input.selectionEnd === 0;
|
|
288
|
+
if (draft !== "" || !isAtStart || tagsRef.current.length === 0) return;
|
|
289
|
+
event.preventDefault();
|
|
290
|
+
remove(tagsRef.current.length - 1);
|
|
291
|
+
}
|
|
292
|
+
};
|
|
293
|
+
const handlePaste = (event) => {
|
|
294
|
+
if (!canEdit) return;
|
|
295
|
+
const pasted = event.clipboardData.getData("text");
|
|
296
|
+
const splitters = [...separators, ...TAG_INPUT_PASTE_SEPARATORS];
|
|
297
|
+
if (![...pasted].some((character) => splitters.includes(character))) return;
|
|
298
|
+
event.preventDefault();
|
|
299
|
+
const input = event.currentTarget;
|
|
300
|
+
const start = input.selectionStart ?? draft.length;
|
|
301
|
+
const end = input.selectionEnd ?? start;
|
|
302
|
+
commit(splitOn(draft.slice(0, start) + pasted + draft.slice(end), splitters));
|
|
303
|
+
setDraft("");
|
|
304
|
+
};
|
|
305
|
+
const handleBlur = (event) => {
|
|
306
|
+
if (canEdit && draft !== "") {
|
|
307
|
+
commit([draft]);
|
|
308
|
+
setDraft("");
|
|
309
|
+
}
|
|
310
|
+
onBlur?.(event);
|
|
311
|
+
};
|
|
312
|
+
/** A press on empty space or a chip's label focuses the text input; × buttons keep their press. */
|
|
313
|
+
const handleMouseDown = (event) => {
|
|
314
|
+
if (isDisabled || event.button !== 0) return;
|
|
315
|
+
const target = event.target;
|
|
316
|
+
if (target === innerRef.current || target.closest("button") !== null) return;
|
|
317
|
+
event.preventDefault();
|
|
318
|
+
innerRef.current?.focus();
|
|
319
|
+
};
|
|
320
|
+
useDevWarning(!hasName, "[@galaxy-io/dls] TagInput has no accessible name. Pass `label`, wrap it in a labelled `Field`, or set `ariaLabel`. `placeholder` is not a name.");
|
|
321
|
+
const isEmpty = tags.length === 0;
|
|
322
|
+
const showsPlaceholder = isEmpty && !isReadOnly;
|
|
323
|
+
return /* @__PURE__ */ jsxs(Frame, {
|
|
324
|
+
onMouseDown: handleMouseDown,
|
|
325
|
+
className: cx(TAG_INPUT_SIZE_TO_CSS_MAP[size], isGhost ? GHOST_CSS : TAG_INPUT_VARIANT_TO_CSS_MAP[variant], canEdit && !isInvalid && (isGhost ? GHOST_HOVER_CSS : TAG_INPUT_VARIANT_TO_HOVER_CSS_MAP[variant]), isInvalid && !isDisabled && ERROR_CSS, isDisabled && DISABLED_CSS, fillWidth && FILL_WIDTH_CSS, isRoot ? className : void 0),
|
|
326
|
+
...rootStyle(isRoot, style),
|
|
327
|
+
children: [
|
|
328
|
+
tags.map((tag, index) => {
|
|
329
|
+
const isTagInError = isTagInvalid?.(tag) === true;
|
|
330
|
+
return /* @__PURE__ */ jsx(TagItem, { children: /* @__PURE__ */ jsx(Chip, {
|
|
331
|
+
label: tag,
|
|
332
|
+
size: chipSize,
|
|
333
|
+
variant: isTagInError ? ChipVariant.ERROR : chipVariant,
|
|
334
|
+
isDisabled,
|
|
335
|
+
...canEdit ? { onDismiss: () => {
|
|
336
|
+
remove(index);
|
|
337
|
+
innerRef.current?.focus();
|
|
338
|
+
} } : {},
|
|
339
|
+
...isTagInError ? { ariaLabel: `${tag} (invalid)` } : {}
|
|
340
|
+
}) }, tag);
|
|
341
|
+
}),
|
|
342
|
+
/* @__PURE__ */ jsx(Draft, {
|
|
343
|
+
...rest,
|
|
344
|
+
ref: mergedRef,
|
|
345
|
+
id: inputId,
|
|
346
|
+
type: "text",
|
|
347
|
+
value: draft,
|
|
348
|
+
onChange: handleChange,
|
|
349
|
+
onCompositionEnd: handleCompositionEnd,
|
|
350
|
+
onKeyDown: handleKeyDown,
|
|
351
|
+
onPaste: handlePaste,
|
|
352
|
+
onBlur: handleBlur,
|
|
353
|
+
placeholder: showsPlaceholder ? placeholder : void 0,
|
|
354
|
+
disabled: isDisabled,
|
|
355
|
+
readOnly: isReadOnly,
|
|
356
|
+
autoComplete: "off",
|
|
357
|
+
autoCorrect: "off",
|
|
358
|
+
autoCapitalize: "off",
|
|
359
|
+
spellCheck: false,
|
|
360
|
+
"aria-label": ariaLabel ?? rest["aria-label"],
|
|
361
|
+
"aria-describedby": describedBy,
|
|
362
|
+
"aria-invalid": isInvalid ? true : void 0,
|
|
363
|
+
"aria-required": isRequiredState ? true : void 0,
|
|
364
|
+
className: cx(isEmpty && EMPTY_DRAFT_CSS)
|
|
365
|
+
}),
|
|
366
|
+
/* @__PURE__ */ jsx(VisuallyHidden, {
|
|
367
|
+
id: countId,
|
|
368
|
+
children: countText(tags.length, invalidCount)
|
|
369
|
+
}),
|
|
370
|
+
/* @__PURE__ */ jsx(StatusRegion, {
|
|
371
|
+
role: "status",
|
|
372
|
+
"aria-live": "polite",
|
|
373
|
+
children: announcement
|
|
374
|
+
})
|
|
375
|
+
]
|
|
376
|
+
});
|
|
377
|
+
}
|
|
378
|
+
/** A field of free-form tags: type and press Enter or a separator, paste a list, remove with × or Backspace. */
|
|
379
|
+
var TagInput = forwardRef(function TagInput(props, ref) {
|
|
380
|
+
const { label, error, isRequired = false, size = "MEDIUM", fillWidth = false, id, className, style } = props;
|
|
381
|
+
const ownField = useOwnField({
|
|
382
|
+
componentName: "TagInput",
|
|
383
|
+
label,
|
|
384
|
+
error,
|
|
385
|
+
isRequired,
|
|
386
|
+
size: TAG_INPUT_SIZE_TO_FIELD_SIZE_MAP[size],
|
|
387
|
+
id,
|
|
388
|
+
className,
|
|
389
|
+
style,
|
|
390
|
+
rootClassName: fillWidth && FILL_WIDTH_CSS
|
|
391
|
+
});
|
|
392
|
+
if (ownField !== null) return /* @__PURE__ */ jsx(Field, {
|
|
393
|
+
...ownField,
|
|
394
|
+
children: /* @__PURE__ */ jsx(TagFrame, {
|
|
395
|
+
tagProps: props,
|
|
396
|
+
forwardedRef: ref,
|
|
397
|
+
isRoot: false
|
|
398
|
+
})
|
|
399
|
+
});
|
|
400
|
+
return /* @__PURE__ */ jsx(TagFrame, {
|
|
401
|
+
tagProps: props,
|
|
402
|
+
forwardedRef: ref,
|
|
403
|
+
isRoot: true
|
|
404
|
+
});
|
|
405
|
+
});
|
|
406
|
+
TagInput.displayName = "TagInput";
|
|
407
|
+
//#endregion
|
|
408
|
+
export { TagInputSize, TagInputVariant, TagInput as default };
|
|
@@ -1,51 +1,153 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import { type AriaAttributes, type CSSProperties, type TextareaHTMLAttributes } from "react";
|
|
2
|
+
import { FontFamily } from "../theme/enums.js";
|
|
3
|
+
/** Canonical rungs; TextAreaInput supports all five. The rung sets the text step, the padding and the height of one row. */
|
|
4
|
+
export declare enum TextAreaInputSize {
|
|
5
|
+
/** Caption text, 12px rows, 20px one-row field. */
|
|
6
|
+
X_SMALL = "X_SMALL",
|
|
7
|
+
/** body_sm text, 16px rows, 24px one-row field. */
|
|
8
|
+
SMALL = "SMALL",
|
|
9
|
+
/** body_md text, 16px rows, 32px one-row field. The default. */
|
|
10
|
+
MEDIUM = "MEDIUM",
|
|
11
|
+
/** body_lg text, 20px rows, 36px one-row field. */
|
|
12
|
+
LARGE = "LARGE",
|
|
13
|
+
/** body_lg text, 20px rows, 40px one-row field. */
|
|
14
|
+
X_LARGE = "X_LARGE"
|
|
15
|
+
}
|
|
16
|
+
/** Resting fill of the field (Constitution V-A surface set; the 1.x `InputVariant` members, unchanged). */
|
|
17
|
+
export declare enum TextAreaInputVariant {
|
|
18
|
+
/** `background.base` fill. */
|
|
19
|
+
BASE = "BASE",
|
|
20
|
+
/** `background.primary` fill. The default. */
|
|
21
|
+
PRIMARY = "PRIMARY",
|
|
22
|
+
/** `background.secondary` fill. */
|
|
23
|
+
SECONDARY = "SECONDARY",
|
|
24
|
+
/** `background.tertiary` fill. */
|
|
25
|
+
TERTIARY = "TERTIARY"
|
|
26
|
+
}
|
|
27
|
+
/** The families a field's value may use (serif has no UI steps). */
|
|
28
|
+
type TextAreaInputFamily = FontFamily.SANS | FontFamily.MONO;
|
|
29
|
+
/** Native `<textarea>` attributes, typed as React types them. */
|
|
30
|
+
type NativeTextAreaAttributes = TextareaHTMLAttributes<HTMLTextAreaElement>;
|
|
31
|
+
/** The native passthrough allowlist, each documented. */
|
|
32
|
+
interface TextAreaInputNativeProps {
|
|
33
|
+
/** Form field name, passed to the `<textarea>`. */
|
|
34
|
+
name?: NativeTextAreaAttributes["name"];
|
|
35
|
+
/**
|
|
36
|
+
* Browser autofill hint.
|
|
37
|
+
* @default "off"
|
|
38
|
+
*/
|
|
39
|
+
autoComplete?: NativeTextAreaAttributes["autoComplete"];
|
|
40
|
+
/** Focus the textarea on mount. */
|
|
41
|
+
autoFocus?: NativeTextAreaAttributes["autoFocus"];
|
|
42
|
+
/** Hard cap on the value's length. Shows no message; for a counter, use `Field`. */
|
|
43
|
+
maxLength?: NativeTextAreaAttributes["maxLength"];
|
|
44
|
+
/** Browser spell checking. Left to the browser unless set. */
|
|
45
|
+
spellCheck?: NativeTextAreaAttributes["spellCheck"];
|
|
46
|
+
/** Focus handler on the `<textarea>`. */
|
|
47
|
+
onFocus?: NativeTextAreaAttributes["onFocus"];
|
|
48
|
+
/** Blur handler on the `<textarea>`. */
|
|
49
|
+
onBlur?: NativeTextAreaAttributes["onBlur"];
|
|
50
|
+
/** Key-down handler on the `<textarea>`. Use it for ⌘/Ctrl+Enter submit. */
|
|
51
|
+
onKeyDown?: NativeTextAreaAttributes["onKeyDown"];
|
|
52
|
+
}
|
|
53
|
+
export interface TextAreaInputProps extends AriaAttributes, TextAreaInputNativeProps {
|
|
54
|
+
/** Controlled value. Pass it with `onChange`. */
|
|
4
55
|
value?: string;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
-
|
|
56
|
+
/**
|
|
57
|
+
* Initial value while uncontrolled.
|
|
58
|
+
* @default ""
|
|
59
|
+
*/
|
|
60
|
+
defaultValue?: string;
|
|
61
|
+
/** Called with the new string on every edit. */
|
|
62
|
+
onChange?: (value: string) => void;
|
|
63
|
+
/**
|
|
64
|
+
* Control rung. Sets the text step and padding; one row is exactly 20 / 24 / 32 / 36 / 40px tall.
|
|
65
|
+
* @default TextAreaInputSize.MEDIUM
|
|
66
|
+
*/
|
|
67
|
+
size?: TextAreaInputSize;
|
|
68
|
+
/**
|
|
69
|
+
* Resting fill, from the surface set. Ignored with `isGhost`.
|
|
70
|
+
* @default TextAreaInputVariant.PRIMARY
|
|
71
|
+
*/
|
|
72
|
+
variant?: TextAreaInputVariant;
|
|
73
|
+
/**
|
|
74
|
+
* Ghost field: no fill and no hairline at rest; the frame appears on hover and focus (1.x
|
|
75
|
+
* `noBorder`). For inline editing (a comment, a description) inside a surface that frames it.
|
|
76
|
+
* @default false
|
|
77
|
+
*/
|
|
78
|
+
isGhost?: boolean;
|
|
79
|
+
/** Label above the field, rendered through `Field`. For a description, a label tooltip, a counter or a horizontal layout, wrap the field in `Field` instead. */
|
|
13
80
|
label?: string;
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
/** Message under the field
|
|
81
|
+
/** Hint shown while the value is empty. It is never the label. */
|
|
82
|
+
placeholder?: string;
|
|
83
|
+
/** Message from the app, shown under the field through `Field`. It also turns the border red and sets `aria-invalid`. */
|
|
17
84
|
error?: string;
|
|
18
|
-
/**
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* Error border and `aria-invalid` without a message. `error` implies it.
|
|
87
|
+
* @default false
|
|
88
|
+
*/
|
|
89
|
+
isError?: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Rows of text the field shows when empty, and its minimum height. Floored; values below 1 render 1.
|
|
92
|
+
* @default 3
|
|
93
|
+
*/
|
|
94
|
+
minRows?: number;
|
|
95
|
+
/** With `isAutoGrow` or `isResizable`: the most rows the field grows to before it scrolls. Values below `minRows` are raised to `minRows`. No limit when unset. */
|
|
96
|
+
maxRows?: number;
|
|
97
|
+
/**
|
|
98
|
+
* The height follows the content, from `minRows` up to `maxRows`, then the field scrolls.
|
|
99
|
+
* @default false
|
|
100
|
+
*/
|
|
101
|
+
isAutoGrow?: boolean;
|
|
102
|
+
/**
|
|
103
|
+
* The user can drag the bottom edge to change the height, between `minRows` and `maxRows`. Ignored with `isAutoGrow`.
|
|
104
|
+
* @default false
|
|
105
|
+
*/
|
|
106
|
+
isResizable?: boolean;
|
|
107
|
+
/**
|
|
108
|
+
* The content is not ready: the field keeps its size, hides its text, shows a two-line skeleton and cannot be edited.
|
|
109
|
+
* @default false
|
|
110
|
+
*/
|
|
41
111
|
isLoading?: boolean;
|
|
112
|
+
/**
|
|
113
|
+
* Not focusable or editable. Shows the disabled look.
|
|
114
|
+
* @default false
|
|
115
|
+
*/
|
|
116
|
+
isDisabled?: boolean;
|
|
117
|
+
/**
|
|
118
|
+
* Focusable, selectable and scrollable, but not editable. No hover change and no resize handle.
|
|
119
|
+
* @default false
|
|
120
|
+
*/
|
|
121
|
+
isReadOnly?: boolean;
|
|
122
|
+
/**
|
|
123
|
+
* Required marker on the `label` (via `Field`) and `aria-required`. It does no validation.
|
|
124
|
+
* @default false
|
|
125
|
+
*/
|
|
126
|
+
isRequired?: boolean;
|
|
127
|
+
/**
|
|
128
|
+
* Type family of the value and the placeholder. Use mono for pasted keys, JSON or SQL snippets that are not edited as code.
|
|
129
|
+
* @default FontFamily.SANS
|
|
130
|
+
*/
|
|
131
|
+
family?: TextAreaInputFamily;
|
|
132
|
+
/**
|
|
133
|
+
* Stretch to the parent's width. Without it, the field is about 20 characters wide.
|
|
134
|
+
* @default false
|
|
135
|
+
*/
|
|
136
|
+
fillWidth?: boolean;
|
|
137
|
+
/** Accessible name when there is no visible label (no `label` and no wrapping `Field`). */
|
|
138
|
+
ariaLabel?: string;
|
|
139
|
+
/**
|
|
140
|
+
* DOM id of the `<textarea>`. A wrapping `Field`'s id wins.
|
|
141
|
+
* @default useId()
|
|
142
|
+
*/
|
|
143
|
+
id?: string;
|
|
144
|
+
/** Any `data-*` attribute, forwarded to the `<textarea>`. */
|
|
145
|
+
[dataAttribute: `data-${string}`]: string | number | boolean | undefined;
|
|
146
|
+
/** Extra class on the root: the `Field` wrapper when TextAreaInput renders one, otherwise the field's own root. */
|
|
147
|
+
className?: string;
|
|
148
|
+
/** Inline style on the root; only for setting CSS custom properties. */
|
|
149
|
+
style?: CSSProperties;
|
|
42
150
|
}
|
|
43
|
-
/**
|
|
44
|
-
* A multi-line text field. Not resizable by the user — size it with `lines`,
|
|
45
|
-
* `height`, or `fillHeight`.
|
|
46
|
-
*
|
|
47
|
-
* Note this one takes `required`/`disabled` rather than the `isRequired`/
|
|
48
|
-
* `isDisabled` the other inputs use.
|
|
49
|
-
*/
|
|
151
|
+
/** The multi-line text field, sized in rows, with optional auto-grow and a vertical resize handle. */
|
|
50
152
|
declare const TextAreaInput: import("react").ForwardRefExoticComponent<TextAreaInputProps & import("react").RefAttributes<HTMLTextAreaElement>>;
|
|
51
153
|
export default TextAreaInput;
|