@galaxy-io/dls 1.6.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (538) hide show
  1. package/README.md +47 -50
  2. package/biome/index.json +74 -0
  3. package/biome/plugins/no-hex-literal.grit +20 -0
  4. package/biome/plugins/no-inline-style.grit +13 -0
  5. package/biome/plugins/no-margin.grit +9 -0
  6. package/biome/plugins/warn/no-hex-literal.grit +23 -0
  7. package/biome/plugins/warn/no-inline-style.grit +13 -0
  8. package/biome/plugins/warn/no-margin.grit +9 -0
  9. package/dist/a11y/FocusScope.d.ts +44 -0
  10. package/dist/a11y/FocusScope.js +229 -0
  11. package/dist/a11y/VisuallyHidden.d.ts +21 -0
  12. package/dist/a11y/VisuallyHidden.js +30 -0
  13. package/dist/avatar/Avatar.d.ts +56 -14
  14. package/dist/avatar/Avatar.js +250 -96
  15. package/dist/avatar/AvatarGroup.d.ts +43 -0
  16. package/dist/avatar/AvatarGroup.js +153 -0
  17. package/dist/backgrounds/GridBackground.d.ts +48 -0
  18. package/dist/backgrounds/GridBackground.js +146 -0
  19. package/dist/beacons/Beacon.d.ts +86 -22
  20. package/dist/beacons/Beacon.js +170 -47
  21. package/dist/brand/GalaxyFilamentWordmark.d.ts +30 -0
  22. package/dist/brand/GalaxyFilamentWordmark.js +39 -0
  23. package/dist/brand/GalaxyLogomark.d.ts +26 -0
  24. package/dist/brand/GalaxyLogomark.js +41 -0
  25. package/dist/brand/GalaxyLogomarkAnimation.d.ts +36 -0
  26. package/dist/brand/GalaxyLogomarkAnimation.js +107 -0
  27. package/dist/brand/GalaxyWordmark.d.ts +30 -0
  28. package/dist/brand/GalaxyWordmark.js +63 -0
  29. package/dist/brand/assets/galaxy-logomark-animation.js +136678 -0
  30. package/dist/brand/brandMark.d.ts +26 -0
  31. package/dist/brand/brandMark.js +35 -0
  32. package/dist/buttons/Button.d.ts +148 -59
  33. package/dist/buttons/Button.js +437 -227
  34. package/dist/buttons/ButtonGroup.d.ts +38 -0
  35. package/dist/buttons/ButtonGroup.js +68 -0
  36. package/dist/buttons/CopyButton.d.ts +77 -0
  37. package/dist/buttons/CopyButton.js +65 -0
  38. package/dist/charts/AreaChart.d.ts +49 -0
  39. package/dist/charts/AreaChart.js +31 -0
  40. package/dist/charts/BarChart.d.ts +54 -67
  41. package/dist/charts/BarChart.js +136 -116
  42. package/dist/charts/ChartAxis.d.ts +35 -40
  43. package/dist/charts/ChartAxis.js +114 -90
  44. package/dist/charts/ChartCategoryTargets.d.ts +12 -26
  45. package/dist/charts/ChartCategoryTargets.js +32 -20
  46. package/dist/charts/ChartFrame.d.ts +69 -116
  47. package/dist/charts/ChartFrame.js +253 -119
  48. package/dist/charts/ChartGroupProvider.d.ts +30 -41
  49. package/dist/charts/ChartGroupProvider.js +20 -7
  50. package/dist/charts/ChartLegend.d.ts +27 -48
  51. package/dist/charts/ChartLegend.js +206 -125
  52. package/dist/charts/ChartMarkTargets.d.ts +12 -28
  53. package/dist/charts/ChartMarkTargets.js +33 -20
  54. package/dist/charts/ChartPrimitives.d.ts +50 -305
  55. package/dist/charts/ChartPrimitives.js +65 -413
  56. package/dist/charts/ChartTooltip.d.ts +20 -26
  57. package/dist/charts/ChartTooltip.js +77 -40
  58. package/dist/charts/Heatmap.d.ts +35 -0
  59. package/dist/charts/Heatmap.js +295 -0
  60. package/dist/charts/LineChart.d.ts +54 -47
  61. package/dist/charts/LineChart.js +159 -117
  62. package/dist/charts/PieChart.d.ts +32 -53
  63. package/dist/charts/PieChart.js +149 -135
  64. package/dist/charts/Sparkline.d.ts +107 -0
  65. package/dist/charts/Sparkline.js +244 -0
  66. package/dist/charts/StatChart.d.ts +37 -13
  67. package/dist/charts/StatChart.js +82 -35
  68. package/dist/charts/barChartGeometry.d.ts +138 -86
  69. package/dist/charts/barChartGeometry.js +122 -101
  70. package/dist/charts/barChartLegend.d.ts +14 -18
  71. package/dist/charts/barChartLegend.js +18 -13
  72. package/dist/charts/chartFormat.d.ts +12 -18
  73. package/dist/charts/chartFormat.js +20 -52
  74. package/dist/charts/chartPalette.d.ts +33 -0
  75. package/dist/charts/chartPalette.js +68 -0
  76. package/dist/charts/chartScales.d.ts +41 -108
  77. package/dist/charts/chartScales.js +62 -128
  78. package/dist/charts/constants.d.ts +96 -256
  79. package/dist/charts/constants.js +105 -275
  80. package/dist/charts/heatmapGeometry.d.ts +95 -0
  81. package/dist/charts/heatmapGeometry.js +155 -0
  82. package/dist/charts/lineChartGeometry.d.ts +108 -58
  83. package/dist/charts/lineChartGeometry.js +120 -78
  84. package/dist/charts/pieChartGeometry.d.ts +66 -40
  85. package/dist/charts/pieChartGeometry.js +68 -38
  86. package/dist/charts/types.d.ts +197 -466
  87. package/dist/charts/types.js +55 -144
  88. package/dist/charts/useCartesianChartLayout.d.ts +28 -59
  89. package/dist/charts/useCartesianChartLayout.js +47 -32
  90. package/dist/charts/useChartDimensions.d.ts +19 -40
  91. package/dist/charts/useChartDimensions.js +40 -56
  92. package/dist/charts/useChartFormatters.d.ts +6 -15
  93. package/dist/charts/useChartFormatters.js +4 -9
  94. package/dist/charts/useChartInteraction.d.ts +47 -116
  95. package/dist/charts/useChartInteraction.js +95 -71
  96. package/dist/charts/useChartTooltipPosition.d.ts +29 -39
  97. package/dist/charts/useChartTooltipPosition.js +14 -5
  98. package/dist/charts/useSeriesColorResolver.d.ts +11 -33
  99. package/dist/charts/useSeriesColorResolver.js +19 -12
  100. package/dist/chips/Chip.d.ts +155 -44
  101. package/dist/chips/Chip.js +329 -155
  102. package/dist/chips/ChipGroup.d.ts +53 -0
  103. package/dist/chips/ChipGroup.js +98 -0
  104. package/dist/drawer/Drawer.d.ts +81 -17
  105. package/dist/drawer/Drawer.js +370 -65
  106. package/dist/dropdown/Dropdown.d.ts +80 -63
  107. package/dist/dropdown/Dropdown.js +127 -129
  108. package/dist/editor/CodeEditor.d.ts +119 -40
  109. package/dist/editor/CodeEditor.js +490 -400
  110. package/dist/editor/CodeEditorReactWidget.d.ts +20 -17
  111. package/dist/editor/CodeEditorReactWidget.js +28 -21
  112. package/dist/feedback/Alert.d.ts +49 -0
  113. package/dist/feedback/Alert.js +172 -0
  114. package/dist/feedback/EmptyState.d.ts +39 -0
  115. package/dist/feedback/EmptyState.js +109 -0
  116. package/dist/feedback/ProgressBar.d.ts +125 -0
  117. package/dist/feedback/ProgressBar.js +183 -0
  118. package/dist/feedback/ProgressCircle.d.ts +99 -0
  119. package/dist/feedback/ProgressCircle.js +187 -0
  120. package/dist/feedback/Skeleton.d.ts +69 -0
  121. package/dist/feedback/Skeleton.js +130 -0
  122. package/dist/feedback/Spinner.d.ts +63 -0
  123. package/dist/feedback/Spinner.js +141 -0
  124. package/dist/fonts.css +70 -0
  125. package/dist/hooks/internal/useIsClient.d.ts +2 -0
  126. package/dist/hooks/internal/useIsClient.js +14 -0
  127. package/dist/hooks/useClipboard.d.ts +19 -0
  128. package/dist/hooks/useClipboard.js +45 -0
  129. package/dist/hooks/useControlledOpenState.d.ts +21 -0
  130. package/dist/hooks/useControlledOpenState.js +19 -0
  131. package/dist/hooks/useControlledState.d.ts +19 -0
  132. package/dist/hooks/useControlledState.js +22 -0
  133. package/dist/hooks/useDebouncedValue.d.ts +14 -0
  134. package/dist/hooks/useDebouncedValue.js +33 -0
  135. package/dist/hooks/useDisclosure.d.ts +26 -0
  136. package/dist/hooks/useDisclosure.js +36 -0
  137. package/dist/hooks/useDismiss.d.ts +23 -27
  138. package/dist/hooks/useDismiss.js +39 -27
  139. package/dist/hooks/useElementClientSize.d.ts +10 -10
  140. package/dist/hooks/useElementClientSize.js +8 -11
  141. package/dist/hooks/useElementWidth.d.ts +6 -13
  142. package/dist/hooks/useElementWidth.js +6 -14
  143. package/dist/hooks/useField.d.ts +47 -0
  144. package/dist/hooks/useField.js +40 -0
  145. package/dist/hooks/useHotkey.d.ts +77 -0
  146. package/dist/hooks/useHotkey.js +246 -0
  147. package/dist/hooks/useIsMac.d.ts +12 -0
  148. package/dist/hooks/useIsMac.js +27 -0
  149. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +17 -0
  150. package/dist/hooks/useIsomorphicLayoutEffect.js +20 -0
  151. package/dist/hooks/useLocalStorage.d.ts +28 -0
  152. package/dist/hooks/useLocalStorage.js +145 -0
  153. package/dist/hooks/useMediaQuery.d.ts +11 -0
  154. package/dist/hooks/useMediaQuery.js +23 -0
  155. package/dist/hooks/usePrefersReducedMotion.d.ts +12 -0
  156. package/dist/hooks/usePrefersReducedMotion.js +25 -0
  157. package/dist/hooks/useResize.d.ts +42 -62
  158. package/dist/hooks/useResize.js +43 -31
  159. package/dist/icons/Icon.d.ts +64 -37
  160. package/dist/icons/Icon.js +96 -37
  161. package/dist/icons/internal/IconSlot.d.ts +10 -0
  162. package/dist/icons/internal/IconSlot.js +32 -0
  163. package/dist/inputs/CheckboxGroup.d.ts +115 -0
  164. package/dist/inputs/CheckboxGroup.js +183 -0
  165. package/dist/inputs/CheckboxInput.d.ts +98 -28
  166. package/dist/inputs/CheckboxInput.js +218 -88
  167. package/dist/inputs/ColorInput.d.ts +115 -29
  168. package/dist/inputs/ColorInput.js +748 -326
  169. package/dist/inputs/CopyInput.d.ts +49 -20
  170. package/dist/inputs/CopyInput.js +57 -49
  171. package/dist/inputs/CronInput.d.ts +94 -0
  172. package/dist/inputs/CronInput.js +618 -0
  173. package/dist/inputs/DateInput.d.ts +175 -28
  174. package/dist/inputs/DateInput.js +1109 -451
  175. package/dist/inputs/DurationInput.d.ts +101 -0
  176. package/dist/inputs/DurationInput.js +441 -0
  177. package/dist/inputs/Field.d.ts +75 -0
  178. package/dist/inputs/Field.js +247 -0
  179. package/dist/inputs/Fieldset.d.ts +53 -0
  180. package/dist/inputs/Fieldset.js +149 -0
  181. package/dist/inputs/FileInput.d.ts +110 -0
  182. package/dist/inputs/FileInput.js +476 -0
  183. package/dist/inputs/Input.d.ts +148 -187
  184. package/dist/inputs/Input.js +339 -259
  185. package/dist/inputs/KeyValueInput.d.ts +120 -0
  186. package/dist/inputs/KeyValueInput.js +383 -0
  187. package/dist/inputs/MultiSelectInput.d.ts +165 -54
  188. package/dist/inputs/MultiSelectInput.js +175 -559
  189. package/dist/inputs/NumberInput.d.ts +65 -9
  190. package/dist/inputs/NumberInput.js +197 -40
  191. package/dist/inputs/PasswordInput.d.ts +17 -12
  192. package/dist/inputs/PasswordInput.js +33 -33
  193. package/dist/inputs/PinInput.d.ts +117 -0
  194. package/dist/inputs/PinInput.js +364 -0
  195. package/dist/inputs/RadioGroup.d.ts +115 -0
  196. package/dist/inputs/RadioGroup.js +179 -0
  197. package/dist/inputs/RadioInput.d.ts +87 -24
  198. package/dist/inputs/RadioInput.js +182 -95
  199. package/dist/inputs/SearchInput.d.ts +66 -0
  200. package/dist/inputs/SearchInput.js +156 -0
  201. package/dist/inputs/SelectInput.d.ts +195 -55
  202. package/dist/inputs/SelectInput.js +1308 -446
  203. package/dist/inputs/SliderInput.d.ts +150 -30
  204. package/dist/inputs/SliderInput.js +441 -186
  205. package/dist/inputs/SwitchInput.d.ts +109 -0
  206. package/dist/inputs/SwitchInput.js +248 -0
  207. package/dist/inputs/TagInput.d.ts +117 -0
  208. package/dist/inputs/TagInput.js +408 -0
  209. package/dist/inputs/TextAreaInput.d.ts +146 -44
  210. package/dist/inputs/TextAreaInput.js +292 -198
  211. package/dist/inputs/TextInput.d.ts +4 -13
  212. package/dist/inputs/TextInput.js +13 -48
  213. package/dist/inputs/ToggleInput.d.ts +120 -22
  214. package/dist/inputs/ToggleInput.js +262 -116
  215. package/dist/inputs/internal/bareField.d.ts +18 -0
  216. package/dist/inputs/internal/bareField.js +38 -0
  217. package/dist/inputs/internal/devWarn.d.ts +7 -0
  218. package/dist/inputs/internal/devWarn.js +30 -0
  219. package/dist/inputs/internal/fieldFrame.d.ts +34 -0
  220. package/dist/inputs/internal/fieldFrame.js +64 -0
  221. package/dist/inputs/internal/fieldWiring.d.ts +50 -0
  222. package/dist/inputs/internal/fieldWiring.js +38 -0
  223. package/dist/inputs/internal/innerButton.d.ts +2 -0
  224. package/dist/inputs/internal/innerButton.js +24 -0
  225. package/dist/inputs/internal/ownField.d.ts +45 -0
  226. package/dist/inputs/internal/ownField.js +58 -0
  227. package/dist/inputs/internal/predicates.d.ts +9 -0
  228. package/dist/inputs/internal/predicates.js +11 -0
  229. package/dist/inputs/internal/useComboboxPopover.d.ts +46 -0
  230. package/dist/inputs/internal/useComboboxPopover.js +92 -0
  231. package/dist/json/JsonViewer.d.ts +62 -0
  232. package/dist/json/JsonViewer.js +483 -0
  233. package/dist/layout/Box.d.ts +87 -0
  234. package/dist/layout/Box.js +109 -0
  235. package/dist/layout/Divider.d.ts +25 -0
  236. package/dist/layout/Divider.js +70 -0
  237. package/dist/layout/Flex.d.ts +139 -0
  238. package/dist/layout/Flex.js +165 -0
  239. package/dist/layout/FlexItem.d.ts +72 -0
  240. package/dist/layout/FlexItem.js +84 -0
  241. package/dist/layout/Grid.d.ts +140 -0
  242. package/dist/layout/Grid.js +178 -0
  243. package/dist/layout/Portal.d.ts +29 -0
  244. package/dist/layout/Portal.js +27 -0
  245. package/dist/layout/ResizablePanels.d.ts +88 -0
  246. package/dist/layout/ResizablePanels.js +198 -0
  247. package/dist/layout/ResizeHandle.d.ts +48 -0
  248. package/dist/layout/ResizeHandle.js +143 -0
  249. package/dist/layout/ScrollArea.d.ts +30 -0
  250. package/dist/layout/ScrollArea.js +138 -0
  251. package/dist/links/Link.d.ts +101 -1
  252. package/dist/links/Link.js +166 -4
  253. package/dist/lists/BulletedList.d.ts +25 -7
  254. package/dist/lists/BulletedList.js +72 -27
  255. package/dist/lists/DescriptionList.d.ts +91 -0
  256. package/dist/lists/DescriptionList.js +147 -0
  257. package/dist/menu/ContextMenu.d.ts +64 -0
  258. package/dist/menu/ContextMenu.js +34 -0
  259. package/dist/menu/Menu.d.ts +280 -0
  260. package/dist/menu/Menu.js +1003 -0
  261. package/dist/modal/ConfirmDialog.d.ts +55 -0
  262. package/dist/modal/ConfirmDialog.js +151 -0
  263. package/dist/modal/Modal.d.ts +64 -14
  264. package/dist/modal/Modal.js +189 -48
  265. package/dist/navigation/Breadcrumbs.d.ts +65 -0
  266. package/dist/navigation/Breadcrumbs.js +243 -0
  267. package/dist/navigation/CommandPalette.d.ts +83 -0
  268. package/dist/navigation/CommandPalette.js +509 -0
  269. package/dist/navigation/Pagination.d.ts +87 -0
  270. package/dist/navigation/Pagination.js +300 -0
  271. package/dist/navigation/SidebarNav.d.ts +107 -0
  272. package/dist/navigation/SidebarNav.js +341 -0
  273. package/dist/navigation/Stepper.d.ts +52 -0
  274. package/dist/navigation/Stepper.js +207 -0
  275. package/dist/navigation/Tabs.d.ts +113 -0
  276. package/dist/navigation/Tabs.js +543 -0
  277. package/dist/navigation/Topbar.d.ts +20 -0
  278. package/dist/navigation/Topbar.js +62 -0
  279. package/dist/overlay/OverlayProvider.d.ts +28 -32
  280. package/dist/overlay/OverlayProvider.js +42 -93
  281. package/dist/overlay/useOverlay.d.ts +88 -12
  282. package/dist/overlay/useOverlay.js +220 -43
  283. package/dist/overlays/Popover.d.ts +114 -0
  284. package/dist/overlays/Popover.js +389 -0
  285. package/dist/shapes/Circle.d.ts +84 -8
  286. package/dist/shapes/Circle.js +122 -20
  287. package/dist/shapes/Square.d.ts +84 -8
  288. package/dist/shapes/Square.js +123 -20
  289. package/dist/styles/mixins.d.ts +35 -0
  290. package/dist/styles/mixins.js +60 -0
  291. package/dist/styles.css +1 -202
  292. package/dist/table/InfiniteSpreadsheet.d.ts +140 -10
  293. package/dist/table/InfiniteSpreadsheet.js +762 -225
  294. package/dist/table/InfiniteTable.d.ts +116 -14
  295. package/dist/table/InfiniteTable.js +287 -429
  296. package/dist/table/SpreadsheetCellEditor.d.ts +54 -6
  297. package/dist/table/SpreadsheetCellEditor.js +163 -84
  298. package/dist/table/TableCore.d.ts +252 -0
  299. package/dist/table/TableCore.js +1077 -0
  300. package/dist/table/VirtualizedInfiniteTable.d.ts +104 -14
  301. package/dist/table/VirtualizedInfiniteTable.js +280 -219
  302. package/dist/table/types.d.ts +66 -244
  303. package/dist/table/types.js +0 -51
  304. package/dist/table/useInfiniteScrollSentinel.d.ts +25 -21
  305. package/dist/table/useInfiniteScrollSentinel.js +38 -30
  306. package/dist/table/useSpreadsheetCellNavigation.d.ts +44 -0
  307. package/dist/table/useSpreadsheetCellNavigation.js +141 -0
  308. package/dist/table/useTableColumnLayout.d.ts +90 -25
  309. package/dist/table/useTableColumnLayout.js +255 -50
  310. package/dist/table/useTableKeyboardNavigation.d.ts +32 -21
  311. package/dist/table/useTableKeyboardNavigation.js +95 -71
  312. package/dist/table/useTableRowSelection.d.ts +24 -25
  313. package/dist/table/useTableRowSelection.js +57 -84
  314. package/dist/table/useTableVirtualizer.d.ts +20 -0
  315. package/dist/table/useTableVirtualizer.js +48 -0
  316. package/dist/text/Bold.d.ts +5 -6
  317. package/dist/text/Bold.js +16 -15
  318. package/dist/text/Code.d.ts +5 -6
  319. package/dist/text/Code.js +16 -25
  320. package/dist/text/CodeBlock.d.ts +77 -0
  321. package/dist/text/CodeBlock.js +373 -0
  322. package/dist/text/EditableText.d.ts +55 -15
  323. package/dist/text/EditableText.js +153 -135
  324. package/dist/text/Ellipsis.d.ts +34 -8
  325. package/dist/text/Ellipsis.js +55 -23
  326. package/dist/text/Kbd.d.ts +72 -0
  327. package/dist/text/Kbd.js +284 -0
  328. package/dist/text/MarkdownText.d.ts +27 -10
  329. package/dist/text/MarkdownText.js +317 -300
  330. package/dist/text/RequiredMarker.d.ts +17 -5
  331. package/dist/text/RequiredMarker.js +34 -36
  332. package/dist/text/Selectable.d.ts +5 -6
  333. package/dist/text/Selectable.js +16 -13
  334. package/dist/text/Span.d.ts +82 -0
  335. package/dist/text/Span.js +115 -0
  336. package/dist/text/Text.d.ts +128 -41
  337. package/dist/text/Text.js +209 -76
  338. package/dist/theme/GalaxyProvider.d.ts +75 -0
  339. package/dist/theme/GalaxyProvider.js +223 -0
  340. package/dist/theme/ThemeSwitcher.d.ts +52 -0
  341. package/dist/theme/ThemeSwitcher.js +94 -0
  342. package/dist/theme/enums.d.ts +118 -0
  343. package/dist/theme/enums.js +144 -0
  344. package/dist/theme/tokens/dark.d.ts +2 -0
  345. package/dist/theme/tokens/dark.js +275 -0
  346. package/dist/theme/tokens/generate.d.ts +15 -0
  347. package/dist/theme/tokens/generate.js +47 -0
  348. package/dist/theme/tokens/light.d.ts +2 -0
  349. package/dist/theme/tokens/light.js +274 -0
  350. package/dist/theme/tokens/palette.d.ts +14 -0
  351. package/dist/theme/tokens/palette.js +153 -0
  352. package/dist/theme/tokens/scales.d.ts +26 -0
  353. package/dist/theme/tokens/scales.js +154 -0
  354. package/dist/theme/tokens/t.d.ts +3 -0
  355. package/dist/theme/tokens/t.js +25 -0
  356. package/dist/theme/tokens/types.d.ts +189 -0
  357. package/dist/theme/tokens/types.js +0 -0
  358. package/dist/theme/useGalaxyTheme.d.ts +46 -0
  359. package/dist/theme/useGalaxyTheme.js +36 -0
  360. package/dist/theme/useInverseScope.d.ts +18 -0
  361. package/dist/theme/useInverseScope.js +33 -0
  362. package/dist/three/GalaxyLogomark3D.d.ts +46 -0
  363. package/dist/three/GalaxyLogomark3D.js +134 -0
  364. package/dist/three/assets/galaxy-logomark.js +4 -0
  365. package/dist/three/galaxyLogomark3DScene.d.ts +27 -0
  366. package/dist/three/galaxyLogomark3DScene.js +165 -0
  367. package/dist/timeline/Timeline.d.ts +99 -0
  368. package/dist/timeline/Timeline.js +269 -0
  369. package/dist/toast/Toast.d.ts +43 -19
  370. package/dist/toast/Toast.js +130 -89
  371. package/dist/toast/ToastProvider.d.ts +23 -23
  372. package/dist/toast/ToastProvider.js +298 -101
  373. package/dist/toast/ToastViewport.d.ts +12 -0
  374. package/dist/toast/ToastViewport.js +210 -0
  375. package/dist/toast/useToast.d.ts +139 -5
  376. package/dist/toast/useToast.js +15 -13
  377. package/dist/tokens.css +654 -0
  378. package/dist/tooltip/Tooltip.d.ts +64 -44
  379. package/dist/tooltip/Tooltip.js +280 -73
  380. package/dist/tooltip/internal/LazyTooltip.d.ts +7 -0
  381. package/dist/tooltip/internal/LazyTooltip.js +53 -0
  382. package/dist/transform/Fade.d.ts +33 -11
  383. package/dist/transform/Fade.js +71 -19
  384. package/dist/transform/Flasher.d.ts +25 -0
  385. package/dist/transform/Flasher.js +39 -0
  386. package/dist/transform/Rotate.d.ts +24 -12
  387. package/dist/transform/Rotate.js +36 -22
  388. package/dist/transform/ScaleFade.d.ts +36 -11
  389. package/dist/transform/ScaleFade.js +86 -28
  390. package/dist/transform/internal/CollapseMotion.d.ts +10 -0
  391. package/dist/transform/internal/CollapseMotion.js +65 -0
  392. package/dist/tree/Tree.d.ts +85 -0
  393. package/dist/tree/Tree.js +387 -0
  394. package/dist/tree/treeRow.d.ts +39 -0
  395. package/dist/tree/treeRow.js +75 -0
  396. package/dist/utils/colors.d.ts +46 -13
  397. package/dist/utils/colors.js +92 -34
  398. package/dist/utils/css.d.ts +23 -0
  399. package/dist/utils/css.js +30 -0
  400. package/dist/utils/format.d.ts +58 -0
  401. package/dist/utils/format.js +220 -0
  402. package/dist/vite/index.d.ts +16 -0
  403. package/dist/vite/index.js +52 -0
  404. package/dist/widget/Widget.d.ts +164 -48
  405. package/dist/widget/Widget.js +335 -96
  406. package/dist/widget/WidgetGroup.d.ts +36 -0
  407. package/dist/widget/WidgetGroup.js +103 -0
  408. package/package.json +851 -157
  409. package/dist/accordion/Accordion.d.ts +0 -54
  410. package/dist/accordion/Accordion.js +0 -183
  411. package/dist/assets/components/GalaxyFilamentWordmarkDark.d.ts +0 -3
  412. package/dist/assets/components/GalaxyFilamentWordmarkDark.js +0 -14
  413. package/dist/assets/components/GalaxyFilamentWordmarkLight.d.ts +0 -3
  414. package/dist/assets/components/GalaxyFilamentWordmarkLight.js +0 -14
  415. package/dist/assets/components/GalaxyLogomarkDark.d.ts +0 -3
  416. package/dist/assets/components/GalaxyLogomarkDark.js +0 -11
  417. package/dist/assets/components/GalaxyLogomarkLight.d.ts +0 -3
  418. package/dist/assets/components/GalaxyLogomarkLight.js +0 -17
  419. package/dist/assets/components/GalaxyWordmarkDark.d.ts +0 -3
  420. package/dist/assets/components/GalaxyWordmarkDark.js +0 -15
  421. package/dist/assets/components/GalaxyWordmarkLight.d.ts +0 -3
  422. package/dist/assets/components/GalaxyWordmarkLight.js +0 -28
  423. package/dist/assets/models/galaxy-animation.js +0 -136666
  424. package/dist/assets/models/galaxy-logomark.js +0 -4
  425. package/dist/avatar/AvatarShimmer.d.ts +0 -30
  426. package/dist/avatar/AvatarShimmer.js +0 -22
  427. package/dist/backgrounds/CellGridBackground.d.ts +0 -24
  428. package/dist/backgrounds/CellGridBackground.js +0 -44
  429. package/dist/backgrounds/CrossGridBackground.d.ts +0 -26
  430. package/dist/backgrounds/CrossGridBackground.js +0 -49
  431. package/dist/backgrounds/DotGridBackground.d.ts +0 -24
  432. package/dist/backgrounds/DotGridBackground.js +0 -47
  433. package/dist/badge/Badge.d.ts +0 -42
  434. package/dist/badge/Badge.js +0 -99
  435. package/dist/charts/ChartEmptyState.d.ts +0 -17
  436. package/dist/charts/ChartEmptyState.js +0 -29
  437. package/dist/charts/ProgressBar.d.ts +0 -29
  438. package/dist/charts/ProgressBar.js +0 -65
  439. package/dist/charts/chartTheme.d.ts +0 -18
  440. package/dist/charts/chartTheme.js +0 -26
  441. package/dist/containers/FlexItem.d.ts +0 -50
  442. package/dist/containers/FlexItem.js +0 -91
  443. package/dist/containers/FlexWrapper.d.ts +0 -96
  444. package/dist/containers/FlexWrapper.js +0 -143
  445. package/dist/containers/GridWrapper.d.ts +0 -79
  446. package/dist/containers/GridWrapper.js +0 -125
  447. package/dist/containers/Spacing.d.ts +0 -23
  448. package/dist/containers/Spacing.js +0 -59
  449. package/dist/containers/Wrapper.d.ts +0 -26
  450. package/dist/containers/Wrapper.js +0 -54
  451. package/dist/dividers/HorizontalDivider.d.ts +0 -7
  452. package/dist/dividers/HorizontalDivider.js +0 -39
  453. package/dist/dividers/VerticalDivider.d.ts +0 -6
  454. package/dist/dividers/VerticalDivider.js +0 -21
  455. package/dist/icons/GalaxyFilamentWordmark.d.ts +0 -11
  456. package/dist/icons/GalaxyFilamentWordmark.js +0 -25
  457. package/dist/icons/GalaxyLogomark.d.ts +0 -13
  458. package/dist/icons/GalaxyLogomark.js +0 -27
  459. package/dist/icons/GalaxyLogomark3D.d.ts +0 -56
  460. package/dist/icons/GalaxyLogomark3D.js +0 -319
  461. package/dist/icons/GalaxyLogomarkAnimation.d.ts +0 -18
  462. package/dist/icons/GalaxyLogomarkAnimation.js +0 -48
  463. package/dist/icons/GalaxyWordmark.d.ts +0 -11
  464. package/dist/icons/GalaxyWordmark.js +0 -25
  465. package/dist/inputs/MultiTextInput.d.ts +0 -32
  466. package/dist/inputs/MultiTextInput.js +0 -180
  467. package/dist/inputs/SwitcherInput.d.ts +0 -30
  468. package/dist/inputs/SwitcherInput.js +0 -81
  469. package/dist/inputs/hooks.d.ts +0 -10
  470. package/dist/inputs/hooks.js +0 -22
  471. package/dist/overlay/constants.d.ts +0 -28
  472. package/dist/overlay/constants.js +0 -37
  473. package/dist/resizable/HorizontalResizeHandle.d.ts +0 -17
  474. package/dist/resizable/HorizontalResizeHandle.js +0 -38
  475. package/dist/resizable/VerticalResizeHandle.d.ts +0 -18
  476. package/dist/resizable/VerticalResizeHandle.js +0 -39
  477. package/dist/table/SpreadsheetCell.d.ts +0 -21
  478. package/dist/table/SpreadsheetCell.js +0 -71
  479. package/dist/table/SpreadsheetHeaderCell.d.ts +0 -23
  480. package/dist/table/SpreadsheetHeaderCell.js +0 -91
  481. package/dist/table/SpreadsheetMenuItem.d.ts +0 -14
  482. package/dist/table/SpreadsheetMenuItem.js +0 -33
  483. package/dist/table/SpreadsheetPrimitives.d.ts +0 -172
  484. package/dist/table/SpreadsheetPrimitives.js +0 -105
  485. package/dist/table/SpreadsheetRow.d.ts +0 -33
  486. package/dist/table/SpreadsheetRow.js +0 -73
  487. package/dist/table/SpreadsheetRowActionCell.d.ts +0 -14
  488. package/dist/table/SpreadsheetRowActionCell.js +0 -51
  489. package/dist/table/TableExpandCell.d.ts +0 -11
  490. package/dist/table/TableExpandCell.js +0 -24
  491. package/dist/table/TableExpandedRow.d.ts +0 -16
  492. package/dist/table/TableExpandedRow.js +0 -77
  493. package/dist/table/TableHeaderCellContent.d.ts +0 -30
  494. package/dist/table/TableHeaderCellContent.js +0 -48
  495. package/dist/table/TablePrimitives.d.ts +0 -313
  496. package/dist/table/TablePrimitives.js +0 -302
  497. package/dist/table/TableSelectCell.d.ts +0 -18
  498. package/dist/table/TableSelectCell.js +0 -27
  499. package/dist/table/TableStatusRow.d.ts +0 -18
  500. package/dist/table/TableStatusRow.js +0 -50
  501. package/dist/table/useSpreadsheetEditing.d.ts +0 -13
  502. package/dist/table/useSpreadsheetEditing.js +0 -41
  503. package/dist/table/useTableColumnResize.d.ts +0 -38
  504. package/dist/table/useTableColumnResize.js +0 -155
  505. package/dist/table/useTableRowExpansion.d.ts +0 -24
  506. package/dist/table/useTableRowExpansion.js +0 -62
  507. package/dist/table/utils.d.ts +0 -50
  508. package/dist/table/utils.js +0 -78
  509. package/dist/text/HotKeys.d.ts +0 -30
  510. package/dist/text/HotKeys.js +0 -74
  511. package/dist/text/Paragraph.d.ts +0 -33
  512. package/dist/text/Paragraph.js +0 -83
  513. package/dist/text/TextShimmer.d.ts +0 -14
  514. package/dist/text/TextShimmer.js +0 -34
  515. package/dist/theme/GalaxyTheme.d.ts +0 -67
  516. package/dist/theme/GalaxyTheme.js +0 -119
  517. package/dist/theme/constants.d.ts +0 -8
  518. package/dist/theme/constants.js +0 -38
  519. package/dist/theme/index.d.ts +0 -6
  520. package/dist/theme/index.js +0 -7
  521. package/dist/theme/types.d.ts +0 -195
  522. package/dist/theme/types.js +0 -10
  523. package/dist/theme/typography.d.ts +0 -2
  524. package/dist/theme/typography.js +0 -73
  525. package/dist/theme/variants/dark.d.ts +0 -2
  526. package/dist/theme/variants/dark.js +0 -125
  527. package/dist/theme/variants/light.d.ts +0 -2
  528. package/dist/theme/variants/light.js +0 -125
  529. package/dist/toast/ToastContainer.d.ts +0 -10
  530. package/dist/toast/ToastContainer.js +0 -31
  531. package/dist/toast/ToastWrapper.d.ts +0 -6
  532. package/dist/toast/ToastWrapper.js +0 -27
  533. package/dist/transform/Flash.d.ts +0 -7
  534. package/dist/transform/Flash.js +0 -18
  535. package/dist/transform/Spin.d.ts +0 -14
  536. package/dist/transform/Spin.js +0 -25
  537. package/dist/utils/linaria.d.ts +0 -1
  538. 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 };