@galaxy-io/dls 1.6.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (538) hide show
  1. package/README.md +47 -50
  2. package/biome/index.json +74 -0
  3. package/biome/plugins/no-hex-literal.grit +20 -0
  4. package/biome/plugins/no-inline-style.grit +13 -0
  5. package/biome/plugins/no-margin.grit +9 -0
  6. package/biome/plugins/warn/no-hex-literal.grit +23 -0
  7. package/biome/plugins/warn/no-inline-style.grit +13 -0
  8. package/biome/plugins/warn/no-margin.grit +9 -0
  9. package/dist/a11y/FocusScope.d.ts +44 -0
  10. package/dist/a11y/FocusScope.js +229 -0
  11. package/dist/a11y/VisuallyHidden.d.ts +21 -0
  12. package/dist/a11y/VisuallyHidden.js +30 -0
  13. package/dist/avatar/Avatar.d.ts +56 -14
  14. package/dist/avatar/Avatar.js +250 -96
  15. package/dist/avatar/AvatarGroup.d.ts +43 -0
  16. package/dist/avatar/AvatarGroup.js +153 -0
  17. package/dist/backgrounds/GridBackground.d.ts +48 -0
  18. package/dist/backgrounds/GridBackground.js +146 -0
  19. package/dist/beacons/Beacon.d.ts +86 -22
  20. package/dist/beacons/Beacon.js +170 -47
  21. package/dist/brand/GalaxyFilamentWordmark.d.ts +30 -0
  22. package/dist/brand/GalaxyFilamentWordmark.js +39 -0
  23. package/dist/brand/GalaxyLogomark.d.ts +26 -0
  24. package/dist/brand/GalaxyLogomark.js +41 -0
  25. package/dist/brand/GalaxyLogomarkAnimation.d.ts +36 -0
  26. package/dist/brand/GalaxyLogomarkAnimation.js +107 -0
  27. package/dist/brand/GalaxyWordmark.d.ts +30 -0
  28. package/dist/brand/GalaxyWordmark.js +63 -0
  29. package/dist/brand/assets/galaxy-logomark-animation.js +136678 -0
  30. package/dist/brand/brandMark.d.ts +26 -0
  31. package/dist/brand/brandMark.js +35 -0
  32. package/dist/buttons/Button.d.ts +148 -59
  33. package/dist/buttons/Button.js +437 -227
  34. package/dist/buttons/ButtonGroup.d.ts +38 -0
  35. package/dist/buttons/ButtonGroup.js +68 -0
  36. package/dist/buttons/CopyButton.d.ts +77 -0
  37. package/dist/buttons/CopyButton.js +65 -0
  38. package/dist/charts/AreaChart.d.ts +49 -0
  39. package/dist/charts/AreaChart.js +31 -0
  40. package/dist/charts/BarChart.d.ts +54 -67
  41. package/dist/charts/BarChart.js +136 -116
  42. package/dist/charts/ChartAxis.d.ts +35 -40
  43. package/dist/charts/ChartAxis.js +114 -90
  44. package/dist/charts/ChartCategoryTargets.d.ts +12 -26
  45. package/dist/charts/ChartCategoryTargets.js +32 -20
  46. package/dist/charts/ChartFrame.d.ts +69 -116
  47. package/dist/charts/ChartFrame.js +253 -119
  48. package/dist/charts/ChartGroupProvider.d.ts +30 -41
  49. package/dist/charts/ChartGroupProvider.js +20 -7
  50. package/dist/charts/ChartLegend.d.ts +27 -48
  51. package/dist/charts/ChartLegend.js +206 -125
  52. package/dist/charts/ChartMarkTargets.d.ts +12 -28
  53. package/dist/charts/ChartMarkTargets.js +33 -20
  54. package/dist/charts/ChartPrimitives.d.ts +50 -305
  55. package/dist/charts/ChartPrimitives.js +65 -413
  56. package/dist/charts/ChartTooltip.d.ts +20 -26
  57. package/dist/charts/ChartTooltip.js +77 -40
  58. package/dist/charts/Heatmap.d.ts +35 -0
  59. package/dist/charts/Heatmap.js +295 -0
  60. package/dist/charts/LineChart.d.ts +54 -47
  61. package/dist/charts/LineChart.js +159 -117
  62. package/dist/charts/PieChart.d.ts +32 -53
  63. package/dist/charts/PieChart.js +149 -135
  64. package/dist/charts/Sparkline.d.ts +107 -0
  65. package/dist/charts/Sparkline.js +244 -0
  66. package/dist/charts/StatChart.d.ts +37 -13
  67. package/dist/charts/StatChart.js +82 -35
  68. package/dist/charts/barChartGeometry.d.ts +138 -86
  69. package/dist/charts/barChartGeometry.js +122 -101
  70. package/dist/charts/barChartLegend.d.ts +14 -18
  71. package/dist/charts/barChartLegend.js +18 -13
  72. package/dist/charts/chartFormat.d.ts +12 -18
  73. package/dist/charts/chartFormat.js +20 -52
  74. package/dist/charts/chartPalette.d.ts +33 -0
  75. package/dist/charts/chartPalette.js +68 -0
  76. package/dist/charts/chartScales.d.ts +41 -108
  77. package/dist/charts/chartScales.js +62 -128
  78. package/dist/charts/constants.d.ts +96 -256
  79. package/dist/charts/constants.js +105 -275
  80. package/dist/charts/heatmapGeometry.d.ts +95 -0
  81. package/dist/charts/heatmapGeometry.js +155 -0
  82. package/dist/charts/lineChartGeometry.d.ts +108 -58
  83. package/dist/charts/lineChartGeometry.js +120 -78
  84. package/dist/charts/pieChartGeometry.d.ts +66 -40
  85. package/dist/charts/pieChartGeometry.js +68 -38
  86. package/dist/charts/types.d.ts +197 -466
  87. package/dist/charts/types.js +55 -144
  88. package/dist/charts/useCartesianChartLayout.d.ts +28 -59
  89. package/dist/charts/useCartesianChartLayout.js +47 -32
  90. package/dist/charts/useChartDimensions.d.ts +19 -40
  91. package/dist/charts/useChartDimensions.js +40 -56
  92. package/dist/charts/useChartFormatters.d.ts +6 -15
  93. package/dist/charts/useChartFormatters.js +4 -9
  94. package/dist/charts/useChartInteraction.d.ts +47 -116
  95. package/dist/charts/useChartInteraction.js +95 -71
  96. package/dist/charts/useChartTooltipPosition.d.ts +29 -39
  97. package/dist/charts/useChartTooltipPosition.js +14 -5
  98. package/dist/charts/useSeriesColorResolver.d.ts +11 -33
  99. package/dist/charts/useSeriesColorResolver.js +19 -12
  100. package/dist/chips/Chip.d.ts +155 -44
  101. package/dist/chips/Chip.js +329 -155
  102. package/dist/chips/ChipGroup.d.ts +53 -0
  103. package/dist/chips/ChipGroup.js +98 -0
  104. package/dist/drawer/Drawer.d.ts +81 -17
  105. package/dist/drawer/Drawer.js +370 -65
  106. package/dist/dropdown/Dropdown.d.ts +80 -63
  107. package/dist/dropdown/Dropdown.js +127 -129
  108. package/dist/editor/CodeEditor.d.ts +119 -40
  109. package/dist/editor/CodeEditor.js +490 -400
  110. package/dist/editor/CodeEditorReactWidget.d.ts +20 -17
  111. package/dist/editor/CodeEditorReactWidget.js +28 -21
  112. package/dist/feedback/Alert.d.ts +49 -0
  113. package/dist/feedback/Alert.js +172 -0
  114. package/dist/feedback/EmptyState.d.ts +39 -0
  115. package/dist/feedback/EmptyState.js +109 -0
  116. package/dist/feedback/ProgressBar.d.ts +125 -0
  117. package/dist/feedback/ProgressBar.js +183 -0
  118. package/dist/feedback/ProgressCircle.d.ts +99 -0
  119. package/dist/feedback/ProgressCircle.js +187 -0
  120. package/dist/feedback/Skeleton.d.ts +69 -0
  121. package/dist/feedback/Skeleton.js +130 -0
  122. package/dist/feedback/Spinner.d.ts +63 -0
  123. package/dist/feedback/Spinner.js +141 -0
  124. package/dist/fonts.css +70 -0
  125. package/dist/hooks/internal/useIsClient.d.ts +2 -0
  126. package/dist/hooks/internal/useIsClient.js +14 -0
  127. package/dist/hooks/useClipboard.d.ts +19 -0
  128. package/dist/hooks/useClipboard.js +45 -0
  129. package/dist/hooks/useControlledOpenState.d.ts +21 -0
  130. package/dist/hooks/useControlledOpenState.js +19 -0
  131. package/dist/hooks/useControlledState.d.ts +19 -0
  132. package/dist/hooks/useControlledState.js +22 -0
  133. package/dist/hooks/useDebouncedValue.d.ts +14 -0
  134. package/dist/hooks/useDebouncedValue.js +33 -0
  135. package/dist/hooks/useDisclosure.d.ts +26 -0
  136. package/dist/hooks/useDisclosure.js +36 -0
  137. package/dist/hooks/useDismiss.d.ts +23 -27
  138. package/dist/hooks/useDismiss.js +39 -27
  139. package/dist/hooks/useElementClientSize.d.ts +10 -10
  140. package/dist/hooks/useElementClientSize.js +8 -11
  141. package/dist/hooks/useElementWidth.d.ts +6 -13
  142. package/dist/hooks/useElementWidth.js +6 -14
  143. package/dist/hooks/useField.d.ts +47 -0
  144. package/dist/hooks/useField.js +40 -0
  145. package/dist/hooks/useHotkey.d.ts +77 -0
  146. package/dist/hooks/useHotkey.js +246 -0
  147. package/dist/hooks/useIsMac.d.ts +12 -0
  148. package/dist/hooks/useIsMac.js +27 -0
  149. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +17 -0
  150. package/dist/hooks/useIsomorphicLayoutEffect.js +20 -0
  151. package/dist/hooks/useLocalStorage.d.ts +28 -0
  152. package/dist/hooks/useLocalStorage.js +145 -0
  153. package/dist/hooks/useMediaQuery.d.ts +11 -0
  154. package/dist/hooks/useMediaQuery.js +23 -0
  155. package/dist/hooks/usePrefersReducedMotion.d.ts +12 -0
  156. package/dist/hooks/usePrefersReducedMotion.js +25 -0
  157. package/dist/hooks/useResize.d.ts +42 -62
  158. package/dist/hooks/useResize.js +43 -31
  159. package/dist/icons/Icon.d.ts +64 -37
  160. package/dist/icons/Icon.js +96 -37
  161. package/dist/icons/internal/IconSlot.d.ts +10 -0
  162. package/dist/icons/internal/IconSlot.js +32 -0
  163. package/dist/inputs/CheckboxGroup.d.ts +115 -0
  164. package/dist/inputs/CheckboxGroup.js +183 -0
  165. package/dist/inputs/CheckboxInput.d.ts +98 -28
  166. package/dist/inputs/CheckboxInput.js +218 -88
  167. package/dist/inputs/ColorInput.d.ts +115 -29
  168. package/dist/inputs/ColorInput.js +748 -326
  169. package/dist/inputs/CopyInput.d.ts +49 -20
  170. package/dist/inputs/CopyInput.js +57 -49
  171. package/dist/inputs/CronInput.d.ts +94 -0
  172. package/dist/inputs/CronInput.js +618 -0
  173. package/dist/inputs/DateInput.d.ts +175 -28
  174. package/dist/inputs/DateInput.js +1109 -451
  175. package/dist/inputs/DurationInput.d.ts +101 -0
  176. package/dist/inputs/DurationInput.js +441 -0
  177. package/dist/inputs/Field.d.ts +75 -0
  178. package/dist/inputs/Field.js +247 -0
  179. package/dist/inputs/Fieldset.d.ts +53 -0
  180. package/dist/inputs/Fieldset.js +149 -0
  181. package/dist/inputs/FileInput.d.ts +110 -0
  182. package/dist/inputs/FileInput.js +476 -0
  183. package/dist/inputs/Input.d.ts +148 -187
  184. package/dist/inputs/Input.js +339 -259
  185. package/dist/inputs/KeyValueInput.d.ts +120 -0
  186. package/dist/inputs/KeyValueInput.js +383 -0
  187. package/dist/inputs/MultiSelectInput.d.ts +165 -54
  188. package/dist/inputs/MultiSelectInput.js +175 -559
  189. package/dist/inputs/NumberInput.d.ts +65 -9
  190. package/dist/inputs/NumberInput.js +197 -40
  191. package/dist/inputs/PasswordInput.d.ts +17 -12
  192. package/dist/inputs/PasswordInput.js +33 -33
  193. package/dist/inputs/PinInput.d.ts +117 -0
  194. package/dist/inputs/PinInput.js +364 -0
  195. package/dist/inputs/RadioGroup.d.ts +115 -0
  196. package/dist/inputs/RadioGroup.js +179 -0
  197. package/dist/inputs/RadioInput.d.ts +87 -24
  198. package/dist/inputs/RadioInput.js +182 -95
  199. package/dist/inputs/SearchInput.d.ts +66 -0
  200. package/dist/inputs/SearchInput.js +156 -0
  201. package/dist/inputs/SelectInput.d.ts +195 -55
  202. package/dist/inputs/SelectInput.js +1308 -446
  203. package/dist/inputs/SliderInput.d.ts +150 -30
  204. package/dist/inputs/SliderInput.js +441 -186
  205. package/dist/inputs/SwitchInput.d.ts +109 -0
  206. package/dist/inputs/SwitchInput.js +248 -0
  207. package/dist/inputs/TagInput.d.ts +117 -0
  208. package/dist/inputs/TagInput.js +408 -0
  209. package/dist/inputs/TextAreaInput.d.ts +146 -44
  210. package/dist/inputs/TextAreaInput.js +292 -198
  211. package/dist/inputs/TextInput.d.ts +4 -13
  212. package/dist/inputs/TextInput.js +13 -48
  213. package/dist/inputs/ToggleInput.d.ts +120 -22
  214. package/dist/inputs/ToggleInput.js +262 -116
  215. package/dist/inputs/internal/bareField.d.ts +18 -0
  216. package/dist/inputs/internal/bareField.js +38 -0
  217. package/dist/inputs/internal/devWarn.d.ts +7 -0
  218. package/dist/inputs/internal/devWarn.js +30 -0
  219. package/dist/inputs/internal/fieldFrame.d.ts +34 -0
  220. package/dist/inputs/internal/fieldFrame.js +64 -0
  221. package/dist/inputs/internal/fieldWiring.d.ts +50 -0
  222. package/dist/inputs/internal/fieldWiring.js +38 -0
  223. package/dist/inputs/internal/innerButton.d.ts +2 -0
  224. package/dist/inputs/internal/innerButton.js +24 -0
  225. package/dist/inputs/internal/ownField.d.ts +45 -0
  226. package/dist/inputs/internal/ownField.js +58 -0
  227. package/dist/inputs/internal/predicates.d.ts +9 -0
  228. package/dist/inputs/internal/predicates.js +11 -0
  229. package/dist/inputs/internal/useComboboxPopover.d.ts +46 -0
  230. package/dist/inputs/internal/useComboboxPopover.js +92 -0
  231. package/dist/json/JsonViewer.d.ts +62 -0
  232. package/dist/json/JsonViewer.js +483 -0
  233. package/dist/layout/Box.d.ts +87 -0
  234. package/dist/layout/Box.js +109 -0
  235. package/dist/layout/Divider.d.ts +25 -0
  236. package/dist/layout/Divider.js +70 -0
  237. package/dist/layout/Flex.d.ts +139 -0
  238. package/dist/layout/Flex.js +165 -0
  239. package/dist/layout/FlexItem.d.ts +72 -0
  240. package/dist/layout/FlexItem.js +84 -0
  241. package/dist/layout/Grid.d.ts +140 -0
  242. package/dist/layout/Grid.js +178 -0
  243. package/dist/layout/Portal.d.ts +29 -0
  244. package/dist/layout/Portal.js +27 -0
  245. package/dist/layout/ResizablePanels.d.ts +88 -0
  246. package/dist/layout/ResizablePanels.js +198 -0
  247. package/dist/layout/ResizeHandle.d.ts +48 -0
  248. package/dist/layout/ResizeHandle.js +143 -0
  249. package/dist/layout/ScrollArea.d.ts +30 -0
  250. package/dist/layout/ScrollArea.js +138 -0
  251. package/dist/links/Link.d.ts +101 -1
  252. package/dist/links/Link.js +166 -4
  253. package/dist/lists/BulletedList.d.ts +25 -7
  254. package/dist/lists/BulletedList.js +72 -27
  255. package/dist/lists/DescriptionList.d.ts +91 -0
  256. package/dist/lists/DescriptionList.js +147 -0
  257. package/dist/menu/ContextMenu.d.ts +64 -0
  258. package/dist/menu/ContextMenu.js +34 -0
  259. package/dist/menu/Menu.d.ts +280 -0
  260. package/dist/menu/Menu.js +1003 -0
  261. package/dist/modal/ConfirmDialog.d.ts +55 -0
  262. package/dist/modal/ConfirmDialog.js +151 -0
  263. package/dist/modal/Modal.d.ts +64 -14
  264. package/dist/modal/Modal.js +189 -48
  265. package/dist/navigation/Breadcrumbs.d.ts +65 -0
  266. package/dist/navigation/Breadcrumbs.js +243 -0
  267. package/dist/navigation/CommandPalette.d.ts +83 -0
  268. package/dist/navigation/CommandPalette.js +509 -0
  269. package/dist/navigation/Pagination.d.ts +87 -0
  270. package/dist/navigation/Pagination.js +300 -0
  271. package/dist/navigation/SidebarNav.d.ts +107 -0
  272. package/dist/navigation/SidebarNav.js +341 -0
  273. package/dist/navigation/Stepper.d.ts +52 -0
  274. package/dist/navigation/Stepper.js +207 -0
  275. package/dist/navigation/Tabs.d.ts +113 -0
  276. package/dist/navigation/Tabs.js +543 -0
  277. package/dist/navigation/Topbar.d.ts +20 -0
  278. package/dist/navigation/Topbar.js +62 -0
  279. package/dist/overlay/OverlayProvider.d.ts +28 -32
  280. package/dist/overlay/OverlayProvider.js +42 -93
  281. package/dist/overlay/useOverlay.d.ts +88 -12
  282. package/dist/overlay/useOverlay.js +220 -43
  283. package/dist/overlays/Popover.d.ts +114 -0
  284. package/dist/overlays/Popover.js +389 -0
  285. package/dist/shapes/Circle.d.ts +84 -8
  286. package/dist/shapes/Circle.js +122 -20
  287. package/dist/shapes/Square.d.ts +84 -8
  288. package/dist/shapes/Square.js +123 -20
  289. package/dist/styles/mixins.d.ts +35 -0
  290. package/dist/styles/mixins.js +60 -0
  291. package/dist/styles.css +1 -202
  292. package/dist/table/InfiniteSpreadsheet.d.ts +140 -10
  293. package/dist/table/InfiniteSpreadsheet.js +762 -225
  294. package/dist/table/InfiniteTable.d.ts +116 -14
  295. package/dist/table/InfiniteTable.js +287 -429
  296. package/dist/table/SpreadsheetCellEditor.d.ts +54 -6
  297. package/dist/table/SpreadsheetCellEditor.js +163 -84
  298. package/dist/table/TableCore.d.ts +252 -0
  299. package/dist/table/TableCore.js +1077 -0
  300. package/dist/table/VirtualizedInfiniteTable.d.ts +104 -14
  301. package/dist/table/VirtualizedInfiniteTable.js +280 -219
  302. package/dist/table/types.d.ts +66 -244
  303. package/dist/table/types.js +0 -51
  304. package/dist/table/useInfiniteScrollSentinel.d.ts +25 -21
  305. package/dist/table/useInfiniteScrollSentinel.js +38 -30
  306. package/dist/table/useSpreadsheetCellNavigation.d.ts +44 -0
  307. package/dist/table/useSpreadsheetCellNavigation.js +141 -0
  308. package/dist/table/useTableColumnLayout.d.ts +90 -25
  309. package/dist/table/useTableColumnLayout.js +255 -50
  310. package/dist/table/useTableKeyboardNavigation.d.ts +32 -21
  311. package/dist/table/useTableKeyboardNavigation.js +95 -71
  312. package/dist/table/useTableRowSelection.d.ts +24 -25
  313. package/dist/table/useTableRowSelection.js +57 -84
  314. package/dist/table/useTableVirtualizer.d.ts +20 -0
  315. package/dist/table/useTableVirtualizer.js +48 -0
  316. package/dist/text/Bold.d.ts +5 -6
  317. package/dist/text/Bold.js +16 -15
  318. package/dist/text/Code.d.ts +5 -6
  319. package/dist/text/Code.js +16 -25
  320. package/dist/text/CodeBlock.d.ts +77 -0
  321. package/dist/text/CodeBlock.js +373 -0
  322. package/dist/text/EditableText.d.ts +55 -15
  323. package/dist/text/EditableText.js +153 -135
  324. package/dist/text/Ellipsis.d.ts +34 -8
  325. package/dist/text/Ellipsis.js +55 -23
  326. package/dist/text/Kbd.d.ts +72 -0
  327. package/dist/text/Kbd.js +284 -0
  328. package/dist/text/MarkdownText.d.ts +27 -10
  329. package/dist/text/MarkdownText.js +317 -300
  330. package/dist/text/RequiredMarker.d.ts +17 -5
  331. package/dist/text/RequiredMarker.js +34 -36
  332. package/dist/text/Selectable.d.ts +5 -6
  333. package/dist/text/Selectable.js +16 -13
  334. package/dist/text/Span.d.ts +82 -0
  335. package/dist/text/Span.js +115 -0
  336. package/dist/text/Text.d.ts +128 -41
  337. package/dist/text/Text.js +209 -76
  338. package/dist/theme/GalaxyProvider.d.ts +75 -0
  339. package/dist/theme/GalaxyProvider.js +223 -0
  340. package/dist/theme/ThemeSwitcher.d.ts +52 -0
  341. package/dist/theme/ThemeSwitcher.js +94 -0
  342. package/dist/theme/enums.d.ts +118 -0
  343. package/dist/theme/enums.js +144 -0
  344. package/dist/theme/tokens/dark.d.ts +2 -0
  345. package/dist/theme/tokens/dark.js +275 -0
  346. package/dist/theme/tokens/generate.d.ts +15 -0
  347. package/dist/theme/tokens/generate.js +47 -0
  348. package/dist/theme/tokens/light.d.ts +2 -0
  349. package/dist/theme/tokens/light.js +274 -0
  350. package/dist/theme/tokens/palette.d.ts +14 -0
  351. package/dist/theme/tokens/palette.js +153 -0
  352. package/dist/theme/tokens/scales.d.ts +26 -0
  353. package/dist/theme/tokens/scales.js +154 -0
  354. package/dist/theme/tokens/t.d.ts +3 -0
  355. package/dist/theme/tokens/t.js +25 -0
  356. package/dist/theme/tokens/types.d.ts +189 -0
  357. package/dist/theme/tokens/types.js +0 -0
  358. package/dist/theme/useGalaxyTheme.d.ts +46 -0
  359. package/dist/theme/useGalaxyTheme.js +36 -0
  360. package/dist/theme/useInverseScope.d.ts +18 -0
  361. package/dist/theme/useInverseScope.js +33 -0
  362. package/dist/three/GalaxyLogomark3D.d.ts +46 -0
  363. package/dist/three/GalaxyLogomark3D.js +134 -0
  364. package/dist/three/assets/galaxy-logomark.js +4 -0
  365. package/dist/three/galaxyLogomark3DScene.d.ts +27 -0
  366. package/dist/three/galaxyLogomark3DScene.js +165 -0
  367. package/dist/timeline/Timeline.d.ts +99 -0
  368. package/dist/timeline/Timeline.js +269 -0
  369. package/dist/toast/Toast.d.ts +43 -19
  370. package/dist/toast/Toast.js +130 -89
  371. package/dist/toast/ToastProvider.d.ts +23 -23
  372. package/dist/toast/ToastProvider.js +298 -101
  373. package/dist/toast/ToastViewport.d.ts +12 -0
  374. package/dist/toast/ToastViewport.js +210 -0
  375. package/dist/toast/useToast.d.ts +139 -5
  376. package/dist/toast/useToast.js +15 -13
  377. package/dist/tokens.css +654 -0
  378. package/dist/tooltip/Tooltip.d.ts +64 -44
  379. package/dist/tooltip/Tooltip.js +280 -73
  380. package/dist/tooltip/internal/LazyTooltip.d.ts +7 -0
  381. package/dist/tooltip/internal/LazyTooltip.js +53 -0
  382. package/dist/transform/Fade.d.ts +33 -11
  383. package/dist/transform/Fade.js +71 -19
  384. package/dist/transform/Flasher.d.ts +25 -0
  385. package/dist/transform/Flasher.js +39 -0
  386. package/dist/transform/Rotate.d.ts +24 -12
  387. package/dist/transform/Rotate.js +36 -22
  388. package/dist/transform/ScaleFade.d.ts +36 -11
  389. package/dist/transform/ScaleFade.js +86 -28
  390. package/dist/transform/internal/CollapseMotion.d.ts +10 -0
  391. package/dist/transform/internal/CollapseMotion.js +65 -0
  392. package/dist/tree/Tree.d.ts +85 -0
  393. package/dist/tree/Tree.js +387 -0
  394. package/dist/tree/treeRow.d.ts +39 -0
  395. package/dist/tree/treeRow.js +75 -0
  396. package/dist/utils/colors.d.ts +46 -13
  397. package/dist/utils/colors.js +92 -34
  398. package/dist/utils/css.d.ts +23 -0
  399. package/dist/utils/css.js +30 -0
  400. package/dist/utils/format.d.ts +58 -0
  401. package/dist/utils/format.js +220 -0
  402. package/dist/vite/index.d.ts +16 -0
  403. package/dist/vite/index.js +52 -0
  404. package/dist/widget/Widget.d.ts +164 -48
  405. package/dist/widget/Widget.js +335 -96
  406. package/dist/widget/WidgetGroup.d.ts +36 -0
  407. package/dist/widget/WidgetGroup.js +103 -0
  408. package/package.json +851 -157
  409. package/dist/accordion/Accordion.d.ts +0 -54
  410. package/dist/accordion/Accordion.js +0 -183
  411. package/dist/assets/components/GalaxyFilamentWordmarkDark.d.ts +0 -3
  412. package/dist/assets/components/GalaxyFilamentWordmarkDark.js +0 -14
  413. package/dist/assets/components/GalaxyFilamentWordmarkLight.d.ts +0 -3
  414. package/dist/assets/components/GalaxyFilamentWordmarkLight.js +0 -14
  415. package/dist/assets/components/GalaxyLogomarkDark.d.ts +0 -3
  416. package/dist/assets/components/GalaxyLogomarkDark.js +0 -11
  417. package/dist/assets/components/GalaxyLogomarkLight.d.ts +0 -3
  418. package/dist/assets/components/GalaxyLogomarkLight.js +0 -17
  419. package/dist/assets/components/GalaxyWordmarkDark.d.ts +0 -3
  420. package/dist/assets/components/GalaxyWordmarkDark.js +0 -15
  421. package/dist/assets/components/GalaxyWordmarkLight.d.ts +0 -3
  422. package/dist/assets/components/GalaxyWordmarkLight.js +0 -28
  423. package/dist/assets/models/galaxy-animation.js +0 -136666
  424. package/dist/assets/models/galaxy-logomark.js +0 -4
  425. package/dist/avatar/AvatarShimmer.d.ts +0 -30
  426. package/dist/avatar/AvatarShimmer.js +0 -22
  427. package/dist/backgrounds/CellGridBackground.d.ts +0 -24
  428. package/dist/backgrounds/CellGridBackground.js +0 -44
  429. package/dist/backgrounds/CrossGridBackground.d.ts +0 -26
  430. package/dist/backgrounds/CrossGridBackground.js +0 -49
  431. package/dist/backgrounds/DotGridBackground.d.ts +0 -24
  432. package/dist/backgrounds/DotGridBackground.js +0 -47
  433. package/dist/badge/Badge.d.ts +0 -42
  434. package/dist/badge/Badge.js +0 -99
  435. package/dist/charts/ChartEmptyState.d.ts +0 -17
  436. package/dist/charts/ChartEmptyState.js +0 -29
  437. package/dist/charts/ProgressBar.d.ts +0 -29
  438. package/dist/charts/ProgressBar.js +0 -65
  439. package/dist/charts/chartTheme.d.ts +0 -18
  440. package/dist/charts/chartTheme.js +0 -26
  441. package/dist/containers/FlexItem.d.ts +0 -50
  442. package/dist/containers/FlexItem.js +0 -91
  443. package/dist/containers/FlexWrapper.d.ts +0 -96
  444. package/dist/containers/FlexWrapper.js +0 -143
  445. package/dist/containers/GridWrapper.d.ts +0 -79
  446. package/dist/containers/GridWrapper.js +0 -125
  447. package/dist/containers/Spacing.d.ts +0 -23
  448. package/dist/containers/Spacing.js +0 -59
  449. package/dist/containers/Wrapper.d.ts +0 -26
  450. package/dist/containers/Wrapper.js +0 -54
  451. package/dist/dividers/HorizontalDivider.d.ts +0 -7
  452. package/dist/dividers/HorizontalDivider.js +0 -39
  453. package/dist/dividers/VerticalDivider.d.ts +0 -6
  454. package/dist/dividers/VerticalDivider.js +0 -21
  455. package/dist/icons/GalaxyFilamentWordmark.d.ts +0 -11
  456. package/dist/icons/GalaxyFilamentWordmark.js +0 -25
  457. package/dist/icons/GalaxyLogomark.d.ts +0 -13
  458. package/dist/icons/GalaxyLogomark.js +0 -27
  459. package/dist/icons/GalaxyLogomark3D.d.ts +0 -56
  460. package/dist/icons/GalaxyLogomark3D.js +0 -319
  461. package/dist/icons/GalaxyLogomarkAnimation.d.ts +0 -18
  462. package/dist/icons/GalaxyLogomarkAnimation.js +0 -48
  463. package/dist/icons/GalaxyWordmark.d.ts +0 -11
  464. package/dist/icons/GalaxyWordmark.js +0 -25
  465. package/dist/inputs/MultiTextInput.d.ts +0 -32
  466. package/dist/inputs/MultiTextInput.js +0 -180
  467. package/dist/inputs/SwitcherInput.d.ts +0 -30
  468. package/dist/inputs/SwitcherInput.js +0 -81
  469. package/dist/inputs/hooks.d.ts +0 -10
  470. package/dist/inputs/hooks.js +0 -22
  471. package/dist/overlay/constants.d.ts +0 -28
  472. package/dist/overlay/constants.js +0 -37
  473. package/dist/resizable/HorizontalResizeHandle.d.ts +0 -17
  474. package/dist/resizable/HorizontalResizeHandle.js +0 -38
  475. package/dist/resizable/VerticalResizeHandle.d.ts +0 -18
  476. package/dist/resizable/VerticalResizeHandle.js +0 -39
  477. package/dist/table/SpreadsheetCell.d.ts +0 -21
  478. package/dist/table/SpreadsheetCell.js +0 -71
  479. package/dist/table/SpreadsheetHeaderCell.d.ts +0 -23
  480. package/dist/table/SpreadsheetHeaderCell.js +0 -91
  481. package/dist/table/SpreadsheetMenuItem.d.ts +0 -14
  482. package/dist/table/SpreadsheetMenuItem.js +0 -33
  483. package/dist/table/SpreadsheetPrimitives.d.ts +0 -172
  484. package/dist/table/SpreadsheetPrimitives.js +0 -105
  485. package/dist/table/SpreadsheetRow.d.ts +0 -33
  486. package/dist/table/SpreadsheetRow.js +0 -73
  487. package/dist/table/SpreadsheetRowActionCell.d.ts +0 -14
  488. package/dist/table/SpreadsheetRowActionCell.js +0 -51
  489. package/dist/table/TableExpandCell.d.ts +0 -11
  490. package/dist/table/TableExpandCell.js +0 -24
  491. package/dist/table/TableExpandedRow.d.ts +0 -16
  492. package/dist/table/TableExpandedRow.js +0 -77
  493. package/dist/table/TableHeaderCellContent.d.ts +0 -30
  494. package/dist/table/TableHeaderCellContent.js +0 -48
  495. package/dist/table/TablePrimitives.d.ts +0 -313
  496. package/dist/table/TablePrimitives.js +0 -302
  497. package/dist/table/TableSelectCell.d.ts +0 -18
  498. package/dist/table/TableSelectCell.js +0 -27
  499. package/dist/table/TableStatusRow.d.ts +0 -18
  500. package/dist/table/TableStatusRow.js +0 -50
  501. package/dist/table/useSpreadsheetEditing.d.ts +0 -13
  502. package/dist/table/useSpreadsheetEditing.js +0 -41
  503. package/dist/table/useTableColumnResize.d.ts +0 -38
  504. package/dist/table/useTableColumnResize.js +0 -155
  505. package/dist/table/useTableRowExpansion.d.ts +0 -24
  506. package/dist/table/useTableRowExpansion.js +0 -62
  507. package/dist/table/utils.d.ts +0 -50
  508. package/dist/table/utils.js +0 -78
  509. package/dist/text/HotKeys.d.ts +0 -30
  510. package/dist/text/HotKeys.js +0 -74
  511. package/dist/text/Paragraph.d.ts +0 -33
  512. package/dist/text/Paragraph.js +0 -83
  513. package/dist/text/TextShimmer.d.ts +0 -14
  514. package/dist/text/TextShimmer.js +0 -34
  515. package/dist/theme/GalaxyTheme.d.ts +0 -67
  516. package/dist/theme/GalaxyTheme.js +0 -119
  517. package/dist/theme/constants.d.ts +0 -8
  518. package/dist/theme/constants.js +0 -38
  519. package/dist/theme/index.d.ts +0 -6
  520. package/dist/theme/index.js +0 -7
  521. package/dist/theme/types.d.ts +0 -195
  522. package/dist/theme/types.js +0 -10
  523. package/dist/theme/typography.d.ts +0 -2
  524. package/dist/theme/typography.js +0 -73
  525. package/dist/theme/variants/dark.d.ts +0 -2
  526. package/dist/theme/variants/dark.js +0 -125
  527. package/dist/theme/variants/light.d.ts +0 -2
  528. package/dist/theme/variants/light.js +0 -125
  529. package/dist/toast/ToastContainer.d.ts +0 -10
  530. package/dist/toast/ToastContainer.js +0 -31
  531. package/dist/toast/ToastWrapper.d.ts +0 -6
  532. package/dist/toast/ToastWrapper.js +0 -27
  533. package/dist/transform/Flash.d.ts +0 -7
  534. package/dist/transform/Flash.js +0 -18
  535. package/dist/transform/Spin.d.ts +0 -14
  536. package/dist/transform/Spin.js +0 -25
  537. package/dist/utils/linaria.d.ts +0 -1
  538. package/dist/utils/linaria.js +0 -8
