@vc-shell/framework 1.0.128 → 1.0.130

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 (331) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/core/api/platform.ts +514 -92
  3. package/core/composables/index.ts +2 -1
  4. package/core/composables/useApiClient/index.ts +1 -7
  5. package/core/composables/useAssets/index.ts +0 -6
  6. package/core/composables/useBeforeUnload/index.ts +20 -0
  7. package/core/composables/useMenuService/index.ts +96 -0
  8. package/core/composables/useNotifications/index.ts +29 -40
  9. package/core/composables/useSettings/index.ts +23 -29
  10. package/core/composables/useUser/index.ts +61 -132
  11. package/core/directives/loading/styles.css +5 -5
  12. package/core/interceptors/index.ts +75 -0
  13. package/core/plugins/i18n/index.ts +1 -0
  14. package/core/plugins/modularity/index.ts +63 -20
  15. package/core/plugins/moment/moment.ts +2 -2
  16. package/core/plugins/signalR/index.ts +23 -3
  17. package/core/types/index.ts +18 -35
  18. package/core/utilities/kebabToCamel.ts +1 -1
  19. package/dist/core/api/platform.d.ts +125 -87
  20. package/dist/core/api/platform.d.ts.map +1 -1
  21. package/dist/core/composables/index.d.ts +2 -1
  22. package/dist/core/composables/index.d.ts.map +1 -1
  23. package/dist/core/composables/useApiClient/index.d.ts.map +1 -1
  24. package/dist/core/composables/useAssets/index.d.ts.map +1 -1
  25. package/dist/core/composables/useBeforeUnload/index.d.ts +5 -0
  26. package/dist/core/composables/useBeforeUnload/index.d.ts.map +1 -0
  27. package/dist/core/composables/useMenuService/index.d.ts +16 -0
  28. package/dist/core/composables/useMenuService/index.d.ts.map +1 -0
  29. package/dist/core/composables/useNotifications/index.d.ts.map +1 -1
  30. package/dist/core/composables/useSettings/index.d.ts +2 -2
  31. package/dist/core/composables/useSettings/index.d.ts.map +1 -1
  32. package/dist/core/composables/useUser/index.d.ts +8 -6
  33. package/dist/core/composables/useUser/index.d.ts.map +1 -1
  34. package/dist/core/interceptors/index.d.ts +3 -0
  35. package/dist/core/interceptors/index.d.ts.map +1 -0
  36. package/dist/core/plugins/i18n/index.d.ts.map +1 -1
  37. package/dist/core/plugins/modularity/index.d.ts +1 -1
  38. package/dist/core/plugins/modularity/index.d.ts.map +1 -1
  39. package/dist/core/plugins/moment/moment.d.ts.map +1 -1
  40. package/dist/core/plugins/signalR/index.d.ts.map +1 -1
  41. package/dist/core/types/index.d.ts +16 -29
  42. package/dist/core/types/index.d.ts.map +1 -1
  43. package/dist/{framework.mjs → framework.js} +32147 -32235
  44. package/dist/index.css +1 -1
  45. package/dist/index.d.ts +5 -2
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/shared/components/app-switcher/components/vc-app-switcher/index.d.ts +1 -19
  48. package/dist/shared/components/app-switcher/components/vc-app-switcher/index.d.ts.map +1 -1
  49. package/dist/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts +3 -0
  50. package/dist/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts.map +1 -1
  51. package/dist/shared/components/blade-navigation/components/vc-blade-navigation/index.d.ts +1 -70
  52. package/dist/shared/components/blade-navigation/components/vc-blade-navigation/index.d.ts.map +1 -1
  53. package/dist/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts +1 -82
  54. package/dist/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts.map +1 -1
  55. package/dist/shared/components/blade-navigation/components/vc-blade-view/vc-blade-view.d.ts +28 -0
  56. package/dist/shared/components/blade-navigation/components/vc-blade-view/vc-blade-view.d.ts.map +1 -0
  57. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/index.d.ts +11 -27
  58. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/index.d.ts.map +1 -1
  59. package/dist/shared/components/blade-navigation/injectionKeys.d.ts +4 -0
  60. package/dist/shared/components/blade-navigation/injectionKeys.d.ts.map +1 -0
  61. package/dist/shared/components/blade-navigation/plugin.d.ts +4 -1
  62. package/dist/shared/components/blade-navigation/plugin.d.ts.map +1 -1
  63. package/dist/shared/components/blade-navigation/types/index.d.ts +48 -35
  64. package/dist/shared/components/blade-navigation/types/index.d.ts.map +1 -1
  65. package/dist/shared/components/error-interceptor/index.d.ts +33 -67
  66. package/dist/shared/components/error-interceptor/index.d.ts.map +1 -1
  67. package/dist/shared/components/index.d.ts +2 -0
  68. package/dist/shared/components/index.d.ts.map +1 -1
  69. package/dist/shared/components/language-selector/index.d.ts +1 -49
  70. package/dist/shared/components/language-selector/index.d.ts.map +1 -1
  71. package/dist/shared/components/language-selector/language-selector.vue.d.ts +1 -40
  72. package/dist/shared/components/language-selector/language-selector.vue.d.ts.map +1 -1
  73. package/dist/{ui/components/organisms/vc-notification-dropdown → shared/components/notification-dropdown}/_internal/notification/notification.vue.d.ts +2 -2
  74. package/dist/shared/components/notification-dropdown/_internal/notification/notification.vue.d.ts.map +1 -0
  75. package/dist/shared/components/notification-dropdown/index.d.ts +7 -0
  76. package/dist/shared/components/notification-dropdown/index.d.ts.map +1 -0
  77. package/dist/shared/components/notification-dropdown/notification-dropdown.vue.d.ts +3 -0
  78. package/dist/shared/components/notification-dropdown/notification-dropdown.vue.d.ts.map +1 -0
  79. package/dist/shared/components/notification-template/index.d.ts +91 -0
  80. package/dist/shared/components/notification-template/index.d.ts.map +1 -0
  81. package/dist/{ui/components/organisms/vc-notification-template/vc-notification-template.vue.d.ts → shared/components/notification-template/notification-template.vue.d.ts} +2 -2
  82. package/dist/shared/components/notification-template/notification-template.vue.d.ts.map +1 -0
  83. package/dist/shared/components/notifications/components/notification-container/index.d.ts +1 -1
  84. package/dist/shared/components/notifications/components/notification-container/index.d.ts.map +1 -1
  85. package/dist/shared/components/popup-handler/composables/usePopup/index.d.ts.map +1 -1
  86. package/dist/shared/components/user-dropdown-button/index.d.ts +10 -16
  87. package/dist/shared/components/user-dropdown-button/index.d.ts.map +1 -1
  88. package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts +7 -4
  89. package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts.map +1 -1
  90. package/dist/shared/index.d.ts +4 -1
  91. package/dist/shared/index.d.ts.map +1 -1
  92. package/dist/shared/modules/assets/components/assets-details/assets-details.vue.d.ts +3 -0
  93. package/dist/shared/modules/assets/components/assets-details/assets-details.vue.d.ts.map +1 -1
  94. package/dist/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts +3 -0
  95. package/dist/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts.map +1 -1
  96. package/dist/shared/modules/dynamic/components/fields/InputCurrency.d.ts.map +1 -1
  97. package/dist/shared/modules/dynamic/composables/useFilterBuilder/index.d.ts.map +1 -1
  98. package/dist/shared/modules/dynamic/factories/base/useDetailsFactory.d.ts.map +1 -1
  99. package/dist/shared/modules/dynamic/factories/types/index.d.ts +3 -1
  100. package/dist/shared/modules/dynamic/factories/types/index.d.ts.map +1 -1
  101. package/dist/shared/modules/dynamic/index.d.ts +1 -3
  102. package/dist/shared/modules/dynamic/index.d.ts.map +1 -1
  103. package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts +12 -10
  104. package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts.map +1 -1
  105. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts +5 -2
  106. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts.map +1 -1
  107. package/dist/shared/modules/dynamic/types/index.d.ts +16 -1
  108. package/dist/shared/modules/dynamic/types/index.d.ts.map +1 -1
  109. package/dist/shared/pages/InvitePage/components/invite/Invite.vue.d.ts.map +1 -1
  110. package/dist/shared/pages/LoginPage/components/login/Login.vue.d.ts.map +1 -1
  111. package/dist/shared/pages/ResetPasswordPage/components/reset-password/ResetPassword.vue.d.ts.map +1 -1
  112. package/dist/shared/utilities/vueUtils.d.ts.map +1 -1
  113. package/dist/tailwind.config.d.ts +56 -0
  114. package/dist/tailwind.config.d.ts.map +1 -0
  115. package/dist/tsconfig.tsbuildinfo +1 -1
  116. package/dist/ui/components/atoms/vc-badge/index.d.ts +32 -67
  117. package/dist/ui/components/atoms/vc-badge/index.d.ts.map +1 -1
  118. package/dist/ui/components/atoms/vc-badge/vc-badge.vue.d.ts.map +1 -1
  119. package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts +6 -1
  120. package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts.map +1 -1
  121. package/dist/ui/components/atoms/vc-card/index.d.ts +66 -102
  122. package/dist/ui/components/atoms/vc-card/index.d.ts.map +1 -1
  123. package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts +7 -0
  124. package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts.map +1 -0
  125. package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts +7 -1
  126. package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts.map +1 -1
  127. package/dist/ui/components/atoms/vc-checkbox/index.d.ts +91 -129
  128. package/dist/ui/components/atoms/vc-checkbox/index.d.ts.map +1 -1
  129. package/dist/ui/components/atoms/vc-checkbox/vc-checkbox.vue.d.ts +7 -1
  130. package/dist/ui/components/atoms/vc-checkbox/vc-checkbox.vue.d.ts.map +1 -1
  131. package/dist/ui/components/atoms/vc-col/vc-col.vue.d.ts +6 -1
  132. package/dist/ui/components/atoms/vc-col/vc-col.vue.d.ts.map +1 -1
  133. package/dist/ui/components/atoms/vc-container/index.d.ts +36 -71
  134. package/dist/ui/components/atoms/vc-container/index.d.ts.map +1 -1
  135. package/dist/ui/components/atoms/vc-container/vc-container.vue.d.ts.map +1 -1
  136. package/dist/ui/components/atoms/vc-hint/index.d.ts +8 -38
  137. package/dist/ui/components/atoms/vc-hint/index.d.ts.map +1 -1
  138. package/dist/ui/components/atoms/vc-hint/vc-hint.vue.d.ts.map +1 -1
  139. package/dist/ui/components/atoms/vc-icon/vc-icon.vue.d.ts +3 -0
  140. package/dist/ui/components/atoms/vc-icon/vc-icon.vue.d.ts.map +1 -1
  141. package/dist/ui/components/atoms/vc-image/vc-image.vue.d.ts +3 -0
  142. package/dist/ui/components/atoms/vc-image/vc-image.vue.d.ts.map +1 -1
  143. package/dist/ui/components/atoms/vc-info-row/vc-info-row.vue.d.ts +3 -0
  144. package/dist/ui/components/atoms/vc-info-row/vc-info-row.vue.d.ts.map +1 -1
  145. package/dist/ui/components/atoms/vc-label/index.d.ts +42 -74
  146. package/dist/ui/components/atoms/vc-label/index.d.ts.map +1 -1
  147. package/dist/ui/components/atoms/vc-label/vc-label.vue.d.ts +7 -1
  148. package/dist/ui/components/atoms/vc-label/vc-label.vue.d.ts.map +1 -1
  149. package/dist/ui/components/atoms/vc-link/index.d.ts +32 -66
  150. package/dist/ui/components/atoms/vc-link/index.d.ts.map +1 -1
  151. package/dist/ui/components/atoms/vc-link/vc-link.vue.d.ts.map +1 -1
  152. package/dist/ui/components/atoms/vc-loading/vc-loading.vue.d.ts.map +1 -1
  153. package/dist/ui/components/atoms/vc-progress/index.d.ts +30 -63
  154. package/dist/ui/components/atoms/vc-progress/index.d.ts.map +1 -1
  155. package/dist/ui/components/atoms/vc-progress/vc-progress.vue.d.ts +3 -0
  156. package/dist/ui/components/atoms/vc-progress/vc-progress.vue.d.ts.map +1 -1
  157. package/dist/ui/components/atoms/vc-row/vc-row.vue.d.ts +3 -1
  158. package/dist/ui/components/atoms/vc-row/vc-row.vue.d.ts.map +1 -1
  159. package/dist/ui/components/atoms/vc-status/vc-status.vue.d.ts +6 -1
  160. package/dist/ui/components/atoms/vc-status/vc-status.vue.d.ts.map +1 -1
  161. package/dist/ui/components/atoms/vc-status-icon/vc-status-icon.vue.d.ts.map +1 -1
  162. package/dist/ui/components/atoms/vc-switch/vc-switch.vue.d.ts.map +1 -1
  163. package/dist/ui/components/atoms/vc-video/vc-video.vue.d.ts +3 -0
  164. package/dist/ui/components/atoms/vc-video/vc-video.vue.d.ts.map +1 -1
  165. package/dist/ui/components/atoms/vc-widget/vc-widget.vue.d.ts.map +1 -1
  166. package/dist/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue.d.ts +3 -0
  167. package/dist/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue.d.ts.map +1 -1
  168. package/dist/ui/components/molecules/vc-code-editor/index.d.ts +59 -98
  169. package/dist/ui/components/molecules/vc-code-editor/index.d.ts.map +1 -1
  170. package/dist/ui/components/molecules/vc-code-editor/vc-code-editor.vue.d.ts +1 -0
  171. package/dist/ui/components/molecules/vc-code-editor/vc-code-editor.vue.d.ts.map +1 -1
  172. package/dist/ui/components/molecules/vc-editor/vc-editor.vue.d.ts +4 -1
  173. package/dist/ui/components/molecules/vc-editor/vc-editor.vue.d.ts.map +1 -1
  174. package/dist/ui/components/molecules/vc-field/_internal/vc-field-type/vc-field-type.vue.d.ts.map +1 -1
  175. package/dist/ui/components/molecules/vc-field/vc-field.vue.d.ts +3 -0
  176. package/dist/ui/components/molecules/vc-field/vc-field.vue.d.ts.map +1 -1
  177. package/dist/ui/components/molecules/vc-file-upload/index.d.ts +67 -105
  178. package/dist/ui/components/molecules/vc-file-upload/index.d.ts.map +1 -1
  179. package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts +3 -0
  180. package/dist/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts.map +1 -1
  181. package/dist/ui/components/molecules/vc-form/index.d.ts +8 -38
  182. package/dist/ui/components/molecules/vc-form/index.d.ts.map +1 -1
  183. package/dist/ui/components/molecules/vc-form/vc-form.vue.d.ts.map +1 -1
  184. package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts +56 -1
  185. package/dist/ui/components/molecules/vc-input/vc-input.vue.d.ts.map +1 -1
  186. package/dist/ui/components/molecules/vc-input-currency/index.d.ts +159 -214
  187. package/dist/ui/components/molecules/vc-input-currency/index.d.ts.map +1 -1
  188. package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.vue.d.ts +3 -0
  189. package/dist/ui/components/molecules/vc-input-currency/vc-input-currency.vue.d.ts.map +1 -1
  190. package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.vue.d.ts +27 -9
  191. package/dist/ui/components/molecules/vc-multivalue/vc-multivalue.vue.d.ts.map +1 -1
  192. package/dist/ui/components/molecules/vc-notification/vc-notification.vue.d.ts.map +1 -1
  193. package/dist/ui/components/molecules/vc-pagination/vc-pagination.vue.d.ts +3 -0
  194. package/dist/ui/components/molecules/vc-pagination/vc-pagination.vue.d.ts.map +1 -1
  195. package/dist/ui/components/molecules/vc-rating/index.d.ts +59 -96
  196. package/dist/ui/components/molecules/vc-rating/index.d.ts.map +1 -1
  197. package/dist/ui/components/molecules/vc-rating/vc-rating.vue.d.ts +3 -0
  198. package/dist/ui/components/molecules/vc-rating/vc-rating.vue.d.ts.map +1 -1
  199. package/dist/ui/components/molecules/vc-select/vc-select.vue.d.ts +257 -8
  200. package/dist/ui/components/molecules/vc-select/vc-select.vue.d.ts.map +1 -1
  201. package/dist/ui/components/molecules/vc-slider/index.d.ts +55 -91
  202. package/dist/ui/components/molecules/vc-slider/index.d.ts.map +1 -1
  203. package/dist/ui/components/molecules/vc-slider/vc-slider.vue.d.ts +3 -0
  204. package/dist/ui/components/molecules/vc-slider/vc-slider.vue.d.ts.map +1 -1
  205. package/dist/ui/components/molecules/vc-textarea/vc-textarea.vue.d.ts +6 -1
  206. package/dist/ui/components/molecules/vc-textarea/vc-textarea.vue.d.ts.map +1 -1
  207. package/dist/ui/components/organisms/index.d.ts +0 -2
  208. package/dist/ui/components/organisms/index.d.ts.map +1 -1
  209. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts +2 -4
  210. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts.map +1 -1
  211. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue.d.ts +10 -7
  212. 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
  213. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue.d.ts +10 -18
  214. 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
  215. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue.d.ts +16 -16
  216. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue.d.ts.map +1 -1
  217. package/dist/ui/components/organisms/vc-app/index.d.ts +1 -292
  218. package/dist/ui/components/organisms/vc-app/index.d.ts.map +1 -1
  219. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts +17 -56
  220. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts.map +1 -1
  221. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue.d.ts.map +1 -1
  222. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-button/vc-blade-toolbar-button.vue.d.ts +3 -0
  223. 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
  224. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue.d.ts +3 -0
  225. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue.d.ts.map +1 -1
  226. package/dist/ui/components/organisms/vc-blade/index.d.ts +89 -131
  227. package/dist/ui/components/organisms/vc-blade/index.d.ts.map +1 -1
  228. package/dist/ui/components/organisms/vc-blade/vc-blade.vue.d.ts +3 -0
  229. package/dist/ui/components/organisms/vc-blade/vc-blade.vue.d.ts.map +1 -1
  230. package/dist/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue.d.ts +21 -18
  231. package/dist/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue.d.ts.map +1 -1
  232. package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue.d.ts +4 -1
  233. package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue.d.ts.map +1 -1
  234. package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-preview/vc-gallery-preview.vue.d.ts +4 -1
  235. package/dist/ui/components/organisms/vc-gallery/_internal/vc-gallery-preview/vc-gallery-preview.vue.d.ts.map +1 -1
  236. package/dist/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts +3 -0
  237. package/dist/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts.map +1 -1
  238. package/dist/ui/components/organisms/vc-login-form/index.d.ts +32 -66
  239. package/dist/ui/components/organisms/vc-login-form/index.d.ts.map +1 -1
  240. package/dist/ui/components/organisms/vc-login-form/vc-login-form.vue.d.ts +3 -0
  241. package/dist/ui/components/organisms/vc-login-form/vc-login-form.vue.d.ts.map +1 -1
  242. package/dist/ui/components/organisms/vc-popup/_internal/vc-popup-error/vc-popup-error.vue.d.ts.map +1 -1
  243. package/dist/ui/components/organisms/vc-popup/_internal/vc-popup-warning/vc-popup-warning.vue.d.ts.map +1 -1
  244. package/dist/ui/components/organisms/vc-table/_internal/vc-table-cell/vc-table-cell.vue.d.ts.map +1 -1
  245. package/dist/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue.d.ts +3 -0
  246. package/dist/ui/components/organisms/vc-table/_internal/vc-table-column-switcher/vc-table-column-switcher.vue.d.ts.map +1 -1
  247. package/dist/ui/components/organisms/vc-table/_internal/vc-table-counter/vc-table-counter.vue.d.ts +3 -0
  248. package/dist/ui/components/organisms/vc-table/_internal/vc-table-counter/vc-table-counter.vue.d.ts.map +1 -1
  249. package/dist/ui/components/organisms/vc-table/_internal/vc-table-filter/vc-table-filter.vue.d.ts +3 -0
  250. package/dist/ui/components/organisms/vc-table/_internal/vc-table-filter/vc-table-filter.vue.d.ts.map +1 -1
  251. package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts +57 -6
  252. package/dist/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
  253. package/dist/ui/types/index.d.ts +5 -45
  254. package/dist/ui/types/index.d.ts.map +1 -1
  255. package/package.json +26 -30
  256. package/shared/components/app-switcher/components/vc-app-switcher/index.ts +1 -3
  257. package/shared/components/app-switcher/composables/useAppSwitcher/index.ts +2 -2
  258. package/shared/components/blade-navigation/components/vc-blade-navigation/index.ts +1 -3
  259. package/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue +46 -157
  260. package/shared/components/blade-navigation/components/vc-blade-view/vc-blade-view.ts +81 -0
  261. package/shared/components/blade-navigation/composables/useBladeNavigation/index.ts +323 -261
  262. package/shared/components/blade-navigation/injectionKeys.ts +4 -0
  263. package/shared/components/blade-navigation/plugin.ts +8 -10
  264. package/shared/components/blade-navigation/types/index.ts +53 -44
  265. package/shared/components/index.ts +2 -0
  266. package/shared/components/language-selector/language-selector.vue +12 -12
  267. package/{ui/components/organisms/vc-notification-dropdown → shared/components/notification-dropdown}/_internal/notification/notification.vue +6 -5
  268. package/shared/components/notification-dropdown/index.ts +10 -0
  269. package/{ui/components/organisms/vc-notification-dropdown/vc-notification-dropdown.vue → shared/components/notification-dropdown/notification-dropdown.vue} +21 -17
  270. package/shared/components/notification-template/index.ts +10 -0
  271. package/{ui/components/organisms/vc-notification-template/vc-notification-template.vue → shared/components/notification-template/notification-template.vue} +2 -2
  272. package/shared/components/popup-handler/composables/usePopup/index.ts +29 -9
  273. package/shared/components/user-dropdown-button/user-dropdown-button.vue +58 -17
  274. package/shared/index.ts +3 -2
  275. package/shared/locales/en.json +7 -0
  276. package/shared/modules/assets/components/assets-details/assets-details.vue +5 -0
  277. package/shared/modules/assets-manager/components/assets-manager/assets-manager.vue +8 -5
  278. package/shared/modules/dynamic/components/fields/GalleryField.ts +7 -7
  279. package/shared/modules/dynamic/components/fields/InputCurrency.ts +2 -1
  280. package/shared/modules/dynamic/composables/useFilterBuilder/index.ts +42 -36
  281. package/shared/modules/dynamic/factories/base/useDetailsFactory.ts +5 -3
  282. package/shared/modules/dynamic/factories/types/index.ts +6 -2
  283. package/shared/modules/dynamic/helpers/override.ts +38 -32
  284. package/shared/modules/dynamic/helpers/safeIn.ts +1 -1
  285. package/shared/modules/dynamic/index.ts +12 -12
  286. package/shared/modules/dynamic/pages/dynamic-blade-form.vue +96 -57
  287. package/shared/modules/dynamic/pages/dynamic-blade-list.vue +133 -118
  288. package/shared/modules/dynamic/types/index.ts +16 -1
  289. package/shared/pages/InvitePage/components/invite/Invite.vue +2 -2
  290. package/shared/pages/LoginPage/components/login/Login.vue +23 -16
  291. package/shared/pages/ResetPasswordPage/components/reset-password/ResetPassword.vue +3 -3
  292. package/shared/utilities/vueUtils.ts +7 -7
  293. package/tailwind.config.ts +50 -0
  294. package/ui/components/atoms/vc-button/vc-button.vue +1 -1
  295. package/ui/components/atoms/vc-card/vc-card.stories.ts +25 -0
  296. package/ui/components/atoms/vc-card/vc-card.vue +1 -1
  297. package/ui/components/atoms/vc-container/vc-container.vue +1 -1
  298. package/ui/components/atoms/vc-icon/vc-icon.vue +1 -1
  299. package/ui/components/molecules/vc-editor/vc-editor.vue +2 -7
  300. package/ui/components/molecules/vc-notification/vc-notification.vue +2 -2
  301. package/ui/components/molecules/vc-select/vc-select.vue +13 -13
  302. package/ui/components/organisms/index.ts +0 -2
  303. package/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue +25 -42
  304. package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue +123 -25
  305. package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue +11 -103
  306. package/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue +34 -52
  307. package/ui/components/organisms/vc-app/index.ts +1 -12
  308. package/ui/components/organisms/vc-app/vc-app.stories.ts +36 -36
  309. package/ui/components/organisms/vc-app/vc-app.vue +122 -61
  310. package/ui/components/organisms/vc-blade/vc-blade.vue +5 -13
  311. package/ui/components/organisms/vc-table/vc-table.vue +9 -9
  312. package/ui/locales/en.json +2 -4
  313. package/ui/types/index.ts +7 -51
  314. package/core/composables/useMenuComposer/index.ts +0 -25
  315. package/dist/core/composables/useMenuComposer/index.d.ts +0 -12
  316. package/dist/core/composables/useMenuComposer/index.d.ts.map +0 -1
  317. package/dist/ui/components/organisms/vc-notification-dropdown/_internal/notification/notification.vue.d.ts.map +0 -1
  318. package/dist/ui/components/organisms/vc-notification-dropdown/index.d.ts +0 -38
  319. package/dist/ui/components/organisms/vc-notification-dropdown/index.d.ts.map +0 -1
  320. package/dist/ui/components/organisms/vc-notification-dropdown/vc-notification-dropdown.vue.d.ts +0 -21
  321. package/dist/ui/components/organisms/vc-notification-dropdown/vc-notification-dropdown.vue.d.ts.map +0 -1
  322. package/dist/ui/components/organisms/vc-notification-template/index.d.ts +0 -2
  323. package/dist/ui/components/organisms/vc-notification-template/index.d.ts.map +0 -1
  324. package/dist/ui/components/organisms/vc-notification-template/vc-notification-template.vue.d.ts.map +0 -1
  325. package/dist/utils/isInDemoMode.d.ts +0 -2
  326. package/dist/utils/isInDemoMode.d.ts.map +0 -1
  327. package/dist/vite.config.d.ts +0 -3
  328. package/dist/vite.config.d.ts.map +0 -1
  329. package/tailwind.config.js +0 -50
  330. package/ui/components/organisms/vc-notification-dropdown/index.ts +0 -3
  331. package/ui/components/organisms/vc-notification-template/index.ts +0 -1
