@vc-shell/framework 1.0.326 → 1.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/core/types/index.ts +4 -8
  3. package/dist/core/types/index.d.ts +5 -8
  4. package/dist/core/types/index.d.ts.map +1 -1
  5. package/dist/framework.js +231 -218
  6. package/dist/{index-YPa3sZmi.js → index-6afjoxl_.js} +1 -1
  7. package/dist/{index-B0gk_mcS.js → index-BbQdOYmi.js} +1 -1
  8. package/dist/{index-CJmhp9vS.js → index-BrkL9UJR.js} +1 -1
  9. package/dist/{index-CgCz4CyH.js → index-BrmiwSoL.js} +1 -1
  10. package/dist/{index-D2jOZZjY.js → index-C2fcXLd3.js} +1 -1
  11. package/dist/{index-F3Hq-uIf.js → index-CUGEM4hi.js} +1 -1
  12. package/dist/{index-DAPeO06N.js → index-D0rhsYYW.js} +1 -1
  13. package/dist/{index-cnzEckQv.js → index-D8jMD-EZ.js} +1 -1
  14. package/dist/{index-iKZHcZzW.js → index-DQP89JB7.js} +1 -1
  15. package/dist/{index-BzXuUqVu.js → index-DaD28rcu.js} +1 -1
  16. package/dist/{index-uJMg_eoD.js → index-Df8tA8qI.js} +1 -1
  17. package/dist/{index-sB8jPoQD.js → index-Dg25Tarq.js} +1 -1
  18. package/dist/{index-KsWKxMp0.js → index-DrL4GDih.js} +1 -1
  19. package/dist/{index-CimbhNJz.js → index-DrxadmGH.js} +1 -1
  20. package/dist/{index-52C01JSh.js → index-DulPT6l3.js} +1 -1
  21. package/dist/{index-C8ZFV-LP.js → index-Y1Vd-H3g.js} +34754 -34242
  22. package/dist/{index-Dr0Jm59E.js → index-lQO4lsVu.js} +1 -1
  23. package/dist/index.css +1 -1
  24. package/dist/index.d.ts +1 -0
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/locales/en.json +1 -0
  27. package/dist/shared/components/app-bar-button/app-bar-button.vue.d.ts.map +1 -1
  28. package/dist/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts.map +1 -1
  29. package/dist/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts.map +1 -1
  30. package/dist/shared/components/blade-navigation/components/vc-blade-view/vc-blade-view.d.ts +15 -1
  31. package/dist/shared/components/blade-navigation/components/vc-blade-view/vc-blade-view.d.ts.map +1 -1
  32. package/dist/shared/components/generic-dropdown/generic-dropdown.vue.d.ts +110 -0
  33. package/dist/shared/components/generic-dropdown/generic-dropdown.vue.d.ts.map +1 -0
  34. package/dist/shared/components/generic-dropdown/index.d.ts +2 -0
  35. package/dist/shared/components/generic-dropdown/index.d.ts.map +1 -0
  36. package/dist/shared/components/index.d.ts +2 -0
  37. package/dist/shared/components/index.d.ts.map +1 -1
  38. package/dist/shared/components/language-selector/language-selector.vue.d.ts.map +1 -1
  39. package/dist/shared/components/menu-item/index.d.ts +2 -0
  40. package/dist/shared/components/menu-item/index.d.ts.map +1 -0
  41. package/dist/shared/components/menu-item/menu-item.vue.d.ts +57 -0
  42. package/dist/shared/components/menu-item/menu-item.vue.d.ts.map +1 -0
  43. package/dist/shared/components/notification-dropdown/notification-dropdown.vue.d.ts.map +1 -1
  44. package/dist/shared/components/notification-template/index.d.ts +0 -6
  45. package/dist/shared/components/notification-template/index.d.ts.map +1 -1
  46. package/dist/shared/components/notification-template/notification-template.vue.d.ts +2 -2
  47. package/dist/shared/components/notification-template/notification-template.vue.d.ts.map +1 -1
  48. package/dist/shared/components/sidebar/sidebar.vue.d.ts +1 -0
  49. package/dist/shared/components/sidebar/sidebar.vue.d.ts.map +1 -1
  50. package/dist/shared/components/theme-selector/theme-selector.vue.d.ts.map +1 -1
  51. package/dist/shared/components/user-dropdown-button/_internal/user-actions.vue.d.ts +21 -0
  52. package/dist/shared/components/user-dropdown-button/_internal/user-actions.vue.d.ts.map +1 -0
  53. package/dist/shared/components/user-dropdown-button/_internal/user-info.vue.d.ts +17 -0
  54. package/dist/shared/components/user-dropdown-button/_internal/user-info.vue.d.ts.map +1 -0
  55. package/dist/shared/components/user-dropdown-button/_internal/user-sidebar.vue.d.ts +25 -0
  56. package/dist/shared/components/user-dropdown-button/_internal/user-sidebar.vue.d.ts.map +1 -0
  57. package/dist/shared/components/user-dropdown-button/composables/useUserActions.d.ts +3921 -0
  58. package/dist/shared/components/user-dropdown-button/composables/useUserActions.d.ts.map +1 -0
  59. package/dist/shared/components/user-dropdown-button/index.d.ts +5 -5
  60. package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts +4 -4
  61. package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts.map +1 -1
  62. package/dist/shared/modules/dynamic/components/fields/Button.d.ts +0 -6
  63. package/dist/shared/modules/dynamic/components/fields/Button.d.ts.map +1 -1
  64. package/dist/shared/modules/dynamic/components/fields/Card.d.ts +0 -6
  65. package/dist/shared/modules/dynamic/components/fields/Card.d.ts.map +1 -1
  66. package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts +0 -6
  67. package/dist/shared/modules/dynamic/components/fields/Checkbox.d.ts.map +1 -1
  68. package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts +0 -6
  69. package/dist/shared/modules/dynamic/components/fields/ContentField.d.ts.map +1 -1
  70. package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts +0 -6
  71. package/dist/shared/modules/dynamic/components/fields/CustomComponent.d.ts.map +1 -1
  72. package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts +0 -6
  73. package/dist/shared/modules/dynamic/components/fields/DynamicProperty.d.ts.map +1 -1
  74. package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts +0 -6
  75. package/dist/shared/modules/dynamic/components/fields/EditorField.d.ts.map +1 -1
  76. package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts +0 -6
  77. package/dist/shared/modules/dynamic/components/fields/Fieldset.d.ts.map +1 -1
  78. package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts +0 -6
  79. package/dist/shared/modules/dynamic/components/fields/GalleryField.d.ts.map +1 -1
  80. package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts +0 -6
  81. package/dist/shared/modules/dynamic/components/fields/ImageField.d.ts.map +1 -1
  82. package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts +0 -6
  83. package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts.map +1 -1
  84. package/dist/shared/modules/dynamic/components/fields/InputField.d.ts +0 -6
  85. package/dist/shared/modules/dynamic/components/fields/InputField.d.ts.map +1 -1
  86. package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts +0 -6
  87. package/dist/shared/modules/dynamic/components/fields/MultivalueField.d.ts.map +1 -1
  88. package/dist/shared/modules/dynamic/components/fields/RadioButtonGroup.d.ts +0 -6
  89. package/dist/shared/modules/dynamic/components/fields/RadioButtonGroup.d.ts.map +1 -1
  90. package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts +0 -6
  91. package/dist/shared/modules/dynamic/components/fields/RatingField.d.ts.map +1 -1
  92. package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts +0 -6
  93. package/dist/shared/modules/dynamic/components/fields/SelectField.d.ts.map +1 -1
  94. package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts +0 -6
  95. package/dist/shared/modules/dynamic/components/fields/StatusField.d.ts.map +1 -1
  96. package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts +0 -6
  97. package/dist/shared/modules/dynamic/components/fields/SwitchField.d.ts.map +1 -1
  98. package/dist/shared/modules/dynamic/components/fields/Table.d.ts +0 -6
  99. package/dist/shared/modules/dynamic/components/fields/Table.d.ts.map +1 -1
  100. package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts +0 -6
  101. package/dist/shared/modules/dynamic/components/fields/TextareaField.d.ts.map +1 -1
  102. package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts +0 -6
  103. package/dist/shared/modules/dynamic/components/fields/VideoField.d.ts.map +1 -1
  104. package/dist/shared/modules/dynamic/components/fields/props.d.ts +0 -6
  105. package/dist/shared/modules/dynamic/components/fields/props.d.ts.map +1 -1
  106. package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts +0 -18
  107. package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts.map +1 -1
  108. package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts +0 -18
  109. package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts.map +1 -1
  110. package/dist/shared/modules/dynamic/components/fields/storybook/Checkbox.stories.d.ts +0 -18
  111. package/dist/shared/modules/dynamic/components/fields/storybook/Checkbox.stories.d.ts.map +1 -1
  112. package/dist/shared/modules/dynamic/components/fields/storybook/ContentField.stories.d.ts +0 -18
  113. package/dist/shared/modules/dynamic/components/fields/storybook/ContentField.stories.d.ts.map +1 -1
  114. package/dist/shared/modules/dynamic/components/fields/storybook/EditorField.stories.d.ts +0 -18
  115. package/dist/shared/modules/dynamic/components/fields/storybook/EditorField.stories.d.ts.map +1 -1
  116. package/dist/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.d.ts +0 -18
  117. package/dist/shared/modules/dynamic/components/fields/storybook/Fieldset.stories.d.ts.map +1 -1
  118. package/dist/shared/modules/dynamic/components/fields/storybook/GalleryField.stories.d.ts +0 -18
  119. package/dist/shared/modules/dynamic/components/fields/storybook/GalleryField.stories.d.ts.map +1 -1
  120. package/dist/shared/modules/dynamic/components/fields/storybook/ImageField.stories.d.ts +0 -18
  121. package/dist/shared/modules/dynamic/components/fields/storybook/ImageField.stories.d.ts.map +1 -1
  122. package/dist/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.d.ts +0 -18
  123. package/dist/shared/modules/dynamic/components/fields/storybook/InputCurrency.stories.d.ts.map +1 -1
  124. package/dist/shared/modules/dynamic/components/fields/storybook/InputField.stories.d.ts +0 -18
  125. package/dist/shared/modules/dynamic/components/fields/storybook/InputField.stories.d.ts.map +1 -1
  126. package/dist/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.d.ts +0 -18
  127. package/dist/shared/modules/dynamic/components/fields/storybook/MultivalueField.stories.d.ts.map +1 -1
  128. package/dist/shared/modules/dynamic/components/fields/storybook/RadioButtonGroup.stories.d.ts +0 -18
  129. package/dist/shared/modules/dynamic/components/fields/storybook/RadioButtonGroup.stories.d.ts.map +1 -1
  130. package/dist/shared/modules/dynamic/components/fields/storybook/RatingField.stories.d.ts +0 -18
  131. package/dist/shared/modules/dynamic/components/fields/storybook/RatingField.stories.d.ts.map +1 -1
  132. package/dist/shared/modules/dynamic/components/fields/storybook/SelectField.stories.d.ts +0 -18
  133. package/dist/shared/modules/dynamic/components/fields/storybook/SelectField.stories.d.ts.map +1 -1
  134. package/dist/shared/modules/dynamic/components/fields/storybook/StatusField.stories.d.ts +0 -18
  135. package/dist/shared/modules/dynamic/components/fields/storybook/StatusField.stories.d.ts.map +1 -1
  136. package/dist/shared/modules/dynamic/components/fields/storybook/TextareaField.stories.d.ts +0 -18
  137. package/dist/shared/modules/dynamic/components/fields/storybook/TextareaField.stories.d.ts.map +1 -1
  138. package/dist/shared/modules/dynamic/components/fields/storybook/VideoField.stories.d.ts +0 -18
  139. package/dist/shared/modules/dynamic/components/fields/storybook/VideoField.stories.d.ts.map +1 -1
  140. package/dist/shared/modules/dynamic/components/fields/storybook/pages/DynamicRender.d.ts +0 -18
  141. package/dist/shared/modules/dynamic/components/fields/storybook/pages/DynamicRender.d.ts.map +1 -1
  142. package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts +0 -12
  143. package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts.map +1 -1
  144. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts +0 -12
  145. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts.map +1 -1
  146. package/dist/shared/pages/InvitePage/components/invite/index.d.ts +8 -8
  147. package/dist/shared/pages/ResetPasswordPage/components/reset-password/index.d.ts +8 -8
  148. package/dist/tailwind.config.d.ts +1 -1
  149. package/dist/tsconfig.tsbuildinfo +1 -1
  150. package/dist/ui/components/atoms/vc-button/vc-button.stories.d.ts +156 -156
  151. package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts +2 -1
  152. package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts.map +1 -1
  153. package/dist/ui/components/atoms/vc-icon/icons/AppWindowIcon.vue.d.ts +18 -0
  154. package/dist/ui/components/atoms/vc-icon/icons/AppWindowIcon.vue.d.ts.map +1 -0
  155. package/dist/ui/components/atoms/vc-icon/icons/ArrowLeftIcon.vue.d.ts +18 -0
  156. package/dist/ui/components/atoms/vc-icon/icons/ArrowLeftIcon.vue.d.ts.map +1 -0
  157. package/dist/ui/components/atoms/vc-icon/icons/ArrowRightIcon.vue.d.ts +18 -0
  158. package/dist/ui/components/atoms/vc-icon/icons/ArrowRightIcon.vue.d.ts.map +1 -0
  159. package/dist/ui/components/atoms/vc-icon/icons/BellIcon.vue.d.ts +18 -0
  160. package/dist/ui/components/atoms/vc-icon/icons/BellIcon.vue.d.ts.map +1 -0
  161. package/dist/ui/components/atoms/vc-icon/icons/CircleDotsIcon.vue.d.ts +18 -0
  162. package/dist/ui/components/atoms/vc-icon/icons/CircleDotsIcon.vue.d.ts.map +1 -0
  163. package/dist/ui/components/atoms/vc-icon/icons/CrossSignIcon.vue.d.ts +18 -0
  164. package/dist/ui/components/atoms/vc-icon/icons/CrossSignIcon.vue.d.ts.map +1 -0
  165. package/dist/ui/components/atoms/vc-icon/icons/LogoutIcon.vue.d.ts +18 -0
  166. package/dist/ui/components/atoms/vc-icon/icons/LogoutIcon.vue.d.ts.map +1 -0
  167. package/dist/ui/components/atoms/vc-icon/icons/MenuBurgerIcon.vue.d.ts +18 -0
  168. package/dist/ui/components/atoms/vc-icon/icons/MenuBurgerIcon.vue.d.ts.map +1 -0
  169. package/dist/ui/components/atoms/vc-icon/icons/MinusSignIcon.vue.d.ts +18 -0
  170. package/dist/ui/components/atoms/vc-icon/icons/MinusSignIcon.vue.d.ts.map +1 -0
  171. package/dist/ui/components/atoms/vc-icon/icons/PlusSignIcon.vue.d.ts +18 -0
  172. package/dist/ui/components/atoms/vc-icon/icons/PlusSignIcon.vue.d.ts.map +1 -0
  173. package/dist/ui/components/atoms/vc-icon/icons/SettingsBoltIcon.vue.d.ts +18 -0
  174. package/dist/ui/components/atoms/vc-icon/icons/SettingsBoltIcon.vue.d.ts.map +1 -0
  175. package/dist/ui/components/atoms/vc-icon/icons/index.d.ts +12 -0
  176. package/dist/ui/components/atoms/vc-icon/icons/index.d.ts.map +1 -0
  177. package/dist/ui/components/atoms/vc-icon/index.d.ts +1 -0
  178. package/dist/ui/components/atoms/vc-icon/index.d.ts.map +1 -1
  179. package/dist/ui/components/atoms/vc-icon/vc-icon.stories.d.ts +3 -3
  180. package/dist/ui/components/atoms/vc-icon/vc-icon.vue.d.ts +3 -2
  181. package/dist/ui/components/atoms/vc-icon/vc-icon.vue.d.ts.map +1 -1
  182. package/dist/ui/components/atoms/vc-status/vc-status.vue.d.ts.map +1 -1
  183. package/dist/ui/components/atoms/vc-tooltip/vc-tooltip.vue.d.ts +4 -0
  184. package/dist/ui/components/atoms/vc-tooltip/vc-tooltip.vue.d.ts.map +1 -1
  185. package/dist/ui/components/molecules/vc-editor/vc-editor.stories.d.ts +996 -0
  186. package/dist/ui/components/molecules/vc-editor/vc-editor.stories.d.ts.map +1 -1
  187. package/dist/ui/components/molecules/vc-editor/vc-editor.vue.d.ts +332 -0
  188. package/dist/ui/components/molecules/vc-editor/vc-editor.vue.d.ts.map +1 -1
  189. package/dist/ui/components/molecules/vc-pagination/vc-pagination.vue.d.ts.map +1 -1
  190. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts +3 -1
  191. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts.map +1 -1
  192. 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
  193. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue.d.ts.map +1 -1
  194. package/dist/ui/components/organisms/vc-app/composables/useToolbarSlots.d.ts +5 -0
  195. package/dist/ui/components/organisms/vc-app/composables/useToolbarSlots.d.ts.map +1 -0
  196. package/dist/ui/components/organisms/vc-app/vc-app.stories.d.ts +16 -106
  197. package/dist/ui/components/organisms/vc-app/vc-app.stories.d.ts.map +1 -1
  198. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts +16 -106
  199. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts.map +1 -1
  200. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue.d.ts +0 -2
  201. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue.d.ts.map +1 -1
  202. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue.d.ts +0 -3
  203. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue.d.ts.map +1 -1
  204. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue.d.ts +13 -2
  205. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue.d.ts.map +1 -1
  206. package/dist/ui/components/organisms/vc-blade/vc-blade.stories.d.ts +0 -16
  207. package/dist/ui/components/organisms/vc-blade/vc-blade.stories.d.ts.map +1 -1
  208. package/dist/ui/components/organisms/vc-blade/vc-blade.vue.d.ts +0 -2
  209. package/dist/ui/components/organisms/vc-blade/vc-blade.vue.d.ts.map +1 -1
  210. package/dist/ui/components/organisms/vc-table/_internal/vc-table-filter/vc-table-filter.vue.d.ts.map +1 -1
  211. package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-item/vc-table-mobile-item.vue.d.ts +3 -3
  212. package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-item/vc-table-mobile-item.vue.d.ts.map +1 -1
  213. package/dist/ui/components/organisms/vc-table/vc-table.stories.d.ts +30 -30
  214. package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts +6 -6
  215. package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
  216. package/package.json +9 -6
  217. package/shared/components/app-bar-button/app-bar-button.vue +62 -45
  218. package/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue +31 -134
  219. package/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue +8 -7
  220. package/shared/components/blade-navigation/components/vc-blade-view/vc-blade-view.ts +16 -4
  221. package/shared/components/change-password/change-password.vue +2 -1
  222. package/shared/components/generic-dropdown/generic-dropdown.vue +171 -0
  223. package/shared/components/generic-dropdown/index.ts +1 -0
  224. package/shared/components/index.ts +2 -0
  225. package/shared/components/language-selector/language-selector.vue +29 -64
  226. package/shared/components/menu-item/index.ts +1 -0
  227. package/shared/components/menu-item/menu-item.vue +111 -0
  228. package/shared/components/notification-dropdown/notification-dropdown.vue +21 -72
  229. package/shared/components/notification-template/notification-template.vue +23 -34
  230. package/shared/components/sidebar/sidebar.vue +16 -1
  231. package/shared/components/theme-selector/theme-selector.vue +34 -76
  232. package/shared/components/user-dropdown-button/_internal/user-actions.vue +68 -0
  233. package/shared/components/user-dropdown-button/_internal/user-info.vue +74 -0
  234. package/shared/components/user-dropdown-button/_internal/user-sidebar.vue +73 -0
  235. package/shared/components/user-dropdown-button/composables/useUserActions.ts +56 -0
  236. package/shared/components/user-dropdown-button/user-dropdown-button.vue +69 -271
  237. package/tailwind.config.ts +1 -1
  238. package/ui/components/atoms/vc-badge/vc-badge.vue +10 -9
  239. package/ui/components/atoms/vc-button/vc-button.vue +2 -2
  240. package/ui/components/atoms/vc-card/vc-card.vue +4 -7
  241. package/ui/components/atoms/vc-icon/icons/AppWindowIcon.vue +32 -0
  242. package/ui/components/atoms/vc-icon/icons/ArrowLeftIcon.vue +24 -0
  243. package/ui/components/atoms/vc-icon/icons/ArrowRightIcon.vue +24 -0
  244. package/ui/components/atoms/vc-icon/icons/BellIcon.vue +29 -0
  245. package/ui/components/atoms/vc-icon/icons/CircleDotsIcon.vue +41 -0
  246. package/ui/components/atoms/vc-icon/icons/CrossSignIcon.vue +24 -0
  247. package/ui/components/atoms/vc-icon/icons/LogoutIcon.vue +24 -0
  248. package/ui/components/atoms/vc-icon/icons/MenuBurgerIcon.vue +24 -0
  249. package/ui/components/atoms/vc-icon/icons/MinusSignIcon.vue +24 -0
  250. package/ui/components/atoms/vc-icon/icons/PlusSignIcon.vue +24 -0
  251. package/ui/components/atoms/vc-icon/icons/SettingsBoltIcon.vue +31 -0
  252. package/ui/components/atoms/vc-icon/icons/index.ts +11 -0
  253. package/ui/components/atoms/vc-icon/index.ts +1 -0
  254. package/ui/components/atoms/vc-icon/vc-icon.vue +33 -3
  255. package/ui/components/atoms/vc-status/vc-status.vue +17 -4
  256. package/ui/components/atoms/vc-tooltip/vc-tooltip.vue +22 -7
  257. package/ui/components/atoms/vc-widget/vc-widget.vue +31 -22
  258. package/ui/components/molecules/vc-pagination/vc-pagination.vue +9 -17
  259. package/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue +196 -33
  260. package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue +47 -47
  261. package/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue +5 -29
  262. package/ui/components/organisms/vc-app/composables/useToolbarSlots.ts +37 -0
  263. package/ui/components/organisms/vc-app/vc-app.vue +87 -70
  264. package/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue +17 -17
  265. package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue +9 -69
  266. package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue +199 -31
  267. package/ui/components/organisms/vc-blade/vc-blade.stories.ts +1 -1
  268. package/ui/components/organisms/vc-blade/vc-blade.vue +129 -38
  269. package/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue +2 -2
  270. package/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue +1 -1
  271. package/ui/components/organisms/vc-table/_internal/vc-table-filter/vc-table-filter.vue +34 -23
  272. package/ui/components/organisms/vc-table/vc-table.vue +44 -29