@@ -0,0 +1,113 @@
1
+ import { type Icon as PhosphorIcon } from "@phosphor-icons/react";
2
+ import { type AriaAttributes, type CSSProperties, type ElementType, type ReactElement, type ReactNode, type RefAttributes } from "react";
3
+ import { Orientation } from "../theme/enums.js";
4
+ /** Mode (Constitution V-A local mode set: Tabs UNDERLINE / PILL; declared in scripts/lint-dls.ts MODE_SETS). */
5
+ export declare enum TabsVariant {
6
+ /** Tabs on a hairline; the selected tab has a `text.primary` indicator on the edge facing the panel. The default. */
7
+ UNDERLINE = "UNDERLINE",
8
+ /** No hairline; the selected tab is a filled pill. For a second level of tabs. */
9
+ PILL = "PILL"
10
+ }
11
+ /**
12
+ * Canonical rungs, subset: the label and icon size, and the tab height. `PILL` tabs and vertical
13
+ * tabs are one rung tall (24 / 32 / 36px); a horizontal `UNDERLINE` row is taller (at least
14
+ * 32 / 40 / 44px) so the label has room above the indicator.
15
+ */
16
+ export declare enum TabsSize {
17
+ /** body_sm labels, 12px icons; 24px tabs (a 32px `UNDERLINE` row). Dense panels and cards. */
18
+ SMALL = "SMALL",
19
+ /** body_md labels, 14px icons; 32px tabs (a 40px `UNDERLINE` row). The default. */
20
+ MEDIUM = "MEDIUM",
21
+ /** body_lg labels, 14px icons; 36px tabs (a 44px `UNDERLINE` row). Page headers. */
22
+ LARGE = "LARGE"
23
+ }
24
+ /** Fields shared by panel tabs and link tabs. */
25
+ interface TabItemBase<TId extends string = string> {
26
+ /** Identifies the tab; `value` and `onChange` use it. Unique within `items`. */
27
+ id: TId;
28
+ /** Visible tab text, one short word or two. Also the overflow menu row's label. */
29
+ label: string;
30
+ /** Phosphor icon component (`GitBranchIcon`, not `<GitBranchIcon />`), before the label. */
31
+ icon?: PhosphorIcon;
32
+ /** Number after the label, as a count `Chip` (0 or less is hidden; above 99 shows "99+"). */
33
+ count?: number;
34
+ /** The tab cannot be selected; arrow keys skip it. */
35
+ isDisabled?: boolean;
36
+ }
37
+ /** A tab that shows a panel under (or beside) the tab list. */
38
+ export interface TabItem<TId extends string = string> extends TabItemBase<TId> {
39
+ /** Content shown while this tab is selected, inside a `role="tabpanel"`. Omit it when the app renders the view itself. */
40
+ panel?: ReactNode;
41
+ /** Panel tabs never navigate. */
42
+ href?: undefined;
43
+ }
44
+ /** A tab that is a link: the router shows the page; Tabs only marks the current one. */
45
+ export interface TabLinkItem<TId extends string = string> extends TabItemBase<TId> {
46
+ /** Destination, rendered through `as`. */
47
+ href: string;
48
+ /** Link tabs have no panel. */
49
+ panel?: undefined;
50
+ }
51
+ export interface TabsProps<TId extends string = string> extends AriaAttributes {
52
+ /** The tabs, in order. Either all panel tabs (`panel`, optional) or all link tabs (`href`). */
53
+ items: TabItem<TId>[] | TabLinkItem<TId>[];
54
+ /** Controlled selection: the selected tab's `id`, or `null` for none. Pass it with `onChange`. For link tabs, the tab of the current route. */
55
+ value?: TId | null;
56
+ /**
57
+ * Initial selection while uncontrolled.
58
+ * @default the first enabled item's id
59
+ */
60
+ defaultValue?: TId | null;
61
+ /** Called with the tab's `id` when the user selects a different tab (click, arrow keys, Home / End, the overflow menu). Link tabs call it before navigating. */
62
+ onChange?: (value: TId) => void;
63
+ /**
64
+ * `UNDERLINE` for page-level sections; `PILL` for a second level inside a section or a card.
65
+ * @default TabsVariant.UNDERLINE
66
+ */
67
+ variant?: TabsVariant;
68
+ /**
69
+ * Tab rung: 24 / 32 / 36px tall, with matching type, icon and count sizes. A horizontal `UNDERLINE` row is at least 32 / 40 / 44px, and as tall as a flex row that stretches it.
70
+ * @default TabsSize.MEDIUM
71
+ */
72
+ size?: TabsSize;
73
+ /**
74
+ * `HORIZONTAL`: a row above the panel. `VERTICAL`: a column beside the panel (settings pages); never overflows.
75
+ * @default Orientation.HORIZONTAL
76
+ */
77
+ orientation?: Orientation;
78
+ /**
79
+ * Horizontal only: the row spans its parent and every tab takes an equal share; labels truncate instead of overflowing into a menu.
80
+ * @default false
81
+ */
82
+ fillWidth?: boolean;
83
+ /** Controls at the end of the tab row (or the bottom of the column), outside the tablist, usually `Button`s one rung smaller. */
84
+ actions?: ReactNode;
85
+ /**
86
+ * Router link component that renders link tabs (`href`). It receives `href` and must forward its `ref`. Ignored for panel tabs.
87
+ * @default "a"
88
+ */
89
+ as?: ElementType;
90
+ /** Accessible name of the tablist (or of the `nav` for link tabs). Pass it unless a visible heading names the tabs (`aria-labelledby`). */
91
+ ariaLabel?: string;
92
+ /** DOM id of the tablist (or the `nav` for link tabs). */
93
+ id?: string;
94
+ /** Any `data-*` attribute, forwarded to the tablist (or the `nav` for link tabs). */
95
+ [dataAttribute: `data-${string}`]: string | number | boolean | undefined;
96
+ /** Extra class on the root. */
97
+ className?: string;
98
+ /** Inline style on the root; only for setting CSS custom properties. */
99
+ style?: CSSProperties;
100
+ }
101
+ /**
102
+ * The public, generic call signature (`TId` inferred from `items`). Never called: it only types
103
+ * the default export. An arrow function rather than a type literal, so react-docgen-typescript
104
+ * reads the props for the Docs tab.
105
+ */
106
+ declare const TABS_SIGNATURE: <TId extends string = string>(_props: TabsProps<TId> & RefAttributes<HTMLDivElement>) => ReactElement | null;
107
+ /**
108
+ * Tabs that switch between peer views of one place; the value is the selected tab's id. A
109
+ * horizontal row centers its labels on the height it gets and keeps the `UNDERLINE` indicator on
110
+ * its bottom edge, so in a stretching header row the labels line up with the row's other content.
111
+ */
112
+ declare const Tabs: typeof TABS_SIGNATURE;
113
+ export default Tabs;
@@ -0,0 +1,543 @@
1
+ import { useIsomorphicLayoutEffect } from "../hooks/useIsomorphicLayoutEffect.js";
2
+ import { Orientation, Placement } from "../theme/enums.js";
3
+ import Text, { TextSize, TextVariant, TextWeight } from "../text/Text.js";
4
+ import { useControlledState } from "../hooks/useControlledState.js";
5
+ import Icon, { IconVariant } from "../icons/Icon.js";
6
+ import Chip, { ChipSize, ChipVariant } from "../chips/Chip.js";
7
+ import Menu, { MenuItem, MenuSize } from "../menu/Menu.js";
8
+ /* empty css */
9
+ import { styled } from "@linaria/react";
10
+ import { forwardRef, useCallback, useEffect, useId, useRef, useState } from "react";
11
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
12
+ import { cx } from "@linaria/core";
13
+ import { CaretDownIcon } from "@phosphor-icons/react";
14
+ //#region src/navigation/Tabs.tsx
15
+ /**
16
+ * Switches between peer views of one place: Canvas / History / Settings of a pipeline, Overview /
17
+ * Logs of a run. A row (or a column) of labelled tabs marks the selected one and either renders
18
+ * the selected item's `panel` beside it or, when the items are links (`href` + a router `as`),
19
+ * navigates. Each tab can show an icon and a count `Chip`. `UNDERLINE` is the page-level mode (a
20
+ * hairline with a `text.primary` indicator under the selected tab); `PILL` is a quieter second level (the
21
+ * selected tab is a filled pill). Horizontal tabs that do not fit collapse into a "More" menu at
22
+ * the end of the row, so the row never wraps or scrolls.
23
+ *
24
+ * Height: a horizontal row takes the height it is given. Alone it is its rung tall; stretched by
25
+ * a taller flex row (the default `align-items: stretch`, e.g. a 48px app header) it fills that
26
+ * height, centers its labels, icons, counts, "More" and `actions` on it (so they line up with the
27
+ * other centered content in the row) and draws the `UNDERLINE` hairline and indicator on the
28
+ * row's bottom edge. In an `align-items: center` row it keeps its own height. No prop, no context.
29
+ *
30
+ * Panel tabs follow the WAI-ARIA tabs pattern (one tab stop, arrows move and select); link tabs
31
+ * are a `nav` of links with `aria-current="page"`. Not a segmented control (`ToggleInput`), not
32
+ * site navigation (`SidebarNav`), not a progress sequence (`Stepper`).
33
+ *
34
+ * SSR: every tab renders on the server (clipped while unmeasured); measurement and the
35
+ * `ResizeObserver` start in an effect. Nothing touches `window` or `document` at module scope.
36
+ */
37
+ /** Mode (Constitution V-A local mode set: Tabs UNDERLINE / PILL; declared in scripts/lint-dls.ts MODE_SETS). */
38
+ var TabsVariant = /* @__PURE__ */ function(TabsVariant) {
39
+ /** Tabs on a hairline; the selected tab has a `text.primary` indicator on the edge facing the panel. The default. */
40
+ TabsVariant["UNDERLINE"] = "UNDERLINE";
41
+ /** No hairline; the selected tab is a filled pill. For a second level of tabs. */
42
+ TabsVariant["PILL"] = "PILL";
43
+ return TabsVariant;
44
+ }({});
45
+ /**
46
+ * Canonical rungs, subset: the label and icon size, and the tab height. `PILL` tabs and vertical
47
+ * tabs are one rung tall (24 / 32 / 36px); a horizontal `UNDERLINE` row is taller (at least
48
+ * 32 / 40 / 44px) so the label has room above the indicator.
49
+ */
50
+ var TabsSize = /* @__PURE__ */ function(TabsSize) {
51
+ /** body_sm labels, 12px icons; 24px tabs (a 32px `UNDERLINE` row). Dense panels and cards. */
52
+ TabsSize["SMALL"] = "SMALL";
53
+ /** body_md labels, 14px icons; 32px tabs (a 40px `UNDERLINE` row). The default. */
54
+ TabsSize["MEDIUM"] = "MEDIUM";
55
+ /** body_lg labels, 14px icons; 36px tabs (a 44px `UNDERLINE` row). Page headers. */
56
+ TabsSize["LARGE"] = "LARGE";
57
+ return TabsSize;
58
+ }({});
59
+ /** The hairline width; written out because the bar draws one edge only. */
60
+ /** Sub-pixel slack when comparing measured widths. */
61
+ var FIT_EPSILON_PX = .5;
62
+ /** The root block: bar, then panel (a horizontal bar with no panel fills the root's height). */
63
+ var Root = /*#__PURE__*/ styled("div")({
64
+ name: "Root",
65
+ class: "gx-Tabs-r1fvk33l",
66
+ propsAsIs: false
67
+ });
68
+ /** Holds the tab list (or nav), the overflow trigger and `actions` in one line. */
69
+ var Bar = /*#__PURE__*/ styled("div")({
70
+ name: "Bar",
71
+ class: "gx-Tabs-Bar-b18rczus",
72
+ propsAsIs: false
73
+ });
74
+ /** The link tabs' landmark. */
75
+ var Nav = /*#__PURE__*/ styled("nav")({
76
+ name: "Nav",
77
+ class: "gx-Tabs-Nav-n1mwnohx",
78
+ propsAsIs: false
79
+ });
80
+ /** The tablist (a `ul` inside `Nav` for link tabs). */
81
+ var List = /*#__PURE__*/ styled("div")({
82
+ name: "List",
83
+ class: "gx-Tabs-List-lr7z9la",
84
+ propsAsIs: false
85
+ });
86
+ /** A link tab's list item. */
87
+ var ListItem = /*#__PURE__*/ styled("li")({
88
+ name: "ListItem",
89
+ class: "gx-Tabs-ListItem-l352qes",
90
+ propsAsIs: false
91
+ });
92
+ /** One tab: a `button role="tab"`, or the router link / `a` for link tabs. */
93
+ var Tab = /*#__PURE__*/ styled("button")({
94
+ name: "Tab",
95
+ class: "gx-Tabs-Tab-t1ynoa32",
96
+ propsAsIs: false
97
+ });
98
+ /** Controls after the tabs (or under the column). */
99
+ var Actions = /*#__PURE__*/ styled("div")({
100
+ name: "Actions",
101
+ class: "gx-Tabs-Actions-a1ecacuu",
102
+ propsAsIs: false
103
+ });
104
+ /** The selected panel tab's content. */
105
+ var Panel = /*#__PURE__*/ styled("div")({
106
+ name: "Panel",
107
+ class: "gx-Tabs-Panel-p1hrazk9",
108
+ propsAsIs: false
109
+ });
110
+ var TABS_ORIENTATION_TO_CSS_MAP = {
111
+ [Orientation.HORIZONTAL]: "gx-Tabs-Orientation_HORIZONTAL-o1r67x9f",
112
+ [Orientation.VERTICAL]: "gx-Tabs-Orientation_VERTICAL-o2dkvh9"
113
+ };
114
+ /** Horizontal `fillWidth`: the row spans its parent and every tab takes an equal share. */
115
+ var FILL_WIDTH_CSS = "gx-Tabs-FILL_WIDTH_CSS-fs6iug3";
116
+ var TABS_ORIENTATION_TO_BAR_CSS_MAP = {
117
+ [Orientation.HORIZONTAL]: "gx-Tabs-Orientation_HORIZONTAL-ovxftzj",
118
+ [Orientation.VERTICAL]: "gx-Tabs-Orientation_VERTICAL-oduyhd6"
119
+ };
120
+ /**
121
+ * The hairline on the edge facing the panel (`UNDERLINE` only). A horizontal row draws it as an
122
+ * overlay on its bottom edge (a border, so it lands on a whole device pixel inside the row) and
123
+ * the selected tab's 2px indicator covers it; neither takes layout space. The tabs and the "More"
124
+ * trigger stretch to the row's height (at least the `UNDERLINE` row height) with the label
125
+ * centered on the full height, so the row can stretch with its parent; `actions` center too.
126
+ */
127
+ var TABS_VARIANT_TO_BAR_CSS_MAP = {
128
+ ["UNDERLINE"]: {
129
+ [Orientation.HORIZONTAL]: "gx-Tabs-Orientation_HORIZONTAL-oux4b2d",
130
+ [Orientation.VERTICAL]: "gx-Tabs-Orientation_VERTICAL-o6lhzlg"
131
+ },
132
+ ["PILL"]: {
133
+ [Orientation.HORIZONTAL]: "gx-Tabs-Orientation_HORIZONTAL-otj50wv",
134
+ [Orientation.VERTICAL]: "gx-Tabs-Orientation_VERTICAL-o1wa4rz3"
135
+ }
136
+ };
137
+ var TABS_ORIENTATION_TO_LIST_CSS_MAP = {
138
+ [Orientation.HORIZONTAL]: "gx-Tabs-Orientation_HORIZONTAL-o19ax5w1",
139
+ [Orientation.VERTICAL]: "gx-Tabs-Orientation_VERTICAL-o6on29c"
140
+ };
141
+ /** While unmeasured (server, first paint, after items change): every tab renders, clipped. */
142
+ var MEASURING_CSS = "gx-Tabs-MEASURING_CSS-m1cleozi";
143
+ /** The overflow trigger copy that is only measured. */
144
+ var MEASURING_TRIGGER_CSS = "gx-Tabs-MEASURING_TRIGGER_CSS-mfzxznm";
145
+ /**
146
+ * Height, padding and icon-label gap per rung (custom properties on `Bar`). `--gx-tabs-row-height`
147
+ * is the horizontal `UNDERLINE` row's minimum: the label centered with 8 / 12 / 12px above and
148
+ * below it, the 2px indicator drawn over the bottom of that space.
149
+ */
150
+ var TABS_SIZE_TO_CSS_MAP = {
151
+ ["SMALL"]: "gx-Tabs-SMALL-s10e4gpz",
152
+ ["MEDIUM"]: "gx-Tabs-MEDIUM-m1k4ei2n",
153
+ ["LARGE"]: "gx-Tabs-LARGE-l1fu2ke2"
154
+ };
155
+ /** Shape per mode (every tab and the overflow trigger). */
156
+ var TABS_VARIANT_TO_TAB_CSS_MAP = {
157
+ ["UNDERLINE"]: "gx-Tabs-UNDERLINE-u1q90ijz",
158
+ ["PILL"]: "gx-Tabs-PILL-p1xzvabb"
159
+ };
160
+ /** Hover and press on an enabled, unselected tab (and the overflow trigger). */
161
+ var TABS_VARIANT_TO_INTERACTIVE_CSS_MAP = {
162
+ ["UNDERLINE"]: "gx-Tabs-UNDERLINE-uxgth9d",
163
+ ["PILL"]: "gx-Tabs-PILL-p15kodi3"
164
+ };
165
+ var TABS_VARIANT_TO_SELECTED_CSS_MAP = {
166
+ ["UNDERLINE"]: "gx-Tabs-UNDERLINE-uhu3rsh",
167
+ ["PILL"]: "gx-Tabs-PILL-p1nmauec"
168
+ };
169
+ /** The `UNDERLINE` indicator's edge: always the one facing the panel, over the bar hairline. */
170
+ var TABS_ORIENTATION_TO_INDICATOR_CSS_MAP = {
171
+ [Orientation.HORIZONTAL]: "gx-Tabs-Orientation_HORIZONTAL-o14ug43i",
172
+ [Orientation.VERTICAL]: "gx-Tabs-Orientation_VERTICAL-o1qvds3x"
173
+ };
174
+ var TAB_DISABLED_CSS = "gx-Tabs-TAB_DISABLED_CSS-ta8x8b6";
175
+ /** Tab icon px per rung: one step below the rung's III-A.4 icon (Mitch, 2026-10-04). */
176
+ var TABS_SIZE_TO_ICON_PX_MAP = {
177
+ ["SMALL"]: 12,
178
+ ["MEDIUM"]: 14,
179
+ ["LARGE"]: 14
180
+ };
181
+ /** The "More" caret: 12px, 10px on the 24px rung (the collapsible Widget's caret). */
182
+ var TABS_SIZE_TO_CARET_PX_MAP = {
183
+ ["SMALL"]: 10,
184
+ ["MEDIUM"]: 12,
185
+ ["LARGE"]: 12
186
+ };
187
+ var TABS_SIZE_TO_TEXT_SIZE_MAP = {
188
+ ["SMALL"]: TextSize.BODY_SM,
189
+ ["MEDIUM"]: TextSize.BODY_MD,
190
+ ["LARGE"]: TextSize.BODY_LG
191
+ };
192
+ var TABS_SIZE_TO_CHIP_SIZE_MAP = {
193
+ ["SMALL"]: ChipSize.X_SMALL,
194
+ ["MEDIUM"]: ChipSize.SMALL,
195
+ ["LARGE"]: ChipSize.SMALL
196
+ };
197
+ var TABS_SIZE_TO_MENU_SIZE_MAP = {
198
+ ["SMALL"]: MenuSize.SMALL,
199
+ ["MEDIUM"]: MenuSize.MEDIUM,
200
+ ["LARGE"]: MenuSize.MEDIUM
201
+ };
202
+ /** "More" + caret: looks like one more tab, but is a plain button outside the tablist. */
203
+ var OverflowTrigger = forwardRef(function OverflowTrigger({ size, variant, className, ...rest }, ref) {
204
+ return /* @__PURE__ */ jsxs(Tab, {
205
+ type: "button",
206
+ "aria-label": "More tabs",
207
+ ...rest,
208
+ ref,
209
+ className: cx(TABS_VARIANT_TO_TAB_CSS_MAP[variant], TABS_VARIANT_TO_INTERACTIVE_CSS_MAP[variant], className),
210
+ children: [/* @__PURE__ */ jsx(Text, {
211
+ as: "span",
212
+ size: TABS_SIZE_TO_TEXT_SIZE_MAP[size],
213
+ weight: TextWeight.MEDIUM,
214
+ variant: TextVariant.INHERIT,
215
+ children: "More"
216
+ }), /* @__PURE__ */ jsx(Icon, {
217
+ component: CaretDownIcon,
218
+ size: TABS_SIZE_TO_CARET_PX_MAP[size],
219
+ variant: IconVariant.INHERIT
220
+ })]
221
+ });
222
+ });
223
+ OverflowTrigger.displayName = "TabsOverflowTrigger";
224
+ /** The parts of `items` that change a tab's width, plus the rung and mode. */
225
+ function measurementSignature(items, size, variant) {
226
+ return `${size}\u0001${variant}\u0001${items.map((item) => `${item.id}\u0000${item.label}\u0000${item.count ?? ""}\u0000${item.icon === void 0 ? 0 : 1}`).join("")}`;
227
+ }
228
+ /** A CSS length in px, or 0. */
229
+ function pxOf(value) {
230
+ const parsed = Number.parseFloat(value);
231
+ return Number.isFinite(parsed) ? parsed : 0;
232
+ }
233
+ /**
234
+ * Indexes of the tabs shown in the row: the largest prefix that fits (plus the trigger when some
235
+ * are hidden), with the selected tab pinned into the last slot when it would be hidden.
236
+ */
237
+ function fitVisibleIndexes(count, selectedIndex, measurement, available) {
238
+ const { tabWidths, triggerWidth, listGap } = measurement;
239
+ const indexesFor = (k) => {
240
+ const prefix = Array.from({ length: k }, (_, index) => index);
241
+ if (selectedIndex < k || selectedIndex < 0) return prefix;
242
+ return [...prefix.slice(0, k - 1), selectedIndex];
243
+ };
244
+ const widthOf = (indexes) => indexes.reduce((sum, index) => sum + (tabWidths[index] ?? 0), 0) + Math.max(0, indexes.length - 1) * listGap;
245
+ if (widthOf(indexesFor(count)) <= available + FIT_EPSILON_PX) return indexesFor(count);
246
+ for (let k = count - 1; k > 1; k -= 1) {
247
+ const indexes = indexesFor(k);
248
+ if (widthOf(indexes) + listGap + triggerWidth <= available + FIT_EPSILON_PX) return indexes;
249
+ }
250
+ return indexesFor(Math.min(1, count));
251
+ }
252
+ /** Tabs and their panel; the value is the selected tab's id. */
253
+ function TabsImpl(props, ref) {
254
+ const { items, value, defaultValue, onChange, variant = "UNDERLINE", size = "MEDIUM", orientation = Orientation.HORIZONTAL, fillWidth = false, actions, as, ariaLabel, id, className, style, ...rest } = props;
255
+ const list = items;
256
+ const isLinks = list.some((item) => item.href !== void 0);
257
+ const isHorizontal = orientation === Orientation.HORIZONTAL;
258
+ const isOverflowMode = isHorizontal && !fillWidth;
259
+ const firstEnabledId = list.find((item) => item.isDisabled !== true)?.id ?? null;
260
+ const handleChange = useCallback((next) => {
261
+ if (next !== null) onChange?.(next);
262
+ }, [onChange]);
263
+ const [selected, setSelected] = useControlledState({
264
+ value,
265
+ defaultValue: defaultValue === void 0 ? firstEnabledId : defaultValue,
266
+ onChange: handleChange
267
+ });
268
+ const selectedIndex = list.findIndex((item) => item.id === selected);
269
+ const selectedItem = selectedIndex >= 0 ? list[selectedIndex] : void 0;
270
+ const baseId = useId();
271
+ const tabId = (index) => `${baseId}-tab-${index}`;
272
+ const panelId = (index) => `${baseId}-panel-${index}`;
273
+ const barRef = useRef(null);
274
+ const listRef = useRef(null);
275
+ const actionsRef = useRef(null);
276
+ const measureTriggerRef = useRef(null);
277
+ const tabRefs = useRef(/* @__PURE__ */ new Map());
278
+ const signature = measurementSignature(list, size, variant);
279
+ const [measurement, setMeasurement] = useState(null);
280
+ const [available, setAvailable] = useState(null);
281
+ const isMeasuring = isOverflowMode && (measurement === null || measurement.signature !== signature);
282
+ const hasActions = actions !== void 0 && actions !== null && actions !== false;
283
+ /** The row's width for tabs and the trigger: the bar minus `actions` and its gap. */
284
+ const readAvailable = useCallback(() => {
285
+ const bar = barRef.current;
286
+ if (bar === null) return;
287
+ let width = bar.getBoundingClientRect().width;
288
+ const actionsElement = actionsRef.current;
289
+ if (actionsElement !== null) width -= actionsElement.getBoundingClientRect().width + pxOf(getComputedStyle(bar).columnGap);
290
+ setAvailable((current) => current === width ? current : width);
291
+ }, []);
292
+ useIsomorphicLayoutEffect(() => {
293
+ if (!isMeasuring) return;
294
+ const listElement = listRef.current;
295
+ setMeasurement({
296
+ signature,
297
+ tabWidths: list.map((item) => tabRefs.current.get(item.id)?.getBoundingClientRect().width ?? 0),
298
+ triggerWidth: measureTriggerRef.current?.getBoundingClientRect().width ?? 0,
299
+ listGap: listElement === null ? 0 : pxOf(getComputedStyle(listElement).columnGap)
300
+ });
301
+ readAvailable();
302
+ });
303
+ useEffect(() => {
304
+ if (!isOverflowMode) return;
305
+ const bar = barRef.current;
306
+ if (bar === null || typeof ResizeObserver === "undefined") return;
307
+ const observer = new ResizeObserver(readAvailable);
308
+ observer.observe(bar);
309
+ const actionsElement = hasActions ? actionsRef.current : null;
310
+ if (actionsElement !== null) observer.observe(actionsElement);
311
+ return () => observer.disconnect();
312
+ }, [
313
+ isOverflowMode,
314
+ hasActions,
315
+ readAvailable
316
+ ]);
317
+ useEffect(() => {
318
+ if (!isOverflowMode) return;
319
+ let isCancelled = false;
320
+ document.fonts?.ready.then(() => {
321
+ if (!isCancelled) setMeasurement(null);
322
+ });
323
+ return () => {
324
+ isCancelled = true;
325
+ };
326
+ }, [isOverflowMode]);
327
+ const allIndexes = list.map((_, index) => index);
328
+ const visibleIndexes = !isOverflowMode || isMeasuring || measurement === null || available === null ? allIndexes : fitVisibleIndexes(list.length, selectedIndex, measurement, available);
329
+ const visibleSet = new Set(visibleIndexes);
330
+ const hiddenIndexes = isMeasuring ? [] : allIndexes.filter((index) => !visibleSet.has(index));
331
+ const isEnabled = (index) => list[index]?.isDisabled !== true;
332
+ const enabledVisible = visibleIndexes.filter(isEnabled);
333
+ const tabStopIndex = selectedIndex >= 0 && visibleSet.has(selectedIndex) && isEnabled(selectedIndex) ? selectedIndex : enabledVisible[0] ?? -1;
334
+ const pendingFocusId = useRef(null);
335
+ useIsomorphicLayoutEffect(() => {
336
+ const pending = pendingFocusId.current;
337
+ if (pending === null) return;
338
+ const element = tabRefs.current.get(pending);
339
+ if (element !== void 0) {
340
+ pendingFocusId.current = null;
341
+ queueMicrotask(() => {
342
+ if (element.isConnected) element.focus();
343
+ });
344
+ }
345
+ });
346
+ const select = (index) => {
347
+ const item = list[index];
348
+ if (item === void 0 || item.isDisabled === true) return;
349
+ if (item.id !== selected) setSelected(item.id);
350
+ };
351
+ /** Roving focus over the enabled visible tabs: arrows wrap, Home / End jump; focus selects. */
352
+ const handleKeyDown = (event) => {
353
+ if (isLinks || enabledVisible.length === 0) return;
354
+ let current = -1;
355
+ for (const index of visibleIndexes) {
356
+ const item = list[index];
357
+ if (item !== void 0 && tabRefs.current.get(item.id) === event.target) current = index;
358
+ }
359
+ if (current === -1) return;
360
+ const previousKey = isHorizontal ? "ArrowLeft" : "ArrowUp";
361
+ const nextKey = isHorizontal ? "ArrowRight" : "ArrowDown";
362
+ const position = enabledVisible.indexOf(current);
363
+ const order = visibleIndexes.indexOf(current);
364
+ let target;
365
+ switch (event.key) {
366
+ case nextKey:
367
+ target = position === -1 ? visibleIndexes.slice(order + 1).find(isEnabled) ?? enabledVisible[0] : enabledVisible[(position + 1) % enabledVisible.length];
368
+ break;
369
+ case previousKey:
370
+ target = position === -1 ? visibleIndexes.slice(0, order).reverse().find(isEnabled) ?? enabledVisible[enabledVisible.length - 1] : enabledVisible[(position - 1 + enabledVisible.length) % enabledVisible.length];
371
+ break;
372
+ case "Home":
373
+ target = enabledVisible[0];
374
+ break;
375
+ case "End":
376
+ target = enabledVisible[enabledVisible.length - 1];
377
+ break;
378
+ default: return;
379
+ }
380
+ event.preventDefault();
381
+ const item = target === void 0 ? void 0 : list[target];
382
+ if (target === void 0 || item === void 0) return;
383
+ tabRefs.current.get(item.id)?.focus();
384
+ select(target);
385
+ };
386
+ const setTabRef = (itemId) => (element) => {
387
+ if (element === null) tabRefs.current.delete(itemId);
388
+ else tabRefs.current.set(itemId, element);
389
+ };
390
+ const renderTab = (index) => {
391
+ const item = list[index];
392
+ if (item === void 0) return null;
393
+ const isSelected = index === selectedIndex;
394
+ const isItemDisabled = item.isDisabled === true;
395
+ const content = /* @__PURE__ */ jsxs(Fragment$1, { children: [
396
+ item.icon !== void 0 && /* @__PURE__ */ jsx(Icon, {
397
+ component: item.icon,
398
+ size: TABS_SIZE_TO_ICON_PX_MAP[size],
399
+ variant: IconVariant.INHERIT
400
+ }),
401
+ /* @__PURE__ */ jsx(Text, {
402
+ as: "span",
403
+ size: TABS_SIZE_TO_TEXT_SIZE_MAP[size],
404
+ weight: TextWeight.MEDIUM,
405
+ variant: TextVariant.INHERIT,
406
+ lineClamp: 1,
407
+ shouldTooltipOnOverflow: fillWidth && isHorizontal,
408
+ children: item.label
409
+ }),
410
+ item.count !== void 0 && /* @__PURE__ */ jsx(Chip, {
411
+ count: item.count,
412
+ size: TABS_SIZE_TO_CHIP_SIZE_MAP[size],
413
+ variant: ChipVariant.SECONDARY
414
+ })
415
+ ] });
416
+ const tabClassName = cx(TABS_VARIANT_TO_TAB_CSS_MAP[variant], !isSelected && !isItemDisabled && TABS_VARIANT_TO_INTERACTIVE_CSS_MAP[variant], isSelected && TABS_VARIANT_TO_SELECTED_CSS_MAP[variant], isSelected && variant === "UNDERLINE" && TABS_ORIENTATION_TO_INDICATOR_CSS_MAP[orientation], isItemDisabled && TAB_DISABLED_CSS);
417
+ if (item.href !== void 0) return /* @__PURE__ */ jsx(ListItem, { children: /* @__PURE__ */ jsx(Tab, {
418
+ ...isItemDisabled ? {
419
+ as: "a",
420
+ role: "link",
421
+ "aria-disabled": true
422
+ } : {
423
+ as: as ?? "a",
424
+ href: item.href,
425
+ onClick: () => select(index)
426
+ },
427
+ ref: setTabRef(item.id),
428
+ id: tabId(index),
429
+ "aria-current": isSelected ? "page" : void 0,
430
+ className: tabClassName,
431
+ children: content
432
+ }) }, item.id);
433
+ return /* @__PURE__ */ jsx(Tab, {
434
+ ref: setTabRef(item.id),
435
+ type: "button",
436
+ role: "tab",
437
+ id: tabId(index),
438
+ "aria-selected": isSelected,
439
+ "aria-controls": isSelected && item.panel !== void 0 ? panelId(index) : void 0,
440
+ "aria-disabled": isItemDisabled || void 0,
441
+ tabIndex: index === tabStopIndex ? 0 : -1,
442
+ onClick: () => select(index),
443
+ className: tabClassName,
444
+ children: content
445
+ }, item.id);
446
+ };
447
+ const listClassName = cx(TABS_ORIENTATION_TO_LIST_CSS_MAP[orientation], isMeasuring && MEASURING_CSS);
448
+ const name = ariaLabel || rest["aria-label"] || void 0;
449
+ const tabs = isLinks ? /* @__PURE__ */ jsx(Nav, {
450
+ ...rest,
451
+ "aria-label": name,
452
+ id,
453
+ children: /* @__PURE__ */ jsx(List, {
454
+ as: "ul",
455
+ ref: listRef,
456
+ className: listClassName,
457
+ children: visibleIndexes.map(renderTab)
458
+ })
459
+ }) : /* @__PURE__ */ jsx(List, {
460
+ role: "tablist",
461
+ "aria-orientation": isHorizontal ? "horizontal" : "vertical",
462
+ ...rest,
463
+ "aria-label": name,
464
+ id,
465
+ ref: listRef,
466
+ className: listClassName,
467
+ onKeyDown: handleKeyDown,
468
+ children: visibleIndexes.map(renderTab)
469
+ });
470
+ const selectedPanel = selectedItem !== void 0 && selectedItem.href === void 0 ? selectedItem.panel : void 0;
471
+ return /* @__PURE__ */ jsxs(Root, {
472
+ ref,
473
+ className: cx(TABS_ORIENTATION_TO_CSS_MAP[orientation], fillWidth && isHorizontal && FILL_WIDTH_CSS, className),
474
+ style,
475
+ children: [/* @__PURE__ */ jsxs(Bar, {
476
+ ref: barRef,
477
+ className: cx(TABS_SIZE_TO_CSS_MAP[size], TABS_VARIANT_TO_BAR_CSS_MAP[variant][orientation], TABS_ORIENTATION_TO_BAR_CSS_MAP[orientation]),
478
+ children: [
479
+ tabs,
480
+ isMeasuring && /* @__PURE__ */ jsx(OverflowTrigger, {
481
+ ref: measureTriggerRef,
482
+ size,
483
+ variant,
484
+ tabIndex: -1,
485
+ "aria-hidden": true,
486
+ className: MEASURING_TRIGGER_CSS
487
+ }),
488
+ hiddenIndexes.length > 0 && /* @__PURE__ */ jsx(Menu, {
489
+ trigger: /* @__PURE__ */ jsx(OverflowTrigger, {
490
+ size,
491
+ variant
492
+ }),
493
+ size: TABS_SIZE_TO_MENU_SIZE_MAP[size],
494
+ placement: Placement.BOTTOM_END,
495
+ children: hiddenIndexes.map((index) => {
496
+ const item = list[index];
497
+ if (item === void 0) return null;
498
+ const trailing = item.count !== void 0 && item.count > 0 ? /* @__PURE__ */ jsx(Chip, {
499
+ count: item.count,
500
+ size: ChipSize.X_SMALL,
501
+ variant: ChipVariant.SECONDARY
502
+ }) : void 0;
503
+ const target = item.href !== void 0 ? {
504
+ href: item.href,
505
+ as: as ?? "a",
506
+ onSelect: () => select(index)
507
+ } : { onSelect: () => {
508
+ pendingFocusId.current = item.id;
509
+ select(index);
510
+ } };
511
+ return /* @__PURE__ */ jsx(MenuItem, {
512
+ label: item.label,
513
+ ...item.icon === void 0 ? {} : { icon: item.icon },
514
+ ...trailing === void 0 ? {} : { trailing },
515
+ isDisabled: item.isDisabled === true,
516
+ ...target
517
+ }, item.id);
518
+ })
519
+ }),
520
+ hasActions && /* @__PURE__ */ jsx(Actions, {
521
+ ref: actionsRef,
522
+ children: actions
523
+ })
524
+ ]
525
+ }), selectedPanel !== void 0 && selectedIndex >= 0 && /* @__PURE__ */ jsx(Panel, {
526
+ role: "tabpanel",
527
+ id: panelId(selectedIndex),
528
+ "aria-labelledby": tabId(selectedIndex),
529
+ tabIndex: 0,
530
+ children: selectedPanel
531
+ })]
532
+ });
533
+ }
534
+ var TabsBase = forwardRef(TabsImpl);
535
+ TabsBase.displayName = "Tabs";
536
+ /**
537
+ * Tabs that switch between peer views of one place; the value is the selected tab's id. A
538
+ * horizontal row centers its labels on the height it gets and keeps the `UNDERLINE` indicator on
539
+ * its bottom edge, so in a stretching header row the labels line up with the row's other content.
540
+ */
541
+ var Tabs = TabsBase;
542
+ //#endregion
543
+ export { TabsSize, TabsVariant, Tabs as default };
@@ -0,0 +1,20 @@
1
+ import { type AriaAttributes, type CSSProperties, type ReactNode } from "react";
2
+ export interface TopbarProps extends AriaAttributes {
3
+ /** The main content, after `leading`: `Breadcrumbs` or the page title. It takes the remaining width and truncates. A string renders as a medium `body_md` `Text`. */
4
+ children?: ReactNode;
5
+ /** Content at the start: a sidebar toggle, a back `Button`, a brand mark. Does not shrink. */
6
+ leading?: ReactNode;
7
+ /** Controls at the end: search, `Button`s, the account `Avatar`. Use `SMALL` controls. Does not shrink. */
8
+ actions?: ReactNode;
9
+ /** DOM id on the root `<header>`. */
10
+ id?: string;
11
+ /** Any `data-*` attribute, forwarded to the root `<header>`. */
12
+ [dataAttribute: `data-${string}`]: string | number | boolean | undefined;
13
+ /** Extra class on the root `<header>`. */
14
+ className?: string;
15
+ /** Inline style on the root `<header>`; only for setting CSS custom properties. */
16
+ style?: CSSProperties;
17
+ }
18
+ /** The page bar: `leading`, the title or breadcrumbs, and `actions` at the end. */
19
+ declare const Topbar: import("react").ForwardRefExoticComponent<TopbarProps & import("react").RefAttributes<HTMLElement>>;
20
+ export default Topbar;