@autoafleveren/ui 1.2.13 → 1.3.3

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 (402) hide show
  1. package/dist/config/tailwind/config.cjs +1 -0
  2. package/dist/icons.cjs +229 -230
  3. package/dist/icons.css +1 -1
  4. package/dist/icons.js +9985 -9758
  5. package/dist/types/components/AppActionBar/AppActionBar.vue.d.ts +1 -4
  6. package/dist/types/components/AppActionBar/AppActionBarItem.vue.d.ts +21 -0
  7. package/dist/types/components/AppActionBar/AppActionBarSubMenu.vue.d.ts +2 -6
  8. package/dist/types/components/AppActionBar/Components/Error.vue.d.ts +1 -1
  9. package/dist/types/components/AppActionBar/Components/Loading.vue.d.ts +1 -1
  10. package/dist/types/components/AppActionBar/Components/MultiSelect.vue.d.ts +4 -4
  11. package/dist/types/components/AppAlert/AppAlert.vue.d.ts +29 -0
  12. package/dist/types/components/AppAvatar/AppAvatar.vue.d.ts +2 -2
  13. package/dist/types/components/AppAvatar/DefaultAvatar.vue.d.ts +1 -1
  14. package/dist/types/components/AppBackButton/AppBackButton.vue.d.ts +4 -15
  15. package/dist/types/components/AppBadge/AppBadge.vue.d.ts +23 -0
  16. package/dist/types/components/AppButton/AppButton.vue.d.ts +26 -0
  17. package/dist/types/components/AppButton/ButtonIconSlot.vue.d.ts +15 -0
  18. package/dist/types/components/AppCard/AppCard.vue.d.ts +39 -0
  19. package/dist/types/components/AppCard/CardAction.vue.d.ts +1 -1
  20. package/dist/types/components/AppCard/CardIconSlot.vue.d.ts +17 -0
  21. package/dist/types/components/AppColor/AppColor.vue.d.ts +3 -6
  22. package/dist/types/components/AppColorCard/AppColorCard.vue.d.ts +27 -0
  23. package/dist/types/components/AppConfirm/AppConfirm.vue.d.ts +6 -284
  24. package/dist/types/components/AppContextMenu/AppContextMenu.vue.d.ts +1 -4
  25. package/dist/types/components/AppContextMenu/ShortcutItem.vue.d.ts +2 -2
  26. package/dist/types/components/AppDataTable/AppDataTable.vue.d.ts +10 -5
  27. package/dist/types/components/AppDataTable/AppDataTableFooter.vue.d.ts +5 -35
  28. package/dist/types/components/AppDefinitionList/AppDefinitionItem.vue.d.ts +30 -0
  29. package/dist/types/components/AppDefinitionList/AppDefinitionList.vue.d.ts +5 -13
  30. package/dist/types/components/AppDisclosure/AppDisclosure.vue.d.ts +3 -10
  31. package/dist/types/components/AppDisclosure/AppDisclosureButton.vue.d.ts +16 -0
  32. package/dist/types/components/AppDisclosure/AppDisclosurePanel.vue.d.ts +5 -13
  33. package/dist/types/components/AppDrawer/AppDrawer.vue.d.ts +4 -35
  34. package/dist/types/components/AppDropdownButton/AppDropdownButton.vue.d.ts +25 -0
  35. package/dist/types/components/AppDropdownButton/AppDropdownItem.vue.d.ts +2 -23
  36. package/dist/types/components/AppError/AppError.vue.d.ts +6 -47
  37. package/dist/types/components/AppImageDropzone/AppImageDropzone.vue.d.ts +2 -6
  38. package/dist/types/components/AppInput/AppInput.vue.d.ts +14 -8
  39. package/dist/types/components/AppInput/FileInput.vue.d.ts +5 -19
  40. package/dist/types/components/AppInput/Input.vue.d.ts +2 -2
  41. package/dist/types/components/AppInput/InputIconSlot.vue.d.ts +15 -0
  42. package/dist/types/components/AppInput/LocationInput.vue.d.ts +2 -5
  43. package/dist/types/components/AppInputLabel/AppInputLabel.vue.d.ts +5 -7
  44. package/dist/types/components/AppLicensePlate/AppLicensePlate.vue.d.ts +5 -11
  45. package/dist/types/components/AppLoader/AppLoader.vue.d.ts +2 -2
  46. package/dist/types/components/AppMaps/AppMaps.vue.d.ts +2 -5
  47. package/dist/types/components/AppMenu/AppMenu.vue.d.ts +2 -2
  48. package/dist/types/components/AppMenu/AppMenuItem.vue.d.ts +16 -0
  49. package/dist/types/components/AppModal/AppModal.vue.d.ts +51 -0
  50. package/dist/types/components/AppNavigationMenu/AppNavigationMenu.vue.d.ts +1 -1
  51. package/dist/types/components/AppNavigationMenu/Mobile.vue.d.ts +1 -1
  52. package/dist/types/components/AppNavigationMenu/NavigationItem.vue.d.ts +1 -1
  53. package/dist/types/components/AppNavigationMenu/SupportItem.vue.d.ts +1 -1
  54. package/dist/types/components/AppPagination/AppPagination.vue.d.ts +2 -2
  55. package/dist/types/components/AppPagination/AppPaginationItem.vue.d.ts +3 -9
  56. package/dist/types/components/AppProgressBar/AppProgressBar.vue.d.ts +2 -2
  57. package/dist/types/components/AppProgressBar/AppProgressBarStep.vue.d.ts +5 -7
  58. package/dist/types/components/AppRating/AppRating.vue.d.ts +5 -23
  59. package/dist/types/components/AppRating/VueStarRating/Star.vue.d.ts +2 -2
  60. package/dist/types/components/AppRating/VueStarRating/StarRating.vue.d.ts +5 -62
  61. package/dist/types/components/AppSection/AppSection.vue.d.ts +8 -13
  62. package/dist/types/components/AppSelect/AppSelect.vue.d.ts +33 -0
  63. package/dist/types/components/AppStepper/AppStepper.vue.d.ts +4 -27
  64. package/dist/types/components/AppTable/AppTable.vue.d.ts +5 -7
  65. package/dist/types/components/AppTimeline/AppTimeline.vue.d.ts +5 -12
  66. package/dist/types/components/AppTimeline/AppTimelineItem.vue.d.ts +10 -28
  67. package/dist/types/components/AppTimeline/AppTimelineItemIcon.vue.d.ts +1 -1
  68. package/dist/types/components/AppToggle/AppToggle.vue.d.ts +4 -4
  69. package/dist/types/components/AppToggleCard/AppToggleCard.vue.d.ts +27 -0
  70. package/dist/types/composables/index.d.ts +1 -1
  71. package/dist/types/composables/useActionBar/index.d.ts +3 -3
  72. package/dist/types/icons/BuildingCircleCheck.vue.d.ts +1 -1
  73. package/dist/types/icons/BuildingCircleXmark.vue.d.ts +1 -1
  74. package/dist/types/icons/CarsIcon.vue.d.ts +1 -1
  75. package/dist/types/icons/ChatPersonRoundedIcon.vue.d.ts +1 -1
  76. package/dist/types/icons/CompanyIcon.vue.d.ts +1 -1
  77. package/dist/types/icons/HeroGirlIcon.vue.d.ts +1 -1
  78. package/dist/types/icons/HeroPersonIcon.vue.d.ts +1 -1
  79. package/dist/types/icons/HeroPersonRoundedIcon.vue.d.ts +1 -1
  80. package/dist/types/icons/HeroPersonWithBgIcon.vue.d.ts +1 -1
  81. package/dist/types/icons/LocationMarkerIcon.vue.d.ts +1 -1
  82. package/dist/types/icons/PartyPopperIcon.vue.d.ts +1 -1
  83. package/dist/types/icons/status/ErrorIcon.vue.d.ts +1 -1
  84. package/dist/types/icons/status/SuccessIcon.vue.d.ts +1 -1
  85. package/dist/types/icons/status/WarningIcon.vue.d.ts +1 -1
  86. package/dist/types/layouts/Auth/Auth.vue.d.ts +5 -13
  87. package/dist/types/layouts/Base/Base.vue.d.ts +4 -17
  88. package/dist/types/layouts/Platform/Platform.vue.d.ts +4 -20
  89. package/dist/types/plugins/Toast/Toast.vue.d.ts +2 -2
  90. package/dist/ui-library.css +2 -2
  91. package/dist/ui-storybook.css +2 -2
  92. package/dist/ui.cjs +190 -191
  93. package/dist/ui.css +1 -1
  94. package/dist/ui.js +20566 -19443
  95. package/package.json +43 -47
  96. package/src/App.vue +15 -0
  97. package/src/Playground.vue.example +9 -0
  98. package/src/config/eslint.cjs +199 -0
  99. package/src/config/tailwind/config.cjs +229 -0
  100. package/src/config/tailwind/screens.json +9 -0
  101. package/src/css/build.css +52 -0
  102. package/src/css/main.css +4 -0
  103. package/src/css/theme.css +208 -0
  104. package/src/css/tinymce.css +58 -0
  105. package/src/main.ts +34 -0
  106. package/src/modules/components/AppActionBar/AppActionBar.vue +96 -0
  107. package/src/modules/components/AppActionBar/AppActionBarItem.vue +123 -0
  108. package/src/modules/components/AppActionBar/AppActionBarSubMenu.vue +89 -0
  109. package/src/modules/components/AppActionBar/Components/Error.vue +11 -0
  110. package/src/modules/components/AppActionBar/Components/Loading.vue +9 -0
  111. package/src/modules/components/AppActionBar/Components/MultiSelect.vue +102 -0
  112. package/src/modules/components/AppActionBar/Components/__tests__/multi-select.spec.ts +74 -0
  113. package/src/modules/components/AppActionBar/__mocks__/index.ts +36 -0
  114. package/src/modules/components/AppActionBar/__tests__/app-action-bar-item.spec.ts +134 -0
  115. package/src/modules/components/AppActionBar/__tests__/app-action-bar-sub-menu.spec.ts +45 -0
  116. package/src/modules/components/AppActionBar/__tests__/app-action-bar.spec.ts +92 -0
  117. package/src/modules/components/AppActionBar/index.d.ts +29 -0
  118. package/src/modules/components/AppActionBar/index.ts +18 -0
  119. package/src/modules/components/AppAlert/AppAlert.vue +69 -0
  120. package/src/modules/components/AppAlert/__tests__/app-alert.spec.ts +67 -0
  121. package/src/modules/components/AppAlert/index.d.ts +3 -0
  122. package/src/modules/components/AppAlert/index.ts +18 -0
  123. package/src/modules/components/AppAvatar/AppAvatar.vue +30 -0
  124. package/src/modules/components/AppAvatar/DefaultAvatar.vue +187 -0
  125. package/src/modules/components/AppAvatar/__tests__/app-avatar.spec.ts +70 -0
  126. package/src/modules/components/AppAvatar/index.d.ts +9 -0
  127. package/src/modules/components/AppAvatar/index.ts +9 -0
  128. package/src/modules/components/AppBackButton/AppBackButton.vue +51 -0
  129. package/src/modules/components/AppBackButton/__tests__/app-back-button.spec.ts +70 -0
  130. package/src/modules/components/AppBadge/AppBadge.vue +65 -0
  131. package/src/modules/components/AppBadge/__tests__/app-badge.spec.ts +64 -0
  132. package/src/modules/components/AppBadge/index.d.ts +13 -0
  133. package/src/modules/components/AppBadge/index.ts +29 -0
  134. package/src/modules/components/AppButton/AppButton.vue +53 -0
  135. package/src/modules/components/AppButton/ButtonIconSlot.vue +26 -0
  136. package/src/modules/components/AppButton/__tests__/app-button.spec.ts +145 -0
  137. package/src/modules/components/AppButton/__tests__/button-icon-slot.spec.ts +30 -0
  138. package/src/modules/components/AppButton/index.d.ts +16 -0
  139. package/src/modules/components/AppButton/index.ts +57 -0
  140. package/src/modules/components/AppCard/AppCard.vue +88 -0
  141. package/src/modules/components/AppCard/CardAction.vue +101 -0
  142. package/src/modules/components/AppCard/CardIconSlot.vue +65 -0
  143. package/src/modules/components/AppCard/__tests__/app-card.spec.ts +109 -0
  144. package/src/modules/components/AppCard/__tests__/card-action.spec.ts +55 -0
  145. package/src/modules/components/AppCard/__tests__/card-icon-slot.spec.ts +27 -0
  146. package/src/modules/components/AppCard/index.d.ts +12 -0
  147. package/src/modules/components/AppCard/index.ts +5 -0
  148. package/src/modules/components/AppColor/AppColor.vue +74 -0
  149. package/src/modules/components/AppColor/__tests__/app-color.spec.ts +53 -0
  150. package/src/modules/components/AppColor/index.d.ts +10 -0
  151. package/src/modules/components/AppColorCard/AppColorCard.vue +41 -0
  152. package/src/modules/components/AppColorCard/__tests__/app-color-card.spec.ts +55 -0
  153. package/src/modules/components/AppConfirm/AppConfirm.vue +237 -0
  154. package/src/modules/components/AppConfirm/__tests__/app-confirm.spec.ts +366 -0
  155. package/src/modules/components/AppConfirm/index.d.ts +31 -0
  156. package/src/modules/components/AppConfirm/index.ts +1 -0
  157. package/src/modules/components/AppContextMenu/AppContextMenu.vue +100 -0
  158. package/src/modules/components/AppContextMenu/ShortcutItem.vue +37 -0
  159. package/src/modules/components/AppContextMenu/__mocks__/index.ts +25 -0
  160. package/src/modules/components/AppContextMenu/__tests__/app-context-menu.spec.ts +71 -0
  161. package/src/modules/components/AppContextMenu/__tests__/shortcut-item.spec.ts +29 -0
  162. package/src/modules/components/AppContextMenu/index.d.ts +23 -0
  163. package/src/modules/components/AppDataTable/AppDataTable.vue +323 -0
  164. package/src/modules/components/AppDataTable/AppDataTableFooter.vue +91 -0
  165. package/src/modules/components/AppDataTable/__mocks__/index.ts +71 -0
  166. package/src/modules/components/AppDataTable/__tests__/app-data-table-footer.spec.ts +107 -0
  167. package/src/modules/components/AppDataTable/__tests__/app-data-table.spec.ts +153 -0
  168. package/src/modules/components/AppDataTable/index.d.ts +29 -0
  169. package/src/modules/components/AppDefinitionList/AppDefinitionItem.vue +57 -0
  170. package/src/modules/components/AppDefinitionList/AppDefinitionList.vue +31 -0
  171. package/src/modules/components/AppDefinitionList/__mocks__/index.ts +31 -0
  172. package/src/modules/components/AppDefinitionList/__tests__/app-definition-item.spec.ts +93 -0
  173. package/src/modules/components/AppDefinitionList/__tests__/app-definition-list.spec.ts +35 -0
  174. package/src/modules/components/AppDefinitionList/index.d.ts +8 -0
  175. package/src/modules/components/AppDisclosure/AppDisclosure.vue +19 -0
  176. package/src/modules/components/AppDisclosure/AppDisclosureButton.vue +43 -0
  177. package/src/modules/components/AppDisclosure/AppDisclosurePanel.vue +31 -0
  178. package/src/modules/components/AppDisclosure/__tests__/app-disclosure-button.spec.ts +70 -0
  179. package/src/modules/components/AppDisclosure/__tests__/app-disclosure-panel.spec.ts +64 -0
  180. package/src/modules/components/AppDisclosure/__tests__/app-disclosure.spec.ts +41 -0
  181. package/src/modules/components/AppDrawer/AppDrawer.vue +149 -0
  182. package/src/modules/components/AppDrawer/__tests__/app-drawer.spec.ts +120 -0
  183. package/src/modules/components/AppDrawer/index.d.ts +27 -0
  184. package/src/modules/components/AppDropdownButton/AppDropdownButton.vue +82 -0
  185. package/src/modules/components/AppDropdownButton/AppDropdownItem.vue +67 -0
  186. package/src/modules/components/AppDropdownButton/__mocks__/index.ts +25 -0
  187. package/src/modules/components/AppDropdownButton/__tests__/app-dropdown-button.spec.ts +81 -0
  188. package/src/modules/components/AppDropdownButton/__tests__/app-dropdown-item.spec.ts +108 -0
  189. package/src/modules/components/AppDropdownButton/index.d.ts +26 -0
  190. package/src/modules/components/AppDropdownButton/index.ts +8 -0
  191. package/src/modules/components/AppError/AppError.vue +233 -0
  192. package/src/modules/components/AppError/__tests__/app-error.spec.ts +366 -0
  193. package/src/modules/components/AppError/index.d.ts +30 -0
  194. package/src/modules/components/AppError/index.ts +1 -0
  195. package/src/modules/components/AppImageDropzone/AppImageDropzone.vue +130 -0
  196. package/src/modules/components/AppImageDropzone/__tests__/app-image-dropzone.spec.ts +92 -0
  197. package/src/modules/components/AppImageDropzone/index.d.ts +8 -0
  198. package/src/modules/components/AppInput/AppInput.vue +247 -0
  199. package/src/modules/components/AppInput/FileInput.vue +58 -0
  200. package/src/modules/components/AppInput/Input.vue +141 -0
  201. package/src/modules/components/AppInput/InputIconSlot.vue +27 -0
  202. package/src/modules/components/AppInput/LocationInput.vue +150 -0
  203. package/src/modules/components/AppInput/__mocks__/location.ts +13 -0
  204. package/src/modules/components/AppInput/__tests__/app-input.spec.ts +255 -0
  205. package/src/modules/components/AppInput/__tests__/file-input.spec.ts +48 -0
  206. package/src/modules/components/AppInput/__tests__/input-icon-slot.spec.ts +27 -0
  207. package/src/modules/components/AppInput/__tests__/input.spec.ts +260 -0
  208. package/src/modules/components/AppInput/__tests__/location-input.spec.ts +159 -0
  209. package/src/modules/components/AppInput/choice.ts +24 -0
  210. package/src/modules/components/AppInput/datepicker.ts +62 -0
  211. package/src/modules/components/AppInput/index.d.ts +68 -0
  212. package/src/modules/components/AppInput/index.ts +133 -0
  213. package/src/modules/components/AppInput/location.ts +8 -0
  214. package/src/modules/components/AppInput/richText.ts +45 -0
  215. package/src/modules/components/AppInputLabel/AppInputLabel.vue +15 -0
  216. package/src/modules/components/AppInputLabel/__tests__/app-input-label.spec.ts +38 -0
  217. package/src/modules/components/AppInputLabel/index.d.ts +6 -0
  218. package/src/modules/components/AppLicensePlate/AppLicensePlate.vue +34 -0
  219. package/src/modules/components/AppLicensePlate/__tests__/app-license-plate.spec.ts +46 -0
  220. package/src/modules/components/AppLicensePlate/index.d.ts +1 -0
  221. package/src/modules/components/AppLoader/AppLoader.vue +37 -0
  222. package/src/modules/components/AppLoader/index.d.ts +1 -0
  223. package/src/modules/components/AppLoader/index.ts +8 -0
  224. package/src/modules/components/AppMaps/AppMaps.vue +105 -0
  225. package/src/modules/components/AppMaps/index.ts +44 -0
  226. package/src/modules/components/AppMenu/AppMenu.vue +79 -0
  227. package/src/modules/components/AppMenu/AppMenuItem.vue +40 -0
  228. package/src/modules/components/AppMenu/__mocks__/index.ts +23 -0
  229. package/src/modules/components/AppMenu/__tests__/app-menu-item.spec.ts +47 -0
  230. package/src/modules/components/AppMenu/__tests__/app-menu.spec.ts +53 -0
  231. package/src/modules/components/AppMenu/index.d.ts +15 -0
  232. package/src/modules/components/AppModal/AppModal.vue +261 -0
  233. package/src/modules/components/AppModal/__tests__/app-modal.spec.ts +282 -0
  234. package/src/modules/components/AppModal/index.d.ts +36 -0
  235. package/src/modules/components/AppNavigationMenu/AppNavigationMenu.vue +95 -0
  236. package/src/modules/components/AppNavigationMenu/Mobile.vue +126 -0
  237. package/src/modules/components/AppNavigationMenu/NavigationItem.vue +82 -0
  238. package/src/modules/components/AppNavigationMenu/SupportItem.vue +29 -0
  239. package/src/modules/components/AppNavigationMenu/__tests__/app-navigation-menu.spec.ts +104 -0
  240. package/src/modules/components/AppNavigationMenu/__tests__/mobile.spec.ts +155 -0
  241. package/src/modules/components/AppNavigationMenu/__tests__/navigation-item.spec.ts +91 -0
  242. package/src/modules/components/AppNavigationMenu/__tests__/support-item.spec.ts +48 -0
  243. package/src/modules/components/AppPagination/AppPagination.vue +133 -0
  244. package/src/modules/components/AppPagination/AppPaginationItem.vue +28 -0
  245. package/src/modules/components/AppPagination/__mocks__/index.ts +20 -0
  246. package/src/modules/components/AppPagination/__tests__/app-pagination.spec.ts +143 -0
  247. package/src/modules/components/AppPagination/index.d.ts +24 -0
  248. package/src/modules/components/AppProgressBar/AppProgressBar.vue +93 -0
  249. package/src/modules/components/AppProgressBar/AppProgressBarStep.vue +5 -0
  250. package/src/modules/components/AppProgressBar/__mocks__/index.ts +17 -0
  251. package/src/modules/components/AppProgressBar/__tests__/app-progress-bar-step.spec.ts +18 -0
  252. package/src/modules/components/AppProgressBar/__tests__/app-progress-bar.spec.ts +77 -0
  253. package/src/modules/components/AppProgressBar/index.d.ts +21 -0
  254. package/src/modules/components/AppRating/AppRating.vue +42 -0
  255. package/src/modules/components/AppRating/VueStarRating/Star.vue +215 -0
  256. package/src/modules/components/AppRating/VueStarRating/StarRating.vue +231 -0
  257. package/src/modules/components/AppRating/VueStarRating/classes/AlphaColor.ts +68 -0
  258. package/src/modules/components/AppRating/VueStarRating/readme.md +279 -0
  259. package/src/modules/components/AppRating/__tests__/app-rating.spec.ts +36 -0
  260. package/src/modules/components/AppSection/AppSection.vue +35 -0
  261. package/src/modules/components/AppSection/__tests__/app-section.spec.ts +53 -0
  262. package/src/modules/components/AppSelect/AppSelect.vue +176 -0
  263. package/src/modules/components/AppSelect/__mocks__/index.ts +24 -0
  264. package/src/modules/components/AppSelect/__tests__/app-select.spec.ts +73 -0
  265. package/src/modules/components/AppSelect/index.d.ts +43 -0
  266. package/src/modules/components/AppSelect/index.ts +69 -0
  267. package/src/modules/components/AppStepper/AppStepper.vue +79 -0
  268. package/src/modules/components/AppStepper/__tests__/app-stepper.spec.ts +59 -0
  269. package/src/modules/components/AppTable/AppTable.vue +40 -0
  270. package/src/modules/components/AppTimeline/AppTimeline.vue +22 -0
  271. package/src/modules/components/AppTimeline/AppTimelineItem.vue +97 -0
  272. package/src/modules/components/AppTimeline/AppTimelineItemIcon.vue +55 -0
  273. package/src/modules/components/AppTimeline/__mocks__/timeline.ts +29 -0
  274. package/src/modules/components/AppTimeline/__tests__/app-timeline-item-Icon.spec.ts +35 -0
  275. package/src/modules/components/AppTimeline/__tests__/app-timeline-item.spec.ts +121 -0
  276. package/src/modules/components/AppTimeline/__tests__/app-timeline.spec.ts +55 -0
  277. package/src/modules/components/AppTimeline/index.d.ts +30 -0
  278. package/src/modules/components/AppTimeline/index.ts +13 -0
  279. package/src/modules/components/AppToggle/AppToggle.vue +36 -0
  280. package/src/modules/components/AppToggle/__tests__/app-toggle.spec.ts +54 -0
  281. package/src/modules/components/AppToggle/index.d.ts +3 -0
  282. package/src/modules/components/AppToggleCard/AppToggleCard.vue +45 -0
  283. package/src/modules/components/AppToggleCard/__tests__/app-toggle-card.spec.ts +55 -0
  284. package/src/modules/components/index.ts +43 -0
  285. package/src/modules/composables/index.ts +13 -0
  286. package/src/modules/composables/useActionBar/__mocks__/index.ts +17 -0
  287. package/src/modules/composables/useActionBar/__tests__/index.spec.ts +62 -0
  288. package/src/modules/composables/useActionBar/index.d.ts +1 -0
  289. package/src/modules/composables/useActionBar/index.ts +67 -0
  290. package/src/modules/composables/useComputedPosition/index.d.ts +16 -0
  291. package/src/modules/composables/useComputedPosition/index.ts +199 -0
  292. package/src/modules/composables/useConfirm/__tests__/index.spec.ts +29 -0
  293. package/src/modules/composables/useConfirm/index.ts +63 -0
  294. package/src/modules/composables/useContextMenu/index.ts +127 -0
  295. package/src/modules/composables/useDrawer/__tests__/index.spec.ts +34 -0
  296. package/src/modules/composables/useDrawer/index.ts +136 -0
  297. package/src/modules/composables/useEcho/index.ts +167 -0
  298. package/src/modules/composables/useError/__tests__/index.spec.ts +29 -0
  299. package/src/modules/composables/useError/index.ts +61 -0
  300. package/src/modules/composables/useGoogleApi/__tests__/index.spec.ts +39 -0
  301. package/src/modules/composables/useGoogleApi/index.ts +26 -0
  302. package/src/modules/composables/useLayout/__tests__/index.spec.ts +34 -0
  303. package/src/modules/composables/useLayout/index.d.ts +1 -0
  304. package/src/modules/composables/useLayout/index.ts +68 -0
  305. package/src/modules/composables/useModal/__tests__/index.spec.ts +34 -0
  306. package/src/modules/composables/useModal/index.ts +97 -0
  307. package/src/modules/composables/useNavigation/__mocks__/navigation.ts +22 -0
  308. package/src/modules/composables/useNavigation/__tests__/index.spec.ts +88 -0
  309. package/src/modules/composables/useNavigation/index.d.ts +17 -0
  310. package/src/modules/composables/useNavigation/index.ts +97 -0
  311. package/src/modules/icons/BuildingCircleCheck.vue +32 -0
  312. package/src/modules/icons/BuildingCircleXmark.vue +20 -0
  313. package/src/modules/icons/CarsIcon.vue +29 -0
  314. package/src/modules/icons/ChatPersonRoundedIcon.vue +184 -0
  315. package/src/modules/icons/CompanyIcon.vue +18 -0
  316. package/src/modules/icons/HeroGirlIcon.vue +246 -0
  317. package/src/modules/icons/HeroPersonIcon.vue +402 -0
  318. package/src/modules/icons/HeroPersonRoundedIcon.vue +412 -0
  319. package/src/modules/icons/HeroPersonWithBgIcon.vue +4503 -0
  320. package/src/modules/icons/LocationMarkerIcon.vue +33 -0
  321. package/src/modules/icons/PartyPopperIcon.vue +146 -0
  322. package/src/modules/icons/index.ts +32 -0
  323. package/src/modules/icons/status/ErrorIcon.vue +24 -0
  324. package/src/modules/icons/status/SuccessIcon.vue +24 -0
  325. package/src/modules/icons/status/WarningIcon.vue +27 -0
  326. package/src/modules/icons/status/index.ts +3 -0
  327. package/src/modules/index.ts +8 -0
  328. package/src/modules/layouts/Auth/Auth.vue +36 -0
  329. package/src/modules/layouts/Auth/__tests__/auth.spec.ts +63 -0
  330. package/src/modules/layouts/Base/Base.vue +69 -0
  331. package/src/modules/layouts/Base/__tests__/base.spec.ts +56 -0
  332. package/src/modules/layouts/Platform/Platform.vue +96 -0
  333. package/src/modules/layouts/Platform/__tests__/platform.spec.ts +56 -0
  334. package/src/modules/layouts/index.ts +9 -0
  335. package/src/modules/plugins/Sentry/index.d.ts +16 -0
  336. package/src/modules/plugins/Sentry/index.ts +65 -0
  337. package/src/modules/plugins/Sentry/language/nl.ts +13 -0
  338. package/src/modules/plugins/TinyMCE/lang/nl.js +430 -0
  339. package/src/modules/plugins/Toast/Toast.vue +58 -0
  340. package/src/modules/plugins/Toast/__tests__/toast.spec.ts +90 -0
  341. package/src/modules/plugins/Toast/index.ts +36 -0
  342. package/src/modules/plugins/Toast/types.d.ts +265 -0
  343. package/src/modules/plugins/index.ts +63 -0
  344. package/src/stories/Introduction.mdx +4 -0
  345. package/src/stories/assets/code-brackets.svg +1 -0
  346. package/src/stories/assets/colors.svg +1 -0
  347. package/src/stories/assets/comments.svg +1 -0
  348. package/src/stories/assets/direction.svg +1 -0
  349. package/src/stories/assets/flow.svg +1 -0
  350. package/src/stories/assets/images/logo.png +0 -0
  351. package/src/stories/assets/images/road.png +0 -0
  352. package/src/stories/assets/plugin.svg +1 -0
  353. package/src/stories/assets/repo.svg +1 -0
  354. package/src/stories/assets/stackalt.svg +1 -0
  355. package/src/stories/components/ActionBar/ActionBar.stories.ts +67 -0
  356. package/src/stories/components/Alert/Alert.stories.ts +53 -0
  357. package/src/stories/components/Avatar/Avatar.stories.ts +44 -0
  358. package/src/stories/components/BackButton/BackButton.stories.ts +39 -0
  359. package/src/stories/components/Badge/Badge.stories.ts +42 -0
  360. package/src/stories/components/Button/Button.stories.ts +132 -0
  361. package/src/stories/components/Card/Card.stories.ts +70 -0
  362. package/src/stories/components/Color/Color.stories.ts +41 -0
  363. package/src/stories/components/ColorCard/ColorCard.stories.ts +43 -0
  364. package/src/stories/components/Confirm/Confirm.stories.ts +110 -0
  365. package/src/stories/components/ContextMenu/ContextMenu.stories.ts +85 -0
  366. package/src/stories/components/DefinitionList/DefinitionList.stories.ts +32 -0
  367. package/src/stories/components/Disclosure/Disclosure.stories.ts +61 -0
  368. package/src/stories/components/DropdownButton/DropdownButton.stories.ts +121 -0
  369. package/src/stories/components/Error/Error.stories.ts +106 -0
  370. package/src/stories/components/ImageDropzone/ImageDropzone.stories.ts +41 -0
  371. package/src/stories/components/Input/Input.stories.ts +180 -0
  372. package/src/stories/components/Input/LocationInput.stories.ts +77 -0
  373. package/src/stories/components/LicensePlate/LicensePlate.stories.ts +39 -0
  374. package/src/stories/components/Maps/Maps.stories.ts +36 -0
  375. package/src/stories/components/Menu/Menu.stories.ts +41 -0
  376. package/src/stories/components/Modal/Modal.stories.ts +68 -0
  377. package/src/stories/components/Navigation/Navigation.stories.ts +62 -0
  378. package/src/stories/components/Pagination/Pagination.stories.ts +62 -0
  379. package/src/stories/components/ProgressBar/ProgressBar.stories.ts +48 -0
  380. package/src/stories/components/Rating/Rating.stories.ts +38 -0
  381. package/src/stories/components/Section/Section.stories.ts +44 -0
  382. package/src/stories/components/Select/Select.stories.ts +90 -0
  383. package/src/stories/components/Stepper/Stepper.stories.ts +38 -0
  384. package/src/stories/components/Table/DataTable.stories.ts +96 -0
  385. package/src/stories/components/Table/Table.stories.ts +45 -0
  386. package/src/stories/components/Timeline/Timeline.stories.ts +46 -0
  387. package/src/stories/components/Toast/Toast.stories.ts +47 -0
  388. package/src/stories/components/Toggle/Toggle.stories.ts +41 -0
  389. package/src/stories/components/ToggleCard/ToggleCard.stories.ts +43 -0
  390. package/src/stories/layouts/Auth.stories.ts +43 -0
  391. package/src/stories/layouts/Base.stories.ts +70 -0
  392. package/src/tests/mocks/resize-observer.ts +13 -0
  393. package/src/tests/stubs/AppSelect.ts +89 -0
  394. package/src/tests/stubs/HeadlessUiDialogStub.ts +24 -0
  395. package/src/tests/stubs/HeadlessUiTransitionChildStub.ts +20 -0
  396. package/src/tests/stubs/HeadlessUiTransitionRootStub.ts +25 -0
  397. package/src/tests/stubs/IconStub.ts +9 -0
  398. package/src/tests/stubs/Vue3EasyDataTableStub.ts +53 -0
  399. package/src/typings/plugin.d.ts +5 -0
  400. package/src/typings/shims-vue.d.ts +13 -0
  401. package/src/typings/utilities.d.ts +4 -0
  402. package/src/typings/vite-environment.d.ts +12 -0
