@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,141 @@
|
|
|
1
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
2
|
+
//#region src/table/useSpreadsheetCellNavigation.ts
|
|
3
|
+
/**
|
|
4
|
+
* @internal Shared by InfiniteSpreadsheet; apps use InfiniteSpreadsheet.
|
|
5
|
+
*
|
|
6
|
+
* Roving cell focus over a spreadsheet body (the WAI-ARIA grid pattern): one cell is the tab stop
|
|
7
|
+
* (`tabIndex` 0), every other -1. Arrow keys move one cell, Home / End go to the ends of the row,
|
|
8
|
+
* Ctrl/Cmd+Home / End to the first / last cell of the grid, PageUp / PageDown one visible page.
|
|
9
|
+
* A move scrolls the row into the virtual window first (`scrollToIndex`), focuses the cell once it
|
|
10
|
+
* is mounted and scrolls it into view sideways. A cell element replaced in place (a skeleton row
|
|
11
|
+
* whose data arrives, a row re-keyed by id) takes the focus back on mount.
|
|
12
|
+
*/
|
|
13
|
+
/** Frames to wait for a virtual row to mount after `scrollToIndex`. */
|
|
14
|
+
var MOUNT_RETRY_FRAMES = 6;
|
|
15
|
+
var keyOf = (rowIndex, columnIndex) => `${rowIndex}:${columnIndex}`;
|
|
16
|
+
/** @internal Roving focus over the cells of a spreadsheet body. */
|
|
17
|
+
function useSpreadsheetCellNavigation({ rowCount, columnCount, getPageSize, scrollToIndex }) {
|
|
18
|
+
const [tabStop, setTabStop] = useState({
|
|
19
|
+
rowIndex: 0,
|
|
20
|
+
columnIndex: 0
|
|
21
|
+
});
|
|
22
|
+
const active = {
|
|
23
|
+
rowIndex: rowCount === 0 ? 0 : Math.min(tabStop.rowIndex, rowCount - 1),
|
|
24
|
+
columnIndex: columnCount === 0 ? 0 : Math.min(tabStop.columnIndex, columnCount - 1)
|
|
25
|
+
};
|
|
26
|
+
const cellsRef = useRef(/* @__PURE__ */ new Map());
|
|
27
|
+
const focusedKeyRef = useRef(null);
|
|
28
|
+
const frameRef = useRef(null);
|
|
29
|
+
const optionsRef = useRef({
|
|
30
|
+
rowCount,
|
|
31
|
+
columnCount,
|
|
32
|
+
getPageSize,
|
|
33
|
+
scrollToIndex
|
|
34
|
+
});
|
|
35
|
+
optionsRef.current = {
|
|
36
|
+
rowCount,
|
|
37
|
+
columnCount,
|
|
38
|
+
getPageSize,
|
|
39
|
+
scrollToIndex
|
|
40
|
+
};
|
|
41
|
+
useEffect(() => () => {
|
|
42
|
+
if (frameRef.current !== null) cancelAnimationFrame(frameRef.current);
|
|
43
|
+
}, []);
|
|
44
|
+
const registerCell = useCallback((rowIndex, columnIndex, element) => {
|
|
45
|
+
const key = keyOf(rowIndex, columnIndex);
|
|
46
|
+
const cells = cellsRef.current;
|
|
47
|
+
if (element === null) {
|
|
48
|
+
if (!cells.get(key)?.isConnected) cells.delete(key);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const previous = cells.get(key);
|
|
52
|
+
cells.set(key, element);
|
|
53
|
+
const activeElement = element.ownerDocument.activeElement;
|
|
54
|
+
const isFocusLost = activeElement === null || activeElement === element.ownerDocument.body || !activeElement.isConnected;
|
|
55
|
+
if (previous !== void 0 && previous !== element && !previous.isConnected && focusedKeyRef.current === key && isFocusLost) element.focus({ preventScroll: true });
|
|
56
|
+
}, []);
|
|
57
|
+
const focusCell = useCallback((rowIndex, columnIndex) => {
|
|
58
|
+
setTabStop({
|
|
59
|
+
rowIndex,
|
|
60
|
+
columnIndex
|
|
61
|
+
});
|
|
62
|
+
optionsRef.current.scrollToIndex(rowIndex);
|
|
63
|
+
if (frameRef.current !== null) cancelAnimationFrame(frameRef.current);
|
|
64
|
+
let attempts = 0;
|
|
65
|
+
const tryFocus = () => {
|
|
66
|
+
frameRef.current = null;
|
|
67
|
+
const element = cellsRef.current.get(keyOf(rowIndex, columnIndex));
|
|
68
|
+
if (element?.isConnected) {
|
|
69
|
+
focusedKeyRef.current = keyOf(rowIndex, columnIndex);
|
|
70
|
+
element.focus({ preventScroll: true });
|
|
71
|
+
element.scrollIntoView({
|
|
72
|
+
block: "nearest",
|
|
73
|
+
inline: "nearest"
|
|
74
|
+
});
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
attempts += 1;
|
|
78
|
+
if (attempts <= MOUNT_RETRY_FRAMES) frameRef.current = requestAnimationFrame(tryFocus);
|
|
79
|
+
};
|
|
80
|
+
tryFocus();
|
|
81
|
+
}, []);
|
|
82
|
+
return {
|
|
83
|
+
active,
|
|
84
|
+
registerCell,
|
|
85
|
+
focusCell,
|
|
86
|
+
handleCellFocus: useCallback((rowIndex, columnIndex) => {
|
|
87
|
+
focusedKeyRef.current = keyOf(rowIndex, columnIndex);
|
|
88
|
+
setTabStop((current) => current.rowIndex === rowIndex && current.columnIndex === columnIndex ? current : {
|
|
89
|
+
rowIndex,
|
|
90
|
+
columnIndex
|
|
91
|
+
});
|
|
92
|
+
}, []),
|
|
93
|
+
handleNavigationKey: useCallback((from, event) => {
|
|
94
|
+
const { rowCount: rows, columnCount: columns, getPageSize: pageSize } = optionsRef.current;
|
|
95
|
+
if (rows === 0 || columns === 0) return false;
|
|
96
|
+
const isCommand = event.ctrlKey || event.metaKey;
|
|
97
|
+
if (event.altKey) return false;
|
|
98
|
+
let { rowIndex, columnIndex } = from;
|
|
99
|
+
switch (event.key) {
|
|
100
|
+
case "ArrowDown":
|
|
101
|
+
if (isCommand) return false;
|
|
102
|
+
rowIndex += 1;
|
|
103
|
+
break;
|
|
104
|
+
case "ArrowUp":
|
|
105
|
+
if (isCommand) return false;
|
|
106
|
+
rowIndex -= 1;
|
|
107
|
+
break;
|
|
108
|
+
case "ArrowRight":
|
|
109
|
+
if (isCommand) return false;
|
|
110
|
+
columnIndex += 1;
|
|
111
|
+
break;
|
|
112
|
+
case "ArrowLeft":
|
|
113
|
+
if (isCommand) return false;
|
|
114
|
+
columnIndex -= 1;
|
|
115
|
+
break;
|
|
116
|
+
case "Home":
|
|
117
|
+
columnIndex = 0;
|
|
118
|
+
if (isCommand) rowIndex = 0;
|
|
119
|
+
break;
|
|
120
|
+
case "End":
|
|
121
|
+
columnIndex = columns - 1;
|
|
122
|
+
if (isCommand) rowIndex = rows - 1;
|
|
123
|
+
break;
|
|
124
|
+
case "PageDown":
|
|
125
|
+
if (isCommand) return false;
|
|
126
|
+
rowIndex += Math.max(1, pageSize());
|
|
127
|
+
break;
|
|
128
|
+
case "PageUp":
|
|
129
|
+
if (isCommand) return false;
|
|
130
|
+
rowIndex -= Math.max(1, pageSize());
|
|
131
|
+
break;
|
|
132
|
+
default: return false;
|
|
133
|
+
}
|
|
134
|
+
event.preventDefault();
|
|
135
|
+
focusCell(Math.min(Math.max(rowIndex, 0), rows - 1), Math.min(Math.max(columnIndex, 0), columns - 1));
|
|
136
|
+
return true;
|
|
137
|
+
}, [focusCell])
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
//#endregion
|
|
141
|
+
export { useSpreadsheetCellNavigation };
|
|
@@ -1,28 +1,93 @@
|
|
|
1
|
-
import { type ColumnDef, type ColumnSizingState } from "./types";
|
|
2
|
-
export interface TableColumnLayout<TData> {
|
|
3
|
-
/**
|
|
4
|
-
* Resolved width for a column, or `undefined` when the column is flexible
|
|
5
|
-
* and should share the leftover space.
|
|
6
|
-
*/
|
|
7
|
-
getColumnWidth: (column: ColumnDef<TData, unknown>) => number | undefined;
|
|
8
|
-
/** Sticky offset in pixels, keyed by column id, for pinned columns only. */
|
|
9
|
-
pinnedOffsets: Map<string, number>;
|
|
10
|
-
/** Sum of every column's resolved width — the table's minimum content width. */
|
|
11
|
-
rowMinWidth: number;
|
|
12
|
-
}
|
|
13
|
-
interface UseTableColumnLayoutOptions<TData> {
|
|
14
|
-
columns: ColumnDef<TData, unknown>[];
|
|
15
|
-
/** Widths produced by resizing; they win over the column's declared `size`. */
|
|
16
|
-
columnSizing?: ColumnSizingState;
|
|
17
|
-
/** Reserved space at the trailing edge, ahead of any right-pinned columns. */
|
|
18
|
-
rightOffsetBase?: number;
|
|
19
|
-
}
|
|
20
1
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
2
|
+
* @internal Shared by the table components; apps use InfiniteTable, VirtualizedInfiniteTable or
|
|
3
|
+
* InfiniteSpreadsheet.
|
|
23
4
|
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
5
|
+
* Column arrangement: the `columnLayout` value triple, the visible columns in display order
|
|
6
|
+
* (grouped left-pinned, unpinned, right-pinned), resolved widths and pinned offsets, the column
|
|
7
|
+
* custom properties written on the table root, measured header widths, and the resize / move /
|
|
8
|
+
* hide / reset actions. Every action builds the next full `TableColumnLayout` and reports it.
|
|
26
9
|
*/
|
|
27
|
-
|
|
28
|
-
|
|
10
|
+
import { type CSSProperties } from "react";
|
|
11
|
+
import type { TableColumn, TableColumnLayout, TableColumnPin } from "./types.js";
|
|
12
|
+
/** @internal A visible column with everything the parts need to lay it out. */
|
|
13
|
+
export interface TableResolvedColumn<TData> {
|
|
14
|
+
/** The app's column definition. */
|
|
15
|
+
column: TableColumn<TData>;
|
|
16
|
+
/** Position among the visible columns, from 0: the `<n>` of its custom properties. */
|
|
17
|
+
position: number;
|
|
18
|
+
/** Fixed width in pixels, or `undefined` for a column that shares the leftover space. */
|
|
19
|
+
width: number | undefined;
|
|
20
|
+
/** Smallest width in pixels. */
|
|
21
|
+
minWidth: number;
|
|
22
|
+
/** Largest resize width in pixels. */
|
|
23
|
+
maxWidth: number;
|
|
24
|
+
/** The pinned side, if any. */
|
|
25
|
+
pin: TableColumnPin | undefined;
|
|
26
|
+
/** Last left-pinned or first right-pinned data column: draws the edge hairline. */
|
|
27
|
+
isPinEdge: boolean;
|
|
28
|
+
/** The user can resize it. */
|
|
29
|
+
canResize: boolean;
|
|
30
|
+
/** The user can hide it from the Columns menu. */
|
|
31
|
+
canHide: boolean;
|
|
32
|
+
/** Per-cell style: points the cell at its column's custom properties. */
|
|
33
|
+
cellStyle: CSSProperties;
|
|
34
|
+
}
|
|
35
|
+
/** @internal One row of the Columns menu. */
|
|
36
|
+
export interface TableColumnsMenuEntry {
|
|
37
|
+
/** Column id. */
|
|
38
|
+
id: string;
|
|
39
|
+
/** Column header. */
|
|
40
|
+
header: string;
|
|
41
|
+
/** Shown in the table. */
|
|
42
|
+
isVisible: boolean;
|
|
43
|
+
/** Why it cannot be toggled, if it cannot. */
|
|
44
|
+
disabledReason: string | undefined;
|
|
45
|
+
}
|
|
46
|
+
/** @internal Options for `useTableColumnLayout`. */
|
|
47
|
+
export interface UseTableColumnLayoutOptions<TData> {
|
|
48
|
+
/** The columns in their default order. */
|
|
49
|
+
columns: TableColumn<TData>[];
|
|
50
|
+
/** Controlled arrangement. */
|
|
51
|
+
columnLayout: TableColumnLayout | undefined;
|
|
52
|
+
/** Initial arrangement while uncontrolled. */
|
|
53
|
+
defaultColumnLayout: TableColumnLayout;
|
|
54
|
+
/** Called with the full next arrangement. */
|
|
55
|
+
onColumnLayoutChange: ((columnLayout: TableColumnLayout) => void) | undefined;
|
|
56
|
+
/** The table's `canResizeColumns`. */
|
|
57
|
+
canResizeColumns: boolean;
|
|
58
|
+
/** The table's `canCustomizeColumns`. */
|
|
59
|
+
canCustomizeColumns: boolean;
|
|
60
|
+
/** Number of leading synthetic columns (select, expand). */
|
|
61
|
+
leadingCount: number;
|
|
62
|
+
/** A trailing synthetic column (row actions / Columns corner) is shown. */
|
|
63
|
+
hasTrailing: boolean;
|
|
64
|
+
/** Width of a synthetic column, in pixels (the row height). */
|
|
65
|
+
syntheticWidthPx: number;
|
|
66
|
+
}
|
|
67
|
+
/** @internal What `useTableColumnLayout` returns. */
|
|
68
|
+
export interface TableColumnLayoutResult<TData> {
|
|
69
|
+
/** The current arrangement. */
|
|
70
|
+
layout: TableColumnLayout;
|
|
71
|
+
/** Visible columns in display order. */
|
|
72
|
+
visibleColumns: TableResolvedColumn<TData>[];
|
|
73
|
+
/** Every column in display order with its visibility, for the Columns menu. */
|
|
74
|
+
menuEntries: TableColumnsMenuEntry[];
|
|
75
|
+
/** Custom properties for the table root: per-column flex, min, max and pinned offset, and the table min width. */
|
|
76
|
+
variables: Record<`--gx-${string}`, string>;
|
|
77
|
+
/** Width of a resizable column for the resize handle: its resolved or measured width. */
|
|
78
|
+
getColumnWidth: (id: string) => number;
|
|
79
|
+
/** Registers a header cell for width measurement (flexible columns that can resize). */
|
|
80
|
+
registerHeaderCell: (id: string, element: HTMLElement | null) => void;
|
|
81
|
+
/** Sets a column's width (resize). */
|
|
82
|
+
resizeColumn: (id: string, width: number) => void;
|
|
83
|
+
/** Moves a column to before `beforeId` among the unpinned columns (`null`: to the end). */
|
|
84
|
+
moveColumnBefore: (id: string, beforeId: string | null) => void;
|
|
85
|
+
/** Moves a column one place within its group; returns its new 1-based position, or `null` when it cannot move. */
|
|
86
|
+
moveColumnBy: (id: string, delta: -1 | 1) => number | null;
|
|
87
|
+
/** Shows or hides a column. */
|
|
88
|
+
setColumnHidden: (id: string, isHidden: boolean) => void;
|
|
89
|
+
/** Back to the columns as defined (`{}`). */
|
|
90
|
+
resetLayout: () => void;
|
|
91
|
+
}
|
|
92
|
+
/** Column arrangement state and the column custom properties. */
|
|
93
|
+
export declare function useTableColumnLayout<TData>({ columns, columnLayout, defaultColumnLayout, onColumnLayoutChange, canResizeColumns, canCustomizeColumns, leadingCount, hasTrailing, syntheticWidthPx, }: UseTableColumnLayoutOptions<TData>): TableColumnLayoutResult<TData>;
|
|
@@ -1,62 +1,267 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "
|
|
3
|
-
import {
|
|
1
|
+
import { Side } from "../theme/enums.js";
|
|
2
|
+
import { useControlledState } from "../hooks/useControlledState.js";
|
|
3
|
+
import { isDevelopment } from "./TableCore.js";
|
|
4
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
4
5
|
//#region src/table/useTableColumnLayout.ts
|
|
5
|
-
function resolveColumnWidth(column, columnSizing) {
|
|
6
|
-
const override = columnSizing?.[column.id];
|
|
7
|
-
if (override !== void 0) return override;
|
|
8
|
-
if (column.size !== void 0) return column.size;
|
|
9
|
-
if (column.pin) return column.minSize ?? 150;
|
|
10
|
-
}
|
|
11
6
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
7
|
+
* @internal Shared by the table components; apps use InfiniteTable, VirtualizedInfiniteTable or
|
|
8
|
+
* InfiniteSpreadsheet.
|
|
14
9
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
10
|
+
* Column arrangement: the `columnLayout` value triple, the visible columns in display order
|
|
11
|
+
* (grouped left-pinned, unpinned, right-pinned), resolved widths and pinned offsets, the column
|
|
12
|
+
* custom properties written on the table root, measured header widths, and the resize / move /
|
|
13
|
+
* hide / reset actions. Every action builds the next full `TableColumnLayout` and reports it.
|
|
17
14
|
*/
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
15
|
+
/** Column ids in display order: `order` first (unknown ids dropped), the rest in `columns` order. */
|
|
16
|
+
function resolveOrder(columns, order) {
|
|
17
|
+
const known = new Map(columns.map((column) => [column.id, column]));
|
|
18
|
+
const seen = /* @__PURE__ */ new Set();
|
|
19
|
+
const result = [];
|
|
20
|
+
for (const id of order ?? []) {
|
|
21
|
+
const column = known.get(id);
|
|
22
|
+
if (column === void 0 || seen.has(id)) continue;
|
|
23
|
+
seen.add(id);
|
|
24
|
+
result.push(column);
|
|
25
|
+
}
|
|
26
|
+
for (const column of columns) if (!seen.has(column.id)) result.push(column);
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
/** Pin group of a column: 0 left, 1 unpinned, 2 right. */
|
|
30
|
+
function pinGroup(pin) {
|
|
31
|
+
if (pin === Side.LEFT) return 0;
|
|
32
|
+
if (pin === Side.RIGHT) return 2;
|
|
33
|
+
return 1;
|
|
34
|
+
}
|
|
35
|
+
/** Column arrangement state and the column custom properties. */
|
|
36
|
+
function useTableColumnLayout({ columns, columnLayout, defaultColumnLayout, onColumnLayoutChange, canResizeColumns, canCustomizeColumns, leadingCount, hasTrailing, syntheticWidthPx }) {
|
|
37
|
+
const [layout, setLayout] = useControlledState({
|
|
38
|
+
value: columnLayout,
|
|
39
|
+
defaultValue: defaultColumnLayout,
|
|
40
|
+
onChange: onColumnLayoutChange
|
|
41
|
+
});
|
|
42
|
+
const layoutRef = useRef(layout);
|
|
43
|
+
layoutRef.current = layout;
|
|
44
|
+
const columnsRef = useRef(columns);
|
|
45
|
+
columnsRef.current = columns;
|
|
46
|
+
const ordered = useMemo(() => resolveOrder(columns, layout.order), [columns, layout.order]);
|
|
47
|
+
const hiddenKey = (layout.hiddenIds ?? []).join("\0");
|
|
48
|
+
const visibleColumns = useMemo(() => {
|
|
49
|
+
const hidden = new Set(hiddenKey === "" ? [] : hiddenKey.split("\0"));
|
|
50
|
+
const visible = ordered.filter((column) => !hidden.has(column.id)).sort((a, b) => pinGroup(a.pin) - pinGroup(b.pin));
|
|
51
|
+
const lastLeft = visible.filter((column) => column.pin === Side.LEFT).at(-1);
|
|
52
|
+
const firstRight = visible.find((column) => column.pin === Side.RIGHT);
|
|
53
|
+
return visible.map((column, position) => {
|
|
54
|
+
const minWidth = column.minWidth ?? 60;
|
|
55
|
+
const maxWidth = column.maxWidth ?? 800;
|
|
56
|
+
const pin = column.pin;
|
|
57
|
+
const variable = (part) => `var(--gx-table-col-${position}-${part})`;
|
|
58
|
+
const cellStyle = {
|
|
59
|
+
"--gx-table-cell-flex": variable("flex"),
|
|
60
|
+
"--gx-table-cell-min-width": variable("min"),
|
|
61
|
+
"--gx-table-cell-max-width": variable("max")
|
|
62
|
+
};
|
|
63
|
+
if (pin !== void 0) cellStyle["--gx-table-cell-offset"] = variable("offset");
|
|
64
|
+
return {
|
|
65
|
+
column,
|
|
66
|
+
position,
|
|
67
|
+
width: void 0,
|
|
68
|
+
minWidth,
|
|
69
|
+
maxWidth,
|
|
70
|
+
pin,
|
|
71
|
+
isPinEdge: column === lastLeft || column === firstRight,
|
|
72
|
+
canResize: column.canResize ?? canResizeColumns,
|
|
73
|
+
canHide: column.canHide ?? canCustomizeColumns,
|
|
74
|
+
cellStyle
|
|
75
|
+
};
|
|
39
76
|
});
|
|
40
|
-
return {
|
|
41
|
-
widths,
|
|
42
|
-
pinnedOffsets,
|
|
43
|
-
rowMinWidth
|
|
44
|
-
};
|
|
45
77
|
}, [
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
78
|
+
ordered,
|
|
79
|
+
hiddenKey,
|
|
80
|
+
canResizeColumns,
|
|
81
|
+
canCustomizeColumns
|
|
49
82
|
]);
|
|
50
|
-
const
|
|
83
|
+
const widths = layout.widths;
|
|
84
|
+
const resolvedWidths = useMemo(() => {
|
|
85
|
+
const result = /* @__PURE__ */ new Map();
|
|
86
|
+
for (const { column, pin, minWidth, maxWidth } of visibleColumns) {
|
|
87
|
+
const own = widths?.[column.id] ?? column.width;
|
|
88
|
+
if (own !== void 0) result.set(column.id, Math.min(Math.max(own, minWidth), maxWidth));
|
|
89
|
+
else if (pin !== void 0) result.set(column.id, 150);
|
|
90
|
+
else result.set(column.id, void 0);
|
|
91
|
+
}
|
|
92
|
+
return result;
|
|
93
|
+
}, [visibleColumns, widths]);
|
|
94
|
+
const warnedRef = useRef(/* @__PURE__ */ new Set());
|
|
51
95
|
useEffect(() => {
|
|
52
|
-
if (
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
96
|
+
if (!isDevelopment()) return;
|
|
97
|
+
for (const { column, pin } of visibleColumns) {
|
|
98
|
+
if (pin === void 0 || column.width !== void 0 || warnedRef.current.has(column.id)) continue;
|
|
99
|
+
warnedRef.current.add(column.id);
|
|
100
|
+
console.warn(`[@galaxy-io/dls] Table column "${column.id}" is pinned without a \`width\`; it falls back to 150px.`);
|
|
101
|
+
}
|
|
102
|
+
}, [visibleColumns]);
|
|
103
|
+
const variables = useMemo(() => {
|
|
104
|
+
const result = {};
|
|
105
|
+
let minTotal = (leadingCount + (hasTrailing ? 1 : 0)) * syntheticWidthPx;
|
|
106
|
+
let leftOffset = leadingCount * syntheticWidthPx;
|
|
107
|
+
const rightColumns = [];
|
|
108
|
+
for (const resolved of visibleColumns) {
|
|
109
|
+
const { column, position, minWidth, pin } = resolved;
|
|
110
|
+
const width = resolvedWidths.get(column.id);
|
|
111
|
+
const prefix = `--gx-table-col-${position}`;
|
|
112
|
+
if (width !== void 0) {
|
|
113
|
+
result[`${prefix}-flex`] = `0 0 ${width}px`;
|
|
114
|
+
result[`${prefix}-min`] = `${width}px`;
|
|
115
|
+
result[`${prefix}-max`] = `${width}px`;
|
|
116
|
+
minTotal += width;
|
|
117
|
+
} else {
|
|
118
|
+
result[`${prefix}-flex`] = "1 1 0px";
|
|
119
|
+
result[`${prefix}-min`] = `${minWidth}px`;
|
|
120
|
+
result[`${prefix}-max`] = "none";
|
|
121
|
+
minTotal += minWidth;
|
|
122
|
+
}
|
|
123
|
+
if (pin === Side.LEFT) {
|
|
124
|
+
result[`${prefix}-offset`] = `${leftOffset}px`;
|
|
125
|
+
leftOffset += width ?? 150;
|
|
126
|
+
} else if (pin === Side.RIGHT) rightColumns.push(resolved);
|
|
127
|
+
}
|
|
128
|
+
let rightOffset = hasTrailing ? syntheticWidthPx : 0;
|
|
129
|
+
for (const { column, position } of [...rightColumns].reverse()) {
|
|
130
|
+
result[`--gx-table-col-${position}-offset`] = `${rightOffset}px`;
|
|
131
|
+
rightOffset += resolvedWidths.get(column.id) ?? 150;
|
|
132
|
+
}
|
|
133
|
+
result["--gx-table-min-width"] = `${minTotal}px`;
|
|
134
|
+
return result;
|
|
135
|
+
}, [
|
|
136
|
+
visibleColumns,
|
|
137
|
+
resolvedWidths,
|
|
138
|
+
leadingCount,
|
|
139
|
+
hasTrailing,
|
|
140
|
+
syntheticWidthPx
|
|
141
|
+
]);
|
|
142
|
+
const menuEntries = useMemo(() => {
|
|
143
|
+
const hidden = new Set(hiddenKey === "" ? [] : hiddenKey.split("\0"));
|
|
144
|
+
const hideable = ordered.filter((column) => !hidden.has(column.id) && (column.canHide ?? canCustomizeColumns));
|
|
145
|
+
return ordered.map((column) => {
|
|
146
|
+
const isVisible = !hidden.has(column.id);
|
|
147
|
+
const canHide = column.canHide ?? canCustomizeColumns;
|
|
148
|
+
let disabledReason;
|
|
149
|
+
if (!canHide) disabledReason = "Always shown";
|
|
150
|
+
else if (isVisible && hideable.length === 1) disabledReason = "At least one column stays visible";
|
|
151
|
+
return {
|
|
152
|
+
id: column.id,
|
|
153
|
+
header: column.header,
|
|
154
|
+
isVisible,
|
|
155
|
+
disabledReason
|
|
156
|
+
};
|
|
157
|
+
});
|
|
158
|
+
}, [
|
|
159
|
+
ordered,
|
|
160
|
+
hiddenKey,
|
|
161
|
+
canCustomizeColumns
|
|
162
|
+
]);
|
|
163
|
+
const [measured, setMeasured] = useState({});
|
|
164
|
+
const headerCellsRef = useRef(/* @__PURE__ */ new Map());
|
|
165
|
+
const observerRef = useRef(null);
|
|
166
|
+
const measure = useCallback((id, element) => {
|
|
167
|
+
const width = Math.round(element.getBoundingClientRect().width);
|
|
168
|
+
setMeasured((current) => current[id] === width ? current : {
|
|
169
|
+
...current,
|
|
170
|
+
[id]: width
|
|
171
|
+
});
|
|
172
|
+
}, []);
|
|
173
|
+
const registerHeaderCell = useCallback((id, element) => {
|
|
174
|
+
const cells = headerCellsRef.current;
|
|
175
|
+
const previous = cells.get(id);
|
|
176
|
+
if (previous === element) return;
|
|
177
|
+
if (previous !== void 0) observerRef.current?.unobserve(previous);
|
|
178
|
+
if (element === null) {
|
|
179
|
+
cells.delete(id);
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
cells.set(id, element);
|
|
183
|
+
if (typeof ResizeObserver === "undefined") {
|
|
184
|
+
measure(id, element);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
if (observerRef.current === null) observerRef.current = new ResizeObserver((entries) => {
|
|
188
|
+
for (const entry of entries) for (const [cellId, cell] of headerCellsRef.current) if (cell === entry.target) measure(cellId, cell);
|
|
189
|
+
});
|
|
190
|
+
observerRef.current.observe(element);
|
|
191
|
+
}, [measure]);
|
|
192
|
+
useEffect(() => () => observerRef.current?.disconnect(), []);
|
|
193
|
+
const getColumnWidth = useCallback((id) => resolvedWidths.get(id) ?? measured[id] ?? 60, [resolvedWidths, measured]);
|
|
194
|
+
const resizeColumn = useCallback((id, width) => {
|
|
195
|
+
const current = layoutRef.current;
|
|
196
|
+
setLayout({
|
|
197
|
+
...current,
|
|
198
|
+
widths: {
|
|
199
|
+
...current.widths,
|
|
200
|
+
[id]: width
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
}, [setLayout]);
|
|
204
|
+
/** The full display order of every column, as ids. */
|
|
205
|
+
const fullOrder = useCallback(() => resolveOrder(columnsRef.current, layoutRef.current.order).map((column) => column.id), []);
|
|
206
|
+
const moveColumnBefore = useCallback((id, beforeId) => {
|
|
207
|
+
if (id === beforeId) return;
|
|
208
|
+
const order = fullOrder().filter((entry) => entry !== id);
|
|
209
|
+
const hidden = new Set(layoutRef.current.hiddenIds ?? []);
|
|
210
|
+
let index;
|
|
211
|
+
if (beforeId === null) {
|
|
212
|
+
const lastUnpinned = [...order].reverse().find((entry) => {
|
|
213
|
+
const column = columnsRef.current.find((candidate) => candidate.id === entry);
|
|
214
|
+
return column !== void 0 && column.pin === void 0 && !hidden.has(entry);
|
|
215
|
+
});
|
|
216
|
+
index = lastUnpinned === void 0 ? order.length : order.indexOf(lastUnpinned) + 1;
|
|
217
|
+
} else {
|
|
218
|
+
index = order.indexOf(beforeId);
|
|
219
|
+
if (index === -1) index = order.length;
|
|
220
|
+
}
|
|
221
|
+
order.splice(index, 0, id);
|
|
222
|
+
if (fullOrder().every((entry, i) => entry === order[i])) return;
|
|
223
|
+
setLayout({
|
|
224
|
+
...layoutRef.current,
|
|
225
|
+
order
|
|
226
|
+
});
|
|
227
|
+
}, [fullOrder, setLayout]);
|
|
228
|
+
const visibleRef = useRef(visibleColumns);
|
|
229
|
+
visibleRef.current = visibleColumns;
|
|
56
230
|
return {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
231
|
+
layout,
|
|
232
|
+
visibleColumns,
|
|
233
|
+
menuEntries,
|
|
234
|
+
variables,
|
|
235
|
+
getColumnWidth,
|
|
236
|
+
registerHeaderCell,
|
|
237
|
+
resizeColumn,
|
|
238
|
+
moveColumnBefore,
|
|
239
|
+
moveColumnBy: useCallback((id, delta) => {
|
|
240
|
+
const visible = visibleRef.current;
|
|
241
|
+
const self = visible.find((entry) => entry.column.id === id);
|
|
242
|
+
if (self === void 0) return null;
|
|
243
|
+
const group = visible.filter((entry) => pinGroup(entry.pin) === pinGroup(self.pin));
|
|
244
|
+
const target = group[group.indexOf(self) + delta];
|
|
245
|
+
if (target === void 0) return null;
|
|
246
|
+
const order = fullOrder().filter((entry) => entry !== id);
|
|
247
|
+
const targetIndex = order.indexOf(target.column.id);
|
|
248
|
+
order.splice(delta === 1 ? targetIndex + 1 : targetIndex, 0, id);
|
|
249
|
+
setLayout({
|
|
250
|
+
...layoutRef.current,
|
|
251
|
+
order
|
|
252
|
+
});
|
|
253
|
+
return self.position + delta + 1;
|
|
254
|
+
}, [fullOrder, setLayout]),
|
|
255
|
+
setColumnHidden: useCallback((id, isHidden) => {
|
|
256
|
+
const current = layoutRef.current;
|
|
257
|
+
const hidden = (current.hiddenIds ?? []).filter((entry) => entry !== id);
|
|
258
|
+
if (isHidden) hidden.push(id);
|
|
259
|
+
setLayout({
|
|
260
|
+
...current,
|
|
261
|
+
hiddenIds: hidden
|
|
262
|
+
});
|
|
263
|
+
}, [setLayout]),
|
|
264
|
+
resetLayout: useCallback(() => setLayout({}), [setLayout])
|
|
60
265
|
};
|
|
61
266
|
}
|
|
62
267
|
//#endregion
|
|
@@ -1,25 +1,36 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @internal Shared by the table components; apps use InfiniteTable, VirtualizedInfiniteTable or
|
|
3
|
+
* InfiniteSpreadsheet.
|
|
4
|
+
*
|
|
5
|
+
* Roving row focus over a table body: one row is the tab stop (`tabIndex` 0), the rest -1.
|
|
6
|
+
* ArrowUp / ArrowDown, Home / End and PageUp / PageDown move focus; a virtual body passes
|
|
7
|
+
* `scrollToIndex` so the target row is scrolled into the window before it is focused. Every other
|
|
8
|
+
* key (Enter, Space, ArrowLeft / ArrowRight, Shift+F10) goes to the host's `onKeyDown`.
|
|
9
|
+
*/
|
|
10
|
+
import { type KeyboardEvent } from "react";
|
|
11
|
+
/** @internal Options for `useTableKeyboardNavigation`. */
|
|
12
|
+
export interface UseTableKeyboardNavigationOptions {
|
|
13
|
+
/** Rows the keys move over (loaded rows, or every virtual row). */
|
|
6
14
|
rowCount: number;
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
15
|
+
/** Rows in one visible page, for PageUp / PageDown. */
|
|
16
|
+
getPageSize: () => number;
|
|
17
|
+
/** Brings a row into the rendered window first (virtual bodies). */
|
|
18
|
+
scrollToIndex?: ((index: number) => void) | undefined;
|
|
19
|
+
/** Keys the hook does not handle. */
|
|
20
|
+
onKeyDown: (rowIndex: number, event: KeyboardEvent<HTMLTableRowElement>) => void;
|
|
12
21
|
}
|
|
22
|
+
/** @internal What `useTableKeyboardNavigation` returns. */
|
|
13
23
|
export interface TableKeyboardNavigation {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
24
|
+
/** The row that is the tab stop. */
|
|
25
|
+
tabStopIndex: number;
|
|
26
|
+
/** Ref registration for each rendered row element. */
|
|
27
|
+
registerRow: (rowIndex: number, element: HTMLElement | null) => void;
|
|
28
|
+
/** The row `keydown` handler (only for events whose target is the row itself). */
|
|
29
|
+
handleRowKeyDown: (rowIndex: number, event: KeyboardEvent<HTMLTableRowElement>) => void;
|
|
30
|
+
/** The row (or a control in it) received focus: it becomes the tab stop. */
|
|
31
|
+
handleRowFocus: (rowIndex: number) => void;
|
|
32
|
+
/** Moves focus to a row, scrolling it into the window first. */
|
|
33
|
+
focusRow: (rowIndex: number) => void;
|
|
19
34
|
}
|
|
20
|
-
/**
|
|
21
|
-
|
|
22
|
-
* whole body, arrows to move between rows, Enter to activate, Space to select.
|
|
23
|
-
*/
|
|
24
|
-
export declare function useTableKeyboardNavigation({ bodyRef, rowCount, enabled, onActivate, onToggleSelect, scrollToIndex, }: UseTableKeyboardNavigationOptions): TableKeyboardNavigation;
|
|
25
|
-
export {};
|
|
35
|
+
/** @internal Roving focus over the rows of a table body. */
|
|
36
|
+
export declare function useTableKeyboardNavigation({ rowCount, getPageSize, scrollToIndex, onKeyDown, }: UseTableKeyboardNavigationOptions): TableKeyboardNavigation;
|