@galaxy-io/dls 1.6.1 → 2.0.1

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