@amboss/design-system 4.8.2-canary.1 → 4.9.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 (313) hide show
  1. package/build/cjs/components/AIButton/AIButton.js +1 -1
  2. package/build/cjs/components/AccessCardItem/AccessCardItem.js +1 -1
  3. package/build/cjs/components/Avatar/Avatar.js +1 -1
  4. package/build/cjs/components/BulkActionsToolbar/BulkActionsToolbar.js +1 -1
  5. package/build/cjs/components/Button/Button.js +1 -1
  6. package/build/cjs/components/Card/CardHeader/CardHeader.js +1 -1
  7. package/build/cjs/components/CatalogCard/CatalogCard.d.ts +5 -1
  8. package/build/cjs/components/CatalogCard/CatalogCard.js +1 -1
  9. package/build/cjs/components/CheckboxCard/CheckboxCard.js +1 -1
  10. package/build/cjs/components/Collapsible/Collapsible.js +1 -1
  11. package/build/cjs/components/Container/Container.js +1 -1
  12. package/build/cjs/components/Content/ContentBadge/ContentBadge.js +1 -1
  13. package/build/cjs/components/Content/ContentCheckbox/ContentCheckbox.js +1 -1
  14. package/build/cjs/components/Content/ContentLink/ContentLink.js +1 -1
  15. package/build/cjs/components/Content/ContentPictogramButton/ContentPictogramButton.js +1 -1
  16. package/build/cjs/components/Content/ContentTableModal/ContentTableModal.js +2 -2
  17. package/build/cjs/components/Content/ContentText/ContentText.d.ts +1 -1
  18. package/build/cjs/components/Content/ContentText/ContentText.js +1 -1
  19. package/build/cjs/components/Content/DosageButton/DosageButton.d.ts +1 -1
  20. package/build/cjs/components/CountButton/CountButton.js +1 -1
  21. package/build/cjs/components/DataTable/header/SortableCellContent.js +1 -1
  22. package/build/cjs/components/DataTable/header/TableHeader.js +1 -1
  23. package/build/cjs/components/DataTable/useDataTableSelectRows.d.ts +2 -2
  24. package/build/cjs/components/DataTable/useDataTableSelectRows.js +1 -1
  25. package/build/cjs/components/DataTable/useDataTableSort.d.ts +3 -3
  26. package/build/cjs/components/Divider/Divider.js +1 -1
  27. package/build/cjs/components/DropdownMenu/DropdownMenu.d.ts +5 -1
  28. package/build/cjs/components/DropdownMenu/DropdownMenu.js +1 -1
  29. package/build/cjs/components/DropdownMenu/Menu.d.ts +1 -1
  30. package/build/cjs/components/DropdownMenu/Menu.js +1 -1
  31. package/build/cjs/components/EntityList/BaseEntityList.js +1 -1
  32. package/build/cjs/components/EntityList/EntityItemBody.d.ts +3 -1
  33. package/build/cjs/components/EntityList/EntityItemBody.js +1 -1
  34. package/build/cjs/components/EntityList/EntityListItem.js +1 -1
  35. package/build/cjs/components/EntityTree/BaseEntityTree.d.ts +3 -2
  36. package/build/cjs/components/EntityTree/BaseEntityTree.js +1 -1
  37. package/build/cjs/components/EntityTree/EntityTreeItem.js +1 -1
  38. package/build/cjs/components/EntityTree/EntityTreeItemExpandButton.d.ts +3 -1
  39. package/build/cjs/components/EntityTree/EntityTreeItemExpandButton.js +1 -1
  40. package/build/cjs/components/EntityTree/tree.d.ts +1 -1
  41. package/build/cjs/components/EntityTree/tree.js +1 -1
  42. package/build/cjs/components/Form/Checkbox/Checkbox.js +1 -1
  43. package/build/cjs/components/Form/Combobox/Combobox.js +1 -1
  44. package/build/cjs/components/Form/Combobox/MultiSelect.d.ts +1 -1
  45. package/build/cjs/components/Form/Combobox/MultiSelect.js +1 -1
  46. package/build/cjs/components/Form/Combobox/MultiSelectReducer.d.ts +1 -1
  47. package/build/cjs/components/Form/Combobox/OptionsList.d.ts +6 -3
  48. package/build/cjs/components/Form/Combobox/OptionsList.js +1 -1
  49. package/build/cjs/components/Form/Combobox/SingleSelect.d.ts +1 -1
  50. package/build/cjs/components/Form/Combobox/SingleSelect.js +1 -1
  51. package/build/cjs/components/Form/Combobox/constants.js +1 -1
  52. package/build/cjs/components/Form/FormFieldGroup/FormFieldGroup.js +1 -1
  53. package/build/cjs/components/Form/Input/Input.js +1 -1
  54. package/build/cjs/components/Form/PasswordInput/PasswordInput.js +1 -1
  55. package/build/cjs/components/Form/PasswordInput/PasswordInputButton.d.ts +2 -2
  56. package/build/cjs/components/Form/PasswordInput/PasswordInputButton.js +1 -1
  57. package/build/cjs/components/Form/Radio/Radio.js +1 -1
  58. package/build/cjs/components/Form/RangeInput/RangeInput.js +1 -1
  59. package/build/cjs/components/Form/SearchInput/SearchInput.js +1 -1
  60. package/build/cjs/components/Form/SegmentedControl/-types.d.ts +2 -2
  61. package/build/cjs/components/Form/SegmentedControl/SegmentedControl.js +1 -1
  62. package/build/cjs/components/Form/SegmentedControl/SegmentedControlOption.js +1 -1
  63. package/build/cjs/components/Form/Select/Select.js +1 -1
  64. package/build/cjs/components/Form/Select/SelectWithCustomTrigger.js +1 -1
  65. package/build/cjs/components/Form/Select/useTypeAheadSearch.js +1 -1
  66. package/build/cjs/components/Form/Textarea/Textarea.js +1 -1
  67. package/build/cjs/components/Form/Toggle/Toggle.js +1 -1
  68. package/build/cjs/components/Form/ToggleButton/ToggleButton.js +1 -1
  69. package/build/cjs/components/Grid/Grid.js +1 -1
  70. package/build/cjs/components/Icon/Icon.js +1 -1
  71. package/build/cjs/components/Image/Image.js +1 -1
  72. package/build/cjs/components/Inline/Inline.js +1 -1
  73. package/build/cjs/components/Internal/BaseTag/BaseTag.d.ts +5 -1
  74. package/build/cjs/components/Internal/BaseTag/BaseTag.js +1 -1
  75. package/build/cjs/components/Internal/Float/Float.d.ts +1 -1
  76. package/build/cjs/components/Internal/Float/Float.js +1 -1
  77. package/build/cjs/components/Internal/Sandwich/useSandwichContext.d.ts +1 -1
  78. package/build/cjs/components/Layout/Layout.js +1 -1
  79. package/build/cjs/components/Layout/LayoutCssVars.d.ts +1 -1
  80. package/build/cjs/components/Layout/Split/MobileSplitView/useMobileSplitStack.d.ts +1 -1
  81. package/build/cjs/components/Layout/context.d.ts +1 -1
  82. package/build/cjs/components/Layout/registry.d.ts +4 -4
  83. package/build/cjs/components/Lightbox/Lightbox.js +2 -2
  84. package/build/cjs/components/Link/Link.js +1 -1
  85. package/build/cjs/components/MediaItem/MediaItem.d.ts +1 -0
  86. package/build/cjs/components/MediaItem/MediaItem.js +1 -1
  87. package/build/cjs/components/MediaItem/MediaItemSkeleton.js +1 -1
  88. package/build/cjs/components/MediaViewerBar/MediaViewerBar.js +1 -1
  89. package/build/cjs/components/MediaViewerCarousel/CarouselThumbnail/CarouselThumbnail.js +1 -1
  90. package/build/cjs/components/MediaViewerCarousel/MediaCarousel/MediaCarousel.js +1 -1
  91. package/build/cjs/components/Notification/Notification.d.ts +1 -1
  92. package/build/cjs/components/Notification/Notification.js +1 -1
  93. package/build/cjs/components/Patterns/ButtonGroup/ButtonGroup.d.ts +1 -1
  94. package/build/cjs/components/Patterns/EmptyState/EmptyState.js +1 -1
  95. package/build/cjs/components/Patterns/Modal/Modal.js +2 -2
  96. package/build/cjs/components/PictogramButton/PictogramButton.js +1 -1
  97. package/build/cjs/components/Portal/Portal.d.ts +2 -2
  98. package/build/cjs/components/PromptButton/PromptButton.js +1 -1
  99. package/build/cjs/components/PromptInput/AutocompleteList.d.ts +1 -1
  100. package/build/cjs/components/PromptInput/AutocompleteList.js +1 -1
  101. package/build/cjs/components/PromptInput/PromptInput.js +1 -1
  102. package/build/cjs/components/PromptInput/PromptTextArea.js +1 -1
  103. package/build/cjs/components/RadioCard/RadioCard.js +1 -1
  104. package/build/cjs/components/RoundButton/RoundButton.js +1 -1
  105. package/build/cjs/components/SearchResult/SearchResult.js +1 -1
  106. package/build/cjs/components/SegmentedProgressBar/-utils/getPercentagesForVariants.d.ts +4 -2
  107. package/build/cjs/components/SegmentedProgressBar/-utils/getPercentagesForVariants.js +1 -1
  108. package/build/cjs/components/SegmentedProgressBar/LegendPopover.d.ts +2 -1
  109. package/build/cjs/components/SegmentedProgressBar/LegendPopover.js +1 -1
  110. package/build/cjs/components/SegmentedProgressBar/SegmentedProgressBar.js +1 -1
  111. package/build/cjs/components/ShadowWebComponent/ShadowWebComponent.js +1 -1
  112. package/build/cjs/components/Sheet/Sheet.d.ts +1 -1
  113. package/build/cjs/components/Sheet/Sheet.js +1 -1
  114. package/build/cjs/components/SplashCard/SplashCard.js +1 -1
  115. package/build/cjs/components/SplashCardMedia/SplashCardMedia.js +1 -1
  116. package/build/cjs/components/Stack/Stack.js +1 -1
  117. package/build/cjs/components/SubThemeProvider/SubThemeContext.d.ts +1 -1
  118. package/build/cjs/components/SubThemeProvider/SubThemeProvider.d.ts +2 -1
  119. package/build/cjs/components/SubThemeProvider/SubThemeProvider.js +1 -1
  120. package/build/cjs/components/Tabs/Tabs.js +1 -1
  121. package/build/cjs/components/TagGroup/TagGroup.js +1 -1
  122. package/build/cjs/components/Toast/Toast.d.ts +2 -1
  123. package/build/cjs/components/Toast/Toast.js +1 -1
  124. package/build/cjs/components/Toast/ToastProvider.d.ts +5 -3
  125. package/build/cjs/components/Toggletip/BasePopover.js +1 -1
  126. package/build/cjs/components/Tooltip/TooltipContent.d.ts +1 -1
  127. package/build/cjs/components/Tooltip/TooltipContent.js +1 -1
  128. package/build/cjs/components/Typography/StyledText/StyledText.d.ts +1 -1
  129. package/build/cjs/components/Typography/StyledText/StyledText.js +1 -1
  130. package/build/cjs/components/Typography/Text/Text.d.ts +1 -1
  131. package/build/cjs/components/Typography/Text/Text.js +1 -1
  132. package/build/cjs/components/Typography/Text/TextSkeleton.js +1 -1
  133. package/build/cjs/components/Typography/TextClamped/TextClamped.js +1 -1
  134. package/build/cjs/components/UserHighlightTooltip/UserHighlightTooltip.d.ts +1 -1
  135. package/build/cjs/components/UserHighlightTooltip/UserHighlightTooltip.js +1 -1
  136. package/build/cjs/components/Utilities/ContainerQuery/ContainerQueryContext.d.ts +1 -1
  137. package/build/cjs/components/Utilities/Expandable/Expandable.js +1 -1
  138. package/build/cjs/components/Utilities/FloatingPosition/utils.d.ts +1 -1
  139. package/build/cjs/components/VirtualScrollList/VirtualScrollList.d.ts +1 -1
  140. package/build/cjs/components/VirtualScrollList/VirtualScrollList.js +1 -1
  141. package/build/cjs/components/VirtualScrollList/VirtualScrollListReducer.d.ts +2 -2
  142. package/build/cjs/components/VirtualScrollList/VirtualScrollListReducer.js +1 -1
  143. package/build/cjs/shared/appendId.d.ts +1 -1
  144. package/build/cjs/shared/forwardRefPolymorphic.d.ts +2 -0
  145. package/build/cjs/shared/forwardRefPolymorphic.js +1 -0
  146. package/build/cjs/shared/intl/translations/de.json +7 -1
  147. package/build/cjs/shared/intl/translations/en.json +7 -1
  148. package/build/cjs/shared/mediaQueries.d.ts +3 -3
  149. package/build/cjs/shared/mixins/Button/getPillStyles.js +1 -1
  150. package/build/cjs/shared/useAutoPosition.js +1 -1
  151. package/build/cjs/shared/useHover.d.ts +1 -1
  152. package/build/cjs/shared/useHover.js +1 -1
  153. package/build/cjs/shared/useOutsideClickDeactivatesWithinPortal.d.ts +1 -1
  154. package/build/cjs/shared/useOutsideClickDeactivatesWithinPortal.js +1 -1
  155. package/build/cjs/web-tokens/_colors.json +12 -12
  156. package/build/cjs/web-tokens/_sizes.json +55 -55
  157. package/build/esm/components/AIButton/AIButton.js +1 -1
  158. package/build/esm/components/AccessCardItem/AccessCardItem.js +1 -1
  159. package/build/esm/components/Avatar/Avatar.js +1 -1
  160. package/build/esm/components/BulkActionsToolbar/BulkActionsToolbar.js +1 -1
  161. package/build/esm/components/Button/Button.js +1 -1
  162. package/build/esm/components/Card/CardHeader/CardHeader.js +1 -1
  163. package/build/esm/components/CatalogCard/CatalogCard.d.ts +5 -1
  164. package/build/esm/components/CatalogCard/CatalogCard.js +1 -1
  165. package/build/esm/components/CheckboxCard/CheckboxCard.js +1 -1
  166. package/build/esm/components/Collapsible/Collapsible.js +1 -1
  167. package/build/esm/components/Container/Container.js +1 -1
  168. package/build/esm/components/Content/ContentBadge/ContentBadge.js +1 -1
  169. package/build/esm/components/Content/ContentCheckbox/ContentCheckbox.js +1 -1
  170. package/build/esm/components/Content/ContentLink/ContentLink.js +1 -1
  171. package/build/esm/components/Content/ContentPictogramButton/ContentPictogramButton.js +1 -1
  172. package/build/esm/components/Content/ContentTableModal/ContentTableModal.js +2 -2
  173. package/build/esm/components/Content/ContentText/ContentText.d.ts +1 -1
  174. package/build/esm/components/Content/ContentText/ContentText.js +1 -1
  175. package/build/esm/components/Content/DosageButton/DosageButton.d.ts +1 -1
  176. package/build/esm/components/CountButton/CountButton.js +1 -1
  177. package/build/esm/components/DataTable/header/SortableCellContent.js +1 -1
  178. package/build/esm/components/DataTable/header/TableHeader.js +1 -1
  179. package/build/esm/components/DataTable/useDataTableSelectRows.d.ts +2 -2
  180. package/build/esm/components/DataTable/useDataTableSelectRows.js +1 -1
  181. package/build/esm/components/DataTable/useDataTableSort.d.ts +3 -3
  182. package/build/esm/components/Divider/Divider.js +1 -1
  183. package/build/esm/components/DropdownMenu/DropdownMenu.d.ts +5 -1
  184. package/build/esm/components/DropdownMenu/DropdownMenu.js +1 -1
  185. package/build/esm/components/DropdownMenu/Menu.d.ts +1 -1
  186. package/build/esm/components/DropdownMenu/Menu.js +1 -1
  187. package/build/esm/components/EntityList/BaseEntityList.js +1 -1
  188. package/build/esm/components/EntityList/EntityItemBody.d.ts +3 -1
  189. package/build/esm/components/EntityList/EntityItemBody.js +1 -1
  190. package/build/esm/components/EntityList/EntityListItem.js +1 -1
  191. package/build/esm/components/EntityTree/BaseEntityTree.d.ts +3 -2
  192. package/build/esm/components/EntityTree/BaseEntityTree.js +1 -1
  193. package/build/esm/components/EntityTree/EntityTreeItem.js +1 -1
  194. package/build/esm/components/EntityTree/EntityTreeItemExpandButton.d.ts +3 -1
  195. package/build/esm/components/EntityTree/EntityTreeItemExpandButton.js +1 -1
  196. package/build/esm/components/EntityTree/tree.d.ts +1 -1
  197. package/build/esm/components/EntityTree/tree.js +1 -1
  198. package/build/esm/components/Form/Checkbox/Checkbox.js +1 -1
  199. package/build/esm/components/Form/Combobox/Combobox.js +1 -1
  200. package/build/esm/components/Form/Combobox/MultiSelect.d.ts +1 -1
  201. package/build/esm/components/Form/Combobox/MultiSelect.js +1 -1
  202. package/build/esm/components/Form/Combobox/MultiSelectReducer.d.ts +1 -1
  203. package/build/esm/components/Form/Combobox/OptionsList.d.ts +6 -3
  204. package/build/esm/components/Form/Combobox/OptionsList.js +1 -1
  205. package/build/esm/components/Form/Combobox/SingleSelect.d.ts +1 -1
  206. package/build/esm/components/Form/Combobox/SingleSelect.js +1 -1
  207. package/build/esm/components/Form/Combobox/constants.js +1 -1
  208. package/build/esm/components/Form/FormFieldGroup/FormFieldGroup.js +1 -1
  209. package/build/esm/components/Form/Input/Input.js +1 -1
  210. package/build/esm/components/Form/PasswordInput/PasswordInput.js +1 -1
  211. package/build/esm/components/Form/PasswordInput/PasswordInputButton.d.ts +2 -2
  212. package/build/esm/components/Form/PasswordInput/PasswordInputButton.js +1 -1
  213. package/build/esm/components/Form/Radio/Radio.js +1 -1
  214. package/build/esm/components/Form/RangeInput/RangeInput.js +1 -1
  215. package/build/esm/components/Form/SearchInput/SearchInput.js +1 -1
  216. package/build/esm/components/Form/SegmentedControl/-types.d.ts +2 -2
  217. package/build/esm/components/Form/SegmentedControl/SegmentedControl.js +1 -1
  218. package/build/esm/components/Form/SegmentedControl/SegmentedControlOption.js +1 -1
  219. package/build/esm/components/Form/Select/Select.js +1 -1
  220. package/build/esm/components/Form/Select/SelectWithCustomTrigger.js +1 -1
  221. package/build/esm/components/Form/Select/useTypeAheadSearch.js +1 -1
  222. package/build/esm/components/Form/Textarea/Textarea.js +1 -1
  223. package/build/esm/components/Form/Toggle/Toggle.js +1 -1
  224. package/build/esm/components/Form/ToggleButton/ToggleButton.js +1 -1
  225. package/build/esm/components/Grid/Grid.js +1 -1
  226. package/build/esm/components/Icon/Icon.js +1 -1
  227. package/build/esm/components/Image/Image.js +1 -1
  228. package/build/esm/components/Inline/Inline.js +1 -1
  229. package/build/esm/components/Internal/BaseTag/BaseTag.d.ts +5 -1
  230. package/build/esm/components/Internal/BaseTag/BaseTag.js +1 -1
  231. package/build/esm/components/Internal/Float/Float.d.ts +1 -1
  232. package/build/esm/components/Internal/Float/Float.js +1 -1
  233. package/build/esm/components/Internal/Sandwich/useSandwichContext.d.ts +1 -1
  234. package/build/esm/components/Layout/Layout.js +1 -1
  235. package/build/esm/components/Layout/LayoutCssVars.d.ts +1 -1
  236. package/build/esm/components/Layout/Split/MobileSplitView/useMobileSplitStack.d.ts +1 -1
  237. package/build/esm/components/Layout/context.d.ts +1 -1
  238. package/build/esm/components/Layout/registry.d.ts +4 -4
  239. package/build/esm/components/Lightbox/Lightbox.js +2 -2
  240. package/build/esm/components/Link/Link.js +1 -1
  241. package/build/esm/components/MediaItem/MediaItem.d.ts +1 -0
  242. package/build/esm/components/MediaItem/MediaItem.js +1 -1
  243. package/build/esm/components/MediaItem/MediaItemSkeleton.js +1 -1
  244. package/build/esm/components/MediaViewerBar/MediaViewerBar.js +1 -1
  245. package/build/esm/components/MediaViewerCarousel/CarouselThumbnail/CarouselThumbnail.js +1 -1
  246. package/build/esm/components/MediaViewerCarousel/MediaCarousel/MediaCarousel.js +1 -1
  247. package/build/esm/components/Notification/Notification.d.ts +1 -1
  248. package/build/esm/components/Notification/Notification.js +1 -1
  249. package/build/esm/components/Patterns/ButtonGroup/ButtonGroup.d.ts +1 -1
  250. package/build/esm/components/Patterns/EmptyState/EmptyState.js +1 -1
  251. package/build/esm/components/Patterns/Modal/Modal.js +2 -2
  252. package/build/esm/components/PictogramButton/PictogramButton.js +1 -1
  253. package/build/esm/components/Portal/Portal.d.ts +2 -2
  254. package/build/esm/components/PromptButton/PromptButton.js +1 -1
  255. package/build/esm/components/PromptInput/AutocompleteList.d.ts +1 -1
  256. package/build/esm/components/PromptInput/AutocompleteList.js +1 -1
  257. package/build/esm/components/PromptInput/PromptInput.js +1 -1
  258. package/build/esm/components/PromptInput/PromptTextArea.js +1 -1
  259. package/build/esm/components/RadioCard/RadioCard.js +1 -1
  260. package/build/esm/components/RoundButton/RoundButton.js +1 -1
  261. package/build/esm/components/SearchResult/SearchResult.js +1 -1
  262. package/build/esm/components/SegmentedProgressBar/-utils/getPercentagesForVariants.d.ts +4 -2
  263. package/build/esm/components/SegmentedProgressBar/-utils/getPercentagesForVariants.js +1 -1
  264. package/build/esm/components/SegmentedProgressBar/LegendPopover.d.ts +2 -1
  265. package/build/esm/components/SegmentedProgressBar/LegendPopover.js +1 -1
  266. package/build/esm/components/SegmentedProgressBar/SegmentedProgressBar.js +1 -1
  267. package/build/esm/components/ShadowWebComponent/ShadowWebComponent.js +1 -1
  268. package/build/esm/components/Sheet/Sheet.d.ts +1 -1
  269. package/build/esm/components/Sheet/Sheet.js +1 -1
  270. package/build/esm/components/SplashCard/SplashCard.js +1 -1
  271. package/build/esm/components/SplashCardMedia/SplashCardMedia.js +1 -1
  272. package/build/esm/components/Stack/Stack.js +1 -1
  273. package/build/esm/components/SubThemeProvider/SubThemeContext.d.ts +1 -1
  274. package/build/esm/components/SubThemeProvider/SubThemeProvider.d.ts +2 -1
  275. package/build/esm/components/SubThemeProvider/SubThemeProvider.js +1 -1
  276. package/build/esm/components/Tabs/Tabs.js +1 -1
  277. package/build/esm/components/TagGroup/TagGroup.js +1 -1
  278. package/build/esm/components/Toast/Toast.d.ts +2 -1
  279. package/build/esm/components/Toast/Toast.js +1 -1
  280. package/build/esm/components/Toast/ToastProvider.d.ts +5 -3
  281. package/build/esm/components/Toggletip/BasePopover.js +1 -1
  282. package/build/esm/components/Tooltip/TooltipContent.d.ts +1 -1
  283. package/build/esm/components/Tooltip/TooltipContent.js +1 -1
  284. package/build/esm/components/Typography/StyledText/StyledText.d.ts +1 -1
  285. package/build/esm/components/Typography/StyledText/StyledText.js +1 -1
  286. package/build/esm/components/Typography/Text/Text.d.ts +1 -1
  287. package/build/esm/components/Typography/Text/Text.js +1 -1
  288. package/build/esm/components/Typography/Text/TextSkeleton.js +1 -1
  289. package/build/esm/components/Typography/TextClamped/TextClamped.js +1 -1
  290. package/build/esm/components/UserHighlightTooltip/UserHighlightTooltip.d.ts +1 -1
  291. package/build/esm/components/UserHighlightTooltip/UserHighlightTooltip.js +1 -1
  292. package/build/esm/components/Utilities/ContainerQuery/ContainerQueryContext.d.ts +1 -1
  293. package/build/esm/components/Utilities/Expandable/Expandable.js +1 -1
  294. package/build/esm/components/Utilities/FloatingPosition/utils.d.ts +1 -1
  295. package/build/esm/components/VirtualScrollList/VirtualScrollList.d.ts +1 -1
  296. package/build/esm/components/VirtualScrollList/VirtualScrollList.js +1 -1
  297. package/build/esm/components/VirtualScrollList/VirtualScrollListReducer.d.ts +2 -2
  298. package/build/esm/components/VirtualScrollList/VirtualScrollListReducer.js +1 -1
  299. package/build/esm/shared/appendId.d.ts +1 -1
  300. package/build/esm/shared/forwardRefPolymorphic.d.ts +2 -0
  301. package/build/esm/shared/forwardRefPolymorphic.js +1 -0
  302. package/build/esm/shared/intl/translations/de.json +7 -1
  303. package/build/esm/shared/intl/translations/en.json +7 -1
  304. package/build/esm/shared/mediaQueries.d.ts +3 -3
  305. package/build/esm/shared/mixins/Button/getPillStyles.js +1 -1
  306. package/build/esm/shared/useAutoPosition.js +1 -1
  307. package/build/esm/shared/useHover.d.ts +1 -1
  308. package/build/esm/shared/useHover.js +1 -1
  309. package/build/esm/shared/useOutsideClickDeactivatesWithinPortal.d.ts +1 -1
  310. package/build/esm/shared/useOutsideClickDeactivatesWithinPortal.js +1 -1
  311. package/build/esm/web-tokens/_colors.json +12 -12
  312. package/build/esm/web-tokens/_sizes.json +55 -55
  313. package/package.json +9 -5
