@galaxy-io/dls 1.6.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (538) hide show
  1. package/README.md +47 -50
  2. package/biome/index.json +74 -0
  3. package/biome/plugins/no-hex-literal.grit +20 -0
  4. package/biome/plugins/no-inline-style.grit +13 -0
  5. package/biome/plugins/no-margin.grit +9 -0
  6. package/biome/plugins/warn/no-hex-literal.grit +23 -0
  7. package/biome/plugins/warn/no-inline-style.grit +13 -0
  8. package/biome/plugins/warn/no-margin.grit +9 -0
  9. package/dist/a11y/FocusScope.d.ts +44 -0
  10. package/dist/a11y/FocusScope.js +229 -0
  11. package/dist/a11y/VisuallyHidden.d.ts +21 -0
  12. package/dist/a11y/VisuallyHidden.js +30 -0
  13. package/dist/avatar/Avatar.d.ts +56 -14
  14. package/dist/avatar/Avatar.js +250 -96
  15. package/dist/avatar/AvatarGroup.d.ts +43 -0
  16. package/dist/avatar/AvatarGroup.js +153 -0
  17. package/dist/backgrounds/GridBackground.d.ts +48 -0
  18. package/dist/backgrounds/GridBackground.js +146 -0
  19. package/dist/beacons/Beacon.d.ts +86 -22
  20. package/dist/beacons/Beacon.js +170 -47
  21. package/dist/brand/GalaxyFilamentWordmark.d.ts +30 -0
  22. package/dist/brand/GalaxyFilamentWordmark.js +39 -0
  23. package/dist/brand/GalaxyLogomark.d.ts +26 -0
  24. package/dist/brand/GalaxyLogomark.js +41 -0
  25. package/dist/brand/GalaxyLogomarkAnimation.d.ts +36 -0
  26. package/dist/brand/GalaxyLogomarkAnimation.js +107 -0
  27. package/dist/brand/GalaxyWordmark.d.ts +30 -0
  28. package/dist/brand/GalaxyWordmark.js +63 -0
  29. package/dist/brand/assets/galaxy-logomark-animation.js +136678 -0
  30. package/dist/brand/brandMark.d.ts +26 -0
  31. package/dist/brand/brandMark.js +35 -0
  32. package/dist/buttons/Button.d.ts +148 -59
  33. package/dist/buttons/Button.js +437 -227
  34. package/dist/buttons/ButtonGroup.d.ts +38 -0
  35. package/dist/buttons/ButtonGroup.js +68 -0
  36. package/dist/buttons/CopyButton.d.ts +77 -0
  37. package/dist/buttons/CopyButton.js +65 -0
  38. package/dist/charts/AreaChart.d.ts +49 -0
  39. package/dist/charts/AreaChart.js +31 -0
  40. package/dist/charts/BarChart.d.ts +54 -67
  41. package/dist/charts/BarChart.js +136 -116
  42. package/dist/charts/ChartAxis.d.ts +35 -40
  43. package/dist/charts/ChartAxis.js +114 -90
  44. package/dist/charts/ChartCategoryTargets.d.ts +12 -26
  45. package/dist/charts/ChartCategoryTargets.js +32 -20
  46. package/dist/charts/ChartFrame.d.ts +69 -116
  47. package/dist/charts/ChartFrame.js +253 -119
  48. package/dist/charts/ChartGroupProvider.d.ts +30 -41
  49. package/dist/charts/ChartGroupProvider.js +20 -7
  50. package/dist/charts/ChartLegend.d.ts +27 -48
  51. package/dist/charts/ChartLegend.js +206 -125
  52. package/dist/charts/ChartMarkTargets.d.ts +12 -28
  53. package/dist/charts/ChartMarkTargets.js +33 -20
  54. package/dist/charts/ChartPrimitives.d.ts +50 -305
  55. package/dist/charts/ChartPrimitives.js +65 -413
  56. package/dist/charts/ChartTooltip.d.ts +20 -26
  57. package/dist/charts/ChartTooltip.js +77 -40
  58. package/dist/charts/Heatmap.d.ts +35 -0
  59. package/dist/charts/Heatmap.js +295 -0
  60. package/dist/charts/LineChart.d.ts +54 -47
  61. package/dist/charts/LineChart.js +159 -117
  62. package/dist/charts/PieChart.d.ts +32 -53
  63. package/dist/charts/PieChart.js +149 -135
  64. package/dist/charts/Sparkline.d.ts +107 -0
  65. package/dist/charts/Sparkline.js +244 -0
  66. package/dist/charts/StatChart.d.ts +37 -13
  67. package/dist/charts/StatChart.js +82 -35
  68. package/dist/charts/barChartGeometry.d.ts +138 -86
  69. package/dist/charts/barChartGeometry.js +122 -101
  70. package/dist/charts/barChartLegend.d.ts +14 -18
  71. package/dist/charts/barChartLegend.js +18 -13
  72. package/dist/charts/chartFormat.d.ts +12 -18
  73. package/dist/charts/chartFormat.js +20 -52
  74. package/dist/charts/chartPalette.d.ts +33 -0
  75. package/dist/charts/chartPalette.js +68 -0
  76. package/dist/charts/chartScales.d.ts +41 -108
  77. package/dist/charts/chartScales.js +62 -128
  78. package/dist/charts/constants.d.ts +96 -256
  79. package/dist/charts/constants.js +105 -275
  80. package/dist/charts/heatmapGeometry.d.ts +95 -0
  81. package/dist/charts/heatmapGeometry.js +155 -0
  82. package/dist/charts/lineChartGeometry.d.ts +108 -58
  83. package/dist/charts/lineChartGeometry.js +120 -78
  84. package/dist/charts/pieChartGeometry.d.ts +66 -40
  85. package/dist/charts/pieChartGeometry.js +68 -38
  86. package/dist/charts/types.d.ts +197 -466
  87. package/dist/charts/types.js +55 -144
  88. package/dist/charts/useCartesianChartLayout.d.ts +28 -59
  89. package/dist/charts/useCartesianChartLayout.js +47 -32
  90. package/dist/charts/useChartDimensions.d.ts +19 -40
  91. package/dist/charts/useChartDimensions.js +40 -56
  92. package/dist/charts/useChartFormatters.d.ts +6 -15
  93. package/dist/charts/useChartFormatters.js +4 -9
  94. package/dist/charts/useChartInteraction.d.ts +47 -116
  95. package/dist/charts/useChartInteraction.js +95 -71
  96. package/dist/charts/useChartTooltipPosition.d.ts +29 -39
  97. package/dist/charts/useChartTooltipPosition.js +14 -5
  98. package/dist/charts/useSeriesColorResolver.d.ts +11 -33
  99. package/dist/charts/useSeriesColorResolver.js +19 -12
  100. package/dist/chips/Chip.d.ts +155 -44
  101. package/dist/chips/Chip.js +329 -155
  102. package/dist/chips/ChipGroup.d.ts +53 -0
  103. package/dist/chips/ChipGroup.js +98 -0
  104. package/dist/drawer/Drawer.d.ts +81 -17
  105. package/dist/drawer/Drawer.js +370 -65
  106. package/dist/dropdown/Dropdown.d.ts +80 -63
  107. package/dist/dropdown/Dropdown.js +127 -129
  108. package/dist/editor/CodeEditor.d.ts +119 -40
  109. package/dist/editor/CodeEditor.js +490 -400
  110. package/dist/editor/CodeEditorReactWidget.d.ts +20 -17
  111. package/dist/editor/CodeEditorReactWidget.js +28 -21
  112. package/dist/feedback/Alert.d.ts +49 -0
  113. package/dist/feedback/Alert.js +172 -0
  114. package/dist/feedback/EmptyState.d.ts +39 -0
  115. package/dist/feedback/EmptyState.js +109 -0
  116. package/dist/feedback/ProgressBar.d.ts +125 -0
  117. package/dist/feedback/ProgressBar.js +183 -0
  118. package/dist/feedback/ProgressCircle.d.ts +99 -0
  119. package/dist/feedback/ProgressCircle.js +187 -0
  120. package/dist/feedback/Skeleton.d.ts +69 -0
  121. package/dist/feedback/Skeleton.js +130 -0
  122. package/dist/feedback/Spinner.d.ts +63 -0
  123. package/dist/feedback/Spinner.js +141 -0
  124. package/dist/fonts.css +70 -0
  125. package/dist/hooks/internal/useIsClient.d.ts +2 -0
  126. package/dist/hooks/internal/useIsClient.js +14 -0
  127. package/dist/hooks/useClipboard.d.ts +19 -0
  128. package/dist/hooks/useClipboard.js +45 -0
  129. package/dist/hooks/useControlledOpenState.d.ts +21 -0
  130. package/dist/hooks/useControlledOpenState.js +19 -0
  131. package/dist/hooks/useControlledState.d.ts +19 -0
  132. package/dist/hooks/useControlledState.js +22 -0
  133. package/dist/hooks/useDebouncedValue.d.ts +14 -0
  134. package/dist/hooks/useDebouncedValue.js +33 -0
  135. package/dist/hooks/useDisclosure.d.ts +26 -0
  136. package/dist/hooks/useDisclosure.js +36 -0
  137. package/dist/hooks/useDismiss.d.ts +23 -27
  138. package/dist/hooks/useDismiss.js +39 -27
  139. package/dist/hooks/useElementClientSize.d.ts +10 -10
  140. package/dist/hooks/useElementClientSize.js +8 -11
  141. package/dist/hooks/useElementWidth.d.ts +6 -13
  142. package/dist/hooks/useElementWidth.js +6 -14
  143. package/dist/hooks/useField.d.ts +47 -0
  144. package/dist/hooks/useField.js +40 -0
  145. package/dist/hooks/useHotkey.d.ts +77 -0
  146. package/dist/hooks/useHotkey.js +246 -0
  147. package/dist/hooks/useIsMac.d.ts +12 -0
  148. package/dist/hooks/useIsMac.js +27 -0
  149. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +17 -0
  150. package/dist/hooks/useIsomorphicLayoutEffect.js +20 -0
  151. package/dist/hooks/useLocalStorage.d.ts +28 -0
  152. package/dist/hooks/useLocalStorage.js +145 -0
  153. package/dist/hooks/useMediaQuery.d.ts +11 -0
  154. package/dist/hooks/useMediaQuery.js +23 -0
  155. package/dist/hooks/usePrefersReducedMotion.d.ts +12 -0
  156. package/dist/hooks/usePrefersReducedMotion.js +25 -0
  157. package/dist/hooks/useResize.d.ts +42 -62
  158. package/dist/hooks/useResize.js +43 -31
  159. package/dist/icons/Icon.d.ts +64 -37
  160. package/dist/icons/Icon.js +96 -37
  161. package/dist/icons/internal/IconSlot.d.ts +10 -0
  162. package/dist/icons/internal/IconSlot.js +32 -0
  163. package/dist/inputs/CheckboxGroup.d.ts +115 -0
  164. package/dist/inputs/CheckboxGroup.js +183 -0
  165. package/dist/inputs/CheckboxInput.d.ts +98 -28
  166. package/dist/inputs/CheckboxInput.js +218 -88
  167. package/dist/inputs/ColorInput.d.ts +115 -29
  168. package/dist/inputs/ColorInput.js +748 -326
  169. package/dist/inputs/CopyInput.d.ts +49 -20
  170. package/dist/inputs/CopyInput.js +57 -49
  171. package/dist/inputs/CronInput.d.ts +94 -0
  172. package/dist/inputs/CronInput.js +618 -0
  173. package/dist/inputs/DateInput.d.ts +175 -28
  174. package/dist/inputs/DateInput.js +1109 -451
  175. package/dist/inputs/DurationInput.d.ts +101 -0
  176. package/dist/inputs/DurationInput.js +441 -0
  177. package/dist/inputs/Field.d.ts +75 -0
  178. package/dist/inputs/Field.js +247 -0
  179. package/dist/inputs/Fieldset.d.ts +53 -0
  180. package/dist/inputs/Fieldset.js +149 -0
  181. package/dist/inputs/FileInput.d.ts +110 -0
  182. package/dist/inputs/FileInput.js +476 -0
  183. package/dist/inputs/Input.d.ts +148 -187
  184. package/dist/inputs/Input.js +339 -259
  185. package/dist/inputs/KeyValueInput.d.ts +120 -0
  186. package/dist/inputs/KeyValueInput.js +383 -0
  187. package/dist/inputs/MultiSelectInput.d.ts +165 -54
  188. package/dist/inputs/MultiSelectInput.js +175 -559
  189. package/dist/inputs/NumberInput.d.ts +65 -9
  190. package/dist/inputs/NumberInput.js +197 -40
  191. package/dist/inputs/PasswordInput.d.ts +17 -12
  192. package/dist/inputs/PasswordInput.js +33 -33
  193. package/dist/inputs/PinInput.d.ts +117 -0
  194. package/dist/inputs/PinInput.js +364 -0
  195. package/dist/inputs/RadioGroup.d.ts +115 -0
  196. package/dist/inputs/RadioGroup.js +179 -0
  197. package/dist/inputs/RadioInput.d.ts +87 -24
  198. package/dist/inputs/RadioInput.js +182 -95
  199. package/dist/inputs/SearchInput.d.ts +66 -0
  200. package/dist/inputs/SearchInput.js +156 -0
  201. package/dist/inputs/SelectInput.d.ts +195 -55
  202. package/dist/inputs/SelectInput.js +1308 -446
  203. package/dist/inputs/SliderInput.d.ts +150 -30
  204. package/dist/inputs/SliderInput.js +441 -186
  205. package/dist/inputs/SwitchInput.d.ts +109 -0
  206. package/dist/inputs/SwitchInput.js +248 -0
  207. package/dist/inputs/TagInput.d.ts +117 -0
  208. package/dist/inputs/TagInput.js +408 -0
  209. package/dist/inputs/TextAreaInput.d.ts +146 -44
  210. package/dist/inputs/TextAreaInput.js +292 -198
  211. package/dist/inputs/TextInput.d.ts +4 -13
  212. package/dist/inputs/TextInput.js +13 -48
  213. package/dist/inputs/ToggleInput.d.ts +120 -22
  214. package/dist/inputs/ToggleInput.js +262 -116
  215. package/dist/inputs/internal/bareField.d.ts +18 -0
  216. package/dist/inputs/internal/bareField.js +38 -0
  217. package/dist/inputs/internal/devWarn.d.ts +7 -0
  218. package/dist/inputs/internal/devWarn.js +30 -0
  219. package/dist/inputs/internal/fieldFrame.d.ts +34 -0
  220. package/dist/inputs/internal/fieldFrame.js +64 -0
  221. package/dist/inputs/internal/fieldWiring.d.ts +50 -0
  222. package/dist/inputs/internal/fieldWiring.js +38 -0
  223. package/dist/inputs/internal/innerButton.d.ts +2 -0
  224. package/dist/inputs/internal/innerButton.js +24 -0
  225. package/dist/inputs/internal/ownField.d.ts +45 -0
  226. package/dist/inputs/internal/ownField.js +58 -0
  227. package/dist/inputs/internal/predicates.d.ts +9 -0
  228. package/dist/inputs/internal/predicates.js +11 -0
  229. package/dist/inputs/internal/useComboboxPopover.d.ts +46 -0
  230. package/dist/inputs/internal/useComboboxPopover.js +92 -0
  231. package/dist/json/JsonViewer.d.ts +62 -0
  232. package/dist/json/JsonViewer.js +483 -0
  233. package/dist/layout/Box.d.ts +87 -0
  234. package/dist/layout/Box.js +109 -0
  235. package/dist/layout/Divider.d.ts +25 -0
  236. package/dist/layout/Divider.js +70 -0
  237. package/dist/layout/Flex.d.ts +139 -0
  238. package/dist/layout/Flex.js +165 -0
  239. package/dist/layout/FlexItem.d.ts +72 -0
  240. package/dist/layout/FlexItem.js +84 -0
  241. package/dist/layout/Grid.d.ts +140 -0
  242. package/dist/layout/Grid.js +178 -0
  243. package/dist/layout/Portal.d.ts +29 -0
  244. package/dist/layout/Portal.js +27 -0
  245. package/dist/layout/ResizablePanels.d.ts +88 -0
  246. package/dist/layout/ResizablePanels.js +198 -0
  247. package/dist/layout/ResizeHandle.d.ts +48 -0
  248. package/dist/layout/ResizeHandle.js +143 -0
  249. package/dist/layout/ScrollArea.d.ts +30 -0
  250. package/dist/layout/ScrollArea.js +138 -0
  251. package/dist/links/Link.d.ts +101 -1
  252. package/dist/links/Link.js +166 -4
  253. package/dist/lists/BulletedList.d.ts +25 -7
  254. package/dist/lists/BulletedList.js +72 -27
  255. package/dist/lists/DescriptionList.d.ts +91 -0
  256. package/dist/lists/DescriptionList.js +147 -0
  257. package/dist/menu/ContextMenu.d.ts +64 -0
  258. package/dist/menu/ContextMenu.js +34 -0
  259. package/dist/menu/Menu.d.ts +280 -0
  260. package/dist/menu/Menu.js +1003 -0
  261. package/dist/modal/ConfirmDialog.d.ts +55 -0
  262. package/dist/modal/ConfirmDialog.js +151 -0
  263. package/dist/modal/Modal.d.ts +64 -14
  264. package/dist/modal/Modal.js +189 -48
  265. package/dist/navigation/Breadcrumbs.d.ts +65 -0
  266. package/dist/navigation/Breadcrumbs.js +243 -0
  267. package/dist/navigation/CommandPalette.d.ts +83 -0
  268. package/dist/navigation/CommandPalette.js +509 -0
  269. package/dist/navigation/Pagination.d.ts +87 -0
  270. package/dist/navigation/Pagination.js +300 -0
  271. package/dist/navigation/SidebarNav.d.ts +107 -0
  272. package/dist/navigation/SidebarNav.js +341 -0
  273. package/dist/navigation/Stepper.d.ts +52 -0
  274. package/dist/navigation/Stepper.js +207 -0
  275. package/dist/navigation/Tabs.d.ts +113 -0
  276. package/dist/navigation/Tabs.js +543 -0
  277. package/dist/navigation/Topbar.d.ts +20 -0
  278. package/dist/navigation/Topbar.js +62 -0
  279. package/dist/overlay/OverlayProvider.d.ts +28 -32
  280. package/dist/overlay/OverlayProvider.js +42 -93
  281. package/dist/overlay/useOverlay.d.ts +88 -12
  282. package/dist/overlay/useOverlay.js +220 -43
  283. package/dist/overlays/Popover.d.ts +114 -0
  284. package/dist/overlays/Popover.js +389 -0
  285. package/dist/shapes/Circle.d.ts +84 -8
  286. package/dist/shapes/Circle.js +122 -20
  287. package/dist/shapes/Square.d.ts +84 -8
  288. package/dist/shapes/Square.js +123 -20
  289. package/dist/styles/mixins.d.ts +35 -0
  290. package/dist/styles/mixins.js +60 -0
  291. package/dist/styles.css +1 -202
  292. package/dist/table/InfiniteSpreadsheet.d.ts +140 -10
  293. package/dist/table/InfiniteSpreadsheet.js +762 -225
  294. package/dist/table/InfiniteTable.d.ts +116 -14
  295. package/dist/table/InfiniteTable.js +287 -429
  296. package/dist/table/SpreadsheetCellEditor.d.ts +54 -6
  297. package/dist/table/SpreadsheetCellEditor.js +163 -84
  298. package/dist/table/TableCore.d.ts +252 -0
  299. package/dist/table/TableCore.js +1077 -0
  300. package/dist/table/VirtualizedInfiniteTable.d.ts +104 -14
  301. package/dist/table/VirtualizedInfiniteTable.js +280 -219
  302. package/dist/table/types.d.ts +66 -244
  303. package/dist/table/types.js +0 -51
  304. package/dist/table/useInfiniteScrollSentinel.d.ts +25 -21
  305. package/dist/table/useInfiniteScrollSentinel.js +38 -30
  306. package/dist/table/useSpreadsheetCellNavigation.d.ts +44 -0
  307. package/dist/table/useSpreadsheetCellNavigation.js +141 -0
  308. package/dist/table/useTableColumnLayout.d.ts +90 -25
  309. package/dist/table/useTableColumnLayout.js +255 -50
  310. package/dist/table/useTableKeyboardNavigation.d.ts +32 -21
  311. package/dist/table/useTableKeyboardNavigation.js +95 -71
  312. package/dist/table/useTableRowSelection.d.ts +24 -25
  313. package/dist/table/useTableRowSelection.js +57 -84
  314. package/dist/table/useTableVirtualizer.d.ts +20 -0
  315. package/dist/table/useTableVirtualizer.js +48 -0
  316. package/dist/text/Bold.d.ts +5 -6
  317. package/dist/text/Bold.js +16 -15
  318. package/dist/text/Code.d.ts +5 -6
  319. package/dist/text/Code.js +16 -25
  320. package/dist/text/CodeBlock.d.ts +77 -0
  321. package/dist/text/CodeBlock.js +373 -0
  322. package/dist/text/EditableText.d.ts +55 -15
  323. package/dist/text/EditableText.js +153 -135
  324. package/dist/text/Ellipsis.d.ts +34 -8
  325. package/dist/text/Ellipsis.js +55 -23
  326. package/dist/text/Kbd.d.ts +72 -0
  327. package/dist/text/Kbd.js +284 -0
  328. package/dist/text/MarkdownText.d.ts +27 -10
  329. package/dist/text/MarkdownText.js +317 -300
  330. package/dist/text/RequiredMarker.d.ts +17 -5
  331. package/dist/text/RequiredMarker.js +34 -36
  332. package/dist/text/Selectable.d.ts +5 -6
  333. package/dist/text/Selectable.js +16 -13
  334. package/dist/text/Span.d.ts +82 -0
  335. package/dist/text/Span.js +115 -0
  336. package/dist/text/Text.d.ts +128 -41
  337. package/dist/text/Text.js +209 -76
  338. package/dist/theme/GalaxyProvider.d.ts +75 -0
  339. package/dist/theme/GalaxyProvider.js +223 -0
  340. package/dist/theme/ThemeSwitcher.d.ts +52 -0
  341. package/dist/theme/ThemeSwitcher.js +94 -0
  342. package/dist/theme/enums.d.ts +118 -0
  343. package/dist/theme/enums.js +144 -0
  344. package/dist/theme/tokens/dark.d.ts +2 -0
  345. package/dist/theme/tokens/dark.js +275 -0
  346. package/dist/theme/tokens/generate.d.ts +15 -0
  347. package/dist/theme/tokens/generate.js +47 -0
  348. package/dist/theme/tokens/light.d.ts +2 -0
  349. package/dist/theme/tokens/light.js +274 -0
  350. package/dist/theme/tokens/palette.d.ts +14 -0
  351. package/dist/theme/tokens/palette.js +153 -0
  352. package/dist/theme/tokens/scales.d.ts +26 -0
  353. package/dist/theme/tokens/scales.js +154 -0
  354. package/dist/theme/tokens/t.d.ts +3 -0
  355. package/dist/theme/tokens/t.js +25 -0
  356. package/dist/theme/tokens/types.d.ts +189 -0
  357. package/dist/theme/tokens/types.js +0 -0
  358. package/dist/theme/useGalaxyTheme.d.ts +46 -0
  359. package/dist/theme/useGalaxyTheme.js +36 -0
  360. package/dist/theme/useInverseScope.d.ts +18 -0
  361. package/dist/theme/useInverseScope.js +33 -0
  362. package/dist/three/GalaxyLogomark3D.d.ts +46 -0
  363. package/dist/three/GalaxyLogomark3D.js +134 -0
  364. package/dist/three/assets/galaxy-logomark.js +4 -0
  365. package/dist/three/galaxyLogomark3DScene.d.ts +27 -0
  366. package/dist/three/galaxyLogomark3DScene.js +165 -0
  367. package/dist/timeline/Timeline.d.ts +99 -0
  368. package/dist/timeline/Timeline.js +269 -0
  369. package/dist/toast/Toast.d.ts +43 -19
  370. package/dist/toast/Toast.js +130 -89
  371. package/dist/toast/ToastProvider.d.ts +23 -23
  372. package/dist/toast/ToastProvider.js +298 -101
  373. package/dist/toast/ToastViewport.d.ts +12 -0
  374. package/dist/toast/ToastViewport.js +210 -0
  375. package/dist/toast/useToast.d.ts +139 -5
  376. package/dist/toast/useToast.js +15 -13
  377. package/dist/tokens.css +654 -0
  378. package/dist/tooltip/Tooltip.d.ts +64 -44
  379. package/dist/tooltip/Tooltip.js +280 -73
  380. package/dist/tooltip/internal/LazyTooltip.d.ts +7 -0
  381. package/dist/tooltip/internal/LazyTooltip.js +53 -0
  382. package/dist/transform/Fade.d.ts +33 -11
  383. package/dist/transform/Fade.js +71 -19
  384. package/dist/transform/Flasher.d.ts +25 -0
  385. package/dist/transform/Flasher.js +39 -0
  386. package/dist/transform/Rotate.d.ts +24 -12
  387. package/dist/transform/Rotate.js +36 -22
  388. package/dist/transform/ScaleFade.d.ts +36 -11
  389. package/dist/transform/ScaleFade.js +86 -28
  390. package/dist/transform/internal/CollapseMotion.d.ts +10 -0
  391. package/dist/transform/internal/CollapseMotion.js +65 -0
  392. package/dist/tree/Tree.d.ts +85 -0
  393. package/dist/tree/Tree.js +387 -0
  394. package/dist/tree/treeRow.d.ts +39 -0
  395. package/dist/tree/treeRow.js +75 -0
  396. package/dist/utils/colors.d.ts +46 -13
  397. package/dist/utils/colors.js +92 -34
  398. package/dist/utils/css.d.ts +23 -0
  399. package/dist/utils/css.js +30 -0
  400. package/dist/utils/format.d.ts +58 -0
  401. package/dist/utils/format.js +220 -0
  402. package/dist/vite/index.d.ts +16 -0
  403. package/dist/vite/index.js +52 -0
  404. package/dist/widget/Widget.d.ts +164 -48
  405. package/dist/widget/Widget.js +335 -96
  406. package/dist/widget/WidgetGroup.d.ts +36 -0
  407. package/dist/widget/WidgetGroup.js +103 -0
  408. package/package.json +851 -157
  409. package/dist/accordion/Accordion.d.ts +0 -54
  410. package/dist/accordion/Accordion.js +0 -183
  411. package/dist/assets/components/GalaxyFilamentWordmarkDark.d.ts +0 -3
  412. package/dist/assets/components/GalaxyFilamentWordmarkDark.js +0 -14
  413. package/dist/assets/components/GalaxyFilamentWordmarkLight.d.ts +0 -3
  414. package/dist/assets/components/GalaxyFilamentWordmarkLight.js +0 -14
  415. package/dist/assets/components/GalaxyLogomarkDark.d.ts +0 -3
  416. package/dist/assets/components/GalaxyLogomarkDark.js +0 -11
  417. package/dist/assets/components/GalaxyLogomarkLight.d.ts +0 -3
  418. package/dist/assets/components/GalaxyLogomarkLight.js +0 -17
  419. package/dist/assets/components/GalaxyWordmarkDark.d.ts +0 -3
  420. package/dist/assets/components/GalaxyWordmarkDark.js +0 -15
  421. package/dist/assets/components/GalaxyWordmarkLight.d.ts +0 -3
  422. package/dist/assets/components/GalaxyWordmarkLight.js +0 -28
  423. package/dist/assets/models/galaxy-animation.js +0 -136666
  424. package/dist/assets/models/galaxy-logomark.js +0 -4
  425. package/dist/avatar/AvatarShimmer.d.ts +0 -30
  426. package/dist/avatar/AvatarShimmer.js +0 -22
  427. package/dist/backgrounds/CellGridBackground.d.ts +0 -24
  428. package/dist/backgrounds/CellGridBackground.js +0 -44
  429. package/dist/backgrounds/CrossGridBackground.d.ts +0 -26
  430. package/dist/backgrounds/CrossGridBackground.js +0 -49
  431. package/dist/backgrounds/DotGridBackground.d.ts +0 -24
  432. package/dist/backgrounds/DotGridBackground.js +0 -47
  433. package/dist/badge/Badge.d.ts +0 -42
  434. package/dist/badge/Badge.js +0 -99
  435. package/dist/charts/ChartEmptyState.d.ts +0 -17
  436. package/dist/charts/ChartEmptyState.js +0 -29
  437. package/dist/charts/ProgressBar.d.ts +0 -29
  438. package/dist/charts/ProgressBar.js +0 -65
  439. package/dist/charts/chartTheme.d.ts +0 -18
  440. package/dist/charts/chartTheme.js +0 -26
  441. package/dist/containers/FlexItem.d.ts +0 -50
  442. package/dist/containers/FlexItem.js +0 -91
  443. package/dist/containers/FlexWrapper.d.ts +0 -96
  444. package/dist/containers/FlexWrapper.js +0 -143
  445. package/dist/containers/GridWrapper.d.ts +0 -79
  446. package/dist/containers/GridWrapper.js +0 -125
  447. package/dist/containers/Spacing.d.ts +0 -23
  448. package/dist/containers/Spacing.js +0 -59
  449. package/dist/containers/Wrapper.d.ts +0 -26
  450. package/dist/containers/Wrapper.js +0 -54
  451. package/dist/dividers/HorizontalDivider.d.ts +0 -7
  452. package/dist/dividers/HorizontalDivider.js +0 -39
  453. package/dist/dividers/VerticalDivider.d.ts +0 -6
  454. package/dist/dividers/VerticalDivider.js +0 -21
  455. package/dist/icons/GalaxyFilamentWordmark.d.ts +0 -11
  456. package/dist/icons/GalaxyFilamentWordmark.js +0 -25
  457. package/dist/icons/GalaxyLogomark.d.ts +0 -13
  458. package/dist/icons/GalaxyLogomark.js +0 -27
  459. package/dist/icons/GalaxyLogomark3D.d.ts +0 -56
  460. package/dist/icons/GalaxyLogomark3D.js +0 -319
  461. package/dist/icons/GalaxyLogomarkAnimation.d.ts +0 -18
  462. package/dist/icons/GalaxyLogomarkAnimation.js +0 -48
  463. package/dist/icons/GalaxyWordmark.d.ts +0 -11
  464. package/dist/icons/GalaxyWordmark.js +0 -25
  465. package/dist/inputs/MultiTextInput.d.ts +0 -32
  466. package/dist/inputs/MultiTextInput.js +0 -180
  467. package/dist/inputs/SwitcherInput.d.ts +0 -30
  468. package/dist/inputs/SwitcherInput.js +0 -81
  469. package/dist/inputs/hooks.d.ts +0 -10
  470. package/dist/inputs/hooks.js +0 -22
  471. package/dist/overlay/constants.d.ts +0 -28
  472. package/dist/overlay/constants.js +0 -37
  473. package/dist/resizable/HorizontalResizeHandle.d.ts +0 -17
  474. package/dist/resizable/HorizontalResizeHandle.js +0 -38
  475. package/dist/resizable/VerticalResizeHandle.d.ts +0 -18
  476. package/dist/resizable/VerticalResizeHandle.js +0 -39
  477. package/dist/table/SpreadsheetCell.d.ts +0 -21
  478. package/dist/table/SpreadsheetCell.js +0 -71
  479. package/dist/table/SpreadsheetHeaderCell.d.ts +0 -23
  480. package/dist/table/SpreadsheetHeaderCell.js +0 -91
  481. package/dist/table/SpreadsheetMenuItem.d.ts +0 -14
  482. package/dist/table/SpreadsheetMenuItem.js +0 -33
  483. package/dist/table/SpreadsheetPrimitives.d.ts +0 -172
  484. package/dist/table/SpreadsheetPrimitives.js +0 -105
  485. package/dist/table/SpreadsheetRow.d.ts +0 -33
  486. package/dist/table/SpreadsheetRow.js +0 -73
  487. package/dist/table/SpreadsheetRowActionCell.d.ts +0 -14
  488. package/dist/table/SpreadsheetRowActionCell.js +0 -51
  489. package/dist/table/TableExpandCell.d.ts +0 -11
  490. package/dist/table/TableExpandCell.js +0 -24
  491. package/dist/table/TableExpandedRow.d.ts +0 -16
  492. package/dist/table/TableExpandedRow.js +0 -77
  493. package/dist/table/TableHeaderCellContent.d.ts +0 -30
  494. package/dist/table/TableHeaderCellContent.js +0 -48
  495. package/dist/table/TablePrimitives.d.ts +0 -313
  496. package/dist/table/TablePrimitives.js +0 -302
  497. package/dist/table/TableSelectCell.d.ts +0 -18
  498. package/dist/table/TableSelectCell.js +0 -27
  499. package/dist/table/TableStatusRow.d.ts +0 -18
  500. package/dist/table/TableStatusRow.js +0 -50
  501. package/dist/table/useSpreadsheetEditing.d.ts +0 -13
  502. package/dist/table/useSpreadsheetEditing.js +0 -41
  503. package/dist/table/useTableColumnResize.d.ts +0 -38
  504. package/dist/table/useTableColumnResize.js +0 -155
  505. package/dist/table/useTableRowExpansion.d.ts +0 -24
  506. package/dist/table/useTableRowExpansion.js +0 -62
  507. package/dist/table/utils.d.ts +0 -50
  508. package/dist/table/utils.js +0 -78
  509. package/dist/text/HotKeys.d.ts +0 -30
  510. package/dist/text/HotKeys.js +0 -74
  511. package/dist/text/Paragraph.d.ts +0 -33
  512. package/dist/text/Paragraph.js +0 -83
  513. package/dist/text/TextShimmer.d.ts +0 -14
  514. package/dist/text/TextShimmer.js +0 -34
  515. package/dist/theme/GalaxyTheme.d.ts +0 -67
  516. package/dist/theme/GalaxyTheme.js +0 -119
  517. package/dist/theme/constants.d.ts +0 -8
  518. package/dist/theme/constants.js +0 -38
  519. package/dist/theme/index.d.ts +0 -6
  520. package/dist/theme/index.js +0 -7
  521. package/dist/theme/types.d.ts +0 -195
  522. package/dist/theme/types.js +0 -10
  523. package/dist/theme/typography.d.ts +0 -2
  524. package/dist/theme/typography.js +0 -73
  525. package/dist/theme/variants/dark.d.ts +0 -2
  526. package/dist/theme/variants/dark.js +0 -125
  527. package/dist/theme/variants/light.d.ts +0 -2
  528. package/dist/theme/variants/light.js +0 -125
  529. package/dist/toast/ToastContainer.d.ts +0 -10
  530. package/dist/toast/ToastContainer.js +0 -31
  531. package/dist/toast/ToastWrapper.d.ts +0 -6
  532. package/dist/toast/ToastWrapper.js +0 -27
  533. package/dist/transform/Flash.d.ts +0 -7
  534. package/dist/transform/Flash.js +0 -18
  535. package/dist/transform/Spin.d.ts +0 -14
  536. package/dist/transform/Spin.js +0 -25
  537. package/dist/utils/linaria.d.ts +0 -1
  538. package/dist/utils/linaria.js +0 -8
@@ -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 { FieldContext } from "../hooks/useField.js";
5
+ import { useDevWarning } from "./internal/devWarn.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 };