@loadsmart/loadsmart-ui 7.5.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 (492) 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-C_FEacSw.js.map +1 -0
  8. package/dist/prop-B8LY6G2g.js +81 -0
  9. package/dist/{prop-pWSEOvKc.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-Dxb1kUxx.js.map +1 -0
  16. package/dist/tools/index.js +6 -1
  17. package/dist/tools/index.js.map +1 -1
  18. package/package.json +28 -57
  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 -9310
  23. package/dist/index.mjs.map +0 -1
  24. package/dist/miranda-compatibility.theme-C3Dt-45K.js +0 -2
  25. package/dist/miranda-compatibility.theme-C3Dt-45K.js.map +0 -1
  26. package/dist/miranda-compatibility.theme-ClCWbTIT.mjs +0 -2525
  27. package/dist/miranda-compatibility.theme-ClCWbTIT.mjs.map +0 -1
  28. package/dist/prop-C4yDbi0C.mjs +0 -53
  29. package/dist/prop-C4yDbi0C.mjs.map +0 -1
  30. package/dist/prop-pWSEOvKc.js +0 -2
  31. package/dist/testing/index.mjs +0 -227
  32. package/dist/testing/index.mjs.map +0 -1
  33. package/dist/theming/index.mjs +0 -19
  34. package/dist/theming/index.mjs.map +0 -1
  35. package/dist/toArray-BJfx0Xhj.mjs +0 -38
  36. package/dist/toArray-BJfx0Xhj.mjs.map +0 -1
  37. package/dist/toArray-Dw6F-w3t.js +0 -2
  38. package/dist/toArray-Dw6F-w3t.js.map +0 -1
  39. package/dist/tools/index.mjs +0 -7
  40. package/dist/tools/index.mjs.map +0 -1
  41. package/src/@types/@loadsmart/utilsFunction.d.ts +0 -5
  42. package/src/@types/@loadsmart/utilsObject.d.ts +0 -5
  43. package/src/@types/svg.d.ts +0 -4
  44. package/src/addons/Theme/register.js +0 -590
  45. package/src/common/BackButton/BackButton.tsx +0 -18
  46. package/src/common/BackButton/index.ts +0 -2
  47. package/src/common/CloseButton/CloseButton.tsx +0 -55
  48. package/src/common/CloseButton/index.ts +0 -2
  49. package/src/common/SelectionWrapper.tsx +0 -130
  50. package/src/components/Accordion/Accordion.context.tsx +0 -36
  51. package/src/components/Accordion/Accordion.stories.tsx +0 -186
  52. package/src/components/Accordion/Accordion.test.tsx +0 -209
  53. package/src/components/Accordion/Accordion.tsx +0 -233
  54. package/src/components/Accordion/index.ts +0 -2
  55. package/src/components/Banner/Banner.stories.tsx +0 -213
  56. package/src/components/Banner/Banner.test.tsx +0 -118
  57. package/src/components/Banner/Banner.tsx +0 -418
  58. package/src/components/Banner/index.tsx +0 -2
  59. package/src/components/Breadcrumbs/Breadbrumbs.test.tsx +0 -125
  60. package/src/components/Breadcrumbs/Breadcrumb.tsx +0 -92
  61. package/src/components/Breadcrumbs/Breadcrumbs.stories.tsx +0 -21
  62. package/src/components/Breadcrumbs/Breadcrumbs.tsx +0 -54
  63. package/src/components/Breadcrumbs/index.ts +0 -4
  64. package/src/components/Button/Button.stories.tsx +0 -174
  65. package/src/components/Button/Button.test.tsx +0 -57
  66. package/src/components/Button/Button.tsx +0 -576
  67. package/src/components/Button/index.tsx +0 -2
  68. package/src/components/Calendar/Calendar.helpers.ts +0 -15
  69. package/src/components/Calendar/Calendar.stories.tsx +0 -168
  70. package/src/components/Calendar/Calendar.test.tsx +0 -316
  71. package/src/components/Calendar/Calendar.tsx +0 -130
  72. package/src/components/Calendar/Calendar.types.ts +0 -68
  73. package/src/components/Calendar/Date.helper.test.ts +0 -847
  74. package/src/components/Calendar/Date.helper.ts +0 -461
  75. package/src/components/Calendar/DateFormat.helper.test.ts +0 -171
  76. package/src/components/Calendar/DateFormat.helper.ts +0 -195
  77. package/src/components/Calendar/Month.helper.test.ts +0 -187
  78. package/src/components/Calendar/Month.helper.ts +0 -172
  79. package/src/components/Calendar/PickerModeToggle.tsx +0 -61
  80. package/src/components/Calendar/Pickers/DayPicker.test.tsx +0 -85
  81. package/src/components/Calendar/Pickers/DayPicker.tsx +0 -127
  82. package/src/components/Calendar/Pickers/MonthPicker.test.tsx +0 -77
  83. package/src/components/Calendar/Pickers/MonthPicker.tsx +0 -51
  84. package/src/components/Calendar/Pickers/PickerButton.tsx +0 -119
  85. package/src/components/Calendar/Pickers/YearPicker.test.tsx +0 -75
  86. package/src/components/Calendar/Pickers/YearPicker.tsx +0 -52
  87. package/src/components/Calendar/index.ts +0 -10
  88. package/src/components/Calendar/useCalendar.ts +0 -190
  89. package/src/components/Calendar/usePickerMode.ts +0 -48
  90. package/src/components/Card/Card.stories.tsx +0 -117
  91. package/src/components/Card/Card.test.tsx +0 -139
  92. package/src/components/Card/Card.tsx +0 -106
  93. package/src/components/Card/CardTitle.tsx +0 -43
  94. package/src/components/Card/index.ts +0 -2
  95. package/src/components/Checkbox/Checkbox.stories.tsx +0 -79
  96. package/src/components/Checkbox/Checkbox.test.tsx +0 -66
  97. package/src/components/Checkbox/Checkbox.tsx +0 -170
  98. package/src/components/Checkbox/index.ts +0 -2
  99. package/src/components/DatePicker/DatePicker.stories.tsx +0 -113
  100. package/src/components/DatePicker/DatePicker.test.tsx +0 -174
  101. package/src/components/DatePicker/DatePicker.tsx +0 -140
  102. package/src/components/DatePicker/DatePicker.types.ts +0 -30
  103. package/src/components/DatePicker/DateRangePicker.stories.tsx +0 -128
  104. package/src/components/DatePicker/DateRangePicker.test.tsx +0 -267
  105. package/src/components/DatePicker/DateRangePicker.tsx +0 -110
  106. package/src/components/DatePicker/index.ts +0 -3
  107. package/src/components/DatePicker/useDatePicker.ts +0 -201
  108. package/src/components/DatePicker/useDateRangePicker.ts +0 -224
  109. package/src/components/Dialog/Dialog.stories.tsx +0 -227
  110. package/src/components/Dialog/Dialog.test.tsx +0 -74
  111. package/src/components/Dialog/Dialog.tsx +0 -139
  112. package/src/components/Dialog/index.tsx +0 -4
  113. package/src/components/Dialog/useDialog.tsx +0 -59
  114. package/src/components/DragDropFile/DragDropFile.context.tsx +0 -39
  115. package/src/components/DragDropFile/DragDropFile.stories.tsx +0 -183
  116. package/src/components/DragDropFile/DragDropFile.tsx +0 -11
  117. package/src/components/DragDropFile/components/DropZone.test.tsx +0 -108
  118. package/src/components/DragDropFile/components/DropZone.tsx +0 -145
  119. package/src/components/DragDropFile/components/FileItem.tsx +0 -117
  120. package/src/components/DragDropFile/components/FileList.test.tsx +0 -119
  121. package/src/components/DragDropFile/components/FileList.tsx +0 -47
  122. package/src/components/DragDropFile/components/Wrapper.tsx +0 -22
  123. package/src/components/DragDropFile/index.ts +0 -9
  124. package/src/components/DragDropFile/mocks.ts +0 -23
  125. package/src/components/DragDropFile/styles.tsx +0 -81
  126. package/src/components/DragDropFile/types.ts +0 -85
  127. package/src/components/Drawer/Drawer.stories.tsx +0 -83
  128. package/src/components/Drawer/Drawer.test.tsx +0 -90
  129. package/src/components/Drawer/Drawer.tsx +0 -225
  130. package/src/components/Drawer/index.ts +0 -4
  131. package/src/components/Dropdown/Dropdown.context.ts +0 -13
  132. package/src/components/Dropdown/Dropdown.fixtures.ts +0 -15
  133. package/src/components/Dropdown/Dropdown.stories.tsx +0 -259
  134. package/src/components/Dropdown/Dropdown.test.tsx +0 -173
  135. package/src/components/Dropdown/Dropdown.tsx +0 -141
  136. package/src/components/Dropdown/Dropdown.types.ts +0 -59
  137. package/src/components/Dropdown/DropdownMenu.tsx +0 -263
  138. package/src/components/Dropdown/DropdownTrigger.tsx +0 -368
  139. package/src/components/Dropdown/index.ts +0 -15
  140. package/src/components/Dropdown/useDropdown.test.ts +0 -96
  141. package/src/components/Dropdown/useDropdown.ts +0 -65
  142. package/src/components/EmptyState/EmptyState.mocks.tsx +0 -60
  143. package/src/components/EmptyState/EmptyState.stories.tsx +0 -239
  144. package/src/components/EmptyState/EmptyState.test.tsx +0 -101
  145. package/src/components/EmptyState/EmptyState.tsx +0 -22
  146. package/src/components/EmptyState/EmptyState.types.ts +0 -59
  147. package/src/components/EmptyState/EmptyStateWithIcon.tsx +0 -42
  148. package/src/components/EmptyState/EmptyStateWithIllustration.tsx +0 -72
  149. package/src/components/EmptyState/Illustration.tsx +0 -29
  150. package/src/components/EmptyState/index.ts +0 -4
  151. package/src/components/ErrorMessage/ErrorMessage.stories.tsx +0 -26
  152. package/src/components/ErrorMessage/ErrorMessage.test.tsx +0 -24
  153. package/src/components/ErrorMessage/ErrorMessage.tsx +0 -19
  154. package/src/components/ErrorMessage/index.ts +0 -2
  155. package/src/components/HighlightMatch/HighlightMatch.stories.tsx +0 -24
  156. package/src/components/HighlightMatch/HighlightMatch.test.tsx +0 -37
  157. package/src/components/HighlightMatch/HighlightMatch.tsx +0 -29
  158. package/src/components/HighlightMatch/index.ts +0 -2
  159. package/src/components/Icon/Icon.tsx +0 -55
  160. package/src/components/Icon/assets/back.svg +0 -4
  161. package/src/components/Icon/assets/burger-menu.svg +0 -3
  162. package/src/components/Icon/assets/calendar.svg +0 -5
  163. package/src/components/Icon/assets/caret-down.svg +0 -4
  164. package/src/components/Icon/assets/caret-left.svg +0 -4
  165. package/src/components/Icon/assets/caret-right-last.svg +0 -4
  166. package/src/components/Icon/assets/caret-right.svg +0 -4
  167. package/src/components/Icon/assets/check.svg +0 -4
  168. package/src/components/Icon/assets/chevron-down.svg +0 -3
  169. package/src/components/Icon/assets/circle.svg +0 -3
  170. package/src/components/Icon/assets/close.svg +0 -4
  171. package/src/components/Icon/assets/dots-horizontal.svg +0 -1
  172. package/src/components/Icon/assets/information.svg +0 -4
  173. package/src/components/Icon/assets/minus.svg +0 -4
  174. package/src/components/Icon/assets/plus.svg +0 -4
  175. package/src/components/Icon/assets/refresh.svg +0 -3
  176. package/src/components/Icon/assets/sort-asc.svg +0 -7
  177. package/src/components/Icon/assets/sort-desc.svg +0 -7
  178. package/src/components/Icon/assets/sort.svg +0 -7
  179. package/src/components/Icon/assets/upload.svg +0 -3
  180. package/src/components/Icon/assets/warning.svg +0 -4
  181. package/src/components/Icon/index.ts +0 -2
  182. package/src/components/IconFactory/IconFactory.fixtures.tsx +0 -31
  183. package/src/components/IconFactory/IconFactory.stories.tsx +0 -120
  184. package/src/components/IconFactory/IconFactory.test.tsx +0 -36
  185. package/src/components/IconFactory/IconFactory.tsx +0 -75
  186. package/src/components/IconFactory/index.ts +0 -2
  187. package/src/components/Label/Label.stories.tsx +0 -47
  188. package/src/components/Label/Label.test.tsx +0 -80
  189. package/src/components/Label/Label.tsx +0 -120
  190. package/src/components/Label/index.ts +0 -2
  191. package/src/components/Layout/Box.tsx +0 -98
  192. package/src/components/Layout/Grid.tsx +0 -42
  193. package/src/components/Layout/Group.tsx +0 -55
  194. package/src/components/Layout/Layout.stories.tsx +0 -412
  195. package/src/components/Layout/Layout.tsx +0 -19
  196. package/src/components/Layout/Layout.types.ts +0 -9
  197. package/src/components/Layout/Layout.utils.ts +0 -20
  198. package/src/components/Layout/Sidebar.tsx +0 -75
  199. package/src/components/Layout/Stack.tsx +0 -63
  200. package/src/components/Layout/Switcher.tsx +0 -48
  201. package/src/components/Layout/index.tsx +0 -8
  202. package/src/components/Link/Link.stories.tsx +0 -22
  203. package/src/components/Link/Link.test.tsx +0 -79
  204. package/src/components/Link/Link.tsx +0 -114
  205. package/src/components/Link/index.ts +0 -3
  206. package/src/components/Link/useSafeLink.ts +0 -49
  207. package/src/components/Loaders/LoadingBar.stories.tsx +0 -36
  208. package/src/components/Loaders/LoadingBar.test.tsx +0 -35
  209. package/src/components/Loaders/LoadingBar.tsx +0 -65
  210. package/src/components/Loaders/LoadingDots.stories.tsx +0 -69
  211. package/src/components/Loaders/LoadingDots.test.tsx +0 -22
  212. package/src/components/Loaders/LoadingDots.tsx +0 -68
  213. package/src/components/Loaders/Spinner.stories.tsx +0 -24
  214. package/src/components/Loaders/Spinner.test.tsx +0 -35
  215. package/src/components/Loaders/Spinner.tsx +0 -68
  216. package/src/components/Loaders/index.tsx +0 -3
  217. package/src/components/Modal/Modal.stories.tsx +0 -121
  218. package/src/components/Modal/Modal.test.tsx +0 -46
  219. package/src/components/Modal/Modal.tsx +0 -163
  220. package/src/components/Modal/index.tsx +0 -2
  221. package/src/components/Pagination/Pagination.constants.ts +0 -7
  222. package/src/components/Pagination/Pagination.helper.ts +0 -88
  223. package/src/components/Pagination/Pagination.stories.tsx +0 -29
  224. package/src/components/Pagination/Pagination.test.tsx +0 -102
  225. package/src/components/Pagination/Pagination.tsx +0 -34
  226. package/src/components/Pagination/Pagination.types.ts +0 -55
  227. package/src/components/Pagination/PaginationItem.tsx +0 -74
  228. package/src/components/Pagination/index.ts +0 -2
  229. package/src/components/Pagination/usePagination.test.ts +0 -188
  230. package/src/components/Pagination/usePagination.ts +0 -87
  231. package/src/components/Popover/Popover.stories.tsx +0 -50
  232. package/src/components/Popover/Popover.test.tsx +0 -22
  233. package/src/components/Popover/Popover.tsx +0 -110
  234. package/src/components/Popover/Popover.types.ts +0 -39
  235. package/src/components/Popover/index.ts +0 -11
  236. package/src/components/ProgressBar/ProgressBar.stories.tsx +0 -47
  237. package/src/components/ProgressBar/ProgressBar.test.tsx +0 -40
  238. package/src/components/ProgressBar/ProgressBar.tsx +0 -89
  239. package/src/components/ProgressBar/index.tsx +0 -2
  240. package/src/components/Radio/Radio.stories.tsx +0 -75
  241. package/src/components/Radio/Radio.test.tsx +0 -66
  242. package/src/components/Radio/Radio.tsx +0 -153
  243. package/src/components/Radio/index.ts +0 -2
  244. package/src/components/Section/Section.test.tsx +0 -35
  245. package/src/components/Section/Section.tsx +0 -66
  246. package/src/components/Section/Sections.stories.tsx +0 -56
  247. package/src/components/Section/index.ts +0 -2
  248. package/src/components/Select/Select.constants.ts +0 -12
  249. package/src/components/Select/Select.context.ts +0 -11
  250. package/src/components/Select/Select.fixtures.ts +0 -167
  251. package/src/components/Select/Select.stories.tsx +0 -780
  252. package/src/components/Select/Select.test.tsx +0 -1109
  253. package/src/components/Select/Select.tsx +0 -271
  254. package/src/components/Select/Select.types.ts +0 -148
  255. package/src/components/Select/SelectCreatableOption.tsx +0 -20
  256. package/src/components/Select/SelectEmpty.test.tsx +0 -15
  257. package/src/components/Select/SelectEmpty.tsx +0 -29
  258. package/src/components/Select/SelectOption.test.tsx +0 -78
  259. package/src/components/Select/SelectOption.tsx +0 -79
  260. package/src/components/Select/SelectTrigger.tsx +0 -83
  261. package/src/components/Select/components.tsx +0 -14
  262. package/src/components/Select/index.ts +0 -12
  263. package/src/components/Select/useSelect.helpers.test.ts +0 -184
  264. package/src/components/Select/useSelect.helpers.ts +0 -63
  265. package/src/components/Select/useSelect.test.ts +0 -207
  266. package/src/components/Select/useSelect.ts +0 -540
  267. package/src/components/Select/useSelectExternal.ts +0 -26
  268. package/src/components/SideNavigation/Logo/Logo.test.tsx +0 -19
  269. package/src/components/SideNavigation/Logo/Logo.tsx +0 -26
  270. package/src/components/SideNavigation/Logo/index.ts +0 -1
  271. package/src/components/SideNavigation/Menu/Menu.test.tsx +0 -65
  272. package/src/components/SideNavigation/Menu/Menu.tsx +0 -53
  273. package/src/components/SideNavigation/Menu/MenuBaseItem.tsx +0 -64
  274. package/src/components/SideNavigation/Menu/MenuExpandable.tsx +0 -107
  275. package/src/components/SideNavigation/Menu/MenuLink.tsx +0 -37
  276. package/src/components/SideNavigation/Menu/index.ts +0 -1
  277. package/src/components/SideNavigation/Separator/Separator.test.tsx +0 -14
  278. package/src/components/SideNavigation/Separator/Separator.tsx +0 -20
  279. package/src/components/SideNavigation/Separator/index.ts +0 -1
  280. package/src/components/SideNavigation/SideNavigation.stories.tsx +0 -69
  281. package/src/components/SideNavigation/SideNavigation.test.tsx +0 -21
  282. package/src/components/SideNavigation/SideNavigation.tsx +0 -47
  283. package/src/components/SideNavigation/index.ts +0 -5
  284. package/src/components/SideNavigation/useSideNavigation.ts +0 -36
  285. package/src/components/Steps/ProgressSteps/ProgressStep.tsx +0 -163
  286. package/src/components/Steps/ProgressSteps/ProgressSteps.tsx +0 -37
  287. package/src/components/Steps/ProgressSteps/index.ts +0 -1
  288. package/src/components/Steps/Steps.fixtures.ts +0 -11
  289. package/src/components/Steps/Steps.helpers.ts +0 -11
  290. package/src/components/Steps/Steps.stories.tsx +0 -65
  291. package/src/components/Steps/Steps.test.tsx +0 -78
  292. package/src/components/Steps/Steps.tsx +0 -53
  293. package/src/components/Steps/Steps.types.ts +0 -5
  294. package/src/components/Steps/StepsContext.ts +0 -5
  295. package/src/components/Steps/StepsStep.tsx +0 -58
  296. package/src/components/Steps/index.ts +0 -6
  297. package/src/components/Steps/useStep.test.tsx +0 -217
  298. package/src/components/Steps/useSteps.ts +0 -131
  299. package/src/components/Switch/Switch.stories.tsx +0 -65
  300. package/src/components/Switch/Switch.test.tsx +0 -60
  301. package/src/components/Switch/Switch.tsx +0 -209
  302. package/src/components/Switch/index.ts +0 -2
  303. package/src/components/Table/Selection.tsx +0 -202
  304. package/src/components/Table/Table.fixtures.ts +0 -101
  305. package/src/components/Table/Table.stories.tsx +0 -568
  306. package/src/components/Table/Table.test.tsx +0 -310
  307. package/src/components/Table/Table.tsx +0 -523
  308. package/src/components/Table/Table.types.ts +0 -93
  309. package/src/components/Table/TableSortHandle.tsx +0 -31
  310. package/src/components/Table/index.tsx +0 -2
  311. package/src/components/Table/useSortBy.test.ts +0 -96
  312. package/src/components/Table/useSortBy.ts +0 -92
  313. package/src/components/Table/useSortBy.types.ts +0 -21
  314. package/src/components/TablePagination/RowsPerPage.tsx +0 -81
  315. package/src/components/TablePagination/TablePagination.stories.tsx +0 -42
  316. package/src/components/TablePagination/TablePagination.styles.ts +0 -13
  317. package/src/components/TablePagination/TablePagination.test.tsx +0 -111
  318. package/src/components/TablePagination/TablePagination.tsx +0 -49
  319. package/src/components/TablePagination/TablePagination.types.ts +0 -69
  320. package/src/components/TablePagination/TablePaginationActions.tsx +0 -144
  321. package/src/components/TablePagination/index.ts +0 -2
  322. package/src/components/Tabs/Tabs.stories.tsx +0 -78
  323. package/src/components/Tabs/Tabs.test.tsx +0 -103
  324. package/src/components/Tabs/Tabs.tsx +0 -287
  325. package/src/components/Tabs/Tabs.types.ts +0 -7
  326. package/src/components/Tabs/TabsContext.ts +0 -10
  327. package/src/components/Tabs/index.ts +0 -2
  328. package/src/components/Tag/Tag.stories.tsx +0 -112
  329. package/src/components/Tag/Tag.test.tsx +0 -19
  330. package/src/components/Tag/Tag.tsx +0 -393
  331. package/src/components/Tag/index.ts +0 -2
  332. package/src/components/Text/Text.stories.tsx +0 -59
  333. package/src/components/Text/Text.test.tsx +0 -48
  334. package/src/components/Text/Text.tsx +0 -14
  335. package/src/components/Text/index.ts +0 -2
  336. package/src/components/TextField/TextField.stories.tsx +0 -90
  337. package/src/components/TextField/TextField.test.tsx +0 -36
  338. package/src/components/TextField/TextField.tsx +0 -244
  339. package/src/components/TextField/index.ts +0 -6
  340. package/src/components/TextField/useTextField.tsx +0 -26
  341. package/src/components/Textarea/Textarea.stories.tsx +0 -101
  342. package/src/components/Textarea/Textarea.test.tsx +0 -14
  343. package/src/components/Textarea/Textarea.tsx +0 -230
  344. package/src/components/Textarea/index.ts +0 -2
  345. package/src/components/Toast/Toast.stories.tsx +0 -50
  346. package/src/components/Toast/Toast.test.tsx +0 -24
  347. package/src/components/Toast/Toast.tsx +0 -141
  348. package/src/components/Toast/icons/close.svg +0 -3
  349. package/src/components/Toast/icons/danger.svg +0 -4
  350. package/src/components/Toast/icons/neutral.svg +0 -4
  351. package/src/components/Toast/icons/success.svg +0 -3
  352. package/src/components/Toast/icons/warning.svg +0 -4
  353. package/src/components/Toast/index.tsx +0 -2
  354. package/src/components/ToggleGroup/Toggle.test.tsx +0 -76
  355. package/src/components/ToggleGroup/Toggle.tsx +0 -158
  356. package/src/components/ToggleGroup/ToggleGroup.constants.ts +0 -16
  357. package/src/components/ToggleGroup/ToggleGroup.stories.tsx +0 -145
  358. package/src/components/ToggleGroup/ToggleGroup.test.tsx +0 -237
  359. package/src/components/ToggleGroup/ToggleGroup.tsx +0 -165
  360. package/src/components/ToggleGroup/ToggleGroup.types.ts +0 -35
  361. package/src/components/ToggleGroup/ToggleGroupContext.ts +0 -13
  362. package/src/components/ToggleGroup/index.ts +0 -3
  363. package/src/components/Tooltip/Tooltip.stories.tsx +0 -82
  364. package/src/components/Tooltip/Tooltip.test.tsx +0 -49
  365. package/src/components/Tooltip/Tooltip.tsx +0 -185
  366. package/src/components/Tooltip/index.ts +0 -2
  367. package/src/components/TopNavigation/Logo/Logo.test.tsx +0 -21
  368. package/src/components/TopNavigation/Logo/Logo.tsx +0 -20
  369. package/src/components/TopNavigation/Logo/index.ts +0 -1
  370. package/src/components/TopNavigation/Menu/Menu.test.tsx +0 -125
  371. package/src/components/TopNavigation/Menu/Menu.tsx +0 -62
  372. package/src/components/TopNavigation/Menu/MenuItemDropdown.tsx +0 -118
  373. package/src/components/TopNavigation/Menu/MenuItemIcon.tsx +0 -50
  374. package/src/components/TopNavigation/Menu/index.ts +0 -1
  375. package/src/components/TopNavigation/OpenSideNavButton/OpenSideNavButton.tsx +0 -28
  376. package/src/components/TopNavigation/OpenSideNavButton/index.ts +0 -1
  377. package/src/components/TopNavigation/TopNavigation.stories.tsx +0 -42
  378. package/src/components/TopNavigation/TopNavigation.tsx +0 -47
  379. package/src/components/TopNavigation/index.ts +0 -2
  380. package/src/components/VisuallyHidden/VisuallyHidden.mdx +0 -26
  381. package/src/components/VisuallyHidden/VisuallyHidden.stories.tsx +0 -32
  382. package/src/components/VisuallyHidden/VisuallyHidden.test.tsx +0 -18
  383. package/src/components/VisuallyHidden/VisuallyHidden.tsx +0 -6
  384. package/src/components/VisuallyHidden/index.ts +0 -1
  385. package/src/docs/tools/DatePickerEvent.stories.mdx +0 -108
  386. package/src/docs/tools/DragDropFileEvent.stories.mdx +0 -75
  387. package/src/docs/tools/conditional.stories.mdx +0 -251
  388. package/src/docs/tools/selectEvent.stories.mdx +0 -121
  389. package/src/hooks/useClickOutside/index.ts +0 -1
  390. package/src/hooks/useClickOutside/useClickOutside.test.tsx +0 -116
  391. package/src/hooks/useClickOutside/useClickOutside.ts +0 -65
  392. package/src/hooks/useDidMount/index.ts +0 -1
  393. package/src/hooks/useDidMount/useDidMount.test.tsx +0 -38
  394. package/src/hooks/useDidMount/useDidMount.ts +0 -20
  395. package/src/hooks/useFingerprint/index.ts +0 -1
  396. package/src/hooks/useFingerprint/useFingerprint.test.ts +0 -76
  397. package/src/hooks/useFingerprint/useFingerprint.ts +0 -94
  398. package/src/hooks/useFocusTrap/index.ts +0 -2
  399. package/src/hooks/useFocusTrap/useFocusTrap.stories.tsx +0 -87
  400. package/src/hooks/useFocusTrap/useFocusTrap.test.tsx +0 -129
  401. package/src/hooks/useFocusTrap/useFocusTrap.ts +0 -187
  402. package/src/hooks/useFocusWithin/index.ts +0 -2
  403. package/src/hooks/useFocusWithin/useFocusWithin.test.tsx +0 -71
  404. package/src/hooks/useFocusWithin/useFocusWithin.ts +0 -62
  405. package/src/hooks/useHeightExpansionToggler/index.ts +0 -2
  406. package/src/hooks/useHeightExpansionToggler/useHeightExpansionToggler.test.tsx +0 -85
  407. package/src/hooks/useHeightExpansionToggler/useHeightExpansionToggler.ts +0 -54
  408. package/src/hooks/useID/index.ts +0 -1
  409. package/src/hooks/useID/useID.ts +0 -18
  410. package/src/hooks/useSelectable/SelectableStrategy.test.ts +0 -424
  411. package/src/hooks/useSelectable/SelectableStrategy.ts +0 -143
  412. package/src/hooks/useSelectable/index.ts +0 -8
  413. package/src/hooks/useSelectable/useSelectable.test.ts +0 -221
  414. package/src/hooks/useSelectable/useSelectable.ts +0 -156
  415. package/src/hooks/useSelectable/useSelectable.types.ts +0 -45
  416. package/src/hooks/useWindowResize/index.ts +0 -1
  417. package/src/hooks/useWindowResize/useWindowResize.ts +0 -27
  418. package/src/index.ts +0 -188
  419. package/src/stories/assets/code-brackets.svg +0 -1
  420. package/src/stories/assets/colors.svg +0 -1
  421. package/src/stories/assets/comments.svg +0 -1
  422. package/src/stories/assets/direction.svg +0 -1
  423. package/src/stories/assets/flow.svg +0 -1
  424. package/src/stories/assets/plugin.svg +0 -1
  425. package/src/stories/assets/repo.svg +0 -1
  426. package/src/stories/assets/stackalt.svg +0 -1
  427. package/src/stories/introduction.stories.mdx +0 -57
  428. package/src/stories/startPage.stories.mdx +0 -95
  429. package/src/styles/activatable.tsx +0 -30
  430. package/src/styles/disableable.tsx +0 -45
  431. package/src/styles/ellipsizable.tsx +0 -14
  432. package/src/styles/focusable.tsx +0 -32
  433. package/src/styles/font.test.ts +0 -31
  434. package/src/styles/font.tsx +0 -40
  435. package/src/styles/hidden.tsx +0 -29
  436. package/src/styles/hoverable.tsx +0 -30
  437. package/src/styles/transition.tsx +0 -25
  438. package/src/styles/typography.test.ts +0 -93
  439. package/src/styles/typography.ts +0 -190
  440. package/src/testing/DatePickerEvent/DatePickerEvent.ts +0 -117
  441. package/src/testing/DatePickerEvent/DateRangePickerEvent.ts +0 -83
  442. package/src/testing/DatePickerEvent/index.ts +0 -2
  443. package/src/testing/DragDropFileEvent/DragDropFileEvent.ts +0 -56
  444. package/src/testing/DragDropFileEvent/index.ts +0 -1
  445. package/src/testing/SelectEvent/SelectEvent.test.tsx +0 -192
  446. package/src/testing/SelectEvent/SelectEvent.ts +0 -264
  447. package/src/testing/SelectEvent/index.ts +0 -1
  448. package/src/testing/getInterpolatedStyles/getInterpolatedStyles.ts +0 -25
  449. package/src/testing/getInterpolatedStyles/index.ts +0 -1
  450. package/src/testing/index.ts +0 -6
  451. package/src/testing/renderWithDragDropFileProvider/index.ts +0 -1
  452. package/src/testing/renderWithDragDropFileProvider/renderWithDragDropFileProvider.tsx +0 -28
  453. package/src/tests/generator.ts +0 -127
  454. package/src/tests/renderer.tsx +0 -39
  455. package/src/theming/index.ts +0 -42
  456. package/src/theming/themes/alice.theme.ts +0 -1022
  457. package/src/theming/themes/index.ts +0 -3
  458. package/src/theming/themes/loadsmart.theme.ts +0 -1019
  459. package/src/theming/themes/miranda-compatibility.theme.ts +0 -972
  460. package/src/theming/theming.helpers.ts +0 -95
  461. package/src/tools/conditional.test.ts +0 -166
  462. package/src/tools/conditional.ts +0 -127
  463. package/src/tools/index.ts +0 -2
  464. package/src/tools/prop.test.ts +0 -52
  465. package/src/tools/prop.ts +0 -36
  466. package/src/utils/toolset/awaitTo.ts +0 -24
  467. package/src/utils/toolset/flatten.ts +0 -3
  468. package/src/utils/toolset/formatBytes.test.ts +0 -45
  469. package/src/utils/toolset/formatBytes.ts +0 -18
  470. package/src/utils/toolset/get.ts +0 -2
  471. package/src/utils/toolset/getID.test.ts +0 -57
  472. package/src/utils/toolset/getID.ts +0 -93
  473. package/src/utils/toolset/getOrdinalSuffix.test.ts +0 -27
  474. package/src/utils/toolset/getOrdinalSuffix.ts +0 -15
  475. package/src/utils/toolset/highlightMatch.test.tsx +0 -32
  476. package/src/utils/toolset/highlightMatch.tsx +0 -32
  477. package/src/utils/toolset/interleave.test.ts +0 -40
  478. package/src/utils/toolset/interleave.ts +0 -23
  479. package/src/utils/toolset/isEmpty.ts +0 -2
  480. package/src/utils/toolset/isThenable.test.ts +0 -40
  481. package/src/utils/toolset/isThenable.ts +0 -14
  482. package/src/utils/toolset/keyboard.ts +0 -50
  483. package/src/utils/toolset/omit.ts +0 -2
  484. package/src/utils/toolset/pluralize.ts +0 -16
  485. package/src/utils/toolset/range.ts +0 -2
  486. package/src/utils/toolset/rem.ts +0 -7
  487. package/src/utils/toolset/styledCompounds.ts +0 -22
  488. package/src/utils/toolset/toArray.ts +0 -16
  489. package/src/utils/types/ColorScheme.ts +0 -3
  490. package/src/utils/types/EventLike.ts +0 -11
  491. package/src/utils/types/InterpolatedStyle.ts +0 -3
  492. 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
- })