@ultraviolet/ui 3.0.0-beta.27 → 3.0.0-beta.29

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 (323) hide show
  1. package/README.md +47 -18
  2. package/dist/components/ActionBar/index.js +19 -7
  3. package/dist/components/Alert/index.d.ts +2 -1
  4. package/dist/components/Alert/index.js +98 -20
  5. package/dist/components/Alert/styles.css.d.ts +10 -1
  6. package/dist/components/Alert/styles.css.js +7 -5
  7. package/dist/components/Avatar/index.d.ts +1 -1
  8. package/dist/components/Avatar/index.js +46 -36
  9. package/dist/components/Avatar/styles.css.js +0 -1
  10. package/dist/components/Avatar/variables.css.js +1 -0
  11. package/dist/components/Badge/index.d.ts +1 -1
  12. package/dist/components/Badge/index.js +19 -8
  13. package/dist/components/Banner/index.d.ts +1 -1
  14. package/dist/components/Banner/index.js +87 -28
  15. package/dist/components/BarChart/Tooltip.d.ts +1 -1
  16. package/dist/components/BarChart/Tooltip.js +23 -10
  17. package/dist/components/BarChart/index.d.ts +1 -1
  18. package/dist/components/BarChart/index.js +51 -31
  19. package/dist/components/BarStack/index.d.ts +1 -1
  20. package/dist/components/BarStack/index.js +64 -19
  21. package/dist/components/Breadcrumbs/components/Item.d.ts +1 -1
  22. package/dist/components/Breadcrumbs/components/Item.js +48 -12
  23. package/dist/components/Breadcrumbs/index.js +11 -2
  24. package/dist/components/Bullet/index.d.ts +1 -1
  25. package/dist/components/Bullet/index.js +10 -7
  26. package/dist/components/Button/index.js +122 -72
  27. package/dist/components/Card/index.js +80 -20
  28. package/dist/components/Carousel/index.d.ts +3 -3
  29. package/dist/components/Carousel/index.js +72 -26
  30. package/dist/components/Checkbox/index.js +139 -43
  31. package/dist/components/CheckboxGroup/index.d.ts +3 -3
  32. package/dist/components/CheckboxGroup/index.js +77 -24
  33. package/dist/components/Chip/ChipIcon.d.ts +1 -1
  34. package/dist/components/Chip/ChipIcon.js +46 -12
  35. package/dist/components/Chip/index.d.ts +3 -3
  36. package/dist/components/Chip/index.js +36 -11
  37. package/dist/components/CopyButton/index.d.ts +1 -1
  38. package/dist/components/CopyButton/index.js +23 -8
  39. package/dist/components/DateInput/components/CalendarContent.d.ts +1 -1
  40. package/dist/components/DateInput/components/CalendarContent.js +61 -26
  41. package/dist/components/DateInput/components/CalendarDaily.d.ts +1 -1
  42. package/dist/components/DateInput/components/CalendarDaily.js +105 -62
  43. package/dist/components/DateInput/components/CalendarMonthly.d.ts +1 -1
  44. package/dist/components/DateInput/components/CalendarMonthly.js +62 -39
  45. package/dist/components/DateInput/components/Popup.d.ts +1 -1
  46. package/dist/components/DateInput/components/Popup.js +29 -6
  47. package/dist/components/DateInput/helpers.js +9 -2
  48. package/dist/components/DateInput/helpersLocale.js +3 -9
  49. package/dist/components/DateInput/index.d.ts +1 -1
  50. package/dist/components/DateInput/index.js +193 -62
  51. package/dist/components/Dialog/Context.js +3 -1
  52. package/dist/components/Dialog/components/Button.d.ts +1 -1
  53. package/dist/components/Dialog/components/Button.js +12 -2
  54. package/dist/components/Dialog/components/Buttons.d.ts +1 -1
  55. package/dist/components/Dialog/components/Buttons.js +1 -1
  56. package/dist/components/Dialog/components/CancelButton.d.ts +1 -1
  57. package/dist/components/Dialog/components/CancelButton.js +12 -2
  58. package/dist/components/Dialog/components/Stack.d.ts +1 -1
  59. package/dist/components/Dialog/components/Stack.js +2 -5
  60. package/dist/components/Dialog/components/Text.d.ts +1 -1
  61. package/dist/components/Dialog/components/Text.js +2 -5
  62. package/dist/components/Dialog/index.d.ts +7 -7
  63. package/dist/components/Dialog/index.js +43 -12
  64. package/dist/components/Drawer/index.d.ts +4 -4
  65. package/dist/components/Drawer/index.js +53 -15
  66. package/dist/components/EmptyState/index.d.ts +1 -1
  67. package/dist/components/EmptyState/index.js +63 -21
  68. package/dist/components/Expandable/index.d.ts +2 -2
  69. package/dist/components/Expandable/index.js +52 -15
  70. package/dist/components/ExpandableCard/components/Title.d.ts +1 -1
  71. package/dist/components/ExpandableCard/components/Title.js +12 -2
  72. package/dist/components/ExpandableCard/index.d.ts +1 -1
  73. package/dist/components/ExpandableCard/index.js +197 -96
  74. package/dist/components/GlobalAlert/GlobalAlertLink.d.ts +1 -1
  75. package/dist/components/GlobalAlert/GlobalAlertLink.js +21 -5
  76. package/dist/components/GlobalAlert/index.d.ts +2 -2
  77. package/dist/components/GlobalAlert/index.js +51 -11
  78. package/dist/components/InfiniteScroll/index.d.ts +1 -1
  79. package/dist/components/InfiniteScroll/index.js +40 -33
  80. package/dist/components/Key/index.d.ts +1 -1
  81. package/dist/components/Key/index.js +29 -8
  82. package/dist/components/Label/index.d.ts +1 -1
  83. package/dist/components/Label/index.js +67 -6
  84. package/dist/components/LineChart/CustomLegend.d.ts +1 -1
  85. package/dist/components/LineChart/CustomLegend.js +69 -45
  86. package/dist/components/LineChart/Tooltip.d.ts +1 -1
  87. package/dist/components/LineChart/Tooltip.js +31 -9
  88. package/dist/components/LineChart/helpers.js +13 -12
  89. package/dist/components/LineChart/index.d.ts +1 -1
  90. package/dist/components/LineChart/index.js +56 -40
  91. package/dist/components/Link/index.js +74 -57
  92. package/dist/components/List/Cell.js +24 -22
  93. package/dist/components/List/ColumnProvider.d.ts +1 -1
  94. package/dist/components/List/ColumnProvider.js +12 -6
  95. package/dist/components/List/HeaderCell.d.ts +1 -1
  96. package/dist/components/List/HeaderCell.js +36 -19
  97. package/dist/components/List/HeaderRow.d.ts +1 -1
  98. package/dist/components/List/HeaderRow.js +14 -12
  99. package/dist/components/List/ListContext.d.ts +1 -1
  100. package/dist/components/List/ListContext.js +128 -78
  101. package/dist/components/List/Row.js +166 -90
  102. package/dist/components/List/SelectBar.d.ts +1 -1
  103. package/dist/components/List/SelectBar.js +20 -10
  104. package/dist/components/List/SkeletonRows.d.ts +1 -1
  105. package/dist/components/List/SkeletonRows.js +26 -16
  106. package/dist/components/List/index.d.ts +1 -1
  107. package/dist/components/List/index.js +60 -22
  108. package/dist/components/Loader/index.d.ts +1 -1
  109. package/dist/components/Loader/index.js +47 -23
  110. package/dist/components/Menu/MenuContent.d.ts +1 -1
  111. package/dist/components/Menu/MenuContent.js +216 -162
  112. package/dist/components/Menu/MenuProvider.d.ts +1 -1
  113. package/dist/components/Menu/MenuProvider.js +26 -13
  114. package/dist/components/Menu/components/Group.d.ts +1 -1
  115. package/dist/components/Menu/components/Group.js +11 -2
  116. package/dist/components/Menu/components/Item.js +144 -82
  117. package/dist/components/Menu/helpers.js +3 -1
  118. package/dist/components/Menu/index.d.ts +2 -2
  119. package/dist/components/Menu/index.js +5 -11
  120. package/dist/components/Menu/types.d.ts +2 -2
  121. package/dist/components/Meter/index.d.ts +1 -1
  122. package/dist/components/Meter/index.js +43 -12
  123. package/dist/components/Modal/ModalContent.d.ts +1 -1
  124. package/dist/components/Modal/ModalContent.js +41 -11
  125. package/dist/components/Modal/ModalProvider.d.ts +1 -1
  126. package/dist/components/Modal/ModalProvider.js +14 -11
  127. package/dist/components/Modal/components/Dialog.js +91 -47
  128. package/dist/components/Modal/index.d.ts +1 -1
  129. package/dist/components/Modal/index.js +60 -3
  130. package/dist/components/Notice/index.d.ts +1 -1
  131. package/dist/components/Notice/index.js +24 -5
  132. package/dist/components/Notification/Notification.js +12 -2
  133. package/dist/components/Notification/NotificationContainer.d.ts +1 -1
  134. package/dist/components/Notification/NotificationContainer.js +18 -2
  135. package/dist/components/NumberInput/index.d.ts +1 -1
  136. package/dist/components/NumberInput/index.js +239 -130
  137. package/dist/components/Pagination/PaginationButtons.d.ts +1 -1
  138. package/dist/components/Pagination/PaginationButtons.js +75 -10
  139. package/dist/components/Pagination/PerPage.d.ts +1 -1
  140. package/dist/components/Pagination/PerPage.js +32 -17
  141. package/dist/components/Pagination/getPageNumbers.js +12 -13
  142. package/dist/components/Pagination/index.d.ts +1 -1
  143. package/dist/components/Pagination/index.js +26 -3
  144. package/dist/components/PasswordCheck/index.d.ts +1 -1
  145. package/dist/components/PasswordCheck/index.js +27 -5
  146. package/dist/components/PieChart/Legends.d.ts +1 -1
  147. package/dist/components/PieChart/Legends.js +52 -20
  148. package/dist/components/PieChart/Tooltip.d.ts +1 -1
  149. package/dist/components/PieChart/Tooltip.js +2 -4
  150. package/dist/components/PieChart/index.d.ts +1 -1
  151. package/dist/components/PieChart/index.js +80 -40
  152. package/dist/components/Popover/index.js +104 -46
  153. package/dist/components/Popup/helpers.d.ts +5 -1
  154. package/dist/components/Popup/helpers.js +49 -35
  155. package/dist/components/Popup/index.d.ts +2 -1
  156. package/dist/components/Popup/index.js +373 -255
  157. package/dist/components/Popup/styles.css.js +0 -1
  158. package/dist/components/Popup/variables.css.js +1 -0
  159. package/dist/components/ProgressBar/index.d.ts +1 -1
  160. package/dist/components/ProgressBar/index.js +74 -20
  161. package/dist/components/Radio/index.js +83 -51
  162. package/dist/components/RadioGroup/index.d.ts +2 -2
  163. package/dist/components/RadioGroup/index.js +74 -20
  164. package/dist/components/Row/index.d.ts +1 -1
  165. package/dist/components/Row/index.js +38 -27
  166. package/dist/components/Row/styles.css.d.ts +11 -0
  167. package/dist/components/Row/styles.css.js +2 -2
  168. package/dist/components/SearchInput/KeyGroup.d.ts +1 -1
  169. package/dist/components/SearchInput/KeyGroup.js +2 -6
  170. package/dist/components/SearchInput/index.js +232 -164
  171. package/dist/components/SelectInput/SelectInputProvider.d.ts +1 -1
  172. package/dist/components/SelectInput/SelectInputProvider.js +91 -55
  173. package/dist/components/SelectInput/components/Dropdown.d.ts +1 -1
  174. package/dist/components/SelectInput/components/Dropdown.js +442 -101
  175. package/dist/components/SelectInput/components/DropdownOption.d.ts +1 -1
  176. package/dist/components/SelectInput/components/DropdownOption.js +176 -27
  177. package/dist/components/SelectInput/components/SearchBarDropdown.d.ts +1 -1
  178. package/dist/components/SelectInput/components/SearchBarDropdown.js +40 -14
  179. package/dist/components/SelectInput/components/SelectBar.d.ts +1 -1
  180. package/dist/components/SelectInput/components/SelectBar.js +252 -97
  181. package/dist/components/SelectInput/index.d.ts +1 -1
  182. package/dist/components/SelectInput/index.js +102 -10
  183. package/dist/components/SelectableCard/index.js +200 -114
  184. package/dist/components/SelectableCardGroup/index.d.ts +2 -2
  185. package/dist/components/SelectableCardGroup/index.js +67 -25
  186. package/dist/components/SelectableCardOptionGroup/Provider.js +3 -1
  187. package/dist/components/SelectableCardOptionGroup/components/Image.d.ts +1 -1
  188. package/dist/components/SelectableCardOptionGroup/components/Image.js +12 -8
  189. package/dist/components/SelectableCardOptionGroup/components/Option.d.ts +1 -1
  190. package/dist/components/SelectableCardOptionGroup/components/Option.js +96 -19
  191. package/dist/components/SelectableCardOptionGroup/index.d.ts +2 -2
  192. package/dist/components/SelectableCardOptionGroup/index.js +53 -17
  193. package/dist/components/Separator/index.d.ts +1 -1
  194. package/dist/components/Separator/index.js +43 -26
  195. package/dist/components/Skeleton/Block.d.ts +1 -1
  196. package/dist/components/Skeleton/Block.js +2 -6
  197. package/dist/components/Skeleton/Blocks.d.ts +1 -1
  198. package/dist/components/Skeleton/Blocks.js +14 -9
  199. package/dist/components/Skeleton/BoxWithIcon.d.ts +1 -1
  200. package/dist/components/Skeleton/BoxWithIcon.js +14 -9
  201. package/dist/components/Skeleton/Donut.d.ts +1 -1
  202. package/dist/components/Skeleton/Donut.js +10 -2
  203. package/dist/components/Skeleton/IconSkeleton.d.ts +1 -1
  204. package/dist/components/Skeleton/IconSkeleton.js +1 -1
  205. package/dist/components/Skeleton/Line.d.ts +1 -1
  206. package/dist/components/Skeleton/Line.js +10 -4
  207. package/dist/components/Skeleton/List.d.ts +1 -1
  208. package/dist/components/Skeleton/List.js +3 -9
  209. package/dist/components/Skeleton/Slider.d.ts +1 -1
  210. package/dist/components/Skeleton/Slider.js +11 -8
  211. package/dist/components/Skeleton/Square.d.ts +1 -1
  212. package/dist/components/Skeleton/Square.js +1 -1
  213. package/dist/components/Skeleton/index.d.ts +9 -9
  214. package/dist/components/Skeleton/index.js +16 -5
  215. package/dist/components/Slider/components/DoubleSlider.d.ts +1 -1
  216. package/dist/components/Slider/components/DoubleSlider.js +191 -88
  217. package/dist/components/Slider/components/Options.d.ts +1 -1
  218. package/dist/components/Slider/components/Options.js +44 -28
  219. package/dist/components/Slider/components/SingleSlider.d.ts +1 -1
  220. package/dist/components/Slider/components/SingleSlider.js +133 -53
  221. package/dist/components/Slider/index.d.ts +1 -1
  222. package/dist/components/Slider/index.js +82 -12
  223. package/dist/components/Snippet/index.d.ts +1 -1
  224. package/dist/components/Snippet/index.js +103 -19
  225. package/dist/components/Stack/index.d.ts +1 -1
  226. package/dist/components/Stack/index.js +20 -24
  227. package/dist/components/Stack/styles.css.js +2 -2
  228. package/dist/components/Status/index.d.ts +1 -1
  229. package/dist/components/Status/index.js +13 -11
  230. package/dist/components/StepList/index.d.ts +2 -2
  231. package/dist/components/StepList/index.js +31 -10
  232. package/dist/components/Stepper/Step.d.ts +1 -1
  233. package/dist/components/Stepper/Step.js +65 -30
  234. package/dist/components/Stepper/StepperProvider.d.ts +1 -1
  235. package/dist/components/Stepper/StepperProvider.js +13 -10
  236. package/dist/components/Stepper/index.d.ts +2 -2
  237. package/dist/components/Stepper/index.js +46 -26
  238. package/dist/components/SwitchButton/FocusOverlay.d.ts +1 -1
  239. package/dist/components/SwitchButton/FocusOverlay.js +11 -5
  240. package/dist/components/SwitchButton/Option.d.ts +1 -1
  241. package/dist/components/SwitchButton/Option.js +20 -2
  242. package/dist/components/SwitchButton/index.d.ts +2 -2
  243. package/dist/components/SwitchButton/index.js +95 -48
  244. package/dist/components/Table/Body.d.ts +1 -1
  245. package/dist/components/Table/Body.js +2 -4
  246. package/dist/components/Table/Cell.d.ts +1 -1
  247. package/dist/components/Table/Cell.js +20 -17
  248. package/dist/components/Table/Header.d.ts +1 -1
  249. package/dist/components/Table/Header.js +2 -4
  250. package/dist/components/Table/HeaderCell.d.ts +1 -1
  251. package/dist/components/Table/HeaderCell.js +46 -22
  252. package/dist/components/Table/HeaderRow.d.ts +1 -1
  253. package/dist/components/Table/HeaderRow.js +21 -12
  254. package/dist/components/Table/Row.d.ts +1 -1
  255. package/dist/components/Table/Row.js +70 -14
  256. package/dist/components/Table/SelectBar.d.ts +1 -1
  257. package/dist/components/Table/SelectBar.js +20 -10
  258. package/dist/components/Table/SkeletonRows.d.ts +1 -1
  259. package/dist/components/Table/SkeletonRows.js +17 -16
  260. package/dist/components/Table/TableContext.d.ts +1 -1
  261. package/dist/components/Table/TableContext.js +22 -13
  262. package/dist/components/Table/index.d.ts +6 -6
  263. package/dist/components/Table/index.js +64 -23
  264. package/dist/components/Tabs/Tab.js +79 -41
  265. package/dist/components/Tabs/TabMenu.js +39 -23
  266. package/dist/components/Tabs/TabMenuItem.d.ts +1 -1
  267. package/dist/components/Tabs/TabMenuItem.js +20 -11
  268. package/dist/components/Tabs/TabsContext.js +3 -1
  269. package/dist/components/Tabs/index.d.ts +3 -3
  270. package/dist/components/Tabs/index.js +34 -14
  271. package/dist/components/Tag/index.d.ts +1 -1
  272. package/dist/components/Tag/index.js +45 -12
  273. package/dist/components/TagInput/index.d.ts +1 -1
  274. package/dist/components/TagInput/index.js +131 -52
  275. package/dist/components/TagInput/styles.css.d.ts +3 -0
  276. package/dist/components/TagList/index.d.ts +1 -1
  277. package/dist/components/TagList/index.js +132 -59
  278. package/dist/components/Text/index.d.ts +1 -1
  279. package/dist/components/Text/index.js +21 -17
  280. package/dist/components/TextArea/index.js +178 -103
  281. package/dist/components/TextInput/index.d.ts +1 -1
  282. package/dist/components/TextInput/index.js +286 -106
  283. package/dist/components/TimeInput/constants.js +1 -5
  284. package/dist/components/TimeInput/index.d.ts +1 -1
  285. package/dist/components/TimeInput/index.js +207 -118
  286. package/dist/components/Toaster/Toaster.js +1 -1
  287. package/dist/components/Toaster/ToasterContainer.d.ts +1 -1
  288. package/dist/components/Toaster/ToasterContainer.js +21 -2
  289. package/dist/components/Toaster/components/Button.d.ts +1 -1
  290. package/dist/components/Toaster/components/CloseButton.d.ts +1 -1
  291. package/dist/components/Toaster/components/CloseButton.js +12 -2
  292. package/dist/components/Toaster/components/Content.d.ts +1 -1
  293. package/dist/components/Toaster/components/Content.js +2 -4
  294. package/dist/components/Toaster/components/Link.d.ts +1 -1
  295. package/dist/components/Toaster/index.d.ts +2 -2
  296. package/dist/components/Toggle/index.js +101 -40
  297. package/dist/components/ToggleGroup/index.d.ts +3 -3
  298. package/dist/components/ToggleGroup/index.js +61 -22
  299. package/dist/components/Tooltip/index.d.ts +1 -1
  300. package/dist/components/Tooltip/index.js +42 -19
  301. package/dist/components/TreeMapChart/Tooltip.d.ts +1 -1
  302. package/dist/components/TreeMapChart/Tooltip.js +1 -1
  303. package/dist/components/TreeMapChart/index.d.ts +1 -1
  304. package/dist/components/TreeMapChart/index.js +33 -27
  305. package/dist/components/UnitInput/index.d.ts +1 -1
  306. package/dist/components/UnitInput/index.js +110 -29
  307. package/dist/components/VerificationCode/index.d.ts +1 -1
  308. package/dist/components/VerificationCode/index.js +80 -21
  309. package/dist/helpers/legend.js +4 -4
  310. package/dist/helpers/treeMap.d.ts +2 -1
  311. package/dist/index.d.ts +1 -1
  312. package/dist/index.js +2 -4
  313. package/dist/theme/ThemeProvider.d.ts +1 -1
  314. package/dist/theme/ThemeProvider.js +4 -2
  315. package/dist/theme/index.js +1 -8
  316. package/dist/ui.css +1 -1
  317. package/dist/utils/ids.js +1 -3
  318. package/dist/utils/index.d.ts +1 -1
  319. package/dist/utils/responsive/index.d.ts +0 -1
  320. package/dist/utils/responsive/style.css.d.ts +3 -0
  321. package/package.json +5 -10
  322. package/dist/utils/responsive/Breakpoint.d.ts +0 -9
  323. package/dist/utils/responsive/Breakpoint.js +0 -14