@@ -0,0 +1,30 @@
1
+ <script lang="ts" setup>
2
+ import { domClassesPerSize } from '.';
3
+ import DefaultAvatar from './DefaultAvatar.vue';
4
+
5
+ import type { Props } from './index.d';
6
+
7
+ withDefaults(defineProps<Props>(), {
8
+ size: 'medium',
9
+ });
10
+ </script>
11
+
12
+ <template>
13
+ <div
14
+ :class="domClassesPerSize[size]"
15
+ class="app-avatar relative flex items-center rounded-full"
16
+ >
17
+ <img
18
+ v-if="src"
19
+ :src="src"
20
+ alt="avatar"
21
+ class="absolute inset-0 size-full object-cover object-center rounded-full"
22
+ >
23
+
24
+ <DefaultAvatar
25
+ v-else
26
+ :color="defaultAvatarColor"
27
+ class="absolute inset-0 size-full rounded-full"
28
+ />
29
+ </div>
30
+ </template>
@@ -0,0 +1,187 @@
1
+ <script lang="ts" setup>
2
+ import { computed } from 'vue';
3
+ import { useLayout } from '~/modules/composables';
4
+
5
+ const props = defineProps<{
6
+ color?: string;
7
+ }>();
8
+
9
+ const { colors } = useLayout();
10
+
11
+ const colorWithFallback = computed(() => props.color ?? colors.primaryColorActive.value);
12
+ </script>
13
+
14
+ <template>
15
+ <svg
16
+ width="39"
17
+ height="39"
18
+ viewBox="0 0 39 39"
19
+ fill="none"
20
+ xmlns="http://www.w3.org/2000/svg"
21
+ >
22
+ <mask
23
+ id="mask0_928_1872"
24
+ style="mask-type:alpha"
25
+ maskUnits="userSpaceOnUse"
26
+ x="0"
27
+ y="0"
28
+ width="39"
29
+ height="39"
30
+ >
31
+ <circle
32
+ cx="19.5"
33
+ cy="19.5"
34
+ r="19.5"
35
+ fill="#D9D9D9"
36
+ ></circle>
37
+ </mask>
38
+
39
+ <g mask="url(#mask0_928_1872)">
40
+ <circle
41
+ cx="19.5"
42
+ cy="19.5"
43
+ r="19.5"
44
+ fill="#E4E4E7"
45
+ ></circle>
46
+
47
+ <path
48
+ d="M22.1755 30.7083C21.0239 32.4573 21.339 35.344 21.339 35.344C21.339 35.344 23.0323 34.3422 23.1456
49
+ 32.6631C23.2588 30.984 22.1755 30.7083 22.1755 30.7083Z"
50
+ fill="#EBEFF2"
51
+ ></path>
52
+
53
+ <path
54
+ :fill="colorWithFallback"
55
+ d="M35.5856 80.897C29.1642 82.4294 14.7376 82.1295 8.80295 80.8632C8.72254 75.5395 8.88442 70.0636 9.34891
56
+ 64.4843C10.4863 50.8311 21.5303 37.8094 22.0551 33.4794C22.1757 32.4899 22.2107 31.5637 22.1715 30.7083C23.219
57
+ 32.849 22.4128 36.1324 23.3428 35.6687C24.1342 35.2748 27.7454 32.322 28.7706 31.0314C31.6253 40.2237 35.6692
58
+ 55.4599 35.6692 68.0444C35.6776 72.405 35.648 76.6969 35.5845 80.8981L35.5856 80.897Z"
59
+ ></path>
60
+
61
+ <path
62
+ d="M28.9482 30.3374C28.9564 30.4399 28.8581 30.617 28.6812 30.8453C27.6784 32.1493 24.1454 35.1328 23.3724
63
+ 35.5308C22.4628 35.9993 23.2503 32.6818 22.2268 30.5188C22.7132 30.5487 26.6922 28.6152 27.933 28.4082C28.0986
64
+ 28.3804 28.2155 28.3836 28.2683 28.4252C28.7226 28.7859 28.8954 29.6513 28.9482 30.3364V30.3374Z"
65
+ fill="white"
66
+ ></path>
67
+
68
+ <path
69
+ d="M14.0829 3.72947C10.4355 3.03851 8.76582 6.04253 9.26737 8.87937C9.76786 11.7162 15.3706 12.932 16.0383
70
+ 12.9563C16.706 12.9807 17.0393 8.95132 16.6817 6.78111C16.324 4.61195 14.0829 3.72947 14.0829 3.72947Z"
71
+ fill="#27272A"
72
+ ></path>
73
+
74
+ <path
75
+ d="M27.9844 28.5191C26.8257 28.7064 23.335 30.3201 22.3573 30.5761C22.3541 30.5761 22.353 30.5772 22.352
76
+ 30.5772C22.262 30.6015 22.1933 30.6132 22.1499 30.61C22.0282 27.9001 21.1595 25.9204 19.8463 24.9797C19.7575
77
+ 24.9173 19.6686 24.858 19.5776 24.8051C18.8623 24.3871 17.747 24.3533 16.6233 24.3173H16.6222C14.7695 24.2602
78
+ 12.8913 24.202 12.7357 22.4201C12.485 19.5589 13.9875 18.8796 13.996 17.9135C14.0055 16.9475 13.0214 17.1623
79
+ 12.45 16.8152C11.8776 16.4681 12.9505 15.8756 13.8087 13.9085C14.2848 12.8155 14.0891 11.4685 14.2266
80
+ 10.1807C14.3335 9.15119 14.6562 8.15761 15.7048 7.36401L20.2463 9.65274L25.9856 13.9085V22.6814C25.9856
81
+ 22.6814 25.9888 22.6857 25.9888 22.6889C26.0205 22.7746 26.3676 23.7078 26.9125 25.295C27.2162 26.1775
82
+ 27.5802 27.2631 27.9854 28.5181L27.9844 28.5191Z"
83
+ fill="#F5CAA4"
84
+ ></path>
85
+
86
+ <path
87
+ d="M25.9848 13.9096V22.6825C25.0536 20.7102 25.8959 17.6532 23.9288 16.9506C21.9618 16.248 21.2349 13.862
88
+ 21.2349 13.862C21.2349 13.862 20.9132 13.4916 20.7217 12.5499C20.5312 11.6082 18.7906 11.5373 18.4689
89
+ 11.5838C18.179 11.6272 14.9538 11.7753 14.2258 10.1807C14.3327 9.15119 14.6554 8.15761 15.704 7.36401L20.2455
90
+ 9.65274L25.9848 13.9085V13.9096Z"
91
+ fill="#EAAA79"
92
+ ></path>
93
+
94
+ <path
95
+ d="M31.2133 19.1316C31.2694 19.5083 31.2757 20.0828 31.1646 20.687C30.8514 22.3747 29.6155 24.2836 25.9851
96
+ 22.6837V14.8165C21.5801 16.8682 20.7463 13.642 20.9971 12.659C21.2479 11.676 20.9251 11.6051 20.031
97
+ 11.9966C19.1369 12.3913 15.5721 12.4326 15.2388 10.0243C14.9055 7.61705 15.8578 6.75891 14.6663
98
+ 7.16312C13.4749 7.56944 11.329 5.01724 12.1385 3.0142C12.95 1.01117 14.2367 -3.2499 17.956 -2.30182C21.6753
99
+ -1.3548 19.2194 2.15606 20.2448 2.87136C21.2701 3.58665 23.2012 0.98895 25.2042 2.49043C27.2072 3.99297
100
+ 25.2275 7.80646 25.2042 8.73549C25.1799 9.66558 27.6834 7.44775 29.6621 8.68787C31.6418 9.928 32.4291 11.5734
101
+ 31.1413 13.7658C30.8556 14.2536 30.5932 14.6451 30.3647 14.9647C29.5626 16.081 29.1372 16.318 29.3044
102
+ 16.7339C29.5192 17.2703 30.9985 17.6999 31.2122 19.1295L31.2133 19.1316Z"
103
+ fill="#52525B"
104
+ ></path>
105
+
106
+ <path
107
+ d="M27.9849 28.5192C26.8262 28.7065 23.3355 30.3201 22.3578 30.5762C22.3546 30.5762 22.3535 30.5772 22.3525
108
+ 30.5772C22.2424 30.5963 22.1747 30.6058 22.1567 30.609C22.3197 30.5349 25.9099 28.934 26.4697 28.0473C26.822
109
+ 27.4907 26.9035 26.2051 26.913 25.2961C27.2167 26.1786 27.5807 27.2643 27.986 28.5192H27.9849Z"
110
+ fill="#EAAA79"
111
+ ></path>
112
+
113
+ <path
114
+ d="M19.8411 24.6635C19.8421 24.7746 19.8453 24.8804 19.8463 24.9809C19.7575 24.9185 19.6686 24.8593 19.5776
115
+ 24.8063C18.8623 24.3884 17.747 24.3545 16.6233 24.3185C19.3882 24.2328 21.7721 21.3018 21.9615 21.4923C22.152
116
+ 21.6828 19.8157 23.3514 19.84 24.6635H19.8411Z"
117
+ fill="#EAAA79"
118
+ ></path>
119
+
120
+ <path
121
+ d="M31.1645 20.686C29.0292 20.3516 25.9913 19.3697 25.9913 19.3697C25.9913 19.3697 25.9881 19.3644 25.9839
122
+ 19.3506V16.171C26.5733 15.0134 27.6949 13.4304 27.6949 13.4304L30.3645 14.9658C29.5625 16.0821 29.1371
123
+ 16.3191 29.3043 16.7349C29.5191 17.2714 30.9983 17.701 31.2121 19.1305C31.2682 19.5072 31.2745 20.0818
124
+ 31.1634 20.686H31.1645Z"
125
+ fill="#27272A"
126
+ ></path>
127
+
128
+ <path
129
+ d="M22.8708 17.9423C23.2338 13.6124 27.169 11.9067 28.1012 13.9764C29.0334 16.0461 25.0675 19.412 23.9776
130
+ 19.5538C22.8878 19.6956 22.8719 17.9423 22.8719 17.9423H22.8708Z"
131
+ fill="#F5CAA4"
132
+ ></path>
133
+
134
+ <path
135
+ d="M24.16 18.0892C23.45 16.574 24.9356 15.2683 25.8212 15.9423C26.7069 16.6163 25.0615 16.5454 24.9514
136
+ 16.9179C24.8414 17.2903 24.9747 17.4702 24.6933 17.5411C24.4107 17.612 24.2785 18.34 24.16 18.0892Z"
137
+ fill="#EAAA79"
138
+ ></path>
139
+
140
+ <circle
141
+ cx="19.4453"
142
+ cy="17.2644"
143
+ r="1.62251"
144
+ fill="#FCA573"
145
+ ></circle>
146
+
147
+ <path
148
+ d="M13.4185 19.8579C14.36 21.1027 16.4522 22.6975 17.2889 19.1187C16.4662 20.0624 14.531 20.432
149
+ 13.4185 19.8579Z"
150
+ fill="white"
151
+ ></path>
152
+
153
+ <path
154
+ d="M13.4185 19.8579C14.36 21.1027 16.4522 22.6975 17.2889 19.1187C16.4952 20.2142 14.4583 20.8804 13.4185
155
+ 19.8579Z"
156
+ fill="#FE9661"
157
+ ></path>
158
+
159
+ <path
160
+ d="M31.7089 80.4317C30.4285 81.4243 29.1027 82.3745 27.798 83.2538C27.0013 82.2538 24.265 79.7577
161
+ 23.1433 79.253C23.1423 79.2519 23.1402 79.2519 23.1402 79.2519C25.1495 76.1389 26.978 73.0164 27.2552
162
+ 71.17C27.9705 66.4095 18.277 56.8779 19.6737 51.0317C19.6875 50.9735 20.1658 49.3948 20.1806 49.3366C21.3022
163
+ 44.9009 25.3167 38.2485 27.6848 42.1625C31.7713 48.9176 39.4946 61.977 40.559 68.0199C41.2204 71.7752 36.8302
164
+ 76.4574 31.7089 80.4317Z"
165
+ fill="#E25C2A"
166
+ ></path>
167
+
168
+ <ellipse
169
+ cx="16.0958"
170
+ cy="13.853"
171
+ rx="0.579469"
172
+ ry="1.39073"
173
+ transform="rotate(7.61614 16.0958 13.853)"
174
+ fill="#232426"
175
+ ></ellipse>
176
+
177
+ <ellipse
178
+ cx="13.9746"
179
+ cy="13.7072"
180
+ rx="0.543825"
181
+ ry="1.30518"
182
+ transform="rotate(-0.540649 13.9746 13.7072)"
183
+ fill="#232426"
184
+ ></ellipse>
185
+ </g>
186
+ </svg>
187
+ </template>
@@ -0,0 +1,70 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { shallowMount } from '@vue/test-utils';
3
+ import AppAvatar from '../AppAvatar.vue';
4
+ import DefaultAvatar from '../DefaultAvatar.vue';
5
+
6
+ import type { VueWrapper } from '@vue/test-utils';
7
+ import type { Size } from '../index.d';
8
+
9
+ function createWrapper(
10
+ size: Size,
11
+ src?: string,
12
+ defaultAvatarColor?: string,
13
+ ): VueWrapper<InstanceType<typeof AppAvatar>> {
14
+ return shallowMount(AppAvatar, {
15
+ props: {
16
+ size,
17
+ src,
18
+ defaultAvatarColor,
19
+ },
20
+ });
21
+ }
22
+
23
+ describe('the AppAvatar component', () => {
24
+ it('renders default avatar when src not defined', () => {
25
+ const wrapper = createWrapper('small');
26
+
27
+ const defaultAvatar = wrapper.findComponent(DefaultAvatar);
28
+ expect(defaultAvatar.exists()).toBe(true);
29
+
30
+ const img = wrapper.find('img');
31
+ expect(img.exists()).toBe(false);
32
+ });
33
+
34
+ it('renders custom avatar when src defined', () => {
35
+ const wrapper = createWrapper('medium', 'image.src');
36
+
37
+ const defaultAvatar = wrapper.findComponent(DefaultAvatar);
38
+ expect(defaultAvatar.exists()).toBe(false);
39
+
40
+ const img = wrapper.find('img');
41
+ expect(img.exists()).toBe(true);
42
+ expect(img.attributes('src')).toBe('image.src');
43
+ });
44
+
45
+ it('can set avatar size', () => {
46
+ let wrapper = createWrapper('small');
47
+
48
+ expect(wrapper.classes('h-7')).toBe(true);
49
+ expect(wrapper.classes('w-7')).toBe(true);
50
+
51
+ wrapper = createWrapper('medium');
52
+
53
+ expect(wrapper.classes('h-10')).toBe(true);
54
+ expect(wrapper.classes('w-10')).toBe(true);
55
+
56
+ wrapper = createWrapper('large');
57
+
58
+ expect(wrapper.classes('h-12')).toBe(true);
59
+ expect(wrapper.classes('w-12')).toBe(true);
60
+ });
61
+
62
+ it('can set the color of the default avatar', () => {
63
+ const color = '#3094CD';
64
+ const wrapper = createWrapper('small', undefined, color);
65
+
66
+ const defaultAvatar = wrapper.findComponent(DefaultAvatar);
67
+ expect(defaultAvatar.exists()).toBe(true);
68
+ expect(defaultAvatar.props('color')).toBe(color);
69
+ });
70
+ });
@@ -0,0 +1,9 @@
1
+ import type { sizes } from './index';
2
+
3
+ export type Size = typeof sizes[number];
4
+
5
+ export interface Props {
6
+ size?: Size;
7
+ src?: string;
8
+ defaultAvatarColor?: string;
9
+ }
@@ -0,0 +1,9 @@
1
+ import type { Size } from './index.d';
2
+
3
+ export const sizes = ['small', 'medium', 'large'] as const;
4
+
5
+ export const domClassesPerSize: Record<Size, string[]> = {
6
+ small: ['w-7 h-7'],
7
+ medium: ['w-10 h-10'],
8
+ large: ['w-12 h-12'],
9
+ };
@@ -0,0 +1,51 @@
1
+ <script lang="ts" setup>
2
+ import { useRouter } from 'vue-router';
3
+ import { ChevronLeftIcon } from '~icons';
4
+
5
+ import type { RouteLocationRaw, NavigationFailure } from 'vue-router';
6
+
7
+ const props = withDefaults(defineProps<{
8
+ buttonText?: string;
9
+ iconClasses?: string;
10
+ to?: RouteLocationRaw;
11
+ }>(), {
12
+ buttonText: 'Ga terug',
13
+ to: undefined,
14
+ iconClasses: '',
15
+ });
16
+
17
+ const router = useRouter();
18
+
19
+ async function goBack(): Promise<void | NavigationFailure | undefined> {
20
+ if (props.to) {
21
+ return router.push(props.to);
22
+ }
23
+
24
+ return router.back();
25
+ }
26
+ </script>
27
+
28
+ <template>
29
+ <div
30
+ class="inline-block cursor-pointer"
31
+ @click="goBack"
32
+ >
33
+ <div class="group mb-3 flex items-center font-semibold text-zinc-700">
34
+ <div
35
+ :class="iconClasses"
36
+ class="mr-4 flex items-center justify-center rounded-full bg-white p-2 drop-shadow-xs
37
+ transition-transform group-hover:-translate-x-2"
38
+ >
39
+ <!-- @vue-ignore -->
40
+ <ChevronLeftIcon
41
+ class="h-4 stroke-3 text-black"
42
+ data-test-icon
43
+ />
44
+ </div>
45
+
46
+ <slot>
47
+ {{ buttonText }}
48
+ </slot>
49
+ </div>
50
+ </div>
51
+ </template>
@@ -0,0 +1,70 @@
1
+ import { beforeEach, describe, expect, it, vi } from 'vitest';
2
+ import { shallowMount } from '@vue/test-utils';
3
+ import IconStub from '~/tests/stubs/IconStub';
4
+ import AppBackButton from '../AppBackButton.vue';
5
+
6
+ import type { RouteLocationRaw } from 'vue-router';
7
+ import type { VueWrapper } from '@vue/test-utils';
8
+ import type { ChevronLeftIcon } from '@heroicons/vue/24/outline';
9
+
10
+ vi.mock('@autoafleveren/ui/icons', () => ({
11
+ ChevronLeftIcon: IconStub,
12
+ }));
13
+
14
+ const routerBackMock = vi.fn();
15
+ const routerPushMock = vi.fn();
16
+ vi.mock('vue-router', () => ({
17
+ useRouter: () => ({
18
+ back: routerBackMock,
19
+ push: routerPushMock,
20
+ }),
21
+ }));
22
+
23
+ function createWrapper(
24
+ buttonText = 'Ga terug',
25
+ to: RouteLocationRaw | undefined = undefined,
26
+ ): VueWrapper<InstanceType<typeof AppBackButton>> {
27
+ return shallowMount(AppBackButton, {
28
+ props: { buttonText, to },
29
+ });
30
+ }
31
+
32
+ describe('the AppBackButton component', () => {
33
+ beforeEach(() => {
34
+ routerBackMock.mockClear();
35
+ routerPushMock.mockClear();
36
+ });
37
+
38
+ it('should go back when to not provided', async () => {
39
+ expect.assertions(2);
40
+
41
+ const wrapper = createWrapper();
42
+
43
+ await wrapper.trigger('click');
44
+
45
+ expect(routerBackMock).toHaveBeenCalledTimes(1);
46
+ expect(routerPushMock).toHaveBeenCalledTimes(0);
47
+ });
48
+
49
+ it('should go to route when to provided', async () => {
50
+ const wrapper = createWrapper('Ga terug', { name: 'dashboard' });
51
+
52
+ await wrapper.trigger('click');
53
+
54
+ expect(routerBackMock).toHaveBeenCalledTimes(0);
55
+ expect(routerPushMock).toHaveBeenCalledTimes(1);
56
+ expect(routerPushMock).toHaveBeenCalledWith({ name: 'dashboard' });
57
+ });
58
+
59
+ it('should render text', () => {
60
+ const wrapper = createWrapper();
61
+ expect(wrapper.text()).toBe('Ga terug');
62
+ });
63
+
64
+ it('should render an icon', () => {
65
+ const wrapper = createWrapper();
66
+
67
+ const icon = wrapper.findComponent<typeof ChevronLeftIcon>('[data-test-icon]');
68
+ expect(icon.exists()).toBe(true);
69
+ });
70
+ });
@@ -0,0 +1,65 @@
1
+ <script lang="ts" setup>
2
+ import { computed } from 'vue';
3
+ import { domClassesPerType, domClassesPerSize, domClassesPerTypeRounded } from '.';
4
+
5
+ import type { Props } from './index.d';
6
+
7
+ const props = withDefaults(defineProps<Props>(), {
8
+ type: 'default',
9
+ size: 'medium',
10
+ rounded: false,
11
+ leadingIcon: undefined,
12
+ trailingIcon: undefined,
13
+ });
14
+
15
+ const domClasses = computed(() => ({
16
+ 'rounded-full text-white!': props.rounded,
17
+ 'rounded-lg': !props.rounded,
18
+ }));
19
+ </script>
20
+
21
+ <template>
22
+ <div
23
+ :class="[
24
+ ...domClassesPerType[type],
25
+ ...domClassesPerSize[size],
26
+ ...(props.rounded ? domClassesPerTypeRounded[type] : []),
27
+ domClasses,
28
+ ]"
29
+ class="app-badge inline-flex items-center font-semibold"
30
+ >
31
+ <span
32
+ v-if="$slots.leadingIcon || leadingIcon"
33
+ class="app-badge__icon mr-2 h-4"
34
+ >
35
+ <slot name="leadingIcon">
36
+ <Component
37
+ :is="leadingIcon"
38
+ v-if="leadingIcon"
39
+ />
40
+ </slot>
41
+ </span>
42
+
43
+ <slot></slot>
44
+
45
+ <span
46
+ v-if="$slots.trailingIcon || trailingIcon"
47
+ class="app-badge__icon ml-2 h-4"
48
+ >
49
+ <slot name="trailingIcon">
50
+ <Component
51
+ :is="trailingIcon"
52
+ v-if="trailingIcon"
53
+ />
54
+ </slot>
55
+ </span>
56
+ </div>
57
+ </template>
58
+
59
+ <style scoped>
60
+ @reference "./../../../css/main.css";
61
+
62
+ .app-badge__icon > :deep(*) {
63
+ @apply h-full!;
64
+ }
65
+ </style>
@@ -0,0 +1,64 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { shallowMount } from '@vue/test-utils';
3
+ import AppBadge from '../AppBadge.vue';
4
+
5
+ import type { ComponentMountingOptions, VueWrapper } from '@vue/test-utils';
6
+ import type { Props } from '~components/AppBadge/index.d';
7
+
8
+ function createWrapper(
9
+ props?: Props,
10
+ slots?: ComponentMountingOptions<typeof AppBadge>['slots'],
11
+ ): VueWrapper<InstanceType<typeof AppBadge>> {
12
+ return shallowMount(AppBadge, { props, slots });
13
+ }
14
+
15
+ describe('the AppBadge component', () => {
16
+ it('has no content by default', () => {
17
+ const wrapper = createWrapper();
18
+ expect(wrapper.text()).toBe('');
19
+ });
20
+
21
+ it('should render the default slot', () => {
22
+ const badgeText = 'Example text';
23
+ const slotContent = `<i data-test-badge-content>${badgeText}</i>`;
24
+ const wrapper = createWrapper({}, { default: slotContent });
25
+
26
+ const badgeContent = wrapper.find('[data-test-badge-content]');
27
+ expect(badgeContent.exists()).toBe(true);
28
+ expect(badgeContent.text()).toBe(badgeText);
29
+ });
30
+
31
+ it('can render a leading icon via slot', () => {
32
+ const leadingIcon = '<i data-test-leading-icon>Icon</i>';
33
+ const wrapper = createWrapper({}, { default: 'Example text', leadingIcon });
34
+
35
+ const leadingIconWrapper = wrapper.find('[data-test-leading-icon]');
36
+ expect(leadingIconWrapper.exists()).toBe(true);
37
+ expect(leadingIconWrapper.text()).toBe('Icon');
38
+ });
39
+
40
+ it('can render a trailing icon via slot', () => {
41
+ const trailingIcon = '<i data-test-trailing-icon>Icon</i>';
42
+ const wrapper = createWrapper({}, { default: 'Example text', trailingIcon });
43
+
44
+ const trailingIconWrapper = wrapper.find('[data-test-trailing-icon]');
45
+ expect(trailingIconWrapper.exists()).toBe(true);
46
+ expect(trailingIconWrapper.text()).toBe('Icon');
47
+ });
48
+
49
+ it('should add extra classes when rounded-sm', () => {
50
+ const wrapper = createWrapper({ type: 'error', rounded: true }, { default: 'Example text' });
51
+
52
+ expect(wrapper.classes('rounded-full')).toBe(true);
53
+ expect(wrapper.classes('rounded-lg')).toBe(false);
54
+ expect(wrapper.classes('bg-error!')).toBe(true);
55
+ });
56
+
57
+ it('should not add extra classes when not rounded-sm', () => {
58
+ const wrapper = createWrapper({ type: 'error' }, { default: 'Example text' });
59
+
60
+ expect(wrapper.classes('rounded-full')).toBe(false);
61
+ expect(wrapper.classes('rounded-lg')).toBe(true);
62
+ expect(wrapper.classes('bg-error!')).toBe(false);
63
+ });
64
+ });
@@ -0,0 +1,13 @@
1
+ import type { Component } from 'vue';
2
+ import type { types, sizes } from '.';
3
+
4
+ export type Type = typeof types[number];
5
+ export type Size = typeof sizes[number];
6
+
7
+ export interface Props {
8
+ type?: Type;
9
+ rounded?: boolean;
10
+ size?: Size;
11
+ leadingIcon?: Component | string;
12
+ trailingIcon?: Component | string;
13
+ }
@@ -0,0 +1,29 @@
1
+ import type { Size, Type } from './index.d';
2
+
3
+ export const types = ['plain', 'default', 'success', 'warning', 'error', 'info', 'inactive'] as const;
4
+ export const sizes = ['medium', 'large'] as const;
5
+
6
+ export const domClassesPerType: Record<Type, string[]> = {
7
+ plain: [],
8
+ default: ['bg-zinc-200', 'text-zinc-600'],
9
+ success: ['bg-green-200', 'text-green-600'],
10
+ warning: ['bg-yellow-200', 'text-yellow-600'],
11
+ error: ['bg-red-200', 'text-red-600'],
12
+ info: ['bg-sky-200', 'text-sky-600'],
13
+ inactive: ['bg-orange-200', 'text-orange-500'],
14
+ };
15
+
16
+ export const domClassesPerSize: Record<Size, string[]> = {
17
+ medium: ['px-3 py-[3px] text-sm min-h-7'],
18
+ large: ['px-3 py-2.5 text-sm'],
19
+ };
20
+
21
+ export const domClassesPerTypeRounded: Record<Type, string[]> = {
22
+ plain: [],
23
+ default: ['bg-zinc-600!'],
24
+ success: ['bg-green-600!'],
25
+ warning: ['bg-yellow-600!'],
26
+ error: ['bg-error!'],
27
+ info: ['bg-sky-600!'],
28
+ inactive: ['bg-orange-600!'],
29
+ };
@@ -0,0 +1,53 @@
1
+ <script lang="ts" setup>
2
+ import ButtonIconSlot from './ButtonIconSlot.vue';
3
+ import { domClassesPerColorType, domClassesPerColorBorderedType, domClassesPerSize } from '.';
4
+
5
+ import type { Props } from './index.d';
6
+
7
+ withDefaults(defineProps<Props>(), {
8
+ as: 'button',
9
+ size: 'medium',
10
+ type: 'button',
11
+ colorType: 'primary',
12
+ disabled: false,
13
+ loading: false,
14
+ bordered: false,
15
+ block: false,
16
+ });
17
+ </script>
18
+
19
+ <template>
20
+ <Component
21
+ :is="as"
22
+ :type="type"
23
+ :disabled="disabled || loading"
24
+ :class="[
25
+ ...(!bordered ? domClassesPerColorType[colorType] : []),
26
+ ...(bordered ? domClassesPerColorBorderedType[colorType] : []),
27
+ ...domClassesPerSize[size],
28
+ ...(block ? ['w-full', 'justify-center'] : []),
29
+ ]"
30
+ class="app-button inline-flex cursor-pointer items-center whitespace-nowrap
31
+ rounded-lg border text-base font-semibold transition-colors
32
+ focus:outline-hidden disabled:cursor-not-allowed disabled:select-none disabled:opacity-50"
33
+ >
34
+ <ButtonIconSlot
35
+ v-if="$slots.leadingIcon || loading"
36
+ :loading="loading"
37
+ class="mr-3"
38
+ data-test-leading-icon
39
+ >
40
+ <slot name="leadingIcon"></slot>
41
+ </ButtonIconSlot>
42
+
43
+ <slot></slot>
44
+
45
+ <ButtonIconSlot
46
+ v-if="$slots.trailingIcon"
47
+ class="ml-3"
48
+ data-test-trailing-icon
49
+ >
50
+ <slot name="trailingIcon"></slot>
51
+ </ButtonIconSlot>
52
+ </Component>
53
+ </template>
@@ -0,0 +1,26 @@
1
+ <script lang="ts" setup>
2
+ import AppLoader from '../AppLoader/AppLoader.vue';
3
+
4
+ defineProps<{
5
+ loading?: boolean;
6
+ }>();
7
+ </script>
8
+
9
+ <template>
10
+ <span class="app-button__icon h-4">
11
+ <AppLoader
12
+ v-if="loading"
13
+ class="w-4"
14
+ />
15
+
16
+ <slot v-else></slot>
17
+ </span>
18
+ </template>
19
+
20
+ <style scoped>
21
+ @reference "./../../../css/main.css";
22
+
23
+ .app-button__icon > :deep(*) {
24
+ @apply h-full!;
25
+ }
26
+ </style>