@@ -1,5 +1,6 @@
1
1
  <template>
2
2
  <VcBlade
3
+ v-if="!composables"
3
4
  v-loading="loading"
4
5
  :expanded="expanded"
5
6
  :closable="closable"
@@ -77,10 +78,21 @@ import {
77
78
  } from "vue";
78
79
  import { DynamicDetailsSchema, FormContentSchema, SettingsSchema } from "../types";
79
80
  import { reactiveComputed, useMounted } from "@vueuse/core";
80
- import { DetailsBladeContext, DetailsBaseBladeScope, IParentCallArgs, UseDetails, usePopup } from "../../../index";
81
+ import {
82
+ DetailsBladeContext,
83
+ DetailsBaseBladeScope,
84
+ IParentCallArgs,
85
+ UseDetails,
86
+ usePopup,
87
+ useBladeNavigation,
88
+ } from "../../../index";
81
89
  import SchemaRender from "../components/SchemaRender";
82
90
  import { VcSelect } from "../../../../ui/components";
83
91
  import { toolbarReducer } from "../helpers/toolbarReducer";
92
+ import { onBeforeRouteLeave } from "vue-router";
93
+ import { useBeforeUnload } from "../../../../core/composables/useBeforeUnload";
94
+ import * as _ from "lodash-es";
95
+ import { IBladeToolbar } from "../../../../core/types";
84
96
 
