@autoafleveren/ui 1.3.2 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (320) hide show
  1. package/dist/config/tailwind/config.cjs +1 -0
  2. package/dist/icons.cjs +17 -17
  3. package/dist/icons.js +1710 -1644
  4. package/dist/types/components/AppActionBar/AppActionBarItem.vue.d.ts +4 -0
  5. package/dist/types/composables/index.d.ts +2 -1
  6. package/dist/types/composables/useActionBar/index.d.ts +3 -3
  7. package/dist/types/composables/useFocusTrap/index.d.ts +10 -0
  8. package/dist/ui-storybook.css +1 -1
  9. package/dist/ui.cjs +47 -40
  10. package/dist/ui.js +12385 -11552
  11. package/package.json +5 -2
  12. package/src/App.vue +15 -0
  13. package/src/Playground.vue.example +9 -0
  14. package/src/config/eslint.cjs +199 -0
  15. package/src/config/tailwind/config.cjs +229 -0
  16. package/src/config/tailwind/screens.json +9 -0
  17. package/src/css/build.css +52 -0
  18. package/src/css/main.css +4 -0
  19. package/src/css/theme.css +208 -0
  20. package/src/css/tinymce.css +58 -0
  21. package/src/main.ts +34 -0
  22. package/src/modules/components/AppActionBar/AppActionBar.vue +96 -0
  23. package/src/modules/components/AppActionBar/AppActionBarItem.vue +149 -0
  24. package/src/modules/components/AppActionBar/AppActionBarSubMenu.vue +89 -0
  25. package/src/modules/components/AppActionBar/Components/Error.vue +11 -0
  26. package/src/modules/components/AppActionBar/Components/Loading.vue +9 -0
  27. package/src/modules/components/AppActionBar/Components/MultiSelect.vue +102 -0
  28. package/src/modules/components/AppActionBar/Components/__tests__/multi-select.spec.ts +74 -0
  29. package/src/modules/components/AppActionBar/__mocks__/index.ts +36 -0
  30. package/src/modules/components/AppActionBar/__tests__/app-action-bar-item.spec.ts +134 -0
  31. package/src/modules/components/AppActionBar/__tests__/app-action-bar-sub-menu.spec.ts +45 -0
  32. package/src/modules/components/AppActionBar/__tests__/app-action-bar.spec.ts +92 -0
  33. package/src/modules/components/AppActionBar/index.d.ts +29 -0
  34. package/src/modules/components/AppActionBar/index.ts +18 -0
  35. package/src/modules/components/AppAlert/AppAlert.vue +69 -0
  36. package/src/modules/components/AppAlert/__tests__/app-alert.spec.ts +67 -0
  37. package/src/modules/components/AppAlert/index.d.ts +3 -0
  38. package/src/modules/components/AppAlert/index.ts +18 -0
  39. package/src/modules/components/AppAvatar/AppAvatar.vue +30 -0
  40. package/src/modules/components/AppAvatar/DefaultAvatar.vue +187 -0
  41. package/src/modules/components/AppAvatar/__tests__/app-avatar.spec.ts +70 -0
  42. package/src/modules/components/AppAvatar/index.d.ts +9 -0
  43. package/src/modules/components/AppAvatar/index.ts +9 -0
  44. package/src/modules/components/AppBackButton/AppBackButton.vue +51 -0
  45. package/src/modules/components/AppBackButton/__tests__/app-back-button.spec.ts +70 -0
  46. package/src/modules/components/AppBadge/AppBadge.vue +65 -0
  47. package/src/modules/components/AppBadge/__tests__/app-badge.spec.ts +64 -0
  48. package/src/modules/components/AppBadge/index.d.ts +13 -0
  49. package/src/modules/components/AppBadge/index.ts +29 -0
  50. package/src/modules/components/AppButton/AppButton.vue +53 -0
  51. package/src/modules/components/AppButton/ButtonIconSlot.vue +26 -0
  52. package/src/modules/components/AppButton/__tests__/app-button.spec.ts +145 -0
  53. package/src/modules/components/AppButton/__tests__/button-icon-slot.spec.ts +30 -0
  54. package/src/modules/components/AppButton/index.d.ts +16 -0
  55. package/src/modules/components/AppButton/index.ts +57 -0
  56. package/src/modules/components/AppCard/AppCard.vue +88 -0
  57. package/src/modules/components/AppCard/CardAction.vue +101 -0
  58. package/src/modules/components/AppCard/CardIconSlot.vue +65 -0
  59. package/src/modules/components/AppCard/__tests__/app-card.spec.ts +109 -0
  60. package/src/modules/components/AppCard/__tests__/card-action.spec.ts +55 -0
  61. package/src/modules/components/AppCard/__tests__/card-icon-slot.spec.ts +27 -0
  62. package/src/modules/components/AppCard/index.d.ts +12 -0
  63. package/src/modules/components/AppCard/index.ts +5 -0
  64. package/src/modules/components/AppColor/AppColor.vue +74 -0
  65. package/src/modules/components/AppColor/__tests__/app-color.spec.ts +53 -0
  66. package/src/modules/components/AppColor/index.d.ts +10 -0
  67. package/src/modules/components/AppColorCard/AppColorCard.vue +41 -0
  68. package/src/modules/components/AppColorCard/__tests__/app-color-card.spec.ts +55 -0
  69. package/src/modules/components/AppConfirm/AppConfirm.vue +237 -0
  70. package/src/modules/components/AppConfirm/__tests__/app-confirm.spec.ts +366 -0
  71. package/src/modules/components/AppConfirm/index.d.ts +31 -0
  72. package/src/modules/components/AppConfirm/index.ts +1 -0
  73. package/src/modules/components/AppContextMenu/AppContextMenu.vue +109 -0
  74. package/src/modules/components/AppContextMenu/ShortcutItem.vue +38 -0
  75. package/src/modules/components/AppContextMenu/__mocks__/index.ts +25 -0
  76. package/src/modules/components/AppContextMenu/__tests__/app-context-menu.spec.ts +71 -0
  77. package/src/modules/components/AppContextMenu/__tests__/shortcut-item.spec.ts +29 -0
  78. package/src/modules/components/AppContextMenu/index.d.ts +23 -0
  79. package/src/modules/components/AppDataTable/AppDataTable.vue +323 -0
  80. package/src/modules/components/AppDataTable/AppDataTableFooter.vue +91 -0
  81. package/src/modules/components/AppDataTable/__mocks__/index.ts +71 -0
  82. package/src/modules/components/AppDataTable/__tests__/app-data-table-footer.spec.ts +107 -0
  83. package/src/modules/components/AppDataTable/__tests__/app-data-table.spec.ts +153 -0
  84. package/src/modules/components/AppDataTable/index.d.ts +29 -0
  85. package/src/modules/components/AppDefinitionList/AppDefinitionItem.vue +57 -0
  86. package/src/modules/components/AppDefinitionList/AppDefinitionList.vue +32 -0
  87. package/src/modules/components/AppDefinitionList/__mocks__/index.ts +31 -0
  88. package/src/modules/components/AppDefinitionList/__tests__/app-definition-item.spec.ts +93 -0
  89. package/src/modules/components/AppDefinitionList/__tests__/app-definition-list.spec.ts +35 -0
  90. package/src/modules/components/AppDefinitionList/index.d.ts +8 -0
  91. package/src/modules/components/AppDisclosure/AppDisclosure.vue +19 -0
  92. package/src/modules/components/AppDisclosure/AppDisclosureButton.vue +43 -0
  93. package/src/modules/components/AppDisclosure/AppDisclosurePanel.vue +31 -0
  94. package/src/modules/components/AppDisclosure/__tests__/app-disclosure-button.spec.ts +70 -0
  95. package/src/modules/components/AppDisclosure/__tests__/app-disclosure-panel.spec.ts +64 -0
  96. package/src/modules/components/AppDisclosure/__tests__/app-disclosure.spec.ts +41 -0
  97. package/src/modules/components/AppDrawer/AppDrawer.vue +149 -0
  98. package/src/modules/components/AppDrawer/__tests__/app-drawer.spec.ts +120 -0
  99. package/src/modules/components/AppDrawer/index.d.ts +27 -0
  100. package/src/modules/components/AppDropdownButton/AppDropdownButton.vue +82 -0
  101. package/src/modules/components/AppDropdownButton/AppDropdownItem.vue +67 -0
  102. package/src/modules/components/AppDropdownButton/__mocks__/index.ts +25 -0
  103. package/src/modules/components/AppDropdownButton/__tests__/app-dropdown-button.spec.ts +81 -0
  104. package/src/modules/components/AppDropdownButton/__tests__/app-dropdown-item.spec.ts +108 -0
  105. package/src/modules/components/AppDropdownButton/index.d.ts +26 -0
  106. package/src/modules/components/AppDropdownButton/index.ts +8 -0
  107. package/src/modules/components/AppError/AppError.vue +233 -0
  108. package/src/modules/components/AppError/__tests__/app-error.spec.ts +366 -0
  109. package/src/modules/components/AppError/index.d.ts +30 -0
  110. package/src/modules/components/AppError/index.ts +1 -0
  111. package/src/modules/components/AppImageDropzone/AppImageDropzone.vue +130 -0
  112. package/src/modules/components/AppImageDropzone/__tests__/app-image-dropzone.spec.ts +92 -0
  113. package/src/modules/components/AppImageDropzone/index.d.ts +8 -0
  114. package/src/modules/components/AppInput/AppInput.vue +247 -0
  115. package/src/modules/components/AppInput/FileInput.vue +58 -0
  116. package/src/modules/components/AppInput/Input.vue +141 -0
  117. package/src/modules/components/AppInput/InputIconSlot.vue +27 -0
  118. package/src/modules/components/AppInput/LocationInput.vue +150 -0
  119. package/src/modules/components/AppInput/__mocks__/location.ts +13 -0
  120. package/src/modules/components/AppInput/__tests__/app-input.spec.ts +255 -0
  121. package/src/modules/components/AppInput/__tests__/file-input.spec.ts +48 -0
  122. package/src/modules/components/AppInput/__tests__/input-icon-slot.spec.ts +27 -0
  123. package/src/modules/components/AppInput/__tests__/input.spec.ts +260 -0
  124. package/src/modules/components/AppInput/__tests__/location-input.spec.ts +159 -0
  125. package/src/modules/components/AppInput/choice.ts +24 -0
  126. package/src/modules/components/AppInput/datepicker.ts +62 -0
  127. package/src/modules/components/AppInput/index.d.ts +68 -0
  128. package/src/modules/components/AppInput/index.ts +133 -0
  129. package/src/modules/components/AppInput/location.ts +8 -0
  130. package/src/modules/components/AppInput/richText.ts +45 -0
  131. package/src/modules/components/AppInputLabel/AppInputLabel.vue +15 -0
  132. package/src/modules/components/AppInputLabel/__tests__/app-input-label.spec.ts +38 -0
  133. package/src/modules/components/AppInputLabel/index.d.ts +6 -0
  134. package/src/modules/components/AppLicensePlate/AppLicensePlate.vue +34 -0
  135. package/src/modules/components/AppLicensePlate/__tests__/app-license-plate.spec.ts +46 -0
  136. package/src/modules/components/AppLicensePlate/index.d.ts +1 -0
  137. package/src/modules/components/AppLoader/AppLoader.vue +37 -0
  138. package/src/modules/components/AppLoader/index.d.ts +1 -0
  139. package/src/modules/components/AppLoader/index.ts +8 -0
  140. package/src/modules/components/AppMaps/AppMaps.vue +105 -0
  141. package/src/modules/components/AppMaps/index.ts +44 -0
  142. package/src/modules/components/AppMenu/AppMenu.vue +79 -0
  143. package/src/modules/components/AppMenu/AppMenuItem.vue +40 -0
  144. package/src/modules/components/AppMenu/__mocks__/index.ts +23 -0
  145. package/src/modules/components/AppMenu/__tests__/app-menu-item.spec.ts +47 -0
  146. package/src/modules/components/AppMenu/__tests__/app-menu.spec.ts +53 -0
  147. package/src/modules/components/AppMenu/index.d.ts +15 -0
  148. package/src/modules/components/AppModal/AppModal.vue +261 -0
  149. package/src/modules/components/AppModal/__tests__/app-modal.spec.ts +282 -0
  150. package/src/modules/components/AppModal/index.d.ts +36 -0
  151. package/src/modules/components/AppNavigationMenu/AppNavigationMenu.vue +95 -0
  152. package/src/modules/components/AppNavigationMenu/Mobile.vue +126 -0
  153. package/src/modules/components/AppNavigationMenu/NavigationItem.vue +82 -0
  154. package/src/modules/components/AppNavigationMenu/SupportItem.vue +29 -0
  155. package/src/modules/components/AppNavigationMenu/__tests__/app-navigation-menu.spec.ts +104 -0
  156. package/src/modules/components/AppNavigationMenu/__tests__/mobile.spec.ts +155 -0
  157. package/src/modules/components/AppNavigationMenu/__tests__/navigation-item.spec.ts +91 -0
  158. package/src/modules/components/AppNavigationMenu/__tests__/support-item.spec.ts +48 -0
  159. package/src/modules/components/AppPagination/AppPagination.vue +133 -0
  160. package/src/modules/components/AppPagination/AppPaginationItem.vue +28 -0
  161. package/src/modules/components/AppPagination/__mocks__/index.ts +20 -0
  162. package/src/modules/components/AppPagination/__tests__/app-pagination.spec.ts +143 -0
  163. package/src/modules/components/AppPagination/index.d.ts +24 -0
  164. package/src/modules/components/AppProgressBar/AppProgressBar.vue +93 -0
  165. package/src/modules/components/AppProgressBar/AppProgressBarStep.vue +5 -0
  166. package/src/modules/components/AppProgressBar/__mocks__/index.ts +17 -0
  167. package/src/modules/components/AppProgressBar/__tests__/app-progress-bar-step.spec.ts +18 -0
  168. package/src/modules/components/AppProgressBar/__tests__/app-progress-bar.spec.ts +77 -0
  169. package/src/modules/components/AppProgressBar/index.d.ts +21 -0
  170. package/src/modules/components/AppRating/AppRating.vue +42 -0
  171. package/src/modules/components/AppRating/VueStarRating/Star.vue +215 -0
  172. package/src/modules/components/AppRating/VueStarRating/StarRating.vue +231 -0
  173. package/src/modules/components/AppRating/VueStarRating/classes/AlphaColor.ts +68 -0
  174. package/src/modules/components/AppRating/VueStarRating/readme.md +279 -0
  175. package/src/modules/components/AppRating/__tests__/app-rating.spec.ts +36 -0
  176. package/src/modules/components/AppSection/AppSection.vue +35 -0
  177. package/src/modules/components/AppSection/__tests__/app-section.spec.ts +53 -0
  178. package/src/modules/components/AppSelect/AppSelect.vue +176 -0
  179. package/src/modules/components/AppSelect/__mocks__/index.ts +24 -0
  180. package/src/modules/components/AppSelect/__tests__/app-select.spec.ts +73 -0
  181. package/src/modules/components/AppSelect/index.d.ts +43 -0
  182. package/src/modules/components/AppSelect/index.ts +69 -0
  183. package/src/modules/components/AppStepper/AppStepper.vue +79 -0
  184. package/src/modules/components/AppStepper/__tests__/app-stepper.spec.ts +59 -0
  185. package/src/modules/components/AppTable/AppTable.vue +40 -0
  186. package/src/modules/components/AppTimeline/AppTimeline.vue +22 -0
  187. package/src/modules/components/AppTimeline/AppTimelineItem.vue +97 -0
  188. package/src/modules/components/AppTimeline/AppTimelineItemIcon.vue +55 -0
  189. package/src/modules/components/AppTimeline/__mocks__/timeline.ts +29 -0
  190. package/src/modules/components/AppTimeline/__tests__/app-timeline-item-Icon.spec.ts +35 -0
  191. package/src/modules/components/AppTimeline/__tests__/app-timeline-item.spec.ts +121 -0
  192. package/src/modules/components/AppTimeline/__tests__/app-timeline.spec.ts +55 -0
  193. package/src/modules/components/AppTimeline/index.d.ts +30 -0
  194. package/src/modules/components/AppTimeline/index.ts +13 -0
  195. package/src/modules/components/AppToggle/AppToggle.vue +36 -0
  196. package/src/modules/components/AppToggle/__tests__/app-toggle.spec.ts +54 -0
  197. package/src/modules/components/AppToggle/index.d.ts +3 -0
  198. package/src/modules/components/AppToggleCard/AppToggleCard.vue +45 -0
  199. package/src/modules/components/AppToggleCard/__tests__/app-toggle-card.spec.ts +55 -0
  200. package/src/modules/components/index.ts +43 -0
  201. package/src/modules/composables/index.ts +14 -0
  202. package/src/modules/composables/useActionBar/__mocks__/index.ts +17 -0
  203. package/src/modules/composables/useActionBar/__tests__/index.spec.ts +62 -0
  204. package/src/modules/composables/useActionBar/index.d.ts +1 -0
  205. package/src/modules/composables/useActionBar/index.ts +67 -0
  206. package/src/modules/composables/useComputedPosition/index.d.ts +16 -0
  207. package/src/modules/composables/useComputedPosition/index.ts +199 -0
  208. package/src/modules/composables/useConfirm/__tests__/index.spec.ts +29 -0
  209. package/src/modules/composables/useConfirm/index.ts +63 -0
  210. package/src/modules/composables/useContextMenu/index.ts +127 -0
  211. package/src/modules/composables/useDrawer/__tests__/index.spec.ts +34 -0
  212. package/src/modules/composables/useDrawer/index.ts +136 -0
  213. package/src/modules/composables/useEcho/index.ts +167 -0
  214. package/src/modules/composables/useError/__tests__/index.spec.ts +29 -0
  215. package/src/modules/composables/useError/index.ts +61 -0
  216. package/src/modules/composables/useFocusTrap/index.d.ts +3 -0
  217. package/src/modules/composables/useFocusTrap/index.ts +98 -0
  218. package/src/modules/composables/useGoogleApi/__tests__/index.spec.ts +39 -0
  219. package/src/modules/composables/useGoogleApi/index.ts +26 -0
  220. package/src/modules/composables/useLayout/__tests__/index.spec.ts +34 -0
  221. package/src/modules/composables/useLayout/index.d.ts +1 -0
  222. package/src/modules/composables/useLayout/index.ts +68 -0
  223. package/src/modules/composables/useModal/__tests__/index.spec.ts +34 -0
  224. package/src/modules/composables/useModal/index.ts +97 -0
  225. package/src/modules/composables/useNavigation/__mocks__/navigation.ts +22 -0
  226. package/src/modules/composables/useNavigation/__tests__/index.spec.ts +88 -0
  227. package/src/modules/composables/useNavigation/index.d.ts +17 -0
  228. package/src/modules/composables/useNavigation/index.ts +97 -0
  229. package/src/modules/icons/BuildingCircleCheck.vue +32 -0
  230. package/src/modules/icons/BuildingCircleXmark.vue +20 -0
  231. package/src/modules/icons/CarsIcon.vue +29 -0
  232. package/src/modules/icons/ChatPersonRoundedIcon.vue +184 -0
  233. package/src/modules/icons/CompanyIcon.vue +18 -0
  234. package/src/modules/icons/HeroGirlIcon.vue +246 -0
  235. package/src/modules/icons/HeroPersonIcon.vue +402 -0
  236. package/src/modules/icons/HeroPersonRoundedIcon.vue +412 -0
  237. package/src/modules/icons/HeroPersonWithBgIcon.vue +4503 -0
  238. package/src/modules/icons/LocationMarkerIcon.vue +33 -0
  239. package/src/modules/icons/PartyPopperIcon.vue +146 -0
  240. package/src/modules/icons/index.ts +32 -0
  241. package/src/modules/icons/status/ErrorIcon.vue +24 -0
  242. package/src/modules/icons/status/SuccessIcon.vue +24 -0
  243. package/src/modules/icons/status/WarningIcon.vue +27 -0
  244. package/src/modules/icons/status/index.ts +3 -0
  245. package/src/modules/index.ts +8 -0
  246. package/src/modules/layouts/Auth/Auth.vue +36 -0
  247. package/src/modules/layouts/Auth/__tests__/auth.spec.ts +63 -0
  248. package/src/modules/layouts/Base/Base.vue +69 -0
  249. package/src/modules/layouts/Base/__tests__/base.spec.ts +56 -0
  250. package/src/modules/layouts/Platform/Platform.vue +96 -0
  251. package/src/modules/layouts/Platform/__tests__/platform.spec.ts +56 -0
  252. package/src/modules/layouts/index.ts +9 -0
  253. package/src/modules/plugins/Sentry/index.d.ts +16 -0
  254. package/src/modules/plugins/Sentry/index.ts +65 -0
  255. package/src/modules/plugins/Sentry/language/nl.ts +13 -0
  256. package/src/modules/plugins/TinyMCE/lang/nl.js +430 -0
  257. package/src/modules/plugins/Toast/Toast.vue +58 -0
  258. package/src/modules/plugins/Toast/__tests__/toast.spec.ts +90 -0
  259. package/src/modules/plugins/Toast/index.ts +36 -0
  260. package/src/modules/plugins/Toast/types.d.ts +265 -0
  261. package/src/modules/plugins/index.ts +63 -0
  262. package/src/stories/Introduction.mdx +4 -0
  263. package/src/stories/assets/code-brackets.svg +1 -0
  264. package/src/stories/assets/colors.svg +1 -0
  265. package/src/stories/assets/comments.svg +1 -0
  266. package/src/stories/assets/direction.svg +1 -0
  267. package/src/stories/assets/flow.svg +1 -0
  268. package/src/stories/assets/images/logo.png +0 -0
  269. package/src/stories/assets/images/road.png +0 -0
  270. package/src/stories/assets/plugin.svg +1 -0
  271. package/src/stories/assets/repo.svg +1 -0
  272. package/src/stories/assets/stackalt.svg +1 -0
  273. package/src/stories/components/ActionBar/ActionBar.stories.ts +67 -0
  274. package/src/stories/components/Alert/Alert.stories.ts +53 -0
  275. package/src/stories/components/Avatar/Avatar.stories.ts +44 -0
  276. package/src/stories/components/BackButton/BackButton.stories.ts +39 -0
  277. package/src/stories/components/Badge/Badge.stories.ts +42 -0
  278. package/src/stories/components/Button/Button.stories.ts +132 -0
  279. package/src/stories/components/Card/Card.stories.ts +70 -0
  280. package/src/stories/components/Color/Color.stories.ts +41 -0
  281. package/src/stories/components/ColorCard/ColorCard.stories.ts +43 -0
  282. package/src/stories/components/Confirm/Confirm.stories.ts +110 -0
  283. package/src/stories/components/ContextMenu/ContextMenu.stories.ts +85 -0
  284. package/src/stories/components/DefinitionList/DefinitionList.stories.ts +32 -0
  285. package/src/stories/components/Disclosure/Disclosure.stories.ts +61 -0
  286. package/src/stories/components/DropdownButton/DropdownButton.stories.ts +121 -0
  287. package/src/stories/components/Error/Error.stories.ts +106 -0
  288. package/src/stories/components/ImageDropzone/ImageDropzone.stories.ts +41 -0
  289. package/src/stories/components/Input/Input.stories.ts +180 -0
  290. package/src/stories/components/Input/LocationInput.stories.ts +77 -0
  291. package/src/stories/components/LicensePlate/LicensePlate.stories.ts +39 -0
  292. package/src/stories/components/Maps/Maps.stories.ts +36 -0
  293. package/src/stories/components/Menu/Menu.stories.ts +41 -0
  294. package/src/stories/components/Modal/Modal.stories.ts +68 -0
  295. package/src/stories/components/Navigation/Navigation.stories.ts +62 -0
  296. package/src/stories/components/Pagination/Pagination.stories.ts +62 -0
  297. package/src/stories/components/ProgressBar/ProgressBar.stories.ts +48 -0
  298. package/src/stories/components/Rating/Rating.stories.ts +38 -0
  299. package/src/stories/components/Section/Section.stories.ts +44 -0
  300. package/src/stories/components/Select/Select.stories.ts +90 -0
  301. package/src/stories/components/Stepper/Stepper.stories.ts +38 -0
  302. package/src/stories/components/Table/DataTable.stories.ts +96 -0
  303. package/src/stories/components/Table/Table.stories.ts +45 -0
  304. package/src/stories/components/Timeline/Timeline.stories.ts +46 -0
  305. package/src/stories/components/Toast/Toast.stories.ts +47 -0
  306. package/src/stories/components/Toggle/Toggle.stories.ts +41 -0
  307. package/src/stories/components/ToggleCard/ToggleCard.stories.ts +43 -0
  308. package/src/stories/layouts/Auth.stories.ts +43 -0
  309. package/src/stories/layouts/Base.stories.ts +70 -0
  310. package/src/tests/mocks/resize-observer.ts +13 -0
  311. package/src/tests/stubs/AppSelect.ts +89 -0
  312. package/src/tests/stubs/HeadlessUiDialogStub.ts +24 -0
  313. package/src/tests/stubs/HeadlessUiTransitionChildStub.ts +20 -0
  314. package/src/tests/stubs/HeadlessUiTransitionRootStub.ts +25 -0
  315. package/src/tests/stubs/IconStub.ts +9 -0
  316. package/src/tests/stubs/Vue3EasyDataTableStub.ts +53 -0
  317. package/src/typings/plugin.d.ts +5 -0
  318. package/src/typings/shims-vue.d.ts +13 -0
  319. package/src/typings/utilities.d.ts +4 -0
  320. package/src/typings/vite-environment.d.ts +12 -0
