@galaxy-io/dls 1.6.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (540) hide show
  1. package/README.md +47 -50
  2. package/biome/index.json +74 -0
  3. package/biome/plugins/no-hex-literal.grit +20 -0
  4. package/biome/plugins/no-inline-style.grit +13 -0
  5. package/biome/plugins/no-margin.grit +9 -0
  6. package/biome/plugins/warn/no-hex-literal.grit +23 -0
  7. package/biome/plugins/warn/no-inline-style.grit +13 -0
  8. package/biome/plugins/warn/no-margin.grit +9 -0
  9. package/dist/a11y/FocusScope.d.ts +44 -0
  10. package/dist/a11y/FocusScope.js +229 -0
  11. package/dist/a11y/VisuallyHidden.d.ts +21 -0
  12. package/dist/a11y/VisuallyHidden.js +30 -0
  13. package/dist/avatar/Avatar.d.ts +56 -14
  14. package/dist/avatar/Avatar.js +250 -96
  15. package/dist/avatar/AvatarGroup.d.ts +43 -0
  16. package/dist/avatar/AvatarGroup.js +153 -0
  17. package/dist/backgrounds/GridBackground.d.ts +48 -0
  18. package/dist/backgrounds/GridBackground.js +146 -0
  19. package/dist/beacons/Beacon.d.ts +86 -22
  20. package/dist/beacons/Beacon.js +170 -47
  21. package/dist/brand/GalaxyFilamentWordmark.d.ts +30 -0
  22. package/dist/brand/GalaxyFilamentWordmark.js +39 -0
  23. package/dist/brand/GalaxyLogomark.d.ts +26 -0
  24. package/dist/brand/GalaxyLogomark.js +41 -0
  25. package/dist/brand/GalaxyLogomarkAnimation.d.ts +36 -0
  26. package/dist/brand/GalaxyLogomarkAnimation.js +107 -0
  27. package/dist/brand/GalaxyWordmark.d.ts +30 -0
  28. package/dist/brand/GalaxyWordmark.js +63 -0
  29. package/dist/brand/assets/galaxy-logomark-animation.js +136678 -0
  30. package/dist/brand/brandMark.d.ts +26 -0
  31. package/dist/brand/brandMark.js +35 -0
  32. package/dist/buttons/Button.d.ts +148 -59
  33. package/dist/buttons/Button.js +437 -227
  34. package/dist/buttons/ButtonGroup.d.ts +38 -0
  35. package/dist/buttons/ButtonGroup.js +68 -0
  36. package/dist/buttons/CopyButton.d.ts +77 -0
  37. package/dist/buttons/CopyButton.js +65 -0
  38. package/dist/charts/AreaChart.d.ts +49 -0
  39. package/dist/charts/AreaChart.js +31 -0
  40. package/dist/charts/BarChart.d.ts +54 -67
  41. package/dist/charts/BarChart.js +160 -124
  42. package/dist/charts/ChartAxis.d.ts +35 -40
  43. package/dist/charts/ChartAxis.js +114 -90
  44. package/dist/charts/ChartCategoryTargets.d.ts +12 -26
  45. package/dist/charts/ChartCategoryTargets.js +33 -20
  46. package/dist/charts/ChartFrame.d.ts +71 -116
  47. package/dist/charts/ChartFrame.js +306 -97
  48. package/dist/charts/ChartGroupProvider.d.ts +30 -41
  49. package/dist/charts/ChartGroupProvider.js +20 -7
  50. package/dist/charts/ChartLegend.d.ts +37 -48
  51. package/dist/charts/ChartLegend.js +243 -125
  52. package/dist/charts/ChartMarkTargets.d.ts +12 -28
  53. package/dist/charts/ChartMarkTargets.js +34 -20
  54. package/dist/charts/ChartPrimitives.d.ts +50 -305
  55. package/dist/charts/ChartPrimitives.js +65 -413
  56. package/dist/charts/ChartTooltip.d.ts +20 -26
  57. package/dist/charts/ChartTooltip.js +77 -40
  58. package/dist/charts/Heatmap.d.ts +35 -0
  59. package/dist/charts/Heatmap.js +307 -0
  60. package/dist/charts/LineChart.d.ts +54 -47
  61. package/dist/charts/LineChart.js +174 -121
  62. package/dist/charts/PieChart.d.ts +32 -53
  63. package/dist/charts/PieChart.js +159 -136
  64. package/dist/charts/Sparkline.d.ts +107 -0
  65. package/dist/charts/Sparkline.js +244 -0
  66. package/dist/charts/StatChart.d.ts +37 -13
  67. package/dist/charts/StatChart.js +82 -35
  68. package/dist/charts/barChartGeometry.d.ts +138 -86
  69. package/dist/charts/barChartGeometry.js +122 -101
  70. package/dist/charts/barChartLegend.d.ts +14 -18
  71. package/dist/charts/barChartLegend.js +18 -13
  72. package/dist/charts/chartFormat.d.ts +12 -18
  73. package/dist/charts/chartFormat.js +20 -52
  74. package/dist/charts/chartPalette.d.ts +33 -0
  75. package/dist/charts/chartPalette.js +68 -0
  76. package/dist/charts/chartScales.d.ts +41 -108
  77. package/dist/charts/chartScales.js +62 -128
  78. package/dist/charts/chartSelection.d.ts +15 -0
  79. package/dist/charts/chartSelection.js +22 -0
  80. package/dist/charts/constants.d.ts +100 -256
  81. package/dist/charts/constants.js +109 -275
  82. package/dist/charts/heatmapGeometry.d.ts +95 -0
  83. package/dist/charts/heatmapGeometry.js +155 -0
  84. package/dist/charts/lineChartGeometry.d.ts +108 -58
  85. package/dist/charts/lineChartGeometry.js +120 -78
  86. package/dist/charts/pieChartGeometry.d.ts +66 -40
  87. package/dist/charts/pieChartGeometry.js +68 -38
  88. package/dist/charts/types.d.ts +206 -466
  89. package/dist/charts/types.js +55 -144
  90. package/dist/charts/useCartesianChartLayout.d.ts +28 -59
  91. package/dist/charts/useCartesianChartLayout.js +47 -32
  92. package/dist/charts/useChartDimensions.d.ts +19 -40
  93. package/dist/charts/useChartDimensions.js +40 -56
  94. package/dist/charts/useChartFormatters.d.ts +6 -15
  95. package/dist/charts/useChartFormatters.js +4 -9
  96. package/dist/charts/useChartInteraction.d.ts +69 -116
  97. package/dist/charts/useChartInteraction.js +148 -78
  98. package/dist/charts/useChartTooltipPosition.d.ts +29 -39
  99. package/dist/charts/useChartTooltipPosition.js +14 -5
  100. package/dist/charts/useSeriesColorResolver.d.ts +11 -33
  101. package/dist/charts/useSeriesColorResolver.js +19 -12
  102. package/dist/chips/Chip.d.ts +155 -44
  103. package/dist/chips/Chip.js +329 -155
  104. package/dist/chips/ChipGroup.d.ts +53 -0
  105. package/dist/chips/ChipGroup.js +98 -0
  106. package/dist/drawer/Drawer.d.ts +83 -17
  107. package/dist/drawer/Drawer.js +399 -65
  108. package/dist/dropdown/Dropdown.d.ts +80 -63
  109. package/dist/dropdown/Dropdown.js +127 -129
  110. package/dist/editor/CodeEditor.d.ts +119 -40
  111. package/dist/editor/CodeEditor.js +490 -400
  112. package/dist/editor/CodeEditorReactWidget.d.ts +20 -17
  113. package/dist/editor/CodeEditorReactWidget.js +28 -21
  114. package/dist/feedback/Alert.d.ts +49 -0
  115. package/dist/feedback/Alert.js +172 -0
  116. package/dist/feedback/EmptyState.d.ts +39 -0
  117. package/dist/feedback/EmptyState.js +109 -0
  118. package/dist/feedback/ProgressBar.d.ts +125 -0
  119. package/dist/feedback/ProgressBar.js +183 -0
  120. package/dist/feedback/ProgressCircle.d.ts +99 -0
  121. package/dist/feedback/ProgressCircle.js +187 -0
  122. package/dist/feedback/Skeleton.d.ts +69 -0
  123. package/dist/feedback/Skeleton.js +130 -0
  124. package/dist/feedback/Spinner.d.ts +63 -0
  125. package/dist/feedback/Spinner.js +141 -0
  126. package/dist/fonts.css +70 -0
  127. package/dist/hooks/internal/useIsClient.d.ts +2 -0
  128. package/dist/hooks/internal/useIsClient.js +14 -0
  129. package/dist/hooks/useClipboard.d.ts +19 -0
  130. package/dist/hooks/useClipboard.js +45 -0
  131. package/dist/hooks/useControlledOpenState.d.ts +21 -0
  132. package/dist/hooks/useControlledOpenState.js +19 -0
  133. package/dist/hooks/useControlledState.d.ts +19 -0
  134. package/dist/hooks/useControlledState.js +22 -0
  135. package/dist/hooks/useDebouncedValue.d.ts +14 -0
  136. package/dist/hooks/useDebouncedValue.js +33 -0
  137. package/dist/hooks/useDisclosure.d.ts +26 -0
  138. package/dist/hooks/useDisclosure.js +36 -0
  139. package/dist/hooks/useDismiss.d.ts +23 -27
  140. package/dist/hooks/useDismiss.js +39 -27
  141. package/dist/hooks/useElementClientSize.d.ts +10 -10
  142. package/dist/hooks/useElementClientSize.js +8 -11
  143. package/dist/hooks/useElementWidth.d.ts +6 -13
  144. package/dist/hooks/useElementWidth.js +6 -14
  145. package/dist/hooks/useField.d.ts +47 -0
  146. package/dist/hooks/useField.js +40 -0
  147. package/dist/hooks/useHotkey.d.ts +77 -0
  148. package/dist/hooks/useHotkey.js +246 -0
  149. package/dist/hooks/useIsMac.d.ts +12 -0
  150. package/dist/hooks/useIsMac.js +27 -0
  151. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +17 -0
  152. package/dist/hooks/useIsomorphicLayoutEffect.js +20 -0
  153. package/dist/hooks/useLocalStorage.d.ts +28 -0
  154. package/dist/hooks/useLocalStorage.js +145 -0
  155. package/dist/hooks/useMediaQuery.d.ts +11 -0
  156. package/dist/hooks/useMediaQuery.js +23 -0
  157. package/dist/hooks/usePrefersReducedMotion.d.ts +12 -0
  158. package/dist/hooks/usePrefersReducedMotion.js +25 -0
  159. package/dist/hooks/useResize.d.ts +42 -62
  160. package/dist/hooks/useResize.js +43 -31
  161. package/dist/icons/Icon.d.ts +64 -37
  162. package/dist/icons/Icon.js +96 -37
  163. package/dist/icons/internal/IconSlot.d.ts +10 -0
  164. package/dist/icons/internal/IconSlot.js +32 -0
  165. package/dist/inputs/CheckboxGroup.d.ts +115 -0
  166. package/dist/inputs/CheckboxGroup.js +183 -0
  167. package/dist/inputs/CheckboxInput.d.ts +98 -28
  168. package/dist/inputs/CheckboxInput.js +218 -88
  169. package/dist/inputs/ColorInput.d.ts +115 -29
  170. package/dist/inputs/ColorInput.js +748 -326
  171. package/dist/inputs/CopyInput.d.ts +49 -20
  172. package/dist/inputs/CopyInput.js +57 -49
  173. package/dist/inputs/CronInput.d.ts +94 -0
  174. package/dist/inputs/CronInput.js +618 -0
  175. package/dist/inputs/DateInput.d.ts +175 -28
  176. package/dist/inputs/DateInput.js +1109 -451
  177. package/dist/inputs/DurationInput.d.ts +101 -0
  178. package/dist/inputs/DurationInput.js +441 -0
  179. package/dist/inputs/Field.d.ts +75 -0
  180. package/dist/inputs/Field.js +247 -0
  181. package/dist/inputs/Fieldset.d.ts +53 -0
  182. package/dist/inputs/Fieldset.js +149 -0
  183. package/dist/inputs/FileInput.d.ts +110 -0
  184. package/dist/inputs/FileInput.js +476 -0
  185. package/dist/inputs/Input.d.ts +148 -187
  186. package/dist/inputs/Input.js +339 -259
  187. package/dist/inputs/KeyValueInput.d.ts +120 -0
  188. package/dist/inputs/KeyValueInput.js +383 -0
  189. package/dist/inputs/MultiSelectInput.d.ts +165 -54
  190. package/dist/inputs/MultiSelectInput.js +175 -559
  191. package/dist/inputs/NumberInput.d.ts +65 -9
  192. package/dist/inputs/NumberInput.js +197 -40
  193. package/dist/inputs/PasswordInput.d.ts +17 -12
  194. package/dist/inputs/PasswordInput.js +33 -33
  195. package/dist/inputs/PinInput.d.ts +117 -0
  196. package/dist/inputs/PinInput.js +364 -0
  197. package/dist/inputs/RadioGroup.d.ts +115 -0
  198. package/dist/inputs/RadioGroup.js +179 -0
  199. package/dist/inputs/RadioInput.d.ts +87 -24
  200. package/dist/inputs/RadioInput.js +182 -95
  201. package/dist/inputs/SearchInput.d.ts +66 -0
  202. package/dist/inputs/SearchInput.js +156 -0
  203. package/dist/inputs/SelectInput.d.ts +195 -55
  204. package/dist/inputs/SelectInput.js +1308 -446
  205. package/dist/inputs/SliderInput.d.ts +150 -30
  206. package/dist/inputs/SliderInput.js +441 -186
  207. package/dist/inputs/SwitchInput.d.ts +109 -0
  208. package/dist/inputs/SwitchInput.js +248 -0
  209. package/dist/inputs/TagInput.d.ts +117 -0
  210. package/dist/inputs/TagInput.js +408 -0
  211. package/dist/inputs/TextAreaInput.d.ts +146 -44
  212. package/dist/inputs/TextAreaInput.js +298 -198
  213. package/dist/inputs/TextInput.d.ts +4 -13
  214. package/dist/inputs/TextInput.js +13 -48
  215. package/dist/inputs/ToggleInput.d.ts +120 -22
  216. package/dist/inputs/ToggleInput.js +262 -116
  217. package/dist/inputs/internal/bareField.d.ts +18 -0
  218. package/dist/inputs/internal/bareField.js +38 -0
  219. package/dist/inputs/internal/devWarn.d.ts +7 -0
  220. package/dist/inputs/internal/devWarn.js +30 -0
  221. package/dist/inputs/internal/fieldFrame.d.ts +34 -0
  222. package/dist/inputs/internal/fieldFrame.js +64 -0
  223. package/dist/inputs/internal/fieldWiring.d.ts +50 -0
  224. package/dist/inputs/internal/fieldWiring.js +38 -0
  225. package/dist/inputs/internal/innerButton.d.ts +2 -0
  226. package/dist/inputs/internal/innerButton.js +24 -0
  227. package/dist/inputs/internal/ownField.d.ts +45 -0
  228. package/dist/inputs/internal/ownField.js +58 -0
  229. package/dist/inputs/internal/predicates.d.ts +9 -0
  230. package/dist/inputs/internal/predicates.js +11 -0
  231. package/dist/inputs/internal/useComboboxPopover.d.ts +46 -0
  232. package/dist/inputs/internal/useComboboxPopover.js +92 -0
  233. package/dist/json/JsonViewer.d.ts +62 -0
  234. package/dist/json/JsonViewer.js +483 -0
  235. package/dist/layout/Box.d.ts +87 -0
  236. package/dist/layout/Box.js +109 -0
  237. package/dist/layout/Divider.d.ts +25 -0
  238. package/dist/layout/Divider.js +70 -0
  239. package/dist/layout/Flex.d.ts +139 -0
  240. package/dist/layout/Flex.js +165 -0
  241. package/dist/layout/FlexItem.d.ts +72 -0
  242. package/dist/layout/FlexItem.js +84 -0
  243. package/dist/layout/Grid.d.ts +140 -0
  244. package/dist/layout/Grid.js +178 -0
  245. package/dist/layout/Portal.d.ts +29 -0
  246. package/dist/layout/Portal.js +27 -0
  247. package/dist/layout/ResizablePanels.d.ts +88 -0
  248. package/dist/layout/ResizablePanels.js +198 -0
  249. package/dist/layout/ResizeHandle.d.ts +48 -0
  250. package/dist/layout/ResizeHandle.js +143 -0
  251. package/dist/layout/ScrollArea.d.ts +30 -0
  252. package/dist/layout/ScrollArea.js +138 -0
  253. package/dist/links/Link.d.ts +101 -1
  254. package/dist/links/Link.js +166 -4
  255. package/dist/lists/BulletedList.d.ts +25 -7
  256. package/dist/lists/BulletedList.js +72 -27
  257. package/dist/lists/DescriptionList.d.ts +91 -0
  258. package/dist/lists/DescriptionList.js +147 -0
  259. package/dist/menu/ContextMenu.d.ts +64 -0
  260. package/dist/menu/ContextMenu.js +34 -0
  261. package/dist/menu/Menu.d.ts +280 -0
  262. package/dist/menu/Menu.js +1003 -0
  263. package/dist/modal/ConfirmDialog.d.ts +55 -0
  264. package/dist/modal/ConfirmDialog.js +151 -0
  265. package/dist/modal/Modal.d.ts +64 -14
  266. package/dist/modal/Modal.js +189 -48
  267. package/dist/navigation/Breadcrumbs.d.ts +65 -0
  268. package/dist/navigation/Breadcrumbs.js +243 -0
  269. package/dist/navigation/CommandPalette.d.ts +83 -0
  270. package/dist/navigation/CommandPalette.js +509 -0
  271. package/dist/navigation/Pagination.d.ts +87 -0
  272. package/dist/navigation/Pagination.js +300 -0
  273. package/dist/navigation/SidebarNav.d.ts +107 -0
  274. package/dist/navigation/SidebarNav.js +341 -0
  275. package/dist/navigation/Stepper.d.ts +52 -0
  276. package/dist/navigation/Stepper.js +207 -0
  277. package/dist/navigation/Tabs.d.ts +113 -0
  278. package/dist/navigation/Tabs.js +543 -0
  279. package/dist/navigation/Topbar.d.ts +20 -0
  280. package/dist/navigation/Topbar.js +62 -0
  281. package/dist/overlay/OverlayProvider.d.ts +28 -32
  282. package/dist/overlay/OverlayProvider.js +42 -93
  283. package/dist/overlay/useOverlay.d.ts +88 -12
  284. package/dist/overlay/useOverlay.js +220 -43
  285. package/dist/overlays/Popover.d.ts +114 -0
  286. package/dist/overlays/Popover.js +389 -0
  287. package/dist/shapes/Circle.d.ts +84 -8
  288. package/dist/shapes/Circle.js +122 -20
  289. package/dist/shapes/Square.d.ts +84 -8
  290. package/dist/shapes/Square.js +123 -20
  291. package/dist/styles/mixins.d.ts +35 -0
  292. package/dist/styles/mixins.js +60 -0
  293. package/dist/styles.css +1 -202
  294. package/dist/table/InfiniteSpreadsheet.d.ts +140 -10
  295. package/dist/table/InfiniteSpreadsheet.js +762 -225
  296. package/dist/table/InfiniteTable.d.ts +116 -14
  297. package/dist/table/InfiniteTable.js +287 -429
  298. package/dist/table/SpreadsheetCellEditor.d.ts +54 -6
  299. package/dist/table/SpreadsheetCellEditor.js +163 -84
  300. package/dist/table/TableCore.d.ts +252 -0
  301. package/dist/table/TableCore.js +1082 -0
  302. package/dist/table/VirtualizedInfiniteTable.d.ts +104 -14
  303. package/dist/table/VirtualizedInfiniteTable.js +280 -219
  304. package/dist/table/types.d.ts +66 -244
  305. package/dist/table/types.js +0 -51
  306. package/dist/table/useInfiniteScrollSentinel.d.ts +25 -21
  307. package/dist/table/useInfiniteScrollSentinel.js +38 -30
  308. package/dist/table/useSpreadsheetCellNavigation.d.ts +44 -0
  309. package/dist/table/useSpreadsheetCellNavigation.js +141 -0
  310. package/dist/table/useTableColumnLayout.d.ts +90 -25
  311. package/dist/table/useTableColumnLayout.js +255 -50
  312. package/dist/table/useTableKeyboardNavigation.d.ts +32 -21
  313. package/dist/table/useTableKeyboardNavigation.js +95 -71
  314. package/dist/table/useTableRowSelection.d.ts +24 -25
  315. package/dist/table/useTableRowSelection.js +57 -84
  316. package/dist/table/useTableVirtualizer.d.ts +20 -0
  317. package/dist/table/useTableVirtualizer.js +48 -0
  318. package/dist/text/Bold.d.ts +5 -6
  319. package/dist/text/Bold.js +16 -15
  320. package/dist/text/Code.d.ts +5 -6
  321. package/dist/text/Code.js +16 -25
  322. package/dist/text/CodeBlock.d.ts +77 -0
  323. package/dist/text/CodeBlock.js +373 -0
  324. package/dist/text/EditableText.d.ts +55 -15
  325. package/dist/text/EditableText.js +153 -135
  326. package/dist/text/Ellipsis.d.ts +34 -8
  327. package/dist/text/Ellipsis.js +55 -23
  328. package/dist/text/Kbd.d.ts +72 -0
  329. package/dist/text/Kbd.js +284 -0
  330. package/dist/text/MarkdownText.d.ts +27 -10
  331. package/dist/text/MarkdownText.js +317 -300
  332. package/dist/text/RequiredMarker.d.ts +17 -5
  333. package/dist/text/RequiredMarker.js +34 -36
  334. package/dist/text/Selectable.d.ts +5 -6
  335. package/dist/text/Selectable.js +16 -13
  336. package/dist/text/Span.d.ts +82 -0
  337. package/dist/text/Span.js +115 -0
  338. package/dist/text/Text.d.ts +128 -41
  339. package/dist/text/Text.js +209 -76
  340. package/dist/theme/GalaxyProvider.d.ts +75 -0
  341. package/dist/theme/GalaxyProvider.js +223 -0
  342. package/dist/theme/ThemeSwitcher.d.ts +52 -0
  343. package/dist/theme/ThemeSwitcher.js +94 -0
  344. package/dist/theme/enums.d.ts +118 -0
  345. package/dist/theme/enums.js +144 -0
  346. package/dist/theme/tokens/dark.d.ts +2 -0
  347. package/dist/theme/tokens/dark.js +275 -0
  348. package/dist/theme/tokens/generate.d.ts +15 -0
  349. package/dist/theme/tokens/generate.js +47 -0
  350. package/dist/theme/tokens/light.d.ts +2 -0
  351. package/dist/theme/tokens/light.js +274 -0
  352. package/dist/theme/tokens/palette.d.ts +14 -0
  353. package/dist/theme/tokens/palette.js +153 -0
  354. package/dist/theme/tokens/scales.d.ts +26 -0
  355. package/dist/theme/tokens/scales.js +154 -0
  356. package/dist/theme/tokens/t.d.ts +3 -0
  357. package/dist/theme/tokens/t.js +25 -0
  358. package/dist/theme/tokens/types.d.ts +189 -0
  359. package/dist/theme/tokens/types.js +0 -0
  360. package/dist/theme/useGalaxyTheme.d.ts +46 -0
  361. package/dist/theme/useGalaxyTheme.js +36 -0
  362. package/dist/theme/useInverseScope.d.ts +18 -0
  363. package/dist/theme/useInverseScope.js +33 -0
  364. package/dist/three/GalaxyLogomark3D.d.ts +46 -0
  365. package/dist/three/GalaxyLogomark3D.js +134 -0
  366. package/dist/three/assets/galaxy-logomark.js +4 -0
  367. package/dist/three/galaxyLogomark3DScene.d.ts +27 -0
  368. package/dist/three/galaxyLogomark3DScene.js +165 -0
  369. package/dist/timeline/Timeline.d.ts +120 -0
  370. package/dist/timeline/Timeline.js +301 -0
  371. package/dist/toast/Toast.d.ts +43 -19
  372. package/dist/toast/Toast.js +130 -89
  373. package/dist/toast/ToastProvider.d.ts +23 -23
  374. package/dist/toast/ToastProvider.js +298 -101
  375. package/dist/toast/ToastViewport.d.ts +12 -0
  376. package/dist/toast/ToastViewport.js +210 -0
  377. package/dist/toast/useToast.d.ts +139 -5
  378. package/dist/toast/useToast.js +15 -13
  379. package/dist/tokens.css +654 -0
  380. package/dist/tooltip/Tooltip.d.ts +64 -44
  381. package/dist/tooltip/Tooltip.js +280 -73
  382. package/dist/tooltip/internal/LazyTooltip.d.ts +7 -0
  383. package/dist/tooltip/internal/LazyTooltip.js +53 -0
  384. package/dist/transform/Fade.d.ts +33 -11
  385. package/dist/transform/Fade.js +71 -19
  386. package/dist/transform/Flasher.d.ts +25 -0
  387. package/dist/transform/Flasher.js +39 -0
  388. package/dist/transform/Rotate.d.ts +24 -12
  389. package/dist/transform/Rotate.js +36 -22
  390. package/dist/transform/ScaleFade.d.ts +36 -11
  391. package/dist/transform/ScaleFade.js +86 -28
  392. package/dist/transform/internal/CollapseMotion.d.ts +10 -0
  393. package/dist/transform/internal/CollapseMotion.js +65 -0
  394. package/dist/tree/Tree.d.ts +85 -0
  395. package/dist/tree/Tree.js +387 -0
  396. package/dist/tree/treeRow.d.ts +39 -0
  397. package/dist/tree/treeRow.js +75 -0
  398. package/dist/utils/colors.d.ts +46 -13
  399. package/dist/utils/colors.js +92 -34
  400. package/dist/utils/css.d.ts +23 -0
  401. package/dist/utils/css.js +30 -0
  402. package/dist/utils/format.d.ts +58 -0
  403. package/dist/utils/format.js +220 -0
  404. package/dist/vite/index.d.ts +16 -0
  405. package/dist/vite/index.js +52 -0
  406. package/dist/widget/Widget.d.ts +164 -48
  407. package/dist/widget/Widget.js +335 -96
  408. package/dist/widget/WidgetGroup.d.ts +36 -0
  409. package/dist/widget/WidgetGroup.js +103 -0
  410. package/package.json +855 -157
  411. package/dist/accordion/Accordion.d.ts +0 -54
  412. package/dist/accordion/Accordion.js +0 -183
  413. package/dist/assets/components/GalaxyFilamentWordmarkDark.d.ts +0 -3
  414. package/dist/assets/components/GalaxyFilamentWordmarkDark.js +0 -14
  415. package/dist/assets/components/GalaxyFilamentWordmarkLight.d.ts +0 -3
  416. package/dist/assets/components/GalaxyFilamentWordmarkLight.js +0 -14
  417. package/dist/assets/components/GalaxyLogomarkDark.d.ts +0 -3
  418. package/dist/assets/components/GalaxyLogomarkDark.js +0 -11
  419. package/dist/assets/components/GalaxyLogomarkLight.d.ts +0 -3
  420. package/dist/assets/components/GalaxyLogomarkLight.js +0 -17
  421. package/dist/assets/components/GalaxyWordmarkDark.d.ts +0 -3
  422. package/dist/assets/components/GalaxyWordmarkDark.js +0 -15
  423. package/dist/assets/components/GalaxyWordmarkLight.d.ts +0 -3
  424. package/dist/assets/components/GalaxyWordmarkLight.js +0 -28
  425. package/dist/assets/models/galaxy-animation.js +0 -136666
  426. package/dist/assets/models/galaxy-logomark.js +0 -4
  427. package/dist/avatar/AvatarShimmer.d.ts +0 -30
  428. package/dist/avatar/AvatarShimmer.js +0 -22
  429. package/dist/backgrounds/CellGridBackground.d.ts +0 -24
  430. package/dist/backgrounds/CellGridBackground.js +0 -44
  431. package/dist/backgrounds/CrossGridBackground.d.ts +0 -26
  432. package/dist/backgrounds/CrossGridBackground.js +0 -49
  433. package/dist/backgrounds/DotGridBackground.d.ts +0 -24
  434. package/dist/backgrounds/DotGridBackground.js +0 -47
  435. package/dist/badge/Badge.d.ts +0 -42
  436. package/dist/badge/Badge.js +0 -99
  437. package/dist/charts/ChartEmptyState.d.ts +0 -17
  438. package/dist/charts/ChartEmptyState.js +0 -29
  439. package/dist/charts/ProgressBar.d.ts +0 -29
  440. package/dist/charts/ProgressBar.js +0 -65
  441. package/dist/charts/chartTheme.d.ts +0 -18
  442. package/dist/charts/chartTheme.js +0 -26
  443. package/dist/containers/FlexItem.d.ts +0 -50
  444. package/dist/containers/FlexItem.js +0 -91
  445. package/dist/containers/FlexWrapper.d.ts +0 -96
  446. package/dist/containers/FlexWrapper.js +0 -143
  447. package/dist/containers/GridWrapper.d.ts +0 -79
  448. package/dist/containers/GridWrapper.js +0 -125
  449. package/dist/containers/Spacing.d.ts +0 -23
  450. package/dist/containers/Spacing.js +0 -59
  451. package/dist/containers/Wrapper.d.ts +0 -26
  452. package/dist/containers/Wrapper.js +0 -54
  453. package/dist/dividers/HorizontalDivider.d.ts +0 -7
  454. package/dist/dividers/HorizontalDivider.js +0 -39
  455. package/dist/dividers/VerticalDivider.d.ts +0 -6
  456. package/dist/dividers/VerticalDivider.js +0 -21
  457. package/dist/icons/GalaxyFilamentWordmark.d.ts +0 -11
  458. package/dist/icons/GalaxyFilamentWordmark.js +0 -25
  459. package/dist/icons/GalaxyLogomark.d.ts +0 -13
  460. package/dist/icons/GalaxyLogomark.js +0 -27
  461. package/dist/icons/GalaxyLogomark3D.d.ts +0 -56
  462. package/dist/icons/GalaxyLogomark3D.js +0 -319
  463. package/dist/icons/GalaxyLogomarkAnimation.d.ts +0 -18
  464. package/dist/icons/GalaxyLogomarkAnimation.js +0 -48
  465. package/dist/icons/GalaxyWordmark.d.ts +0 -11
  466. package/dist/icons/GalaxyWordmark.js +0 -25
  467. package/dist/inputs/MultiTextInput.d.ts +0 -32
  468. package/dist/inputs/MultiTextInput.js +0 -180
  469. package/dist/inputs/SwitcherInput.d.ts +0 -30
  470. package/dist/inputs/SwitcherInput.js +0 -81
  471. package/dist/inputs/hooks.d.ts +0 -10
  472. package/dist/inputs/hooks.js +0 -22
  473. package/dist/overlay/constants.d.ts +0 -28
  474. package/dist/overlay/constants.js +0 -37
  475. package/dist/resizable/HorizontalResizeHandle.d.ts +0 -17
  476. package/dist/resizable/HorizontalResizeHandle.js +0 -38
  477. package/dist/resizable/VerticalResizeHandle.d.ts +0 -18
  478. package/dist/resizable/VerticalResizeHandle.js +0 -39
  479. package/dist/table/SpreadsheetCell.d.ts +0 -21
  480. package/dist/table/SpreadsheetCell.js +0 -71
  481. package/dist/table/SpreadsheetHeaderCell.d.ts +0 -23
  482. package/dist/table/SpreadsheetHeaderCell.js +0 -91
  483. package/dist/table/SpreadsheetMenuItem.d.ts +0 -14
  484. package/dist/table/SpreadsheetMenuItem.js +0 -33
  485. package/dist/table/SpreadsheetPrimitives.d.ts +0 -172
  486. package/dist/table/SpreadsheetPrimitives.js +0 -105
  487. package/dist/table/SpreadsheetRow.d.ts +0 -33
  488. package/dist/table/SpreadsheetRow.js +0 -73
  489. package/dist/table/SpreadsheetRowActionCell.d.ts +0 -14
  490. package/dist/table/SpreadsheetRowActionCell.js +0 -51
  491. package/dist/table/TableExpandCell.d.ts +0 -11
  492. package/dist/table/TableExpandCell.js +0 -24
  493. package/dist/table/TableExpandedRow.d.ts +0 -16
  494. package/dist/table/TableExpandedRow.js +0 -77
  495. package/dist/table/TableHeaderCellContent.d.ts +0 -30
  496. package/dist/table/TableHeaderCellContent.js +0 -48
  497. package/dist/table/TablePrimitives.d.ts +0 -313
  498. package/dist/table/TablePrimitives.js +0 -302
  499. package/dist/table/TableSelectCell.d.ts +0 -18
  500. package/dist/table/TableSelectCell.js +0 -27
  501. package/dist/table/TableStatusRow.d.ts +0 -18
  502. package/dist/table/TableStatusRow.js +0 -50
  503. package/dist/table/useSpreadsheetEditing.d.ts +0 -13
  504. package/dist/table/useSpreadsheetEditing.js +0 -41
  505. package/dist/table/useTableColumnResize.d.ts +0 -38
  506. package/dist/table/useTableColumnResize.js +0 -155
  507. package/dist/table/useTableRowExpansion.d.ts +0 -24
  508. package/dist/table/useTableRowExpansion.js +0 -62
  509. package/dist/table/utils.d.ts +0 -50
  510. package/dist/table/utils.js +0 -78
  511. package/dist/text/HotKeys.d.ts +0 -30
  512. package/dist/text/HotKeys.js +0 -74
  513. package/dist/text/Paragraph.d.ts +0 -33
  514. package/dist/text/Paragraph.js +0 -83
  515. package/dist/text/TextShimmer.d.ts +0 -14
  516. package/dist/text/TextShimmer.js +0 -34
  517. package/dist/theme/GalaxyTheme.d.ts +0 -67
  518. package/dist/theme/GalaxyTheme.js +0 -119
  519. package/dist/theme/constants.d.ts +0 -8
  520. package/dist/theme/constants.js +0 -38
  521. package/dist/theme/index.d.ts +0 -6
  522. package/dist/theme/index.js +0 -7
  523. package/dist/theme/types.d.ts +0 -195
  524. package/dist/theme/types.js +0 -10
  525. package/dist/theme/typography.d.ts +0 -2
  526. package/dist/theme/typography.js +0 -73
  527. package/dist/theme/variants/dark.d.ts +0 -2
  528. package/dist/theme/variants/dark.js +0 -125
  529. package/dist/theme/variants/light.d.ts +0 -2
  530. package/dist/theme/variants/light.js +0 -125
  531. package/dist/toast/ToastContainer.d.ts +0 -10
  532. package/dist/toast/ToastContainer.js +0 -31
  533. package/dist/toast/ToastWrapper.d.ts +0 -6
  534. package/dist/toast/ToastWrapper.js +0 -27
  535. package/dist/transform/Flash.d.ts +0 -7
  536. package/dist/transform/Flash.js +0 -18
  537. package/dist/transform/Spin.d.ts +0 -14
  538. package/dist/transform/Spin.js +0 -25
  539. package/dist/utils/linaria.d.ts +0 -1
  540. package/dist/utils/linaria.js +0 -8
