@galaxy-io/dls 1.6.0 → 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 -27
- package/dist/inputs/SwitcherInput.js +0 -64
- 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,1077 @@
|
|
|
1
|
+
import { useIsomorphicLayoutEffect } from "../hooks/useIsomorphicLayoutEffect.js";
|
|
2
|
+
import VisuallyHidden from "../a11y/VisuallyHidden.js";
|
|
3
|
+
import Skeleton, { SkeletonSize, SkeletonVariant } from "../feedback/Skeleton.js";
|
|
4
|
+
import { FontFamily, Orientation, Placement, Side } from "../theme/enums.js";
|
|
5
|
+
import Text, { TextSize, TextVariant, TextWeight } from "../text/Text.js";
|
|
6
|
+
import { CONTROL_SIZE, SPACE } from "../theme/tokens/scales.js";
|
|
7
|
+
import { t } from "../theme/tokens/t.js";
|
|
8
|
+
import Icon, { IconVariant } from "../icons/Icon.js";
|
|
9
|
+
import Rotate from "../transform/Rotate.js";
|
|
10
|
+
import Button, { ButtonSize, ButtonVariant } from "../buttons/Button.js";
|
|
11
|
+
import EmptyState, { EmptyStateSize } from "../feedback/EmptyState.js";
|
|
12
|
+
import { useElementClientSize } from "../hooks/useElementClientSize.js";
|
|
13
|
+
import { formatNumber } from "../utils/format.js";
|
|
14
|
+
import ResizeHandle from "../layout/ResizeHandle.js";
|
|
15
|
+
import CheckboxInput, { CheckboxInputSize } from "../inputs/CheckboxInput.js";
|
|
16
|
+
import Menu, { MenuCheckboxItem, MenuGroup, MenuItem, MenuSeparator, MenuSize } from "../menu/Menu.js";
|
|
17
|
+
import { useInfiniteScrollSentinel } from "./useInfiniteScrollSentinel.js";
|
|
18
|
+
/* empty css */
|
|
19
|
+
import { styled } from "@linaria/react";
|
|
20
|
+
import { memo, useCallback, useEffect, useRef, useState } from "react";
|
|
21
|
+
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
22
|
+
import { cx } from "@linaria/core";
|
|
23
|
+
import { useMergeRefs } from "@floating-ui/react";
|
|
24
|
+
import { ArrowDownIcon, ArrowUpIcon, ArrowsDownUpIcon, CaretRightIcon, DotsThreeIcon, DotsThreeVerticalIcon, SlidersHorizontalIcon, WarningCircleIcon } from "@phosphor-icons/react";
|
|
25
|
+
//#region src/table/TableCore.tsx
|
|
26
|
+
/**
|
|
27
|
+
* @internal Shared by the table components; apps use InfiniteTable, VirtualizedInfiniteTable or
|
|
28
|
+
* InfiniteSpreadsheet.
|
|
29
|
+
*
|
|
30
|
+
* The table core: size metrics, the styled parts (root → scroll container → `<table>` → header,
|
|
31
|
+
* body, footer and status row groups → sentinel → live region), the header cell (sort, column
|
|
32
|
+
* actions, resize handle, drag to reorder), the body row and its synthetic cells (select, expand,
|
|
33
|
+
* row actions), skeleton, status and expanded rows, the Columns menu and the default cell text.
|
|
34
|
+
* Nothing here imports an optional peer (`@tanstack/react-table`, `@tanstack/react-virtual`).
|
|
35
|
+
*
|
|
36
|
+
* The `<table>` parts are laid out with flex (1.x), which strips their implicit roles: every
|
|
37
|
+
* part sets its `role`. Column widths reach cells only through custom properties on the root, so
|
|
38
|
+
* resizing a column re-renders no row.
|
|
39
|
+
*/
|
|
40
|
+
/** `onEndReached` fires when the last row comes within this many pixels of view. */
|
|
41
|
+
var TABLE_END_REACHED_MARGIN_PX = 500;
|
|
42
|
+
/** Skeleton rows shown in place of an empty body while the first page loads. */
|
|
43
|
+
var TABLE_LOADING_ROW_COUNT = 5;
|
|
44
|
+
/** Skeleton rows shown after the last row while more rows load. */
|
|
45
|
+
var TABLE_LOADING_MORE_ROW_COUNT = 3;
|
|
46
|
+
/** Smallest column width when a column sets none (1.x). */
|
|
47
|
+
var TABLE_DEFAULT_MIN_COLUMN_WIDTH = 60;
|
|
48
|
+
/** Largest resize width when a column sets none (1.x). */
|
|
49
|
+
var TABLE_DEFAULT_MAX_COLUMN_WIDTH = 800;
|
|
50
|
+
/** Width of a pinned column that sets no `width` (1.x); a dev warning asks for one. */
|
|
51
|
+
var TABLE_PINNED_FALLBACK_WIDTH = 150;
|
|
52
|
+
/** Horizontal pointer travel before a header press becomes a column drag: `space[4]`. */
|
|
53
|
+
var TABLE_DRAG_THRESHOLD_PX = Number.parseFloat(SPACE[4]);
|
|
54
|
+
/** Rows rendered above and below the visible window of a virtual body. */
|
|
55
|
+
var VIRTUAL_OVERSCAN = 10;
|
|
56
|
+
/** Local stacking inside the root's `isolation: isolate`; never competes with `t.z` layers. */
|
|
57
|
+
/** @internal Stacking of pinned cells (and the spreadsheet's editing cell). */
|
|
58
|
+
var TABLE_Z_PINNED = 1;
|
|
59
|
+
/** @internal True outside production builds (read through `process.env.NODE_ENV`). */
|
|
60
|
+
function isDevelopment() {
|
|
61
|
+
try {
|
|
62
|
+
return process.env.NODE_ENV !== "production";
|
|
63
|
+
} catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
var px = (value) => Number.parseFloat(value);
|
|
68
|
+
/** @internal 32px rows, 32px header, body_sm. */
|
|
69
|
+
var TABLE_SMALL_METRICS = {
|
|
70
|
+
css: "gx-TableCore-css-c13wyidj",
|
|
71
|
+
rowHeightPx: px(CONTROL_SIZE.small) + 2 * px(SPACE[4]),
|
|
72
|
+
headerHeightPx: px(CONTROL_SIZE.small) + 2 * px(SPACE[4]),
|
|
73
|
+
textSize: TextSize.BODY_SM,
|
|
74
|
+
headerIconPx: 12,
|
|
75
|
+
caretPx: 10,
|
|
76
|
+
checkboxSize: CheckboxInputSize.SMALL,
|
|
77
|
+
buttonSize: ButtonSize.X_SMALL,
|
|
78
|
+
skeletonSize: SkeletonSize.SMALL,
|
|
79
|
+
menuSize: MenuSize.SMALL,
|
|
80
|
+
emptyStateSize: EmptyStateSize.SMALL
|
|
81
|
+
};
|
|
82
|
+
/** @internal 48px rows, 40px header, body_md. */
|
|
83
|
+
var TABLE_MEDIUM_METRICS = {
|
|
84
|
+
css: "gx-TableCore-css-c1bvr8n5",
|
|
85
|
+
rowHeightPx: px(CONTROL_SIZE.medium) + 2 * px(SPACE[8]),
|
|
86
|
+
headerHeightPx: px(CONTROL_SIZE.medium) + 2 * px(SPACE[4]),
|
|
87
|
+
textSize: TextSize.BODY_MD,
|
|
88
|
+
headerIconPx: 14,
|
|
89
|
+
caretPx: 10,
|
|
90
|
+
checkboxSize: CheckboxInputSize.MEDIUM,
|
|
91
|
+
buttonSize: ButtonSize.SMALL,
|
|
92
|
+
skeletonSize: SkeletonSize.MEDIUM,
|
|
93
|
+
menuSize: MenuSize.SMALL,
|
|
94
|
+
emptyStateSize: EmptyStateSize.MEDIUM
|
|
95
|
+
};
|
|
96
|
+
/** @internal 52px rows, 44px header, body_lg. */
|
|
97
|
+
var TABLE_LARGE_METRICS = {
|
|
98
|
+
css: "gx-TableCore-css-c9bne0h",
|
|
99
|
+
rowHeightPx: px(CONTROL_SIZE.large) + 2 * px(SPACE[8]),
|
|
100
|
+
headerHeightPx: px(CONTROL_SIZE.large) + 2 * px(SPACE[4]),
|
|
101
|
+
textSize: TextSize.BODY_LG,
|
|
102
|
+
headerIconPx: 14,
|
|
103
|
+
caretPx: 12,
|
|
104
|
+
checkboxSize: CheckboxInputSize.LARGE,
|
|
105
|
+
buttonSize: ButtonSize.MEDIUM,
|
|
106
|
+
skeletonSize: SkeletonSize.LARGE,
|
|
107
|
+
menuSize: MenuSize.MEDIUM,
|
|
108
|
+
emptyStateSize: EmptyStateSize.MEDIUM
|
|
109
|
+
};
|
|
110
|
+
/** Fills a bounded parent and scrolls inside it; in an unbounded parent it grows with its rows. */
|
|
111
|
+
var Root = /*#__PURE__*/ styled("div")({
|
|
112
|
+
name: "Root",
|
|
113
|
+
class: "gx-TableCore-rbflrbk",
|
|
114
|
+
propsAsIs: false
|
|
115
|
+
});
|
|
116
|
+
/** The scrollport. Not focusable: its rows and controls are. */
|
|
117
|
+
var Scroll = /*#__PURE__*/ styled("div")({
|
|
118
|
+
name: "Scroll",
|
|
119
|
+
class: "gx-TableCore-Scroll-szfxg1j",
|
|
120
|
+
propsAsIs: false
|
|
121
|
+
});
|
|
122
|
+
/** A flex column, so the status row group can fill a bounded scrollport. */
|
|
123
|
+
var TableElement = /*#__PURE__*/ styled("table")({
|
|
124
|
+
name: "TableElement",
|
|
125
|
+
class: "gx-TableCore-TableElement-t10fh5j2",
|
|
126
|
+
propsAsIs: false
|
|
127
|
+
});
|
|
128
|
+
var Head = /*#__PURE__*/ styled("thead")({
|
|
129
|
+
name: "Head",
|
|
130
|
+
class: "gx-TableCore-Head-hij68rq",
|
|
131
|
+
propsAsIs: false
|
|
132
|
+
});
|
|
133
|
+
var Body = /*#__PURE__*/ styled("tbody")({
|
|
134
|
+
name: "Body",
|
|
135
|
+
class: "gx-TableCore-Body-b1seyvh2",
|
|
136
|
+
propsAsIs: false
|
|
137
|
+
});
|
|
138
|
+
/** Skeleton, empty, error and end-error rows; grows to fill a bounded scrollport. */
|
|
139
|
+
var StatusBody = /*#__PURE__*/ styled("tbody")({
|
|
140
|
+
name: "StatusBody",
|
|
141
|
+
class: "gx-TableCore-StatusBody-sf09csv",
|
|
142
|
+
propsAsIs: false
|
|
143
|
+
});
|
|
144
|
+
var Foot = /*#__PURE__*/ styled("tfoot")({
|
|
145
|
+
name: "Foot",
|
|
146
|
+
class: "gx-TableCore-Foot-f1loheb3",
|
|
147
|
+
propsAsIs: false
|
|
148
|
+
});
|
|
149
|
+
var HeaderRow = /*#__PURE__*/ styled("tr")({
|
|
150
|
+
name: "HeaderRow",
|
|
151
|
+
class: "gx-TableCore-HeaderRow-h1650vjz",
|
|
152
|
+
propsAsIs: false
|
|
153
|
+
});
|
|
154
|
+
var FooterRow = /*#__PURE__*/ styled("tr")({
|
|
155
|
+
name: "FooterRow",
|
|
156
|
+
class: "gx-TableCore-FooterRow-f3prmx7",
|
|
157
|
+
propsAsIs: false
|
|
158
|
+
});
|
|
159
|
+
/** @internal A body row. States are classes (`ROW_*_CSS`). */
|
|
160
|
+
var TableRow = /*#__PURE__*/ styled("tr")({
|
|
161
|
+
name: "TableRow",
|
|
162
|
+
class: "gx-TableCore-TableRow-t18zsjxh",
|
|
163
|
+
propsAsIs: false
|
|
164
|
+
});
|
|
165
|
+
/** @internal A body or footer cell. */
|
|
166
|
+
var TableCell = /*#__PURE__*/ styled("td")({
|
|
167
|
+
name: "TableCell",
|
|
168
|
+
class: "gx-TableCore-TableCell-t1f7xxie",
|
|
169
|
+
propsAsIs: false
|
|
170
|
+
});
|
|
171
|
+
/** A header cell: not clipped, so the resize handle can straddle the column edge. */
|
|
172
|
+
var HeaderCell = /*#__PURE__*/ styled("th")({
|
|
173
|
+
name: "HeaderCell",
|
|
174
|
+
class: "gx-TableCore-HeaderCell-h1n0v2ch",
|
|
175
|
+
propsAsIs: false
|
|
176
|
+
});
|
|
177
|
+
/** The press target of a sortable or movable column: label and sort icon. */
|
|
178
|
+
var HeaderButton = /*#__PURE__*/ styled("button")({
|
|
179
|
+
name: "HeaderButton",
|
|
180
|
+
class: "gx-TableCore-HeaderButton-h1nswbdd",
|
|
181
|
+
propsAsIs: false
|
|
182
|
+
});
|
|
183
|
+
/** The label of a column that cannot be pressed. */
|
|
184
|
+
var HeaderLabel = /*#__PURE__*/ styled("span")({
|
|
185
|
+
name: "HeaderLabel",
|
|
186
|
+
class: "gx-TableCore-HeaderLabel-hc3y207",
|
|
187
|
+
propsAsIs: false
|
|
188
|
+
});
|
|
189
|
+
/** Marks the gap a dragged column would land in. */
|
|
190
|
+
var DropIndicator = /*#__PURE__*/ styled("span")({
|
|
191
|
+
name: "DropIndicator",
|
|
192
|
+
class: "gx-TableCore-DropIndicator-d1po1i5a",
|
|
193
|
+
propsAsIs: false
|
|
194
|
+
});
|
|
195
|
+
/** Follows the table, inside the scroll container; observed for `onEndReached`. */
|
|
196
|
+
var Sentinel = /*#__PURE__*/ styled("div")({
|
|
197
|
+
name: "Sentinel",
|
|
198
|
+
class: "gx-TableCore-Sentinel-scxvgum",
|
|
199
|
+
propsAsIs: false
|
|
200
|
+
});
|
|
201
|
+
/** The visible width of an empty or error body, pinned while the table scrolls sideways. */
|
|
202
|
+
var StatusViewport = /*#__PURE__*/ styled("div")({
|
|
203
|
+
name: "StatusViewport",
|
|
204
|
+
class: "gx-TableCore-StatusViewport-s7ul01a",
|
|
205
|
+
propsAsIs: false
|
|
206
|
+
});
|
|
207
|
+
/** The end error row's content: icon and message, sticky like the status viewport. */
|
|
208
|
+
var EndErrorViewport = /*#__PURE__*/ styled("div")({
|
|
209
|
+
name: "EndErrorViewport",
|
|
210
|
+
class: "gx-TableCore-EndErrorViewport-e1qemn2d",
|
|
211
|
+
propsAsIs: false
|
|
212
|
+
});
|
|
213
|
+
var StatusRowElement = /*#__PURE__*/ styled("tr")({
|
|
214
|
+
name: "StatusRowElement",
|
|
215
|
+
class: "gx-TableCore-StatusRowElement-sjip7oh",
|
|
216
|
+
propsAsIs: false
|
|
217
|
+
});
|
|
218
|
+
var StatusCell = /*#__PURE__*/ styled("td")({
|
|
219
|
+
name: "StatusCell",
|
|
220
|
+
class: "gx-TableCore-StatusCell-s1cfdxs6",
|
|
221
|
+
propsAsIs: false
|
|
222
|
+
});
|
|
223
|
+
var EndErrorRow = /*#__PURE__*/ styled("tr")({
|
|
224
|
+
name: "EndErrorRow",
|
|
225
|
+
class: "gx-TableCore-EndErrorRow-elttqlf",
|
|
226
|
+
propsAsIs: false
|
|
227
|
+
});
|
|
228
|
+
var ExpandedRowElement = /*#__PURE__*/ styled("tr")({
|
|
229
|
+
name: "ExpandedRowElement",
|
|
230
|
+
class: "gx-TableCore-ExpandedRowElement-e60f67l",
|
|
231
|
+
propsAsIs: false
|
|
232
|
+
});
|
|
233
|
+
var ExpandedCell = /*#__PURE__*/ styled("td")({
|
|
234
|
+
name: "ExpandedCell",
|
|
235
|
+
class: "gx-TableCore-ExpandedCell-e1xg4fvx",
|
|
236
|
+
propsAsIs: false
|
|
237
|
+
});
|
|
238
|
+
/** Pinned to the visible width while the table scrolls sideways; the gutter lines up with the expand column. */
|
|
239
|
+
var ExpandedViewport = /*#__PURE__*/ styled("div")({
|
|
240
|
+
name: "ExpandedViewport",
|
|
241
|
+
class: "gx-TableCore-ExpandedViewport-e13bd0ox",
|
|
242
|
+
propsAsIs: false
|
|
243
|
+
});
|
|
244
|
+
var ExpandedGutter = /*#__PURE__*/ styled("div")({
|
|
245
|
+
name: "ExpandedGutter",
|
|
246
|
+
class: "gx-TableCore-ExpandedGutter-enk7ldu",
|
|
247
|
+
propsAsIs: false
|
|
248
|
+
});
|
|
249
|
+
var ExpandedBody = /*#__PURE__*/ styled("div")({
|
|
250
|
+
name: "ExpandedBody",
|
|
251
|
+
class: "gx-TableCore-ExpandedBody-e1yoeixn",
|
|
252
|
+
propsAsIs: false
|
|
253
|
+
});
|
|
254
|
+
/**
|
|
255
|
+
* The parent paints nothing: the table paints the surface found further up (`--gx-table-surface`,
|
|
256
|
+
* set by `useTableSurface`) so its sticky parts stay opaque.
|
|
257
|
+
*/
|
|
258
|
+
var SURFACE_ANCESTOR_CSS = "gx-TableCore-SURFACE_ANCESTOR_CSS-s18ghmlo";
|
|
259
|
+
/** @internal Select, expand and row-actions columns: a square of the row height, content centered. */
|
|
260
|
+
var SYNTHETIC_CELL_CSS = "gx-TableCore-SYNTHETIC_CELL_CSS-s1g01kh5";
|
|
261
|
+
/** @internal Alignment of a column's header and cells. */
|
|
262
|
+
var COLUMN_ALIGN_TO_CSS_MAP = {
|
|
263
|
+
left: "gx-TableCore-left-l1qwxx34",
|
|
264
|
+
center: "gx-TableCore-center-c152j0h",
|
|
265
|
+
right: "gx-TableCore-right-r1y0un5j"
|
|
266
|
+
};
|
|
267
|
+
/** @internal Sticky to an edge while the table scrolls sideways. */
|
|
268
|
+
var PIN_TO_CSS_MAP = {
|
|
269
|
+
[Side.LEFT]: "gx-TableCore-Side_LEFT-s1dzycrm",
|
|
270
|
+
[Side.RIGHT]: "gx-TableCore-Side_RIGHT-s6wh2p6"
|
|
271
|
+
};
|
|
272
|
+
/** @internal The edge hairline of the last left-pinned / first right-pinned data column. */
|
|
273
|
+
var PIN_TO_EDGE_CSS_MAP = {
|
|
274
|
+
[Side.LEFT]: "gx-TableCore-Side_LEFT-s1imw0tm",
|
|
275
|
+
[Side.RIGHT]: "gx-TableCore-Side_RIGHT-s1swk4bm"
|
|
276
|
+
};
|
|
277
|
+
/** Pinned header cells stack above pinned body cells and the sticky header. */
|
|
278
|
+
var PINNED_HEADER_CSS = "gx-TableCore-PINNED_HEADER_CSS-p14t0x1z";
|
|
279
|
+
/** The row does something: pointer and a hover fill. */
|
|
280
|
+
var ROW_INTERACTIVE_CSS = "gx-TableCore-ROW_INTERACTIVE_CSS-r1nurjwh";
|
|
281
|
+
/** A selected row: `background.selected`. Declared after the interactive state so it holds on hover. */
|
|
282
|
+
var ROW_SELECTED_CSS = "gx-TableCore-ROW_SELECTED_CSS-r1g7lrfg";
|
|
283
|
+
/** The current row (`activeRowId`): a fill and the `text.primary` bar of active navigation. */
|
|
284
|
+
var ROW_ACTIVE_CSS = "gx-TableCore-ROW_ACTIVE_CSS-r10dstoh";
|
|
285
|
+
/** @internal The last row, or a row whose panel is open: no bottom hairline. */
|
|
286
|
+
var ROW_NO_BORDER_CSS = "gx-TableCore-ROW_NO_BORDER_CSS-rpsswqs";
|
|
287
|
+
/** The last expanded panel: no bottom hairline. */
|
|
288
|
+
var EXPANDED_LAST_CSS = "gx-TableCore-EXPANDED_LAST_CSS-ewbqwrq";
|
|
289
|
+
/** The dragged header while reordering. 0.5 is a state, not a color token. */
|
|
290
|
+
var HEADER_DRAGGING_CSS = "gx-TableCore-HEADER_DRAGGING_CSS-h1jxalmm";
|
|
291
|
+
/** The label wrapper grows when a trailing control (column actions) follows it. */
|
|
292
|
+
var LABEL_GROW_CSS = "gx-TableCore-LABEL_GROW_CSS-l1fx3qlj";
|
|
293
|
+
var DROP_START_CSS = "gx-TableCore-DROP_START_CSS-d2nd1ne";
|
|
294
|
+
var DROP_END_CSS = "gx-TableCore-DROP_END_CSS-darqcf0";
|
|
295
|
+
/** Shows on hover, while dragged and on keyboard focus; straddles the column edge. */
|
|
296
|
+
var COLUMN_RESIZE_HANDLE_CSS = "gx-TableCore-COLUMN_RESIZE_HANDLE_CSS-c132cb1v";
|
|
297
|
+
/** Hovering a header cell reveals its resize handle. */
|
|
298
|
+
var HEADER_HOVER_CSS = "gx-TableCore-HEADER_HOVER_CSS-h1vn45v6";
|
|
299
|
+
/** The expand caret button: a square of its rung. */
|
|
300
|
+
var EXPAND_BUTTON_CSS = "gx-TableCore-EXPAND_BUTTON_CSS-e14za3v2";
|
|
301
|
+
/** @internal A virtual body: as tall as every row, which are positioned inside it. */
|
|
302
|
+
var VIRTUAL_BODY_CSS = "gx-TableCore-VIRTUAL_BODY_CSS-v1w0t3ir";
|
|
303
|
+
/** @internal A virtual row, placed at `--gx-table-row-start`. */
|
|
304
|
+
var VIRTUAL_ROW_CSS = "gx-TableCore-VIRTUAL_ROW_CSS-vb9km4t";
|
|
305
|
+
/** @internal Default cells and footer strings: shrink to truncate. */
|
|
306
|
+
var CELL_TEXT_CSS = "gx-TableCore-CELL_TEXT_CSS-c1emgwoo";
|
|
307
|
+
/** "Oct 3, 2026": the DateInput default. */
|
|
308
|
+
var DATE_FORMAT_OPTIONS = { dateStyle: "medium" };
|
|
309
|
+
/** @internal The default cell renderer: one truncating line of formatted text. */
|
|
310
|
+
function TableCellText({ value, textSize }) {
|
|
311
|
+
if (value === null || value === void 0 || value === "") return /* @__PURE__ */ jsx(Text, {
|
|
312
|
+
as: "span",
|
|
313
|
+
size: textSize,
|
|
314
|
+
variant: TextVariant.TERTIARY,
|
|
315
|
+
children: "—"
|
|
316
|
+
});
|
|
317
|
+
const isNumeric = typeof value === "number" || typeof value === "bigint";
|
|
318
|
+
let text;
|
|
319
|
+
if (typeof value === "number") text = formatNumber(value);
|
|
320
|
+
else if (typeof value === "bigint") text = value.toLocaleString();
|
|
321
|
+
else if (typeof value === "boolean") text = value ? "Yes" : "No";
|
|
322
|
+
else if (value instanceof Date) text = new Intl.DateTimeFormat(void 0, DATE_FORMAT_OPTIONS).format(value);
|
|
323
|
+
else text = String(value);
|
|
324
|
+
return /* @__PURE__ */ jsx(Text, {
|
|
325
|
+
as: "span",
|
|
326
|
+
size: textSize,
|
|
327
|
+
lineClamp: 1,
|
|
328
|
+
shouldTooltipOnOverflow: true,
|
|
329
|
+
className: CELL_TEXT_CSS,
|
|
330
|
+
...isNumeric ? { family: FontFamily.MONO } : {},
|
|
331
|
+
children: text
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
/** @internal One column header: label (sort / drag button), sort icon, column actions, resize handle. */
|
|
335
|
+
function TableHeaderCell({ resolved, metrics, sortState, isCustomizable, width, dropEdge, isDragged, colIndex, onSortPress, onResize, onLabelKeyDown, onLabelPointerDown, onLabelPointerMove, onLabelPointerUp, onLabelPointerCancel, onLabelClickCapture, registerCell, registerButton }) {
|
|
336
|
+
const { column, pin, isPinEdge, canResize, minWidth, maxWidth, cellStyle } = resolved;
|
|
337
|
+
const align = column.align ?? "left";
|
|
338
|
+
const canSort = column.canSort === true;
|
|
339
|
+
const isButton = canSort || isCustomizable;
|
|
340
|
+
const hasActions = column.actions !== void 0 && column.actions !== null;
|
|
341
|
+
const id = column.id;
|
|
342
|
+
const cellRef = useCallback((element) => registerCell(id, element), [id, registerCell]);
|
|
343
|
+
const buttonRef = useCallback((element) => registerButton(id, element), [id, registerButton]);
|
|
344
|
+
const sortIcon = sortState === void 0 ? null : /* @__PURE__ */ jsx(Icon, {
|
|
345
|
+
component: sortState === "ascending" ? ArrowUpIcon : sortState === "descending" ? ArrowDownIcon : ArrowsDownUpIcon,
|
|
346
|
+
size: metrics.headerIconPx,
|
|
347
|
+
variant: sortState === "none" ? IconVariant.TERTIARY : IconVariant.SECONDARY,
|
|
348
|
+
"aria-hidden": true
|
|
349
|
+
});
|
|
350
|
+
const label = /* @__PURE__ */ jsx(Text, {
|
|
351
|
+
as: "span",
|
|
352
|
+
size: metrics.textSize,
|
|
353
|
+
weight: TextWeight.MEDIUM,
|
|
354
|
+
variant: TextVariant.TERTIARY,
|
|
355
|
+
lineClamp: 1,
|
|
356
|
+
shouldTooltipOnOverflow: true,
|
|
357
|
+
className: CELL_TEXT_CSS,
|
|
358
|
+
children: column.header
|
|
359
|
+
});
|
|
360
|
+
const labelClassName = cx(COLUMN_ALIGN_TO_CSS_MAP[align], hasActions && LABEL_GROW_CSS);
|
|
361
|
+
return /* @__PURE__ */ jsxs(HeaderCell, {
|
|
362
|
+
ref: cellRef,
|
|
363
|
+
role: "columnheader",
|
|
364
|
+
...sortState === void 0 ? {} : { "aria-sort": sortState },
|
|
365
|
+
...colIndex === void 0 ? {} : { "aria-colindex": colIndex },
|
|
366
|
+
className: cx(COLUMN_ALIGN_TO_CSS_MAP[align], pin !== void 0 && PIN_TO_CSS_MAP[pin], pin !== void 0 && PINNED_HEADER_CSS, pin !== void 0 && isPinEdge && PIN_TO_EDGE_CSS_MAP[pin], canResize && HEADER_HOVER_CSS, isDragged && HEADER_DRAGGING_CSS),
|
|
367
|
+
style: cellStyle,
|
|
368
|
+
children: [
|
|
369
|
+
isButton ? /* @__PURE__ */ jsxs(HeaderButton, {
|
|
370
|
+
ref: buttonRef,
|
|
371
|
+
type: "button",
|
|
372
|
+
className: labelClassName,
|
|
373
|
+
onClick: canSort ? () => onSortPress(id) : void 0,
|
|
374
|
+
onClickCapture: onLabelClickCapture,
|
|
375
|
+
onKeyDown: (event) => onLabelKeyDown(id, event),
|
|
376
|
+
...isCustomizable && pin === void 0 ? {
|
|
377
|
+
onPointerDown: (event) => onLabelPointerDown(id, event),
|
|
378
|
+
onPointerMove: onLabelPointerMove,
|
|
379
|
+
onPointerUp: onLabelPointerUp,
|
|
380
|
+
onPointerCancel: onLabelPointerCancel
|
|
381
|
+
} : {},
|
|
382
|
+
children: [label, sortIcon]
|
|
383
|
+
}) : /* @__PURE__ */ jsxs(HeaderLabel, {
|
|
384
|
+
className: labelClassName,
|
|
385
|
+
children: [label, sortIcon]
|
|
386
|
+
}),
|
|
387
|
+
hasActions && /* @__PURE__ */ jsx(Menu, {
|
|
388
|
+
trigger: /* @__PURE__ */ jsx(Button, {
|
|
389
|
+
icon: DotsThreeVerticalIcon,
|
|
390
|
+
variant: ButtonVariant.TERTIARY,
|
|
391
|
+
size: metrics.buttonSize,
|
|
392
|
+
ariaLabel: `${column.header} column actions`
|
|
393
|
+
}),
|
|
394
|
+
size: metrics.menuSize,
|
|
395
|
+
placement: Placement.BOTTOM_END,
|
|
396
|
+
children: column.actions
|
|
397
|
+
}),
|
|
398
|
+
canResize && /* @__PURE__ */ jsx(ResizeHandle, {
|
|
399
|
+
orientation: Orientation.VERTICAL,
|
|
400
|
+
value: width,
|
|
401
|
+
min: minWidth,
|
|
402
|
+
max: maxWidth,
|
|
403
|
+
onChange: (next) => onResize(id, next),
|
|
404
|
+
ariaLabel: `Resize ${column.header} column`,
|
|
405
|
+
className: COLUMN_RESIZE_HANDLE_CSS
|
|
406
|
+
}),
|
|
407
|
+
dropEdge !== null && /* @__PURE__ */ jsx(DropIndicator, {
|
|
408
|
+
"aria-hidden": true,
|
|
409
|
+
className: dropEdge === "start" ? DROP_START_CSS : DROP_END_CSS
|
|
410
|
+
})
|
|
411
|
+
]
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
/** @internal The trailing corner's Columns menu: show / hide each column, reset the layout. */
|
|
415
|
+
function TableColumnsMenu({ entries, metrics, onToggle, onReset }) {
|
|
416
|
+
return /* @__PURE__ */ jsxs(Menu, {
|
|
417
|
+
trigger: /* @__PURE__ */ jsx(Button, {
|
|
418
|
+
icon: SlidersHorizontalIcon,
|
|
419
|
+
variant: ButtonVariant.TERTIARY,
|
|
420
|
+
size: metrics.buttonSize,
|
|
421
|
+
ariaLabel: "Columns"
|
|
422
|
+
}),
|
|
423
|
+
size: metrics.menuSize,
|
|
424
|
+
placement: Placement.BOTTOM_END,
|
|
425
|
+
children: [
|
|
426
|
+
/* @__PURE__ */ jsx(MenuGroup, {
|
|
427
|
+
label: "Columns",
|
|
428
|
+
children: entries.map((entry) => /* @__PURE__ */ jsx(MenuCheckboxItem, {
|
|
429
|
+
label: entry.header,
|
|
430
|
+
isChecked: entry.isVisible,
|
|
431
|
+
onChange: (isChecked) => onToggle(entry.id, isChecked),
|
|
432
|
+
isDisabled: entry.disabledReason !== void 0,
|
|
433
|
+
...entry.disabledReason === void 0 ? {} : { disabledReason: entry.disabledReason }
|
|
434
|
+
}, entry.id))
|
|
435
|
+
}),
|
|
436
|
+
/* @__PURE__ */ jsx(MenuSeparator, {}),
|
|
437
|
+
/* @__PURE__ */ jsx(MenuItem, {
|
|
438
|
+
label: "Reset columns",
|
|
439
|
+
onSelect: onReset
|
|
440
|
+
})
|
|
441
|
+
]
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
/** Spread on a built-in control outside the roving row: reachable by pointer, not by Tab. */
|
|
445
|
+
var UNTABBABLE = { tabIndex: -1 };
|
|
446
|
+
/** Clicks on these, inside a row, never activate the row. */
|
|
447
|
+
var INTERACTIVE_SELECTOR = "a[href], button, input, select, textarea, [role=\"button\"], [role=\"link\"], [role=\"checkbox\"]";
|
|
448
|
+
/** @internal One body row with its synthetic and data cells. Memoized: every prop is stable or primitive. */
|
|
449
|
+
var TableBodyRow = memo(function TableBodyRow({ row, rowIndex, rowId, columns, metrics, callbacks, cellRole, isFocusable, isTabStop, isClickable, isBorderless, isActive, isSelected, hasExpandColumn, isExpanded, panelId, hasTrailingColumn, isActionsOpen, ariaRowIndex, hasColIndex, className, style }) {
|
|
450
|
+
const shiftRef = useRef(false);
|
|
451
|
+
const rowRef = useCallback((element) => callbacks.registerRow(rowIndex, element), [callbacks, rowIndex]);
|
|
452
|
+
const isSelectable = isSelected !== void 0;
|
|
453
|
+
const controlProps = isTabStop ? {} : UNTABBABLE;
|
|
454
|
+
const rowName = callbacks.getRowName(row, rowIndex);
|
|
455
|
+
const actions = hasTrailingColumn && callbacks.getRowActions ? callbacks.getRowActions(row, rowIndex) : null;
|
|
456
|
+
let colIndex = 0;
|
|
457
|
+
const nextColIndex = () => {
|
|
458
|
+
colIndex += 1;
|
|
459
|
+
return hasColIndex ? { "aria-colindex": colIndex } : {};
|
|
460
|
+
};
|
|
461
|
+
const handleClick = (event) => {
|
|
462
|
+
if (!isClickable || callbacks.onRowClick === void 0) return;
|
|
463
|
+
const target = event.target;
|
|
464
|
+
if (!event.currentTarget.contains(target)) return;
|
|
465
|
+
const control = target.closest(INTERACTIVE_SELECTOR);
|
|
466
|
+
if (control !== null && event.currentTarget.contains(control) && control !== event.currentTarget) return;
|
|
467
|
+
callbacks.onRowClick(row, event);
|
|
468
|
+
};
|
|
469
|
+
const handleFocus = (event) => {
|
|
470
|
+
if (!event.currentTarget.contains(event.target)) return;
|
|
471
|
+
callbacks.onRowFocus(rowIndex);
|
|
472
|
+
};
|
|
473
|
+
const handleKeyDown = (event) => {
|
|
474
|
+
if (event.target !== event.currentTarget) return;
|
|
475
|
+
callbacks.onRowKeyDown(rowIndex, event);
|
|
476
|
+
};
|
|
477
|
+
return /* @__PURE__ */ jsxs(TableRow, {
|
|
478
|
+
ref: rowRef,
|
|
479
|
+
role: "row",
|
|
480
|
+
...isFocusable ? { tabIndex: isTabStop ? 0 : -1 } : {},
|
|
481
|
+
...isSelectable ? { "aria-selected": isSelected } : {},
|
|
482
|
+
...isExpanded === void 0 ? {} : { "aria-expanded": isExpanded },
|
|
483
|
+
...isActive ? { "aria-current": true } : {},
|
|
484
|
+
...ariaRowIndex === void 0 ? {} : { "aria-rowindex": ariaRowIndex },
|
|
485
|
+
className: cx(isClickable && ROW_INTERACTIVE_CSS, isSelected === true && ROW_SELECTED_CSS, isActive && ROW_ACTIVE_CSS, isBorderless && "gx-TableCore-ROW_NO_BORDER_CSS-rpsswqs", className),
|
|
486
|
+
style,
|
|
487
|
+
onClick: handleClick,
|
|
488
|
+
onKeyDown: handleKeyDown,
|
|
489
|
+
onFocus: handleFocus,
|
|
490
|
+
children: [
|
|
491
|
+
isSelectable && /* @__PURE__ */ jsx(TableCell, {
|
|
492
|
+
role: cellRole,
|
|
493
|
+
...nextColIndex(),
|
|
494
|
+
className: cx("gx-TableCore-SYNTHETIC_CELL_CSS-s1g01kh5", PIN_TO_CSS_MAP[Side.LEFT]),
|
|
495
|
+
style: syntheticOffset(0, metrics),
|
|
496
|
+
onClickCapture: (event) => {
|
|
497
|
+
shiftRef.current = event.shiftKey;
|
|
498
|
+
},
|
|
499
|
+
onClick: (event) => event.stopPropagation(),
|
|
500
|
+
children: /* @__PURE__ */ jsx(CheckboxInput, {
|
|
501
|
+
size: metrics.checkboxSize,
|
|
502
|
+
isChecked: isSelected,
|
|
503
|
+
onChange: () => {
|
|
504
|
+
callbacks.onToggleSelect(rowId, shiftRef.current);
|
|
505
|
+
shiftRef.current = false;
|
|
506
|
+
},
|
|
507
|
+
ariaLabel: `Select ${rowName}`,
|
|
508
|
+
...controlProps
|
|
509
|
+
})
|
|
510
|
+
}),
|
|
511
|
+
hasExpandColumn && /* @__PURE__ */ jsx(TableCell, {
|
|
512
|
+
role: cellRole,
|
|
513
|
+
...nextColIndex(),
|
|
514
|
+
className: cx("gx-TableCore-SYNTHETIC_CELL_CSS-s1g01kh5", PIN_TO_CSS_MAP[Side.LEFT]),
|
|
515
|
+
style: syntheticOffset(isSelectable ? 1 : 0, metrics),
|
|
516
|
+
onClick: (event) => event.stopPropagation(),
|
|
517
|
+
children: isExpanded !== void 0 && /* @__PURE__ */ jsx(Button, {
|
|
518
|
+
variant: ButtonVariant.TERTIARY,
|
|
519
|
+
size: metrics.buttonSize,
|
|
520
|
+
leading: /* @__PURE__ */ jsx(Rotate, {
|
|
521
|
+
isRotated: isExpanded,
|
|
522
|
+
deg: 90,
|
|
523
|
+
children: /* @__PURE__ */ jsx(Icon, {
|
|
524
|
+
component: CaretRightIcon,
|
|
525
|
+
size: metrics.caretPx,
|
|
526
|
+
variant: IconVariant.INHERIT
|
|
527
|
+
})
|
|
528
|
+
}),
|
|
529
|
+
ariaLabel: isExpanded ? "Collapse row" : "Expand row",
|
|
530
|
+
"aria-expanded": isExpanded,
|
|
531
|
+
...isExpanded && panelId !== void 0 ? { "aria-controls": panelId } : {},
|
|
532
|
+
onClick: () => callbacks.onToggleExpand(rowId),
|
|
533
|
+
className: EXPAND_BUTTON_CSS,
|
|
534
|
+
...controlProps
|
|
535
|
+
})
|
|
536
|
+
}),
|
|
537
|
+
columns.map((resolved) => {
|
|
538
|
+
const { column, pin, isPinEdge, cellStyle } = resolved;
|
|
539
|
+
const value = column.accessor?.(row);
|
|
540
|
+
const content = column.cell ? column.cell({
|
|
541
|
+
value,
|
|
542
|
+
row,
|
|
543
|
+
rowIndex,
|
|
544
|
+
rowId
|
|
545
|
+
}) : /* @__PURE__ */ jsx(TableCellText, {
|
|
546
|
+
value,
|
|
547
|
+
textSize: metrics.textSize
|
|
548
|
+
});
|
|
549
|
+
return /* @__PURE__ */ jsx(TableCell, {
|
|
550
|
+
role: column.isRowHeader === true ? "rowheader" : cellRole,
|
|
551
|
+
...nextColIndex(),
|
|
552
|
+
className: cx(COLUMN_ALIGN_TO_CSS_MAP[column.align ?? "left"], pin !== void 0 && PIN_TO_CSS_MAP[pin], pin !== void 0 && isPinEdge && PIN_TO_EDGE_CSS_MAP[pin]),
|
|
553
|
+
style: cellStyle,
|
|
554
|
+
children: content
|
|
555
|
+
}, column.id);
|
|
556
|
+
}),
|
|
557
|
+
hasTrailingColumn && /* @__PURE__ */ jsx(TableCell, {
|
|
558
|
+
role: cellRole,
|
|
559
|
+
...nextColIndex(),
|
|
560
|
+
className: cx("gx-TableCore-SYNTHETIC_CELL_CSS-s1g01kh5", PIN_TO_CSS_MAP[Side.RIGHT]),
|
|
561
|
+
style: syntheticOffset(0, metrics),
|
|
562
|
+
children: actions !== null && actions !== void 0 && /* @__PURE__ */ jsx(Menu, {
|
|
563
|
+
isOpen: isActionsOpen,
|
|
564
|
+
onOpenChange: (isOpen) => callbacks.onActionsOpenChange(rowId, isOpen),
|
|
565
|
+
trigger: /* @__PURE__ */ jsx(Button, {
|
|
566
|
+
icon: DotsThreeIcon,
|
|
567
|
+
variant: ButtonVariant.TERTIARY,
|
|
568
|
+
size: metrics.buttonSize,
|
|
569
|
+
ariaLabel: `Actions for ${rowName}`,
|
|
570
|
+
...controlProps
|
|
571
|
+
}),
|
|
572
|
+
size: metrics.menuSize,
|
|
573
|
+
placement: Placement.BOTTOM_END,
|
|
574
|
+
children: actions
|
|
575
|
+
})
|
|
576
|
+
})
|
|
577
|
+
]
|
|
578
|
+
});
|
|
579
|
+
});
|
|
580
|
+
/** The pinned offset of the k-th synthetic column from its edge. */
|
|
581
|
+
function syntheticOffset(index, metrics) {
|
|
582
|
+
return { "--gx-table-cell-offset": `${index * metrics.rowHeightPx}px` };
|
|
583
|
+
}
|
|
584
|
+
/** @internal A placeholder row: a text skeleton in each data cell, synthetic cells empty. */
|
|
585
|
+
function TableSkeletonRow({ columns, metrics, leadingCount, hasTrailingColumn, isBorderless, ariaRowIndex, pending, className, style }) {
|
|
586
|
+
return /* @__PURE__ */ jsxs(TableRow, {
|
|
587
|
+
role: "row",
|
|
588
|
+
...pending === void 0 ? { "aria-hidden": true } : {
|
|
589
|
+
ref: pending.rowRef,
|
|
590
|
+
"aria-busy": true,
|
|
591
|
+
tabIndex: pending.isTabStop ? 0 : -1,
|
|
592
|
+
onKeyDown: (event) => {
|
|
593
|
+
if (event.target === event.currentTarget) pending.onKeyDown(event);
|
|
594
|
+
},
|
|
595
|
+
onFocus: pending.onFocus
|
|
596
|
+
},
|
|
597
|
+
...ariaRowIndex === void 0 ? {} : { "aria-rowindex": ariaRowIndex },
|
|
598
|
+
className: cx(isBorderless && "gx-TableCore-ROW_NO_BORDER_CSS-rpsswqs", className),
|
|
599
|
+
style,
|
|
600
|
+
children: [
|
|
601
|
+
Array.from({ length: leadingCount }, (_, index) => /* @__PURE__ */ jsx(TableCell, {
|
|
602
|
+
role: "cell",
|
|
603
|
+
className: cx(SYNTHETIC_CELL_CSS, PIN_TO_CSS_MAP[Side.LEFT]),
|
|
604
|
+
style: syntheticOffset(index, metrics)
|
|
605
|
+
}, `leading-${index}`)),
|
|
606
|
+
columns.map(({ column, pin, isPinEdge, cellStyle }) => /* @__PURE__ */ jsx(TableCell, {
|
|
607
|
+
role: "cell",
|
|
608
|
+
className: cx(pin !== void 0 && PIN_TO_CSS_MAP[pin], pin !== void 0 && isPinEdge && PIN_TO_EDGE_CSS_MAP[pin]),
|
|
609
|
+
style: cellStyle,
|
|
610
|
+
children: /* @__PURE__ */ jsx(Skeleton, {
|
|
611
|
+
variant: SkeletonVariant.TEXT,
|
|
612
|
+
size: metrics.skeletonSize
|
|
613
|
+
})
|
|
614
|
+
}, column.id)),
|
|
615
|
+
hasTrailingColumn && /* @__PURE__ */ jsx(TableCell, {
|
|
616
|
+
role: "cell",
|
|
617
|
+
className: cx("gx-TableCore-SYNTHETIC_CELL_CSS-s1g01kh5", PIN_TO_CSS_MAP[Side.RIGHT]),
|
|
618
|
+
style: syntheticOffset(0, metrics)
|
|
619
|
+
})
|
|
620
|
+
]
|
|
621
|
+
});
|
|
622
|
+
}
|
|
623
|
+
/** @internal An expanded row's panel, under its row, as wide as the visible area. */
|
|
624
|
+
function TableExpandedRow({ panelId, colSpan, gutterPx, isLast, children }) {
|
|
625
|
+
const variables = { "--gx-table-expanded-gutter": `${gutterPx}px` };
|
|
626
|
+
return /* @__PURE__ */ jsx(ExpandedRowElement, {
|
|
627
|
+
role: "row",
|
|
628
|
+
className: cx(isLast && EXPANDED_LAST_CSS),
|
|
629
|
+
children: /* @__PURE__ */ jsx(ExpandedCell, {
|
|
630
|
+
role: "cell",
|
|
631
|
+
colSpan,
|
|
632
|
+
children: /* @__PURE__ */ jsxs(ExpandedViewport, {
|
|
633
|
+
style: variables,
|
|
634
|
+
children: [/* @__PURE__ */ jsx(ExpandedGutter, {}), /* @__PURE__ */ jsx(ExpandedBody, {
|
|
635
|
+
id: panelId,
|
|
636
|
+
children
|
|
637
|
+
})]
|
|
638
|
+
})
|
|
639
|
+
})
|
|
640
|
+
});
|
|
641
|
+
}
|
|
642
|
+
/** The panel surfaces an ancestor may paint, matched by color so the table follows theme switches. */
|
|
643
|
+
var SURFACE_TOKENS = [
|
|
644
|
+
t.color.background.base,
|
|
645
|
+
t.color.background.primary,
|
|
646
|
+
t.color.background.secondary,
|
|
647
|
+
t.color.background.tertiary,
|
|
648
|
+
t.color.text.primary
|
|
649
|
+
];
|
|
650
|
+
var isTransparentColor = (color) => color === "" || color === "transparent" || /^rgba\(.*,\s*0\)$/.test(color);
|
|
651
|
+
/**
|
|
652
|
+
* `null` when the parent paints a surface (the root inherits it); otherwise the value for
|
|
653
|
+
* `--gx-table-surface`: the nearest painted ancestor below the theme root, as its background token
|
|
654
|
+
* when its color matches one (so a theme switch needs no re-measure), else its computed color;
|
|
655
|
+
* `background.base` when nothing below the theme root paints.
|
|
656
|
+
*
|
|
657
|
+
* Measured in a passive effect, after every layout effect of the commit: the unscoped
|
|
658
|
+
* GalaxyProvider writes `data-gx-theme` on <html> in its own layout effect, which runs after its
|
|
659
|
+
* children's, so a layout-effect measurement on the first commit would see unthemed surfaces.
|
|
660
|
+
* Re-measured when a theme attribute changes anywhere, when an ancestor's `class` or
|
|
661
|
+
* `style` changes, and when an ancestor's background transition ends.
|
|
662
|
+
*/
|
|
663
|
+
function useTableSurface(rootRef) {
|
|
664
|
+
const [surface, setSurface] = useState(null);
|
|
665
|
+
useEffect(() => {
|
|
666
|
+
const root = rootRef.current;
|
|
667
|
+
if (root === null || typeof window === "undefined") return;
|
|
668
|
+
let normalizer;
|
|
669
|
+
const normalize = (color) => {
|
|
670
|
+
if (normalizer === void 0) try {
|
|
671
|
+
normalizer = document.createElement("canvas").getContext("2d");
|
|
672
|
+
} catch {
|
|
673
|
+
normalizer = null;
|
|
674
|
+
}
|
|
675
|
+
if (normalizer === null) return null;
|
|
676
|
+
normalizer.fillStyle = "transparent";
|
|
677
|
+
normalizer.fillStyle = color;
|
|
678
|
+
return normalizer.fillStyle;
|
|
679
|
+
};
|
|
680
|
+
const ancestors = () => {
|
|
681
|
+
const list = [];
|
|
682
|
+
const themeRoot = root.parentElement?.closest("[data-gx-theme]") ?? null;
|
|
683
|
+
for (let node = root.parentElement; node !== null && node !== themeRoot;) {
|
|
684
|
+
list.push(node);
|
|
685
|
+
node = node.parentElement;
|
|
686
|
+
}
|
|
687
|
+
return list;
|
|
688
|
+
};
|
|
689
|
+
const measure = () => {
|
|
690
|
+
const painted = ancestors().find((element) => !isTransparentColor(getComputedStyle(element).backgroundColor));
|
|
691
|
+
if (painted !== void 0 && painted === root.parentElement) {
|
|
692
|
+
setSurface(null);
|
|
693
|
+
return;
|
|
694
|
+
}
|
|
695
|
+
if (painted === void 0) {
|
|
696
|
+
setSurface(t.color.background.base);
|
|
697
|
+
return;
|
|
698
|
+
}
|
|
699
|
+
const styles = getComputedStyle(painted);
|
|
700
|
+
const color = normalize(styles.backgroundColor);
|
|
701
|
+
setSurface(SURFACE_TOKENS.find((candidate) => {
|
|
702
|
+
const name = /^var\((--[\w-]+)\)$/.exec(candidate)?.[1];
|
|
703
|
+
if (name === void 0 || color === null) return false;
|
|
704
|
+
const value = styles.getPropertyValue(name).trim();
|
|
705
|
+
return value !== "" && normalize(value) === color;
|
|
706
|
+
}) ?? styles.backgroundColor);
|
|
707
|
+
};
|
|
708
|
+
measure();
|
|
709
|
+
if (typeof MutationObserver === "undefined") return;
|
|
710
|
+
const observer = new MutationObserver(measure);
|
|
711
|
+
observer.observe(document.documentElement, {
|
|
712
|
+
attributes: true,
|
|
713
|
+
attributeFilter: ["data-gx-theme"],
|
|
714
|
+
subtree: true
|
|
715
|
+
});
|
|
716
|
+
for (const element of ancestors()) observer.observe(element, {
|
|
717
|
+
attributes: true,
|
|
718
|
+
attributeFilter: ["class", "style"]
|
|
719
|
+
});
|
|
720
|
+
const onTransitionEnd = (event) => {
|
|
721
|
+
const target = event.target;
|
|
722
|
+
if (target instanceof Node && target !== root && target.contains(root) && event.propertyName.startsWith("background")) measure();
|
|
723
|
+
};
|
|
724
|
+
document.addEventListener("transitionend", onTransitionEnd);
|
|
725
|
+
return () => {
|
|
726
|
+
observer.disconnect();
|
|
727
|
+
document.removeEventListener("transitionend", onTransitionEnd);
|
|
728
|
+
};
|
|
729
|
+
}, [rootRef]);
|
|
730
|
+
return surface;
|
|
731
|
+
}
|
|
732
|
+
/** Root → scroll container → table (header, body, status, footer) → sentinel → live region. */
|
|
733
|
+
function TableFrame({ metrics, columnLayout, leadingHeaders, trailingHeader, hasTrailingColumn, sort, onSortPress, canCustomizeColumns, rowCount, isLoading, error, emptyState, onEndReached, role, ariaLabel, tableAria, isMultiselectable, ariaRowCount, rootRef, scrollRef, rootProps, className, style, bodyClassName, bodyStyle, announcement, trailingClassName, children }) {
|
|
734
|
+
const { visibleColumns } = columnLayout;
|
|
735
|
+
const ownRootRef = useRef(null);
|
|
736
|
+
const mergedRootRef = useMergeRefs([ownRootRef, rootRef]);
|
|
737
|
+
const hasColIndex = ariaRowCount !== void 0;
|
|
738
|
+
const leadingCount = leadingHeaders.length;
|
|
739
|
+
const colCount = leadingCount + visibleColumns.length + (hasTrailingColumn ? 1 : 0);
|
|
740
|
+
const surface = useTableSurface(ownRootRef);
|
|
741
|
+
const { width: viewportWidth } = useElementClientSize(scrollRef);
|
|
742
|
+
const sentinelRef = useInfiniteScrollSentinel({
|
|
743
|
+
scrollRef,
|
|
744
|
+
onEndReached,
|
|
745
|
+
isEnabled: !isLoading && error === void 0,
|
|
746
|
+
rowCount,
|
|
747
|
+
marginPx: 500
|
|
748
|
+
});
|
|
749
|
+
const [message, setMessage] = useState("");
|
|
750
|
+
useEffect(() => {
|
|
751
|
+
if (announcement !== void 0 && announcement !== "") setMessage(announcement);
|
|
752
|
+
}, [announcement]);
|
|
753
|
+
const headerCellsRef = useRef(/* @__PURE__ */ new Map());
|
|
754
|
+
const headerButtonsRef = useRef(/* @__PURE__ */ new Map());
|
|
755
|
+
const { registerHeaderCell } = columnLayout;
|
|
756
|
+
const registerCell = useCallback((columnId, element) => {
|
|
757
|
+
if (element === null) headerCellsRef.current.delete(columnId);
|
|
758
|
+
else headerCellsRef.current.set(columnId, element);
|
|
759
|
+
registerHeaderCell(columnId, element);
|
|
760
|
+
}, [registerHeaderCell]);
|
|
761
|
+
const registerButton = useCallback((columnId, element) => {
|
|
762
|
+
if (element === null) headerButtonsRef.current.delete(columnId);
|
|
763
|
+
else headerButtonsRef.current.set(columnId, element);
|
|
764
|
+
}, []);
|
|
765
|
+
const [pendingFocusId, setPendingFocusId] = useState(null);
|
|
766
|
+
useIsomorphicLayoutEffect(() => {
|
|
767
|
+
if (pendingFocusId === null) return;
|
|
768
|
+
headerButtonsRef.current.get(pendingFocusId)?.focus();
|
|
769
|
+
setPendingFocusId(null);
|
|
770
|
+
}, [pendingFocusId]);
|
|
771
|
+
const dragRef = useRef(null);
|
|
772
|
+
const suppressClickRef = useRef(false);
|
|
773
|
+
const [drag, setDrag] = useState(null);
|
|
774
|
+
const unpinnedIds = visibleColumns.filter((entry) => entry.pin === void 0).map((entry) => entry.column.id);
|
|
775
|
+
const unpinnedRef = useRef(unpinnedIds);
|
|
776
|
+
unpinnedRef.current = unpinnedIds;
|
|
777
|
+
const cancelDrag = useCallback(() => {
|
|
778
|
+
dragRef.current = null;
|
|
779
|
+
setDrag(null);
|
|
780
|
+
}, []);
|
|
781
|
+
useEffect(() => {
|
|
782
|
+
if (drag === null) return;
|
|
783
|
+
const handleKey = (event) => {
|
|
784
|
+
if (event.key !== "Escape") return;
|
|
785
|
+
event.preventDefault();
|
|
786
|
+
event.stopPropagation();
|
|
787
|
+
suppressClickRef.current = true;
|
|
788
|
+
cancelDrag();
|
|
789
|
+
};
|
|
790
|
+
window.addEventListener("keydown", handleKey, true);
|
|
791
|
+
return () => window.removeEventListener("keydown", handleKey, true);
|
|
792
|
+
}, [drag, cancelDrag]);
|
|
793
|
+
/** The unpinned column the pointer would drop before (`null`: after the last). */
|
|
794
|
+
const hitTest = (clientX) => {
|
|
795
|
+
for (const columnId of unpinnedRef.current) {
|
|
796
|
+
const rect = headerCellsRef.current.get(columnId)?.getBoundingClientRect();
|
|
797
|
+
if (rect !== void 0 && clientX < rect.left + rect.width / 2) return columnId;
|
|
798
|
+
}
|
|
799
|
+
return null;
|
|
800
|
+
};
|
|
801
|
+
const onLabelPointerDown = (columnId, event) => {
|
|
802
|
+
if (event.pointerType === "mouse" && event.button !== 0) return;
|
|
803
|
+
dragRef.current = {
|
|
804
|
+
pointerId: event.pointerId,
|
|
805
|
+
columnId,
|
|
806
|
+
startX: event.clientX,
|
|
807
|
+
isDragging: false,
|
|
808
|
+
beforeId: void 0
|
|
809
|
+
};
|
|
810
|
+
};
|
|
811
|
+
const onLabelPointerMove = (event) => {
|
|
812
|
+
const current = dragRef.current;
|
|
813
|
+
if (current === null || current.pointerId !== event.pointerId) return;
|
|
814
|
+
if (!current.isDragging) {
|
|
815
|
+
if (Math.abs(event.clientX - current.startX) <= TABLE_DRAG_THRESHOLD_PX) return;
|
|
816
|
+
current.isDragging = true;
|
|
817
|
+
event.currentTarget.setPointerCapture(event.pointerId);
|
|
818
|
+
}
|
|
819
|
+
const beforeId = hitTest(event.clientX);
|
|
820
|
+
if (beforeId !== current.beforeId) {
|
|
821
|
+
current.beforeId = beforeId;
|
|
822
|
+
setDrag({
|
|
823
|
+
columnId: current.columnId,
|
|
824
|
+
beforeId
|
|
825
|
+
});
|
|
826
|
+
}
|
|
827
|
+
};
|
|
828
|
+
const onLabelPointerUp = (event) => {
|
|
829
|
+
const current = dragRef.current;
|
|
830
|
+
if (current !== null && current.pointerId === event.pointerId) {
|
|
831
|
+
if (current.isDragging) {
|
|
832
|
+
suppressClickRef.current = true;
|
|
833
|
+
if (current.beforeId !== void 0) columnLayout.moveColumnBefore(current.columnId, current.beforeId);
|
|
834
|
+
}
|
|
835
|
+
cancelDrag();
|
|
836
|
+
}
|
|
837
|
+
if (suppressClickRef.current) window.setTimeout(() => {
|
|
838
|
+
suppressClickRef.current = false;
|
|
839
|
+
}, 0);
|
|
840
|
+
};
|
|
841
|
+
const onLabelPointerCancel = (event) => {
|
|
842
|
+
if (dragRef.current?.pointerId === event.pointerId) cancelDrag();
|
|
843
|
+
};
|
|
844
|
+
const onLabelClickCapture = (event) => {
|
|
845
|
+
if (!suppressClickRef.current) return;
|
|
846
|
+
suppressClickRef.current = false;
|
|
847
|
+
event.preventDefault();
|
|
848
|
+
event.stopPropagation();
|
|
849
|
+
};
|
|
850
|
+
const onLabelKeyDown = (columnId, event) => {
|
|
851
|
+
if (!canCustomizeColumns || !event.altKey) return;
|
|
852
|
+
if (event.key !== "ArrowLeft" && event.key !== "ArrowRight") return;
|
|
853
|
+
event.preventDefault();
|
|
854
|
+
const position = columnLayout.moveColumnBy(columnId, event.key === "ArrowLeft" ? -1 : 1);
|
|
855
|
+
if (position === null) return;
|
|
856
|
+
setMessage(`Moved ${visibleColumns.find((entry) => entry.column.id === columnId)?.column.header ?? ""} to column ${position} of ${visibleColumns.length}`);
|
|
857
|
+
setPendingFocusId(columnId);
|
|
858
|
+
};
|
|
859
|
+
/** Drop indicator edge for each column while dragging. */
|
|
860
|
+
const dropEdgeFor = (columnId) => {
|
|
861
|
+
if (drag === null || drag.columnId === columnId) return null;
|
|
862
|
+
const ids = unpinnedIds;
|
|
863
|
+
const fromIndex = ids.indexOf(drag.columnId);
|
|
864
|
+
const toIndex = drag.beforeId === null ? ids.length : ids.indexOf(drag.beforeId);
|
|
865
|
+
if (toIndex === fromIndex || toIndex === fromIndex + 1) return null;
|
|
866
|
+
if (drag.beforeId === columnId) return "start";
|
|
867
|
+
if (drag.beforeId === null && ids.at(-1) === columnId) return "end";
|
|
868
|
+
return null;
|
|
869
|
+
};
|
|
870
|
+
const hasFooter = visibleColumns.some(({ column }) => column.footer !== void 0 && column.footer !== null);
|
|
871
|
+
const footerRowIndex = ariaRowCount;
|
|
872
|
+
const variables = { ...columnLayout.variables };
|
|
873
|
+
if (viewportWidth !== void 0) variables["--gx-table-viewport-width"] = `${viewportWidth}px`;
|
|
874
|
+
if (hasFooter) variables["--gx-table-footer-height"] = "var(--gx-table-header-height)";
|
|
875
|
+
if (surface !== null) variables["--gx-table-surface"] = surface;
|
|
876
|
+
let status = null;
|
|
877
|
+
if (rowCount === 0 && isLoading) status = Array.from({ length: 5 }, (_, index) => /* @__PURE__ */ jsx(TableSkeletonRow, {
|
|
878
|
+
columns: visibleColumns,
|
|
879
|
+
metrics,
|
|
880
|
+
leadingCount,
|
|
881
|
+
hasTrailingColumn,
|
|
882
|
+
isBorderless: index === 4
|
|
883
|
+
}, `skeleton-${index}`));
|
|
884
|
+
else if (rowCount === 0) status = /* @__PURE__ */ jsx(StatusRowElement, {
|
|
885
|
+
role: "row",
|
|
886
|
+
children: /* @__PURE__ */ jsx(StatusCell, {
|
|
887
|
+
role: "cell",
|
|
888
|
+
colSpan: colCount,
|
|
889
|
+
children: /* @__PURE__ */ jsx(StatusViewport, { children: error !== void 0 ? /* @__PURE__ */ jsx("div", {
|
|
890
|
+
role: "alert",
|
|
891
|
+
children: /* @__PURE__ */ jsx(EmptyState, {
|
|
892
|
+
icon: WarningCircleIcon,
|
|
893
|
+
header: "Couldn't load data",
|
|
894
|
+
description: error,
|
|
895
|
+
size: metrics.emptyStateSize
|
|
896
|
+
})
|
|
897
|
+
}) : emptyState ?? /* @__PURE__ */ jsx(EmptyState, {
|
|
898
|
+
header: "No results",
|
|
899
|
+
size: metrics.emptyStateSize,
|
|
900
|
+
role: "status"
|
|
901
|
+
}) })
|
|
902
|
+
})
|
|
903
|
+
});
|
|
904
|
+
else status = /* @__PURE__ */ jsxs(Fragment$1, { children: [isLoading && Array.from({ length: 3 }, (_, index) => /* @__PURE__ */ jsx(TableSkeletonRow, {
|
|
905
|
+
columns: visibleColumns,
|
|
906
|
+
metrics,
|
|
907
|
+
leadingCount,
|
|
908
|
+
hasTrailingColumn,
|
|
909
|
+
isBorderless: index === 2 && error === void 0
|
|
910
|
+
}, `more-${index}`)), error !== void 0 && /* @__PURE__ */ jsx(EndErrorRow, {
|
|
911
|
+
role: "row",
|
|
912
|
+
children: /* @__PURE__ */ jsx(StatusCell, {
|
|
913
|
+
role: "cell",
|
|
914
|
+
colSpan: colCount,
|
|
915
|
+
children: /* @__PURE__ */ jsxs(EndErrorViewport, {
|
|
916
|
+
role: "alert",
|
|
917
|
+
children: [/* @__PURE__ */ jsx(Icon, {
|
|
918
|
+
component: WarningCircleIcon,
|
|
919
|
+
size: metrics.headerIconPx,
|
|
920
|
+
variant: IconVariant.ERROR
|
|
921
|
+
}), /* @__PURE__ */ jsx(Text, {
|
|
922
|
+
as: "span",
|
|
923
|
+
variant: TextVariant.ERROR,
|
|
924
|
+
size: metrics.textSize,
|
|
925
|
+
children: error
|
|
926
|
+
})]
|
|
927
|
+
})
|
|
928
|
+
})
|
|
929
|
+
})] });
|
|
930
|
+
let headerColIndex = 0;
|
|
931
|
+
const nextHeaderColIndex = () => {
|
|
932
|
+
headerColIndex += 1;
|
|
933
|
+
return hasColIndex ? headerColIndex : void 0;
|
|
934
|
+
};
|
|
935
|
+
return /* @__PURE__ */ jsxs(Root, {
|
|
936
|
+
...rootProps,
|
|
937
|
+
ref: mergedRootRef,
|
|
938
|
+
className: cx(metrics.css, surface !== null && SURFACE_ANCESTOR_CSS, className),
|
|
939
|
+
style: {
|
|
940
|
+
...variables,
|
|
941
|
+
...style
|
|
942
|
+
},
|
|
943
|
+
children: [/* @__PURE__ */ jsxs(Scroll, {
|
|
944
|
+
ref: scrollRef,
|
|
945
|
+
children: [/* @__PURE__ */ jsxs(TableElement, {
|
|
946
|
+
...tableAria,
|
|
947
|
+
role,
|
|
948
|
+
...ariaLabel === void 0 ? {} : { "aria-label": ariaLabel },
|
|
949
|
+
...isLoading ? { "aria-busy": true } : {},
|
|
950
|
+
...isMultiselectable ? { "aria-multiselectable": true } : {},
|
|
951
|
+
...ariaRowCount === void 0 ? {} : {
|
|
952
|
+
"aria-rowcount": ariaRowCount,
|
|
953
|
+
"aria-colcount": colCount
|
|
954
|
+
},
|
|
955
|
+
children: [
|
|
956
|
+
/* @__PURE__ */ jsx(Head, {
|
|
957
|
+
role: "rowgroup",
|
|
958
|
+
children: /* @__PURE__ */ jsxs(HeaderRow, {
|
|
959
|
+
role: "row",
|
|
960
|
+
...hasColIndex ? { "aria-rowindex": 1 } : {},
|
|
961
|
+
children: [
|
|
962
|
+
leadingHeaders.map((content, index) => {
|
|
963
|
+
const colIndex = nextHeaderColIndex();
|
|
964
|
+
return /* @__PURE__ */ jsx(HeaderCell, {
|
|
965
|
+
role: "columnheader",
|
|
966
|
+
...colIndex === void 0 ? {} : { "aria-colindex": colIndex },
|
|
967
|
+
className: cx(SYNTHETIC_CELL_CSS, PIN_TO_CSS_MAP[Side.LEFT], PINNED_HEADER_CSS),
|
|
968
|
+
style: syntheticOffset(index, metrics),
|
|
969
|
+
children: content
|
|
970
|
+
}, `leading-${index}`);
|
|
971
|
+
}),
|
|
972
|
+
visibleColumns.map((resolved) => {
|
|
973
|
+
const { column } = resolved;
|
|
974
|
+
const isSorted = sort?.columnId === column.id;
|
|
975
|
+
return /* @__PURE__ */ jsx(TableHeaderCell, {
|
|
976
|
+
resolved,
|
|
977
|
+
metrics,
|
|
978
|
+
sortState: column.canSort === true ? isSorted ? sort?.isDescending ? "descending" : "ascending" : "none" : void 0,
|
|
979
|
+
isCustomizable: canCustomizeColumns,
|
|
980
|
+
width: resolved.canResize ? columnLayout.getColumnWidth(column.id) : 0,
|
|
981
|
+
dropEdge: dropEdgeFor(column.id),
|
|
982
|
+
isDragged: drag?.columnId === column.id && drag.beforeId !== void 0,
|
|
983
|
+
colIndex: nextHeaderColIndex(),
|
|
984
|
+
onSortPress,
|
|
985
|
+
onResize: columnLayout.resizeColumn,
|
|
986
|
+
onLabelKeyDown,
|
|
987
|
+
onLabelPointerDown,
|
|
988
|
+
onLabelPointerMove,
|
|
989
|
+
onLabelPointerUp,
|
|
990
|
+
onLabelPointerCancel,
|
|
991
|
+
onLabelClickCapture,
|
|
992
|
+
registerCell,
|
|
993
|
+
registerButton
|
|
994
|
+
}, column.id);
|
|
995
|
+
}),
|
|
996
|
+
hasTrailingColumn && (() => {
|
|
997
|
+
const colIndex = nextHeaderColIndex();
|
|
998
|
+
return /* @__PURE__ */ jsx(HeaderCell, {
|
|
999
|
+
role: "columnheader",
|
|
1000
|
+
...colIndex === void 0 ? {} : { "aria-colindex": colIndex },
|
|
1001
|
+
className: cx("gx-TableCore-SYNTHETIC_CELL_CSS-s1g01kh5", PIN_TO_CSS_MAP[Side.RIGHT], PINNED_HEADER_CSS, trailingClassName),
|
|
1002
|
+
style: syntheticOffset(0, metrics),
|
|
1003
|
+
children: trailingHeader
|
|
1004
|
+
});
|
|
1005
|
+
})()
|
|
1006
|
+
]
|
|
1007
|
+
})
|
|
1008
|
+
}),
|
|
1009
|
+
/* @__PURE__ */ jsx(Body, {
|
|
1010
|
+
role: "rowgroup",
|
|
1011
|
+
className: bodyClassName,
|
|
1012
|
+
style: bodyStyle,
|
|
1013
|
+
children
|
|
1014
|
+
}),
|
|
1015
|
+
status !== null && /* @__PURE__ */ jsx(StatusBody, {
|
|
1016
|
+
role: "rowgroup",
|
|
1017
|
+
children: status
|
|
1018
|
+
}),
|
|
1019
|
+
hasFooter && /* @__PURE__ */ jsx(Foot, {
|
|
1020
|
+
role: "rowgroup",
|
|
1021
|
+
children: /* @__PURE__ */ jsxs(FooterRow, {
|
|
1022
|
+
role: "row",
|
|
1023
|
+
...footerRowIndex === void 0 ? {} : { "aria-rowindex": footerRowIndex },
|
|
1024
|
+
children: [
|
|
1025
|
+
Array.from({ length: leadingCount }, (_, index) => /* @__PURE__ */ jsx(TableCell, {
|
|
1026
|
+
role: "cell",
|
|
1027
|
+
...hasColIndex ? { "aria-colindex": index + 1 } : {},
|
|
1028
|
+
className: cx("gx-TableCore-SYNTHETIC_CELL_CSS-s1g01kh5", PIN_TO_CSS_MAP[Side.LEFT]),
|
|
1029
|
+
style: syntheticOffset(index, metrics)
|
|
1030
|
+
}, `leading-${index}`)),
|
|
1031
|
+
visibleColumns.map(({ column, pin, isPinEdge, cellStyle, position }) => /* @__PURE__ */ jsx(TableCell, {
|
|
1032
|
+
role: "cell",
|
|
1033
|
+
...hasColIndex ? { "aria-colindex": leadingCount + position + 1 } : {},
|
|
1034
|
+
className: cx(COLUMN_ALIGN_TO_CSS_MAP[column.align ?? "left"], pin !== void 0 && PIN_TO_CSS_MAP[pin], pin !== void 0 && isPinEdge && PIN_TO_EDGE_CSS_MAP[pin]),
|
|
1035
|
+
style: cellStyle,
|
|
1036
|
+
children: typeof column.footer === "string" ? /* @__PURE__ */ jsx(Text, {
|
|
1037
|
+
as: "span",
|
|
1038
|
+
size: metrics.textSize,
|
|
1039
|
+
weight: TextWeight.MEDIUM,
|
|
1040
|
+
lineClamp: 1,
|
|
1041
|
+
className: "gx-TableCore-CELL_TEXT_CSS-c1emgwoo",
|
|
1042
|
+
children: column.footer
|
|
1043
|
+
}) : column.footer
|
|
1044
|
+
}, column.id)),
|
|
1045
|
+
hasTrailingColumn && /* @__PURE__ */ jsx(TableCell, {
|
|
1046
|
+
role: "cell",
|
|
1047
|
+
...hasColIndex ? { "aria-colindex": colCount } : {},
|
|
1048
|
+
className: cx("gx-TableCore-SYNTHETIC_CELL_CSS-s1g01kh5", PIN_TO_CSS_MAP[Side.RIGHT], trailingClassName),
|
|
1049
|
+
style: syntheticOffset(0, metrics)
|
|
1050
|
+
})
|
|
1051
|
+
]
|
|
1052
|
+
})
|
|
1053
|
+
})
|
|
1054
|
+
]
|
|
1055
|
+
}), /* @__PURE__ */ jsx(Sentinel, {
|
|
1056
|
+
ref: sentinelRef,
|
|
1057
|
+
"aria-hidden": "true"
|
|
1058
|
+
})]
|
|
1059
|
+
}), /* @__PURE__ */ jsx(VisuallyHidden, {
|
|
1060
|
+
"aria-live": "polite",
|
|
1061
|
+
children: message
|
|
1062
|
+
})]
|
|
1063
|
+
});
|
|
1064
|
+
}
|
|
1065
|
+
/** @internal Header content of the select column: the select-all checkbox. */
|
|
1066
|
+
function TableSelectAllCheckbox({ metrics, isChecked, isIndeterminate, isDisabled, onToggle }) {
|
|
1067
|
+
return /* @__PURE__ */ jsx(CheckboxInput, {
|
|
1068
|
+
size: metrics.checkboxSize,
|
|
1069
|
+
isChecked,
|
|
1070
|
+
isIndeterminate,
|
|
1071
|
+
isDisabled,
|
|
1072
|
+
onChange: onToggle,
|
|
1073
|
+
ariaLabel: "Select all rows"
|
|
1074
|
+
});
|
|
1075
|
+
}
|
|
1076
|
+
//#endregion
|
|
1077
|
+
export { CELL_TEXT_CSS, COLUMN_ALIGN_TO_CSS_MAP, PIN_TO_CSS_MAP, PIN_TO_EDGE_CSS_MAP, ROW_NO_BORDER_CSS, SYNTHETIC_CELL_CSS, TABLE_DEFAULT_MAX_COLUMN_WIDTH, TABLE_DEFAULT_MIN_COLUMN_WIDTH, TABLE_DRAG_THRESHOLD_PX, TABLE_END_REACHED_MARGIN_PX, TABLE_LARGE_METRICS, TABLE_LOADING_MORE_ROW_COUNT, TABLE_LOADING_ROW_COUNT, TABLE_MEDIUM_METRICS, TABLE_PINNED_FALLBACK_WIDTH, TABLE_SMALL_METRICS, TABLE_Z_PINNED, TableBodyRow, TableCell, TableCellText, TableColumnsMenu, TableExpandedRow, TableFrame, TableHeaderCell, TableRow, TableSelectAllCheckbox, TableSkeletonRow, VIRTUAL_BODY_CSS, VIRTUAL_OVERSCAN, VIRTUAL_ROW_CSS, isDevelopment, useIsomorphicLayoutEffect };
|