85
97
  interface Props {
86
98
  expanded?: boolean;
@@ -105,19 +117,29 @@ const props = withDefaults(defineProps<Props>(), {
105
117
  closable: true,
106
118
  });
107
119
 
108
- defineOptions({
109
- isBladeComponent: true,
110
- });
111
-
112
120
  const emit = defineEmits<Emits>();
113
121
 
114
122
  const { t } = useI18n({ useScope: "global" });
115
123
 
116
124
  const { showConfirmation } = usePopup();
117
125
 
118
- const { loading, item, validationState, scope, load, remove, saveChanges, bladeTitle } = props.composables?.[
119
- props.model?.settings?.composable ?? ""
120
- ]({ emit, props, mounted: useMounted() }) as UseDetails<Record<string, any>, DetailsBaseBladeScope>;
126
+ const { currentBladeNavigationData } = useBladeNavigation();
127
+
128
+ const { loading, item, validationState, scope, load, remove, saveChanges, bladeTitle } = props.composables
129
+ ? (props.composables?.[props.model?.settings?.composable ?? ""]({ emit, props, mounted: useMounted() }) as UseDetails<
130
+ Record<string, any>,
131
+ DetailsBaseBladeScope
132
+ >)
133
+ : ({
134
+ loading: true,
135
+ item: undefined,
136
+ validationState: undefined,
137
+ scope: undefined,
138
+ load: undefined,
139
+ remove: undefined,
140
+ saveChanges: undefined,
141
+ bladeTitle: undefined,
142
+ } as unknown as UseDetails<Record<string, any>, DetailsBaseBladeScope>);
121
143
 
122
144
  const title = ref();
123
145
  const isReady = ref(false);
@@ -125,19 +147,26 @@ const isReady = ref(false);
125
147
  const unwatchTitle = watch(
126
148
  () => bladeTitle?.value,
127
149
  (newVal) => {
128
- if (newVal) {
150
+ if (newVal && props.composables) {
129
151
  title.value = newVal;
130
152
 
131
153
  nextTick(() => unwatchTitle());
132
154
  }
133
155
  },
134
- { immediate: true }
156
+ { immediate: true },
157
+ );
158
+
159
+ useBeforeUnload(
160
+ computed(() => {
161
+ const toolBarSave = _.get(toValue(scope)?.toolbarOverrides, "saveChanges") as unknown as IBladeToolbar;
162
+ return !unref(toolBarSave && "disabled" in toolBarSave && toolBarSave.disabled) || validationState.value.validated;
163
+ }),
135
164
  );
136
165
 
137
166
  const settings = computed(() => props.model?.settings);
138
167
 
139
168
  const form = computed(
140
- (): FormContentSchema => props.model?.content.find((x) => x?.component === "vc-form") as FormContentSchema
169
+ (): FormContentSchema => props.model?.content.find((x) => x?.component === "vc-form") as FormContentSchema,
141
170
  );
142
171
 
143
172
  const widgets = computed(() => props.model?.content.find((x) => x?.component === "vc-widgets"));
@@ -201,48 +230,69 @@ const bladeOptions = reactive({
201
230
  status: bladeStatus,
202
231
  });
203
232
 
204
- const toolbarComputed = toolbarReducer({
205
- defaultToolbarSchema: settings.value?.toolbar ?? [],
206
- defaultToolbarBindings: {
207
- saveChanges: {
208
- async clickHandler() {
209
- if (item.value) {
210
- await saveChanges(item.value);
211
-
212
- emit("parent:call", {
213
- method: "reload",
214
- });
215
- if (!props.param) {
216
- emit("close:blade");
217
- }
218
- }
219
- },
220
- disabled: computed(() => !validationState.value.validated),
221
- },
222
- remove: {
223
- async clickHandler() {
224
- if (
225
- await showConfirmation(
226
- computed(() => t(`${settings.value?.localizationPrefix.trim().toUpperCase()}.PAGES.DETAILS.ALERTS.DELETE`))
227
- )
228
- ) {
229
- if (props.param) {
230
- await remove?.({ id: props.param });
233
+ const toolbarComputed =
234
+ props.composables &&
235
+ toolbarReducer({
236
+ defaultToolbarSchema: settings.value?.toolbar ?? [],
237
+ defaultToolbarBindings: {
238
+ saveChanges: {
239
+ async clickHandler() {
240
+ if (item.value) {
241
+ await saveChanges(item.value);
242
+
231
243
  emit("parent:call", {
232
244
  method: "reload",
233
245
  });
234
- emit("close:blade");
246
+ if (!props.param) {
247
+ emit("close:blade");
248
+ }
249
+ }
250
+ },
251
+ // TODO validate fields without validation
252
+ disabled: computed(() => !validationState.value.validated),
253
+ },
254
+ remove: {
255
+ async clickHandler() {
256
+ if (
257
+ await showConfirmation(
258
+ computed(() => t(`${settings.value?.localizationPrefix.trim().toUpperCase()}.PAGES.ALERTS.DELETE`)),
259
+ )
260
+ ) {
261
+ if (props.param) {
262
+ await remove?.({ id: props.param });
263
+ emit("parent:call", {
264
+ method: "reload",
265
+ });
266
+ emit("close:blade");
267
+ }
235
268
  }
236
- }
269
+ },
270
+ disabled: computed(() => toValue(scope)?.disabled),
237
271
  },
238
- disabled: computed(() => toValue(scope)?.disabled),
239
272
  },
240
- },
241
- customToolbarConfig: toValue(scope)?.toolbarOverrides,
242
- context: bladeContext.value,
243
- });
273
+ customToolbarConfig: toValue(scope)?.toolbarOverrides,
274
+ context: bladeContext.value,
275
+ });
244
276
 
245
277
  onBeforeMount(async () => {
278
+ if (props.composables) await init();
279
+ });
280
+
281
+ onBeforeRouteLeave(async (to, from) => {
282
+ if (
283
+ currentBladeNavigationData.value?.fullPath &&
284
+ !to.path.includes(currentBladeNavigationData.value?.fullPath) &&
285
+ validationState.value.modified
286
+ ) {
287
+ return await showConfirmation(
288
+ unref(
289
+ computed(() => t(`${settings.value?.localizationPrefix.trim().toUpperCase()}.PAGES.ALERTS.CLOSE_CONFIRMATION`)),
290
+ ),
291
+ );
292
+ }
293
+ });
294
+
295
+ async function init() {
246
296
  if (props.param) {
247
297
  await load({ id: props.param });
248
298
  }
@@ -250,21 +300,10 @@ onBeforeMount(async () => {
250
300
  await nextTick(() => {
251
301
  isReady.value = true;
252
302
  });
253
- });
254
-
255
- async function onBeforeClose() {
256
- if (validationState.value.modified) {
257
- return await showConfirmation(
258
- unref(
259
- computed(() => t(`${settings.value?.localizationPrefix.trim().toUpperCase()}.PAGES.ALERTS.CLOSE_CONFIRMATION`))
260
- )
261
- );
262
- }
263
303
  }
264
304
 
265
305
  defineExpose({
266
- title: bladeTitle,
267
- onBeforeClose,
306
+ title: bladeTitle ?? "",
268
307
  ...scope?.value,
269
308
  });
270
309
  </script>
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <component
3
3
  :is="isWidgetView ? 'template' : 'VcBlade'"
4
+ v-if="!composables"
4
5
  :expanded="expanded"
5
6
  :closable="closable"
6
7
  width="50%"
@@ -27,9 +28,9 @@
27
28
  class="tw-grow tw-basis-0"
28
29
  :loading="loading"
29
30
  :expanded="expanded"
30
- :columns="(table?.columns as ITableColumns[])"
31
- :state-key="stateKey"
32
- :items="(itemsProxy as Record<string, any>[])"
31
+ :columns="(tableData?.columns as ITableColumns[]) ?? []"
32
+ :state-key="stateKey ?? ''"
33
+ :items="itemsProxy as Record<string, any>[]"
33
34
  :multiselect="isWidgetView ? false : tableData?.multiselect"
34
35
  :header="isWidgetView ? false : tableData?.header"
35
36
  :footer="!isWidgetView"
@@ -61,7 +62,7 @@
61
62
 
62
63
  <!-- Not found template -->
63
64
  <template #notfound>
64
- <template v-if="bladeOptions.notFound">
65
+ <template v-if="bladeOptions?.notFound">
65
66
  <component
66
67
  :is="bladeOptions.notFound"
67
68
  @reset="resetSearch"
@@ -83,9 +84,12 @@
83
84
 
84
85
  <!-- Empty template -->
85
86
  <template #empty>
86
- <template v-if="bladeOptions.empty">
87
+ <template v-if="bladeOptions?.empty">
87
88
  <component
88
89
  :is="bladeOptions.empty"
90
+ :class="{
91
+ 'tw-py-6': isWidgetView,
92
+ }"
89
93
  @add="openDetailsBlade"
90
94
  ></component>
91
95
  </template>
@@ -113,7 +117,7 @@
113
117
  <!-- Override table mobile view -->
114
118
 
115
119
  <template
116
- v-if="bladeOptions.mobileView"
120
+ v-if="bladeOptions?.mobileView"
117
121
  #mobile-item="itemData"
118
122
  >
119
123
  <component
@@ -129,7 +133,6 @@
129
133
  /* eslint-disable @typescript-eslint/no-explicit-any */
130
134
  import {
131
135
  Ref,
132
- VNode,
133
136
  computed,
134
137
  inject,
135
138
  onMounted,
@@ -144,6 +147,7 @@ import {
144
147
  ShallowRef,
145
148
  ConcreteComponent,
146
149
  ComputedRef,
150
+ onBeforeMount,
147
151
  } from "vue";
148
152
  import { useI18n } from "vue-i18n";
149
153
  import { DynamicGridSchema, ListContentSchema, SettingsSchema } from "../types";
@@ -156,7 +160,6 @@ import { ListBaseBladeScope, ListBladeContext, UseList } from "../factories/type
156
160
  import { IParentCallArgs } from "../../../index";
157
161
  import * as _ from "lodash-es";
158
162
  import { useMounted } from "@vueuse/core";
159
- import { safeIn } from "../helpers/safeIn";
160
163
 
161
164
  export interface Props {
162
165
  expanded?: boolean;
@@ -190,35 +193,24 @@ const { debounce } = useFunctions();
190
193
 
191
194
  const emit = defineEmits<Emits>();
192
195
 
193
- defineOptions({
194
- isBladeComponent: true,
195
- });
196
-
197
196
  const settings = computed(() => props.model?.settings);
198
197
  const title = computed(() => settings.value?.titleTemplate);
199
198
  const allSelected = ref(false);
200
199
  const searchValue = ref();
201
- const selectedItemId = ref();
202
- const sort = ref("createdDate:DESC");
203
- const selectedIds = ref<string[]>([]);
200
+ const selectedItemId = shallowRef();
201
+ const sort = shallowRef("createdDate:DESC");
202
+ const selectedIds = shallowRef<string[]>([]);
204
203
  const isDesktop = inject("isDesktop") as Ref<boolean>;
205
204
  const itemsProxy = ref<Record<string, any>[]>();
206
- const modified = ref(false);
205
+ const modified = shallowRef(false);
207
206
 
208
207
  const { moduleNotifications, markAsRead } = useNotifications(settings.value?.pushNotificationType);
209
- const { load, remove, items, loading, pagination, query, scope } = props.composables?.[
210
- props.model?.settings?.composable ?? ""
211
- ]({
212
- emit,
213
- props,
214
- mounted: useMounted(),
215
- }) as UseList<Record<string, any>[], Record<string, any>, ListBaseBladeScope>;
216
208
 
217
209
  watch(
218
210
  moduleNotifications,
219
211
  (newVal) => {
220
212
  newVal.forEach((message) => {
221
- if (message.title) {
213
+ if (message.title && props.composables) {
222
214
  notification.success(message.title, {
223
215
  onClose() {
224
216
  markAsRead(message);
@@ -227,17 +219,41 @@ watch(
227
219
  }
228
220
  });
229
221
  },
230
- { deep: true }
222
+ { deep: true },
231
223
  );
232
224
 
233
- const tableData = computed(() => props.model?.content.find((type: ListContentSchema) => type.component === "vc-table"));
234
- const stateKey = computed(() => {
235
- if (tableData.value?.id) {
236
- return tableData.value?.id + props.isWidgetView ? "_dashboard" : "";
237
- }
225
+ const tableData =
226
+ props.composables &&
227
+ computed(() => props.model?.content.find((type: ListContentSchema) => type.component === "vc-table"));
228
+ const stateKey =
229
+ props.composables &&
230
+ computed(() => {
231
+ if (tableData?.value?.id) {
232
+ return tableData.value?.id + props.isWidgetView ? "_dashboard" : "";
233
+ }
238
234
 
239
- throw new Error('Table id is not defined. Please provide "id" property in table schema');
240
- });
235
+ throw new Error('Table id is not defined. Please provide "id" property in table schema');
236
+ });
237
+
238
+ const { load, remove, items, loading, pagination, query, scope } = props.composables
239
+ ? (props.composables?.[props.model?.settings?.composable ?? ""]({
240
+ emit,
241
+ props,
242
+ mounted: useMounted(),
243
+ }) as UseList<Record<string, any>[], Record<string, any>, ListBaseBladeScope>)
244
+ : ({
245
+ load: ref(true),
246
+ remove: undefined,
247
+ items: undefined,
248
+ loading: undefined,
249
+ pagination: undefined,
250
+ query: undefined,
251
+ scope: undefined,
252
+ } as unknown as UseList<Record<string, any>[], Record<string, any>, ListBaseBladeScope>);
253
+
254
+ if (props.isWidgetView) {
255
+ query.value.take = 5;
256
+ }
241
257
 
242
258
  const calculateColumns = (columns: ListContentSchema["columns"]) => {
243
259
  const result = columns?.map((column) => {
@@ -247,25 +263,23 @@ const calculateColumns = (columns: ListContentSchema["columns"]) => {
247
263
  ? scope?.value[column.visible?.method]()
248
264
  : scope?.value[column.visible?.method];
249
265
 
250
- console.log("result", result);
251
-
252
266
  column.visible = result;
253
267
  }
254
268
  return column;
255
269
  });
256
270
 
257
- console.log(result);
258
-
259
271
  return result;
260
272
  };
261
273
 
262
- const table = computed(() => {
263
- const tableScope = {
264
- columns: calculateColumns(tableData.value?.columns),
265
- };
274
+ const table =
275
+ props.composables &&
276
+ computed(() => {
277
+ const tableScope = {
278
+ columns: calculateColumns(tableData?.value?.columns),
279
+ };
266
280
 
267
- return tableScope;
268
- });
281
+ return tableScope;
282
+ });
269
283
 
270
284
  const bladeOptions = reactive({
271
285
  tableData,
@@ -276,10 +290,6 @@ const bladeOptions = reactive({
276
290
  empty: resolveTemplateComponent("emptyTemplate"),
277
291
  });
278
292
 
279
- if (props.isWidgetView) {
280
- query.value.take = 5;
281
- }
282
-
283
293
  const {
284
294
  filterComponent,
285
295
  activeFilterCount,
@@ -303,67 +313,53 @@ const bladeContext = ref<ListBladeContext>({
303
313
  settings: settings as ComputedRef<SettingsSchema>,
304
314
  });
305
315
 
306
- const toolbarComputed = toolbarReducer({
307
- defaultToolbarSchema: settings.value?.toolbar ?? [],
308
- defaultToolbarBindings: {
309
- save: {
310
- clickHandler() {
311
- emit("close:blade");
316
+ const toolbarComputed =
317
+ props.composables &&
318
+ toolbarReducer({
319
+ defaultToolbarSchema: settings.value?.toolbar ?? [],
320
+ defaultToolbarBindings: {
321
+ save: {
322
+ clickHandler() {
323
+ emit("close:blade");
324
+ },
325
+ disabled: computed(() => !modified.value),
312
326
  },
313
- disabled: computed(() => !modified.value),
314
- },
315
- openAddBlade: {
316
- async clickHandler() {
317
- if (
318
- scope &&
319
- "openDetailsBlade" in toValue(scope) &&
320
- toValue(scope).openDetailsBlade &&
321
- typeof toValue(scope).openDetailsBlade === "function"
322
- ) {
323
- toValue(scope).openDetailsBlade();
324
- } else throw new Error("openDetailsBlade method is not defined in scope");
327
+ openAddBlade: {
328
+ async clickHandler() {
329
+ if (
330
+ scope &&
331
+ "openDetailsBlade" in toValue(scope) &&
332
+ toValue(scope).openDetailsBlade &&
333
+ typeof toValue(scope).openDetailsBlade === "function"
334
+ ) {
335
+ toValue(scope).openDetailsBlade();
336
+ } else throw new Error("openDetailsBlade method is not defined in scope");
337
+ },
325
338
  },
326
- },
327
- refresh: {
328
- async clickHandler() {
329
- await reload();
339
+ refresh: {
340
+ async clickHandler() {
341
+ await reload();
342
+ },
330
343
  },
331
- },
332
- removeItems: {
333
- async clickHandler() {
334
- removeItems();
344
+ removeItems: {
345
+ async clickHandler() {
346
+ removeItems();
347
+ },
348
+ disabled: computed(() => !selectedIds.value?.length),
349
+ isVisible: isDesktop.value,
335
350
  },
336
- disabled: computed(() => !selectedIds.value?.length),
337
- isVisible: isDesktop.value,
338
351
  },
339
- },
340
- customToolbarConfig: toValue(scope)?.toolbarOverrides,
341
- context: bladeContext.value,
342
- });
343
-
344
- onMounted(async () => {
345
- await load({ ...query.value, sort: sort.value });
346
- });
347
-
348
- watch(
349
- () => itemsProxy.value,
350
- (newVal) => {
351
- modified.value = !_.isEqual(newVal, items.value);
352
- },
353
- { deep: true }
354
- );
355
-
356
- watch(sort, async (value) => {
357
- await load({ ...query.value, sort: value });
358
- });
352
+ customToolbarConfig: toValue(scope)?.toolbarOverrides,
353
+ context: bladeContext.value,
354
+ });
359
355
 
360
- watch(items, (newVal) => {
361
- itemsProxy.value = newVal;
356
+ onBeforeMount(async () => {
357
+ if (props.composables) await load({ ...query.value, sort: sort.value });
362
358
  });
363
359
 
364
360
  watch(
365
361
  () => props.param,
366
- (newVal) => {
362
+ async (newVal) => {
367
363
  if (newVal) {
368
364
  if (
369
365
  scope &&
@@ -371,7 +367,7 @@ watch(
371
367
  toValue(scope).openDetailsBlade &&
372
368
  typeof toValue(scope).openDetailsBlade === "function"
373
369
  ) {
374
- toValue(scope).openDetailsBlade({
370
+ await toValue(scope).openDetailsBlade({
375
371
  param: newVal,
376
372
  onOpen() {
377
373
  selectedItemId.value = newVal;
@@ -383,10 +379,26 @@ watch(
383
379
  }
384
380
  }
385
381
  },
386
- { immediate: true }
382
+ { immediate: true },
387
383
  );
388
384
 
389
- const openDetailsBlade = () => {
385
+ watch(
386
+ () => itemsProxy.value,
387
+ (newVal) => {
388
+ modified.value = !_.isEqual(newVal, items.value);
389
+ },
390
+ { deep: true },
391
+ );
392
+
393
+ watch(sort, async (value) => {
394
+ await load({ ...query.value, sort: value });
395
+ });
396
+
397
+ watch(items, (newVal) => {
398
+ itemsProxy.value = newVal;
399
+ });
400
+
401
+ const openDetailsBlade = async () => {
390
402
  if (!props.isWidgetView) {
391
403
  if (
392
404
  scope &&
@@ -394,7 +406,7 @@ const openDetailsBlade = () => {
394
406
  toValue(scope).openDetailsBlade &&
395
407
  typeof toValue(scope).openDetailsBlade === "function"
396
408
  ) {
397
- toValue(scope).openDetailsBlade();
409
+ await toValue(scope).openDetailsBlade();
398
410
  }
399
411
  } else {
400
412
  emit("add");
@@ -441,10 +453,10 @@ async function removeItems() {
441
453
  `${settings.value?.localizationPrefix.trim().toUpperCase()}.PAGES.LIST.DELETE_SELECTED_CONFIRMATION.ALL`,
442
454
  {
443
455
  totalCount: pagination.value.totalCount,
444
- }
456
+ },
445
457
  )
446
458
  : selectedIds.value.length,
447
- })
459
+ }),
448
460
  )
449
461
  ) {
450
462
  emit("close:children");
@@ -530,27 +542,30 @@ async function resetSearch() {
530
542
 
531
543
  function templateOverrideComponents(): Record<string, ShallowRef<ConcreteComponent>> {
532
544
  return {
533
- ...table.value.columns?.reduce((acc, curr) => {
534
- if ("customTemplate" in curr && curr.customTemplate) {
535
- if (!("component" in curr.customTemplate)) {
536
- throw new Error(
537
- `Component name must be provided in 'customTemplate' property, column: ${JSON.stringify(curr)}`
538
- );
539
- } else if ("component" in curr.customTemplate && curr.customTemplate.component) {
540
- const component = resolveComponent(curr.customTemplate.component);
541
-
542
- if (typeof component !== "string") {
543
- acc[curr.id] = shallowRef(component);
545
+ ...table?.value.columns?.reduce(
546
+ (acc, curr) => {
547
+ if ("customTemplate" in curr && curr.customTemplate) {
548
+ if (!("component" in curr.customTemplate)) {
549
+ throw new Error(
550
+ `Component name must be provided in 'customTemplate' property, column: ${JSON.stringify(curr)}`,
551
+ );
552
+ } else if ("component" in curr.customTemplate && curr.customTemplate.component) {
553
+ const component = resolveComponent(curr.customTemplate.component);
554
+
555
+ if (typeof component !== "string") {
556
+ acc[curr.id] = shallowRef(component);
557
+ }
544
558
  }
545
559
  }
546
- }
547
- return acc;
548
- }, {} as Record<string, ShallowRef<ConcreteComponent>>),
560
+ return acc;
561
+ },
562
+ {} as Record<string, ShallowRef<ConcreteComponent>>,
563
+ ),
549
564
  };
550
565
  }
551
566
 
552
567
  function resolveTemplateComponent(name: keyof ListContentSchema) {
553
- if (!tableData.value) return;
568
+ if (!tableData?.value) return;
554
569
  const value = tableData.value[name];
555
570
  if (value && typeof value === "object" && "component" in value) {
556
571
  const componentName = value.component;
@@ -10,6 +10,7 @@ import {
10
10
  } from "./../../../../ui/components";
11
11
  import { ITableColumns, IValidationRules } from "../../../../core/types";
12
12
  import type { ComponentProps } from "./../../../utilities/vueUtils";
13
+ import { MenuItemConfig } from "../../../components/blade-navigation/types";
13
14
 
14
15
  export type KeysOfUnion<T> = T extends T ? keyof T : never;
15
16
 
@@ -106,6 +107,20 @@ export interface SettingsBase {
106
107
  * This option is used to determine which view should be the default view.
107
108
  */
108
109
  isWorkspace?: boolean;
110
+ /**
111
+ * Blade menu item
112
+ * @description If not set - blade will not be added to the menu
113
+ *
114
+ * @example
115
+ * {
116
+ * title: "Products",
117
+ * icon: "fas fa-box-open",
118
+ * group: "Products",
119
+ * }
120
+ * @type {{title: string, icon: string, path: string/string}}
121
+ * @default undefined
122
+ */
123
+ menuItem?: MenuItemConfig;
109
124
  }
110
125
 
111
126
  export interface ListContentSchema {
@@ -798,7 +813,7 @@ export interface OverridesUpsert extends OverridesReplace {
798
813
  export interface OverridesReplace {
799
814
  path: string;
800
815
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
801
- value: ControlSchema | SettingsSchema["toolbar"][number] | string | boolean;
816
+ value: ControlSchema | SettingsSchema["toolbar"][number] | SettingsSchema["menuItem"] | string | boolean;
802
817
  id: string;
803
818
  }
804
819