@galaxy-io/dls 1.6.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (538) hide show
  1. package/README.md +47 -50
  2. package/biome/index.json +74 -0
  3. package/biome/plugins/no-hex-literal.grit +20 -0
  4. package/biome/plugins/no-inline-style.grit +13 -0
  5. package/biome/plugins/no-margin.grit +9 -0
  6. package/biome/plugins/warn/no-hex-literal.grit +23 -0
  7. package/biome/plugins/warn/no-inline-style.grit +13 -0
  8. package/biome/plugins/warn/no-margin.grit +9 -0
  9. package/dist/a11y/FocusScope.d.ts +44 -0
  10. package/dist/a11y/FocusScope.js +229 -0
  11. package/dist/a11y/VisuallyHidden.d.ts +21 -0
  12. package/dist/a11y/VisuallyHidden.js +30 -0
  13. package/dist/avatar/Avatar.d.ts +56 -14
  14. package/dist/avatar/Avatar.js +250 -96
  15. package/dist/avatar/AvatarGroup.d.ts +43 -0
  16. package/dist/avatar/AvatarGroup.js +153 -0
  17. package/dist/backgrounds/GridBackground.d.ts +48 -0
  18. package/dist/backgrounds/GridBackground.js +146 -0
  19. package/dist/beacons/Beacon.d.ts +86 -22
  20. package/dist/beacons/Beacon.js +170 -47
  21. package/dist/brand/GalaxyFilamentWordmark.d.ts +30 -0
  22. package/dist/brand/GalaxyFilamentWordmark.js +39 -0
  23. package/dist/brand/GalaxyLogomark.d.ts +26 -0
  24. package/dist/brand/GalaxyLogomark.js +41 -0
  25. package/dist/brand/GalaxyLogomarkAnimation.d.ts +36 -0
  26. package/dist/brand/GalaxyLogomarkAnimation.js +107 -0
  27. package/dist/brand/GalaxyWordmark.d.ts +30 -0
  28. package/dist/brand/GalaxyWordmark.js +63 -0
  29. package/dist/brand/assets/galaxy-logomark-animation.js +136678 -0
  30. package/dist/brand/brandMark.d.ts +26 -0
  31. package/dist/brand/brandMark.js +35 -0
  32. package/dist/buttons/Button.d.ts +148 -59
  33. package/dist/buttons/Button.js +437 -227
  34. package/dist/buttons/ButtonGroup.d.ts +38 -0
  35. package/dist/buttons/ButtonGroup.js +68 -0
  36. package/dist/buttons/CopyButton.d.ts +77 -0
  37. package/dist/buttons/CopyButton.js +65 -0
  38. package/dist/charts/AreaChart.d.ts +49 -0
  39. package/dist/charts/AreaChart.js +31 -0
  40. package/dist/charts/BarChart.d.ts +54 -67
  41. package/dist/charts/BarChart.js +136 -116
  42. package/dist/charts/ChartAxis.d.ts +35 -40
  43. package/dist/charts/ChartAxis.js +114 -90
  44. package/dist/charts/ChartCategoryTargets.d.ts +12 -26
  45. package/dist/charts/ChartCategoryTargets.js +32 -20
  46. package/dist/charts/ChartFrame.d.ts +69 -116
  47. package/dist/charts/ChartFrame.js +253 -119
  48. package/dist/charts/ChartGroupProvider.d.ts +30 -41
  49. package/dist/charts/ChartGroupProvider.js +20 -7
  50. package/dist/charts/ChartLegend.d.ts +27 -48
  51. package/dist/charts/ChartLegend.js +206 -125
  52. package/dist/charts/ChartMarkTargets.d.ts +12 -28
  53. package/dist/charts/ChartMarkTargets.js +33 -20
  54. package/dist/charts/ChartPrimitives.d.ts +50 -305
  55. package/dist/charts/ChartPrimitives.js +65 -413
  56. package/dist/charts/ChartTooltip.d.ts +20 -26
  57. package/dist/charts/ChartTooltip.js +77 -40
  58. package/dist/charts/Heatmap.d.ts +35 -0
  59. package/dist/charts/Heatmap.js +295 -0
  60. package/dist/charts/LineChart.d.ts +54 -47
  61. package/dist/charts/LineChart.js +159 -117
  62. package/dist/charts/PieChart.d.ts +32 -53
  63. package/dist/charts/PieChart.js +149 -135
  64. package/dist/charts/Sparkline.d.ts +107 -0
  65. package/dist/charts/Sparkline.js +244 -0
  66. package/dist/charts/StatChart.d.ts +37 -13
  67. package/dist/charts/StatChart.js +82 -35
  68. package/dist/charts/barChartGeometry.d.ts +138 -86
  69. package/dist/charts/barChartGeometry.js +122 -101
  70. package/dist/charts/barChartLegend.d.ts +14 -18
  71. package/dist/charts/barChartLegend.js +18 -13
  72. package/dist/charts/chartFormat.d.ts +12 -18
  73. package/dist/charts/chartFormat.js +20 -52
  74. package/dist/charts/chartPalette.d.ts +33 -0
  75. package/dist/charts/chartPalette.js +68 -0
  76. package/dist/charts/chartScales.d.ts +41 -108
  77. package/dist/charts/chartScales.js +62 -128
  78. package/dist/charts/constants.d.ts +96 -256
  79. package/dist/charts/constants.js +105 -275
  80. package/dist/charts/heatmapGeometry.d.ts +95 -0
  81. package/dist/charts/heatmapGeometry.js +155 -0
  82. package/dist/charts/lineChartGeometry.d.ts +108 -58
  83. package/dist/charts/lineChartGeometry.js +120 -78
  84. package/dist/charts/pieChartGeometry.d.ts +66 -40
  85. package/dist/charts/pieChartGeometry.js +68 -38
  86. package/dist/charts/types.d.ts +197 -466
  87. package/dist/charts/types.js +55 -144
  88. package/dist/charts/useCartesianChartLayout.d.ts +28 -59
  89. package/dist/charts/useCartesianChartLayout.js +47 -32
  90. package/dist/charts/useChartDimensions.d.ts +19 -40
  91. package/dist/charts/useChartDimensions.js +40 -56
  92. package/dist/charts/useChartFormatters.d.ts +6 -15
  93. package/dist/charts/useChartFormatters.js +4 -9
  94. package/dist/charts/useChartInteraction.d.ts +47 -116
  95. package/dist/charts/useChartInteraction.js +95 -71
  96. package/dist/charts/useChartTooltipPosition.d.ts +29 -39
  97. package/dist/charts/useChartTooltipPosition.js +14 -5
  98. package/dist/charts/useSeriesColorResolver.d.ts +11 -33
  99. package/dist/charts/useSeriesColorResolver.js +19 -12
  100. package/dist/chips/Chip.d.ts +155 -44
  101. package/dist/chips/Chip.js +329 -155
  102. package/dist/chips/ChipGroup.d.ts +53 -0
  103. package/dist/chips/ChipGroup.js +98 -0
  104. package/dist/drawer/Drawer.d.ts +81 -17
  105. package/dist/drawer/Drawer.js +370 -65
  106. package/dist/dropdown/Dropdown.d.ts +80 -63
  107. package/dist/dropdown/Dropdown.js +127 -129
  108. package/dist/editor/CodeEditor.d.ts +119 -40
  109. package/dist/editor/CodeEditor.js +490 -400
  110. package/dist/editor/CodeEditorReactWidget.d.ts +20 -17
  111. package/dist/editor/CodeEditorReactWidget.js +28 -21
  112. package/dist/feedback/Alert.d.ts +49 -0
  113. package/dist/feedback/Alert.js +172 -0
  114. package/dist/feedback/EmptyState.d.ts +39 -0
  115. package/dist/feedback/EmptyState.js +109 -0
  116. package/dist/feedback/ProgressBar.d.ts +125 -0
  117. package/dist/feedback/ProgressBar.js +183 -0
  118. package/dist/feedback/ProgressCircle.d.ts +99 -0
  119. package/dist/feedback/ProgressCircle.js +187 -0
  120. package/dist/feedback/Skeleton.d.ts +69 -0
  121. package/dist/feedback/Skeleton.js +130 -0
  122. package/dist/feedback/Spinner.d.ts +63 -0
  123. package/dist/feedback/Spinner.js +141 -0
  124. package/dist/fonts.css +70 -0
  125. package/dist/hooks/internal/useIsClient.d.ts +2 -0
  126. package/dist/hooks/internal/useIsClient.js +14 -0
  127. package/dist/hooks/useClipboard.d.ts +19 -0
  128. package/dist/hooks/useClipboard.js +45 -0
  129. package/dist/hooks/useControlledOpenState.d.ts +21 -0
  130. package/dist/hooks/useControlledOpenState.js +19 -0
  131. package/dist/hooks/useControlledState.d.ts +19 -0
  132. package/dist/hooks/useControlledState.js +22 -0
  133. package/dist/hooks/useDebouncedValue.d.ts +14 -0
  134. package/dist/hooks/useDebouncedValue.js +33 -0
  135. package/dist/hooks/useDisclosure.d.ts +26 -0
  136. package/dist/hooks/useDisclosure.js +36 -0
  137. package/dist/hooks/useDismiss.d.ts +23 -27
  138. package/dist/hooks/useDismiss.js +39 -27
  139. package/dist/hooks/useElementClientSize.d.ts +10 -10
  140. package/dist/hooks/useElementClientSize.js +8 -11
  141. package/dist/hooks/useElementWidth.d.ts +6 -13
  142. package/dist/hooks/useElementWidth.js +6 -14
  143. package/dist/hooks/useField.d.ts +47 -0
  144. package/dist/hooks/useField.js +40 -0
  145. package/dist/hooks/useHotkey.d.ts +77 -0
  146. package/dist/hooks/useHotkey.js +246 -0
  147. package/dist/hooks/useIsMac.d.ts +12 -0
  148. package/dist/hooks/useIsMac.js +27 -0
  149. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +17 -0
  150. package/dist/hooks/useIsomorphicLayoutEffect.js +20 -0
  151. package/dist/hooks/useLocalStorage.d.ts +28 -0
  152. package/dist/hooks/useLocalStorage.js +145 -0
  153. package/dist/hooks/useMediaQuery.d.ts +11 -0
  154. package/dist/hooks/useMediaQuery.js +23 -0
  155. package/dist/hooks/usePrefersReducedMotion.d.ts +12 -0
  156. package/dist/hooks/usePrefersReducedMotion.js +25 -0
  157. package/dist/hooks/useResize.d.ts +42 -62
  158. package/dist/hooks/useResize.js +43 -31
  159. package/dist/icons/Icon.d.ts +64 -37
  160. package/dist/icons/Icon.js +96 -37
  161. package/dist/icons/internal/IconSlot.d.ts +10 -0
  162. package/dist/icons/internal/IconSlot.js +32 -0
  163. package/dist/inputs/CheckboxGroup.d.ts +115 -0
  164. package/dist/inputs/CheckboxGroup.js +183 -0
  165. package/dist/inputs/CheckboxInput.d.ts +98 -28
  166. package/dist/inputs/CheckboxInput.js +218 -88
  167. package/dist/inputs/ColorInput.d.ts +115 -29
  168. package/dist/inputs/ColorInput.js +748 -326
  169. package/dist/inputs/CopyInput.d.ts +49 -20
  170. package/dist/inputs/CopyInput.js +57 -49
  171. package/dist/inputs/CronInput.d.ts +94 -0
  172. package/dist/inputs/CronInput.js +618 -0
  173. package/dist/inputs/DateInput.d.ts +175 -28
  174. package/dist/inputs/DateInput.js +1109 -451
  175. package/dist/inputs/DurationInput.d.ts +101 -0
  176. package/dist/inputs/DurationInput.js +441 -0
  177. package/dist/inputs/Field.d.ts +75 -0
  178. package/dist/inputs/Field.js +247 -0
  179. package/dist/inputs/Fieldset.d.ts +53 -0
  180. package/dist/inputs/Fieldset.js +149 -0
  181. package/dist/inputs/FileInput.d.ts +110 -0
  182. package/dist/inputs/FileInput.js +476 -0
  183. package/dist/inputs/Input.d.ts +148 -187
  184. package/dist/inputs/Input.js +339 -259
  185. package/dist/inputs/KeyValueInput.d.ts +120 -0
  186. package/dist/inputs/KeyValueInput.js +383 -0
  187. package/dist/inputs/MultiSelectInput.d.ts +165 -54
  188. package/dist/inputs/MultiSelectInput.js +175 -559
  189. package/dist/inputs/NumberInput.d.ts +65 -9
  190. package/dist/inputs/NumberInput.js +197 -40
  191. package/dist/inputs/PasswordInput.d.ts +17 -12
  192. package/dist/inputs/PasswordInput.js +33 -33
  193. package/dist/inputs/PinInput.d.ts +117 -0
  194. package/dist/inputs/PinInput.js +364 -0
  195. package/dist/inputs/RadioGroup.d.ts +115 -0
  196. package/dist/inputs/RadioGroup.js +179 -0
  197. package/dist/inputs/RadioInput.d.ts +87 -24
  198. package/dist/inputs/RadioInput.js +182 -95
  199. package/dist/inputs/SearchInput.d.ts +66 -0
  200. package/dist/inputs/SearchInput.js +156 -0
  201. package/dist/inputs/SelectInput.d.ts +195 -55
  202. package/dist/inputs/SelectInput.js +1308 -446
  203. package/dist/inputs/SliderInput.d.ts +150 -30
  204. package/dist/inputs/SliderInput.js +441 -186
  205. package/dist/inputs/SwitchInput.d.ts +109 -0
  206. package/dist/inputs/SwitchInput.js +248 -0
  207. package/dist/inputs/TagInput.d.ts +117 -0
  208. package/dist/inputs/TagInput.js +408 -0
  209. package/dist/inputs/TextAreaInput.d.ts +146 -44
  210. package/dist/inputs/TextAreaInput.js +292 -198
  211. package/dist/inputs/TextInput.d.ts +4 -13
  212. package/dist/inputs/TextInput.js +13 -48
  213. package/dist/inputs/ToggleInput.d.ts +120 -22
  214. package/dist/inputs/ToggleInput.js +262 -116
  215. package/dist/inputs/internal/bareField.d.ts +18 -0
  216. package/dist/inputs/internal/bareField.js +38 -0
  217. package/dist/inputs/internal/devWarn.d.ts +7 -0
  218. package/dist/inputs/internal/devWarn.js +30 -0
  219. package/dist/inputs/internal/fieldFrame.d.ts +34 -0
  220. package/dist/inputs/internal/fieldFrame.js +64 -0
  221. package/dist/inputs/internal/fieldWiring.d.ts +50 -0
  222. package/dist/inputs/internal/fieldWiring.js +38 -0
  223. package/dist/inputs/internal/innerButton.d.ts +2 -0
  224. package/dist/inputs/internal/innerButton.js +24 -0
  225. package/dist/inputs/internal/ownField.d.ts +45 -0
  226. package/dist/inputs/internal/ownField.js +58 -0
  227. package/dist/inputs/internal/predicates.d.ts +9 -0
  228. package/dist/inputs/internal/predicates.js +11 -0
  229. package/dist/inputs/internal/useComboboxPopover.d.ts +46 -0
  230. package/dist/inputs/internal/useComboboxPopover.js +92 -0
  231. package/dist/json/JsonViewer.d.ts +62 -0
  232. package/dist/json/JsonViewer.js +483 -0
  233. package/dist/layout/Box.d.ts +87 -0
  234. package/dist/layout/Box.js +109 -0
  235. package/dist/layout/Divider.d.ts +25 -0
  236. package/dist/layout/Divider.js +70 -0
  237. package/dist/layout/Flex.d.ts +139 -0
  238. package/dist/layout/Flex.js +165 -0
  239. package/dist/layout/FlexItem.d.ts +72 -0
  240. package/dist/layout/FlexItem.js +84 -0
  241. package/dist/layout/Grid.d.ts +140 -0
  242. package/dist/layout/Grid.js +178 -0
  243. package/dist/layout/Portal.d.ts +29 -0
  244. package/dist/layout/Portal.js +27 -0
  245. package/dist/layout/ResizablePanels.d.ts +88 -0
  246. package/dist/layout/ResizablePanels.js +198 -0
  247. package/dist/layout/ResizeHandle.d.ts +48 -0
  248. package/dist/layout/ResizeHandle.js +143 -0
  249. package/dist/layout/ScrollArea.d.ts +30 -0
  250. package/dist/layout/ScrollArea.js +138 -0
  251. package/dist/links/Link.d.ts +101 -1
  252. package/dist/links/Link.js +166 -4
  253. package/dist/lists/BulletedList.d.ts +25 -7
  254. package/dist/lists/BulletedList.js +72 -27
  255. package/dist/lists/DescriptionList.d.ts +91 -0
  256. package/dist/lists/DescriptionList.js +147 -0
  257. package/dist/menu/ContextMenu.d.ts +64 -0
  258. package/dist/menu/ContextMenu.js +34 -0
  259. package/dist/menu/Menu.d.ts +280 -0
  260. package/dist/menu/Menu.js +1003 -0
  261. package/dist/modal/ConfirmDialog.d.ts +55 -0
  262. package/dist/modal/ConfirmDialog.js +151 -0
  263. package/dist/modal/Modal.d.ts +64 -14
  264. package/dist/modal/Modal.js +189 -48
  265. package/dist/navigation/Breadcrumbs.d.ts +65 -0
  266. package/dist/navigation/Breadcrumbs.js +243 -0
  267. package/dist/navigation/CommandPalette.d.ts +83 -0
  268. package/dist/navigation/CommandPalette.js +509 -0
  269. package/dist/navigation/Pagination.d.ts +87 -0
  270. package/dist/navigation/Pagination.js +300 -0
  271. package/dist/navigation/SidebarNav.d.ts +107 -0
  272. package/dist/navigation/SidebarNav.js +341 -0
  273. package/dist/navigation/Stepper.d.ts +52 -0
  274. package/dist/navigation/Stepper.js +207 -0
  275. package/dist/navigation/Tabs.d.ts +113 -0
  276. package/dist/navigation/Tabs.js +543 -0
  277. package/dist/navigation/Topbar.d.ts +20 -0
  278. package/dist/navigation/Topbar.js +62 -0
  279. package/dist/overlay/OverlayProvider.d.ts +28 -32
  280. package/dist/overlay/OverlayProvider.js +42 -93
  281. package/dist/overlay/useOverlay.d.ts +88 -12
  282. package/dist/overlay/useOverlay.js +220 -43
  283. package/dist/overlays/Popover.d.ts +114 -0
  284. package/dist/overlays/Popover.js +389 -0
  285. package/dist/shapes/Circle.d.ts +84 -8
  286. package/dist/shapes/Circle.js +122 -20
  287. package/dist/shapes/Square.d.ts +84 -8
  288. package/dist/shapes/Square.js +123 -20
  289. package/dist/styles/mixins.d.ts +35 -0
  290. package/dist/styles/mixins.js +60 -0
  291. package/dist/styles.css +1 -202
  292. package/dist/table/InfiniteSpreadsheet.d.ts +140 -10
  293. package/dist/table/InfiniteSpreadsheet.js +762 -225
  294. package/dist/table/InfiniteTable.d.ts +116 -14
  295. package/dist/table/InfiniteTable.js +287 -429
  296. package/dist/table/SpreadsheetCellEditor.d.ts +54 -6
  297. package/dist/table/SpreadsheetCellEditor.js +163 -84
  298. package/dist/table/TableCore.d.ts +252 -0
  299. package/dist/table/TableCore.js +1077 -0
  300. package/dist/table/VirtualizedInfiniteTable.d.ts +104 -14
  301. package/dist/table/VirtualizedInfiniteTable.js +280 -219
  302. package/dist/table/types.d.ts +66 -244
  303. package/dist/table/types.js +0 -51
  304. package/dist/table/useInfiniteScrollSentinel.d.ts +25 -21
  305. package/dist/table/useInfiniteScrollSentinel.js +38 -30
  306. package/dist/table/useSpreadsheetCellNavigation.d.ts +44 -0
  307. package/dist/table/useSpreadsheetCellNavigation.js +141 -0
  308. package/dist/table/useTableColumnLayout.d.ts +90 -25
  309. package/dist/table/useTableColumnLayout.js +255 -50
  310. package/dist/table/useTableKeyboardNavigation.d.ts +32 -21
  311. package/dist/table/useTableKeyboardNavigation.js +95 -71
  312. package/dist/table/useTableRowSelection.d.ts +24 -25
  313. package/dist/table/useTableRowSelection.js +57 -84
  314. package/dist/table/useTableVirtualizer.d.ts +20 -0
  315. package/dist/table/useTableVirtualizer.js +48 -0
  316. package/dist/text/Bold.d.ts +5 -6
  317. package/dist/text/Bold.js +16 -15
  318. package/dist/text/Code.d.ts +5 -6
  319. package/dist/text/Code.js +16 -25
  320. package/dist/text/CodeBlock.d.ts +77 -0
  321. package/dist/text/CodeBlock.js +373 -0
  322. package/dist/text/EditableText.d.ts +55 -15
  323. package/dist/text/EditableText.js +153 -135
  324. package/dist/text/Ellipsis.d.ts +34 -8
  325. package/dist/text/Ellipsis.js +55 -23
  326. package/dist/text/Kbd.d.ts +72 -0
  327. package/dist/text/Kbd.js +284 -0
  328. package/dist/text/MarkdownText.d.ts +27 -10
  329. package/dist/text/MarkdownText.js +317 -300
  330. package/dist/text/RequiredMarker.d.ts +17 -5
  331. package/dist/text/RequiredMarker.js +34 -36
  332. package/dist/text/Selectable.d.ts +5 -6
  333. package/dist/text/Selectable.js +16 -13
  334. package/dist/text/Span.d.ts +82 -0
  335. package/dist/text/Span.js +115 -0
  336. package/dist/text/Text.d.ts +128 -41
  337. package/dist/text/Text.js +209 -76
  338. package/dist/theme/GalaxyProvider.d.ts +75 -0
  339. package/dist/theme/GalaxyProvider.js +223 -0
  340. package/dist/theme/ThemeSwitcher.d.ts +52 -0
  341. package/dist/theme/ThemeSwitcher.js +94 -0
  342. package/dist/theme/enums.d.ts +118 -0
  343. package/dist/theme/enums.js +144 -0
  344. package/dist/theme/tokens/dark.d.ts +2 -0
  345. package/dist/theme/tokens/dark.js +275 -0
  346. package/dist/theme/tokens/generate.d.ts +15 -0
  347. package/dist/theme/tokens/generate.js +47 -0
  348. package/dist/theme/tokens/light.d.ts +2 -0
  349. package/dist/theme/tokens/light.js +274 -0
  350. package/dist/theme/tokens/palette.d.ts +14 -0
  351. package/dist/theme/tokens/palette.js +153 -0
  352. package/dist/theme/tokens/scales.d.ts +26 -0
  353. package/dist/theme/tokens/scales.js +154 -0
  354. package/dist/theme/tokens/t.d.ts +3 -0
  355. package/dist/theme/tokens/t.js +25 -0
  356. package/dist/theme/tokens/types.d.ts +189 -0
  357. package/dist/theme/tokens/types.js +0 -0
  358. package/dist/theme/useGalaxyTheme.d.ts +46 -0
  359. package/dist/theme/useGalaxyTheme.js +36 -0
  360. package/dist/theme/useInverseScope.d.ts +18 -0
  361. package/dist/theme/useInverseScope.js +33 -0
  362. package/dist/three/GalaxyLogomark3D.d.ts +46 -0
  363. package/dist/three/GalaxyLogomark3D.js +134 -0
  364. package/dist/three/assets/galaxy-logomark.js +4 -0
  365. package/dist/three/galaxyLogomark3DScene.d.ts +27 -0
  366. package/dist/three/galaxyLogomark3DScene.js +165 -0
  367. package/dist/timeline/Timeline.d.ts +99 -0
  368. package/dist/timeline/Timeline.js +269 -0
  369. package/dist/toast/Toast.d.ts +43 -19
  370. package/dist/toast/Toast.js +130 -89
  371. package/dist/toast/ToastProvider.d.ts +23 -23
  372. package/dist/toast/ToastProvider.js +298 -101
  373. package/dist/toast/ToastViewport.d.ts +12 -0
  374. package/dist/toast/ToastViewport.js +210 -0
  375. package/dist/toast/useToast.d.ts +139 -5
  376. package/dist/toast/useToast.js +15 -13
  377. package/dist/tokens.css +654 -0
  378. package/dist/tooltip/Tooltip.d.ts +64 -44
  379. package/dist/tooltip/Tooltip.js +280 -73
  380. package/dist/tooltip/internal/LazyTooltip.d.ts +7 -0
  381. package/dist/tooltip/internal/LazyTooltip.js +53 -0
  382. package/dist/transform/Fade.d.ts +33 -11
  383. package/dist/transform/Fade.js +71 -19
  384. package/dist/transform/Flasher.d.ts +25 -0
  385. package/dist/transform/Flasher.js +39 -0
  386. package/dist/transform/Rotate.d.ts +24 -12
  387. package/dist/transform/Rotate.js +36 -22
  388. package/dist/transform/ScaleFade.d.ts +36 -11
  389. package/dist/transform/ScaleFade.js +86 -28
  390. package/dist/transform/internal/CollapseMotion.d.ts +10 -0
  391. package/dist/transform/internal/CollapseMotion.js +65 -0
  392. package/dist/tree/Tree.d.ts +85 -0
  393. package/dist/tree/Tree.js +387 -0
  394. package/dist/tree/treeRow.d.ts +39 -0
  395. package/dist/tree/treeRow.js +75 -0
  396. package/dist/utils/colors.d.ts +46 -13
  397. package/dist/utils/colors.js +92 -34
  398. package/dist/utils/css.d.ts +23 -0
  399. package/dist/utils/css.js +30 -0
  400. package/dist/utils/format.d.ts +58 -0
  401. package/dist/utils/format.js +220 -0
  402. package/dist/vite/index.d.ts +16 -0
  403. package/dist/vite/index.js +52 -0
  404. package/dist/widget/Widget.d.ts +164 -48
  405. package/dist/widget/Widget.js +335 -96
  406. package/dist/widget/WidgetGroup.d.ts +36 -0
  407. package/dist/widget/WidgetGroup.js +103 -0
  408. package/package.json +851 -157
  409. package/dist/accordion/Accordion.d.ts +0 -54
  410. package/dist/accordion/Accordion.js +0 -183
  411. package/dist/assets/components/GalaxyFilamentWordmarkDark.d.ts +0 -3
  412. package/dist/assets/components/GalaxyFilamentWordmarkDark.js +0 -14
  413. package/dist/assets/components/GalaxyFilamentWordmarkLight.d.ts +0 -3
  414. package/dist/assets/components/GalaxyFilamentWordmarkLight.js +0 -14
  415. package/dist/assets/components/GalaxyLogomarkDark.d.ts +0 -3
  416. package/dist/assets/components/GalaxyLogomarkDark.js +0 -11
  417. package/dist/assets/components/GalaxyLogomarkLight.d.ts +0 -3
  418. package/dist/assets/components/GalaxyLogomarkLight.js +0 -17
  419. package/dist/assets/components/GalaxyWordmarkDark.d.ts +0 -3
  420. package/dist/assets/components/GalaxyWordmarkDark.js +0 -15
  421. package/dist/assets/components/GalaxyWordmarkLight.d.ts +0 -3
  422. package/dist/assets/components/GalaxyWordmarkLight.js +0 -28
  423. package/dist/assets/models/galaxy-animation.js +0 -136666
  424. package/dist/assets/models/galaxy-logomark.js +0 -4
  425. package/dist/avatar/AvatarShimmer.d.ts +0 -30
  426. package/dist/avatar/AvatarShimmer.js +0 -22
  427. package/dist/backgrounds/CellGridBackground.d.ts +0 -24
  428. package/dist/backgrounds/CellGridBackground.js +0 -44
  429. package/dist/backgrounds/CrossGridBackground.d.ts +0 -26
  430. package/dist/backgrounds/CrossGridBackground.js +0 -49
  431. package/dist/backgrounds/DotGridBackground.d.ts +0 -24
  432. package/dist/backgrounds/DotGridBackground.js +0 -47
  433. package/dist/badge/Badge.d.ts +0 -42
  434. package/dist/badge/Badge.js +0 -99
  435. package/dist/charts/ChartEmptyState.d.ts +0 -17
  436. package/dist/charts/ChartEmptyState.js +0 -29
  437. package/dist/charts/ProgressBar.d.ts +0 -29
  438. package/dist/charts/ProgressBar.js +0 -65
  439. package/dist/charts/chartTheme.d.ts +0 -18
  440. package/dist/charts/chartTheme.js +0 -26
  441. package/dist/containers/FlexItem.d.ts +0 -50
  442. package/dist/containers/FlexItem.js +0 -91
  443. package/dist/containers/FlexWrapper.d.ts +0 -96
  444. package/dist/containers/FlexWrapper.js +0 -143
  445. package/dist/containers/GridWrapper.d.ts +0 -79
  446. package/dist/containers/GridWrapper.js +0 -125
  447. package/dist/containers/Spacing.d.ts +0 -23
  448. package/dist/containers/Spacing.js +0 -59
  449. package/dist/containers/Wrapper.d.ts +0 -26
  450. package/dist/containers/Wrapper.js +0 -54
  451. package/dist/dividers/HorizontalDivider.d.ts +0 -7
  452. package/dist/dividers/HorizontalDivider.js +0 -39
  453. package/dist/dividers/VerticalDivider.d.ts +0 -6
  454. package/dist/dividers/VerticalDivider.js +0 -21
  455. package/dist/icons/GalaxyFilamentWordmark.d.ts +0 -11
  456. package/dist/icons/GalaxyFilamentWordmark.js +0 -25
  457. package/dist/icons/GalaxyLogomark.d.ts +0 -13
  458. package/dist/icons/GalaxyLogomark.js +0 -27
  459. package/dist/icons/GalaxyLogomark3D.d.ts +0 -56
  460. package/dist/icons/GalaxyLogomark3D.js +0 -319
  461. package/dist/icons/GalaxyLogomarkAnimation.d.ts +0 -18
  462. package/dist/icons/GalaxyLogomarkAnimation.js +0 -48
  463. package/dist/icons/GalaxyWordmark.d.ts +0 -11
  464. package/dist/icons/GalaxyWordmark.js +0 -25
  465. package/dist/inputs/MultiTextInput.d.ts +0 -32
  466. package/dist/inputs/MultiTextInput.js +0 -180
  467. package/dist/inputs/SwitcherInput.d.ts +0 -30
  468. package/dist/inputs/SwitcherInput.js +0 -81
  469. package/dist/inputs/hooks.d.ts +0 -10
  470. package/dist/inputs/hooks.js +0 -22
  471. package/dist/overlay/constants.d.ts +0 -28
  472. package/dist/overlay/constants.js +0 -37
  473. package/dist/resizable/HorizontalResizeHandle.d.ts +0 -17
  474. package/dist/resizable/HorizontalResizeHandle.js +0 -38
  475. package/dist/resizable/VerticalResizeHandle.d.ts +0 -18
  476. package/dist/resizable/VerticalResizeHandle.js +0 -39
  477. package/dist/table/SpreadsheetCell.d.ts +0 -21
  478. package/dist/table/SpreadsheetCell.js +0 -71
  479. package/dist/table/SpreadsheetHeaderCell.d.ts +0 -23
  480. package/dist/table/SpreadsheetHeaderCell.js +0 -91
  481. package/dist/table/SpreadsheetMenuItem.d.ts +0 -14
  482. package/dist/table/SpreadsheetMenuItem.js +0 -33
  483. package/dist/table/SpreadsheetPrimitives.d.ts +0 -172
  484. package/dist/table/SpreadsheetPrimitives.js +0 -105
  485. package/dist/table/SpreadsheetRow.d.ts +0 -33
  486. package/dist/table/SpreadsheetRow.js +0 -73
  487. package/dist/table/SpreadsheetRowActionCell.d.ts +0 -14
  488. package/dist/table/SpreadsheetRowActionCell.js +0 -51
  489. package/dist/table/TableExpandCell.d.ts +0 -11
  490. package/dist/table/TableExpandCell.js +0 -24
  491. package/dist/table/TableExpandedRow.d.ts +0 -16
  492. package/dist/table/TableExpandedRow.js +0 -77
  493. package/dist/table/TableHeaderCellContent.d.ts +0 -30
  494. package/dist/table/TableHeaderCellContent.js +0 -48
  495. package/dist/table/TablePrimitives.d.ts +0 -313
  496. package/dist/table/TablePrimitives.js +0 -302
  497. package/dist/table/TableSelectCell.d.ts +0 -18
  498. package/dist/table/TableSelectCell.js +0 -27
  499. package/dist/table/TableStatusRow.d.ts +0 -18
  500. package/dist/table/TableStatusRow.js +0 -50
  501. package/dist/table/useSpreadsheetEditing.d.ts +0 -13
  502. package/dist/table/useSpreadsheetEditing.js +0 -41
  503. package/dist/table/useTableColumnResize.d.ts +0 -38
  504. package/dist/table/useTableColumnResize.js +0 -155
  505. package/dist/table/useTableRowExpansion.d.ts +0 -24
  506. package/dist/table/useTableRowExpansion.js +0 -62
  507. package/dist/table/utils.d.ts +0 -50
  508. package/dist/table/utils.js +0 -78
  509. package/dist/text/HotKeys.d.ts +0 -30
  510. package/dist/text/HotKeys.js +0 -74
  511. package/dist/text/Paragraph.d.ts +0 -33
  512. package/dist/text/Paragraph.js +0 -83
  513. package/dist/text/TextShimmer.d.ts +0 -14
  514. package/dist/text/TextShimmer.js +0 -34
  515. package/dist/theme/GalaxyTheme.d.ts +0 -67
  516. package/dist/theme/GalaxyTheme.js +0 -119
  517. package/dist/theme/constants.d.ts +0 -8
  518. package/dist/theme/constants.js +0 -38
  519. package/dist/theme/index.d.ts +0 -6
  520. package/dist/theme/index.js +0 -7
  521. package/dist/theme/types.d.ts +0 -195
  522. package/dist/theme/types.js +0 -10
  523. package/dist/theme/typography.d.ts +0 -2
  524. package/dist/theme/typography.js +0 -73
  525. package/dist/theme/variants/dark.d.ts +0 -2
  526. package/dist/theme/variants/dark.js +0 -125
  527. package/dist/theme/variants/light.d.ts +0 -2
  528. package/dist/theme/variants/light.js +0 -125
  529. package/dist/toast/ToastContainer.d.ts +0 -10
  530. package/dist/toast/ToastContainer.js +0 -31
  531. package/dist/toast/ToastWrapper.d.ts +0 -6
  532. package/dist/toast/ToastWrapper.js +0 -27
  533. package/dist/transform/Flash.d.ts +0 -7
  534. package/dist/transform/Flash.js +0 -18
  535. package/dist/transform/Spin.d.ts +0 -14
  536. package/dist/transform/Spin.js +0 -25
  537. package/dist/utils/linaria.d.ts +0 -1
  538. package/dist/utils/linaria.js +0 -8