@@ -0,0 +1,153 @@
1
+ import { shallowMount } from '@vue/test-utils';
2
+ import { nextTick } from 'vue';
3
+ import { describe, it, expect, beforeEach } from 'vitest';
4
+ import Vue3EasyDataTable from 'vue3-easy-data-table';
5
+ import { useActionBar } from '~/modules';
6
+ import Vue3EasyDataTableStub, {
7
+ dataTableInstance,
8
+ previousPageMock,
9
+ nextPageMock,
10
+ updatePageMock,
11
+ } from '~/tests/stubs/Vue3EasyDataTableStub';
12
+ import AppDataTableFooter from '../AppDataTableFooter.vue';
13
+ import AppDataTable from '../AppDataTable.vue';
14
+ import { items, headers } from '../__mocks__';
15
+
16
+ import type { VueWrapper } from '@vue/test-utils';
17
+
18
+ const actionBar = useActionBar();
19
+
20
+ function createWrapper(
21
+ modelValue = [],
22
+ actionBarSelection = true,
23
+ actionBarSelectionKey = 'id',
24
+ // @ts-expect-error Type VueWrapper
25
+ ): VueWrapper<InstanceType<typeof AppDataTable>> {
26
+ return shallowMount(AppDataTable, {
27
+ props: {
28
+ items,
29
+ headers,
30
+ modelValue,
31
+ actionBarSelection,
32
+ actionBarSelectionKey,
33
+ },
34
+ slots: {
35
+ itemId: 'id',
36
+ },
37
+ global: {
38
+ stubs: {
39
+ DataTable: Vue3EasyDataTableStub,
40
+ },
41
+ },
42
+ });
43
+ }
44
+
45
+ describe('the generic AppDataTable component', () => {
46
+ beforeEach(() => {
47
+ actionBar.setSelection([]);
48
+ });
49
+
50
+ it('should render the Vue3EasyDataTable', () => {
51
+ const wrapper = createWrapper();
52
+
53
+ const easyDataTable = wrapper.findComponent(Vue3EasyDataTable);
54
+ expect(easyDataTable.exists()).toBe(true);
55
+ expect(easyDataTable.props('hideFooter')).toBe(true);
56
+ expect(easyDataTable.props('itemsSelected')).toStrictEqual([]);
57
+ });
58
+
59
+ it('should update actionbar selection when Vue3EasyDataTable selection changed by default', () => {
60
+ const wrapper = createWrapper();
61
+
62
+ expect(actionBar.selection.value).toStrictEqual([]);
63
+
64
+ const easyDataTable = wrapper.findComponent(Vue3EasyDataTable);
65
+ easyDataTable.vm.$emit('update:items-selected', [{ id: 1 }, { id: 2 }, { id: 3 }]);
66
+
67
+ expect(actionBar.selection.value).toStrictEqual([1, 2, 3]);
68
+ });
69
+
70
+ // eslint-disable-next-line max-len
71
+ it('should not update actionbar selection when Vue3EasyDataTable selection changed when prop "actionBarSelection" is set to false', () => {
72
+ const wrapper = createWrapper([], false);
73
+
74
+ expect(actionBar.selection.value).toStrictEqual([]);
75
+
76
+ const easyDataTable = wrapper.findComponent(Vue3EasyDataTable);
77
+ easyDataTable.vm.$emit('update:items-selected', [{ id: 1 }, { id: 2 }, { id: 3 }]);
78
+
79
+ expect(actionBar.selection.value).toStrictEqual([]);
80
+ });
81
+
82
+ it('can specify the actionBarSelectionKey', () => {
83
+ const wrapper = createWrapper([], true, 'title');
84
+
85
+ expect(actionBar.selection.value).toStrictEqual([]);
86
+ const easyDataTable = wrapper.findComponent(Vue3EasyDataTable);
87
+
88
+ easyDataTable.vm.$emit('update:items-selected', [
89
+ { id: 1, title: 'title 1' },
90
+ { id: 2, title: 'title 2' },
91
+ { id: 3, title: 'title 3' },
92
+ ]);
93
+
94
+ expect(actionBar.selection.value).toStrictEqual(['title 1', 'title 2', 'title 3']);
95
+ });
96
+
97
+ it('should render the AppDataTableFooter', async () => {
98
+ expect.assertions(2);
99
+
100
+ const wrapper = createWrapper();
101
+
102
+ await nextTick();
103
+
104
+ const dataTableFooter = wrapper.findComponent(AppDataTableFooter);
105
+ expect(dataTableFooter.exists()).toBe(true);
106
+ expect(dataTableFooter.props('dataTable')).toStrictEqual(dataTableInstance);
107
+ });
108
+
109
+ it('should execute "nextPage" when AppDataTableFooter emits "nextPage', async () => {
110
+ expect.assertions(2);
111
+
112
+ const wrapper = createWrapper();
113
+
114
+ await nextTick();
115
+
116
+ expect(nextPageMock).toHaveBeenCalledTimes(0);
117
+
118
+ const dataTableFooter = wrapper.findComponent(AppDataTableFooter);
119
+ dataTableFooter.vm.$emit('nextPage');
120
+
121
+ expect(nextPageMock).toHaveBeenCalledTimes(1);
122
+ });
123
+
124
+ it('should execute "prevPage" when AppDataTableFooter emits "previousPage', async () => {
125
+ expect.assertions(2);
126
+
127
+ const wrapper = createWrapper();
128
+
129
+ await nextTick();
130
+
131
+ expect(previousPageMock).toHaveBeenCalledTimes(0);
132
+
133
+ const dataTableFooter = wrapper.findComponent(AppDataTableFooter);
134
+ dataTableFooter.vm.$emit('previousPage');
135
+
136
+ expect(previousPageMock).toHaveBeenCalledTimes(1);
137
+ });
138
+
139
+ it('should execute "updatePage" when AppDataTableFooter emits "updatePage', async () => {
140
+ expect.assertions(2);
141
+
142
+ const wrapper = createWrapper();
143
+
144
+ await nextTick();
145
+
146
+ expect(updatePageMock).toHaveBeenCalledTimes(0);
147
+
148
+ const dataTableFooter = wrapper.findComponent(AppDataTableFooter);
149
+ dataTableFooter.vm.$emit('updatePage');
150
+
151
+ expect(updatePageMock).toHaveBeenCalledTimes(1);
152
+ });
153
+ });
@@ -0,0 +1,29 @@
1
+ import type { Header } from 'vue3-easy-data-table';
2
+
3
+ export interface Props<Item> {
4
+ headers: Header[];
5
+ items: Item[];
6
+ modelValue?: number[];
7
+ currentPage?: number;
8
+ rowItems?: number[];
9
+ rowsPerPage?: number;
10
+ actionBarSelection?: boolean;
11
+ actionBarSelectionKey?: string;
12
+ hideFooter?: boolean;
13
+ }
14
+
15
+ export interface DataTableInstance {
16
+ clientItemsLength: number;
17
+ currentPageFirstIndex: number;
18
+ currentPageLastIndex: number;
19
+ currentPaginationNumber: number;
20
+ isFirstPage: boolean;
21
+ isLastPage: boolean;
22
+ maxPaginationNumber: number;
23
+ nextPage: () => void;
24
+ prevPage: () => void;
25
+ rowsPerPageActiveOption: number;
26
+ rowsPerPageOptions: number[];
27
+ updatePage: (page: number) => void;
28
+ updateRowsPerPageActiveOption: (option: number) => void;
29
+ }
@@ -0,0 +1,57 @@
1
+ <script lang="ts" setup>
2
+ import { computed, useSlots } from 'vue';
3
+
4
+ import type { DefinitionItem } from './index.d';
5
+
6
+ const props = withDefaults(defineProps<{
7
+ title?: DefinitionItem['title'];
8
+ description?: DefinitionItem['description'];
9
+ component?: DefinitionItem['component'];
10
+ componentProperties?: DefinitionItem['componentProperties'];
11
+ hideEmptyValues?: boolean;
12
+ }>(), {
13
+ title: undefined,
14
+ description: undefined,
15
+ component: undefined,
16
+ componentProperties: undefined,
17
+ hideEmptyValues: false,
18
+ });
19
+
20
+ const slots = useSlots();
21
+
22
+ const hasTitle = computed(() => !!slots.title || !!props.title);
23
+ const hasDescription = computed(() => !!slots.default || !!props.description || !!props.component);
24
+ </script>
25
+
26
+ <template>
27
+ <div
28
+ v-if="hasDescription || !hasDescription && !hideEmptyValues"
29
+ class="flex w-full"
30
+ data-test-item
31
+ >
32
+ <dt
33
+ v-if="hasTitle"
34
+ :class="{ 'w-1/2': hasDescription || component }"
35
+ class="font-bold text-zinc-900"
36
+ data-test-title
37
+ >
38
+ <slot name="title">
39
+ {{ title }}
40
+ </slot>
41
+ </dt>
42
+
43
+ <dd
44
+ v-if="hasDescription || component || $slots.default"
45
+ :class="{ 'w-1/2': hasTitle }"
46
+ data-test-description
47
+ >
48
+ <slot>{{ description }}</slot>
49
+
50
+ <component
51
+ :is="component"
52
+ v-bind="componentProperties"
53
+ data-test-component
54
+ />
55
+ </dd>
56
+ </div>
57
+ </template>
@@ -0,0 +1,32 @@
1
+ <script lang="ts" setup>
2
+ import AppDefinitionItem from './AppDefinitionItem.vue';
3
+
4
+ import type { DefinitionItem } from './index.d';
5
+
6
+ withDefaults(defineProps<{
7
+ items?: DefinitionItem[];
8
+ hideEmptyValues?: boolean;
9
+ }>(), {
10
+ items: undefined,
11
+ hideEmptyValues: false,
12
+ });
13
+ </script>
14
+
15
+ <template>
16
+ <div class="flex flex-col gap-1.5">
17
+ <slot>
18
+ <template v-if="items">
19
+ <AppDefinitionItem
20
+ v-for="(item, index) in items"
21
+ :key="index"
22
+ :tabindex="`1${index}`"
23
+ :title="item.title"
24
+ :description="item.description"
25
+ :component="item.component"
26
+ :component-properties="item.componentProperties"
27
+ :hide-empty-values="hideEmptyValues"
28
+ />
29
+ </template>
30
+ </slot>
31
+ </div>
32
+ </template>
@@ -0,0 +1,31 @@
1
+ import AppButton from '../../AppButton/AppButton.vue';
2
+
3
+ import type { DefinitionItem } from '../index.d';
4
+
5
+ export const definitionItem: DefinitionItem = {
6
+ title: 'title 1',
7
+ description: 'description 1',
8
+ };
9
+
10
+ export const definitionItemWithoutDescription: DefinitionItem = {
11
+ title: 'title 1',
12
+ description: undefined,
13
+ };
14
+
15
+ export const definitionItemWithComponent: DefinitionItem = {
16
+ title: 'title 3',
17
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
18
+ component: AppButton,
19
+ componentProperties: {
20
+ size: 'small',
21
+ },
22
+ };
23
+
24
+ export const items: DefinitionItem[] = [
25
+ definitionItem,
26
+ {
27
+ title: 'title 2',
28
+ description: 'description 2',
29
+ },
30
+ definitionItemWithComponent,
31
+ ];
@@ -0,0 +1,93 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { shallowMount } from '@vue/test-utils';
3
+ import AppDefinitionItem from '../AppDefinitionItem.vue';
4
+ import { definitionItem as definitionItemMock,
5
+ definitionItemWithoutDescription as definitionItemWithoutDescriptionMock,
6
+ definitionItemWithComponent as definitionItemWithComponentMock,
7
+ } from '../__mocks__';
8
+
9
+ import type { VueWrapper } from '@vue/test-utils';
10
+ import type { DefinitionItem } from '../index.d';
11
+ import type { DefinedComponent } from '~/typings/utilities';
12
+
13
+ function createWrapper(
14
+ item: DefinitionItem | null = definitionItemMock,
15
+ asSlot = false,
16
+ hideEmptyValues = false,
17
+ ): VueWrapper<InstanceType<typeof AppDefinitionItem>> {
18
+ return shallowMount(AppDefinitionItem, {
19
+ props: !asSlot ? {
20
+ title: item?.title,
21
+ description: item?.description,
22
+ component: item?.component,
23
+ componentProperties: item?.componentProperties,
24
+ hideEmptyValues,
25
+ } : {},
26
+ slots: asSlot ? {
27
+ title: item?.title ?? '',
28
+ default: item?.description ?? '',
29
+ } : {},
30
+ });
31
+ }
32
+
33
+ describe('the AppDefinitionItem component', () => {
34
+ it('renders nothing when empty', () => {
35
+ const wrapper = createWrapper(null);
36
+
37
+ const item = wrapper.find('[data-test-item]');
38
+ expect(item.exists()).toBe(true);
39
+
40
+ const title = wrapper.find('[data-test-title]');
41
+ expect(title.exists()).toBe(false);
42
+
43
+ const description = wrapper.find('[data-test-description]');
44
+ expect(description.exists()).toBe(false);
45
+ });
46
+
47
+ it('renders the title as prop', () => {
48
+ const wrapper = createWrapper();
49
+
50
+ const title = wrapper.find('[data-test-title]');
51
+ expect(title.exists()).toBe(true);
52
+ expect(title.text()).toBe(definitionItemMock.title);
53
+ });
54
+
55
+ it('renders the description as prop', () => {
56
+ const wrapper = createWrapper();
57
+
58
+ const description = wrapper.find('[data-test-description]');
59
+ expect(description.exists()).toBe(true);
60
+ expect(description.text()).toBe(definitionItemMock.description);
61
+ });
62
+
63
+ it('renders the title as slot', () => {
64
+ const wrapper = createWrapper(definitionItemMock, true);
65
+
66
+ const title = wrapper.find('[data-test-title]');
67
+ expect(title.exists()).toBe(true);
68
+ expect(title.text()).toBe(definitionItemMock.title);
69
+ });
70
+
71
+ it('renders the description as slot', () => {
72
+ const wrapper = createWrapper(definitionItemMock, true);
73
+
74
+ const description = wrapper.find('[data-test-description]');
75
+ expect(description.exists()).toBe(true);
76
+ expect(description.text()).toBe(definitionItemMock.description);
77
+ });
78
+
79
+ it('does not render when description is empty and hideEmptyValues is true', () => {
80
+ const wrapper = createWrapper(definitionItemWithoutDescriptionMock, false, true);
81
+
82
+ const item = wrapper.find('[data-test-item]');
83
+ expect(item.exists()).toBe(false);
84
+ });
85
+
86
+ it('render the component with props when provided', () => {
87
+ const wrapper = createWrapper(definitionItemWithComponentMock);
88
+
89
+ const component = wrapper.findComponent('[data-test-component]' as unknown as DefinedComponent);
90
+ expect(component.exists()).toBe(true);
91
+ expect(component.props('size')).toStrictEqual(definitionItemWithComponentMock.componentProperties?.size);
92
+ });
93
+ });
@@ -0,0 +1,35 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { shallowMount } from '@vue/test-utils';
3
+ import AppDefinitionItem from '../AppDefinitionItem.vue';
4
+ import AppDefinitionList from '../AppDefinitionList.vue';
5
+ import { items as itemsMock } from '../__mocks__';
6
+
7
+ import type { VueWrapper } from '@vue/test-utils';
8
+
9
+ function createWrapper(hideEmptyValues = false): VueWrapper<InstanceType<typeof AppDefinitionList>> {
10
+ return shallowMount(AppDefinitionList, {
11
+ props: {
12
+ items: itemsMock,
13
+ hideEmptyValues,
14
+ },
15
+ });
16
+ }
17
+
18
+ describe('the AppDefinitionList component', () => {
19
+ it('renders AppDefinitionItem for each item', () => {
20
+ const wrapper = createWrapper();
21
+
22
+ const items = wrapper.findAllComponents(AppDefinitionItem);
23
+ expect(items).toHaveLength(3);
24
+
25
+ expect(items[0].props('title')).toBe(itemsMock[0].title);
26
+ expect(items[0].props('description')).toBe(itemsMock[0].description);
27
+ expect(items[1].props('title')).toBe(itemsMock[1].title);
28
+ expect(items[1].props('description')).toBe(itemsMock[1].description);
29
+ expect(items[1].props('hideEmptyValues')).toBe(false);
30
+ expect(items[1].props('component')).toBeUndefined();
31
+ expect(items[2].props('description')).toBeUndefined();
32
+ expect(items[2].props('component')).toStrictEqual(itemsMock[2].component);
33
+ expect(items[2].props('componentProperties')).toStrictEqual(itemsMock[2].componentProperties);
34
+ });
35
+ });
@@ -0,0 +1,8 @@
1
+ import type { Component, VNode } from 'vue';
2
+
3
+ export interface DefinitionItem {
4
+ title: string;
5
+ description?: string;
6
+ component?: Component | VNode;
7
+ componentProperties?: Record<string, unknown>;
8
+ }
@@ -0,0 +1,19 @@
1
+ <script lang="ts" setup>
2
+ import { Disclosure } from '@headlessui/vue';
3
+
4
+ withDefaults(defineProps<{
5
+ defaultOpen?: boolean;
6
+ }>(), {
7
+ defaultOpen: false,
8
+ });
9
+ </script>
10
+
11
+ <template>
12
+ <Disclosure
13
+ :default-open="defaultOpen"
14
+ class="border-b border-zinc-200 last:border-0"
15
+ as="div"
16
+ >
17
+ <slot></slot>
18
+ </Disclosure>
19
+ </template>
@@ -0,0 +1,43 @@
1
+ <script lang="ts" setup>
2
+ import { ref } from 'vue';
3
+ import { DisclosureButton } from '@headlessui/vue';
4
+ import { ChevronDownIcon } from '~icons';
5
+
6
+ const toggleButton = ref<InstanceType<typeof DisclosureButton> | null>(null);
7
+
8
+ function onButtonClick(): void {
9
+ if (toggleButton.value?.$el.dataset.headlessuiState === 'open') {
10
+ toggleButton.value?.$el.blur();
11
+ }
12
+ }
13
+ </script>
14
+
15
+ <template>
16
+ <DisclosureButton
17
+ ref="toggleButton"
18
+ v-slot="{ open }"
19
+ as="button"
20
+ class="flex w-full items-center py-4 text-zinc-900
21
+ outline-0 transition-font focus:font-bold"
22
+ @click="onButtonClick"
23
+ >
24
+ <span
25
+ :class="{ 'font-bold': open }"
26
+ class="text-left"
27
+ >
28
+ <slot></slot>
29
+ </span>
30
+
31
+ <span class="ml-auto pl-2">
32
+ <slot
33
+ :open="open"
34
+ name="icon"
35
+ >
36
+ <ChevronDownIcon
37
+ :class="{ 'rotate-180': open }"
38
+ class="size-5 text-zinc-900 transition-transform"
39
+ />
40
+ </slot>
41
+ </span>
42
+ </DisclosureButton>
43
+ </template>
@@ -0,0 +1,31 @@
1
+ <script lang="ts" setup>
2
+ import { DisclosurePanel } from '@headlessui/vue';
3
+
4
+ withDefaults(defineProps<{
5
+ static?: boolean;
6
+ unmount?: boolean;
7
+ }>(), {
8
+ static: false,
9
+ unmount: true,
10
+ });
11
+ </script>
12
+
13
+ <template>
14
+ <Transition
15
+ enter-active-class="transition duration-100 ease-out"
16
+ enter-from-class="transform scale-95 opacity-0"
17
+ enter-to-class="transform scale-100 opacity-100"
18
+ leave-active-class="transition duration-75 ease-out"
19
+ leave-from-class="transform scale-100 opacity-100"
20
+ leave-to-class="transform scale-95 opacity-0"
21
+ >
22
+ <DisclosurePanel
23
+ :static="static"
24
+ :unmount="unmount"
25
+ class="-mt-2 mb-4"
26
+ as="div"
27
+ >
28
+ <slot></slot>
29
+ </DisclosurePanel>
30
+ </Transition>
31
+ </template>
@@ -0,0 +1,70 @@
1
+ import { defineComponent } from 'vue';
2
+ import { describe, it, expect } from 'vitest';
3
+ import { shallowMount } from '@vue/test-utils';
4
+ import { DisclosureButton } from '@headlessui/vue';
5
+ import AppDisclosureButton from '../AppDisclosureButton.vue';
6
+
7
+ import type { Component, PropType } from 'vue';
8
+ import type { ComponentMountingOptions, VueWrapper } from '@vue/test-utils';
9
+
10
+ const DisclosureButtonStub = defineComponent({
11
+ name: 'DisclosureButtonStub',
12
+
13
+ props: {
14
+ as: {
15
+ type: [String, Object] as PropType<string | Component>,
16
+ default: 'button',
17
+ },
18
+ },
19
+
20
+ data() {
21
+ return {
22
+ open: false,
23
+ };
24
+ },
25
+
26
+ template: `
27
+ <button>
28
+ <slot :open="open"></slot>
29
+ </button>
30
+ `,
31
+ });
32
+
33
+ function createWrapper(
34
+ slots?: ComponentMountingOptions<typeof AppDisclosureButton>['slots'],
35
+ ): VueWrapper<InstanceType<typeof AppDisclosureButton>> {
36
+ return shallowMount(AppDisclosureButton, {
37
+ slots,
38
+ global: {
39
+ stubs: {
40
+ DisclosureButton: DisclosureButtonStub,
41
+ },
42
+ },
43
+ });
44
+ }
45
+
46
+ describe('the AppDisclosureButton component', () => {
47
+ it('should render DisclosureButton as root element', () => {
48
+ const wrapper = createWrapper();
49
+
50
+ const disclosureButton = wrapper.findComponent(DisclosureButton);
51
+ expect(disclosureButton.exists()).toBe(true);
52
+ expect(wrapper.element).toStrictEqual(disclosureButton.element);
53
+ });
54
+
55
+ it('should always render the Disclosure component as button', () => {
56
+ const wrapper = createWrapper();
57
+
58
+ const disclosureButton = wrapper.findComponent(DisclosureButton);
59
+ expect(disclosureButton.props('as')).toBe('button');
60
+ });
61
+
62
+ it('should render the default slot content inside the disclosure', () => {
63
+ const content = '<span data-test-content>Content</span>';
64
+ const wrapper = createWrapper({ default: content });
65
+ expect(wrapper.text()).toBe('Content');
66
+
67
+ const disclosureButton = wrapper.findComponent(DisclosureButton);
68
+ expect(disclosureButton.find('[data-test-content]').exists()).toBe(true);
69
+ });
70
+ });
@@ -0,0 +1,64 @@
1
+ import { Transition } from 'vue';
2
+ import { describe, it, expect } from 'vitest';
3
+ import { shallowMount } from '@vue/test-utils';
4
+ import { DisclosurePanel } from '@headlessui/vue';
5
+ import AppDisclosurePanel from '../AppDisclosurePanel.vue';
6
+
7
+ describe('the AppDisclosurePanel component', () => {
8
+ it('should render a Transition as root element', () => {
9
+ const wrapper = shallowMount(AppDisclosurePanel);
10
+
11
+ const transition = wrapper.findComponent(Transition);
12
+ expect(transition.exists()).toBe(true);
13
+ });
14
+
15
+ it('should render the DisclosurePanel inside the Transition', () => {
16
+ const wrapper = shallowMount(AppDisclosurePanel);
17
+
18
+ const transition = wrapper.findComponent(Transition);
19
+ const disclosurePanel = transition.findComponent(DisclosurePanel);
20
+ expect(disclosurePanel.exists()).toBe(true);
21
+ });
22
+
23
+ it('should always render the DisclosurePanel component as div', () => {
24
+ const wrapper = shallowMount(AppDisclosurePanel);
25
+
26
+ const disclosurePanel = wrapper.findComponent(DisclosurePanel);
27
+ expect(disclosurePanel.props('as')).toBe('div');
28
+ });
29
+
30
+ it('can change the static prop', async () => {
31
+ const wrapper = shallowMount(AppDisclosurePanel);
32
+ expect(wrapper.props('static')).toBe(false);
33
+
34
+ const disclosurePanel = wrapper.findComponent(DisclosurePanel);
35
+ expect(disclosurePanel.props('static')).toBe(false);
36
+
37
+ await wrapper.setProps({ static: true });
38
+
39
+ expect(disclosurePanel.props('static')).toBe(true);
40
+ });
41
+
42
+ it('can change the unmount prop', async () => {
43
+ const wrapper = shallowMount(AppDisclosurePanel);
44
+ expect(wrapper.props('unmount')).toBe(true);
45
+
46
+ const disclosurePanel = wrapper.findComponent(DisclosurePanel);
47
+ expect(disclosurePanel.props('unmount')).toBe(true);
48
+
49
+ await wrapper.setProps({ unmount: false });
50
+
51
+ expect(disclosurePanel.props('unmount')).toBe(false);
52
+ });
53
+
54
+ it('should render the default slot content inside the disclosure panel', () => {
55
+ const content = '<span data-test-content>Content</span>';
56
+ const wrapper = shallowMount(AppDisclosurePanel, {
57
+ slots: { default: content },
58
+ });
59
+ expect(wrapper.text()).toBe('Content');
60
+
61
+ const disclosurePanel = wrapper.findComponent(DisclosurePanel);
62
+ expect(disclosurePanel.find('[data-test-content]').exists()).toBe(true);
63
+ });
64
+ });