@loadsmart/loadsmart-ui 7.6.0 → 7.7.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/README.md +15 -1
  2. package/dist/DragDropFile.context-oKnUu6d3.js +33 -0
  3. package/dist/{DragDropFile.context-D-EBrXnw.js.map → DragDropFile.context-oKnUu6d3.js.map} +1 -1
  4. package/dist/index.js +9104 -253
  5. package/dist/index.js.map +1 -1
  6. package/dist/miranda-compatibility.theme-C_FEacSw.js +2528 -0
  7. package/dist/{miranda-compatibility.theme-ChPV-BBw.js.map → miranda-compatibility.theme-C_FEacSw.js.map} +1 -1
  8. package/dist/prop-B8LY6G2g.js +81 -0
  9. package/dist/{prop-BwhJNJHO.js.map → prop-B8LY6G2g.js.map} +1 -1
  10. package/dist/testing/index.js +282 -1
  11. package/dist/testing/index.js.map +1 -1
  12. package/dist/theming/index.js +22 -1
  13. package/dist/theming/index.js.map +1 -1
  14. package/dist/toArray-Dxb1kUxx.js +14 -0
  15. package/dist/{toArray-BW3gx_gH.js.map → toArray-Dxb1kUxx.js.map} +1 -1
  16. package/dist/tools/index.js +6 -1
  17. package/dist/tools/index.js.map +1 -1
  18. package/package.json +24 -54
  19. package/dist/DragDropFile.context-D-EBrXnw.js +0 -2
  20. package/dist/DragDropFile.context-jVTIKfj5.mjs +0 -29
  21. package/dist/DragDropFile.context-jVTIKfj5.mjs.map +0 -1
  22. package/dist/index.mjs +0 -8046
  23. package/dist/index.mjs.map +0 -1
  24. package/dist/miranda-compatibility.theme-ChPV-BBw.js +0 -2
  25. package/dist/miranda-compatibility.theme-DQDHkWzC.mjs +0 -2469
  26. package/dist/miranda-compatibility.theme-DQDHkWzC.mjs.map +0 -1
  27. package/dist/prop-5m3D4883.mjs +0 -54
  28. package/dist/prop-5m3D4883.mjs.map +0 -1
  29. package/dist/prop-BwhJNJHO.js +0 -2
  30. package/dist/testing/index.mjs +0 -228
  31. package/dist/testing/index.mjs.map +0 -1
  32. package/dist/theming/index.mjs +0 -20
  33. package/dist/theming/index.mjs.map +0 -1
  34. package/dist/toArray-BW3gx_gH.js +0 -2
  35. package/dist/toArray-DqgeO2ua.mjs +0 -8
  36. package/dist/toArray-DqgeO2ua.mjs.map +0 -1
  37. package/dist/tools/index.mjs +0 -7
  38. package/dist/tools/index.mjs.map +0 -1
  39. package/src/@types/@loadsmart/utilsFunction.d.ts +0 -5
  40. package/src/@types/@loadsmart/utilsObject.d.ts +0 -5
  41. package/src/@types/svg.d.ts +0 -4
  42. package/src/addons/Theme/register.js +0 -590
  43. package/src/common/BackButton/BackButton.tsx +0 -18
  44. package/src/common/BackButton/index.ts +0 -2
  45. package/src/common/CloseButton/CloseButton.tsx +0 -55
  46. package/src/common/CloseButton/index.ts +0 -2
  47. package/src/common/SelectionWrapper.tsx +0 -130
  48. package/src/components/Accordion/Accordion.context.tsx +0 -36
  49. package/src/components/Accordion/Accordion.stories.tsx +0 -186
  50. package/src/components/Accordion/Accordion.test.tsx +0 -209
  51. package/src/components/Accordion/Accordion.tsx +0 -233
  52. package/src/components/Accordion/index.ts +0 -2
  53. package/src/components/Banner/Banner.stories.tsx +0 -213
  54. package/src/components/Banner/Banner.test.tsx +0 -118
  55. package/src/components/Banner/Banner.tsx +0 -418
  56. package/src/components/Banner/index.tsx +0 -2
  57. package/src/components/Breadcrumbs/Breadbrumbs.test.tsx +0 -125
  58. package/src/components/Breadcrumbs/Breadcrumb.tsx +0 -92
  59. package/src/components/Breadcrumbs/Breadcrumbs.stories.tsx +0 -21
  60. package/src/components/Breadcrumbs/Breadcrumbs.tsx +0 -54
  61. package/src/components/Breadcrumbs/index.ts +0 -4
  62. package/src/components/Button/Button.stories.tsx +0 -174
  63. package/src/components/Button/Button.test.tsx +0 -57
  64. package/src/components/Button/Button.tsx +0 -576
  65. package/src/components/Button/index.tsx +0 -2
  66. package/src/components/Calendar/Calendar.helpers.ts +0 -15
  67. package/src/components/Calendar/Calendar.stories.tsx +0 -168
  68. package/src/components/Calendar/Calendar.test.tsx +0 -316
  69. package/src/components/Calendar/Calendar.tsx +0 -130
  70. package/src/components/Calendar/Calendar.types.ts +0 -68
  71. package/src/components/Calendar/Date.helper.test.ts +0 -847
  72. package/src/components/Calendar/Date.helper.ts +0 -461
  73. package/src/components/Calendar/DateFormat.helper.test.ts +0 -171
  74. package/src/components/Calendar/DateFormat.helper.ts +0 -195
  75. package/src/components/Calendar/Month.helper.test.ts +0 -187
  76. package/src/components/Calendar/Month.helper.ts +0 -172
  77. package/src/components/Calendar/PickerModeToggle.tsx +0 -61
  78. package/src/components/Calendar/Pickers/DayPicker.test.tsx +0 -85
  79. package/src/components/Calendar/Pickers/DayPicker.tsx +0 -127
  80. package/src/components/Calendar/Pickers/MonthPicker.test.tsx +0 -77
  81. package/src/components/Calendar/Pickers/MonthPicker.tsx +0 -51
  82. package/src/components/Calendar/Pickers/PickerButton.tsx +0 -119
  83. package/src/components/Calendar/Pickers/YearPicker.test.tsx +0 -75
  84. package/src/components/Calendar/Pickers/YearPicker.tsx +0 -52
  85. package/src/components/Calendar/index.ts +0 -10
  86. package/src/components/Calendar/useCalendar.ts +0 -190
  87. package/src/components/Calendar/usePickerMode.ts +0 -48
  88. package/src/components/Card/Card.stories.tsx +0 -117
  89. package/src/components/Card/Card.test.tsx +0 -139
  90. package/src/components/Card/Card.tsx +0 -106
  91. package/src/components/Card/CardTitle.tsx +0 -43
  92. package/src/components/Card/index.ts +0 -2
  93. package/src/components/Checkbox/Checkbox.stories.tsx +0 -79
  94. package/src/components/Checkbox/Checkbox.test.tsx +0 -66
  95. package/src/components/Checkbox/Checkbox.tsx +0 -170
  96. package/src/components/Checkbox/index.ts +0 -2
  97. package/src/components/DatePicker/DatePicker.stories.tsx +0 -113
  98. package/src/components/DatePicker/DatePicker.test.tsx +0 -174
  99. package/src/components/DatePicker/DatePicker.tsx +0 -140
  100. package/src/components/DatePicker/DatePicker.types.ts +0 -30
  101. package/src/components/DatePicker/DateRangePicker.stories.tsx +0 -128
  102. package/src/components/DatePicker/DateRangePicker.test.tsx +0 -267
  103. package/src/components/DatePicker/DateRangePicker.tsx +0 -110
  104. package/src/components/DatePicker/index.ts +0 -3
  105. package/src/components/DatePicker/useDatePicker.ts +0 -201
  106. package/src/components/DatePicker/useDateRangePicker.ts +0 -224
  107. package/src/components/Dialog/Dialog.stories.tsx +0 -227
  108. package/src/components/Dialog/Dialog.test.tsx +0 -74
  109. package/src/components/Dialog/Dialog.tsx +0 -139
  110. package/src/components/Dialog/index.tsx +0 -4
  111. package/src/components/Dialog/useDialog.tsx +0 -59
  112. package/src/components/DragDropFile/DragDropFile.context.tsx +0 -39
  113. package/src/components/DragDropFile/DragDropFile.stories.tsx +0 -183
  114. package/src/components/DragDropFile/DragDropFile.tsx +0 -11
  115. package/src/components/DragDropFile/components/DropZone.test.tsx +0 -108
  116. package/src/components/DragDropFile/components/DropZone.tsx +0 -145
  117. package/src/components/DragDropFile/components/FileItem.tsx +0 -117
  118. package/src/components/DragDropFile/components/FileList.test.tsx +0 -119
  119. package/src/components/DragDropFile/components/FileList.tsx +0 -47
  120. package/src/components/DragDropFile/components/Wrapper.tsx +0 -22
  121. package/src/components/DragDropFile/index.ts +0 -9
  122. package/src/components/DragDropFile/mocks.ts +0 -23
  123. package/src/components/DragDropFile/styles.tsx +0 -81
  124. package/src/components/DragDropFile/types.ts +0 -85
  125. package/src/components/Drawer/Drawer.stories.tsx +0 -83
  126. package/src/components/Drawer/Drawer.test.tsx +0 -90
  127. package/src/components/Drawer/Drawer.tsx +0 -225
  128. package/src/components/Drawer/index.ts +0 -4
  129. package/src/components/Dropdown/Dropdown.context.ts +0 -13
  130. package/src/components/Dropdown/Dropdown.fixtures.ts +0 -15
  131. package/src/components/Dropdown/Dropdown.stories.tsx +0 -259
  132. package/src/components/Dropdown/Dropdown.test.tsx +0 -173
  133. package/src/components/Dropdown/Dropdown.tsx +0 -141
  134. package/src/components/Dropdown/Dropdown.types.ts +0 -59
  135. package/src/components/Dropdown/DropdownMenu.tsx +0 -263
  136. package/src/components/Dropdown/DropdownTrigger.tsx +0 -368
  137. package/src/components/Dropdown/index.ts +0 -15
  138. package/src/components/Dropdown/useDropdown.test.ts +0 -96
  139. package/src/components/Dropdown/useDropdown.ts +0 -65
  140. package/src/components/EmptyState/EmptyState.mocks.tsx +0 -60
  141. package/src/components/EmptyState/EmptyState.stories.tsx +0 -239
  142. package/src/components/EmptyState/EmptyState.test.tsx +0 -101
  143. package/src/components/EmptyState/EmptyState.tsx +0 -22
  144. package/src/components/EmptyState/EmptyState.types.ts +0 -59
  145. package/src/components/EmptyState/EmptyStateWithIcon.tsx +0 -42
  146. package/src/components/EmptyState/EmptyStateWithIllustration.tsx +0 -72
  147. package/src/components/EmptyState/Illustration.tsx +0 -29
  148. package/src/components/EmptyState/index.ts +0 -4
  149. package/src/components/ErrorMessage/ErrorMessage.stories.tsx +0 -26
  150. package/src/components/ErrorMessage/ErrorMessage.test.tsx +0 -24
  151. package/src/components/ErrorMessage/ErrorMessage.tsx +0 -19
  152. package/src/components/ErrorMessage/index.ts +0 -2
  153. package/src/components/HighlightMatch/HighlightMatch.stories.tsx +0 -24
  154. package/src/components/HighlightMatch/HighlightMatch.test.tsx +0 -37
  155. package/src/components/HighlightMatch/HighlightMatch.tsx +0 -29
  156. package/src/components/HighlightMatch/index.ts +0 -2
  157. package/src/components/Icon/Icon.tsx +0 -55
  158. package/src/components/Icon/assets/back.svg +0 -4
  159. package/src/components/Icon/assets/burger-menu.svg +0 -3
  160. package/src/components/Icon/assets/calendar.svg +0 -5
  161. package/src/components/Icon/assets/caret-down.svg +0 -4
  162. package/src/components/Icon/assets/caret-left.svg +0 -4
  163. package/src/components/Icon/assets/caret-right-last.svg +0 -4
  164. package/src/components/Icon/assets/caret-right.svg +0 -4
  165. package/src/components/Icon/assets/check.svg +0 -4
  166. package/src/components/Icon/assets/chevron-down.svg +0 -3
  167. package/src/components/Icon/assets/circle.svg +0 -3
  168. package/src/components/Icon/assets/close.svg +0 -4
  169. package/src/components/Icon/assets/dots-horizontal.svg +0 -1
  170. package/src/components/Icon/assets/information.svg +0 -4
  171. package/src/components/Icon/assets/minus.svg +0 -4
  172. package/src/components/Icon/assets/plus.svg +0 -4
  173. package/src/components/Icon/assets/refresh.svg +0 -3
  174. package/src/components/Icon/assets/sort-asc.svg +0 -7
  175. package/src/components/Icon/assets/sort-desc.svg +0 -7
  176. package/src/components/Icon/assets/sort.svg +0 -7
  177. package/src/components/Icon/assets/upload.svg +0 -3
  178. package/src/components/Icon/assets/warning.svg +0 -4
  179. package/src/components/Icon/index.ts +0 -2
  180. package/src/components/IconFactory/IconFactory.fixtures.tsx +0 -31
  181. package/src/components/IconFactory/IconFactory.stories.tsx +0 -120
  182. package/src/components/IconFactory/IconFactory.test.tsx +0 -36
  183. package/src/components/IconFactory/IconFactory.tsx +0 -75
  184. package/src/components/IconFactory/index.ts +0 -2
  185. package/src/components/Label/Label.stories.tsx +0 -47
  186. package/src/components/Label/Label.test.tsx +0 -80
  187. package/src/components/Label/Label.tsx +0 -120
  188. package/src/components/Label/index.ts +0 -2
  189. package/src/components/Layout/Box.tsx +0 -98
  190. package/src/components/Layout/Grid.tsx +0 -42
  191. package/src/components/Layout/Group.tsx +0 -55
  192. package/src/components/Layout/Layout.stories.tsx +0 -412
  193. package/src/components/Layout/Layout.tsx +0 -19
  194. package/src/components/Layout/Layout.types.ts +0 -9
  195. package/src/components/Layout/Layout.utils.ts +0 -20
  196. package/src/components/Layout/Sidebar.tsx +0 -75
  197. package/src/components/Layout/Stack.tsx +0 -63
  198. package/src/components/Layout/Switcher.tsx +0 -48
  199. package/src/components/Layout/index.tsx +0 -8
  200. package/src/components/Link/Link.stories.tsx +0 -22
  201. package/src/components/Link/Link.test.tsx +0 -79
  202. package/src/components/Link/Link.tsx +0 -114
  203. package/src/components/Link/index.ts +0 -3
  204. package/src/components/Link/useSafeLink.ts +0 -49
  205. package/src/components/Loaders/LoadingBar.stories.tsx +0 -36
  206. package/src/components/Loaders/LoadingBar.test.tsx +0 -35
  207. package/src/components/Loaders/LoadingBar.tsx +0 -65
  208. package/src/components/Loaders/LoadingDots.stories.tsx +0 -69
  209. package/src/components/Loaders/LoadingDots.test.tsx +0 -22
  210. package/src/components/Loaders/LoadingDots.tsx +0 -68
  211. package/src/components/Loaders/Spinner.stories.tsx +0 -24
  212. package/src/components/Loaders/Spinner.test.tsx +0 -35
  213. package/src/components/Loaders/Spinner.tsx +0 -68
  214. package/src/components/Loaders/index.tsx +0 -3
  215. package/src/components/Modal/Modal.stories.tsx +0 -121
  216. package/src/components/Modal/Modal.test.tsx +0 -46
  217. package/src/components/Modal/Modal.tsx +0 -163
  218. package/src/components/Modal/index.tsx +0 -2
  219. package/src/components/Pagination/Pagination.constants.ts +0 -7
  220. package/src/components/Pagination/Pagination.helper.ts +0 -88
  221. package/src/components/Pagination/Pagination.stories.tsx +0 -29
  222. package/src/components/Pagination/Pagination.test.tsx +0 -102
  223. package/src/components/Pagination/Pagination.tsx +0 -34
  224. package/src/components/Pagination/Pagination.types.ts +0 -55
  225. package/src/components/Pagination/PaginationItem.tsx +0 -74
  226. package/src/components/Pagination/index.ts +0 -2
  227. package/src/components/Pagination/usePagination.test.ts +0 -188
  228. package/src/components/Pagination/usePagination.ts +0 -87
  229. package/src/components/Popover/Popover.stories.tsx +0 -50
  230. package/src/components/Popover/Popover.test.tsx +0 -22
  231. package/src/components/Popover/Popover.tsx +0 -110
  232. package/src/components/Popover/Popover.types.ts +0 -39
  233. package/src/components/Popover/index.ts +0 -11
  234. package/src/components/ProgressBar/ProgressBar.stories.tsx +0 -47
  235. package/src/components/ProgressBar/ProgressBar.test.tsx +0 -40
  236. package/src/components/ProgressBar/ProgressBar.tsx +0 -89
  237. package/src/components/ProgressBar/index.tsx +0 -2
  238. package/src/components/Radio/Radio.stories.tsx +0 -75
  239. package/src/components/Radio/Radio.test.tsx +0 -66
  240. package/src/components/Radio/Radio.tsx +0 -153
  241. package/src/components/Radio/index.ts +0 -2
  242. package/src/components/Section/Section.test.tsx +0 -35
  243. package/src/components/Section/Section.tsx +0 -66
  244. package/src/components/Section/Sections.stories.tsx +0 -56
  245. package/src/components/Section/index.ts +0 -2
  246. package/src/components/Select/Select.constants.ts +0 -12
  247. package/src/components/Select/Select.context.ts +0 -11
  248. package/src/components/Select/Select.fixtures.ts +0 -167
  249. package/src/components/Select/Select.stories.tsx +0 -780
  250. package/src/components/Select/Select.test.tsx +0 -1109
  251. package/src/components/Select/Select.tsx +0 -271
  252. package/src/components/Select/Select.types.ts +0 -148
  253. package/src/components/Select/SelectCreatableOption.tsx +0 -20
  254. package/src/components/Select/SelectEmpty.test.tsx +0 -15
  255. package/src/components/Select/SelectEmpty.tsx +0 -29
  256. package/src/components/Select/SelectOption.test.tsx +0 -78
  257. package/src/components/Select/SelectOption.tsx +0 -79
  258. package/src/components/Select/SelectTrigger.tsx +0 -83
  259. package/src/components/Select/components.tsx +0 -14
  260. package/src/components/Select/index.ts +0 -12
  261. package/src/components/Select/useSelect.helpers.test.ts +0 -184
  262. package/src/components/Select/useSelect.helpers.ts +0 -63
  263. package/src/components/Select/useSelect.test.ts +0 -207
  264. package/src/components/Select/useSelect.ts +0 -540
  265. package/src/components/Select/useSelectExternal.ts +0 -26
  266. package/src/components/SideNavigation/Logo/Logo.test.tsx +0 -19
  267. package/src/components/SideNavigation/Logo/Logo.tsx +0 -26
  268. package/src/components/SideNavigation/Logo/index.ts +0 -1
  269. package/src/components/SideNavigation/Menu/Menu.test.tsx +0 -65
  270. package/src/components/SideNavigation/Menu/Menu.tsx +0 -53
  271. package/src/components/SideNavigation/Menu/MenuBaseItem.tsx +0 -64
  272. package/src/components/SideNavigation/Menu/MenuExpandable.tsx +0 -107
  273. package/src/components/SideNavigation/Menu/MenuLink.tsx +0 -37
  274. package/src/components/SideNavigation/Menu/index.ts +0 -1
  275. package/src/components/SideNavigation/Separator/Separator.test.tsx +0 -14
  276. package/src/components/SideNavigation/Separator/Separator.tsx +0 -20
  277. package/src/components/SideNavigation/Separator/index.ts +0 -1
  278. package/src/components/SideNavigation/SideNavigation.stories.tsx +0 -69
  279. package/src/components/SideNavigation/SideNavigation.test.tsx +0 -21
  280. package/src/components/SideNavigation/SideNavigation.tsx +0 -47
  281. package/src/components/SideNavigation/index.ts +0 -5
  282. package/src/components/SideNavigation/useSideNavigation.ts +0 -36
  283. package/src/components/Steps/ProgressSteps/ProgressStep.tsx +0 -163
  284. package/src/components/Steps/ProgressSteps/ProgressSteps.tsx +0 -37
  285. package/src/components/Steps/ProgressSteps/index.ts +0 -1
  286. package/src/components/Steps/Steps.fixtures.ts +0 -11
  287. package/src/components/Steps/Steps.helpers.ts +0 -11
  288. package/src/components/Steps/Steps.stories.tsx +0 -65
  289. package/src/components/Steps/Steps.test.tsx +0 -78
  290. package/src/components/Steps/Steps.tsx +0 -53
  291. package/src/components/Steps/Steps.types.ts +0 -5
  292. package/src/components/Steps/StepsContext.ts +0 -5
  293. package/src/components/Steps/StepsStep.tsx +0 -58
  294. package/src/components/Steps/index.ts +0 -6
  295. package/src/components/Steps/useStep.test.tsx +0 -217
  296. package/src/components/Steps/useSteps.ts +0 -131
  297. package/src/components/Switch/Switch.stories.tsx +0 -65
  298. package/src/components/Switch/Switch.test.tsx +0 -60
  299. package/src/components/Switch/Switch.tsx +0 -209
  300. package/src/components/Switch/index.ts +0 -2
  301. package/src/components/Table/Selection.tsx +0 -202
  302. package/src/components/Table/Table.fixtures.ts +0 -101
  303. package/src/components/Table/Table.stories.tsx +0 -568
  304. package/src/components/Table/Table.test.tsx +0 -310
  305. package/src/components/Table/Table.tsx +0 -523
  306. package/src/components/Table/Table.types.ts +0 -93
  307. package/src/components/Table/TableSortHandle.tsx +0 -31
  308. package/src/components/Table/index.tsx +0 -2
  309. package/src/components/Table/useSortBy.test.ts +0 -96
  310. package/src/components/Table/useSortBy.ts +0 -92
  311. package/src/components/Table/useSortBy.types.ts +0 -21
  312. package/src/components/TablePagination/RowsPerPage.tsx +0 -81
  313. package/src/components/TablePagination/TablePagination.stories.tsx +0 -42
  314. package/src/components/TablePagination/TablePagination.styles.ts +0 -13
  315. package/src/components/TablePagination/TablePagination.test.tsx +0 -111
  316. package/src/components/TablePagination/TablePagination.tsx +0 -49
  317. package/src/components/TablePagination/TablePagination.types.ts +0 -69
  318. package/src/components/TablePagination/TablePaginationActions.tsx +0 -144
  319. package/src/components/TablePagination/index.ts +0 -2
  320. package/src/components/Tabs/Tabs.stories.tsx +0 -78
  321. package/src/components/Tabs/Tabs.test.tsx +0 -103
  322. package/src/components/Tabs/Tabs.tsx +0 -287
  323. package/src/components/Tabs/Tabs.types.ts +0 -7
  324. package/src/components/Tabs/TabsContext.ts +0 -10
  325. package/src/components/Tabs/index.ts +0 -2
  326. package/src/components/Tag/Tag.stories.tsx +0 -112
  327. package/src/components/Tag/Tag.test.tsx +0 -19
  328. package/src/components/Tag/Tag.tsx +0 -393
  329. package/src/components/Tag/index.ts +0 -2
  330. package/src/components/Text/Text.stories.tsx +0 -59
  331. package/src/components/Text/Text.test.tsx +0 -48
  332. package/src/components/Text/Text.tsx +0 -14
  333. package/src/components/Text/index.ts +0 -2
  334. package/src/components/TextField/TextField.stories.tsx +0 -90
  335. package/src/components/TextField/TextField.test.tsx +0 -36
  336. package/src/components/TextField/TextField.tsx +0 -244
  337. package/src/components/TextField/index.ts +0 -6
  338. package/src/components/TextField/useTextField.tsx +0 -26
  339. package/src/components/Textarea/Textarea.stories.tsx +0 -101
  340. package/src/components/Textarea/Textarea.test.tsx +0 -14
  341. package/src/components/Textarea/Textarea.tsx +0 -230
  342. package/src/components/Textarea/index.ts +0 -2
  343. package/src/components/Toast/Toast.stories.tsx +0 -50
  344. package/src/components/Toast/Toast.test.tsx +0 -24
  345. package/src/components/Toast/Toast.tsx +0 -141
  346. package/src/components/Toast/icons/close.svg +0 -3
  347. package/src/components/Toast/icons/danger.svg +0 -4
  348. package/src/components/Toast/icons/neutral.svg +0 -4
  349. package/src/components/Toast/icons/success.svg +0 -3
  350. package/src/components/Toast/icons/warning.svg +0 -4
  351. package/src/components/Toast/index.tsx +0 -2
  352. package/src/components/ToggleGroup/Toggle.test.tsx +0 -76
  353. package/src/components/ToggleGroup/Toggle.tsx +0 -158
  354. package/src/components/ToggleGroup/ToggleGroup.constants.ts +0 -16
  355. package/src/components/ToggleGroup/ToggleGroup.stories.tsx +0 -145
  356. package/src/components/ToggleGroup/ToggleGroup.test.tsx +0 -237
  357. package/src/components/ToggleGroup/ToggleGroup.tsx +0 -165
  358. package/src/components/ToggleGroup/ToggleGroup.types.ts +0 -35
  359. package/src/components/ToggleGroup/ToggleGroupContext.ts +0 -13
  360. package/src/components/ToggleGroup/index.ts +0 -3
  361. package/src/components/Tooltip/Tooltip.stories.tsx +0 -82
  362. package/src/components/Tooltip/Tooltip.test.tsx +0 -49
  363. package/src/components/Tooltip/Tooltip.tsx +0 -185
  364. package/src/components/Tooltip/index.ts +0 -2
  365. package/src/components/TopNavigation/Logo/Logo.test.tsx +0 -21
  366. package/src/components/TopNavigation/Logo/Logo.tsx +0 -20
  367. package/src/components/TopNavigation/Logo/index.ts +0 -1
  368. package/src/components/TopNavigation/Menu/Menu.test.tsx +0 -125
  369. package/src/components/TopNavigation/Menu/Menu.tsx +0 -62
  370. package/src/components/TopNavigation/Menu/MenuItemDropdown.tsx +0 -118
  371. package/src/components/TopNavigation/Menu/MenuItemIcon.tsx +0 -50
  372. package/src/components/TopNavigation/Menu/index.ts +0 -1
  373. package/src/components/TopNavigation/OpenSideNavButton/OpenSideNavButton.tsx +0 -28
  374. package/src/components/TopNavigation/OpenSideNavButton/index.ts +0 -1
  375. package/src/components/TopNavigation/TopNavigation.stories.tsx +0 -42
  376. package/src/components/TopNavigation/TopNavigation.tsx +0 -47
  377. package/src/components/TopNavigation/index.ts +0 -2
  378. package/src/components/VisuallyHidden/VisuallyHidden.mdx +0 -26
  379. package/src/components/VisuallyHidden/VisuallyHidden.stories.tsx +0 -32
  380. package/src/components/VisuallyHidden/VisuallyHidden.test.tsx +0 -18
  381. package/src/components/VisuallyHidden/VisuallyHidden.tsx +0 -6
  382. package/src/components/VisuallyHidden/index.ts +0 -1
  383. package/src/docs/tools/DatePickerEvent.stories.mdx +0 -108
  384. package/src/docs/tools/DragDropFileEvent.stories.mdx +0 -75
  385. package/src/docs/tools/conditional.stories.mdx +0 -251
  386. package/src/docs/tools/selectEvent.stories.mdx +0 -121
  387. package/src/hooks/useClickOutside/index.ts +0 -1
  388. package/src/hooks/useClickOutside/useClickOutside.test.tsx +0 -116
  389. package/src/hooks/useClickOutside/useClickOutside.ts +0 -65
  390. package/src/hooks/useDidMount/index.ts +0 -1
  391. package/src/hooks/useDidMount/useDidMount.test.tsx +0 -38
  392. package/src/hooks/useDidMount/useDidMount.ts +0 -20
  393. package/src/hooks/useFingerprint/index.ts +0 -1
  394. package/src/hooks/useFingerprint/useFingerprint.test.ts +0 -76
  395. package/src/hooks/useFingerprint/useFingerprint.ts +0 -94
  396. package/src/hooks/useFocusTrap/index.ts +0 -2
  397. package/src/hooks/useFocusTrap/useFocusTrap.stories.tsx +0 -87
  398. package/src/hooks/useFocusTrap/useFocusTrap.test.tsx +0 -129
  399. package/src/hooks/useFocusTrap/useFocusTrap.ts +0 -187
  400. package/src/hooks/useFocusWithin/index.ts +0 -2
  401. package/src/hooks/useFocusWithin/useFocusWithin.test.tsx +0 -71
  402. package/src/hooks/useFocusWithin/useFocusWithin.ts +0 -62
  403. package/src/hooks/useHeightExpansionToggler/index.ts +0 -2
  404. package/src/hooks/useHeightExpansionToggler/useHeightExpansionToggler.test.tsx +0 -85
  405. package/src/hooks/useHeightExpansionToggler/useHeightExpansionToggler.ts +0 -54
  406. package/src/hooks/useID/index.ts +0 -1
  407. package/src/hooks/useID/useID.ts +0 -18
  408. package/src/hooks/useSelectable/SelectableStrategy.test.ts +0 -424
  409. package/src/hooks/useSelectable/SelectableStrategy.ts +0 -143
  410. package/src/hooks/useSelectable/index.ts +0 -8
  411. package/src/hooks/useSelectable/useSelectable.test.ts +0 -221
  412. package/src/hooks/useSelectable/useSelectable.ts +0 -156
  413. package/src/hooks/useSelectable/useSelectable.types.ts +0 -45
  414. package/src/hooks/useWindowResize/index.ts +0 -1
  415. package/src/hooks/useWindowResize/useWindowResize.ts +0 -27
  416. package/src/index.ts +0 -188
  417. package/src/stories/assets/code-brackets.svg +0 -1
  418. package/src/stories/assets/colors.svg +0 -1
  419. package/src/stories/assets/comments.svg +0 -1
  420. package/src/stories/assets/direction.svg +0 -1
  421. package/src/stories/assets/flow.svg +0 -1
  422. package/src/stories/assets/plugin.svg +0 -1
  423. package/src/stories/assets/repo.svg +0 -1
  424. package/src/stories/assets/stackalt.svg +0 -1
  425. package/src/stories/introduction.stories.mdx +0 -57
  426. package/src/stories/startPage.stories.mdx +0 -95
  427. package/src/styles/activatable.tsx +0 -30
  428. package/src/styles/disableable.tsx +0 -45
  429. package/src/styles/ellipsizable.tsx +0 -14
  430. package/src/styles/focusable.tsx +0 -32
  431. package/src/styles/font.test.ts +0 -31
  432. package/src/styles/font.tsx +0 -40
  433. package/src/styles/hidden.tsx +0 -29
  434. package/src/styles/hoverable.tsx +0 -30
  435. package/src/styles/transition.tsx +0 -25
  436. package/src/styles/typography.test.ts +0 -93
  437. package/src/styles/typography.ts +0 -190
  438. package/src/testing/DatePickerEvent/DatePickerEvent.ts +0 -117
  439. package/src/testing/DatePickerEvent/DateRangePickerEvent.ts +0 -83
  440. package/src/testing/DatePickerEvent/index.ts +0 -2
  441. package/src/testing/DragDropFileEvent/DragDropFileEvent.ts +0 -56
  442. package/src/testing/DragDropFileEvent/index.ts +0 -1
  443. package/src/testing/SelectEvent/SelectEvent.test.tsx +0 -192
  444. package/src/testing/SelectEvent/SelectEvent.ts +0 -264
  445. package/src/testing/SelectEvent/index.ts +0 -1
  446. package/src/testing/getInterpolatedStyles/getInterpolatedStyles.ts +0 -25
  447. package/src/testing/getInterpolatedStyles/index.ts +0 -1
  448. package/src/testing/index.ts +0 -6
  449. package/src/testing/renderWithDragDropFileProvider/index.ts +0 -1
  450. package/src/testing/renderWithDragDropFileProvider/renderWithDragDropFileProvider.tsx +0 -28
  451. package/src/tests/generator.ts +0 -127
  452. package/src/tests/renderer.tsx +0 -39
  453. package/src/theming/index.ts +0 -42
  454. package/src/theming/themes/alice.theme.ts +0 -1022
  455. package/src/theming/themes/index.ts +0 -3
  456. package/src/theming/themes/loadsmart.theme.ts +0 -1019
  457. package/src/theming/themes/miranda-compatibility.theme.ts +0 -972
  458. package/src/theming/theming.helpers.ts +0 -95
  459. package/src/tools/conditional.test.ts +0 -166
  460. package/src/tools/conditional.ts +0 -127
  461. package/src/tools/index.ts +0 -2
  462. package/src/tools/prop.test.ts +0 -52
  463. package/src/tools/prop.ts +0 -36
  464. package/src/utils/toolset/awaitTo.ts +0 -24
  465. package/src/utils/toolset/flatten.ts +0 -3
  466. package/src/utils/toolset/formatBytes.test.ts +0 -45
  467. package/src/utils/toolset/formatBytes.ts +0 -18
  468. package/src/utils/toolset/get.ts +0 -2
  469. package/src/utils/toolset/getID.test.ts +0 -57
  470. package/src/utils/toolset/getID.ts +0 -93
  471. package/src/utils/toolset/getOrdinalSuffix.test.ts +0 -27
  472. package/src/utils/toolset/getOrdinalSuffix.ts +0 -15
  473. package/src/utils/toolset/highlightMatch.test.tsx +0 -32
  474. package/src/utils/toolset/highlightMatch.tsx +0 -32
  475. package/src/utils/toolset/interleave.test.ts +0 -40
  476. package/src/utils/toolset/interleave.ts +0 -23
  477. package/src/utils/toolset/isEmpty.ts +0 -2
  478. package/src/utils/toolset/isThenable.test.ts +0 -40
  479. package/src/utils/toolset/isThenable.ts +0 -14
  480. package/src/utils/toolset/keyboard.ts +0 -50
  481. package/src/utils/toolset/omit.ts +0 -2
  482. package/src/utils/toolset/pluralize.ts +0 -16
  483. package/src/utils/toolset/range.ts +0 -2
  484. package/src/utils/toolset/rem.ts +0 -7
  485. package/src/utils/toolset/styledCompounds.ts +0 -22
  486. package/src/utils/toolset/toArray.ts +0 -16
  487. package/src/utils/types/ColorScheme.ts +0 -3
  488. package/src/utils/types/EventLike.ts +0 -11
  489. package/src/utils/types/InterpolatedStyle.ts +0 -3
  490. package/src/utils/types/Status.ts +0 -8