@@ -1,575 +1,191 @@
1
- import { withTheme } from "../theme/GalaxyTheme.js";
2
- import { getCssSizeValue } from "../utils/linaria.js";
3
- import Rotate from "../transform/Rotate.js";
4
- import Text, { TextSize, TextVariant } from "../text/Text.js";
5
- import FlexItem from "../containers/FlexItem.js";
6
- import Dropdown, { DropdownPosition, DropdownVariant } from "../dropdown/Dropdown.js";
7
- import Icon, { IconVariant } from "../icons/Icon.js";
8
- import FlexWrapper, { AlignItems, FlexDirection } from "../containers/FlexWrapper.js";
9
- import { InputLabel, InputSize, InputVariant, getInputBorderColor, getInputControlSize, getInputFontSize, getInputHeight, getInputIconSize, getInputLineHeight, getInputPadding, getInputSurfaceColor, getInputTextSize } from "./Input.js";
10
- import CheckboxInput from "./CheckboxInput.js";
11
- import HorizontalDivider from "../dividers/HorizontalDivider.js";
12
- import { useElementWidth } from "../hooks/useElementWidth.js";
13
- import { useControlledOpenState, useDebouncedValue } from "./hooks.js";
14
- import { INPUT_VARIANT_TO_ICON_VARIANT_MAP } from "./SelectInput.js";
1
+ import { useIsomorphicLayoutEffect } from "../hooks/useIsomorphicLayoutEffect.js";
2
+ import VisuallyHidden from "../a11y/VisuallyHidden.js";
3
+ import { useControlledState } from "../hooks/useControlledState.js";
4
+ import Chip, { ChipSize } from "../chips/Chip.js";
5
+ import { SelectInputRoot, SelectInputSize, SelectInputVariant } from "./SelectInput.js";
15
6
  /* empty css */