@@ -1,55 +1,37 @@
1
1
  <template>
2
- <AppBarButtonTemplate
3
- :title="$t('COMPONENTS.LANGUAGE_SELECTOR.TITLE')"
4
- position="bottom-end"
5
- >
6
- <template #button>
7
- <div class="vc-language-selector__button-wrap">
8
- <VcImage
9
- :src="currLocaleFlag"
10
- class="vc-language-selector__img vc-language-selector__img--button"
11
- empty-icon="fas fa-globe"
2
+ <div>
3
+ <SettingsMenuItem
4
+ :image="currLocaleFlag"
5
+ :empty-icon="'fas fa-globe'"
6
+ :title="$t('COMPONENTS.LANGUAGE_SELECTOR.TITLE')"
7
+ @click="opened = !opened"
8
+ />
9
+
10
+ <GenericDropdown
11
+ :opened="opened"
12
+ :items="languageItems"
13
+ :is-item-active="(lang) => lang.lang === $i18n.locale"
14
+ :on-item-click="(lang) => lang.hasOwnProperty('clickHandler') && lang.clickHandler(lang.lang)"
15
+ >
16
+ <template #item="{ item: lang, click }">
17
+ <SettingsMenuItem
18
+ class="tw-py-0"
19
+ :image="lang.flag"
20
+ :title="lang.title"
21
+ :is-active="lang.lang === $i18n.locale"
22
+ @click="click"
12
23
  />
