@galaxy-io/dls 1.6.0 → 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 -27
  468. package/dist/inputs/SwitcherInput.js +0 -64
  469. package/dist/inputs/hooks.d.ts +0 -10
  470. package/dist/inputs/hooks.js +0 -22
  471. package/dist/overlay/constants.d.ts +0 -28
  472. package/dist/overlay/constants.js +0 -37
  473. package/dist/resizable/HorizontalResizeHandle.d.ts +0 -17
  474. package/dist/resizable/HorizontalResizeHandle.js +0 -38
  475. package/dist/resizable/VerticalResizeHandle.d.ts +0 -18
  476. package/dist/resizable/VerticalResizeHandle.js +0 -39
  477. package/dist/table/SpreadsheetCell.d.ts +0 -21
  478. package/dist/table/SpreadsheetCell.js +0 -71
  479. package/dist/table/SpreadsheetHeaderCell.d.ts +0 -23
  480. package/dist/table/SpreadsheetHeaderCell.js +0 -91
  481. package/dist/table/SpreadsheetMenuItem.d.ts +0 -14
  482. package/dist/table/SpreadsheetMenuItem.js +0 -33
  483. package/dist/table/SpreadsheetPrimitives.d.ts +0 -172
  484. package/dist/table/SpreadsheetPrimitives.js +0 -105
  485. package/dist/table/SpreadsheetRow.d.ts +0 -33
  486. package/dist/table/SpreadsheetRow.js +0 -73
  487. package/dist/table/SpreadsheetRowActionCell.d.ts +0 -14
  488. package/dist/table/SpreadsheetRowActionCell.js +0 -51
  489. package/dist/table/TableExpandCell.d.ts +0 -11
  490. package/dist/table/TableExpandCell.js +0 -24
  491. package/dist/table/TableExpandedRow.d.ts +0 -16
  492. package/dist/table/TableExpandedRow.js +0 -77
  493. package/dist/table/TableHeaderCellContent.d.ts +0 -30
  494. package/dist/table/TableHeaderCellContent.js +0 -48
  495. package/dist/table/TablePrimitives.d.ts +0 -313
  496. package/dist/table/TablePrimitives.js +0 -302
  497. package/dist/table/TableSelectCell.d.ts +0 -18
  498. package/dist/table/TableSelectCell.js +0 -27
  499. package/dist/table/TableStatusRow.d.ts +0 -18
  500. package/dist/table/TableStatusRow.js +0 -50
  501. package/dist/table/useSpreadsheetEditing.d.ts +0 -13
  502. package/dist/table/useSpreadsheetEditing.js +0 -41
  503. package/dist/table/useTableColumnResize.d.ts +0 -38
  504. package/dist/table/useTableColumnResize.js +0 -155
  505. package/dist/table/useTableRowExpansion.d.ts +0 -24
  506. package/dist/table/useTableRowExpansion.js +0 -62
  507. package/dist/table/utils.d.ts +0 -50
  508. package/dist/table/utils.js +0 -78
  509. package/dist/text/HotKeys.d.ts +0 -30
  510. package/dist/text/HotKeys.js +0 -74
  511. package/dist/text/Paragraph.d.ts +0 -33
  512. package/dist/text/Paragraph.js +0 -83
  513. package/dist/text/TextShimmer.d.ts +0 -14
  514. package/dist/text/TextShimmer.js +0 -34
  515. package/dist/theme/GalaxyTheme.d.ts +0 -67
  516. package/dist/theme/GalaxyTheme.js +0 -119
  517. package/dist/theme/constants.d.ts +0 -8
  518. package/dist/theme/constants.js +0 -38
  519. package/dist/theme/index.d.ts +0 -6
  520. package/dist/theme/index.js +0 -7
  521. package/dist/theme/types.d.ts +0 -195
  522. package/dist/theme/types.js +0 -10
  523. package/dist/theme/typography.d.ts +0 -2
  524. package/dist/theme/typography.js +0 -73
  525. package/dist/theme/variants/dark.d.ts +0 -2
  526. package/dist/theme/variants/dark.js +0 -125
  527. package/dist/theme/variants/light.d.ts +0 -2
  528. package/dist/theme/variants/light.js +0 -125
  529. package/dist/toast/ToastContainer.d.ts +0 -10
  530. package/dist/toast/ToastContainer.js +0 -31
  531. package/dist/toast/ToastWrapper.d.ts +0 -6
  532. package/dist/toast/ToastWrapper.js +0 -27
  533. package/dist/transform/Flash.d.ts +0 -7
  534. package/dist/transform/Flash.js +0 -18
  535. package/dist/transform/Spin.d.ts +0 -14
  536. package/dist/transform/Spin.js +0 -25
  537. package/dist/utils/linaria.d.ts +0 -1
  538. package/dist/utils/linaria.js +0 -8
