@galaxy-io/dls 1.6.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -50
- package/biome/index.json +74 -0
- package/biome/plugins/no-hex-literal.grit +20 -0
- package/biome/plugins/no-inline-style.grit +13 -0
- package/biome/plugins/no-margin.grit +9 -0
- package/biome/plugins/warn/no-hex-literal.grit +23 -0
- package/biome/plugins/warn/no-inline-style.grit +13 -0
- package/biome/plugins/warn/no-margin.grit +9 -0
- package/dist/a11y/FocusScope.d.ts +44 -0
- package/dist/a11y/FocusScope.js +229 -0
- package/dist/a11y/VisuallyHidden.d.ts +21 -0
- package/dist/a11y/VisuallyHidden.js +30 -0
- package/dist/avatar/Avatar.d.ts +56 -14
- package/dist/avatar/Avatar.js +250 -96
- package/dist/avatar/AvatarGroup.d.ts +43 -0
- package/dist/avatar/AvatarGroup.js +153 -0
- package/dist/backgrounds/GridBackground.d.ts +48 -0
- package/dist/backgrounds/GridBackground.js +146 -0
- package/dist/beacons/Beacon.d.ts +86 -22
- package/dist/beacons/Beacon.js +170 -47
- package/dist/brand/GalaxyFilamentWordmark.d.ts +30 -0
- package/dist/brand/GalaxyFilamentWordmark.js +39 -0
- package/dist/brand/GalaxyLogomark.d.ts +26 -0
- package/dist/brand/GalaxyLogomark.js +41 -0
- package/dist/brand/GalaxyLogomarkAnimation.d.ts +36 -0
- package/dist/brand/GalaxyLogomarkAnimation.js +107 -0
- package/dist/brand/GalaxyWordmark.d.ts +30 -0
- package/dist/brand/GalaxyWordmark.js +63 -0
- package/dist/brand/assets/galaxy-logomark-animation.js +136678 -0
- package/dist/brand/brandMark.d.ts +26 -0
- package/dist/brand/brandMark.js +35 -0
- package/dist/buttons/Button.d.ts +148 -59
- package/dist/buttons/Button.js +437 -227
- package/dist/buttons/ButtonGroup.d.ts +38 -0
- package/dist/buttons/ButtonGroup.js +68 -0
- package/dist/buttons/CopyButton.d.ts +77 -0
- package/dist/buttons/CopyButton.js +65 -0
- package/dist/charts/AreaChart.d.ts +49 -0
- package/dist/charts/AreaChart.js +31 -0
- package/dist/charts/BarChart.d.ts +54 -67
- package/dist/charts/BarChart.js +136 -116
- package/dist/charts/ChartAxis.d.ts +35 -40
- package/dist/charts/ChartAxis.js +114 -90
- package/dist/charts/ChartCategoryTargets.d.ts +12 -26
- package/dist/charts/ChartCategoryTargets.js +32 -20
- package/dist/charts/ChartFrame.d.ts +69 -116
- package/dist/charts/ChartFrame.js +253 -119
- package/dist/charts/ChartGroupProvider.d.ts +30 -41
- package/dist/charts/ChartGroupProvider.js +20 -7
- package/dist/charts/ChartLegend.d.ts +27 -48
- package/dist/charts/ChartLegend.js +206 -125
- package/dist/charts/ChartMarkTargets.d.ts +12 -28
- package/dist/charts/ChartMarkTargets.js +33 -20
- package/dist/charts/ChartPrimitives.d.ts +50 -305
- package/dist/charts/ChartPrimitives.js +65 -413
- package/dist/charts/ChartTooltip.d.ts +20 -26
- package/dist/charts/ChartTooltip.js +77 -40
- package/dist/charts/Heatmap.d.ts +35 -0
- package/dist/charts/Heatmap.js +295 -0
- package/dist/charts/LineChart.d.ts +54 -47
- package/dist/charts/LineChart.js +159 -117
- package/dist/charts/PieChart.d.ts +32 -53
- package/dist/charts/PieChart.js +149 -135
- package/dist/charts/Sparkline.d.ts +107 -0
- package/dist/charts/Sparkline.js +244 -0
- package/dist/charts/StatChart.d.ts +37 -13
- package/dist/charts/StatChart.js +82 -35
- package/dist/charts/barChartGeometry.d.ts +138 -86
- package/dist/charts/barChartGeometry.js +122 -101
- package/dist/charts/barChartLegend.d.ts +14 -18
- package/dist/charts/barChartLegend.js +18 -13
- package/dist/charts/chartFormat.d.ts +12 -18
- package/dist/charts/chartFormat.js +20 -52
- package/dist/charts/chartPalette.d.ts +33 -0
- package/dist/charts/chartPalette.js +68 -0
- package/dist/charts/chartScales.d.ts +41 -108
- package/dist/charts/chartScales.js +62 -128
- package/dist/charts/constants.d.ts +96 -256
- package/dist/charts/constants.js +105 -275
- package/dist/charts/heatmapGeometry.d.ts +95 -0
- package/dist/charts/heatmapGeometry.js +155 -0
- package/dist/charts/lineChartGeometry.d.ts +108 -58
- package/dist/charts/lineChartGeometry.js +120 -78
- package/dist/charts/pieChartGeometry.d.ts +66 -40
- package/dist/charts/pieChartGeometry.js +68 -38
- package/dist/charts/types.d.ts +197 -466
- package/dist/charts/types.js +55 -144
- package/dist/charts/useCartesianChartLayout.d.ts +28 -59
- package/dist/charts/useCartesianChartLayout.js +47 -32
- package/dist/charts/useChartDimensions.d.ts +19 -40
- package/dist/charts/useChartDimensions.js +40 -56
- package/dist/charts/useChartFormatters.d.ts +6 -15
- package/dist/charts/useChartFormatters.js +4 -9
- package/dist/charts/useChartInteraction.d.ts +47 -116
- package/dist/charts/useChartInteraction.js +95 -71
- package/dist/charts/useChartTooltipPosition.d.ts +29 -39
- package/dist/charts/useChartTooltipPosition.js +14 -5
- package/dist/charts/useSeriesColorResolver.d.ts +11 -33
- package/dist/charts/useSeriesColorResolver.js +19 -12
- package/dist/chips/Chip.d.ts +155 -44
- package/dist/chips/Chip.js +329 -155
- package/dist/chips/ChipGroup.d.ts +53 -0
- package/dist/chips/ChipGroup.js +98 -0
- package/dist/drawer/Drawer.d.ts +81 -17
- package/dist/drawer/Drawer.js +370 -65
- package/dist/dropdown/Dropdown.d.ts +80 -63
- package/dist/dropdown/Dropdown.js +127 -129
- package/dist/editor/CodeEditor.d.ts +119 -40
- package/dist/editor/CodeEditor.js +490 -400
- package/dist/editor/CodeEditorReactWidget.d.ts +20 -17
- package/dist/editor/CodeEditorReactWidget.js +28 -21
- package/dist/feedback/Alert.d.ts +49 -0
- package/dist/feedback/Alert.js +172 -0
- package/dist/feedback/EmptyState.d.ts +39 -0
- package/dist/feedback/EmptyState.js +109 -0
- package/dist/feedback/ProgressBar.d.ts +125 -0
- package/dist/feedback/ProgressBar.js +183 -0
- package/dist/feedback/ProgressCircle.d.ts +99 -0
- package/dist/feedback/ProgressCircle.js +187 -0
- package/dist/feedback/Skeleton.d.ts +69 -0
- package/dist/feedback/Skeleton.js +130 -0
- package/dist/feedback/Spinner.d.ts +63 -0
- package/dist/feedback/Spinner.js +141 -0
- package/dist/fonts.css +70 -0
- package/dist/hooks/internal/useIsClient.d.ts +2 -0
- package/dist/hooks/internal/useIsClient.js +14 -0
- package/dist/hooks/useClipboard.d.ts +19 -0
- package/dist/hooks/useClipboard.js +45 -0
- package/dist/hooks/useControlledOpenState.d.ts +21 -0
- package/dist/hooks/useControlledOpenState.js +19 -0
- package/dist/hooks/useControlledState.d.ts +19 -0
- package/dist/hooks/useControlledState.js +22 -0
- package/dist/hooks/useDebouncedValue.d.ts +14 -0
- package/dist/hooks/useDebouncedValue.js +33 -0
- package/dist/hooks/useDisclosure.d.ts +26 -0
- package/dist/hooks/useDisclosure.js +36 -0
- package/dist/hooks/useDismiss.d.ts +23 -27
- package/dist/hooks/useDismiss.js +39 -27
- package/dist/hooks/useElementClientSize.d.ts +10 -10
- package/dist/hooks/useElementClientSize.js +8 -11
- package/dist/hooks/useElementWidth.d.ts +6 -13
- package/dist/hooks/useElementWidth.js +6 -14
- package/dist/hooks/useField.d.ts +47 -0
- package/dist/hooks/useField.js +40 -0
- package/dist/hooks/useHotkey.d.ts +77 -0
- package/dist/hooks/useHotkey.js +246 -0
- package/dist/hooks/useIsMac.d.ts +12 -0
- package/dist/hooks/useIsMac.js +27 -0
- package/dist/hooks/useIsomorphicLayoutEffect.d.ts +17 -0
- package/dist/hooks/useIsomorphicLayoutEffect.js +20 -0
- package/dist/hooks/useLocalStorage.d.ts +28 -0
- package/dist/hooks/useLocalStorage.js +145 -0
- package/dist/hooks/useMediaQuery.d.ts +11 -0
- package/dist/hooks/useMediaQuery.js +23 -0
- package/dist/hooks/usePrefersReducedMotion.d.ts +12 -0
- package/dist/hooks/usePrefersReducedMotion.js +25 -0
- package/dist/hooks/useResize.d.ts +42 -62
- package/dist/hooks/useResize.js +43 -31
- package/dist/icons/Icon.d.ts +64 -37
- package/dist/icons/Icon.js +96 -37
- package/dist/icons/internal/IconSlot.d.ts +10 -0
- package/dist/icons/internal/IconSlot.js +32 -0
- package/dist/inputs/CheckboxGroup.d.ts +115 -0
- package/dist/inputs/CheckboxGroup.js +183 -0
- package/dist/inputs/CheckboxInput.d.ts +98 -28
- package/dist/inputs/CheckboxInput.js +218 -88
- package/dist/inputs/ColorInput.d.ts +115 -29
- package/dist/inputs/ColorInput.js +748 -326
- package/dist/inputs/CopyInput.d.ts +49 -20
- package/dist/inputs/CopyInput.js +57 -49
- package/dist/inputs/CronInput.d.ts +94 -0
- package/dist/inputs/CronInput.js +618 -0
- package/dist/inputs/DateInput.d.ts +175 -28
- package/dist/inputs/DateInput.js +1109 -451
- package/dist/inputs/DurationInput.d.ts +101 -0
- package/dist/inputs/DurationInput.js +441 -0
- package/dist/inputs/Field.d.ts +75 -0
- package/dist/inputs/Field.js +247 -0
- package/dist/inputs/Fieldset.d.ts +53 -0
- package/dist/inputs/Fieldset.js +149 -0
- package/dist/inputs/FileInput.d.ts +110 -0
- package/dist/inputs/FileInput.js +476 -0
- package/dist/inputs/Input.d.ts +148 -187
- package/dist/inputs/Input.js +339 -259
- package/dist/inputs/KeyValueInput.d.ts +120 -0
- package/dist/inputs/KeyValueInput.js +383 -0
- package/dist/inputs/MultiSelectInput.d.ts +165 -54
- package/dist/inputs/MultiSelectInput.js +175 -559
- package/dist/inputs/NumberInput.d.ts +65 -9
- package/dist/inputs/NumberInput.js +197 -40
- package/dist/inputs/PasswordInput.d.ts +17 -12
- package/dist/inputs/PasswordInput.js +33 -33
- package/dist/inputs/PinInput.d.ts +117 -0
- package/dist/inputs/PinInput.js +364 -0
- package/dist/inputs/RadioGroup.d.ts +115 -0
- package/dist/inputs/RadioGroup.js +179 -0
- package/dist/inputs/RadioInput.d.ts +87 -24
- package/dist/inputs/RadioInput.js +182 -95
- package/dist/inputs/SearchInput.d.ts +66 -0
- package/dist/inputs/SearchInput.js +156 -0
- package/dist/inputs/SelectInput.d.ts +195 -55
- package/dist/inputs/SelectInput.js +1308 -446
- package/dist/inputs/SliderInput.d.ts +150 -30
- package/dist/inputs/SliderInput.js +441 -186
- package/dist/inputs/SwitchInput.d.ts +109 -0
- package/dist/inputs/SwitchInput.js +248 -0
- package/dist/inputs/TagInput.d.ts +117 -0
- package/dist/inputs/TagInput.js +408 -0
- package/dist/inputs/TextAreaInput.d.ts +146 -44
- package/dist/inputs/TextAreaInput.js +292 -198
- package/dist/inputs/TextInput.d.ts +4 -13
- package/dist/inputs/TextInput.js +13 -48
- package/dist/inputs/ToggleInput.d.ts +120 -22
- package/dist/inputs/ToggleInput.js +262 -116
- package/dist/inputs/internal/bareField.d.ts +18 -0
- package/dist/inputs/internal/bareField.js +38 -0
- package/dist/inputs/internal/devWarn.d.ts +7 -0
- package/dist/inputs/internal/devWarn.js +30 -0
- package/dist/inputs/internal/fieldFrame.d.ts +34 -0
- package/dist/inputs/internal/fieldFrame.js +64 -0
- package/dist/inputs/internal/fieldWiring.d.ts +50 -0
- package/dist/inputs/internal/fieldWiring.js +38 -0
- package/dist/inputs/internal/innerButton.d.ts +2 -0
- package/dist/inputs/internal/innerButton.js +24 -0
- package/dist/inputs/internal/ownField.d.ts +45 -0
- package/dist/inputs/internal/ownField.js +58 -0
- package/dist/inputs/internal/predicates.d.ts +9 -0
- package/dist/inputs/internal/predicates.js +11 -0
- package/dist/inputs/internal/useComboboxPopover.d.ts +46 -0
- package/dist/inputs/internal/useComboboxPopover.js +92 -0
- package/dist/json/JsonViewer.d.ts +62 -0
- package/dist/json/JsonViewer.js +483 -0
- package/dist/layout/Box.d.ts +87 -0
- package/dist/layout/Box.js +109 -0
- package/dist/layout/Divider.d.ts +25 -0
- package/dist/layout/Divider.js +70 -0
- package/dist/layout/Flex.d.ts +139 -0
- package/dist/layout/Flex.js +165 -0
- package/dist/layout/FlexItem.d.ts +72 -0
- package/dist/layout/FlexItem.js +84 -0
- package/dist/layout/Grid.d.ts +140 -0
- package/dist/layout/Grid.js +178 -0
- package/dist/layout/Portal.d.ts +29 -0
- package/dist/layout/Portal.js +27 -0
- package/dist/layout/ResizablePanels.d.ts +88 -0
- package/dist/layout/ResizablePanels.js +198 -0
- package/dist/layout/ResizeHandle.d.ts +48 -0
- package/dist/layout/ResizeHandle.js +143 -0
- package/dist/layout/ScrollArea.d.ts +30 -0
- package/dist/layout/ScrollArea.js +138 -0
- package/dist/links/Link.d.ts +101 -1
- package/dist/links/Link.js +166 -4
- package/dist/lists/BulletedList.d.ts +25 -7
- package/dist/lists/BulletedList.js +72 -27
- package/dist/lists/DescriptionList.d.ts +91 -0
- package/dist/lists/DescriptionList.js +147 -0
- package/dist/menu/ContextMenu.d.ts +64 -0
- package/dist/menu/ContextMenu.js +34 -0
- package/dist/menu/Menu.d.ts +280 -0
- package/dist/menu/Menu.js +1003 -0
- package/dist/modal/ConfirmDialog.d.ts +55 -0
- package/dist/modal/ConfirmDialog.js +151 -0
- package/dist/modal/Modal.d.ts +64 -14
- package/dist/modal/Modal.js +189 -48
- package/dist/navigation/Breadcrumbs.d.ts +65 -0
- package/dist/navigation/Breadcrumbs.js +243 -0
- package/dist/navigation/CommandPalette.d.ts +83 -0
- package/dist/navigation/CommandPalette.js +509 -0
- package/dist/navigation/Pagination.d.ts +87 -0
- package/dist/navigation/Pagination.js +300 -0
- package/dist/navigation/SidebarNav.d.ts +107 -0
- package/dist/navigation/SidebarNav.js +341 -0
- package/dist/navigation/Stepper.d.ts +52 -0
- package/dist/navigation/Stepper.js +207 -0
- package/dist/navigation/Tabs.d.ts +113 -0
- package/dist/navigation/Tabs.js +543 -0
- package/dist/navigation/Topbar.d.ts +20 -0
- package/dist/navigation/Topbar.js +62 -0
- package/dist/overlay/OverlayProvider.d.ts +28 -32
- package/dist/overlay/OverlayProvider.js +42 -93
- package/dist/overlay/useOverlay.d.ts +88 -12
- package/dist/overlay/useOverlay.js +220 -43
- package/dist/overlays/Popover.d.ts +114 -0
- package/dist/overlays/Popover.js +389 -0
- package/dist/shapes/Circle.d.ts +84 -8
- package/dist/shapes/Circle.js +122 -20
- package/dist/shapes/Square.d.ts +84 -8
- package/dist/shapes/Square.js +123 -20
- package/dist/styles/mixins.d.ts +35 -0
- package/dist/styles/mixins.js +60 -0
- package/dist/styles.css +1 -202
- package/dist/table/InfiniteSpreadsheet.d.ts +140 -10
- package/dist/table/InfiniteSpreadsheet.js +762 -225
- package/dist/table/InfiniteTable.d.ts +116 -14
- package/dist/table/InfiniteTable.js +287 -429
- package/dist/table/SpreadsheetCellEditor.d.ts +54 -6
- package/dist/table/SpreadsheetCellEditor.js +163 -84
- package/dist/table/TableCore.d.ts +252 -0
- package/dist/table/TableCore.js +1077 -0
- package/dist/table/VirtualizedInfiniteTable.d.ts +104 -14
- package/dist/table/VirtualizedInfiniteTable.js +280 -219
- package/dist/table/types.d.ts +66 -244
- package/dist/table/types.js +0 -51
- package/dist/table/useInfiniteScrollSentinel.d.ts +25 -21
- package/dist/table/useInfiniteScrollSentinel.js +38 -30
- package/dist/table/useSpreadsheetCellNavigation.d.ts +44 -0
- package/dist/table/useSpreadsheetCellNavigation.js +141 -0
- package/dist/table/useTableColumnLayout.d.ts +90 -25
- package/dist/table/useTableColumnLayout.js +255 -50
- package/dist/table/useTableKeyboardNavigation.d.ts +32 -21
- package/dist/table/useTableKeyboardNavigation.js +95 -71
- package/dist/table/useTableRowSelection.d.ts +24 -25
- package/dist/table/useTableRowSelection.js +57 -84
- package/dist/table/useTableVirtualizer.d.ts +20 -0
- package/dist/table/useTableVirtualizer.js +48 -0
- package/dist/text/Bold.d.ts +5 -6
- package/dist/text/Bold.js +16 -15
- package/dist/text/Code.d.ts +5 -6
- package/dist/text/Code.js +16 -25
- package/dist/text/CodeBlock.d.ts +77 -0
- package/dist/text/CodeBlock.js +373 -0
- package/dist/text/EditableText.d.ts +55 -15
- package/dist/text/EditableText.js +153 -135
- package/dist/text/Ellipsis.d.ts +34 -8
- package/dist/text/Ellipsis.js +55 -23
- package/dist/text/Kbd.d.ts +72 -0
- package/dist/text/Kbd.js +284 -0
- package/dist/text/MarkdownText.d.ts +27 -10
- package/dist/text/MarkdownText.js +317 -300
- package/dist/text/RequiredMarker.d.ts +17 -5
- package/dist/text/RequiredMarker.js +34 -36
- package/dist/text/Selectable.d.ts +5 -6
- package/dist/text/Selectable.js +16 -13
- package/dist/text/Span.d.ts +82 -0
- package/dist/text/Span.js +115 -0
- package/dist/text/Text.d.ts +128 -41
- package/dist/text/Text.js +209 -76
- package/dist/theme/GalaxyProvider.d.ts +75 -0
- package/dist/theme/GalaxyProvider.js +223 -0
- package/dist/theme/ThemeSwitcher.d.ts +52 -0
- package/dist/theme/ThemeSwitcher.js +94 -0
- package/dist/theme/enums.d.ts +118 -0
- package/dist/theme/enums.js +144 -0
- package/dist/theme/tokens/dark.d.ts +2 -0
- package/dist/theme/tokens/dark.js +275 -0
- package/dist/theme/tokens/generate.d.ts +15 -0
- package/dist/theme/tokens/generate.js +47 -0
- package/dist/theme/tokens/light.d.ts +2 -0
- package/dist/theme/tokens/light.js +274 -0
- package/dist/theme/tokens/palette.d.ts +14 -0
- package/dist/theme/tokens/palette.js +153 -0
- package/dist/theme/tokens/scales.d.ts +26 -0
- package/dist/theme/tokens/scales.js +154 -0
- package/dist/theme/tokens/t.d.ts +3 -0
- package/dist/theme/tokens/t.js +25 -0
- package/dist/theme/tokens/types.d.ts +189 -0
- package/dist/theme/tokens/types.js +0 -0
- package/dist/theme/useGalaxyTheme.d.ts +46 -0
- package/dist/theme/useGalaxyTheme.js +36 -0
- package/dist/theme/useInverseScope.d.ts +18 -0
- package/dist/theme/useInverseScope.js +33 -0
- package/dist/three/GalaxyLogomark3D.d.ts +46 -0
- package/dist/three/GalaxyLogomark3D.js +134 -0
- package/dist/three/assets/galaxy-logomark.js +4 -0
- package/dist/three/galaxyLogomark3DScene.d.ts +27 -0
- package/dist/three/galaxyLogomark3DScene.js +165 -0
- package/dist/timeline/Timeline.d.ts +99 -0
- package/dist/timeline/Timeline.js +269 -0
- package/dist/toast/Toast.d.ts +43 -19
- package/dist/toast/Toast.js +130 -89
- package/dist/toast/ToastProvider.d.ts +23 -23
- package/dist/toast/ToastProvider.js +298 -101
- package/dist/toast/ToastViewport.d.ts +12 -0
- package/dist/toast/ToastViewport.js +210 -0
- package/dist/toast/useToast.d.ts +139 -5
- package/dist/toast/useToast.js +15 -13
- package/dist/tokens.css +654 -0
- package/dist/tooltip/Tooltip.d.ts +64 -44
- package/dist/tooltip/Tooltip.js +280 -73
- package/dist/tooltip/internal/LazyTooltip.d.ts +7 -0
- package/dist/tooltip/internal/LazyTooltip.js +53 -0
- package/dist/transform/Fade.d.ts +33 -11
- package/dist/transform/Fade.js +71 -19
- package/dist/transform/Flasher.d.ts +25 -0
- package/dist/transform/Flasher.js +39 -0
- package/dist/transform/Rotate.d.ts +24 -12
- package/dist/transform/Rotate.js +36 -22
- package/dist/transform/ScaleFade.d.ts +36 -11
- package/dist/transform/ScaleFade.js +86 -28
- package/dist/transform/internal/CollapseMotion.d.ts +10 -0
- package/dist/transform/internal/CollapseMotion.js +65 -0
- package/dist/tree/Tree.d.ts +85 -0
- package/dist/tree/Tree.js +387 -0
- package/dist/tree/treeRow.d.ts +39 -0
- package/dist/tree/treeRow.js +75 -0
- package/dist/utils/colors.d.ts +46 -13
- package/dist/utils/colors.js +92 -34
- package/dist/utils/css.d.ts +23 -0
- package/dist/utils/css.js +30 -0
- package/dist/utils/format.d.ts +58 -0
- package/dist/utils/format.js +220 -0
- package/dist/vite/index.d.ts +16 -0
- package/dist/vite/index.js +52 -0
- package/dist/widget/Widget.d.ts +164 -48
- package/dist/widget/Widget.js +335 -96
- package/dist/widget/WidgetGroup.d.ts +36 -0
- package/dist/widget/WidgetGroup.js +103 -0
- package/package.json +851 -157
- package/dist/accordion/Accordion.d.ts +0 -54
- package/dist/accordion/Accordion.js +0 -183
- package/dist/assets/components/GalaxyFilamentWordmarkDark.d.ts +0 -3
- package/dist/assets/components/GalaxyFilamentWordmarkDark.js +0 -14
- package/dist/assets/components/GalaxyFilamentWordmarkLight.d.ts +0 -3
- package/dist/assets/components/GalaxyFilamentWordmarkLight.js +0 -14
- package/dist/assets/components/GalaxyLogomarkDark.d.ts +0 -3
- package/dist/assets/components/GalaxyLogomarkDark.js +0 -11
- package/dist/assets/components/GalaxyLogomarkLight.d.ts +0 -3
- package/dist/assets/components/GalaxyLogomarkLight.js +0 -17
- package/dist/assets/components/GalaxyWordmarkDark.d.ts +0 -3
- package/dist/assets/components/GalaxyWordmarkDark.js +0 -15
- package/dist/assets/components/GalaxyWordmarkLight.d.ts +0 -3
- package/dist/assets/components/GalaxyWordmarkLight.js +0 -28
- package/dist/assets/models/galaxy-animation.js +0 -136666
- package/dist/assets/models/galaxy-logomark.js +0 -4
- package/dist/avatar/AvatarShimmer.d.ts +0 -30
- package/dist/avatar/AvatarShimmer.js +0 -22
- package/dist/backgrounds/CellGridBackground.d.ts +0 -24
- package/dist/backgrounds/CellGridBackground.js +0 -44
- package/dist/backgrounds/CrossGridBackground.d.ts +0 -26
- package/dist/backgrounds/CrossGridBackground.js +0 -49
- package/dist/backgrounds/DotGridBackground.d.ts +0 -24
- package/dist/backgrounds/DotGridBackground.js +0 -47
- package/dist/badge/Badge.d.ts +0 -42
- package/dist/badge/Badge.js +0 -99
- package/dist/charts/ChartEmptyState.d.ts +0 -17
- package/dist/charts/ChartEmptyState.js +0 -29
- package/dist/charts/ProgressBar.d.ts +0 -29
- package/dist/charts/ProgressBar.js +0 -65
- package/dist/charts/chartTheme.d.ts +0 -18
- package/dist/charts/chartTheme.js +0 -26
- package/dist/containers/FlexItem.d.ts +0 -50
- package/dist/containers/FlexItem.js +0 -91
- package/dist/containers/FlexWrapper.d.ts +0 -96
- package/dist/containers/FlexWrapper.js +0 -143
- package/dist/containers/GridWrapper.d.ts +0 -79
- package/dist/containers/GridWrapper.js +0 -125
- package/dist/containers/Spacing.d.ts +0 -23
- package/dist/containers/Spacing.js +0 -59
- package/dist/containers/Wrapper.d.ts +0 -26
- package/dist/containers/Wrapper.js +0 -54
- package/dist/dividers/HorizontalDivider.d.ts +0 -7
- package/dist/dividers/HorizontalDivider.js +0 -39
- package/dist/dividers/VerticalDivider.d.ts +0 -6
- package/dist/dividers/VerticalDivider.js +0 -21
- package/dist/icons/GalaxyFilamentWordmark.d.ts +0 -11
- package/dist/icons/GalaxyFilamentWordmark.js +0 -25
- package/dist/icons/GalaxyLogomark.d.ts +0 -13
- package/dist/icons/GalaxyLogomark.js +0 -27
- package/dist/icons/GalaxyLogomark3D.d.ts +0 -56
- package/dist/icons/GalaxyLogomark3D.js +0 -319
- package/dist/icons/GalaxyLogomarkAnimation.d.ts +0 -18
- package/dist/icons/GalaxyLogomarkAnimation.js +0 -48
- package/dist/icons/GalaxyWordmark.d.ts +0 -11
- package/dist/icons/GalaxyWordmark.js +0 -25
- package/dist/inputs/MultiTextInput.d.ts +0 -32
- package/dist/inputs/MultiTextInput.js +0 -180
- package/dist/inputs/SwitcherInput.d.ts +0 -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,48 @@
|
|
|
1
|
+
import { type AriaAttributes, type CSSProperties } from "react";
|
|
2
|
+
import { Orientation } from "../theme/enums.js";
|
|
3
|
+
export interface ResizeHandleProps extends AriaAttributes {
|
|
4
|
+
/**
|
|
5
|
+
* Axis of the bar. `VERTICAL` is a vertical bar between side-by-side panes, dragged left and
|
|
6
|
+
* right; `HORIZONTAL` is a horizontal bar between stacked panes, dragged up and down.
|
|
7
|
+
* @default Orientation.HORIZONTAL
|
|
8
|
+
*/
|
|
9
|
+
orientation?: Orientation;
|
|
10
|
+
/** The current size, in pixels, of the pane this handle resizes. */
|
|
11
|
+
value: number;
|
|
12
|
+
/** Called with the new size while dragging and on each key step; clamped and whole pixels. */
|
|
13
|
+
onChange: (value: number) => void;
|
|
14
|
+
/**
|
|
15
|
+
* Smallest size, in pixels.
|
|
16
|
+
* @default 0
|
|
17
|
+
*/
|
|
18
|
+
min?: number;
|
|
19
|
+
/**
|
|
20
|
+
* Largest size, in pixels.
|
|
21
|
+
* @default Infinity
|
|
22
|
+
*/
|
|
23
|
+
max?: number;
|
|
24
|
+
/**
|
|
25
|
+
* The resized pane is after the handle (right of a vertical bar, below a horizontal one), so
|
|
26
|
+
* dragging toward the start grows it.
|
|
27
|
+
* @default false
|
|
28
|
+
*/
|
|
29
|
+
isReversed?: boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Not draggable and not focusable; the grip dims.
|
|
32
|
+
* @default false
|
|
33
|
+
*/
|
|
34
|
+
isDisabled?: boolean;
|
|
35
|
+
/** Accessible name naming the pane ("Resize sidebar"). Pass `aria-controls` with its `id`. */
|
|
36
|
+
ariaLabel: string;
|
|
37
|
+
/** DOM id on the root element. */
|
|
38
|
+
id?: string;
|
|
39
|
+
/** Any `data-*` attribute, forwarded to the root element. */
|
|
40
|
+
[dataAttribute: `data-${string}`]: string | number | boolean | undefined;
|
|
41
|
+
/** Extra class on the root element. */
|
|
42
|
+
className?: string;
|
|
43
|
+
/** Inline style on the root element; only for setting CSS custom properties. */
|
|
44
|
+
style?: CSSProperties;
|
|
45
|
+
}
|
|
46
|
+
/** A draggable, keyboard-adjustable bar that resizes the pane beside it. */
|
|
47
|
+
declare const ResizeHandle: import("react").ForwardRefExoticComponent<ResizeHandleProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
48
|
+
export default ResizeHandle;
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { Orientation } from "../theme/enums.js";
|
|
2
|
+
import { SPACE } from "../theme/tokens/scales.js";
|
|
3
|
+
/* empty css */
|
|
4
|
+
import { styled } from "@linaria/react";
|
|
5
|
+
import { forwardRef, useRef, useState } from "react";
|
|
6
|
+
import { jsx } from "react/jsx-runtime";
|
|
7
|
+
import { cx } from "@linaria/core";
|
|
8
|
+
//#region src/layout/ResizeHandle.tsx
|
|
9
|
+
/**
|
|
10
|
+
* The grab bar between two panes. The user drags it (mouse, touch or pen) or moves it with the
|
|
11
|
+
* arrow keys to change the size of one pane. Replaces 1.x `HorizontalResizeHandle` and
|
|
12
|
+
* `VerticalResizeHandle` (Constitution XII.4 pattern): `orientation` picks the axis.
|
|
13
|
+
*
|
|
14
|
+
* The handle owns the interaction (pointer capture, key steps, clamping to `min` / `max`, the
|
|
15
|
+
* WAI-ARIA window-splitter semantics); the host owns the size. Pass the pane's size in pixels as
|
|
16
|
+
* `value` and apply what `onChange` returns. ResizeHandle takes no `size` or `variant`
|
|
17
|
+
* (Constitution V-A).
|
|
18
|
+
*/
|
|
19
|
+
/** One arrow-key step: the `space[16]` token, in pixels. */
|
|
20
|
+
var KEY_STEP_PX = Number.parseFloat(SPACE[16]);
|
|
21
|
+
/** Stable keys for the dots. */
|
|
22
|
+
var GRIP_DOTS = Array.from({ length: 4 }, (_, index) => `dot-${index}`);
|
|
23
|
+
/** One dot of the grip: a small round mark in the quiet icon colour. */
|
|
24
|
+
var GripDot = /*#__PURE__*/ styled("span")({
|
|
25
|
+
name: "GripDot",
|
|
26
|
+
class: "gx-ResizeHandle-GripDot-gqgj99q",
|
|
27
|
+
propsAsIs: false
|
|
28
|
+
});
|
|
29
|
+
/** The mark inside the strip: a short line of dots. Declared first so `Root`'s state rules can target it. */
|
|
30
|
+
var Grip = /*#__PURE__*/ styled("span")({
|
|
31
|
+
name: "Grip",
|
|
32
|
+
class: "gx-ResizeHandle-Grip-g1y5kmmy",
|
|
33
|
+
propsAsIs: false
|
|
34
|
+
});
|
|
35
|
+
/** The hit area: an in-flow strip with no fill of its own; the grip is the mark. */
|
|
36
|
+
var Root = /*#__PURE__*/ styled("div")({
|
|
37
|
+
name: "Root",
|
|
38
|
+
class: "gx-ResizeHandle-rpp11vs",
|
|
39
|
+
propsAsIs: false
|
|
40
|
+
});
|
|
41
|
+
/** Strip thickness, stretch and cursor per axis (the 1.x cursors). */
|
|
42
|
+
var RESIZE_HANDLE_ORIENTATION_TO_CSS_MAP = {
|
|
43
|
+
[Orientation.VERTICAL]: "gx-ResizeHandle-Orientation_VERTICAL-o1ynbf1o",
|
|
44
|
+
[Orientation.HORIZONTAL]: "gx-ResizeHandle-Orientation_HORIZONTAL-o1mpu2dj"
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* The dots' box along the axis: 4 × 2px dots + 3 × 3px gaps = 17px, rounded up to an even 18px
|
|
48
|
+
* so the line centres on whole pixels in an even-length strip; the dots sit at its start.
|
|
49
|
+
*/
|
|
50
|
+
/** The dots run along the handle's axis. */
|
|
51
|
+
var GRIP_ORIENTATION_TO_CSS_MAP = {
|
|
52
|
+
[Orientation.VERTICAL]: "gx-ResizeHandle-Orientation_VERTICAL-orsl86p",
|
|
53
|
+
[Orientation.HORIZONTAL]: "gx-ResizeHandle-Orientation_HORIZONTAL-o1pusn5p"
|
|
54
|
+
};
|
|
55
|
+
/** Hover and keyboard focus darken the dots. */
|
|
56
|
+
var ENABLED_CSS = "gx-ResizeHandle-ENABLED_CSS-e419x02";
|
|
57
|
+
/** While a pointer drag is in progress, the dots stay dark even when the pointer leaves. */
|
|
58
|
+
var DRAGGING_CSS = "gx-ResizeHandle-DRAGGING_CSS-d1bnqfss";
|
|
59
|
+
/** Disabled: no resize cursor, dimmed dots. */
|
|
60
|
+
var DISABLED_CSS = "gx-ResizeHandle-DISABLED_CSS-dn28y1d";
|
|
61
|
+
/** Keeps `value` within `[min, max]` as a whole pixel. */
|
|
62
|
+
function clamp(value, min, max) {
|
|
63
|
+
return Math.min(Math.max(Math.round(value), min), max);
|
|
64
|
+
}
|
|
65
|
+
/** A draggable, keyboard-adjustable bar that resizes the pane beside it. */
|
|
66
|
+
var ResizeHandle = forwardRef(function ResizeHandle({ orientation = Orientation.HORIZONTAL, value, onChange, min = 0, max = Number.POSITIVE_INFINITY, isReversed = false, isDisabled = false, ariaLabel, id, className, style, ...rest }, ref) {
|
|
67
|
+
const dragRef = useRef(null);
|
|
68
|
+
const [isDragging, setIsDragging] = useState(false);
|
|
69
|
+
const isVertical = orientation === Orientation.VERTICAL;
|
|
70
|
+
const endDrag = () => {
|
|
71
|
+
dragRef.current = null;
|
|
72
|
+
setIsDragging(false);
|
|
73
|
+
};
|
|
74
|
+
const handlePointerDown = (event) => {
|
|
75
|
+
if (isDisabled) return;
|
|
76
|
+
if (event.pointerType === "mouse" && event.button !== 0) return;
|
|
77
|
+
event.preventDefault();
|
|
78
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
79
|
+
dragRef.current = {
|
|
80
|
+
pointerId: event.pointerId,
|
|
81
|
+
start: isVertical ? event.clientX : event.clientY,
|
|
82
|
+
startValue: value,
|
|
83
|
+
lastSent: value
|
|
84
|
+
};
|
|
85
|
+
setIsDragging(true);
|
|
86
|
+
};
|
|
87
|
+
const handlePointerMove = (event) => {
|
|
88
|
+
const drag = dragRef.current;
|
|
89
|
+
if (!drag || drag.pointerId !== event.pointerId) return;
|
|
90
|
+
const delta = (isVertical ? event.clientX : event.clientY) - drag.start;
|
|
91
|
+
const next = clamp(drag.startValue + (isReversed ? -delta : delta), min, max);
|
|
92
|
+
if (next !== drag.lastSent) {
|
|
93
|
+
drag.lastSent = next;
|
|
94
|
+
onChange(next);
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
const handlePointerEnd = (event) => {
|
|
98
|
+
if (dragRef.current?.pointerId === event.pointerId) endDrag();
|
|
99
|
+
};
|
|
100
|
+
const handleKeyDown = (event) => {
|
|
101
|
+
if (isDisabled) return;
|
|
102
|
+
const towardEnd = isVertical ? "ArrowRight" : "ArrowDown";
|
|
103
|
+
const towardStart = isVertical ? "ArrowLeft" : "ArrowUp";
|
|
104
|
+
const growth = isReversed ? -KEY_STEP_PX : KEY_STEP_PX;
|
|
105
|
+
let next;
|
|
106
|
+
if (event.key === towardEnd) next = value + growth;
|
|
107
|
+
else if (event.key === towardStart) next = value - growth;
|
|
108
|
+
else if (event.key === "Home") next = min;
|
|
109
|
+
else if (event.key === "End" && Number.isFinite(max)) next = max;
|
|
110
|
+
if (next === void 0) return;
|
|
111
|
+
event.preventDefault();
|
|
112
|
+
onChange(clamp(next, min, max));
|
|
113
|
+
};
|
|
114
|
+
return /* @__PURE__ */ jsx(Root, {
|
|
115
|
+
...rest,
|
|
116
|
+
ref,
|
|
117
|
+
id,
|
|
118
|
+
role: "separator",
|
|
119
|
+
tabIndex: isDisabled ? void 0 : 0,
|
|
120
|
+
"aria-orientation": isVertical ? "vertical" : "horizontal",
|
|
121
|
+
"aria-valuenow": value,
|
|
122
|
+
"aria-valuemin": min,
|
|
123
|
+
"aria-valuemax": Number.isFinite(max) ? max : void 0,
|
|
124
|
+
"aria-label": ariaLabel ?? rest["aria-label"],
|
|
125
|
+
"aria-disabled": isDisabled || void 0,
|
|
126
|
+
onPointerDown: handlePointerDown,
|
|
127
|
+
onPointerMove: handlePointerMove,
|
|
128
|
+
onPointerUp: handlePointerEnd,
|
|
129
|
+
onPointerCancel: handlePointerEnd,
|
|
130
|
+
onLostPointerCapture: handlePointerEnd,
|
|
131
|
+
onKeyDown: handleKeyDown,
|
|
132
|
+
className: cx(RESIZE_HANDLE_ORIENTATION_TO_CSS_MAP[orientation], isDisabled ? DISABLED_CSS : ENABLED_CSS, isDragging && DRAGGING_CSS, className),
|
|
133
|
+
style,
|
|
134
|
+
children: /* @__PURE__ */ jsx(Grip, {
|
|
135
|
+
"aria-hidden": true,
|
|
136
|
+
className: GRIP_ORIENTATION_TO_CSS_MAP[orientation],
|
|
137
|
+
children: GRIP_DOTS.map((dot) => /* @__PURE__ */ jsx(GripDot, {}, dot))
|
|
138
|
+
})
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
ResizeHandle.displayName = "ResizeHandle";
|
|
142
|
+
//#endregion
|
|
143
|
+
export { ResizeHandle as default };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type AriaAttributes, type CSSProperties, type ReactNode, type UIEvent } from "react";
|
|
2
|
+
export interface ScrollAreaProps extends AriaAttributes {
|
|
3
|
+
/** The scrolling content. Put padding on a `Box` inside, not on ScrollArea. */
|
|
4
|
+
children?: ReactNode;
|
|
5
|
+
/**
|
|
6
|
+
* Also scroll sideways when the content is wider than the area. When `false`, content wraps and truncates to the area's width.
|
|
7
|
+
* @default false
|
|
8
|
+
*/
|
|
9
|
+
canScrollHorizontally?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Fade the content out toward each edge that has more content beyond it.
|
|
12
|
+
* @default false
|
|
13
|
+
*/
|
|
14
|
+
hasFadeEdges?: boolean;
|
|
15
|
+
/** Names the region. When set, the scrolling element gets `role="region"` and this `aria-label`. */
|
|
16
|
+
ariaLabel?: string;
|
|
17
|
+
/** Scroll handler on the scrolling element. */
|
|
18
|
+
onScroll?: (event: UIEvent<HTMLDivElement>) => void;
|
|
19
|
+
/** DOM id of the scrolling element. */
|
|
20
|
+
id?: string;
|
|
21
|
+
/** Any `data-*` attribute, forwarded to the scrolling element. */
|
|
22
|
+
[dataAttribute: `data-${string}`]: string | number | boolean | undefined;
|
|
23
|
+
/** Extra class on the root (the box the parent sizes). */
|
|
24
|
+
className?: string;
|
|
25
|
+
/** Inline style on the root; only for setting CSS custom properties. */
|
|
26
|
+
style?: CSSProperties;
|
|
27
|
+
}
|
|
28
|
+
/** A scrolling region with thin, consistent overlay scrollbars and optional fade edges. */
|
|
29
|
+
declare const ScrollArea: import("react").ForwardRefExoticComponent<ScrollAreaProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
30
|
+
export default ScrollArea;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { useIsomorphicLayoutEffect } from "../hooks/useIsomorphicLayoutEffect.js";
|
|
2
|
+
import { Orientation } from "../theme/enums.js";
|
|
3
|
+
import { t } from "../theme/tokens/t.js";
|
|
4
|
+
/* empty css */
|
|
5
|
+
import { forwardRef, useRef, useState } from "react";
|
|
6
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
|
+
import { cx } from "@linaria/core";
|
|
8
|
+
import { useMergeRefs } from "@floating-ui/react";
|
|
9
|
+
import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
|
|
10
|
+
//#region src/layout/ScrollArea.tsx
|
|
11
|
+
/**
|
|
12
|
+
* A scrolling region with thin overlay scrollbars that look the same in every browser and OS. The
|
|
13
|
+
* DLS reset hides native scrollbars, so a scrollable sidebar, list, panel or code block uses
|
|
14
|
+
* ScrollArea to show one: a 4px thumb that appears while the pointer is over the region. It fills
|
|
15
|
+
* the height its parent gives it (`Box height`, `Box maxHeight`, a growing `FlexItem`), scrolls
|
|
16
|
+
* vertically and, with `canScrollHorizontally`, sideways; `hasFadeEdges` fades the content toward
|
|
17
|
+
* each edge that has more beyond it. Scrolling stays native, and the forwarded ref is the
|
|
18
|
+
* scrolling element (`ref.current.scrollTo(…)`).
|
|
19
|
+
*
|
|
20
|
+
* No size, padding or fill of its own: the parent sizes it and a `Box padding` inside pads the
|
|
21
|
+
* content. Not a virtualized list. Built on `@radix-ui/react-scroll-area` (the GX app's direct
|
|
22
|
+
* usage maps onto `<ScrollArea>`).
|
|
23
|
+
*/
|
|
24
|
+
/** Nothing measured yet (the server and the first client render). */
|
|
25
|
+
var NO_EDGES = {
|
|
26
|
+
top: false,
|
|
27
|
+
bottom: false,
|
|
28
|
+
left: false,
|
|
29
|
+
right: false,
|
|
30
|
+
isOverflowing: false
|
|
31
|
+
};
|
|
32
|
+
/** Sub-pixel scroll positions within this many px of an edge count as at the edge. */
|
|
33
|
+
var EDGE_TOLERANCE_PX = 1;
|
|
34
|
+
/** Fills a parent with a definite height; under a parent that only caps it, grows and then scrolls. */
|
|
35
|
+
var ROOT_CSS = "gx-ScrollArea-ROOT_CSS-rtuxgfs";
|
|
36
|
+
/** The scrolling element. `isolation` keeps content `z-index` below the scrollbars. */
|
|
37
|
+
var VIEWPORT_CSS = "gx-ScrollArea-VIEWPORT_CSS-v10v341q";
|
|
38
|
+
/** Vertical-only: override radix's inline `display: table` wrapper so content wraps and truncates. */
|
|
39
|
+
var VERTICAL_ONLY_CSS = "gx-ScrollArea-VERTICAL_ONLY_CSS-vnp9bey";
|
|
40
|
+
/** Alpha mask toward each edge with hidden content; lengths come from `--gx-scroll-area-fade-*` on the root. */
|
|
41
|
+
var FADE_EDGES_CSS = "gx-ScrollArea-FADE_EDGES_CSS-f19cis7a";
|
|
42
|
+
/**
|
|
43
|
+
* With `hasFadeEdges`, the viewport's mask also clips its own outline, so the root (same box, not
|
|
44
|
+
* masked) draws the `FOCUS_RING` outline while the viewport has keyboard focus.
|
|
45
|
+
*/
|
|
46
|
+
var FADE_EDGES_ROOT_CSS = "gx-ScrollArea-FADE_EDGES_ROOT_CSS-fjjojif";
|
|
47
|
+
/** The track: 8px thick and transparent; the 2px padding leaves a 4px thumb. */
|
|
48
|
+
var SCROLL_AREA_ORIENTATION_TO_SCROLLBAR_CSS_MAP = {
|
|
49
|
+
[Orientation.VERTICAL]: "gx-ScrollArea-Orientation_VERTICAL-o174c7co",
|
|
50
|
+
[Orientation.HORIZONTAL]: "gx-ScrollArea-Orientation_HORIZONTAL-okpbxfy"
|
|
51
|
+
};
|
|
52
|
+
/** The 4px thumb, a quiet neutral on every surface; `::before` gives it a 24px pointer target. */
|
|
53
|
+
var THUMB_CSS = "gx-ScrollArea-THUMB_CSS-tzpebzb";
|
|
54
|
+
/** Where the two scrollbars meet. */
|
|
55
|
+
var CORNER_CSS = "gx-ScrollArea-CORNER_CSS-c1otan2y";
|
|
56
|
+
/** Reads the viewport's scroll geometry into edge flags. */
|
|
57
|
+
function measureEdges(viewport, canScrollHorizontally) {
|
|
58
|
+
const { scrollTop, scrollHeight, clientHeight, scrollWidth, clientWidth } = viewport;
|
|
59
|
+
const scrollLeft = Math.abs(viewport.scrollLeft);
|
|
60
|
+
return {
|
|
61
|
+
top: scrollTop > EDGE_TOLERANCE_PX,
|
|
62
|
+
bottom: scrollTop + clientHeight < scrollHeight - EDGE_TOLERANCE_PX,
|
|
63
|
+
left: canScrollHorizontally && scrollLeft > EDGE_TOLERANCE_PX,
|
|
64
|
+
right: canScrollHorizontally && scrollLeft + clientWidth < scrollWidth - EDGE_TOLERANCE_PX,
|
|
65
|
+
isOverflowing: scrollHeight - clientHeight > EDGE_TOLERANCE_PX || canScrollHorizontally && scrollWidth - clientWidth > EDGE_TOLERANCE_PX
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/** True when two edge readings are the same. */
|
|
69
|
+
function isSameEdges(a, b) {
|
|
70
|
+
return a.top === b.top && a.bottom === b.bottom && a.left === b.left && a.right === b.right && a.isOverflowing === b.isOverflowing;
|
|
71
|
+
}
|
|
72
|
+
/** A scrolling region with thin, consistent overlay scrollbars and optional fade edges. */
|
|
73
|
+
var ScrollArea = forwardRef(function ScrollArea({ children, canScrollHorizontally = false, hasFadeEdges = false, ariaLabel, onScroll, className, style, ...rest }, ref) {
|
|
74
|
+
const viewportRef = useRef(null);
|
|
75
|
+
const mergedRef = useMergeRefs([viewportRef, ref]);
|
|
76
|
+
const [edges, setEdges] = useState(NO_EDGES);
|
|
77
|
+
useIsomorphicLayoutEffect(() => {
|
|
78
|
+
const viewport = viewportRef.current;
|
|
79
|
+
if (viewport === null) return;
|
|
80
|
+
let isCancelled = false;
|
|
81
|
+
const update = () => {
|
|
82
|
+
if (isCancelled) return;
|
|
83
|
+
const next = measureEdges(viewport, canScrollHorizontally);
|
|
84
|
+
setEdges((current) => isSameEdges(current, next) ? current : next);
|
|
85
|
+
};
|
|
86
|
+
update();
|
|
87
|
+
viewport.addEventListener("scroll", update, { passive: true });
|
|
88
|
+
const observer = typeof ResizeObserver === "undefined" ? void 0 : new ResizeObserver(update);
|
|
89
|
+
observer?.observe(viewport);
|
|
90
|
+
if (viewport.firstElementChild !== null) observer?.observe(viewport.firstElementChild);
|
|
91
|
+
document.fonts?.ready.then(update);
|
|
92
|
+
return () => {
|
|
93
|
+
isCancelled = true;
|
|
94
|
+
viewport.removeEventListener("scroll", update);
|
|
95
|
+
observer?.disconnect();
|
|
96
|
+
};
|
|
97
|
+
}, [canScrollHorizontally]);
|
|
98
|
+
const fadeVariables = {
|
|
99
|
+
"--gx-scroll-area-fade-top": edges.top ? t.space[16] : "0px",
|
|
100
|
+
"--gx-scroll-area-fade-bottom": edges.bottom ? t.space[16] : "0px",
|
|
101
|
+
"--gx-scroll-area-fade-left": edges.left ? t.space[16] : "0px",
|
|
102
|
+
"--gx-scroll-area-fade-right": edges.right ? t.space[16] : "0px"
|
|
103
|
+
};
|
|
104
|
+
return /* @__PURE__ */ jsxs(ScrollAreaPrimitive.Root, {
|
|
105
|
+
type: "hover",
|
|
106
|
+
className: cx(ROOT_CSS, hasFadeEdges && FADE_EDGES_ROOT_CSS, className),
|
|
107
|
+
style: {
|
|
108
|
+
...fadeVariables,
|
|
109
|
+
...style
|
|
110
|
+
},
|
|
111
|
+
children: [
|
|
112
|
+
/* @__PURE__ */ jsx(ScrollAreaPrimitive.Viewport, {
|
|
113
|
+
ref: mergedRef,
|
|
114
|
+
className: cx(VIEWPORT_CSS, !canScrollHorizontally && VERTICAL_ONLY_CSS, hasFadeEdges && FADE_EDGES_CSS),
|
|
115
|
+
role: ariaLabel === void 0 ? void 0 : "region",
|
|
116
|
+
"aria-label": ariaLabel,
|
|
117
|
+
tabIndex: edges.isOverflowing ? 0 : void 0,
|
|
118
|
+
onScroll,
|
|
119
|
+
...rest,
|
|
120
|
+
children
|
|
121
|
+
}),
|
|
122
|
+
/* @__PURE__ */ jsx(ScrollAreaPrimitive.Scrollbar, {
|
|
123
|
+
orientation: "vertical",
|
|
124
|
+
className: SCROLL_AREA_ORIENTATION_TO_SCROLLBAR_CSS_MAP[Orientation.VERTICAL],
|
|
125
|
+
children: /* @__PURE__ */ jsx(ScrollAreaPrimitive.Thumb, { className: THUMB_CSS })
|
|
126
|
+
}),
|
|
127
|
+
canScrollHorizontally && /* @__PURE__ */ jsx(ScrollAreaPrimitive.Scrollbar, {
|
|
128
|
+
orientation: "horizontal",
|
|
129
|
+
className: SCROLL_AREA_ORIENTATION_TO_SCROLLBAR_CSS_MAP[Orientation.HORIZONTAL],
|
|
130
|
+
children: /* @__PURE__ */ jsx(ScrollAreaPrimitive.Thumb, { className: THUMB_CSS })
|
|
131
|
+
}),
|
|
132
|
+
canScrollHorizontally && /* @__PURE__ */ jsx(ScrollAreaPrimitive.Corner, { className: CORNER_CSS })
|
|
133
|
+
]
|
|
134
|
+
});
|
|
135
|
+
});
|
|
136
|
+
ScrollArea.displayName = "ScrollArea";
|
|
137
|
+
//#endregion
|
|
138
|
+
export { ScrollArea as default };
|
package/dist/links/Link.d.ts
CHANGED
|
@@ -1,2 +1,102 @@
|
|
|
1
|
-
|
|
1
|
+
import { type AriaAttributes, type CSSProperties, type ElementType, type FocusEventHandler, type MouseEvent, type MouseEventHandler, type ReactNode } from "react";
|
|
2
|
+
import { TextSize } from "../text/Text.js";
|
|
3
|
+
/** Color (Constitution V-A: Link NEUTRAL / INHERIT; declared in `scripts/lint-dls.ts` `MODE_SETS`). */
|
|
4
|
+
export declare enum LinkVariant {
|
|
5
|
+
/** `text.primary` with a `text.tertiary` underline (the 1.x `MarkdownText` anchor). The default. */
|
|
6
|
+
NEUTRAL = "NEUTRAL",
|
|
7
|
+
/** `currentColor`: the link takes the surrounding text's color. */
|
|
8
|
+
INHERIT = "INHERIT"
|
|
9
|
+
}
|
|
10
|
+
/** When the underline is drawn (Constitution V-A: `Link underline`). */
|
|
11
|
+
export declare enum LinkUnderline {
|
|
12
|
+
/** Soft underline at rest, full color on hover. The default. */
|
|
13
|
+
ALWAYS = "ALWAYS",
|
|
14
|
+
/** No underline at rest, full color on hover. */
|
|
15
|
+
HOVER = "HOVER",
|
|
16
|
+
/** Never underlined (nav lists, titles); `isActive` still underlines. */
|
|
17
|
+
NONE = "NONE"
|
|
18
|
+
}
|
|
19
|
+
/** Canonical rungs; only the text step applies (a link has no control height). */
|
|
20
|
+
export declare enum LinkSize {
|
|
21
|
+
/** `caption` (10px on a 12px line). */
|
|
22
|
+
X_SMALL = "X_SMALL",
|
|
23
|
+
/** `body_sm` (12px on a 16px line). */
|
|
24
|
+
SMALL = "SMALL",
|
|
25
|
+
/** `body_md` (13px on a 16px line). */
|
|
26
|
+
MEDIUM = "MEDIUM",
|
|
27
|
+
/** `body_lg` (14px on a 20px line). */
|
|
28
|
+
LARGE = "LARGE",
|
|
29
|
+
/** `body_lg` (14px on a 20px line); kept so composites can map their own size 1:1. */
|
|
30
|
+
X_LARGE = "X_LARGE"
|
|
31
|
+
}
|
|
32
|
+
/** Text step per rung (Constitution III-A.4). */
|
|
33
|
+
export declare const LINK_SIZE_TO_TEXT_SIZE_MAP: Record<LinkSize, TextSize>;
|
|
34
|
+
export interface LinkProps extends AriaAttributes {
|
|
35
|
+
/** The link text. Must not contain links, buttons or inputs. */
|
|
36
|
+
children?: ReactNode;
|
|
37
|
+
/** Destination. Without it, Link renders a non-interactive `<span>` with the link look (for use inside a clickable parent). */
|
|
38
|
+
href?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Router link component that renders the anchor when `href` is set. It receives `href` and must
|
|
41
|
+
* forward its `ref`. Ignored without `href`.
|
|
42
|
+
* @default "a"
|
|
43
|
+
*/
|
|
44
|
+
as?: ElementType;
|
|
45
|
+
/**
|
|
46
|
+
* Opens in a new tab (`target="_blank"`, `rel="noopener noreferrer"`) and adds a trailing arrow
|
|
47
|
+
* plus visually hidden "(opens in a new tab)".
|
|
48
|
+
* @default false
|
|
49
|
+
*/
|
|
50
|
+
isExternal?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Color: primary text, or the parent's color.
|
|
53
|
+
* @default LinkVariant.NEUTRAL
|
|
54
|
+
*/
|
|
55
|
+
variant?: LinkVariant;
|
|
56
|
+
/**
|
|
57
|
+
* When the underline shows: always (soft at rest, full on hover), on hover only, or never.
|
|
58
|
+
* @default LinkUnderline.ALWAYS
|
|
59
|
+
*/
|
|
60
|
+
underline?: LinkUnderline;
|
|
61
|
+
/**
|
|
62
|
+
* Text step for a standalone link (`caption` / `body_sm` / `body_md` / `body_lg` / `body_lg`).
|
|
63
|
+
* Inherits from the parent when unset: leave it unset inside `Text` so the link matches the sentence.
|
|
64
|
+
*/
|
|
65
|
+
size?: LinkSize;
|
|
66
|
+
/**
|
|
67
|
+
* Marks the current page: `aria-current="page"` and the hover look, held.
|
|
68
|
+
* @default false
|
|
69
|
+
*/
|
|
70
|
+
isActive?: boolean;
|
|
71
|
+
/**
|
|
72
|
+
* Not followable: no `href`, disabled color, `aria-disabled`, `onClick` not called.
|
|
73
|
+
* @default false
|
|
74
|
+
*/
|
|
75
|
+
isDisabled?: boolean;
|
|
76
|
+
/** Called when the link is followed (analytics, closing a menu). Not called while disabled or without `href`. */
|
|
77
|
+
onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;
|
|
78
|
+
/**
|
|
79
|
+
* Accessible name when the visible text is not enough. Must start with the visible text
|
|
80
|
+
* (WCAG 2.5.3). With `isExternal`, " (opens in a new tab)" is appended.
|
|
81
|
+
*/
|
|
82
|
+
ariaLabel?: string;
|
|
83
|
+
/** Focus passthrough to the root (Tooltip triggers). */
|
|
84
|
+
onFocus?: FocusEventHandler<HTMLAnchorElement | HTMLSpanElement>;
|
|
85
|
+
/** Blur passthrough to the root (Tooltip triggers). */
|
|
86
|
+
onBlur?: FocusEventHandler<HTMLAnchorElement | HTMLSpanElement>;
|
|
87
|
+
/** Pointer-enter passthrough to the root (Tooltip triggers, router prefetch on hover). */
|
|
88
|
+
onMouseEnter?: MouseEventHandler<HTMLAnchorElement | HTMLSpanElement>;
|
|
89
|
+
/** Pointer-leave passthrough to the root (Tooltip triggers). */
|
|
90
|
+
onMouseLeave?: MouseEventHandler<HTMLAnchorElement | HTMLSpanElement>;
|
|
91
|
+
/** DOM id on the root. */
|
|
92
|
+
id?: string;
|
|
93
|
+
/** Any `data-*` attribute, forwarded to the root. */
|
|
94
|
+
[dataAttribute: `data-${string}`]: string | number | boolean | undefined;
|
|
95
|
+
/** Extra class on the root. */
|
|
96
|
+
className?: string;
|
|
97
|
+
/** Inline style on the root; only for setting CSS custom properties. */
|
|
98
|
+
style?: CSSProperties;
|
|
99
|
+
}
|
|
100
|
+
/** Inline navigation styled as text: primary or inherited color, with a soft underline. */
|
|
101
|
+
declare const Link: import("react").ForwardRefExoticComponent<LinkProps & import("react").RefAttributes<HTMLAnchorElement | HTMLSpanElement>>;
|
|
2
102
|
export default Link;
|
package/dist/links/Link.js
CHANGED
|
@@ -1,10 +1,172 @@
|
|
|
1
|
+
import VisuallyHidden from "../a11y/VisuallyHidden.js";
|
|
2
|
+
import { TextSize } from "../text/Text.js";
|
|
3
|
+
import Icon, { IconVariant } from "../icons/Icon.js";
|
|
1
4
|
/* empty css */
|
|
2
5
|
import { styled } from "@linaria/react";
|
|
6
|
+
import { forwardRef } from "react";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
8
|
+
import { cx } from "@linaria/core";
|
|
9
|
+
import { ArrowUpRightIcon } from "@phosphor-icons/react";
|
|
3
10
|
//#region src/links/Link.tsx
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Inline navigation. Renders an `<a href>` (or a router link through `as`) styled as text: it takes
|
|
13
|
+
* its size, family and line height from the surrounding `Text` unless `size` is set, colors itself
|
|
14
|
+
* by `variant` (`text.primary` by default) and draws an underline per `underline`. `isExternal` opens
|
|
15
|
+
* the target in a new tab and adds a trailing arrow; `isActive` marks the current page.
|
|
16
|
+
*
|
|
17
|
+
* Without `href`, Link renders a non-interactive `<span>` with the link look, for use inside a
|
|
18
|
+
* parent that is itself the click target (a link never sits inside a `<button>`).
|
|
19
|
+
*
|
|
20
|
+
* Color is CSS: the variant map sets `color` and two custom properties (`--gx-link-underline-rest`,
|
|
21
|
+
* `--gx-link-hover-color`) that the underline map reads, so a theme switch needs no re-render.
|
|
22
|
+
*
|
|
23
|
+
* Every prop Link does not consume (`aria-*`, `data-*`, native anchor attributes, and any handler a
|
|
24
|
+
* wrapping `Tooltip` injects with `cloneElement`) is spread onto the root, so Link is a valid
|
|
25
|
+
* trigger.
|
|
26
|
+
*
|
|
27
|
+
* Not an action (a text-styled action is `Button` `TERTIARY`) and not a button-styled link
|
|
28
|
+
* (`Button href`).
|
|
29
|
+
*/
|
|
30
|
+
/** Color (Constitution V-A: Link NEUTRAL / INHERIT; declared in `scripts/lint-dls.ts` `MODE_SETS`). */
|
|
31
|
+
var LinkVariant = /* @__PURE__ */ function(LinkVariant) {
|
|
32
|
+
/** `text.primary` with a `text.tertiary` underline (the 1.x `MarkdownText` anchor). The default. */
|
|
33
|
+
LinkVariant["NEUTRAL"] = "NEUTRAL";
|
|
34
|
+
/** `currentColor`: the link takes the surrounding text's color. */
|
|
35
|
+
LinkVariant["INHERIT"] = "INHERIT";
|
|
36
|
+
return LinkVariant;
|
|
37
|
+
}({});
|
|
38
|
+
/** When the underline is drawn (Constitution V-A: `Link underline`). */
|
|
39
|
+
var LinkUnderline = /* @__PURE__ */ function(LinkUnderline) {
|
|
40
|
+
/** Soft underline at rest, full color on hover. The default. */
|
|
41
|
+
LinkUnderline["ALWAYS"] = "ALWAYS";
|
|
42
|
+
/** No underline at rest, full color on hover. */
|
|
43
|
+
LinkUnderline["HOVER"] = "HOVER";
|
|
44
|
+
/** Never underlined (nav lists, titles); `isActive` still underlines. */
|
|
45
|
+
LinkUnderline["NONE"] = "NONE";
|
|
46
|
+
return LinkUnderline;
|
|
47
|
+
}({});
|
|
48
|
+
/** Canonical rungs; only the text step applies (a link has no control height). */
|
|
49
|
+
var LinkSize = /* @__PURE__ */ function(LinkSize) {
|
|
50
|
+
/** `caption` (10px on a 12px line). */
|
|
51
|
+
LinkSize["X_SMALL"] = "X_SMALL";
|
|
52
|
+
/** `body_sm` (12px on a 16px line). */
|
|
53
|
+
LinkSize["SMALL"] = "SMALL";
|
|
54
|
+
/** `body_md` (13px on a 16px line). */
|
|
55
|
+
LinkSize["MEDIUM"] = "MEDIUM";
|
|
56
|
+
/** `body_lg` (14px on a 20px line). */
|
|
57
|
+
LinkSize["LARGE"] = "LARGE";
|
|
58
|
+
/** `body_lg` (14px on a 20px line); kept so composites can map their own size 1:1. */
|
|
59
|
+
LinkSize["X_LARGE"] = "X_LARGE";
|
|
60
|
+
return LinkSize;
|
|
61
|
+
}({});
|
|
62
|
+
/** Text step per rung (Constitution III-A.4). */
|
|
63
|
+
var LINK_SIZE_TO_TEXT_SIZE_MAP = {
|
|
64
|
+
["X_SMALL"]: TextSize.CAPTION,
|
|
65
|
+
["SMALL"]: TextSize.BODY_SM,
|
|
66
|
+
["MEDIUM"]: TextSize.BODY_MD,
|
|
67
|
+
["LARGE"]: TextSize.BODY_LG,
|
|
68
|
+
["X_LARGE"]: TextSize.BODY_LG
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Static rules. The underline is always drawn and only its color changes, so it fades with the
|
|
72
|
+
* `duration.fast` color transition. `INTERACTIVE_RESET` comes first so the rules after it win.
|
|
73
|
+
*/
|
|
74
|
+
var Root = /*#__PURE__*/ styled("a")({
|
|
75
|
+
name: "Root",
|
|
76
|
+
class: "gx-Link-r1o22m4p",
|
|
7
77
|
propsAsIs: false
|
|
8
78
|
});
|
|
79
|
+
/**
|
|
80
|
+
* The trailing arrow and its hidden text. `inline-block` keeps the underline from running under
|
|
81
|
+
* the arrow; `nowrap` keeps the arrow on the last word's line.
|
|
82
|
+
*/
|
|
83
|
+
var ExternalMark = /*#__PURE__*/ styled("span")({
|
|
84
|
+
name: "ExternalMark",
|
|
85
|
+
class: "gx-Link-ExternalMark-e1mxegpw",
|
|
86
|
+
propsAsIs: false
|
|
87
|
+
});
|
|
88
|
+
/** Scales the arrow with the inherited text at every step (CSS overrides the svg's size attributes). */
|
|
89
|
+
var EXTERNAL_ICON_CSS = "gx-Link-EXTERNAL_ICON_CSS-eltkyaq";
|
|
90
|
+
/**
|
|
91
|
+
* Text color plus the two custom properties the underline map reads. `INHERIT` uses
|
|
92
|
+
* `currentColor`, which in `color` is the parent's color.
|
|
93
|
+
*/
|
|
94
|
+
var LINK_VARIANT_TO_CSS_MAP = {
|
|
95
|
+
["NEUTRAL"]: "gx-Link-NEUTRAL-nbrz8uy",
|
|
96
|
+
["INHERIT"]: "gx-Link-INHERIT-i6kk7ps"
|
|
97
|
+
};
|
|
98
|
+
/** Underline color at rest and on hover. Hover skips a disabled link (the `aria-disabled` state). */
|
|
99
|
+
var LINK_UNDERLINE_TO_CSS_MAP = {
|
|
100
|
+
["ALWAYS"]: "gx-Link-ALWAYS-anrkllv",
|
|
101
|
+
["HOVER"]: "gx-Link-HOVER-h1f96o6j",
|
|
102
|
+
["NONE"]: "gx-Link-NONE-n1puz08l"
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* A sized link owns its line box: the root carries the rung's text step (`LINK_SIZE_TO_TEXT_SIZE_MAP`),
|
|
106
|
+
* so the underline, focus ring and hit area sit on whole pixels at the rung's line height. The family
|
|
107
|
+
* still inherits. Unset `size` adds none of this and inherits everything from the parent.
|
|
108
|
+
*/
|
|
109
|
+
var LINK_SIZE_TO_CSS_MAP = {
|
|
110
|
+
["X_SMALL"]: "gx-Link-X_SMALL-xga6iwl",
|
|
111
|
+
["SMALL"]: "gx-Link-SMALL-s9s8qhv",
|
|
112
|
+
["MEDIUM"]: "gx-Link-MEDIUM-m114yiay",
|
|
113
|
+
["LARGE"]: "gx-Link-LARGE-l1cvl03b",
|
|
114
|
+
["X_LARGE"]: "gx-Link-X_LARGE-xh0xcxb"
|
|
115
|
+
};
|
|
116
|
+
/** The span form: its clickable parent owns the cursor. */
|
|
117
|
+
var SPAN_CSS = "gx-Link-SPAN_CSS-spz2g6s";
|
|
118
|
+
/**
|
|
119
|
+
* `isActive`: the hover look held, always underlined (every `underline`, hover included).
|
|
120
|
+
* Declared after the underline map so it wins at equal specificity.
|
|
121
|
+
*/
|
|
122
|
+
var ACTIVE_CSS = "gx-Link-ACTIVE_CSS-a5ih1ib";
|
|
123
|
+
/** `isDisabled`, rest and hover. Declared last so it wins over the active look. */
|
|
124
|
+
var DISABLED_CSS = "gx-Link-DISABLED_CSS-d1czu3ov";
|
|
125
|
+
var EXTERNAL_TEXT = " (opens in a new tab)";
|
|
126
|
+
/** Inline navigation styled as text: primary or inherited color, with a soft underline. */
|
|
127
|
+
var Link = forwardRef(function Link({ children, href, as, isExternal = false, variant = "NEUTRAL", underline = "ALWAYS", size, isActive = false, isDisabled = false, onClick, ariaLabel, id, className, style, ...rest }, ref) {
|
|
128
|
+
const isLink = href !== void 0;
|
|
129
|
+
const handleClick = (event) => {
|
|
130
|
+
if (isDisabled) {
|
|
131
|
+
event.preventDefault();
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
onClick?.(event);
|
|
135
|
+
};
|
|
136
|
+
const computedAria = {};
|
|
137
|
+
if (ariaLabel !== void 0) computedAria["aria-label"] = isExternal ? `${ariaLabel}${EXTERNAL_TEXT}` : ariaLabel;
|
|
138
|
+
if (isLink && isDisabled) computedAria["aria-disabled"] = true;
|
|
139
|
+
if (isLink && isActive) computedAria["aria-current"] = "page";
|
|
140
|
+
const elementProps = {};
|
|
141
|
+
if (!isLink) elementProps.as = "span";
|
|
142
|
+
else if (isDisabled) {
|
|
143
|
+
elementProps.as = "a";
|
|
144
|
+
elementProps.role = "link";
|
|
145
|
+
elementProps.onClick = handleClick;
|
|
146
|
+
} else {
|
|
147
|
+
elementProps.as = as ?? "a";
|
|
148
|
+
elementProps.href = href;
|
|
149
|
+
elementProps.onClick = handleClick;
|
|
150
|
+
if (isExternal) {
|
|
151
|
+
elementProps.target = "_blank";
|
|
152
|
+
elementProps.rel = "noopener noreferrer";
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
return /* @__PURE__ */ jsxs(Root, {
|
|
156
|
+
...computedAria,
|
|
157
|
+
...rest,
|
|
158
|
+
...elementProps,
|
|
159
|
+
ref,
|
|
160
|
+
id,
|
|
161
|
+
className: cx(size !== void 0 && LINK_SIZE_TO_CSS_MAP[size], LINK_VARIANT_TO_CSS_MAP[variant], LINK_UNDERLINE_TO_CSS_MAP[underline], !isLink && SPAN_CSS, isActive && ACTIVE_CSS, isDisabled && DISABLED_CSS, className),
|
|
162
|
+
style,
|
|
163
|
+
children: [children, isExternal && /* @__PURE__ */ jsxs(ExternalMark, { children: [/* @__PURE__ */ jsx(Icon, {
|
|
164
|
+
component: ArrowUpRightIcon,
|
|
165
|
+
variant: IconVariant.INHERIT,
|
|
166
|
+
className: EXTERNAL_ICON_CSS
|
|
167
|
+
}), /* @__PURE__ */ jsx(VisuallyHidden, { children: EXTERNAL_TEXT })] })]
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
Link.displayName = "Link";
|
|
9
171
|
//#endregion
|
|
10
|
-
export { Link as default };
|
|
172
|
+
export { LINK_SIZE_TO_TEXT_SIZE_MAP, LinkSize, LinkUnderline, LinkVariant, Link as default };
|