@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,274 +1,484 @@
1
- import { GalaxyTheme } from "../theme/types.js";
2
- import { useGalaxyTheme, withTheme } from "../theme/GalaxyTheme.js";
3
- import Rotate from "../transform/Rotate.js";
1
+ import VisuallyHidden from "../a11y/VisuallyHidden.js";
2
+ import { Placement } from "../theme/enums.js";
4
3
  import Text, { TextSize, TextVariant, TextWeight } from "../text/Text.js";
5
- import FlexItem from "../containers/FlexItem.js";
6
- import Dropdown, { DropdownPosition } from "../dropdown/Dropdown.js";
7
- import Icon, { IconVariant, IconWeight } from "../icons/Icon.js";
4
+ import { useIsMac } from "../hooks/useIsMac.js";
5
+ import Kbd, { KbdSize, KbdVariant } from "../text/Kbd.js";
6
+ import Tooltip from "../tooltip/Tooltip.js";
7
+ import Dropdown from "../dropdown/Dropdown.js";
8
+ import { parseHotkey, useHotkey } from "../hooks/useHotkey.js";
9
+ import Icon, { IconVariant } from "../icons/Icon.js";
10
+ import IconSlot from "../icons/internal/IconSlot.js";
11
+ import Rotate from "../transform/Rotate.js";
8
12
  /* empty css */
9
13
  import { styled } from "@linaria/react";
10
- import { match } from "ts-pattern";
11
- import { useCallback, useState } from "react";
12
- import { jsx, jsxs } from "react/jsx-runtime";
13
- import { CaretDownIcon } from "@phosphor-icons/react";
14
+ import { forwardRef, useCallback, useRef, useState } from "react";
15
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
16
+ import { cx } from "@linaria/core";
17
+ import { ArrowUpRightIcon, CaretDownIcon, CircleNotchIcon } from "@phosphor-icons/react";
14
18
  //#region src/buttons/Button.tsx
15
- /** Visual weight. One PRIMARY per view; TERTIARY is the transparent variant. */
19
+ /**
20
+ * The standard action control. It shows a label, an icon, or both, and does one thing when
21
+ * pressed: runs `onClick`, submits or resets a form (`type`), or navigates (`href`, which renders
22
+ * an `<a>` with button styling). Five modes (`ButtonVariant`): one monochrome-solid `PRIMARY` per
23
+ * view, a bordered `SECONDARY`, a transparent `TERTIARY`, a muted filled `BASE` and a destructive
24
+ * `ERROR`; five size
25
+ * rungs (`ButtonSize`).
26
+ *
27
+ * Color is CSS: the variant map sets `color` and the fill on the root, and the label (`Text`),
28
+ * icon (`Icon`), spinner and caps all inherit it, so a theme switch needs no re-render.
29
+ *
30
+ * Blocked states (`isDisabled`, `isLoading`) use `aria-disabled` whenever focus matters (loading,
31
+ * or a tooltip that explains why) and native `disabled` otherwise; a blocked link drops its
32
+ * `href`. While blocked, Button's own click handler prevents the default action and never calls
33
+ * `onClick`.
34
+ *
35
+ * Every prop Button does not consume (`aria-*`, `data-*`, and any handler a wrapping `Tooltip`
36
+ * injects with `cloneElement`) is spread onto the root, so Button is a valid trigger.
37
+ *
38
+ * With `dropdown` it becomes a split button: the main segment, a hairline seam and a caret segment
39
+ * that opens a `Dropdown` of the main action's secondary options, in a `role="group"` named after
40
+ * the button. Not a joined group of peers (`ButtonGroup`), a copy control (`CopyButton`), an on/off
41
+ * control (`SwitchInput`) or an inline text link (`Link`).
42
+ */
43
+ /** Mode (Constitution V-A local mode set, declared in `scripts/lint-dls.ts` `MODE_SETS`). */
16
44
  var ButtonVariant = /* @__PURE__ */ function(ButtonVariant) {
45
+ /** Monochrome solid (`solid.primary`): the one main action in a view. The default. */
17
46
  ButtonVariant["PRIMARY"] = "PRIMARY";
18
- ButtonVariant["PRIMARY_ALT"] = "PRIMARY_ALT";
47
+ /** Panel fill with a hairline border. */
19
48
  ButtonVariant["SECONDARY"] = "SECONDARY";
49
+ /** Transparent until hovered. */
20
50
  ButtonVariant["TERTIARY"] = "TERTIARY";
21
- ButtonVariant["SUCCESS"] = "SUCCESS";
51
+ /**
52
+ * Muted fill (`solid.neutral`: `background.secondary` with a `text.primary` label), no border: a
53
+ * quiet filled action. Hover and press are clearly visible steps in both themes.
54
+ */
55
+ ButtonVariant["BASE"] = "BASE";
56
+ /** Error solid (`solid.error`): destructive actions only. */
22
57
  ButtonVariant["ERROR"] = "ERROR";
23
58
  return ButtonVariant;
24
59
  }({});
25
- /** Control height — 24 / 28 / 32px. Also drives label and icon size. */
60
+ /** Canonical rungs; Button supports all five. */
26
61
  var ButtonSize = /* @__PURE__ */ function(ButtonSize) {
62
+ /** 20px tall, `caption` label, 13px icon, 10px caret. */
63
+ ButtonSize["X_SMALL"] = "X_SMALL";
64
+ /** 24px tall, `body_sm` label, 13px icon, 10px caret. */
27
65
  ButtonSize["SMALL"] = "SMALL";
66
+ /** 32px tall, `body_md` label, 15px icon, 12px caret. The default (1.x `MEDIUM` was 28px). */
28
67
  ButtonSize["MEDIUM"] = "MEDIUM";
68
+ /** 36px tall, `body_lg` label, 15px icon, 12px caret. */
29
69
  ButtonSize["LARGE"] = "LARGE";
70
+ /** 40px tall, `body_lg` label, 17px icon, 12px caret. */
71
+ ButtonSize["X_LARGE"] = "X_LARGE";
30
72
  return ButtonSize;
31
73
  }({});