16
7
  import { styled } from "@linaria/react";
17
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
8
+ import { forwardRef, useEffect, useRef, useState } from "react";
18
9
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
19
- import { ArrowCounterClockwiseIcon, CaretDownIcon } from "@phosphor-icons/react";
10
+ import { cx } from "@linaria/core";
20
11
  //#region src/inputs/MultiSelectInput.tsx
21
- var INPUT_VARIANT_TO_DROPDOWN_VARIANT = {
22
- [InputVariant.TRANSPARENT]: DropdownVariant.TRANSPARENT,
23
- [InputVariant.PRIMARY]: DropdownVariant.PRIMARY,
24
- [InputVariant.SECONDARY]: DropdownVariant.SECONDARY,
25
- [InputVariant.TERTIARY]: DropdownVariant.TERTIARY,
26
- [InputVariant.BASE]: DropdownVariant.PRIMARY
12
+ /**
13
+ * The form control for choosing several values from a list of options. SelectInput's field and
14
+ * listbox (through the shared `SelectInputRoot` engine) with three differences: the value is an
15
+ * array of option ids in selection order, choosing a row toggles it and keeps the panel open, and
16
+ * the field shows the chosen options as chips on one line, with a `+N` chip for those that do not
17
+ * fit. `maxSelected` caps the choices; `onCreate` (with `isSearchable`) offers a "Create" row for a
18
+ * term that matches no option.
19
+ *
20
+ * Search, groups, pinned options, descriptions, disabled reasons, loading, paging,
21
+ * virtualization, the keyboard model, sizes and fills are SelectInput's. It does not validate (the
22
+ * app passes `error`) or hold free-form tags (that is `TagInput`).
23
+ *
24
+ * SSR: closed by default; every chip renders on the server and the overflow is clipped until the
25
+ * first measurement. Nothing here touches `window` or `document` at module scope.
26
+ */
27
+ /** Canonical rungs; MultiSelectInput supports all five (SelectInput's rung table). */
28
+ var MultiSelectInputSize = /* @__PURE__ */ function(MultiSelectInputSize) {
29
+ /** 20px field, 16px chips, 24px rows. */
30
+ MultiSelectInputSize["X_SMALL"] = "X_SMALL";
31
+ /** 24px field, 16px chips, 24px rows. */
32
+ MultiSelectInputSize["SMALL"] = "SMALL";
33
+ /** 32px field, 20px chips, 32px rows. The default. */
34
+ MultiSelectInputSize["MEDIUM"] = "MEDIUM";
35
+ /** 36px field, 24px chips, 32px rows. */
36
+ MultiSelectInputSize["LARGE"] = "LARGE";
37
+ /** 40px field, 28px chips, 32px rows. */
38
+ MultiSelectInputSize["X_LARGE"] = "X_LARGE";
39
+ return MultiSelectInputSize;
40
+ }({});
41
+ /** Resting fill of the field (Constitution V-A surface set; 1.x `InputVariant` unchanged). */
42
+ var MultiSelectInputVariant = /* @__PURE__ */ function(MultiSelectInputVariant) {
43
+ /** `background.base` fill. */
44
+ MultiSelectInputVariant["BASE"] = "BASE";
45
+ /** `background.primary` fill. The default. */
46
+ MultiSelectInputVariant["PRIMARY"] = "PRIMARY";
47
+ /** `background.secondary` fill. */
48
+ MultiSelectInputVariant["SECONDARY"] = "SECONDARY";
49
+ /** `background.tertiary` fill. */
50
+ MultiSelectInputVariant["TERTIARY"] = "TERTIARY";
51
+ return MultiSelectInputVariant;
52
+ }({});
53
+ /** Identity: the engine draws every rung. */
54
+ var MULTI_SELECT_INPUT_SIZE_TO_SELECT_INPUT_SIZE_MAP = {
55
+ ["X_SMALL"]: SelectInputSize.X_SMALL,
56
+ ["SMALL"]: SelectInputSize.SMALL,
57
+ ["MEDIUM"]: SelectInputSize.MEDIUM,
58
+ ["LARGE"]: SelectInputSize.LARGE,
59
+ ["X_LARGE"]: SelectInputSize.X_LARGE
27
60
  };
28
- var _exp = () => ({ $size }) => `0 ${getInputPadding($size)}`;
29
- var _exp2 = () => ({ $size }) => getInputHeight($size);
30
- var _exp3 = () => ({ $fillWidth, $width }) => $fillWidth ? "100%" : $width ? getCssSizeValue($width) : "auto";
31
- var _exp4 = () => ({ $isDisabled }) => $isDisabled ? "not-allowed" : "pointer";
32
- var _exp5 = () => ({ $isDisabled }) => $isDisabled ? .5 : 1;
33
- var _exp6 = () => ({ theme, $variant }) => getInputSurfaceColor(theme, $variant);
34
- var _exp7 = () => ({ theme, $variant, $isActive, $isError }) => {
35
- if ($isActive) return theme.color.border.selected;
36
- if ($isError) return theme.color.border.error;
37
- return getInputBorderColor(theme, $variant);
61
+ /** Identity: the engine draws every fill. */
62
+ var MULTI_SELECT_INPUT_VARIANT_TO_SELECT_INPUT_VARIANT_MAP = {
63
+ ["BASE"]: SelectInputVariant.BASE,
64
+ ["PRIMARY"]: SelectInputVariant.PRIMARY,
65
+ ["SECONDARY"]: SelectInputVariant.SECONDARY,
66
+ ["TERTIARY"]: SelectInputVariant.TERTIARY
38
67
  };
39
- var _exp8 = () => ({ theme, $variant, $isActive }) => $isActive ? theme.color.border.selected : getInputBorderColor(theme, $variant);
40
- var StyledMultiSelectInput = withTheme(/*#__PURE__*/ styled("div")({
41
- name: "StyledMultiSelectInput",
42
- class: "sf4kgcu",
43
- propsAsIs: false,
44
- vars: {
45
- "sf4kgcu-0": [_exp()],
46
- "sf4kgcu-1": [_exp2()],
47
- "sf4kgcu-2": [_exp3()],
48
- "sf4kgcu-3": [_exp4()],
49
- "sf4kgcu-4": [_exp5()],
50
- "sf4kgcu-5": [_exp6()],
51
- "sf4kgcu-6": [_exp7()],
52
- "sf4kgcu-7": [_exp8()]
53
- }
54
- }));
55
- var _exp9 = () => ({ $size }) => getInputHeight($size);
56
- var _exp0 = () => ({ theme }) => theme.color.text.primary;
57
- var _exp1 = () => ({ theme, $size }) => getInputFontSize(theme, $size);
58
- var _exp10 = () => ({ theme, $size }) => getInputLineHeight(theme, $size);
59
- var _exp11 = () => ({ theme }) => theme.font.sans.weight.medium;
60
- var _exp12 = () => ({ theme }) => theme.font.sans.family;
61
- var _exp13 = () => ({ theme }) => theme.color.text.tertiary;
62
- var StyledSearchInput = withTheme(/*#__PURE__*/ styled("input")({
63
- name: "StyledSearchInput",
64
- class: "s15yoqwu",
65
- propsAsIs: false,
66
- vars: {
67
- "s15yoqwu-0": [_exp9()],
68
- "s15yoqwu-1": [_exp0()],
69
- "s15yoqwu-2": [_exp1()],
70
- "s15yoqwu-3": [_exp10()],
71
- "s15yoqwu-4": [_exp11()],
72
- "s15yoqwu-5": [_exp12()],
73
- "s15yoqwu-6": [_exp13()]
74
- }
75
- }));
76
- var _exp14 = () => ({ $width }) => getCssSizeValue($width, 200);
77
- var _exp15 = () => ({ $fillWidth, $width }) => {
78
- if ($width) return getCssSizeValue($width);
79
- return $fillWidth ? "100%" : "auto";
68
+ /** Chip rung per field rung: 2 to 6px inside the field, never above the field's text step. */
69
+ var MULTI_SELECT_INPUT_SIZE_TO_CHIP_SIZE_MAP = {
70
+ ["X_SMALL"]: ChipSize.X_SMALL,
71
+ ["SMALL"]: ChipSize.X_SMALL,
72
+ ["MEDIUM"]: ChipSize.SMALL,
73
+ ["LARGE"]: ChipSize.MEDIUM,
74
+ ["X_LARGE"]: ChipSize.LARGE
80
75
  };
81
- var MultiSelectInputContent = /*#__PURE__*/ styled("div")({
82
- name: "MultiSelectInputContent",
83
- class: "m1wojn02",
84
- propsAsIs: false,
85
- vars: {
86
- "m1wojn02-0": [_exp14()],
87
- "m1wojn02-1": [_exp15()]
88
- }
89
- });
90
- var _exp16 = () => ({ $fillWidth, $width }) => $fillWidth || $width ? "100%" : "auto";
91
- var MultiSelectInputOptionsContainer = /*#__PURE__*/ styled("div")({
92
- name: "MultiSelectInputOptionsContainer",
93
- class: "m1ybiav6",
94
- propsAsIs: false,
95
- vars: { "m1ybiav6-0": [_exp16()] }
96
- });
97
- var _exp17 = () => ({ theme, $isFocused }) => $isFocused ? theme.color.background.secondary : "transparent";
98
- var _exp18 = () => ({ theme }) => theme.color.background.secondary;
99
- var MultiSelectInputOption = withTheme(/*#__PURE__*/ styled("div")({
100
- name: "MultiSelectInputOption",
101
- class: "m78p4ib",
102
- propsAsIs: false,
103
- vars: {
104
- "m78p4ib-0": [_exp17()],
105
- "m78p4ib-1": [_exp18()]
106
- }
107
- }));
108
- var _exp19 = () => ({ theme, $isFocused }) => $isFocused ? theme.color.background.tertiary : "transparent";
109
- var _exp21 = () => ({ theme }) => theme.color.background.tertiary;
110
- var PinnedOptionButton = withTheme(/*#__PURE__*/ styled("button")({
111
- name: "PinnedOptionButton",
112
- class: "p6xdmgb",
113
- propsAsIs: false,
114
- vars: {
115
- "p6xdmgb-0": [_exp19()],
116
- "p6xdmgb-1": [_exp21()]
117
- }
118
- }));
119
- var OptionIconSlot = /*#__PURE__*/ styled("span")({
120
- name: "OptionIconSlot",
121
- class: "o16no7ck",
76
+ /** The chips' one line, wrapping so a chip that does not fit drops out of sight. */
77
+ var ChipRowRoot = /*#__PURE__*/ styled("span")({
78
+ name: "ChipRowRoot",
79
+ class: "gx-MultiSelectInput-ChipRowRoot-cf4kgcu",
122
80
  propsAsIs: false
123
81
  });
124
- var _exp22 = () => ({ $size }) => getInputControlSize($size);
125
- var ResetIconSlot = /*#__PURE__*/ styled("span")({
126
- name: "ResetIconSlot",
127
- class: "roazm1",
128
- propsAsIs: false,
129
- vars: { "roazm1-0": [_exp22()] }
130
- });
131
- /**
132
- * Multi-choice dropdown. Same option shape and search contract as `SelectInput`,
133
- * but the panel stays open across picks and the trigger summarizes what's chosen.
134
- *
135
- * Controlled: `onChange` hands back the complete next selection, not a delta.
136
- */
137
- var MultiSelectInput = ({ label, icon, variant = InputVariant.PRIMARY, size = InputSize.MEDIUM, options, value, placeholder = "Select options...", onChange, width, fillWidth, dropdownWidth, dropdownPlacement = DropdownPosition.BOTTOM_START, isDisabled = false, isRequired = false, isOpen: controlledIsOpen, isIconTrailing, onOpenChange, onReset, pinnedOptions = [], maxDisplayItems = 3, renderSelectedText, renderSelectedContent, error, onSearch, debounceMs = 300 }) => {
138
- const isSearchable = !!onSearch;
139
- const [isHovered, setIsHovered] = useState(false);
140
- const [searchTerm, setSearchTerm] = useState("");
141
- const [focusedOptionIndex, setFocusedOptionIndex] = useState(-1);
142
- const inputRef = useRef(null);
143
- const triggerRef = useRef(null);
144
- const optionsRefs = useRef([]);
145
- const { isOpen, setOpen } = useControlledOpenState({
146
- isOpen: controlledIsOpen,
147
- onOpenChange
82
+ /** The line's height per rung: the chip height (Chip's own sums), so a wrapped chip is clipped. */
83
+ var MULTI_SELECT_INPUT_SIZE_TO_CHIP_ROW_CSS_MAP = {
84
+ ["X_SMALL"]: "gx-MultiSelectInput-X_SMALL-x15yoqwu",
85
+ ["SMALL"]: "gx-MultiSelectInput-SMALL-s1wojn02",
86
+ ["MEDIUM"]: "gx-MultiSelectInput-MEDIUM-m1ybiav6",
87
+ ["LARGE"]: "gx-MultiSelectInput-LARGE-l78p4ib",
88
+ ["X_LARGE"]: "gx-MultiSelectInput-X_LARGE-x6xdmgb"
89
+ };
90
+ /** One visible chip left: it and the `+N` chip share the line, and the first chip truncates. */
91
+ var SINGLE_CHIP_ROW_CSS = "gx-MultiSelectInput-SINGLE_CHIP_ROW_CSS-s16no7ck";
92
+ /** The first chip may shrink, so at least one always shows. */
93
+ var FIRST_CHIP_CSS = "gx-MultiSelectInput-FIRST_CHIP_CSS-foazm1";
94
+ /** The selected options as chips on one line, then `+N` for the ones that do not fit. */
95
+ function ChipRow({ options, size, isDisabled }) {
96
+ const rowRef = useRef(null);
97
+ const [visibleCount, setVisibleCount] = useState(options.length);
98
+ const selectionKey = options.map((option) => option.id).join("\n");
99
+ const [lastKey, setLastKey] = useState(selectionKey);
100
+ if (lastKey !== selectionKey) {
101
+ setLastKey(selectionKey);
102
+ setVisibleCount(options.length);
103
+ }
104
+ useIsomorphicLayoutEffect(() => {
105
+ const row = rowRef.current;
106
+ if (row === null) return;
107
+ const chips = Array.from(row.children);
108
+ const first = chips[0];
109
+ if (first === void 0) return;
110
+ if (chips.some((chip) => chip.offsetTop > first.offsetTop) && visibleCount > 1) setVisibleCount(visibleCount - 1);
148
111
  });
149
- const triggerWidth = useElementWidth(triggerRef);
150
- const resolvedDropdownWidth = useMemo(() => dropdownWidth ?? triggerWidth ?? width, [
151
- dropdownWidth,
152
- triggerWidth,
153
- width
154
- ]);
155
- const effectiveIsDisabled = isDisabled || options.length === 0;
156
- const visible = isOpen;
157
- const debouncedSearchTerm = useDebouncedValue(searchTerm, debounceMs, isSearchable);
112
+ const optionCount = options.length;
158
113
  useEffect(() => {
159
- if (visible && isSearchable && inputRef.current) {
160
- inputRef.current.focus();
161
- inputRef.current.select();
162
- }
163
- }, [visible, isSearchable]);
164
- const [prevVisible, setPrevVisible] = useState(visible);
165
- if (visible !== prevVisible) {
166
- setPrevVisible(visible);
167
- if (!visible && isSearchable) {
168
- setSearchTerm("");
169
- setFocusedOptionIndex(-1);
170
- }
171
- }
172
- const renderIcon = useCallback(() => {
173
- if (!icon) return null;
174
- let iconVariant = INPUT_VARIANT_TO_ICON_VARIANT_MAP[variant];
175
- if (isDisabled) iconVariant = IconVariant.TERTIARY;
176
- return /* @__PURE__ */ jsx(FlexItem, {
177
- shrink: 0,
178
- grow: 0,
179
- children: /* @__PURE__ */ jsx(Icon, {
180
- component: icon,
181
- variant: iconVariant,
182
- size: getInputIconSize(size)
183
- })
114
+ const row = rowRef.current;
115
+ if (row === null || typeof ResizeObserver === "undefined") return;
116
+ let lastWidth = row.clientWidth;
117
+ const observer = new ResizeObserver(() => {
118
+ if (row.clientWidth === lastWidth) return;
119
+ lastWidth = row.clientWidth;
120
+ setVisibleCount(optionCount);
184
121
  });
185
- }, [
186
- icon,
187
- variant,
188
- size,
189
- isDisabled
190
- ]);
191
- const filteredOptions = useMemo(() => {
192
- if (!isSearchable || !debouncedSearchTerm.trim()) return options;
193
- return onSearch(debouncedSearchTerm, options);
194
- }, [
195
- isSearchable,
196
- onSearch,
197
- debouncedSearchTerm,
198
- options
199
- ]);
200
- const filteredPinnedOptions = useMemo(() => {
201
- if (!isSearchable || !debouncedSearchTerm.trim()) return pinnedOptions;
202
- return [];
203
- }, [
204
- isSearchable,
205
- debouncedSearchTerm,
206
- pinnedOptions
207
- ]);
208
- if (focusedOptionIndex >= filteredPinnedOptions.length + filteredOptions.length && focusedOptionIndex !== -1) setFocusedOptionIndex(-1);
209
- useEffect(() => {
210
- optionsRefs.current = [];
211
- }, [filteredPinnedOptions, filteredOptions]);
212
- const handleToggle = useCallback(() => {
213
- if (effectiveIsDisabled) return;
214
- setOpen(!visible);
215
- }, [
216
- effectiveIsDisabled,
217
- setOpen,
218
- visible
219
- ]);
220
- const handleClose = useCallback(() => {
221
- setOpen(false);
222
- }, [setOpen]);
223
- const handleOptionToggle = (option) => {
224
- if (!onChange) return;
225
- const isCurrentlySelected = value.some((v) => v.id === option.id);
226
- let newValue;
227
- if (isCurrentlySelected) newValue = value.filter((v) => v.id !== option.id);
228
- else newValue = [...value, option];
229
- onChange(newValue);
230
- };
231
- const handlePinnedOptionToggle = (pinnedOption) => {
232
- if (!onChange) return;
233
- const pinnedOptionsData = options.filter((option) => pinnedOption.optionIds.includes(option.id));
234
- const allPinnedSelected = pinnedOptionsData.every((option) => value.some((v) => v.id === option.id));
235
- let newValue;
236
- if (allPinnedSelected) newValue = value.filter((v) => !pinnedOption.optionIds.includes(v.id));
237
- else {
238
- const optionsToAdd = pinnedOptionsData.filter((option) => !value.some((v) => v.id === option.id));
239
- newValue = [...value, ...optionsToAdd];
240
- }
241
- onChange(newValue);
242
- };
243
- const handleReset = () => {
244
- if (onReset) onReset();
245
- handleClose();
246
- };
247
- const handleMouseEnter = () => {
248
- setIsHovered(true);
249
- };
250
- const handleMouseLeave = () => {
251
- setIsHovered(false);
252
- };
253
- const handleKeyDown = (e) => {
254
- if (effectiveIsDisabled) return;
255
- if (isSearchable && visible) {
256
- handleSearchKeyDown(e);
257
- return;
258
- }
259
- if (e.key === "Enter" || e.key === " ") {
260
- e.preventDefault();
261
- handleToggle();
262
- }
263
- };
264
- const handleSearchKeyDown = (e) => {
265
- if (!isSearchable) return;
266
- const allOptions = [...filteredPinnedOptions, ...filteredOptions];
267
- const currentIndex = focusedOptionIndex;
268
- const focusOptionAtIndex = (nextIndex) => {
269
- setFocusedOptionIndex(nextIndex);
270
- optionsRefs.current[nextIndex]?.scrollIntoView({ block: "nearest" });
271
- };
272
- switch (e.key) {
273
- case "ArrowDown":
274
- e.preventDefault();
275
- if (currentIndex < allOptions.length - 1) focusOptionAtIndex(currentIndex + 1);
276
- break;
277
- case "ArrowUp":
278
- e.preventDefault();
279
- if (currentIndex > 0) focusOptionAtIndex(currentIndex - 1);
280
- else inputRef.current?.focus();
281
- break;
282
- case "Enter":
283
- e.preventDefault();
284
- if (currentIndex >= 0 && currentIndex < allOptions.length) if (currentIndex < filteredPinnedOptions.length) handlePinnedOptionToggle(filteredPinnedOptions[currentIndex]);
285
- else handleOptionToggle(filteredOptions[currentIndex - filteredPinnedOptions.length]);
286
- break;
287
- case "Escape":
288
- e.preventDefault();
289
- handleClose();
290
- break;
291
- default:
292
- if (e.key.length === 1 && !e.ctrlKey && !e.metaKey) setFocusedOptionIndex(-1);
293
- break;
294
- }
295
- };
296
- const handleInputChange = (e) => {
297
- setSearchTerm(e.target.value);
298
- setFocusedOptionIndex(-1);
299
- };
300
- const isOptionSelected = (optionId) => {
301
- return value.some((v) => v.id === optionId);
302
- };
303
- const isPinnedOptionSelected = (pinnedOption) => {
304
- return options.filter((option) => pinnedOption.optionIds.includes(option.id)).every((option) => value.some((v) => v.id === option.id));
305
- };
306
- const isPinnedOptionFocused = (index) => {
307
- return isSearchable && focusedOptionIndex === index && index < filteredPinnedOptions.length;
308
- };
309
- const isOptionFocused = (index) => {
310
- return isSearchable && focusedOptionIndex === index + filteredPinnedOptions.length && index >= 0;
311
- };
312
- const displayText = useMemo(() => {
313
- if (renderSelectedText) return renderSelectedText(value, placeholder);
314
- if (value.length === 0) return placeholder;
315
- if (value.length <= maxDisplayItems) return value.map((v) => v.label).join(", ");
316
- const displayItems = value.slice(0, maxDisplayItems).map((v) => v.label);
317
- const remainingCount = value.length - maxDisplayItems;
318
- return `${displayItems.join(", ")} +${remainingCount} more`;
319
- }, [
122
+ observer.observe(row);
123
+ return () => observer.disconnect();
124
+ }, [optionCount]);
125
+ const shown = Math.max(1, Math.min(visibleCount, options.length));
126
+ const hidden = options.slice(shown);
127
+ const chipSize = MULTI_SELECT_INPUT_SIZE_TO_CHIP_SIZE_MAP[size];
128
+ return /* @__PURE__ */ jsxs(ChipRowRoot, {
129
+ ref: rowRef,
130
+ "aria-hidden": true,
131
+ className: cx(MULTI_SELECT_INPUT_SIZE_TO_CHIP_ROW_CSS_MAP[size], shown === 1 && hidden.length > 0 && SINGLE_CHIP_ROW_CSS),
132
+ children: [options.slice(0, shown).map((option, index) => /* @__PURE__ */ jsx(Chip, {
133
+ label: option.label,
134
+ ...option.icon === void 0 ? {} : { icon: option.icon },
135
+ size: chipSize,
136
+ isDisabled,
137
+ ...index === 0 ? { className: FIRST_CHIP_CSS } : {}
138
+ }, option.id)), hidden.length > 0 && /* @__PURE__ */ jsx(Chip, {
139
+ label: `+${hidden.length}`,
140
+ size: chipSize,
141
+ isDisabled,
142
+ tooltip: hidden.map((option) => option.label).join(", ")
143
+ })]
144
+ });
145
+ }
146
+ /** Choose several values from a list of options; the choices show as chips in the field. */
147
+ var MultiSelectInputInner = forwardRef(function MultiSelectInput({ value, defaultValue, onChange, size: sizeProp, variant: variantProp, isGhost, placeholder, isDisabled: isDisabledProp, maxSelected, renderValue, isSearchable, onCreate, className, style, ...rest }, ref) {
148
+ const size = sizeProp ?? "MEDIUM";
149
+ const variant = variantProp ?? "PRIMARY";
150
+ const isDisabled = isDisabledProp ?? false;
151
+ const [currentValue, setValue] = useControlledState({
320
152
  value,
321
- placeholder,
322
- maxDisplayItems,
323
- renderSelectedText
324
- ]);
325
- const noop = useCallback((_checked) => {}, []);
326
- const dropdownBody = /* @__PURE__ */ jsxs(MultiSelectInputContent, {
327
- $fillWidth: fillWidth,
328
- $width: resolvedDropdownWidth,
329
- children: [
330
- filteredPinnedOptions.length > 0 && /* @__PURE__ */ jsxs(Fragment$1, { children: [filteredPinnedOptions.map((pinnedOption, index) => /* @__PURE__ */ jsx(PinnedOptionButton, {
331
- ref: (el) => {
332
- optionsRefs.current[index] = el;
333
- },
334
- $isFocused: isPinnedOptionFocused(index),
335
- $size: size,
336
- onClick: (e) => {
337
- e.preventDefault();
338
- handlePinnedOptionToggle(pinnedOption);
339
- },
340
- onMouseEnter: () => setFocusedOptionIndex(index),
341
- children: /* @__PURE__ */ jsxs(FlexWrapper, {
342
- alignItems: AlignItems.CENTER,
343
- gap: 8,
344
- fillWidth: true,
345
- children: [/* @__PURE__ */ jsx(CheckboxInput, {
346
- variant,
347
- size,
348
- isChecked: isPinnedOptionSelected(pinnedOption),
349
- onChange: noop
350
- }), /* @__PURE__ */ jsx(FlexItem, {
351
- grow: 1,
352
- shrink: 1,
353
- minWidth: 0,
354
- children: /* @__PURE__ */ jsx(Text, {
355
- variant: isPinnedOptionSelected(pinnedOption) ? TextVariant.PRIMARY : TextVariant.SECONDARY,
356
- size: getInputTextSize(size),
357
- cursor: !effectiveIsDisabled ? "pointer" : "not-allowed",
358
- isEllipsis: true,
359
- children: pinnedOption.label
360
- })
361
- })]
362
- })
363
- }, pinnedOption.id)), /* @__PURE__ */ jsx(FlexItem, {
364
- shrink: 0,
365
- children: /* @__PURE__ */ jsx(HorizontalDivider, {})
366
- })] }),
367
- /* @__PURE__ */ jsx(MultiSelectInputOptionsContainer, {
368
- $fillWidth: fillWidth,
369
- $width: resolvedDropdownWidth,
370
- children: filteredOptions.length > 0 ? filteredOptions.map((option, index) => {
371
- const absoluteIndex = filteredPinnedOptions.length + index;
372
- return /* @__PURE__ */ jsx(MultiSelectInputOption, {
373
- ref: (el) => {
374
- optionsRefs.current[absoluteIndex] = el;
375
- },
376
- $isFocused: isOptionFocused(index),
377
- onClick: (e) => {
378
- e.preventDefault();
379
- handleOptionToggle(option);
380
- },
381
- onMouseEnter: () => setFocusedOptionIndex(absoluteIndex),
382
- children: /* @__PURE__ */ jsxs(FlexWrapper, {
383
- alignItems: AlignItems.CENTER,
384
- gap: 8,
385
- fillWidth: true,
386
- children: [
387
- /* @__PURE__ */ jsx(CheckboxInput, {
388
- variant,
389
- size,
390
- isChecked: isOptionSelected(option.id),
391
- onChange: noop
392
- }),
393
- option.icon && /* @__PURE__ */ jsx(OptionIconSlot, { children: option.icon }),
394
- /* @__PURE__ */ jsx(FlexItem, {
395
- grow: 1,
396
- shrink: 1,
397
- minWidth: 0,
398
- children: /* @__PURE__ */ jsx(Text, {
399
- variant: option.variant ?? TextVariant.PRIMARY,
400
- size: getInputTextSize(size),
401
- cursor: !effectiveIsDisabled ? "pointer" : "not-allowed",
402
- isEllipsis: true,
403
- children: option.label
404
- })
405
- })
406
- ]
407
- })
408
- }, option.id);
409
- }) : /* @__PURE__ */ jsx(FlexWrapper, {
410
- padding: 8,
411
- children: /* @__PURE__ */ jsx(Text, {
412
- variant: TextVariant.TERTIARY,
413
- size: getInputTextSize(size),
414
- children: "No options found"
415
- })
416
- })
417
- }),
418
- onReset && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(FlexItem, {
419
- shrink: 0,
420
- children: /* @__PURE__ */ jsx(HorizontalDivider, {})
421
- }), /* @__PURE__ */ jsx(PinnedOptionButton, {
422
- onClick: handleReset,
423
- $isFocused: false,
424
- $size: size,
425
- children: /* @__PURE__ */ jsxs(FlexWrapper, {
426
- alignItems: AlignItems.CENTER,
427
- gap: 8,
428
- children: [/* @__PURE__ */ jsx(ResetIconSlot, {
429
- $size: size,
430
- children: /* @__PURE__ */ jsx(Icon, {
431
- component: ArrowCounterClockwiseIcon,
432
- variant: IconVariant.TERTIARY,
433
- size: getInputIconSize(size)
434
- })
435
- }), /* @__PURE__ */ jsx(Text, {
436
- variant: TextVariant.SECONDARY,
437
- size: getInputTextSize(size),
438
- cursor: !effectiveIsDisabled ? "pointer" : "not-allowed",
439
- children: "Reset"
440
- })]
441
- })
442
- })] })
443
- ]
153
+ defaultValue: defaultValue ?? [],
154
+ onChange
444
155
  });
445
- const displayValue = useMemo(() => {
446
- if (isSearchable && visible) return searchTerm;
447
- return displayText;
448
- }, [
449
- isSearchable,
450
- visible,
451
- searchTerm,
452
- displayText
453
- ]);
454
- const textVariant = useMemo(() => {
455
- if (value.length > 0) return TextVariant.PRIMARY;
456
- if (!effectiveIsDisabled && (visible || isHovered)) return TextVariant.SECONDARY;
457
- return TextVariant.TERTIARY;
458
- }, [
459
- value.length,
460
- visible,
461
- isHovered,
462
- effectiveIsDisabled
463
- ]);
464
- return /* @__PURE__ */ jsxs(FlexWrapper, {
465
- direction: FlexDirection.COLUMN,
466
- gap: 4,
467
- fillWidth,
468
- children: [
469
- label && /* @__PURE__ */ jsx(InputLabel, {
470
- label,
471
- isRequired
472
- }),
473
- /* @__PURE__ */ jsx(Dropdown, {
474
- variant: INPUT_VARIANT_TO_DROPDOWN_VARIANT[variant],
475
- body: dropdownBody,
476
- isOpen: visible,
477
- onClose: handleClose,
478
- minWidth: resolvedDropdownWidth ?? 200,
479
- offset: [0, 3],
480
- fillWidth,
481
- noPadding: true,
482
- position: dropdownPlacement,
483
- children: isSearchable && visible ? /* @__PURE__ */ jsxs(StyledMultiSelectInput, {
484
- ref: triggerRef,
485
- $variant: variant,
486
- $size: size,
487
- $isActive: visible ?? false,
488
- $isDisabled: effectiveIsDisabled,
489
- $isError: !!error,
490
- $width: width,
491
- $fillWidth: fillWidth,
492
- onMouseEnter: handleMouseEnter,
493
- onMouseLeave: handleMouseLeave,
494
- onClick: handleToggle,
495
- children: [
496
- !isIconTrailing && renderIcon(),
497
- /* @__PURE__ */ jsx(StyledSearchInput, {
498
- ref: inputRef,
499
- $size: size,
500
- $isActive: visible ?? false,
501
- $isDisabled: effectiveIsDisabled,
502
- $isError: !!error,
503
- $width: width,
504
- $fillWidth: fillWidth,
505
- type: "text",
506
- placeholder,
507
- value: searchTerm,
508
- onChange: handleInputChange,
509
- onKeyDown: handleSearchKeyDown,
510
- autoComplete: "off",
511
- autoCorrect: "off",
512
- disabled: effectiveIsDisabled,
513
- onClick: (e) => e.stopPropagation()
514
- }),
515
- /* @__PURE__ */ jsx(FlexWrapper, { children: /* @__PURE__ */ jsx(Rotate, {
516
- isRotated: visible,
517
- deg: -180,
518
- children: /* @__PURE__ */ jsx(Icon, {
519
- component: CaretDownIcon,
520
- size: getInputIconSize(size),
521
- variant: !effectiveIsDisabled && (isHovered || visible) ? IconVariant.SECONDARY : IconVariant.TERTIARY
522
- })
523
- }) }),
524
- isIconTrailing && renderIcon()
525
- ]
526
- }) : /* @__PURE__ */ jsxs(StyledMultiSelectInput, {
527
- ref: triggerRef,
528
- $variant: variant,
529
- $size: size,
530
- $isActive: visible ?? false,
531
- $isDisabled: effectiveIsDisabled,
532
- $isError: !!error,
533
- $width: width,
534
- $fillWidth: fillWidth,
535
- onClick: handleToggle,
536
- onKeyDown: handleKeyDown,
537
- onMouseEnter: handleMouseEnter,
538
- onMouseLeave: handleMouseLeave,
539
- role: "button",
540
- tabIndex: effectiveIsDisabled ? -1 : 0,
541
- "aria-haspopup": "listbox",
542
- "aria-expanded": visible,
543
- "aria-label": displayValue,
544
- children: [
545
- !isIconTrailing && renderIcon(),
546
- renderSelectedContent ? renderSelectedContent(value, placeholder) : /* @__PURE__ */ jsx(Text, {
547
- variant: textVariant,
548
- size: getInputTextSize(size),
549
- cursor: !effectiveIsDisabled ? "pointer" : "not-allowed",
550
- isEllipsis: true,
551
- children: displayValue
552
- }),
553
- /* @__PURE__ */ jsx(FlexWrapper, { children: /* @__PURE__ */ jsx(Rotate, {
554
- isRotated: visible,
555
- deg: -180,
556
- children: /* @__PURE__ */ jsx(Icon, {
557
- component: CaretDownIcon,
558
- size: getInputIconSize(size),
559
- variant: !effectiveIsDisabled && (isHovered || visible) ? IconVariant.SECONDARY : IconVariant.TERTIARY
560
- })
561
- }) }),
562
- isIconTrailing && renderIcon()
563
- ]
564
- })
565
- }),
566
- error && /* @__PURE__ */ jsx(Text, {
567
- variant: TextVariant.ERROR,
568
- size: TextSize.BODY_SM,
569
- children: error
570
- })
571
- ]
156
+ const limit = maxSelected === void 0 || Math.floor(maxSelected) < 1 ? void 0 : Math.floor(maxSelected);
157
+ const isAtLimit = limit !== void 0 && currentValue.length >= limit;
158
+ const toggle = (id) => {
159
+ setValue(currentValue.includes(id) ? currentValue.filter((selectedId) => selectedId !== id) : [...currentValue, id]);
160
+ };
161
+ return /* @__PURE__ */ jsx(SelectInputRoot, {
162
+ componentName: "MultiSelectInput",
163
+ ...rest,
164
+ ref,
165
+ size: MULTI_SELECT_INPUT_SIZE_TO_SELECT_INPUT_SIZE_MAP[size],
166
+ variant: MULTI_SELECT_INPUT_VARIANT_TO_SELECT_INPUT_VARIANT_MAP[variant],
167
+ isGhost: isGhost === true,
168
+ placeholder: placeholder ?? "Select options…",
169
+ isDisabled,
170
+ isSearchable: isSearchable === true,
171
+ selectedIds: currentValue,
172
+ isMultiple: true,
173
+ onOptionSelect: toggle,
174
+ onClear: () => setValue([]),
175
+ renderSelection: (selected) => renderValue !== void 0 ? renderValue(selected) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(VisuallyHidden, { children: selected.map((option) => option.label).join(", ") }), /* @__PURE__ */ jsx(ChipRow, {
176
+ options: selected,
177
+ size,
178
+ isDisabled
179
+ })] }),
180
+ getSelectionText: (selected) => selected.map((option) => option.label).join(", "),
181
+ limitReason: isAtLimit ? `Limit of ${limit} reached` : void 0,
182
+ onCreate: isSearchable === true ? onCreate : void 0,
183
+ ...className === void 0 ? {} : { className },
184
+ ...style === void 0 ? {} : { style }
572
185
  });
573
- };
186
+ });
187
+ MultiSelectInputInner.displayName = "MultiSelectInput";
188
+ /** Choose several values from a list of options; the choices show as chips in the field. */
189
+ var MultiSelectInput = MultiSelectInputInner;
574
190
  //#endregion
575
- export { MultiSelectInput as default };
191
+ export { MultiSelectInputSize, MultiSelectInputVariant, MultiSelectInput as default };