@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
@@ -1,19 +1,109 @@
1
- import React from "react";
2
- import { type VirtualizedInfiniteTableProps } from "./types";
3
- export { ColumnAlign, ColumnPin, ColumnResizeMode, TableDensity, TableVariant } from "./types";
4
- export type { ColumnDef, ColumnSizingState, Row, VirtualizedInfiniteTableProps } from "./types";
5
1
  /**
6
- * Kept as an alias of the props type this component has always exported under
7
- * this name, so `import type { InfiniteTableProps }` from this module still
8
- * resolves.
2
+ * InfiniteTable for very long lists: the same columns, header, sizes, sort indicator, row
3
+ * actions, column arrangement and status states, but only the rows in view (plus
4
+ * `VIRTUAL_OVERSCAN` above and below) are in the DOM. The app gives a row count and
5
+ * `getRowData(index)` instead of an array; rows it has not loaded yet show as skeleton rows in
6
+ * place. Every row is exactly the `size` rung's height; there is no selection, no expansion and
7
+ * no client-side sorting (the app re-queries when `sort` changes).
8
+ *
9
+ * Built on the shared table core (`TableCore`, `useTableColumnLayout`,
10
+ * `useTableKeyboardNavigation`, `useInfiniteScrollSentinel`) plus `useTableVirtualizer`
11
+ * (`@tanstack/react-virtual`, an optional peer). It imports nothing from `InfiniteTable`, so it
12
+ * never needs `@tanstack/react-table`.
9
13
  */
10
- export type InfiniteTableProps<TData> = VirtualizedInfiniteTableProps<TData>;
14
+ import { type AriaAttributes, type CSSProperties, type KeyboardEvent, type MouseEvent, type ReactElement, type ReactNode, type RefAttributes } from "react";
15
+ import type { TableColumn, TableColumnLayout, TableSort } from "./types.js";
16
+ /** Row rung of the table (canonical subset; the 1.x TableDensity members). Same rows as InfiniteTableSize. */
17
+ export declare enum VirtualizedInfiniteTableSize {
18
+ /** 32px rows, body_sm text. */
19
+ SMALL = "SMALL",
20
+ /** 48px rows, body_md text. The default. */
21
+ MEDIUM = "MEDIUM",
22
+ /** 52px rows, body_lg text. */
23
+ LARGE = "LARGE"
24
+ }
25
+ export interface VirtualizedInfiniteTableProps<TData> extends AriaAttributes {
26
+ /** The columns in their default order. Same column type as InfiniteTable (`@galaxy-io/dls/table/types`). */
27
+ columns: TableColumn<TData>[];
28
+ /** Number of rows the table can show, loaded or not. Grow it as pages arrive. */
29
+ totalRowCount: number;
30
+ /** Returns the row at `index`, or `undefined` while it is not loaded (it shows as a skeleton row). Called for visible rows only; must be cheap. */
31
+ getRowData: (index: number) => TData | undefined;
32
+ /**
33
+ * Stable identity of a loaded row, for `activeRowId` and React keys.
34
+ * @default (row, index) => String(index)
35
+ */
36
+ getRowId?: (row: TData, index: number) => string;
37
+ /**
38
+ * Row rung: 32 / 48 / 52px rows. Every row is exactly this tall.
39
+ * @default VirtualizedInfiniteTableSize.MEDIUM
40
+ */
41
+ size?: VirtualizedInfiniteTableSize;
42
+ /**
43
+ * Rows are loading: skeleton rows replace an empty body, or follow the last row while more load. Sets `aria-busy`.
44
+ * @default false
45
+ */
46
+ isLoading?: boolean;
47
+ /** Message from the app when loading failed. Shown as an error state in an empty body, or as an error row after the last row. `onEndReached` pauses while it is set. */
48
+ error?: string;
49
+ /**
50
+ * Shown in the body when `totalRowCount` is 0 and the table is neither loading nor in error.
51
+ * @default <EmptyState header="No results" />
52
+ */
53
+ emptyState?: ReactNode;
54
+ /** Called when the last row comes within 500px of view, and again only after `totalRowCount` grows. */
55
+ onEndReached?: () => void;
56
+ /** Called when a loaded row is clicked or Enter is pressed on it. Not called for clicks on a control inside the row. */
57
+ onRowClick?: (row: TData, event: MouseEvent<HTMLTableRowElement> | KeyboardEvent<HTMLTableRowElement>) => void;
58
+ /** Id of the row shown as current, such as the one open in a side panel. Display only: set it from `onRowClick`. */
59
+ activeRowId?: string | null;
60
+ /** Menu rows (`MenuItem`, `MenuSeparator`, …) for a loaded row's actions menu, opened from a trailing "…" button. Return `null` for a row with no actions. */
61
+ rowActions?: (row: TData, rowIndex: number) => ReactNode;
62
+ /** Controlled sorted column, shown in the header. The table never reorders rows itself: the app re-queries with the new sort. */
63
+ sort?: TableSort | null;
64
+ /**
65
+ * Initial sort while uncontrolled.
66
+ * @default null
67
+ */
68
+ defaultSort?: TableSort | null;
69
+ /** Called with the next sort when a sortable header is pressed. Reset the data (and scroll) when it changes. */
70
+ onSortChange?: (sort: TableSort | null) => void;
71
+ /** Controlled column arrangement: order, hidden column ids and widths. Persist it to keep a user's layout. */
72
+ columnLayout?: TableColumnLayout;
73
+ /**
74
+ * Initial arrangement while uncontrolled (for example, columns hidden by default).
75
+ * @default {}
76
+ */
77
+ defaultColumnLayout?: TableColumnLayout;
78
+ /** Called with the full new arrangement when the user resizes, moves, hides, shows or resets columns. Fires on every resize step; debounce before saving. */
79
+ onColumnLayoutChange?: (columnLayout: TableColumnLayout) => void;
80
+ /**
81
+ * Adds a drag handle at the end of each header cell (arrow keys too). Columns opt out with `canResize: false`.
82
+ * @default false
83
+ */
84
+ canResizeColumns?: boolean;
85
+ /**
86
+ * Lets the user reorder columns (drag a header, or Alt+ArrowLeft / Alt+ArrowRight on it) and show or hide them from a Columns menu at the end of the header. Columns opt out of hiding with `canHide: false`.
87
+ * @default false
88
+ */
89
+ canCustomizeColumns?: boolean;
90
+ /** Accessible name of the table. Use `aria-labelledby` instead when a visible heading names it. */
91
+ ariaLabel?: string;
92
+ /** DOM id on the root `<div>`. */
93
+ id?: string;
94
+ /** Any `data-*` attribute, forwarded to the root `<div>`. */
95
+ [dataAttribute: `data-${string}`]: string | number | boolean | undefined;
96
+ /** Extra class on the root `<div>`. */
97
+ className?: string;
98
+ /** Inline style on the root `<div>`; only for setting CSS custom properties. */
99
+ style?: CSSProperties;
100
+ }
11
101
  /**
12
- * `InfiniteTable` with row virtualization — only the visible window is in the
13
- * DOM, so it stays responsive at tens of thousands of rows.
14
- *
15
- * The trade is a fixed row height and no natural content sizing. Prefer plain
16
- * `InfiniteTable` until row count actually becomes the problem.
102
+ * The public, generic call signature (`TData` inferred from `getRowData` and `columns`). Never
103
+ * called: it only types the default export. An arrow function rather than a type literal, so
104
+ * react-docgen-typescript reads the props for the Docs tab (the SelectInput precedent).
17
105
  */