@@ -1,7 +1,7 @@
1
1
  import type { AriaAttributes } from "react";
2
2
  import React from "react";
3
- import type { EntityListAriaAttributes, EntityListItemProps } from "../EntityList/types";
4
3
  import type { SlotProps } from "../../shared/slotProps";
4
+ import type { EntityListAriaAttributes, EntityListItemProps } from "../EntityList/types";
5
5
  import type { NodeID, TreeNode, CheckboxState } from "./types";
6
6
  export type TreeNodeWithUIState = TreeNode & {
7
7
  isExpanded: boolean;
@@ -17,6 +17,7 @@ export type RenderTreeItemWrapperProps = {
17
17
  };
18
18
  export type EntityTreeSlotProps = SlotProps<{
19
19
  toggle: {
20
+ /** TODO(DS): make required — the toggle is icon-only. See follow-up. */
20
21
  "aria-label-expand"?: string;
21
22
  "aria-label-collapse"?: string;
22
23
  };
@@ -69,7 +70,7 @@ export type EntityTreeProps = {
69
70
  /** How many expanded nodes we render at once. The tree slows down a page if the size 1000+ */
70
71
  chunkSize?: number;
71
72
  /** If provided, the function is used to render an element in the trail of a node. */
72
- renderRightContent?: (props: TreeNode & Parameters<EntityListItemProps["renderRight"]>[0]) => React.ReactNode;
73
+ renderRightContent?: (props: TreeNode & Parameters<NonNullable<EntityListItemProps["renderRight"]>>[0]) => React.ReactNode;
73
74
  /**
74
75
  * Wraps each rendered row, so an overlay (e.g. `Tooltip`) can be composed around
75
76
  * it from the outside. The wrapper is applied inside the `treeitem` element, so it
@@ -1 +1 @@
1
- import React,{useMemo,useState,useEffect,useCallback}from"react";import{Button}from"../Button/Button";import{Box}from"../Box/Box";import{StyledList,StyledShowMore}from"../EntityList/styled-components";import{EntityTreeItem}from"./EntityTreeItem";import{useKeyboard}from"../../shared/useKeyboard";import{useFocusByIndex}from"../EntityList/useFocusByIndex";import{Text}from"../Typography/Text/Text";import{getNodeChildrenMap,getTreeCheckboxState,getVisibleActiveNodeId,getLeafNodeIds,filterTree,mapTree,trimDataByMaxSize}from"./tree";let flattenTree=(data,expandedIds,expadedAll)=>{let flattened=[];return data.forEach(node=>{flattened.push(node),(node.children.length>0&&expandedIds[node.id]||expadedAll)&&flattened.push(...flattenTree(node.children,expandedIds,expadedAll))}),flattened},getLastNodeOfList=({node,data,level,isParentsLastOfLvl})=>{let currentLastNodeOfLvl=node.id===data[data.length-1].id;return 0===level?currentLastNodeOfLvl:isParentsLastOfLvl&&currentLastNodeOfLvl},useTreeTruncation=({chunkSize,data,expandAll,nodeExpandedState})=>{let[maxNodesCount,setMaxNodesCount]=useState(chunkSize),{result,hasMoreNodes}=useMemo(()=>trimDataByMaxSize(data,nodeExpandedState,expandAll,maxNodesCount),[data,nodeExpandedState,expandAll,maxNodesCount]);return{handleIncreaseMaxNodeCount:useCallback(()=>{setMaxNodesCount(prev=>prev+chunkSize)},[chunkSize]),result,hasMoreNodes}},Node=({isFirstNode,nodeChildrenMap,nodeCheckboxState,nodeExpandedState,handleSelectionChange,handleToggle,expandAll,onNodeClick,hideBorder,size,showItemsCount,renderRightContent,renderItemWrapper,activeId,focusedNodeId,node,level,renderFn,isLastNodeOfList,ariaLabelExpand,ariaLabelCollapse,visibleNodeIndexMap})=>{let readOnly=null===nodeCheckboxState,hasChildren=node.children.length>0,expandedState=!!expandAll||!!nodeExpandedState[node.id],leafItems=getLeafNodeIds(nodeChildrenMap,node.id),totalItemsCount=leafItems.length,selectedItemsCount=nodeCheckboxState?leafItems.filter(leafId=>"checked"===nodeCheckboxState[leafId]).length:null,countLabel=nodeCheckboxState?`(${selectedItemsCount}/${totalItemsCount})`:`(${totalItemsCount})`,lastLeaf=!hasChildren&&!node.isFiltered,isExpanded=lastLeaf?void 0:expandedState,{children,...nodeDataWithoutChildren}=node,isFocused=focusedNodeId===node.id,treeItemElm=React.createElement(EntityTreeItem,{"data-list-item":visibleNodeIndexMap[node.id],hideBorder:hideBorder||isLastNodeOfList&&(!isExpanded||node.isFiltered),tabIndex:isFocused||null===focusedNodeId&&isFirstNode?0:-1,size:size,lSpaceStep:level,onSpaceEnterPress:()=>{if(readOnly){handleToggle(node.id),onNodeClick?.(nodeDataWithoutChildren);return}handleSelectionChange(node.id)},description:node.description,renderLabel:({textSize})=>React.createElement(React.Fragment,null,node.label,showItemsCount&&!lastLeaf&&React.createElement(Text,{as:"span",size:textSize,color:"tertiary"}," ",countLabel)),isActive:activeId===node.id,isExpanded:isExpanded,isDisabledExpand:expandAll,checkboxProps:!readOnly&&{size:"s",name:node.label,checked:nodeCheckboxState?.[node.id]==="checked",indeterminate:nodeCheckboxState?.[node.id]==="indeterminate",onChange:()=>handleSelectionChange(node.id)},onExpandClick:e=>{e.stopPropagation(),handleToggle(node.id)},isClickable:readOnly,onClick:()=>{handleToggle(node.id),onNodeClick?.(nodeDataWithoutChildren)},renderRight:renderRightContent?renderRightProps=>renderRightContent({...renderRightProps,...node}):void 0,ariaLabelExpand:ariaLabelExpand,ariaLabelCollapse:ariaLabelCollapse,"aria-label":node.label,"aria-level":level+1},hasChildren&&React.createElement("div",{role:"group"},renderFn({data:children,level:level+1,renderFn,isParentsLastOfLvl:isLastNodeOfList})));return renderItemWrapper?renderItemWrapper({item:node,children:treeItemElm}):treeItemElm},makeRenderTreeBranches=renderTreeArgs=>({data,level,renderFn,isParentsLastOfLvl})=>data.map((node,i)=>{let isFirstNode=0===level&&0===i,isLastNodeOfList=getLastNodeOfList({node,data,level,isParentsLastOfLvl});return React.createElement(Node,{key:node.id,level:level,node:node,isFirstNode:isFirstNode,renderFn:renderFn,isLastNodeOfList:isLastNodeOfList,...renderTreeArgs})});export const BaseEntityTree=({ariaAttributes:deprecatedAriaAttributes,slotProps,data,selectedIds,onSelectionChange,onSelectionToggle,onNodeClick,expandedIds=[],onToggle,activeId,chunkSize=10,filterFn,onTreeChange,hideBorder=!1,size="m",showItemsCount=!0,showMoreButtonLabel,renderRightContent,renderItemWrapper,"data-e2e-test-id":dataE2eTestId,...ariaAttributes})=>{let nodeChildrenMap=Object.assign({},...data.map(tree=>getNodeChildrenMap(tree))),nodeCheckboxState=selectedIds?Object.assign({},...data.map(tree=>getTreeCheckboxState(nodeChildrenMap,tree.id,selectedIds))):null,nodeExpandedState=expandedIds.reduce((acc,id)=>(acc[id]=!0,acc),{}),visibleActiveNodeId=getVisibleActiveNodeId(nodeChildrenMap,nodeExpandedState,activeId),handleExpand=useCallback(targetId=>{onToggle&&!expandedIds.includes(targetId)&&onToggle(expandedIds.concat([targetId]))},[expandedIds,onToggle]),handleCollapse=useCallback(targetId=>{onToggle&&expandedIds.includes(targetId)&&onToggle(expandedIds.filter(id=>id!==targetId))},[expandedIds,onToggle]),handleToggle=useCallback(targetId=>{expandedIds.includes(targetId)?handleCollapse(targetId):handleExpand(targetId)},[expandedIds,handleCollapse,handleExpand]),dataShown=filterFn?data.map(tree=>filterTree(tree,filterFn)).filter(Boolean):data;useEffect(()=>{onTreeChange&&onTreeChange(dataShown.map(tree=>mapTree(tree,node=>({...node,checkedState:!!nodeCheckboxState&&nodeCheckboxState[node.id],isExpanded:!!nodeExpandedState[node.id]}))))},[dataShown,nodeCheckboxState,nodeExpandedState,onTreeChange]);let expandAll=!!filterFn,{hasMoreNodes,handleIncreaseMaxNodeCount,result}=useTreeTruncation({chunkSize,data:dataShown,nodeExpandedState,expandAll}),listRef=React.useRef(null),visibleNodes=useMemo(()=>flattenTree(result,nodeExpandedState,expandAll),[result,nodeExpandedState,expandAll]),visibleNodeIndexMap=useMemo(()=>visibleNodes.reduce((acc,node,index)=>(acc[node.id]=index,acc),{}),[visibleNodes]),{moveFocus,focusedIndex}=useFocusByIndex({containerRef:listRef,nodeSelector:"data-list-item",data:useMemo(()=>visibleNodes.map(node=>({id:node.id,isDisabled:!!node.isDisabled})),[visibleNodes])}),focusedNodeId=focusedIndex>=0?visibleNodes[focusedIndex]?.id??null:null;useKeyboard({ArrowDown:()=>{moveFocus(1)},ArrowUp:()=>{moveFocus(-1)},ArrowRight:()=>{!expandAll&&focusedNodeId&&nodeChildrenMap[focusedNodeId]?.length&&!nodeExpandedState[focusedNodeId]&&handleExpand(focusedNodeId)},ArrowLeft:()=>{!expandAll&&focusedNodeId&&nodeChildrenMap[focusedNodeId]?.length&&nodeExpandedState[focusedNodeId]&&handleCollapse(focusedNodeId)}},listRef,!!visibleNodes.length);let renderTreeBranches=makeRenderTreeBranches({nodeChildrenMap,nodeCheckboxState,nodeExpandedState,handleSelectionChange:targetId=>{if(onSelectionChange){let isSelected,updatedSelectedIds=[];if(0===nodeChildrenMap[targetId].length)isSelected=!selectedIds.includes(targetId),updatedSelectedIds=selectedIds.includes(targetId)?selectedIds.filter(id=>id!==targetId):selectedIds.concat([targetId]);else{let affectedLeafNodeIds=getLeafNodeIds(nodeChildrenMap,targetId),hasUncheckedChildren=affectedLeafNodeIds.some(leafId=>!selectedIds.includes(leafId));updatedSelectedIds=hasUncheckedChildren?selectedIds.concat(affectedLeafNodeIds.filter(id=>!selectedIds.includes(id))):selectedIds.filter(id=>!affectedLeafNodeIds.includes(id)),isSelected=hasUncheckedChildren}onSelectionToggle?.(targetId,isSelected),onSelectionChange(updatedSelectedIds)}},handleToggle,onNodeClick:node=>{onNodeClick?.(node)},expandAll,hideBorder,size,showItemsCount,renderRightContent,renderItemWrapper,activeId:visibleActiveNodeId,focusedNodeId,visibleNodeIndexMap,ariaLabelExpand:slotProps?.toggle?.["aria-label-expand"]??deprecatedAriaAttributes?.ariaLabelExpand,ariaLabelCollapse:slotProps?.toggle?.["aria-label-collapse"]??deprecatedAriaAttributes?.ariaLabelCollapse});return React.createElement("div",null,React.createElement(StyledList,{ref:listRef,"data-e2e-test-id":dataE2eTestId,"data-ds-id":"EntityTree",size:size,...ariaAttributes,role:"tree","aria-multiselectable":!!nodeCheckboxState||void 0},renderTreeBranches({data:result,level:0,renderFn:renderTreeBranches})),hasMoreNodes&&React.createElement(StyledShowMore,null,React.createElement(Box,{alignText:"center",space:"xs"},React.createElement(Button,{fullWidth:!0,size:"s",variant:"tertiary",onClick:handleIncreaseMaxNodeCount},showMoreButtonLabel))))};
1
+ import React,{useMemo,useState,useEffect,useCallback}from"react";import{Button}from"../Button/Button";import{Box}from"../Box/Box";import{StyledList,StyledShowMore}from"../EntityList/styled-components";import{EntityTreeItem}from"./EntityTreeItem";import{useKeyboard}from"../../shared/useKeyboard";import{useFocusByIndex}from"../EntityList/useFocusByIndex";import{Text}from"../Typography/Text/Text";import{getNodeChildrenMap,getTreeCheckboxState,getVisibleActiveNodeId,getLeafNodeIds,filterTree,mapTree,trimDataByMaxSize}from"./tree";let flattenTree=(data,expandedIds,expadedAll)=>{let flattened=[];return data.forEach(node=>{flattened.push(node),(node.children.length>0&&expandedIds[node.id]||expadedAll)&&flattened.push(...flattenTree(node.children,expandedIds,expadedAll))}),flattened},getLastNodeOfList=({node,data,level,isParentsLastOfLvl})=>{let currentLastNodeOfLvl=node.id===data[data.length-1].id;return 0===level?currentLastNodeOfLvl:isParentsLastOfLvl&&currentLastNodeOfLvl},useTreeTruncation=({chunkSize,data,expandAll,nodeExpandedState})=>{let[maxNodesCount,setMaxNodesCount]=useState(chunkSize),{result,hasMoreNodes}=useMemo(()=>trimDataByMaxSize(data,nodeExpandedState,expandAll,maxNodesCount),[data,nodeExpandedState,expandAll,maxNodesCount]);return{handleIncreaseMaxNodeCount:useCallback(()=>{setMaxNodesCount(prev=>prev+chunkSize)},[chunkSize]),result,hasMoreNodes}},Node=({isFirstNode,nodeChildrenMap,nodeCheckboxState,nodeExpandedState,handleSelectionChange,handleToggle,expandAll,onNodeClick,hideBorder,size,showItemsCount,renderRightContent,renderItemWrapper,activeId,focusedNodeId,node,level,renderFn,isLastNodeOfList,ariaLabelExpand,ariaLabelCollapse,visibleNodeIndexMap})=>{let readOnly=null===nodeCheckboxState,hasChildren=node.children.length>0,expandedState=!!expandAll||!!nodeExpandedState[node.id],leafItems=getLeafNodeIds(nodeChildrenMap,node.id),totalItemsCount=leafItems.length,selectedItemsCount=nodeCheckboxState?leafItems.filter(leafId=>"checked"===nodeCheckboxState[leafId]).length:null,countLabel=nodeCheckboxState?`(${selectedItemsCount}/${totalItemsCount})`:`(${totalItemsCount})`,lastLeaf=!hasChildren&&!node.isFiltered,isExpanded=lastLeaf?void 0:expandedState,{children,...nodeDataWithoutChildren}=node,isFocused=focusedNodeId===node.id,treeItemElm=React.createElement(EntityTreeItem,{"data-list-item":visibleNodeIndexMap[node.id],hideBorder:hideBorder||isLastNodeOfList&&(!isExpanded||node.isFiltered),tabIndex:isFocused||null===focusedNodeId&&isFirstNode?0:-1,size:size,lSpaceStep:level,onSpaceEnterPress:()=>{if(readOnly){handleToggle(node.id),onNodeClick?.(nodeDataWithoutChildren);return}handleSelectionChange(node.id)},description:node.description,renderLabel:({textSize})=>React.createElement(React.Fragment,null,node.label,showItemsCount&&!lastLeaf&&React.createElement(Text,{as:"span",size:textSize,color:"tertiary"}," ",countLabel)),isActive:activeId===node.id,isExpanded:isExpanded,isDisabledExpand:expandAll,checkboxProps:readOnly?void 0:{size:"s",name:node.label,checked:nodeCheckboxState?.[node.id]==="checked",indeterminate:nodeCheckboxState?.[node.id]==="indeterminate",onChange:()=>handleSelectionChange(node.id)},onExpandClick:e=>{e.stopPropagation(),handleToggle(node.id)},isClickable:readOnly,onClick:()=>{handleToggle(node.id),onNodeClick?.(nodeDataWithoutChildren)},renderRight:renderRightContent?renderRightProps=>renderRightContent({...renderRightProps,...node}):void 0,ariaLabelExpand:ariaLabelExpand,ariaLabelCollapse:ariaLabelCollapse,"aria-label":node.label,"aria-level":level+1},hasChildren&&React.createElement("div",{role:"group"},renderFn({data:children,level:level+1,renderFn,isParentsLastOfLvl:isLastNodeOfList})));return renderItemWrapper?renderItemWrapper({item:node,children:treeItemElm}):treeItemElm},makeRenderTreeBranches=renderTreeArgs=>({data,level,renderFn,isParentsLastOfLvl=!1})=>data.map((node,i)=>{let isFirstNode=0===level&&0===i,isLastNodeOfList=getLastNodeOfList({node,data,level,isParentsLastOfLvl});return React.createElement(Node,{key:node.id,level:level,node:node,isFirstNode:isFirstNode,renderFn:renderFn,isLastNodeOfList:isLastNodeOfList,...renderTreeArgs})}),isMatchingTreeNode=tree=>null!==tree;export const BaseEntityTree=({ariaAttributes:deprecatedAriaAttributes,slotProps,data,selectedIds,onSelectionChange,onSelectionToggle,onNodeClick,expandedIds=[],onToggle,activeId,chunkSize=10,filterFn,onTreeChange,hideBorder=!1,size="m",showItemsCount=!0,showMoreButtonLabel,renderRightContent,renderItemWrapper,"data-e2e-test-id":dataE2eTestId,...ariaAttributes})=>{let nodeChildrenMap=Object.assign({},...data.map(tree=>getNodeChildrenMap(tree))),nodeCheckboxState=selectedIds?Object.assign({},...data.map(tree=>getTreeCheckboxState(nodeChildrenMap,tree.id,selectedIds))):null,nodeExpandedState=expandedIds.reduce((acc,id)=>(acc[id]=!0,acc),{}),visibleActiveNodeId=getVisibleActiveNodeId(nodeChildrenMap,nodeExpandedState,activeId),handleExpand=useCallback(targetId=>{onToggle&&!expandedIds.includes(targetId)&&onToggle(expandedIds.concat([targetId]))},[expandedIds,onToggle]),handleCollapse=useCallback(targetId=>{onToggle&&expandedIds.includes(targetId)&&onToggle(expandedIds.filter(id=>id!==targetId))},[expandedIds,onToggle]),handleToggle=useCallback(targetId=>{expandedIds.includes(targetId)?handleCollapse(targetId):handleExpand(targetId)},[expandedIds,handleCollapse,handleExpand]),dataShown=filterFn?data.map(tree=>filterTree(tree,filterFn)).filter(isMatchingTreeNode):data;useEffect(()=>{onTreeChange&&onTreeChange(dataShown.map(tree=>mapTree(tree,node=>({...node,checkedState:!!nodeCheckboxState&&nodeCheckboxState[node.id],isExpanded:!!nodeExpandedState[node.id]}))))},[dataShown,nodeCheckboxState,nodeExpandedState,onTreeChange]);let expandAll=!!filterFn,{hasMoreNodes,handleIncreaseMaxNodeCount,result}=useTreeTruncation({chunkSize,data:dataShown,nodeExpandedState,expandAll}),listRef=React.useRef(null),visibleNodes=useMemo(()=>flattenTree(result,nodeExpandedState,expandAll),[result,nodeExpandedState,expandAll]),visibleNodeIndexMap=useMemo(()=>visibleNodes.reduce((acc,node,index)=>(acc[node.id]=index,acc),{}),[visibleNodes]),{moveFocus,focusedIndex}=useFocusByIndex({containerRef:listRef,nodeSelector:"data-list-item",data:useMemo(()=>visibleNodes.map(node=>({id:node.id,isDisabled:!!node.isDisabled})),[visibleNodes])}),focusedNodeId=focusedIndex>=0?visibleNodes[focusedIndex]?.id??null:null;useKeyboard({ArrowDown:()=>{moveFocus(1)},ArrowUp:()=>{moveFocus(-1)},ArrowRight:()=>{!expandAll&&focusedNodeId&&nodeChildrenMap[focusedNodeId]?.length&&!nodeExpandedState[focusedNodeId]&&handleExpand(focusedNodeId)},ArrowLeft:()=>{!expandAll&&focusedNodeId&&nodeChildrenMap[focusedNodeId]?.length&&nodeExpandedState[focusedNodeId]&&handleCollapse(focusedNodeId)}},listRef,!!visibleNodes.length);let renderTreeBranches=makeRenderTreeBranches({nodeChildrenMap,nodeCheckboxState,nodeExpandedState,handleSelectionChange:targetId=>{if(onSelectionChange&&selectedIds){let isSelected,updatedSelectedIds=[];if(0===nodeChildrenMap[targetId].length)isSelected=!selectedIds.includes(targetId),updatedSelectedIds=selectedIds.includes(targetId)?selectedIds.filter(id=>id!==targetId):selectedIds.concat([targetId]);else{let affectedLeafNodeIds=getLeafNodeIds(nodeChildrenMap,targetId),hasUncheckedChildren=affectedLeafNodeIds.some(leafId=>!selectedIds.includes(leafId));updatedSelectedIds=hasUncheckedChildren?selectedIds.concat(affectedLeafNodeIds.filter(id=>!selectedIds.includes(id))):selectedIds.filter(id=>!affectedLeafNodeIds.includes(id)),isSelected=hasUncheckedChildren}onSelectionToggle?.(targetId,isSelected),onSelectionChange(updatedSelectedIds)}},handleToggle,onNodeClick:node=>{onNodeClick?.(node)},expandAll,hideBorder,size,showItemsCount,renderRightContent,renderItemWrapper,activeId:visibleActiveNodeId,focusedNodeId,visibleNodeIndexMap,ariaLabelExpand:slotProps?.toggle?.["aria-label-expand"]??deprecatedAriaAttributes?.ariaLabelExpand,ariaLabelCollapse:slotProps?.toggle?.["aria-label-collapse"]??deprecatedAriaAttributes?.ariaLabelCollapse});return React.createElement("div",null,React.createElement(StyledList,{ref:listRef,"data-e2e-test-id":dataE2eTestId,"data-ds-id":"EntityTree",size:size,...ariaAttributes,role:"tree","aria-multiselectable":!!nodeCheckboxState||void 0},renderTreeBranches({data:result,level:0,renderFn:renderTreeBranches})),hasMoreNodes&&React.createElement(StyledShowMore,null,React.createElement(Box,{alignText:"center",space:"xs"},React.createElement(Button,{fullWidth:!0,size:"s",variant:"tertiary",onClick:handleIncreaseMaxNodeCount},showMoreButtonLabel))))};
@@ -1 +1 @@
1
- import React,{useCallback,useImperativeHandle,useRef}from"react";import styled from"@emotion/styled";import{useResponsiveValue}from"../../shared/mediaQueries";import{EntityTreeItemExpandButton}from"./EntityTreeItemExpandButton";import{useKeyboard}from"../../shared/useKeyboard";import{getFocusStyles}from"../../shared/mixins";import{EntityItemBody}from"../EntityList/EntityItemBody";import{StyledEntityItem,StyledEntityListItemWrapper,StyledEntityListItemButton}from"../EntityList/styled-components";let isSelfEvent=e=>e.target===e.currentTarget,StyledEntityTreeItemWrapper=styled(StyledEntityListItemWrapper,{target:"e18sww000",label:"StyledEntityTreeItemWrapper"})({paddingLeft:"0 !important"}),StyledEntityTreeItemContainer=styled(StyledEntityListItemButton,{target:"e18sww001",label:"StyledEntityTreeItemContainer"})(({theme,hasExpandableIcon,lSpaceStep})=>{let getSize=(baseOffset,deepestNodeOffset)=>`calc(${baseOffset} * ${lSpaceStep} + ${hasExpandableIcon?"0px":deepestNodeOffset} + ${theme.variables.size.spacing.xxs})`;return{...getFocusStyles({offset:-2}),...useResponsiveValue({paddingLeft:[getSize(theme.variables.size.spacing.m,"42px"),getSize(theme.variables.size.spacing.xl,"56px")]})}});export const EntityTreeItem=React.forwardRef(({checkboxProps,children,description,hideBorder,isActive,isClickable,isDisabled,isDisabledExpand,isExpanded,lSpaceStep,onClick,onExpandClick,onSpaceEnterPress,renderLabel,renderLeft,renderRight,size="m",tabIndex,ariaLabelExpand,ariaLabelCollapse,"aria-level":ariaLevel,"aria-label":ariaLabel,"data-list-item":dataListItem,onPointerEnter,onPointerLeave,onFocus,onBlur,onKeyDown,"aria-describedby":ariaDescribedBy},ref)=>{let hasExpandableIcon=void 0!==isExpanded,handleOnClick=useCallback(e=>{onClick&&onClick(e)},[onClick]),buttonRef=useRef(null);return useKeyboard({"Space Enter":onSpaceEnterPress},buttonRef,0===tabIndex&&(isClickable||!!checkboxProps),!0),useImperativeHandle(ref,()=>buttonRef.current),React.createElement(StyledEntityItem,{role:"treeitem","aria-expanded":hasExpandableIcon?isExpanded:void 0,"aria-checked":checkboxProps?.checked,"aria-label":ariaLabel,"aria-level":ariaLevel},React.createElement(StyledEntityTreeItemContainer,{"data-list-item":dataListItem,size:size,ref:buttonRef,"data-id":"list-item",tabIndex:tabIndex,role:"presentation",isActive:isActive,hasExpandableIcon:hasExpandableIcon,lSpaceStep:lSpaceStep,isDisabled:isDisabled,onClick:handleOnClick,isClickable:isClickable,"aria-describedby":ariaDescribedBy,onPointerEnter:onPointerEnter,onPointerLeave:onPointerLeave,onFocus:e=>{isSelfEvent(e)&&onFocus?.(e)},onBlur:e=>{isSelfEvent(e)&&onBlur?.(e)},onKeyDown:onKeyDown},hasExpandableIcon&&React.createElement(EntityTreeItemExpandButton,{size:size,tabIndex:-1,isDisabled:isDisabledExpand||isDisabled,isExpanded:isExpanded,onClick:onExpandClick,ariaLabelExpand:ariaLabelExpand,ariaLabelCollapse:ariaLabelCollapse}),React.createElement(StyledEntityTreeItemWrapper,{size:size,hideBorder:hideBorder||"xs"===size},React.createElement(EntityItemBody,{size:size,tabIndex:tabIndex,description:description,renderLabel:renderLabel,renderLeft:renderLeft,renderRight:renderRight,checkboxProps:checkboxProps}))),isExpanded&&children)});
1
+ import React,{useCallback,useImperativeHandle,useRef}from"react";import styled from"@emotion/styled";import{useResponsiveValue}from"../../shared/mediaQueries";import{EntityTreeItemExpandButton}from"./EntityTreeItemExpandButton";import{useKeyboard}from"../../shared/useKeyboard";import{getFocusStyles}from"../../shared/mixins";import{EntityItemBody}from"../EntityList/EntityItemBody";import{StyledEntityItem,StyledEntityListItemWrapper,StyledEntityListItemButton}from"../EntityList/styled-components";let isSelfEvent=e=>e.target===e.currentTarget,StyledEntityTreeItemWrapper=styled(StyledEntityListItemWrapper,{target:"ek85a5p0",label:"StyledEntityTreeItemWrapper"})({paddingLeft:"0 !important"}),StyledEntityTreeItemContainer=styled(StyledEntityListItemButton,{target:"ek85a5p1",label:"StyledEntityTreeItemContainer"})(({theme,hasExpandableIcon,lSpaceStep})=>{let getSize=(baseOffset,deepestNodeOffset)=>`calc(${baseOffset} * ${lSpaceStep} + ${hasExpandableIcon?"0px":deepestNodeOffset} + ${theme.variables.size.spacing.xxs})`;return{...getFocusStyles({offset:-2}),...useResponsiveValue({paddingLeft:[getSize(theme.variables.size.spacing.m,"42px"),getSize(theme.variables.size.spacing.xl,"56px")]})}});export const EntityTreeItem=React.forwardRef(({checkboxProps,children,description,hideBorder,isActive,isClickable,isDisabled,isDisabledExpand,isExpanded,lSpaceStep,onClick,onExpandClick,onSpaceEnterPress,renderLabel,renderLeft,renderRight,size="m",tabIndex,ariaLabelExpand,ariaLabelCollapse,"aria-level":ariaLevel,"aria-label":ariaLabel,"data-list-item":dataListItem,onPointerEnter,onPointerLeave,onFocus,onBlur,onKeyDown,"aria-describedby":ariaDescribedBy},ref)=>{let hasExpandableIcon=void 0!==isExpanded,handleOnClick=useCallback(e=>{onClick&&onClick(e)},[onClick]),buttonRef=useRef(null);return useKeyboard({"Space Enter":e=>onSpaceEnterPress?.(e)},buttonRef,0===tabIndex&&(isClickable||!!checkboxProps),!0),useImperativeHandle(ref,()=>buttonRef.current),React.createElement(StyledEntityItem,{role:"treeitem","aria-expanded":hasExpandableIcon?isExpanded:void 0,"aria-checked":checkboxProps?.checked,"aria-label":ariaLabel,"aria-level":ariaLevel},React.createElement(StyledEntityTreeItemContainer,{"data-list-item":dataListItem,size:size,ref:buttonRef,"data-id":"list-item",tabIndex:tabIndex,role:"presentation",isActive:isActive,hasExpandableIcon:hasExpandableIcon,lSpaceStep:lSpaceStep,isDisabled:isDisabled,onClick:handleOnClick,isClickable:isClickable,"aria-describedby":ariaDescribedBy,onPointerEnter:onPointerEnter,onPointerLeave:onPointerLeave,onFocus:e=>{isSelfEvent(e)&&onFocus?.(e)},onBlur:e=>{isSelfEvent(e)&&onBlur?.(e)},onKeyDown:onKeyDown},hasExpandableIcon&&React.createElement(EntityTreeItemExpandButton,{size:size,tabIndex:-1,isDisabled:isDisabledExpand||isDisabled,isExpanded:isExpanded,onClick:onExpandClick,ariaLabelExpand:ariaLabelExpand,ariaLabelCollapse:ariaLabelCollapse}),React.createElement(StyledEntityTreeItemWrapper,{size:size,hideBorder:hideBorder||"xs"===size},React.createElement(EntityItemBody,{size:size,tabIndex:tabIndex,description:description,renderLabel:renderLabel,renderLeft:renderLeft,renderRight:renderRight,checkboxProps:checkboxProps}))),isExpanded&&children)});
@@ -1,3 +1,5 @@
1
1
  import React from "react";
2
2
  import type { EntityListItemProps } from "../EntityList/types";
3
- export declare function EntityTreeItemExpandButton({ size, onClick, isExpanded, isDisabled, ariaLabelExpand, ariaLabelCollapse, tabIndex, }: Partial<EntityListItemProps>): React.ReactElement;
3
+ type EntityTreeItemExpandButtonProps = Pick<EntityListItemProps, "onClick" | "isExpanded" | "isDisabled" | "ariaLabelExpand" | "ariaLabelCollapse" | "tabIndex"> & Required<Pick<EntityListItemProps, "size">>;
4
+ export declare function EntityTreeItemExpandButton({ size, onClick, isExpanded, isDisabled, ariaLabelExpand, ariaLabelCollapse, tabIndex, }: EntityTreeItemExpandButtonProps): React.ReactElement;
5
+ export {};
@@ -1 +1 @@
1
- import React from"react";import{PictogramButton}from"../PictogramButton/PictogramButton";import{Box}from"../Box/Box";import{StyledWrapperOffset}from"../EntityList/styled-components";export function EntityTreeItemExpandButton({size,onClick,isExpanded,isDisabled,ariaLabelExpand,ariaLabelCollapse,tabIndex}){return React.createElement(Box,{vSpace:"zero",space:["xs","m"]},React.createElement(StyledWrapperOffset,{size:size},React.createElement(PictogramButton,{tabIndex:tabIndex,disabled:isDisabled,onClick:onClick,icon:isExpanded?"chevron-down":"chevron-right","aria-label":isExpanded?ariaLabelExpand:ariaLabelCollapse,"aria-expanded":isExpanded})))}
1
+ import React from"react";import{useIntl}from"../../shared/intl/useIntl";import{PictogramButton}from"../PictogramButton/PictogramButton";import{Box}from"../Box/Box";import{StyledWrapperOffset}from"../EntityList/styled-components";export function EntityTreeItemExpandButton({size,onClick,isExpanded,isDisabled,ariaLabelExpand,ariaLabelCollapse,tabIndex}){let{formatMessage}=useIntl();return React.createElement(Box,{vSpace:"zero",space:["xs","m"]},React.createElement(StyledWrapperOffset,{size:size},React.createElement(PictogramButton,{tabIndex:tabIndex,disabled:isDisabled,onClick:onClick,icon:isExpanded?"chevron-down":"chevron-right","aria-label":isExpanded?ariaLabelCollapse??formatMessage("EntityTree.ExpandButton.CollapseAriaLabel"):ariaLabelExpand??formatMessage("EntityTree.ExpandButton.ExpandAriaLabel"),"aria-expanded":isExpanded})))}
@@ -6,7 +6,7 @@ export declare function trimDataByMaxSize(data: TreeNode[], expandedIds: NodeExp
6
6
  hasMoreNodes: boolean;
7
7
  };
8
8
  export declare function getTreeCheckboxState(nodeChildrenMap: NodeChildrenMap, rootID: NodeID, selectedLeafNodeIds: NodeID[]): NodeCheckboxState;
9
- export declare function getVisibleActiveNodeId(nodeChildrenMap: NodeChildrenMap, nodeExpandState: NodeExpandedState, activeId: NodeID): NodeID;
9
+ export declare function getVisibleActiveNodeId(nodeChildrenMap: NodeChildrenMap, nodeExpandState: NodeExpandedState, activeId: NodeID | undefined): NodeID | undefined;
10
10
  export declare function getLeafNodeIds(nodeChildrenMap: NodeChildrenMap, rootID: NodeID): NodeID[];
11
11
  export declare function filterTree(tree: TreeNode, filterFn: (node: TreeNode) => boolean): TreeNode | null;
12
12
  export declare function mapTree(tree: TreeNode, mapFn: (node: TreeNode) => TreeNode): TreeNode;
@@ -1 +1 @@
1
- import{CheckboxState}from"./types";function foldTree(f,nodeChildrenMap,rootID){let go=nodeID=>f(nodeID,nodeChildrenMap[nodeID].map(go));return go(rootID)}export function getNodeChildrenMap(tree){let nodeChildrenMap={};return!function traverse(node){let{children}=node;nodeChildrenMap[node.id]=children.map(child=>(traverse(child),child.id))}(tree),nodeChildrenMap}export function findPathToNode(nodeChildrenMap,targetNodeID){let findParent=nodeId=>Object.keys(nodeChildrenMap).find(parentId=>nodeChildrenMap[parentId].includes(nodeId))||null,path=[],currNodeId=targetNodeID;for(;currNodeId;)path.push(currNodeId),currNodeId=findParent(currNodeId);return path.reverse()}export function trimDataByMaxSize(data,expandedIds,expandAll,maxNodesSize){let visibleNodesCount=0,hasMoreNodes=!1;return{result:function getVisibleNodes(nodes){return nodes.reduce((filteredNodes,node)=>{if(visibleNodesCount>=maxNodesSize)return hasMoreNodes=!0,filteredNodes;visibleNodesCount+=1;let newNode={...node};return(expandedIds[node.id]||expandAll)&&node.children.length>0&&(newNode.children=getVisibleNodes(node.children)),[...filteredNodes,newNode]},[])}(data),hasMoreNodes}}export function getTreeCheckboxState(nodeChildrenMap,rootID,selectedLeafNodeIds){return foldTree((currId,childrenResults)=>{if(0===nodeChildrenMap[currId].length)return{[currId]:selectedLeafNodeIds.includes(currId)?CheckboxState.Checked:CheckboxState.Unchecked};let mergedChildrenResult=childrenResults.reduce((acc,result)=>Object.assign(acc,result)),childrenStates=new Set(nodeChildrenMap[currId].map(childId=>mergedChildrenResult[childId]));return{[currId]:1===childrenStates.size?childrenStates.values().next().value:CheckboxState.Indeterminate,...mergedChildrenResult}},nodeChildrenMap,rootID)}export function getVisibleActiveNodeId(nodeChildrenMap,nodeExpandState,activeId){return findPathToNode(nodeChildrenMap,activeId).find(nodeId=>!nodeExpandState[nodeId])}export function getLeafNodeIds(nodeChildrenMap,rootID){return foldTree((currId,childrenResults)=>0===nodeChildrenMap[currId].length?[currId]:childrenResults.flat(),nodeChildrenMap,rootID)}export function filterTree(tree,filterFn){let filteredChildren=tree.children.map(child=>filterTree(child,filterFn)).filter(child=>child);return 0!==filteredChildren.length||filterFn(tree)?{...tree,isFiltered:tree.children.length!==filteredChildren.length,children:filteredChildren}:null}export function mapTree(tree,mapFn){return{...mapFn(tree),children:tree.children.map(child=>mapTree(child,mapFn))}}
1
+ import{CheckboxState}from"./types";function foldTree(f,nodeChildrenMap,rootID){let go=nodeID=>f(nodeID,nodeChildrenMap[nodeID].map(go));return go(rootID)}export function getNodeChildrenMap(tree){let nodeChildrenMap={};return!function traverse(node){let{id,children}=node;void 0!==id&&void 0!==children&&(nodeChildrenMap[id]=children.map(child=>(traverse(child),child.id)))}(tree),nodeChildrenMap}export function findPathToNode(nodeChildrenMap,targetNodeID){let findParent=nodeId=>Object.keys(nodeChildrenMap).find(parentId=>nodeChildrenMap[parentId].includes(nodeId))||null,path=[],currNodeId=targetNodeID;for(;currNodeId;)path.push(currNodeId),currNodeId=findParent(currNodeId);return path.reverse()}export function trimDataByMaxSize(data,expandedIds,expandAll,maxNodesSize){let visibleNodesCount=0,hasMoreNodes=!1;return{result:function getVisibleNodes(nodes){return nodes.reduce((filteredNodes,node)=>{if(visibleNodesCount>=maxNodesSize)return hasMoreNodes=!0,filteredNodes;visibleNodesCount+=1;let newNode={...node};return(expandedIds[node.id]||expandAll)&&node.children.length>0&&(newNode.children=getVisibleNodes(node.children)),[...filteredNodes,newNode]},[])}(data),hasMoreNodes}}export function getTreeCheckboxState(nodeChildrenMap,rootID,selectedLeafNodeIds){return foldTree((currId,childrenResults)=>{if(0===nodeChildrenMap[currId].length)return{[currId]:selectedLeafNodeIds.includes(currId)?CheckboxState.Checked:CheckboxState.Unchecked};let mergedChildrenResult=childrenResults.reduce((acc,result)=>Object.assign(acc,result)),childrenStates=new Set(nodeChildrenMap[currId].map(childId=>mergedChildrenResult[childId])),[firstChildState]=childrenStates;return{[currId]:1===childrenStates.size?firstChildState:CheckboxState.Indeterminate,...mergedChildrenResult}},nodeChildrenMap,rootID)}export function getVisibleActiveNodeId(nodeChildrenMap,nodeExpandState,activeId){if(activeId)return findPathToNode(nodeChildrenMap,activeId).find(nodeId=>!nodeExpandState[nodeId])}export function getLeafNodeIds(nodeChildrenMap,rootID){return foldTree((currId,childrenResults)=>0===nodeChildrenMap[currId].length?[currId]:childrenResults.flat(),nodeChildrenMap,rootID)}export function filterTree(tree,filterFn){let filteredChildren=tree.children.map(child=>filterTree(child,filterFn)).filter(child=>child);return 0!==filteredChildren.length||filterFn(tree)?{...tree,isFiltered:tree.children.length!==filteredChildren.length,children:filteredChildren}:null}export function mapTree(tree,mapFn){return{...mapFn(tree),children:tree.children.map(child=>mapTree(child,mapFn))}}
@@ -1 +1 @@
1
- import React,{useRef,useLayoutEffect}from"react";import styled from"@emotion/styled";import{FormField}from"../FormField/FormField";import{Inline}from"../../Inline/Inline";import{Text,getTextLineHeight}from"../../Typography/Text/Text";import{Icon}from"../../Icon/Icon";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";export const StyledInputContainer=styled("div",{target:"e1qs9wfy0",label:"StyledInputContainer"})(({theme,vSize,hSize})=>({userSelect:"none",display:"flex",position:"relative",width:theme.variables.size.dimension.checkbox[hSize],height:`calc(${theme.variables.size.font[vSize]} * ${getTextLineHeight({size:vSize,theme})})`,boxSizing:"border-box",alignItems:"center"}));export const StyledRealInput=styled("input",{target:"e1qs9wfy1",label:"StyledRealInput"})(({theme})=>({opacity:theme.variables.opacity.hidden,cursor:"pointer",height:0,width:0,position:"absolute"}));export const StyledFakeInput=styled("span",{target:"e1qs9wfy2",label:"StyledFakeInput"})(({theme,size})=>({boxSizing:"border-box",width:theme.variables.size.dimension.checkbox[size],height:theme.variables.size.dimension.checkbox[size],borderRadius:theme.variables.size.borderRadius.xs,border:"2px solid",display:"flex",alignItems:"center",justifyContent:"center",background:theme.values.color.background.primary.default,color:theme.values.color.text.onAccent.default,borderColor:theme.values.color.border.primary.default,lineHeight:0,"& svg":{opacity:theme.variables.opacity.hidden},"input: focus-visible + &":{outlineWidth:"2px",outlineStyle:"solid",outlineColor:"Highlight"},"@media (-webkit-min-device-pixel-ratio:0)":{"input: focus-visible + &":{outlineColor:"-webkit-focus-ring-color",outlineStyle:"auto"}},"input:checked + &, input:indeterminate + &":{border:0,background:theme.values.color.background.accent.default,svg:{opacity:theme.variables.opacity.visible}},"input:disabled + &":{pointerEvents:"none"}}));export const StyledCheckboxContainer=styled("div",{target:"e1qs9wfy3",label:"StyledCheckboxContainer"})(({theme,isInteractable})=>({"&:hover":{...isInteractable&&{cursor:"pointer",[`input:checked + ${StyledFakeInput}, input:indeterminate + ${StyledFakeInput}`]:{background:theme.values.color.background.accent.hover},[`${StyledFakeInput}`]:{borderColor:theme.values.color.border.primary.hover}},...!isInteractable&&{cursor:"not-allowed"}}}));export const CheckboxRaw=React.forwardRef(({indeterminate,size="m",disabled,checked,label,labelHint,labelSize="m",...rest},ref)=>{let internalRef=useRef(null),inputRef=ref??internalRef;return useLayoutEffect(()=>{inputRef.current&&(inputRef.current.indeterminate=indeterminate)},[indeterminate,inputRef]),React.createElement(StyledCheckboxContainer,{isInteractable:!disabled},React.createElement(Inline,{space:"xs",vAlignItems:"top",noWrap:!0},React.createElement(StyledInputContainer,{hSize:size,vSize:labelSize},React.createElement(StyledRealInput,{...rest,ref:inputRef,"aria-checked":indeterminate?"mixed":checked,type:"checkbox",disabled:disabled,checked:checked}),React.createElement(StyledFakeInput,{size:size},indeterminate?React.createElement(Icon,{size:"s",name:"minus"}):React.createElement(Icon,{size:"s",name:"m"===size?"check":"check-small"}))),label&&React.createElement("div",null,"string"==typeof label?React.createElement(Text,{size:labelSize},label):label,labelHint&&React.createElement(Text,{color:"tertiary",size:"s"},labelHint))))});export const Checkbox=React.forwardRef(({label,labelHint,hint,errorMessages,size="m",disabled,"data-e2e-test-id":dataE2eTestId,"aria-describedby":ariaDescribedBy,...rest},ref)=>{let{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"Checkbox",disabled:disabled,errorMessages:errorMessages,hint:hint,messageId:id},React.createElement(CheckboxRaw,{...rest,ref:ref,size:size,label:label,labelHint:labelHint,disabled:disabled,...ariaDescribedByProp}))});
1
+ import React,{useRef,useLayoutEffect}from"react";import styled from"@emotion/styled";import{FormField}from"../FormField/FormField";import{Inline}from"../../Inline/Inline";import{Text,getTextLineHeight}from"../../Typography/Text/Text";import{Icon}from"../../Icon/Icon";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";export const StyledInputContainer=styled("div",{target:"e13evtie0",label:"StyledInputContainer"})(({theme,vSize,hSize})=>({userSelect:"none",display:"flex",position:"relative",width:theme.variables.size.dimension.checkbox[hSize],height:`calc(${theme.variables.size.font[vSize]} * ${getTextLineHeight({size:vSize,theme})})`,boxSizing:"border-box",alignItems:"center"}));export const StyledRealInput=styled("input",{target:"e13evtie1",label:"StyledRealInput"})(({theme})=>({opacity:theme.variables.opacity.hidden,cursor:"pointer",height:0,width:0,position:"absolute"}));export const StyledFakeInput=styled("span",{target:"e13evtie2",label:"StyledFakeInput"})(({theme,size="m"})=>({boxSizing:"border-box",width:theme.variables.size.dimension.checkbox[size],height:theme.variables.size.dimension.checkbox[size],borderRadius:theme.variables.size.borderRadius.xs,border:"2px solid",display:"flex",alignItems:"center",justifyContent:"center",background:theme.values.color.background.primary.default,color:theme.values.color.text.onAccent.default,borderColor:theme.values.color.border.primary.default,lineHeight:0,"& svg":{opacity:theme.variables.opacity.hidden},"input: focus-visible + &":{outlineWidth:"2px",outlineStyle:"solid",outlineColor:"Highlight"},"@media (-webkit-min-device-pixel-ratio:0)":{"input: focus-visible + &":{outlineColor:"-webkit-focus-ring-color",outlineStyle:"auto"}},"input:checked + &, input:indeterminate + &":{border:0,background:theme.values.color.background.accent.default,svg:{opacity:theme.variables.opacity.visible}},"input:disabled + &":{pointerEvents:"none"}}));export const StyledCheckboxContainer=styled("div",{target:"e13evtie3",label:"StyledCheckboxContainer"})(({theme,isInteractable})=>({"&:hover":{...isInteractable&&{cursor:"pointer",[`input:checked + ${StyledFakeInput}, input:indeterminate + ${StyledFakeInput}`]:{background:theme.values.color.background.accent.hover},[`${StyledFakeInput}`]:{borderColor:theme.values.color.border.primary.hover}},...!isInteractable&&{cursor:"not-allowed"}}}));export const CheckboxRaw=React.forwardRef(({indeterminate,size="m",disabled,checked,label,labelHint,labelSize="m",...rest},ref)=>{let internalRef=useRef(null),inputRef=ref??internalRef;return useLayoutEffect(()=>{"object"==typeof inputRef&&inputRef.current&&(inputRef.current.indeterminate=!!indeterminate)},[indeterminate,inputRef]),React.createElement(StyledCheckboxContainer,{isInteractable:!disabled},React.createElement(Inline,{space:"xs",vAlignItems:"top",noWrap:!0},React.createElement(StyledInputContainer,{hSize:size,vSize:labelSize},React.createElement(StyledRealInput,{...rest,ref:inputRef,"aria-checked":indeterminate?"mixed":checked,type:"checkbox",disabled:disabled,checked:checked}),React.createElement(StyledFakeInput,{size:size},indeterminate?React.createElement(Icon,{size:"s",name:"minus"}):React.createElement(Icon,{size:"s",name:"m"===size?"check":"check-small"}))),label&&React.createElement("div",null,"string"==typeof label?React.createElement(Text,{size:labelSize},label):label,labelHint&&React.createElement(Text,{color:"tertiary",size:"s"},labelHint))))});export const Checkbox=React.forwardRef(({label,labelHint,hint,errorMessages,size="m",disabled,"data-e2e-test-id":dataE2eTestId,"aria-describedby":ariaDescribedBy,...rest},ref)=>{let{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"Checkbox",disabled:disabled,errorMessages:errorMessages,hint:hint,messageId:id},React.createElement(CheckboxRaw,{...rest,ref:ref,size:size,label:label,labelHint:labelHint,disabled:disabled,...ariaDescribedByProp}))});
@@ -1 +1 @@
1
- import React from"react";import{FormField}from"../FormField/FormField";import{SingleSelect}from"./SingleSelect";import{MultiSelect}from"./MultiSelect";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let defaultFilterMethod=(option,value)=>option.label.toLowerCase().indexOf(value.toLowerCase())>-1;export function Combobox({options=[],name,value,placeholder,emptyStateMessage,hasError,filterMethod=defaultFilterMethod,formatSelectedOptionsLabel,onChange=()=>{},onBlur=()=>null,onFocus=()=>null,maxHeight=230,autoComplete="on",multiple=!1,privateProps,portalContainer,optionsListWidth,readOnly,errorMessages,hint,slotProps,"aria-describedby":ariaDescribedBy,"data-e2e-test-id":dataE2eTestId,...rest}){let{disabled,label}=rest,{tag}=slotProps??{},{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-ds-id":"Combobox",disabled:disabled,errorMessages:errorMessages,hint:hint,messageId:id,"data-e2e-test-id":dataE2eTestId,...rest},multiple?React.createElement(MultiSelect,{name:name,options:options,value:value,placeholder:placeholder,emptyStateMessage:emptyStateMessage,hasError:hasError,disabled:disabled,filterMethod:filterMethod,onChange:onChange,onFocus:onFocus,onBlur:onBlur,maxHeight:maxHeight,autoComplete:autoComplete,label:label,formatSelectedOptionsLabel:formatSelectedOptionsLabel,portalContainer:portalContainer,optionsListWidth:optionsListWidth,slotProps:{tag},...ariaDescribedByProp,...rest}):React.createElement(SingleSelect,{name:name,options:options,value:value,placeholder:placeholder,emptyStateMessage:emptyStateMessage,hasError:hasError,disabled:disabled,filterMethod:filterMethod,onChange:onChange,onFocus:onFocus,onBlur:onBlur,maxHeight:maxHeight,autoComplete:autoComplete,label:label,privateProps:privateProps,portalContainer:portalContainer,optionsListWidth:optionsListWidth,readOnly:readOnly,...ariaDescribedByProp,...rest}))}
1
+ import React from"react";import{FormField}from"../FormField/FormField";import{SingleSelect}from"./SingleSelect";import{MultiSelect}from"./MultiSelect";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let defaultFilterMethod=(option,value)=>option.label.toLowerCase().indexOf(value.toLowerCase())>-1;export function Combobox({options=[],name,value,placeholder,emptyStateMessage,hasError,filterMethod=defaultFilterMethod,formatSelectedOptionsLabel,onChange=()=>{},onBlur=()=>null,onFocus=()=>null,maxHeight=230,autoComplete="on",multiple,privateProps,portalContainer,optionsListWidth,readOnly,errorMessages,hint,slotProps,"aria-describedby":ariaDescribedBy,"data-e2e-test-id":dataE2eTestId,...rest}){let{disabled,label}=rest,{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-ds-id":"Combobox",disabled:disabled,errorMessages:errorMessages,hint:hint,messageId:id,"data-e2e-test-id":dataE2eTestId,...rest},multiple?React.createElement(MultiSelect,{name:name,options:options,value:value,placeholder:placeholder,emptyStateMessage:emptyStateMessage,hasError:hasError,disabled:disabled,filterMethod:filterMethod,onChange:onChange,onFocus:onFocus,onBlur:onBlur,maxHeight:maxHeight,autoComplete:autoComplete,label:label,formatSelectedOptionsLabel:formatSelectedOptionsLabel,portalContainer:portalContainer,optionsListWidth:optionsListWidth,slotProps:{tag:slotProps.tag},...ariaDescribedByProp,...rest}):React.createElement(SingleSelect,{name:name,options:options,value:value,placeholder:placeholder,emptyStateMessage:emptyStateMessage,hasError:hasError,disabled:disabled,filterMethod:filterMethod,onChange:onChange,onFocus:onFocus,onBlur:onBlur,maxHeight:maxHeight,autoComplete:autoComplete,label:label,privateProps:privateProps,portalContainer:portalContainer,optionsListWidth:optionsListWidth,readOnly:readOnly,...ariaDescribedByProp,...rest}))}
@@ -13,7 +13,7 @@ export type UniqueMultiSelectProps = {
13
13
  onChange?: (value: string[], actionData: ActionData, event: React.ChangeEvent<HTMLSelectElement>) => void;
14
14
  formatSelectedOptionsLabel?: (count?: number) => string;
15
15
  };
16
- type MultiSelectProps = CommonSelectProps & Pick<FormFieldProps, "label"> & UniqueMultiSelectProps & AriaAttributes & {
16
+ type MultiSelectProps = Omit<CommonSelectProps, "value" | "onChange" | "formatSelectedOptionsLabel" | "options" | "filterMethod" | "maxHeight"> & Required<Pick<CommonSelectProps, "options" | "filterMethod" | "maxHeight">> & Pick<FormFieldProps, "label"> & UniqueMultiSelectProps & AriaAttributes & {
17
17
  slotProps: {
18
18
  tag: NonNullable<ComboboxSlotProps["tag"]>;
19
19
  };
@@ -1 +1 @@
1
- import React,{useRef,useMemo,useEffect,useCallback,useReducer}from"react";import styled from"@emotion/styled";import{useKeyboard}from"../../../shared/useKeyboard";import{InputRaw}from"../Input/Input";import{Tag}from"../../Tag/Tag";import{StyledContainer,StyledFakeInputWrap}from"./StyledSelectComponents";import{MultiSelectReducer}from"./MultiSelectReducer";import{getOptionId,getOptionsListId,OptionsList}from"./OptionsList";let StyledInputWrap=styled("div",{target:"e1c8shqu0",label:"StyledInputWrap"})(({theme,hasValue})=>({zIndex:1,display:"flex",alignItems:"center",position:"relative","& input":{...hasValue&&{paddingLeft:theme.variables.size.spacing.xxs}}})),StyledTagWrap=styled("div",{target:"e1c8shqu1",label:"StyledTagWrap"})(({theme})=>({marginLeft:theme.variables.size.spacing.xs,order:-1})),getSelectedOptions=(options,value)=>{let mapFromValue=new Set(value);return options.filter(opt=>mapFromValue.has(opt.value))};export function MultiSelect({options,name,value,placeholder,emptyStateMessage,hasError,filterMethod,onChange,onBlur,onFocus,maxHeight,formatSelectedOptionsLabel=count=>`${count} selected`,autoComplete,disabled,label,portalContainer,optionsListWidth,slotProps,"aria-describedby":ariaDescribedBy,privateProps,...ariaAttributes}){let selectRef=useRef(null),initialSelectedOptions=useMemo(()=>getSelectedOptions(options,value),[options,value]),{clearButtonAriaLabel}=slotProps.tag,[{selectedOptions,actionName,changedOptions,isOpen,preselectedIndex,innerValue},dispatch]=useReducer(MultiSelectReducer,{selectedOptions:initialSelectedOptions,isOpen:!1,preselectedIndex:-1,innerValue:""}),innerInputRef=useRef(null),inputWrapperRef=useRef(null),handleOnChange=useCallback(event=>{onChange(selectedOptions.map(opt=>opt.value),{name,action:actionName,data:changedOptions},event)},[selectedOptions,actionName,changedOptions,name,onChange]),forceChangeFakeSelect=useCallback(option=>{dispatch({type:"onChange",option})},[dispatch]);useEffect(()=>{dispatch({type:"updateSelectedOptions",selectedOptions:initialSelectedOptions})},[initialSelectedOptions]);let closeDropdown=useCallback(()=>{dispatch({type:"close"}),dispatch({type:"setInnerValue",value:""}),dispatch({type:"setPreselectedIndex",index:-1}),onBlur()},[onBlur,dispatch]);useEffect(()=>{selectRef.current&&selectRef.current.dispatchEvent(new Event("change",{bubbles:!0}))},[changedOptions,selectRef.current]);let filteredOptions=useMemo(()=>innerValue?options.filter(option=>filterMethod(option,innerValue)):options,[options,filterMethod,innerValue]);useEffect(()=>{dispatch({type:"setPreselectedIndex",index:-1})},[filteredOptions]),useKeyboard({"ArrowUp ArrowDown":()=>{dispatch({type:"open"})}},innerInputRef,!isOpen&&!disabled);let optionsListId=getOptionsListId(name),preselectedOption=filteredOptions[preselectedIndex]??null,ariaActiveDescendant=-1!==preselectedIndex&&preselectedOption?getOptionId(name,preselectedOption.value):"";return React.createElement(StyledContainer,{onBlur:()=>{closeDropdown()}},React.createElement(StyledInputWrap,{hasValue:value.length>0,ref:inputWrapperRef},React.createElement(InputRaw,{name:`${name}-innerInput`,value:innerValue,hasError:hasError,privateProps:{isTransparent:!0,hideOutline:!0},icon:isOpen?"chevron-up":"chevron-down",disabled:disabled,placeholder:0===value.length?placeholder:void 0,onFocus:onFocus,onClick:()=>{dispatch({type:"open"})},onChange:e=>{e.currentTarget.value&&dispatch({type:"open"}),dispatch({type:"setInnerValue",value:e.currentTarget.value})},ref:innerInputRef,autoComplete:autoComplete,...ariaAttributes,"aria-label":label,role:"combobox","aria-activedescendant":isOpen?ariaActiveDescendant:"","aria-controls":isOpen?optionsListId:"","aria-expanded":isOpen,"aria-describedby":ariaDescribedBy}),initialSelectedOptions.length>0&&React.createElement(StyledTagWrap,{role:"status"},React.createElement(Tag,{label:formatSelectedOptionsLabel(initialSelectedOptions.length),isRemovable:!0,onClear:()=>{dispatch({type:"clear"})},clearBtnAriaLabel:clearButtonAriaLabel}))),React.createElement(StyledFakeInputWrap,null,React.createElement(InputRaw,{"aria-hidden":!0,name:`${name}-fakeInput`,value:void 0,type:"text",onChange:()=>null,icon:isOpen?"chevron-up":"chevron-down",tabIndex:-1,autoComplete:"off",hasError:hasError})),React.createElement(OptionsList,{isMultiSelect:!0,name:name,isOpen:isOpen,options:filteredOptions,triggerRef:innerInputRef,triggerWrapperRef:inputWrapperRef,onCloseDropdown:closeDropdown,portalContainer:portalContainer,selectedIndex:preselectedIndex,onSelectedIndexChange:index=>{dispatch({type:"setPreselectedIndex",index})},forceChangeFakeSelect:forceChangeFakeSelect,value:value,emptyStateMessage:emptyStateMessage,disabled:disabled,maxHeight:maxHeight,optionsListWidth:optionsListWidth}),React.createElement("select",{ref:selectRef,name:name,onChange:handleOnChange,"data-e2e-test-id":"multiSelect",tabIndex:-1,"aria-hidden":!0,hidden:!0,value:value,multiple:!0},selectedOptions.map(o=>React.createElement("option",{key:o.value,value:o.value},o.label))))}
1
+ import React,{useRef,useMemo,useEffect,useCallback,useReducer}from"react";import styled from"@emotion/styled";import{useKeyboard}from"../../../shared/useKeyboard";import{InputRaw}from"../Input/Input";import{Tag}from"../../Tag/Tag";import{StyledContainer,StyledFakeInputWrap}from"./StyledSelectComponents";import{MultiSelectReducer}from"./MultiSelectReducer";import{getOptionId,getOptionsListId,OptionsList}from"./OptionsList";let StyledInputWrap=styled("div",{target:"e1p1zl000",label:"StyledInputWrap"})(({theme,hasValue})=>({zIndex:1,display:"flex",alignItems:"center",position:"relative","& input":{...hasValue&&{paddingLeft:theme.variables.size.spacing.xxs}}})),StyledTagWrap=styled("div",{target:"e1p1zl001",label:"StyledTagWrap"})(({theme})=>({marginLeft:theme.variables.size.spacing.xs,order:-1})),getSelectedOptions=(options,value)=>{let mapFromValue=new Set(value);return options.filter(opt=>mapFromValue.has(opt.value))};export function MultiSelect({options,name,value,placeholder,emptyStateMessage,hasError,filterMethod,onChange,onBlur,onFocus,maxHeight,formatSelectedOptionsLabel=count=>`${count} selected`,autoComplete,disabled,label,portalContainer,optionsListWidth,slotProps,"aria-describedby":ariaDescribedBy,privateProps,...ariaAttributes}){let selectRef=useRef(null),initialSelectedOptions=useMemo(()=>getSelectedOptions(options,value),[options,value]),{clearButtonAriaLabel}=slotProps.tag,[{selectedOptions,actionName,changedOptions,isOpen,preselectedIndex,innerValue},dispatch]=useReducer(MultiSelectReducer,{selectedOptions:initialSelectedOptions,isOpen:!1,preselectedIndex:-1,innerValue:""}),innerInputRef=useRef(null),inputWrapperRef=useRef(null),handleOnChange=useCallback(event=>{actionName&&changedOptions&&onChange?.(selectedOptions.map(opt=>opt.value),{name,action:actionName,data:changedOptions},event)},[selectedOptions,actionName,changedOptions,name,onChange]),forceChangeFakeSelect=useCallback(option=>{dispatch({type:"onChange",option})},[dispatch]);useEffect(()=>{dispatch({type:"updateSelectedOptions",selectedOptions:initialSelectedOptions})},[initialSelectedOptions]);let closeDropdown=useCallback(()=>{dispatch({type:"close"}),dispatch({type:"setInnerValue",value:""}),dispatch({type:"setPreselectedIndex",index:-1}),onBlur?.()},[onBlur,dispatch]);useEffect(()=>{selectRef.current&&selectRef.current.dispatchEvent(new Event("change",{bubbles:!0}))},[changedOptions,selectRef.current]);let filteredOptions=useMemo(()=>innerValue?options.filter(option=>filterMethod(option,innerValue)):options,[options,filterMethod,innerValue]);useEffect(()=>{dispatch({type:"setPreselectedIndex",index:-1})},[filteredOptions]),useKeyboard({"ArrowUp ArrowDown":()=>{dispatch({type:"open"})}},innerInputRef,!isOpen&&!disabled);let optionsListId=getOptionsListId(name),preselectedOption=filteredOptions[preselectedIndex]??null,ariaActiveDescendant=-1!==preselectedIndex&&preselectedOption?getOptionId(name,preselectedOption.value):"";return React.createElement(StyledContainer,{onBlur:()=>{closeDropdown()}},React.createElement(StyledInputWrap,{hasValue:value.length>0,ref:inputWrapperRef},React.createElement(InputRaw,{name:`${name}-innerInput`,value:innerValue,hasError:hasError,privateProps:{isTransparent:!0,hideOutline:!0},icon:isOpen?"chevron-up":"chevron-down",disabled:disabled,placeholder:0===value.length?placeholder:void 0,onFocus:onFocus,onClick:()=>{dispatch({type:"open"})},onChange:e=>{e.currentTarget.value&&dispatch({type:"open"}),dispatch({type:"setInnerValue",value:e.currentTarget.value})},ref:innerInputRef,autoComplete:autoComplete,...ariaAttributes,"aria-label":label,role:"combobox","aria-activedescendant":isOpen?ariaActiveDescendant:"","aria-controls":isOpen?optionsListId:"","aria-expanded":isOpen,"aria-describedby":ariaDescribedBy}),initialSelectedOptions.length>0&&React.createElement(StyledTagWrap,{role:"status"},React.createElement(Tag,{label:formatSelectedOptionsLabel(initialSelectedOptions.length),isRemovable:!0,onClear:()=>{dispatch({type:"clear"})},clearBtnAriaLabel:clearButtonAriaLabel}))),React.createElement(StyledFakeInputWrap,null,React.createElement(InputRaw,{"aria-hidden":!0,name:`${name}-fakeInput`,value:void 0,type:"text",onChange:()=>null,icon:isOpen?"chevron-up":"chevron-down",tabIndex:-1,autoComplete:"off",hasError:hasError})),React.createElement(OptionsList,{isMultiSelect:!0,name:name,isOpen:isOpen,options:filteredOptions,triggerRef:innerInputRef,triggerWrapperRef:inputWrapperRef,onCloseDropdown:closeDropdown,portalContainer:portalContainer,selectedIndex:preselectedIndex,onSelectedIndexChange:index=>{dispatch({type:"setPreselectedIndex",index})},forceChangeFakeSelect:forceChangeFakeSelect,value:value,emptyStateMessage:emptyStateMessage,disabled:disabled,maxHeight:maxHeight,optionsListWidth:optionsListWidth}),React.createElement("select",{ref:selectRef,name:name,onChange:handleOnChange,"data-e2e-test-id":"multiSelect",tabIndex:-1,"aria-hidden":!0,hidden:!0,value:value,multiple:!0},selectedOptions.map(o=>React.createElement("option",{key:o.value,value:o.value},o.label))))}
@@ -1,7 +1,7 @@
1
1
  import type { SelectOption } from "./Combobox";
2
2
  type ChangeAction = "select-option" | "deselect-option" | "clear";
3
3
  type State = {
4
- selectedOptions?: SelectOption[];
4
+ selectedOptions: SelectOption[];
5
5
  changedOptions?: SelectOption[];
6
6
  isOpen: boolean;
7
7
  preselectedIndex: number;
@@ -11,15 +11,18 @@ export declare const OPTIONS_LIST_SELECTOR = "[role=\"listbox\"], [role=\"option
11
11
  type OptionsListProps = {
12
12
  isOpen: boolean;
13
13
  isMultiSelect?: boolean;
14
- triggerRef: RefObject<HTMLInputElement>;
14
+ triggerRef: RefObject<HTMLElement>;
15
15
  triggerWrapperRef?: RefObject<HTMLDivElement>;
16
16
  onCloseDropdown: (noSelect?: boolean) => void;
17
17
  selectedIndex: number;
18
18
  onSelectedIndexChange: (index: number) => void;
19
19
  forceChangeFakeSelect: (selectedOption: SelectOption) => void;
20
20
  isVirtualized?: boolean;
21
- } & Partial<CommonSelectProps>;
21
+ name: string;
22
+ value: string | string[];
23
+ maxHeight: number;
24
+ } & Omit<Partial<CommonSelectProps>, "name" | "value" | "maxHeight">;
22
25
  export declare function getOptionId(selectName: string, optionValue: string): string;
23
26
  export declare function getOptionsListId(selectName: string): string;
24
- export declare function OptionsList({ isOpen, isMultiSelect, value, disabled, options, portalContainer, triggerRef, triggerWrapperRef, maxHeight, emptyStateMessage, selectedIndex, optionsListWidth, isVirtualized, name, onCloseDropdown, onSelectedIndexChange, forceChangeFakeSelect, }: OptionsListProps): React.ReactElement;
27
+ export declare function OptionsList({ isOpen, isMultiSelect, value, disabled, options, portalContainer, triggerRef, triggerWrapperRef, maxHeight, emptyStateMessage, selectedIndex, optionsListWidth, isVirtualized, name, onCloseDropdown, onSelectedIndexChange, forceChangeFakeSelect, }: OptionsListProps): React.ReactElement | null;
25
28
  export {};
@@ -1 +1 @@
1
- import React,{useRef,useEffect,useLayoutEffect,useMemo}from"react";import{useTheme}from"@emotion/react";import styled from"@emotion/styled";import{useKeyboard}from"../../../shared/useKeyboard";import{useWindow}from"../../../shared/useWindow";import{usePopupMenu}from"../../../shared/popupMenu/usePopupMenu";import{VirtualScrollList}from"../../VirtualScrollList/VirtualScrollList";import{Text}from"../../Typography/Text/Text";import{Box}from"../../Box/Box";import{Inline}from"../../Inline/Inline";import{Icon}from"../../Icon/Icon";import{StyledDropdown,StyledOption}from"./StyledSelectComponents";import{dropdownContainerStyle}from"./constants";import{Stack}from"../../Stack/Stack";import{CheckboxRaw}from"../Checkbox/Checkbox";import{Portal}from"../../Portal/Portal";import{ScreenReaderText}from"../../Utilities/ScreenReaderText/ScreenReaderText";export const OPTIONS_LIST_SELECTOR='[role="listbox"], [role="option"]';export function getOptionId(selectName,optionValue){return`${selectName}Option${optionValue}`}export function getOptionsListId(selectName){return`${selectName}OptionsList`}let scrollToItem=({list,itemIndex,behavior})=>{list[itemIndex]?.scrollIntoView?.({behavior,block:"nearest"})},CustomOption=styled(StyledOption,{target:"eubbn5p0",label:"CustomOption"})(({theme})=>({paddingTop:0,paddingBottom:0,"& > div":{paddingTop:theme.variables.size.spacing.xs,paddingBottom:theme.variables.size.spacing.xs},"& > div *":{marginTop:0}})),StyledListContainer=styled("div",{target:"eubbn5p1",label:"StyledListContainer"})(({theme,maxHeight})=>({maxHeight,boxSizing:"border-box",overflow:"auto",padding:`${theme.variables.size.spacing.xxs} 0`}));export function OptionsList({isOpen,isMultiSelect=!1,value,disabled,options,portalContainer,triggerRef,triggerWrapperRef,maxHeight,emptyStateMessage="No options available",selectedIndex,optionsListWidth,isVirtualized=!0,name,onCloseDropdown,onSelectedIndexChange,forceChangeFakeSelect}){let optionsListRef=useRef(null),listContainerRef=useRef(null),listItemsRef=useRef(null),refForPositioning=triggerWrapperRef||triggerRef,activeItemIndex=useMemo(()=>options.findIndex(option=>isMultiSelect?value.includes(option.value):option.value===value),[options,isMultiSelect,value]),{menuStyle:optionsListStyle,calculateStyle}=usePopupMenu({triggerRef:refForPositioning,menuRef:optionsListRef,isOpen}),win=useWindow(),{variables}=useTheme(),effectiveMaxHeight=useMemo(()=>{if(!win||!optionsListStyle.top)return maxHeight;let menuViewportMargin=parseInt(variables.size.spacing.xs,10),menuTopInViewport=optionsListStyle.top-(win.scrollY??0),spaceBelow=win.innerHeight-menuTopInViewport-menuViewportMargin;return!Number.isFinite(spaceBelow)||spaceBelow<=0?maxHeight:maxHeight?Math.min(maxHeight,spaceBelow):spaceBelow},[maxHeight,optionsListStyle,win,variables]);useLayoutEffect(()=>{if(isOpen&&listContainerRef.current&&!isVirtualized&&optionsListStyle.top){let listElm=listContainerRef.current;listElm.clientHeight<listElm.scrollHeight&&(listItemsRef.current=listElm.querySelectorAll("[data-list-item]"),scrollToItem({list:listItemsRef.current,itemIndex:activeItemIndex,behavior:"instant"}))}else listItemsRef.current=null},[isOpen,isVirtualized,listContainerRef,options,maxHeight,optionsListStyle,activeItemIndex]),useEffect(()=>{listItemsRef.current&&scrollToItem({list:listItemsRef.current,itemIndex:selectedIndex,behavior:"smooth"})},[listItemsRef,selectedIndex]),useKeyboard({Escape:()=>onCloseDropdown(!0),Enter:()=>{let preselectedOption=options[selectedIndex];if(!preselectedOption?.disabled){if(preselectedOption){forceChangeFakeSelect(preselectedOption),isMultiSelect||onCloseDropdown(!0);return}isMultiSelect||onCloseDropdown()}},ArrowUp:()=>{let newIndex=-1===selectedIndex?activeItemIndex:selectedIndex;for(;newIndex>0&&(newIndex-=1,options[newIndex]?.disabled););options[newIndex]?.disabled||onSelectedIndexChange(newIndex)},ArrowDown:()=>{let newIndex=-1===selectedIndex?activeItemIndex:selectedIndex;for(;newIndex<options.length-1&&(newIndex+=1,options[newIndex]?.disabled););options[newIndex]?.disabled||onSelectedIndexChange(newIndex)}},triggerRef,isOpen&&!disabled);let renderItem=index=>{let option=options[index],id=getOptionId(name,option.value);if(isMultiSelect){let isActive=value.includes(option.value);return React.createElement(CustomOption,{role:"option","aria-selected":isActive,"aria-disabled":option.disabled,id:id,key:option.value,active:isActive,disabled:option.disabled,preSelected:selectedIndex===index,"data-list-item":!0,onMouseDown:()=>{option.disabled||forceChangeFakeSelect(option)},onClick:evt=>evt.stopPropagation()},React.createElement(CheckboxRaw,{name:"",disabled:option.disabled,checked:isActive,size:"s",label:option.label,onChange:()=>null,labelHint:option?.description}))}let isActive=value===option.value,optionText=React.createElement(Stack,{space:"zero"},React.createElement(Text,{color:"primary",size:"m"},option.label),option.description&&React.createElement(Text,{color:"tertiary",size:"s"},option.description));return React.createElement(StyledOption,{role:"option","aria-selected":isActive,"aria-disabled":option.disabled,id:id,key:option.value,active:isActive,disabled:option.disabled,preSelected:selectedIndex===index,"data-list-item":!0,onMouseDown:()=>{option.disabled||(forceChangeFakeSelect(option),onCloseDropdown(!0))}},isActive?React.createElement(Inline,{noWrap:!0,alignItems:"spaceBetween"},optionText,React.createElement(Box,{space:"zero",tSpace:"xxxs"},React.createElement(Icon,{name:"check",size:"s",color:"accent"}))):optionText)},listStyle={...optionsListStyle,width:optionsListWidth||refForPositioning.current?.getBoundingClientRect().width},listElm=React.createElement(StyledDropdown,{style:listStyle,ref:optionsListRef,onMouseDown:e=>e.preventDefault(),"data-e2e-test-id":"optionsList"},isVirtualized?React.createElement(VirtualScrollList,{id:getOptionsListId(name),maxHeight:effectiveMaxHeight,itemHeight:36,itemAmount:options.length,emptyState:()=>null,containerStyle:dropdownContainerStyle,itemInView:selectedIndex,itemTemplate:renderItem,onContentHeightChange:calculateStyle,role:"listbox"}):React.createElement(StyledListContainer,{maxHeight:effectiveMaxHeight,role:"listbox",id:getOptionsListId(name),ref:listContainerRef},options.map((_option,index)=>renderItem(index))));if(!isOpen)return null;let listPortal=options.length?React.createElement(Portal,{portalContainer:portalContainer},listElm):null;return React.createElement(React.Fragment,null,React.createElement(ScreenReaderText,{role:"status","aria-live":"polite"},options.length?"":emptyStateMessage),listPortal)}
1
+ import React,{useRef,useEffect,useLayoutEffect,useMemo}from"react";import{useTheme}from"@emotion/react";import styled from"@emotion/styled";import{useKeyboard}from"../../../shared/useKeyboard";import{useWindow}from"../../../shared/useWindow";import{usePopupMenu}from"../../../shared/popupMenu/usePopupMenu";import{VirtualScrollList}from"../../VirtualScrollList/VirtualScrollList";import{Text}from"../../Typography/Text/Text";import{Box}from"../../Box/Box";import{Inline}from"../../Inline/Inline";import{Icon}from"../../Icon/Icon";import{StyledDropdown,StyledOption}from"./StyledSelectComponents";import{dropdownContainerStyle}from"./constants";import{Stack}from"../../Stack/Stack";import{CheckboxRaw}from"../Checkbox/Checkbox";import{Portal}from"../../Portal/Portal";import{ScreenReaderText}from"../../Utilities/ScreenReaderText/ScreenReaderText";export const OPTIONS_LIST_SELECTOR='[role="listbox"], [role="option"]';export function getOptionId(selectName,optionValue){return`${selectName}Option${optionValue}`}export function getOptionsListId(selectName){return`${selectName}OptionsList`}let scrollToItem=({list,itemIndex,behavior})=>{list[itemIndex]?.scrollIntoView?.({behavior,block:"nearest"})},CustomOption=styled(StyledOption,{target:"e1bzrm20",label:"CustomOption"})(({theme})=>({paddingTop:0,paddingBottom:0,"& > div":{paddingTop:theme.variables.size.spacing.xs,paddingBottom:theme.variables.size.spacing.xs},"& > div *":{marginTop:0}})),StyledListContainer=styled("div",{target:"e1bzrm21",label:"StyledListContainer"})(({theme,maxHeight})=>({maxHeight,boxSizing:"border-box",overflow:"auto",padding:`${theme.variables.size.spacing.xxs} 0`}));export function OptionsList({isOpen,isMultiSelect=!1,value,disabled,options=[],portalContainer,triggerRef,triggerWrapperRef,maxHeight,emptyStateMessage="No options available",selectedIndex,optionsListWidth,isVirtualized=!0,name,onCloseDropdown,onSelectedIndexChange,forceChangeFakeSelect}){let optionsListRef=useRef(null),listContainerRef=useRef(null),listItemsRef=useRef(null),refForPositioning=triggerWrapperRef||triggerRef,activeItemIndex=useMemo(()=>options.findIndex(option=>isMultiSelect?value.includes(option.value):option.value===value),[options,isMultiSelect,value]),{menuStyle:optionsListStyle,calculateStyle}=usePopupMenu({triggerRef:refForPositioning,menuRef:optionsListRef,isOpen}),win=useWindow(),{variables}=useTheme(),effectiveMaxHeight=useMemo(()=>{if(!win||!optionsListStyle.top)return maxHeight;let menuViewportMargin=parseInt(variables.size.spacing.xs,10),menuTopInViewport=optionsListStyle.top-(win.scrollY??0),spaceBelow=win.innerHeight-menuTopInViewport-menuViewportMargin;return!Number.isFinite(spaceBelow)||spaceBelow<=0?maxHeight:maxHeight?Math.min(maxHeight,spaceBelow):spaceBelow},[maxHeight,optionsListStyle,win,variables]);useLayoutEffect(()=>{if(isOpen&&listContainerRef.current&&!isVirtualized&&optionsListStyle.top){let listElm=listContainerRef.current;listElm.clientHeight<listElm.scrollHeight&&(listItemsRef.current=listElm.querySelectorAll("[data-list-item]"),scrollToItem({list:listItemsRef.current,itemIndex:activeItemIndex,behavior:"instant"}))}else listItemsRef.current=null},[isOpen,isVirtualized,listContainerRef,options,maxHeight,optionsListStyle,activeItemIndex]),useEffect(()=>{listItemsRef.current&&scrollToItem({list:listItemsRef.current,itemIndex:selectedIndex,behavior:"smooth"})},[listItemsRef,selectedIndex]),useKeyboard({Escape:()=>onCloseDropdown(!0),Enter:()=>{let preselectedOption=options[selectedIndex];if(!preselectedOption?.disabled){if(preselectedOption){forceChangeFakeSelect(preselectedOption),isMultiSelect||onCloseDropdown(!0);return}isMultiSelect||onCloseDropdown()}},ArrowUp:()=>{let newIndex=-1===selectedIndex?activeItemIndex:selectedIndex;for(;newIndex>0&&(newIndex-=1,options[newIndex]?.disabled););options[newIndex]?.disabled||onSelectedIndexChange(newIndex)},ArrowDown:()=>{let newIndex=-1===selectedIndex?activeItemIndex:selectedIndex;for(;newIndex<options.length-1&&(newIndex+=1,options[newIndex]?.disabled););options[newIndex]?.disabled||onSelectedIndexChange(newIndex)}},triggerRef,isOpen&&!disabled);let renderItem=index=>{let option=options[index],id=getOptionId(name,option.value);if(isMultiSelect){let isActive=value.includes(option.value);return React.createElement(CustomOption,{role:"option","aria-selected":isActive,"aria-disabled":option.disabled,id:id,key:option.value,active:isActive,disabled:option.disabled??!1,preSelected:selectedIndex===index,"data-list-item":!0,onMouseDown:()=>{option.disabled||forceChangeFakeSelect(option)},onClick:evt=>evt.stopPropagation()},React.createElement(CheckboxRaw,{name:"",disabled:option.disabled,checked:isActive,size:"s",label:option.label,onChange:()=>null,labelHint:option?.description}))}let isActive=value===option.value,optionText=React.createElement(Stack,{space:"zero"},React.createElement(Text,{color:"primary",size:"m"},option.label),option.description&&React.createElement(Text,{color:"tertiary",size:"s"},option.description));return React.createElement(StyledOption,{role:"option","aria-selected":isActive,"aria-disabled":option.disabled,id:id,key:option.value,active:isActive,disabled:option.disabled??!1,preSelected:selectedIndex===index,"data-list-item":!0,onMouseDown:()=>{option.disabled||(forceChangeFakeSelect(option),onCloseDropdown(!0))}},isActive?React.createElement(Inline,{noWrap:!0,alignItems:"spaceBetween"},optionText,React.createElement(Box,{space:"zero",tSpace:"xxxs"},React.createElement(Icon,{name:"check",size:"s",color:"accent"}))):optionText)},listStyle={...optionsListStyle,width:optionsListWidth||refForPositioning.current?.getBoundingClientRect().width},listElm=React.createElement(StyledDropdown,{style:listStyle,ref:optionsListRef,onMouseDown:e=>e.preventDefault(),"data-e2e-test-id":"optionsList"},isVirtualized?React.createElement(VirtualScrollList,{id:getOptionsListId(name),maxHeight:effectiveMaxHeight,itemHeight:36,itemAmount:options.length,emptyState:()=>null,containerStyle:dropdownContainerStyle,itemInView:selectedIndex,itemTemplate:renderItem,onContentHeightChange:calculateStyle,role:"listbox"}):React.createElement(StyledListContainer,{maxHeight:effectiveMaxHeight,role:"listbox",id:getOptionsListId(name),ref:listContainerRef},options.map((_option,index)=>renderItem(index))));if(!isOpen)return null;let listPortal=options.length?React.createElement(Portal,{portalContainer:portalContainer},listElm):null;return React.createElement(React.Fragment,null,React.createElement(ScreenReaderText,{role:"status","aria-live":"polite"},options.length?"":emptyStateMessage),listPortal)}
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
2
  import type { CommonSelectProps } from "./Combobox";
3
3
  import type { FormFieldProps } from "../FormField/FormField";
4
- type SingleSelectProps = CommonSelectProps & Pick<FormFieldProps, "label"> & {
4
+ type SingleSelectProps = Omit<CommonSelectProps, "value" | "onChange" | "options" | "filterMethod" | "maxHeight"> & Required<Pick<CommonSelectProps, "options" | "filterMethod" | "maxHeight">> & Pick<FormFieldProps, "label"> & {
5
5
  value: string;
6
6
  onChange: (e: React.ChangeEvent<HTMLSelectElement>) => void;
7
7
  };
@@ -1 +1 @@
1
- import React,{useState,useRef,useMemo,useEffect,useCallback}from"react";import styled from"@emotion/styled";import{useKeyboard}from"../../../shared/useKeyboard";import{InputRaw}from"../Input/Input";import{StyledContainer}from"./StyledSelectComponents";import{getOptionId,getOptionsListId,OptionsList}from"./OptionsList";let StyledInnerInputContainer=styled("div",{target:"e14osuid0",label:"StyledInnerInputContainer"})({position:"relative",zIndex:1}),StyledInputWrap=styled("div",{target:"e14osuid1",label:"StyledInputWrap"})(()=>({position:"absolute",pointerEvents:"none",width:"100%",bottom:0,left:0})),HiddenSelectInput=styled("select",{target:"e14osuid2",label:"HiddenSelectInput"})(()=>({display:"none"}));export const SingleSelect=({options,name,value,placeholder,emptyStateMessage,hasError,filterMethod,onChange=()=>{},onBlur,onFocus,maxHeight,autoComplete,disabled,label,optionsListWidth,portalContainer,readOnly,"aria-describedby":ariaDescribedBy,privateProps,...ariaAttributes})=>{let[isOpen,setIsOpen]=useState(!1),[innerValue,setInnerValue]=useState(""),[preselectedIndex,setPreselectedIndex]=useState(-1),initialValueOption=useMemo(()=>options.find(option=>option.value===value)||{value:"",label:""},[options,value]),[fakeSelectedOption,setFakeSelectedOption]=useState(initialValueOption),fakeSelectRef=useRef(null),innerInputRef=useRef(null),currentValueRef=useRef(value);currentValueRef.current=value;let forceChangeFakeSelect=useCallback(selectedOption=>{fakeSelectedOption.value!==selectedOption.value&&setFakeSelectedOption(selectedOption)},[fakeSelectedOption]),handleOpenDropdown=useCallback(()=>{readOnly||setIsOpen(!0)},[readOnly,setIsOpen]),closeDropdown=useCallback((noSelect=!1)=>{if(setIsOpen(!1),!noSelect){let selectedOption=options.find(option=>option.label.toLowerCase().trim()===innerValue.toLowerCase().trim());selectedOption&&forceChangeFakeSelect(selectedOption)}setInnerValue(""),setPreselectedIndex(-1),onBlur()},[onBlur,forceChangeFakeSelect,innerValue,options]);useEffect(()=>{fakeSelectRef.current&&currentValueRef.current!==fakeSelectedOption.value&&fakeSelectRef.current.dispatchEvent(new Event("change",{bubbles:!0}))},[fakeSelectedOption,fakeSelectRef,currentValueRef]),useEffect(()=>{forceChangeFakeSelect(initialValueOption)},[initialValueOption]);let filteredOptions=useMemo(()=>innerValue?options.filter(option=>filterMethod(option,innerValue)):options,[options,filterMethod,innerValue]),displayValue=useMemo(()=>options.some(option=>option.value===value)?options.find(option=>option.value===value).label:"",[value,options]);useEffect(()=>{setPreselectedIndex(-1)},[filteredOptions]),useKeyboard({"ArrowUp ArrowDown":()=>{handleOpenDropdown()}},innerInputRef,!isOpen&&!disabled&&!readOnly);let optionsListId=getOptionsListId(name),pendingOption=filteredOptions[preselectedIndex]??null,ariaActiveDescendant=isOpen&&pendingOption?getOptionId(name,pendingOption.value):"";return React.createElement(StyledContainer,{onBlur:()=>{isOpen&&pendingOption&&!pendingOption.disabled&&forceChangeFakeSelect(pendingOption),closeDropdown(!0)}},React.createElement(StyledInnerInputContainer,null,React.createElement(InputRaw,{name:`${name}-innerInput`,value:innerValue,hasError:hasError,privateProps:{isTransparent:!(isOpen&&innerValue)||readOnly},icon:isOpen?"chevron-up":"chevron-down",disabled:disabled,readOnly:readOnly,onFocus:onFocus,onClick:handleOpenDropdown,onChange:e=>{e.currentTarget.value&&handleOpenDropdown(),setInnerValue(e.currentTarget.value)},ref:innerInputRef,autoComplete:autoComplete,...ariaAttributes,"aria-label":label,role:"combobox","aria-haspopup":"listbox","aria-activedescendant":ariaActiveDescendant,"aria-controls":isOpen?optionsListId:"","aria-expanded":isOpen,"aria-describedby":ariaDescribedBy})),React.createElement(StyledInputWrap,null,React.createElement(InputRaw,{"aria-hidden":!0,name:name,value:displayValue,onChange:()=>null,icon:isOpen?"chevron-up":"chevron-down",placeholder:placeholder,tabIndex:-1,hasError:hasError,autoComplete:"off",readOnly:readOnly})),React.createElement(OptionsList,{name:name,isOpen:isOpen,options:filteredOptions,triggerRef:innerInputRef,onCloseDropdown:closeDropdown,portalContainer:portalContainer,selectedIndex:preselectedIndex,onSelectedIndexChange:index=>{setPreselectedIndex(index)},forceChangeFakeSelect:forceChangeFakeSelect,value:value,emptyStateMessage:emptyStateMessage,disabled:disabled,maxHeight:maxHeight,optionsListWidth:optionsListWidth}),React.createElement(HiddenSelectInput,{onChange:onChange,value:fakeSelectedOption.value,ref:fakeSelectRef,autoComplete:"off"},React.createElement("option",{value:fakeSelectedOption.value},fakeSelectedOption.label)))};
1
+ import React,{useState,useRef,useMemo,useEffect,useCallback}from"react";import styled from"@emotion/styled";import{useKeyboard}from"../../../shared/useKeyboard";import{InputRaw}from"../Input/Input";import{StyledContainer}from"./StyledSelectComponents";import{getOptionId,getOptionsListId,OptionsList}from"./OptionsList";let StyledInnerInputContainer=styled("div",{target:"eqabiiq0",label:"StyledInnerInputContainer"})({position:"relative",zIndex:1}),StyledInputWrap=styled("div",{target:"eqabiiq1",label:"StyledInputWrap"})(()=>({position:"absolute",pointerEvents:"none",width:"100%",bottom:0,left:0})),HiddenSelectInput=styled("select",{target:"eqabiiq2",label:"HiddenSelectInput"})(()=>({display:"none"}));export const SingleSelect=({options,name,value,placeholder,emptyStateMessage,hasError,filterMethod,onChange=()=>{},onBlur,onFocus,maxHeight,autoComplete,disabled,label,optionsListWidth,portalContainer,readOnly,"aria-describedby":ariaDescribedBy,privateProps,...ariaAttributes})=>{let[isOpen,setIsOpen]=useState(!1),[innerValue,setInnerValue]=useState(""),[preselectedIndex,setPreselectedIndex]=useState(-1),initialValueOption=useMemo(()=>options.find(option=>option.value===value)||{value:"",label:""},[options,value]),[fakeSelectedOption,setFakeSelectedOption]=useState(initialValueOption),fakeSelectRef=useRef(null),innerInputRef=useRef(null),currentValueRef=useRef(value);currentValueRef.current=value;let forceChangeFakeSelect=useCallback(selectedOption=>{fakeSelectedOption.value!==selectedOption.value&&setFakeSelectedOption(selectedOption)},[fakeSelectedOption]),handleOpenDropdown=useCallback(()=>{readOnly||setIsOpen(!0)},[readOnly,setIsOpen]),closeDropdown=useCallback((noSelect=!1)=>{if(setIsOpen(!1),!noSelect){let selectedOption=options.find(option=>option.label.toLowerCase().trim()===innerValue.toLowerCase().trim());selectedOption&&forceChangeFakeSelect(selectedOption)}setInnerValue(""),setPreselectedIndex(-1),onBlur?.()},[onBlur,forceChangeFakeSelect,innerValue,options]);useEffect(()=>{fakeSelectRef.current&&currentValueRef.current!==fakeSelectedOption.value&&fakeSelectRef.current.dispatchEvent(new Event("change",{bubbles:!0}))},[fakeSelectedOption,fakeSelectRef,currentValueRef]),useEffect(()=>{forceChangeFakeSelect(initialValueOption)},[initialValueOption]);let filteredOptions=useMemo(()=>innerValue?options.filter(option=>filterMethod(option,innerValue)):options,[options,filterMethod,innerValue]),displayValue=useMemo(()=>options.find(option=>option.value===value)?.label??"",[value,options]);useEffect(()=>{setPreselectedIndex(-1)},[filteredOptions]),useKeyboard({"ArrowUp ArrowDown":()=>{handleOpenDropdown()}},innerInputRef,!isOpen&&!disabled&&!readOnly);let optionsListId=getOptionsListId(name),pendingOption=filteredOptions[preselectedIndex]??null,ariaActiveDescendant=isOpen&&pendingOption?getOptionId(name,pendingOption.value):"";return React.createElement(StyledContainer,{onBlur:()=>{isOpen&&pendingOption&&!pendingOption.disabled&&forceChangeFakeSelect(pendingOption),closeDropdown(!0)}},React.createElement(StyledInnerInputContainer,null,React.createElement(InputRaw,{name:`${name}-innerInput`,value:innerValue,hasError:hasError,privateProps:{isTransparent:!(isOpen&&innerValue)||readOnly},icon:isOpen?"chevron-up":"chevron-down",disabled:disabled,readOnly:readOnly,onFocus:onFocus,onClick:handleOpenDropdown,onChange:e=>{e.currentTarget.value&&handleOpenDropdown(),setInnerValue(e.currentTarget.value)},ref:innerInputRef,autoComplete:autoComplete,...ariaAttributes,"aria-label":label,role:"combobox","aria-haspopup":"listbox","aria-activedescendant":ariaActiveDescendant,"aria-controls":isOpen?optionsListId:"","aria-expanded":isOpen,"aria-describedby":ariaDescribedBy})),React.createElement(StyledInputWrap,null,React.createElement(InputRaw,{"aria-hidden":!0,name:name,value:displayValue,onChange:()=>null,icon:isOpen?"chevron-up":"chevron-down",placeholder:placeholder,tabIndex:-1,hasError:hasError,autoComplete:"off",readOnly:readOnly})),React.createElement(OptionsList,{name:name,isOpen:isOpen,options:filteredOptions,triggerRef:innerInputRef,onCloseDropdown:closeDropdown,portalContainer:portalContainer,selectedIndex:preselectedIndex,onSelectedIndexChange:index=>{setPreselectedIndex(index)},forceChangeFakeSelect:forceChangeFakeSelect,value:value,emptyStateMessage:emptyStateMessage,disabled:disabled,maxHeight:maxHeight,optionsListWidth:optionsListWidth}),React.createElement(HiddenSelectInput,{onChange:onChange,value:fakeSelectedOption.value,ref:fakeSelectRef,autoComplete:"off"},React.createElement("option",{value:fakeSelectedOption.value},fakeSelectedOption.label)))};
@@ -1 +1 @@
1
- import sizes from"../../../web-tokens/_sizes.json";let xxs=sizes.find(({subitemName})=>"xxs"===subitemName).original;export const dropdownContainerStyle={paddingTop:xxs,paddingBottom:xxs};
1
+ import sizes from"../../../web-tokens/_sizes.json";let xxs=sizes.find(({subitemName})=>"xxs"===subitemName)?.original;export const dropdownContainerStyle={paddingTop:xxs,paddingBottom:xxs};
@@ -1 +1 @@
1
- import React,{useEffect,useRef,useState,useId}from"react";import styled from"@emotion/styled";import isPropValid from"@emotion/is-prop-valid";import{Stack}from"../../Stack/Stack";import{Text}from"../../Typography/Text/Text";import{FormErrorMessages}from"../FormErrorMessages/FormErrorMessages";import{FormLabelText}from"../FormLabelText/FormLabelText";import{flattenChildren}from"../../../shared/flattenChildren";import{ScreenReaderText}from"../../Utilities/ScreenReaderText/ScreenReaderText";import{useResponsiveStyles}from"../../../shared/mediaQueries";let StyledFieldset=styled("fieldset",{shouldForwardProp:prop=>isPropValid(prop)&&"color"!==prop,target:"e1o8e6w80",label:"StyledFieldset"})(({isObserverDone,disabled})=>({border:0,margin:0,padding:0,visibility:isObserverDone?"visible":"hidden",...disabled&&{cursor:"not-allowed"}})),InlineChildren=styled("div",{target:"e1o8e6w81",label:"InlineChildren"})({display:"flex",flexDirection:"row",flexWrap:"nowrap"}),FormChildren=styled("div",{target:"e1o8e6w82",label:"FormChildren"})(({theme,shouldLabelWrap,space})=>({...useResponsiveStyles({marginRight:[space,theme.variables.size.spacing]}),whiteSpace:shouldLabelWrap?"normal":"nowrap"})),StyledTextContainer=styled("div",{target:"e1o8e6w83",label:"StyledTextContainer"})(({theme,disabled})=>({...disabled&&{opacity:theme.variables.opacity.disabled,pointerEvents:"none"}})),StyledLabelContainer=styled("div",{target:"e1o8e6w84",label:"StyledLabelContainer"})(({theme,disabled})=>({...disabled&&{opacity:theme.variables.opacity.disabled,pointerEvents:"none"}}));export function FormFieldGroup({children,label="",labelAs="div",isLabelHidden=!1,labelHint="",errorMessages=[],hint="",disabled=!1,inline=!1,space="xl","data-e2e-test-id":dataE2eTestId,...ariaAttributes}){let messageId=useId(),radioGroupRef=useRef(null),[isOverflowing,setIsOverflowing]=useState(!1),[isObserverDone,setIsObserverDone]=useState(!inline),[shouldLabelWrap,setShouldLabelWrap]=useState(!1);useEffect(()=>{let observer;return inline&&"undefined"!=typeof IntersectionObserver&&radioGroupRef&&radioGroupRef.current&&(observer=new IntersectionObserver(entries=>entries.forEach(entry=>{entry.isIntersecting||(setIsOverflowing(!0),setShouldLabelWrap(!0)),setIsObserverDone(!0)}),{root:radioGroupRef.current,threshold:1}),Object.entries(radioGroupRef.current.children).forEach(radio=>{let radioElement=radio[1];observer.observe(radioElement)})),()=>{observer&&observer.disconnect()}},[inline]);let validErrorMessages=errorMessages.filter(message=>message),messagesElm=(!!validErrorMessages.length||hint)&&React.createElement(Stack,{space:"xxs",id:messageId},!!validErrorMessages.length&&React.createElement(StyledTextContainer,{disabled:disabled},React.createElement(FormErrorMessages,{messages:validErrorMessages})),hint&&React.createElement(StyledTextContainer,{disabled:disabled},React.createElement(Text,{size:"s",color:"tertiary"},hint))),ariaDescribedBy=messagesElm?{"aria-describedby":messageId}:{},renderChild=child=>React.isValidElement(child)?React.cloneElement(child,{disabled:disabled||child.props.disabled}):null;return React.createElement(StyledFieldset,{disabled:disabled,"data-e2e-test-id":dataE2eTestId,"data-ds-id":"FormFieldGroup",isObserverDone:isObserverDone,...ariaAttributes,...ariaDescribedBy},React.createElement(ScreenReaderText,{as:"legend"},label),React.createElement(Stack,{space:"xs"},label&&!isLabelHidden&&React.createElement(StyledLabelContainer,{disabled:disabled},React.createElement(FormLabelText,{labelHint:labelHint,labelAs:labelAs},label)),inline&&!isOverflowing?React.createElement(InlineChildren,{ref:radioGroupRef},React.Children.map(flattenChildren(children),child=>child?React.createElement(FormChildren,{shouldLabelWrap:shouldLabelWrap,space:space},renderChild(child)):null)):React.Children.map(flattenChildren(children),renderChild),messagesElm))}
1
+ import React,{useEffect,useRef,useState,useId}from"react";import styled from"@emotion/styled";import isPropValid from"@emotion/is-prop-valid";import{Stack}from"../../Stack/Stack";import{Text}from"../../Typography/Text/Text";import{FormErrorMessages}from"../FormErrorMessages/FormErrorMessages";import{FormLabelText}from"../FormLabelText/FormLabelText";import{flattenChildren}from"../../../shared/flattenChildren";import{ScreenReaderText}from"../../Utilities/ScreenReaderText/ScreenReaderText";import{useResponsiveStyles}from"../../../shared/mediaQueries";let StyledFieldset=styled("fieldset",{shouldForwardProp:prop=>isPropValid(prop)&&"color"!==prop,target:"ec2mc9r0",label:"StyledFieldset"})(({isObserverDone,disabled})=>({border:0,margin:0,padding:0,visibility:isObserverDone?"visible":"hidden",...disabled&&{cursor:"not-allowed"}})),InlineChildren=styled("div",{target:"ec2mc9r1",label:"InlineChildren"})({display:"flex",flexDirection:"row",flexWrap:"nowrap"}),FormChildren=styled("div",{target:"ec2mc9r2",label:"FormChildren"})(({theme,shouldLabelWrap,space})=>({...useResponsiveStyles({marginRight:[space,theme.variables.size.spacing]}),whiteSpace:shouldLabelWrap?"normal":"nowrap"})),StyledTextContainer=styled("div",{target:"ec2mc9r3",label:"StyledTextContainer"})(({theme,disabled})=>({...disabled&&{opacity:theme.variables.opacity.disabled,pointerEvents:"none"}})),StyledLabelContainer=styled("div",{target:"ec2mc9r4",label:"StyledLabelContainer"})(({theme,disabled})=>({...disabled&&{opacity:theme.variables.opacity.disabled,pointerEvents:"none"}}));export function FormFieldGroup({children,label="",labelAs="div",isLabelHidden=!1,labelHint="",errorMessages=[],hint="",disabled=!1,inline=!1,space="xl","data-e2e-test-id":dataE2eTestId,...ariaAttributes}){let messageId=useId(),radioGroupRef=useRef(null),[isOverflowing,setIsOverflowing]=useState(!1),[isObserverDone,setIsObserverDone]=useState(!inline),[shouldLabelWrap,setShouldLabelWrap]=useState(!1);useEffect(()=>{let observer;return inline&&"undefined"!=typeof IntersectionObserver&&radioGroupRef&&radioGroupRef.current&&(observer=new IntersectionObserver(entries=>entries.forEach(entry=>{entry.isIntersecting||(setIsOverflowing(!0),setShouldLabelWrap(!0)),setIsObserverDone(!0)}),{root:radioGroupRef.current,threshold:1}),Object.entries(radioGroupRef.current.children).forEach(radio=>{let radioElement=radio[1];observer.observe(radioElement)})),()=>{observer&&observer.disconnect()}},[inline]);let validErrorMessages=errorMessages.filter(message=>message),messagesElm=(!!validErrorMessages.length||hint)&&React.createElement(Stack,{space:"xxs",id:messageId},!!validErrorMessages.length&&React.createElement(StyledTextContainer,{disabled:disabled},React.createElement(FormErrorMessages,{messages:validErrorMessages})),hint&&React.createElement(StyledTextContainer,{disabled:disabled},React.createElement(Text,{size:"s",color:"tertiary"},hint))),ariaDescribedBy=messagesElm?{"aria-describedby":messageId}:{},renderChild=child=>React.isValidElement(child)?React.cloneElement(child,{disabled:disabled||child.props.disabled}):null;return React.createElement(StyledFieldset,{disabled:disabled,"data-e2e-test-id":dataE2eTestId,"data-ds-id":"FormFieldGroup",isObserverDone:isObserverDone,...ariaAttributes,...ariaDescribedBy},React.createElement(ScreenReaderText,{as:"legend"},label),React.createElement(Stack,{space:"xs"},label&&!isLabelHidden&&React.createElement(StyledLabelContainer,{disabled:disabled},React.createElement(FormLabelText,{labelHint:labelHint,labelAs:labelAs},label)),inline&&!isOverflowing?React.createElement(InlineChildren,{ref:radioGroupRef},React.Children.map(flattenChildren(children),child=>child?React.createElement(FormChildren,{shouldLabelWrap:shouldLabelWrap,space:space},renderChild(child)):null)):React.Children.map(flattenChildren(children),renderChild),messagesElm))}
@@ -1 +1 @@
1
- import React from"react";import styled from"@emotion/styled";import{Icon}from"../../Icon/Icon";import{FormField}from"../FormField/FormField";import{Text}from"../../Typography/Text/Text";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";import{getInputTextStyles,getInputTextPlaceholder}from"../../../shared/mixins";let StyledContainer=styled("div",{target:"e20qv3c0",label:"StyledContainer"})(()=>({width:"100%",display:"flex",alignItems:"center",flexDirection:"row",position:"relative"})),StyledIconContainer=styled("div",{target:"e20qv3c1",label:"StyledIconContainer"})(({theme})=>({position:"absolute",right:theme.variables.size.spacing.xs})),StyledInput=styled("input",{target:"e20qv3c2",label:"StyledInput"})(({theme,privateProps,hasError,icon,readOnly,inputSize})=>({...getInputTextStyles({theme,size:inputSize,hasError,readOnly}),...getInputTextPlaceholder({theme}),...privateProps?.isTransparent?{backgroundColor:theme.values.color.background.transparent.default,borderColor:"transparent"}:{backgroundColor:theme.values.color.background.primary.default},...privateProps?.hideOutline&&{outline:"none"},"&.error":{borderColor:theme.values.color.border.error.default},"& svg":{pointerEvents:"none"},...icon&&{paddingRight:`calc(${theme.variables.size.spacing.s} + ${theme.variables.size.dimension.icon.m})`}}));export const InputRaw=React.forwardRef(({size="m",hasError=!1,type="text",icon,autoComplete="on",privateProps={},readOnly,...rest},ref)=>React.createElement(StyledContainer,null,React.createElement(StyledInput,{...rest,type:type,inputSize:size,ref:ref,autoComplete:autoComplete,hasError:hasError,privateProps:privateProps,icon:icon,readOnly:readOnly,"aria-invalid":hasError}),icon&&React.createElement(StyledIconContainer,null,React.createElement(Text,{as:"span",color:"tertiary"},React.createElement(Icon,{name:icon,size:"m",color:readOnly?"quaternary":void 0})))));export const Input=React.forwardRef(({size="m",placeholder,hasError=!1,type="text",icon,autoComplete="on",privateProps={},readOnly,disabled,label,labelHint,hideLabel,hint,errorMessages,"aria-describedby":ariaDescribedBy,"data-e2e-test-id":dataE2eTestId,...rest},ref)=>{let{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-ds-id":"Input",disabled:disabled,"data-e2e-test-id":dataE2eTestId,hideLabel:hideLabel,label:label,labelHint:labelHint,hint:hint,errorMessages:errorMessages,messageId:id},React.createElement(InputRaw,{...rest,ref:ref,size:size,type:type,icon:icon,placeholder:!readOnly&&placeholder,hasError:hasError,disabled:disabled,autoComplete:autoComplete,privateProps:privateProps,readOnly:readOnly,...ariaDescribedByProp}))});
1
+ import React from"react";import styled from"@emotion/styled";import{Icon}from"../../Icon/Icon";import{FormField}from"../FormField/FormField";import{Text}from"../../Typography/Text/Text";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";import{getInputTextStyles,getInputTextPlaceholder}from"../../../shared/mixins";let StyledContainer=styled("div",{target:"e16jtuij0",label:"StyledContainer"})(()=>({width:"100%",display:"flex",alignItems:"center",flexDirection:"row",position:"relative"})),StyledIconContainer=styled("div",{target:"e16jtuij1",label:"StyledIconContainer"})(({theme})=>({position:"absolute",right:theme.variables.size.spacing.xs})),StyledInput=styled("input",{target:"e16jtuij2",label:"StyledInput"})(({theme,privateProps,hasError,icon,readOnly,inputSize})=>({...getInputTextStyles({theme,size:inputSize,hasError,readOnly}),...getInputTextPlaceholder({theme}),...privateProps?.isTransparent?{backgroundColor:theme.values.color.background.transparent.default,borderColor:"transparent"}:{backgroundColor:theme.values.color.background.primary.default},...privateProps?.hideOutline&&{outline:"none"},"&.error":{borderColor:theme.values.color.border.error.default},"& svg":{pointerEvents:"none"},...icon&&{paddingRight:`calc(${theme.variables.size.spacing.s} + ${theme.variables.size.dimension.icon.m})`}}));export const InputRaw=React.forwardRef(({size="m",hasError=!1,type="text",icon,autoComplete="on",privateProps={},readOnly,...rest},ref)=>React.createElement(StyledContainer,null,React.createElement(StyledInput,{...rest,type:type,inputSize:size,ref:ref,autoComplete:autoComplete,hasError:hasError,privateProps:privateProps,icon:icon,readOnly:readOnly,"aria-invalid":hasError}),icon&&React.createElement(StyledIconContainer,null,React.createElement(Text,{as:"span",color:"tertiary"},React.createElement(Icon,{name:icon,size:"m",color:readOnly?"quaternary":void 0})))));export const Input=React.forwardRef(({size="m",placeholder,hasError=!1,type="text",icon,autoComplete="on",privateProps={},readOnly,disabled,label,labelHint,hideLabel,hint,errorMessages,"aria-describedby":ariaDescribedBy,"data-e2e-test-id":dataE2eTestId,...rest},ref)=>{let{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-ds-id":"Input",disabled:disabled,"data-e2e-test-id":dataE2eTestId,hideLabel:hideLabel,label:label,labelHint:labelHint,hint:hint,errorMessages:errorMessages,messageId:id},React.createElement(InputRaw,{...rest,ref:ref,size:size,type:type,icon:icon,placeholder:readOnly?void 0:placeholder,hasError:hasError,disabled:disabled,autoComplete:autoComplete,privateProps:privateProps,readOnly:readOnly,...ariaDescribedByProp}))});
@@ -1 +1 @@
1
- import React,{useState,forwardRef}from"react";import styled from"@emotion/styled";import{FormField}from"../FormField/FormField";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";import{PasswordInputButton}from"./PasswordInputButton";let handleBorderColor=({theme,hasError,readOnly})=>hasError?theme.values.color.border.error.default:readOnly?theme.values.color.border.primary.disabled:theme.values.color.border.primary.default,StyledContainer=styled("div",{target:"e136axgx0",label:"StyledContainer"})(()=>({width:"100%",display:"flex",alignItems:"center",flexDirection:"row",position:"relative"})),StyledPasswordInput=styled("input",{target:"e136axgx1",label:"StyledPasswordInput"})(({theme,hasError,readOnly})=>({fontFamily:theme.variables.fontFamily.lato,fontSize:theme.variables.size.font.m,lineHeight:theme.variables.size.lineHeight.xl,borderRadius:theme.variables.size.borderRadius.xs,borderWidth:"1px",borderStyle:"solid",width:"100%",padding:`calc(${theme.variables.size.spacing.xs} - 1px) ${theme.variables.size.spacing.s}`,paddingRight:theme.variables.size.spacing.xxl,boxSizing:"border-box",color:theme.values.color.text.secondary.default,borderColor:handleBorderColor({theme,hasError,readOnly}),backgroundColor:theme.values.color.background.primary.default,"&.error":{borderColor:theme.values.color.border.error.default},"&.has-icon":{paddingRight:theme.variables.size.spacing.xs+theme.variables.size.dimension.icon.m},"&::placeholder":{fontStyle:"italic",color:theme.values.color.text.tertiary.default,opacity:theme.variables.opacity.visible},"&:-ms-input-placeholder":{fontStyle:"italic",color:theme.values.color.text.tertiary.default},"&::-ms-input-placeholder":{fontStyle:"italic",color:theme.values.color.text.tertiary.default},...hasError&&{boxShadow:`0 0 0 1px inset ${theme.values.color.border.error.default}`}}));export const PasswordInputRaw=forwardRef(({placeholder,hasError=!1,onIconClick,readOnly,disabled,slotProps:{toggleVisibility:{ariaLabelShow,ariaLabelHide}},...rest},ref)=>{let[isPasswordVisible,setIsPasswordVisible]=useState(!1);return React.createElement(StyledContainer,null,React.createElement(StyledPasswordInput,{...rest,type:isPasswordVisible?"text":"password",placeholder:!readOnly&&placeholder,ref:ref,hasError:hasError,readOnly:readOnly,disabled:disabled,"aria-invalid":hasError}),React.createElement(PasswordInputButton,{hasError:hasError,disabled:disabled,onIconClick:onIconClick,isPasswordVisible:isPasswordVisible,readOnly:readOnly,ariaLabel:isPasswordVisible?ariaLabelHide:ariaLabelShow,onToggle:()=>setIsPasswordVisible(prev=>!prev)}))});export const PasswordInput=React.forwardRef(({placeholder="••••••••",hasError=!1,onIconClick,autoComplete="on",slotProps,disabled,label,labelHint,hideLabel,hint,errorMessages,"aria-describedby":ariaDescribedBy,"data-e2e-test-id":dataE2eTestId,...rest},ref)=>{let{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"PasswordInput",disabled:disabled,label:label,labelHint:labelHint,hideLabel:hideLabel,hint:hint,errorMessages:errorMessages,messageId:id},React.createElement(PasswordInputRaw,{...rest,ref:ref,placeholder:placeholder,hasError:hasError,disabled:disabled,onIconClick:onIconClick,autoComplete:autoComplete,slotProps:slotProps,...ariaDescribedByProp}))});
1
+ import React,{useState,forwardRef}from"react";import styled from"@emotion/styled";import{FormField}from"../FormField/FormField";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";import{PasswordInputButton}from"./PasswordInputButton";let handleBorderColor=({theme,hasError,readOnly})=>hasError?theme.values.color.border.error.default:readOnly?theme.values.color.border.primary.disabled:theme.values.color.border.primary.default,StyledContainer=styled("div",{target:"e1talrlh0",label:"StyledContainer"})(()=>({width:"100%",display:"flex",alignItems:"center",flexDirection:"row",position:"relative"})),StyledPasswordInput=styled("input",{target:"e1talrlh1",label:"StyledPasswordInput"})(({theme,hasError=!1,readOnly=!1})=>({fontFamily:theme.variables.fontFamily.lato,fontSize:theme.variables.size.font.m,lineHeight:theme.variables.size.lineHeight.xl,borderRadius:theme.variables.size.borderRadius.xs,borderWidth:"1px",borderStyle:"solid",width:"100%",padding:`calc(${theme.variables.size.spacing.xs} - 1px) ${theme.variables.size.spacing.s}`,paddingRight:theme.variables.size.spacing.xxl,boxSizing:"border-box",color:theme.values.color.text.secondary.default,borderColor:handleBorderColor({theme,hasError,readOnly}),backgroundColor:theme.values.color.background.primary.default,"&.error":{borderColor:theme.values.color.border.error.default},"&.has-icon":{paddingRight:theme.variables.size.spacing.xs+theme.variables.size.dimension.icon.m},"&::placeholder":{fontStyle:"italic",color:theme.values.color.text.tertiary.default,opacity:theme.variables.opacity.visible},"&:-ms-input-placeholder":{fontStyle:"italic",color:theme.values.color.text.tertiary.default},"&::-ms-input-placeholder":{fontStyle:"italic",color:theme.values.color.text.tertiary.default},...hasError&&{boxShadow:`0 0 0 1px inset ${theme.values.color.border.error.default}`}}));export const PasswordInputRaw=forwardRef(({placeholder,hasError=!1,onIconClick,readOnly,disabled,slotProps:{toggleVisibility:{ariaLabelShow,ariaLabelHide}},...rest},ref)=>{let[isPasswordVisible,setIsPasswordVisible]=useState(!1);return React.createElement(StyledContainer,null,React.createElement(StyledPasswordInput,{...rest,type:isPasswordVisible?"text":"password",placeholder:readOnly?void 0:placeholder,ref:ref,hasError:hasError,readOnly:readOnly,disabled:disabled,"aria-invalid":hasError}),React.createElement(PasswordInputButton,{hasError:hasError,disabled:disabled,onIconClick:onIconClick,isPasswordVisible:isPasswordVisible,readOnly:readOnly,ariaLabel:isPasswordVisible?ariaLabelHide:ariaLabelShow,onToggle:()=>setIsPasswordVisible(prev=>!prev)}))});export const PasswordInput=React.forwardRef(({placeholder="••••••••",hasError=!1,onIconClick,autoComplete="on",slotProps,disabled,label,labelHint,hideLabel,hint,errorMessages,"aria-describedby":ariaDescribedBy,"data-e2e-test-id":dataE2eTestId,...rest},ref)=>{let{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"PasswordInput",disabled:disabled,label:label,labelHint:labelHint,hideLabel:hideLabel,hint:hint,errorMessages:errorMessages,messageId:id},React.createElement(PasswordInputRaw,{...rest,ref:ref,placeholder:placeholder,hasError:hasError,disabled:disabled,onIconClick:onIconClick,autoComplete:autoComplete,slotProps:slotProps,...ariaDescribedByProp}))});
@@ -3,8 +3,8 @@ import React from "react";
3
3
  type PasswordInputButtonProps = {
4
4
  onIconClick?: (e: React.MouseEvent) => void;
5
5
  hasError: boolean;
6
- disabled: boolean;
7
- readOnly: boolean;
6
+ disabled?: boolean;
7
+ readOnly?: boolean;
8
8
  ariaLabel: string;
9
9
  isPasswordVisible: boolean;
10
10
  onToggle: () => void;
@@ -1 +1 @@
1
- import React,{useId,useState}from"react";import styled from"@emotion/styled";import{Icon}from"../../Icon/Icon";import{ScreenReaderText}from"../../Utilities/ScreenReaderText/ScreenReaderText";let handleIconBorderColor=(theme,hasError)=>hasError?theme.values.color.icon.error.default:"transparent",handleIconLeftBorderColor=(theme,hasError)=>hasError?theme.values.color.border.error.default:theme.values.color.border.primary.default,handleClick=({e,disabled,onIconClick,onToggle})=>{disabled&&e.preventDefault(),onIconClick?.(e),onToggle()},StyledIconBtn=styled("button",{target:"edrbxqz0",label:"StyledIconBtn"})(({theme,hasError})=>({"&[type='button']":{appearance:"none",MozAppearance:"none",WebkitAppearance:"none"},position:"absolute",top:0,right:0,border:"1px solid",borderColor:handleIconBorderColor(theme,hasError),borderLeftColor:handleIconLeftBorderColor(theme,hasError),padding:`calc(${theme.variables.size.spacing.s} - 1px) ${theme.variables.size.spacing.s}`,borderRadius:theme.variables.size.borderRadius.xs,borderBottomLeftRadius:"0",borderTopLeftRadius:"0",color:theme.values.color.text.secondary.default,backgroundColor:"inherit",cursor:"pointer","&:hover":{backgroundColor:theme.values.color.background.transparent.hover,borderColor:theme.values.color.border.primary.hover},"&:active":{color:theme.values.color.text.primary.default,backgroundColor:theme.values.color.background.transparent.active,borderColor:theme.values.color.border.primary.active},"&:disabled":{backgroundColor:theme.values.color.background.transparent.default,borderLeftColor:theme.values.color.border.primary.disabled,pointerEvents:"none"},...hasError&&{boxShadow:`0 0 0 1px inset ${theme.values.color.border.error.default}`,"&:hover":{backgroundColor:theme.values.color.background.transparent.hover,borderColor:theme.values.color.border.error.default}},"& svg":{pointerEvents:"none"}}));export const PasswordInputButton=({hasError,disabled,onIconClick,readOnly,ariaLabel,isPasswordVisible,onToggle})=>{let[isButtonFocused,setIsButtonFocused]=useState(!1),screenReaderTextId=useId();return React.createElement(React.Fragment,null,React.createElement(ScreenReaderText,{id:screenReaderTextId},isButtonFocused?ariaLabel:""),React.createElement(StyledIconBtn,{onClick:e=>handleClick({e,disabled,onIconClick,onToggle}),hasError:hasError,onFocus:()=>setIsButtonFocused(!0),onBlur:()=>setIsButtonFocused(!1),disabled:readOnly||disabled,type:"button","aria-labelledby":screenReaderTextId},React.createElement(Icon,{name:isPasswordVisible?"eye":"eye-off",size:"s",color:readOnly?"quaternary":"tertiary"})))};
1
+ import React,{useId,useState}from"react";import styled from"@emotion/styled";import{Icon}from"../../Icon/Icon";import{ScreenReaderText}from"../../Utilities/ScreenReaderText/ScreenReaderText";let handleIconBorderColor=(theme,hasError)=>hasError?theme.values.color.icon.error.default:"transparent",handleIconLeftBorderColor=(theme,hasError)=>hasError?theme.values.color.border.error.default:theme.values.color.border.primary.default,handleClick=({e,disabled,onIconClick,onToggle})=>{disabled&&e.preventDefault(),onIconClick?.(e),onToggle()},StyledIconBtn=styled("button",{target:"eyjrml0",label:"StyledIconBtn"})(({theme,hasError=!1})=>({"&[type='button']":{appearance:"none",MozAppearance:"none",WebkitAppearance:"none"},position:"absolute",top:0,right:0,border:"1px solid",borderColor:handleIconBorderColor(theme,hasError),borderLeftColor:handleIconLeftBorderColor(theme,hasError),padding:`calc(${theme.variables.size.spacing.s} - 1px) ${theme.variables.size.spacing.s}`,borderRadius:theme.variables.size.borderRadius.xs,borderBottomLeftRadius:"0",borderTopLeftRadius:"0",color:theme.values.color.text.secondary.default,backgroundColor:"inherit",cursor:"pointer","&:hover":{backgroundColor:theme.values.color.background.transparent.hover,borderColor:theme.values.color.border.primary.hover},"&:active":{color:theme.values.color.text.primary.default,backgroundColor:theme.values.color.background.transparent.active,borderColor:theme.values.color.border.primary.active},"&:disabled":{backgroundColor:theme.values.color.background.transparent.default,borderLeftColor:theme.values.color.border.primary.disabled,pointerEvents:"none"},...hasError&&{boxShadow:`0 0 0 1px inset ${theme.values.color.border.error.default}`,"&:hover":{backgroundColor:theme.values.color.background.transparent.hover,borderColor:theme.values.color.border.error.default}},"& svg":{pointerEvents:"none"}}));export const PasswordInputButton=({hasError,disabled,onIconClick,readOnly,ariaLabel,isPasswordVisible,onToggle})=>{let[isButtonFocused,setIsButtonFocused]=useState(!1),screenReaderTextId=useId();return React.createElement(React.Fragment,null,React.createElement(ScreenReaderText,{id:screenReaderTextId},isButtonFocused?ariaLabel:""),React.createElement(StyledIconBtn,{onClick:e=>handleClick({e,disabled,onIconClick,onToggle}),hasError:hasError,onFocus:()=>setIsButtonFocused(!0),onBlur:()=>setIsButtonFocused(!1),disabled:readOnly||disabled,type:"button","aria-labelledby":screenReaderTextId},React.createElement(Icon,{name:isPasswordVisible?"eye":"eye-off",size:"s",color:readOnly?"quaternary":"tertiary"})))};
@@ -1 +1 @@
1
- import React from"react";import styled from"@emotion/styled";import{FormField}from"../FormField/FormField";import{Inline}from"../../Inline/Inline";import{Text,getTextLineHeight}from"../../Typography/Text/Text";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let StyledInputContainer=styled("div",{target:"e1jwbonf0",label:"StyledInputContainer"})(({theme,vSize,hSize})=>({userSelect:"none",display:"flex",position:"relative",width:theme.variables.size.dimension.radio[hSize],height:`calc(${theme.variables.size.font[vSize]} * ${getTextLineHeight({size:vSize,theme})})`,boxSizing:"border-box",alignItems:"center"})),StyledRealInput=styled("input",{target:"e1jwbonf1",label:"StyledRealInput"})(({theme})=>({opacity:theme.variables.opacity.hidden,cursor:"pointer",position:"absolute",width:0,height:0})),StyledFakeInput=styled("span",{target:"e1jwbonf2",label:"StyledFakeInput"})(({theme,size})=>({boxSizing:"border-box",width:theme.variables.size.dimension.radio[size],height:theme.variables.size.dimension.radio[size],borderRadius:theme.variables.size.borderRadius.m,border:"2px solid",top:"50%",left:0,transform:"translate(0, -50%)",display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",background:theme.values.color.background.primary.default,borderColor:theme.values.color.border.primary.default,"& div":{opacity:theme.variables.opacity.hidden,borderRadius:theme.variables.size.borderRadius.full,width:theme.variables.size.dimension.radioPoint[size],height:theme.variables.size.dimension.radioPoint[size],background:theme.values.color.border.accent.default},"input:checked + &":{borderColor:theme.values.color.border.accent.default,background:theme.values.color.background.primary.default,"& div":{opacity:theme.variables.opacity.visible}},"input:focus-visible + &":{outlineWidth:"2px",outlineStyle:"solid",outlineColor:"Highlight"},"@media (-webkit-min-device-pixel-ratio:0)":{"input:focus-visible + &":{outlineColor:"-webkit-focus-ring-color",outlineStyle:"auto"}},"input:disabled + &":{pointerEvents:"none"}}));export const StyledRadioContainer=styled("div",{target:"e1jwbonf3",label:"StyledRadioContainer"})(({theme,isInteractable})=>({"&:hover":{...isInteractable&&{cursor:"pointer",[`input:not(:checked) + ${StyledFakeInput}`]:{borderColor:theme.values.color.border.primary.hover}},...!isInteractable&&{cursor:"not-allowed"}}}));export const RadioRaw=React.forwardRef(({label="",labelHint,size="m",labelSize="m",disabled,...rest},ref)=>React.createElement(StyledRadioContainer,{isInteractable:!disabled},React.createElement(Inline,{space:"xs",vAlignItems:"top",noWrap:!0},React.createElement(StyledInputContainer,{vSize:labelSize,hSize:size},React.createElement(StyledRealInput,{...rest,disabled:disabled,ref:ref,type:"radio"}),React.createElement(StyledFakeInput,{size:size},React.createElement("div",null))),label&&React.createElement("div",null,"string"==typeof label?React.createElement(Text,{size:labelSize},label):label,labelHint&&React.createElement(Text,{size:"s",color:"tertiary"},labelHint)))));export const Radio=React.forwardRef(({label="",labelHint,disabled=!1,size="m",hint,errorMessages,"data-e2e-test-id":dataE2eTestId,"aria-describedby":ariaDescribedBy,...rest},ref)=>{let{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"Radio",disabled:disabled,hint:hint,errorMessages:errorMessages,messageId:id},React.createElement(RadioRaw,{...rest,ref:ref,size:size,label:label,labelHint:labelHint,disabled:disabled,...ariaDescribedByProp}))});
1
+ import React from"react";import styled from"@emotion/styled";import{FormField}from"../FormField/FormField";import{Inline}from"../../Inline/Inline";import{Text,getTextLineHeight}from"../../Typography/Text/Text";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let StyledInputContainer=styled("div",{target:"eb3g3qo0",label:"StyledInputContainer"})(({theme,vSize,hSize})=>({userSelect:"none",display:"flex",position:"relative",width:theme.variables.size.dimension.radio[hSize],height:`calc(${theme.variables.size.font[vSize]} * ${getTextLineHeight({size:vSize,theme})})`,boxSizing:"border-box",alignItems:"center"})),StyledRealInput=styled("input",{target:"eb3g3qo1",label:"StyledRealInput"})(({theme})=>({opacity:theme.variables.opacity.hidden,cursor:"pointer",position:"absolute",width:0,height:0})),StyledFakeInput=styled("span",{target:"eb3g3qo2",label:"StyledFakeInput"})(({theme,size})=>({boxSizing:"border-box",width:theme.variables.size.dimension.radio[size],height:theme.variables.size.dimension.radio[size],borderRadius:theme.variables.size.borderRadius.m,border:"2px solid",top:"50%",left:0,transform:"translate(0, -50%)",display:"flex",alignItems:"center",justifyContent:"center",position:"absolute",background:theme.values.color.background.primary.default,borderColor:theme.values.color.border.primary.default,"& div":{opacity:theme.variables.opacity.hidden,borderRadius:theme.variables.size.borderRadius.full,width:theme.variables.size.dimension.radioPoint[size],height:theme.variables.size.dimension.radioPoint[size],background:theme.values.color.border.accent.default},"input:checked + &":{borderColor:theme.values.color.border.accent.default,background:theme.values.color.background.primary.default,"& div":{opacity:theme.variables.opacity.visible}},"input:focus-visible + &":{outlineWidth:"2px",outlineStyle:"solid",outlineColor:"Highlight"},"@media (-webkit-min-device-pixel-ratio:0)":{"input:focus-visible + &":{outlineColor:"-webkit-focus-ring-color",outlineStyle:"auto"}},"input:disabled + &":{pointerEvents:"none"}}));export const StyledRadioContainer=styled("div",{target:"eb3g3qo3",label:"StyledRadioContainer"})(({theme,isInteractable})=>({"&:hover":{...isInteractable&&{cursor:"pointer",[`input:not(:checked) + ${StyledFakeInput}`]:{borderColor:theme.values.color.border.primary.hover}},...!isInteractable&&{cursor:"not-allowed"}}}));export const RadioRaw=React.forwardRef(({label="",labelHint,size="m",labelSize="m",disabled,...rest},ref)=>React.createElement(StyledRadioContainer,{isInteractable:!disabled},React.createElement(Inline,{space:"xs",vAlignItems:"top",noWrap:!0},React.createElement(StyledInputContainer,{vSize:labelSize,hSize:size},React.createElement(StyledRealInput,{...rest,disabled:disabled,ref:ref,type:"radio"}),React.createElement(StyledFakeInput,{size:size},React.createElement("div",null))),label&&React.createElement("div",null,"string"==typeof label?React.createElement(Text,{size:labelSize},label):label,labelHint&&React.createElement(Text,{size:"s",color:"tertiary"},labelHint)))));export const Radio=React.forwardRef(({label="",labelHint,disabled=!1,size="m",hint,errorMessages,"data-e2e-test-id":dataE2eTestId,"aria-describedby":ariaDescribedBy,...rest},ref)=>{let{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"Radio",disabled:disabled,hint:hint,errorMessages:errorMessages,messageId:id},React.createElement(RadioRaw,{...rest,ref:ref,size:size,label:label,labelHint:labelHint,disabled:disabled,...ariaDescribedByProp}))});
@@ -1 +1 @@
1
- import React,{useMemo,useCallback}from"react";import styled from"@emotion/styled";import{useTheme}from"@emotion/react";import{FormField}from"../FormField/FormField";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let StyledInput=styled("input",{target:"e8umilf0",label:"StyledInput"})(({theme})=>{let resetStyles={WebkitAppearance:"none",appearance:"none"},thumbStyles={...resetStyles,backgroundColor:theme.values.color.rangeInput.background.thumb.default,boxShadow:theme.values.elevation[3],height:"20px",width:"20px",borderRadius:theme.variables.size.borderRadius.full,border:0};return{...resetStyles,height:"4px",borderRadius:theme.variables.size.borderRadius.xs,cursor:"pointer",width:"100%",margin:`${theme.variables.size.spacing.s} 0 ${theme.variables.size.spacing.m} 0`,"&:disabled":{cursor:"default"},"::-webkit-slider-thumb":thumbStyles,"::-moz-range-thumb":thumbStyles,"::-ms-thumb":thumbStyles}});export const RangeInput=React.forwardRef(({step=1,min=0,max=100,value=min,hasError=!1,onSlideStart,disabled,label,labelHint,hideLabel,errorMessages,hint,"data-e2e-test-id":dataE2eTestId,"aria-describedby":ariaDescribedBy,...rest},ref)=>{let theme=useTheme(),{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint}),background=useMemo(()=>{let progress=(Number(value)-Number(min))/(Number(max)-Number(min))*100,accentBg=theme.values.color.background.accent.default,placeholderBg=theme.values.color.background.placeholder.default;return`linear-gradient(to right, ${accentBg} 0%, ${accentBg} ${progress}%, ${placeholderBg} ${progress}%, ${placeholderBg} 100%)`},[value,min,max,theme.name]),handleSlideStart=useCallback(e=>{onSlideStart&&onSlideStart(e)},[onSlideStart]);return React.createElement(FormField,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"RangeInput",disabled:disabled,label:label,hideLabel:hideLabel,labelHint:labelHint,hint:hint,errorMessages:errorMessages,messageId:id},React.createElement(StyledInput,{...rest,type:"range",style:{background},ref:ref,value:value,min:min,max:max,step:step,disabled:disabled,onMouseDown:handleSlideStart,onTouchStart:handleSlideStart,"aria-invalid":hasError,...ariaDescribedByProp}))});
1
+ import React,{useMemo,useCallback}from"react";import styled from"@emotion/styled";import{useTheme}from"@emotion/react";import{FormField}from"../FormField/FormField";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let StyledInput=styled("input",{target:"e1vc6tql0",label:"StyledInput"})(({theme})=>{let resetStyles={WebkitAppearance:"none",appearance:"none"},thumbStyles={...resetStyles,backgroundColor:theme.values.color.rangeInput.background.thumb.default,boxShadow:theme.values.elevation[3],height:"20px",width:"20px",borderRadius:theme.variables.size.borderRadius.full,border:0};return{...resetStyles,height:"4px",borderRadius:theme.variables.size.borderRadius.xs,cursor:"pointer",width:"100%",margin:`${theme.variables.size.spacing.s} 0 ${theme.variables.size.spacing.m} 0`,"&:disabled":{cursor:"default"},"::-webkit-slider-thumb":thumbStyles,"::-moz-range-thumb":thumbStyles,"::-ms-thumb":thumbStyles}});export const RangeInput=React.forwardRef(({step=1,min=0,max=100,value=min,hasError=!1,onSlideStart,disabled,label,labelHint,hideLabel,errorMessages,hint,"data-e2e-test-id":dataE2eTestId,"aria-describedby":ariaDescribedBy,...rest},ref)=>{let theme=useTheme(),{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint}),background=useMemo(()=>{let progress=(Number(value)-Number(min))/(Number(max)-Number(min))*100,accentBg=theme.values.color.background.accent.default,placeholderBg=theme.values.color.background.placeholder.default;return`linear-gradient(to right, ${accentBg} 0%, ${accentBg} ${progress}%, ${placeholderBg} ${progress}%, ${placeholderBg} 100%)`},[value,min,max,theme.name]),handleSlideStart=useCallback(e=>{onSlideStart&&onSlideStart(e)},[onSlideStart]);return React.createElement(FormField,{"data-e2e-test-id":dataE2eTestId,"data-ds-id":"RangeInput",disabled:disabled,label:label,hideLabel:hideLabel,labelHint:labelHint,hint:hint,errorMessages:errorMessages,messageId:id},React.createElement(StyledInput,{...rest,type:"range",style:{background},ref:ref,value:value,min:min,max:max,step:step,disabled:disabled,onMouseDown:handleSlideStart,onTouchStart:handleSlideStart,"aria-invalid":hasError,...ariaDescribedByProp}))});
@@ -1 +1 @@
1
- import React,{useRef}from"react";import styled from"@emotion/styled";import iconSizesMap from"../../../web-tokens/_icon_sizes_map.json";import{Icon}from"../../Icon/Icon";import{PictogramButton}from"../../PictogramButton/PictogramButton";import{InputRaw}from"../Input/Input";import{FormField}from"../FormField/FormField";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let iconSizes=iconSizesMap.icons,StyledSearchInputContainer=styled("div",{target:"elipqdd0",label:"StyledSearchInputContainer"})(({theme})=>({position:"relative",backgroundColor:theme.values.color.searchInput.background.default,borderRadius:theme.variables.size.borderRadius.xs,height:theme.variables.size.spacing.xl,width:"100%","& input":{backgroundColor:theme.values.color.background.transparent.default,paddingTop:theme.variables.size.spacing.xxs,paddingBottom:theme.variables.size.spacing.xxs,paddingLeft:`calc(${theme.variables.size.spacing.s} + ${iconSizes.s})`,paddingRight:theme.variables.size.spacing.xl,borderWidth:0,textOverflow:"ellipsis","&::placeholder":{color:theme.values.color.text.tertiary.default,fontStyle:"italic"}}})),IconsContainer=styled("div",{target:"elipqdd1",label:"IconsContainer"})(({theme})=>({display:"flex",alignItems:"center",justifyContent:"space-between",position:"absolute",inset:`0 ${theme.variables.size.spacing.xs}`,"& > div":{lineHeight:0}}));export const SearchInput=({value,placeholder,autoComplete="on",readOnly,label,labelHint,hideLabel=!0,hint,errorMessages,"aria-describedby":ariaDescribedBy,"data-e2e-test-id":dataE2eTestId,onClear=()=>null,slotProps,...rest})=>{let inputRef=useRef(null),{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-ds-id":"SearchInput","data-e2e-test-id":dataE2eTestId,label:label,labelHint:labelHint,hideLabel:hideLabel,hint:hint,errorMessages:errorMessages,messageId:id},React.createElement(StyledSearchInputContainer,null,React.createElement(InputRaw,{...rest,ref:inputRef,type:"text",size:"s",value:value,placeholder:!readOnly&&placeholder,autoComplete:autoComplete,readOnly:readOnly,...ariaDescribedByProp}),React.createElement(IconsContainer,null,React.createElement(Icon,{name:"search",size:"s",color:readOnly?"quaternary":"tertiary"}),!!value&&!readOnly&&React.createElement(PictogramButton,{icon:"x",size:"xs",color:"tertiary","aria-label":slotProps?.clearButton?.ariaLabel,onClick:e=>{e.preventDefault(),onClear(e),inputRef.current.focus()}}))))};
1
+ import React,{useRef}from"react";import styled from"@emotion/styled";import{useIntl}from"../../../shared/intl/useIntl";import iconSizesMap from"../../../web-tokens/_icon_sizes_map.json";import{Icon}from"../../Icon/Icon";import{PictogramButton}from"../../PictogramButton/PictogramButton";import{InputRaw}from"../Input/Input";import{FormField}from"../FormField/FormField";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let iconSizes=iconSizesMap.icons,StyledSearchInputContainer=styled("div",{target:"e1b1l7xz0",label:"StyledSearchInputContainer"})(({theme})=>({position:"relative",backgroundColor:theme.values.color.searchInput.background.default,borderRadius:theme.variables.size.borderRadius.xs,height:theme.variables.size.spacing.xl,width:"100%","& input":{backgroundColor:theme.values.color.background.transparent.default,paddingTop:theme.variables.size.spacing.xxs,paddingBottom:theme.variables.size.spacing.xxs,paddingLeft:`calc(${theme.variables.size.spacing.s} + ${iconSizes.s})`,paddingRight:theme.variables.size.spacing.xl,borderWidth:0,textOverflow:"ellipsis","&::placeholder":{color:theme.values.color.text.tertiary.default,fontStyle:"italic"}}})),IconsContainer=styled("div",{target:"e1b1l7xz1",label:"IconsContainer"})(({theme})=>({display:"flex",alignItems:"center",justifyContent:"space-between",position:"absolute",inset:`0 ${theme.variables.size.spacing.xs}`,"& > div":{lineHeight:0}}));export const SearchInput=({value,placeholder,autoComplete="on",readOnly,label,labelHint,hideLabel=!0,hint,errorMessages,"aria-describedby":ariaDescribedBy,"data-e2e-test-id":dataE2eTestId,onClear=()=>null,slotProps,...rest})=>{let inputRef=useRef(null),{formatMessage}=useIntl(),{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(FormField,{"data-ds-id":"SearchInput","data-e2e-test-id":dataE2eTestId,label:label,labelHint:labelHint,hideLabel:hideLabel,hint:hint,errorMessages:errorMessages,messageId:id},React.createElement(StyledSearchInputContainer,null,React.createElement(InputRaw,{...rest,ref:inputRef,type:"text",size:"s",value:value,placeholder:readOnly?void 0:placeholder,autoComplete:autoComplete,readOnly:readOnly,...ariaDescribedByProp}),React.createElement(IconsContainer,null,React.createElement(Icon,{name:"search",size:"s",color:readOnly?"quaternary":"tertiary"}),!!value&&!readOnly&&React.createElement(PictogramButton,{icon:"x",size:"xs",color:"tertiary","aria-label":slotProps?.clearButton?.ariaLabel??formatMessage("SearchInput.ClearButton.AriaLabel"),onClick:e=>{e.preventDefault(),onClear(e),inputRef.current?.focus()}}))))};
@@ -1,12 +1,12 @@
1
1
  import type { FormEvent, ChangeEvent, ReactNode, ReactElement } from "react";
2
- import type { IconName } from "src";
2
+ import type { IconName } from "../../../index.js";
3
3
  import type { FormFieldGroupProps } from "../../../components/Form/FormFieldGroup/FormFieldGroup";
4
4
  import type { TooltipProps } from "../../../components/Tooltip/Tooltip";
5
5
  import type { SlotProps } from "../../../shared/slotProps";
6
6
  export type RenderOptionWrapperProps = {
7
7
  option: ReactNode;
8
8
  checked: boolean;
9
- disabled: boolean;
9
+ disabled?: boolean;
10
10
  value: string;
11
11
  };
12
12
  export type SegmentedControlOption = {
@@ -1 +1 @@
1
- import React,{Fragment}from"react";import styled from"@emotion/styled";import breakpoints from"../../../web-tokens/_breakpoints.json";import{FormFieldGroup}from"../FormFieldGroup/FormFieldGroup";import{SegmentedControlOption}from"./SegmentedControlOption";let StyledDivider=styled("div",{target:"e1yfjg690",label:"StyledDivider"})(({theme,isChecked,isDisabled,isPrevOptionChecked,isPrevOptionDisabled,justified})=>{let border=`1px solid ${theme.values.color.border.secondary.default}`,otherStyles={backgroundColor:theme.values.color.background.primary.default,...(isChecked||isPrevOptionChecked)&&{borderColor:theme.values.color.border.accent.default},...isDisabled&&isPrevOptionDisabled&&{opacity:theme.variables.opacity.disabled}},borderRightStyle={borderRight:border,...otherStyles};return justified?{[`@media (min-width: ${breakpoints.m.value}px)`]:{...borderRightStyle},[`@media (max-width: ${breakpoints.m.value}px)`]:{borderBottom:border,...otherStyles}}:borderRightStyle}),StyledContainer=styled("div",{target:"e1yfjg691",label:"StyledContainer"})(({justified,options})=>{let baseStyle={display:"flex"};return justified?{...baseStyle,flexDirection:"column","& > *":{flex:`1 1 ${100/options.length}%`},[`& > ${StyledDivider}`]:{flex:"0 0 auto"},[`@media (min-width: ${breakpoints.m.value}px)`]:{flexDirection:"row"}}:baseStyle});export function SegmentedControl({options,value,justified,size="m",onChange,isLabelHidden=!0,renderOptionWrapper,...rest}){let isSingleOption=1===options.length,handleChange=evt=>{let target=evt.target;isSingleOption?onChange(target.checked?target.value:""):onChange(target.value)},optionElms=options.map(({value:optionValue,disabled,...otherProps},index)=>{let isChecked=value===optionValue,isPrevOptionChecked=options[index-1]?.value===value,isPrevOptionDisabled=options[index-1]?.disabled,dividerElm=React.createElement(StyledDivider,{isPrevOptionChecked:isPrevOptionChecked,isPrevOptionDisabled:isPrevOptionDisabled,isChecked:isChecked,isDisabled:disabled,justified:justified}),isRightDivider=index!==options.length-1&&isChecked,optionElm=React.createElement(React.Fragment,null,0!==index&&!isPrevOptionChecked&&dividerElm,React.createElement(SegmentedControlOption,{value:optionValue,size:size,checked:isChecked,isResponsive:justified,disabled:disabled,inputType:isSingleOption?"checkbox":"radio",onChange:handleChange,...otherProps}),isRightDivider&&dividerElm),wrappedOptionElm=renderOptionWrapper?renderOptionWrapper({option:optionElm,checked:isChecked,disabled,value:optionValue}):optionElm;return React.createElement(Fragment,{key:optionValue},wrappedOptionElm)});return React.createElement(FormFieldGroup,{"data-ds-id":"SegmentedControl",isLabelHidden:isLabelHidden,...rest},React.createElement(StyledContainer,{justified:justified,options:options},optionElms))}
1
+ import React,{Fragment}from"react";import styled from"@emotion/styled";import breakpoints from"../../../web-tokens/_breakpoints.json";import{FormFieldGroup}from"../FormFieldGroup/FormFieldGroup";import{SegmentedControlOption}from"./SegmentedControlOption";let StyledDivider=styled("div",{target:"e1qdakvf0",label:"StyledDivider"})(({theme,isChecked,isDisabled,isPrevOptionChecked,isPrevOptionDisabled,justified})=>{let border=`1px solid ${theme.values.color.border.secondary.default}`,otherStyles={backgroundColor:theme.values.color.background.primary.default,...(isChecked||isPrevOptionChecked)&&{borderColor:theme.values.color.border.accent.default},...isDisabled&&isPrevOptionDisabled&&{opacity:theme.variables.opacity.disabled}},borderRightStyle={borderRight:border,...otherStyles};return justified?{[`@media (min-width: ${breakpoints.m.value}px)`]:{...borderRightStyle},[`@media (max-width: ${breakpoints.m.value}px)`]:{borderBottom:border,...otherStyles}}:borderRightStyle}),StyledContainer=styled("div",{target:"e1qdakvf1",label:"StyledContainer"})(({justified,options})=>{let baseStyle={display:"flex"};return justified?{...baseStyle,flexDirection:"column","& > *":{flex:`1 1 ${100/options.length}%`},[`& > ${StyledDivider}`]:{flex:"0 0 auto"},[`@media (min-width: ${breakpoints.m.value}px)`]:{flexDirection:"row"}}:baseStyle});export function SegmentedControl({options,value,justified,size="m",onChange,isLabelHidden=!0,renderOptionWrapper,...rest}){let isSingleOption=1===options.length,handleChange=evt=>{let target=evt.target;isSingleOption?onChange(target.checked?target.value:""):onChange(target.value)},optionElms=options.map(({value:optionValue,disabled,...otherProps},index)=>{let isChecked=value===optionValue,isPrevOptionChecked=options[index-1]?.value===value,isPrevOptionDisabled=options[index-1]?.disabled,dividerElm=React.createElement(StyledDivider,{isPrevOptionChecked:isPrevOptionChecked,isPrevOptionDisabled:isPrevOptionDisabled,isChecked:isChecked,isDisabled:disabled,justified:justified}),isRightDivider=index!==options.length-1&&isChecked,optionElm=React.createElement(React.Fragment,null,0!==index&&!isPrevOptionChecked&&dividerElm,React.createElement(SegmentedControlOption,{value:optionValue,size:size,checked:isChecked,isResponsive:justified,disabled:disabled,inputType:isSingleOption?"checkbox":"radio",onChange:handleChange,...otherProps}),isRightDivider&&dividerElm),wrappedOptionElm=renderOptionWrapper?renderOptionWrapper({option:optionElm,checked:isChecked,disabled,value:optionValue}):optionElm;return React.createElement(Fragment,{key:optionValue},wrappedOptionElm)});return React.createElement(FormFieldGroup,{"data-ds-id":"SegmentedControl",isLabelHidden:isLabelHidden,...rest},React.createElement(StyledContainer,{justified:justified,options:options},optionElms))}
@@ -1 +1 @@
1
- import React,{useRef}from"react";import styled from"@emotion/styled";import breakpoints from"../../../web-tokens/_breakpoints.json";import{Text}from"../../Typography/Text/Text";import{Icon}from"../../Icon/Icon";import{ScreenReaderText}from"../../Utilities/ScreenReaderText/ScreenReaderText";import{Tooltip}from"../../Tooltip/Tooltip";import{Inline}from"../../Inline/Inline";import{getPressedStyles}from"../../../shared/mixins";let StyledInput=styled("input",{target:"etj54850",label:"StyledInput"})(({theme})=>({position:"absolute",height:1,width:1,margin:-1,overflow:"hidden",padding:0,opacity:theme.variables.opacity.hidden})),StyledLabel=styled(Text,{target:"etj54851",label:"StyledLabel"})(({theme,size})=>({..."s"===size&&{lineHeight:theme.variables.size.lineHeight.xs}})),StyledSublabel=styled(Text,{target:"etj54852",label:"StyledSublabel"})(({theme,isResponsive})=>{let baseStyle={textAlign:"center"};return isResponsive?{...baseStyle,[`@media (max-width: ${breakpoints.m.value}px)`]:{lineHeight:theme.variables.size.lineHeight.xs,textAlign:"right",marginLeft:theme.variables.size.spacing.m}}:baseStyle}),StyledIconContainer=styled("div",{target:"etj54853",label:"StyledIconContainer"})(),StyledContainer=styled("label",{target:"etj54854",label:"StyledContainer"})(({theme,size,checked,isResponsive,sublabel,iconOnly,displayAsOptionWithSublabel,disabled})=>{let borderStyle={"&:first-of-type":{borderTopLeftRadius:theme.variables.size.borderRadius.xs,borderBottomLeftRadius:theme.variables.size.borderRadius.xs,borderLeftStyle:"solid"},"&:last-of-type":{borderTopRightRadius:theme.variables.size.borderRadius.xs,borderBottomRightRadius:theme.variables.size.borderRadius.xs,borderRightStyle:"solid"}},basePaddingSize="s"===size?theme.variables.size.spacing.xs:theme.variables.size.spacing.s,basePadding=`calc(${basePaddingSize} - 1px)`,baseStyle={position:"relative",cursor:"pointer",backgroundColor:theme.values.color.background.primary.default,display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",border:`1px solid ${theme.values.color.border.secondary.default}`,borderLeftStyle:"none",borderRightStyle:"none",padding:(()=>{if(iconOnly)return"l"===size?`calc(${theme.variables.size.spacing.m} - 1px)`:basePadding;let horizontalPadding="s"===size?theme.variables.size.spacing.m:theme.variables.size.spacing.l;return`${basePadding} ${horizontalPadding}`})(),...!checked&&!disabled&&{"&:hover":{backgroundColor:theme.values.color.background.secondary.default}},...disabled&&{cursor:"not-allowed",opacity:theme.variables.opacity.disabled},...checked&&getPressedStyles({theme}),[`${StyledSublabel}, ${StyledLabel}, ${StyledIconContainer}`]:{color:theme.values.color.text.secondary.default,...checked&&{color:theme.values.color.text.accent.default}},[`&:has(${StyledInput}:focus-visible)`]:{outlineWidth:2,outlineStyle:"solid",outlineColor:"Highlight",outlineOffset:-1,"@media (-webkit-min-device-pixel-ratio:0)":{outlineColor:"-webkit-focus-ring-color",outlineStyle:"solid"}}};return isResponsive?{...baseStyle,[`@media (min-width: ${breakpoints.m.value}px)`]:{...borderStyle},[`@media (max-width: ${breakpoints.m.value}px)`]:{flexDirection:"row",justifyContent:sublabel||displayAsOptionWithSublabel?"space-between":"center",padding:theme.variables.size.spacing.m,borderTopStyle:"none",borderBottomStyle:"none",borderLeftStyle:"solid",borderRightStyle:"solid","&:first-of-type":{borderTopLeftRadius:theme.variables.size.borderRadius.xs,borderTopRightRadius:theme.variables.size.borderRadius.xs,borderTopStyle:"solid"},"&:last-of-type":{borderBottomLeftRadius:theme.variables.size.borderRadius.xs,borderBottomRightRadius:theme.variables.size.borderRadius.xs,borderBottomStyle:"solid"}}}:{...baseStyle,...borderStyle}});export function SegmentedControlOption({name,value="",checked,label="",sublabel,iconName,iconOnly,slotProps,tooltipContent,tooltipPlacement,tooltipPortalContainer,size,disabled=!1,isResponsive=!1,inputType="radio",displayAsOptionWithSublabel=!1,onChange,onClick,onBlur,onFocus,onTooltipVisibilityChange}){let containerRef=useRef(null),iconAriaLabel=iconOnly?label:void 0,iconElm=iconName?React.createElement(StyledIconContainer,null,React.createElement(Icon,{name:iconName,size:"s","aria-label":slotProps?.icon?.ariaLabel??iconAriaLabel,role:"img"})):null,showIcon=!sublabel&&iconElm,labelElm=React.createElement(StyledLabel,{size:"l"===size?"m":"s",weight:"bold"},label),labelContainerElm=labelElm;showIcon&&(labelContainerElm=iconOnly?React.createElement(React.Fragment,null,iconElm,React.createElement(ScreenReaderText,null,label)):React.createElement(Inline,{space:"xs",noWrap:!0,vAlignItems:"center"},iconElm,labelElm));let sublabelElm=sublabel?React.createElement(StyledSublabel,{size:"s",isResponsive:isResponsive},sublabel):null;return React.createElement(React.Fragment,null,React.createElement(StyledContainer,{size:size,checked:checked,sublabel:sublabel,iconOnly:iconOnly,isResponsive:isResponsive,displayAsOptionWithSublabel:displayAsOptionWithSublabel,ref:containerRef,disabled:disabled,tabIndex:-1},React.createElement(StyledInput,{type:inputType,name:name,value:value,checked:checked,disabled:disabled,onChange:onChange,onClick:onClick,onBlur:onBlur,onFocus:onFocus,"aria-expanded":slotProps?.input?.ariaExpanded,"aria-controls":slotProps?.input?.ariaControls}),labelContainerElm,sublabelElm),!!tooltipContent&&React.createElement(Tooltip,{content:tooltipContent,externalTriggerRef:containerRef,onVisibilityChange:onTooltipVisibilityChange,placement:tooltipPlacement??"auto",portalContainer:tooltipPortalContainer}))}
1
+ import React,{useRef}from"react";import styled from"@emotion/styled";import breakpoints from"../../../web-tokens/_breakpoints.json";import{Text}from"../../Typography/Text/Text";import{Icon}from"../../Icon/Icon";import{ScreenReaderText}from"../../Utilities/ScreenReaderText/ScreenReaderText";import{Tooltip}from"../../Tooltip/Tooltip";import{Inline}from"../../Inline/Inline";import{getPressedStyles}from"../../../shared/mixins";let StyledInput=styled("input",{target:"eve0hq10",label:"StyledInput"})(({theme})=>({position:"absolute",height:1,width:1,margin:-1,overflow:"hidden",padding:0,opacity:theme.variables.opacity.hidden})),StyledLabel=styled(Text,{target:"eve0hq11",label:"StyledLabel"})(({theme,size})=>({..."s"===size&&{lineHeight:theme.variables.size.lineHeight.xs}})),StyledSublabel=styled(Text,{target:"eve0hq12",label:"StyledSublabel"})(({theme,isResponsive})=>{let baseStyle={textAlign:"center"};return isResponsive?{...baseStyle,[`@media (max-width: ${breakpoints.m.value}px)`]:{lineHeight:theme.variables.size.lineHeight.xs,textAlign:"right",marginLeft:theme.variables.size.spacing.m}}:baseStyle}),StyledIconContainer=styled("div",{target:"eve0hq13",label:"StyledIconContainer"})(),StyledContainer=styled("label",{target:"eve0hq14",label:"StyledContainer"})(({theme,size,checked,isResponsive,sublabel,iconOnly,displayAsOptionWithSublabel,disabled})=>{let borderStyle={"&:first-of-type":{borderTopLeftRadius:theme.variables.size.borderRadius.xs,borderBottomLeftRadius:theme.variables.size.borderRadius.xs,borderLeftStyle:"solid"},"&:last-of-type":{borderTopRightRadius:theme.variables.size.borderRadius.xs,borderBottomRightRadius:theme.variables.size.borderRadius.xs,borderRightStyle:"solid"}},basePaddingSize="s"===size?theme.variables.size.spacing.xs:theme.variables.size.spacing.s,basePadding=`calc(${basePaddingSize} - 1px)`,baseStyle={position:"relative",cursor:"pointer",backgroundColor:theme.values.color.background.primary.default,display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",border:`1px solid ${theme.values.color.border.secondary.default}`,borderLeftStyle:"none",borderRightStyle:"none",padding:(()=>{if(iconOnly)return"l"===size?`calc(${theme.variables.size.spacing.m} - 1px)`:basePadding;let horizontalPadding="s"===size?theme.variables.size.spacing.m:theme.variables.size.spacing.l;return`${basePadding} ${horizontalPadding}`})(),...!checked&&!disabled&&{"&:hover":{backgroundColor:theme.values.color.background.secondary.default}},...disabled&&{cursor:"not-allowed",opacity:theme.variables.opacity.disabled},...checked&&getPressedStyles({theme}),[`${StyledSublabel}, ${StyledLabel}, ${StyledIconContainer}`]:{color:theme.values.color.text.secondary.default,...checked&&{color:theme.values.color.text.accent.default}},[`&:has(${StyledInput}:focus-visible)`]:{outlineWidth:2,outlineStyle:"solid",outlineColor:"Highlight",outlineOffset:-1,"@media (-webkit-min-device-pixel-ratio:0)":{outlineColor:"-webkit-focus-ring-color",outlineStyle:"solid"}}};return isResponsive?{...baseStyle,[`@media (min-width: ${breakpoints.m.value}px)`]:{...borderStyle},[`@media (max-width: ${breakpoints.m.value}px)`]:{flexDirection:"row",justifyContent:sublabel||displayAsOptionWithSublabel?"space-between":"center",padding:theme.variables.size.spacing.m,borderTopStyle:"none",borderBottomStyle:"none",borderLeftStyle:"solid",borderRightStyle:"solid","&:first-of-type":{borderTopLeftRadius:theme.variables.size.borderRadius.xs,borderTopRightRadius:theme.variables.size.borderRadius.xs,borderTopStyle:"solid"},"&:last-of-type":{borderBottomLeftRadius:theme.variables.size.borderRadius.xs,borderBottomRightRadius:theme.variables.size.borderRadius.xs,borderBottomStyle:"solid"}}}:{...baseStyle,...borderStyle}});export function SegmentedControlOption({name,value="",checked,label="",sublabel,iconName,iconOnly,slotProps,tooltipContent,tooltipPlacement,tooltipPortalContainer,size,disabled=!1,isResponsive=!1,inputType="radio",displayAsOptionWithSublabel=!1,onChange,onClick,onBlur,onFocus,onTooltipVisibilityChange}){let containerRef=useRef(null),iconAriaLabel=iconOnly?label:void 0,iconAccessibleName=slotProps?.icon?.ariaLabel??iconAriaLabel,iconElm=iconName?React.createElement(StyledIconContainer,null,iconAccessibleName?React.createElement(Icon,{name:iconName,size:"s","aria-label":iconAccessibleName,role:"img"}):React.createElement(Icon,{name:iconName,size:"s"})):null,showIcon=!sublabel&&iconElm,labelElm=React.createElement(StyledLabel,{size:"l"===size?"m":"s",weight:"bold"},label),labelContainerElm=labelElm;showIcon&&(labelContainerElm=iconOnly?React.createElement(React.Fragment,null,iconElm,React.createElement(ScreenReaderText,null,label)):React.createElement(Inline,{space:"xs",noWrap:!0,vAlignItems:"center"},iconElm,labelElm));let sublabelElm=sublabel?React.createElement(StyledSublabel,{size:"s",isResponsive:isResponsive},sublabel):null;return React.createElement(React.Fragment,null,React.createElement(StyledContainer,{size:size,checked:checked,sublabel:sublabel,iconOnly:iconOnly,isResponsive:isResponsive,displayAsOptionWithSublabel:displayAsOptionWithSublabel,ref:containerRef,disabled:disabled,tabIndex:-1},React.createElement(StyledInput,{type:inputType,name:name,value:value,checked:checked,disabled:disabled,onChange:onChange,onClick:onClick,onBlur:onBlur,onFocus:onFocus,"aria-expanded":slotProps?.input?.ariaExpanded,"aria-controls":slotProps?.input?.ariaControls}),labelContainerElm,sublabelElm),tooltipContent&&React.createElement(Tooltip,{content:tooltipContent,externalTriggerRef:containerRef,onVisibilityChange:onTooltipVisibilityChange,placement:tooltipPlacement??"auto",portalContainer:tooltipPortalContainer}))}
@@ -1 +1 @@
1
- import React from"react";import styled from"@emotion/styled";import{FormField}from"../FormField/FormField";import{SelectWithCustomTrigger}from"./SelectWithCustomTrigger";import{Icon}from"../../Icon/Icon";import{Inline}from"../../Inline/Inline";import{TextClamped}from"../../Typography/TextClamped/TextClamped";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let StyledButton=styled("button",{target:"e1w5svy60",label:"StyledButton"})(({theme,hasError,isPlaceholderVisible,readOnly,size})=>({'&[type="button"]':{appearance:"none",MozAppearance:"none",WebkitAppearance:"none"},display:"inline-block",margin:0,borderRadius:theme.variables.size.borderRadius.xs,backgroundColor:theme.values.color.background.primary.default,borderWidth:"1px",borderStyle:"solid",width:"100%",padding:`${"s"===size?`calc(${theme.variables.size.spacing.xxs} + 1px)`:`calc(${theme.variables.size.spacing.xs} - 1px)`} ${theme.variables.size.spacing.s}`,paddingRight:theme.variables.size.spacing.xs,boxSizing:"border-box",borderColor:theme.values.color.border.primary.default,...readOnly&&{borderColor:theme.values.color.border.primary.disabled},...isPlaceholderVisible&&{fontStyle:"italic"},...hasError&&{boxShadow:`0 0 0 1px inset ${theme.values.color.border.error.default}`,borderColor:theme.values.color.border.error.default}})),StyledTriggerIcon=styled(Icon,{target:"e1w5svy61",label:"StyledTriggerIcon"})(()=>({pointerEvents:"none"}));function TriggerButton({triggerRef,disabled,isOpen,hasError,isPlaceholderVisible,role,"aria-expanded":ariaExpanded,"aria-controls":ariaControls,"aria-activedescendant":ariaActiveDescendant,"aria-describedby":ariaDescribedBy,"aria-label":ariaLabel,readOnly,size,onFocus,onBlur,children,...ariaAttributes}){return React.createElement(StyledButton,{type:"button",ref:triggerRef,disabled:disabled,hasError:hasError,isPlaceholderVisible:isPlaceholderVisible,...ariaAttributes,role:role,"aria-expanded":ariaExpanded,"aria-controls":ariaControls,"aria-activedescendant":ariaActiveDescendant,"aria-label":ariaLabel,"aria-invalid":hasError,"aria-describedby":ariaDescribedBy,readOnly:readOnly,size:size,onFocus:onFocus,onBlur:onBlur},React.createElement(Inline,{vAlignItems:"center",alignItems:"spaceBetween",space:"xxs",noWrap:!0},React.createElement(TextClamped,{color:isPlaceholderVisible?"tertiary":"primary",size:size},readOnly&&isPlaceholderVisible?null:children),React.createElement(StyledTriggerIcon,{size:size,name:isOpen?"chevron-up":"chevron-down",color:readOnly?"quaternary":"tertiary"})))}export function Select({options,name,value,placeholder,hasError,optionsListWidth,maxHeight,disabled,portalContainer,readOnly=!1,excludeFromFormData,label,labelHint,hideLabel,hint,errorMessages,size="m","data-e2e-test-id":dataE2eTestId,"aria-describedby":ariaDescribedBy,onChange,onFocus,onBlur,...ariaAttributes}){let selectedOption=options?.find(option=>option.value===value),isPlaceholderVisible=placeholder&&!value,{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(SelectWithCustomTrigger,{options:options,value:value,name:name,optionsListWidth:optionsListWidth,maxHeight:maxHeight,portalContainer:portalContainer,disabled:disabled,readOnly:readOnly,excludeFromFormData:excludeFromFormData,onChange:onChange,renderTrigger:({triggerRef,isOpen,role,"aria-expanded":ariaExpanded,"aria-controls":ariaControls,"aria-activedescendant":ariaActiveDescendant})=>React.createElement(FormField,{disabled:disabled,hideLabel:hideLabel,label:label,labelHint:labelHint,hint:hint,errorMessages:errorMessages,messageId:id,"data-e2e-test-id":dataE2eTestId,"data-ds-id":"Select"},React.createElement(TriggerButton,{hasError:hasError,isPlaceholderVisible:isPlaceholderVisible,size:size,triggerRef:triggerRef,isOpen:isOpen,disabled:disabled,role:role,"aria-expanded":ariaExpanded,"aria-controls":ariaControls,"aria-activedescendant":ariaActiveDescendant,"aria-label":label,...ariaAttributes,...ariaDescribedByProp,readOnly:readOnly,onFocus:onFocus,onBlur:onBlur},selectedOption?selectedOption.label:placeholder))})}
1
+ import React from"react";import styled from"@emotion/styled";import{FormField}from"../FormField/FormField";import{SelectWithCustomTrigger}from"./SelectWithCustomTrigger";import{Icon}from"../../Icon/Icon";import{Inline}from"../../Inline/Inline";import{TextClamped}from"../../Typography/TextClamped/TextClamped";import{useFormFieldMessageId}from"../FormField/useFormFieldMessageId";let StyledButton=styled("button",{target:"emffu2u0",label:"StyledButton"})(({theme,hasError,isPlaceholderVisible,readOnly,size})=>({'&[type="button"]':{appearance:"none",MozAppearance:"none",WebkitAppearance:"none"},display:"inline-block",margin:0,borderRadius:theme.variables.size.borderRadius.xs,backgroundColor:theme.values.color.background.primary.default,borderWidth:"1px",borderStyle:"solid",width:"100%",padding:`${"s"===size?`calc(${theme.variables.size.spacing.xxs} + 1px)`:`calc(${theme.variables.size.spacing.xs} - 1px)`} ${theme.variables.size.spacing.s}`,paddingRight:theme.variables.size.spacing.xs,boxSizing:"border-box",borderColor:theme.values.color.border.primary.default,...readOnly&&{borderColor:theme.values.color.border.primary.disabled},...isPlaceholderVisible&&{fontStyle:"italic"},...hasError&&{boxShadow:`0 0 0 1px inset ${theme.values.color.border.error.default}`,borderColor:theme.values.color.border.error.default}})),StyledTriggerIcon=styled(Icon,{target:"emffu2u1",label:"StyledTriggerIcon"})(()=>({pointerEvents:"none"}));function TriggerButton({triggerRef,disabled,isOpen,hasError,isPlaceholderVisible,role,"aria-expanded":ariaExpanded,"aria-controls":ariaControls,"aria-activedescendant":ariaActiveDescendant,"aria-describedby":ariaDescribedBy,"aria-label":ariaLabel,readOnly,size,onFocus,onBlur,children,...ariaAttributes}){return React.createElement(StyledButton,{type:"button",ref:triggerRef,disabled:disabled,hasError:hasError,isPlaceholderVisible:isPlaceholderVisible,...ariaAttributes,role:role,"aria-expanded":ariaExpanded,"aria-controls":ariaControls,"aria-activedescendant":ariaActiveDescendant,"aria-label":ariaLabel,"aria-invalid":hasError,"aria-describedby":ariaDescribedBy,readOnly:readOnly,size:size,onFocus:onFocus,onBlur:onBlur},React.createElement(Inline,{vAlignItems:"center",alignItems:"spaceBetween",space:"xxs",noWrap:!0},React.createElement(TextClamped,{color:isPlaceholderVisible?"tertiary":"primary",size:size},readOnly&&isPlaceholderVisible?null:children),React.createElement(StyledTriggerIcon,{size:size,name:isOpen?"chevron-up":"chevron-down",color:readOnly?"quaternary":"tertiary"})))}export function Select({options,name,value,placeholder,hasError,optionsListWidth,maxHeight,disabled=!1,portalContainer,readOnly=!1,excludeFromFormData,label,labelHint,hideLabel,hint,errorMessages,size="m","data-e2e-test-id":dataE2eTestId,"aria-describedby":ariaDescribedBy,onChange,onFocus,onBlur,...ariaAttributes}){let selectedOption=options?.find(option=>option.value===value),isPlaceholderVisible=!!placeholder&&!value,{id,ariaDescribedByProp}=useFormFieldMessageId({ariaDescribedBy,errorMessages,hint});return React.createElement(SelectWithCustomTrigger,{options:options,value:value,name:name,optionsListWidth:optionsListWidth,maxHeight:maxHeight,portalContainer:portalContainer,disabled:disabled,readOnly:readOnly,excludeFromFormData:excludeFromFormData,onChange:onChange,renderTrigger:({triggerRef,isOpen,role,"aria-expanded":ariaExpanded,"aria-controls":ariaControls,"aria-activedescendant":ariaActiveDescendant})=>React.createElement(FormField,{disabled:disabled,hideLabel:hideLabel,label:label,labelHint:labelHint,hint:hint,errorMessages:errorMessages,messageId:id,"data-e2e-test-id":dataE2eTestId,"data-ds-id":"Select"},React.createElement(TriggerButton,{hasError:hasError,isPlaceholderVisible:isPlaceholderVisible,size:size,triggerRef:triggerRef,isOpen:isOpen,disabled:disabled,role:role,"aria-expanded":ariaExpanded,"aria-controls":ariaControls,"aria-activedescendant":ariaActiveDescendant,"aria-label":label,...ariaAttributes,...ariaDescribedByProp,readOnly:readOnly,onFocus:onFocus,onBlur:onBlur},selectedOption?selectedOption.label:placeholder??""))})}