@@ -1,7 +1,7 @@
1
1
  "use client";
2
- import { jsx, jsxs, Fragment } from "@emotion/react/jsx-runtime";
2
+ import { jsx, jsxs, Fragment } from "react/jsx-runtime";
3
3
  import { useTheme } from "@ultraviolet/themes";
4
- import { useState, useRef, useContext, useEffect, useCallback, useMemo } from "react";
4
+ import { useState, useRef, use, useLayoutEffect, useCallback, useEffect, useMemo } from "react";
5
5
  import { Checkbox } from "../../Checkbox/index.js";
6
6
  import { ModalContext } from "../../Modal/ModalProvider.js";
7
7
  import { Popup } from "../../Popup/index.js";
@@ -14,9 +14,22 @@ import { DisplayOption } from "./DropdownOption.js";
14
14
  import { footer, dropdown, dropdownEmptyState, dropdownContainer, dropdownItem, dropdownCheckbox, dropdownGroupWrapper, dropdownGroupSelectable, dropdownGroup, dropdownLoadMore, dropdownContainerUnGrouped } from "./dropdown.css.js";
15
15
  import { SearchBarDropdown } from "./SearchBarDropdown.js";
16
16
  const DROPDOWN_MAX_HEIGHT = 256;
17
- const NON_SEARCHABLE_KEYS = ["Tab", " ", "Enter", "CapsLock", "Shift", "ArrowDown", "ArrowUp", "ArrowLeft", "ArrowRight", "Escape"];
17
+ const NON_SEARCHABLE_KEYS = [
18
+ "Tab",
19
+ " ",
20
+ "Enter",
21
+ "CapsLock",
22
+ "Shift",
23
+ "ArrowDown",
24
+ "ArrowUp",
25
+ "ArrowLeft",
26
+ "ArrowRight",
27
+ "Escape"
28
+ ];
18
29
  const moveFocusDown = () => {
19
- const options = document.querySelectorAll('#items > div[role="option"]:not([disabled])');
30
+ const options = document.querySelectorAll(
31
+ '#items > div[role="option"]:not([disabled])'
32
+ );
20
33
  const activeItem = document.activeElement;
21
34
  if (options) {
22
35
  for (let i = 0; i < options?.length; i += 1) {
@@ -28,7 +41,9 @@ const moveFocusDown = () => {
28
41
  }
29
42
  };
30
43
  const moveFocusUp = () => {
31
- const options = document.querySelectorAll('#items > div[role="option"]:not([disabled])');
44
+ const options = document.querySelectorAll(
45
+ '#items > div[role="option"]:not([disabled])'
46
+ );
32
47
  const activeItem = document.activeElement;
33
48
  if (options) {
34
49
  for (let i = 0; i < options.length; i += 1) {
@@ -57,11 +72,11 @@ const handleKeyDown = (event, ref, options, searchBarActive, setSearch, setDefau
57
72
  setSearch(currentSearch);
58
73
  ref.current.focus();
59
74
  if (!Array.isArray(options)) {
60
- const closestOptions = {
61
- ...options
62
- };
75
+ const closestOptions = { ...options };
63
76
  Object.keys(closestOptions).map((group) => {
64
- closestOptions[group] = closestOptions[group].filter((option) => option.searchText ? option.searchText.toLocaleLowerCase().startsWith(currentSearch) : option.value.toLocaleLowerCase().startsWith(currentSearch));
77
+ closestOptions[group] = closestOptions[group].filter(
78
+ (option) => option.searchText ? option.searchText.toLocaleLowerCase().startsWith(currentSearch) : option.value.toLocaleLowerCase().startsWith(currentSearch)
79
+ );
65
80
  return null;
66
81
  });
67
82
  const closestOption = closestOptions[Object.keys(closestOptions)[0]][0];
@@ -71,7 +86,9 @@ const handleKeyDown = (event, ref, options, searchBarActive, setSearch, setDefau
71
86
  setDefaultSearch(null);
72
87
  }
73
88
  } else {
74
- const closestOption = [...options].find((option) => option.searchText ? option.searchText.toLocaleLowerCase().startsWith(currentSearch) : option.value.toLocaleLowerCase().startsWith(currentSearch));
89
+ const closestOption = [...options].find(
90
+ (option) => option.searchText ? option.searchText.toLocaleLowerCase().startsWith(currentSearch) : option.value.toLocaleLowerCase().startsWith(currentSearch)
91
+ );
75
92
  if (closestOption) {
76
93
  setDefaultSearch(closestOption.searchText ?? closestOption.value);
77
94
  } else {
@@ -109,15 +126,20 @@ const CreateDropdown = ({
109
126
  if (isEmpty) {
110
127
  return /* @__PURE__ */ jsx(Stack, { alignItems: "center", className: dropdownEmptyState, gap: 2, children: emptyState ?? /* @__PURE__ */ jsx(Text, { as: "p", variant: "bodyStrong", children: "No options" }) });
111
128
  }
112
- const handleClick = (clickedOption, group) => {
113
- setSelectedData({
114
- clickedOption,
115
- group,
116
- type: "selectOption"
117
- });
129
+ const handleClick = ({
130
+ clickedOption,
131
+ group,
132
+ event
133
+ }) => {
134
+ event.stopPropagation();
135
+ setSelectedData({ clickedOption, group, type: "selectOption" });
118
136
  if (multiselect) {
119
137
  if (selectedData.selectedValues.includes(clickedOption.value)) {
120
- onChange?.(selectedData.selectedValues.filter((val) => val !== clickedOption.value));
138
+ onChange?.(
139
+ selectedData.selectedValues.filter(
140
+ (value) => value !== clickedOption.value
141
+ )
142
+ );
121
143
  } else {
122
144
  onChange?.([...selectedData.selectedValues, clickedOption.value]);
123
145
  }
@@ -128,20 +150,20 @@ const CreateDropdown = ({
128
150
  };
129
151
  const selectAllOptions = () => {
130
152
  if (multiselect) {
131
- setSelectedData({
132
- type: "selectAll"
133
- });
153
+ setSelectedData({ type: "selectAll" });
134
154
  if (selectedData.allSelected && onChange) {
135
155
  onChange([]);
136
156
  } else {
137
157
  const allValues = [];
138
158
  if (!Array.isArray(options)) {
139
- Object.keys(options).map((group) => options[group].map((option) => {
140
- if (!option.disabled) {
141
- allValues.push(option);
142
- }
143
- return null;
144
- }));
159
+ Object.keys(options).map(
160
+ (group) => options[group].map((option) => {
161
+ if (!option.disabled) {
162
+ allValues.push(option);
163
+ }
164
+ return null;
165
+ })
166
+ );
145
167
  } else {
146
168
  options.map((option) => allValues.push(option));
147
169
  }
@@ -151,75 +173,331 @@ const CreateDropdown = ({
151
173
  };
152
174
  const handleSelectGroup = (group) => {
153
175
  if (multiselect) {
154
- setSelectedData({
155
- selectedGroup: group,
156
- type: "selectGroup"
157
- });
176
+ setSelectedData({ selectedGroup: group, type: "selectGroup" });
158
177
  if (!Array.isArray(options)) {
159
178
  if (selectedData.selectedGroups.includes(group)) {
160
- const newSelectedValues = [...selectedData.selectedValues].filter((selectedValue) => !options[group].find((option) => option.value === selectedValue));
179
+ const newSelectedValues = [...selectedData.selectedValues].filter(
180
+ (selectedValue) => !options[group].find((option) => option.value === selectedValue)
181
+ );
161
182
  onChange?.(newSelectedValues);
162
183
  } else {
163
184
  const newSelectedValues = [...selectedData.selectedValues];
164
- options[group].map((option) => newSelectedValues.includes(option.value) || option.disabled ? null : newSelectedValues.push(option.value));
185
+ options[group].map(
186
+ (option) => newSelectedValues.includes(option.value) || option.disabled ? null : newSelectedValues.push(option.value)
187
+ );
165
188
  onChange?.(newSelectedValues);
166
189
  }
167
190
  }
168
191
  }
169
192
  };
170
- return !Array.isArray(displayedOptions) ? /* @__PURE__ */ jsxs(Stack, { className: dropdownContainer, "data-grouped": true, id: "select-dropdown", onKeyDown: handleKeyDownSelect, role: "listbox", children: [
171
- isLoading ? /* @__PURE__ */ jsx(Skeleton, { variant: "block" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
172
- selectAll && multiselect ? /* @__PURE__ */ jsx(Stack, { id: "items", children: /* @__PURE__ */ jsx("div", { "aria-disabled": false, "aria-label": "select-all", "aria-selected": selectedData.allSelected, className: dropdownItem({
173
- selected: selectedData.allSelected
174
- }), "data-testid": "select-all", id: "select-all", onClick: selectAllOptions, onKeyDown: (event) => [" ", "Enter"].includes(event.key) ? selectAllOptions() : null, role: "option", tabIndex: 0, children: /* @__PURE__ */ jsx(Checkbox, { checked: selectedData.allSelected, className: dropdownCheckbox, "data-testid": "select-all-checkbox", disabled: false, onChange: selectAllOptions, tabIndex: -1, value: "select-all", children: /* @__PURE__ */ jsxs(Stack, { direction: "column", children: [
175
- /* @__PURE__ */ jsx(Text, { as: "span", placement: "left", variant: "body", children: selectAll.label }),
176
- /* @__PURE__ */ jsx(Text, { as: "span", placement: "left", prominence: "weak", sentiment: "neutral", variant: "bodySmall", children: selectAll.description })
177
- ] }) }) }) }) : null,
178
- Object.keys(displayedOptions).map((group, index) => /* @__PURE__ */ jsxs(Stack, { gap: 0.25, children: [
179
- displayedOptions[group].length > 0 ? /* @__PURE__ */ jsx("div", { className: dropdownGroupWrapper, id: selectAllGroup ? "items" : void 0, children: group ? /* @__PURE__ */ jsx("button", { className: `${selectAllGroup ? dropdownGroupSelectable : ""} ${dropdownGroup}`, "data-selectgroup": selectAllGroup, "data-testid": `group-${index}`, onClick: () => selectAllGroup ? handleSelectGroup(group) : null, onKeyDown: (event) => {
180
- if ([" ", "Enter"].includes(event.key)) {
181
- event.preventDefault();
182
- handleSelectGroup(group);
183
- }
184
- }, role: "group", tabIndex: selectAllGroup ? 0 : -1, type: "button", children: selectAllGroup ? /* @__PURE__ */ jsx(Checkbox, { checked: selectedData.selectedGroups.includes(group), className: dropdownCheckbox, "data-testid": "select-group", disabled: false, onChange: () => selectAllGroup ? handleSelectGroup(group) : null, tabIndex: -1, value: group, children: /* @__PURE__ */ jsx(Text, { as: "span", placement: "left", sentiment: "neutral", variant: "caption", children: group.toUpperCase() }) }) : /* @__PURE__ */ jsx(Text, { as: "span", placement: "left", sentiment: "neutral", variant: "caption", children: group.toUpperCase() }) }, group) : null }) : null,
185
- /* @__PURE__ */ jsx(Stack, { gap: "0.25", id: "items", children: displayedOptions[group].map((option, indexOption) => /* @__PURE__ */ jsx("div", { "aria-disabled": !!option.disabled, "aria-label": option.value, "aria-selected": selectedData.selectedValues.includes(option.value) && !option.disabled, className: dropdownItem({
186
- disabled: !!option.disabled,
187
- selected: selectedData.selectedValues.includes(option.value) && !option.disabled
188
- }), "data-testid": `option-${option.value}`, id: `option-${indexOption}`, onClick: () => {
189
- if (!option.disabled) {
190
- handleClick(option, group);
191
- }
192
- }, onKeyDown: (event) => [" ", "Enter"].includes(event.key) ? handleClick(option, group) : null, ref: option.value === defaultSearchValue || option.searchText === defaultSearchValue ? focusedItemRef : null, role: "option", tabIndex: !option.disabled ? 0 : -1, children: multiselect ? /* @__PURE__ */ jsx(Checkbox, { checked: selectedData.selectedValues.includes(option.value) && !option.disabled, className: dropdownCheckbox, disabled: option.disabled, onChange: () => {
193
- if (!option.disabled) {
194
- handleClick(option, group);
193
+ return !Array.isArray(displayedOptions) ? /* @__PURE__ */ jsxs(
194
+ Stack,
195
+ {
196
+ className: dropdownContainer,
197
+ "data-grouped": true,
198
+ id: "select-dropdown",
199
+ onKeyDown: handleKeyDownSelect,
200
+ role: "listbox",
201
+ children: [
202
+ isLoading ? /* @__PURE__ */ jsx(Skeleton, { variant: "block" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
203
+ selectAll && multiselect ? /* @__PURE__ */ jsx(Stack, { id: "items", children: /* @__PURE__ */ jsx(
204
+ "div",
205
+ {
206
+ "aria-disabled": false,
207
+ "aria-label": "select-all",
208
+ "aria-selected": selectedData.allSelected,
209
+ className: dropdownItem({ selected: selectedData.allSelected }),
210
+ "data-testid": "select-all",
211
+ id: "select-all",
212
+ onClick: selectAllOptions,
213
+ onKeyDown: (event) => [" ", "Enter"].includes(event.key) ? selectAllOptions() : null,
214
+ role: "option",
215
+ tabIndex: 0,
216
+ children: /* @__PURE__ */ jsx(
217
+ Checkbox,
218
+ {
219
+ checked: selectedData.allSelected,
220
+ className: dropdownCheckbox,
221
+ "data-testid": "select-all-checkbox",
222
+ disabled: false,
223
+ onChange: selectAllOptions,
224
+ tabIndex: -1,
225
+ value: "select-all",
226
+ children: /* @__PURE__ */ jsxs(Stack, { direction: "column", children: [
227
+ /* @__PURE__ */ jsx(Text, { as: "span", placement: "left", variant: "body", children: selectAll.label }),
228
+ /* @__PURE__ */ jsx(
229
+ Text,
230
+ {
231
+ as: "span",
232
+ placement: "left",
233
+ prominence: "weak",
234
+ sentiment: "neutral",
235
+ variant: "bodySmall",
236
+ children: selectAll.description
237
+ }
238
+ )
239
+ ] })
240
+ }
241
+ )
242
+ }
243
+ ) }) : null,
244
+ Object.keys(displayedOptions).map((group, index) => /* @__PURE__ */ jsxs(Stack, { gap: 0.25, children: [
245
+ displayedOptions[group].length > 0 ? /* @__PURE__ */ jsx(
246
+ "div",
247
+ {
248
+ className: dropdownGroupWrapper,
249
+ id: selectAllGroup ? "items" : void 0,
250
+ children: group ? /* @__PURE__ */ jsx(
251
+ "button",
252
+ {
253
+ className: `${selectAllGroup ? dropdownGroupSelectable : ""} ${dropdownGroup}`,
254
+ "data-selectgroup": selectAllGroup,
255
+ "data-testid": `group-${index}`,
256
+ onClick: () => selectAllGroup ? handleSelectGroup(group) : null,
257
+ onKeyDown: (event) => {
258
+ if ([" ", "Enter"].includes(event.key)) {
259
+ event.preventDefault();
260
+ handleSelectGroup(group);
261
+ }
262
+ },
263
+ role: "group",
264
+ tabIndex: selectAllGroup ? 0 : -1,
265
+ type: "button",
266
+ children: selectAllGroup ? /* @__PURE__ */ jsx(
267
+ Checkbox,
268
+ {
269
+ checked: selectedData.selectedGroups.includes(group),
270
+ className: dropdownCheckbox,
271
+ "data-testid": "select-group",
272
+ disabled: false,
273
+ onChange: () => selectAllGroup ? handleSelectGroup(group) : null,
274
+ tabIndex: -1,
275
+ value: group,
276
+ children: /* @__PURE__ */ jsx(
277
+ Text,
278
+ {
279
+ as: "span",
280
+ placement: "left",
281
+ sentiment: "neutral",
282
+ variant: "caption",
283
+ children: group.toUpperCase()
284
+ }
285
+ )
286
+ }
287
+ ) : /* @__PURE__ */ jsx(
288
+ Text,
289
+ {
290
+ as: "span",
291
+ placement: "left",
292
+ sentiment: "neutral",
293
+ variant: "caption",
294
+ children: group.toUpperCase()
295
+ }
296
+ )
297
+ },
298
+ group
299
+ ) : null
300
+ }
301
+ ) : null,
302
+ /* @__PURE__ */ jsx(Stack, { gap: "0.25", id: "items", children: displayedOptions[group].map((option, indexOption) => /* @__PURE__ */ jsx(
303
+ "div",
304
+ {
305
+ "aria-disabled": !!option.disabled,
306
+ "aria-label": option.value,
307
+ "aria-selected": selectedData.selectedValues.includes(option.value) && !option.disabled,
308
+ className: dropdownItem({
309
+ disabled: !!option.disabled,
310
+ selected: selectedData.selectedValues.includes(option.value) && !option.disabled
311
+ }),
312
+ "data-testid": `option-${option.value}`,
313
+ id: `option-${indexOption}`,
314
+ onClick: (event) => {
315
+ if (!option.disabled) {
316
+ handleClick({
317
+ clickedOption: option,
318
+ event,
319
+ group
320
+ });
321
+ }
322
+ },
323
+ onKeyDown: (event) => {
324
+ const shouldClick = [" ", "Enter"].includes(event.key);
325
+ if (shouldClick) {
326
+ handleClick({
327
+ clickedOption: option,
328
+ event,
329
+ group
330
+ });
331
+ }
332
+ },
333
+ ref: option.value === defaultSearchValue || option.searchText === defaultSearchValue ? focusedItemRef : null,
334
+ role: "option",
335
+ tabIndex: !option.disabled ? 0 : -1,
336
+ children: multiselect ? /* @__PURE__ */ jsx(
337
+ Checkbox,
338
+ {
339
+ checked: selectedData.selectedValues.includes(option.value) && !option.disabled,
340
+ className: dropdownCheckbox,
341
+ disabled: option.disabled,
342
+ onChange: (event) => {
343
+ if (!option.disabled) {
344
+ handleClick({
345
+ clickedOption: option,
346
+ event,
347
+ group
348
+ });
349
+ }
350
+ },
351
+ tabIndex: -1,
352
+ value: option.value,
353
+ children: /* @__PURE__ */ jsx(
354
+ DisplayOption,
355
+ {
356
+ descriptionDirection,
357
+ option,
358
+ optionalInfoPlacement
359
+ }
360
+ )
361
+ }
362
+ ) : /* @__PURE__ */ jsx(
363
+ DisplayOption,
364
+ {
365
+ descriptionDirection,
366
+ option,
367
+ optionalInfoPlacement
368
+ }
369
+ )
370
+ },
371
+ option.value
372
+ )) })
373
+ ] }, group))
374
+ ] }),
375
+ loadMore ? /* @__PURE__ */ jsx(Stack, { className: dropdownLoadMore, children: loadMore }) : null
376
+ ]
377
+ }
378
+ ) : /* @__PURE__ */ jsxs(
379
+ Stack,
380
+ {
381
+ className: `${dropdownContainer} ${dropdownContainerUnGrouped}`,
382
+ gap: 0.25,
383
+ id: "select-dropdown",
384
+ onKeyDown: handleKeyDownSelect,
385
+ role: "listbox",
386
+ children: [
387
+ selectAll && multiselect ? /* @__PURE__ */ jsx(Stack, { gap: 0.25, id: "items", tabIndex: -1, children: /* @__PURE__ */ jsx(
388
+ "div",
389
+ {
390
+ "aria-disabled": false,
391
+ "aria-label": "select-all",
392
+ "aria-selected": selectedData.allSelected,
393
+ className: dropdownItem({ selected: selectedData.allSelected }),
394
+ "data-testid": "select-all",
395
+ onClick: selectAllOptions,
396
+ onKeyDown: (event) => [" ", "Enter"].includes(event.key) ? selectAllOptions() : null,
397
+ role: "option",
398
+ tabIndex: 0,
399
+ children: /* @__PURE__ */ jsx(
400
+ Checkbox,
401
+ {
402
+ checked: selectedData.allSelected,
403
+ className: dropdownCheckbox,
404
+ "data-testid": "select-all-checkbox",
405
+ disabled: false,
406
+ onChange: selectAllOptions,
407
+ tabIndex: -1,
408
+ value: "select-all",
409
+ children: /* @__PURE__ */ jsxs(Stack, { direction: "column", children: [
410
+ /* @__PURE__ */ jsx(Text, { as: "span", placement: "left", variant: "body", children: selectAll.label }),
411
+ /* @__PURE__ */ jsx(
412
+ Text,
413
+ {
414
+ as: "span",
415
+ placement: "left",
416
+ prominence: "weak",
417
+ sentiment: "neutral",
418
+ variant: "bodySmall",
419
+ children: selectAll.description
420
+ }
421
+ )
422
+ ] })
423
+ }
424
+ )
195
425
  }
196
- }, tabIndex: -1, value: option.value, children: /* @__PURE__ */ jsx(DisplayOption, { descriptionDirection, option, optionalInfoPlacement }) }) : /* @__PURE__ */ jsx(DisplayOption, { descriptionDirection, option, optionalInfoPlacement }) }, option.value)) })
197
- ] }, group))
198
- ] }),
199
- loadMore ? /* @__PURE__ */ jsx(Stack, { className: dropdownLoadMore, children: loadMore }) : null
200
- ] }) : /* @__PURE__ */ jsxs(Stack, { className: `${dropdownContainer} ${dropdownContainerUnGrouped}`, gap: 0.25, id: "select-dropdown", onKeyDown: handleKeyDownSelect, role: "listbox", children: [
201
- selectAll && multiselect ? /* @__PURE__ */ jsx(Stack, { gap: 0.25, id: "items", tabIndex: -1, children: /* @__PURE__ */ jsx("div", { "aria-disabled": false, "aria-label": "select-all", "aria-selected": selectedData.allSelected, className: dropdownItem({
202
- selected: selectedData.allSelected
203
- }), "data-testid": "select-all", onClick: selectAllOptions, onKeyDown: (event) => [" ", "Enter"].includes(event.key) ? selectAllOptions() : null, role: "option", tabIndex: 0, children: /* @__PURE__ */ jsx(Checkbox, { checked: selectedData.allSelected, className: dropdownCheckbox, "data-testid": "select-all-checkbox", disabled: false, onChange: selectAllOptions, tabIndex: -1, value: "select-all", children: /* @__PURE__ */ jsxs(Stack, { direction: "column", children: [
204
- /* @__PURE__ */ jsx(Text, { as: "span", placement: "left", variant: "body", children: selectAll.label }),
205
- /* @__PURE__ */ jsx(Text, { as: "span", placement: "left", prominence: "weak", sentiment: "neutral", variant: "bodySmall", children: selectAll.description })
206
- ] }) }) }) }) : null,
207
- /* @__PURE__ */ jsxs(Stack, { gap: 0.25, id: "items", children: [
208
- isLoading ? /* @__PURE__ */ jsx(Skeleton, { variant: "block" }) : displayedOptions.map((option, index) => /* @__PURE__ */ jsx("div", { "aria-disabled": !!option.disabled, "aria-label": option.value, "aria-selected": selectedData.selectedValues.includes(option.value) && !option.disabled, className: dropdownItem({
209
- disabled: !!option.disabled,
210
- selected: selectedData.selectedValues.includes(option.value) && !option.disabled
211
- }), "data-testid": `option-${option.value}`, id: `option-${index}`, onClick: () => {
212
- if (!option.disabled) {
213
- handleClick(option);
214
- }
215
- }, onKeyDown: (event) => [" ", "Enter"].includes(event.key) ? handleClick(option) : null, ref: option.value === defaultSearchValue || option.searchText === defaultSearchValue ? focusedItemRef : null, role: "option", tabIndex: !option.disabled ? 0 : -1, children: multiselect ? /* @__PURE__ */ jsx(Checkbox, { checked: selectedData.selectedValues.includes(option.value) && !option.disabled, className: dropdownCheckbox, disabled: option.disabled, onChange: () => {
216
- if (!option.disabled) {
217
- handleClick(option);
218
- }
219
- }, tabIndex: -1, value: option.value, children: /* @__PURE__ */ jsx(DisplayOption, { descriptionDirection, option, optionalInfoPlacement }) }) : /* @__PURE__ */ jsx(DisplayOption, { descriptionDirection, option, optionalInfoPlacement }) }, option.value)),
220
- loadMore ? /* @__PURE__ */ jsx(Stack, { className: dropdownLoadMore, children: loadMore }) : null
221
- ] })
222
- ] });
426
+ ) }) : null,
427
+ /* @__PURE__ */ jsxs(Stack, { gap: 0.25, id: "items", children: [
428
+ isLoading ? /* @__PURE__ */ jsx(Skeleton, { variant: "block" }) : displayedOptions.map((option, index) => /* @__PURE__ */ jsx(
429
+ "div",
430
+ {
431
+ "aria-disabled": !!option.disabled,
432
+ "aria-label": option.value,
433
+ "aria-selected": selectedData.selectedValues.includes(option.value) && !option.disabled,
434
+ className: dropdownItem({
435
+ disabled: !!option.disabled,
436
+ selected: selectedData.selectedValues.includes(option.value) && !option.disabled
437
+ }),
438
+ "data-testid": `option-${option.value}`,
439
+ id: `option-${index}`,
440
+ onClick: (event) => {
441
+ if (!option.disabled) {
442
+ handleClick({
443
+ clickedOption: option,
444
+ event
445
+ });
446
+ }
447
+ },
448
+ onKeyDown: (event) => {
449
+ const shouldClick = [" ", "Enter"].includes(event.key);
450
+ if (shouldClick) {
451
+ handleClick({
452
+ clickedOption: option,
453
+ event
454
+ });
455
+ }
456
+ },
457
+ ref: option.value === defaultSearchValue || option.searchText === defaultSearchValue ? focusedItemRef : null,
458
+ role: "option",
459
+ tabIndex: !option.disabled ? 0 : -1,
460
+ children: multiselect ? /* @__PURE__ */ jsx(
461
+ Checkbox,
462
+ {
463
+ checked: selectedData.selectedValues.includes(option.value) && !option.disabled,
464
+ className: dropdownCheckbox,
465
+ disabled: option.disabled,
466
+ onChange: (event) => {
467
+ if (!option.disabled) {
468
+ handleClick({
469
+ clickedOption: option,
470
+ event
471
+ });
472
+ }
473
+ },
474
+ tabIndex: -1,
475
+ value: option.value,
476
+ children: /* @__PURE__ */ jsx(
477
+ DisplayOption,
478
+ {
479
+ descriptionDirection,
480
+ option,
481
+ optionalInfoPlacement
482
+ }
483
+ )
484
+ }
485
+ ) : /* @__PURE__ */ jsx(
486
+ DisplayOption,
487
+ {
488
+ descriptionDirection,
489
+ option,
490
+ optionalInfoPlacement
491
+ }
492
+ )
493
+ },
494
+ option.value
495
+ )),
496
+ loadMore ? /* @__PURE__ */ jsx(Stack, { className: dropdownLoadMore, children: loadMore }) : null
497
+ ] })
498
+ ]
499
+ }
500
+ );
223
501
  };
224
502
  const Dropdown = ({
225
503
  children,
@@ -251,9 +529,11 @@ const Dropdown = ({
251
529
  const [defaultSearchValue, setDefaultSearch] = useState(null);
252
530
  const ref = useRef(null);
253
531
  const [search, setSearch] = useState("");
254
- const [maxWidth, setWidth] = useState(refSelect.current?.offsetWidth ?? "100%");
255
- const modalContext = useContext(ModalContext);
256
- useEffect(() => {
532
+ const [maxWidth, setWidth] = useState(
533
+ refSelect.current?.offsetWidth ?? "100%"
534
+ );
535
+ const modalContext = use(ModalContext);
536
+ useLayoutEffect(() => {
257
537
  if (refSelect.current && isDropdownVisible) {
258
538
  const position = refSelect.current.getBoundingClientRect().bottom + DROPDOWN_MAX_HEIGHT + Number(theme.sizing[INPUT_SIZE_HEIGHT[size]].replace("rem", "")) * 16 + Number.parseInt(theme.space["5"], 10);
259
539
  const overflow = position - window.innerHeight + 32;
@@ -262,21 +542,23 @@ const Dropdown = ({
262
542
  const modalElement = currentModal?.ref.current;
263
543
  if (modalElement) {
264
544
  const parentElement = modalElement.parentNode;
265
- if (parentElement) {
545
+ if (parentElement instanceof HTMLElement) {
266
546
  parentElement.scrollBy({
267
547
  behavior: "smooth",
268
548
  top: overflow
269
549
  });
550
+ } else {
551
+ modalElement.scrollBy({
552
+ behavior: "smooth",
553
+ top: overflow
554
+ });
270
555
  }
271
556
  } else {
272
- window.scrollBy({
273
- behavior: "smooth",
274
- top: overflow
275
- });
557
+ window.scrollBy({ behavior: "smooth", top: overflow });
276
558
  }
277
559
  }
278
560
  }
279
- }, [isDropdownVisible, refSelect, size, ref.current]);
561
+ }, [isDropdownVisible, refSelect, size, modalContext, theme]);
280
562
  const resizeDropdown = useCallback(() => {
281
563
  if (refSelect.current && refSelect.current.getBoundingClientRect().width > 0) {
282
564
  setWidth(refSelect.current.getBoundingClientRect().width);
@@ -297,15 +579,34 @@ const Dropdown = ({
297
579
  setDefaultSearch(null);
298
580
  setSearch("");
299
581
  }
582
+ const eventKeydown = (event) => handleKeyDown(
583
+ event,
584
+ ref,
585
+ options,
586
+ searchBarActive,
587
+ setSearch,
588
+ setDefaultSearch,
589
+ search
590
+ );
300
591
  if (!searchable) {
301
- document.addEventListener("keydown", (event) => handleKeyDown(event, ref, options, searchBarActive, setSearch, setDefaultSearch, search));
592
+ document.addEventListener("keydown", eventKeydown);
302
593
  }
303
594
  return () => {
304
595
  if (!searchable) {
305
- document.removeEventListener("keydown", (event) => handleKeyDown(event, ref, options, searchBarActive, setSearch, setDefaultSearch, search));
596
+ document.removeEventListener("keydown", eventKeydown);
306
597
  }
307
598
  };
308
- }, [isDropdownVisible, searchBarActive, options, onSearch, search, refSelect, setDefaultSearch, setIsDropdownVisible, searchable]);
599
+ }, [
600
+ isDropdownVisible,
601
+ searchBarActive,
602
+ options,
603
+ onSearch,
604
+ search,
605
+ refSelect,
606
+ setDefaultSearch,
607
+ setIsDropdownVisible,
608
+ searchable
609
+ ]);
309
610
  const isEmpty = useMemo(() => {
310
611
  if (numberOfOptions === 0) {
311
612
  return true;
@@ -330,11 +631,51 @@ const Dropdown = ({
330
631
  }
331
632
  return null;
332
633
  }, [isEmpty, footer$1, setIsDropdownVisible]);
333
- return /* @__PURE__ */ jsx(Popup, { align: dropdownAlign ?? "start", className: dropdown, containerFullWidth: true, debounceDelay: 0, disableAnimation: true, hasArrow: false, hideOnClickOutside: true, id, maxWidth: maxWidth ?? refSelect.current?.offsetWidth, onClose: () => setIsDropdownVisible(false), placement: "bottom", portalTarget, ref, role: "dialog", tabIndex: -1, text: /* @__PURE__ */ jsxs(Stack, { children: [
334
- searchable && !isLoading && numberOfOptions >= 6 ? /* @__PURE__ */ jsx(SearchBarDropdown, { displayedOptions, placeholder, setSearchBarActive }) : null,
335
- /* @__PURE__ */ jsx(CreateDropdown, { defaultSearchValue, descriptionDirection, emptyState, isEmpty, isLoading, loadMore, optionalInfoPlacement }),
336
- computedFooter
337
- ] }), visible: isDropdownVisible, children });
634
+ return /* @__PURE__ */ jsx(
635
+ Popup,
636
+ {
637
+ align: dropdownAlign ?? "start",
638
+ className: dropdown,
639
+ containerFullWidth: true,
640
+ debounceDelay: 0,
641
+ disableAnimation: true,
642
+ hasArrow: false,
643
+ hideOnClickOutside: true,
644
+ id,
645
+ maxWidth: maxWidth ?? refSelect.current?.offsetWidth,
646
+ onClose: () => setIsDropdownVisible(false),
647
+ placement: "bottom",
648
+ portalTarget,
649
+ ref,
650
+ role: "dialog",
651
+ tabIndex: -1,
652
+ text: /* @__PURE__ */ jsxs(Stack, { children: [
653
+ searchable && !isLoading && numberOfOptions >= 6 ? /* @__PURE__ */ jsx(
654
+ SearchBarDropdown,
655
+ {
656
+ displayedOptions,
657
+ placeholder,
658
+ setSearchBarActive
659
+ }
660
+ ) : null,
661
+ /* @__PURE__ */ jsx(
662
+ CreateDropdown,
663
+ {
664
+ defaultSearchValue,
665
+ descriptionDirection,
666
+ emptyState,
667
+ isEmpty,
668
+ isLoading,
669
+ loadMore,
670
+ optionalInfoPlacement
671
+ }
672
+ ),
673
+ computedFooter
674
+ ] }),
675
+ visible: isDropdownVisible,
676
+ children
677
+ }
678
+ );
338
679
  };
339
680
  export {
340
681
  Dropdown