@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,31 +1,129 @@
1
- import { InputSize, InputVariant } from "./Input";
2
- export interface ToggleInputProps {
1
+ import type { Icon as PhosphorIcon } from "@phosphor-icons/react";
2
+ import { type AriaAttributes, type CSSProperties, type ReactElement, type ReactNode, type RefAttributes } from "react";
3
+ /** Canonical rungs; ToggleInput supports all five. */
4
+ export declare enum ToggleInputSize {
5
+ /** 20px track, 16px segments, caption text, 12px icons. */
6
+ X_SMALL = "X_SMALL",
7
+ /** 24px track, 20px segments, body_sm text, 12px icons. */
8
+ SMALL = "SMALL",
9
+ /** 32px track, 28px segments, body_md text, 14px icons. The default (1.x MEDIUM was 28px). */
10
+ MEDIUM = "MEDIUM",
11
+ /** 36px track, 32px segments, body_lg text, 14px icons. */
12
+ LARGE = "LARGE",
13
+ /** 40px track, 36px segments, body_lg text, 16px icons. */
14
+ X_LARGE = "X_LARGE"
15
+ }
16
+ /** Track fill (Constitution V-A surface set; the 1.x InputVariant members, unchanged). */
17
+ export declare enum ToggleInputVariant {
18
+ /** `background.base`. */
19
+ BASE = "BASE",
20
+ /** `background.primary`. */
21
+ PRIMARY = "PRIMARY",
22
+ /** `background.secondary`. The default. */
23
+ SECONDARY = "SECONDARY",
24
+ /** `background.tertiary`. */
25
+ TERTIARY = "TERTIARY"
26
+ }
27
+ /** One segment. Give it a `label`, or an `icon` with an `ariaLabel` for an icon-only segment. */
28
+ export type ToggleOption<TId extends string = string> = {
29
+ /** Identifies the option; `value` and `onChange` use it. Unique within `options`. */
30
+ id: TId;
31
+ /** Phosphor icon component (`TableIcon`, not `<TableIcon />`), before the label. */
32
+ icon?: PhosphorIcon;
33
+ /** Hint shown in a `Tooltip` on hover and focus. An icon-only segment shows its `ariaLabel` when this is unset; pass `""` for none. */
34
+ tooltip?: ReactNode;
35
+ /** This option cannot be chosen; arrows skip it. Pair it with `tooltip` to say why. */
36
+ isDisabled?: boolean;
37
+ } & ({
38
+ /** Visible text. */
39
+ label: string;
40
+ /** Name override; must start with `label` (WCAG 2.5.3). */
41
+ ariaLabel?: string;
42
+ } | {
43
+ /** No visible text: an icon-only segment. */
44
+ label?: undefined;
45
+ /** Phosphor icon component; required when there is no `label`. */
46
+ icon: PhosphorIcon;
47
+ /** Accessible name of the icon-only segment. */
48
+ ariaLabel: string;
49
+ });
50
+ export interface ToggleInputProps<TId extends string = string> extends AriaAttributes {
51
+ /** The segments, left to right. Two to five short options. */
52
+ options: ToggleOption<TId>[];
53
+ /** Controlled selection: the chosen option's `id`, or `null` for none. Pass it with `onChange`. An id that matches no option also selects nothing. */
54
+ value?: TId | null;
3
55
  /**
4
- * Off-state track color. The on-state track is a state color and stays
5
- * `icon.primary`. @default InputVariant.PRIMARY
56
+ * Initial selection while uncontrolled; `null` starts with nothing selected.
57
+ * @default the first enabled option's id
6
58
  */
7
- variant?: InputVariant;
8
- /** Track size — a hit target, so it runs 28×16 / 32×18 / 36×20px.
9
- * @default InputSize.MEDIUM */
10
- size?: InputSize;
11
- /** Label rendered above the switch, like the other inputs. */
59
+ defaultValue?: TId | null;
60
+ /** Called with the chosen option's `id` when the user picks a different segment (click, arrows, Home/End). Not called for the segment already selected. */
61
+ onChange?: (value: TId) => void;
62
+ /**
63
+ * Control rung: 20 / 24 / 32 / 36 / 40px tall.
64
+ * @default ToggleInputSize.MEDIUM
65
+ */
66
+ size?: ToggleInputSize;
67
+ /**
68
+ * Track fill, from the surface set. Ignored with `isGhost`.
69
+ * @default ToggleInputVariant.SECONDARY
70
+ */
71
+ variant?: ToggleInputVariant;
72
+ /**
73
+ * Ghost track: no fill and no hairline (1.x `TRANSPARENT`); the selected fill and the segment hover
74
+ * fills still show. For a toggle set into a toolbar. An error still draws the red hairline.
75
+ * @default false
76
+ */
77
+ isGhost?: boolean;
78
+ /** Label above the control, rendered through `Field`. For a description or a horizontal layout, wrap the control in `Field` instead. */
12
79
  label?: string;
13
- /** Adds an info icon beside the label with this content on hover. */
14
- labelTooltip?: string | React.ReactNode;
15
- /** Controlled state. The switch holds none of its own. */
16
- value: boolean;
17
- onChange: (value: boolean) => void;
80
+ /** Message from the app, shown under the control through `Field`. It also turns the track border red and sets `aria-invalid`. */
81
+ error?: string;
82
+ /**
83
+ * Error border and `aria-invalid` without a message. `error` implies it.
84
+ * @default false
85
+ */
86
+ isError?: boolean;
87
+ /**
88
+ * The whole control is disabled: no segment is focusable or selectable. Disable one option with `option.isDisabled`.
89
+ * @default false
90
+ */
18
91
  isDisabled?: boolean;
19
- /** A number is px. Ignored when `fillWidth` is set. */
20
- width?: number | string;
21
- /** Stretch to the parent's width, pushing the switch to the right edge. */
92
+ /**
93
+ * Focusable and announced, but the selection cannot change. No hover change.
94
+ * @default false
95
+ */
96
+ isReadOnly?: boolean;
97
+ /**
98
+ * Required marker on the `label` (via `Field`) and `aria-required`. It does no validation.
99
+ * @default false
100
+ */
101
+ isRequired?: boolean;
102
+ /**
103
+ * Stretch to the parent's width and give every segment an equal share. Long labels truncate.
104
+ * @default false
105
+ */
22
106
  fillWidth?: boolean;
107
+ /** Accessible name of the group when there is no visible label (no `label` and no labelled wrapping `Field`). */
108
+ ariaLabel?: string;
109
+ /**
110
+ * DOM id of the radiogroup element. A wrapping `Field`'s id wins.
111
+ * @default useId()
112
+ */
113
+ id?: string;
114
+ /** Any `data-*` attribute, forwarded to the radiogroup element. */
115
+ [dataAttribute: `data-${string}`]: string | number | boolean | undefined;
116
+ /** Extra class on the root: the `Field` wrapper when ToggleInput renders one, otherwise the track. */
117
+ className?: string;
118
+ /** Inline style on the root; only for setting CSS custom properties. */
119
+ style?: CSSProperties;
23
120
  }
24
121
  /**
25
- * An on/off switch. Fully controlled — you own `value`.
26
- *
27
- * Use it for settings that apply immediately. For something that only takes
28
- * effect on submit, a `CheckboxInput` reads more honestly.
122
+ * The public, generic call signature (`TId` inferred from `options`). Never called: it only types
123
+ * the default export. An arrow function rather than a type literal, so react-docgen-typescript
124
+ * reads the props for the Docs tab.
29
125
  */
30
- declare const ToggleInput: ({ variant, size, label, labelTooltip, value, onChange, isDisabled, width, fillWidth, }: ToggleInputProps) => import("react").JSX.Element;
126
+ declare const TOGGLE_INPUT_SIGNATURE: <TId extends string = string>(_props: ToggleInputProps<TId> & RefAttributes<HTMLDivElement>) => ReactElement | null;
127
+ /** A segmented control; the value is the chosen option's id. */
128
+ declare const ToggleInput: typeof TOGGLE_INPUT_SIGNATURE;
31
129
  export default ToggleInput;
@@ -1,128 +1,274 @@
1
- import { withTheme } from "../theme/GalaxyTheme.js";
2
- import FlexWrapper, { AlignItems, JustifyContent } from "../containers/FlexWrapper.js";
3
- import { InputLabel, InputSize, InputVariant, getInputSurfaceColor } from "./Input.js";
1
+ import Text, { TextSize, TextVariant, TextWeight } from "../text/Text.js";
2
+ import { useControlledState } from "../hooks/useControlledState.js";
3
+ import Tooltip from "../tooltip/Tooltip.js";
4
+ import Icon, { IconVariant } from "../icons/Icon.js";
5
+ import { useDevWarning } from "./internal/devWarn.js";
6
+ import { useFieldWiring } from "./internal/fieldWiring.js";
7
+ import Field, { FieldSize } from "./Field.js";
8
+ import { useOwnField } from "./internal/ownField.js";
4
9
  /* empty css */
5
10
  import { styled } from "@linaria/react";
6
- import { match } from "ts-pattern";
7
- import { useCallback } from "react";
11
+ import { forwardRef, useCallback, useRef } from "react";
8
12
  import { jsx, jsxs } from "react/jsx-runtime";
13
+ import { cx } from "@linaria/core";
9
14
  //#region src/inputs/ToggleInput.tsx
10
- function getToggleTrackWidth(size) {
11
- return match(size).returnType().with(InputSize.SMALL, () => 28).with(InputSize.MEDIUM, () => 32).with(InputSize.LARGE, () => 36).exhaustive();
12
- }
13
- function getToggleTrackHeight(size) {
14
- return match(size).returnType().with(InputSize.SMALL, () => 16).with(InputSize.MEDIUM, () => 18).with(InputSize.LARGE, () => 20).exhaustive();
15
- }
16
- /** The thumb fills the track minus its border and inset on each side — 12 / 14 / 16px. */
17
- function getToggleThumbSize(size) {
18
- return getToggleTrackHeight(size) - 4;
19
- }
20
- var _exp = () => ({ $isDisabled }) => $isDisabled ? "not-allowed" : "pointer";
21
- var _exp2 = () => ({ $isDisabled }) => $isDisabled ? .5 : 1;
22
- var ToggleWrapper = withTheme(/*#__PURE__*/ styled("div")({
23
- name: "ToggleWrapper",
24
- class: "t1t8zlu",
25
- propsAsIs: false,
26
- vars: {
27
- "t1t8zlu-0": [_exp()],
28
- "t1t8zlu-1": [_exp2()]
29
- }
30
- }));
31
- var _exp3 = () => ({ $size }) => `${getToggleTrackWidth($size)}px`;
32
- var _exp4 = () => ({ $size }) => `${getToggleTrackHeight($size)}px`;
33
- var _exp6 = () => ({ theme, $variant, $isChecked }) => $isChecked ? theme.color.icon.primary : getInputSurfaceColor(theme, $variant);
34
- var _exp8 = () => ({ theme }) => theme.color.border.primary;
35
- var ToggleTrack = withTheme(/*#__PURE__*/ styled("div")({
36
- name: "ToggleTrack",
37
- class: "t1br7yd",
38
- propsAsIs: false,
39
- vars: {
40
- "t1br7yd-0": [_exp3()],
41
- "t1br7yd-1": [_exp4()],
42
- "t1br7yd-2": [_exp6()],
43
- "t1br7yd-3": [_exp8()]
44
- }
45
- }));
46
- var _exp9 = () => ({ $size, $isChecked }) => $isChecked ? `calc(100% - ${getToggleThumbSize($size)}px - 1.5px)` : `1.5px`;
47
- var _exp1 = () => ({ $size }) => `${getToggleThumbSize($size)}px`;
48
- var _exp10 = () => ({ theme, $isChecked }) => $isChecked ? theme.color.background.primary : theme.color.background.primaryAlt;
49
- var _exp11 = () => ({ theme }) => theme.color.border.primary;
50
- var ToggleThumb = withTheme(/*#__PURE__*/ styled("div")({
51
- name: "ToggleThumb",
52
- class: "t1xwadc7",
53
- propsAsIs: false,
54
- vars: {
55
- "t1xwadc7-0": [_exp9()],
56
- "t1xwadc7-1": [_exp1()],
57
- "t1xwadc7-2": [_exp10()],
58
- "t1xwadc7-3": [_exp11()]
59
- }
60
- }));
61
- var HiddenInput = /*#__PURE__*/ styled("input")({
62
- name: "HiddenInput",
63
- class: "h1smouvb",
64
- propsAsIs: false
65
- });
66
15
  /**
67
- * An on/off switch. Fully controlled — you own `value`.
16
+ * The segmented control: one choice among two to five short, mutually exclusive options shown
17
+ * side by side (Table / Graph / JSON, Compact / Comfortable). It holds the chosen option's `id`
18
+ * with `value` / `defaultValue` / `onChange(id)`, draws the options as segments in one track with
19
+ * the selected one filled `background.tertiary` (a quick color fade, no slide), and supports text, icon +
20
+ * text and icon-only segments (each icon-only segment shows its `ariaLabel` as a tooltip). To
21
+ * assistive tech and the keyboard it is a radio group: one tab stop, arrows and Home / End move
22
+ * the selection. It renders its own `label` and `error` through `Field`.
68
23
  *
69
- * Use it for settings that apply immediately. For something that only takes
70
- * effect on submit, a `CheckboxInput` reads more honestly.
24
+ * Not an on/off setting (`SwitchInput`), not actions (`ButtonGroup`), not a long or dynamic list
25
+ * (`SelectInput`), not a tabbed panel set (`Tabs`). Renamed from 1.x `SwitcherInput`
26
+ * (Constitution XII.4): `items` → `options`, `selectedId` → `value`, per-item `onClick` → one
27
+ * `onChange(id)`, `InputSize` / `InputVariant` → `ToggleInputSize` / `ToggleInputVariant`.
71
28
  */
72
- var ToggleInput = ({ variant = InputVariant.PRIMARY, size = InputSize.MEDIUM, label, labelTooltip, value, onChange, isDisabled = false, width, fillWidth }) => {
73
- const handleClick = useCallback(() => {
74
- if (!isDisabled) onChange(!value);
75
- }, [
76
- isDisabled,
29
+ /** Canonical rungs; ToggleInput supports all five. */
30
+ var ToggleInputSize = /* @__PURE__ */ function(ToggleInputSize) {
31
+ /** 20px track, 16px segments, caption text, 12px icons. */
32
+ ToggleInputSize["X_SMALL"] = "X_SMALL";
33
+ /** 24px track, 20px segments, body_sm text, 12px icons. */
34
+ ToggleInputSize["SMALL"] = "SMALL";
35
+ /** 32px track, 28px segments, body_md text, 14px icons. The default (1.x MEDIUM was 28px). */
36
+ ToggleInputSize["MEDIUM"] = "MEDIUM";
37
+ /** 36px track, 32px segments, body_lg text, 14px icons. */
38
+ ToggleInputSize["LARGE"] = "LARGE";
39
+ /** 40px track, 36px segments, body_lg text, 16px icons. */
40
+ ToggleInputSize["X_LARGE"] = "X_LARGE";
41
+ return ToggleInputSize;
42
+ }({});
43
+ /** Track fill (Constitution V-A surface set; the 1.x InputVariant members, unchanged). */
44
+ var ToggleInputVariant = /* @__PURE__ */ function(ToggleInputVariant) {
45
+ /** `background.base`. */
46
+ ToggleInputVariant["BASE"] = "BASE";
47
+ /** `background.primary`. */
48
+ ToggleInputVariant["PRIMARY"] = "PRIMARY";
49
+ /** `background.secondary`. The default. */
50
+ ToggleInputVariant["SECONDARY"] = "SECONDARY";
51
+ /** `background.tertiary`. */
52
+ ToggleInputVariant["TERTIARY"] = "TERTIARY";
53
+ return ToggleInputVariant;
54
+ }({});
55
+ /** The radiogroup. With the 0.5px border and 1.5px padding, segments start 2px inside the outer edge. */
56
+ var Track = /*#__PURE__*/ styled("div")({
57
+ name: "Track",
58
+ class: "gx-ToggleInput-Track-t1t8zlu",
59
+ propsAsIs: false
60
+ });
61
+ /** One option: a `button role="radio"`, content width (or an equal share under `fillWidth`). */
62
+ var Segment = /*#__PURE__*/ styled("button")({
63
+ name: "Segment",
64
+ class: "gx-ToggleInput-Segment-s1br7yd",
65
+ propsAsIs: false
66
+ });
67
+ /** Track rest look per surface (Input's rest table, restated). */
68
+ var TOGGLE_INPUT_VARIANT_TO_CSS_MAP = {
69
+ ["BASE"]: "gx-ToggleInput-BASE-b1xwadc7",
70
+ ["PRIMARY"]: "gx-ToggleInput-PRIMARY-p1smouvb",
71
+ ["SECONDARY"]: "gx-ToggleInput-SECONDARY-s169kxy0",
72
+ ["TERTIARY"]: "gx-ToggleInput-TERTIARY-t1cbak55"
73
+ };
74
+ /** `isGhost`: no track fill and no hairline. Declared after the variant map, which it replaces. */
75
+ var GHOST_CSS = "gx-ToggleInput-GHOST_CSS-gl8s2yr";
76
+ /** Height, segment padding and icon-label gap per rung. Padding = the rung's control padding − the 2px track inset. */
77
+ var TOGGLE_INPUT_SIZE_TO_CSS_MAP = {
78
+ ["X_SMALL"]: "gx-ToggleInput-X_SMALL-xgugjmx",
79
+ ["SMALL"]: "gx-ToggleInput-SMALL-szayufa",
80
+ ["MEDIUM"]: "gx-ToggleInput-MEDIUM-m1ky6cjz",
81
+ ["LARGE"]: "gx-ToggleInput-LARGE-l13egyp4",
82
+ ["X_LARGE"]: "gx-ToggleInput-X_LARGE-x1yty5bv"
83
+ };
84
+ /** Red hairline on every variant, from `error`, `isError` or the Field's error. */
85
+ var ERROR_CSS = "gx-ToggleInput-ERROR_CSS-e6je9tz";
86
+ /** Group disabled: the selected segment takes the disabled fill; the track keeps its resting hairline (field-frame note). */
87
+ var DISABLED_CSS = "gx-ToggleInput-DISABLED_CSS-d8pd3s2";
88
+ /** Equal shares: the track fills its parent and every segment (icon-only too) takes `1 1 0`. */
89
+ var FILL_WIDTH_CSS = "gx-ToggleInput-FILL_WIDTH_CSS-fc2kmgg";
90
+ /** The selected segment's text. */
91
+ var SEGMENT_SELECTED_CSS = "gx-ToggleInput-SEGMENT_SELECTED_CSS-s1d7otlt";
92
+ /** The selected segment's fill and hairline; it fades in with the segment's color transition. */
93
+ var SEGMENT_SELECTED_FILL_CSS = "gx-ToggleInput-SEGMENT_SELECTED_FILL_CSS-s1wijxdi";
94
+ /** Hover and press on an unselected, enabled segment of an editable group: the neutral ramp. */
95
+ var SEGMENT_INTERACTIVE_CSS = "gx-ToggleInput-SEGMENT_INTERACTIVE_CSS-s169tnuo";
96
+ /** A disabled option, or every segment of a disabled group. */
97
+ var SEGMENT_DISABLED_CSS = "gx-ToggleInput-SEGMENT_DISABLED_CSS-svloi0q";
98
+ /** A read-only group: no hover, no pointer. */
99
+ var SEGMENT_READ_ONLY_CSS = "gx-ToggleInput-SEGMENT_READ_ONLY_CSS-scgck5z";
100
+ /** No label: a square segment with the icon centered (an equal share under `fillWidth`). */
101
+ var SEGMENT_ICON_ONLY_CSS = "gx-ToggleInput-SEGMENT_ICON_ONLY_CSS-snqdq0p";
102
+ /** The Field ToggleInput renders for its own `label` / `error` uses the same rung. */
103
+ var TOGGLE_INPUT_SIZE_TO_FIELD_SIZE_MAP = {
104
+ ["X_SMALL"]: FieldSize.X_SMALL,
105
+ ["SMALL"]: FieldSize.SMALL,
106
+ ["MEDIUM"]: FieldSize.MEDIUM,
107
+ ["LARGE"]: FieldSize.LARGE,
108
+ ["X_LARGE"]: FieldSize.X_LARGE
109
+ };
110
+ /** Segment label step per rung (the canonical control text). */
111
+ var TOGGLE_INPUT_SIZE_TO_TEXT_SIZE_MAP = {
112
+ ["X_SMALL"]: TextSize.CAPTION,
113
+ ["SMALL"]: TextSize.BODY_SM,
114
+ ["MEDIUM"]: TextSize.BODY_MD,
115
+ ["LARGE"]: TextSize.BODY_LG,
116
+ ["X_LARGE"]: TextSize.BODY_LG
117
+ };
118
+ /** Segment icon px per rung: one step below the rung's III-A.4 icon (Mitch, 2026-10-04). */
119
+ var TOGGLE_INPUT_SIZE_TO_ICON_PX_MAP = {
120
+ ["X_SMALL"]: 12,
121
+ ["SMALL"]: 12,
122
+ ["MEDIUM"]: 14,
123
+ ["LARGE"]: 14,
124
+ ["X_LARGE"]: 16
125
+ };
126
+ /** The radiogroup and its segments, wired to the nearest Field (its own or the app's). */
127
+ function TrackBody({ trackProps, forwardedRef, isRoot }) {
128
+ const { options, value, defaultValue, onChange, size = "MEDIUM", variant = "SECONDARY", isGhost = false, label: _label, error, isError = false, isDisabled = false, isReadOnly = false, isRequired = false, fillWidth = false, ariaLabel, id, "aria-describedby": ariaDescribedBy, className, style, ...rest } = trackProps;
129
+ const { field, controlId: trackId, describedBy, isInvalid, isRequired: isRequiredState, hasName } = useFieldWiring({
130
+ id,
131
+ ariaLabel,
132
+ ariaLabelAttribute: rest["aria-label"],
133
+ ariaLabelledBy: rest["aria-labelledby"],
134
+ ariaDescribedBy,
135
+ error,
136
+ isError,
137
+ isRequired
138
+ });
139
+ const firstEnabledId = options.find((option) => option.isDisabled !== true)?.id ?? null;
140
+ const handleChange = useCallback((next) => {
141
+ if (next !== null) onChange?.(next);
142
+ }, [onChange]);
143
+ const [selected, setSelected] = useControlledState({
77
144
  value,
78
- onChange
79
- ]);
80
- const handleKeyDown = useCallback((e) => {
81
- if (!isDisabled && (e.key === "Enter" || e.key === " ")) {
82
- e.preventDefault();
83
- onChange(!value);
145
+ defaultValue: defaultValue === void 0 ? firstEnabledId : defaultValue,
146
+ onChange: handleChange
147
+ });
148
+ const selectedIndex = options.findIndex((option) => option.id === selected);
149
+ const isOptionEnabled = (index) => !isDisabled && options[index] !== void 0 && options[index].isDisabled !== true;
150
+ const enabledIndexes = options.flatMap((_, index) => isOptionEnabled(index) ? [index] : []);
151
+ const tabStopIndex = selectedIndex >= 0 && isOptionEnabled(selectedIndex) ? selectedIndex : enabledIndexes[0] ?? -1;
152
+ useDevWarning(!hasName, "[@galaxy-io/dls] ToggleInput has no accessible name. Pass `label`, wrap it in a labelled `Field`, or set `ariaLabel`.");
153
+ const segmentRefs = useRef(/* @__PURE__ */ new Map());
154
+ const select = (index) => {
155
+ const option = options[index];
156
+ if (option === void 0 || !isOptionEnabled(index) || isReadOnly) return;
157
+ if (option.id !== selected) setSelected(option.id);
158
+ };
159
+ /** Roving focus: arrows wrap over enabled segments, Home / End jump; the move selects unless read-only. */
160
+ const handleKeyDown = (event, index) => {
161
+ if (enabledIndexes.length === 0) return;
162
+ const position = enabledIndexes.indexOf(index);
163
+ let target;
164
+ switch (event.key) {
165
+ case "ArrowRight":
166
+ case "ArrowDown":
167
+ target = position === -1 ? enabledIndexes.find((candidate) => candidate > index) ?? enabledIndexes[0] : enabledIndexes[(position + 1) % enabledIndexes.length];
168
+ break;
169
+ case "ArrowLeft":
170
+ case "ArrowUp":
171
+ target = position === -1 ? [...enabledIndexes].reverse().find((candidate) => candidate < index) ?? enabledIndexes[enabledIndexes.length - 1] : enabledIndexes[(position - 1 + enabledIndexes.length) % enabledIndexes.length];
172
+ break;
173
+ case "Home":
174
+ target = enabledIndexes[0];
175
+ break;
176
+ case "End":
177
+ target = enabledIndexes[enabledIndexes.length - 1];
178
+ break;
179
+ default: return;
84
180
  }
85
- }, [
86
- isDisabled,
87
- value,
88
- onChange
89
- ]);
90
- return /* @__PURE__ */ jsxs(FlexWrapper, {
91
- width,
92
- fillWidth,
93
- alignItems: AlignItems.CENTER,
94
- justifyContent: fillWidth ? JustifyContent.SPACE_BETWEEN : JustifyContent.START,
95
- gap: fillWidth ? 0 : 6,
96
- children: [label && /* @__PURE__ */ jsx(InputLabel, {
97
- label,
98
- labelTooltip
99
- }), /* @__PURE__ */ jsxs(ToggleWrapper, {
100
- $isDisabled: isDisabled,
101
- onClick: handleClick,
102
- onKeyDown: handleKeyDown,
103
- role: "switch",
104
- "aria-checked": value,
105
- "aria-disabled": isDisabled,
106
- tabIndex: isDisabled ? -1 : 0,
107
- children: [/* @__PURE__ */ jsx(ToggleTrack, {
108
- $variant: variant,
109
- $size: size,
110
- $isChecked: value,
111
- $isDisabled: isDisabled,
112
- children: /* @__PURE__ */ jsx(ToggleThumb, {
113
- $size: size,
114
- $isChecked: value,
115
- $isDisabled: isDisabled
116
- })
117
- }), /* @__PURE__ */ jsx(HiddenInput, {
118
- type: "checkbox",
119
- checked: value,
120
- onChange: () => {},
181
+ event.preventDefault();
182
+ const option = target === void 0 ? void 0 : options[target];
183
+ if (target === void 0 || option === void 0) return;
184
+ segmentRefs.current.get(option.id)?.focus();
185
+ select(target);
186
+ };
187
+ return /* @__PURE__ */ jsx(Track, {
188
+ ref: forwardedRef,
189
+ role: "radiogroup",
190
+ id: trackId,
191
+ "aria-labelledby": field?.labelId,
192
+ "aria-label": ariaLabel,
193
+ "aria-describedby": describedBy,
194
+ "aria-invalid": isInvalid ? true : void 0,
195
+ "aria-required": isRequiredState ? true : void 0,
196
+ "aria-disabled": isDisabled ? true : void 0,
197
+ "aria-readonly": isReadOnly ? true : void 0,
198
+ ...rest,
199
+ className: cx(TOGGLE_INPUT_SIZE_TO_CSS_MAP[size], isGhost ? GHOST_CSS : TOGGLE_INPUT_VARIANT_TO_CSS_MAP[variant], isInvalid && ERROR_CSS, isDisabled && DISABLED_CSS, fillWidth && FILL_WIDTH_CSS, isRoot && className),
200
+ style: isRoot ? style : void 0,
201
+ children: options.map((option, index) => {
202
+ const isSelected = index === selectedIndex;
203
+ const isEnabled = isOptionEnabled(index);
204
+ const isIconOnly = option.label === void 0;
205
+ const segment = /* @__PURE__ */ jsxs(Segment, {
206
+ ref: (element) => {
207
+ if (element === null) segmentRefs.current.delete(option.id);
208
+ else segmentRefs.current.set(option.id, element);
209
+ },
210
+ type: "button",
211
+ role: "radio",
212
+ "aria-checked": isSelected,
213
+ "aria-label": option.ariaLabel,
214
+ "aria-disabled": !isDisabled && option.isDisabled === true ? true : void 0,
121
215
  disabled: isDisabled,
122
- "aria-label": label || "Toggle"
123
- })]
124
- })]
216
+ tabIndex: index === tabStopIndex ? 0 : -1,
217
+ onClick: () => select(index),
218
+ onKeyDown: (event) => handleKeyDown(event, index),
219
+ className: cx(isSelected && SEGMENT_SELECTED_CSS, isSelected && SEGMENT_SELECTED_FILL_CSS, !isSelected && isEnabled && !isReadOnly && SEGMENT_INTERACTIVE_CSS, !isEnabled && SEGMENT_DISABLED_CSS, isEnabled && isReadOnly && SEGMENT_READ_ONLY_CSS, isIconOnly && SEGMENT_ICON_ONLY_CSS),
220
+ children: [option.icon !== void 0 && /* @__PURE__ */ jsx(Icon, {
221
+ component: option.icon,
222
+ size: TOGGLE_INPUT_SIZE_TO_ICON_PX_MAP[size],
223
+ variant: IconVariant.INHERIT
224
+ }), option.label !== void 0 && /* @__PURE__ */ jsx(Text, {
225
+ as: "span",
226
+ size: TOGGLE_INPUT_SIZE_TO_TEXT_SIZE_MAP[size],
227
+ weight: TextWeight.MEDIUM,
228
+ variant: TextVariant.INHERIT,
229
+ lineClamp: 1,
230
+ children: option.label
231
+ })]
232
+ }, option.id);
233
+ if (option.tooltip === void 0 && !isIconOnly) return segment;
234
+ return /* @__PURE__ */ jsx(Tooltip, {
235
+ body: option.tooltip ?? (isIconOnly ? option.ariaLabel : ""),
236
+ children: segment
237
+ }, option.id);
238
+ })
125
239
  });
126
- };
240
+ }
241
+ /** A segmented control; the value is the chosen option's id. */
242
+ var ToggleInputBase = forwardRef(function ToggleInput(props, ref) {
243
+ const { label, error, isRequired = false, size = "MEDIUM", fillWidth = false } = props;
244
+ const { id, className, style } = props;
245
+ const ownField = useOwnField({
246
+ componentName: "ToggleInput",
247
+ label,
248
+ error,
249
+ isRequired,
250
+ size: TOGGLE_INPUT_SIZE_TO_FIELD_SIZE_MAP[size],
251
+ id,
252
+ className,
253
+ style,
254
+ fillWidth
255
+ });
256
+ if (ownField !== null) return /* @__PURE__ */ jsx(Field, {
257
+ ...ownField,
258
+ children: /* @__PURE__ */ jsx(TrackBody, {
259
+ trackProps: props,
260
+ forwardedRef: ref,
261
+ isRoot: false
262
+ })
263
+ });
264
+ return /* @__PURE__ */ jsx(TrackBody, {
265
+ trackProps: props,
266
+ forwardedRef: ref,
267
+ isRoot: true
268
+ });
269
+ });
270
+ ToggleInputBase.displayName = "ToggleInput";
271
+ /** A segmented control; the value is the chosen option's id. */
272
+ var ToggleInput = ToggleInputBase;
127
273
  //#endregion
128
- export { ToggleInput as default };
274
+ export { ToggleInputSize, ToggleInputVariant, ToggleInput as default };
@@ -0,0 +1,18 @@
1
+ /** @internal `true` inside a host that renders its editors bare. */
2
+ export declare const BareFieldContext: import("react").Context<boolean>;
3
+ /** @internal Whether the field renders bare. */
4
+ export declare function useIsBareField(): boolean;
5
+ /**
6
+ * @internal A bare field frame (Input's frame, SelectInput's and DateInput's trigger): no border,
7
+ * fill, focus line or start padding in any state. Tripled class so it beats every state rule of
8
+ * the frame (error, focus, hover, open) whatever their order.
9
+ */
10
+ export declare const BARE_FIELD_CSS: import("@linaria/core").LinariaClassName;
11
+ /**
12
+ * @internal Input's bare frame on top of `BARE_FIELD_CSS`: no end padding either (its clear button
13
+ * and slots are in the flow), and the value takes the host's `text-align`, so a right-aligned
14
+ * number cell edits right-aligned.
15
+ */
16
+ export declare const BARE_INPUT_CSS: import("@linaria/core").LinariaClassName;
17
+ /** @internal A bare switch track: no focus ring (the host's outline shows focus). */
18
+ export declare const BARE_SWITCH_TRACK_CSS: import("@linaria/core").LinariaClassName;
@@ -0,0 +1,38 @@
1
+ /* empty css */
2
+ import { createContext, useContext } from "react";
3
+ //#region src/inputs/internal/bareField.ts
4
+ /**
5
+ * @internal The bare field look, for an editor that replaces a piece of read-only text in place
6
+ * (InfiniteSpreadsheet's cell editor). Under `BareFieldContext` set to `true`, TextInput,
7
+ * NumberInput (through Input), SelectInput, DateInput and SwitchInput draw no frame: no border, no
8
+ * fill, no hover, no focus line or ring, and no start padding, so the value's text sits exactly
9
+ * where the read-only text was and the host's own outline is the only focus cue. The caret, the
10
+ * clear button and the panels are unchanged.
11
+ *
12
+ * Private on purpose (an `internal/` module: built, never a package export): it is a host's
13
+ * decision (the host draws the focus cue and owns the padding), not a look an app picks per field;
14
+ * `isGhost` is the public no-fill field. A field that opens a
15
+ * panel resets the context to `false` inside it, so the panel's own fields keep their frames.
16
+ */
17
+ /** @internal `true` inside a host that renders its editors bare. */
18
+ var BareFieldContext = createContext(false);
19
+ /** @internal Whether the field renders bare. */
20
+ function useIsBareField() {
21
+ return useContext(BareFieldContext);
22
+ }
23
+ /**
24
+ * @internal A bare field frame (Input's frame, SelectInput's and DateInput's trigger): no border,
25
+ * fill, focus line or start padding in any state. Tripled class so it beats every state rule of
26
+ * the frame (error, focus, hover, open) whatever their order.
27
+ */
28
+ var BARE_FIELD_CSS = "gx-bareField-BARE_FIELD_CSS-b1memido";
29
+ /**
30
+ * @internal Input's bare frame on top of `BARE_FIELD_CSS`: no end padding either (its clear button
31
+ * and slots are in the flow), and the value takes the host's `text-align`, so a right-aligned
32
+ * number cell edits right-aligned.
33
+ */
34
+ var BARE_INPUT_CSS = "gx-bareField-BARE_INPUT_CSS-bq8fkxg";
35
+ /** @internal A bare switch track: no focus ring (the host's outline shows focus). */
36
+ var BARE_SWITCH_TRACK_CSS = "gx-bareField-BARE_SWITCH_TRACK_CSS-b1rpy78w";
37
+ //#endregion
38
+ export { BARE_FIELD_CSS, BARE_INPUT_CSS, BARE_SWITCH_TRACK_CSS, BareFieldContext, useIsBareField };
@@ -0,0 +1,7 @@
1
+ /** @internal True outside production builds (read through `process.env.NODE_ENV`). */
2
+ export declare function isDevelopment(): boolean;
3
+ /**
4
+ * @internal Logs `message` with `console.warn` the first time `condition` is true, in development
5
+ * only, at most once per mounted component. Runs after render, like the warnings it replaces.
6
+ */
7
+ export declare function useDevWarning(condition: boolean, message: string): void;
@@ -0,0 +1,30 @@
1
+ import { useEffect, useRef } from "react";
2
+ //#region src/inputs/internal/devWarn.ts
3
+ /**
4
+ * @internal Development-only warnings for the inputs: the environment check and a hook that warns
5
+ * once per mounted component while a condition holds (a control with no accessible name, a `label`
6
+ * ignored inside an app's `Field`). Production builds (`NODE_ENV === "production"`) never warn.
7
+ * Private on purpose (an `internal/` module: built, never a package export).
8
+ */
9
+ /** @internal True outside production builds (read through `process.env.NODE_ENV`). */
10
+ function isDevelopment() {
11
+ try {
12
+ return process.env.NODE_ENV !== "production";
13
+ } catch {
14
+ return false;
15
+ }
16
+ }
17
+ /**
18
+ * @internal Logs `message` with `console.warn` the first time `condition` is true, in development
19
+ * only, at most once per mounted component. Runs after render, like the warnings it replaces.
20
+ */
21
+ function useDevWarning(condition, message) {
22
+ const hasWarnedRef = useRef(false);
23
+ useEffect(() => {
24
+ if (!condition || hasWarnedRef.current || !isDevelopment()) return;
25
+ hasWarnedRef.current = true;
26
+ console.warn(message);
27
+ }, [condition, message]);
28
+ }
29
+ //#endregion
30
+ export { isDevelopment, useDevWarning };