@galaxy-io/dls 1.6.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (540) hide show
  1. package/README.md +47 -50
  2. package/biome/index.json +74 -0
  3. package/biome/plugins/no-hex-literal.grit +20 -0
  4. package/biome/plugins/no-inline-style.grit +13 -0
  5. package/biome/plugins/no-margin.grit +9 -0
  6. package/biome/plugins/warn/no-hex-literal.grit +23 -0
  7. package/biome/plugins/warn/no-inline-style.grit +13 -0
  8. package/biome/plugins/warn/no-margin.grit +9 -0
  9. package/dist/a11y/FocusScope.d.ts +44 -0
  10. package/dist/a11y/FocusScope.js +229 -0
  11. package/dist/a11y/VisuallyHidden.d.ts +21 -0
  12. package/dist/a11y/VisuallyHidden.js +30 -0
  13. package/dist/avatar/Avatar.d.ts +56 -14
  14. package/dist/avatar/Avatar.js +250 -96
  15. package/dist/avatar/AvatarGroup.d.ts +43 -0
  16. package/dist/avatar/AvatarGroup.js +153 -0
  17. package/dist/backgrounds/GridBackground.d.ts +48 -0
  18. package/dist/backgrounds/GridBackground.js +146 -0
  19. package/dist/beacons/Beacon.d.ts +86 -22
  20. package/dist/beacons/Beacon.js +170 -47
  21. package/dist/brand/GalaxyFilamentWordmark.d.ts +30 -0
  22. package/dist/brand/GalaxyFilamentWordmark.js +39 -0
  23. package/dist/brand/GalaxyLogomark.d.ts +26 -0
  24. package/dist/brand/GalaxyLogomark.js +41 -0
  25. package/dist/brand/GalaxyLogomarkAnimation.d.ts +36 -0
  26. package/dist/brand/GalaxyLogomarkAnimation.js +107 -0
  27. package/dist/brand/GalaxyWordmark.d.ts +30 -0
  28. package/dist/brand/GalaxyWordmark.js +63 -0
  29. package/dist/brand/assets/galaxy-logomark-animation.js +136678 -0
  30. package/dist/brand/brandMark.d.ts +26 -0
  31. package/dist/brand/brandMark.js +35 -0
  32. package/dist/buttons/Button.d.ts +148 -59
  33. package/dist/buttons/Button.js +437 -227
  34. package/dist/buttons/ButtonGroup.d.ts +38 -0
  35. package/dist/buttons/ButtonGroup.js +68 -0
  36. package/dist/buttons/CopyButton.d.ts +77 -0
  37. package/dist/buttons/CopyButton.js +65 -0
  38. package/dist/charts/AreaChart.d.ts +49 -0
  39. package/dist/charts/AreaChart.js +31 -0
  40. package/dist/charts/BarChart.d.ts +54 -67
  41. package/dist/charts/BarChart.js +160 -124
  42. package/dist/charts/ChartAxis.d.ts +35 -40
  43. package/dist/charts/ChartAxis.js +114 -90
  44. package/dist/charts/ChartCategoryTargets.d.ts +12 -26
  45. package/dist/charts/ChartCategoryTargets.js +33 -20
  46. package/dist/charts/ChartFrame.d.ts +71 -116
  47. package/dist/charts/ChartFrame.js +306 -97
  48. package/dist/charts/ChartGroupProvider.d.ts +30 -41
  49. package/dist/charts/ChartGroupProvider.js +20 -7
  50. package/dist/charts/ChartLegend.d.ts +37 -48
  51. package/dist/charts/ChartLegend.js +243 -125
  52. package/dist/charts/ChartMarkTargets.d.ts +12 -28
  53. package/dist/charts/ChartMarkTargets.js +34 -20
  54. package/dist/charts/ChartPrimitives.d.ts +50 -305
  55. package/dist/charts/ChartPrimitives.js +65 -413
  56. package/dist/charts/ChartTooltip.d.ts +20 -26
  57. package/dist/charts/ChartTooltip.js +77 -40
  58. package/dist/charts/Heatmap.d.ts +35 -0
  59. package/dist/charts/Heatmap.js +307 -0
  60. package/dist/charts/LineChart.d.ts +54 -47
  61. package/dist/charts/LineChart.js +174 -121
  62. package/dist/charts/PieChart.d.ts +32 -53
  63. package/dist/charts/PieChart.js +159 -136
  64. package/dist/charts/Sparkline.d.ts +107 -0
  65. package/dist/charts/Sparkline.js +244 -0
  66. package/dist/charts/StatChart.d.ts +37 -13
  67. package/dist/charts/StatChart.js +82 -35
  68. package/dist/charts/barChartGeometry.d.ts +138 -86
  69. package/dist/charts/barChartGeometry.js +122 -101
  70. package/dist/charts/barChartLegend.d.ts +14 -18
  71. package/dist/charts/barChartLegend.js +18 -13
  72. package/dist/charts/chartFormat.d.ts +12 -18
  73. package/dist/charts/chartFormat.js +20 -52
  74. package/dist/charts/chartPalette.d.ts +33 -0
  75. package/dist/charts/chartPalette.js +68 -0
  76. package/dist/charts/chartScales.d.ts +41 -108
  77. package/dist/charts/chartScales.js +62 -128
  78. package/dist/charts/chartSelection.d.ts +15 -0
  79. package/dist/charts/chartSelection.js +22 -0
  80. package/dist/charts/constants.d.ts +100 -256
  81. package/dist/charts/constants.js +109 -275
  82. package/dist/charts/heatmapGeometry.d.ts +95 -0
  83. package/dist/charts/heatmapGeometry.js +155 -0
  84. package/dist/charts/lineChartGeometry.d.ts +108 -58
  85. package/dist/charts/lineChartGeometry.js +120 -78
  86. package/dist/charts/pieChartGeometry.d.ts +66 -40
  87. package/dist/charts/pieChartGeometry.js +68 -38
  88. package/dist/charts/types.d.ts +206 -466
  89. package/dist/charts/types.js +55 -144
  90. package/dist/charts/useCartesianChartLayout.d.ts +28 -59
  91. package/dist/charts/useCartesianChartLayout.js +47 -32
  92. package/dist/charts/useChartDimensions.d.ts +19 -40
  93. package/dist/charts/useChartDimensions.js +40 -56
  94. package/dist/charts/useChartFormatters.d.ts +6 -15
  95. package/dist/charts/useChartFormatters.js +4 -9
  96. package/dist/charts/useChartInteraction.d.ts +69 -116
  97. package/dist/charts/useChartInteraction.js +148 -78
  98. package/dist/charts/useChartTooltipPosition.d.ts +29 -39
  99. package/dist/charts/useChartTooltipPosition.js +14 -5
  100. package/dist/charts/useSeriesColorResolver.d.ts +11 -33
  101. package/dist/charts/useSeriesColorResolver.js +19 -12
  102. package/dist/chips/Chip.d.ts +155 -44
  103. package/dist/chips/Chip.js +329 -155
  104. package/dist/chips/ChipGroup.d.ts +53 -0
  105. package/dist/chips/ChipGroup.js +98 -0
  106. package/dist/drawer/Drawer.d.ts +83 -17
  107. package/dist/drawer/Drawer.js +399 -65
  108. package/dist/dropdown/Dropdown.d.ts +80 -63
  109. package/dist/dropdown/Dropdown.js +127 -129
  110. package/dist/editor/CodeEditor.d.ts +119 -40
  111. package/dist/editor/CodeEditor.js +490 -400
  112. package/dist/editor/CodeEditorReactWidget.d.ts +20 -17
  113. package/dist/editor/CodeEditorReactWidget.js +28 -21
  114. package/dist/feedback/Alert.d.ts +49 -0
  115. package/dist/feedback/Alert.js +172 -0
  116. package/dist/feedback/EmptyState.d.ts +39 -0
  117. package/dist/feedback/EmptyState.js +109 -0
  118. package/dist/feedback/ProgressBar.d.ts +125 -0
  119. package/dist/feedback/ProgressBar.js +183 -0
  120. package/dist/feedback/ProgressCircle.d.ts +99 -0
  121. package/dist/feedback/ProgressCircle.js +187 -0
  122. package/dist/feedback/Skeleton.d.ts +69 -0
  123. package/dist/feedback/Skeleton.js +130 -0
  124. package/dist/feedback/Spinner.d.ts +63 -0
  125. package/dist/feedback/Spinner.js +141 -0
  126. package/dist/fonts.css +70 -0
  127. package/dist/hooks/internal/useIsClient.d.ts +2 -0
  128. package/dist/hooks/internal/useIsClient.js +14 -0
  129. package/dist/hooks/useClipboard.d.ts +19 -0
  130. package/dist/hooks/useClipboard.js +45 -0
  131. package/dist/hooks/useControlledOpenState.d.ts +21 -0
  132. package/dist/hooks/useControlledOpenState.js +19 -0
  133. package/dist/hooks/useControlledState.d.ts +19 -0
  134. package/dist/hooks/useControlledState.js +22 -0
  135. package/dist/hooks/useDebouncedValue.d.ts +14 -0
  136. package/dist/hooks/useDebouncedValue.js +33 -0
  137. package/dist/hooks/useDisclosure.d.ts +26 -0
  138. package/dist/hooks/useDisclosure.js +36 -0
  139. package/dist/hooks/useDismiss.d.ts +23 -27
  140. package/dist/hooks/useDismiss.js +39 -27
  141. package/dist/hooks/useElementClientSize.d.ts +10 -10
  142. package/dist/hooks/useElementClientSize.js +8 -11
  143. package/dist/hooks/useElementWidth.d.ts +6 -13
  144. package/dist/hooks/useElementWidth.js +6 -14
  145. package/dist/hooks/useField.d.ts +47 -0
  146. package/dist/hooks/useField.js +40 -0
  147. package/dist/hooks/useHotkey.d.ts +77 -0
  148. package/dist/hooks/useHotkey.js +246 -0
  149. package/dist/hooks/useIsMac.d.ts +12 -0
  150. package/dist/hooks/useIsMac.js +27 -0
  151. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +17 -0
  152. package/dist/hooks/useIsomorphicLayoutEffect.js +20 -0
  153. package/dist/hooks/useLocalStorage.d.ts +28 -0
  154. package/dist/hooks/useLocalStorage.js +145 -0
  155. package/dist/hooks/useMediaQuery.d.ts +11 -0
  156. package/dist/hooks/useMediaQuery.js +23 -0
  157. package/dist/hooks/usePrefersReducedMotion.d.ts +12 -0
  158. package/dist/hooks/usePrefersReducedMotion.js +25 -0
  159. package/dist/hooks/useResize.d.ts +42 -62
  160. package/dist/hooks/useResize.js +43 -31
  161. package/dist/icons/Icon.d.ts +64 -37
  162. package/dist/icons/Icon.js +96 -37
  163. package/dist/icons/internal/IconSlot.d.ts +10 -0
  164. package/dist/icons/internal/IconSlot.js +32 -0
  165. package/dist/inputs/CheckboxGroup.d.ts +115 -0
  166. package/dist/inputs/CheckboxGroup.js +183 -0
  167. package/dist/inputs/CheckboxInput.d.ts +98 -28
  168. package/dist/inputs/CheckboxInput.js +218 -88
  169. package/dist/inputs/ColorInput.d.ts +115 -29
  170. package/dist/inputs/ColorInput.js +748 -326
  171. package/dist/inputs/CopyInput.d.ts +49 -20
  172. package/dist/inputs/CopyInput.js +57 -49
  173. package/dist/inputs/CronInput.d.ts +94 -0
  174. package/dist/inputs/CronInput.js +618 -0
  175. package/dist/inputs/DateInput.d.ts +175 -28
  176. package/dist/inputs/DateInput.js +1109 -451
  177. package/dist/inputs/DurationInput.d.ts +101 -0
  178. package/dist/inputs/DurationInput.js +441 -0
  179. package/dist/inputs/Field.d.ts +75 -0
  180. package/dist/inputs/Field.js +247 -0
  181. package/dist/inputs/Fieldset.d.ts +53 -0
  182. package/dist/inputs/Fieldset.js +149 -0
  183. package/dist/inputs/FileInput.d.ts +110 -0
  184. package/dist/inputs/FileInput.js +476 -0
  185. package/dist/inputs/Input.d.ts +148 -187
  186. package/dist/inputs/Input.js +339 -259
  187. package/dist/inputs/KeyValueInput.d.ts +120 -0
  188. package/dist/inputs/KeyValueInput.js +383 -0
  189. package/dist/inputs/MultiSelectInput.d.ts +165 -54
  190. package/dist/inputs/MultiSelectInput.js +175 -559
  191. package/dist/inputs/NumberInput.d.ts +65 -9
  192. package/dist/inputs/NumberInput.js +197 -40
  193. package/dist/inputs/PasswordInput.d.ts +17 -12
  194. package/dist/inputs/PasswordInput.js +33 -33
  195. package/dist/inputs/PinInput.d.ts +117 -0
  196. package/dist/inputs/PinInput.js +364 -0
  197. package/dist/inputs/RadioGroup.d.ts +115 -0
  198. package/dist/inputs/RadioGroup.js +179 -0
  199. package/dist/inputs/RadioInput.d.ts +87 -24
  200. package/dist/inputs/RadioInput.js +182 -95
  201. package/dist/inputs/SearchInput.d.ts +66 -0
  202. package/dist/inputs/SearchInput.js +156 -0
  203. package/dist/inputs/SelectInput.d.ts +195 -55
  204. package/dist/inputs/SelectInput.js +1308 -446
  205. package/dist/inputs/SliderInput.d.ts +150 -30
  206. package/dist/inputs/SliderInput.js +441 -186
  207. package/dist/inputs/SwitchInput.d.ts +109 -0
  208. package/dist/inputs/SwitchInput.js +248 -0
  209. package/dist/inputs/TagInput.d.ts +117 -0
  210. package/dist/inputs/TagInput.js +408 -0
  211. package/dist/inputs/TextAreaInput.d.ts +146 -44
  212. package/dist/inputs/TextAreaInput.js +298 -198
  213. package/dist/inputs/TextInput.d.ts +4 -13
  214. package/dist/inputs/TextInput.js +13 -48
  215. package/dist/inputs/ToggleInput.d.ts +120 -22
  216. package/dist/inputs/ToggleInput.js +262 -116
  217. package/dist/inputs/internal/bareField.d.ts +18 -0
  218. package/dist/inputs/internal/bareField.js +38 -0
  219. package/dist/inputs/internal/devWarn.d.ts +7 -0
  220. package/dist/inputs/internal/devWarn.js +30 -0
  221. package/dist/inputs/internal/fieldFrame.d.ts +34 -0
  222. package/dist/inputs/internal/fieldFrame.js +64 -0
  223. package/dist/inputs/internal/fieldWiring.d.ts +50 -0
  224. package/dist/inputs/internal/fieldWiring.js +38 -0
  225. package/dist/inputs/internal/innerButton.d.ts +2 -0
  226. package/dist/inputs/internal/innerButton.js +24 -0
  227. package/dist/inputs/internal/ownField.d.ts +45 -0
  228. package/dist/inputs/internal/ownField.js +58 -0
  229. package/dist/inputs/internal/predicates.d.ts +9 -0
  230. package/dist/inputs/internal/predicates.js +11 -0
  231. package/dist/inputs/internal/useComboboxPopover.d.ts +46 -0
  232. package/dist/inputs/internal/useComboboxPopover.js +92 -0
  233. package/dist/json/JsonViewer.d.ts +62 -0
  234. package/dist/json/JsonViewer.js +483 -0
  235. package/dist/layout/Box.d.ts +87 -0
  236. package/dist/layout/Box.js +109 -0
  237. package/dist/layout/Divider.d.ts +25 -0
  238. package/dist/layout/Divider.js +70 -0
  239. package/dist/layout/Flex.d.ts +139 -0
  240. package/dist/layout/Flex.js +165 -0
  241. package/dist/layout/FlexItem.d.ts +72 -0
  242. package/dist/layout/FlexItem.js +84 -0
  243. package/dist/layout/Grid.d.ts +140 -0
  244. package/dist/layout/Grid.js +178 -0
  245. package/dist/layout/Portal.d.ts +29 -0
  246. package/dist/layout/Portal.js +27 -0
  247. package/dist/layout/ResizablePanels.d.ts +88 -0
  248. package/dist/layout/ResizablePanels.js +198 -0
  249. package/dist/layout/ResizeHandle.d.ts +48 -0
  250. package/dist/layout/ResizeHandle.js +143 -0
  251. package/dist/layout/ScrollArea.d.ts +30 -0
  252. package/dist/layout/ScrollArea.js +138 -0
  253. package/dist/links/Link.d.ts +101 -1
  254. package/dist/links/Link.js +166 -4
  255. package/dist/lists/BulletedList.d.ts +25 -7
  256. package/dist/lists/BulletedList.js +72 -27
  257. package/dist/lists/DescriptionList.d.ts +91 -0
  258. package/dist/lists/DescriptionList.js +147 -0
  259. package/dist/menu/ContextMenu.d.ts +64 -0
  260. package/dist/menu/ContextMenu.js +34 -0
  261. package/dist/menu/Menu.d.ts +280 -0
  262. package/dist/menu/Menu.js +1003 -0
  263. package/dist/modal/ConfirmDialog.d.ts +55 -0
  264. package/dist/modal/ConfirmDialog.js +151 -0
  265. package/dist/modal/Modal.d.ts +64 -14
  266. package/dist/modal/Modal.js +189 -48
  267. package/dist/navigation/Breadcrumbs.d.ts +65 -0
  268. package/dist/navigation/Breadcrumbs.js +243 -0
  269. package/dist/navigation/CommandPalette.d.ts +83 -0
  270. package/dist/navigation/CommandPalette.js +509 -0
  271. package/dist/navigation/Pagination.d.ts +87 -0
  272. package/dist/navigation/Pagination.js +300 -0
  273. package/dist/navigation/SidebarNav.d.ts +107 -0
  274. package/dist/navigation/SidebarNav.js +341 -0
  275. package/dist/navigation/Stepper.d.ts +52 -0
  276. package/dist/navigation/Stepper.js +207 -0
  277. package/dist/navigation/Tabs.d.ts +113 -0
  278. package/dist/navigation/Tabs.js +543 -0
  279. package/dist/navigation/Topbar.d.ts +20 -0
  280. package/dist/navigation/Topbar.js +62 -0
  281. package/dist/overlay/OverlayProvider.d.ts +28 -32
  282. package/dist/overlay/OverlayProvider.js +42 -93
  283. package/dist/overlay/useOverlay.d.ts +88 -12
  284. package/dist/overlay/useOverlay.js +220 -43
  285. package/dist/overlays/Popover.d.ts +114 -0
  286. package/dist/overlays/Popover.js +389 -0
  287. package/dist/shapes/Circle.d.ts +84 -8
  288. package/dist/shapes/Circle.js +122 -20
  289. package/dist/shapes/Square.d.ts +84 -8
  290. package/dist/shapes/Square.js +123 -20
  291. package/dist/styles/mixins.d.ts +35 -0
  292. package/dist/styles/mixins.js +60 -0
  293. package/dist/styles.css +1 -202
  294. package/dist/table/InfiniteSpreadsheet.d.ts +140 -10
  295. package/dist/table/InfiniteSpreadsheet.js +762 -225
  296. package/dist/table/InfiniteTable.d.ts +116 -14
  297. package/dist/table/InfiniteTable.js +287 -429
  298. package/dist/table/SpreadsheetCellEditor.d.ts +54 -6
  299. package/dist/table/SpreadsheetCellEditor.js +163 -84
  300. package/dist/table/TableCore.d.ts +252 -0
  301. package/dist/table/TableCore.js +1082 -0
  302. package/dist/table/VirtualizedInfiniteTable.d.ts +104 -14
  303. package/dist/table/VirtualizedInfiniteTable.js +280 -219
  304. package/dist/table/types.d.ts +66 -244
  305. package/dist/table/types.js +0 -51
  306. package/dist/table/useInfiniteScrollSentinel.d.ts +25 -21
  307. package/dist/table/useInfiniteScrollSentinel.js +38 -30
  308. package/dist/table/useSpreadsheetCellNavigation.d.ts +44 -0
  309. package/dist/table/useSpreadsheetCellNavigation.js +141 -0
  310. package/dist/table/useTableColumnLayout.d.ts +90 -25
  311. package/dist/table/useTableColumnLayout.js +255 -50
  312. package/dist/table/useTableKeyboardNavigation.d.ts +32 -21
  313. package/dist/table/useTableKeyboardNavigation.js +95 -71
  314. package/dist/table/useTableRowSelection.d.ts +24 -25
  315. package/dist/table/useTableRowSelection.js +57 -84
  316. package/dist/table/useTableVirtualizer.d.ts +20 -0
  317. package/dist/table/useTableVirtualizer.js +48 -0
  318. package/dist/text/Bold.d.ts +5 -6
  319. package/dist/text/Bold.js +16 -15
  320. package/dist/text/Code.d.ts +5 -6
  321. package/dist/text/Code.js +16 -25
  322. package/dist/text/CodeBlock.d.ts +77 -0
  323. package/dist/text/CodeBlock.js +373 -0
  324. package/dist/text/EditableText.d.ts +55 -15
  325. package/dist/text/EditableText.js +153 -135
  326. package/dist/text/Ellipsis.d.ts +34 -8
  327. package/dist/text/Ellipsis.js +55 -23
  328. package/dist/text/Kbd.d.ts +72 -0
  329. package/dist/text/Kbd.js +284 -0
  330. package/dist/text/MarkdownText.d.ts +27 -10
  331. package/dist/text/MarkdownText.js +317 -300
  332. package/dist/text/RequiredMarker.d.ts +17 -5
  333. package/dist/text/RequiredMarker.js +34 -36
  334. package/dist/text/Selectable.d.ts +5 -6
  335. package/dist/text/Selectable.js +16 -13
  336. package/dist/text/Span.d.ts +82 -0
  337. package/dist/text/Span.js +115 -0
  338. package/dist/text/Text.d.ts +128 -41
  339. package/dist/text/Text.js +209 -76
  340. package/dist/theme/GalaxyProvider.d.ts +75 -0
  341. package/dist/theme/GalaxyProvider.js +223 -0
  342. package/dist/theme/ThemeSwitcher.d.ts +52 -0
  343. package/dist/theme/ThemeSwitcher.js +94 -0
  344. package/dist/theme/enums.d.ts +118 -0
  345. package/dist/theme/enums.js +144 -0
  346. package/dist/theme/tokens/dark.d.ts +2 -0
  347. package/dist/theme/tokens/dark.js +275 -0
  348. package/dist/theme/tokens/generate.d.ts +15 -0
  349. package/dist/theme/tokens/generate.js +47 -0
  350. package/dist/theme/tokens/light.d.ts +2 -0
  351. package/dist/theme/tokens/light.js +274 -0
  352. package/dist/theme/tokens/palette.d.ts +14 -0
  353. package/dist/theme/tokens/palette.js +153 -0
  354. package/dist/theme/tokens/scales.d.ts +26 -0
  355. package/dist/theme/tokens/scales.js +154 -0
  356. package/dist/theme/tokens/t.d.ts +3 -0
  357. package/dist/theme/tokens/t.js +25 -0
  358. package/dist/theme/tokens/types.d.ts +189 -0
  359. package/dist/theme/tokens/types.js +0 -0
  360. package/dist/theme/useGalaxyTheme.d.ts +46 -0
  361. package/dist/theme/useGalaxyTheme.js +36 -0
  362. package/dist/theme/useInverseScope.d.ts +18 -0
  363. package/dist/theme/useInverseScope.js +33 -0
  364. package/dist/three/GalaxyLogomark3D.d.ts +46 -0
  365. package/dist/three/GalaxyLogomark3D.js +134 -0
  366. package/dist/three/assets/galaxy-logomark.js +4 -0
  367. package/dist/three/galaxyLogomark3DScene.d.ts +27 -0
  368. package/dist/three/galaxyLogomark3DScene.js +165 -0
  369. package/dist/timeline/Timeline.d.ts +120 -0
  370. package/dist/timeline/Timeline.js +301 -0
  371. package/dist/toast/Toast.d.ts +43 -19
  372. package/dist/toast/Toast.js +130 -89
  373. package/dist/toast/ToastProvider.d.ts +23 -23
  374. package/dist/toast/ToastProvider.js +298 -101
  375. package/dist/toast/ToastViewport.d.ts +12 -0
  376. package/dist/toast/ToastViewport.js +210 -0
  377. package/dist/toast/useToast.d.ts +139 -5
  378. package/dist/toast/useToast.js +15 -13
  379. package/dist/tokens.css +654 -0
  380. package/dist/tooltip/Tooltip.d.ts +64 -44
  381. package/dist/tooltip/Tooltip.js +280 -73
  382. package/dist/tooltip/internal/LazyTooltip.d.ts +7 -0
  383. package/dist/tooltip/internal/LazyTooltip.js +53 -0
  384. package/dist/transform/Fade.d.ts +33 -11
  385. package/dist/transform/Fade.js +71 -19
  386. package/dist/transform/Flasher.d.ts +25 -0
  387. package/dist/transform/Flasher.js +39 -0
  388. package/dist/transform/Rotate.d.ts +24 -12
  389. package/dist/transform/Rotate.js +36 -22
  390. package/dist/transform/ScaleFade.d.ts +36 -11
  391. package/dist/transform/ScaleFade.js +86 -28
  392. package/dist/transform/internal/CollapseMotion.d.ts +10 -0
  393. package/dist/transform/internal/CollapseMotion.js +65 -0
  394. package/dist/tree/Tree.d.ts +85 -0
  395. package/dist/tree/Tree.js +387 -0
  396. package/dist/tree/treeRow.d.ts +39 -0
  397. package/dist/tree/treeRow.js +75 -0
  398. package/dist/utils/colors.d.ts +46 -13
  399. package/dist/utils/colors.js +92 -34
  400. package/dist/utils/css.d.ts +23 -0
  401. package/dist/utils/css.js +30 -0
  402. package/dist/utils/format.d.ts +58 -0
  403. package/dist/utils/format.js +220 -0
  404. package/dist/vite/index.d.ts +16 -0
  405. package/dist/vite/index.js +52 -0
  406. package/dist/widget/Widget.d.ts +164 -48
  407. package/dist/widget/Widget.js +335 -96
  408. package/dist/widget/WidgetGroup.d.ts +36 -0
  409. package/dist/widget/WidgetGroup.js +103 -0
  410. package/package.json +855 -157
  411. package/dist/accordion/Accordion.d.ts +0 -54
  412. package/dist/accordion/Accordion.js +0 -183
  413. package/dist/assets/components/GalaxyFilamentWordmarkDark.d.ts +0 -3
  414. package/dist/assets/components/GalaxyFilamentWordmarkDark.js +0 -14
  415. package/dist/assets/components/GalaxyFilamentWordmarkLight.d.ts +0 -3
  416. package/dist/assets/components/GalaxyFilamentWordmarkLight.js +0 -14
  417. package/dist/assets/components/GalaxyLogomarkDark.d.ts +0 -3
  418. package/dist/assets/components/GalaxyLogomarkDark.js +0 -11
  419. package/dist/assets/components/GalaxyLogomarkLight.d.ts +0 -3
  420. package/dist/assets/components/GalaxyLogomarkLight.js +0 -17
  421. package/dist/assets/components/GalaxyWordmarkDark.d.ts +0 -3
  422. package/dist/assets/components/GalaxyWordmarkDark.js +0 -15
  423. package/dist/assets/components/GalaxyWordmarkLight.d.ts +0 -3
  424. package/dist/assets/components/GalaxyWordmarkLight.js +0 -28
  425. package/dist/assets/models/galaxy-animation.js +0 -136666
  426. package/dist/assets/models/galaxy-logomark.js +0 -4
  427. package/dist/avatar/AvatarShimmer.d.ts +0 -30
  428. package/dist/avatar/AvatarShimmer.js +0 -22
  429. package/dist/backgrounds/CellGridBackground.d.ts +0 -24
  430. package/dist/backgrounds/CellGridBackground.js +0 -44
  431. package/dist/backgrounds/CrossGridBackground.d.ts +0 -26
  432. package/dist/backgrounds/CrossGridBackground.js +0 -49
  433. package/dist/backgrounds/DotGridBackground.d.ts +0 -24
  434. package/dist/backgrounds/DotGridBackground.js +0 -47
  435. package/dist/badge/Badge.d.ts +0 -42
  436. package/dist/badge/Badge.js +0 -99
  437. package/dist/charts/ChartEmptyState.d.ts +0 -17
  438. package/dist/charts/ChartEmptyState.js +0 -29
  439. package/dist/charts/ProgressBar.d.ts +0 -29
  440. package/dist/charts/ProgressBar.js +0 -65
  441. package/dist/charts/chartTheme.d.ts +0 -18
  442. package/dist/charts/chartTheme.js +0 -26
  443. package/dist/containers/FlexItem.d.ts +0 -50
  444. package/dist/containers/FlexItem.js +0 -91
  445. package/dist/containers/FlexWrapper.d.ts +0 -96
  446. package/dist/containers/FlexWrapper.js +0 -143
  447. package/dist/containers/GridWrapper.d.ts +0 -79
  448. package/dist/containers/GridWrapper.js +0 -125
  449. package/dist/containers/Spacing.d.ts +0 -23
  450. package/dist/containers/Spacing.js +0 -59
  451. package/dist/containers/Wrapper.d.ts +0 -26
  452. package/dist/containers/Wrapper.js +0 -54
  453. package/dist/dividers/HorizontalDivider.d.ts +0 -7
  454. package/dist/dividers/HorizontalDivider.js +0 -39
  455. package/dist/dividers/VerticalDivider.d.ts +0 -6
  456. package/dist/dividers/VerticalDivider.js +0 -21
  457. package/dist/icons/GalaxyFilamentWordmark.d.ts +0 -11
  458. package/dist/icons/GalaxyFilamentWordmark.js +0 -25
  459. package/dist/icons/GalaxyLogomark.d.ts +0 -13
  460. package/dist/icons/GalaxyLogomark.js +0 -27
  461. package/dist/icons/GalaxyLogomark3D.d.ts +0 -56
  462. package/dist/icons/GalaxyLogomark3D.js +0 -319
  463. package/dist/icons/GalaxyLogomarkAnimation.d.ts +0 -18
  464. package/dist/icons/GalaxyLogomarkAnimation.js +0 -48
  465. package/dist/icons/GalaxyWordmark.d.ts +0 -11
  466. package/dist/icons/GalaxyWordmark.js +0 -25
  467. package/dist/inputs/MultiTextInput.d.ts +0 -32
  468. package/dist/inputs/MultiTextInput.js +0 -180
  469. package/dist/inputs/SwitcherInput.d.ts +0 -30
  470. package/dist/inputs/SwitcherInput.js +0 -81
  471. package/dist/inputs/hooks.d.ts +0 -10
  472. package/dist/inputs/hooks.js +0 -22
  473. package/dist/overlay/constants.d.ts +0 -28
  474. package/dist/overlay/constants.js +0 -37
  475. package/dist/resizable/HorizontalResizeHandle.d.ts +0 -17
  476. package/dist/resizable/HorizontalResizeHandle.js +0 -38
  477. package/dist/resizable/VerticalResizeHandle.d.ts +0 -18
  478. package/dist/resizable/VerticalResizeHandle.js +0 -39
  479. package/dist/table/SpreadsheetCell.d.ts +0 -21
  480. package/dist/table/SpreadsheetCell.js +0 -71
  481. package/dist/table/SpreadsheetHeaderCell.d.ts +0 -23
  482. package/dist/table/SpreadsheetHeaderCell.js +0 -91
  483. package/dist/table/SpreadsheetMenuItem.d.ts +0 -14
  484. package/dist/table/SpreadsheetMenuItem.js +0 -33
  485. package/dist/table/SpreadsheetPrimitives.d.ts +0 -172
  486. package/dist/table/SpreadsheetPrimitives.js +0 -105
  487. package/dist/table/SpreadsheetRow.d.ts +0 -33
  488. package/dist/table/SpreadsheetRow.js +0 -73
  489. package/dist/table/SpreadsheetRowActionCell.d.ts +0 -14
  490. package/dist/table/SpreadsheetRowActionCell.js +0 -51
  491. package/dist/table/TableExpandCell.d.ts +0 -11
  492. package/dist/table/TableExpandCell.js +0 -24
  493. package/dist/table/TableExpandedRow.d.ts +0 -16
  494. package/dist/table/TableExpandedRow.js +0 -77
  495. package/dist/table/TableHeaderCellContent.d.ts +0 -30
  496. package/dist/table/TableHeaderCellContent.js +0 -48
  497. package/dist/table/TablePrimitives.d.ts +0 -313
  498. package/dist/table/TablePrimitives.js +0 -302
  499. package/dist/table/TableSelectCell.d.ts +0 -18
  500. package/dist/table/TableSelectCell.js +0 -27
  501. package/dist/table/TableStatusRow.d.ts +0 -18
  502. package/dist/table/TableStatusRow.js +0 -50
  503. package/dist/table/useSpreadsheetEditing.d.ts +0 -13
  504. package/dist/table/useSpreadsheetEditing.js +0 -41
  505. package/dist/table/useTableColumnResize.d.ts +0 -38
  506. package/dist/table/useTableColumnResize.js +0 -155
  507. package/dist/table/useTableRowExpansion.d.ts +0 -24
  508. package/dist/table/useTableRowExpansion.js +0 -62
  509. package/dist/table/utils.d.ts +0 -50
  510. package/dist/table/utils.js +0 -78
  511. package/dist/text/HotKeys.d.ts +0 -30
  512. package/dist/text/HotKeys.js +0 -74
  513. package/dist/text/Paragraph.d.ts +0 -33
  514. package/dist/text/Paragraph.js +0 -83
  515. package/dist/text/TextShimmer.d.ts +0 -14
  516. package/dist/text/TextShimmer.js +0 -34
  517. package/dist/theme/GalaxyTheme.d.ts +0 -67
  518. package/dist/theme/GalaxyTheme.js +0 -119
  519. package/dist/theme/constants.d.ts +0 -8
  520. package/dist/theme/constants.js +0 -38
  521. package/dist/theme/index.d.ts +0 -6
  522. package/dist/theme/index.js +0 -7
  523. package/dist/theme/types.d.ts +0 -195
  524. package/dist/theme/types.js +0 -10
  525. package/dist/theme/typography.d.ts +0 -2
  526. package/dist/theme/typography.js +0 -73
  527. package/dist/theme/variants/dark.d.ts +0 -2
  528. package/dist/theme/variants/dark.js +0 -125
  529. package/dist/theme/variants/light.d.ts +0 -2
  530. package/dist/theme/variants/light.js +0 -125
  531. package/dist/toast/ToastContainer.d.ts +0 -10
  532. package/dist/toast/ToastContainer.js +0 -31
  533. package/dist/toast/ToastWrapper.d.ts +0 -6
  534. package/dist/toast/ToastWrapper.js +0 -27
  535. package/dist/transform/Flash.d.ts +0 -7
  536. package/dist/transform/Flash.js +0 -18
  537. package/dist/transform/Spin.d.ts +0 -14
  538. package/dist/transform/Spin.js +0 -25
  539. package/dist/utils/linaria.d.ts +0 -1
  540. package/dist/utils/linaria.js +0 -8