13
- </div>
14
- </template>
15
- <template #dropdown-content="{ opened, toggle }">
16
- <Sidebar
17
- :is-expanded="$isMobile.value ? opened : false"
18
- position="right"
19
- render="mobile"
20
- @close="toggle"
21
- >
22
- <template #content>
23
- <div
24
- v-if="opened"
25
- class="vc-language-selector__dropdown"
26
- >
27
- <div
28
- v-for="(lang, i) in languageItems"
29
- :key="i"
30
- class="vc-language-selector__item"
31
- :class="{ 'vc-language-selector__item--active': lang.lang === $i18n.locale }"
32
- @click="lang.hasOwnProperty('clickHandler') && lang.clickHandler(lang.lang)"
33
- >
34
- <VcImage
35
- :src="lang.flag"
36
- class="vc-language-selector__img"
37
- />
38
- {{ lang.title }}
39
- </div>
40
- </div>
41
- </template>
42
- </Sidebar>
43
- </template>
44
- </AppBarButtonTemplate>
24
+ </template>
25
+ </GenericDropdown>
26
+ </div>
45
27
  </template>
46
28
 
47
29
  <script lang="ts" setup>
48
30
  import { useI18n } from "vue-i18n";
49
31
  import { useLanguages } from "../../../core/composables";
