@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,364 @@
|
|
|
1
|
+
import { useControlledState } from "../hooks/useControlledState.js";
|
|
2
|
+
import { useDevWarning } from "./internal/devWarn.js";
|
|
3
|
+
import { useFieldWiring } from "./internal/fieldWiring.js";
|
|
4
|
+
import Field, { FieldSize } from "./Field.js";
|
|
5
|
+
import { rootStyle, useOwnField } from "./internal/ownField.js";
|
|
6
|
+
/* empty css */
|
|
7
|
+
import { styled } from "@linaria/react";
|
|
8
|
+
import { forwardRef, useEffect, useRef, useState } from "react";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
import { cx } from "@linaria/core";
|
|
11
|
+
//#region src/inputs/PinInput.tsx
|
|
12
|
+
/**
|
|
13
|
+
* The field for a short code typed one character per box: a one-time password, an email
|
|
14
|
+
* confirmation code, a device pairing code. It draws `length` square boxes in the input frame's
|
|
15
|
+
* looks, each a real `<input>` holding one character, and holds the code as one string
|
|
16
|
+
* (`value` / `defaultValue` / `onChange`), calling `onComplete` once every box is filled. Typing
|
|
17
|
+
* advances, Backspace steps back, arrows move, and pasting a whole code fills every box. It accepts
|
|
18
|
+
* digits (`PinInputType.NUMERIC`) or letters and digits (`ALPHANUMERIC`), and can mask characters.
|
|
19
|
+
*
|
|
20
|
+
* PinInput never validates: whether the code is right is the app's `error`. New in 2.0 (rafa's
|
|
21
|
+
* PinInput, EXAMPLES §14).
|
|
22
|
+
*/
|
|
23
|
+
/** Canonical rungs; PinInput exposes three (EXAMPLES §14). Boxes are squares of the rung height. */
|
|
24
|
+
var PinInputSize = /* @__PURE__ */ function(PinInputSize) {
|
|
25
|
+
/** 24px boxes, body_md mono characters. */
|
|
26
|
+
PinInputSize["SMALL"] = "SMALL";
|
|
27
|
+
/** 32px boxes, body_lg mono characters. The default. */
|
|
28
|
+
PinInputSize["MEDIUM"] = "MEDIUM";
|
|
29
|
+
/** 36px boxes, heading_sm mono characters. */
|
|
30
|
+
PinInputSize["LARGE"] = "LARGE";
|
|
31
|
+
return PinInputSize;
|
|
32
|
+
}({});
|
|
33
|
+
/** Resting fill of each box (Constitution V-A surface set; the 1.x InputVariant members). */
|
|
34
|
+
var PinInputVariant = /* @__PURE__ */ function(PinInputVariant) {
|
|
35
|
+
/** `background.base` fill. */
|
|
36
|
+
PinInputVariant["BASE"] = "BASE";
|
|
37
|
+
/** `background.primary` fill. The default. */
|
|
38
|
+
PinInputVariant["PRIMARY"] = "PRIMARY";
|
|
39
|
+
/** `background.secondary` fill. */
|
|
40
|
+
PinInputVariant["SECONDARY"] = "SECONDARY";
|
|
41
|
+
/** `background.tertiary` fill. */
|
|
42
|
+
PinInputVariant["TERTIARY"] = "TERTIARY";
|
|
43
|
+
return PinInputVariant;
|
|
44
|
+
}({});
|
|
45
|
+
/** Which characters a box accepts (EXAMPLES §14). */
|
|
46
|
+
var PinInputType = /* @__PURE__ */ function(PinInputType) {
|
|
47
|
+
/** 0–9; the numeric keypad on mobile. The default. */
|
|
48
|
+
PinInputType["NUMERIC"] = "NUMERIC";
|
|
49
|
+
/** A–Z, a–z, 0–9, kept in the case typed; the text keyboard. */
|
|
50
|
+
PinInputType["ALPHANUMERIC"] = "ALPHANUMERIC";
|
|
51
|
+
return PinInputType;
|
|
52
|
+
}({});
|
|
53
|
+
/** The characters each type accepts (one at a time). */
|
|
54
|
+
var PIN_INPUT_TYPE_TO_PATTERN_MAP = {
|
|
55
|
+
["NUMERIC"]: /[0-9]/,
|
|
56
|
+
["ALPHANUMERIC"]: /[0-9A-Za-z]/
|
|
57
|
+
};
|
|
58
|
+
/** The mobile keyboard each type asks for. */
|
|
59
|
+
var PIN_INPUT_TYPE_TO_INPUT_MODE_MAP = {
|
|
60
|
+
["NUMERIC"]: "numeric",
|
|
61
|
+
["ALPHANUMERIC"]: "text"
|
|
62
|
+
};
|
|
63
|
+
/** Keeps only the characters `type` accepts. */
|
|
64
|
+
function accept(text, type) {
|
|
65
|
+
const pattern = PIN_INPUT_TYPE_TO_PATTERN_MAP[type];
|
|
66
|
+
return [...text].filter((character) => pattern.test(character)).join("");
|
|
67
|
+
}
|
|
68
|
+
/** The announcement when the last box is filled. */
|
|
69
|
+
var PIN_INPUT_COMPLETE_MESSAGE = "Code complete";
|
|
70
|
+
/** The row of boxes. */
|
|
71
|
+
var Group = /*#__PURE__*/ styled("div")({
|
|
72
|
+
name: "Group",
|
|
73
|
+
class: "gx-PinInput-Group-gi2xfa2",
|
|
74
|
+
propsAsIs: false
|
|
75
|
+
});
|
|
76
|
+
/**
|
|
77
|
+
* One box: a real `<input>` holding one character, framed like an input. Focus, from the mouse or
|
|
78
|
+
* the keyboard, is `FIELD_FOCUS` (`border.focused` at 1px inside the box); `:focus:hover` beats the hover map.
|
|
79
|
+
*/
|
|
80
|
+
var Cell = /*#__PURE__*/ styled("input")({
|
|
81
|
+
name: "Cell",
|
|
82
|
+
class: "gx-PinInput-Cell-cf4a6mm",
|
|
83
|
+
propsAsIs: false
|
|
84
|
+
});
|
|
85
|
+
/** The polite "Code complete" announcement. */
|
|
86
|
+
var StatusRegion = /*#__PURE__*/ styled("span")({
|
|
87
|
+
name: "StatusRegion",
|
|
88
|
+
class: "gx-PinInput-StatusRegion-s6vpedl",
|
|
89
|
+
propsAsIs: false
|
|
90
|
+
});
|
|
91
|
+
/** Gap between boxes per rung. */
|
|
92
|
+
var PIN_INPUT_SIZE_TO_GROUP_CSS_MAP = {
|
|
93
|
+
["SMALL"]: "gx-PinInput-SMALL-s12gcqos",
|
|
94
|
+
["MEDIUM"]: "gx-PinInput-MEDIUM-m10mcjx2",
|
|
95
|
+
["LARGE"]: "gx-PinInput-LARGE-lwr89f6"
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* The square and the character step: one text step above the rung's control text. Box and line
|
|
99
|
+
* heights are even, so the character centers on whole pixels (4 / 6 / 8px).
|
|
100
|
+
*/
|
|
101
|
+
var PIN_INPUT_SIZE_TO_BOX_CSS_MAP = {
|
|
102
|
+
["SMALL"]: "gx-PinInput-SMALL-s1smtwrw",
|
|
103
|
+
["MEDIUM"]: "gx-PinInput-MEDIUM-m1a6i3g5",
|
|
104
|
+
["LARGE"]: "gx-PinInput-LARGE-lu3w498"
|
|
105
|
+
};
|
|
106
|
+
/** Rest look per variant: fill and hairline color. */
|
|
107
|
+
var PIN_INPUT_VARIANT_TO_CSS_MAP = {
|
|
108
|
+
["BASE"]: "gx-PinInput-BASE-b1fhhvbm",
|
|
109
|
+
["PRIMARY"]: "gx-PinInput-PRIMARY-p1lu8dei",
|
|
110
|
+
["SECONDARY"]: "gx-PinInput-SECONDARY-sn0bkgy",
|
|
111
|
+
["TERTIARY"]: "gx-PinInput-TERTIARY-t1dzrhdt"
|
|
112
|
+
};
|
|
113
|
+
/** `isGhost`: no fill and no hairline on a box at rest. Declared after the variant map, which it replaces. */
|
|
114
|
+
var GHOST_CSS = "gx-PinInput-GHOST_CSS-gcykbcf";
|
|
115
|
+
/**
|
|
116
|
+
* Hover on an editable box: `border.hovered` (stronger than `border.primary` in both themes,
|
|
117
|
+
* Constitution III.6).
|
|
118
|
+
*/
|
|
119
|
+
var PIN_INPUT_VARIANT_TO_HOVER_CSS_MAP = {
|
|
120
|
+
["BASE"]: "gx-PinInput-BASE-bwn9jv8",
|
|
121
|
+
["PRIMARY"]: "gx-PinInput-PRIMARY-p1au6atb",
|
|
122
|
+
["SECONDARY"]: "gx-PinInput-SECONDARY-s1vuavqe",
|
|
123
|
+
["TERTIARY"]: "gx-PinInput-TERTIARY-tlommsh"
|
|
124
|
+
};
|
|
125
|
+
/** Hover on an editable ghost box: the frame appears, `border.hovered` with no fill. */
|
|
126
|
+
var GHOST_HOVER_CSS = "gx-PinInput-GHOST_HOVER_CSS-g1cfyci9";
|
|
127
|
+
/** The `Field` a PinInput renders for its own `label` / `error` uses the same rung. */
|
|
128
|
+
var PIN_INPUT_SIZE_TO_FIELD_SIZE_MAP = {
|
|
129
|
+
["SMALL"]: FieldSize.SMALL,
|
|
130
|
+
["MEDIUM"]: FieldSize.MEDIUM,
|
|
131
|
+
["LARGE"]: FieldSize.LARGE
|
|
132
|
+
};
|
|
133
|
+
/** Error border on every box, at rest, on hover and with focus (the 1px inset focus line is red too). */
|
|
134
|
+
var ERROR_CSS = "gx-PinInput-ERROR_CSS-emv6pcb";
|
|
135
|
+
/**
|
|
136
|
+
* Disabled: the variant's resting fill and hairline are kept (`border.disabled` is not used on
|
|
137
|
+
* frames); the box reads as disabled through `text.disabled` and the cursor.
|
|
138
|
+
*/
|
|
139
|
+
var DISABLED_CSS = "gx-PinInput-DISABLED_CSS-dz9kczs";
|
|
140
|
+
/** The boxes, wired to the nearest Field (the PinInput's own or the app's). */
|
|
141
|
+
function PinGroup({ pinProps, forwardedRef, isRoot }) {
|
|
142
|
+
const { length: lengthProp = 6, value, defaultValue = "", onChange, onComplete, type = "NUMERIC", isMasked = false, size = "MEDIUM", variant = "PRIMARY", isGhost = false, label: _label, error, isError = false, isDisabled = false, isReadOnly = false, isRequired = false, ariaLabel, autoFocus = false, id, "aria-describedby": ariaDescribedBy, className, style, ...rest } = pinProps;
|
|
143
|
+
const length = Math.max(1, Math.floor(Number.isFinite(lengthProp) ? lengthProp : 1));
|
|
144
|
+
const { field, controlId, describedBy, isInvalid, isRequired: isRequiredState, hasName } = useFieldWiring({
|
|
145
|
+
id,
|
|
146
|
+
ariaLabel,
|
|
147
|
+
ariaLabelAttribute: rest["aria-label"],
|
|
148
|
+
ariaLabelledBy: rest["aria-labelledby"],
|
|
149
|
+
ariaDescribedBy,
|
|
150
|
+
error,
|
|
151
|
+
isError,
|
|
152
|
+
isRequired
|
|
153
|
+
});
|
|
154
|
+
const boxId = (index) => index === 0 ? controlId : `${controlId}-${index}`;
|
|
155
|
+
const [rawValue, setValue] = useControlledState({
|
|
156
|
+
value,
|
|
157
|
+
defaultValue,
|
|
158
|
+
onChange
|
|
159
|
+
});
|
|
160
|
+
const code = rawValue.slice(0, length);
|
|
161
|
+
const codeRef = useRef(code);
|
|
162
|
+
codeRef.current = code;
|
|
163
|
+
const inputRefs = useRef([]);
|
|
164
|
+
const [announcement, setAnnouncement] = useState("");
|
|
165
|
+
const [composing, setComposing] = useState(null);
|
|
166
|
+
const isEditable = !isDisabled && !isReadOnly;
|
|
167
|
+
/** The last box the user may focus: the first empty one, or the last box when full. */
|
|
168
|
+
const lastFillable = () => Math.min(codeRef.current.length, length - 1);
|
|
169
|
+
/**
|
|
170
|
+
* Where an edit from box `index` applies: never past the end of the code, so a box left focused
|
|
171
|
+
* after the code shrank (an app reset) writes and deletes at the end of the code.
|
|
172
|
+
*/
|
|
173
|
+
const fillablePosition = (index) => Math.min(index, codeRef.current.length);
|
|
174
|
+
const focusBox = (index) => {
|
|
175
|
+
const input = inputRefs.current[index];
|
|
176
|
+
if (input === null || input === void 0) return;
|
|
177
|
+
input.focus();
|
|
178
|
+
input.select();
|
|
179
|
+
};
|
|
180
|
+
/** Writes a new code, calls `onChange`, then `onComplete` when this edit completed it. */
|
|
181
|
+
const update = (next) => {
|
|
182
|
+
const previous = codeRef.current;
|
|
183
|
+
if (next === previous) return;
|
|
184
|
+
codeRef.current = next;
|
|
185
|
+
setValue(next);
|
|
186
|
+
if (previous.length < length && next.length === length) {
|
|
187
|
+
onComplete?.(next);
|
|
188
|
+
setAnnouncement(PIN_INPUT_COMPLETE_MESSAGE);
|
|
189
|
+
} else setAnnouncement("");
|
|
190
|
+
};
|
|
191
|
+
/** The accepted characters of `text` overwrite the code from box `index`; focus follows them. */
|
|
192
|
+
const write = (index, text) => {
|
|
193
|
+
if (!isEditable) return;
|
|
194
|
+
const accepted = accept(text, type);
|
|
195
|
+
if (accepted === "") return;
|
|
196
|
+
const current = codeRef.current;
|
|
197
|
+
const start = fillablePosition(index);
|
|
198
|
+
update((current.slice(0, start) + accepted + current.slice(start + accepted.length)).slice(0, length));
|
|
199
|
+
focusBox(Math.min(start + accepted.length, length - 1));
|
|
200
|
+
};
|
|
201
|
+
const handleChange = (index) => (event) => {
|
|
202
|
+
if (event.nativeEvent.isComposing) {
|
|
203
|
+
setComposing({
|
|
204
|
+
index,
|
|
205
|
+
text: event.target.value
|
|
206
|
+
});
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
write(index, event.target.value);
|
|
210
|
+
};
|
|
211
|
+
const handleCompositionEnd = (index) => (event) => {
|
|
212
|
+
setComposing(null);
|
|
213
|
+
write(index, event.currentTarget.value);
|
|
214
|
+
};
|
|
215
|
+
const handleKeyDown = (index) => (event) => {
|
|
216
|
+
if (event.nativeEvent.isComposing) return;
|
|
217
|
+
const current = codeRef.current;
|
|
218
|
+
const position = fillablePosition(index);
|
|
219
|
+
switch (event.key) {
|
|
220
|
+
case "Backspace":
|
|
221
|
+
event.preventDefault();
|
|
222
|
+
if (!isEditable) return;
|
|
223
|
+
if (position < current.length) {
|
|
224
|
+
update(current.slice(0, position) + current.slice(position + 1));
|
|
225
|
+
focusBox(position);
|
|
226
|
+
} else if (position > 0) {
|
|
227
|
+
update(current.slice(0, position - 1) + current.slice(position));
|
|
228
|
+
focusBox(position - 1);
|
|
229
|
+
}
|
|
230
|
+
return;
|
|
231
|
+
case "Delete":
|
|
232
|
+
event.preventDefault();
|
|
233
|
+
if (!isEditable || position >= current.length) return;
|
|
234
|
+
update(current.slice(0, position) + current.slice(position + 1));
|
|
235
|
+
focusBox(position);
|
|
236
|
+
return;
|
|
237
|
+
case "ArrowLeft":
|
|
238
|
+
event.preventDefault();
|
|
239
|
+
focusBox(Math.max(0, index - 1));
|
|
240
|
+
return;
|
|
241
|
+
case "ArrowRight":
|
|
242
|
+
event.preventDefault();
|
|
243
|
+
focusBox(Math.min(index + 1, lastFillable()));
|
|
244
|
+
return;
|
|
245
|
+
case "Home":
|
|
246
|
+
event.preventDefault();
|
|
247
|
+
focusBox(0);
|
|
248
|
+
return;
|
|
249
|
+
case "End":
|
|
250
|
+
event.preventDefault();
|
|
251
|
+
focusBox(lastFillable());
|
|
252
|
+
return;
|
|
253
|
+
default: return;
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
const handlePaste = (index) => (event) => {
|
|
257
|
+
event.preventDefault();
|
|
258
|
+
if (!isEditable) return;
|
|
259
|
+
const pasted = accept(event.clipboardData.getData("text"), type);
|
|
260
|
+
if (pasted === "") return;
|
|
261
|
+
const start = fillablePosition(index);
|
|
262
|
+
update((codeRef.current.slice(0, start) + pasted).slice(0, length));
|
|
263
|
+
focusBox(Math.min(start + pasted.length, length - 1));
|
|
264
|
+
};
|
|
265
|
+
/** Focus lands on a fillable box; every focus selects the box's character. */
|
|
266
|
+
const handleFocus = (index) => (event) => {
|
|
267
|
+
const target = lastFillable();
|
|
268
|
+
if (index > target) {
|
|
269
|
+
focusBox(target);
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
event.currentTarget.select();
|
|
273
|
+
};
|
|
274
|
+
/** A press focuses the box itself (and selects it), so the caret never lands beside a character. */
|
|
275
|
+
const handleMouseDown = (index) => (event) => {
|
|
276
|
+
if (isDisabled || event.button !== 0) return;
|
|
277
|
+
event.preventDefault();
|
|
278
|
+
focusBox(Math.min(index, lastFillable()));
|
|
279
|
+
};
|
|
280
|
+
useEffect(() => {
|
|
281
|
+
const active = inputRefs.current.find((input) => input !== null && input.ownerDocument.activeElement === input);
|
|
282
|
+
if (active === void 0 || active === null) return;
|
|
283
|
+
if (inputRefs.current.indexOf(active) > lastFillable()) focusBox(lastFillable());
|
|
284
|
+
});
|
|
285
|
+
const hasAutoFocusedRef = useRef(false);
|
|
286
|
+
useEffect(() => {
|
|
287
|
+
if (!autoFocus || isDisabled || hasAutoFocusedRef.current) return;
|
|
288
|
+
hasAutoFocusedRef.current = true;
|
|
289
|
+
focusBox(Math.min(codeRef.current.length, length - 1));
|
|
290
|
+
});
|
|
291
|
+
useDevWarning(!hasName, "[@galaxy-io/dls] PinInput has no accessible name. Pass `label`, wrap it in a labelled `Field`, or set `ariaLabel`.");
|
|
292
|
+
const boxes = Array.from({ length }, (_, index) => index);
|
|
293
|
+
return /* @__PURE__ */ jsxs(Group, {
|
|
294
|
+
ref: forwardedRef,
|
|
295
|
+
role: "group",
|
|
296
|
+
"aria-labelledby": field?.labelId,
|
|
297
|
+
"aria-label": ariaLabel,
|
|
298
|
+
...rest,
|
|
299
|
+
className: cx(PIN_INPUT_SIZE_TO_GROUP_CSS_MAP[size], isRoot ? className : void 0),
|
|
300
|
+
...rootStyle(isRoot, style),
|
|
301
|
+
children: [boxes.map((index) => /* @__PURE__ */ jsx(Cell, {
|
|
302
|
+
ref: (element) => {
|
|
303
|
+
inputRefs.current[index] = element;
|
|
304
|
+
},
|
|
305
|
+
id: boxId(index),
|
|
306
|
+
type: isMasked ? "password" : "text",
|
|
307
|
+
inputMode: PIN_INPUT_TYPE_TO_INPUT_MODE_MAP[type],
|
|
308
|
+
autoComplete: index === 0 ? "one-time-code" : "off",
|
|
309
|
+
autoCapitalize: "off",
|
|
310
|
+
autoCorrect: "off",
|
|
311
|
+
spellCheck: false,
|
|
312
|
+
value: composing?.index === index ? composing.text : code[index] ?? "",
|
|
313
|
+
disabled: isDisabled,
|
|
314
|
+
readOnly: isReadOnly,
|
|
315
|
+
tabIndex: index <= Math.min(code.length, length - 1) ? 0 : -1,
|
|
316
|
+
"aria-label": `Character ${index + 1} of ${length}`,
|
|
317
|
+
"aria-describedby": describedBy,
|
|
318
|
+
"aria-invalid": isInvalid ? true : void 0,
|
|
319
|
+
"aria-required": isRequiredState ? true : void 0,
|
|
320
|
+
onChange: handleChange(index),
|
|
321
|
+
onCompositionEnd: handleCompositionEnd(index),
|
|
322
|
+
onKeyDown: handleKeyDown(index),
|
|
323
|
+
onPaste: handlePaste(index),
|
|
324
|
+
onFocus: handleFocus(index),
|
|
325
|
+
onMouseDown: handleMouseDown(index),
|
|
326
|
+
className: cx(PIN_INPUT_SIZE_TO_BOX_CSS_MAP[size], isGhost ? GHOST_CSS : PIN_INPUT_VARIANT_TO_CSS_MAP[variant], isEditable && !isInvalid && (isGhost ? GHOST_HOVER_CSS : PIN_INPUT_VARIANT_TO_HOVER_CSS_MAP[variant]), isInvalid && !isDisabled && ERROR_CSS, isDisabled && DISABLED_CSS)
|
|
327
|
+
}, index)), /* @__PURE__ */ jsx(StatusRegion, {
|
|
328
|
+
role: "status",
|
|
329
|
+
"aria-live": "polite",
|
|
330
|
+
children: announcement
|
|
331
|
+
})]
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
/** One box per character, for OTP and confirmation codes. */
|
|
335
|
+
var PinInput = forwardRef(function PinInput(props, ref) {
|
|
336
|
+
const { label, error, isRequired = false, size = "MEDIUM" } = props;
|
|
337
|
+
const { id, className, style } = props;
|
|
338
|
+
const ownField = useOwnField({
|
|
339
|
+
componentName: "PinInput",
|
|
340
|
+
label,
|
|
341
|
+
error,
|
|
342
|
+
isRequired,
|
|
343
|
+
size: PIN_INPUT_SIZE_TO_FIELD_SIZE_MAP[size],
|
|
344
|
+
id,
|
|
345
|
+
className,
|
|
346
|
+
style
|
|
347
|
+
});
|
|
348
|
+
if (ownField !== null) return /* @__PURE__ */ jsx(Field, {
|
|
349
|
+
...ownField,
|
|
350
|
+
children: /* @__PURE__ */ jsx(PinGroup, {
|
|
351
|
+
pinProps: props,
|
|
352
|
+
forwardedRef: ref,
|
|
353
|
+
isRoot: false
|
|
354
|
+
})
|
|
355
|
+
});
|
|
356
|
+
return /* @__PURE__ */ jsx(PinGroup, {
|
|
357
|
+
pinProps: props,
|
|
358
|
+
forwardedRef: ref,
|
|
359
|
+
isRoot: true
|
|
360
|
+
});
|
|
361
|
+
});
|
|
362
|
+
PinInput.displayName = "PinInput";
|
|
363
|
+
//#endregion
|
|
364
|
+
export { PinInputSize, PinInputType, PinInputVariant, PinInput as default };
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { type AriaAttributes, type CSSProperties, type ReactElement, type ReactNode, type RefAttributes } from "react";
|
|
2
|
+
import { Orientation } from "../theme/enums.js";
|
|
3
|
+
/** Rung of the group's radios (Constitution III-A.4). Mapped to RadioInputSize and FieldSize one to one. */
|
|
4
|
+
export declare enum RadioGroupSize {
|
|
5
|
+
/** 12px circles, caption labels. */
|
|
6
|
+
X_SMALL = "X_SMALL",
|
|
7
|
+
/** 14px circles, body_sm labels. */
|
|
8
|
+
SMALL = "SMALL",
|
|
9
|
+
/** 16px circles, body_md labels. The default. */
|
|
10
|
+
MEDIUM = "MEDIUM",
|
|
11
|
+
/** 16px circles, body_lg labels. */
|
|
12
|
+
LARGE = "LARGE",
|
|
13
|
+
/** 18px circles, body_lg labels. */
|
|
14
|
+
X_LARGE = "X_LARGE"
|
|
15
|
+
}
|
|
16
|
+
/** Fill of the unselected circles (Constitution V-A surface set). Mapped to RadioInputVariant one to one. */
|
|
17
|
+
export declare enum RadioGroupVariant {
|
|
18
|
+
/** `background.base`. */
|
|
19
|
+
BASE = "BASE",
|
|
20
|
+
/** `background.primary`. The default. */
|
|
21
|
+
PRIMARY = "PRIMARY",
|
|
22
|
+
/** `background.secondary`. */
|
|
23
|
+
SECONDARY = "SECONDARY",
|
|
24
|
+
/** `background.tertiary`. */
|
|
25
|
+
TERTIARY = "TERTIARY"
|
|
26
|
+
}
|
|
27
|
+
/** One choice in a RadioGroup. */
|
|
28
|
+
export interface RadioGroupOption<TId extends string = string> {
|
|
29
|
+
/** Stable identifier; what `value` holds. */
|
|
30
|
+
id: TId;
|
|
31
|
+
/** Text beside the circle. */
|
|
32
|
+
label: string;
|
|
33
|
+
/** Help copy under the label. Text and inline `Link`s only. */
|
|
34
|
+
description?: ReactNode;
|
|
35
|
+
/**
|
|
36
|
+
* Disables this option only; the arrow keys skip it.
|
|
37
|
+
* @default false
|
|
38
|
+
*/
|
|
39
|
+
isDisabled?: boolean;
|
|
40
|
+
}
|
|
41
|
+
export interface RadioGroupProps<TId extends string = string> extends AriaAttributes {
|
|
42
|
+
/** The choices, in display order. */
|
|
43
|
+
options: RadioGroupOption<TId>[];
|
|
44
|
+
/** Controlled id of the selected option; `null` for none. Pass it with `onChange`. */
|
|
45
|
+
value?: TId | null;
|
|
46
|
+
/**
|
|
47
|
+
* Initially selected id while uncontrolled.
|
|
48
|
+
* @default null
|
|
49
|
+
*/
|
|
50
|
+
defaultValue?: TId | null;
|
|
51
|
+
/** Called with the id the user selects. The user cannot clear a selection. */
|
|
52
|
+
onChange?: (value: TId) => void;
|
|
53
|
+
/** The question, rendered through `Field` above the options. For a description, a tooltip or a horizontal layout, wrap the group in `Field` instead. */
|
|
54
|
+
label?: string;
|
|
55
|
+
/** Message from the app, shown under the options through `Field`. It also marks the group invalid. */
|
|
56
|
+
error?: string;
|
|
57
|
+
/**
|
|
58
|
+
* Error borders and `aria-invalid` without a message. `error` implies it.
|
|
59
|
+
* @default false
|
|
60
|
+
*/
|
|
61
|
+
isError?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Asterisk on the `label` (via `Field`) and `aria-required` on the group. It does no validation.
|
|
64
|
+
* @default false
|
|
65
|
+
*/
|
|
66
|
+
isRequired?: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* `VERTICAL` stacks the options; `HORIZONTAL` puts them in a row that wraps.
|
|
69
|
+
* @default Orientation.VERTICAL
|
|
70
|
+
*/
|
|
71
|
+
orientation?: Orientation;
|
|
72
|
+
/**
|
|
73
|
+
* Rung of every radio and label, of the gaps, and of the `label` and `error` type.
|
|
74
|
+
* @default RadioGroupSize.MEDIUM
|
|
75
|
+
*/
|
|
76
|
+
size?: RadioGroupSize;
|
|
77
|
+
/**
|
|
78
|
+
* Fill of every unselected circle, from the surface set. Ignored with `isGhost`.
|
|
79
|
+
* @default RadioGroupVariant.PRIMARY
|
|
80
|
+
*/
|
|
81
|
+
variant?: RadioGroupVariant;
|
|
82
|
+
/**
|
|
83
|
+
* Ghost items: every unselected circle has no fill and keeps its hairline (1.x `TRANSPARENT`);
|
|
84
|
+
* passed to each RadioInput as `isGhost`.
|
|
85
|
+
* @default false
|
|
86
|
+
*/
|
|
87
|
+
isGhost?: boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Disables every option.
|
|
90
|
+
* @default false
|
|
91
|
+
*/
|
|
92
|
+
isDisabled?: boolean;
|
|
93
|
+
/** Accessible name of the group when there is no `label` and no wrapping `Field` label. */
|
|
94
|
+
ariaLabel?: string;
|
|
95
|
+
/**
|
|
96
|
+
* DOM id of the group element. A wrapping `Field`'s id wins.
|
|
97
|
+
* @default useId()
|
|
98
|
+
*/
|
|
99
|
+
id?: string;
|
|
100
|
+
/** Any `data-*` attribute, forwarded to the group element. */
|
|
101
|
+
[dataAttribute: `data-${string}`]: string | number | boolean | undefined;
|
|
102
|
+
/** Extra class on the root: the `Field` wrapper when the group renders one, otherwise the group element. */
|
|
103
|
+
className?: string;
|
|
104
|
+
/** Inline style on the root; only for setting CSS custom properties. */
|
|
105
|
+
style?: CSSProperties;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* The public, generic call signature (`TId` inferred from `options`). Never called: it only types
|
|
109
|
+
* the default export. An arrow function rather than a type literal, so react-docgen-typescript
|
|
110
|
+
* reads the props for the Docs tab.
|
|
111
|
+
*/
|
|
112
|
+
declare const RADIO_GROUP_SIGNATURE: <TId extends string = string>(_props: RadioGroupProps<TId> & RefAttributes<HTMLDivElement>) => ReactElement | null;
|
|
113
|
+
/** A set of radios answering one question; the value is the selected id. */
|
|
114
|
+
declare const RadioGroup: typeof RADIO_GROUP_SIGNATURE;
|
|
115
|
+
export default RadioGroup;
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { Orientation } from "../theme/enums.js";
|
|
2
|
+
import { useControlledState } from "../hooks/useControlledState.js";
|
|
3
|
+
import { useDevWarning } from "./internal/devWarn.js";
|
|
4
|
+
import { useFieldWiring } from "./internal/fieldWiring.js";
|
|
5
|
+
import Field, { FieldSize } from "./Field.js";
|
|
6
|
+
import { rootStyle, useOwnField } from "./internal/ownField.js";
|
|
7
|
+
import RadioInput, { RadioInputSize, RadioInputVariant } from "./RadioInput.js";
|
|
8
|
+
/* empty css */
|
|
9
|
+
import { styled } from "@linaria/react";
|
|
10
|
+
import { forwardRef, useCallback, useId } from "react";
|
|
11
|
+
import { jsx } from "react/jsx-runtime";
|
|
12
|
+
import { cx } from "@linaria/core";
|
|
13
|
+
//#region src/inputs/RadioGroup.tsx
|
|
14
|
+
/**
|
|
15
|
+
* One question whose answer is exactly one of a few visible options ("Theme", "Sync schedule"). It
|
|
16
|
+
* renders a `RadioInput` per option, in a column or a wrapping row, all sharing one generated
|
|
17
|
+
* native `name`, so the browser gives them the radio keyboard pattern (one tab stop, arrow keys
|
|
18
|
+
* move and select). It holds the selected id with `value` / `defaultValue` / `onChange`, and it is
|
|
19
|
+
* the `radiogroup` that carries the question's name, required and invalid state. Like the text
|
|
20
|
+
* inputs, it takes `label` and `error` directly and renders them through `Field`; anything more is
|
|
21
|
+
* a wrapping `Field`.
|
|
22
|
+
*
|
|
23
|
+
* It does not validate, is not a segmented control for switching a view (`ToggleInput`), and is
|
|
24
|
+
* not a dropdown for long lists (`SelectInput`). Any number of choices is `CheckboxGroup`. New in
|
|
25
|
+
* 2.0 (1.x rendered `RadioInput`s by hand and enforced single selection in app state).
|
|
26
|
+
*/
|
|
27
|
+
/** Rung of the group's radios (Constitution III-A.4). Mapped to RadioInputSize and FieldSize one to one. */
|
|
28
|
+
var RadioGroupSize = /* @__PURE__ */ function(RadioGroupSize) {
|
|
29
|
+
/** 12px circles, caption labels. */
|
|
30
|
+
RadioGroupSize["X_SMALL"] = "X_SMALL";
|
|
31
|
+
/** 14px circles, body_sm labels. */
|
|
32
|
+
RadioGroupSize["SMALL"] = "SMALL";
|
|
33
|
+
/** 16px circles, body_md labels. The default. */
|
|
34
|
+
RadioGroupSize["MEDIUM"] = "MEDIUM";
|
|
35
|
+
/** 16px circles, body_lg labels. */
|
|
36
|
+
RadioGroupSize["LARGE"] = "LARGE";
|
|
37
|
+
/** 18px circles, body_lg labels. */
|
|
38
|
+
RadioGroupSize["X_LARGE"] = "X_LARGE";
|
|
39
|
+
return RadioGroupSize;
|
|
40
|
+
}({});
|
|
41
|
+
/** Fill of the unselected circles (Constitution V-A surface set). Mapped to RadioInputVariant one to one. */
|
|
42
|
+
var RadioGroupVariant = /* @__PURE__ */ function(RadioGroupVariant) {
|
|
43
|
+
/** `background.base`. */
|
|
44
|
+
RadioGroupVariant["BASE"] = "BASE";
|
|
45
|
+
/** `background.primary`. The default. */
|
|
46
|
+
RadioGroupVariant["PRIMARY"] = "PRIMARY";
|
|
47
|
+
/** `background.secondary`. */
|
|
48
|
+
RadioGroupVariant["SECONDARY"] = "SECONDARY";
|
|
49
|
+
/** `background.tertiary`. */
|
|
50
|
+
RadioGroupVariant["TERTIARY"] = "TERTIARY";
|
|
51
|
+
return RadioGroupVariant;
|
|
52
|
+
}({});
|
|
53
|
+
/** The group element. The first row sits in a control-height band (block inset = Field's label offset). */
|
|
54
|
+
var Root = /*#__PURE__*/ styled("div")({
|
|
55
|
+
name: "Root",
|
|
56
|
+
class: "gx-RadioGroup-r1g93v93",
|
|
57
|
+
propsAsIs: false
|
|
58
|
+
});
|
|
59
|
+
/** A column, or a row that wraps. */
|
|
60
|
+
var RADIO_GROUP_ORIENTATION_TO_CSS_MAP = {
|
|
61
|
+
[Orientation.VERTICAL]: "gx-RadioGroup-Orientation_VERTICAL-ouwhueh",
|
|
62
|
+
[Orientation.HORIZONTAL]: "gx-RadioGroup-Orientation_HORIZONTAL-o1onppun"
|
|
63
|
+
};
|
|
64
|
+
/** Row gap, column gap and block inset per rung (inset = (control rung − label line) / 2). */
|
|
65
|
+
var RADIO_GROUP_SIZE_TO_CSS_MAP = {
|
|
66
|
+
["X_SMALL"]: "gx-RadioGroup-X_SMALL-x1hjaxb2",
|
|
67
|
+
["SMALL"]: "gx-RadioGroup-SMALL-sss5vly",
|
|
68
|
+
["MEDIUM"]: "gx-RadioGroup-MEDIUM-mc6iiv9",
|
|
69
|
+
["LARGE"]: "gx-RadioGroup-LARGE-ld02soo",
|
|
70
|
+
["X_LARGE"]: "gx-RadioGroup-X_LARGE-x1rrw221"
|
|
71
|
+
};
|
|
72
|
+
/** Every radio takes the group's rung. */
|
|
73
|
+
var RADIO_GROUP_SIZE_TO_RADIO_INPUT_SIZE_MAP = {
|
|
74
|
+
["X_SMALL"]: RadioInputSize.X_SMALL,
|
|
75
|
+
["SMALL"]: RadioInputSize.SMALL,
|
|
76
|
+
["MEDIUM"]: RadioInputSize.MEDIUM,
|
|
77
|
+
["LARGE"]: RadioInputSize.LARGE,
|
|
78
|
+
["X_LARGE"]: RadioInputSize.X_LARGE
|
|
79
|
+
};
|
|
80
|
+
/** Every radio takes the group's fill. */
|
|
81
|
+
var RADIO_GROUP_VARIANT_TO_RADIO_INPUT_VARIANT_MAP = {
|
|
82
|
+
["BASE"]: RadioInputVariant.BASE,
|
|
83
|
+
["PRIMARY"]: RadioInputVariant.PRIMARY,
|
|
84
|
+
["SECONDARY"]: RadioInputVariant.SECONDARY,
|
|
85
|
+
["TERTIARY"]: RadioInputVariant.TERTIARY
|
|
86
|
+
};
|
|
87
|
+
/** The `Field` the group renders for its own `label` / `error` uses the same rung. */
|
|
88
|
+
var RADIO_GROUP_SIZE_TO_FIELD_SIZE_MAP = {
|
|
89
|
+
["X_SMALL"]: FieldSize.X_SMALL,
|
|
90
|
+
["SMALL"]: FieldSize.SMALL,
|
|
91
|
+
["MEDIUM"]: FieldSize.MEDIUM,
|
|
92
|
+
["LARGE"]: FieldSize.LARGE,
|
|
93
|
+
["X_LARGE"]: FieldSize.X_LARGE
|
|
94
|
+
};
|
|
95
|
+
/** The radiogroup and its radios, wired to the nearest Field (the group's own or the app's). */
|
|
96
|
+
function GroupBody({ groupProps, forwardedRef, isRoot }) {
|
|
97
|
+
const { options, value, defaultValue, onChange, label: _label, error, isError = false, isRequired = false, orientation = Orientation.VERTICAL, size = "MEDIUM", variant = "PRIMARY", isGhost = false, isDisabled = false, ariaLabel, id, "aria-describedby": ariaDescribedBy, className, style, ...rest } = groupProps;
|
|
98
|
+
const wiring = useFieldWiring({
|
|
99
|
+
id,
|
|
100
|
+
ariaLabel,
|
|
101
|
+
ariaLabelAttribute: rest["aria-label"],
|
|
102
|
+
ariaLabelledBy: rest["aria-labelledby"],
|
|
103
|
+
ariaDescribedBy,
|
|
104
|
+
error,
|
|
105
|
+
isError,
|
|
106
|
+
isRequired
|
|
107
|
+
});
|
|
108
|
+
const { field, controlId: groupId, describedBy, isRequired: isRequiredState, hasName } = wiring;
|
|
109
|
+
const name = useId();
|
|
110
|
+
const handleChange = useCallback((next) => {
|
|
111
|
+
if (next !== null) onChange?.(next);
|
|
112
|
+
}, [onChange]);
|
|
113
|
+
const [selected, setSelected] = useControlledState({
|
|
114
|
+
value,
|
|
115
|
+
defaultValue: defaultValue ?? null,
|
|
116
|
+
onChange: handleChange
|
|
117
|
+
});
|
|
118
|
+
const isInvalid = error !== void 0 || wiring.isInvalid;
|
|
119
|
+
useDevWarning(!hasName, "[@galaxy-io/dls] RadioGroup has no accessible name. Pass `label`, wrap it in a labelled `Field`, or set `ariaLabel`.");
|
|
120
|
+
return /* @__PURE__ */ jsx(Root, {
|
|
121
|
+
ref: forwardedRef,
|
|
122
|
+
role: "radiogroup",
|
|
123
|
+
id: groupId,
|
|
124
|
+
"aria-labelledby": field?.labelId,
|
|
125
|
+
"aria-label": ariaLabel,
|
|
126
|
+
"aria-describedby": describedBy,
|
|
127
|
+
"aria-required": isRequiredState ? true : void 0,
|
|
128
|
+
"aria-invalid": isInvalid ? true : void 0,
|
|
129
|
+
"aria-disabled": isDisabled ? true : void 0,
|
|
130
|
+
...rest,
|
|
131
|
+
className: cx(RADIO_GROUP_ORIENTATION_TO_CSS_MAP[orientation], RADIO_GROUP_SIZE_TO_CSS_MAP[size], isRoot && className),
|
|
132
|
+
...rootStyle(isRoot, style),
|
|
133
|
+
children: options.map((option) => /* @__PURE__ */ jsx(RadioInput, {
|
|
134
|
+
name,
|
|
135
|
+
label: option.label,
|
|
136
|
+
...option.description === void 0 ? {} : { description: option.description },
|
|
137
|
+
size: RADIO_GROUP_SIZE_TO_RADIO_INPUT_SIZE_MAP[size],
|
|
138
|
+
variant: RADIO_GROUP_VARIANT_TO_RADIO_INPUT_VARIANT_MAP[variant],
|
|
139
|
+
isGhost,
|
|
140
|
+
isSelected: selected === option.id,
|
|
141
|
+
isDisabled: isDisabled || option.isDisabled === true,
|
|
142
|
+
isError: isInvalid,
|
|
143
|
+
onChange: () => setSelected(option.id)
|
|
144
|
+
}, option.id))
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/** A set of radios answering one question; the value is the selected id. */
|
|
148
|
+
var RadioGroupBase = forwardRef(function RadioGroup(props, ref) {
|
|
149
|
+
const { label, error, isRequired = false, size = "MEDIUM" } = props;
|
|
150
|
+
const { id, className, style } = props;
|
|
151
|
+
const ownField = useOwnField({
|
|
152
|
+
componentName: "RadioGroup",
|
|
153
|
+
label,
|
|
154
|
+
error,
|
|
155
|
+
isRequired,
|
|
156
|
+
size: RADIO_GROUP_SIZE_TO_FIELD_SIZE_MAP[size],
|
|
157
|
+
id,
|
|
158
|
+
className,
|
|
159
|
+
style
|
|
160
|
+
});
|
|
161
|
+
if (ownField !== null) return /* @__PURE__ */ jsx(Field, {
|
|
162
|
+
...ownField,
|
|
163
|
+
children: /* @__PURE__ */ jsx(GroupBody, {
|
|
164
|
+
groupProps: props,
|
|
165
|
+
forwardedRef: ref,
|
|
166
|
+
isRoot: false
|
|
167
|
+
})
|
|
168
|
+
});
|
|
169
|
+
return /* @__PURE__ */ jsx(GroupBody, {
|
|
170
|
+
groupProps: props,
|
|
171
|
+
forwardedRef: ref,
|
|
172
|
+
isRoot: true
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
RadioGroupBase.displayName = "RadioGroup";
|
|
176
|
+
/** A set of radios answering one question; the value is the selected id. */
|
|
177
|
+
var RadioGroup = RadioGroupBase;
|
|
178
|
+
//#endregion
|
|
179
|
+
export { RadioGroupSize, RadioGroupVariant, RadioGroup as default };
|