18
- declare function VirtualizedInfiniteTable<TData>(props: VirtualizedInfiniteTableProps<TData>): React.JSX.Element;
106
+ declare const VIRTUALIZED_INFINITE_TABLE_SIGNATURE: <TData>(_props: VirtualizedInfiniteTableProps<TData> & RefAttributes<HTMLDivElement>) => ReactElement | null;
107
+ /** InfiniteTable with a virtual body, for tens of thousands of rows. */
108
+ declare const VirtualizedInfiniteTable: typeof VIRTUALIZED_INFINITE_TABLE_SIGNATURE;
19
109
  export default VirtualizedInfiniteTable;
@@ -1,233 +1,294 @@
1
- import Text, { TextVariant } from "../text/Text.js";
2
- import { ColumnAlign, ColumnPin, ColumnResizeMode, TableDensity, TableVariant } from "./types.js";
3
- import { createVirtualRow, getDensityRowHeightPx } from "./utils.js";
4
- import { useTableColumnResize } from "./useTableColumnResize.js";
1
+ import { useIsomorphicLayoutEffect } from "../hooks/useIsomorphicLayoutEffect.js";
2
+ import { useControlledState } from "../hooks/useControlledState.js";
3
+ import { TABLE_LARGE_METRICS, TABLE_MEDIUM_METRICS, TABLE_SMALL_METRICS, TableBodyRow, TableColumnsMenu, TableFrame, TableSkeletonRow, VIRTUAL_BODY_CSS, VIRTUAL_ROW_CSS } from "./TableCore.js";
5
4
  import { useTableColumnLayout } from "./useTableColumnLayout.js";