@@ -1,1109 +0,0 @@
1
- import React from 'react'
2
- import { composeStories } from '@storybook/react'
3
-
4
- import { render } from '@testing-library/react'
5
-
6
- import { SelectableKeyTypeOptions, Fruit, FRUITS, USERS } from './Select.fixtures'
7
- import * as stories from './Select.stories'
8
- import generator from '../../tests/generator'
9
- import renderer, { act, screen, fire, waitFor } from '../../tests/renderer'
10
- import selectEvent from '../../testing/SelectEvent'
11
-
12
- import type { SelectProps, Option } from './Select.types'
13
- import Select from './Select'
14
- import type { Selectable } from 'hooks/useSelectable'
15
-
16
- const {
17
- Playground,
18
- SingleAsyncDatasource,
19
- SingleCustomOptionRendering,
20
- CreatableSync,
21
- CreatableAsync,
22
- } = composeStories(stories)
23
-
24
- describe('Select', () => {
25
- describe('Generic', () => {
26
- const setup = (overrides: Partial<SelectProps>) =>
27
- renderer(<Playground {...overrides} />).render()
28
-
29
- it('start collapsed', () => {
30
- setup({})
31
-
32
- screen.getByTestId('select-trigger-search-field')
33
- })
34
-
35
- it('transfer additional input props to SelectTrigger', () => {
36
- const props: Partial<SelectProps> = {
37
- getInputProps: () => ({
38
- minLength: 11,
39
- maxLength: 33,
40
- }),
41
- }
42
-
43
- setup({ ...props })
44
-
45
- const searchInput = screen.getByTestId('select-trigger-search-field')
46
-
47
- expect(searchInput).toHaveAttribute('minlength', '11')
48
- expect(searchInput).toHaveAttribute('maxlength', '33')
49
- })
50
-
51
- describe('when disabled', () => {
52
- it('does not expand with the available options when search input is clicked', () => {
53
- setup({ disabled: true })
54
-
55
- const searchInput = screen.getByLabelText('Select your favorite fruit')
56
-
57
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(false)
58
- expect(searchInput).toBeDisabled()
59
-
60
- fire.click(searchInput)
61
-
62
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(false)
63
- })
64
-
65
- it('does not expand with the available options when trigger handle is clicked', () => {
66
- setup({ disabled: true })
67
-
68
- const searchInput = screen.getByLabelText('Select your favorite fruit')
69
- const triggerHandle = screen.getByTestId('select-trigger-handle')
70
-
71
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(false)
72
- expect(triggerHandle).toBeDisabled()
73
-
74
- fire.click(triggerHandle)
75
-
76
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(false)
77
- })
78
- })
79
-
80
- describe('when enabled', () => {
81
- it('expands with the available options when search input is clicked', async () => {
82
- setup({})
83
-
84
- await waitFor(() => {
85
- expect(screen.getByTestId('select-trigger-handle')).toBeEnabled()
86
- })
87
-
88
- const searchInput = screen.getByLabelText('Select your favorite fruit')
89
-
90
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(false)
91
-
92
- fire.click(searchInput)
93
-
94
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(true)
95
-
96
- const options = await screen.findAllByRole('option')
97
-
98
- for (let i = 0; i < FRUITS.length; i++) {
99
- expect(options[i]).toHaveTextContent(FRUITS[i].label)
100
- }
101
- })
102
-
103
- it('expands with the available options when trigger handle is clicked', async () => {
104
- setup({})
105
-
106
- const triggerHandle = screen.getByTestId('select-trigger-handle')
107
-
108
- await waitFor(() => {
109
- expect(triggerHandle).toBeEnabled()
110
- })
111
-
112
- const searchInput = screen.getByLabelText('Select your favorite fruit')
113
-
114
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(false)
115
-
116
- fire.click(triggerHandle)
117
-
118
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(true)
119
-
120
- const options = await screen.findAllByRole('option')
121
-
122
- for (let i = 0; i < FRUITS.length; i++) {
123
- expect(options[i]).toHaveTextContent(FRUITS[i].label)
124
- }
125
- })
126
-
127
- it('expands only if a query is typed if the options list is empty', async () => {
128
- render(<Playground options={undefined} />)
129
-
130
- const searchInput = screen.getByLabelText('Select your favorite fruit')
131
- const triggerHandle = screen.getByTestId('select-trigger-handle')
132
-
133
- expect(triggerHandle).toBeDisabled()
134
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(false)
135
-
136
- /**
137
- * using userEvent.type goes beyond the event dispatching we need here to
138
- * make the select component to react and expand the menu; additionally,
139
- * it throws the `act` warning in `useClickOutide`'s `handleEvent`, but we do not have any testable evidence
140
- * that can make for a valid assertion.
141
- * that's why we use `fireEvent.change` instead of `userEvent.type`.
142
- */
143
- fire.change(searchInput, { target: { value: generator.word() } })
144
-
145
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(true)
146
-
147
- await waitFor(() => {
148
- expect(triggerHandle).toBeEnabled()
149
- })
150
- })
151
-
152
- it('shows correct options when options prop change', async () => {
153
- const { rerender } = render(<Playground options={undefined} />)
154
-
155
- const searchInput = screen.getByLabelText('Select your favorite fruit')
156
-
157
- expect(screen.getByTestId('select-trigger-handle')).toBeDisabled()
158
- expect(screen.queryByRole('listbox')).not.toBeInTheDocument()
159
-
160
- rerender(<Playground options={[...FRUITS]} />)
161
-
162
- await selectEvent.expand(searchInput)
163
-
164
- await waitFor(() => {
165
- screen.getAllByRole('option')
166
- })
167
-
168
- const items = screen.getAllByRole('option')
169
-
170
- for (let i = 0; i < FRUITS.length; i++) {
171
- expect(items[i]).toHaveTextContent(FRUITS[i].label)
172
- }
173
- })
174
-
175
- it('expands when user enters a search string', () => {
176
- setup({})
177
-
178
- const searchInput = screen.getByLabelText('Select your favorite fruit')
179
-
180
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(false)
181
-
182
- fire.change(searchInput, { target: { value: 'foo' } })
183
-
184
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(true)
185
- })
186
-
187
- it('filters the available options when user enters a search string', async () => {
188
- setup({})
189
-
190
- const searchInput = screen.getByLabelText('Select your favorite fruit')
191
- const searchedFruit = generator.pickone([...FRUITS])
192
-
193
- await selectEvent.search(searchedFruit.label, searchInput)
194
-
195
- const options = await selectEvent.getOptions(searchInput)
196
-
197
- expect(options.length).toBeGreaterThanOrEqual(1)
198
- expect(options[0]).toHaveTextContent(searchedFruit.label)
199
- })
200
-
201
- it('calls blur when focus is lost', async () => {
202
- const onBlur = jest.fn((event?: MouseEvent | TouchEvent | KeyboardEvent) => event)
203
-
204
- setup({ onBlur })
205
-
206
- const selectInput = screen.getByLabelText('Select your favorite fruit')
207
-
208
- await selectEvent.expand(selectInput)
209
-
210
- /**
211
- * we are using `act` with manually triggered elements so RTL waits for
212
- * all state changes that happen during click and key presses before proceeding to
213
- * the assetions.
214
- * If you remove these and replace with userEvent, you will see the `act` warning.
215
- */
216
- act(() => {
217
- selectInput.dispatchEvent(new MouseEvent('mousedown', { bubbles: true }))
218
- selectInput.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }))
219
- })
220
-
221
- act(() => {
222
- selectInput.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }))
223
- selectInput.dispatchEvent(new KeyboardEvent('keyup', { key: 'Escape', bubbles: true }))
224
- })
225
-
226
- await waitFor(() => {
227
- expect(onBlur).toHaveBeenCalled()
228
- })
229
-
230
- await selectEvent.expand(selectInput)
231
-
232
- act(() => {
233
- selectInput.dispatchEvent(new MouseEvent('mousedown', { bubbles: true }))
234
- selectInput.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }))
235
- })
236
-
237
- act(() => {
238
- document.body.dispatchEvent(new MouseEvent('mousedown', { bubbles: true }))
239
- document.body.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }))
240
- })
241
-
242
- await waitFor(() => {
243
- expect(onBlur).toHaveBeenCalled()
244
- })
245
- })
246
-
247
- it('shrinks when an option is selected', async () => {
248
- setup({})
249
-
250
- const searchInput = screen.getByLabelText('Select your favorite fruit')
251
- const searchedFruit = generator.pickone([...FRUITS])
252
-
253
- fire.change(searchInput, {
254
- target: { value: searchedFruit.label },
255
- })
256
-
257
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(true)
258
-
259
- await selectEvent.select(searchedFruit.label, searchInput)
260
-
261
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(false)
262
- })
263
- })
264
-
265
- describe('Single selection', () => {
266
- it('selects the clicked item', async () => {
267
- setup({})
268
-
269
- const searchInput = screen.getByLabelText('Select your favorite fruit')
270
- const selectedFruit = generator.pickone([...FRUITS])
271
-
272
- await selectEvent.select(selectedFruit.label, searchInput)
273
-
274
- expect(searchInput).toHaveDisplayValue(selectedFruit.label)
275
-
276
- const selectedOptions = await selectEvent.getSelectedOptions(searchInput)
277
- expect(selectedOptions).toHaveLength(1)
278
-
279
- expect(selectedOptions[0]).toHaveTextContent(selectedFruit.label)
280
- })
281
-
282
- it('initializes with a selected item', async () => {
283
- const selectedFruit = generator.pickone([...FRUITS])
284
-
285
- setup({
286
- value: selectedFruit as Option,
287
- })
288
-
289
- const searchInput = screen.getByLabelText('Select your favorite fruit')
290
- expect(searchInput).toHaveDisplayValue(selectedFruit.label)
291
-
292
- const selectedOptions = await selectEvent.getSelectedOptions(searchInput)
293
- expect(selectedOptions).toHaveLength(1)
294
-
295
- expect(selectedOptions[0]).toHaveTextContent(selectedFruit.label)
296
- })
297
-
298
- it('updates selected item after the initially selected item changes', async () => {
299
- const [selectedFruit, newSelectedFruit] = generator.pickset([...FRUITS], 2)
300
- const props = {
301
- value: selectedFruit as Option,
302
- }
303
-
304
- const { rerender } = render(<Playground {...props} />)
305
-
306
- const searchInput = screen.getByLabelText('Select your favorite fruit')
307
- expect(searchInput).toHaveDisplayValue(selectedFruit.label)
308
-
309
- let selectedOptions = await selectEvent.getSelectedOptions(searchInput)
310
- expect(selectedOptions).toHaveLength(1)
311
-
312
- expect(selectedOptions[0]).toHaveTextContent(selectedFruit.label)
313
-
314
- const newProps = {
315
- value: newSelectedFruit as Option,
316
- }
317
-
318
- rerender(<Playground {...newProps} />)
319
-
320
- expect(searchInput).toHaveDisplayValue(newSelectedFruit.label)
321
-
322
- selectedOptions = await selectEvent.getSelectedOptions(searchInput)
323
- expect(selectedOptions).toHaveLength(1)
324
-
325
- expect(selectedOptions[0]).toHaveTextContent(newSelectedFruit.label)
326
- })
327
-
328
- it('unselects the clicked item', async () => {
329
- const selectedFruit = generator.pickone([...FRUITS])
330
-
331
- setup({
332
- value: selectedFruit as Option,
333
- })
334
-
335
- const searchInput = screen.getByLabelText('Select your favorite fruit')
336
- expect(searchInput).toHaveDisplayValue(selectedFruit.label)
337
-
338
- const selectedOptions = await selectEvent.getSelectedOptions(searchInput)
339
- expect(selectedOptions).toHaveLength(1)
340
-
341
- expect(selectedOptions[0]).toHaveTextContent(selectedFruit.label)
342
-
343
- await selectEvent.unselect(selectedFruit.label, searchInput)
344
-
345
- expect(await selectEvent.getSelectedOptions(searchInput)).toHaveLength(0)
346
- expect(searchInput).toHaveDisplayValue('')
347
- })
348
-
349
- it('clears selection', async () => {
350
- const selectedFruit = generator.pickone([...FRUITS])
351
-
352
- setup({
353
- value: selectedFruit as Option,
354
- })
355
-
356
- const searchInput = screen.getByLabelText('Select your favorite fruit')
357
- expect(searchInput).toHaveDisplayValue(selectedFruit.label)
358
-
359
- const selectedOptions = await selectEvent.getSelectedOptions(searchInput)
360
- expect(selectedOptions).toHaveLength(1)
361
-
362
- expect(selectedOptions[0]).toHaveTextContent(selectedFruit.label)
363
-
364
- await selectEvent.clear(searchInput)
365
-
366
- expect(await selectEvent.getSelectedOptions(searchInput)).toHaveLength(0)
367
- expect(searchInput).toHaveDisplayValue('')
368
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(false)
369
- })
370
-
371
- it('removes the clear button', async () => {
372
- const selectedFruit = generator.pickone([...FRUITS])
373
-
374
- setup({
375
- value: selectedFruit as Option,
376
- hideClear: true,
377
- })
378
-
379
- const searchInput = screen.getByLabelText('Select your favorite fruit')
380
- expect(searchInput).toHaveDisplayValue(selectedFruit.label)
381
-
382
- const selectedOptions = await selectEvent.getSelectedOptions(searchInput)
383
- expect(selectedOptions).toHaveLength(1)
384
-
385
- expect(selectedOptions[0]).toHaveTextContent(selectedFruit.label)
386
-
387
- expect(screen.queryByTestId('select-trigger-clear')).not.toBeInTheDocument()
388
- })
389
- })
390
-
391
- describe('Multi selection', () => {
392
- it('selects multiple options', async () => {
393
- const [firstOption, secondOption] = generator.pickset([...FRUITS], 2)
394
-
395
- setup({ multiple: true })
396
-
397
- const searchInput = screen.getByLabelText('Select your favorite fruit')
398
- await selectEvent.select(firstOption.label, searchInput)
399
-
400
- expect(screen.getByTitle('1 selected option')).toHaveTextContent('1')
401
-
402
- await selectEvent.select(secondOption.label, searchInput)
403
-
404
- expect(screen.getByTitle('2 selected options')).toHaveTextContent('2')
405
-
406
- const selectedOptions = await selectEvent.getSelectedOptions(searchInput)
407
- expect(selectedOptions).toHaveLength(2)
408
-
409
- const [firstSelection, secondSelection] = selectedOptions
410
-
411
- expect(firstSelection).toHaveTextContent(firstOption.label)
412
- expect(secondSelection).toHaveTextContent(secondOption.label)
413
- })
414
-
415
- it('unselects a selected option keeping selected the others', async () => {
416
- const [firstOption, secondOption, thirdOption] = generator.pickset([...FRUITS], 3)
417
-
418
- setup({ multiple: true, value: [firstOption, secondOption, thirdOption] as Option[] })
419
-
420
- const searchInput = screen.getByLabelText('Select your favorite fruit')
421
- expect(await selectEvent.getSelectedOptions(searchInput)).toHaveLength(3)
422
-
423
- expect(screen.getByTitle('3 selected options')).toHaveTextContent('3')
424
-
425
- await selectEvent.unselect(secondOption.label, searchInput)
426
-
427
- const selectedOptions = await selectEvent.getSelectedOptions(searchInput)
428
- expect(selectedOptions).toHaveLength(2)
429
-
430
- const [firstSelection, secondSelection] = selectedOptions
431
-
432
- expect(firstSelection).toHaveTextContent(firstOption.label)
433
- expect(secondSelection).toHaveTextContent(thirdOption.label)
434
- })
435
-
436
- it('clears all selections when clicking the counter close button', async () => {
437
- const [firstOption, secondOption, thirdOption] = generator.pickset([...FRUITS], 3)
438
- setup({ multiple: true, value: [firstOption, secondOption, thirdOption] as Option[] })
439
-
440
- const searchInput = screen.getByLabelText('Select your favorite fruit')
441
- expect(await selectEvent.getSelectedOptions(searchInput)).toHaveLength(3)
442
-
443
- expect(screen.getByTitle('3 selected options')).toHaveTextContent('3')
444
-
445
- await selectEvent.clear(searchInput)
446
-
447
- expect(screen.queryByTestId('select-trigger-clear-counter')).not.toBeInTheDocument()
448
-
449
- expect(await selectEvent.getSelectedOptions(searchInput)).toHaveLength(0)
450
- })
451
- })
452
- })
453
-
454
- describe('Async Datasources', () => {
455
- const setup = (overrides: Partial<SelectProps>) =>
456
- renderer(<SingleAsyncDatasource {...overrides} />).render()
457
-
458
- it('expands with the available options when search input is clicked', async () => {
459
- setup({})
460
-
461
- await waitFor(() => {
462
- expect(screen.getByTestId('select-trigger-handle')).toBeEnabled()
463
- })
464
-
465
- const searchInput = screen.getByLabelText('Select the project manager')
466
-
467
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(false)
468
-
469
- fire.click(searchInput)
470
-
471
- await waitFor(() => {
472
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(true)
473
- })
474
-
475
- const options = await selectEvent.getOptions(searchInput)
476
-
477
- for (let i = 0; i < USERS.length; i++) {
478
- expect(options[i]).toHaveTextContent(USERS[i].name)
479
- }
480
- })
481
-
482
- it('expands with the available options when trigger handle is clicked', async () => {
483
- setup({})
484
-
485
- const searchInput = screen.getByLabelText('Select the project manager')
486
-
487
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(false)
488
-
489
- await selectEvent.expand(searchInput)
490
-
491
- expect(selectEvent.isMenuExpanded(searchInput)).toBe(true)
492
-
493
- const options = await selectEvent.getOptions(searchInput)
494
-
495
- for (let i = 0; i < USERS.length; i++) {
496
- expect(options[i]).toHaveTextContent(USERS[i].name)
497
- }
498
- })
499
-
500
- it('filters the available options when user enters a search string', async () => {
501
- setup({})
502
-
503
- const searchInput = screen.getByLabelText('Select the project manager')
504
- const searchedUser = generator.pickone([...USERS])
505
-
506
- await selectEvent.search(searchedUser.name, searchInput)
507
-
508
- const options = await selectEvent.getOptions(searchInput)
509
-
510
- expect(options.length).toBe(1)
511
- expect(options[0]).toHaveTextContent(searchedUser.name)
512
- })
513
- })
514
-
515
- describe('Override components', () => {
516
- const getOptionText = (option: Fruit) => `${option.label}family: ${option.family}`
517
- const setup = (overrides: Partial<SelectProps>) =>
518
- renderer(<SingleCustomOptionRendering {...overrides} />).render()
519
- const CreatableOption = () => {
520
- return (
521
- <Select.CreatableOption data-testid="custom-creatable">Add item</Select.CreatableOption>
522
- )
523
- }
524
-
525
- it.each([[{ multiple: true }], [{ multiple: false }]])(
526
- 'overrides the option component with %s',
527
- async (props) => {
528
- setup(props)
529
-
530
- const searchInput = screen.getByLabelText('Select your favorite fruit')
531
- await selectEvent.expand(searchInput)
532
-
533
- const items = screen.getAllByTestId('custom-option')
534
- expect(items).toHaveLength(FRUITS.length)
535
-
536
- for (let i = 0; i < FRUITS.length; i++) {
537
- expect(items[i]).toHaveTextContent(getOptionText(FRUITS[i]))
538
- }
539
- }
540
- )
541
-
542
- it('overrides the option component with initial value', async () => {
543
- const selectedFruit = generator.pickone([...FRUITS])
544
-
545
- setup({ value: selectedFruit as Option })
546
-
547
- const searchInput = screen.getByLabelText('Select your favorite fruit')
548
- await selectEvent.expand(searchInput)
549
-
550
- const customOptions = screen.getAllByTestId('custom-option')
551
- expect(customOptions).toHaveLength(FRUITS.length)
552
-
553
- const selectedOptions = await selectEvent.getSelectedOptions(searchInput)
554
-
555
- expect(selectedOptions).toHaveLength(1)
556
- expect(selectedOptions[0]).toHaveTextContent(selectedFruit.label)
557
- })
558
-
559
- it('selects custom item clicked', async () => {
560
- const selectedFruit = generator.pickone<Fruit>([...FRUITS])
561
-
562
- setup({})
563
-
564
- const searchInput = screen.getByLabelText('Select your favorite fruit')
565
- const optionText = getOptionText(selectedFruit)
566
-
567
- await selectEvent.select(optionText, searchInput)
568
- const selectedOptions = await selectEvent.getSelectedOptions(searchInput)
569
-
570
- expect(searchInput).toHaveDisplayValue(selectedFruit.label)
571
- expect(selectedOptions).toHaveLength(1)
572
- expect(selectedOptions[0]).toHaveTextContent(optionText)
573
- })
574
-
575
- it('selects multiple clicked custom items', async () => {
576
- const SELECTED_OPTIONS_AMOUNT = 2
577
- const options = generator.pickset([...FRUITS], SELECTED_OPTIONS_AMOUNT)
578
-
579
- setup({ multiple: true })
580
-
581
- const searchInput = screen.getByLabelText('Select your favorite fruit')
582
-
583
- for await (const option of options) {
584
- const optionText = getOptionText(option)
585
- await selectEvent.select(optionText, searchInput)
586
- }
587
-
588
- const selectedOptions = await selectEvent.getSelectedOptions(searchInput)
589
- expect(selectedOptions).toHaveLength(SELECTED_OPTIONS_AMOUNT)
590
-
591
- for await (const [index, option] of options.entries()) {
592
- const optionText = getOptionText(option)
593
- expect(selectedOptions[index]).toHaveTextContent(optionText)
594
- }
595
- })
596
-
597
- it.each([[{ multiple: true }], [{ multiple: false }]])(
598
- 'overrides the empty component with %s',
599
- async (props) => {
600
- const Empty = () => {
601
- return <Select.Empty data-testid="custom-empty">No fruit found.</Select.Empty>
602
- }
603
- setup({
604
- ...props,
605
- components: { Empty },
606
- })
607
-
608
- fire.change(screen.getByTestId('select-trigger-search-field'), {
609
- target: { value: 'foo' },
610
- })
611
-
612
- expect(await screen.findByTestId('custom-empty')).toHaveTextContent('No fruit found.')
613
- }
614
- )
615
-
616
- it.each([[{ multiple: true }], [{ multiple: false }]])(
617
- 'overrides the creatable option component - %s',
618
- async (args) => {
619
- setup({
620
- components: { CreatableOption },
621
- onCreate: jest.fn(),
622
- ...args,
623
- })
624
-
625
- fire.change(screen.getByTestId('select-trigger-search-field'), {
626
- target: { value: 'foo' },
627
- })
628
-
629
- await waitFor(() => {
630
- expect(screen.getByTestId('custom-creatable')).toHaveTextContent('Add item')
631
- })
632
- }
633
- )
634
-
635
- it.each([[{ multiple: false }], [{ multiple: true }]])(
636
- 'calls onCreate when custom creatable option is clicked - %s',
637
- async (args) => {
638
- const onCreate = jest.fn()
639
- setup({
640
- components: { CreatableOption },
641
- onCreate,
642
- ...args,
643
- })
644
-
645
- const searchInput = screen.getByLabelText('Select your favorite fruit')
646
-
647
- await act(async () => {
648
- fire.change(searchInput, {
649
- target: { value: 'foo' },
650
- })
651
-
652
- const creatableOption = await screen.findByTestId('custom-creatable')
653
-
654
- fire.click(creatableOption)
655
- })
656
-
657
- expect(onCreate).toBeCalledWith('foo')
658
- }
659
- )
660
- })
661
-
662
- describe('Creatable sync', () => {
663
- const setup = (overrides: Partial<SelectProps>) =>
664
- renderer(<CreatableSync {...overrides} />).render()
665
- it.each([[{ multiple: false }], [{ multiple: true }]])(
666
- 'does not render the creatable option when onCreate callback is not provided - %s',
667
- async (args) => {
668
- setup({ onCreate: null as unknown as undefined, ...args })
669
-
670
- const searchInput = screen.getByLabelText('Select your favorite fruit')
671
- fire.change(searchInput, {
672
- target: { value: 'foo' },
673
- })
674
-
675
- await waitFor(() => {
676
- screen.getByText('No results found.')
677
- expect(screen.queryByText('Add "foo"')).not.toBeInTheDocument()
678
- })
679
- }
680
- )
681
-
682
- it.each([[{ multiple: false }], [{ multiple: true }]])(
683
- 'renders creatable option when onCreate callback is provided - %s',
684
- async (args) => {
685
- setup({ ...args })
686
- const searchInput = screen.getByLabelText('Select your favorite fruit')
687
- fire.change(searchInput, {
688
- target: { value: 'foo' },
689
- })
690
- await waitFor(() => {
691
- expect(screen.getByText('Add "foo"')).toBeInTheDocument()
692
- })
693
- }
694
- )
695
-
696
- it.each([[{ multiple: false }], [{ multiple: true }]])(
697
- 'renders creatable option at the end of the list when the entered query is not equal one of the available options - %s',
698
- async (args) => {
699
- setup({ ...args })
700
- const { label: availableOption } = generator.pickone([...FRUITS])
701
- const query = availableOption.slice(0, availableOption.length - 1)
702
- const searchInput = screen.getByLabelText('Select your favorite fruit')
703
-
704
- fire.change(searchInput, {
705
- target: { value: query },
706
- })
707
-
708
- await waitFor(() => {
709
- expect(screen.getByLabelText(availableOption)).toBeInTheDocument()
710
- })
711
- expect(screen.getByText(`Add "${query}"`)).toBeInTheDocument()
712
- }
713
- )
714
-
715
- it.each([[{ multiple: false }], [{ multiple: true }]])(
716
- 'does not render creatable option at the end of the list when the onCreate prop is not provided - %s',
717
- async (args) => {
718
- setup({
719
- onCreate: null as unknown as undefined,
720
- ...args,
721
- })
722
- const { label: availableOption } = generator.pickone([...FRUITS])
723
- const query = availableOption.slice(0, availableOption.length - 1)
724
- const searchInput = screen.getByLabelText('Select your favorite fruit')
725
-
726
- fire.change(searchInput, {
727
- target: { value: query },
728
- })
729
-
730
- await screen.findByLabelText(availableOption)
731
- await waitFor(() => {
732
- expect(screen.queryByText(`Add "${query}"`)).not.toBeInTheDocument()
733
- })
734
- }
735
- )
736
-
737
- it.each([[{ multiple: false }], [{ multiple: true }]])(
738
- 'does not render creatable option at the end of the list when the entered query is equal one of the available options - %s',
739
- async (args) => {
740
- setup({
741
- ...args,
742
- })
743
- const { label: availableOption } = generator.pickone([...FRUITS])
744
- const searchInput = screen.getByLabelText('Select your favorite fruit')
745
-
746
- fire.change(searchInput, {
747
- target: { value: availableOption },
748
- })
749
-
750
- await screen.findByLabelText(availableOption)
751
- await waitFor(() => {
752
- expect(screen.queryByText(`Add "${availableOption}"`)).not.toBeInTheDocument()
753
- })
754
- }
755
- )
756
-
757
- it.each([[{ multiple: false }], [{ multiple: true }]])(
758
- 'does not render creatable option when no query is provided - %s',
759
- async (args) => {
760
- setup({
761
- ...args,
762
- })
763
- const { label: availableOption } = generator.pickone([...FRUITS])
764
- const searchInput = screen.getByLabelText('Select your favorite fruit')
765
-
766
- await selectEvent.expand(searchInput)
767
-
768
- await screen.findByLabelText(availableOption)
769
- await waitFor(() => {
770
- expect(screen.queryByText('Add ""')).not.toBeInTheDocument()
771
- })
772
- }
773
- )
774
-
775
- it.each([[{ multiple: false }], [{ multiple: true }]])(
776
- 'calls onCreate when creatable option is clicked - %s',
777
- async (args) => {
778
- const onCreate = jest.fn()
779
- setup({ onCreate, ...args })
780
- const searchInput = screen.getByLabelText('Select your favorite fruit')
781
-
782
- await act(async () => {
783
- fire.change(searchInput, {
784
- target: { value: 'foo' },
785
- })
786
-
787
- const creatableOption = await screen.findByText('Add "foo"')
788
-
789
- fire.click(creatableOption)
790
- })
791
-
792
- expect(onCreate).toBeCalledWith('foo')
793
- }
794
- )
795
-
796
- it.each([[{ multiple: false }], [{ multiple: true }]])(
797
- 'calls onChange with the new item when onCreate returns the item - %s',
798
- async (args) => {
799
- const query = 'foo'
800
- const newItem: Fruit = { label: query, value: query, family: '' }
801
- const value = args.multiple ? [newItem] : newItem
802
- const onChange = jest.fn()
803
- const onCreate = jest.fn().mockReturnValue(newItem)
804
-
805
- setup({ onCreate, onChange, ...args })
806
-
807
- const searchInput = screen.getByLabelText('Select your favorite fruit')
808
-
809
- await act(async () => {
810
- fire.change(searchInput, {
811
- target: { value: query },
812
- })
813
-
814
- const creatableOption = await screen.findByText(`Add "${query}"`)
815
-
816
- fire.click(creatableOption)
817
- })
818
-
819
- expect(onChange).toBeCalledWith({
820
- target: {
821
- id: 'select-creatable-sync',
822
- name: 'select-creatable-sync',
823
- value,
824
- },
825
- })
826
- }
827
- )
828
-
829
- it.each([[{ multiple: false }], [{ multiple: true }]])(
830
- "does not call onChange when onCreate doesn't return the item - %s",
831
- async (args) => {
832
- const query = 'foo'
833
- const onChange = jest.fn()
834
- const onCreate = jest.fn()
835
-
836
- setup({ onCreate, onChange, ...args })
837
-
838
- const searchInput = screen.getByLabelText('Select your favorite fruit')
839
-
840
- await act(async () => {
841
- fire.change(searchInput, {
842
- target: { value: query },
843
- })
844
-
845
- const creatableOption = await screen.findByText(`Add "${query}"`)
846
-
847
- fire.click(creatableOption)
848
- })
849
-
850
- expect(onChange).not.toBeCalled()
851
- }
852
- )
853
-
854
- it.each([[{ multiple: false }], [{ multiple: true }]])(
855
- 'fetches items after onCreate callback is called - %s',
856
- async (args) => {
857
- const dsFetch = jest.fn()
858
- const datasources = [
859
- () => ({
860
- type: 'user',
861
- adapter: {
862
- getKey: jest.fn().mockReturnValue('foo'),
863
- getLabel: jest.fn().mockReturnValue('foo'),
864
- },
865
- fetch: dsFetch,
866
- }),
867
- ]
868
- setup({ datasources, ...args })
869
- const searchInput = screen.getByLabelText('Select your favorite fruit')
870
-
871
- await act(async () => {
872
- fire.change(searchInput, {
873
- target: { value: 'foo' },
874
- })
875
-
876
- const creatableOption = await screen.findByText('Add "foo"')
877
-
878
- fire.click(creatableOption)
879
- })
880
-
881
- await waitFor(() => {
882
- expect(dsFetch).toBeCalledTimes(2)
883
- })
884
- expect(dsFetch).lastCalledWith({ query: 'foo', regex: expect.anything() })
885
- }
886
- )
887
-
888
- it.each([[{ multiple: false }], [{ multiple: true }]])(
889
- 'renders fixed creatable option when isValidNewOption is passed - %s',
890
- async (args) => {
891
- setup({ ...args, isValidNewOption: true })
892
-
893
- const searchInput = screen.getByLabelText('Select your favorite fruit')
894
- await selectEvent.expand(searchInput)
895
-
896
- await waitFor(() => {
897
- expect(screen.getByText(/add ""/i)).toBeInTheDocument()
898
- })
899
- }
900
- )
901
-
902
- it.each([[{ multiple: false }], [{ multiple: true }]])(
903
- 'renders creatable option as first item - %s',
904
- async (args) => {
905
- setup({ ...args, isValidNewOption: true, createOptionPosition: 'first' })
906
-
907
- const searchInput = screen.getByLabelText('Select your favorite fruit')
908
- await selectEvent.expand(searchInput)
909
-
910
- await waitFor(() => {
911
- expect(screen.getByText(/add ""/i)).toBeInTheDocument()
912
- })
913
- expect(screen.getAllByTestId('dropdown-menu-item')[0]).toHaveTextContent(/add ""/i)
914
- }
915
- )
916
-
917
- it.each([[{ multiple: false }], [{ multiple: true }]])(
918
- 'renders creatable option as last item - %s',
919
- async (args) => {
920
- setup({ ...args, isValidNewOption: true, createOptionPosition: 'last' })
921
-
922
- const searchInput = screen.getByLabelText('Select your favorite fruit')
923
- await selectEvent.expand(searchInput)
924
-
925
- await waitFor(() => {
926
- expect(screen.getByText(/add ""/i)).toBeInTheDocument()
927
- })
928
- const options = screen.getAllByTestId('dropdown-menu-item')
929
- expect(options[options.length - 1]).toHaveTextContent(/add ""/i)
930
- }
931
- )
932
-
933
- it.each([[{ multiple: false }], [{ multiple: true }]])(
934
- 'keep creatable option on the list even when any value is selected - %s',
935
- async (args) => {
936
- const CreatableOption = () => {
937
- return (
938
- <Select.CreatableOption data-testid="custom-creatable">Add item</Select.CreatableOption>
939
- )
940
- }
941
- const value = generator.pickone([...FRUITS]) as Selectable
942
- setup({
943
- ...args,
944
- isValidNewOption: true,
945
- createOptionPosition: 'first',
946
- value,
947
- components: {
948
- CreatableOption,
949
- },
950
- })
951
-
952
- const searchInput = screen.getByLabelText('Select your favorite fruit')
953
- await selectEvent.expand(searchInput)
954
- expect(await screen.findByText(/add item/i)).toBeVisible()
955
- }
956
- )
957
-
958
- it.each([[{ multiple: false }], [{ multiple: true }]])(
959
- 'show creatable option on the list even when option list is empty - %s',
960
- async (args) => {
961
- const CreatableOption = () => {
962
- return <Select.CreatableOption>Add item</Select.CreatableOption>
963
- }
964
- setup({
965
- ...args,
966
- isValidNewOption: true,
967
- createOptionPosition: 'first',
968
- options: [],
969
- components: {
970
- CreatableOption,
971
- },
972
- })
973
-
974
- const searchInput = screen.getByLabelText('Select your favorite fruit')
975
- await selectEvent.expand(searchInput)
976
- expect(await screen.findByText(/add item/i)).toBeVisible()
977
- }
978
- )
979
- })
980
-
981
- describe('Creatable Async', () => {
982
- const setup = (overrides: Partial<SelectProps>) =>
983
- renderer(<CreatableAsync {...overrides} />).render()
984
-
985
- it('fetchs items after call onCreate callback - async', async () => {
986
- const dsFetch = jest.fn()
987
- const onCreate = jest.fn()
988
- const datasources = [
989
- () => ({
990
- type: 'user',
991
- adapter: {
992
- getKey: jest.fn().mockReturnValue('foo'),
993
- getLabel: jest.fn().mockReturnValue('foo'),
994
- },
995
- fetch: dsFetch,
996
- }),
997
- ]
998
- setup({ datasources, onCreate })
999
- const searchInput = screen.getByLabelText('Select the project manager')
1000
-
1001
- fire.change(searchInput, {
1002
- target: { value: 'foo' },
1003
- })
1004
- const creatableOption = await screen.findByText('Add "foo"')
1005
- fire.click(creatableOption)
1006
-
1007
- await waitFor(
1008
- () => {
1009
- expect(dsFetch).toBeCalledTimes(2)
1010
- },
1011
- { timeout: 5000 }
1012
- )
1013
- expect(dsFetch).lastCalledWith({ query: 'foo', regex: expect.anything() })
1014
- })
1015
-
1016
- it.each([[{ multiple: false }], [{ multiple: true }]])(
1017
- 'calls onChange with the new item when onCreate resolves the item - %s',
1018
- async (args) => {
1019
- const query = 'foo'
1020
- const newItem = { uuid: query, name: query, _type: 'user' }
1021
- const value = args.multiple ? [newItem] : newItem
1022
- const onChange = jest.fn()
1023
- const onCreate = jest.fn().mockResolvedValue(newItem)
1024
-
1025
- setup({ onCreate, onChange, ...args })
1026
- const searchInput = screen.getByLabelText('Select the project manager')
1027
-
1028
- fire.change(searchInput, {
1029
- target: { value: query },
1030
- })
1031
- await waitFor(() => screen.findByTestId('select-trigger-loading'))
1032
-
1033
- const creatableOption = await screen.findByText(`Add "${query}"`, undefined, {
1034
- timeout: 2500,
1035
- })
1036
- fire.click(creatableOption)
1037
-
1038
- await waitFor(() => {
1039
- expect(onChange).toBeCalledWith({
1040
- target: {
1041
- id: 'select-creatable-async',
1042
- name: 'select-creatable-async',
1043
- value,
1044
- },
1045
- })
1046
- })
1047
- }
1048
- )
1049
- })
1050
-
1051
- describe('SelectableKeyType Options', () => {
1052
- const setup = (overrides: Partial<SelectProps>) =>
1053
- renderer(<Playground {...overrides} options={SelectableKeyTypeOptions} />).render()
1054
-
1055
- const expectedValue = (value: unknown) => ({
1056
- target: {
1057
- id: 'select-playground',
1058
- name: 'select-playground',
1059
- value,
1060
- },
1061
- })
1062
-
1063
- it.each(SelectableKeyTypeOptions)('selects single option: %s', async (option) => {
1064
- const onChange = jest.fn()
1065
- setup({ onChange })
1066
-
1067
- const searchInput = screen.getByLabelText('Select your favorite fruit')
1068
-
1069
- await selectEvent.select(option.label, searchInput)
1070
- const selectedOptions = await selectEvent.getSelectedOptions(searchInput)
1071
- expect(selectedOptions).toHaveLength(1)
1072
- expect(selectedOptions[0]).toHaveTextContent(option.label)
1073
- expect(onChange).toBeCalledWith(expectedValue({ _type: 'generic', ...option }))
1074
- })
1075
-
1076
- it.each(SelectableKeyTypeOptions)('selects multiple options %s', async (option) => {
1077
- const onChange = jest.fn()
1078
- setup({ onChange, multiple: true })
1079
-
1080
- const searchInput = screen.getByLabelText('Select your favorite fruit')
1081
-
1082
- await selectEvent.select(option.label, searchInput)
1083
- const selectedOptions = await selectEvent.getSelectedOptions(searchInput)
1084
- expect(selectedOptions).toHaveLength(1)
1085
- expect(selectedOptions[0]).toHaveTextContent(option.label)
1086
- expect(onChange).toBeCalledWith(expectedValue([{ _type: 'generic', ...option }]))
1087
- })
1088
-
1089
- it('selects all options', async () => {
1090
- setup({ multiple: true })
1091
-
1092
- const searchInput = screen.getByLabelText('Select your favorite fruit')
1093
- for (let i = 0; i < SelectableKeyTypeOptions.length; i++) {
1094
- await selectEvent.select(SelectableKeyTypeOptions[i].label, searchInput)
1095
- }
1096
-
1097
- const selectedOptions = await selectEvent.getSelectedOptions(searchInput)
1098
- expect(selectedOptions).toHaveLength(SelectableKeyTypeOptions.length)
1099
-
1100
- for (let i = 0; i < selectedOptions.length; i++) {
1101
- const element = selectedOptions[i]
1102
- expect(element).toHaveTextContent(SelectableKeyTypeOptions[i].label)
1103
- }
1104
-
1105
- await selectEvent.expand(searchInput)
1106
- expect(screen.getByText('No more options.')).toBeInTheDocument()
1107
- })
1108
- })
1109
- })