@galaxy-io/dls 1.6.1 → 2.0.1

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