6
- import { useInfiniteScrollSentinel } from "./useInfiniteScrollSentinel.js";
7
- import { useElementClientSize } from "../hooks/useElementClientSize.js";
8
- import { InfiniteScrollSentinel, StyledTable, TableBody, TableDataCell, TableHead, TableHeaderCell, TableHeaderRow, TableLoadingRow, TableOuterContainer, TableRow, TableScrollContainer } from "./TablePrimitives.js";
9
- import TableHeaderCellContent from "./TableHeaderCellContent.js";
10
- import TableStatusRow from "./TableStatusRow.js";
11
- import React, { useCallback, useRef } from "react";
12
- import { jsx, jsxs } from "react/jsx-runtime";
13
- import { useVirtualizer } from "@tanstack/react-virtual";
5
+ import { useTableVirtualizer } from "./useTableVirtualizer.js";
6
+ import { useTableKeyboardNavigation } from "./useTableKeyboardNavigation.js";
7
+ import { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from "react";
8
+ import { jsx } from "react/jsx-runtime";
14
9
  //#region src/table/VirtualizedInfiniteTable.tsx
15
- function VirtualizedRowInner({ rowData, rowIndex, translateY, rowHeight, density, variant, isLastRow, isClickable, columns, getColumnWidth, pinnedOffsets, onClick }) {
16
- return /* @__PURE__ */ jsx(TableRow, {
17
- $density: density,
18
- $variant: variant,
19
- $isLastRow: isLastRow,
20
- $isClickable: isClickable,
21
- $translateY: translateY,
22
- $rowHeight: rowHeight,
23
- role: "row",
24
- "aria-rowindex": rowIndex + 2,
25
- onClick: onClick ? (event) => onClick(rowIndex, event) : void 0,
26
- children: columns.map((col, columnIndex) => /* @__PURE__ */ jsx(TableDataCell, {
27
- $width: getColumnWidth(col),
28
- $minWidth: col.minSize,
29
- $maxWidth: col.maxSize,
30
- $pin: col.pin,
31
- $pinnedOffset: pinnedOffsets.get(col.id),
32
- $align: col.align,
33
- $density: density,
34
- $variant: variant,
35
- role: "cell",
36
- "aria-colindex": columnIndex + 1,
37
- children: rowData && col.cell ? col.cell({
38
- value: col.accessorFn?.(rowData),
39
- row: createVirtualRow(rowData, rowIndex)
40
- }) : null
41
- }, col.id))
42
- });
43
- }
44
- var VirtualizedRow = React.memo(VirtualizedRowInner);
45
10
  /**
46
- * `InfiniteTable` with row virtualization — only the visible window is in the
47
- * DOM, so it stays responsive at tens of thousands of rows.
11
+ * InfiniteTable for very long lists: the same columns, header, sizes, sort indicator, row
12
+ * actions, column arrangement and status states, but only the rows in view (plus
13
+ * `VIRTUAL_OVERSCAN` above and below) are in the DOM. The app gives a row count and
14
+ * `getRowData(index)` instead of an array; rows it has not loaded yet show as skeleton rows in
15
+ * place. Every row is exactly the `size` rung's height; there is no selection, no expansion and
16
+ * no client-side sorting (the app re-queries when `sort` changes).
48
17
  *
49
- * The trade is a fixed row height and no natural content sizing. Prefer plain
50
- * `InfiniteTable` until row count actually becomes the problem.
18
+ * Built on the shared table core (`TableCore`, `useTableColumnLayout`,
19
+ * `useTableKeyboardNavigation`, `useInfiniteScrollSentinel`) plus `useTableVirtualizer`
20
+ * (`@tanstack/react-virtual`, an optional peer). It imports nothing from `InfiniteTable`, so it
21
+ * never needs `@tanstack/react-table`.
51
22
  */
52
- function VirtualizedInfiniteTable(props) {
53
- const { columns, totalRowCount, getRowData, getRowId, height, minHeight, maxHeight, width, fillWidth, fillHeight, density = TableDensity.MEDIUM, variant = TableVariant.PRIMARY, estimateRowHeight, overscan = 25, hasNextPage, isFetchingNextPage, fetchNextPage, isLoading = false, isError = false, error, loadingRowCount = 5, contentWhenEmpty, contentWhenError, noHeader = false, noLastRowBorder = false, noLastRowPadding = false, enableColumnResizing = false, columnSizing, defaultColumnSizing, onColumnSizingChange, columnResizeMode = ColumnResizeMode.ON_CHANGE, ariaLabel, ariaLabelledBy, onRowClick } = props;
54
- const scrollContainerRef = useRef(null);
55
- const headerRef = useRef(null);
56
- const { width: viewportWidth, height: viewportHeight } = useElementClientSize(scrollContainerRef);
57
- const { height: headerHeight } = useElementClientSize(headerRef);
58
- const resize = useTableColumnResize({
23
+ /** Row rung of the table (canonical subset; the 1.x TableDensity members). Same rows as InfiniteTableSize. */
24
+ var VirtualizedInfiniteTableSize = /* @__PURE__ */ function(VirtualizedInfiniteTableSize) {
25
+ /** 32px rows, body_sm text. */
26
+ VirtualizedInfiniteTableSize["SMALL"] = "SMALL";
27
+ /** 48px rows, body_md text. The default. */
28
+ VirtualizedInfiniteTableSize["MEDIUM"] = "MEDIUM";
29
+ /** 52px rows, body_lg text. */
30
+ VirtualizedInfiniteTableSize["LARGE"] = "LARGE";
31
+ return VirtualizedInfiniteTableSize;
32
+ }({});
33
+ var VIRTUALIZED_INFINITE_TABLE_SIZE_TO_TABLE_METRICS_MAP = {
34
+ ["SMALL"]: TABLE_SMALL_METRICS,
35
+ ["MEDIUM"]: TABLE_MEDIUM_METRICS,
36
+ ["LARGE"]: TABLE_LARGE_METRICS
37
+ };
38
+ /** `data-*` to the root, `aria-*` to the `<table>`. */
39
+ function splitPassthrough(rest) {
40
+ const rootProps = {};
41
+ const tableAria = {};
42
+ for (const [key, value] of Object.entries(rest)) if (key.startsWith("data-")) rootProps[key] = value;
43
+ else if (key.startsWith("aria-")) tableAria[key] = value;
44
+ return {
45
+ rootProps,
46
+ tableAria
47
+ };
48
+ }
49
+ /** What the live region says when the sort changes and the rows jump to the top. */
50
+ function sortAnnouncement(sort, columns) {
51
+ if (sort === null) return "Sort cleared";
52
+ return `Sorted by ${columns.find((column) => column.id === sort.columnId)?.header ?? sort.columnId}, ${sort.isDescending ? "descending" : "ascending"}`;
53
+ }
54
+ /** InfiniteTable with a virtual body, for tens of thousands of rows. */
55
+ var VirtualizedInfiniteTableInner = forwardRef(function VirtualizedInfiniteTable(props, ref) {
56
+ const { columns, totalRowCount, getRowData, getRowId, size: sizeProp, isLoading: isLoadingProp, error: errorProp, emptyState, onEndReached, onRowClick, activeRowId, rowActions, sort, defaultSort, onSortChange, columnLayout, defaultColumnLayout, onColumnLayoutChange, canResizeColumns: canResizeColumnsProp, canCustomizeColumns: canCustomizeColumnsProp, ariaLabel, id, className, style, ...rest } = props;
57
+ const error = errorProp === "" ? void 0 : errorProp;
58
+ const size = sizeProp ?? "MEDIUM";
59
+ const isLoading = isLoadingProp ?? false;
60
+ const canResizeColumns = canResizeColumnsProp ?? false;
61
+ const canCustomizeColumns = canCustomizeColumnsProp ?? false;
62
+ const rowCount = Math.max(0, Math.floor(totalRowCount));
63
+ const metrics = VIRTUALIZED_INFINITE_TABLE_SIZE_TO_TABLE_METRICS_MAP[size];
64
+ const scrollRef = useRef(null);
65
+ const { rootProps, tableAria } = splitPassthrough(rest);
66
+ if (id !== void 0) rootProps.id = id;
67
+ const hasRowActions = rowActions !== void 0;
68
+ const hasTrailingColumn = hasRowActions || canCustomizeColumns;
69
+ const isInteractive = onRowClick !== void 0 || hasRowActions;
70
+ const hasRowClick = onRowClick !== void 0;
71
+ const resolveRowId = useCallback((row, index) => getRowId ? getRowId(row, index) : String(index), [getRowId]);
72
+ const [currentSort, setSort] = useControlledState({
73
+ value: sort,
74
+ defaultValue: defaultSort ?? null,
75
+ onChange: onSortChange
76
+ });
77
+ const handleSortPress = useCallback((columnId) => {
78
+ if (currentSort?.columnId !== columnId) setSort({
79
+ columnId,
80
+ isDescending: false
81
+ });
82
+ else if (!currentSort.isDescending) setSort({
83
+ columnId,
84
+ isDescending: true
85
+ });
86
+ else setSort(null);
87
+ }, [currentSort, setSort]);
88
+ const [openActionsRowId, setOpenActionsRowId] = useState(null);
89
+ const layout = useTableColumnLayout({
59
90
  columns,
60
- enabled: enableColumnResizing,
61
- columnSizing,
62
- defaultColumnSizing,
63
- onColumnSizingChange,
64
- mode: columnResizeMode
91
+ columnLayout,
92
+ defaultColumnLayout: defaultColumnLayout ?? {},
93
+ onColumnLayoutChange,
94
+ canResizeColumns,
95
+ canCustomizeColumns,
96
+ leadingCount: 0,
97
+ hasTrailing: hasTrailingColumn,
98
+ syntheticWidthPx: metrics.rowHeightPx
65
99
  });
66
- const { getColumnWidth, pinnedOffsets, rowMinWidth } = useTableColumnLayout({
100
+ const visibleColumns = layout.visibleColumns;
101
+ const hasFooter = visibleColumns.some(({ column }) => column.footer !== void 0 && column.footer !== null);
102
+ const latestRef = useRef({
67
103
  columns,
68
- columnSizing: resize.columnSizing
104
+ getRowData,
105
+ resolveRowId,
106
+ onRowClick,
107
+ rowActions
69
108
  });
70
- const rowHeight = estimateRowHeight ?? getDensityRowHeightPx(density);
71
- const virtualizer = useVirtualizer({
72
- count: totalRowCount,
73
- getScrollElement: () => scrollContainerRef.current,
74
- estimateSize: () => rowHeight,
75
- overscan
109
+ latestRef.current = {
110
+ columns,
111
+ getRowData,
112
+ resolveRowId,
113
+ onRowClick,
114
+ rowActions
115
+ };
116
+ const handleKey = useCallback((rowIndex, event) => {
117
+ const current = latestRef.current;
118
+ if (event.key === " ") {
119
+ event.preventDefault();
120
+ return;
121
+ }
122
+ const row = current.getRowData(rowIndex);
123
+ if (row === void 0) return;
124
+ if (event.key === "Enter") {
125
+ current.onRowClick?.(row, event);
126
+ return;
127
+ }
128
+ if (event.key === "F10" && event.shiftKey || event.key === "ContextMenu") {
129
+ const actions = current.rowActions?.(row, rowIndex);
130
+ if (actions === null || actions === void 0) return;
131
+ event.preventDefault();
132
+ setOpenActionsRowId(current.resolveRowId(row, rowIndex));
133
+ }
134
+ }, []);
135
+ const virtualizerRef = useRef(null);
136
+ const navigation = useTableKeyboardNavigation({
137
+ rowCount,
138
+ getPageSize: useCallback(() => {
139
+ const scroll = scrollRef.current;
140
+ if (scroll === null) return 1;
141
+ return Math.max(1, Math.floor((scroll.clientHeight - metrics.headerHeightPx) / metrics.rowHeightPx) - 1);
142
+ }, [metrics.rowHeightPx, metrics.headerHeightPx]),
143
+ scrollToIndex: (index) => virtualizerRef.current?.scrollToIndex(index),
144
+ onKeyDown: handleKey
76
145
  });
77
- const virtualRows = virtualizer.getVirtualItems();
78
- const sentinelRef = useInfiniteScrollSentinel({
79
- scrollRef: scrollContainerRef,
80
- hasNextPage,
81
- isFetchingNextPage,
82
- fetchNextPage,
83
- rowCount: totalRowCount
146
+ const getItemKey = useCallback((index) => {
147
+ const row = latestRef.current.getRowData(index);
148
+ return row === void 0 ? index : latestRef.current.resolveRowId(row, index);
149
+ }, []);
150
+ const virtualizer = useTableVirtualizer({
151
+ count: rowCount,
152
+ scrollRef,
153
+ rowHeightPx: metrics.rowHeightPx,
154
+ headerHeightPx: metrics.headerHeightPx,
155
+ footerHeightPx: hasFooter ? metrics.headerHeightPx : 0,
156
+ getItemKey,
157
+ keepIndexes: rowCount > 0 ? [navigation.tabStopIndex] : []
84
158
  });
85
- const handleRowClick = useCallback((rowIndex, event) => {
86
- const rowData = getRowData(rowIndex);
87
- if (!rowData || !onRowClick) return;
88
- onRowClick(createVirtualRow(rowData, rowIndex), event);
89
- }, [getRowData, onRowClick]);
90
- const renderLoadingCells = () => columns.map((col) => /* @__PURE__ */ jsx(TableDataCell, {
91
- $width: getColumnWidth(col),
92
- $minWidth: col.minSize,
93
- $maxWidth: col.maxSize,
94
- $pin: col.pin,
95
- $pinnedOffset: pinnedOffsets.get(col.id),
96
- $align: col.align,
97
- $density: density,
98
- $variant: variant,
99
- role: "cell",
100
- children: col.cellLoading ? col.cellLoading() : null
101
- }, col.id));
102
- /** Loading rows for the initial load: normal flow, no virtual offset. */
103
- const renderLoadingRows = () => Array.from({ length: loadingRowCount }).map((_, rowIndex) => /* @__PURE__ */ jsx(TableLoadingRow, {
104
- $density: density,
105
- $variant: variant,
106
- role: "row",
107
- "aria-hidden": "true",
108
- children: renderLoadingCells()
109
- }, `loading-${rowIndex}`));
110
- /**
111
- * Loading rows appended while paging. The body is absolutely positioned once
112
- * virtualization is active, so these have to be offset past the last row
113
- * rather than left in normal flow.
114
- */
115
- const renderTrailingLoadingRows = (startOffset) => Array.from({ length: loadingRowCount }).map((_, rowIndex) => /* @__PURE__ */ jsx(TableRow, {
116
- $density: density,
117
- $variant: variant,
118
- $translateY: startOffset + rowIndex * rowHeight,
119
- $rowHeight: rowHeight,
120
- role: "row",
121
- "aria-hidden": "true",
122
- children: renderLoadingCells()
123
- }, `loading-more-${rowIndex}`));
124
- const showLoading = isLoading && totalRowCount === 0;
125
- const showError = isError && totalRowCount === 0;
126
- const showEmpty = totalRowCount === 0 && !isLoading && !isError && Boolean(contentWhenEmpty);
127
- const showRows = !showLoading && !showError && !showEmpty;
128
- const statusAvailableHeight = (height !== void 0 || minHeight !== void 0 || maxHeight !== void 0 || Boolean(fillHeight)) && viewportHeight !== void 0 ? Math.max(0, viewportHeight - (headerHeight ?? 0)) : void 0;
129
- const virtualTotalSize = virtualizer.getTotalSize();
130
- const trailingLoadingHeight = isFetchingNextPage ? loadingRowCount * rowHeight : 0;
131
- return /* @__PURE__ */ jsx(TableOuterContainer, {
132
- $width: width,
133
- $height: height,
134
- $minHeight: minHeight,
135
- $maxHeight: maxHeight,
136
- $fillWidth: fillWidth,
137
- $fillHeight: fillHeight,
138
- children: /* @__PURE__ */ jsxs(TableScrollContainer, {
139
- ref: scrollContainerRef,
140
- $noLastRowPadding: noLastRowPadding,
141
- children: [/* @__PURE__ */ jsxs(StyledTable, {
142
- $rowMinWidth: rowMinWidth,
143
- role: "table",
144
- "aria-label": ariaLabel,
145
- "aria-labelledby": ariaLabelledBy,
146
- "aria-rowcount": totalRowCount + (noHeader ? 0 : 1),
147
- "aria-colcount": columns.length,
148
- children: [!noHeader && /* @__PURE__ */ jsx(TableHead, {
149
- ref: headerRef,
150
- role: "rowgroup",
151
- children: /* @__PURE__ */ jsx(TableHeaderRow, {
152
- role: "row",
153
- "aria-rowindex": 1,
154
- children: columns.map((col, columnIndex) => /* @__PURE__ */ jsx(TableHeaderCell, {
155
- $width: getColumnWidth(col),
156
- $minWidth: col.minSize,
157
- $maxWidth: col.maxSize,
158
- $pin: col.pin,
159
- $pinnedOffset: pinnedOffsets.get(col.id),
160
- $align: col.align,
161
- $density: density,
162
- $variant: variant,
163
- role: "columnheader",
164
- scope: "col",
165
- "aria-colindex": columnIndex + 1,
166
- "aria-label": col.headerAriaLabel,
167
- children: /* @__PURE__ */ jsx(TableHeaderCellContent, {
168
- content: typeof col.header === "function" ? col.header({ table: null }) : col.header ?? col.id,
169
- isSortable: false,
170
- sortDirection: false,
171
- resize: resize.canResizeColumn(col) ? {
172
- columnId: col.id,
173
- columnLabel: typeof col.header === "string" ? col.header : col.id,
174
- isResizing: resize.resizingColumnId === col.id,
175
- bounds: resize.getColumnResizeBounds(col.id),
176
- onResizeStart: resize.startResize,
177
- onResizeKeyDown: resize.resizeByKeyboard
178
- } : void 0
179
- })
180
- }, col.id))
181
- })
182
- }), /* @__PURE__ */ jsxs(TableBody, {
183
- role: "rowgroup",
184
- $virtualHeight: showRows ? virtualTotalSize + trailingLoadingHeight : void 0,
185
- children: [
186
- showLoading && renderLoadingRows(),
187
- showError && /* @__PURE__ */ jsx(TableStatusRow, {
188
- colSpan: columns.length,
189
- viewportWidth,
190
- availableHeight: statusAvailableHeight,
191
- role: "alert",
192
- children: typeof contentWhenError === "function" ? contentWhenError(error) : contentWhenError ?? /* @__PURE__ */ jsx(Text, {
193
- variant: TextVariant.ERROR,
194
- children: error?.message ?? "Error loading data"
195
- })
196
- }),
197
- showEmpty && /* @__PURE__ */ jsx(TableStatusRow, {
198
- colSpan: columns.length,
199
- viewportWidth,
200
- availableHeight: statusAvailableHeight,
201
- role: "status",
202
- children: contentWhenEmpty
203
- }),
204
- showRows && virtualRows.map((virtualRow) => {
205
- const rowData = getRowData(virtualRow.index);
206
- const rowId = rowData && getRowId ? getRowId(rowData, virtualRow.index) : String(virtualRow.index);
207
- return /* @__PURE__ */ jsx(VirtualizedRow, {
208
- rowData,
209
- rowIndex: virtualRow.index,
210
- translateY: virtualRow.start,
211
- rowHeight,
212
- density,
213
- variant,
214
- isLastRow: noLastRowBorder && virtualRow.index === totalRowCount - 1,
215
- isClickable: Boolean(onRowClick),
216
- columns,
217
- getColumnWidth,
218
- pinnedOffsets,
219
- onClick: onRowClick ? handleRowClick : void 0
220
- }, rowId);
221
- }),
222
- isFetchingNextPage && (showRows ? renderTrailingLoadingRows(virtualTotalSize) : null)
223
- ]
224
- })]
225
- }), /* @__PURE__ */ jsx(InfiniteScrollSentinel, {
226
- ref: sentinelRef,
227
- "aria-hidden": "true"
228
- })]
159
+ virtualizerRef.current = { scrollToIndex: (index) => virtualizer.scrollToIndex(index, { align: "auto" }) };
160
+ const [isMounted, setIsMounted] = useState(false);
161
+ useIsomorphicLayoutEffect(() => setIsMounted(true), []);
162
+ const [announcement, setAnnouncement] = useState("");
163
+ const sortKey = currentSort === null ? "" : `${currentSort.columnId}:${currentSort.isDescending}`;
164
+ const previousSortKeyRef = useRef(sortKey);
165
+ useEffect(() => {
166
+ if (previousSortKeyRef.current === sortKey) return;
167
+ previousSortKeyRef.current = sortKey;
168
+ virtualizer.scrollToOffset(0);
169
+ setAnnouncement(sortAnnouncement(currentSort, latestRef.current.columns));
170
+ }, [
171
+ sortKey,
172
+ currentSort,
173
+ virtualizer
174
+ ]);
175
+ const callbacks = useMemo(() => ({
176
+ registerRow: navigation.registerRow,
177
+ onRowClick: hasRowClick ? (row, event) => latestRef.current.onRowClick?.(row, event) : void 0,
178
+ onRowKeyDown: navigation.handleRowKeyDown,
179
+ onRowFocus: navigation.handleRowFocus,
180
+ onToggleSelect: () => {},
181
+ onToggleExpand: () => {},
182
+ onActionsOpenChange: (rowId, isOpen) => setOpenActionsRowId((current) => isOpen ? rowId : current === rowId ? null : current),
183
+ getRowActions: hasRowActions ? (row, rowIndex) => latestRef.current.rowActions?.(row, rowIndex) : void 0,
184
+ getRowName: (row, rowIndex) => {
185
+ const name = latestRef.current.columns.find((column) => column.isRowHeader === true)?.accessor?.(row);
186
+ return name === void 0 || name === null || name === "" ? `row ${rowIndex + 1}` : String(name);
187
+ }
188
+ }), [
189
+ navigation.registerRow,
190
+ navigation.handleRowKeyDown,
191
+ navigation.handleRowFocus,
192
+ hasRowClick,
193
+ hasRowActions
194
+ ]);
195
+ const startStylesRef = useRef(/* @__PURE__ */ new Map());
196
+ const startStyle = (start) => {
197
+ let cached = startStylesRef.current.get(start);
198
+ if (cached === void 0) {
199
+ cached = { "--gx-table-row-start": `${start}px` };
200
+ if (startStylesRef.current.size > 2e3) startStylesRef.current.clear();
201
+ startStylesRef.current.set(start, cached);
202
+ }
203
+ return cached;
204
+ };
205
+ const virtualItems = isMounted ? virtualizer.getVirtualItems() : [];
206
+ const bodyVariables = { "--gx-table-virtual-height": `${isMounted ? virtualizer.getTotalSize() : 0}px` };
207
+ const cellRole = isInteractive ? "gridcell" : "cell";
208
+ const hasStatusAfter = isLoading || error !== void 0;
209
+ const scrollMargin = virtualizer.options.scrollMargin;
210
+ return /* @__PURE__ */ jsx(TableFrame, {
211
+ metrics,
212
+ columnLayout: layout,
213
+ leadingHeaders: [],
214
+ trailingHeader: canCustomizeColumns ? /* @__PURE__ */ jsx(TableColumnsMenu, {
215
+ entries: layout.menuEntries,
216
+ metrics,
217
+ onToggle: (columnId, isVisible) => layout.setColumnHidden(columnId, !isVisible),
218
+ onReset: layout.resetLayout
219
+ }) : void 0,
220
+ hasTrailingColumn,
221
+ sort: currentSort,
222
+ onSortPress: handleSortPress,
223
+ canCustomizeColumns,
224
+ rowCount,
225
+ isLoading,
226
+ error,
227
+ emptyState,
228
+ onEndReached,
229
+ role: isInteractive ? "grid" : "table",
230
+ ariaLabel,
231
+ tableAria,
232
+ isMultiselectable: false,
233
+ ariaRowCount: rowCount + 1 + (hasFooter ? 1 : 0),
234
+ rootRef: ref,
235
+ scrollRef,
236
+ rootProps,
237
+ className,
238
+ style,
239
+ bodyClassName: VIRTUAL_BODY_CSS,
240
+ bodyStyle: bodyVariables,
241
+ announcement,
242
+ children: virtualItems.map((item) => {
243
+ const row = getRowData(item.index);
244
+ const isBorderless = item.index === rowCount - 1 && !hasStatusAfter;
245
+ const rowStyle = startStyle(item.start - scrollMargin);
246
+ if (row === void 0) return /* @__PURE__ */ jsx(TableSkeletonRow, {
247
+ columns: visibleColumns,
248
+ metrics,
249
+ leadingCount: 0,
250
+ hasTrailingColumn,
251
+ isBorderless,
252
+ ariaRowIndex: item.index + 2,
253
+ ...isInteractive ? { pending: {
254
+ rowRef: (element) => navigation.registerRow(item.index, element),
255
+ isTabStop: item.index === navigation.tabStopIndex,
256
+ onKeyDown: (event) => navigation.handleRowKeyDown(item.index, event),
257
+ onFocus: () => navigation.handleRowFocus(item.index)
258
+ } } : {},
259
+ className: VIRTUAL_ROW_CSS,
260
+ style: rowStyle
261
+ }, `pending-${item.index}`);
262
+ const rowId = resolveRowId(row, item.index);
263
+ return /* @__PURE__ */ jsx(TableBodyRow, {
264
+ row,
265
+ rowIndex: item.index,
266
+ rowId,
267
+ columns: visibleColumns,
268
+ metrics,
269
+ callbacks,
270
+ cellRole,
271
+ isFocusable: isInteractive,
272
+ isTabStop: item.index === navigation.tabStopIndex,
273
+ isClickable: hasRowClick,
274
+ isBorderless,
275
+ isActive: activeRowId !== void 0 && activeRowId !== null && activeRowId === rowId,
276
+ isSelected: void 0,
277
+ hasExpandColumn: false,
278
+ isExpanded: void 0,
279
+ panelId: void 0,
280
+ hasTrailingColumn,
281
+ isActionsOpen: openActionsRowId === rowId,
282
+ ariaRowIndex: item.index + 2,
283
+ hasColIndex: true,
284
+ className: VIRTUAL_ROW_CSS,
285
+ style: rowStyle
286
+ }, rowId);
229
287
  })
230
288
  });
231
- }
289
+ });
290
+ VirtualizedInfiniteTableInner.displayName = "VirtualizedInfiniteTable";
291
+ /** InfiniteTable with a virtual body, for tens of thousands of rows. */
292
+ var VirtualizedInfiniteTable = VirtualizedInfiniteTableInner;
232
293
  //#endregion
233
- export { ColumnAlign, ColumnPin, ColumnResizeMode, TableDensity, TableVariant, VirtualizedInfiniteTable as default };
294
+ export { VirtualizedInfiniteTableSize, VirtualizedInfiniteTable as default };