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