@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,83 +1,107 @@
1
1
  import { useCallback, useEffect, useRef, useState } from "react";
2
2
  //#region src/table/useTableKeyboardNavigation.ts
3
- /** Body rows carry this attribute so focus can be moved without a ref per row. */
4
- var ROW_INDEX_ATTRIBUTE = "data-row-index";
5
3
  /**
6
- * Roving-tabindex keyboard navigation over table rows: one Tab stop for the
7
- * whole body, arrows to move between rows, Enter to activate, Space to select.
4
+ * @internal Shared by the table components; apps use InfiniteTable, VirtualizedInfiniteTable or
5
+ * InfiniteSpreadsheet.
6
+ *
7
+ * Roving row focus over a table body: one row is the tab stop (`tabIndex` 0), the rest -1.
8
+ * ArrowUp / ArrowDown, Home / End and PageUp / PageDown move focus; a virtual body passes
9
+ * `scrollToIndex` so the target row is scrolled into the window before it is focused. Every other
10
+ * key (Enter, Space, ArrowLeft / ArrowRight, Shift+F10) goes to the host's `onKeyDown`.
8
11
  */
9
- function useTableKeyboardNavigation({ bodyRef, rowCount, enabled = false, onActivate, onToggleSelect, scrollToIndex }) {
10
- const [focusedRowIndex, setFocusedRowIndex] = useState(0);
11
- const shouldMoveFocusRef = useRef(false);
12
- const onActivateRef = useRef(onActivate);
13
- const onToggleSelectRef = useRef(onToggleSelect);
14
- const scrollToIndexRef = useRef(scrollToIndex);
15
- useEffect(() => {
16
- onActivateRef.current = onActivate;
17
- onToggleSelectRef.current = onToggleSelect;
18
- scrollToIndexRef.current = scrollToIndex;
12
+ /** Frames to wait for a virtual row to mount after `scrollToIndex`. */
13
+ var MOUNT_RETRY_FRAMES = 4;
14
+ /** @internal Roving focus over the rows of a table body. */
15
+ function useTableKeyboardNavigation({ rowCount, getPageSize, scrollToIndex, onKeyDown }) {
16
+ const [tabStop, setTabStop] = useState(0);
17
+ const tabStopIndex = rowCount === 0 ? 0 : Math.min(tabStop, rowCount - 1);
18
+ const rowsRef = useRef(/* @__PURE__ */ new Map());
19
+ const frameRef = useRef(null);
20
+ const optionsRef = useRef({
21
+ rowCount,
22
+ getPageSize,
23
+ scrollToIndex,
24
+ onKeyDown
19
25
  });
20
- const clampedFocusedRowIndex = rowCount === 0 ? 0 : Math.min(focusedRowIndex, Math.max(0, rowCount - 1));
21
- useEffect(() => {
22
- if (!shouldMoveFocusRef.current) return;
23
- shouldMoveFocusRef.current = false;
24
- const body = bodyRef.current;
25
- if (!body) return;
26
- body.querySelector(`[${ROW_INDEX_ATTRIBUTE}="${clampedFocusedRowIndex}"]`)?.focus();
27
- }, [bodyRef, clampedFocusedRowIndex]);
28
- const moveFocusTo = useCallback((rowIndex) => {
29
- shouldMoveFocusRef.current = true;
30
- scrollToIndexRef.current?.(rowIndex);
31
- setFocusedRowIndex(rowIndex);
26
+ optionsRef.current = {
27
+ rowCount,
28
+ getPageSize,
29
+ scrollToIndex,
30
+ onKeyDown
31
+ };
32
+ useEffect(() => () => {
33
+ if (frameRef.current !== null) cancelAnimationFrame(frameRef.current);
32
34
  }, []);
33
- const onRowKeyDown = useCallback((rowIndex, event) => {
34
- if (!enabled || rowCount === 0) return;
35
- if (event.target !== event.currentTarget) return;
36
- switch (event.key) {
37
- case "ArrowDown":
38
- event.preventDefault();
39
- moveFocusTo(Math.min(rowCount - 1, rowIndex + 1));
40
- return;
41
- case "ArrowUp":
42
- event.preventDefault();
43
- moveFocusTo(Math.max(0, rowIndex - 1));
44
- return;
45
- case "Home":
46
- event.preventDefault();
47
- moveFocusTo(0);
48
- return;
49
- case "End":
50
- event.preventDefault();
51
- moveFocusTo(rowCount - 1);
52
- return;
53
- case "Enter":
54
- event.preventDefault();
55
- onActivateRef.current?.(rowIndex, event);
56
- return;
57
- case " ":
58
- case "Spacebar":
59
- event.preventDefault();
60
- onToggleSelectRef.current?.(rowIndex, event);
61
- return;
62
- default:
35
+ const focusedIndexRef = useRef(null);
36
+ const listenedRef = useRef(/* @__PURE__ */ new WeakSet());
37
+ const registerRow = useCallback((rowIndex, element) => {
38
+ const rows = rowsRef.current;
39
+ if (element === null) {
40
+ if (rows.get(rowIndex) !== void 0 && !rows.get(rowIndex)?.isConnected) rows.delete(rowIndex);
41
+ return;
63
42
  }
64
- }, [
65
- enabled,
66
- rowCount,
67
- moveFocusTo
68
- ]);
69
- const onRowFocus = useCallback((rowIndex) => {
70
- setFocusedRowIndex(rowIndex);
43
+ const previous = rows.get(rowIndex);
44
+ rows.set(rowIndex, element);
45
+ if (!listenedRef.current.has(element)) {
46
+ listenedRef.current.add(element);
47
+ element.addEventListener("focusout", (event) => {
48
+ const next = event.relatedTarget;
49
+ if (next instanceof Node && element.contains(next)) return;
50
+ queueMicrotask(() => {
51
+ if (element.isConnected && focusedIndexRef.current === rowIndex) focusedIndexRef.current = null;
52
+ });
53
+ });
54
+ }
55
+ const active = element.ownerDocument.activeElement;
56
+ const isFocusLost = active === null || active === element.ownerDocument.body || !active.isConnected;
57
+ if (previous !== void 0 && previous !== element && !previous.isConnected && focusedIndexRef.current === rowIndex && isFocusLost) element.focus({ preventScroll: true });
58
+ }, []);
59
+ const focusRow = useCallback((rowIndex) => {
60
+ setTabStop(rowIndex);
61
+ optionsRef.current.scrollToIndex?.(rowIndex);
62
+ if (frameRef.current !== null) cancelAnimationFrame(frameRef.current);
63
+ let attempts = 0;
64
+ const tryFocus = () => {
65
+ frameRef.current = null;
66
+ const element = rowsRef.current.get(rowIndex);
67
+ if (element?.isConnected) {
68
+ element.focus();
69
+ return;
70
+ }
71
+ attempts += 1;
72
+ if (attempts <= MOUNT_RETRY_FRAMES) frameRef.current = requestAnimationFrame(tryFocus);
73
+ };
74
+ tryFocus();
71
75
  }, []);
72
76
  return {
73
- focusedRowIndex: clampedFocusedRowIndex,
74
- getRowTabIndex: useCallback((rowIndex) => {
75
- if (!enabled) return void 0;
76
- return rowIndex === clampedFocusedRowIndex ? 0 : -1;
77
- }, [enabled, clampedFocusedRowIndex]),
78
- onRowKeyDown,
79
- onRowFocus
77
+ tabStopIndex,
78
+ registerRow,
79
+ handleRowKeyDown: useCallback((rowIndex, event) => {
80
+ const { rowCount: count, getPageSize: pageSize, onKeyDown: hostKeyDown } = optionsRef.current;
81
+ if (count === 0) return;
82
+ const hasModifier = event.altKey || event.ctrlKey || event.metaKey;
83
+ let next;
84
+ if (!hasModifier) {
85
+ if (event.key === "ArrowDown") next = rowIndex + 1;
86
+ else if (event.key === "ArrowUp") next = rowIndex - 1;
87
+ else if (event.key === "Home") next = 0;
88
+ else if (event.key === "End") next = count - 1;
89
+ else if (event.key === "PageDown") next = rowIndex + Math.max(1, pageSize());
90
+ else if (event.key === "PageUp") next = rowIndex - Math.max(1, pageSize());
91
+ }
92
+ if (next === void 0) {
93
+ hostKeyDown(rowIndex, event);
94
+ return;
95
+ }
96
+ event.preventDefault();
97
+ focusRow(Math.min(Math.max(next, 0), count - 1));
98
+ }, [focusRow]),
99
+ handleRowFocus: useCallback((rowIndex) => {
100
+ focusedIndexRef.current = rowIndex;
101
+ setTabStop(rowIndex);
102
+ }, []),
103
+ focusRow
80
104
  };
81
105
  }
82
106
  //#endregion
83
- export { ROW_INDEX_ATTRIBUTE, useTableKeyboardNavigation };
107
+ export { useTableKeyboardNavigation };
@@ -1,27 +1,26 @@
1
- import type { OnChangeFn as TanstackOnChangeFn, Row as TanstackRow, RowSelectionState as TanstackRowSelectionState } from "@tanstack/react-table";
2
- interface UseTableRowSelectionOptions<TData> {
3
- rowSelection?: TanstackRowSelectionState;
4
- defaultRowSelection?: TanstackRowSelectionState;
5
- onRowSelectionChange?: TanstackOnChangeFn<TanstackRowSelectionState>;
6
- enableMultiRowSelection?: boolean;
7
- enableSelectionRange?: boolean;
8
- onSelectedRowsChange?: (rows: TanstackRow<TData>[]) => void;
1
+ /** @internal Options for `useTableRowSelection`. */
2
+ export interface UseTableRowSelectionOptions {
3
+ /** Controlled selected ids. */
4
+ value: string[] | undefined;
5
+ /** Initial selected ids while uncontrolled. */
6
+ defaultValue: string[];
7
+ /** Called with the next selected ids, in row order. */
8
+ onChange: ((value: string[]) => void) | undefined;
9
+ /** Ids of the loaded rows in display order. */
10
+ rowIds: string[];
9
11
  }
10
- export interface TableRowSelection<TData> {
11
- /** Always defined, so it can be fed to TanStack's `state.rowSelection`. */
12
- rowSelection: TanstackRowSelectionState;
13
- onRowSelectionChange: TanstackOnChangeFn<TanstackRowSelectionState>;
14
- toggleRow: (row: TanstackRow<TData>, rows: TanstackRow<TData>[], isShiftKey: boolean) => void;
15
- toggleAll: (rows: TanstackRow<TData>[], isSelected: boolean) => void;
16
- notifySelectedRows: (rows: TanstackRow<TData>[]) => void;
12
+ /** @internal What `useTableRowSelection` returns. */
13
+ export interface TableRowSelection {
14
+ /** The selected ids. */
15
+ selectedIds: ReadonlySet<string>;
16
+ /** Every loaded row is selected (and there is at least one). */
17
+ isAllSelected: boolean;
18
+ /** Some, not all, loaded rows are selected. */
19
+ isSomeSelected: boolean;
20
+ /** Toggles one row; with `isRange`, selects every row from the last toggled one to it. */
21
+ toggleRow: (rowId: string, isRange: boolean) => void;
22
+ /** Selects every loaded row, or clears the selection when all are selected. */
23
+ toggleAll: () => void;
17
24
  }
18
- /**
19
- * Owns row-selection state so it works whether the consumer controls it or not.
20
- *
21
- * TanStack replaces its default updater as soon as `onRowSelectionChange` is
22
- * supplied, so passing that callback without also passing `state.rowSelection`
23
- * silently freezes selection. Holding the state here means there is one code
24
- * path and selection always sticks.
25
- */
26
- export declare function useTableRowSelection<TData>({ rowSelection, defaultRowSelection, onRowSelectionChange, enableMultiRowSelection, enableSelectionRange, onSelectedRowsChange, }: UseTableRowSelectionOptions<TData>): TableRowSelection<TData>;
27
- export {};
25
+ /** @internal Selection state for a table's rows. */
26
+ export declare function useTableRowSelection({ value, defaultValue, onChange, rowIds, }: UseTableRowSelectionOptions): TableRowSelection;
@@ -1,94 +1,67 @@
1
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
1
+ import { useControlledState } from "../hooks/useControlledState.js";
2
+ import { useCallback, useMemo, useRef } from "react";
2
3
  //#region src/table/useTableRowSelection.ts
3
4
  /**
4
- * Owns row-selection state so it works whether the consumer controls it or not.
5
+ * @internal Shared by the table components; apps use InfiniteTable, VirtualizedInfiniteTable or
6
+ * InfiniteSpreadsheet.
5
7
  *
6
- * TanStack replaces its default updater as soon as `onRowSelectionChange` is
7
- * supplied, so passing that callback without also passing `state.rowSelection`
8
- * silently freezes selection. Holding the state here means there is one code
9
- * path and selection always sticks.
8
+ * Row selection over string ids: the `value` / `defaultValue` / `onChange` triple, the
9
+ * shift-range anchor (the last toggled row) and select-all over the loaded rows. Reported ids
10
+ * are in row order. Only InfiniteTable selects rows.
10
11
  */
11
- function useTableRowSelection({ rowSelection, defaultRowSelection, onRowSelectionChange, enableMultiRowSelection = true, enableSelectionRange = true, onSelectedRowsChange }) {
12
- const [internalSelection, setInternalSelection] = useState(defaultRowSelection ?? {});
13
- const isControlled = rowSelection !== void 0;
14
- const resolvedSelection = isControlled ? rowSelection : internalSelection;
15
- const selectionRef = useRef(resolvedSelection);
16
- const onChangeRef = useRef(onRowSelectionChange);
17
- const onSelectedRowsChangeRef = useRef(onSelectedRowsChange);
18
- useEffect(() => {
19
- selectionRef.current = resolvedSelection;
20
- onChangeRef.current = onRowSelectionChange;
21
- onSelectedRowsChangeRef.current = onSelectedRowsChange;
12
+ /** @internal Selection state for a table's rows. */
13
+ function useTableRowSelection({ value, defaultValue, onChange, rowIds }) {
14
+ const [selected, setSelected] = useControlledState({
15
+ value,
16
+ defaultValue,
17
+ onChange
22
18
  });
23
- /** Anchor for shift-click ranges — the row of the last plain click. */
24
- const anchorRowIdRef = useRef(null);
25
- const applySelection = useCallback((next) => {
26
- selectionRef.current = next;
27
- if (!isControlled) setInternalSelection(next);
28
- onChangeRef.current?.(next);
29
- }, [isControlled]);
30
- const handleRowSelectionChange = useCallback((updater) => {
31
- applySelection(typeof updater === "function" ? updater(selectionRef.current) : updater);
32
- }, [applySelection]);
33
- const toggleRow = useCallback((row, rows, isShiftKey) => {
34
- if (!row.getCanSelect()) return;
35
- const isSelected = !selectionRef.current[row.id];
36
- if (!enableMultiRowSelection) {
37
- applySelection(isSelected ? { [row.id]: true } : {});
38
- anchorRowIdRef.current = row.id;
39
- return;
40
- }
41
- const anchorRowId = anchorRowIdRef.current;
42
- if (!(isShiftKey && enableSelectionRange && anchorRowId !== null)) {
43
- const next = { ...selectionRef.current };
44
- if (isSelected) next[row.id] = true;
45
- else delete next[row.id];
46
- applySelection(next);
47
- anchorRowIdRef.current = row.id;
48
- return;
49
- }
50
- const anchorIndex = rows.findIndex((candidate) => candidate.id === anchorRowId);
51
- const targetIndex = rows.findIndex((candidate) => candidate.id === row.id);
52
- if (anchorIndex === -1 || targetIndex === -1) return;
53
- const [from, to] = anchorIndex <= targetIndex ? [anchorIndex, targetIndex] : [targetIndex, anchorIndex];
54
- const next = { ...selectionRef.current };
55
- rows.slice(from, to + 1).forEach((candidate) => {
56
- if (candidate.getCanSelect()) next[candidate.id] = true;
57
- });
58
- applySelection(next);
59
- }, [
60
- applySelection,
61
- enableMultiRowSelection,
62
- enableSelectionRange
63
- ]);
64
- const toggleAll = useCallback((rows, isSelected) => {
65
- if (!isSelected) {
66
- applySelection({});
67
- anchorRowIdRef.current = null;
68
- return;
69
- }
70
- const next = { ...selectionRef.current };
71
- rows.forEach((row) => {
72
- if (row.getCanSelect()) next[row.id] = true;
73
- });
74
- applySelection(next);
75
- }, [applySelection]);
76
- const notifySelectedRows = useCallback((rows) => {
77
- onSelectedRowsChangeRef.current?.(rows);
19
+ const selectedIds = useMemo(() => new Set(selected), [selected]);
20
+ const anchorRef = useRef(null);
21
+ const stateRef = useRef({
22
+ selectedIds,
23
+ rowIds
24
+ });
25
+ stateRef.current = {
26
+ selectedIds,
27
+ rowIds
28
+ };
29
+ /** Ids in row order; ids no longer loaded keep their place at the end. */
30
+ const ordered = useCallback((ids) => {
31
+ const { rowIds: rows } = stateRef.current;
32
+ const inRows = rows.filter((id) => ids.has(id));
33
+ const rowSet = new Set(rows);
34
+ return [...inRows, ...[...ids].filter((id) => !rowSet.has(id))];
78
35
  }, []);
79
- return useMemo(() => ({
80
- rowSelection: resolvedSelection,
81
- onRowSelectionChange: handleRowSelectionChange,
82
- toggleRow,
83
- toggleAll,
84
- notifySelectedRows
85
- }), [
86
- resolvedSelection,
87
- handleRowSelectionChange,
36
+ const toggleRow = useCallback((rowId, isRange) => {
37
+ const { selectedIds: current, rowIds: rows } = stateRef.current;
38
+ const next = new Set(current);
39
+ const anchor = anchorRef.current;
40
+ const from = anchor === null ? -1 : rows.indexOf(anchor);
41
+ const to = rows.indexOf(rowId);
42
+ if (isRange && from !== -1 && to !== -1) {
43
+ const [start, end] = from < to ? [from, to] : [to, from];
44
+ for (const id of rows.slice(start, end + 1)) next.add(id);
45
+ } else if (next.has(rowId)) next.delete(rowId);
46
+ else next.add(rowId);
47
+ anchorRef.current = rowId;
48
+ setSelected(ordered(next));
49
+ }, [ordered, setSelected]);
50
+ const isAllSelected = rowIds.length > 0 && rowIds.every((id) => selectedIds.has(id));
51
+ return {
52
+ selectedIds,
53
+ isAllSelected,
54
+ isSomeSelected: !isAllSelected && rowIds.some((id) => selectedIds.has(id)),
88
55
  toggleRow,
89
- toggleAll,
90
- notifySelectedRows
91
- ]);
56
+ toggleAll: useCallback(() => {
57
+ const { selectedIds: current, rowIds: rows } = stateRef.current;
58
+ const isAll = rows.length > 0 && rows.every((id) => current.has(id));
59
+ const next = new Set(current);
60
+ for (const id of rows) if (isAll) next.delete(id);
61
+ else next.add(id);
62
+ setSelected(ordered(next));
63
+ }, [ordered, setSelected])
64
+ };
92
65
  }
93
66
  //#endregion
94
67
  export { useTableRowSelection };
@@ -0,0 +1,20 @@
1
+ import { type RefObject } from "react";
2
+ /** @internal Options for `useTableVirtualizer`. */
3
+ export interface UseTableVirtualizerOptions {
4
+ /** Rows the body can show, loaded or not. */
5
+ count: number;
6
+ /** The table's scroll container. */
7
+ scrollRef: RefObject<HTMLDivElement | null>;
8
+ /** The exact row height in pixels. */
9
+ rowHeightPx: number;
10
+ /** The sticky header's height: the body starts this far down the scroll container. */
11
+ headerHeightPx: number;
12
+ /** The sticky footer's height (0 without a footer), kept clear when scrolling a row into view. */
13
+ footerHeightPx: number;
14
+ /** A row's key: its id when loaded, its index otherwise. */
15
+ getItemKey: (index: number) => string | number;
16
+ /** Indexes that stay rendered outside the window. */
17
+ keepIndexes: number[];
18
+ }
19
+ /** @internal A table-body virtualizer with exact row sizes. */
20
+ export declare function useTableVirtualizer({ count, scrollRef, rowHeightPx, headerHeightPx, footerHeightPx, getItemKey, keepIndexes, }: UseTableVirtualizerOptions): import("@tanstack/react-virtual").ReactVirtualizer<HTMLDivElement, HTMLTableRowElement>;
@@ -0,0 +1,48 @@
1
+ import { useIsomorphicLayoutEffect } from "../hooks/useIsomorphicLayoutEffect.js";
2
+ import "./TableCore.js";
3
+ import { useCallback } from "react";
4
+ import { defaultRangeExtractor, useVirtualizer } from "@tanstack/react-virtual";
5
+ //#region src/table/useTableVirtualizer.ts
6
+ /**
7
+ * @internal Shared by the table components; apps use InfiniteTable, VirtualizedInfiniteTable or
8
+ * InfiniteSpreadsheet.
9
+ *
10
+ * `useVirtualizer` (`@tanstack/react-virtual`, an optional peer) set up for a table body: every
11
+ * row is exactly the rung's height (no measuring), items are keyed by row id when loaded and by
12
+ * index otherwise, the rows in `keepIndexes` (the focused row, an editing row) stay mounted
13
+ * whatever the scroll position, and the body starts below the sticky header. Only the virtual
14
+ * table components import this module; `TableCore` imports no peer.
15
+ */
16
+ /** @internal A table-body virtualizer with exact row sizes. */
17
+ function useTableVirtualizer({ count, scrollRef, rowHeightPx, headerHeightPx, footerHeightPx, getItemKey, keepIndexes }) {
18
+ const keepKey = keepIndexes.join(",");
19
+ const rangeExtractor = useCallback((range) => {
20
+ const indexes = new Set(defaultRangeExtractor(range));
21
+ for (const entry of keepKey === "" ? [] : keepKey.split(",")) {
22
+ const index = Number(entry);
23
+ if (index >= 0 && index < range.count) indexes.add(index);
24
+ }
25
+ return [...indexes].sort((a, b) => a - b);
26
+ }, [keepKey]);
27
+ const virtualizer = useVirtualizer({
28
+ count,
29
+ getScrollElement: () => scrollRef.current,
30
+ estimateSize: useCallback(() => rowHeightPx, [rowHeightPx]),
31
+ overscan: 10,
32
+ getItemKey,
33
+ rangeExtractor,
34
+ scrollMargin: headerHeightPx,
35
+ scrollPaddingStart: headerHeightPx,
36
+ scrollPaddingEnd: footerHeightPx
37
+ });
38
+ useIsomorphicLayoutEffect(() => {
39
+ virtualizer.measure();
40
+ }, [
41
+ virtualizer,
42
+ rowHeightPx,
43
+ headerHeightPx
44
+ ]);
45
+ return virtualizer;
46
+ }
47
+ //#endregion
48
+ export { useTableVirtualizer };
@@ -1,7 +1,6 @@
1
- import type { PropsWithChildren } from "react";
2
- /**
3
- * Bumps its children to the medium weight. Nest it inside a `Text` to emphasize
4
- * part of a string — DLS has only two weights, so this is as bold as type gets.
5
- */
6
- declare const Bold: ({ children }: PropsWithChildren) => import("react").JSX.Element;
1
+ import { type SpanProps } from "./Span.js";
2
+ /** `Span` props without `weight`: a `Bold` is always `TextWeight.MEDIUM`. */
3
+ export type BoldProps = Omit<SpanProps, "weight">;
4
+ /** Medium-weight inline emphasis inside a `Text`; a `Span` preset. */
5
+ declare const Bold: import("react").ForwardRefExoticComponent<BoldProps & import("react").RefAttributes<HTMLSpanElement>>;
7
6
  export default Bold;
package/dist/text/Bold.js CHANGED
@@ -1,21 +1,22 @@
1
- import { withTheme } from "../theme/GalaxyTheme.js";
2
- /* empty css */
3
- import { styled } from "@linaria/react";
1
+ import { TextWeight } from "./Text.js";
2
+ import Span from "./Span.js";
3
+ import { forwardRef } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region src/text/Bold.tsx
6
- var _exp = () => ({ theme }) => theme.font.sans.weight.medium;
7
- var StyledBoldText = withTheme(/*#__PURE__*/ styled("span")({
8
- name: "StyledBoldText",
9
- class: "s10i74tu",
10
- propsAsIs: false,
11
- vars: { "s10i74tu-0": [_exp()] }
12
- }));
13
6
  /**
14
- * Bumps its children to the medium weight. Nest it inside a `Text` to emphasize
15
- * part of a string — DLS has only two weights, so this is as bold as type gets.
7
+ * Medium-weight emphasis for part of a string inside a `Text`. A thin preset over `Span`:
8
+ * `<Span weight={TextWeight.MEDIUM}>`. It takes every other `Span` prop and inherits everything
9
+ * else (size, family, line height, color) from the enclosing `Text`. DLS has two weights, so this
10
+ * is as bold as type gets. No own styles, no own enums.
16
11
  */
17
- var Bold = ({ children }) => {
18
- return /* @__PURE__ */ jsx(StyledBoldText, { children });
19
- };
12
+ /** Medium-weight inline emphasis inside a `Text`; a `Span` preset. */
13
+ var Bold = forwardRef(function Bold(props, ref) {
14
+ return /* @__PURE__ */ jsx(Span, {
15
+ weight: TextWeight.MEDIUM,
16
+ ...props,
17
+ ref
18
+ });
19
+ });
20
+ Bold.displayName = "Bold";
20
21
  //#endregion
21
22
  export { Bold as default };
@@ -1,7 +1,6 @@
1
- import type { PropsWithChildren } from "react";
2
- /**
3
- * Inline code — mono family on a tinted, hairline-bordered chip. Nest it inside
4
- * a `Text` for identifiers and literals in prose.
5
- */
6
- declare const Code: ({ children }: PropsWithChildren) => import("react").JSX.Element;
1
+ import { type SpanProps } from "./Span.js";
2
+ /** `Span` props without `isCode` and `family`: a `Code` is always inline code in mono. */
3
+ export type CodeProps = Omit<SpanProps, "isCode" | "family">;
4
+ /** Inline code inside a `Text`; a `Span` preset. */
5
+ declare const Code: import("react").ForwardRefExoticComponent<CodeProps & import("react").RefAttributes<HTMLSpanElement>>;
7
6
  export default Code;
package/dist/text/Code.js CHANGED
@@ -1,31 +1,22 @@
1
- import { withTheme } from "../theme/GalaxyTheme.js";
2
- /* empty css */
3
- import { styled } from "@linaria/react";
1
+ import Span from "./Span.js";
2
+ import { forwardRef } from "react";
4
3
  import { jsx } from "react/jsx-runtime";
5
4
  //#region src/text/Code.tsx
6
- var _exp = () => ({ theme }) => theme.font.mono.family;
7
- var _exp2 = () => ({ theme }) => theme.font.mono.weight.regular;
8
- var _exp3 = () => ({ theme }) => theme.font.mono.size.body_sm;
9
- var _exp4 = () => ({ theme }) => theme.color.border.primary;
10
- var _exp5 = () => ({ theme }) => theme.color.background.tertiary;
11
- var StyledCodeText = withTheme(/*#__PURE__*/ styled("span")({
12
- name: "StyledCodeText",
13
- class: "sdpyy92",
14
- propsAsIs: false,
15
- vars: {
16
- "sdpyy92-0": [_exp()],
17
- "sdpyy92-1": [_exp2()],
18
- "sdpyy92-2": [_exp3()],
19
- "sdpyy92-3": [_exp4()],
20
- "sdpyy92-4": [_exp5()]
21
- }
22
- }));
23
5
  /**
24
- * Inline code — mono family on a tinted, hairline-bordered chip. Nest it inside
25
- * a `Text` for identifiers and literals in prose.
6
+ * Inline code — an identifier, literal or path inside a `Text`. A thin preset over `Span`:
7
+ * `<Span isCode>`: mono at the enclosing `Text`'s step (~0.92×), hairline border,
8
+ * `background.tertiary`, `radius.sm`, `2px 4px` padding. It takes every other `Span` prop and
9
+ * inherits size, line height and color from the enclosing `Text`. Multi-line code is `CodeBlock`,
10
+ * not this. No own styles, no own enums.
26
11
  */
27
- var Code = ({ children }) => {
28
- return /* @__PURE__ */ jsx(StyledCodeText, { children });
29
- };
12
+ /** Inline code inside a `Text`; a `Span` preset. */
13
+ var Code = forwardRef(function Code(props, ref) {
14
+ return /* @__PURE__ */ jsx(Span, {
15
+ isCode: true,
16
+ ...props,
17
+ ref
18
+ });
19
+ });
20
+ Code.displayName = "Code";
30
21
  //#endregion
31
22
  export { Code as default };
@@ -0,0 +1,77 @@
1
+ import { type AriaAttributes, type CSSProperties } from "react";
2
+ /** Grammar used to highlight `content`. Values equal member names. */
3
+ export declare enum CodeBlockLanguage {
4
+ /** No highlighting. */
5
+ PLAIN = "PLAIN",
6
+ /** Shell scripts and commands. */
7
+ BASH = "BASH",
8
+ /** CSS. */
9
+ CSS = "CSS",
10
+ /** Go. */
11
+ GO = "GO",
12
+ /** GraphQL. */
13
+ GRAPHQL = "GRAPHQL",
14
+ /** HTML (and XML / SVG markup). */
15
+ HTML = "HTML",
16
+ /** JavaScript. */
17
+ JAVASCRIPT = "JAVASCRIPT",
18
+ /** JSON. */
19
+ JSON = "JSON",
20
+ /** JavaScript with JSX. */
21
+ JSX = "JSX",
22
+ /** Markdown. */
23
+ MARKDOWN = "MARKDOWN",
24
+ /** Protocol Buffers. */
25
+ PROTOBUF = "PROTOBUF",
26
+ /** Python. */
27
+ PYTHON = "PYTHON",
28
+ /** Rust. */
29
+ RUST = "RUST",
30
+ /** SQL. */
31
+ SQL = "SQL",
32
+ /** TOML. */
33
+ TOML = "TOML",
34
+ /** TypeScript with JSX. */
35
+ TSX = "TSX",
36
+ /** TypeScript. */
37
+ TYPESCRIPT = "TYPESCRIPT",
38
+ /** YAML. */
39
+ YAML = "YAML"
40
+ }
41
+ export interface CodeBlockProps extends AriaAttributes {
42
+ /** The code. Rendered verbatim; a single trailing newline is dropped. */
43
+ content: string;
44
+ /**
45
+ * Grammar for highlighting. `PLAIN` shows the code unhighlighted.
46
+ * @default CodeBlockLanguage.PLAIN
47
+ */
48
+ language?: CodeBlockLanguage;
49
+ /** Header text, such as a file name (`pipeline.yaml`). Defaults to the language's display name; there is none for `PLAIN`. */
50
+ label?: string;
51
+ /**
52
+ * Show a copy button in the header that copies `content` exactly as passed.
53
+ * @default false
54
+ */
55
+ canCopy?: boolean;
56
+ /**
57
+ * Show a line-number gutter. Numbers are not selected or copied.
58
+ * @default false
59
+ */
60
+ hasLineNumbers?: boolean;
61
+ /**
62
+ * Treat `content` as a unified diff: lines starting with `+` / `-` are tinted as added / removed, `@@` lines as hunk headers. The rest of each line is highlighted with `language`.
63
+ * @default false
64
+ */
65
+ isDiff?: boolean;
66
+ /** DOM id on the root `<div>`. */
67
+ id?: string;
68
+ /** Any `data-*` attribute, forwarded to the root `<div>`. */
69
+ [dataAttribute: `data-${string}`]: string | number | boolean | undefined;
70
+ /** Extra class on the root `<div>`. */
71
+ className?: string;
72
+ /** Inline style on the root `<div>`; only for setting CSS custom properties. */
73
+ style?: CSSProperties;
74
+ }
75
+ /** Read-only code with lazy syntax highlighting, copy, line numbers and diff mode. */
76
+ declare const CodeBlock: import("react").ForwardRefExoticComponent<CodeBlockProps & import("react").RefAttributes<HTMLDivElement>>;
77
+ export default CodeBlock;