50
- import { AppBarButtonTemplate } from "./../app-bar-button";
51
- import { Sidebar } from "./../sidebar";
32
+ import { GenericDropdown } from "../generic-dropdown";
52
33
  import { watch, ref } from "vue";
34
+ import { SettingsMenuItem } from "../menu-item";
53
35
 
54
36
  interface ILanguage {
55
37
  lang: string;
@@ -61,6 +43,8 @@ interface ILanguage {
61
43
  const { availableLocales, getLocaleMessage, locale } = useI18n({ useScope: "global" });
62
44
  const { setLocale, getFlag } = useLanguages();
63
45
 
46
+ const opened = ref(false);
47
+
64
48
  const languageItems: ILanguage[] = availableLocales
65
49
  .map((locale: string) => ({
66
50
  lang: locale,
@@ -97,25 +81,6 @@ watch(
97
81
  }
98
82
 
99
83
  .vc-language-selector {
100
- &__dropdown {
101
- @apply tw-bg-[color:var(--language-selector-bg-color)] tw-min-w-max;
102
- }
103
-
104
- &__item {
105
- @apply tw-truncate tw-flex tw-items-center tw-p-3 tw-text-sm tw-text-[color:var(--language-selector-text-color)]
106
- tw-border-l tw-border-solid tw-border-l-[var(--language-selector-border-color)]
107
- tw-border-b tw-border-b-[var(--language-selector-border-color)] tw-w-full tw-cursor-pointer;
108
- transition: background-color 0.2s;
109
-
110
- &:hover {
111
- background-color: var(--language-selector-hover-bg-color);
112
- }
113
-
114
- &--active {
115
- @apply tw-bg-[color:var(--language-selector-hover-bg-color)];
116
- }
117
- }
118
-
119
84
  &__img {
120
85
  @apply tw-w-6 tw-h-6 tw-mr-2;
121
86
 
@@ -125,7 +90,7 @@ watch(
125
90
  }
126
91
 
127
92
  &__button-wrap {
128
- @apply tw-w-[var(--language-selector-button-width)] tw-flex tw-justify-center;
93
+ @apply tw-flex tw-justify-center;
129
94
  }
130
95
  }
131
96
  </style>
@@ -0,0 +1 @@
1
+ export { default as SettingsMenuItem } from "./menu-item.vue";
@@ -0,0 +1,111 @@
1
+ <template>
2
+ <div
3
+ class="vc-menu-item"
4
+ :class="{
5
+ 'vc-menu-item--active': isActive,
6
+ 'vc-menu-item--clickable': !disabled,
7
+ 'vc-menu-item--invisible': !isVisible,
8
+ }"
9
+ @click.stop="!disabled && $emit('click')"
10
+ >
11
+ <slot>
12
+ <div class="vc-menu-item__content">
13
+ <!-- Icon slot -->
14
+ <slot name="icon">
15
+ <VcIcon
16
+ v-if="icon"
17
+ :icon="icon"
18
+ size="l"
19
+ class="vc-menu-item__icon"
20
+ />
21
+ <VcImage
22
+ v-else-if="image"
23
+ :src="image"
24
+ class="vc-menu-item__image"
25
+ :empty-icon="emptyIcon"
26
+ />
27
+ </slot>
28
+
29
+ <!-- Title slot -->
30
+ <slot name="title">
31
+ <p class="vc-menu-item__title">{{ title }}</p>
32
+ </slot>
33
+
34
+ <!-- Additional content slot -->
35
+ <slot name="additional" />
36
+ </div>
37
+ </slot>
38
+ </div>
39
+ </template>
40
+
41
+ <script lang="ts" setup>
42
+ import { Component } from "vue";
43
+ import { VcIcon, VcImage } from "../../../ui/components";
44
+
45
+ withDefaults(
46
+ defineProps<{
47
+ title?: string;
48
+ icon?: string | Component;
49
+ image?: string;
50
+ emptyIcon?: string;
51
+ isActive?: boolean;
52
+ disabled?: boolean;
53
+ isVisible?: boolean;
54
+ }>(),
55
+ {
56
+ isVisible: true,
57
+ },
58
+ );
59
+
60
+ defineEmits<{
61
+ (e: "click"): void;
62
+ }>();
63
+ </script>
64
+
65
+ <style lang="scss">
66
+ .vc-menu-item {
67
+ @apply tw-p-3 tw-text-sm tw-text-[color:var(--menu-item-text-color,var(--user-dropdown-menu-text-color))]
68
+ tw-border-solid tw-border-b tw-border-b-[color:var(--menu-item-border-color,var(--user-dropdown-divider-color))]
69
+ tw-bg-[color:var(--menu-item-bg,var(--user-dropdown-menu-item-bg))] tw-flex tw-flex-row tw-items-center;
70
+
71
+ &--clickable {
72
+ @apply tw-cursor-pointer;
73
+
74
+ &:hover {
75
+ @apply tw-bg-[color:var(--menu-item-bg-hover,var(--user-dropdown-menu-item-bg-hover))];
76
+
77
+ .vc-menu-item__icon {
78
+ @apply tw-text-[color:var(--menu-item-icon-color-hover,var(--user-dropdown-button-color-hover))];
79
+ }
80
+ }
81
+ }
82
+
83
+ &--invisible {
84
+ @apply tw-hidden;
85
+ }
86
+
87
+ &--active {
88
+ @apply tw-bg-[color:var(--menu-item-bg-active,var(--user-dropdown-menu-item-bg-hover))];
89
+ }
90
+
91
+ &:last-of-type {
92
+ @apply tw-border-b-0;
93
+ }
94
+
95
+ &__content {
96
+ @apply tw-flex tw-items-center tw-w-full;
97
+ }
98
+
99
+ &__icon {
100
+ @apply tw-w-6 tw-mr-3 tw-text-[color:var(--menu-item-icon-color,var(--user-dropdown-button-color))];
101
+ }
102
+
103
+ &__image {
104
+ @apply tw-w-6 tw-h-6 tw-mr-3;
105
+ }
106
+
107
+ &__title {
108
+ @apply tw-flex-grow;
109
+ }
110
+ }
111
+ </style>
@@ -7,12 +7,12 @@
7
7
  <template #button>
8
8
  <div class="vc-notification-dropdown__button">
9
9
  <VcIcon
10
- icon="fas fa-bell"
11
- size="xl"
12
- ></VcIcon>
10
+ :icon="BellIcon"
11
+ size="l"
12
+ />
13
13
  <div
14
14
  :class="{
15
- 'vc-notification-dropdown__accent': isAccent,
15
+ 'vc-notification-dropdown__accent': hasUnreadNotifications,
16
16
  }"
17
17
  ></div>
18
18
  </div>
@@ -26,41 +26,19 @@
26
26
  @close="toggle"
27
27
  >
28
28
  <template #content>
29
- <div
30
- v-if="opened"
31
- :class="[
32
- 'vc-notification-dropdown__dropdown',
33
- { 'vc-notification-dropdown__dropdown--mobile': $isMobile.value },
34
- ]"
29
+ <GenericDropdown
30
+ :opened="opened"
31
+ :items="notifications"
32
+ :empty-text="t('COMPONENTS.NOTIFICATION_DROPDOWN.EMPTY')"
33
+ :on-item-click="() => toggle()"
35
34
  >
36
- <VcContainer
37
- :no-padding="true"
38
- @click.stop
39
- >
40
- <VcCol v-if="notifications && notifications.length">
41
- <div
42
- v-for="item in notifications"
43
- :key="`notification_${item.id}`"
44
- class="vc-notification-dropdown__item"
45
- :class="{
46
- 'vc-notification-dropdown__item--mobile': $isMobile.value,
47
- }"
48
- >
49
- <NotificationItem
50
- :notification="item"
51
- :templates="notificationTemplates || []"
52
- @on-click="toggle"
53
- />
54
- </div>
55
- </VcCol>
56
- <div
57
- v-else
58
- class="vc-notification-dropdown__empty"
59
- >
60
- {{ t("COMPONENTS.NOTIFICATION_DROPDOWN.EMPTY") }}
61
- </div>
62
- </VcContainer>
63
- </div>
35
+ <template #item="{ item }">
36
+ <NotificationItem
37
+ :notification="item"
38
+ :templates="notificationTemplates || []"
39
+ />
40
+ </template>
41
+ </GenericDropdown>
64
42
  </template>
65
43
  </Sidebar>
66
44
  </template>
@@ -70,19 +48,21 @@
70
48
  <script lang="ts" setup>
71
49
  import { inject, computed } from "vue";
72
50
  import NotificationItem from "./_internal/notification/notification.vue";
73
- import { VcCol, VcContainer, VcIcon } from "../../../ui/components";
51
+ import { VcIcon } from "../../../ui/components";
74
52
  import { useI18n } from "vue-i18n";
75
53
  import { NotificationTemplateConstructor } from "../../../core/types";
76
54
  import { useNotifications } from "../../../core/composables";
77
55
  import { AppBarButtonTemplate } from "./../app-bar-button";
78
56
  import { Sidebar } from "./../sidebar";
57
+ import { GenericDropdown } from "../generic-dropdown";
58
+ import { BellIcon } from "./../../../ui/components/atoms/vc-icon/icons";
79
59
 
80
60
  const notificationTemplates = inject<NotificationTemplateConstructor[]>("notificationTemplates");
81
61
 
82
62
  const { t } = useI18n({ useScope: "global" });
83
63
  const { notifications, markAllAsRead } = useNotifications();
84
64
 
85
- const isAccent = computed(() => {
65
+ const hasUnreadNotifications = computed(() => {
86
66
  return notifications.value.some((item) => item.isNew);
87
67
  });
88
68
 
@@ -95,48 +75,17 @@ function onOpen(state: boolean) {
95
75
 
96
76
  <style lang="scss">
97
77
  :root {
98
- --notification-dropdown-border-color: var(--additional-50);
99
- --notification-dropdown-bg-color: var(--additional-50);
100
78
  --notification-dropdown-accent-color: var(--danger-500);
101
79
  --notification-dropdown-button-width: var(--app-bar-button-width);
102
- --notification-dropdown-divider-color: var(--base-border-color, var(--neutrals-200));
103
80
  }
104
81
 
105
82
  .vc-notification-dropdown {
106
83
  &__accent {
107
- @apply tw-block tw-absolute tw-right-[12px] tw-top-[18px] tw-w-[7px] tw-h-[7px] tw-bg-[--notification-dropdown-accent-color] tw-rounded-full tw-z-[1];
108
- }
109
-
110
- &__dropdown {
111
- @apply tw-bg-[--notification-dropdown-bg-color] tw-rounded-b-[6px] tw-w-[439px]
112
- tw-max-h-[350px] tw-min-h-[50px] tw-overflow-hidden tw-flex tw-flex-col;
113
-
114
- &--mobile {
115
- @apply tw-max-h-full tw-w-full;
116
- display: flex !important;
117
- }
84
+ @apply tw-block tw-absolute tw-right-[12px] tw-top-[30px] tw-w-[5px] tw-h-[5px] tw-bg-[--notification-dropdown-accent-color] tw-rounded-full tw-z-[1];
118
85
  }
119
86
 
120
87
  &__button {
121
88
  @apply tw-w-[var(--notification-dropdown-button-width)] tw-h-full tw-flex tw-items-center tw-justify-center tw-relative;
122
89
  }
123
-
124
- &__item {
125
- @apply tw-py-[18px] tw-px-[15px] tw-border-b tw-border-solid
126
- tw-border-b-[var(--notification-dropdown-border-color)] tw-cursor-pointer;
127
- transition: background-color 0.2s;
128
-
129
- &:last-of-type {
130
- @apply tw-border-b-0;
131
- }
132
-
133
- &--mobile:not(:last-of-type) {
134
- @apply tw-border-solid tw-border-b tw-border-b-[color:var(--notification-dropdown-divider-color)];
135
- }
136
- }
137
-
138
- &__empty {
139
- @apply tw-flex tw-justify-center tw-items-center tw-p-4 tw-text-sm;
140
- }
141
90
  }
142
91
  </style>
@@ -6,34 +6,22 @@
6
6
  'vc-notification-template__container--mobile': $isMobile.value,
7
7
  }"
8
8
  >
9
- <div class="vc-notification-template__left">
10
- <div
11
- class="vc-notification-template__icon-container"
12
- :style="{ 'background-color': color }"
9
+ <div class="vc-notification-template__content">
10
+ <p
11
+ class="vc-notification-template__title"
12
+ :class="{ 'vc-notification-template__title--desktop': $isDesktop.value }"
13
13
  >
14
- <VcIcon
15
- :icon="icon"
16
- size="l"
17
- aria-label="Notification Icon"
18
- ></VcIcon>
19
- </div>
20
- <div class="vc-notification-template__content">
21
- <p
22
- class="vc-notification-template__title"
23
- :class="{ 'vc-notification-template__title--desktop': $isDesktop.value }"
24
- >
25
- {{ title }}
26
- </p>
27
- <slot></slot>
28
- </div>
29
- </div>
30
- <div
31
- class="vc-notification-template__right"
32
- :class="{ 'vc-notification-template__right--mobile': $isMobile.value }"
33
- >
14
+ {{ title }}
15
+ </p>
34
16
  <p class="vc-notification-template__time">
35
17
  {{ pushTime }}
36
18
  </p>
19
+ <div
20
+ v-if="$slots.default"
21
+ class="vc-notification-template__content-body"
22
+ >
23
+ <slot></slot>
24
+ </div>
37
25
  </div>
38
26
  </div>
39
27
  </div>
@@ -46,8 +34,8 @@ import moment from "moment";
46
34
  import { PushNotification } from "../../../core/api/platform";
47
35
 
48
36
  export interface Props {
49
- color: string;
50
- icon: string;
37
+ color?: string;
38
+ icon?: string;
51
39
  title: string;
52
40
  notification: PushNotification;
53
41
  }
@@ -65,7 +53,8 @@ const pushTime = computed(() => {
65
53
  :root {
66
54
  --notification-template-icon-color: var(--additional-50);
67
55
  --notification-template-text-color: var(--additional-950);
68
- --notification-template-time-color: var(--neutrals-600);
56
+ --notification-template-time-color: var(--neutrals-500);
57
+ --notification-template-content-body-color: var(--neutrals-700);
69
58
  }
70
59
 
71
60
  .vc-notification-template {
@@ -89,13 +78,9 @@ const pushTime = computed(() => {
89
78
  }
90
79
 
91
80
  &__title {
92
- @apply tw-text-[color:var(--notification-template-text-color)] tw-text-lg tw-leading-[19px]
93
- tw-font-bold tw-m-0 tw-mb-1;
81
+ @apply tw-text-[color:var(--notification-template-text-color)] tw-text-xs tw-leading-[19px]
82
+ tw-font-bold tw-m-0 tw-text-wrap;
94
83
  word-break: break-word;
95
-
96
- &--desktop {
97
- @apply tw-mr-4;
98
- }
99
84
  }
100
85
 
101
86
  &__right {
@@ -106,8 +91,12 @@ const pushTime = computed(() => {
106
91
  }
107
92
  }
108
93
 
94
+ &__content-body {
95
+ @apply tw-text-xs tw-text-[color:var(--notification-template-content-body-color)] tw-m-0 tw-text-wrap;
96
+ }
97
+
109
98
  &__time {
110
- @apply tw-text-sm tw-text-[color:var(--notification-template-time-color)] tw-m-0;
99
+ @apply tw-text-xxs tw-text-[color:var(--notification-template-time-color)] tw-m-0 tw-mb-2;
111
100
  }
112
101
  }
113
102
  </style>
@@ -16,6 +16,7 @@
16
16
  'sidebar__dropdown--always': render === 'always',
17
17
  'sidebar__dropdown--left': position === 'left',
18
18
  'sidebar__dropdown--right': position === 'right',
19
+ 'sidebar__dropdown--title': title,
19
20
  },
20
21
  ]"
21
22
  >
@@ -42,6 +43,7 @@ export interface Props {
42
43
  position?: "left" | "right";
43
44
  render: "always" | "mobile" | "desktop";
44
45
  isExpanded: boolean;
46
+ title?: string;
45
47
  }
46
48
 
47
49
  export interface Emits {
@@ -50,12 +52,13 @@ export interface Emits {
50
52
 
51
53
  const emit = defineEmits<Emits>();
52
54
 
53
- withDefaults(defineProps<Props>(), {
55
+ const props = withDefaults(defineProps<Props>(), {
54
56
  position: "right",
55
57
  render: "always",
56
58
  });
57
59
 
58
60
  const header = h("div", { class: "sidebar__header" }, [
61
+ props.title ? h("h3", { class: "sidebar__title" }, props.title) : null,
59
62
  h(VcIcon, { icon: "fas fa-times", size: "xl", onClick: () => emit("close") }),
60
63
  ]);
61
64
  </script>
@@ -64,6 +67,7 @@ const header = h("div", { class: "sidebar__header" }, [
64
67
  :root {
65
68
  --sidebar-mobile-bg-color: var(--neutral-500);
66
69
  --sidebar-dropdown-mobile-icon-color: var(--primary-500);
70
+ --sidebar-title-color: var(--base-text-color, var(--additional-950));
67
71
  }
68
72
 
69
73
  .sidebar {
@@ -73,10 +77,15 @@ const header = h("div", { class: "sidebar__header" }, [
73
77
  @apply tw-fixed tw-left-0 tw-top-0 tw-right-0 tw-bottom-0 tw-z-[10000]
74
78
  tw-bg-[--sidebar-mobile-bg-color] tw-backdrop-blur-[3px];
75
79
  }
80
+
76
81
  &__header {
77
82
  @apply tw-text-[color:var(--sidebar-dropdown-mobile-icon-color)] tw-flex tw-justify-end tw-items-center tw-p-4 tw-cursor-pointer;
78
83
  }
79
84
 
85
+ &__title {
86
+ @apply tw-text-[color:var(--sidebar-title-color)] tw-text-lg tw-font-bold;
87
+ }
88
+
80
89
  &__dropdown {
81
90
  @apply tw-absolute tw-top-[var(--app-bar-button-height)] tw-bg-[color:var(--app-bar-button-bg-color)] tw-z-[10000] tw-flex tw-flex-col;
82
91
  box-shadow: var(--app-bar-button-shadow);
@@ -95,6 +104,12 @@ const header = h("div", { class: "sidebar__header" }, [
95
104
  &--right {
96
105
  @apply tw-right-0 tw-left-auto;
97
106
  }
107
+
108
+ &--title {
109
+ .sidebar__header {
110
+ @apply tw-justify-between #{!important};
111
+ }
112
+ }
98
113
  }
99
114
  }
100
115
  </style>
@@ -1,55 +1,44 @@
1
1
  <template>
2
- <AppBarButtonTemplate
3
- icon="fas fa-palette"
4
- :title="$t('COMPONENTS.THEME_SELECTOR.THEME_SELECTOR')"
5
- position="bottom-end"
6
- >
7
- <template #dropdown-content="{ opened, toggle }">
8
- <Sidebar
9
- :is-expanded="$isMobile.value ? opened : false"
10
- position="right"
11
- render="mobile"
12
- @close="toggle"
13
- >
14
- <template #content>
15
- <div
16
- v-if="opened"
17
- class="vc-theme-selector__dropdown"
18
- :class="{
19
- 'vc-theme-selector__dropdown--mobile': $isMobile.value,
20
- }"
21
- >
22
- <div
23
- v-for="(theme, i) in themes"
24
- :key="i"
25
- class="vc-theme-selector__item"
26
- :class="{ 'vc-theme-selector__item--active': theme === current }"
27
- @click="
28
- () => {
29
- setTheme(theme);
30
- toggle();
31
- }
32
- "
33
- >
34
- {{ themeText(theme) }}
35
- </div>
36
- </div>
37
- </template>
38
- </Sidebar>
39
- </template>
40
- </AppBarButtonTemplate>
2
+ <div>
3
+ <SettingsMenuItem
4
+ icon="fas fa-palette"
5
+ :title="$t('COMPONENTS.THEME_SELECTOR.THEME_SELECTOR')"
6
+ @click="opened = !opened"
7
+ />
8
+
9
+ <GenericDropdown
10
+ :opened="opened"
11
+ :items="themes"
12
+ :is-item-active="(theme) => theme === current"
13
+ :on-item-click="handleThemeSelect"
14
+ >
15
+ <template #item="{ item: theme, click }">
16
+ <SettingsMenuItem
17
+ class="tw-py-0"
18
+ :title="_.capitalize(theme)"
19
+ :is-active="theme === current"
20
+ @click="click"
21
+ />
22
+ </template>
23
+ </GenericDropdown>
24
+ </div>
41
25
  </template>
42
26
 
43
27
  <script lang="ts" setup>
44
- import { AppBarButtonTemplate } from "./../app-bar-button";
45
- import { Sidebar } from "./../sidebar";
46
- import { useTheme } from "./../../../core/composables/useTheme";
47
- import { watch, computed } from "vue";
48
- import { notification } from "./../";
28
+ import { GenericDropdown } from "../generic-dropdown";
29
+ import { useTheme } from "../../../core/composables/useTheme";
30
+ import { ref, watch } from "vue";
31
+ import { notification } from "..";
49
32
  import * as _ from "lodash-es";
50
- import { createUnrefFn } from "@vueuse/core";
33
+ import { SettingsMenuItem } from "../menu-item";
51
34
 
52
35
  const { current, themes, setTheme } = useTheme();
36
+ const opened = ref(false);
37
+
38
+ const handleThemeSelect = (theme: string) => {
39
+ setTheme(theme);
40
+ opened.value = false;
41
+ };
53
42
 
54
43
  watch(
55
44
  () => current.value,
@@ -58,12 +47,6 @@ watch(
58
47
  },
59
48
  { deep: true },
60
49
  );
61
-
62
- const themeText = computed(() => {
63
- return createUnrefFn((theme: string) => {
64
- return _.capitalize(theme);
65
- });
66
- });
67
50
  </script>
68
51
 
69
52
  <style lang="scss">
@@ -73,29 +56,4 @@ const themeText = computed(() => {
73
56
  --theme-selector-border-color: var(--app-bar-divider-color);
74
57
  --theme-selector-hover-bg-color: var(--primary-50);
75
58
  }
76
-
77
- .vc-theme-selector {
78
- &__dropdown {
79
- @apply tw-bg-[color:var(--theme-selector-bg-color)] tw-min-w-20 tw-max-w-max;
80
-
81
- &--mobile {
82
- @apply tw-min-w-full tw-max-w-full;
83
- }
84
- }
85
-
86
- &__item {
87
- @apply tw-truncate tw-p-3 tw-text-sm tw-text-[color:var(--theme-selector-text-color)]
88
- tw-border-l tw-border-solid tw-border-l-[var(--theme-selector-border-color)]
89
- tw-border-b tw-border-b-[var(--theme-selector-border-color)] tw-w-full tw-cursor-pointer;
90
- transition: background-color 0.2s;
91
-
92
- &:hover {
93
- background-color: var(--theme-selector-hover-bg-color);
94
- }
95
-
96
- &--active {
97
- @apply tw-bg-[color:var(--theme-selector-hover-bg-color)];
98
- }
99
- }
100
- }
101
59
  </style>