@@ -0,0 +1,408 @@
1
+ import VisuallyHidden from "../a11y/VisuallyHidden.js";
2
+ import { useControlledState } from "../hooks/useControlledState.js";
3
+ import Chip, { ChipSize, ChipVariant } from "../chips/Chip.js";
4
+ import { useDevWarning } from "./internal/devWarn.js";
5
+ import { useFieldWiring } from "./internal/fieldWiring.js";
6
+ import Field, { FieldSize } from "./Field.js";
7
+ import { rootStyle, useOwnField } from "./internal/ownField.js";
8
+ /* empty css */
9
+ import { styled } from "@linaria/react";
10
+ import { forwardRef, useRef, useState } from "react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ import { cx } from "@linaria/core";
13
+ import { useMergeRefs } from "@floating-ui/react";
14
+ //#region src/inputs/TagInput.tsx
15
+ /**
16
+ * The field for a free-form list of short strings: tags, email recipients, allowed domains, label
17
+ * keys. The user types an entry and presses Enter or a separator (a comma by default) and the
18
+ * entry becomes a chip; pasting a list adds every entry at once. Each chip has a × to remove it,
19
+ * and Backspace in the empty field removes the last one. The value is the list of strings, with
20
+ * `value` / `defaultValue` / `onChange`; the text being typed is not part of it until committed.
21
+ * Entries are trimmed and duplicates are dropped. The field draws Input's frame and grows to new
22
+ * lines as chips wrap.
23
+ *
24
+ * The app can mark entries invalid with `isTagInvalid`; TagInput shows them as error chips but
25
+ * never decides validity itself. A standalone TagInput with `label` or `error` renders a `Field`
26
+ * around itself; inside a Field it reads the Field's wiring with `useField()`. Replaces 1.x
27
+ * `MultiTextInput` (`InputSize` / `InputVariant` → `TagInputSize` / `TagInputVariant`,
28
+ * `separator` → `separators`, `width` removed).
29
+ *
30
+ * SSR: ids come from `useId`; nothing touches `window` or `document` at module scope or during
31
+ * render.
32
+ */
33
+ /** Canonical rungs; TagInput supports all five. One line of the field is the rung height. */
34
+ var TagInputSize = /* @__PURE__ */ function(TagInputSize) {
35
+ /** 20px line, 16px chips, caption text. */
36
+ TagInputSize["X_SMALL"] = "X_SMALL";
37
+ /** 24px line, 16px chips, body_sm text. */
38
+ TagInputSize["SMALL"] = "SMALL";
39
+ /** 32px line, 20px chips, body_md text. The default. */
40
+ TagInputSize["MEDIUM"] = "MEDIUM";
41
+ /** 36px line, 24px chips, body_lg text. */
42
+ TagInputSize["LARGE"] = "LARGE";
43
+ /** 40px line, 28px chips, body_lg text. */
44
+ TagInputSize["X_LARGE"] = "X_LARGE";
45
+ return TagInputSize;
46
+ }({});
47
+ /** Resting fill of the field (Constitution V-A surface set; the 1.x `InputVariant` members, unchanged). */
48
+ var TagInputVariant = /* @__PURE__ */ function(TagInputVariant) {
49
+ /** `background.base` fill. */
50
+ TagInputVariant["BASE"] = "BASE";
51
+ /** `background.primary` fill. The default. */
52
+ TagInputVariant["PRIMARY"] = "PRIMARY";
53
+ /** `background.secondary` fill. */
54
+ TagInputVariant["SECONDARY"] = "SECONDARY";
55
+ /** `background.tertiary` fill. */
56
+ TagInputVariant["TERTIARY"] = "TERTIARY";
57
+ return TagInputVariant;
58
+ }({});
59
+ /** The field's width without `fillWidth` (the SelectInput default). */
60
+ /** The narrowest the text input gets before it wraps to a new line (the 1.x `min-width`). */
61
+ /** Default separators: a comma. */
62
+ var TAG_INPUT_DEFAULT_SEPARATORS = [","];
63
+ /** A paste also splits on these, so a column copied from a spreadsheet or a file splits by line. */
64
+ var TAG_INPUT_PASTE_SEPARATORS = [
65
+ "\n",
66
+ "\r",
67
+ " "
68
+ ];
69
+ /**
70
+ * The visual box: the chips, then the text input. One line of chips is exactly the rung height;
71
+ * each wrapped line adds a chip and a 4px gap. Focus is drawn here as `border.focused` on the
72
+ * hairline plus a 1px inset (`FIELD_FOCUS`), whenever the text input has focus. The hairline is drawn by `::before`
73
+ * over the frame's edge, in the frame's own `border-color` (which the variant, hover, focus and
74
+ * error rules set on a zero-width border), so the height is `chip + 2 × inset` at every device
75
+ * pixel ratio: a 0.5px border in the box would round up to 1px on 1x screens and add a pixel to
76
+ * the line.
77
+ */
78
+ var Frame = /*#__PURE__*/ styled("div")({
79
+ name: "Frame",
80
+ class: "gx-TagInput-Frame-f1wkm731",
81
+ propsAsIs: false
82
+ });
83
+ /** One tag's chip; it may shrink to the line, so a long tag truncates inside the chip. */
84
+ var TagItem = /*#__PURE__*/ styled("span")({
85
+ name: "TagItem",
86
+ class: "gx-TagInput-TagItem-t17uxts3",
87
+ propsAsIs: false
88
+ });
89
+ /** The text being typed: no chrome of its own; it takes the rest of the line, at least 80px. */
90
+ var Draft = /*#__PURE__*/ styled("input")({
91
+ name: "Draft",
92
+ class: "gx-TagInput-Draft-d1nfwt42",
93
+ propsAsIs: false
94
+ });
95
+ /** The polite live region for added, removed and duplicate tags (`VisuallyHidden` takes no `role`). */
96
+ var StatusRegion = /*#__PURE__*/ styled("span")({
97
+ name: "StatusRegion",
98
+ class: "gx-TagInput-StatusRegion-s1c7eovr",
99
+ propsAsIs: false
100
+ });
101
+ /** While there are no tags, the text starts where a TextInput's text does at the same rung. */
102
+ var EMPTY_DRAFT_CSS = "gx-TagInput-EMPTY_DRAFT_CSS-eq5t364";
103
+ /**
104
+ * Line height, chip height, inset and text offset per rung, plus the text input's type. One line
105
+ * is `chip + 2 × inset` in border-box: 16 + 2×2, 16 + 2×4, 20 + 2×6, 24 + 2×6, 28 + 2×6.
106
+ */
107
+ var TAG_INPUT_SIZE_TO_CSS_MAP = {
108
+ ["X_SMALL"]: "gx-TagInput-X_SMALL-x8akds0",
109
+ ["SMALL"]: "gx-TagInput-SMALL-sq012y8",
110
+ ["MEDIUM"]: "gx-TagInput-MEDIUM-m1fsqjlf",
111
+ ["LARGE"]: "gx-TagInput-LARGE-l10yf1a",
112
+ ["X_LARGE"]: "gx-TagInput-X_LARGE-xxkesin"
113
+ };
114
+ /** Rest look per variant: fill and hairline color (the shared `FIELD_SURFACE_TO_REST_MAP` fragments). */
115
+ var TAG_INPUT_VARIANT_TO_CSS_MAP = {
116
+ ["BASE"]: "gx-TagInput-BASE-b1mm0zeo",
117
+ ["PRIMARY"]: "gx-TagInput-PRIMARY-p1cnbmmu",
118
+ ["SECONDARY"]: "gx-TagInput-SECONDARY-s8g5ipk",
119
+ ["TERTIARY"]: "gx-TagInput-TERTIARY-t1sqgv1g"
120
+ };
121
+ /** `isGhost`: no fill and no hairline at rest. Declared after the variant map, which it replaces. */
122
+ var GHOST_CSS = "gx-TagInput-GHOST_CSS-g1bbep7t";
123
+ /**
124
+ * Hover on an editable field (2026-10-03 field-frame resolution): `border.hovered`. Focus keeps
125
+ * `border.focused`.
126
+ */
127
+ var TAG_INPUT_VARIANT_TO_HOVER_CSS_MAP = {
128
+ ["BASE"]: "gx-TagInput-BASE-bu44p55",
129
+ ["PRIMARY"]: "gx-TagInput-PRIMARY-p15utnv6",
130
+ ["SECONDARY"]: "gx-TagInput-SECONDARY-s1dgogmr",
131
+ ["TERTIARY"]: "gx-TagInput-TERTIARY-t1chy3wt"
132
+ };
133
+ /** Hover on an editable ghost field: the frame appears, `border.hovered` with no fill. */
134
+ var GHOST_HOVER_CSS = "gx-TagInput-GHOST_HOVER_CSS-gvbd3pq";
135
+ /** Error border at rest, on hover and with focus (the 1px inset focus line is red too). */
136
+ var ERROR_CSS = "gx-TagInput-ERROR_CSS-e1xtw92t";
137
+ /**
138
+ * Disabled: the variant's resting fill and hairline are kept (`border.disabled` is not used on
139
+ * frames); the field reads as disabled through the chips, `text.disabled` and the cursor.
140
+ */
141
+ var DISABLED_CSS = "gx-TagInput-DISABLED_CSS-dnya61k";
142
+ /** Stretch to the parent's width (frame, and the `Field` wrapper when there is one). */
143
+ var FILL_WIDTH_CSS = "gx-TagInput-FILL_WIDTH_CSS-frlh1fb";
144
+ /** Chip rung per field rung (MultiSelectInput's): 2 to 6px inside the line. */
145
+ var TAG_INPUT_SIZE_TO_CHIP_SIZE_MAP = {
146
+ ["X_SMALL"]: ChipSize.X_SMALL,
147
+ ["SMALL"]: ChipSize.X_SMALL,
148
+ ["MEDIUM"]: ChipSize.SMALL,
149
+ ["LARGE"]: ChipSize.MEDIUM,
150
+ ["X_LARGE"]: ChipSize.LARGE
151
+ };
152
+ /** A chip is always one fill step away from the field behind it (the 1.x map; a ghost field's chips are `SECONDARY`). */
153
+ var TAG_INPUT_VARIANT_TO_CHIP_VARIANT_MAP = {
154
+ ["BASE"]: ChipVariant.SECONDARY,
155
+ ["PRIMARY"]: ChipVariant.SECONDARY,
156
+ ["SECONDARY"]: ChipVariant.PRIMARY,
157
+ ["TERTIARY"]: ChipVariant.SECONDARY
158
+ };
159
+ /** The `Field` a TagInput renders for its own `label` / `error` uses the same rung. */
160
+ var TAG_INPUT_SIZE_TO_FIELD_SIZE_MAP = {
161
+ ["X_SMALL"]: FieldSize.X_SMALL,
162
+ ["SMALL"]: FieldSize.SMALL,
163
+ ["MEDIUM"]: FieldSize.MEDIUM,
164
+ ["LARGE"]: FieldSize.LARGE,
165
+ ["X_LARGE"]: FieldSize.X_LARGE
166
+ };
167
+ /** Splits `text` at every character in `separators`. */
168
+ function splitOn(text, separators) {
169
+ const segments = [];
170
+ let current = "";
171
+ for (const character of text) if (separators.includes(character)) {
172
+ segments.push(current);
173
+ current = "";
174
+ } else current += character;
175
+ segments.push(current);
176
+ return segments;
177
+ }
178
+ /** "No tags", "1 tag", "3 tags", "3 tags, 1 invalid". */
179
+ function countText(count, invalidCount) {
180
+ const tags = count === 0 ? "No tags" : count === 1 ? "1 tag" : `${count} tags`;
181
+ return invalidCount > 0 ? `${tags}, ${invalidCount} invalid` : tags;
182
+ }
183
+ /** The frame, its chips and the text input, wired to the nearest Field (the input's own or the app's). */
184
+ function TagFrame({ tagProps, forwardedRef, isRoot }) {
185
+ const { value, defaultValue = [], onChange, separators = TAG_INPUT_DEFAULT_SEPARATORS, isTagInvalid, size = "MEDIUM", variant = "PRIMARY", isGhost = false, label: _label, placeholder, error, isError = false, isDisabled = false, isReadOnly = false, isRequired = false, fillWidth = false, ariaLabel, onBlur, id, "aria-describedby": ariaDescribedBy, className, style, ...rest } = tagProps;
186
+ const wiring = useFieldWiring({
187
+ id,
188
+ ariaLabel,
189
+ ariaLabelAttribute: rest["aria-label"],
190
+ ariaLabelledBy: rest["aria-labelledby"],
191
+ ariaDescribedBy,
192
+ describedByIds: (controlId) => [`${controlId}-count`],
193
+ error,
194
+ isError,
195
+ isRequired
196
+ });
197
+ const { controlId: inputId, describedBy, isRequired: isRequiredState, hasName } = wiring;
198
+ const countId = `${inputId}-count`;
199
+ const innerRef = useRef(null);
200
+ const mergedRef = useMergeRefs([innerRef, forwardedRef]);
201
+ const [tags, setTags] = useControlledState({
202
+ value,
203
+ defaultValue,
204
+ onChange
205
+ });
206
+ const tagsRef = useRef(tags);
207
+ tagsRef.current = tags;
208
+ const [draft, setDraft] = useState("");
209
+ const [announcement, setAnnouncement] = useState("");
210
+ const canEdit = !isDisabled && !isReadOnly;
211
+ const invalidCount = isTagInvalid === void 0 ? 0 : tags.filter(isTagInvalid).length;
212
+ const isInvalid = wiring.isInvalid || invalidCount > 0;
213
+ const chipSize = TAG_INPUT_SIZE_TO_CHIP_SIZE_MAP[size];
214
+ const chipVariant = isGhost ? ChipVariant.SECONDARY : TAG_INPUT_VARIANT_TO_CHIP_VARIANT_MAP[variant];
215
+ /** Sets the live region; a repeat of the same message is made distinct so it is read again. */
216
+ const announce = (message) => {
217
+ setAnnouncement((previous) => previous === message ? `${message} ` : message);
218
+ };
219
+ /** Trims, drops empty entries and duplicates, appends the rest, and calls `onChange` once. */
220
+ const commit = (entries) => {
221
+ const next = [...tagsRef.current];
222
+ const added = [];
223
+ const duplicates = [];
224
+ for (const entry of entries) {
225
+ const tag = entry.trim();
226
+ if (tag === "") continue;
227
+ if (next.includes(tag)) {
228
+ duplicates.push(tag);
229
+ continue;
230
+ }
231
+ next.push(tag);
232
+ added.push(tag);
233
+ }
234
+ const messages = [];
235
+ if (added.length === 1) messages.push(`Added ${added[0]}`);
236
+ else if (added.length > 1) messages.push(`Added ${added.length} tags`);
237
+ if (duplicates.length > 0) messages.push(`${duplicates[0]} is already added`);
238
+ if (messages.length > 0) announce(messages.join(". "));
239
+ if (added.length === 0) return;
240
+ tagsRef.current = next;
241
+ setTags(next);
242
+ };
243
+ /** Removes the tag at `index` and announces it. */
244
+ const remove = (index) => {
245
+ const current = tagsRef.current;
246
+ const tag = current[index];
247
+ if (tag === void 0) return;
248
+ const next = current.filter((_, position) => position !== index);
249
+ tagsRef.current = next;
250
+ setTags(next);
251
+ announce(`Removed ${tag}`);
252
+ };
253
+ /** New draft text: every complete segment before the last separator commits; the rest stays. */
254
+ const applyDraft = (text) => {
255
+ const segments = splitOn(text, separators);
256
+ if (segments.length === 1) {
257
+ setDraft(text);
258
+ return;
259
+ }
260
+ const rest = segments.pop() ?? "";
261
+ commit(segments);
262
+ setDraft(rest);
263
+ };
264
+ const handleChange = (event) => {
265
+ if (!canEdit) return;
266
+ if (event.nativeEvent.isComposing) {
267
+ setDraft(event.target.value);
268
+ return;
269
+ }
270
+ applyDraft(event.target.value);
271
+ };
272
+ const handleCompositionEnd = (event) => {
273
+ if (!canEdit) return;
274
+ applyDraft(event.currentTarget.value);
275
+ };
276
+ const handleKeyDown = (event) => {
277
+ if (event.nativeEvent.isComposing || !canEdit) return;
278
+ if (event.key === "Enter") {
279
+ if (draft.trim() === "") return;
280
+ event.preventDefault();
281
+ commit([draft]);
282
+ setDraft("");
283
+ return;
284
+ }
285
+ if (event.key === "Backspace") {
286
+ const input = event.currentTarget;
287
+ const isAtStart = input.selectionStart === 0 && input.selectionEnd === 0;
288
+ if (draft !== "" || !isAtStart || tagsRef.current.length === 0) return;
289
+ event.preventDefault();
290
+ remove(tagsRef.current.length - 1);
291
+ }
292
+ };
293
+ const handlePaste = (event) => {
294
+ if (!canEdit) return;
295
+ const pasted = event.clipboardData.getData("text");
296
+ const splitters = [...separators, ...TAG_INPUT_PASTE_SEPARATORS];
297
+ if (![...pasted].some((character) => splitters.includes(character))) return;
298
+ event.preventDefault();
299
+ const input = event.currentTarget;
300
+ const start = input.selectionStart ?? draft.length;
301
+ const end = input.selectionEnd ?? start;
302
+ commit(splitOn(draft.slice(0, start) + pasted + draft.slice(end), splitters));
303
+ setDraft("");
304
+ };
305
+ const handleBlur = (event) => {
306
+ if (canEdit && draft !== "") {
307
+ commit([draft]);
308
+ setDraft("");
309
+ }
310
+ onBlur?.(event);
311
+ };
312
+ /** A press on empty space or a chip's label focuses the text input; × buttons keep their press. */
313
+ const handleMouseDown = (event) => {
314
+ if (isDisabled || event.button !== 0) return;
315
+ const target = event.target;
316
+ if (target === innerRef.current || target.closest("button") !== null) return;
317
+ event.preventDefault();
318
+ innerRef.current?.focus();
319
+ };
320
+ useDevWarning(!hasName, "[@galaxy-io/dls] TagInput has no accessible name. Pass `label`, wrap it in a labelled `Field`, or set `ariaLabel`. `placeholder` is not a name.");
321
+ const isEmpty = tags.length === 0;
322
+ const showsPlaceholder = isEmpty && !isReadOnly;
323
+ return /* @__PURE__ */ jsxs(Frame, {
324
+ onMouseDown: handleMouseDown,
325
+ className: cx(TAG_INPUT_SIZE_TO_CSS_MAP[size], isGhost ? GHOST_CSS : TAG_INPUT_VARIANT_TO_CSS_MAP[variant], canEdit && !isInvalid && (isGhost ? GHOST_HOVER_CSS : TAG_INPUT_VARIANT_TO_HOVER_CSS_MAP[variant]), isInvalid && !isDisabled && ERROR_CSS, isDisabled && DISABLED_CSS, fillWidth && FILL_WIDTH_CSS, isRoot ? className : void 0),
326
+ ...rootStyle(isRoot, style),
327
+ children: [
328
+ tags.map((tag, index) => {
329
+ const isTagInError = isTagInvalid?.(tag) === true;
330
+ return /* @__PURE__ */ jsx(TagItem, { children: /* @__PURE__ */ jsx(Chip, {
331
+ label: tag,
332
+ size: chipSize,
333
+ variant: isTagInError ? ChipVariant.ERROR : chipVariant,
334
+ isDisabled,
335
+ ...canEdit ? { onDismiss: () => {
336
+ remove(index);
337
+ innerRef.current?.focus();
338
+ } } : {},
339
+ ...isTagInError ? { ariaLabel: `${tag} (invalid)` } : {}
340
+ }) }, tag);
341
+ }),
342
+ /* @__PURE__ */ jsx(Draft, {
343
+ ...rest,
344
+ ref: mergedRef,
345
+ id: inputId,
346
+ type: "text",
347
+ value: draft,
348
+ onChange: handleChange,
349
+ onCompositionEnd: handleCompositionEnd,
350
+ onKeyDown: handleKeyDown,
351
+ onPaste: handlePaste,
352
+ onBlur: handleBlur,
353
+ placeholder: showsPlaceholder ? placeholder : void 0,
354
+ disabled: isDisabled,
355
+ readOnly: isReadOnly,
356
+ autoComplete: "off",
357
+ autoCorrect: "off",
358
+ autoCapitalize: "off",
359
+ spellCheck: false,
360
+ "aria-label": ariaLabel ?? rest["aria-label"],
361
+ "aria-describedby": describedBy,
362
+ "aria-invalid": isInvalid ? true : void 0,
363
+ "aria-required": isRequiredState ? true : void 0,
364
+ className: cx(isEmpty && EMPTY_DRAFT_CSS)
365
+ }),
366
+ /* @__PURE__ */ jsx(VisuallyHidden, {
367
+ id: countId,
368
+ children: countText(tags.length, invalidCount)
369
+ }),
370
+ /* @__PURE__ */ jsx(StatusRegion, {
371
+ role: "status",
372
+ "aria-live": "polite",
373
+ children: announcement
374
+ })
375
+ ]
376
+ });
377
+ }
378
+ /** A field of free-form tags: type and press Enter or a separator, paste a list, remove with × or Backspace. */
379
+ var TagInput = forwardRef(function TagInput(props, ref) {
380
+ const { label, error, isRequired = false, size = "MEDIUM", fillWidth = false, id, className, style } = props;
381
+ const ownField = useOwnField({
382
+ componentName: "TagInput",
383
+ label,
384
+ error,
385
+ isRequired,
386
+ size: TAG_INPUT_SIZE_TO_FIELD_SIZE_MAP[size],
387
+ id,
388
+ className,
389
+ style,
390
+ rootClassName: fillWidth && FILL_WIDTH_CSS
391
+ });
392
+ if (ownField !== null) return /* @__PURE__ */ jsx(Field, {
393
+ ...ownField,
394
+ children: /* @__PURE__ */ jsx(TagFrame, {
395
+ tagProps: props,
396
+ forwardedRef: ref,
397
+ isRoot: false
398
+ })
399
+ });
400
+ return /* @__PURE__ */ jsx(TagFrame, {
401
+ tagProps: props,
402
+ forwardedRef: ref,
403
+ isRoot: true
404
+ });
405
+ });
406
+ TagInput.displayName = "TagInput";
407
+ //#endregion
408
+ export { TagInputSize, TagInputVariant, TagInput as default };
@@ -1,51 +1,153 @@
1
- import { InputSize, InputVariant } from "./Input";
2
- export interface TextAreaInputProps {
3
- /** Controlled value. */
1
+ import { type AriaAttributes, type CSSProperties, type TextareaHTMLAttributes } from "react";
2
+ import { FontFamily } from "../theme/enums.js";
3
+ /** Canonical rungs; TextAreaInput supports all five. The rung sets the text step, the padding and the height of one row. */
4
+ export declare enum TextAreaInputSize {
5
+ /** Caption text, 12px rows, 20px one-row field. */
6
+ X_SMALL = "X_SMALL",
7
+ /** body_sm text, 16px rows, 24px one-row field. */
8
+ SMALL = "SMALL",
9
+ /** body_md text, 16px rows, 32px one-row field. The default. */
10
+ MEDIUM = "MEDIUM",
11
+ /** body_lg text, 20px rows, 36px one-row field. */
12
+ LARGE = "LARGE",
13
+ /** body_lg text, 20px rows, 40px one-row field. */
14
+ X_LARGE = "X_LARGE"
15
+ }
16
+ /** Resting fill of the field (Constitution V-A surface set; the 1.x `InputVariant` members, unchanged). */
17
+ export declare enum TextAreaInputVariant {
18
+ /** `background.base` fill. */
19
+ BASE = "BASE",
20
+ /** `background.primary` fill. The default. */
21
+ PRIMARY = "PRIMARY",
22
+ /** `background.secondary` fill. */
23
+ SECONDARY = "SECONDARY",
24
+ /** `background.tertiary` fill. */
25
+ TERTIARY = "TERTIARY"
26
+ }
27
+ /** The families a field's value may use (serif has no UI steps). */
28
+ type TextAreaInputFamily = FontFamily.SANS | FontFamily.MONO;
29
+ /** Native `<textarea>` attributes, typed as React types them. */
30
+ type NativeTextAreaAttributes = TextareaHTMLAttributes<HTMLTextAreaElement>;
31
+ /** The native passthrough allowlist, each documented. */
32
+ interface TextAreaInputNativeProps {
33
+ /** Form field name, passed to the `<textarea>`. */
34
+ name?: NativeTextAreaAttributes["name"];
35
+ /**
36
+ * Browser autofill hint.
37
+ * @default "off"
38
+ */
39
+ autoComplete?: NativeTextAreaAttributes["autoComplete"];
40
+ /** Focus the textarea on mount. */
41
+ autoFocus?: NativeTextAreaAttributes["autoFocus"];
42
+ /** Hard cap on the value's length. Shows no message; for a counter, use `Field`. */
43
+ maxLength?: NativeTextAreaAttributes["maxLength"];
44
+ /** Browser spell checking. Left to the browser unless set. */
45
+ spellCheck?: NativeTextAreaAttributes["spellCheck"];
46
+ /** Focus handler on the `<textarea>`. */
47
+ onFocus?: NativeTextAreaAttributes["onFocus"];
48
+ /** Blur handler on the `<textarea>`. */
49
+ onBlur?: NativeTextAreaAttributes["onBlur"];
50
+ /** Key-down handler on the `<textarea>`. Use it for ⌘/Ctrl+Enter submit. */
51
+ onKeyDown?: NativeTextAreaAttributes["onKeyDown"];
52
+ }
53
+ export interface TextAreaInputProps extends AriaAttributes, TextAreaInputNativeProps {
54
+ /** Controlled value. Pass it with `onChange`. */
4
55
  value?: string;
5
- onChange: (value: string) => void;
6
- /** Field surface color. @default InputVariant.PRIMARY */
7
- variant?: InputVariant;
8
- /** @default InputSize.MEDIUM */
9
- size?: InputSize;
10
- /** Visible rows before scrolling. @default 3 */
11
- lines?: number;
12
- placeholder?: string;
56
+ /**
57
+ * Initial value while uncontrolled.
58
+ * @default ""
59
+ */
60
+ defaultValue?: string;
61
+ /** Called with the new string on every edit. */
62
+ onChange?: (value: string) => void;
63
+ /**
64
+ * Control rung. Sets the text step and padding; one row is exactly 20 / 24 / 32 / 36 / 40px tall.
65
+ * @default TextAreaInputSize.MEDIUM
66
+ */
67
+ size?: TextAreaInputSize;
68
+ /**
69
+ * Resting fill, from the surface set. Ignored with `isGhost`.
70
+ * @default TextAreaInputVariant.PRIMARY
71
+ */
72
+ variant?: TextAreaInputVariant;
73
+ /**
74
+ * Ghost field: no fill and no hairline at rest; the frame appears on hover and focus (1.x
75
+ * `noBorder`). For inline editing (a comment, a description) inside a surface that frames it.
76
+ * @default false
77
+ */
78
+ isGhost?: boolean;
79
+ /** Label above the field, rendered through `Field`. For a description, a label tooltip, a counter or a horizontal layout, wrap the field in `Field` instead. */
13
80
  label?: string;
14
- /** Adds an info icon beside the label with this content on hover. */
15
- labelTooltip?: string | React.ReactNode;
16
- /** Message under the field; also switches the border to the error color. */
81
+ /** Hint shown while the value is empty. It is never the label. */
82
+ placeholder?: string;
83
+ /** Message from the app, shown under the field through `Field`. It also turns the border red and sets `aria-invalid`. */
17
84
  error?: string;
18
- /** Appends the red required asterisk. Note: `required`, not `isRequired`. */
19
- required?: boolean;
20
- /** Note: `disabled`, not `isDisabled` — this input predates the `is` convention. */
21
- disabled?: boolean;
22
- autoFocus?: boolean;
23
- /** Character-count bounds, validated on blur. Not a numeric range. */
24
- min?: number;
25
- max?: number;
26
- onFocus?: (e: React.FocusEvent<HTMLTextAreaElement>) => void;
27
- onBlur?: (e: React.FocusEvent<HTMLTextAreaElement>) => void;
28
- onKeyDown?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;
29
- /** A number is px. */
30
- width?: number | string;
31
- /** A number is px. Overrides the height implied by `lines`. */
32
- height?: number | string;
33
- fillWidth?: boolean;
34
- /** Grow to the parent's height. Pairs with a flex parent. */
35
- fillHeight?: boolean;
36
- /** Drop the hairline border. */
37
- noBorder?: boolean;
38
- /** Collapse the inset to 0. */
39
- noPadding?: boolean;
40
- /** Swap the field for a shimmer placeholder. */
85
+ /**
86
+ * Error border and `aria-invalid` without a message. `error` implies it.
87
+ * @default false
88
+ */
89
+ isError?: boolean;
90
+ /**
91
+ * Rows of text the field shows when empty, and its minimum height. Floored; values below 1 render 1.
92
+ * @default 3
93
+ */
94
+ minRows?: number;
95
+ /** With `isAutoGrow` or `isResizable`: the most rows the field grows to before it scrolls. Values below `minRows` are raised to `minRows`. No limit when unset. */
96
+ maxRows?: number;
97
+ /**
98
+ * The height follows the content, from `minRows` up to `maxRows`, then the field scrolls.
99
+ * @default false
100
+ */
101
+ isAutoGrow?: boolean;
102
+ /**
103
+ * The user can drag the bottom edge to change the height, between `minRows` and `maxRows`. Ignored with `isAutoGrow`.
104
+ * @default false
105
+ */
106
+ isResizable?: boolean;
107
+ /**
108
+ * The content is not ready: the field keeps its size, hides its text, shows a two-line skeleton and cannot be edited.
109
+ * @default false
110
+ */
41
111
  isLoading?: boolean;
112
+ /**
113
+ * Not focusable or editable. Shows the disabled look.
114
+ * @default false
115
+ */
116
+ isDisabled?: boolean;
117
+ /**
118
+ * Focusable, selectable and scrollable, but not editable. No hover change and no resize handle.
119
+ * @default false
120
+ */
121
+ isReadOnly?: boolean;
122
+ /**
123
+ * Required marker on the `label` (via `Field`) and `aria-required`. It does no validation.
124
+ * @default false
125
+ */
126
+ isRequired?: boolean;
127
+ /**
128
+ * Type family of the value and the placeholder. Use mono for pasted keys, JSON or SQL snippets that are not edited as code.
129
+ * @default FontFamily.SANS
130
+ */
131
+ family?: TextAreaInputFamily;
132
+ /**
133
+ * Stretch to the parent's width. Without it, the field is about 20 characters wide.
134
+ * @default false
135
+ */
136
+ fillWidth?: boolean;
137
+ /** Accessible name when there is no visible label (no `label` and no wrapping `Field`). */
138
+ ariaLabel?: string;
139
+ /**
140
+ * DOM id of the `<textarea>`. A wrapping `Field`'s id wins.
141
+ * @default useId()
142
+ */
143
+ id?: string;
144
+ /** Any `data-*` attribute, forwarded to the `<textarea>`. */
145
+ [dataAttribute: `data-${string}`]: string | number | boolean | undefined;
146
+ /** Extra class on the root: the `Field` wrapper when TextAreaInput renders one, otherwise the field's own root. */
147
+ className?: string;
148
+ /** Inline style on the root; only for setting CSS custom properties. */
149
+ style?: CSSProperties;
42
150
  }
43
- /**
44
- * A multi-line text field. Not resizable by the user — size it with `lines`,
45
- * `height`, or `fillHeight`.
46
- *
47
- * Note this one takes `required`/`disabled` rather than the `isRequired`/
48
- * `isDisabled` the other inputs use.
49
- */
151
+ /** The multi-line text field, sized in rows, with optional auto-grow and a vertical resize handle. */
50
152
  declare const TextAreaInput: import("react").ForwardRefExoticComponent<TextAreaInputProps & import("react").RefAttributes<HTMLTextAreaElement>>;
51
153
  export default TextAreaInput;