@@ -1,30 +1,93 @@
1
- import { InputSize, InputVariant } from "./Input";
2
- export interface RadioInputProps {
1
+ import { type AriaAttributes, type ChangeEvent, type CSSProperties, type InputHTMLAttributes, type ReactNode } from "react";
2
+ /** Rung of the radio (Constitution III-A.4). The circle is the rung's icon size. */
3
+ export declare enum RadioInputSize {
4
+ /** 12px circle, caption label. */
5
+ X_SMALL = "X_SMALL",
6
+ /** 14px circle, body_sm label. */
7
+ SMALL = "SMALL",
8
+ /** 16px circle, body_md label. The default; the 1.x MEDIUM circle. */
9
+ MEDIUM = "MEDIUM",
10
+ /** 16px circle, body_lg label. */
11
+ LARGE = "LARGE",
12
+ /** 18px circle, body_lg label. */
13
+ X_LARGE = "X_LARGE"
14
+ }
15
+ /** Fill of the unselected circle (Constitution V-A surface set; 1.x InputVariant unchanged). */
16
+ export declare enum RadioInputVariant {
17
+ /** `background.base`. */
18
+ BASE = "BASE",
19
+ /** `background.primary`. The default. */
20
+ PRIMARY = "PRIMARY",
21
+ /** `background.secondary`. */
22
+ SECONDARY = "SECONDARY",
23
+ /** `background.tertiary`. */
24
+ TERTIARY = "TERTIARY"
25
+ }
26
+ /** Native `<input>` attributes, typed as React types them. */
27
+ type NativeInputAttributes = InputHTMLAttributes<HTMLInputElement>;
28
+ /** The native passthrough allowlist, each documented. */
29
+ interface RadioInputNativeProps {
30
+ /** Native group name. Radios with the same `name` form one arrow-key group; RadioGroup sets it. */
31
+ name?: NativeInputAttributes["name"];
32
+ /** Focus the radio on mount. */
33
+ autoFocus?: NativeInputAttributes["autoFocus"];
34
+ /** Focus handler on the `<input>`. */
35
+ onFocus?: NativeInputAttributes["onFocus"];
36
+ /** Blur handler on the `<input>`. */
37
+ onBlur?: NativeInputAttributes["onBlur"];
38
+ }
39
+ export interface RadioInputProps extends AriaAttributes, RadioInputNativeProps {
3
40
  /**
4
- * Unselected fill color. The selected fill is a state color and stays
5
- * `background.primaryAlt` so the dot keeps its contrast. Unlike the field
6
- * inputs, `TRANSPARENT` keeps the hairline border here — without it the
7
- * circle would be invisible. @default InputVariant.PRIMARY
41
+ * Whether this option is the chosen one. Controlled: update it from `onChange`.
42
+ * @default false
8
43
  */
9
- variant?: InputVariant;
10
- /** Circle size — a hit target, so it steps 12 / 16 / 20px, not off the type scale.
11
- * @default InputSize.MEDIUM */
12
- size?: InputSize;
13
- /** Controlled state. The radio holds none of its own. */
14
- isSelected: boolean;
15
- /** Text beside the circle. */
44
+ isSelected?: boolean;
45
+ /** Called with `true` when the user selects this radio (click, Space, Enter or an arrow key); the native change event is second. */
46
+ onChange?: (isSelected: boolean, event: ChangeEvent<HTMLInputElement>) => void;
47
+ /** Text beside the circle. Clicking it selects the radio. */
16
48
  label?: string;
17
- /** Adds an info icon beside the label with this content on hover. */
18
- labelTooltip?: string | React.ReactNode;
19
- isRequired?: boolean;
49
+ /** Help copy under the label. Text and inline `Link`s only. */
50
+ description?: ReactNode;
51
+ /**
52
+ * Rung: sets the circle, the type steps and the gap.
53
+ * @default RadioInputSize.MEDIUM
54
+ */
55
+ size?: RadioInputSize;
56
+ /**
57
+ * Fill of the unselected circle, from the surface set. Ignored with `isGhost`.
58
+ * @default RadioInputVariant.PRIMARY
59
+ */
60
+ variant?: RadioInputVariant;
61
+ /**
62
+ * Ghost unselected circle: no fill, the hairline kept (1.x `TRANSPARENT`). For radios on a
63
+ * surface whose own fill should show through, such as a selected table row.
64
+ * @default false
65
+ */
66
+ isGhost?: boolean;
67
+ /**
68
+ * Error border. The group carries `aria-invalid` (RadioGroup).
69
+ * @default false
70
+ */
71
+ isError?: boolean;
72
+ /**
73
+ * Not focusable or selectable. Shows the disabled look.
74
+ * @default false
75
+ */
20
76
  isDisabled?: boolean;
21
- onChange: (selected: boolean) => void;
77
+ /** Accessible name when there is no `label`. */
78
+ ariaLabel?: string;
79
+ /**
80
+ * DOM id of the `<input>`.
81
+ * @default useId()
82
+ */
83
+ id?: string;
84
+ /** Any `data-*` attribute, forwarded to the `<input>`. */
85
+ [dataAttribute: `data-${string}`]: string | number | boolean | undefined;
86
+ /** Extra class on the root `<label>`. */
87
+ className?: string;
88
+ /** Inline style on the root `<label>`; only for setting CSS custom properties. */
89
+ style?: CSSProperties;
22
90
  }
23
- /**
24
- * A single radio button with an optional label. Fully controlled.
25
- *
26
- * There is no group component — render several and enforce single-selection in
27
- * your own state.
28
- */
29
- declare const RadioInput: ({ variant, size, isSelected, label, labelTooltip, isRequired, isDisabled, onChange, }: RadioInputProps) => import("react").JSX.Element;
91
+ /** One labelled option of a radio set: a native `<input type="radio">` drawn as a circle, selected by the whole row. */
92
+ declare const RadioInput: import("react").ForwardRefExoticComponent<RadioInputProps & import("react").RefAttributes<HTMLInputElement>>;
30
93
  export default RadioInput;
@@ -1,105 +1,192 @@
1
- import { withTheme } from "../theme/GalaxyTheme.js";
2
- import Text, { TextVariant } from "../text/Text.js";
3
- import Tooltip, { TooltipPosition } from "../tooltip/Tooltip.js";
4
- import Icon, { IconVariant } from "../icons/Icon.js";
5
- import FlexWrapper, { AlignItems } from "../containers/FlexWrapper.js";
6
- import RequiredMarker from "../text/RequiredMarker.js";
7
- import Spacing from "../containers/Spacing.js";
8
- import { InputSize, InputVariant, getInputControlSize, getInputSurfaceColor } from "./Input.js";
1
+ import Text, { TextSize, TextVariant } from "../text/Text.js";
2
+ import { useDevWarning } from "./internal/devWarn.js";
3
+ import { hasContent, isFilled } from "./internal/predicates.js";
4
+ import { joinIds } from "./internal/fieldWiring.js";
9
5
  /* empty css */
10
6
  import { styled } from "@linaria/react";
11
- import { match } from "ts-pattern";
7
+ import { forwardRef, useId, useRef } from "react";
12
8
  import { jsx, jsxs } from "react/jsx-runtime";
13
- import { InfoIcon } from "@phosphor-icons/react";
9
+ import { cx } from "@linaria/core";
10
+ import { useMergeRefs } from "@floating-ui/react";
14
11
  //#region src/inputs/RadioInput.tsx
15
- var _exp = () => ({ $isDisabled }) => $isDisabled ? "not-allowed" : "pointer";
16
- var _exp2 = () => ({ $isDisabled }) => $isDisabled ? .5 : 1;
17
- var RadioContainer = /*#__PURE__*/ styled("div")({
18
- name: "RadioContainer",
19
- class: "r1pzr59l",
20
- propsAsIs: false,
21
- vars: {
22
- "r1pzr59l-0": [_exp()],
23
- "r1pzr59l-1": [_exp2()]
24
- }
25
- });
26
- var _exp4 = () => ({ $size }) => getInputControlSize($size);
27
- var _exp5 = () => ({ theme }) => theme.color.border.primary;
28
- var _exp6 = () => ({ theme, $variant, $isSelected }) => $isSelected ? theme.color.background.primaryAlt : getInputSurfaceColor(theme, $variant);
29
- var RadioWrapper = withTheme(/*#__PURE__*/ styled("div")({
30
- name: "RadioWrapper",
31
- class: "r1mwwvky",
32
- propsAsIs: false,
33
- vars: {
34
- "r1mwwvky-0": [_exp4()],
35
- "r1mwwvky-1": [_exp5()],
36
- "r1mwwvky-2": [_exp6()]
37
- }
38
- }));
39
- /** The dot is half the circle it sits in — see `getInputControlSize`. */
40
- function getRadioDotSize(size) {
41
- return match(size).returnType().with(InputSize.SMALL, () => "6px").with(InputSize.MEDIUM, () => "8px").with(InputSize.LARGE, () => "10px").exhaustive();
42
- }
43
- var _exp8 = () => ({ $size }) => getRadioDotSize($size);
44
- var _exp9 = () => ({ theme }) => theme.color.background.primary;
45
- var _exp0 = () => ({ $isSelected }) => $isSelected ? 1 : 0;
46
- var _exp1 = () => ({ $isSelected }) => $isSelected ? "scale(1)" : "scale(0)";
47
- var RadioDot = withTheme(/*#__PURE__*/ styled("div")({
48
- name: "RadioDot",
49
- class: "r137y8ev",
50
- propsAsIs: false,
51
- vars: {
52
- "r137y8ev-0": [_exp8()],
53
- "r137y8ev-1": [_exp9()],
54
- "r137y8ev-2": [_exp0()],
55
- "r137y8ev-3": [_exp1()]
56
- }
57
- }));
58
12
  /**
59
- * A single radio button with an optional label. Fully controlled.
13
+ * One option in a set where exactly one can be chosen. A native `<input type="radio">` drawn as a
14
+ * small circle (`appearance: none`), with an optional `label` and `description` beside it; the
15
+ * whole row is a `<label>`, so clicking the text selects. It is controlled: `isSelected` comes
16
+ * from the app or a `RadioGroup`, and `onChange(true, event)` reports a selection. Radios that
17
+ * share a `name` get the browser's radio keyboard pattern (one tab stop, arrow keys select).
18
+ * Selected is the monochrome `solid.primary` fill with an on-solid dot.
60
19
  *
61
- * There is no group component — render several and enforce single-selection in
62
- * your own state.
20
+ * It does not hold the group's value, name the question or validate: that is `RadioGroup`, which
21
+ * renders one RadioInput per option. Use RadioInput alone only for a custom layout (a radio in
22
+ * each row of a table). Replaces 1.x `RadioInput` (`InputSize` / `InputVariant` →
23
+ * `RadioInputSize` / `RadioInputVariant`; native input instead of a clickable `div`;
24
+ * `labelTooltip` → `description`; `isRequired` moves to `RadioGroup`; `onChange` fires only on
25
+ * selection, with `true`).
26
+ */
27
+ /** Rung of the radio (Constitution III-A.4). The circle is the rung's icon size. */
28
+ var RadioInputSize = /* @__PURE__ */ function(RadioInputSize) {
29
+ /** 12px circle, caption label. */
30
+ RadioInputSize["X_SMALL"] = "X_SMALL";
31
+ /** 14px circle, body_sm label. */
32
+ RadioInputSize["SMALL"] = "SMALL";
33
+ /** 16px circle, body_md label. The default; the 1.x MEDIUM circle. */
34
+ RadioInputSize["MEDIUM"] = "MEDIUM";
35
+ /** 16px circle, body_lg label. */
36
+ RadioInputSize["LARGE"] = "LARGE";
37
+ /** 18px circle, body_lg label. */
38
+ RadioInputSize["X_LARGE"] = "X_LARGE";
39
+ return RadioInputSize;
40
+ }({});
41
+ /** Fill of the unselected circle (Constitution V-A surface set; 1.x InputVariant unchanged). */
42
+ var RadioInputVariant = /* @__PURE__ */ function(RadioInputVariant) {
43
+ /** `background.base`. */
44
+ RadioInputVariant["BASE"] = "BASE";
45
+ /** `background.primary`. The default. */
46
+ RadioInputVariant["PRIMARY"] = "PRIMARY";
47
+ /** `background.secondary`. */
48
+ RadioInputVariant["SECONDARY"] = "SECONDARY";
49
+ /** `background.tertiary`. */
50
+ RadioInputVariant["TERTIARY"] = "TERTIARY";
51
+ return RadioInputVariant;
52
+ }({});
53
+ /** The row: circle column, then label and description. State lives in custom properties set here, so hovering anywhere lights the circle. */
54
+ var Root = /*#__PURE__*/ styled("label")({
55
+ name: "Root",
56
+ class: "gx-RadioInput-r1pzr59l",
57
+ propsAsIs: false
58
+ });
59
+ /** As tall as the label's first line, so the circle centers on it. */
60
+ var Indicator = /*#__PURE__*/ styled("span")({
61
+ name: "Indicator",
62
+ class: "gx-RadioInput-Indicator-i1mwwvky",
63
+ propsAsIs: false
64
+ });
65
+ /** The circle's footprint; positions the dot over the input. */
66
+ var BoxWrap = /*#__PURE__*/ styled("span")({
67
+ name: "BoxWrap",
68
+ class: "gx-RadioInput-BoxWrap-b137y8ev",
69
+ propsAsIs: false
70
+ });
71
+ /** The native radio, drawn as the circle. It is the focused element, so `FOCUS_RING` applies as written. */
72
+ var Control = /*#__PURE__*/ styled("input")({
73
+ name: "Control",
74
+ class: "gx-RadioInput-Control-c1c8ijkb",
75
+ propsAsIs: false
76
+ });
77
+ /** The dot, centered over the circle; scales in when selected. Decorative and click-through. */
78
+ var Dot = /*#__PURE__*/ styled("span")({
79
+ name: "Dot",
80
+ class: "gx-RadioInput-Dot-d1wh1wjm",
81
+ propsAsIs: false
82
+ });
83
+ /** Label over description, Field's label-to-description gap. */
84
+ var Content = /*#__PURE__*/ styled("span")({
85
+ name: "Content",
86
+ class: "gx-RadioInput-Content-clety7y",
87
+ propsAsIs: false
88
+ });
89
+ /** Circle, dot, first-line height and gap per rung: the circle is the rung's icon size, the gap the rung's gap. */
90
+ var RADIO_INPUT_SIZE_TO_CSS_MAP = {
91
+ ["X_SMALL"]: "gx-RadioInput-X_SMALL-x190ba3z",
92
+ ["SMALL"]: "gx-RadioInput-SMALL-sdil791",
93
+ ["MEDIUM"]: "gx-RadioInput-MEDIUM-mox9tg9",
94
+ ["LARGE"]: "gx-RadioInput-LARGE-l1pffvb6",
95
+ ["X_LARGE"]: "gx-RadioInput-X_LARGE-x12lumk7"
96
+ };
97
+ /** Rest look of the unselected circle (Input's table). */
98
+ var RADIO_INPUT_VARIANT_TO_CSS_MAP = {
99
+ ["BASE"]: "gx-RadioInput-BASE-b1h3kcqp",
100
+ ["PRIMARY"]: "gx-RadioInput-PRIMARY-ptrdag8",
101
+ ["SECONDARY"]: "gx-RadioInput-SECONDARY-s1x9nxv1",
102
+ ["TERTIARY"]: "gx-RadioInput-TERTIARY-twyki5h"
103
+ };
104
+ /** `isGhost`: no fill, the hairline kept. Declared after the variant map, which it replaces. */
105
+ var GHOST_CSS = "gx-RadioInput-GHOST_CSS-g1xdbhty";
106
+ /** The label and description column beside the circle. */
107
+ var HAS_CONTENT_CSS = "gx-RadioInput-HAS_CONTENT_CSS-hqnpcbl";
108
+ /** Hover and press on an enabled circle: `border.hovered`, the field-frame hover (2026-10-03 resolution). */
109
+ var INTERACTIVE_CSS = "gx-RadioInput-INTERACTIVE_CSS-i14sv8xb";
110
+ /** Selected: the `solid.primary` fill and an on-solid dot, scaled in. */
111
+ var SELECTED_CSS = "gx-RadioInput-SELECTED_CSS-s1025v6a";
112
+ /** Hover and press on an enabled selected circle; declared after `INTERACTIVE_CSS` so it wins. */
113
+ var SELECTED_INTERACTIVE_CSS = "gx-RadioInput-SELECTED_INTERACTIVE_CSS-s1g1ek83";
114
+ /** Red hairline at rest, on hover and on press; a selected circle keeps its `solid.primary` fill. */
115
+ var ERROR_CSS = "gx-RadioInput-ERROR_CSS-ezk6lpr";
116
+ /**
117
+ * Disabled, unselected: the disabled fill (`background.pressed`, as disabled-selected) over
118
+ * the resting hairline, so a circle with no label still reads as disabled; the label and cursor too.
63
119
  */
64
- var RadioInput = ({ variant = InputVariant.PRIMARY, size = InputSize.MEDIUM, isSelected, label, labelTooltip, isRequired = false, isDisabled = false, onChange }) => {
65
- const handleClick = () => {
66
- if (!isDisabled) onChange(!isSelected);
120
+ var DISABLED_CSS = "gx-RadioInput-DISABLED_CSS-dsz9xw9";
121
+ /** Disabled, selected: Button's disabled `PRIMARY` fill, the resting hairline and a disabled dot. */
122
+ var DISABLED_SELECTED_CSS = "gx-RadioInput-DISABLED_SELECTED_CSS-dtueym8";
123
+ /** Label step per rung (the canonical control text). */
124
+ var RADIO_INPUT_SIZE_TO_TEXT_SIZE_MAP = {
125
+ ["X_SMALL"]: TextSize.CAPTION,
126
+ ["SMALL"]: TextSize.BODY_SM,
127
+ ["MEDIUM"]: TextSize.BODY_MD,
128
+ ["LARGE"]: TextSize.BODY_LG,
129
+ ["X_LARGE"]: TextSize.BODY_LG
130
+ };
131
+ /** Description step per rung (Field's help steps). */
132
+ var RADIO_INPUT_SIZE_TO_HELP_TEXT_SIZE_MAP = {
133
+ ["X_SMALL"]: TextSize.CAPTION,
134
+ ["SMALL"]: TextSize.CAPTION,
135
+ ["MEDIUM"]: TextSize.BODY_SM,
136
+ ["LARGE"]: TextSize.BODY_SM,
137
+ ["X_LARGE"]: TextSize.BODY_MD
138
+ };
139
+ /** One labelled option of a radio set: a native `<input type="radio">` drawn as a circle, selected by the whole row. */
140
+ var RadioInput = forwardRef(function RadioInput(props, ref) {
141
+ const { isSelected = false, onChange, label, description, size = "MEDIUM", variant = "PRIMARY", isGhost = false, isError = false, isDisabled = false, ariaLabel, id, "aria-describedby": ariaDescribedBy, className, style, ...rest } = props;
142
+ const generatedId = useId();
143
+ const inputId = id ?? generatedId;
144
+ const labelId = `${inputId}-label`;
145
+ const descriptionId = `${inputId}-description`;
146
+ const mergedRef = useMergeRefs([useRef(null), ref]);
147
+ const hasLabel = isFilled(label);
148
+ const hasDescription = hasContent(description);
149
+ const describedBy = joinIds([hasDescription && descriptionId, ariaDescribedBy]);
150
+ useDevWarning(!(hasLabel || isFilled(ariaLabel) || isFilled(rest["aria-labelledby"]) || isFilled(rest["aria-label"])), "[@galaxy-io/dls] RadioInput has no accessible name. Pass `label` or set `ariaLabel`.");
151
+ const handleChange = (event) => {
152
+ if (event.currentTarget.checked) onChange?.(true, event);
153
+ };
154
+ /** Enter selects too, through the native click so `onChange` runs once, as for a mouse click. */
155
+ const handleKeyDown = (event) => {
156
+ if (event.key !== "Enter" || event.nativeEvent.isComposing) return;
157
+ event.preventDefault();
158
+ event.currentTarget.click();
67
159
  };
68
- return /* @__PURE__ */ jsxs(RadioContainer, {
69
- $isDisabled: isDisabled,
70
- onClick: handleClick,
71
- children: [/* @__PURE__ */ jsx(RadioWrapper, {
72
- $variant: variant,
73
- $size: size,
74
- $isSelected: isSelected,
75
- children: /* @__PURE__ */ jsx(RadioDot, {
76
- $size: size,
77
- $isSelected: isSelected
78
- })
79
- }), label && /* @__PURE__ */ jsxs(FlexWrapper, {
80
- alignItems: AlignItems.CENTER,
81
- gap: 1,
82
- children: [
83
- /* @__PURE__ */ jsx(Text, {
84
- variant: TextVariant.PRIMARY,
85
- children: label
86
- }),
87
- isRequired && /* @__PURE__ */ jsx(RequiredMarker, {}),
88
- labelTooltip && /* @__PURE__ */ jsx(Spacing, {
89
- left: 4,
90
- children: /* @__PURE__ */ jsx(Tooltip, {
91
- body: labelTooltip,
92
- position: TooltipPosition.RIGHT,
93
- children: /* @__PURE__ */ jsx(Icon, {
94
- component: InfoIcon,
95
- variant: IconVariant.SECONDARY,
96
- size: 12
97
- })
98
- })
99
- })
100
- ]
101
- })]
160
+ return /* @__PURE__ */ jsxs(Root, {
161
+ className: cx(RADIO_INPUT_SIZE_TO_CSS_MAP[size], isGhost ? GHOST_CSS : RADIO_INPUT_VARIANT_TO_CSS_MAP[variant], (hasLabel || hasDescription) && HAS_CONTENT_CSS, !isDisabled && INTERACTIVE_CSS, isSelected && SELECTED_CSS, isSelected && !isDisabled && SELECTED_INTERACTIVE_CSS, isError && ERROR_CSS, isDisabled && (isSelected ? DISABLED_SELECTED_CSS : DISABLED_CSS), className),
162
+ ...style === void 0 ? {} : { style },
163
+ children: [/* @__PURE__ */ jsx(Indicator, { children: /* @__PURE__ */ jsxs(BoxWrap, { children: [/* @__PURE__ */ jsx(Control, {
164
+ ref: mergedRef,
165
+ type: "radio",
166
+ id: inputId,
167
+ checked: isSelected,
168
+ onChange: handleChange,
169
+ onKeyDown: handleKeyDown,
170
+ disabled: isDisabled,
171
+ "aria-label": ariaLabel,
172
+ "aria-labelledby": hasLabel ? labelId : void 0,
173
+ "aria-describedby": describedBy,
174
+ ...rest
175
+ }), /* @__PURE__ */ jsx(Dot, { "aria-hidden": true })] }) }), (hasLabel || hasDescription) && /* @__PURE__ */ jsxs(Content, { children: [hasLabel && /* @__PURE__ */ jsx(Text, {
176
+ as: "span",
177
+ id: labelId,
178
+ size: RADIO_INPUT_SIZE_TO_TEXT_SIZE_MAP[size],
179
+ variant: isDisabled ? TextVariant.DISABLED : TextVariant.PRIMARY,
180
+ children: label
181
+ }), hasDescription && /* @__PURE__ */ jsx(Text, {
182
+ as: "span",
183
+ id: descriptionId,
184
+ size: RADIO_INPUT_SIZE_TO_HELP_TEXT_SIZE_MAP[size],
185
+ variant: isDisabled ? TextVariant.DISABLED : TextVariant.TERTIARY,
186
+ children: description
187
+ })] })]
102
188
  });
103
- };
189
+ });
190
+ RadioInput.displayName = "RadioInput";
104
191
  //#endregion
105
- export { RadioInput as default };
192
+ export { RadioInputSize, RadioInputVariant, RadioInput as default };
@@ -0,0 +1,66 @@
1
+ import { type InputProps } from "./Input.js";
2
+ /** Every `Input` prop except those the search field fixes or owns, plus its own. */
3
+ export type SearchInputProps = Omit<InputProps, "type" | "icon" | "leading" | "prefix" | "suffix" | "isClearable" | "onEnter" | "inputMode" | "enterKeyHint" | "placeholder" | "ariaLabel"> & {
4
+ /**
5
+ * Hint shown while the value is empty.
6
+ * @default "Search"
7
+ */
8
+ placeholder?: string;
9
+ /**
10
+ * Accessible name when there is no visible label. Defaults to "Search" when there is no `label` and no enclosing `Field`.
11
+ * @default "Search"
12
+ */
13
+ ariaLabel?: string;
14
+ /** Called with the text once typing pauses for `debounceMs`, at once on Enter, and at once when emptied. Never twice in a row with the same term, never on mount. */
15
+ onSearch?: (term: string) => void;
16
+ /**
17
+ * Quiet period before `onSearch` fires while typing. `0` searches on every change.
18
+ * @default 150
19
+ */
20
+ debounceMs?: number;
21
+ /** Focus shortcut in `useHotkey` grammar (`["mod", "k"]`, `["/"]`), shown as `Kbd` caps while empty and not focused. Display only unless `shouldBindHotKey`. */
22
+ hotKeys?: string[];
23
+ /**
24
+ * Also bind `hotKeys`: the shortcut focuses the field and selects its text.
25
+ * @default false
26
+ */
27
+ shouldBindHotKey?: boolean;
28
+ /**
29
+ * Shows a `Spinner` at the end of the field while the app's search runs. The field stays editable.
30
+ * @default false
31
+ */
32
+ isLoading?: boolean;
33
+ };
34
+ /** A search field: `Input` with `type="search"`, a magnifier, clearing, a debounced `onSearch` and a focus shortcut. */
35
+ declare const SearchInput: import("react").ForwardRefExoticComponent<Omit<InputProps, "icon" | "ariaLabel" | "enterKeyHint" | "prefix" | "inputMode" | "type" | "leading" | "placeholder" | "onEnter" | "suffix" | "isClearable"> & {
36
+ /**
37
+ * Hint shown while the value is empty.
38
+ * @default "Search"
39
+ */
40
+ placeholder?: string;
41
+ /**
42
+ * Accessible name when there is no visible label. Defaults to "Search" when there is no `label` and no enclosing `Field`.
43
+ * @default "Search"
44
+ */
45
+ ariaLabel?: string;
46
+ /** Called with the text once typing pauses for `debounceMs`, at once on Enter, and at once when emptied. Never twice in a row with the same term, never on mount. */
47
+ onSearch?: (term: string) => void;
48
+ /**
49
+ * Quiet period before `onSearch` fires while typing. `0` searches on every change.
50
+ * @default 150
51
+ */
52
+ debounceMs?: number;
53
+ /** Focus shortcut in `useHotkey` grammar (`["mod", "k"]`, `["/"]`), shown as `Kbd` caps while empty and not focused. Display only unless `shouldBindHotKey`. */
54
+ hotKeys?: string[];
55
+ /**
56
+ * Also bind `hotKeys`: the shortcut focuses the field and selects its text.
57
+ * @default false
58
+ */
59
+ shouldBindHotKey?: boolean;
60
+ /**
61
+ * Shows a `Spinner` at the end of the field while the app's search runs. The field stays editable.
62
+ * @default false
63
+ */
64
+ isLoading?: boolean;
65
+ } & import("react").RefAttributes<HTMLInputElement>>;
66
+ export default SearchInput;
@@ -0,0 +1,156 @@
1
+ import { useControlledState } from "../hooks/useControlledState.js";
2
+ import Flex, { AlignItems } from "../layout/Flex.js";
3
+ import Kbd, { KbdSize } from "../text/Kbd.js";
4
+ import { parseHotkey, useHotkey } from "../hooks/useHotkey.js";
5
+ import { useField } from "../hooks/useField.js";
6
+ import Spinner, { SpinnerSize } from "../feedback/Spinner.js";
7
+ import { useDebouncedValue } from "../hooks/useDebouncedValue.js";
8
+ import Input, { INPUT_SIZE_TO_GAP_MAP, InputSize } from "./Input.js";
9
+ import { forwardRef, useCallback, useEffect, useRef, useState } from "react";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ import { useMergeRefs } from "@floating-ui/react";
12
+ import { MagnifyingGlassIcon } from "@phosphor-icons/react";
13
+ //#region src/inputs/SearchInput.tsx
14
+ /**
15
+ * The field for searching or filtering: a text field with a magnifier at its start, a clear button
16
+ * once it has text (Escape clears too), an optional focus shortcut (`hotKeys`, shown as `Kbd` caps
17
+ * while empty and not focused; bound with `shouldBindHotKey`), and `onSearch`, which fires once
18
+ * typing pauses for `debounceMs`, at once on Enter, and at once when the field is emptied.
19
+ * `onChange` still reports every keystroke for a controlled value.
20
+ *
21
+ * A preset over `Input` (base) with `type="search"`; `InputSize` / `InputVariant` are imported
22
+ * from `inputs/Input`. It never fetches, filters or routes: the app does that in `onSearch` and
23
+ * passes `isLoading` while it runs. New in 2.0 (1.x built searches from `TextInput` by hand).
24
+ */
25
+ /** The spinner takes the field's rung (Spinner's identity-map rule). */
26
+ var INPUT_SIZE_TO_SPINNER_SIZE_MAP = {
27
+ [InputSize.X_SMALL]: SpinnerSize.X_SMALL,
28
+ [InputSize.SMALL]: SpinnerSize.SMALL,
29
+ [InputSize.MEDIUM]: SpinnerSize.MEDIUM,
30
+ [InputSize.LARGE]: SpinnerSize.LARGE,
31
+ [InputSize.X_LARGE]: SpinnerSize.X_LARGE
32
+ };
33
+ /** The caps match the rung of the control they sit in. */
34
+ var INPUT_SIZE_TO_KBD_SIZE_MAP = {
35
+ [InputSize.X_SMALL]: KbdSize.X_SMALL,
36
+ [InputSize.SMALL]: KbdSize.SMALL,
37
+ [InputSize.MEDIUM]: KbdSize.MEDIUM,
38
+ [InputSize.LARGE]: KbdSize.LARGE,
39
+ [InputSize.X_LARGE]: KbdSize.X_LARGE
40
+ };
41
+ /** Tokens that make a combo safe to fire while typing (Button's rule; Shift alone is not). */
42
+ var MODIFIER_TOKENS = new Set([
43
+ "mod",
44
+ "ctrl",
45
+ "meta",
46
+ "cmd",
47
+ "alt",
48
+ "option"
49
+ ]);
50
+ /** A search field: `Input` with `type="search"`, a magnifier, clearing, a debounced `onSearch` and a focus shortcut. */
51
+ var SearchInput = forwardRef(function SearchInput(props, ref) {
52
+ const { value: valueProp, defaultValue, onChange, onSearch, debounceMs = 150, hotKeys, shouldBindHotKey = false, isLoading = false, placeholder = "Search", ariaLabel, label, trailing, size = InputSize.MEDIUM, isDisabled = false, isReadOnly = false, onFocus, onBlur, onKeyDown, ...rest } = props;
53
+ const field = useField();
54
+ const innerRef = useRef(null);
55
+ const mergedRef = useMergeRefs([innerRef, ref]);
56
+ const [isFocused, setIsFocused] = useState(false);
57
+ const [value, setValue] = useControlledState({
58
+ value: valueProp,
59
+ defaultValue: defaultValue ?? "",
60
+ onChange
61
+ });
62
+ const lastSearchedRef = useRef(value);
63
+ const onSearchRef = useRef(onSearch);
64
+ useEffect(() => {
65
+ onSearchRef.current = onSearch;
66
+ });
67
+ const search = useCallback((term) => {
68
+ if (term === lastSearchedRef.current) return;
69
+ lastSearchedRef.current = term;
70
+ onSearchRef.current?.(term);
71
+ }, []);
72
+ const debouncedValue = useDebouncedValue(value, debounceMs, debounceMs > 0);
73
+ useEffect(() => {
74
+ search(debouncedValue);
75
+ }, [debouncedValue, search]);
76
+ /** Every edit; an emptied field searches at once. */
77
+ const handleChange = (next) => {
78
+ setValue(next);
79
+ if (next === "") search("");
80
+ };
81
+ const handleFocus = (event) => {
82
+ onFocus?.(event);
83
+ setIsFocused(true);
84
+ };
85
+ const handleBlur = (event) => {
86
+ onBlur?.(event);
87
+ setIsFocused(false);
88
+ };
89
+ /** Escape clears a non-empty editable field and stops there; an empty field lets it through. */
90
+ const handleKeyDown = (event) => {
91
+ onKeyDown?.(event);
92
+ if (event.defaultPrevented || event.key !== "Escape") return;
93
+ if (value === "" || isDisabled || isReadOnly) return;
94
+ event.preventDefault();
95
+ event.stopPropagation();
96
+ handleChange("");
97
+ };
98
+ const hasHotKeys = hotKeys !== void 0 && hotKeys.length > 0;
99
+ const combo = hasHotKeys ? hotKeys.join("+") : "";
100
+ const hasModifier = hasHotKeys && hotKeys.some((entry) => MODIFIER_TOKENS.has(entry.trim().toLowerCase()));
101
+ useHotkey(combo, () => {
102
+ innerRef.current?.focus();
103
+ innerRef.current?.select();
104
+ }, {
105
+ isEnabled: shouldBindHotKey && hasHotKeys && !isDisabled && parseHotkey(combo) !== null,
106
+ shouldPreventDefault: true,
107
+ shouldIgnoreInputs: !hasModifier
108
+ });
109
+ const showsCaps = hasHotKeys && value === "" && !isFocused;
110
+ const hasTrailing = trailing !== void 0 && trailing !== null && trailing !== false;
111
+ const trailingNode = isLoading || showsCaps || hasTrailing ? /* @__PURE__ */ jsxs(Flex, {
112
+ as: "span",
113
+ alignItems: AlignItems.CENTER,
114
+ gap: INPUT_SIZE_TO_GAP_MAP[size],
115
+ children: [
116
+ isLoading && /* @__PURE__ */ jsx(Spinner, {
117
+ size: INPUT_SIZE_TO_SPINNER_SIZE_MAP[size],
118
+ ariaLabel: "Searching"
119
+ }),
120
+ showsCaps && /* @__PURE__ */ jsx(Kbd, {
121
+ hotKeys,
122
+ size: INPUT_SIZE_TO_KBD_SIZE_MAP[size],
123
+ isDisabled,
124
+ "aria-hidden": true
125
+ }),
126
+ hasTrailing && trailing
127
+ ]
128
+ }) : void 0;
129
+ const resolvedAriaLabel = ariaLabel ?? (!(label !== void 0 && label !== "") && field === null ? "Search" : void 0);
130
+ return /* @__PURE__ */ jsx(Input, {
131
+ ref: mergedRef,
132
+ ...rest,
133
+ ...label === void 0 ? {} : { label },
134
+ ...resolvedAriaLabel === void 0 ? {} : { ariaLabel: resolvedAriaLabel },
135
+ ...isLoading ? { "aria-busy": true } : {},
136
+ size,
137
+ isDisabled,
138
+ isReadOnly,
139
+ type: "search",
140
+ inputMode: "search",
141
+ enterKeyHint: "search",
142
+ icon: MagnifyingGlassIcon,
143
+ isClearable: true,
144
+ placeholder,
145
+ value,
146
+ onChange: handleChange,
147
+ onEnter: search,
148
+ onFocus: handleFocus,
149
+ onBlur: handleBlur,
150
+ onKeyDown: handleKeyDown,
151
+ trailing: trailingNode
152
+ });
153
+ });
154
+ SearchInput.displayName = "SearchInput";
155
+ //#endregion
156
+ export { SearchInput as default };