@vc-shell/framework 1.1.0-alpha.8 → 1.1.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 (978) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/core/README.md +365 -0
  3. package/core/composables/index.ts +3 -0
  4. package/core/composables/useAppBarMobileButtons/index.ts +17 -0
  5. package/core/composables/useAppBarWidget/index.ts +19 -0
  6. package/core/composables/useGlobalSearch/index.ts +4 -27
  7. package/core/composables/useKeyboardNavigation/index.ts +211 -0
  8. package/core/composables/useSettingsMenu/index.ts +23 -0
  9. package/core/composables/useTheme/index.ts +64 -62
  10. package/core/composables/useToolbar.ts +88 -0
  11. package/core/services/app-bar-menu-service.ts +87 -0
  12. package/core/services/app-bar-mobile-buttons-service.ts +57 -0
  13. package/core/services/global-search-service.ts +36 -0
  14. package/core/services/index.ts +8 -0
  15. package/core/services/settings-menu-service.ts +75 -0
  16. package/core/services/toolbar-service.ts +141 -0
  17. package/core/services/widget-service.ts +15 -3
  18. package/core/types/index.ts +5 -8
  19. package/dist/core/composables/index.d.ts +3 -0
  20. package/dist/core/composables/index.d.ts.map +1 -1
  21. package/dist/core/composables/useAppBarMobileButtons/index.d.ts +3 -0
  22. package/dist/core/composables/useAppBarMobileButtons/index.d.ts.map +1 -0
  23. package/dist/core/composables/useAppBarWidget/index.d.ts +5 -0
  24. package/dist/core/composables/useAppBarWidget/index.d.ts.map +1 -0
  25. package/dist/core/composables/useAppInsights/index.d.ts.map +1 -1
  26. package/dist/core/composables/useBeforeUnload/index.d.ts.map +1 -1
  27. package/dist/core/composables/useGlobalSearch/index.d.ts +2 -8
  28. package/dist/core/composables/useGlobalSearch/index.d.ts.map +1 -1
  29. package/dist/core/composables/useKeyboardNavigation/index.d.ts +24 -0
  30. package/dist/core/composables/useKeyboardNavigation/index.d.ts.map +1 -0
  31. package/dist/core/composables/useLanguages/index.d.ts.map +1 -1
  32. package/dist/core/composables/useSettingsMenu/index.d.ts +5 -0
  33. package/dist/core/composables/useSettingsMenu/index.d.ts.map +1 -0
  34. package/dist/core/composables/useTheme/index.d.ts.map +1 -1
  35. package/dist/core/composables/useToolbar.d.ts +15 -0
  36. package/dist/core/composables/useToolbar.d.ts.map +1 -0
  37. package/dist/core/directives/autofocus/index.d.ts.map +1 -1
  38. package/dist/core/directives/loading/index.d.ts.map +1 -1
  39. package/dist/core/interceptors/index.d.ts +1 -1
  40. package/dist/core/interceptors/index.d.ts.map +1 -1
  41. package/dist/core/plugins/modularity/extensions-helper.d.ts.map +1 -1
  42. package/dist/core/plugins/validation/rules.d.ts.map +1 -1
  43. package/dist/core/services/app-bar-menu-service.d.ts +29 -0
  44. package/dist/core/services/app-bar-menu-service.d.ts.map +1 -0
  45. package/dist/core/services/app-bar-mobile-buttons-service.d.ts +24 -0
  46. package/dist/core/services/app-bar-mobile-buttons-service.d.ts.map +1 -0
  47. package/dist/core/services/global-search-service.d.ts +10 -0
  48. package/dist/core/services/global-search-service.d.ts.map +1 -0
  49. package/dist/core/services/index.d.ts +9 -0
  50. package/dist/core/services/index.d.ts.map +1 -0
  51. package/dist/core/services/settings-menu-service.d.ts +25 -0
  52. package/dist/core/services/settings-menu-service.d.ts.map +1 -0
  53. package/dist/core/services/toolbar-service.d.ts +29 -0
  54. package/dist/core/services/toolbar-service.d.ts.map +1 -0
  55. package/dist/core/services/widget-service.d.ts +7 -1
  56. package/dist/core/services/widget-service.d.ts.map +1 -1
  57. package/dist/core/types/index.d.ts +3 -6
  58. package/dist/core/types/index.d.ts.map +1 -1
  59. package/dist/core/utilities/kebabToCamel.d.ts.map +1 -1
  60. package/dist/index.d.ts +7 -0
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/injection-keys.d.ts +6 -28
  63. package/dist/injection-keys.d.ts.map +1 -1
  64. package/dist/locales/de.json +3 -0
  65. package/dist/locales/en.json +3 -0
  66. package/dist/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts +4 -25
  67. package/dist/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts.map +1 -1
  68. package/dist/shared/components/app-switcher/index.d.ts +2 -2
  69. package/dist/shared/components/app-switcher/index.d.ts.map +1 -1
  70. package/dist/shared/components/blade-navigation/components/vc-blade-navigation/_internal/vc-mobile-back-button.vue.d.ts +3 -14
  71. package/dist/shared/components/blade-navigation/components/vc-blade-navigation/_internal/vc-mobile-back-button.vue.d.ts.map +1 -1
  72. package/dist/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts.map +1 -1
  73. package/dist/shared/components/blade-navigation/components/vc-blade-view/vc-blade-view.d.ts.map +1 -1
  74. package/dist/shared/components/change-password/change-password.vue.d.ts +4 -13
  75. package/dist/shared/components/change-password/change-password.vue.d.ts.map +1 -1
  76. package/dist/shared/components/change-password/index.d.ts +2 -19
  77. package/dist/shared/components/change-password/index.d.ts.map +1 -1
  78. package/dist/shared/components/change-password-button/change-password-button.vue.d.ts.map +1 -1
  79. package/dist/shared/components/common/popup/vc-popup-error.vue.d.ts +9 -19
  80. package/dist/shared/components/common/popup/vc-popup-error.vue.d.ts.map +1 -1
  81. package/dist/shared/components/common/popup/vc-popup-info.vue.d.ts +9 -19
  82. package/dist/shared/components/common/popup/vc-popup-info.vue.d.ts.map +1 -1
  83. package/dist/shared/components/common/popup/vc-popup-warning.vue.d.ts +11 -21
  84. package/dist/shared/components/common/popup/vc-popup-warning.vue.d.ts.map +1 -1
  85. package/dist/shared/components/dashboard-widget-card/dashboard-widget-card.vue.d.ts +9 -15
  86. package/dist/shared/components/dashboard-widget-card/dashboard-widget-card.vue.d.ts.map +1 -1
  87. package/dist/shared/components/draggable-dashboard/DraggableDashboard.vue.d.ts.map +1 -1
  88. package/dist/shared/components/draggable-dashboard/_internal/DashboardWidget.vue.d.ts +4 -13
  89. package/dist/shared/components/draggable-dashboard/_internal/DashboardWidget.vue.d.ts.map +1 -1
  90. package/dist/shared/components/draggable-dashboard/composables/useCollisionDetection.d.ts.map +1 -1
  91. package/dist/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.d.ts +36 -38
  92. package/dist/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.d.ts.map +1 -1
  93. package/dist/shared/components/draggable-dashboard/composables/useDashboardGrid.d.ts +2 -2
  94. package/dist/shared/components/draggable-dashboard/composables/useEventCoordinates.d.ts.map +1 -1
  95. package/dist/shared/components/draggable-dashboard/composables/useGridPosition.d.ts.map +1 -1
  96. package/dist/shared/components/draggable-dashboard/composables/useGridSystem.d.ts.map +1 -1
  97. package/dist/shared/components/draggable-dashboard/composables/useLayoutPersistence.d.ts.map +1 -1
  98. package/dist/shared/components/draggable-dashboard/composables/useWidgetLayout.d.ts.map +1 -1
  99. package/dist/shared/components/error-interceptor/index.d.ts +9 -60
  100. package/dist/shared/components/error-interceptor/index.d.ts.map +1 -1
  101. package/dist/shared/components/generic-dropdown/generic-dropdown.vue.d.ts +27 -101
  102. package/dist/shared/components/generic-dropdown/generic-dropdown.vue.d.ts.map +1 -1
  103. package/dist/shared/components/language-selector/index.d.ts +2 -1
  104. package/dist/shared/components/language-selector/index.d.ts.map +1 -1
  105. package/dist/shared/components/language-selector/language-selector.vue.d.ts.map +1 -1
  106. package/dist/shared/components/logout-button/logout-button.vue.d.ts.map +1 -1
  107. package/dist/shared/components/notification-dropdown/_internal/notification/notification.vue.d.ts +4 -13
  108. package/dist/shared/components/notification-dropdown/_internal/notification/notification.vue.d.ts.map +1 -1
  109. package/dist/shared/components/notification-dropdown/index.d.ts +2 -13
  110. package/dist/shared/components/notification-dropdown/index.d.ts.map +1 -1
  111. package/dist/shared/components/notification-dropdown/notification-dropdown.vue.d.ts +1 -27
  112. package/dist/shared/components/notification-dropdown/notification-dropdown.vue.d.ts.map +1 -1
  113. package/dist/shared/components/notification-template/index.d.ts +2 -62
  114. package/dist/shared/components/notification-template/index.d.ts.map +1 -1
  115. package/dist/shared/components/notification-template/notification-template.vue.d.ts +7 -13
  116. package/dist/shared/components/notification-template/notification-template.vue.d.ts.map +1 -1
  117. package/dist/shared/components/notifications/components/notification-container/index.d.ts +18 -18
  118. package/dist/shared/components/notifications/components/notification-container/index.d.ts.map +1 -1
  119. package/dist/shared/components/notifications/composables/useContainer/index.d.ts +8 -3
  120. package/dist/shared/components/notifications/composables/useContainer/index.d.ts.map +1 -1
  121. package/dist/shared/components/notifications/composables/useInstance/index.d.ts +4 -2
  122. package/dist/shared/components/notifications/composables/useInstance/index.d.ts.map +1 -1
  123. package/dist/shared/components/notifications/core/notification.d.ts +9 -2
  124. package/dist/shared/components/notifications/core/notification.d.ts.map +1 -1
  125. package/dist/shared/components/notifications/types/index.d.ts +3 -3
  126. package/dist/shared/components/notifications/types/index.d.ts.map +1 -1
  127. package/dist/shared/components/popup-handler/components/vc-popup-container/index.d.ts +2 -1
  128. package/dist/shared/components/popup-handler/components/vc-popup-container/index.d.ts.map +1 -1
  129. package/dist/shared/components/popup-handler/components/vc-popup-container/vc-popup-container.vue.d.ts.map +1 -1
  130. package/dist/shared/components/settings-menu/settings-menu.vue.d.ts.map +1 -1
  131. package/dist/shared/components/settings-menu-item/settings-menu-item.vue.d.ts +20 -36
  132. package/dist/shared/components/settings-menu-item/settings-menu-item.vue.d.ts.map +1 -1
  133. package/dist/shared/components/sidebar/sidebar.vue.d.ts +19 -38
  134. package/dist/shared/components/sidebar/sidebar.vue.d.ts.map +1 -1
  135. package/dist/shared/components/sign-in/external-provider.vue.d.ts +4 -13
  136. package/dist/shared/components/sign-in/external-provider.vue.d.ts.map +1 -1
  137. package/dist/shared/components/sign-in/external-providers.vue.d.ts +1 -10
  138. package/dist/shared/components/sign-in/external-providers.vue.d.ts.map +1 -1
  139. package/dist/shared/components/theme-selector/theme-selector.vue.d.ts.map +1 -1
  140. package/dist/shared/components/user-dropdown-button/_internal/user-info.vue.d.ts +1 -10
  141. package/dist/shared/components/user-dropdown-button/_internal/user-info.vue.d.ts.map +1 -1
  142. package/dist/shared/components/user-dropdown-button/_internal/user-sidebar.vue.d.ts +7 -17
  143. package/dist/shared/components/user-dropdown-button/_internal/user-sidebar.vue.d.ts.map +1 -1
  144. package/dist/shared/components/user-dropdown-button/index.d.ts +2 -27
  145. package/dist/shared/components/user-dropdown-button/index.d.ts.map +1 -1
  146. package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts +1 -10
  147. package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts.map +1 -1
  148. package/dist/shared/composables/index.d.ts +2 -0
  149. package/dist/shared/composables/index.d.ts.map +1 -0
  150. package/dist/shared/modules/assets/components/assets-details/assets-details.vue.d.ts +6 -29
  151. package/dist/shared/modules/assets/components/assets-details/assets-details.vue.d.ts.map +1 -1
  152. package/dist/shared/modules/assets/components/assets-details/index.d.ts +2 -1
  153. package/dist/shared/modules/assets/components/assets-details/index.d.ts.map +1 -1
  154. package/dist/shared/modules/assets/index.d.ts +3 -3
  155. package/dist/shared/modules/assets/index.d.ts.map +1 -1
  156. package/dist/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts +9 -34
  157. package/dist/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts.map +1 -1
  158. package/dist/shared/modules/assets-manager/components/assets-manager/index.d.ts +2 -56
  159. package/dist/shared/modules/assets-manager/components/assets-manager/index.d.ts.map +1 -1
  160. package/dist/shared/modules/assets-manager/index.d.ts +2 -2
  161. package/dist/shared/modules/dynamic/components/SchemaRender.d.ts +18 -18
  162. package/dist/shared/modules/dynamic/components/factories.d.ts.map +1 -1
  163. package/dist/shared/modules/dynamic/components/fields/Button.d.ts +6 -75
  164. package/dist/shared/modules/dynamic/components/fields/Button.d.ts.map +1 -1
  165. package/dist/shared/modules/dynamic/components/fields/Card.d.ts +6 -75
  166. package/dist/shared/modules/dynamic/components/fields/Card.d.ts.map +1 -1
  167. package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts +6 -75
  168. package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts.map +1 -1
  169. package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts +6 -75
  170. package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts.map +1 -1
  171. package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts +6 -75
  172. package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts.map +1 -1
  173. package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts +7 -76
  174. package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts.map +1 -1
  175. package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts +4 -73
  176. package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts.map +1 -1
  177. package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts +6 -75
  178. package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts.map +1 -1
  179. package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts +6 -76
  180. package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts.map +1 -1
  181. package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts +6 -75
  182. package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts.map +1 -1
  183. package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts +6 -75
  184. package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts.map +1 -1
  185. package/dist/shared/modules/dynamic/components/fields/InputField.d.ts +4 -73
  186. package/dist/shared/modules/dynamic/components/fields/InputField.d.ts.map +1 -1
  187. package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts +6 -75
  188. package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts.map +1 -1
  189. package/dist/shared/modules/dynamic/components/fields/RadioButtonGroup.d.ts +6 -75
  190. package/dist/shared/modules/dynamic/components/fields/RadioButtonGroup.d.ts.map +1 -1
  191. package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts +6 -75
  192. package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts.map +1 -1
  193. package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts +6 -75
  194. package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts.map +1 -1
  195. package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts +6 -75
  196. package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts.map +1 -1
  197. package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts +6 -75
  198. package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts.map +1 -1
  199. package/dist/shared/modules/dynamic/components/fields/Table.d.ts +6 -75
  200. package/dist/shared/modules/dynamic/components/fields/Table.d.ts.map +1 -1
  201. package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts +6 -75
  202. package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts.map +1 -1
  203. package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts +6 -75
  204. package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts.map +1 -1
  205. package/dist/shared/modules/dynamic/components/fields/props.d.ts +5 -74
  206. package/dist/shared/modules/dynamic/components/fields/props.d.ts.map +1 -1
  207. package/dist/shared/modules/dynamic/components/fields/storybook/pages/DynamicRender.d.ts +12 -142
  208. package/dist/shared/modules/dynamic/components/fields/storybook/pages/DynamicRender.d.ts.map +1 -1
  209. package/dist/shared/modules/dynamic/components/fields/storybook/utils/sourceHighlighter.d.ts.map +1 -1
  210. package/dist/shared/modules/dynamic/components/fields/storybook/utils/sourceTransform.d.ts.map +1 -1
  211. package/dist/shared/modules/dynamic/composables/useDynamicViewsUtils/index.d.ts +1 -1
  212. package/dist/shared/modules/dynamic/composables/useDynamicViewsUtils/index.d.ts.map +1 -1
  213. package/dist/shared/modules/dynamic/composables/useFilterBuilder/index.d.ts.map +1 -1
  214. package/dist/shared/modules/dynamic/composables/useTableTemplates/index.d.ts.map +1 -1
  215. package/dist/shared/modules/dynamic/composables/useToolbarReducer/index.d.ts.map +1 -1
  216. package/dist/shared/modules/dynamic/factories/base/useDetailsFactory.d.ts +2 -2
  217. package/dist/shared/modules/dynamic/factories/base/useDetailsFactory.d.ts.map +1 -1
  218. package/dist/shared/modules/dynamic/factories/base/useListFactory.d.ts +1 -1
  219. package/dist/shared/modules/dynamic/factories/base/useListFactory.d.ts.map +1 -1
  220. package/dist/shared/modules/dynamic/helpers/getters.d.ts.map +1 -1
  221. package/dist/shared/modules/dynamic/helpers/methodHandler.d.ts.map +1 -1
  222. package/dist/shared/modules/dynamic/helpers/override.d.ts.map +1 -1
  223. package/dist/shared/modules/dynamic/helpers/unrefNested.d.ts.map +1 -1
  224. package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts +27 -50
  225. package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts.map +1 -1
  226. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts +23 -47
  227. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts.map +1 -1
  228. package/dist/shared/modules/dynamic/types/index.d.ts +10 -9
  229. package/dist/shared/modules/dynamic/types/index.d.ts.map +1 -1
  230. package/dist/shared/pages/ChangePasswordPage/components/change-password/ChangePassword.vue.d.ts +2 -23
  231. package/dist/shared/pages/ChangePasswordPage/components/change-password/ChangePassword.vue.d.ts.map +1 -1
  232. package/dist/shared/pages/ChangePasswordPage/components/change-password/index.d.ts +2 -15
  233. package/dist/shared/pages/ChangePasswordPage/components/change-password/index.d.ts.map +1 -1
  234. package/dist/shared/pages/ChangePasswordPage/plugin.d.ts +1 -1
  235. package/dist/shared/pages/InvitePage/components/invite/Invite.vue.d.ts +4 -32
  236. package/dist/shared/pages/InvitePage/components/invite/Invite.vue.d.ts.map +1 -1
  237. package/dist/shared/pages/InvitePage/components/invite/index.d.ts +2 -50
  238. package/dist/shared/pages/InvitePage/components/invite/index.d.ts.map +1 -1
  239. package/dist/shared/pages/InvitePage/plugin.d.ts +1 -1
  240. package/dist/shared/pages/LoginPage/components/login/Login.vue.d.ts +1 -10
  241. package/dist/shared/pages/LoginPage/components/login/Login.vue.d.ts.map +1 -1
  242. package/dist/shared/pages/LoginPage/components/login/index.d.ts +2 -41
  243. package/dist/shared/pages/LoginPage/components/login/index.d.ts.map +1 -1
  244. package/dist/shared/pages/LoginPage/plugin.d.ts +1 -1
  245. package/dist/shared/pages/ResetPasswordPage/components/reset-password/ResetPassword.vue.d.ts +4 -32
  246. package/dist/shared/pages/ResetPasswordPage/components/reset-password/ResetPassword.vue.d.ts.map +1 -1
  247. package/dist/shared/pages/ResetPasswordPage/components/reset-password/index.d.ts +2 -50
  248. package/dist/shared/pages/ResetPasswordPage/components/reset-password/index.d.ts.map +1 -1
  249. package/dist/shared/pages/ResetPasswordPage/plugin.d.ts +1 -1
  250. package/dist/shared/utilities/assets.d.ts.map +1 -1
  251. package/dist/shared/utilities/index.d.ts +3 -0
  252. package/dist/shared/utilities/index.d.ts.map +1 -0
  253. package/dist/tailwind.config.d.ts +3 -1
  254. package/dist/tailwind.config.d.ts.map +1 -1
  255. package/dist/tsconfig.tsbuildinfo +1 -1
  256. package/dist/ui/components/atoms/index.d.ts +1 -0
  257. package/dist/ui/components/atoms/index.d.ts.map +1 -1
  258. package/dist/ui/components/atoms/vc-badge/vc-badge.vue.d.ts +21 -35
  259. package/dist/ui/components/atoms/vc-badge/vc-badge.vue.d.ts.map +1 -1
  260. package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts +11 -36
  261. package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts.map +1 -1
  262. package/dist/ui/components/atoms/vc-card/index.d.ts +2 -104
  263. package/dist/ui/components/atoms/vc-card/index.d.ts.map +1 -1
  264. package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts +13 -36
  265. package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts.map +1 -1
  266. package/dist/ui/components/atoms/vc-col/vc-col.vue.d.ts +7 -28
  267. package/dist/ui/components/atoms/vc-col/vc-col.vue.d.ts.map +1 -1
  268. package/dist/ui/components/atoms/vc-container/index.d.ts +6 -73
  269. package/dist/ui/components/atoms/vc-container/index.d.ts.map +1 -1
  270. package/dist/ui/components/atoms/vc-container/vc-container.vue.d.ts +12 -18
  271. package/dist/ui/components/atoms/vc-container/vc-container.vue.d.ts.map +1 -1
  272. package/dist/ui/components/atoms/vc-hint/index.d.ts +7 -20
  273. package/dist/ui/components/atoms/vc-hint/index.d.ts.map +1 -1
  274. package/dist/ui/components/atoms/vc-hint/vc-hint.vue.d.ts +7 -4
  275. package/dist/ui/components/atoms/vc-hint/vc-hint.vue.d.ts.map +1 -1
  276. package/dist/ui/components/atoms/vc-icon/icons/AppWindowIcon.vue.d.ts +5 -16
  277. package/dist/ui/components/atoms/vc-icon/icons/AppWindowIcon.vue.d.ts.map +1 -1
  278. package/dist/ui/components/atoms/vc-icon/icons/ArrowLeftIcon.vue.d.ts +5 -16
  279. package/dist/ui/components/atoms/vc-icon/icons/ArrowLeftIcon.vue.d.ts.map +1 -1
  280. package/dist/ui/components/atoms/vc-icon/icons/ArrowRightIcon.vue.d.ts +5 -16
  281. package/dist/ui/components/atoms/vc-icon/icons/ArrowRightIcon.vue.d.ts.map +1 -1
  282. package/dist/ui/components/atoms/vc-icon/icons/BellIcon.vue.d.ts +5 -16
  283. package/dist/ui/components/atoms/vc-icon/icons/BellIcon.vue.d.ts.map +1 -1
  284. package/dist/ui/components/atoms/vc-icon/icons/ChevronDownIcon.vue.d.ts +5 -16
  285. package/dist/ui/components/atoms/vc-icon/icons/ChevronDownIcon.vue.d.ts.map +1 -1
  286. package/dist/ui/components/atoms/vc-icon/icons/ChevronLeftIcon.vue.d.ts +5 -16
  287. package/dist/ui/components/atoms/vc-icon/icons/ChevronLeftIcon.vue.d.ts.map +1 -1
  288. package/dist/ui/components/atoms/vc-icon/icons/ChevronRightIcon.vue.d.ts +5 -16
  289. package/dist/ui/components/atoms/vc-icon/icons/ChevronRightIcon.vue.d.ts.map +1 -1
  290. package/dist/ui/components/atoms/vc-icon/icons/ChevronUpIcon.vue.d.ts +5 -16
  291. package/dist/ui/components/atoms/vc-icon/icons/ChevronUpIcon.vue.d.ts.map +1 -1
  292. package/dist/ui/components/atoms/vc-icon/icons/CircleDotsIcon.vue.d.ts +5 -16
  293. package/dist/ui/components/atoms/vc-icon/icons/CircleDotsIcon.vue.d.ts.map +1 -1
  294. package/dist/ui/components/atoms/vc-icon/icons/CrossSignIcon.vue.d.ts +5 -16
  295. package/dist/ui/components/atoms/vc-icon/icons/CrossSignIcon.vue.d.ts.map +1 -1
  296. package/dist/ui/components/atoms/vc-icon/icons/DoubleArrowLeftIcon.vue.d.ts +5 -16
  297. package/dist/ui/components/atoms/vc-icon/icons/DoubleArrowLeftIcon.vue.d.ts.map +1 -1
  298. package/dist/ui/components/atoms/vc-icon/icons/DoubleArrowRightIcon.vue.d.ts +5 -16
  299. package/dist/ui/components/atoms/vc-icon/icons/DoubleArrowRightIcon.vue.d.ts.map +1 -1
  300. package/dist/ui/components/atoms/vc-icon/icons/FulfillmentCentersIcon.vue.d.ts +5 -16
  301. package/dist/ui/components/atoms/vc-icon/icons/FulfillmentCentersIcon.vue.d.ts.map +1 -1
  302. package/dist/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue.d.ts +5 -16
  303. package/dist/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue.d.ts.map +1 -1
  304. package/dist/ui/components/atoms/vc-icon/icons/LogoutIcon.vue.d.ts +5 -16
  305. package/dist/ui/components/atoms/vc-icon/icons/LogoutIcon.vue.d.ts.map +1 -1
  306. package/dist/ui/components/atoms/vc-icon/icons/MenuBurgerIcon.vue.d.ts +5 -16
  307. package/dist/ui/components/atoms/vc-icon/icons/MenuBurgerIcon.vue.d.ts.map +1 -1
  308. package/dist/ui/components/atoms/vc-icon/icons/MinusSignIcon.vue.d.ts +5 -16
  309. package/dist/ui/components/atoms/vc-icon/icons/MinusSignIcon.vue.d.ts.map +1 -1
  310. package/dist/ui/components/atoms/vc-icon/icons/OffersIcon.vue.d.ts +5 -16
  311. package/dist/ui/components/atoms/vc-icon/icons/OffersIcon.vue.d.ts.map +1 -1
  312. package/dist/ui/components/atoms/vc-icon/icons/OrdersIcon.vue.d.ts +5 -16
  313. package/dist/ui/components/atoms/vc-icon/icons/OrdersIcon.vue.d.ts.map +1 -1
  314. package/dist/ui/components/atoms/vc-icon/icons/PeopleIcon.vue.d.ts +5 -16
  315. package/dist/ui/components/atoms/vc-icon/icons/PeopleIcon.vue.d.ts.map +1 -1
  316. package/dist/ui/components/atoms/vc-icon/icons/PlusSignIcon.vue.d.ts +5 -16
  317. package/dist/ui/components/atoms/vc-icon/icons/PlusSignIcon.vue.d.ts.map +1 -1
  318. package/dist/ui/components/atoms/vc-icon/icons/ProductsIcon.vue.d.ts +5 -16
  319. package/dist/ui/components/atoms/vc-icon/icons/ProductsIcon.vue.d.ts.map +1 -1
  320. package/dist/ui/components/atoms/vc-icon/icons/ProfileIcon.vue.d.ts +5 -16
  321. package/dist/ui/components/atoms/vc-icon/icons/ProfileIcon.vue.d.ts.map +1 -1
  322. package/dist/ui/components/atoms/vc-icon/icons/SearchIcon.vue.d.ts +5 -16
  323. package/dist/ui/components/atoms/vc-icon/icons/SearchIcon.vue.d.ts.map +1 -1
  324. package/dist/ui/components/atoms/vc-icon/icons/SettingsBoltIcon.vue.d.ts +5 -16
  325. package/dist/ui/components/atoms/vc-icon/icons/SettingsBoltIcon.vue.d.ts.map +1 -1
  326. package/dist/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue.d.ts +5 -16
  327. package/dist/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue.d.ts.map +1 -1
  328. package/dist/ui/components/atoms/vc-icon/icons/VendorSwitchIcon.vue.d.ts +7 -0
  329. package/dist/ui/components/atoms/vc-icon/icons/VendorSwitchIcon.vue.d.ts.map +1 -0
  330. package/dist/ui/components/atoms/vc-icon/icons/VertDotsIcon.vue.d.ts +5 -16
  331. package/dist/ui/components/atoms/vc-icon/icons/VertDotsIcon.vue.d.ts.map +1 -1
  332. package/dist/ui/components/atoms/vc-icon/vc-bootstrap-icon.vue.d.ts +10 -0
  333. package/dist/ui/components/atoms/vc-icon/vc-bootstrap-icon.vue.d.ts.map +1 -0
  334. package/dist/ui/components/atoms/vc-icon/vc-fontawesome-icon.vue.d.ts +11 -0
  335. package/dist/ui/components/atoms/vc-icon/vc-fontawesome-icon.vue.d.ts.map +1 -0
  336. package/dist/ui/components/atoms/vc-icon/vc-icon-examples.vue.d.ts +3 -0
  337. package/dist/ui/components/atoms/vc-icon/vc-icon-examples.vue.d.ts.map +1 -0
  338. package/dist/ui/components/atoms/vc-icon/vc-icon-test.vue.d.ts +3 -0
  339. package/dist/ui/components/atoms/vc-icon/vc-icon-test.vue.d.ts.map +1 -0
  340. package/dist/ui/components/atoms/vc-icon/vc-icon.vue.d.ts +37 -28
  341. package/dist/ui/components/atoms/vc-icon/vc-icon.vue.d.ts.map +1 -1
  342. package/dist/ui/components/atoms/vc-icon/vc-lucide-icon.vue.d.ts +12 -0
  343. package/dist/ui/components/atoms/vc-icon/vc-lucide-icon.vue.d.ts.map +1 -0
  344. package/dist/ui/components/atoms/vc-icon/vc-material-icon.vue.d.ts +18 -0
  345. package/dist/ui/components/atoms/vc-icon/vc-material-icon.vue.d.ts.map +1 -0
  346. package/dist/ui/components/atoms/vc-image/vc-image.vue.d.ts +6 -33
  347. package/dist/ui/components/atoms/vc-image/vc-image.vue.d.ts.map +1 -1
  348. package/dist/ui/components/atoms/vc-label/vc-label.vue.d.ts +24 -30
  349. package/dist/ui/components/atoms/vc-label/vc-label.vue.d.ts.map +1 -1
  350. package/dist/ui/components/atoms/vc-link/index.d.ts +6 -59
  351. package/dist/ui/components/atoms/vc-link/index.d.ts.map +1 -1
  352. package/dist/ui/components/atoms/vc-link/vc-link.vue.d.ts +10 -16
  353. package/dist/ui/components/atoms/vc-link/vc-link.vue.d.ts.map +1 -1
  354. package/dist/ui/components/atoms/vc-loading/index.d.ts +2 -9
  355. package/dist/ui/components/atoms/vc-loading/index.d.ts.map +1 -1
  356. package/dist/ui/components/atoms/vc-loading/vc-loading.vue.d.ts +1 -10
  357. package/dist/ui/components/atoms/vc-loading/vc-loading.vue.d.ts.map +1 -1
  358. package/dist/ui/components/atoms/vc-progress/index.d.ts +6 -51
  359. package/dist/ui/components/atoms/vc-progress/index.d.ts.map +1 -1
  360. package/dist/ui/components/atoms/vc-progress/vc-progress.vue.d.ts +2 -25
  361. package/dist/ui/components/atoms/vc-progress/vc-progress.vue.d.ts.map +1 -1
  362. package/dist/ui/components/atoms/vc-row/vc-row.vue.d.ts +5 -5
  363. package/dist/ui/components/atoms/vc-row/vc-row.vue.d.ts.map +1 -1
  364. package/dist/ui/components/atoms/vc-skeleton/index.d.ts +2 -0
  365. package/dist/ui/components/atoms/vc-skeleton/index.d.ts.map +1 -0
  366. package/dist/ui/components/atoms/vc-skeleton/vc-skeleton.vue.d.ts +6 -31
  367. package/dist/ui/components/atoms/vc-skeleton/vc-skeleton.vue.d.ts.map +1 -1
  368. package/dist/ui/components/atoms/vc-status/vc-status.vue.d.ts +8 -33
  369. package/dist/ui/components/atoms/vc-status/vc-status.vue.d.ts.map +1 -1
  370. package/dist/ui/components/atoms/vc-status-icon/vc-status-icon.vue.d.ts +1 -10
  371. package/dist/ui/components/atoms/vc-status-icon/vc-status-icon.vue.d.ts.map +1 -1
  372. package/dist/ui/components/atoms/vc-switch/vc-switch.vue.d.ts +4 -27
  373. package/dist/ui/components/atoms/vc-switch/vc-switch.vue.d.ts.map +1 -1
  374. package/dist/ui/components/atoms/vc-tooltip/vc-tooltip.vue.d.ts +10 -42
  375. package/dist/ui/components/atoms/vc-tooltip/vc-tooltip.vue.d.ts.map +1 -1
  376. package/dist/ui/components/atoms/vc-video/vc-video.vue.d.ts +4 -13
  377. package/dist/ui/components/atoms/vc-video/vc-video.vue.d.ts.map +1 -1
  378. package/dist/ui/components/atoms/vc-widget/index.d.ts +2 -43
  379. package/dist/ui/components/atoms/vc-widget/index.d.ts.map +1 -1
  380. package/dist/ui/components/atoms/vc-widget/vc-widget.vue.d.ts +4 -13
  381. package/dist/ui/components/atoms/vc-widget/vc-widget.vue.d.ts.map +1 -1
  382. package/dist/ui/components/molecules/index.d.ts +1 -1
  383. package/dist/ui/components/molecules/index.d.ts.map +1 -1
  384. package/dist/ui/components/molecules/vc-breadcrumbs/_internal/vc-breadcrumbs-item/vc-breadcrumbs-item.vue.d.ts +4 -13
  385. package/dist/ui/components/molecules/vc-breadcrumbs/_internal/vc-breadcrumbs-item/vc-breadcrumbs-item.vue.d.ts.map +1 -1
  386. package/dist/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue.d.ts +11 -43
  387. package/dist/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue.d.ts.map +1 -1
  388. package/dist/ui/components/molecules/vc-checkbox/index.d.ts +2 -163
  389. package/dist/ui/components/molecules/vc-checkbox/index.d.ts.map +1 -1
  390. package/dist/ui/components/molecules/vc-checkbox/vc-checkbox.vue.d.ts +13 -38
  391. package/dist/ui/components/molecules/vc-checkbox/vc-checkbox.vue.d.ts.map +1 -1
  392. package/dist/ui/components/molecules/vc-editor/vc-editor.vue.d.ts +42 -51
  393. package/dist/ui/components/molecules/vc-editor/vc-editor.vue.d.ts.map +1 -1
  394. package/dist/ui/components/molecules/vc-field/_internal/vc-field-type/vc-field-type.vue.d.ts +13 -17
  395. package/dist/ui/components/molecules/vc-field/_internal/vc-field-type/vc-field-type.vue.d.ts.map +1 -1
  396. package/dist/ui/components/molecules/vc-field/vc-field.vue.d.ts +3 -28
  397. package/dist/ui/components/molecules/vc-field/vc-field.vue.d.ts.map +1 -1
  398. package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts +10 -37
  399. package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts.map +1 -1
  400. package/dist/ui/components/molecules/vc-form/index.d.ts +7 -20
  401. package/dist/ui/components/molecules/vc-form/index.d.ts.map +1 -1
  402. package/dist/ui/components/molecules/vc-form/vc-form.vue.d.ts +7 -4
  403. package/dist/ui/components/molecules/vc-form/vc-form.vue.d.ts.map +1 -1
  404. package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts +19 -106
  405. package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts.map +1 -1
  406. package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.vue.d.ts +19 -68
  407. package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.vue.d.ts.map +1 -1
  408. package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.vue.d.ts +10 -139
  409. package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.vue.d.ts.map +1 -1
  410. package/dist/ui/components/molecules/vc-pagination/index.d.ts +2 -41
  411. package/dist/ui/components/molecules/vc-pagination/index.d.ts.map +1 -1
  412. package/dist/ui/components/molecules/vc-pagination/vc-pagination.vue.d.ts +5 -30
  413. package/dist/ui/components/molecules/vc-pagination/vc-pagination.vue.d.ts.map +1 -1
  414. package/dist/ui/components/molecules/vc-radio-button/vc-radio-button.vue.d.ts +10 -28
  415. package/dist/ui/components/molecules/vc-radio-button/vc-radio-button.vue.d.ts.map +1 -1
  416. package/dist/ui/components/molecules/vc-rating/vc-rating.vue.d.ts +8 -35
  417. package/dist/ui/components/molecules/vc-rating/vc-rating.vue.d.ts.map +1 -1
  418. package/dist/ui/components/molecules/vc-select/vc-select.vue.d.ts +76 -495
  419. package/dist/ui/components/molecules/vc-select/vc-select.vue.d.ts.map +1 -1
  420. package/dist/ui/components/molecules/vc-slider/index.d.ts +12 -98
  421. package/dist/ui/components/molecules/vc-slider/index.d.ts.map +1 -1
  422. package/dist/ui/components/molecules/vc-slider/vc-slider.vue.d.ts +16 -36
  423. package/dist/ui/components/molecules/vc-slider/vc-slider.vue.d.ts.map +1 -1
  424. package/dist/ui/components/molecules/vc-textarea/vc-textarea.vue.d.ts +11 -33
  425. package/dist/ui/components/molecules/vc-textarea/vc-textarea.vue.d.ts.map +1 -1
  426. package/dist/ui/components/molecules/vc-toast/index.d.ts +2 -0
  427. package/dist/ui/components/molecules/vc-toast/index.d.ts.map +1 -0
  428. package/dist/ui/components/molecules/vc-toast/vc-toast.vue.d.ts +18 -0
  429. package/dist/ui/components/molecules/vc-toast/vc-toast.vue.d.ts.map +1 -0
  430. package/dist/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.d.ts +8 -14
  431. package/dist/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.d.ts.map +1 -1
  432. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarContent.vue.d.ts +13 -18
  433. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarContent.vue.d.ts.map +1 -1
  434. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarHeader.vue.d.ts +16 -27
  435. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarHeader.vue.d.ts.map +1 -1
  436. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarMobileActions.vue.d.ts +8 -0
  437. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarMobileActions.vue.d.ts.map +1 -0
  438. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarOverlay.vue.d.ts +14 -21
  439. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarOverlay.vue.d.ts.map +1 -1
  440. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarWidgetItem.vue.d.ts +34 -0
  441. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarWidgetItem.vue.d.ts.map +1 -0
  442. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarWidgetsMenu.vue.d.ts +3 -0
  443. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarWidgetsMenu.vue.d.ts.map +1 -0
  444. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/MenuSidebar.vue.d.ts +15 -29
  445. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/MenuSidebar.vue.d.ts.map +1 -1
  446. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/composables/useAppBarMobileActions.d.ts +9 -0
  447. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/composables/useAppBarMobileActions.d.ts.map +1 -0
  448. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/composables/useAppBarWidgets.d.ts +8 -0
  449. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/composables/useAppBarWidgets.d.ts.map +1 -0
  450. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/composables/useToggleableContent.d.ts +23 -0
  451. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/composables/useToggleableContent.d.ts.map +1 -0
  452. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts +8 -17
  453. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts.map +1 -1
  454. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue.d.ts +4 -25
  455. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue.d.ts.map +1 -1
  456. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue.d.ts +5 -30
  457. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue.d.ts.map +1 -1
  458. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue.d.ts +5 -30
  459. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue.d.ts.map +1 -1
  460. package/dist/ui/components/organisms/vc-app/index.d.ts +0 -1
  461. package/dist/ui/components/organisms/vc-app/index.d.ts.map +1 -1
  462. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts +9 -20
  463. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts.map +1 -1
  464. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue.d.ts +11 -16
  465. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue.d.ts.map +1 -1
  466. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/_internal/vc-blade-toolbar-button/vc-blade-toolbar-base-button.vue.d.ts +4 -31
  467. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/_internal/vc-blade-toolbar-button/vc-blade-toolbar-base-button.vue.d.ts.map +1 -1
  468. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue.d.ts +5 -40
  469. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue.d.ts.map +1 -1
  470. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/_internal/vc-blade-toolbar-button/vc-blade-toolbar-circle-button.vue.d.ts +2 -29
  471. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/_internal/vc-blade-toolbar-button/vc-blade-toolbar-circle-button.vue.d.ts.map +1 -1
  472. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/desktop/vc-blade-toolbar-desktop.vue.d.ts +3 -14
  473. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/desktop/vc-blade-toolbar-desktop.vue.d.ts.map +1 -1
  474. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/mobile/vc-blade-toolbar-mobile.vue.d.ts +3 -13
  475. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/mobile/vc-blade-toolbar-mobile.vue.d.ts.map +1 -1
  476. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/vc-blade-toolbar-buttons.vue.d.ts +3 -14
  477. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/vc-blade-toolbar-buttons.vue.d.ts.map +1 -1
  478. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue.d.ts +9 -27
  479. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue.d.ts.map +1 -1
  480. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/_internal/index.d.ts +2 -2
  481. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/_internal/vc-widget-container-desktop.vue.d.ts +2 -11
  482. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/_internal/vc-widget-container-desktop.vue.d.ts.map +1 -1
  483. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/_internal/vc-widget-container-mobile.vue.d.ts +2 -11
  484. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/_internal/vc-widget-container-mobile.vue.d.ts.map +1 -1
  485. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/vc-widget-container.vue.d.ts +1 -10
  486. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/vc-widget-container.vue.d.ts.map +1 -1
  487. package/dist/ui/components/organisms/vc-blade/vc-blade.vue.d.ts +18 -77
  488. package/dist/ui/components/organisms/vc-blade/vc-blade.vue.d.ts.map +1 -1
  489. package/dist/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue.d.ts +32 -109
  490. package/dist/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue.d.ts.map +1 -1
  491. package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue.d.ts +3 -40
  492. package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue.d.ts.map +1 -1
  493. package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-preview/vc-gallery-preview.vue.d.ts +5 -28
  494. package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-preview/vc-gallery-preview.vue.d.ts.map +1 -1
  495. package/dist/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts +8 -45
  496. package/dist/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts.map +1 -1
  497. package/dist/ui/components/organisms/vc-login-form/vc-login-form.vue.d.ts +7 -28
  498. package/dist/ui/components/organisms/vc-login-form/vc-login-form.vue.d.ts.map +1 -1
  499. package/dist/ui/components/organisms/vc-popup/vc-popup.vue.d.ts +13 -42
  500. package/dist/ui/components/organisms/vc-popup/vc-popup.vue.d.ts.map +1 -1
  501. package/dist/ui/components/organisms/vc-table/_internal/vc-table-add-new/vc-table-add-new.vue.d.ts +4 -13
  502. package/dist/ui/components/organisms/vc-table/_internal/vc-table-add-new/vc-table-add-new.vue.d.ts.map +1 -1
  503. package/dist/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue.d.ts +12 -18
  504. package/dist/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue.d.ts.map +1 -1
  505. package/dist/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts +10 -18
  506. package/dist/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts.map +1 -1
  507. package/dist/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue.d.ts +6 -23
  508. package/dist/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue.d.ts.map +1 -1
  509. package/dist/ui/components/organisms/vc-table/_internal/vc-table-counter/vc-table-counter.vue.d.ts +2 -25
  510. package/dist/ui/components/organisms/vc-table/_internal/vc-table-counter/vc-table-counter.vue.d.ts.map +1 -1
  511. package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-body/vc-table-body.vue.d.ts +27 -186
  512. package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-body/vc-table-body.vue.d.ts.map +1 -1
  513. package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-columns-header/vc-table-columns-header.vue.d.ts +26 -90
  514. package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-columns-header/vc-table-columns-header.vue.d.ts.map +1 -1
  515. package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-row/vc-table-row.vue.d.ts +28 -202
  516. package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-row/vc-table-row.vue.d.ts.map +1 -1
  517. package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-select-all-header/vc-table-select-all-header.vue.d.ts +9 -21
  518. package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-select-all-header/vc-table-select-all-header.vue.d.ts.map +1 -1
  519. package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/vc-table-desktop-view.vue.d.ts +37 -266
  520. package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/vc-table-desktop-view.vue.d.ts.map +1 -1
  521. package/dist/ui/components/organisms/vc-table/_internal/vc-table-empty/vc-table-empty.vue.d.ts +5 -15
  522. package/dist/ui/components/organisms/vc-table/_internal/vc-table-empty/vc-table-empty.vue.d.ts.map +1 -1
  523. package/dist/ui/components/organisms/vc-table/_internal/vc-table-filter/vc-table-filter.vue.d.ts +10 -32
  524. package/dist/ui/components/organisms/vc-table/_internal/vc-table-filter/vc-table-filter.vue.d.ts.map +1 -1
  525. package/dist/ui/components/organisms/vc-table/_internal/vc-table-footer/vc-table-footer.vue.d.ts +7 -34
  526. package/dist/ui/components/organisms/vc-table/_internal/vc-table-footer/vc-table-footer.vue.d.ts.map +1 -1
  527. package/dist/ui/components/organisms/vc-table/_internal/vc-table-header/vc-table-header.vue.d.ts +19 -53
  528. package/dist/ui/components/organisms/vc-table/_internal/vc-table-header/vc-table-header.vue.d.ts.map +1 -1
  529. package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-item/vc-table-mobile-item.vue.d.ts +15 -45
  530. package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-item/vc-table-mobile-item.vue.d.ts.map +1 -1
  531. package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue.d.ts +58 -192
  532. package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue.d.ts.map +1 -1
  533. package/dist/ui/components/organisms/vc-table/_internal/vc-table-select-all/vc-table-select-all.vue.d.ts +11 -27
  534. package/dist/ui/components/organisms/vc-table/_internal/vc-table-select-all/vc-table-select-all.vue.d.ts.map +1 -1
  535. package/dist/ui/components/organisms/vc-table/composables/useTableActions.d.ts +1 -1
  536. package/dist/ui/components/organisms/vc-table/composables/useTableActions.d.ts.map +1 -1
  537. package/dist/ui/components/organisms/vc-table/composables/useTableColumnReorder.d.ts +21 -39
  538. package/dist/ui/components/organisms/vc-table/composables/useTableColumnReorder.d.ts.map +1 -1
  539. package/dist/ui/components/organisms/vc-table/composables/useTableColumnResize.d.ts +1 -1
  540. package/dist/ui/components/organisms/vc-table/composables/useTableColumnResize.d.ts.map +1 -1
  541. package/dist/ui/components/organisms/vc-table/composables/useTableRowReorder.d.ts +1 -1
  542. package/dist/ui/components/organisms/vc-table/composables/useTableRowReorder.d.ts.map +1 -1
  543. package/dist/ui/components/organisms/vc-table/composables/useTableSelection.d.ts +1 -1
  544. package/dist/ui/components/organisms/vc-table/composables/useTableSelection.d.ts.map +1 -1
  545. package/dist/ui/components/organisms/vc-table/composables/useTableState.d.ts +2 -1
  546. package/dist/ui/components/organisms/vc-table/composables/useTableState.d.ts.map +1 -1
  547. package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts +41 -252
  548. package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
  549. package/dist/ui/composables/useAdaptiveItems.d.ts +16 -0
  550. package/dist/ui/composables/useAdaptiveItems.d.ts.map +1 -0
  551. package/package.json +18 -13
  552. package/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue +1 -1
  553. package/shared/components/app-switcher/index.ts +1 -1
  554. package/shared/components/change-password/change-password.vue +3 -3
  555. package/shared/components/dashboard-widget-card/dashboard-widget-card.vue +37 -3
  556. package/shared/components/draggable-dashboard/composables/useGridSystem.ts +1 -1
  557. package/shared/components/draggable-dashboard/composables/useWidgetLayout.ts +1 -1
  558. package/shared/components/generic-dropdown/generic-dropdown.vue +69 -49
  559. package/shared/components/language-selector/language-selector.vue +2 -2
  560. package/shared/components/notification-dropdown/_internal/notification/notification.vue +2 -2
  561. package/shared/components/notification-dropdown/notification-dropdown.vue +14 -53
  562. package/shared/components/notification-template/notification-template.vue +0 -1
  563. package/shared/components/notifications/components/notification-container/index.ts +26 -14
  564. package/shared/components/notifications/composables/useContainer/index.ts +267 -55
  565. package/shared/components/notifications/composables/useInstance/index.ts +47 -17
  566. package/shared/components/notifications/core/notification.ts +175 -20
  567. package/shared/components/notifications/styles/index.scss +171 -10
  568. package/shared/components/notifications/types/index.ts +12 -3
  569. package/shared/components/settings-menu/settings-menu.vue +3 -2
  570. package/shared/components/settings-menu-item/settings-menu-item.vue +1 -1
  571. package/shared/components/sidebar/sidebar.vue +5 -2
  572. package/shared/components/theme-selector/theme-selector.vue +2 -2
  573. package/shared/components/user-dropdown-button/_internal/user-info.vue +4 -4
  574. package/shared/components/user-dropdown-button/user-dropdown-button.vue +2 -2
  575. package/shared/composables/index.ts +1 -0
  576. package/shared/modules/assets/components/assets-details/assets-details.vue +4 -4
  577. package/shared/modules/assets/components/assets-details/index.ts +3 -1
  578. package/shared/modules/assets/index.ts +1 -1
  579. package/shared/modules/assets-manager/components/assets-manager/assets-manager.vue +5 -4
  580. package/shared/modules/dynamic/components/fields/storybook/Button.stories.ts +2 -2
  581. package/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.ts +361 -361
  582. package/shared/modules/dynamic/components/fields/storybook/SelectField.stories.ts +666 -666
  583. package/shared/modules/dynamic/components/fields/storybook/StatusField.stories.ts +202 -202
  584. package/shared/modules/dynamic/components/fields/storybook/utils/sourceTransform.ts +1 -1
  585. package/shared/modules/dynamic/composables/index.ts +4 -4
  586. package/shared/modules/dynamic/composables/useFilterBuilder/index.ts +1 -1
  587. package/shared/modules/dynamic/helpers/nodeBuilder.ts +242 -242
  588. package/shared/modules/dynamic/pages/dynamic-blade-form.vue +60 -63
  589. package/shared/modules/dynamic/pages/dynamic-blade-list.vue +1 -1
  590. package/shared/modules/dynamic/types/index.ts +5 -9
  591. package/shared/pages/LoginPage/components/login/Login.vue +1 -1
  592. package/shared/pages/ResetPasswordPage/components/reset-password/ResetPassword.vue +218 -218
  593. package/shared/utilities/assets.ts +43 -42
  594. package/shared/utilities/index.ts +2 -0
  595. package/ui/components/atoms/index.ts +1 -0
  596. package/ui/components/atoms/vc-badge/vc-badge.stories.ts +522 -53
  597. package/ui/components/atoms/vc-badge/vc-badge.vue +120 -27
  598. package/ui/components/atoms/vc-button/vc-button.stories.ts +278 -74
  599. package/ui/components/atoms/vc-button/vc-button.vue +12 -9
  600. package/ui/components/atoms/vc-card/vc-card.stories.ts +297 -59
  601. package/ui/components/atoms/vc-card/vc-card.vue +9 -5
  602. package/ui/components/atoms/vc-col/vc-col.stories.ts +164 -22
  603. package/ui/components/atoms/vc-container/vc-container.stories.ts +277 -29
  604. package/ui/components/atoms/vc-container/vc-container.vue +1 -1
  605. package/ui/components/atoms/vc-hint/vc-hint.stories.ts +144 -23
  606. package/ui/components/atoms/vc-hint/vc-hint.vue +17 -17
  607. package/ui/components/atoms/vc-icon/README.md +295 -0
  608. package/ui/components/atoms/vc-icon/icons/VendorSwitchIcon.vue +26 -0
  609. package/ui/components/atoms/vc-icon/vc-bootstrap-icon.vue +28 -0
  610. package/ui/components/atoms/vc-icon/vc-fontawesome-icon.vue +41 -0
  611. package/ui/components/atoms/vc-icon/vc-icon-examples.vue +183 -0
  612. package/ui/components/atoms/vc-icon/vc-icon-test.vue +226 -0
  613. package/ui/components/atoms/vc-icon/vc-icon.stories.ts +376 -48
  614. package/ui/components/atoms/vc-icon/vc-icon.vue +457 -31
  615. package/ui/components/atoms/vc-icon/vc-lucide-icon.vue +66 -0
  616. package/ui/components/atoms/vc-icon/vc-material-icon.vue +61 -0
  617. package/ui/components/atoms/vc-image/vc-image.stories.ts +309 -85
  618. package/ui/components/atoms/vc-image/vc-image.vue +2 -2
  619. package/ui/components/atoms/vc-label/vc-label.stories.ts +137 -31
  620. package/ui/components/atoms/vc-label/vc-label.vue +118 -92
  621. package/ui/components/atoms/vc-link/vc-link.stories.ts +154 -37
  622. package/ui/components/atoms/vc-progress/vc-progress.stories.ts +182 -30
  623. package/ui/components/atoms/vc-progress/vc-progress.vue +68 -68
  624. package/ui/components/atoms/vc-row/vc-row.stories.ts +143 -20
  625. package/ui/components/atoms/vc-skeleton/index.ts +1 -0
  626. package/ui/components/atoms/vc-skeleton/vc-skeleton.stories.ts +165 -0
  627. package/ui/components/atoms/vc-status/vc-status.stories.ts +235 -85
  628. package/ui/components/atoms/vc-status/vc-status.vue +2 -1
  629. package/ui/components/atoms/vc-status-icon/vc-status-icon.stories.ts +108 -2
  630. package/ui/components/atoms/vc-status-icon/vc-status-icon.vue +2 -2
  631. package/ui/components/atoms/vc-switch/vc-switch.stories.ts +314 -14
  632. package/ui/components/atoms/vc-switch/vc-switch.vue +5 -7
  633. package/ui/components/atoms/vc-tooltip/vc-tooltip.stories.ts +287 -0
  634. package/ui/components/atoms/vc-tooltip/vc-tooltip.vue +3 -3
  635. package/ui/components/atoms/vc-video/vc-video.stories.ts +150 -19
  636. package/ui/components/atoms/vc-video/vc-video.vue +1 -1
  637. package/ui/components/atoms/vc-widget/vc-widget.stories.ts +272 -20
  638. package/ui/components/atoms/vc-widget/vc-widget.vue +51 -66
  639. package/ui/components/molecules/index.ts +16 -16
  640. package/ui/components/molecules/vc-breadcrumbs/_internal/vc-breadcrumbs-item/vc-breadcrumbs-item.vue +89 -89
  641. package/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.stories.ts +509 -43
  642. package/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue +32 -80
  643. package/ui/components/molecules/vc-checkbox/vc-checkbox.stories.ts +356 -84
  644. package/ui/components/molecules/vc-checkbox/vc-checkbox.vue +185 -119
  645. package/ui/components/molecules/vc-editor/vc-editor.stories.ts +251 -29
  646. package/ui/components/molecules/vc-editor/vc-editor.vue +48 -10
  647. package/ui/components/molecules/vc-field/vc-field.stories.ts +179 -114
  648. package/ui/components/molecules/vc-field/vc-field.vue +1 -1
  649. package/ui/components/molecules/vc-file-upload/vc-file-upload.stories.ts +424 -39
  650. package/ui/components/molecules/vc-file-upload/vc-file-upload.vue +4 -4
  651. package/ui/components/molecules/vc-form/vc-form.stories.ts +168 -25
  652. package/ui/components/molecules/vc-input/vc-input.stories.ts +909 -165
  653. package/ui/components/molecules/vc-input/vc-input.vue +71 -19
  654. package/ui/components/molecules/vc-input-currency/vc-input-currency.stories.ts +532 -83
  655. package/ui/components/molecules/vc-input-currency/vc-input-currency.vue +20 -0
  656. package/ui/components/molecules/vc-multivalue/vc-multivalue.stories.ts +508 -120
  657. package/ui/components/molecules/vc-multivalue/vc-multivalue.vue +80 -24
  658. package/ui/components/molecules/vc-pagination/vc-pagination.stories.ts +259 -24
  659. package/ui/components/molecules/vc-radio-button/vc-radio-button.stories.ts +283 -97
  660. package/ui/components/molecules/vc-radio-button/vc-radio-button.vue +197 -192
  661. package/ui/components/molecules/vc-rating/vc-rating.stories.ts +363 -59
  662. package/ui/components/molecules/vc-rating/vc-rating.vue +54 -26
  663. package/ui/components/molecules/vc-select/vc-select.stories.ts +1582 -685
  664. package/ui/components/molecules/vc-select/vc-select.vue +122 -59
  665. package/ui/components/molecules/vc-slider/vc-slider.stories.ts +223 -61
  666. package/ui/components/molecules/vc-slider/vc-slider.vue +118 -118
  667. package/ui/components/molecules/vc-textarea/vc-textarea.stories.ts +326 -53
  668. package/ui/components/molecules/vc-textarea/vc-textarea.vue +180 -151
  669. package/ui/components/molecules/vc-toast/index.ts +1 -0
  670. package/ui/components/molecules/vc-toast/vc-toast.stories.ts +559 -0
  671. package/ui/components/molecules/vc-toast/vc-toast.vue +350 -0
  672. package/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.ts +61 -24
  673. package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarContent.vue +3 -1
  674. package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarHeader.vue +43 -77
  675. package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarMobileActions.vue +102 -0
  676. package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarOverlay.vue +5 -3
  677. package/ui/components/organisms/vc-app/_internal/vc-app-bar/{components/app-bar-button/app-bar-button.vue → _internal/AppBarWidgetItem.vue} +32 -89
  678. package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarWidgetsMenu.vue +110 -0
  679. package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/MenuSidebar.vue +9 -8
  680. package/ui/components/organisms/vc-app/_internal/vc-app-bar/composables/useAppBarMobileActions.ts +51 -0
  681. package/ui/components/organisms/vc-app/_internal/vc-app-bar/composables/useAppBarWidgets.ts +27 -0
  682. package/ui/components/organisms/vc-app/_internal/vc-app-bar/composables/useToggleableContent.ts +66 -0
  683. package/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue +34 -50
  684. package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue +4 -4
  685. package/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue +2 -2
  686. package/ui/components/organisms/vc-app/index.ts +0 -1
  687. package/ui/components/organisms/vc-app/vc-app.vue +33 -35
  688. package/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue +7 -7
  689. package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/_internal/vc-blade-toolbar-button/vc-blade-toolbar-base-button.vue +30 -37
  690. package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue +2 -2
  691. package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/desktop/vc-blade-toolbar-desktop.vue +20 -68
  692. package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/mobile/vc-blade-toolbar-mobile.vue +1 -1
  693. package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue +84 -7
  694. package/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/_internal/index.ts +2 -2
  695. package/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/_internal/vc-widget-container-desktop.vue +8 -3
  696. package/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/_internal/vc-widget-container-mobile.vue +27 -79
  697. package/ui/components/organisms/vc-blade/_internal/vc-blade-widget-container/vc-widget-container.vue +24 -13
  698. package/ui/components/organisms/vc-blade/vc-blade.stories.ts +83 -83
  699. package/ui/components/organisms/vc-blade/vc-blade.vue +4 -4
  700. package/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue +163 -163
  701. package/ui/components/organisms/vc-gallery/_internal/vc-gallery-preview/vc-gallery-preview.vue +166 -166
  702. package/ui/components/organisms/vc-gallery/vc-gallery.stories.ts +91 -91
  703. package/ui/components/organisms/vc-gallery/vc-gallery.vue +348 -348
  704. package/ui/components/organisms/vc-popup/vc-popup.vue +7 -7
  705. package/ui/components/organisms/vc-table/_internal/vc-table-add-new/vc-table-add-new.vue +63 -63
  706. package/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue +3 -3
  707. package/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue +7 -6
  708. package/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue +45 -91
  709. package/ui/components/organisms/vc-table/_internal/vc-table-counter/vc-table-counter.vue +1 -1
  710. package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-body/vc-table-body.vue +1 -2
  711. package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-columns-header/vc-table-columns-header.vue +10 -7
  712. package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-row/vc-table-row.vue +3 -3
  713. package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/vc-table-desktop-view.vue +4 -5
  714. package/ui/components/organisms/vc-table/_internal/vc-table-empty/vc-table-empty.vue +1 -6
  715. package/ui/components/organisms/vc-table/_internal/vc-table-filter/vc-table-filter.vue +2 -2
  716. package/ui/components/organisms/vc-table/_internal/vc-table-footer/vc-table-footer.vue +3 -11
  717. package/ui/components/organisms/vc-table/_internal/vc-table-header/vc-table-header.vue +49 -6
  718. package/ui/components/organisms/vc-table/_internal/vc-table-mobile-item/vc-table-mobile-item.vue +293 -129
  719. package/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue +94 -46
  720. package/ui/components/organisms/vc-table/composables/useTableActions.ts +1 -1
  721. package/ui/components/organisms/vc-table/composables/useTableColumnReorder.ts +1 -1
  722. package/ui/components/organisms/vc-table/composables/useTableColumnResize.ts +1 -1
  723. package/ui/components/organisms/vc-table/composables/useTableRowReorder.ts +1 -1
  724. package/ui/components/organisms/vc-table/composables/useTableSelection.ts +1 -1
  725. package/ui/components/organisms/vc-table/composables/useTableState.ts +2 -1
  726. package/ui/components/organisms/vc-table/vc-table.vue +28 -62
  727. package/ui/composables/README.md +160 -0
  728. package/ui/composables/useAdaptiveItems.ts +210 -0
  729. package/core/types/widget.ts +0 -15
  730. package/dist/apl-B2DGVGxc.js +0 -76
  731. package/dist/asciiarmor-2LVJmxlE.js +0 -34
  732. package/dist/asn1-jKiBa2Ya.js +0 -95
  733. package/dist/asterisk-DS281yxp.js +0 -271
  734. package/dist/brainfuck-C_p9pTT8.js +0 -34
  735. package/dist/clike-BUuHEmgZ.js +0 -620
  736. package/dist/clojure-CCKyeQKf.js +0 -800
  737. package/dist/cmake-CuaCgAKt.js +0 -28
  738. package/dist/cobol-BlTKFDRj.js +0 -72
  739. package/dist/coffeescript-BVCvwO8I.js +0 -179
  740. package/dist/commonlisp-D_kxz07b.js +0 -75
  741. package/dist/core/types/widget.d.ts +0 -12
  742. package/dist/core/types/widget.d.ts.map +0 -1
  743. package/dist/crystal-D309uH6_.js +0 -217
  744. package/dist/css-bIlmDBTK.js +0 -1560
  745. package/dist/cypher-BMq4Fwjl.js +0 -68
  746. package/dist/d-BZcgY6La.js +0 -127
  747. package/dist/diff-Cg9d_RX2.js +0 -18
  748. package/dist/dockerfile-Bo-KZxHS.js +0 -194
  749. package/dist/dtd-CtLokQ-U.js +0 -84
  750. package/dist/dylan-QYeExnWK.js +0 -234
  751. package/dist/ebnf-Xa2PN7SI.js +0 -77
  752. package/dist/ecl-CiXN-g_D.js +0 -121
  753. package/dist/eiffel-yQhjl4T1.js +0 -110
  754. package/dist/elm-CNT9vbN0.js +0 -108
  755. package/dist/erlang-CFOYdy9e.js +0 -487
  756. package/dist/factor-Bny6SIz6.js +0 -65
  757. package/dist/fcl-CPC2WYrI.js +0 -103
  758. package/dist/forth-BmxRyE9S.js +0 -60
  759. package/dist/fortran-9bvPyrOW.js +0 -442
  760. package/dist/framework.js +0 -279
  761. package/dist/gas-BdfkXJT_.js +0 -183
  762. package/dist/gherkin-CJuwpceU.js +0 -34
  763. package/dist/groovy-DZeT_VM-.js +0 -146
  764. package/dist/haskell-Bvt3Qq1t.js +0 -375
  765. package/dist/haxe-70NVW1pR.js +0 -359
  766. package/dist/http-D9LttvKF.js +0 -44
  767. package/dist/idl-B6TRFYjl.js +0 -947
  768. package/dist/index-0a5sSUk-.js +0 -299
  769. package/dist/index-2uMWKqeX.js +0 -607
  770. package/dist/index-BYSRrP1t.js +0 -98
  771. package/dist/index-BjuXtCZD.js +0 -308
  772. package/dist/index-CE39_ef_.js +0 -93
  773. package/dist/index-CH6q9SbZ.js +0 -134
  774. package/dist/index-CHqWKNbd.js +0 -114759
  775. package/dist/index-C_UCSxbP.js +0 -135
  776. package/dist/index-Cb_-2iIT.js +0 -75
  777. package/dist/index-CqQMjKrC.js +0 -71
  778. package/dist/index-D-7-uSkR.js +0 -58
  779. package/dist/index-DT87PGr4.js +0 -341
  780. package/dist/index-DUpaX9qF.js +0 -288
  781. package/dist/index-Do08qm6v.js +0 -156
  782. package/dist/index-DrXDpBca.js +0 -265
  783. package/dist/index-GWfUyLcy.js +0 -243
  784. package/dist/index-mukpig4Q.js +0 -538
  785. package/dist/index.css +0 -1
  786. package/dist/javascript-WMWNx-Vj.js +0 -690
  787. package/dist/jinja2-DnB6dQmV.js +0 -154
  788. package/dist/julia-DpvXAuO6.js +0 -241
  789. package/dist/livescript-CanGTf8u.js +0 -272
  790. package/dist/lua-XplVlWi_.js +0 -217
  791. package/dist/mathematica-jaRHnSxC.js +0 -35
  792. package/dist/mbox-BctzC1hL.js +0 -76
  793. package/dist/mirc-CFBPAOaF.js +0 -72
  794. package/dist/mllike-BSnXJBGA.js +0 -272
  795. package/dist/modelica-vUgVs--1.js +0 -93
  796. package/dist/mscgen-Cpl0NYLN.js +0 -104
  797. package/dist/mumps-CQoS1kWX.js +0 -25
  798. package/dist/nginx-zDPm3Z74.js +0 -89
  799. package/dist/nsis-BEzMtmb7.js +0 -62
  800. package/dist/ntriples-CsNjv2QF.js +0 -79
  801. package/dist/octave-C8PmmSRH.js +0 -143
  802. package/dist/oz-Ce8aN8oE.js +0 -151
  803. package/dist/pascal-De0D6mP7.js +0 -77
  804. package/dist/perl-B4bSCe1C.js +0 -915
  805. package/dist/pig-D24Z8EXi.js +0 -54
  806. package/dist/powershell-DkYVfTzP.js +0 -249
  807. package/dist/properties-Dn9wna3M.js +0 -26
  808. package/dist/protobuf-BPIjwpzm.js +0 -49
  809. package/dist/pug-BqUR2bBq.js +0 -248
  810. package/dist/puppet-nyd4dhjf.js +0 -45
  811. package/dist/python-B5QdSKoL.js +0 -313
  812. package/dist/q-DXjKs-tC.js +0 -83
  813. package/dist/r-Bz1d3XP0.js +0 -104
  814. package/dist/rpm-IznJm2Xc.js +0 -57
  815. package/dist/ruby-CcYfvIk6.js +0 -228
  816. package/dist/sas-7E8yHoCW.js +0 -105
  817. package/dist/scheme-DjibxsNh.js +0 -124
  818. package/dist/shared/composables/useSettingsMenu.d.ts +0 -180
  819. package/dist/shared/composables/useSettingsMenu.d.ts.map +0 -1
  820. package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts +0 -376
  821. package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts.map +0 -1
  822. package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts +0 -367
  823. package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts.map +0 -1
  824. package/dist/shared/modules/dynamic/components/fields/storybook/Checkbox.stories.d.ts +0 -398
  825. package/dist/shared/modules/dynamic/components/fields/storybook/Checkbox.stories.d.ts.map +0 -1
  826. package/dist/shared/modules/dynamic/components/fields/storybook/ContentField.stories.d.ts +0 -392
  827. package/dist/shared/modules/dynamic/components/fields/storybook/ContentField.stories.d.ts.map +0 -1
  828. package/dist/shared/modules/dynamic/components/fields/storybook/EditorField.stories.d.ts +0 -407
  829. package/dist/shared/modules/dynamic/components/fields/storybook/EditorField.stories.d.ts.map +0 -1
  830. package/dist/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.d.ts +0 -360
  831. package/dist/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.d.ts.map +0 -1
  832. package/dist/shared/modules/dynamic/components/fields/storybook/GalleryField.stories.d.ts +0 -391
  833. package/dist/shared/modules/dynamic/components/fields/storybook/GalleryField.stories.d.ts.map +0 -1
  834. package/dist/shared/modules/dynamic/components/fields/storybook/ImageField.stories.d.ts +0 -372
  835. package/dist/shared/modules/dynamic/components/fields/storybook/ImageField.stories.d.ts.map +0 -1
  836. package/dist/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.d.ts +0 -448
  837. package/dist/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.d.ts.map +0 -1
  838. package/dist/shared/modules/dynamic/components/fields/storybook/InputField.stories.d.ts +0 -469
  839. package/dist/shared/modules/dynamic/components/fields/storybook/InputField.stories.d.ts.map +0 -1
  840. package/dist/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.d.ts +0 -468
  841. package/dist/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.d.ts.map +0 -1
  842. package/dist/shared/modules/dynamic/components/fields/storybook/RadioButtonGroup.stories.d.ts +0 -359
  843. package/dist/shared/modules/dynamic/components/fields/storybook/RadioButtonGroup.stories.d.ts.map +0 -1
  844. package/dist/shared/modules/dynamic/components/fields/storybook/RatingField.stories.d.ts +0 -359
  845. package/dist/shared/modules/dynamic/components/fields/storybook/RatingField.stories.d.ts.map +0 -1
  846. package/dist/shared/modules/dynamic/components/fields/storybook/SelectField.stories.d.ts +0 -516
  847. package/dist/shared/modules/dynamic/components/fields/storybook/SelectField.stories.d.ts.map +0 -1
  848. package/dist/shared/modules/dynamic/components/fields/storybook/StatusField.stories.d.ts +0 -392
  849. package/dist/shared/modules/dynamic/components/fields/storybook/StatusField.stories.d.ts.map +0 -1
  850. package/dist/shared/modules/dynamic/components/fields/storybook/SwitchField.stories.d.ts +0 -14
  851. package/dist/shared/modules/dynamic/components/fields/storybook/SwitchField.stories.d.ts.map +0 -1
  852. package/dist/shared/modules/dynamic/components/fields/storybook/TextareaField.stories.d.ts +0 -407
  853. package/dist/shared/modules/dynamic/components/fields/storybook/TextareaField.stories.d.ts.map +0 -1
  854. package/dist/shared/modules/dynamic/components/fields/storybook/VideoField.stories.d.ts +0 -322
  855. package/dist/shared/modules/dynamic/components/fields/storybook/VideoField.stories.d.ts.map +0 -1
  856. package/dist/shell-C0C2sNA_.js +0 -182
  857. package/dist/sieve-Bwz7vjP5.js +0 -72
  858. package/dist/simple-mode-BqqHn0g6.js +0 -88
  859. package/dist/smalltalk-Bhddl2pB.js +0 -48
  860. package/dist/solr-BNlsLglM.js +0 -41
  861. package/dist/sparql-FarWu_Gb.js +0 -197
  862. package/dist/spreadsheet-C-cy4P5N.js +0 -49
  863. package/dist/sql-mMre1Bo3.js +0 -282
  864. package/dist/stex-92raWT1r.js +0 -129
  865. package/dist/stylus-DRcbY16X.js +0 -250
  866. package/dist/swift-DSxqR9R6.js +0 -230
  867. package/dist/tcl-xfoLljhY.js +0 -81
  868. package/dist/textile-D1AWE-pc.js +0 -295
  869. package/dist/tiddlywiki-5wqsXtSk.js +0 -155
  870. package/dist/tiki-D9z-T0ea.js +0 -178
  871. package/dist/toml-BHiuTcfn.js +0 -49
  872. package/dist/troff-D2UO-fKf.js +0 -35
  873. package/dist/ttcn-Bsa4sfRm.js +0 -123
  874. package/dist/ttcn-cfg-Bac_acMi.js +0 -88
  875. package/dist/turtle-xwJUxoPV.js +0 -80
  876. package/dist/ui/components/atoms/vc-badge/vc-badge.stories.d.ts +0 -465
  877. package/dist/ui/components/atoms/vc-badge/vc-badge.stories.d.ts.map +0 -1
  878. package/dist/ui/components/atoms/vc-button/vc-button.stories.d.ts +0 -1277
  879. package/dist/ui/components/atoms/vc-button/vc-button.stories.d.ts.map +0 -1
  880. package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts +0 -994
  881. package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts.map +0 -1
  882. package/dist/ui/components/atoms/vc-col/vc-col.stories.d.ts +0 -48
  883. package/dist/ui/components/atoms/vc-col/vc-col.stories.d.ts.map +0 -1
  884. package/dist/ui/components/atoms/vc-container/vc-container.stories.d.ts +0 -7
  885. package/dist/ui/components/atoms/vc-container/vc-container.stories.d.ts.map +0 -1
  886. package/dist/ui/components/atoms/vc-hint/vc-hint.stories.d.ts +0 -39
  887. package/dist/ui/components/atoms/vc-hint/vc-hint.stories.d.ts.map +0 -1
  888. package/dist/ui/components/atoms/vc-icon/vc-icon.stories.d.ts +0 -64
  889. package/dist/ui/components/atoms/vc-icon/vc-icon.stories.d.ts.map +0 -1
  890. package/dist/ui/components/atoms/vc-image/vc-image.stories.d.ts +0 -114
  891. package/dist/ui/components/atoms/vc-image/vc-image.stories.d.ts.map +0 -1
  892. package/dist/ui/components/atoms/vc-label/vc-label.stories.d.ts +0 -89
  893. package/dist/ui/components/atoms/vc-label/vc-label.stories.d.ts.map +0 -1
  894. package/dist/ui/components/atoms/vc-link/vc-link.stories.d.ts +0 -93
  895. package/dist/ui/components/atoms/vc-link/vc-link.stories.d.ts.map +0 -1
  896. package/dist/ui/components/atoms/vc-loading/vc-loading.stories.d.ts +0 -20
  897. package/dist/ui/components/atoms/vc-loading/vc-loading.stories.d.ts.map +0 -1
  898. package/dist/ui/components/atoms/vc-progress/vc-progress.stories.d.ts +0 -78
  899. package/dist/ui/components/atoms/vc-progress/vc-progress.stories.d.ts.map +0 -1
  900. package/dist/ui/components/atoms/vc-row/vc-row.stories.d.ts +0 -27
  901. package/dist/ui/components/atoms/vc-row/vc-row.stories.d.ts.map +0 -1
  902. package/dist/ui/components/atoms/vc-status/vc-status.stories.d.ts +0 -121
  903. package/dist/ui/components/atoms/vc-status/vc-status.stories.d.ts.map +0 -1
  904. package/dist/ui/components/atoms/vc-status-icon/vc-status-icon.stories.d.ts +0 -7
  905. package/dist/ui/components/atoms/vc-status-icon/vc-status-icon.stories.d.ts.map +0 -1
  906. package/dist/ui/components/atoms/vc-switch/vc-switch.stories.d.ts +0 -74
  907. package/dist/ui/components/atoms/vc-switch/vc-switch.stories.d.ts.map +0 -1
  908. package/dist/ui/components/atoms/vc-video/vc-video.stories.d.ts +0 -37
  909. package/dist/ui/components/atoms/vc-video/vc-video.stories.d.ts.map +0 -1
  910. package/dist/ui/components/atoms/vc-widget/vc-widget.stories.d.ts +0 -56
  911. package/dist/ui/components/atoms/vc-widget/vc-widget.stories.d.ts.map +0 -1
  912. package/dist/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.stories.d.ts +0 -109
  913. package/dist/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.stories.d.ts.map +0 -1
  914. package/dist/ui/components/molecules/vc-checkbox/vc-checkbox.stories.d.ts +0 -1680
  915. package/dist/ui/components/molecules/vc-checkbox/vc-checkbox.stories.d.ts.map +0 -1
  916. package/dist/ui/components/molecules/vc-editor/vc-editor.stories.d.ts +0 -7275
  917. package/dist/ui/components/molecules/vc-editor/vc-editor.stories.d.ts.map +0 -1
  918. package/dist/ui/components/molecules/vc-field/vc-field.stories.d.ts +0 -105
  919. package/dist/ui/components/molecules/vc-field/vc-field.stories.d.ts.map +0 -1
  920. package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.stories.d.ts +0 -170
  921. package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.stories.d.ts.map +0 -1
  922. package/dist/ui/components/molecules/vc-form/vc-form.stories.d.ts +0 -31
  923. package/dist/ui/components/molecules/vc-form/vc-form.stories.d.ts.map +0 -1
  924. package/dist/ui/components/molecules/vc-input/vc-input.stories.d.ts +0 -362
  925. package/dist/ui/components/molecules/vc-input/vc-input.stories.d.ts.map +0 -1
  926. package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.stories.d.ts +0 -325
  927. package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.stories.d.ts.map +0 -1
  928. package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.stories.d.ts +0 -1120
  929. package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.stories.d.ts.map +0 -1
  930. package/dist/ui/components/molecules/vc-notification/index.d.ts +0 -2
  931. package/dist/ui/components/molecules/vc-notification/index.d.ts.map +0 -1
  932. package/dist/ui/components/molecules/vc-notification/vc-notification.vue.d.ts +0 -23
  933. package/dist/ui/components/molecules/vc-notification/vc-notification.vue.d.ts.map +0 -1
  934. package/dist/ui/components/molecules/vc-pagination/vc-pagination.stories.d.ts +0 -94
  935. package/dist/ui/components/molecules/vc-pagination/vc-pagination.stories.d.ts.map +0 -1
  936. package/dist/ui/components/molecules/vc-radio-button/vc-radio-button.stories.d.ts +0 -555
  937. package/dist/ui/components/molecules/vc-radio-button/vc-radio-button.stories.d.ts.map +0 -1
  938. package/dist/ui/components/molecules/vc-rating/vc-rating.stories.d.ts +0 -412
  939. package/dist/ui/components/molecules/vc-rating/vc-rating.stories.d.ts.map +0 -1
  940. package/dist/ui/components/molecules/vc-select/vc-select.stories.d.ts +0 -2843
  941. package/dist/ui/components/molecules/vc-select/vc-select.stories.d.ts.map +0 -1
  942. package/dist/ui/components/molecules/vc-slider/vc-slider.stories.d.ts +0 -139
  943. package/dist/ui/components/molecules/vc-slider/vc-slider.stories.d.ts.map +0 -1
  944. package/dist/ui/components/molecules/vc-textarea/vc-textarea.stories.d.ts +0 -1075
  945. package/dist/ui/components/molecules/vc-textarea/vc-textarea.stories.d.ts.map +0 -1
  946. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/components/app-bar-button/app-bar-button.vue.d.ts +0 -61
  947. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/components/app-bar-button/app-bar-button.vue.d.ts.map +0 -1
  948. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/composables/useAppBarOverlay.d.ts +0 -19
  949. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/composables/useAppBarOverlay.d.ts.map +0 -1
  950. package/dist/ui/components/organisms/vc-app/vc-app.stories.d.ts +0 -132
  951. package/dist/ui/components/organisms/vc-app/vc-app.stories.d.ts.map +0 -1
  952. package/dist/ui/components/organisms/vc-blade/vc-blade.stories.d.ts +0 -181
  953. package/dist/ui/components/organisms/vc-blade/vc-blade.stories.d.ts.map +0 -1
  954. package/dist/ui/components/organisms/vc-gallery/vc-gallery.stories.d.ts +0 -168
  955. package/dist/ui/components/organisms/vc-gallery/vc-gallery.stories.d.ts.map +0 -1
  956. package/dist/ui/components/organisms/vc-table/types.d.ts +0 -19
  957. package/dist/ui/components/organisms/vc-table/types.d.ts.map +0 -1
  958. package/dist/ui/components/organisms/vc-table/vc-table.stories.d.ts +0 -1460
  959. package/dist/ui/components/organisms/vc-table/vc-table.stories.d.ts.map +0 -1
  960. package/dist/ui/composables/useVisibleElements.d.ts +0 -19
  961. package/dist/ui/composables/useVisibleElements.d.ts.map +0 -1
  962. package/dist/vb-c2kQGd6-.js +0 -74
  963. package/dist/vbscript-Dz1TtKsy.js +0 -324
  964. package/dist/velocity-DJd0pTTC.js +0 -96
  965. package/dist/verilog-C4VGD9n1.js +0 -263
  966. package/dist/vhdl-T9HkrbI2.js +0 -106
  967. package/dist/webidl-CjfDENEo.js +0 -155
  968. package/dist/xquery-BUQdORAS.js +0 -422
  969. package/dist/yacas-C0absKBh.js +0 -73
  970. package/dist/z80-C8rPtw-0.js +0 -61
  971. package/shared/composables/useSettingsMenu.ts +0 -44
  972. package/ui/components/atoms/vc-loading/vc-loading.stories.ts +0 -18
  973. package/ui/components/molecules/vc-notification/index.ts +0 -1
  974. package/ui/components/molecules/vc-notification/vc-notification.vue +0 -170
  975. package/ui/components/organisms/vc-app/_internal/vc-app-bar/composables/useAppBarOverlay.ts +0 -78
  976. package/ui/components/organisms/vc-table/types.ts +0 -25
  977. package/ui/components/organisms/vc-table/vc-table.stories.ts +0 -214
  978. package/ui/composables/useVisibleElements.ts +0 -148