@@ -0,0 +1,364 @@
1
+ import { useControlledState } from "../hooks/useControlledState.js";
2
+ import { useDevWarning } from "./internal/devWarn.js";
3
+ import { useFieldWiring } from "./internal/fieldWiring.js";
4
+ import Field, { FieldSize } from "./Field.js";
5
+ import { rootStyle, useOwnField } from "./internal/ownField.js";
6
+ /* empty css */
7
+ import { styled } from "@linaria/react";
8
+ import { forwardRef, useEffect, useRef, useState } from "react";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ import { cx } from "@linaria/core";
11
+ //#region src/inputs/PinInput.tsx
12
+ /**
13
+ * The field for a short code typed one character per box: a one-time password, an email
14
+ * confirmation code, a device pairing code. It draws `length` square boxes in the input frame's
15
+ * looks, each a real `<input>` holding one character, and holds the code as one string
16
+ * (`value` / `defaultValue` / `onChange`), calling `onComplete` once every box is filled. Typing
17
+ * advances, Backspace steps back, arrows move, and pasting a whole code fills every box. It accepts
18
+ * digits (`PinInputType.NUMERIC`) or letters and digits (`ALPHANUMERIC`), and can mask characters.
19
+ *
20
+ * PinInput never validates: whether the code is right is the app's `error`. New in 2.0 (rafa's
21
+ * PinInput, EXAMPLES §14).
22
+ */
23
+ /** Canonical rungs; PinInput exposes three (EXAMPLES §14). Boxes are squares of the rung height. */
24
+ var PinInputSize = /* @__PURE__ */ function(PinInputSize) {
25
+ /** 24px boxes, body_md mono characters. */
26
+ PinInputSize["SMALL"] = "SMALL";
27
+ /** 32px boxes, body_lg mono characters. The default. */
28
+ PinInputSize["MEDIUM"] = "MEDIUM";
29
+ /** 36px boxes, heading_sm mono characters. */
30
+ PinInputSize["LARGE"] = "LARGE";
31
+ return PinInputSize;
32
+ }({});
33
+ /** Resting fill of each box (Constitution V-A surface set; the 1.x InputVariant members). */
34
+ var PinInputVariant = /* @__PURE__ */ function(PinInputVariant) {
35
+ /** `background.base` fill. */
36
+ PinInputVariant["BASE"] = "BASE";
37
+ /** `background.primary` fill. The default. */
38
+ PinInputVariant["PRIMARY"] = "PRIMARY";
39
+ /** `background.secondary` fill. */
40
+ PinInputVariant["SECONDARY"] = "SECONDARY";
41
+ /** `background.tertiary` fill. */
42
+ PinInputVariant["TERTIARY"] = "TERTIARY";
43
+ return PinInputVariant;
44
+ }({});
45
+ /** Which characters a box accepts (EXAMPLES §14). */
46
+ var PinInputType = /* @__PURE__ */ function(PinInputType) {
47
+ /** 0–9; the numeric keypad on mobile. The default. */
48
+ PinInputType["NUMERIC"] = "NUMERIC";
49
+ /** A–Z, a–z, 0–9, kept in the case typed; the text keyboard. */
50
+ PinInputType["ALPHANUMERIC"] = "ALPHANUMERIC";
51
+ return PinInputType;
52
+ }({});
53
+ /** The characters each type accepts (one at a time). */
54
+ var PIN_INPUT_TYPE_TO_PATTERN_MAP = {
55
+ ["NUMERIC"]: /[0-9]/,
56
+ ["ALPHANUMERIC"]: /[0-9A-Za-z]/
57
+ };
58
+ /** The mobile keyboard each type asks for. */
59
+ var PIN_INPUT_TYPE_TO_INPUT_MODE_MAP = {
60
+ ["NUMERIC"]: "numeric",
61
+ ["ALPHANUMERIC"]: "text"
62
+ };
63
+ /** Keeps only the characters `type` accepts. */
64
+ function accept(text, type) {
65
+ const pattern = PIN_INPUT_TYPE_TO_PATTERN_MAP[type];
66
+ return [...text].filter((character) => pattern.test(character)).join("");
67
+ }
68
+ /** The announcement when the last box is filled. */
69
+ var PIN_INPUT_COMPLETE_MESSAGE = "Code complete";
70
+ /** The row of boxes. */
71
+ var Group = /*#__PURE__*/ styled("div")({
72
+ name: "Group",
73
+ class: "gx-PinInput-Group-gi2xfa2",
74
+ propsAsIs: false
75
+ });
76
+ /**
77
+ * One box: a real `<input>` holding one character, framed like an input. Focus, from the mouse or
78
+ * the keyboard, is `FIELD_FOCUS` (`border.focused` at 1px inside the box); `:focus:hover` beats the hover map.
79
+ */
80
+ var Cell = /*#__PURE__*/ styled("input")({
81
+ name: "Cell",
82
+ class: "gx-PinInput-Cell-cf4a6mm",
83
+ propsAsIs: false
84
+ });
85
+ /** The polite "Code complete" announcement. */
86
+ var StatusRegion = /*#__PURE__*/ styled("span")({
87
+ name: "StatusRegion",
88
+ class: "gx-PinInput-StatusRegion-s6vpedl",
89
+ propsAsIs: false
90
+ });
91
+ /** Gap between boxes per rung. */
92
+ var PIN_INPUT_SIZE_TO_GROUP_CSS_MAP = {
93
+ ["SMALL"]: "gx-PinInput-SMALL-s12gcqos",
94
+ ["MEDIUM"]: "gx-PinInput-MEDIUM-m10mcjx2",
95
+ ["LARGE"]: "gx-PinInput-LARGE-lwr89f6"
96
+ };
97
+ /**
98
+ * The square and the character step: one text step above the rung's control text. Box and line
99
+ * heights are even, so the character centers on whole pixels (4 / 6 / 8px).
100
+ */
101
+ var PIN_INPUT_SIZE_TO_BOX_CSS_MAP = {
102
+ ["SMALL"]: "gx-PinInput-SMALL-s1smtwrw",
103
+ ["MEDIUM"]: "gx-PinInput-MEDIUM-m1a6i3g5",
104
+ ["LARGE"]: "gx-PinInput-LARGE-lu3w498"
105
+ };
106
+ /** Rest look per variant: fill and hairline color. */
107
+ var PIN_INPUT_VARIANT_TO_CSS_MAP = {
108
+ ["BASE"]: "gx-PinInput-BASE-b1fhhvbm",
109
+ ["PRIMARY"]: "gx-PinInput-PRIMARY-p1lu8dei",
110
+ ["SECONDARY"]: "gx-PinInput-SECONDARY-sn0bkgy",
111
+ ["TERTIARY"]: "gx-PinInput-TERTIARY-t1dzrhdt"
112
+ };
113
+ /** `isGhost`: no fill and no hairline on a box at rest. Declared after the variant map, which it replaces. */
114
+ var GHOST_CSS = "gx-PinInput-GHOST_CSS-gcykbcf";
115
+ /**
116
+ * Hover on an editable box: `border.hovered` (stronger than `border.primary` in both themes,
117
+ * Constitution III.6).
118
+ */
119
+ var PIN_INPUT_VARIANT_TO_HOVER_CSS_MAP = {
120
+ ["BASE"]: "gx-PinInput-BASE-bwn9jv8",
121
+ ["PRIMARY"]: "gx-PinInput-PRIMARY-p1au6atb",
122
+ ["SECONDARY"]: "gx-PinInput-SECONDARY-s1vuavqe",
123
+ ["TERTIARY"]: "gx-PinInput-TERTIARY-tlommsh"
124
+ };
125
+ /** Hover on an editable ghost box: the frame appears, `border.hovered` with no fill. */
126
+ var GHOST_HOVER_CSS = "gx-PinInput-GHOST_HOVER_CSS-g1cfyci9";
127
+ /** The `Field` a PinInput renders for its own `label` / `error` uses the same rung. */
128
+ var PIN_INPUT_SIZE_TO_FIELD_SIZE_MAP = {
129
+ ["SMALL"]: FieldSize.SMALL,
130
+ ["MEDIUM"]: FieldSize.MEDIUM,
131
+ ["LARGE"]: FieldSize.LARGE
132
+ };
133
+ /** Error border on every box, at rest, on hover and with focus (the 1px inset focus line is red too). */
134
+ var ERROR_CSS = "gx-PinInput-ERROR_CSS-emv6pcb";
135
+ /**
136
+ * Disabled: the variant's resting fill and hairline are kept (`border.disabled` is not used on
137
+ * frames); the box reads as disabled through `text.disabled` and the cursor.
138
+ */
139
+ var DISABLED_CSS = "gx-PinInput-DISABLED_CSS-dz9kczs";
140
+ /** The boxes, wired to the nearest Field (the PinInput's own or the app's). */
141
+ function PinGroup({ pinProps, forwardedRef, isRoot }) {
142
+ const { length: lengthProp = 6, value, defaultValue = "", onChange, onComplete, type = "NUMERIC", isMasked = false, size = "MEDIUM", variant = "PRIMARY", isGhost = false, label: _label, error, isError = false, isDisabled = false, isReadOnly = false, isRequired = false, ariaLabel, autoFocus = false, id, "aria-describedby": ariaDescribedBy, className, style, ...rest } = pinProps;
143
+ const length = Math.max(1, Math.floor(Number.isFinite(lengthProp) ? lengthProp : 1));
144
+ const { field, controlId, describedBy, isInvalid, isRequired: isRequiredState, hasName } = useFieldWiring({
145
+ id,
146
+ ariaLabel,
147
+ ariaLabelAttribute: rest["aria-label"],
148
+ ariaLabelledBy: rest["aria-labelledby"],
149
+ ariaDescribedBy,
150
+ error,
151
+ isError,
152
+ isRequired
153
+ });
154
+ const boxId = (index) => index === 0 ? controlId : `${controlId}-${index}`;
155
+ const [rawValue, setValue] = useControlledState({
156
+ value,
157
+ defaultValue,
158
+ onChange
159
+ });
160
+ const code = rawValue.slice(0, length);
161
+ const codeRef = useRef(code);
162
+ codeRef.current = code;
163
+ const inputRefs = useRef([]);
164
+ const [announcement, setAnnouncement] = useState("");
165
+ const [composing, setComposing] = useState(null);
166
+ const isEditable = !isDisabled && !isReadOnly;
167
+ /** The last box the user may focus: the first empty one, or the last box when full. */
168
+ const lastFillable = () => Math.min(codeRef.current.length, length - 1);
169
+ /**
170
+ * Where an edit from box `index` applies: never past the end of the code, so a box left focused
171
+ * after the code shrank (an app reset) writes and deletes at the end of the code.
172
+ */
173
+ const fillablePosition = (index) => Math.min(index, codeRef.current.length);
174
+ const focusBox = (index) => {
175
+ const input = inputRefs.current[index];
176
+ if (input === null || input === void 0) return;
177
+ input.focus();
178
+ input.select();
179
+ };
180
+ /** Writes a new code, calls `onChange`, then `onComplete` when this edit completed it. */
181
+ const update = (next) => {
182
+ const previous = codeRef.current;
183
+ if (next === previous) return;
184
+ codeRef.current = next;
185
+ setValue(next);
186
+ if (previous.length < length && next.length === length) {
187
+ onComplete?.(next);
188
+ setAnnouncement(PIN_INPUT_COMPLETE_MESSAGE);
189
+ } else setAnnouncement("");
190
+ };
191
+ /** The accepted characters of `text` overwrite the code from box `index`; focus follows them. */
192
+ const write = (index, text) => {
193
+ if (!isEditable) return;
194
+ const accepted = accept(text, type);
195
+ if (accepted === "") return;
196
+ const current = codeRef.current;
197
+ const start = fillablePosition(index);
198
+ update((current.slice(0, start) + accepted + current.slice(start + accepted.length)).slice(0, length));
199
+ focusBox(Math.min(start + accepted.length, length - 1));
200
+ };
201
+ const handleChange = (index) => (event) => {
202
+ if (event.nativeEvent.isComposing) {
203
+ setComposing({
204
+ index,
205
+ text: event.target.value
206
+ });
207
+ return;
208
+ }
209
+ write(index, event.target.value);
210
+ };
211
+ const handleCompositionEnd = (index) => (event) => {
212
+ setComposing(null);
213
+ write(index, event.currentTarget.value);
214
+ };
215
+ const handleKeyDown = (index) => (event) => {
216
+ if (event.nativeEvent.isComposing) return;
217
+ const current = codeRef.current;
218
+ const position = fillablePosition(index);
219
+ switch (event.key) {
220
+ case "Backspace":
221
+ event.preventDefault();
222
+ if (!isEditable) return;
223
+ if (position < current.length) {
224
+ update(current.slice(0, position) + current.slice(position + 1));
225
+ focusBox(position);
226
+ } else if (position > 0) {
227
+ update(current.slice(0, position - 1) + current.slice(position));
228
+ focusBox(position - 1);
229
+ }
230
+ return;
231
+ case "Delete":
232
+ event.preventDefault();
233
+ if (!isEditable || position >= current.length) return;
234
+ update(current.slice(0, position) + current.slice(position + 1));
235
+ focusBox(position);
236
+ return;
237
+ case "ArrowLeft":
238
+ event.preventDefault();
239
+ focusBox(Math.max(0, index - 1));
240
+ return;
241
+ case "ArrowRight":
242
+ event.preventDefault();
243
+ focusBox(Math.min(index + 1, lastFillable()));
244
+ return;
245
+ case "Home":
246
+ event.preventDefault();
247
+ focusBox(0);
248
+ return;
249
+ case "End":
250
+ event.preventDefault();
251
+ focusBox(lastFillable());
252
+ return;
253
+ default: return;
254
+ }
255
+ };
256
+ const handlePaste = (index) => (event) => {
257
+ event.preventDefault();
258
+ if (!isEditable) return;
259
+ const pasted = accept(event.clipboardData.getData("text"), type);
260
+ if (pasted === "") return;
261
+ const start = fillablePosition(index);
262
+ update((codeRef.current.slice(0, start) + pasted).slice(0, length));
263
+ focusBox(Math.min(start + pasted.length, length - 1));
264
+ };
265
+ /** Focus lands on a fillable box; every focus selects the box's character. */
266
+ const handleFocus = (index) => (event) => {
267
+ const target = lastFillable();
268
+ if (index > target) {
269
+ focusBox(target);
270
+ return;
271
+ }
272
+ event.currentTarget.select();
273
+ };
274
+ /** A press focuses the box itself (and selects it), so the caret never lands beside a character. */
275
+ const handleMouseDown = (index) => (event) => {
276
+ if (isDisabled || event.button !== 0) return;
277
+ event.preventDefault();
278
+ focusBox(Math.min(index, lastFillable()));
279
+ };
280
+ useEffect(() => {
281
+ const active = inputRefs.current.find((input) => input !== null && input.ownerDocument.activeElement === input);
282
+ if (active === void 0 || active === null) return;
283
+ if (inputRefs.current.indexOf(active) > lastFillable()) focusBox(lastFillable());
284
+ });
285
+ const hasAutoFocusedRef = useRef(false);
286
+ useEffect(() => {
287
+ if (!autoFocus || isDisabled || hasAutoFocusedRef.current) return;
288
+ hasAutoFocusedRef.current = true;
289
+ focusBox(Math.min(codeRef.current.length, length - 1));
290
+ });
291
+ useDevWarning(!hasName, "[@galaxy-io/dls] PinInput has no accessible name. Pass `label`, wrap it in a labelled `Field`, or set `ariaLabel`.");
292
+ const boxes = Array.from({ length }, (_, index) => index);
293
+ return /* @__PURE__ */ jsxs(Group, {
294
+ ref: forwardedRef,
295
+ role: "group",
296
+ "aria-labelledby": field?.labelId,
297
+ "aria-label": ariaLabel,
298
+ ...rest,
299
+ className: cx(PIN_INPUT_SIZE_TO_GROUP_CSS_MAP[size], isRoot ? className : void 0),
300
+ ...rootStyle(isRoot, style),
301
+ children: [boxes.map((index) => /* @__PURE__ */ jsx(Cell, {
302
+ ref: (element) => {
303
+ inputRefs.current[index] = element;
304
+ },
305
+ id: boxId(index),
306
+ type: isMasked ? "password" : "text",
307
+ inputMode: PIN_INPUT_TYPE_TO_INPUT_MODE_MAP[type],
308
+ autoComplete: index === 0 ? "one-time-code" : "off",
309
+ autoCapitalize: "off",
310
+ autoCorrect: "off",
311
+ spellCheck: false,
312
+ value: composing?.index === index ? composing.text : code[index] ?? "",
313
+ disabled: isDisabled,
314
+ readOnly: isReadOnly,
315
+ tabIndex: index <= Math.min(code.length, length - 1) ? 0 : -1,
316
+ "aria-label": `Character ${index + 1} of ${length}`,
317
+ "aria-describedby": describedBy,
318
+ "aria-invalid": isInvalid ? true : void 0,
319
+ "aria-required": isRequiredState ? true : void 0,
320
+ onChange: handleChange(index),
321
+ onCompositionEnd: handleCompositionEnd(index),
322
+ onKeyDown: handleKeyDown(index),
323
+ onPaste: handlePaste(index),
324
+ onFocus: handleFocus(index),
325
+ onMouseDown: handleMouseDown(index),
326
+ className: cx(PIN_INPUT_SIZE_TO_BOX_CSS_MAP[size], isGhost ? GHOST_CSS : PIN_INPUT_VARIANT_TO_CSS_MAP[variant], isEditable && !isInvalid && (isGhost ? GHOST_HOVER_CSS : PIN_INPUT_VARIANT_TO_HOVER_CSS_MAP[variant]), isInvalid && !isDisabled && ERROR_CSS, isDisabled && DISABLED_CSS)
327
+ }, index)), /* @__PURE__ */ jsx(StatusRegion, {
328
+ role: "status",
329
+ "aria-live": "polite",
330
+ children: announcement
331
+ })]
332
+ });
333
+ }
334
+ /** One box per character, for OTP and confirmation codes. */
335
+ var PinInput = forwardRef(function PinInput(props, ref) {
336
+ const { label, error, isRequired = false, size = "MEDIUM" } = props;
337
+ const { id, className, style } = props;
338
+ const ownField = useOwnField({
339
+ componentName: "PinInput",
340
+ label,
341
+ error,
342
+ isRequired,
343
+ size: PIN_INPUT_SIZE_TO_FIELD_SIZE_MAP[size],
344
+ id,
345
+ className,
346
+ style
347
+ });
348
+ if (ownField !== null) return /* @__PURE__ */ jsx(Field, {
349
+ ...ownField,
350
+ children: /* @__PURE__ */ jsx(PinGroup, {
351
+ pinProps: props,
352
+ forwardedRef: ref,
353
+ isRoot: false
354
+ })
355
+ });
356
+ return /* @__PURE__ */ jsx(PinGroup, {
357
+ pinProps: props,
358
+ forwardedRef: ref,
359
+ isRoot: true
360
+ });
361
+ });
362
+ PinInput.displayName = "PinInput";
363
+ //#endregion
364
+ export { PinInputSize, PinInputType, PinInputVariant, PinInput as default };
@@ -0,0 +1,115 @@
1
+ import { type AriaAttributes, type CSSProperties, type ReactElement, type ReactNode, type RefAttributes } from "react";
2
+ import { Orientation } from "../theme/enums.js";
3
+ /** Rung of the group's radios (Constitution III-A.4). Mapped to RadioInputSize and FieldSize one to one. */
4
+ export declare enum RadioGroupSize {
5
+ /** 12px circles, caption labels. */
6
+ X_SMALL = "X_SMALL",
7
+ /** 14px circles, body_sm labels. */
8
+ SMALL = "SMALL",
9
+ /** 16px circles, body_md labels. The default. */
10
+ MEDIUM = "MEDIUM",
11
+ /** 16px circles, body_lg labels. */
12
+ LARGE = "LARGE",
13
+ /** 18px circles, body_lg labels. */
14
+ X_LARGE = "X_LARGE"
15
+ }
16
+ /** Fill of the unselected circles (Constitution V-A surface set). Mapped to RadioInputVariant one to one. */
17
+ export declare enum RadioGroupVariant {
18
+ /** `background.base`. */
19
+ BASE = "BASE",
20
+ /** `background.primary`. The default. */
21
+ PRIMARY = "PRIMARY",
22
+ /** `background.secondary`. */
23
+ SECONDARY = "SECONDARY",
24
+ /** `background.tertiary`. */
25
+ TERTIARY = "TERTIARY"
26
+ }
27
+ /** One choice in a RadioGroup. */
28
+ export interface RadioGroupOption<TId extends string = string> {
29
+ /** Stable identifier; what `value` holds. */
30
+ id: TId;
31
+ /** Text beside the circle. */
32
+ label: string;
33
+ /** Help copy under the label. Text and inline `Link`s only. */
34
+ description?: ReactNode;
35
+ /**
36
+ * Disables this option only; the arrow keys skip it.
37
+ * @default false
38
+ */
39
+ isDisabled?: boolean;
40
+ }
41
+ export interface RadioGroupProps<TId extends string = string> extends AriaAttributes {
42
+ /** The choices, in display order. */
43
+ options: RadioGroupOption<TId>[];
44
+ /** Controlled id of the selected option; `null` for none. Pass it with `onChange`. */
45
+ value?: TId | null;
46
+ /**
47
+ * Initially selected id while uncontrolled.
48
+ * @default null
49
+ */
50
+ defaultValue?: TId | null;
51
+ /** Called with the id the user selects. The user cannot clear a selection. */
52
+ onChange?: (value: TId) => void;
53
+ /** The question, rendered through `Field` above the options. For a description, a tooltip or a horizontal layout, wrap the group in `Field` instead. */
54
+ label?: string;
55
+ /** Message from the app, shown under the options through `Field`. It also marks the group invalid. */
56
+ error?: string;
57
+ /**
58
+ * Error borders and `aria-invalid` without a message. `error` implies it.
59
+ * @default false
60
+ */
61
+ isError?: boolean;
62
+ /**
63
+ * Asterisk on the `label` (via `Field`) and `aria-required` on the group. It does no validation.
64
+ * @default false
65
+ */
66
+ isRequired?: boolean;
67
+ /**
68
+ * `VERTICAL` stacks the options; `HORIZONTAL` puts them in a row that wraps.
69
+ * @default Orientation.VERTICAL
70
+ */
71
+ orientation?: Orientation;
72
+ /**
73
+ * Rung of every radio and label, of the gaps, and of the `label` and `error` type.
74
+ * @default RadioGroupSize.MEDIUM
75
+ */
76
+ size?: RadioGroupSize;
77
+ /**
78
+ * Fill of every unselected circle, from the surface set. Ignored with `isGhost`.
79
+ * @default RadioGroupVariant.PRIMARY
80
+ */
81
+ variant?: RadioGroupVariant;
82
+ /**
83
+ * Ghost items: every unselected circle has no fill and keeps its hairline (1.x `TRANSPARENT`);
84
+ * passed to each RadioInput as `isGhost`.
85
+ * @default false
86
+ */
87
+ isGhost?: boolean;
88
+ /**
89
+ * Disables every option.
90
+ * @default false
91
+ */
92
+ isDisabled?: boolean;
93
+ /** Accessible name of the group when there is no `label` and no wrapping `Field` label. */
94
+ ariaLabel?: string;
95
+ /**
96
+ * DOM id of the group element. A wrapping `Field`'s id wins.
97
+ * @default useId()
98
+ */
99
+ id?: string;
100
+ /** Any `data-*` attribute, forwarded to the group element. */
101
+ [dataAttribute: `data-${string}`]: string | number | boolean | undefined;
102
+ /** Extra class on the root: the `Field` wrapper when the group renders one, otherwise the group element. */
103
+ className?: string;
104
+ /** Inline style on the root; only for setting CSS custom properties. */
105
+ style?: CSSProperties;
106
+ }
107
+ /**
108
+ * The public, generic call signature (`TId` inferred from `options`). Never called: it only types
109
+ * the default export. An arrow function rather than a type literal, so react-docgen-typescript
110
+ * reads the props for the Docs tab.
111
+ */
112
+ declare const RADIO_GROUP_SIGNATURE: <TId extends string = string>(_props: RadioGroupProps<TId> & RefAttributes<HTMLDivElement>) => ReactElement | null;
113
+ /** A set of radios answering one question; the value is the selected id. */
114
+ declare const RadioGroup: typeof RADIO_GROUP_SIGNATURE;
115
+ export default RadioGroup;
@@ -0,0 +1,179 @@
1
+ import { Orientation } from "../theme/enums.js";
2
+ import { useControlledState } from "../hooks/useControlledState.js";
3
+ import { useDevWarning } from "./internal/devWarn.js";
4
+ import { useFieldWiring } from "./internal/fieldWiring.js";
5
+ import Field, { FieldSize } from "./Field.js";
6
+ import { rootStyle, useOwnField } from "./internal/ownField.js";
7
+ import RadioInput, { RadioInputSize, RadioInputVariant } from "./RadioInput.js";
8
+ /* empty css */
9
+ import { styled } from "@linaria/react";
10
+ import { forwardRef, useCallback, useId } from "react";
11
+ import { jsx } from "react/jsx-runtime";
12
+ import { cx } from "@linaria/core";
13
+ //#region src/inputs/RadioGroup.tsx
14
+ /**
15
+ * One question whose answer is exactly one of a few visible options ("Theme", "Sync schedule"). It
16
+ * renders a `RadioInput` per option, in a column or a wrapping row, all sharing one generated
17
+ * native `name`, so the browser gives them the radio keyboard pattern (one tab stop, arrow keys
18
+ * move and select). It holds the selected id with `value` / `defaultValue` / `onChange`, and it is
19
+ * the `radiogroup` that carries the question's name, required and invalid state. Like the text
20
+ * inputs, it takes `label` and `error` directly and renders them through `Field`; anything more is
21
+ * a wrapping `Field`.
22
+ *
23
+ * It does not validate, is not a segmented control for switching a view (`ToggleInput`), and is
24
+ * not a dropdown for long lists (`SelectInput`). Any number of choices is `CheckboxGroup`. New in
25
+ * 2.0 (1.x rendered `RadioInput`s by hand and enforced single selection in app state).
26
+ */
27
+ /** Rung of the group's radios (Constitution III-A.4). Mapped to RadioInputSize and FieldSize one to one. */
28
+ var RadioGroupSize = /* @__PURE__ */ function(RadioGroupSize) {
29
+ /** 12px circles, caption labels. */
30
+ RadioGroupSize["X_SMALL"] = "X_SMALL";
31
+ /** 14px circles, body_sm labels. */
32
+ RadioGroupSize["SMALL"] = "SMALL";
33
+ /** 16px circles, body_md labels. The default. */
34
+ RadioGroupSize["MEDIUM"] = "MEDIUM";
35
+ /** 16px circles, body_lg labels. */
36
+ RadioGroupSize["LARGE"] = "LARGE";
37
+ /** 18px circles, body_lg labels. */
38
+ RadioGroupSize["X_LARGE"] = "X_LARGE";
39
+ return RadioGroupSize;
40
+ }({});
41
+ /** Fill of the unselected circles (Constitution V-A surface set). Mapped to RadioInputVariant one to one. */
42
+ var RadioGroupVariant = /* @__PURE__ */ function(RadioGroupVariant) {
43
+ /** `background.base`. */
44
+ RadioGroupVariant["BASE"] = "BASE";
45
+ /** `background.primary`. The default. */
46
+ RadioGroupVariant["PRIMARY"] = "PRIMARY";
47
+ /** `background.secondary`. */
48
+ RadioGroupVariant["SECONDARY"] = "SECONDARY";
49
+ /** `background.tertiary`. */
50
+ RadioGroupVariant["TERTIARY"] = "TERTIARY";
51
+ return RadioGroupVariant;
52
+ }({});
53
+ /** The group element. The first row sits in a control-height band (block inset = Field's label offset). */
54
+ var Root = /*#__PURE__*/ styled("div")({
55
+ name: "Root",
56
+ class: "gx-RadioGroup-r1g93v93",
57
+ propsAsIs: false
58
+ });
59
+ /** A column, or a row that wraps. */
60
+ var RADIO_GROUP_ORIENTATION_TO_CSS_MAP = {
61
+ [Orientation.VERTICAL]: "gx-RadioGroup-Orientation_VERTICAL-ouwhueh",
62
+ [Orientation.HORIZONTAL]: "gx-RadioGroup-Orientation_HORIZONTAL-o1onppun"
63
+ };
64
+ /** Row gap, column gap and block inset per rung (inset = (control rung − label line) / 2). */
65
+ var RADIO_GROUP_SIZE_TO_CSS_MAP = {
66
+ ["X_SMALL"]: "gx-RadioGroup-X_SMALL-x1hjaxb2",
67
+ ["SMALL"]: "gx-RadioGroup-SMALL-sss5vly",
68
+ ["MEDIUM"]: "gx-RadioGroup-MEDIUM-mc6iiv9",
69
+ ["LARGE"]: "gx-RadioGroup-LARGE-ld02soo",
70
+ ["X_LARGE"]: "gx-RadioGroup-X_LARGE-x1rrw221"
71
+ };
72
+ /** Every radio takes the group's rung. */
73
+ var RADIO_GROUP_SIZE_TO_RADIO_INPUT_SIZE_MAP = {
74
+ ["X_SMALL"]: RadioInputSize.X_SMALL,
75
+ ["SMALL"]: RadioInputSize.SMALL,
76
+ ["MEDIUM"]: RadioInputSize.MEDIUM,
77
+ ["LARGE"]: RadioInputSize.LARGE,
78
+ ["X_LARGE"]: RadioInputSize.X_LARGE
79
+ };
80
+ /** Every radio takes the group's fill. */
81
+ var RADIO_GROUP_VARIANT_TO_RADIO_INPUT_VARIANT_MAP = {
82
+ ["BASE"]: RadioInputVariant.BASE,
83
+ ["PRIMARY"]: RadioInputVariant.PRIMARY,
84
+ ["SECONDARY"]: RadioInputVariant.SECONDARY,
85
+ ["TERTIARY"]: RadioInputVariant.TERTIARY
86
+ };
87
+ /** The `Field` the group renders for its own `label` / `error` uses the same rung. */
88
+ var RADIO_GROUP_SIZE_TO_FIELD_SIZE_MAP = {
89
+ ["X_SMALL"]: FieldSize.X_SMALL,
90
+ ["SMALL"]: FieldSize.SMALL,
91
+ ["MEDIUM"]: FieldSize.MEDIUM,
92
+ ["LARGE"]: FieldSize.LARGE,
93
+ ["X_LARGE"]: FieldSize.X_LARGE
94
+ };
95
+ /** The radiogroup and its radios, wired to the nearest Field (the group's own or the app's). */
96
+ function GroupBody({ groupProps, forwardedRef, isRoot }) {
97
+ const { options, value, defaultValue, onChange, label: _label, error, isError = false, isRequired = false, orientation = Orientation.VERTICAL, size = "MEDIUM", variant = "PRIMARY", isGhost = false, isDisabled = false, ariaLabel, id, "aria-describedby": ariaDescribedBy, className, style, ...rest } = groupProps;
98
+ const wiring = useFieldWiring({
99
+ id,
100
+ ariaLabel,
101
+ ariaLabelAttribute: rest["aria-label"],
102
+ ariaLabelledBy: rest["aria-labelledby"],
103
+ ariaDescribedBy,
104
+ error,
105
+ isError,
106
+ isRequired
107
+ });
108
+ const { field, controlId: groupId, describedBy, isRequired: isRequiredState, hasName } = wiring;
109
+ const name = useId();
110
+ const handleChange = useCallback((next) => {
111
+ if (next !== null) onChange?.(next);
112
+ }, [onChange]);
113
+ const [selected, setSelected] = useControlledState({
114
+ value,
115
+ defaultValue: defaultValue ?? null,
116
+ onChange: handleChange
117
+ });
118
+ const isInvalid = error !== void 0 || wiring.isInvalid;
119
+ useDevWarning(!hasName, "[@galaxy-io/dls] RadioGroup has no accessible name. Pass `label`, wrap it in a labelled `Field`, or set `ariaLabel`.");
120
+ return /* @__PURE__ */ jsx(Root, {
121
+ ref: forwardedRef,
122
+ role: "radiogroup",
123
+ id: groupId,
124
+ "aria-labelledby": field?.labelId,
125
+ "aria-label": ariaLabel,
126
+ "aria-describedby": describedBy,
127
+ "aria-required": isRequiredState ? true : void 0,
128
+ "aria-invalid": isInvalid ? true : void 0,
129
+ "aria-disabled": isDisabled ? true : void 0,
130
+ ...rest,
131
+ className: cx(RADIO_GROUP_ORIENTATION_TO_CSS_MAP[orientation], RADIO_GROUP_SIZE_TO_CSS_MAP[size], isRoot && className),
132
+ ...rootStyle(isRoot, style),
133
+ children: options.map((option) => /* @__PURE__ */ jsx(RadioInput, {
134
+ name,
135
+ label: option.label,
136
+ ...option.description === void 0 ? {} : { description: option.description },
137
+ size: RADIO_GROUP_SIZE_TO_RADIO_INPUT_SIZE_MAP[size],
138
+ variant: RADIO_GROUP_VARIANT_TO_RADIO_INPUT_VARIANT_MAP[variant],
139
+ isGhost,
140
+ isSelected: selected === option.id,
141
+ isDisabled: isDisabled || option.isDisabled === true,
142
+ isError: isInvalid,
143
+ onChange: () => setSelected(option.id)
144
+ }, option.id))
145
+ });
146
+ }
147
+ /** A set of radios answering one question; the value is the selected id. */
148
+ var RadioGroupBase = forwardRef(function RadioGroup(props, ref) {
149
+ const { label, error, isRequired = false, size = "MEDIUM" } = props;
150
+ const { id, className, style } = props;
151
+ const ownField = useOwnField({
152
+ componentName: "RadioGroup",
153
+ label,
154
+ error,
155
+ isRequired,
156
+ size: RADIO_GROUP_SIZE_TO_FIELD_SIZE_MAP[size],
157
+ id,
158
+ className,
159
+ style
160
+ });
161
+ if (ownField !== null) return /* @__PURE__ */ jsx(Field, {
162
+ ...ownField,
163
+ children: /* @__PURE__ */ jsx(GroupBody, {
164
+ groupProps: props,
165
+ forwardedRef: ref,
166
+ isRoot: false
167
+ })
168
+ });
169
+ return /* @__PURE__ */ jsx(GroupBody, {
170
+ groupProps: props,
171
+ forwardedRef: ref,
172
+ isRoot: true
173
+ });
174
+ });
175
+ RadioGroupBase.displayName = "RadioGroup";
176
+ /** A set of radios answering one question; the value is the selected id. */
177
+ var RadioGroup = RadioGroupBase;
178
+ //#endregion
179
+ export { RadioGroupSize, RadioGroupVariant, RadioGroup as default };