32
- var _exp = () => ({ $fillWidth }) => $fillWidth ? "100%" : "auto";
33
- var _exp2 = () => ({ $isEllipsis }) => $isEllipsis ? "0" : "auto";
34
- var _exp3 = () => ({ $splitSide, $fillWidth }) => $splitSide === "MAIN" && $fillWidth ? "1 1 auto" : "0 1 auto";
35
- var _exp4 = () => ({ $isEllipsis }) => $isEllipsis ? "hidden" : "visible";
36
- var _exp5 = () => ({ $size }) => {
37
- return match($size).with("SMALL", () => "4px").with("MEDIUM", () => "6px").with("LARGE", () => "6px").exhaustive();
38
- };
39
- var _exp6 = () => ({ $size, $noLabel }) => {
40
- return match($size).with("SMALL", () => $noLabel ? "0 6px" : "0 6px").with("MEDIUM", () => $noLabel ? "0 6px" : "0 8px").with("LARGE", () => $noLabel ? "0 8px" : "0 12px").exhaustive();
41
- };
42
- var _exp7 = () => ({ $size }) => {
43
- return match($size).with("SMALL", () => "24px").with("MEDIUM", () => "28px").with("LARGE", () => "32px").exhaustive();
44
- };
45
- var _exp8 = () => ({ theme, $variant }) => {
46
- return match($variant).with("PRIMARY", () => theme.color.background.galaxy).with("PRIMARY_ALT", () => theme.color.background.primaryAlt).with("SECONDARY", () => theme.color.background.primary).with("TERTIARY", () => "transparent").with("SUCCESS", () => theme.color.icon.success).with("ERROR", () => theme.color.icon.error).exhaustive();
47
- };
48
- var _exp9 = () => ({ theme, $variant }) => {
49
- return match($variant).with("PRIMARY", () => "0.5px solid transparent").with("PRIMARY_ALT", () => `0.5px solid transparent`).with("SECONDARY", () => `0.5px solid ${theme.color.border.secondary}`).with("TERTIARY", () => "0.5px solid transparent").with("SUCCESS", () => "0.5px solid transparent").with("ERROR", () => "0.5px solid transparent").exhaustive();
74
+ /**
75
+ * Static rules. `border: 0.5px solid transparent` gives every variant the same box; the variant
76
+ * map colors it. `INTERACTIVE_RESET` comes first so the rules after it win.
77
+ */
78
+ var Root = /*#__PURE__*/ styled("button")({
79
+ name: "Root",
80
+ class: "gx-Button-r99zquh",
81
+ propsAsIs: false
82
+ });
83
+ /** A `leading` / `trailing` slot: never squeezed, so only the label shrinks. */
84
+ var Slot = /*#__PURE__*/ styled("span")({
85
+ name: "Slot",
86
+ class: "gx-Button-Slot-s9yox33",
87
+ propsAsIs: false
88
+ });
89
+ /** The centered spinner over content that stays laid out (loading without an icon). */
90
+ var LoadingOverlay = /*#__PURE__*/ styled("span")({
91
+ name: "LoadingOverlay",
92
+ class: "gx-Button-LoadingOverlay-l1bhvbb9",
93
+ propsAsIs: false
94
+ });
95
+ /**
96
+ * Rest, hover and press per mode. Hover and `:active` skip a blocked button (`:disabled`, or the
97
+ * `aria-disabled` state attribute), so it never reacts.
98
+ */
99
+ var BUTTON_VARIANT_TO_CSS_MAP = {
100
+ ["PRIMARY"]: "gx-Button-PRIMARY-p2x7iw5",
101
+ ["SECONDARY"]: "gx-Button-SECONDARY-sukb6jc",
102
+ ["TERTIARY"]: "gx-Button-TERTIARY-txznik7",
103
+ ["BASE"]: "gx-Button-BASE-b148mgtl",
104
+ ["ERROR"]: "gx-Button-ERROR-e1pxicn8"
50
105
  };
51
- var _exp0 = () => ({ $splitSide }) => $splitSide === "MAIN" ? "0" : "0.5px";
52
- var _exp1 = () => ({ $splitSide }) => $splitSide === "CARET" ? "0" : "0.5px";
53
- var _exp10 = () => ({ $splitSide }) => {
54
- return match($splitSide).with("MAIN", () => "5px 0 0 5px").with("CARET", () => "0 5px 5px 0").otherwise(() => "5px");
106
+ /**
107
+ * `isActive`: the variant's `:active` row applied persistently, hover included, so a pressed
108
+ * toggle keeps its look under the pointer. Declared after the variant map so it wins.
109
+ */
110
+ var BUTTON_VARIANT_TO_PRESSED_CSS_MAP = {
111
+ ["PRIMARY"]: "gx-Button-PRIMARY-p1avpq52",
112
+ ["SECONDARY"]: "gx-Button-SECONDARY-s69rtgb",
113
+ ["TERTIARY"]: "gx-Button-TERTIARY-t1aod6bi",
114
+ ["BASE"]: "gx-Button-BASE-bz9snbo",
115
+ ["ERROR"]: "gx-Button-ERROR-e1y0pij6"
55
116
  };
56
- var _exp11 = () => ({ $cursor }) => $cursor ?? "pointer";
57
- var _exp12 = () => ({ theme, $variant }) => {
58
- return match($variant).with("PRIMARY", () => theme.color.background.galaxyAlt).with("PRIMARY_ALT", () => theme.color.background.secondaryAlt).with("SECONDARY", () => theme.color.background.secondary).with("TERTIARY", () => theme.color.background.tertiary).with("SUCCESS", () => theme.color.background.successAlt).with("ERROR", () => theme.color.background.errorAlt).exhaustive();
117
+ /**
118
+ * `isDisabled` only (loading keeps the variant colors so the spinner reads on its fill). Built
119
+ * from tokens, without opacity. Declared after the pressed map so it wins.
120
+ */
121
+ var BUTTON_VARIANT_TO_DISABLED_CSS_MAP = {
122
+ ["PRIMARY"]: "gx-Button-PRIMARY-p1xlodf7",
123
+ ["SECONDARY"]: "gx-Button-SECONDARY-s1j0poue",
124
+ ["TERTIARY"]: "gx-Button-TERTIARY-t11mr8g3",
125
+ ["BASE"]: "gx-Button-BASE-b1wt7zpi",
126
+ ["ERROR"]: "gx-Button-ERROR-e1wg9kb3"
59
127
  };
60
- var _exp13 = () => ({ theme, $variant }) => {
61
- return match($variant).with("PRIMARY", () => theme.color.border.primary).with("PRIMARY_ALT", () => theme.color.border.primary).with("SECONDARY", () => theme.color.border.tertiary).with("TERTIARY", () => "transparent").with("SUCCESS", () => theme.color.border.primary).with("ERROR", () => theme.color.border.primary).exhaustive();
128
+ /**
129
+ * Height, horizontal padding and gap per rung (Constitution III-A.4). Paddings off the space
130
+ * scale (6, 14) are sums of it.
131
+ */
132
+ var BUTTON_SIZE_TO_CSS_MAP = {
133
+ ["X_SMALL"]: "gx-Button-X_SMALL-x1hdfipe",
134
+ ["SMALL"]: "gx-Button-SMALL-sgdnn4t",
135
+ ["MEDIUM"]: "gx-Button-MEDIUM-m1osbvu7",
136
+ ["LARGE"]: "gx-Button-LARGE-l14pe53f",
137
+ ["X_LARGE"]: "gx-Button-X_LARGE-xwa5dwk"
62
138
  };
63
- var _exp14 = () => ({ theme, $variant }) => {
64
- return match($variant).with("PRIMARY", () => theme.color.background.disabled).with("PRIMARY_ALT", () => theme.color.background.disabled).with("SECONDARY", () => theme.color.background.disabled).with("TERTIARY", () => "transparent").with("SUCCESS", () => theme.color.background.successAlt).with("ERROR", () => theme.color.background.errorAlt).exhaustive();
139
+ /** Icon-only (an `icon`, no `label` / `leading` / `trailing`): square. Declared after the size map. */
140
+ var BUTTON_SIZE_TO_ICON_ONLY_CSS_MAP = {
141
+ ["X_SMALL"]: "gx-Button-X_SMALL-x1ktetty",
142
+ ["SMALL"]: "gx-Button-SMALL-s1gf76u1",
143
+ ["MEDIUM"]: "gx-Button-MEDIUM-m2j3r8h",
144
+ ["LARGE"]: "gx-Button-LARGE-l1jxdh2j",
145
+ ["X_LARGE"]: "gx-Button-X_LARGE-xit20hd"
65
146
  };
66
- var StyledButton = withTheme(/*#__PURE__*/ styled("button")({
67
- name: "StyledButton",
68
- class: "s99zquh",
69
- propsAsIs: false,
70
- vars: {
71
- "s99zquh-0": [_exp()],
72
- "s99zquh-1": [_exp2()],
73
- "s99zquh-2": [_exp3()],
74
- "s99zquh-3": [_exp4()],
75
- "s99zquh-4": [_exp5()],
76
- "s99zquh-5": [_exp6()],
77
- "s99zquh-6": [_exp7()],
78
- "s99zquh-7": [_exp8()],
79
- "s99zquh-8": [_exp9()],
80
- "s99zquh-9": [_exp0()],
81
- "s99zquh-10": [_exp1()],
82
- "s99zquh-11": [_exp10()],
83
- "s99zquh-12": [_exp11()],
84
- "s99zquh-13": [_exp12()],
85
- "s99zquh-14": [_exp13()],
86
- "s99zquh-15": [_exp14()]
87
- }
88
- }));
89
- var _exp15 = () => ({ $isEllipsis }) => $isEllipsis ? "1" : "0 1 auto";
90
- var _exp16 = () => ({ $isEllipsis }) => $isEllipsis ? "0" : "auto";
91
- var LabelWrapper = /*#__PURE__*/ styled("span")({
92
- name: "LabelWrapper",
93
- class: "l9yox33",
94
- propsAsIs: false,
95
- vars: {
96
- "l9yox33-0": [_exp15()],
97
- "l9yox33-1": [_exp16()]
98
- }
147
+ /** Pill radius; with the icon-only square, a circle. */
148
+ var ROUND_CSS = "gx-Button-ROUND_CSS-r7sqfen";
149
+ /** Declared after the icon-only map, so `fillWidth` wins over the square width. */
150
+ var FILL_WIDTH_CSS = "gx-Button-FILL_WIDTH_CSS-f1wn5mw2";
151
+ var LOADING_CSS = "gx-Button-LOADING_CSS-l1a8ibhg";
152
+ /**
153
+ * Loading without an icon: every child but the overlay stays laid out at `opacity: 0` (not
154
+ * `visibility: hidden`, so the label stays in the accessible name) and the width is unchanged.
155
+ */
156
+ var LOADING_OVERLAY_CSS = "gx-Button-LOADING_OVERLAY_CSS-lsoh4y6";
157
+ /** The caps never shrink; only the label does. */
158
+ var NO_SHRINK_CSS = "gx-Button-NO_SHRINK_CSS-nfko2kv";
159
+ /** The split caret's accessible name (1.x `dropdownAriaLabel` default). */
160
+ var SPLIT_CARET_LABEL = "More actions";
161
+ /**
162
+ * The split button's group: the box the parent lays out (it takes `className` / `style`). Carries
163
+ * the spec's `SPLIT_ROOT_CSS` rules as a styled root (a raw `<span>` is lint-forbidden).
164
+ */
165
+ var SplitRoot = /*#__PURE__*/ styled("span")({
166
+ name: "SplitRoot",
167
+ class: "gx-Button-SplitRoot-s36h2nj",
168
+ propsAsIs: false
99
169
  });
100
- var _exp17 = () => ({ $fillWidth }) => $fillWidth ? "100%" : "fit-content";
101
- var SplitWrapper = /*#__PURE__*/ styled("div")({
102
- name: "SplitWrapper",
103
- class: "s1bhvbb9",
104
- propsAsIs: false,
105
- vars: { "s1bhvbb9-0": [_exp17()] }
170
+ /** The hairline between the two segments; its color comes from the variant. */
171
+ var Seam = /*#__PURE__*/ styled("span")({
172
+ name: "Seam",
173
+ class: "gx-Button-Seam-s1c8daz3",
174
+ propsAsIs: false
106
175
  });
107
- var _exp18 = () => ({ theme, $variant, $isDisabled }) => {
108
- if ($isDisabled) return theme.color.border.disabled;
109
- return match($variant).with("PRIMARY", () => theme.color.border.primary).with("SUCCESS", () => theme.color.border.success).with("ERROR", () => theme.color.border.error).with("PRIMARY_ALT", () => theme.color.border.primary).with("SECONDARY", () => theme.color.border.secondary).with("TERTIARY", () => "transparent").exhaustive();
176
+ /** `fillWidth` on a split: the group stretches; only the main segment grows. */
177
+ var SPLIT_FILL_WIDTH_CSS = "gx-Button-SPLIT_FILL_WIDTH_CSS-shgzd1y";
178
+ /** The main segment of a stretched split grows and may shrink; the caret stays square. */
179
+ var SPLIT_MAIN_FILL_CSS = "gx-Button-SPLIT_MAIN_FILL_CSS-s1dvmg9h";
180
+ /** The main segment: square end corners, no end border (the seam draws it). */
181
+ var SPLIT_MAIN_CSS = "gx-Button-SPLIT_MAIN_CSS-syyksk0";
182
+ /** The caret segment: square start corners, no start border (the seam draws it). */
183
+ var SPLIT_CARET_CSS = "gx-Button-SPLIT_CARET_CSS-s1dfb7ff";
184
+ /**
185
+ * Seam color per mode: the on-solid color at low alpha on the solids (it reads on every fill in
186
+ * both themes), the segments' own border on `SECONDARY`, `border.secondary` on the `BASE` fill,
187
+ * none on `TERTIARY` (as in 1.x).
188
+ */
189
+ var BUTTON_VARIANT_TO_SPLIT_SEAM_CSS_MAP = {
190
+ ["PRIMARY"]: "gx-Button-PRIMARY-paybm67",
191
+ ["SECONDARY"]: "gx-Button-SECONDARY-s117mlpl",
192
+ ["TERTIARY"]: "gx-Button-TERTIARY-tu1m2jx",
193
+ ["BASE"]: "gx-Button-BASE-b1du68nl",
194
+ ["ERROR"]: "gx-Button-ERROR-e1k8uw0a"
110
195
  };
111
- var SplitDivider = withTheme(/*#__PURE__*/ styled("div")({
112
- name: "SplitDivider",
113
- class: "s2x7iw5",
114
- propsAsIs: false,
115
- vars: { "s2x7iw5-0": [_exp18()] }
116
- }));
117
- function getTextVariant(variant, activeTheme) {
118
- return match(variant).with("PRIMARY", () => activeTheme === GalaxyTheme.DARK ? TextVariant.PRIMARY : TextVariant.PRIMARY_ALT).with("PRIMARY_ALT", () => TextVariant.PRIMARY_ALT).with("SECONDARY", () => TextVariant.PRIMARY).with("TERTIARY", () => TextVariant.PRIMARY).with("SUCCESS", () => activeTheme === GalaxyTheme.DARK ? TextVariant.PRIMARY : TextVariant.PRIMARY_ALT).with("ERROR", () => activeTheme === GalaxyTheme.DARK ? TextVariant.PRIMARY : TextVariant.PRIMARY_ALT).exhaustive();
119
- }
120
- function getIconVariant(variant, activeTheme) {
121
- return match(variant).with("PRIMARY", () => activeTheme === GalaxyTheme.DARK ? IconVariant.PRIMARY : IconVariant.PRIMARY_ALT).with("PRIMARY_ALT", () => IconVariant.PRIMARY_ALT).with("SECONDARY", () => IconVariant.PRIMARY).with("TERTIARY", () => IconVariant.PRIMARY).with("SUCCESS", () => activeTheme === GalaxyTheme.DARK ? IconVariant.PRIMARY : IconVariant.PRIMARY_ALT).with("ERROR", () => activeTheme === GalaxyTheme.DARK ? IconVariant.PRIMARY : IconVariant.PRIMARY_ALT).exhaustive();
122
- }
196
+ /** The seam while the split is blocked (disabled or loading). Declared after the seam map. */
197
+ var SPLIT_SEAM_DISABLED_CSS = "gx-Button-SPLIT_SEAM_DISABLED_CSS-spdjko7";
198
+ /** Label type step per rung (Constitution III-A.4). */
123
199
  var BUTTON_SIZE_TO_TEXT_SIZE_MAP = {
200
+ ["X_SMALL"]: TextSize.CAPTION,
124
201
  ["SMALL"]: TextSize.BODY_SM,
125
202
  ["MEDIUM"]: TextSize.BODY_MD,
126
- ["LARGE"]: TextSize.BODY_LG
203
+ ["LARGE"]: TextSize.BODY_LG,
204
+ ["X_LARGE"]: TextSize.BODY_LG
205
+ };
206
+ /**
207
+ * Icon px per rung (the icon, the external arrow and the loading ring): 13 / 13 / 15 / 15 / 17,
208
+ * one pixel over the 2026-10-04 step-down (Mitch, 2026-10-05). Odd, so each sits in an `IconSlot`
209
+ * (whole pixels at 1x, centered at 2x); the caret keeps its own sizes.
210
+ */
211
+ var BUTTON_SIZE_TO_ICON_PX_MAP = {
212
+ ["X_SMALL"]: 13,
213
+ ["SMALL"]: 13,
214
+ ["MEDIUM"]: 15,
215
+ ["LARGE"]: 15,
216
+ ["X_LARGE"]: 17
217
+ };
218
+ /** The split caret: 12px, 10px on the 20px and 24px rungs (the collapsible Widget's caret). */
219
+ var BUTTON_SIZE_TO_CARET_PX_MAP = {
220
+ ["X_SMALL"]: 10,
221
+ ["SMALL"]: 10,
222
+ ["MEDIUM"]: 12,
223
+ ["LARGE"]: 12,
224
+ ["X_LARGE"]: 12
127
225
  };
128
- var BUTTON_SIZE_TO_ICON_SIZE_MAP = {
129
- ["SMALL"]: 12,
130
- ["MEDIUM"]: 14,
131
- ["LARGE"]: 16
226
+ /** Identity: Kbd has all five rungs. */
227
+ var BUTTON_SIZE_TO_KBD_SIZE_MAP = {
228
+ ["X_SMALL"]: KbdSize.X_SMALL,
229
+ ["SMALL"]: KbdSize.SMALL,
230
+ ["MEDIUM"]: KbdSize.MEDIUM,
231
+ ["LARGE"]: KbdSize.LARGE,
232
+ ["X_LARGE"]: KbdSize.X_LARGE
132
233
  };
133
234
  /**
134
- * The standard action control. Renders a label, an icon, or both.
135
- *
136
- * `isLoading` and `isDisabled` behave identically at the DOM level — both set
137
- * `disabled` on the `<button>` and swallow `onClick`. Loading is a lockout, not
138
- * a spinner; render your own indicator alongside if you need one.
139
- *
140
- * With `contentWhenDropdown`, renders as a split button: a caret segment after
141
- * a hairline divider opens an anchored dropdown of advanced actions.
235
+ * Solid modes take plain caps in the on-solid color (`Kbd isPlain`, Kbd Decision 4); the others a
236
+ * raised `TERTIARY` fill.
142
237
  */
143
- var Button = ({ label, icon, variant = "PRIMARY", size = "MEDIUM", onClick, onMouseEnter, onMouseLeave, fillWidth, isLoading, isDisabled, isIconTrailing, isIconFilled, isEllipsis, cursor, contentWhenDropdown, dropdownPosition = DropdownPosition.BOTTOM_END, dropdownAriaLabel, ariaLabel, ariaExpanded, ariaControls, ariaHasPopup }) => {
144
- const { activeTheme } = useGalaxyTheme();
238
+ var BUTTON_VARIANT_TO_KBD_PROPS_MAP = {
239
+ ["PRIMARY"]: { isPlain: true },
240
+ ["SECONDARY"]: { variant: KbdVariant.TERTIARY },
241
+ ["TERTIARY"]: { variant: KbdVariant.TERTIARY },
242
+ ["BASE"]: { variant: KbdVariant.TERTIARY },
243
+ ["ERROR"]: { isPlain: true }
244
+ };
245
+ /** Same name on every platform. */
246
+ var sameName = (name) => ({
247
+ mac: name,
248
+ other: name
249
+ });
250
+ /**
251
+ * Grammar token → `aria-keyshortcuts` key name (WAI-ARIA uses `KeyboardEvent.key` values).
252
+ * `mod` is `Meta` on Mac and `Control` elsewhere. A single character upper-cases instead.
253
+ */
254
+ var HOTKEY_TOKEN_TO_ARIA_KEY_MAP = {
255
+ mod: {
256
+ mac: "Meta",
257
+ other: "Control"
258
+ },
259
+ ctrl: sameName("Control"),
260
+ meta: sameName("Meta"),
261
+ cmd: sameName("Meta"),
262
+ alt: sameName("Alt"),
263
+ option: sameName("Alt"),
264
+ shift: sameName("Shift"),
265
+ enter: sameName("Enter"),
266
+ escape: sameName("Escape"),
267
+ esc: sameName("Escape"),
268
+ space: sameName("Space"),
269
+ tab: sameName("Tab"),
270
+ backspace: sameName("Backspace"),
271
+ delete: sameName("Delete"),
272
+ up: sameName("ArrowUp"),
273
+ down: sameName("ArrowDown"),
274
+ left: sameName("ArrowLeft"),
275
+ right: sameName("ArrowRight"),
276
+ home: sameName("Home"),
277
+ end: sameName("End"),
278
+ pageup: sameName("PageUp"),
279
+ pagedown: sameName("PageDown"),
280
+ f1: sameName("F1"),
281
+ f2: sameName("F2"),
282
+ f3: sameName("F3"),
283
+ f4: sameName("F4"),
284
+ f5: sameName("F5"),
285
+ f6: sameName("F6"),
286
+ f7: sameName("F7"),
287
+ f8: sameName("F8"),
288
+ f9: sameName("F9"),
289
+ f10: sameName("F10"),
290
+ f11: sameName("F11"),
291
+ f12: sameName("F12")
292
+ };
293
+ /** Tokens that make a combo safe to fire while typing (Shift alone is not). */
294
+ var MODIFIER_TOKENS = new Set([
295
+ "mod",
296
+ "ctrl",
297
+ "meta",
298
+ "cmd",
299
+ "alt",
300
+ "option"
301
+ ]);
302
+ var isHotkeyToken = (token) => Object.hasOwn(HOTKEY_TOKEN_TO_ARIA_KEY_MAP, token);
303
+ /** The `aria-keyshortcuts` value for a combo, or `undefined` when a token has no name. */
304
+ function toAriaKeyShortcuts(hotKeys, isMac) {
305
+ const names = [];
306
+ for (const entry of hotKeys) {
307
+ const token = entry.trim().toLowerCase();
308
+ if (isHotkeyToken(token)) {
309
+ const name = HOTKEY_TOKEN_TO_ARIA_KEY_MAP[token];
310
+ names.push(isMac ? name.mac : name.other);
311
+ } else if ([...token].length === 1) names.push(token.toUpperCase());
312
+ else return;
313
+ }
314
+ return names.join("+");
315
+ }
316
+ /** The standard action control: a label, an icon or both, in one of four modes and five rungs. */
317
+ var Button = forwardRef(function Button({ label, icon, isIconTrailing = false, leading, trailing, hotKeys, shouldBindHotKey = false, variant = "PRIMARY", size = "MEDIUM", type = "button", href, isExternal = false, as, tooltip, dropdown, isDisabled = false, isLoading = false, isActive, isRound = false, fillWidth = false, onClick, ariaLabel, id, className, style, ...rest }, ref) {
318
+ const isMac = useIsMac();
319
+ const rootRef = useRef(null);
320
+ const setRootRef = useCallback((node) => {
321
+ rootRef.current = node;
322
+ if (typeof ref === "function") ref(node);
323
+ else if (ref) ref.current = node;
324
+ }, [ref]);
325
+ const hasLabel = label !== void 0 && label !== "";
326
+ const hasHotKeys = hotKeys !== void 0 && hotKeys.length > 0;
327
+ const isIconOnly = icon !== void 0 && !hasLabel && leading === void 0 && trailing === void 0;
328
+ const hasTooltip = tooltip !== void 0 || isIconOnly && hasHotKeys;
329
+ const isLink = href !== void 0;
330
+ const isBlocked = isDisabled || isLoading;
331
+ const isSplit = dropdown !== void 0;
145
332
  const [isDropdownOpen, setIsDropdownOpen] = useState(false);
146
- const handleClick = useCallback((e) => {
147
- if (isDisabled || isLoading) return;
148
- onClick(e);
149
- }, [
150
- isDisabled,
151
- isLoading,
152
- onClick
153
- ]);
154
- const closeDropdown = useCallback(() => {
155
- setIsDropdownOpen(false);
156
- }, []);
157
- const handleCaretClick = useCallback((e) => {
158
- e.stopPropagation();
159
- setIsDropdownOpen((prev) => !prev);
160
- }, []);
161
- if ((isDisabled || isLoading) && isDropdownOpen) setIsDropdownOpen(false);
162
- const renderIcon = useCallback(() => {
163
- if (!icon) return null;
164
- return /* @__PURE__ */ jsx(FlexItem, {
165
- shrink: 0,
166
- grow: 0,
167
- children: /* @__PURE__ */ jsx(Icon, {
168
- component: icon,
169
- variant: getIconVariant(variant, activeTheme),
170
- size: BUTTON_SIZE_TO_ICON_SIZE_MAP[size],
171
- weight: isIconFilled ? IconWeight.FILL : IconWeight.BOLD
172
- })
173
- });
174
- }, [
175
- icon,
176
- variant,
177
- size,
178
- isIconFilled,
179
- activeTheme
180
- ]);
181
- const renderLabel = useCallback(() => {
182
- if (!label) return null;
183
- return /* @__PURE__ */ jsx(LabelWrapper, {
184
- $isEllipsis: isEllipsis,
185
- children: /* @__PURE__ */ jsx(Text, {
186
- variant: getTextVariant(variant, activeTheme),
187
- weight: TextWeight.MEDIUM,
188
- size: BUTTON_SIZE_TO_TEXT_SIZE_MAP[size],
189
- cursor: isDisabled || isLoading ? "not-allowed" : cursor,
190
- isEllipsis,
191
- children: label
192
- })
193
- });
194
- }, [
195
- label,
196
- variant,
197
- size,
198
- isDisabled,
199
- isLoading,
200
- isEllipsis,
201
- cursor,
202
- activeTheme
203
- ]);
204
- const mainButton = /* @__PURE__ */ jsxs(StyledButton, {
205
- $variant: variant,
206
- $size: size,
207
- $fillWidth: fillWidth,
208
- $noLabel: !label,
209
- $isEllipsis: isEllipsis,
210
- $cursor: cursor,
211
- $splitSide: contentWhenDropdown !== void 0 ? "MAIN" : void 0,
333
+ if (isBlocked && isDropdownOpen) setIsDropdownOpen(false);
334
+ const isFocusableWhenBlocked = isLoading || hasTooltip;
335
+ const isNativeDisabled = !isLink && isDisabled && !isFocusableWhenBlocked;
336
+ const combo = hasHotKeys ? hotKeys.join("+") : "";
337
+ const isBound = shouldBindHotKey && hasHotKeys && parseHotkey(combo) !== null;
338
+ const hasModifier = hasHotKeys && hotKeys.some((entry) => MODIFIER_TOKENS.has(entry.trim().toLowerCase()));
339
+ useHotkey(combo, () => rootRef.current?.click(), {
340
+ isEnabled: isBound && !isBlocked,
341
+ shouldPreventDefault: true,
342
+ shouldIgnoreInputs: !hasModifier
343
+ });
344
+ const ariaKeyShortcuts = isBound ? toAriaKeyShortcuts(hotKeys, isMac) : void 0;
345
+ const handleClick = (event) => {
346
+ if (isBlocked) {
347
+ event.preventDefault();
348
+ return;
349
+ }
350
+ onClick?.(event);
351
+ };
352
+ const computedAria = {};
353
+ if (ariaLabel !== void 0) computedAria["aria-label"] = ariaLabel;
354
+ if (isBlocked && !isNativeDisabled) computedAria["aria-disabled"] = true;
355
+ if (isLoading) computedAria["aria-busy"] = true;
356
+ if (ariaKeyShortcuts !== void 0) computedAria["aria-keyshortcuts"] = ariaKeyShortcuts;
357
+ if (isLink) {
358
+ if (isActive === true) computedAria["aria-current"] = "page";
359
+ } else if (isActive !== void 0) computedAria["aria-pressed"] = isActive;
360
+ const elementProps = {};
361
+ if (!isLink) {
362
+ elementProps.type = type;
363
+ if (isNativeDisabled) elementProps.disabled = true;
364
+ } else if (isBlocked) {
365
+ elementProps.as = "a";
366
+ elementProps.role = "link";
367
+ elementProps.tabIndex = isFocusableWhenBlocked ? 0 : -1;
368
+ } else {
369
+ elementProps.as = as ?? "a";
370
+ elementProps.href = href;
371
+ if (isExternal) {
372
+ elementProps.target = "_blank";
373
+ elementProps.rel = "noopener noreferrer";
374
+ }
375
+ }
376
+ const iconPx = BUTTON_SIZE_TO_ICON_PX_MAP[size];
377
+ const loadingRing = /* @__PURE__ */ jsx(IconSlot, {
378
+ px: iconPx,
379
+ children: /* @__PURE__ */ jsx(Icon, {
380
+ component: CircleNotchIcon,
381
+ isSpinning: true,
382
+ size: iconPx,
383
+ variant: IconVariant.INHERIT
384
+ })
385
+ });
386
+ const iconNode = icon === void 0 ? null : isLoading ? loadingRing : /* @__PURE__ */ jsx(IconSlot, {
387
+ px: iconPx,
388
+ children: /* @__PURE__ */ jsx(Icon, {
389
+ component: icon,
390
+ size: iconPx,
391
+ variant: IconVariant.INHERIT
392
+ })
393
+ });
394
+ const hasOverlay = isLoading && icon === void 0;
395
+ const hasInlineHotKeys = hasHotKeys && !isIconOnly;
396
+ const root = /* @__PURE__ */ jsxs(Root, {
397
+ ...computedAria,
398
+ ...rest,
399
+ ...elementProps,
400
+ ref: setRootRef,
401
+ id,
212
402
  onClick: handleClick,
213
- disabled: isDisabled || isLoading,
214
- onMouseEnter,
215
- onMouseLeave,
216
- "aria-label": ariaLabel,
217
- "aria-expanded": ariaExpanded,
218
- "aria-controls": ariaControls,
219
- "aria-haspopup": ariaHasPopup,
403
+ className: cx(BUTTON_VARIANT_TO_CSS_MAP[variant], isActive === true && BUTTON_VARIANT_TO_PRESSED_CSS_MAP[variant], isDisabled && BUTTON_VARIANT_TO_DISABLED_CSS_MAP[variant], BUTTON_SIZE_TO_CSS_MAP[size], isIconOnly && BUTTON_SIZE_TO_ICON_ONLY_CSS_MAP[size], isRound && ROUND_CSS, fillWidth && !isSplit && FILL_WIDTH_CSS, isLoading && LOADING_CSS, hasOverlay && LOADING_OVERLAY_CSS, isSplit && SPLIT_MAIN_CSS, isSplit && fillWidth && SPLIT_MAIN_FILL_CSS, isSplit ? void 0 : className),
404
+ ...isSplit ? {} : { style },
220
405
  children: [
221
- !isIconTrailing && renderIcon(),
222
- label && renderLabel(),
223
- isIconTrailing && renderIcon()
406
+ leading !== void 0 && /* @__PURE__ */ jsx(Slot, { children: leading }),
407
+ !isIconTrailing && iconNode,
408
+ hasLabel && /* @__PURE__ */ jsx(Text, {
409
+ as: "span",
410
+ size: BUTTON_SIZE_TO_TEXT_SIZE_MAP[size],
411
+ weight: TextWeight.MEDIUM,
412
+ variant: TextVariant.INHERIT,
413
+ lineClamp: 1,
414
+ children: label
415
+ }),
416
+ isIconTrailing && iconNode,
417
+ isLink && isExternal && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(IconSlot, {
418
+ px: iconPx,
419
+ children: /* @__PURE__ */ jsx(Icon, {
420
+ component: ArrowUpRightIcon,
421
+ size: iconPx,
422
+ variant: IconVariant.INHERIT
423
+ })
424
+ }), /* @__PURE__ */ jsx(VisuallyHidden, { children: " (opens in a new tab)" })] }),
425
+ trailing !== void 0 && /* @__PURE__ */ jsx(Slot, { children: trailing }),
426
+ hasInlineHotKeys && /* @__PURE__ */ jsx(Kbd, {
427
+ hotKeys,
428
+ size: BUTTON_SIZE_TO_KBD_SIZE_MAP[size],
429
+ ...BUTTON_VARIANT_TO_KBD_PROPS_MAP[variant],
430
+ isDisabled,
431
+ "aria-hidden": true,
432
+ className: NO_SHRINK_CSS
433
+ }),
434
+ hasOverlay && /* @__PURE__ */ jsx(LoadingOverlay, { children: loadingRing })
224
435
  ]
225
436
  });
226
- if (contentWhenDropdown === void 0) return mainButton;
227
- const dropdownBody = typeof contentWhenDropdown === "function" ? contentWhenDropdown({ close: closeDropdown }) : contentWhenDropdown;
228
- return /* @__PURE__ */ jsxs(SplitWrapper, {
229
- $fillWidth: fillWidth,
437
+ const isFallbackBody = tooltip === void 0;
438
+ const main = hasTooltip ? /* @__PURE__ */ jsx(Tooltip, {
439
+ body: isFallbackBody ? ariaLabel : tooltip,
440
+ ...isIconOnly && hasHotKeys ? { hotKeys } : {},
441
+ ...isFallbackBody ? { "aria-hidden": true } : {},
442
+ children: root
443
+ }) : root;
444
+ if (!isSplit) return main;
445
+ return /* @__PURE__ */ jsxs(SplitRoot, {
446
+ role: "group",
447
+ "aria-label": hasLabel ? label : ariaLabel,
448
+ className: cx(fillWidth && SPLIT_FILL_WIDTH_CSS, className),
449
+ style,
230
450
  children: [
231
- mainButton,
232
- /* @__PURE__ */ jsx(SplitDivider, {
233
- $variant: variant,
234
- $activeTheme: activeTheme,
235
- $isDisabled: isDisabled || isLoading
451
+ main,
452
+ /* @__PURE__ */ jsx(Seam, {
453
+ "aria-hidden": true,
454
+ className: cx(BUTTON_VARIANT_TO_SPLIT_SEAM_CSS_MAP[variant], isBlocked && SPLIT_SEAM_DISABLED_CSS)
236
455
  }),
237
- /* @__PURE__ */ jsx(FlexItem, {
238
- shrink: 0,
239
- grow: 0,
240
- children: /* @__PURE__ */ jsx(Dropdown, {
241
- body: dropdownBody,
242
- isOpen: isDropdownOpen,
243
- onClose: closeDropdown,
244
- position: dropdownPosition,
245
- noPadding: true,
246
- children: /* @__PURE__ */ jsx(StyledButton, {
247
- $variant: variant,
248
- $size: size,
249
- $noLabel: true,
250
- $splitSide: "CARET",
251
- type: "button",
252
- disabled: isDisabled || isLoading,
253
- onClick: handleCaretClick,
254
- "aria-label": dropdownAriaLabel ?? "More actions",
255
- "aria-haspopup": true,
256
- "aria-expanded": isDropdownOpen,
257
- children: /* @__PURE__ */ jsx(Rotate, {
258
- isRotated: isDropdownOpen,
259
- deg: -180,
260
- children: /* @__PURE__ */ jsx(Icon, {
261
- component: CaretDownIcon,
262
- variant: getIconVariant(variant, activeTheme),
263
- size: BUTTON_SIZE_TO_ICON_SIZE_MAP[size],
264
- weight: IconWeight.BOLD
265
- })
456
+ /* @__PURE__ */ jsx(Dropdown, {
457
+ body: dropdown,
458
+ placement: Placement.BOTTOM_END,
459
+ isOpen: isDropdownOpen,
460
+ onOpenChange: setIsDropdownOpen,
461
+ isDisabled: isBlocked,
462
+ children: /* @__PURE__ */ jsx(Root, {
463
+ type: "button",
464
+ "aria-label": SPLIT_CARET_LABEL,
465
+ disabled: isBlocked,
466
+ className: cx(BUTTON_VARIANT_TO_CSS_MAP[variant], isDropdownOpen && BUTTON_VARIANT_TO_PRESSED_CSS_MAP[variant], isBlocked && BUTTON_VARIANT_TO_DISABLED_CSS_MAP[variant], BUTTON_SIZE_TO_CSS_MAP[size], BUTTON_SIZE_TO_ICON_ONLY_CSS_MAP[size], isRound && ROUND_CSS, SPLIT_CARET_CSS),
467
+ children: /* @__PURE__ */ jsx(Rotate, {
468
+ isRotated: isDropdownOpen,
469
+ deg: -180,
470
+ "aria-hidden": true,
471
+ children: /* @__PURE__ */ jsx(Icon, {
472
+ component: CaretDownIcon,
473
+ size: BUTTON_SIZE_TO_CARET_PX_MAP[size],
474
+ variant: IconVariant.INHERIT
266
475
  })
267
476
  })
268
477
  })
269
478
  })
270
479
  ]
271
480
  });
272
- };
481
+ });
482
+ Button.displayName = "Button";
273
483
  //#endregion
274
484
  export { ButtonSize, ButtonVariant, Button as default };