@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,120 @@
1
+ /**
2
+ * Edits a short list of string pairs: HTTP headers for a connector, environment variables for a
3
+ * job, query parameters, metadata labels. Each pair is a row of two mono `TextInput`s (key, value)
4
+ * and a remove button; an "Add" button under the rows appends an empty pair and focuses its key.
5
+ * Pasting several `KEY=value` lines into a key field (a copied `.env` block) fills one row per
6
+ * line. The value is the list of pairs, with `value` / `defaultValue` / `onChange`; every
7
+ * keystroke reports the whole next list.
8
+ *
9
+ * A standalone KeyValueInput with `label` or `error` renders a `Field` around itself; inside a
10
+ * Field the group takes the Field's id and label, and the inner fields are shielded from the
11
+ * Field's context (each gets the description, error and disabled state explicitly). It never
12
+ * validates: duplicate or empty keys are the app's `error`. No 1.x equivalent.
13
+ *
14
+ * SSR: ids come from `useId`; focus moves run in an effect; nothing touches `window` or
15
+ * `document` at module scope.
16
+ */
17
+ import { type AriaAttributes, type CSSProperties } from "react";
18
+ /** Canonical rungs; KeyValueInput supports all five. Every field and button in it uses the rung. */
19
+ export declare enum KeyValueInputSize {
20
+ /** 20px rows, 4px gaps. */
21
+ X_SMALL = "X_SMALL",
22
+ /** 24px rows, 4px gaps. */
23
+ SMALL = "SMALL",
24
+ /** 32px rows, 8px gaps. The default. */
25
+ MEDIUM = "MEDIUM",
26
+ /** 36px rows, 8px gaps. */
27
+ LARGE = "LARGE",
28
+ /** 40px rows, 8px gaps. */
29
+ X_LARGE = "X_LARGE"
30
+ }
31
+ /** Resting fill of every field (Constitution V-A surface set; the 1.x `InputVariant` members). */
32
+ export declare enum KeyValueInputVariant {
33
+ /** `background.base` fill. */
34
+ BASE = "BASE",
35
+ /** `background.primary` fill. The default. */
36
+ PRIMARY = "PRIMARY",
37
+ /** `background.secondary` fill. */
38
+ SECONDARY = "SECONDARY",
39
+ /** `background.tertiary` fill. */
40
+ TERTIARY = "TERTIARY"
41
+ }
42
+ /** One row. Both strings may be empty while the user is typing. */
43
+ export interface KeyValueInputPair {
44
+ /** The name: a header, a variable, a parameter. */
45
+ key: string;
46
+ /** The value for that key. */
47
+ value: string;
48
+ }
49
+ export interface KeyValueInputProps extends AriaAttributes {
50
+ /** Controlled rows, in display order. Pass it with `onChange`. */
51
+ value?: KeyValueInputPair[];
52
+ /**
53
+ * Initial rows while uncontrolled.
54
+ * @default []
55
+ */
56
+ defaultValue?: KeyValueInputPair[];
57
+ /** Called with the whole next list on every edit, add, remove and paste. */
58
+ onChange?: (value: KeyValueInputPair[]) => void;
59
+ /**
60
+ * Control rung of every field and button: 20 / 24 / 32 / 36 / 40px rows.
61
+ * @default KeyValueInputSize.MEDIUM
62
+ */
63
+ size?: KeyValueInputSize;
64
+ /**
65
+ * Resting fill of every field, from the surface set. Ignored with `isGhost`.
66
+ * @default KeyValueInputVariant.PRIMARY
67
+ */
68
+ variant?: KeyValueInputVariant;
69
+ /**
70
+ * Ghost fields (1.x `TRANSPARENT`): every key and value field shows no fill and no hairline until
71
+ * hover or focus (Input's `isGhost`).
72
+ * @default false
73
+ */
74
+ isGhost?: boolean;
75
+ /** Label above the rows, rendered through `Field`. For a description or a horizontal layout, wrap it in `Field` instead. */
76
+ label?: string;
77
+ /** Message from the app ("Header names must be unique"), shown under the rows through `Field`. It also marks every field invalid. */
78
+ error?: string;
79
+ /**
80
+ * Error borders and `aria-invalid` on every field, without a message. `error` implies it.
81
+ * @default false
82
+ */
83
+ isError?: boolean;
84
+ /**
85
+ * No field, remove button or add button can be used. Shows the disabled look.
86
+ * @default false
87
+ */
88
+ isDisabled?: boolean;
89
+ /**
90
+ * Fields are focusable and selectable but not editable; no remove or add buttons.
91
+ * @default false
92
+ */
93
+ isReadOnly?: boolean;
94
+ /**
95
+ * Required marker on the `label` (via `Field`). It does no validation.
96
+ * @default false
97
+ */
98
+ isRequired?: boolean;
99
+ /**
100
+ * Stretch to the parent's width. Without it, the control is 400px wide.
101
+ * @default false
102
+ */
103
+ fillWidth?: boolean;
104
+ /** Accessible name of the group when there is no visible label (no `label` and no wrapping `Field`). */
105
+ ariaLabel?: string;
106
+ /**
107
+ * DOM id of the group. A wrapping `Field`'s id wins.
108
+ * @default useId()
109
+ */
110
+ id?: string;
111
+ /** Any `data-*` attribute, forwarded to the group root. */
112
+ [dataAttribute: `data-${string}`]: string | number | boolean | undefined;
113
+ /** Extra class on the root: the `Field` wrapper when KeyValueInput renders one, otherwise the group. */
114
+ className?: string;
115
+ /** Inline style on the root; only for setting CSS custom properties. */
116
+ style?: CSSProperties;
117
+ }
118
+ /** Editable key/value rows (headers, environment variables) with add, remove and `.env` paste. */
119
+ declare const KeyValueInput: import("react").ForwardRefExoticComponent<KeyValueInputProps & import("react").RefAttributes<HTMLDivElement>>;
120
+ export default KeyValueInput;
@@ -0,0 +1,383 @@
1
+ import { FontFamily } from "../theme/enums.js";
2
+ import { useControlledState } from "../hooks/useControlledState.js";
3
+ import Button, { ButtonSize, ButtonVariant } from "../buttons/Button.js";
4
+ import { useDevWarning } from "./internal/devWarn.js";
5
+ import { FieldContext } from "../hooks/useField.js";
6
+ import { isFilled } from "./internal/predicates.js";
7
+ import { useFieldWiring } from "./internal/fieldWiring.js";
8
+ import Field, { FieldSize } from "./Field.js";
9
+ import { rootStyle, useOwnField } from "./internal/ownField.js";
10
+ import { InputSize, InputVariant } from "./Input.js";
11
+ import TextInput from "./TextInput.js";
12
+ /* empty css */
13
+ import { styled } from "@linaria/react";
14
+ import { forwardRef, useEffect, useRef, useState } from "react";
15
+ import { jsx, jsxs } from "react/jsx-runtime";
16
+ import { cx } from "@linaria/core";
17
+ import { PlusIcon, TrashIcon } from "@phosphor-icons/react";
18
+ //#region src/inputs/KeyValueInput.tsx
19
+ /**
20
+ * Edits a short list of string pairs: HTTP headers for a connector, environment variables for a
21
+ * job, query parameters, metadata labels. Each pair is a row of two mono `TextInput`s (key, value)
22
+ * and a remove button; an "Add" button under the rows appends an empty pair and focuses its key.
23
+ * Pasting several `KEY=value` lines into a key field (a copied `.env` block) fills one row per
24
+ * line. The value is the list of pairs, with `value` / `defaultValue` / `onChange`; every
25
+ * keystroke reports the whole next list.
26
+ *
27
+ * A standalone KeyValueInput with `label` or `error` renders a `Field` around itself; inside a
28
+ * Field the group takes the Field's id and label, and the inner fields are shielded from the
29
+ * Field's context (each gets the description, error and disabled state explicitly). It never
30
+ * validates: duplicate or empty keys are the app's `error`. No 1.x equivalent.
31
+ *
32
+ * SSR: ids come from `useId`; focus moves run in an effect; nothing touches `window` or
33
+ * `document` at module scope.
34
+ */
35
+ /** Canonical rungs; KeyValueInput supports all five. Every field and button in it uses the rung. */
36
+ var KeyValueInputSize = /* @__PURE__ */ function(KeyValueInputSize) {
37
+ /** 20px rows, 4px gaps. */
38
+ KeyValueInputSize["X_SMALL"] = "X_SMALL";
39
+ /** 24px rows, 4px gaps. */
40
+ KeyValueInputSize["SMALL"] = "SMALL";
41
+ /** 32px rows, 8px gaps. The default. */
42
+ KeyValueInputSize["MEDIUM"] = "MEDIUM";
43
+ /** 36px rows, 8px gaps. */
44
+ KeyValueInputSize["LARGE"] = "LARGE";
45
+ /** 40px rows, 8px gaps. */
46
+ KeyValueInputSize["X_LARGE"] = "X_LARGE";
47
+ return KeyValueInputSize;
48
+ }({});
49
+ /** Resting fill of every field (Constitution V-A surface set; the 1.x `InputVariant` members). */
50
+ var KeyValueInputVariant = /* @__PURE__ */ function(KeyValueInputVariant) {
51
+ /** `background.base` fill. */
52
+ KeyValueInputVariant["BASE"] = "BASE";
53
+ /** `background.primary` fill. The default. */
54
+ KeyValueInputVariant["PRIMARY"] = "PRIMARY";
55
+ /** `background.secondary` fill. */
56
+ KeyValueInputVariant["SECONDARY"] = "SECONDARY";
57
+ /** `background.tertiary` fill. */
58
+ KeyValueInputVariant["TERTIARY"] = "TERTIARY";
59
+ return KeyValueInputVariant;
60
+ }({});
61
+ /** The control's width without `fillWidth`: two fields of about the SelectInput width. */
62
+ /** The group: the rows, then the add button, then the live region. */
63
+ var Group = /*#__PURE__*/ styled("div")({
64
+ name: "Group",
65
+ class: "gx-KeyValueInput-Group-gofpoog",
66
+ propsAsIs: false
67
+ });
68
+ /** The rows, stretched to the group's width. */
69
+ var Rows = /*#__PURE__*/ styled("div")({
70
+ name: "Rows",
71
+ class: "gx-KeyValueInput-Rows-r1t1496n",
72
+ propsAsIs: false
73
+ });
74
+ /** One pair: key, value (twice the key's width) and the remove button, aligned across rows. */
75
+ var Row = /*#__PURE__*/ styled("div")({
76
+ name: "Row",
77
+ class: "gx-KeyValueInput-Row-rgbwsrt",
78
+ propsAsIs: false
79
+ });
80
+ /** Holds the key field and listens for a pasted `.env` block (TextInput takes no `onPaste`). */
81
+ var KeyCell = /*#__PURE__*/ styled("div")({
82
+ name: "KeyCell",
83
+ class: "gx-KeyValueInput-KeyCell-kiabogb",
84
+ propsAsIs: false
85
+ });
86
+ /** The polite live region for added and removed rows (`VisuallyHidden` takes no `role`). */
87
+ var StatusRegion = /*#__PURE__*/ styled("span")({
88
+ name: "StatusRegion",
89
+ class: "gx-KeyValueInput-StatusRegion-s1j4nof2",
90
+ propsAsIs: false
91
+ });
92
+ /** One gap per rung, for the rows, the columns and the space before the add button. */
93
+ var KEY_VALUE_INPUT_SIZE_TO_CSS_MAP = {
94
+ ["X_SMALL"]: "gx-KeyValueInput-X_SMALL-x14q2aim",
95
+ ["SMALL"]: "gx-KeyValueInput-SMALL-s1iblfrp",
96
+ ["MEDIUM"]: "gx-KeyValueInput-MEDIUM-mcvz0me",
97
+ ["LARGE"]: "gx-KeyValueInput-LARGE-lxtgl47",
98
+ ["X_LARGE"]: "gx-KeyValueInput-X_LARGE-x1mu5zsx"
99
+ };
100
+ /** Read-only rows have no remove button, so the third column goes. */
101
+ var READ_ONLY_ROW_CSS = "gx-KeyValueInput-READ_ONLY_ROW_CSS-r1lp7xxb";
102
+ /** Stretch to the parent's width (the group, and the `Field` wrapper when there is one). */
103
+ var FILL_WIDTH_CSS = "gx-KeyValueInput-FILL_WIDTH_CSS-flbjeuq";
104
+ /** The fields' rung (identity). */
105
+ var KEY_VALUE_INPUT_SIZE_TO_INPUT_SIZE_MAP = {
106
+ ["X_SMALL"]: InputSize.X_SMALL,
107
+ ["SMALL"]: InputSize.SMALL,
108
+ ["MEDIUM"]: InputSize.MEDIUM,
109
+ ["LARGE"]: InputSize.LARGE,
110
+ ["X_LARGE"]: InputSize.X_LARGE
111
+ };
112
+ /** The fields' fill (identity). */
113
+ var KEY_VALUE_INPUT_VARIANT_TO_INPUT_VARIANT_MAP = {
114
+ ["BASE"]: InputVariant.BASE,
115
+ ["PRIMARY"]: InputVariant.PRIMARY,
116
+ ["SECONDARY"]: InputVariant.SECONDARY,
117
+ ["TERTIARY"]: InputVariant.TERTIARY
118
+ };
119
+ /** The remove and add buttons' rung (identity): the icon-only square is as tall as the fields. */
120
+ var KEY_VALUE_INPUT_SIZE_TO_BUTTON_SIZE_MAP = {
121
+ ["X_SMALL"]: ButtonSize.X_SMALL,
122
+ ["SMALL"]: ButtonSize.SMALL,
123
+ ["MEDIUM"]: ButtonSize.MEDIUM,
124
+ ["LARGE"]: ButtonSize.LARGE,
125
+ ["X_LARGE"]: ButtonSize.X_LARGE
126
+ };
127
+ /** The `Field` a KeyValueInput renders for its own `label` / `error` uses the same rung. */
128
+ var KEY_VALUE_INPUT_SIZE_TO_FIELD_SIZE_MAP = {
129
+ ["X_SMALL"]: FieldSize.X_SMALL,
130
+ ["SMALL"]: FieldSize.SMALL,
131
+ ["MEDIUM"]: FieldSize.MEDIUM,
132
+ ["LARGE"]: FieldSize.LARGE,
133
+ ["X_LARGE"]: FieldSize.X_LARGE
134
+ };
135
+ /** Removes one pair of matching surrounding quotes (`"…"` or `'…'`). */
136
+ function unquote(text) {
137
+ if (text.length >= 2) {
138
+ const first = text[0];
139
+ if ((first === "\"" || first === "'") && text.endsWith(first)) return text.slice(1, -1);
140
+ }
141
+ return text;
142
+ }
143
+ /**
144
+ * Parses pasted `.env`-style lines: blank lines and `#` comments are skipped, a leading `export `
145
+ * is dropped, and each line splits at its first `=` (a line without one is a key with an empty
146
+ * value). Not a dotenv implementation.
147
+ */
148
+ function parseLines(text) {
149
+ const pairs = [];
150
+ for (const rawLine of text.split(/\r\n|\r|\n/)) {
151
+ let line = rawLine.trim();
152
+ if (line === "" || line.startsWith("#")) continue;
153
+ if (line.startsWith("export ")) line = line.slice(7).trim();
154
+ const separator = line.indexOf("=");
155
+ if (separator === -1) {
156
+ pairs.push({
157
+ key: line,
158
+ value: ""
159
+ });
160
+ continue;
161
+ }
162
+ pairs.push({
163
+ key: line.slice(0, separator).trim(),
164
+ value: unquote(line.slice(separator + 1).trim())
165
+ });
166
+ }
167
+ return pairs;
168
+ }
169
+ /** The group, its rows and the add button, wired to the nearest Field (the input's own or the app's). */
170
+ function KeyValueGroup({ keyValueProps, forwardedRef, isRoot }) {
171
+ const { value, defaultValue = [], onChange, size = "MEDIUM", variant = "PRIMARY", isGhost = false, label: _label, error, isError = false, isDisabled = false, isReadOnly = false, isRequired = false, fillWidth = false, ariaLabel, id, "aria-describedby": ariaDescribedBy, className, style, ...rest } = keyValueProps;
172
+ const { field, controlId: groupId, describedBy: fieldDescribedBy, isInvalid, hasName } = useFieldWiring({
173
+ id,
174
+ ariaLabel,
175
+ ariaLabelAttribute: rest["aria-label"],
176
+ ariaLabelledBy: rest["aria-labelledby"],
177
+ ariaDescribedBy,
178
+ error,
179
+ isError,
180
+ isRequired
181
+ });
182
+ const [pairs, setPairs] = useControlledState({
183
+ value,
184
+ defaultValue,
185
+ onChange
186
+ });
187
+ const pairsRef = useRef(pairs);
188
+ pairsRef.current = pairs;
189
+ const [announcement, setAnnouncement] = useState("");
190
+ const keyRefs = useRef([]);
191
+ const valueRefs = useRef([]);
192
+ const addRef = useRef(null);
193
+ const pendingFocusRef = useRef(null);
194
+ const canEdit = !isDisabled && !isReadOnly;
195
+ const inputSize = KEY_VALUE_INPUT_SIZE_TO_INPUT_SIZE_MAP[size];
196
+ const inputVariant = KEY_VALUE_INPUT_VARIANT_TO_INPUT_VARIANT_MAP[variant];
197
+ const buttonSize = KEY_VALUE_INPUT_SIZE_TO_BUTTON_SIZE_MAP[size];
198
+ /** Sets the live region; a repeat of the same message is made distinct so it is read again. */
199
+ const announce = (message) => {
200
+ setAnnouncement((previous) => previous === message ? `${message} ` : message);
201
+ };
202
+ const commit = (next) => {
203
+ pairsRef.current = next;
204
+ setPairs(next);
205
+ };
206
+ const edit = (index, part, text) => {
207
+ const current = pairsRef.current;
208
+ const pair = current[index];
209
+ if (pair === void 0) return;
210
+ commit(current.map((item, position) => position === index ? {
211
+ ...pair,
212
+ [part]: text
213
+ } : item));
214
+ };
215
+ const add = () => {
216
+ if (!canEdit) return;
217
+ const next = [...pairsRef.current, {
218
+ key: "",
219
+ value: ""
220
+ }];
221
+ pendingFocusRef.current = {
222
+ kind: "key",
223
+ index: next.length - 1
224
+ };
225
+ commit(next);
226
+ announce("Row added");
227
+ };
228
+ const remove = (index) => {
229
+ if (!canEdit) return;
230
+ const next = pairsRef.current.filter((_, position) => position !== index);
231
+ pendingFocusRef.current = index < next.length ? {
232
+ kind: "key",
233
+ index
234
+ } : index > 0 ? {
235
+ kind: "key",
236
+ index: index - 1
237
+ } : { kind: "add" };
238
+ commit(next);
239
+ announce("Row removed");
240
+ };
241
+ /** A paste with a newline or an `=` into a key field fills rows from its lines. */
242
+ const handleKeyPaste = (index) => (event) => {
243
+ if (!canEdit) return;
244
+ const text = event.clipboardData.getData("text");
245
+ if (!/[\r\n=]/.test(text)) return;
246
+ event.preventDefault();
247
+ const parsed = parseLines(text);
248
+ if (parsed.length === 0) return;
249
+ const current = pairsRef.current;
250
+ commit([
251
+ ...current.slice(0, index),
252
+ ...parsed,
253
+ ...current.slice(index + 1)
254
+ ]);
255
+ pendingFocusRef.current = {
256
+ kind: "value",
257
+ index: index + parsed.length - 1
258
+ };
259
+ announce(parsed.length === 1 ? "1 row added" : `${parsed.length} rows added`);
260
+ };
261
+ useEffect(() => {
262
+ const target = pendingFocusRef.current;
263
+ if (target === null) return;
264
+ pendingFocusRef.current = null;
265
+ (target.kind === "add" ? addRef.current : target.kind === "key" ? keyRefs.current[target.index] : valueRefs.current[target.index])?.focus();
266
+ });
267
+ useDevWarning(!hasName, "[@galaxy-io/dls] KeyValueInput has no accessible name. Pass `label`, wrap it in a labelled `Field`, or set `ariaLabel`.");
268
+ const rows = pairs.map((pair, index) => ({
269
+ pair,
270
+ index
271
+ }));
272
+ return /* @__PURE__ */ jsxs(Group, {
273
+ ...field?.labelId === void 0 ? {} : { "aria-labelledby": field.labelId },
274
+ ...rest,
275
+ ref: forwardedRef,
276
+ id: groupId,
277
+ role: "group",
278
+ "aria-label": ariaLabel ?? rest["aria-label"],
279
+ className: cx(KEY_VALUE_INPUT_SIZE_TO_CSS_MAP[size], fillWidth && FILL_WIDTH_CSS, isRoot ? className : void 0),
280
+ ...rootStyle(isRoot, style),
281
+ children: [/* @__PURE__ */ jsxs(FieldContext.Provider, {
282
+ value: null,
283
+ children: [pairs.length > 0 && /* @__PURE__ */ jsx(Rows, { children: rows.map(({ pair, index }) => {
284
+ const rowNumber = index + 1;
285
+ return /* @__PURE__ */ jsxs(Row, {
286
+ className: cx(isReadOnly && READ_ONLY_ROW_CSS),
287
+ children: [
288
+ /* @__PURE__ */ jsx(KeyCell, {
289
+ onPaste: handleKeyPaste(index),
290
+ children: /* @__PURE__ */ jsx(TextInput, {
291
+ ref: (element) => {
292
+ keyRefs.current[index] = element;
293
+ },
294
+ value: pair.key,
295
+ onChange: (text) => edit(index, "key", text),
296
+ size: inputSize,
297
+ variant: inputVariant,
298
+ isGhost,
299
+ family: FontFamily.MONO,
300
+ placeholder: "Key",
301
+ ariaLabel: `Key ${rowNumber}`,
302
+ isError: isInvalid,
303
+ isDisabled,
304
+ isReadOnly,
305
+ fillWidth: true,
306
+ ...fieldDescribedBy === void 0 ? {} : { "aria-describedby": fieldDescribedBy }
307
+ })
308
+ }),
309
+ /* @__PURE__ */ jsx(TextInput, {
310
+ ref: (element) => {
311
+ valueRefs.current[index] = element;
312
+ },
313
+ value: pair.value,
314
+ onChange: (text) => edit(index, "value", text),
315
+ size: inputSize,
316
+ variant: inputVariant,
317
+ isGhost,
318
+ family: FontFamily.MONO,
319
+ placeholder: "Value",
320
+ ariaLabel: `Value ${rowNumber}`,
321
+ isError: isInvalid,
322
+ isDisabled,
323
+ isReadOnly,
324
+ fillWidth: true,
325
+ ...fieldDescribedBy === void 0 ? {} : { "aria-describedby": fieldDescribedBy }
326
+ }),
327
+ !isReadOnly && /* @__PURE__ */ jsx(Button, {
328
+ variant: ButtonVariant.TERTIARY,
329
+ size: buttonSize,
330
+ icon: TrashIcon,
331
+ ariaLabel: isFilled(pair.key) ? `Remove ${pair.key}` : `Remove row ${rowNumber}`,
332
+ isDisabled,
333
+ onClick: () => remove(index)
334
+ })
335
+ ]
336
+ }, index);
337
+ }) }), !isReadOnly && /* @__PURE__ */ jsx(Button, {
338
+ ref: addRef,
339
+ variant: ButtonVariant.TERTIARY,
340
+ size: buttonSize,
341
+ icon: PlusIcon,
342
+ label: "Add",
343
+ isDisabled,
344
+ onClick: add
345
+ })]
346
+ }), /* @__PURE__ */ jsx(StatusRegion, {
347
+ role: "status",
348
+ "aria-live": "polite",
349
+ children: announcement
350
+ })]
351
+ });
352
+ }
353
+ /** Editable key/value rows (headers, environment variables) with add, remove and `.env` paste. */
354
+ var KeyValueInput = forwardRef(function KeyValueInput(props, ref) {
355
+ const { label, error, isRequired = false, size = "MEDIUM", fillWidth = false, id, className, style } = props;
356
+ const ownField = useOwnField({
357
+ componentName: "KeyValueInput",
358
+ label,
359
+ error,
360
+ isRequired,
361
+ size: KEY_VALUE_INPUT_SIZE_TO_FIELD_SIZE_MAP[size],
362
+ id,
363
+ className,
364
+ style,
365
+ rootClassName: fillWidth && FILL_WIDTH_CSS
366
+ });
367
+ if (ownField !== null) return /* @__PURE__ */ jsx(Field, {
368
+ ...ownField,
369
+ children: /* @__PURE__ */ jsx(KeyValueGroup, {
370
+ keyValueProps: props,
371
+ forwardedRef: ref,
372
+ isRoot: false
373
+ })
374
+ });
375
+ return /* @__PURE__ */ jsx(KeyValueGroup, {
376
+ keyValueProps: props,
377
+ forwardedRef: ref,
378
+ isRoot: true
379
+ });
380
+ });
381
+ KeyValueInput.displayName = "KeyValueInput";
382
+ //#endregion
383
+ export { KeyValueInputSize, KeyValueInputVariant, KeyValueInput as default };