@@ -1,685 +1,1582 @@
1
- import type { Meta, StoryFn } from "@storybook/vue3";
2
- import { VcSelect } from "./";
3
- import { ref } from "vue";
4
-
5
- export default {
6
- title: "molecules/VcSelect",
7
- component: VcSelect as Record<keyof typeof VcSelect, unknown>,
8
- args: {
9
- label: "Select",
10
- placeholder: "Select an option",
11
- },
12
- argTypes: {
13
- options: {
14
- description: `Method that is used to get select options.
15
- Method should be defined in the blade \`scope\` and could be:
16
- \n1) async method with the following arguments: (\`keyword: string\`, \`skip\`, \`ids?: string[]\`).
17
- \n2) any array
18
- \n3) composable returning array`,
19
- table: {
20
- type: {
21
- summary: "((keyword?: string, skip?: number, ids?: string[]) => Promise<P>) | T[]",
22
- },
23
- },
24
- },
25
- optionValue: {
26
- description: "Property which holds the `value`",
27
- control: "text",
28
- table: {
29
- type: {
30
- summary: "string",
31
- },
32
- defaultValue: {
33
- summary: "id",
34
- },
35
- },
36
- },
37
- optionLabel: {
38
- description: "Property which holds the `label`",
39
- control: "text",
40
- table: {
41
- type: {
42
- summary: "string",
43
- },
44
- defaultValue: {
45
- summary: "title",
46
- },
47
- },
48
- },
49
- debounce: {
50
- control: "number",
51
- },
52
- clearable: {
53
- description: "Whether the select is clearable or not.",
54
- control: "boolean",
55
- table: {
56
- type: {
57
- summary: "boolean",
58
- },
59
- defaultValue: {
60
- summary: false,
61
- },
62
- },
63
- },
64
- emitValue: {
65
- description: `Update model with the value of the selected option instead of the whole option.
66
- \n Example:
67
- \nIf emitValue is \`true\` and the selected option is { id: 1, title: "Option 1" }, the model will be updated with 1.
68
- \nIf emitValue is \`false\`, the model will be updated with the whole option.`,
69
- table: {
70
- type: {
71
- summary: "boolean",
72
- },
73
- defaultValue: {
74
- summary: "true",
75
- },
76
- },
77
- },
78
- searchable: {
79
- description: "Whether the select is searchable or not.",
80
- table: {
81
- type: {
82
- summary: "boolean",
83
- },
84
- defaultValue: {
85
- summary: false,
86
- },
87
- },
88
- },
89
- multiple: {
90
- description: "Select multiple values.",
91
- table: {
92
- type: {
93
- summary: "boolean",
94
- },
95
- defaultValue: {
96
- summary: false,
97
- },
98
- },
99
- },
100
- },
101
- } satisfies Meta<typeof VcSelect>;
102
-
103
- export const ObjectArrayOptions: StoryFn<typeof VcSelect> = (args) => ({
104
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
105
- setup() {
106
- const val = ref();
107
- return { args, val };
108
- },
109
- template: `<VcSelect
110
- v-bind="args"
111
- v-model="val"
112
- :options="[
113
- { title: 'Option 1', label: 'Option 1' },
114
- { title: 'Option 2', label: 'Option 2' },
115
- { title: 'Option 3', label: 'Option 3' },
116
- ]"
117
- optionLabel="label"
118
- optionValue="title"
119
- ></VcSelect>`,
120
- });
121
-
122
- export const StringArrayOptions: StoryFn<typeof VcSelect> = (args) => ({
123
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
124
- setup() {
125
- const val = ref();
126
- return { args, val };
127
- },
128
- template: `<VcSelect v-bind="args" v-model="val" :options="['Option 1', 'Option 2', 'Option 3']"></VcSelect>`,
129
- });
130
-
131
- export const AsyncOptions: StoryFn<typeof VcSelect> = (args) => ({
132
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
133
- setup() {
134
- const val = ref();
135
- const getItems = async () =>
136
- new Promise((resolve) => {
137
- setTimeout(() => {
138
- resolve({
139
- results: [
140
- { title: "Option 1", label: "Option 1" },
141
- { title: "Option 2", label: "Option 2" },
142
- { title: "Option 3", label: "Option 3" },
143
- ],
144
- totalCount: 3,
145
- });
146
- }, 1000);
147
- });
148
- return { args, val, getItems };
149
- },
150
-
151
- template: `
152
- <VcSelect
153
- v-bind="args"
154
- v-model="val"
155
- :options="getItems"
156
- optionLabel="label"
157
- optionValue="title"
158
- ></VcSelect>`,
159
- });
160
-
161
- export const EmitValueTrueProp: StoryFn<typeof VcSelect> = (args) => ({
162
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
163
- setup() {
164
- const val = ref("Option 1");
165
- return { args, val };
166
- },
167
-
168
- template: `
169
- <div>
170
- <VcSelect
171
- v-bind="args"
172
- v-model="val"
173
- :options="[
174
- { title: 'Option 1', label: 'Option 1 label' },
175
- { title: 'Option 2', label: 'Option 2 label' },
176
- { title: 'Option 3', label: 'Option 3 label' },
177
- ]"
178
- optionLabel="label"
179
- optionValue="title"
180
- ></VcSelect>
181
-
182
- <p>Selected value: {{val}}</p>
183
- </div>`,
184
- });
185
- EmitValueTrueProp.parameters = {
186
- docs: {
187
- description: {
188
- story: "The default emitValue === <b>true</b> returns the value of key defined in optionValue",
189
- },
190
- },
191
- };
192
-
193
- export const EmitValueFalseProp: StoryFn<typeof VcSelect> = (args) => ({
194
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
195
- setup() {
196
- const val = ref({ title: "Option 1", label: "Option 1 label" });
197
- return { args, val };
198
- },
199
-
200
- template: `
201
- <div>
202
- <VcSelect
203
- v-bind="args"
204
- v-model="val"
205
- :emit-value="false"
206
- :options="[
207
- { title: 'Option 1', label: 'Option 1 label' },
208
- { title: 'Option 2', label: 'Option 2 label' },
209
- { title: 'Option 3', label: 'Option 3 label' },
210
- ]"
211
- optionLabel="label"
212
- optionValue="title"
213
- ></VcSelect>
214
-
215
- <p>Selected value: {{val}}</p>
216
- </div>`,
217
- });
218
- EmitValueFalseProp.parameters = {
219
- docs: {
220
- description: {
221
- story: "emitValue === <b>false</b> returns the complete object as the result",
222
- },
223
- },
224
- };
225
-
226
- export const MapOptionsTrueProp: StoryFn<typeof VcSelect> = (args) => ({
227
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
228
- setup() {
229
- const val = ref("Option 1 title");
230
- return { args, val };
231
- },
232
-
233
- template: `
234
- <div>
235
- <VcSelect
236
- v-bind="args"
237
- v-model="val"
238
- :options="[
239
- { title: 'Option 1 title', label: 'Option 1 label' },
240
- { title: 'Option 2 title', label: 'Option 2 label' },
241
- { title: 'Option 3 title', label: 'Option 3 label' },
242
- ]"
243
- optionLabel="label"
244
- optionValue="title"
245
- ></VcSelect>
246
-
247
- <p>Selected value: {{val}}</p>
248
- </div>`,
249
- });
250
- MapOptionsTrueProp.parameters = {
251
- docs: {
252
- description: {
253
- story:
254
- "The default mapOptions === <b>true</b> maps map labels of model from 'options' Array. If you are using emit-value you will probably need to use map-options to display the label text in the select field rather than the value.",
255
- },
256
- },
257
- };
258
-
259
- export const MapOptionsFalseProp: StoryFn<typeof VcSelect> = (args) => ({
260
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
261
- setup() {
262
- const val = ref("Option 1 title");
263
- return { args, val };
264
- },
265
-
266
- template: `
267
- <div>
268
- <VcSelect
269
- v-bind="args"
270
- v-model="val"
271
- :map-options="false"
272
- :options="[
273
- { title: 'Option 1 title', label: 'Option 1 label' },
274
- { title: 'Option 2 title', label: 'Option 2 label' },
275
- { title: 'Option 3 title', label: 'Option 3 label' },
276
- ]"
277
- optionLabel="label"
278
- optionValue="title"
279
- ></VcSelect>
280
-
281
- <p>Selected value: {{val}}</p>
282
- </div>`,
283
- });
284
- MapOptionsFalseProp.parameters = {
285
- docs: {
286
- description: {
287
- story: "mapOptions === <b>false</b> will not map labels of model from 'options' Array.",
288
- },
289
- },
290
- };
291
-
292
- export const Error = ObjectArrayOptions.bind({});
293
- Error.args = {
294
- error: true,
295
- errorMessage: "Some error message",
296
- };
297
-
298
- export const Tooltip = ObjectArrayOptions.bind({});
299
- Tooltip.args = {
300
- tooltip: "Some tooltip",
301
- };
302
-
303
- export const Disabled = ObjectArrayOptions.bind({});
304
- Disabled.args = {
305
- disabled: true,
306
- };
307
-
308
- export const SearchableInput = ObjectArrayOptions.bind({});
309
- SearchableInput.args = {
310
- searchable: true,
311
- };
312
-
313
- export const SearchableInputCustomDebounce = SearchableInput.bind({});
314
- SearchableInputCustomDebounce.args = {
315
- searchable: true,
316
- debounce: 2000,
317
- };
318
-
319
- export const Required = ObjectArrayOptions.bind({});
320
- Required.args = {
321
- required: true,
322
- };
323
-
324
- export const MultipleSelect: StoryFn<typeof VcSelect> = (args) => ({
325
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
326
- setup() {
327
- const val = ref([
328
- { title: "Option 1", label: "Option 1" },
329
- { title: "Option 2", label: "Option 2" },
330
- ]);
331
- return { args, val };
332
- },
333
-
334
- template: `
335
- <VcSelect
336
- v-bind="args"
337
- v-model="val"
338
- multiple
339
- :options="[
340
- { title: 'Option 1', label: 'Option 1' },
341
- { title: 'Option 2', label: 'Option 2' },
342
- { title: 'Option 3', label: 'Option 3' },
343
- ]"
344
- optionLabel="label"
345
- optionValue="title"
346
- ></VcSelect>`,
347
- });
348
-
349
- export const NotClearable: StoryFn<typeof VcSelect> = (args) => ({
350
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
351
- setup() {
352
- const val = ref("Option 1");
353
- return { args, val };
354
- },
355
- template: `<VcSelect
356
- v-bind="args"
357
- v-model="val"
358
- :clearable="false"
359
- :options="[
360
- { title: 'Option 1', label: 'Option 1' },
361
- { title: 'Option 2', label: 'Option 2' },
362
- { title: 'Option 3', label: 'Option 3' },
363
- ]"
364
- optionLabel="label"
365
- optionValue="title"
366
- ></VcSelect>`,
367
- });
368
-
369
- export const Loading = ObjectArrayOptions.bind({});
370
- Loading.args = {
371
- loading: true,
372
- };
373
-
374
- export const Prefix = ObjectArrayOptions.bind({});
375
- Prefix.args = {
376
- prefix: "prefix",
377
- };
378
-
379
- export const Suffix = ObjectArrayOptions.bind({});
380
- Suffix.args = {
381
- suffix: "suffix",
382
- };
383
-
384
- export const Hint = ObjectArrayOptions.bind({});
385
- Hint.args = {
386
- hint: "Some hint",
387
- };
388
-
389
- export const CustomSelectControlSlot: StoryFn<typeof VcSelect> = (args) => ({
390
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
391
- setup() {
392
- const val = ref();
393
- return { args, val };
394
- },
395
- template: `<VcSelect
396
- v-bind="args"
397
- v-model="val"
398
- :options="[
399
- { title: 'Option 1', label: 'Option 1' },
400
- { title: 'Option 2', label: 'Option 2' },
401
- { title: 'Option 3', label: 'Option 3' },
402
- ]"
403
- optionLabel="label"
404
- optionValue="title"
405
- customSelectControl
406
- >
407
- <template #control="scope">
408
- <VcButton @click="scope.toggleHandler" class="tw-w-full">Custom control</VcButton>
409
- </template>
410
- </VcSelect>`,
411
- });
412
- CustomSelectControlSlot.parameters = {
413
- docs: {
414
- description: {
415
- story: `
416
- "control": (scope: {
417
- /**
418
- * Toggle dropdown handler
419
- */
420
- toggleHandler: () => void;
421
- }) => any;`,
422
- },
423
- },
424
- };
425
-
426
- export const CustomPrependInnerSlot: StoryFn<typeof VcSelect> = (args) => ({
427
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
428
- setup() {
429
- const val = ref();
430
- return { args, val };
431
- },
432
- template: `<VcSelect
433
- v-bind="args"
434
- v-model="val"
435
- :options="[
436
- { title: 'Option 1', label: 'Option 1' },
437
- { title: 'Option 2', label: 'Option 2' },
438
- { title: 'Option 3', label: 'Option 3' },
439
- ]"
440
- optionLabel="label"
441
- optionValue="title"
442
- customPrependInner
443
- >
444
- <template #prepend-inner>
445
- <VcButton>Action</VcButton>
446
- </template>
447
- </VcSelect>`,
448
- });
449
-
450
- export const CustomAppendInnerSlot: StoryFn<typeof VcSelect> = (args) => ({
451
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
452
- setup() {
453
- const val = ref();
454
- return { args, val };
455
- },
456
- template: `<VcSelect
457
- v-bind="args"
458
- v-model="val"
459
- :options="[
460
- { title: 'Option 1', label: 'Option 1' },
461
- { title: 'Option 2', label: 'Option 2' },
462
- { title: 'Option 3', label: 'Option 3' },
463
- ]"
464
- optionLabel="label"
465
- optionValue="title"
466
- customAppendInner
467
- >
468
- <template #append-inner>
469
- <VcButton>Action</VcButton>
470
- </template>
471
- </VcSelect>`,
472
- });
473
-
474
- export const CustomPrependSlot: StoryFn<typeof VcSelect> = (args) => ({
475
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
476
- setup() {
477
- const val = ref();
478
- return { args, val };
479
- },
480
- template: `<VcSelect
481
- v-bind="args"
482
- v-model="val"
483
- :options="[
484
- { title: 'Option 1', label: 'Option 1' },
485
- { title: 'Option 2', label: 'Option 2' },
486
- { title: 'Option 3', label: 'Option 3' },
487
- ]"
488
- optionLabel="label"
489
- optionValue="title"
490
- customPrepend
491
- >
492
- <template #prepend>
493
- <VcButton>Action</VcButton>
494
- </template>
495
- </VcSelect>`,
496
- });
497
-
498
- export const CustomAppendSlot: StoryFn<typeof VcSelect> = (args) => ({
499
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
500
- setup() {
501
- const val = ref();
502
- return { args, val };
503
- },
504
- template: `<VcSelect
505
- v-bind="args"
506
- v-model="val"
507
- :options="[
508
- { title: 'Option 1', label: 'Option 1' },
509
- { title: 'Option 2', label: 'Option 2' },
510
- { title: 'Option 3', label: 'Option 3' },
511
- ]"
512
- optionLabel="label"
513
- optionValue="title"
514
- customAppend
515
- >
516
- <template #append>
517
- <VcButton>Action</VcButton>
518
- </template>
519
- </VcSelect>`,
520
- });
521
-
522
- export const CustomNoOptionsSlot: StoryFn<typeof VcSelect> = (args) => ({
523
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
524
- setup() {
525
- const val = ref();
526
- return { args, val };
527
- },
528
- template: `<VcSelect
529
- v-bind="args"
530
- v-model="val"
531
- :options="[]"
532
- optionLabel="label"
533
- optionValue="title"
534
- customNoOptions
535
- >
536
- <template #no-options>
537
- <h2 class="tw-font-bold">I'm custom slot!</h2>
538
- <p>Please try again later</p>
539
- </template>
540
- </VcSelect>`,
541
- });
542
-
543
- export const CustomErrorSlot: StoryFn<typeof VcSelect> = (args) => ({
544
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
545
- setup() {
546
- const val = ref();
547
- return { args, val };
548
- },
549
- template: `<VcSelect
550
- v-bind="args"
551
- v-model="val"
552
- :options="[]"
553
- optionLabel="label"
554
- optionValue="title"
555
- error
556
- customError
557
- >
558
- <template #error>
559
- <p class="tw-font-bold">I'm custom error message!</p>
560
- </template>
561
- </VcSelect>`,
562
- });
563
-
564
- export const CustomHintSlot: StoryFn<typeof VcSelect> = (args) => ({
565
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
566
- setup() {
567
- const val = ref();
568
- return { args, val };
569
- },
570
- template: `<VcSelect
571
- v-bind="args"
572
- v-model="val"
573
- :options="[]"
574
- optionLabel="label"
575
- optionValue="title"
576
- customHint
577
- >
578
- <template #hint>
579
- <p class="tw-font-bold">I'm custom hint message!</p>
580
- </template>
581
- </VcSelect>`,
582
- });
583
-
584
- export const CustomSelectedOptionSlot: StoryFn<typeof VcSelect> = (args) => ({
585
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
586
- setup() {
587
- const val = ref("Option 1");
588
- return { args, val };
589
- },
590
- template: `<VcSelect
591
- v-bind="args"
592
- v-model="val"
593
- :options="[
594
- { title: 'Option 1', label: 'Option 1' },
595
- { title: 'Option 2', label: 'Option 2' },
596
- { title: 'Option 3', label: 'Option 3' },
597
- ]"
598
- optionLabel="label"
599
- optionValue="title"
600
- >
601
- <template #selected-item="{ opt }">
602
-
603
- <VcIcon class="tw-mr-2 tw-text-green-300" icon="fas fa-check" />
604
- <p>{{opt.label}}</p>
605
-
606
- </template>
607
- </VcSelect>`,
608
- });
609
- CustomSelectedOptionSlot.parameters = {
610
- docs: {
611
- description: {
612
- story: `
613
- "selected-item": (scope: {
614
- /**
615
- * Selection index
616
- */
617
- index: number;
618
- /**
619
- * Selected option -- its value is taken from model
620
- */
621
- opt: Option;
622
- /**
623
- * Always true -- passed as prop
624
- */
625
- selected: boolean;
626
- /**
627
- * Remove selected option located at specific index
628
- * @param index Index at which to remove selection
629
- */
630
- removeAtIndex: (index: number) => void;
631
- }) => any;`,
632
- },
633
- },
634
- };
635
-
636
- export const CustomListOptionSlot: StoryFn<typeof VcSelect> = (args) => ({
637
- components: { VcSelect } as Record<keyof typeof VcSelect, unknown>,
638
- setup() {
639
- const val = ref("Option 1");
640
- return { args, val };
641
- },
642
- template: `<VcSelect
643
- v-bind="args"
644
- v-model="val"
645
- :options="[
646
- { title: 'Option 1', label: 'Option 1' },
647
- { title: 'Option 2', label: 'Option 2' },
648
- { title: 'Option 3', label: 'Option 3' },
649
- ]"
650
- optionLabel="label"
651
- optionValue="title"
652
- >
653
- <template #option="{ opt }">
654
- <VcIcon class="tw-mr-2 tw-text-green-300" icon="fas fa-check" />
655
- <p>{{opt.label}}</p>
656
- </template>
657
- </VcSelect>`,
658
- });
659
- CustomListOptionSlot.parameters = {
660
- docs: {
661
- description: {
662
- story: `
663
- option: (scope: {
664
- /**
665
- * Option index
666
- */
667
- index: number;
668
- /**
669
- * Option -- its value is taken from 'options' prop
670
- */
671
- opt: Option;
672
- /**
673
- * Is option selected
674
- */
675
- selected: boolean;
676
- /**
677
- * Add/remove option from model
678
- * @param opt Option to add to model
679
- */
680
- toggleOption: (opt: any) => void;
681
- }) => any;
682
- `,
683
- },
684
- },
685
- };
1
+ import type { Meta, StoryObj } from "@storybook/vue3";
2
+ import { VcSelect } from "./";
3
+ import { ref, h, computed } from "vue";
4
+ import { VcIcon } from "../../atoms/vc-icon";
5
+ import { VcButton } from "../../atoms/vc-button";
6
+
7
+ /**
8
+ * `VcSelect` is a versatile dropdown component for selecting single or multiple options.
9
+ * It supports various data sources, async loading, searching, and extensive customization through slots.
10
+ */
11
+ const meta = {
12
+ title: "Molecules/VcSelect",
13
+ component: VcSelect,
14
+ tags: ["autodocs"],
15
+ args: {
16
+ label: "Select",
17
+ placeholder: "Select an option",
18
+ options: [
19
+ { id: 1, title: "Option 1" },
20
+ { id: 2, title: "Option 2" },
21
+ { id: 3, title: "Option 3" },
22
+ { id: 4, title: "Option 4" },
23
+ { id: 5, title: "Option 5" },
24
+ ],
25
+ optionValue: "id",
26
+ optionLabel: "title",
27
+ },
28
+ argTypes: {
29
+ modelValue: {
30
+ description: "Value of the select (v-model)",
31
+ control: "text",
32
+ table: {
33
+ category: "Model",
34
+ type: { summary: "any" },
35
+ },
36
+ },
37
+ options: {
38
+ description: `Options for the select dropdown. Can be an array of objects, an array of primitives, or an async function`,
39
+ control: "object",
40
+ table: {
41
+ category: "Data",
42
+ type: {
43
+ summary: "Array<any> | Function",
44
+ detail: `Can be:
45
+ 1) Array of objects (with optionValue and optionLabel properties)
46
+ 2) Array of primitive values (strings, numbers)
47
+ 3) Async function: (keyword?: string, skip?: number, ids?: string[]) => Promise<{ results: any[] }>`,
48
+ },
49
+ },
50
+ },
51
+ optionValue: {
52
+ description: "Property name or function to get the value from option objects",
53
+ control: "text",
54
+ table: {
55
+ category: "Data",
56
+ type: {
57
+ summary: "string | Function",
58
+ detail: "Property name to use as value or function that returns value from option object",
59
+ },
60
+ defaultValue: { summary: "id" },
61
+ },
62
+ },
63
+ optionLabel: {
64
+ description: "Property name or function to get the display label from option objects",
65
+ control: "text",
66
+ table: {
67
+ category: "Data",
68
+ type: {
69
+ summary: "string | Function",
70
+ detail: "Property name to use as label or function that returns label from option object",
71
+ },
72
+ defaultValue: { summary: "title" },
73
+ },
74
+ },
75
+ label: {
76
+ description: "Label text displayed above the select",
77
+ control: "text",
78
+ table: {
79
+ category: "Appearance",
80
+ type: { summary: "string" },
81
+ },
82
+ },
83
+ placeholder: {
84
+ description: "Placeholder text when no value is selected",
85
+ control: "text",
86
+ table: {
87
+ category: "Appearance",
88
+ type: { summary: "string" },
89
+ },
90
+ },
91
+ debounce: {
92
+ description: "Debounce time for search input (in milliseconds)",
93
+ control: "number",
94
+ table: {
95
+ category: "Behavior",
96
+ type: { summary: "number" },
97
+ defaultValue: { summary: 300 },
98
+ },
99
+ },
100
+ clearable: {
101
+ description: "Whether the select allows clearing the selected value",
102
+ control: "boolean",
103
+ table: {
104
+ category: "Behavior",
105
+ type: { summary: "boolean" },
106
+ defaultValue: { summary: false },
107
+ },
108
+ },
109
+ emitValue: {
110
+ description: "Emit only the value instead of the entire option object",
111
+ control: "boolean",
112
+ table: {
113
+ category: "Model",
114
+ type: { summary: "boolean" },
115
+ defaultValue: { summary: true },
116
+ },
117
+ },
118
+ searchable: {
119
+ description: "Enable searching/filtering options",
120
+ control: "boolean",
121
+ table: {
122
+ category: "Behavior",
123
+ type: { summary: "boolean" },
124
+ defaultValue: { summary: false },
125
+ },
126
+ },
127
+ multiple: {
128
+ description: "Allow selecting multiple values",
129
+ control: "boolean",
130
+ table: {
131
+ category: "Behavior",
132
+ type: { summary: "boolean" },
133
+ defaultValue: { summary: false },
134
+ },
135
+ },
136
+ disabled: {
137
+ description: "Disable the select component",
138
+ control: "boolean",
139
+ table: {
140
+ category: "State",
141
+ type: { summary: "boolean" },
142
+ defaultValue: { summary: false },
143
+ },
144
+ },
145
+ required: {
146
+ description: "Mark the select as required (shows asterisk)",
147
+ control: "boolean",
148
+ table: {
149
+ category: "Validation",
150
+ type: { summary: "boolean" },
151
+ defaultValue: { summary: false },
152
+ },
153
+ },
154
+ error: {
155
+ description: "Show the select in error state",
156
+ control: "boolean",
157
+ table: {
158
+ category: "Validation",
159
+ type: { summary: "boolean" },
160
+ defaultValue: { summary: false },
161
+ },
162
+ },
163
+ errorMessage: {
164
+ description: "Error message to display below the select",
165
+ control: "text",
166
+ table: {
167
+ category: "Validation",
168
+ type: { summary: "string" },
169
+ },
170
+ },
171
+ hint: {
172
+ description: "Hint text to display below the select",
173
+ control: "text",
174
+ table: {
175
+ category: "Appearance",
176
+ type: { summary: "string" },
177
+ },
178
+ },
179
+ tooltip: {
180
+ description: "Tooltip text to display next to the label",
181
+ control: "text",
182
+ table: {
183
+ category: "Appearance",
184
+ type: { summary: "string" },
185
+ },
186
+ },
187
+ prefix: {
188
+ description: "Prefix text to display inside the select field",
189
+ control: "text",
190
+ table: {
191
+ category: "Appearance",
192
+ type: { summary: "string" },
193
+ },
194
+ },
195
+ suffix: {
196
+ description: "Suffix text to display inside the select field",
197
+ control: "text",
198
+ table: {
199
+ category: "Appearance",
200
+ type: { summary: "string" },
201
+ },
202
+ },
203
+ size: {
204
+ description: "Size of the select field",
205
+ control: "select",
206
+ options: ["default", "small"],
207
+ table: {
208
+ category: "Appearance",
209
+ type: { summary: "'default' | 'small'" },
210
+ defaultValue: { summary: "default" },
211
+ },
212
+ },
213
+ mapOptions: {
214
+ description: "Map labels of model from options array",
215
+ control: "boolean",
216
+ table: {
217
+ category: "Behavior",
218
+ type: { summary: "boolean" },
219
+ defaultValue: { summary: true },
220
+ },
221
+ },
222
+ loading: {
223
+ description: "Show loading state",
224
+ control: "boolean",
225
+ table: {
226
+ category: "State",
227
+ type: { summary: "boolean" },
228
+ defaultValue: { summary: false },
229
+ },
230
+ },
231
+ outline: {
232
+ description: "Whether to show an outline around the select",
233
+ control: "boolean",
234
+ table: {
235
+ category: "Appearance",
236
+ type: { summary: "boolean" },
237
+ defaultValue: { summary: true },
238
+ },
239
+ },
240
+ control: {
241
+ description: "Slot for customizing the entire control element",
242
+ table: {
243
+ category: "Slots",
244
+ type: { summary: "{ toggleHandler: () => void }" },
245
+ },
246
+ },
247
+ "prepend-inner": {
248
+ description: "Slot for content to prepend inside the select field",
249
+ table: {
250
+ category: "Slots",
251
+ type: { summary: "VNode | string" },
252
+ },
253
+ },
254
+ "append-inner": {
255
+ description: "Slot for content to append inside the select field",
256
+ table: {
257
+ category: "Slots",
258
+ type: { summary: "VNode | string" },
259
+ },
260
+ },
261
+ prepend: {
262
+ description: "Slot for content to prepend outside the select field",
263
+ table: {
264
+ category: "Slots",
265
+ type: { summary: "VNode | string" },
266
+ },
267
+ },
268
+ append: {
269
+ description: "Slot for content to append outside the select field",
270
+ table: {
271
+ category: "Slots",
272
+ type: { summary: "VNode | string" },
273
+ },
274
+ },
275
+ "selected-item": {
276
+ description: "Slot for customizing the selected item display",
277
+ table: {
278
+ category: "Slots",
279
+ type: { summary: "{ index: number, opt: any, selected: boolean, removeAtIndex: Function }" },
280
+ },
281
+ },
282
+ option: {
283
+ description: "Slot for customizing option display in the dropdown",
284
+ table: {
285
+ category: "Slots",
286
+ type: { summary: "{ index: number, opt: any, selected: boolean, toggleOption: Function, label: string }" },
287
+ },
288
+ },
289
+ // error: {
290
+ // description: "Slot for custom error message",
291
+ // table: {
292
+ // category: "Slots",
293
+ // type: { summary: "VNode | string" },
294
+ // },
295
+ // },
296
+ // hint: {
297
+ // description: "Slot for custom hint",
298
+ // table: {
299
+ // category: "Slots",
300
+ // type: { summary: "VNode | string" },
301
+ // },
302
+ // },
303
+ "no-options": {
304
+ description: "Slot for customizing the 'no options' state",
305
+ table: {
306
+ category: "Slots",
307
+ type: { summary: "VNode | string" },
308
+ },
309
+ },
310
+ },
311
+ parameters: {
312
+ docs: {
313
+ description: {
314
+ component: `
315
+ A comprehensive select component for Vue 3 with the following features:
316
+
317
+ ## Key Features
318
+ - Single and multiple selection modes
319
+ - Object and primitive value support
320
+ - Async options loading with pagination
321
+ - Searchable dropdown
322
+ - Rich customization through slots and props
323
+ - Keyboard navigation support
324
+ - Various states (loading, error, disabled)
325
+ - Customizable appearance (prefix, suffix, size)
326
+
327
+ ## Slot System
328
+ The component has an extensive slot system for customization:
329
+ - \`control\`: Customize the entire control element
330
+ - \`prepend\`/\`append\`: Add content before/after the select
331
+ - \`prepend-inner\`/\`append-inner\`: Add content inside the select field
332
+ - \`selected-item\`: Customize how selected items appear
333
+ - \`option\`: Customize how dropdown options appear
334
+ - \`error\`/\`hint\`: Custom error/hint messages
335
+ - \`no-options\`: Custom message when no options are available
336
+
337
+ ## Usage Example
338
+
339
+ \`\`\`vue
340
+ <template>
341
+ <VcSelect
342
+ v-model="selectedValue"
343
+ :options="options"
344
+ label="Country"
345
+ placeholder="Select a country"
346
+ :searchable="true"
347
+ :clearable="true"
348
+ />
349
+ </template>
350
+
351
+ <script setup>
352
+ import { ref } from 'vue';
353
+ import { VcSelect } from '@vc-shell/framework';
354
+
355
+ const options = [
356
+ { id: 'us', title: 'United States' },
357
+ { id: 'ca', title: 'Canada' },
358
+ { id: 'mx', title: 'Mexico' }
359
+ ];
360
+
361
+ const selectedValue = ref(null);
362
+ </script>
363
+ \`\`\`
364
+ `,
365
+ },
366
+ },
367
+ },
368
+ } satisfies Meta<typeof VcSelect>;
369
+
370
+ export default meta;
371
+ type Story = StoryObj<typeof meta>;
372
+
373
+ /**
374
+ * Basic implementation with an array of objects as options, specifying both label and value properties.
375
+ */
376
+ export const Basic: Story = {
377
+ render: (args) => ({
378
+ components: { VcSelect },
379
+ setup() {
380
+ const value = ref(null);
381
+
382
+ const handleChange = (newValue: any) => {
383
+ console.log("Value changed:", newValue);
384
+ };
385
+
386
+ return { args, value, handleChange };
387
+ },
388
+ template: `
389
+ <div class="tw-p-4 tw-max-w-sm">
390
+ <VcSelect
391
+ v-bind="args"
392
+ v-model="value"
393
+ @update:modelValue="handleChange"
394
+ />
395
+ <div class="tw-mt-4 tw-text-sm">
396
+ <p>Selected value: <code>{{ JSON.stringify(value) }}</code></p>
397
+ </div>
398
+ </div>
399
+ `,
400
+ }),
401
+ };
402
+
403
+ /**
404
+ * Use multiple selection to choose several options at once.
405
+ * The model value will be an array of the selected values.
406
+ */
407
+ export const MultipleSelection: Story = {
408
+ args: {
409
+ multiple: true,
410
+ placeholder: "Select multiple options",
411
+ clearable: true,
412
+ },
413
+ render: (args) => ({
414
+ components: { VcSelect },
415
+ setup() {
416
+ const value = ref([]);
417
+
418
+ const handleChange = (newValue: any) => {
419
+ console.log("Value changed:", newValue);
420
+ };
421
+
422
+ return { args, value, handleChange };
423
+ },
424
+ template: `
425
+ <div class="tw-p-4 tw-max-w-sm">
426
+ <VcSelect
427
+ v-bind="args"
428
+ v-model="value"
429
+ @update:modelValue="handleChange"
430
+ />
431
+ <div class="tw-mt-4 tw-text-sm">
432
+ <p>Selected values: <code>{{ JSON.stringify(value) }}</code></p>
433
+ </div>
434
+ </div>
435
+ `,
436
+ }),
437
+ };
438
+
439
+ /**
440
+ * Enable searching to filter options as you type. This is particularly
441
+ * useful for dropdowns with many options.
442
+ */
443
+ export const Searchable: Story = {
444
+ args: {
445
+ searchable: true,
446
+ placeholder: "Search and select an option",
447
+ options: [
448
+ { id: 1, title: "Apple" },
449
+ { id: 2, title: "Banana" },
450
+ { id: 3, title: "Cherry" },
451
+ { id: 4, title: "Date" },
452
+ { id: 5, title: "Elderberry" },
453
+ { id: 6, title: "Fig" },
454
+ { id: 7, title: "Grape" },
455
+ { id: 8, title: "Honeydew" },
456
+ { id: 9, title: "Kiwi" },
457
+ { id: 10, title: "Lemon" },
458
+ ],
459
+ },
460
+ render: (args) => ({
461
+ components: { VcSelect },
462
+ setup() {
463
+ const value = ref(null);
464
+ return { args, value };
465
+ },
466
+ template: `
467
+ <div class="tw-p-4 tw-max-w-sm">
468
+ <VcSelect
469
+ v-bind="args"
470
+ v-model="value"
471
+ />
472
+ </div>
473
+ `,
474
+ }),
475
+ };
476
+
477
+ /**
478
+ * Loading data asynchronously with a function that returns a Promise.
479
+ * This example simulates fetching data from an API.
480
+ */
481
+ export const AsyncOptions: Story = {
482
+ args: {
483
+ searchable: true,
484
+ label: "Users",
485
+ placeholder: "Search for a user",
486
+ },
487
+ render: (args) => ({
488
+ components: { VcSelect },
489
+ setup() {
490
+ const value = ref(null);
491
+
492
+ // Mock API function that simulates fetching data
493
+ const fetchUsers = async (keyword = "", skip = 0) => {
494
+ console.log(`Fetching users with keyword: ${keyword}, skip: ${skip}`);
495
+
496
+ // Simulate API delay
497
+ await new Promise((resolve) => setTimeout(resolve, 500));
498
+
499
+ const allUsers = [
500
+ { id: 1, title: "John Smith" },
501
+ { id: 2, title: "Jane Doe" },
502
+ { id: 3, title: "Alice Johnson" },
503
+ { id: 4, title: "Bob Brown" },
504
+ { id: 5, title: "Charlie Davis" },
505
+ { id: 6, title: "Diana Evans" },
506
+ { id: 7, title: "Edward Frank" },
507
+ { id: 8, title: "Grace Garcia" },
508
+ { id: 9, title: "Henry Hill" },
509
+ { id: 10, title: "Isabel Irwin" },
510
+ ];
511
+
512
+ // Filter users by keyword if provided
513
+ let filteredUsers = keyword
514
+ ? allUsers.filter((user) => user.title.toLowerCase().includes(keyword.toLowerCase()))
515
+ : allUsers;
516
+
517
+ // Simulate pagination
518
+ filteredUsers = filteredUsers.slice(skip, skip + 5);
519
+
520
+ return {
521
+ results: filteredUsers,
522
+ totalCount: filteredUsers.length,
523
+ };
524
+ };
525
+
526
+ return { args, value, fetchUsers };
527
+ },
528
+ template: `
529
+ <div class="tw-p-4 tw-max-w-sm">
530
+ <VcSelect
531
+ v-bind="args"
532
+ v-model="value"
533
+ :options="fetchUsers"
534
+ />
535
+ <div class="tw-mt-4 tw-text-sm tw-text-gray-600">
536
+ Type to search for users. Results are loaded asynchronously.
537
+ </div>
538
+ </div>
539
+ `,
540
+ }),
541
+ };
542
+
543
+ /**
544
+ * You can make the select display various states like disabled, loading,
545
+ * error or required.
546
+ */
547
+ export const States: Story = {
548
+ render: (args) => ({
549
+ components: { VcSelect },
550
+ setup() {
551
+ const standardValue = ref(null);
552
+ const disabledValue = ref(2);
553
+ const loadingValue = ref(null);
554
+ const errorValue = ref(null);
555
+ const requiredValue = ref(null);
556
+
557
+ return {
558
+ args,
559
+ standardValue,
560
+ disabledValue,
561
+ loadingValue,
562
+ errorValue,
563
+ requiredValue,
564
+ };
565
+ },
566
+ template: `
567
+ <div class="tw-p-4 tw-space-y-6">
568
+ <div class="tw-max-w-sm">
569
+ <h3 class="tw-text-sm tw-font-medium tw-mb-2">Standard</h3>
570
+ <VcSelect
571
+ v-bind="args"
572
+ v-model="standardValue"
573
+ label="Standard Select"
574
+ />
575
+ </div>
576
+
577
+ <div class="tw-max-w-sm">
578
+ <h3 class="tw-text-sm tw-font-medium tw-mb-2">Disabled</h3>
579
+ <VcSelect
580
+ v-bind="args"
581
+ v-model="disabledValue"
582
+ label="Disabled Select"
583
+ :disabled="true"
584
+ />
585
+ </div>
586
+
587
+ <div class="tw-max-w-sm">
588
+ <h3 class="tw-text-sm tw-font-medium tw-mb-2">Loading</h3>
589
+ <VcSelect
590
+ v-bind="args"
591
+ v-model="loadingValue"
592
+ label="Loading Select"
593
+ :loading="true"
594
+ />
595
+ </div>
596
+
597
+ <div class="tw-max-w-sm">
598
+ <h3 class="tw-text-sm tw-font-medium tw-mb-2">Error</h3>
599
+ <VcSelect
600
+ v-bind="args"
601
+ v-model="errorValue"
602
+ label="Error Select"
603
+ :error="true"
604
+ errorMessage="This field has an error"
605
+ />
606
+ </div>
607
+
608
+ <div class="tw-max-w-sm">
609
+ <h3 class="tw-text-sm tw-font-medium tw-mb-2">Required</h3>
610
+ <VcSelect
611
+ v-bind="args"
612
+ v-model="requiredValue"
613
+ label="Required Select"
614
+ :required="true"
615
+ />
616
+ </div>
617
+ </div>
618
+ `,
619
+ }),
620
+ };
621
+
622
+ /**
623
+ * You can customize the appearance with props like size, hint,
624
+ * tooltip, prefix, and suffix.
625
+ */
626
+ export const Appearance: Story = {
627
+ render: (args) => ({
628
+ components: { VcSelect },
629
+ setup() {
630
+ const standardValue = ref(null);
631
+ const smallValue = ref(null);
632
+ const tooltipValue = ref(null);
633
+ const hintValue = ref(null);
634
+ const prefixSuffixValue = ref(null);
635
+
636
+ return {
637
+ args,
638
+ standardValue,
639
+ smallValue,
640
+ tooltipValue,
641
+ hintValue,
642
+ prefixSuffixValue,
643
+ };
644
+ },
645
+ template: `
646
+ <div class="tw-p-4 tw-space-y-6">
647
+ <div class="tw-max-w-sm">
648
+ <h3 class="tw-text-sm tw-font-medium tw-mb-2">Default Size</h3>
649
+ <VcSelect
650
+ v-bind="args"
651
+ v-model="standardValue"
652
+ label="Default Size"
653
+ size="default"
654
+ />
655
+ </div>
656
+
657
+ <div class="tw-max-w-sm">
658
+ <h3 class="tw-text-sm tw-font-medium tw-mb-2">Small Size</h3>
659
+ <VcSelect
660
+ v-bind="args"
661
+ v-model="smallValue"
662
+ label="Small Size"
663
+ size="small"
664
+ />
665
+ </div>
666
+
667
+ <div class="tw-max-w-sm">
668
+ <h3 class="tw-text-sm tw-font-medium tw-mb-2">With Tooltip</h3>
669
+ <VcSelect
670
+ v-bind="args"
671
+ v-model="tooltipValue"
672
+ label="With Tooltip"
673
+ tooltip="This is a helpful tooltip"
674
+ />
675
+ </div>
676
+
677
+ <div class="tw-max-w-sm">
678
+ <h3 class="tw-text-sm tw-font-medium tw-mb-2">With Hint</h3>
679
+ <VcSelect
680
+ v-bind="args"
681
+ v-model="hintValue"
682
+ label="With Hint"
683
+ hint="This is a helpful hint below the select"
684
+ />
685
+ </div>
686
+
687
+ <div class="tw-max-w-sm">
688
+ <h3 class="tw-text-sm tw-font-medium tw-mb-2">With Prefix & Suffix</h3>
689
+ <VcSelect
690
+ v-bind="args"
691
+ v-model="prefixSuffixValue"
692
+ label="With Prefix & Suffix"
693
+ prefix="$"
694
+ suffix="USD"
695
+ />
696
+ </div>
697
+ </div>
698
+ `,
699
+ }),
700
+ };
701
+
702
+ /**
703
+ * The component supports a wide range of slots to customize its appearance.
704
+ * This example demonstrates various slot customizations.
705
+ */
706
+ export const CustomizingWithSlots: Story = {
707
+ args: {
708
+ searchable: true,
709
+ multiple: true,
710
+ clearable: true,
711
+ },
712
+ render: (args) => ({
713
+ components: { VcSelect, VcIcon },
714
+ setup() {
715
+ const value = ref([]);
716
+
717
+ return { args, value };
718
+ },
719
+ template: `
720
+ <div class="tw-p-4 tw-max-w-sm">
721
+ <VcSelect
722
+ v-bind="args"
723
+ v-model="value"
724
+ label="Customized Select"
725
+ >
726
+ <!-- Customizing the appearance of selected items -->
727
+ <template #selected-item="{ opt }">
728
+ <div class="tw-flex tw-items-center">
729
+ <span class="tw-w-3 tw-h-3 tw-rounded-full tw-bg-blue-500 tw-mr-2"></span>
730
+ <strong class="tw-text-blue-700">{{ opt.title }}</strong>
731
+ </div>
732
+ </template>
733
+
734
+ <!-- Customizing option appearance in dropdown -->
735
+ <template #option="{ opt, selected }">
736
+ <div class="tw-flex tw-items-center tw-justify-between tw-w-full tw-px-1">
737
+ <div class="tw-flex tw-items-center">
738
+ <span class="tw-w-2 tw-h-2 tw-rounded-full tw-bg-gray-400 tw-mr-2"></span>
739
+ {{ opt.title }}
740
+ </div>
741
+ <VcIcon
742
+ v-if="selected"
743
+ icon="material-check"
744
+ class="tw-text-green-600"
745
+ size="s"
746
+ />
747
+ </div>
748
+ </template>
749
+
750
+ <!-- Adding content inside the field -->
751
+ <template #prepend-inner>
752
+ <VcIcon icon="material-search" class="tw-mr-2" size="s" />
753
+ </template>
754
+
755
+ <!-- Adding content outside the field -->
756
+ <template #append>
757
+ <button
758
+ class="tw-ml-2 tw-bg-blue-100 tw-text-blue-700 tw-px-2 tw-py-1 tw-rounded hover:tw-bg-blue-200"
759
+ @click="value = args.options.map(o => o.id)"
760
+ >
761
+ Select All
762
+ </button>
763
+ </template>
764
+
765
+ <!-- Custom "no options" message -->
766
+ <template #no-options>
767
+ <div class="tw-text-center tw-py-3 tw-text-gray-500">
768
+ <VcIcon icon="material-error" class="tw-mb-2" />
769
+ <p>No matching options found</p>
770
+ </div>
771
+ </template>
772
+
773
+ <!-- Custom hint -->
774
+ <template #hint>
775
+ <div class="tw-flex tw-items-center tw-text-blue-600">
776
+ <VcIcon icon="material-info" class="tw-mr-1" size="xs" />
777
+ <span>Select multiple options as needed</span>
778
+ </div>
779
+ </template>
780
+ </VcSelect>
781
+ </div>
782
+ `,
783
+ }),
784
+ };
785
+
786
+ /**
787
+ * You can completely override the control element with the control slot.
788
+ * This allows for creating custom triggers for the dropdown.
789
+ */
790
+ export const CustomControl: Story = {
791
+ args: {
792
+ clearable: true,
793
+ },
794
+ render: (args) => ({
795
+ components: { VcSelect, VcIcon },
796
+ setup() {
797
+ const value = ref(null);
798
+
799
+ return { args, value };
800
+ },
801
+ template: `
802
+ <div class="tw-p-4 tw-max-w-sm">
803
+ <VcSelect
804
+ v-bind="args"
805
+ v-model="value"
806
+ label="Custom Control"
807
+ >
808
+ <template #control="{ toggleHandler }">
809
+ <button
810
+ class="tw-w-full tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded-lg tw-px-4 tw-py-2 tw-flex tw-items-center tw-justify-between hover:tw-bg-blue-100"
811
+ @click="toggleHandler"
812
+ >
813
+ <div class="tw-flex tw-items-center">
814
+ <VcIcon icon="fas fa-list-ul" class="tw-mr-2" size="s" />
815
+ <span v-if="value">Option {{ value }} selected</span>
816
+ <span v-else class="tw-text-gray-500">Click to select an option</span>
817
+ </div>
818
+ <VcIcon icon="material-keyboard_arrow_down" size="s" />
819
+ </button>
820
+ </template>
821
+ </VcSelect>
822
+ </div>
823
+ `,
824
+ }),
825
+ };
826
+
827
+ /**
828
+ * Using primitive values (strings, numbers) as options instead of objects.
829
+ */
830
+ export const PrimitiveOptions: Story = {
831
+ args: {
832
+ options: ["Red", "Green", "Blue", "Yellow", "Purple"],
833
+ optionValue: undefined,
834
+ optionLabel: undefined,
835
+ clearable: true,
836
+ },
837
+ render: (args) => ({
838
+ components: { VcSelect },
839
+ setup() {
840
+ const value = ref(null);
841
+
842
+ return { args, value };
843
+ },
844
+ template: `
845
+ <div class="tw-p-4 tw-max-w-sm">
846
+ <VcSelect
847
+ v-bind="args"
848
+ v-model="value"
849
+ label="Colors"
850
+ />
851
+ <div class="tw-mt-4 tw-text-sm">
852
+ <p>Selected color: <code>{{ value }}</code></p>
853
+ </div>
854
+ </div>
855
+ `,
856
+ }),
857
+ };
858
+
859
+ /**
860
+ * The emitValue prop controls whether the v-model contains just the value or the entire option object.
861
+ */
862
+ export const EmitValueOptions: Story = {
863
+ render: (args) => ({
864
+ components: { VcSelect },
865
+ setup() {
866
+ const valueOnly = ref(null);
867
+ const objectValue = ref(null);
868
+
869
+ return { args, valueOnly, objectValue };
870
+ },
871
+ template: `
872
+ <div class="tw-p-4 tw-space-y-6">
873
+ <div class="tw-max-w-sm">
874
+ <h3 class="tw-text-sm tw-font-medium tw-mb-2">Emit Value Only (emitValue: true)</h3>
875
+ <VcSelect
876
+ v-bind="args"
877
+ v-model="valueOnly"
878
+ label="Value Only"
879
+ :emitValue="true"
880
+ />
881
+ <div class="tw-mt-1 tw-text-sm">
882
+ <p>Model: <code>{{ JSON.stringify(valueOnly) }}</code></p>
883
+ </div>
884
+ </div>
885
+
886
+ <div class="tw-max-w-sm">
887
+ <h3 class="tw-text-sm tw-font-medium tw-mb-2">Emit Full Object (emitValue: false)</h3>
888
+ <VcSelect
889
+ v-bind="args"
890
+ v-model="objectValue"
891
+ label="Object Value"
892
+ :emitValue="false"
893
+ />
894
+ <div class="tw-mt-1 tw-text-sm">
895
+ <p>Model: <code>{{ JSON.stringify(objectValue) }}</code></p>
896
+ </div>
897
+ </div>
898
+ </div>
899
+ `,
900
+ }),
901
+ };
902
+
903
+ /**
904
+ * Use custom functions to extract the value and label from option objects
905
+ */
906
+ export const CustomGetters: Story = {
907
+ args: {
908
+ options: [
909
+ { code: "US", name: "United States", population: 331000000 },
910
+ { code: "CA", name: "Canada", population: 38000000 },
911
+ { code: "MX", name: "Mexico", population: 126000000 },
912
+ { code: "BR", name: "Brazil", population: 212000000 },
913
+ { code: "FR", name: "France", population: 67000000 },
914
+ ],
915
+ label: "Countries",
916
+ clearable: true,
917
+ },
918
+ render: (args) => ({
919
+ components: { VcSelect },
920
+ setup() {
921
+ const value = ref(null);
922
+
923
+ // Custom getter functions instead of string properties
924
+ const getOptionValue = (option) => option.code;
925
+ const getOptionLabel = (option) => `${option.name} (${option.code})`;
926
+
927
+ return { args, value, getOptionValue, getOptionLabel };
928
+ },
929
+ template: `
930
+ <div class="tw-p-4 tw-max-w-sm">
931
+ <VcSelect
932
+ v-bind="args"
933
+ v-model="value"
934
+ :optionValue="getOptionValue"
935
+ :optionLabel="getOptionLabel"
936
+ />
937
+ <div class="tw-mt-4 tw-text-sm">
938
+ <p>Selected country code: <code>{{ value }}</code></p>
939
+ </div>
940
+ </div>
941
+ `,
942
+ }),
943
+ };
944
+
945
+ /**
946
+ * Detailed demonstration of the option slot, which allows custom rendering of each option in the dropdown.
947
+ * This is useful for creating rich dropdown items with icons, badges, or additional information.
948
+ */
949
+ export const CustomOptionSlot: Story = {
950
+ args: {
951
+ searchable: true,
952
+ clearable: true,
953
+ options: [
954
+ { id: 1, title: "Draft", color: "gray", icon: "fas fa-pencil-alt" },
955
+ { id: 2, title: "Published", color: "green", icon: "material-check_circle" },
956
+ { id: 3, title: "Archived", color: "amber", icon: "fas fa-archive" },
957
+ { id: 4, title: "Deleted", color: "red", icon: "material-delete" },
958
+ ],
959
+ },
960
+ render: (args) => ({
961
+ components: { VcSelect, VcIcon },
962
+ setup() {
963
+ const value = ref(null);
964
+
965
+ const getStatusColor = (color) => {
966
+ const colors = {
967
+ gray: "tw-bg-gray-200 tw-text-gray-800",
968
+ green: "tw-bg-green-100 tw-text-green-800",
969
+ amber: "tw-bg-amber-100 tw-text-amber-800",
970
+ red: "tw-bg-red-100 tw-text-red-800",
971
+ };
972
+ return colors[color] || colors.gray;
973
+ };
974
+
975
+ return { args, value, getStatusColor };
976
+ },
977
+ template: `
978
+ <div class="tw-p-4 tw-max-w-lg">
979
+ <h3 class="tw-text-lg tw-font-medium tw-mb-3">Custom Option Display</h3>
980
+ <VcSelect
981
+ v-bind="args"
982
+ v-model="value"
983
+ label="Select Status"
984
+ placeholder="Choose document status"
985
+ >
986
+ <template #option="{ opt, selected }">
987
+ <div class="tw-flex tw-items-center tw-justify-between tw-w-full tw-py-1">
988
+ <div class="tw-flex tw-items-center">
989
+ <div :class="['tw-flex tw-items-center tw-justify-center tw-w-8 tw-h-8 tw-rounded-full tw-mr-3', getStatusColor(opt.color)]">
990
+ <VcIcon :icon="opt.icon" size="s" />
991
+ </div>
992
+ <div>
993
+ <div class="tw-font-medium">{{ opt.title }}</div>
994
+ <div class="tw-text-xs tw-text-gray-500">Status ID: {{ opt.id }}</div>
995
+ </div>
996
+ </div>
997
+ <VcIcon
998
+ v-if="selected"
999
+ icon="material-check"
1000
+ class="tw-text-green-600"
1001
+ size="s"
1002
+ />
1003
+ </div>
1004
+ </template>
1005
+ </VcSelect>
1006
+
1007
+ <div class="tw-mt-4 tw-text-sm tw-bg-gray-50 tw-p-3 tw-rounded">
1008
+ <p class="tw-text-gray-700 tw-mb-2"><strong>Selected value:</strong> {{ value }}</p>
1009
+ <p class="tw-text-gray-500">The option slot above customizes each dropdown item with an icon, label, and description.</p>
1010
+ </div>
1011
+ </div>
1012
+ `,
1013
+ }),
1014
+ };
1015
+
1016
+ /**
1017
+ * Detailed demonstration of the selected-item slot, which allows custom rendering of
1018
+ * the selected values in the input field. This is particularly useful for multiple selection.
1019
+ */
1020
+ export const CustomSelectedItemSlot: Story = {
1021
+ args: {
1022
+ multiple: true,
1023
+ clearable: true,
1024
+ options: [
1025
+ { id: "red", title: "Red", hex: "#f87171" },
1026
+ { id: "blue", title: "Blue", hex: "#60a5fa" },
1027
+ { id: "green", title: "Green", hex: "#4ade80" },
1028
+ { id: "purple", title: "Purple", hex: "#c084fc" },
1029
+ { id: "yellow", title: "Yellow", hex: "#fbbf24" },
1030
+ { id: "pink", title: "Pink", hex: "#f472b6" },
1031
+ ],
1032
+ },
1033
+ render: (args) => ({
1034
+ components: { VcSelect, VcIcon },
1035
+ setup() {
1036
+ const value = ref([]);
1037
+
1038
+ return { args, value };
1039
+ },
1040
+ template: `
1041
+ <div class="tw-p-4 tw-max-w-lg">
1042
+ <h3 class="tw-text-lg tw-font-medium tw-mb-3">Custom Selected Item Display</h3>
1043
+ <VcSelect
1044
+ v-bind="args"
1045
+ v-model="value"
1046
+ label="Select Colors"
1047
+ placeholder="Choose your favorite colors"
1048
+ >
1049
+ <!-- Custom rendering of selected items -->
1050
+ <template #selected-item="{ opt, removeAtIndex, index }">
1051
+ <div
1052
+ class="tw-flex tw-items-center tw-px-2 tw-py-1 tw-rounded-full tw-mr-1"
1053
+ :style="{ backgroundColor: opt.hex + '33', color: opt.hex }"
1054
+ >
1055
+ <span
1056
+ class="tw-w-3 tw-h-3 tw-rounded-full tw-mr-1"
1057
+ :style="{ backgroundColor: opt.hex }"
1058
+ ></span>
1059
+ {{ opt.title }}
1060
+ <VcIcon
1061
+ icon="material-close"
1062
+ size="xs"
1063
+ class="tw-ml-1 tw-cursor-pointer hover:tw-opacity-80"
1064
+ @click.stop="removeAtIndex(index)"
1065
+ />
1066
+ </div>
1067
+ </template>
1068
+
1069
+ <!-- Custom rendering of dropdown options -->
1070
+ <template #option="{ opt, selected }">
1071
+ <div class="tw-flex tw-items-center tw-justify-between tw-w-full tw-py-1">
1072
+ <div class="tw-flex tw-items-center">
1073
+ <span
1074
+ class="tw-w-4 tw-h-4 tw-rounded tw-mr-2"
1075
+ :style="{ backgroundColor: opt.hex }"
1076
+ ></span>
1077
+ {{ opt.title }}
1078
+ <span class="tw-text-xs tw-ml-2 tw-text-gray-500">{{ opt.hex }}</span>
1079
+ </div>
1080
+ <VcIcon
1081
+ v-if="selected"
1082
+ icon="material-check"
1083
+ class="tw-text-green-600"
1084
+ size="s"
1085
+ />
1086
+ </div>
1087
+ </template>
1088
+ </VcSelect>
1089
+
1090
+ <div class="tw-mt-4 tw-text-sm tw-bg-gray-50 tw-p-3 tw-rounded">
1091
+ <p class="tw-text-gray-700 tw-mb-2"><strong>Selected values:</strong> {{ value.join(', ') }}</p>
1092
+ <p class="tw-text-gray-500">The selected-item slot above customizes how each selected color is displayed as a badge.</p>
1093
+ </div>
1094
+ </div>
1095
+ `,
1096
+ }),
1097
+ };
1098
+
1099
+ /**
1100
+ * Demonstration of using the prepend-inner and append-inner slots to add custom elements
1101
+ * inside the select input field. This is useful for adding icons, buttons or other interactive elements.
1102
+ */
1103
+ export const InnerSlots: Story = {
1104
+ args: {
1105
+ clearable: true,
1106
+ placeholder: "Search in categories",
1107
+ options: [
1108
+ { id: 1, title: "Electronics" },
1109
+ { id: 2, title: "Clothing" },
1110
+ { id: 3, title: "Home & Kitchen" },
1111
+ { id: 4, title: "Books" },
1112
+ { id: 5, title: "Sports & Outdoors" },
1113
+ ],
1114
+ },
1115
+ render: (args) => ({
1116
+ components: { VcSelect, VcIcon },
1117
+ setup() {
1118
+ const value = ref(null);
1119
+ const resetValue = () => {
1120
+ value.value = null;
1121
+ };
1122
+
1123
+ return { args, value, resetValue };
1124
+ },
1125
+ template: `
1126
+ <div class="tw-p-4 tw-max-w-lg">
1127
+ <h3 class="tw-text-lg tw-font-medium tw-mb-3">Inner Prepend & Append Slots</h3>
1128
+ <VcSelect
1129
+ v-bind="args"
1130
+ v-model="value"
1131
+ label="Category"
1132
+ searchable
1133
+ >
1134
+ <!-- Adding a search icon at the beginning of the field -->
1135
+ <template #prepend-inner>
1136
+ <div class="tw-flex tw-items-center tw-text-gray-500">
1137
+ <VcIcon icon="material-search" size="s" />
1138
+ </div>
1139
+ </template>
1140
+
1141
+ <!-- Adding a clear button at the end of the field -->
1142
+ <template #append-inner>
1143
+ <div
1144
+ v-if="value"
1145
+ class="tw-flex tw-items-center tw-text-gray-400 hover:tw-text-gray-700 tw-cursor-pointer"
1146
+ @click.stop="resetValue"
1147
+ >
1148
+ <VcIcon icon="material-cancel" size="s" />
1149
+ </div>
1150
+ </template>
1151
+ </VcSelect>
1152
+
1153
+ <div class="tw-mt-4 tw-text-sm tw-bg-gray-50 tw-p-3 tw-rounded">
1154
+ <p class="tw-text-gray-700 tw-mb-2"><strong>How it works:</strong></p>
1155
+ <ul class="tw-text-gray-500 tw-list-disc tw-pl-5 tw-space-y-1">
1156
+ <li>The <code>prepend-inner</code> slot adds a search icon inside the field at the beginning</li>
1157
+ <li>The <code>append-inner</code> slot adds a custom clear button that appears when a value is selected</li>
1158
+ </ul>
1159
+ </div>
1160
+ </div>
1161
+ `,
1162
+ }),
1163
+ };
1164
+
1165
+ /**
1166
+ * Demonstration of using the prepend and append slots to add elements outside the select field.
1167
+ * This is useful for creating compound controls or add-ons.
1168
+ */
1169
+ export const OuterSlots: Story = {
1170
+ args: {
1171
+ clearable: true,
1172
+ options: [
1173
+ { id: "USD", title: "US Dollar" },
1174
+ { id: "EUR", title: "Euro" },
1175
+ { id: "GBP", title: "British Pound" },
1176
+ { id: "JPY", title: "Japanese Yen" },
1177
+ { id: "CAD", title: "Canadian Dollar" },
1178
+ ],
1179
+ },
1180
+ render: (args) => ({
1181
+ components: { VcSelect, VcIcon },
1182
+ setup() {
1183
+ const value = ref(null);
1184
+ const amount = ref("");
1185
+
1186
+ return { args, value, amount };
1187
+ },
1188
+ template: `
1189
+ <div class="tw-p-4 tw-max-w-lg">
1190
+ <h3 class="tw-text-lg tw-font-medium tw-mb-3">Outer Prepend & Append Slots</h3>
1191
+ <div class="tw-mb-6">
1192
+ <VcSelect
1193
+ v-bind="args"
1194
+ v-model="value"
1195
+ label="Currency Converter"
1196
+ placeholder="Select currency"
1197
+ >
1198
+ <!-- Adding an input field before the select -->
1199
+ <template #prepend>
1200
+ <div class="tw-flex tw-items-center tw-border tw-border-r-0 tw-border-gray-300 tw-rounded-l tw-px-3 tw-h-[36px] tw-bg-white">
1201
+ <span class="tw-text-gray-500">$</span>
1202
+ </div>
1203
+ </template>
1204
+
1205
+ <!-- Adding a button after the select -->
1206
+ <template #append>
1207
+ <button class="tw-flex tw-items-center tw-bg-blue-500 tw-text-white tw-px-4 tw-h-[36px] tw-rounded-r hover:tw-bg-blue-600">
1208
+ <VcIcon icon="fas fa-exchange-alt" size="s" class="tw-mr-1" />
1209
+ Convert
1210
+ </button>
1211
+ </template>
1212
+ </VcSelect>
1213
+
1214
+ <div class="tw-mt-4 tw-text-sm tw-bg-gray-50 tw-p-3 tw-rounded">
1215
+ <p class="tw-text-gray-700 tw-mb-2"><strong>How it works:</strong></p>
1216
+ <ul class="tw-text-gray-500 tw-list-disc tw-pl-5 tw-space-y-1">
1217
+ <li>The <code>prepend</code> slot adds a currency symbol outside the field</li>
1218
+ <li>The <code>append</code> slot adds a conversion button after the field</li>
1219
+ <li>These outer slots help create a compound control with attached elements</li>
1220
+ </ul>
1221
+ </div>
1222
+ </div>
1223
+
1224
+ <h3 class="tw-text-lg tw-font-medium tw-mb-3">Search Input with Button</h3>
1225
+ <VcSelect
1226
+ v-bind="args"
1227
+ v-model="value"
1228
+ placeholder="Search products..."
1229
+ searchable
1230
+ >
1231
+ <!-- Adding a select-category label before the field -->
1232
+ <template #prepend>
1233
+ <div class="tw-px-3 tw-flex tw-items-center tw-bg-gray-100 tw-border tw-border-r-0 tw-border-gray-300 tw-rounded-l tw-h-[36px]">
1234
+ <span class="tw-text-gray-700 tw-text-sm">Category</span>
1235
+ </div>
1236
+ </template>
1237
+
1238
+ <!-- Adding a search button after the field -->
1239
+ <template #append>
1240
+ <button class="tw-px-4 tw-flex tw-items-center tw-bg-primary-500 tw-text-white tw-h-[36px] tw-rounded-r hover:tw-bg-primary-600">
1241
+ <VcIcon icon="material-search" size="s" class="tw-mr-1" />
1242
+ Search
1243
+ </button>
1244
+ </template>
1245
+ </VcSelect>
1246
+ </div>
1247
+ `,
1248
+ }),
1249
+ };
1250
+
1251
+ /**
1252
+ * Demonstration of using the error and hint slots to provide custom feedback messages.
1253
+ */
1254
+ export const CustomMessagingSlots: Story = {
1255
+ args: {
1256
+ label: "Product Category",
1257
+ clearable: true,
1258
+ options: [
1259
+ { id: 1, title: "Electronics" },
1260
+ { id: 2, title: "Clothing" },
1261
+ { id: 3, title: "Home & Kitchen" },
1262
+ { id: 4, title: "Books" },
1263
+ { id: 5, title: "Sports & Outdoors" },
1264
+ ],
1265
+ },
1266
+ render: (args) => ({
1267
+ components: { VcSelect, VcIcon },
1268
+ setup() {
1269
+ const value = ref(null);
1270
+ const showError = ref(false);
1271
+
1272
+ const toggleError = () => {
1273
+ showError.value = !showError.value;
1274
+ };
1275
+
1276
+ return { args, value, showError, toggleError };
1277
+ },
1278
+ template: `
1279
+ <div class="tw-p-4 tw-max-w-lg">
1280
+ <h3 class="tw-text-lg tw-font-medium tw-mb-3">Custom Error & Hint Messages</h3>
1281
+
1282
+ <div class="tw-mb-2">
1283
+ <button
1284
+ class="tw-px-3 tw-py-1 tw-text-sm tw-rounded tw-mr-2"
1285
+ :class="showError ? 'tw-bg-red-100 tw-text-red-700' : 'tw-bg-blue-100 tw-text-blue-700'"
1286
+ @click="toggleError"
1287
+ >
1288
+ {{ showError ? 'Show Hint' : 'Show Error' }}
1289
+ </button>
1290
+ </div>
1291
+
1292
+ <VcSelect
1293
+ v-bind="args"
1294
+ v-model="value"
1295
+ :error="showError"
1296
+ errorMessage="This is the standard error message"
1297
+ hint="This is the standard hint message"
1298
+ >
1299
+ <!-- Custom error message with icon and formatting -->
1300
+ <template #error>
1301
+ <div class="tw-flex tw-items-start tw-mt-1 tw-p-2 tw-bg-red-50 tw-border tw-border-red-200 tw-rounded">
1302
+ <VcIcon icon="fas fa-exclamation-triangle" class="tw-text-red-500 tw-mr-2 tw-mt-0.5" size="s" />
1303
+ <div>
1304
+ <p class="tw-text-red-700 tw-font-medium">Category selection required</p>
1305
+ <p class="tw-text-red-600 tw-text-xs">Please select a product category to continue with your submission.</p>
1306
+ </div>
1307
+ </div>
1308
+ </template>
1309
+
1310
+ <!-- Custom hint with additional help information -->
1311
+ <template #hint>
1312
+ <div class="tw-flex tw-items-start tw-mt-1 tw-p-2 tw-bg-blue-50 tw-border tw-border-blue-200 tw-rounded">
1313
+ <VcIcon icon="material-info" class="tw-text-blue-500 tw-mr-2 tw-mt-0.5" size="s" />
1314
+ <div>
1315
+ <p class="tw-text-blue-700 tw-font-medium">Choosing the right category</p>
1316
+ <p class="tw-text-blue-600 tw-text-xs">The category helps determine which department will process your request.</p>
1317
+ </div>
1318
+ </div>
1319
+ </template>
1320
+ </VcSelect>
1321
+
1322
+ <div class="tw-mt-4 tw-text-sm tw-bg-gray-50 tw-p-3 tw-rounded">
1323
+ <p class="tw-text-gray-700 tw-mb-2"><strong>How it works:</strong></p>
1324
+ <ul class="tw-text-gray-500 tw-list-disc tw-pl-5 tw-space-y-1">
1325
+ <li>The <code>error</code> slot replaces the standard error message with a custom component</li>
1326
+ <li>The <code>hint</code> slot replaces the standard hint with a more detailed explanation</li>
1327
+ <li>Use the toggle button to switch between error and hint states</li>
1328
+ </ul>
1329
+ </div>
1330
+ </div>
1331
+ `,
1332
+ }),
1333
+ };
1334
+
1335
+ /**
1336
+ * Demonstration of the no-options slot to customize the display when there are no options
1337
+ * available or when a search returns no results.
1338
+ */
1339
+ export const CustomNoOptionsSlot: Story = {
1340
+ args: {
1341
+ searchable: true,
1342
+ label: "Search Products",
1343
+ placeholder: "Type to search...",
1344
+ options: [
1345
+ { id: 1, title: "Laptop" },
1346
+ { id: 2, title: "Smartphone" },
1347
+ { id: 3, title: "Headphones" },
1348
+ { id: 4, title: "Keyboard" },
1349
+ { id: 5, title: "Monitor" },
1350
+ ],
1351
+ },
1352
+ render: (args) => ({
1353
+ components: { VcSelect, VcIcon },
1354
+ setup() {
1355
+ const value = ref(null);
1356
+
1357
+ return { args, value };
1358
+ },
1359
+ template: `
1360
+ <div class="tw-p-4 tw-max-w-lg">
1361
+ <h3 class="tw-text-lg tw-font-medium tw-mb-3">Custom "No Options" Display</h3>
1362
+ <VcSelect
1363
+ v-bind="args"
1364
+ v-model="value"
1365
+ >
1366
+ <template #no-options>
1367
+ <div class="tw-py-4 tw-px-3 tw-text-center">
1368
+ <VcIcon
1369
+ icon="material-search"
1370
+ class="tw-text-gray-400 tw-mb-2 tw-text-2xl"
1371
+ />
1372
+ <p class="tw-text-gray-600 tw-font-medium">No matching products found</p>
1373
+ <p class="tw-text-gray-500 tw-text-sm">Try different search terms or browse all categories</p>
1374
+ <button
1375
+ class="tw-mt-2 tw-px-3 tw-py-1 tw-bg-blue-100 tw-text-blue-700 tw-rounded tw-text-sm hover:tw-bg-blue-200"
1376
+ >
1377
+ Browse All Products
1378
+ </button>
1379
+ </div>
1380
+ </template>
1381
+ </VcSelect>
1382
+
1383
+ <div class="tw-mt-4 tw-text-sm tw-bg-gray-50 tw-p-3 tw-rounded">
1384
+ <p class="tw-text-gray-700 tw-mb-2"><strong>How to test:</strong></p>
1385
+ <p class="tw-text-gray-500">Type a search term that doesn't match any options (like "xyz") to see the custom no-options slot in action.</p>
1386
+ <p class="tw-mt-2 tw-text-gray-500">The custom no-options slot provides:
1387
+ <ul class="tw-list-disc tw-pl-5 tw-mt-1 tw-space-y-1">
1388
+ <li>A more helpful message to guide users</li>
1389
+ <li>Visual indication with an icon</li>
1390
+ <li>A call-to-action button for alternative options</li>
1391
+ </ul>
1392
+ </p>
1393
+ </div>
1394
+ </div>
1395
+ `,
1396
+ }),
1397
+ };
1398
+
1399
+ /**
1400
+ * Comprehensive example showing how to completely customize the VcSelect component
1401
+ * using multiple slots together to create a rich user interface.
1402
+ */
1403
+ export const ComprehensiveSlotExample: Story = {
1404
+ args: {
1405
+ searchable: true,
1406
+ multiple: true,
1407
+ clearable: true,
1408
+ options: [
1409
+ { id: 1, title: "Electronics", icon: "fas fa-microchip", level: "Enterprise", color: "#0078d7" },
1410
+ { id: 2, title: "Industrial", icon: "fas fa-industry", level: "Mid-Market", color: "#e07c24" },
1411
+ { id: 3, title: "Office Supplies", icon: "fas fa-paperclip", level: "SMB", color: "#009688" },
1412
+ { id: 4, title: "Medical Equipment", icon: "fas fa-medkit", level: "Enterprise", color: "#e91e63" },
1413
+ { id: 5, title: "Construction", icon: "fas fa-hard-hat", level: "Mid-Market", color: "#ffc107" },
1414
+ { id: 6, title: "Food & Beverage", icon: "fas fa-utensils", level: "SMB", color: "#8bc34a" },
1415
+ { id: 7, title: "Automotive", icon: "fas fa-car", level: "Mid-Market", color: "#3f51b5" },
1416
+ ],
1417
+ },
1418
+ render: (args) => ({
1419
+ components: { VcSelect, VcIcon },
1420
+ setup() {
1421
+ const value = ref([]);
1422
+
1423
+ const getLevelBadge = (level: string) => {
1424
+ const badges = {
1425
+ SMB: "tw-bg-green-100 tw-text-green-800",
1426
+ "Mid-Market": "tw-bg-blue-100 tw-text-blue-800",
1427
+ Enterprise: "tw-bg-purple-100 tw-text-purple-800",
1428
+ };
1429
+ return badges[level];
1430
+ };
1431
+
1432
+ const selectAll = () => {
1433
+ value.value = args.options.map((opt) => opt.id);
1434
+ };
1435
+
1436
+ const clearAll = () => {
1437
+ value.value = [];
1438
+ };
1439
+
1440
+ return { args, value, getLevelBadge, selectAll, clearAll };
1441
+ },
1442
+ template: `
1443
+ <div class="tw-p-4 tw-max-w-lg">
1444
+ <h3 class="tw-text-lg tw-font-medium tw-mb-3">Complete VcSelect Customization</h3>
1445
+
1446
+ <VcSelect
1447
+ v-bind="args"
1448
+ v-model="value"
1449
+ label="Product Categories"
1450
+ placeholder="Select product categories"
1451
+ hint="Choose multiple categories available in your marketplace"
1452
+ >
1453
+ <!-- Custom control wrapper -->
1454
+ <template #control="{ toggleHandler }">
1455
+ <div class="tw-border tw-border-gray-300 tw-rounded-lg tw-overflow-hidden tw-shadow-sm">
1456
+ <!-- Custom header -->
1457
+ <div class="tw-bg-gray-50 tw-px-3 tw-py-2 tw-border-b tw-border-gray-300 tw-flex tw-justify-between tw-items-center">
1458
+ <div class="tw-flex tw-items-center">
1459
+ <VcIcon icon="fas fa-tags" class="tw-text-gray-600 tw-mr-2" size="s" />
1460
+ <span class="tw-font-medium tw-text-gray-700">B2B Category Selector</span>
1461
+ </div>
1462
+ <div class="tw-flex tw-space-x-2">
1463
+ <button
1464
+ class="tw-px-2 tw-py-1 tw-text-xs tw-bg-blue-50 tw-text-blue-700 tw-rounded hover:tw-bg-blue-100"
1465
+ @click.stop="selectAll"
1466
+ >
1467
+ All
1468
+ </button>
1469
+ <button
1470
+ class="tw-px-2 tw-py-1 tw-text-xs tw-bg-gray-100 tw-text-gray-700 tw-rounded hover:tw-bg-gray-200"
1471
+ @click.stop="clearAll"
1472
+ >
1473
+ Clear
1474
+ </button>
1475
+ </div>
1476
+ </div>
1477
+
1478
+ <!-- Custom selection area -->
1479
+ <div
1480
+ class="tw-px-3 tw-py-2 tw-bg-white tw-min-h-[40px] tw-flex tw-flex-wrap tw-gap-2 tw-cursor-pointer"
1481
+ @click.stop="toggleHandler"
1482
+ >
1483
+ <template v-if="value.length === 0">
1484
+ <span class="tw-text-gray-400 tw-text-sm">Click to select categories...</span>
1485
+ </template>
1486
+ <template v-else>
1487
+ <div
1488
+ v-for="(id, index) in value"
1489
+ :key="id"
1490
+ class="tw-flex tw-items-center tw-px-2 tw-py-1 tw-rounded"
1491
+ :style="{ backgroundColor: args.options.find(o => o.id === id)?.color + '22' }"
1492
+ >
1493
+ <VcIcon
1494
+ :icon="args.options.find(o => o.id === id)?.icon"
1495
+ class="tw-mr-1"
1496
+ size="s"
1497
+ :style="{ color: args.options.find(o => o.id === id)?.color }"
1498
+ />
1499
+ <span class="tw-text-sm">{{ args.options.find(o => o.id === id)?.title }}</span>
1500
+ <VcIcon
1501
+ icon="material-close"
1502
+ size="xs"
1503
+ class="tw-ml-1 tw-cursor-pointer hover:tw-opacity-80"
1504
+ @click.stop="value.splice(index, 1)"
1505
+ />
1506
+ </div>
1507
+ </template>
1508
+ </div>
1509
+
1510
+ <!-- Custom footer -->
1511
+ <div class="tw-bg-gray-50 tw-px-3 tw-py-2 tw-border-t tw-border-gray-300 tw-flex tw-justify-between tw-items-center">
1512
+ <span class="tw-text-xs tw-text-gray-500">Selected: {{ value.length }} of {{ args.options.length }}</span>
1513
+ <VcIcon
1514
+ icon="material-keyboard_arrow_down"
1515
+ class="tw-text-gray-400"
1516
+ size="s"
1517
+ />
1518
+ </div>
1519
+ </div>
1520
+ </template>
1521
+
1522
+ <!-- Custom option rendering -->
1523
+ <template #option="{ opt, selected, toggleOption }">
1524
+ <div
1525
+ class="tw-flex tw-items-center tw-justify-between tw-w-full tw-p-2 tw-cursor-pointer hover:tw-bg-gray-50"
1526
+ @click.stop="toggleOption(opt)"
1527
+ >
1528
+ <div class="tw-flex tw-items-center">
1529
+ <div
1530
+ class="tw-w-8 tw-h-8 tw-flex tw-items-center tw-justify-center tw-rounded-full tw-mr-3"
1531
+ :style="{ backgroundColor: opt.color + '22', color: opt.color }"
1532
+ >
1533
+ <VcIcon :icon="opt.icon" />
1534
+ </div>
1535
+ <div>
1536
+ <div class="tw-font-medium">{{ opt.title }}</div>
1537
+ <div class="tw-flex tw-items-center tw-mt-1">
1538
+ <span
1539
+ :class="['tw-text-xs tw-px-2 tw-py-0.5 tw-rounded-full', getLevelBadge(opt.level)]"
1540
+ >
1541
+ {{ opt.level }}
1542
+ </span>
1543
+ </div>
1544
+ </div>
1545
+ </div>
1546
+ <div
1547
+ class="tw-w-5 tw-h-5 tw-rounded-sm tw-flex tw-items-center tw-justify-center"
1548
+ :class="selected ? 'tw-bg-blue-500' : 'tw-border tw-border-gray-300'"
1549
+ >
1550
+ <VcIcon
1551
+ v-if="selected"
1552
+ icon="material-check"
1553
+ class="tw-text-white"
1554
+ size="xs"
1555
+ />
1556
+ </div>
1557
+ </div>
1558
+ </template>
1559
+
1560
+ <!-- Custom no-options message -->
1561
+ <template #no-options>
1562
+ <div class="tw-p-4 tw-text-center tw-border-t tw-border-gray-200">
1563
+ <VcIcon icon="material-search" class="tw-text-gray-400 tw-mb-2" />
1564
+ <p class="tw-text-gray-600">No matching categories found</p>
1565
+ <p class="tw-text-xs tw-text-gray-500 tw-mt-1">Try searching for other product types or industries</p>
1566
+ </div>
1567
+ </template>
1568
+
1569
+ <!-- Custom hint -->
1570
+ <template #hint>
1571
+ <div class="tw-flex tw-items-start tw-mt-2">
1572
+ <VcIcon icon="fas fa-lightbulb" class="tw-text-yellow-500 tw-mr-2 tw-mt-0.5" size="s" />
1573
+ <div class="tw-text-sm tw-text-gray-600">
1574
+ Select the product categories available in your marketplace to help buyers find relevant offerings.
1575
+ </div>
1576
+ </div>
1577
+ </template>
1578
+ </VcSelect>
1579
+ </div>
1580
+ `,
1581
+ }),
1582
+ };