@vc-shell/vc-app-skill 2.0.0-alpha.33 → 2.0.0-alpha.34

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 (195) hide show
  1. package/CHANGELOG.md +78 -54
  2. package/README.md +42 -12
  3. package/package.json +4 -4
  4. package/runtime/VERSION +1 -1
  5. package/runtime/agents/api-analyzer.md +31 -16
  6. package/runtime/agents/blade-enhancer.md +15 -9
  7. package/runtime/agents/details-blade-generator.md +47 -31
  8. package/runtime/agents/list-blade-generator.md +21 -37
  9. package/runtime/agents/locales-generator.md +3 -0
  10. package/runtime/agents/migration-agent.md +18 -7
  11. package/runtime/agents/module-analyzer.md +2 -0
  12. package/runtime/agents/module-assembler.md +15 -0
  13. package/runtime/agents/promote-agent.md +15 -4
  14. package/runtime/agents/type-checker.md +11 -0
  15. package/runtime/knowledge/docs/_BUILD_HASH.md +1 -1
  16. package/runtime/knowledge/docs/core/api/platform.docs.md +30 -30
  17. package/runtime/knowledge/docs/core/blade-navigation/blade-nav-composables.docs.md +41 -41
  18. package/runtime/knowledge/docs/core/composables/bladeContext/index.docs.md +12 -10
  19. package/runtime/knowledge/docs/core/composables/useApiClient/useApiClient.docs.md +11 -14
  20. package/runtime/knowledge/docs/core/composables/useAppBarMobileButtons/useAppBarMobileButtons.docs.md +35 -35
  21. package/runtime/knowledge/docs/core/composables/useAppBarWidget/useAppBarWidget.docs.md +35 -35
  22. package/runtime/knowledge/docs/core/composables/useAppInsights/useAppInsights.docs.md +15 -15
  23. package/runtime/knowledge/docs/core/composables/useAssets/useAssets.docs.md +21 -18
  24. package/runtime/knowledge/docs/core/composables/useAssetsManager/useAssetsManager.docs.md +28 -24
  25. package/runtime/knowledge/docs/core/composables/useAsync/useAsync.docs.md +90 -61
  26. package/runtime/knowledge/docs/core/composables/useBeforeUnload/useBeforeUnload.docs.md +19 -18
  27. package/runtime/knowledge/docs/core/composables/useBlade/useBlade.docs.md +89 -68
  28. package/runtime/knowledge/docs/core/composables/useBladeForm/useBladeForm.docs.md +27 -25
  29. package/runtime/knowledge/docs/core/composables/useBladeRegistry/useBladeRegistry.docs.md +15 -15
  30. package/runtime/knowledge/docs/core/composables/useBladeWidgets/index.docs.md +43 -47
  31. package/runtime/knowledge/docs/core/composables/useBreadcrumbs/useBreadcrumbs.docs.md +11 -11
  32. package/runtime/knowledge/docs/core/composables/useConnectionStatus/useConnectionStatus.docs.md +27 -15
  33. package/runtime/knowledge/docs/core/composables/useDashboard/useDashboard.docs.md +30 -30
  34. package/runtime/knowledge/docs/core/composables/useDynamicProperties/useDynamicProperties.docs.md +34 -36
  35. package/runtime/knowledge/docs/core/composables/useErrorHandler/useErrorHandler.docs.md +44 -23
  36. package/runtime/knowledge/docs/core/composables/useFunctions/useFunctions.docs.md +14 -11
  37. package/runtime/knowledge/docs/core/composables/useKeyboardNavigation/useKeyboardNavigation.docs.md +47 -38
  38. package/runtime/knowledge/docs/core/composables/useLanguages/useLanguages.docs.md +37 -28
  39. package/runtime/knowledge/docs/core/composables/useLoading/useLoading.docs.md +23 -17
  40. package/runtime/knowledge/docs/core/composables/useMenuExpanded/index.docs.md +9 -9
  41. package/runtime/knowledge/docs/core/composables/useMenuService/useMenuService.docs.md +42 -42
  42. package/runtime/knowledge/docs/core/composables/useModificationTracker/useModificationTracker.docs.md +22 -12
  43. package/runtime/knowledge/docs/core/composables/useNotifications/useNotifications.docs.md +33 -41
  44. package/runtime/knowledge/docs/core/composables/usePermissions/usePermissions.docs.md +16 -16
  45. package/runtime/knowledge/docs/core/composables/usePlatformLocaleSync/usePlatformLocaleSync.docs.md +28 -0
  46. package/runtime/knowledge/docs/core/composables/usePopup/usePopup.docs.md +32 -24
  47. package/runtime/knowledge/docs/core/composables/useResponsive/useResponsive.docs.md +32 -11
  48. package/runtime/knowledge/docs/core/composables/useSettings/useSettings.docs.md +22 -13
  49. package/runtime/knowledge/docs/core/composables/useSettingsMenu/useSettingsMenu.docs.md +7 -7
  50. package/runtime/knowledge/docs/core/composables/useSidebarState/useSidebarState.docs.md +32 -24
  51. package/runtime/knowledge/docs/core/composables/useSlowNetworkDetection/useSlowNetworkDetection.docs.md +21 -17
  52. package/runtime/knowledge/docs/core/composables/useTheme/useTheme.docs.md +24 -24
  53. package/runtime/knowledge/docs/core/composables/useToolbar/useToolbar.docs.md +28 -31
  54. package/runtime/knowledge/docs/core/composables/useUser/useUser.docs.md +43 -24
  55. package/runtime/knowledge/docs/core/composables/useUserManagement/useUserManagement.docs.md +68 -48
  56. package/runtime/knowledge/docs/core/composables/useWebVitals/useWebVitals.docs.md +19 -19
  57. package/runtime/knowledge/docs/core/composables/useWidgets/useWidgets.docs.md +42 -47
  58. package/runtime/knowledge/docs/core/directives/autofocus/autofocus.docs.md +10 -4
  59. package/runtime/knowledge/docs/core/directives/loading/loading.docs.md +35 -20
  60. package/runtime/knowledge/docs/core/notifications/notifications.docs.md +36 -35
  61. package/runtime/knowledge/docs/core/plugins/ai-agent/ai-agent.docs.md +38 -38
  62. package/runtime/knowledge/docs/core/plugins/extension-points/extension-points.docs.md +79 -62
  63. package/runtime/knowledge/docs/core/plugins/global-error-handler/global-error-handler.docs.md +10 -10
  64. package/runtime/knowledge/docs/core/plugins/i18n/i18n.docs.md +21 -23
  65. package/runtime/knowledge/docs/core/plugins/modularity/modularity.docs.md +91 -83
  66. package/runtime/knowledge/docs/core/plugins/permissions/permissions.docs.md +10 -16
  67. package/runtime/knowledge/docs/core/plugins/signalR/signalR.docs.md +9 -9
  68. package/runtime/knowledge/docs/core/plugins/validation/validation.docs.md +65 -22
  69. package/runtime/knowledge/docs/core/services/services.docs.md +19 -22
  70. package/runtime/knowledge/docs/core/types/types.docs.md +40 -40
  71. package/runtime/knowledge/docs/core/utilities/date/date-utilities.docs.md +27 -27
  72. package/runtime/knowledge/docs/core/utilities/shared-utilities.docs.md +23 -23
  73. package/runtime/knowledge/docs/core/utilities/thumbnail/thumbnail.docs.md +22 -25
  74. package/runtime/knowledge/docs/core/utilities/utilities.docs.md +64 -64
  75. package/runtime/knowledge/docs/injection-keys.docs.md +52 -51
  76. package/runtime/knowledge/docs/modules/assets-manager/assets-manager.docs.md +9 -9
  77. package/runtime/knowledge/docs/shell/_internal/popup/common/popup-common.docs.md +23 -43
  78. package/runtime/knowledge/docs/shell/auth/ChangePasswordPage/change-password-page.docs.md +5 -5
  79. package/runtime/knowledge/docs/shell/auth/ForgotPasswordPage/forgot-password-page.docs.md +5 -5
  80. package/runtime/knowledge/docs/shell/auth/InvitePage/invite-page.docs.md +8 -7
  81. package/runtime/knowledge/docs/shell/auth/LoginPage/login-page.docs.md +7 -7
  82. package/runtime/knowledge/docs/shell/auth/ResetPasswordPage/reset-password-page.docs.md +8 -7
  83. package/runtime/knowledge/docs/shell/auth/sign-in/sign-in.docs.md +29 -13
  84. package/runtime/knowledge/docs/shell/components/change-password/change-password.docs.md +13 -16
  85. package/runtime/knowledge/docs/shell/components/change-password-button/change-password-button.docs.md +1 -7
  86. package/runtime/knowledge/docs/shell/components/error-interceptor/error-interceptor.docs.md +5 -5
  87. package/runtime/knowledge/docs/shell/components/language-selector/language-selector.docs.md +1 -1
  88. package/runtime/knowledge/docs/shell/components/logout-button/logout-button.docs.md +1 -1
  89. package/runtime/knowledge/docs/shell/components/notification-template/notification-template.docs.md +17 -9
  90. package/runtime/knowledge/docs/shell/components/settings-menu/settings-menu.docs.md +11 -17
  91. package/runtime/knowledge/docs/shell/components/settings-menu-item/settings-menu-item.docs.md +34 -65
  92. package/runtime/knowledge/docs/shell/components/sidebar/sidebar.docs.md +16 -26
  93. package/runtime/knowledge/docs/shell/components/theme-selector/theme-selector.docs.md +2 -2
  94. package/runtime/knowledge/docs/shell/components/user-dropdown-button/user-dropdown-button.docs.md +7 -9
  95. package/runtime/knowledge/docs/shell/dashboard/dashboard-charts/dashboard-charts.docs.md +30 -40
  96. package/runtime/knowledge/docs/shell/dashboard/dashboard-widget-card/dashboard-widget-card.docs.md +26 -19
  97. package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/draggable-dashboard.docs.md +15 -12
  98. package/runtime/knowledge/docs/ui/components/atoms/vc-badge/vc-badge.docs.md +15 -26
  99. package/runtime/knowledge/docs/ui/components/atoms/vc-banner/vc-banner.docs.md +21 -19
  100. package/runtime/knowledge/docs/ui/components/atoms/vc-button/vc-button.docs.md +83 -67
  101. package/runtime/knowledge/docs/ui/components/atoms/vc-card/vc-card.docs.md +100 -59
  102. package/runtime/knowledge/docs/ui/components/atoms/vc-col/vc-col.docs.md +28 -11
  103. package/runtime/knowledge/docs/ui/components/atoms/vc-container/vc-container.docs.md +20 -17
  104. package/runtime/knowledge/docs/ui/components/atoms/vc-hint/vc-hint.docs.md +26 -17
  105. package/runtime/knowledge/docs/ui/components/atoms/vc-icon/vc-icon.docs.md +30 -32
  106. package/runtime/knowledge/docs/ui/components/atoms/vc-image/vc-image.docs.md +25 -48
  107. package/runtime/knowledge/docs/ui/components/atoms/vc-label/vc-label.docs.md +29 -24
  108. package/runtime/knowledge/docs/ui/components/atoms/vc-link/vc-link.docs.md +23 -15
  109. package/runtime/knowledge/docs/ui/components/atoms/vc-loading/vc-loading.docs.md +22 -13
  110. package/runtime/knowledge/docs/ui/components/atoms/vc-progress/vc-progress.docs.md +33 -18
  111. package/runtime/knowledge/docs/ui/components/atoms/vc-row/vc-row.docs.md +56 -15
  112. package/runtime/knowledge/docs/ui/components/atoms/vc-scrollable-container/vc-scrollable-container.docs.md +28 -15
  113. package/runtime/knowledge/docs/ui/components/atoms/vc-skeleton/vc-skeleton.docs.md +40 -20
  114. package/runtime/knowledge/docs/ui/components/atoms/vc-status/vc-status.docs.md +25 -14
  115. package/runtime/knowledge/docs/ui/components/atoms/vc-status-icon/vc-status-icon.docs.md +40 -14
  116. package/runtime/knowledge/docs/ui/components/atoms/vc-tooltip/vc-tooltip.docs.md +54 -42
  117. package/runtime/knowledge/docs/ui/components/atoms/vc-video/vc-video.docs.md +17 -17
  118. package/runtime/knowledge/docs/ui/components/atoms/vc-widget/vc-widget.docs.md +21 -21
  119. package/runtime/knowledge/docs/ui/components/molecules/multilanguage-selector/multilanguage-selector.docs.md +23 -10
  120. package/runtime/knowledge/docs/ui/components/molecules/vc-accordion/vc-accordion.docs.md +55 -44
  121. package/runtime/knowledge/docs/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.docs.md +23 -20
  122. package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox/vc-checkbox.docs.md +92 -65
  123. package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox-group/vc-checkbox-group.docs.md +22 -36
  124. package/runtime/knowledge/docs/ui/components/molecules/vc-color-input/vc-color-input.docs.md +65 -23
  125. package/runtime/knowledge/docs/ui/components/molecules/vc-date-picker/vc-date-picker.docs.md +52 -73
  126. package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown/vc-dropdown.docs.md +91 -85
  127. package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown-panel/vc-dropdown-panel.docs.md +38 -42
  128. package/runtime/knowledge/docs/ui/components/molecules/vc-editor/vc-editor.docs.md +56 -73
  129. package/runtime/knowledge/docs/ui/components/molecules/vc-field/vc-field.docs.md +61 -27
  130. package/runtime/knowledge/docs/ui/components/molecules/vc-file-upload/vc-file-upload.docs.md +42 -50
  131. package/runtime/knowledge/docs/ui/components/molecules/vc-form/vc-form.docs.md +35 -64
  132. package/runtime/knowledge/docs/ui/components/molecules/vc-image-tile/vc-image-tile.docs.md +38 -41
  133. package/runtime/knowledge/docs/ui/components/molecules/vc-input/vc-input.docs.md +109 -131
  134. package/runtime/knowledge/docs/ui/components/molecules/vc-input-currency/vc-input-currency.docs.md +47 -88
  135. package/runtime/knowledge/docs/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.docs.md +50 -64
  136. package/runtime/knowledge/docs/ui/components/molecules/vc-input-group/vc-input-group.docs.md +29 -24
  137. package/runtime/knowledge/docs/ui/components/molecules/vc-menu/vc-menu.docs.md +32 -28
  138. package/runtime/knowledge/docs/ui/components/molecules/vc-multivalue/vc-multivalue.docs.md +57 -65
  139. package/runtime/knowledge/docs/ui/components/molecules/vc-pagination/vc-pagination.docs.md +28 -26
  140. package/runtime/knowledge/docs/ui/components/molecules/vc-radio-button/vc-radio-button.docs.md +55 -20
  141. package/runtime/knowledge/docs/ui/components/molecules/vc-radio-group/vc-radio-group.docs.md +21 -35
  142. package/runtime/knowledge/docs/ui/components/molecules/vc-rating/vc-rating.docs.md +38 -33
  143. package/runtime/knowledge/docs/ui/components/molecules/vc-select/vc-select.docs.md +72 -83
  144. package/runtime/knowledge/docs/ui/components/molecules/vc-slider/vc-slider.docs.md +21 -16
  145. package/runtime/knowledge/docs/ui/components/molecules/vc-switch/vc-switch.docs.md +55 -64
  146. package/runtime/knowledge/docs/ui/components/molecules/vc-textarea/vc-textarea.docs.md +51 -70
  147. package/runtime/knowledge/docs/ui/components/molecules/vc-toast/vc-toast.docs.md +58 -57
  148. package/runtime/knowledge/docs/ui/components/organisms/vc-app/vc-app.docs.md +49 -26
  149. package/runtime/knowledge/docs/ui/components/organisms/vc-auth-layout/vc-auth-layout.docs.md +82 -28
  150. package/runtime/knowledge/docs/ui/components/organisms/vc-blade/vc-blade.docs.md +90 -75
  151. package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/composables/table-composables.docs.md +99 -48
  152. package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/vc-data-table.docs.md +548 -367
  153. package/runtime/knowledge/docs/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.docs.md +35 -52
  154. package/runtime/knowledge/docs/ui/components/organisms/vc-gallery/vc-gallery.docs.md +33 -62
  155. package/runtime/knowledge/docs/ui/components/organisms/vc-image-upload/vc-image-upload.docs.md +17 -23
  156. package/runtime/knowledge/docs/ui/components/organisms/vc-popup/vc-popup.docs.md +109 -68
  157. package/runtime/knowledge/docs/ui/components/organisms/vc-sidebar/vc-sidebar.docs.md +82 -44
  158. package/runtime/knowledge/docs/ui/composables/ui-composables.docs.md +8 -8
  159. package/runtime/knowledge/docs/ui/composables/useDataTablePagination.docs.md +164 -0
  160. package/runtime/knowledge/docs/ui/composables/useDataTableSort.docs.md +34 -26
  161. package/runtime/knowledge/docs/ui/composables/useTableSelection.docs.md +48 -40
  162. package/runtime/knowledge/docs/ui/composables/useTableSort.docs.md +30 -17
  163. package/runtime/knowledge/docs/ui/types/ui-types.docs.md +40 -29
  164. package/runtime/knowledge/examples/offers-module.md +15 -13
  165. package/runtime/knowledge/examples/team-module.md +82 -119
  166. package/runtime/knowledge/examples/videos-module.md +44 -17
  167. package/runtime/knowledge/index.md +22 -0
  168. package/runtime/knowledge/migration-prompts/blade-form-migration.md +17 -8
  169. package/runtime/knowledge/migration-prompts/blade-props-migration.md +1 -2
  170. package/runtime/knowledge/migration-prompts/datatable-migration.md +801 -0
  171. package/runtime/knowledge/migration-prompts/icon-migration.md +97 -0
  172. package/runtime/knowledge/migration-prompts/manual-migration-audit.md +117 -0
  173. package/runtime/knowledge/migration-prompts/notifications-migration.md +8 -3
  174. package/runtime/knowledge/migration-prompts/nswag-migration.md +25 -29
  175. package/runtime/knowledge/migration-prompts/use-assets-migration.md +164 -0
  176. package/runtime/knowledge/migration-prompts/use-data-table-pagination-migration.md +176 -0
  177. package/runtime/knowledge/migration-prompts/widgets-migration.md +48 -27
  178. package/runtime/knowledge/patterns/assets-management.md +20 -20
  179. package/runtime/knowledge/patterns/blade-navigation.md +7 -14
  180. package/runtime/knowledge/patterns/blade-widget.md +19 -17
  181. package/runtime/knowledge/patterns/child-blade-flow.md +19 -7
  182. package/runtime/knowledge/patterns/composable-details.md +20 -50
  183. package/runtime/knowledge/patterns/composable-list.md +43 -31
  184. package/runtime/knowledge/patterns/dashboard-widget.md +14 -16
  185. package/runtime/knowledge/patterns/datatable-pattern.md +521 -0
  186. package/runtime/knowledge/patterns/details-blade-pattern.md +78 -116
  187. package/runtime/knowledge/patterns/extension-points-usage.md +53 -44
  188. package/runtime/knowledge/patterns/form-validation.md +28 -64
  189. package/runtime/knowledge/patterns/list-blade-pattern.md +33 -21
  190. package/runtime/knowledge/patterns/module-structure.md +7 -1
  191. package/runtime/knowledge/patterns/multilanguage-fields.md +8 -14
  192. package/runtime/knowledge/patterns/notification-template.md +21 -14
  193. package/runtime/knowledge/patterns/signalr-notifications.md +30 -32
  194. package/runtime/knowledge/patterns/toolbar-pattern.md +18 -20
  195. package/runtime/vc-app.md +241 -62
@@ -32,19 +32,19 @@ The i18n instance is created once and shared as a singleton. Calling `app.use(i1
32
32
 
33
33
  ### Singleton Export
34
34
 
35
- | Export | Type | Description |
36
- |--------|------|-------------|
35
+ | Export | Type | Description |
36
+ | ------ | ------ | --------------------------------------------------------------- |
37
37
  | `i18n` | `I18n` | The shared vue-i18n instance used across the entire application |
38
38
 
39
39
  ### Configuration (set by framework)
40
40
 
41
- | Option | Value | Description |
42
- |--------|-------|-------------|
43
- | `legacy` | `false` | Composition API mode |
44
- | `globalInjection` | `true` | Enables `$t()` in templates without explicit `useI18n()` |
45
- | `locale` | `"en"` | Default locale |
46
- | `fallbackLocale` | `"en"` | Fallback when a key is missing in the active locale |
47
- | `formatFallbackMessages` | `true` | Uses the message key itself as fallback text |
41
+ | Option | Value | Description |
42
+ | ------------------------ | ------- | -------------------------------------------------------- |
43
+ | `legacy` | `false` | Composition API mode |
44
+ | `globalInjection` | `true` | Enables `$t()` in templates without explicit `useI18n()` |
45
+ | `locale` | `"en"` | Default locale |
46
+ | `fallbackLocale` | `"en"` | Fallback when a key is missing in the active locale |
47
+ | `formatFallbackMessages` | `true` | Uses the message key itself as fallback text |
48
48
 
49
49
  ## Usage
50
50
 
@@ -109,9 +109,7 @@ Thanks to `globalInjection: true`, `$t()` is available in every template without
109
109
  ```vue
110
110
  <template>
111
111
  <VcBlade :title="$t('ORDERS.PAGES.LIST.TITLE')">
112
- <VcDataTable
113
- :empty-text="$t('ORDERS.PAGES.LIST.EMPTY_STATE')"
114
- />
112
+ <VcDataTable :empty-text="$t('ORDERS.PAGES.LIST.EMPTY_STATE')" />
115
113
  </VcBlade>
116
114
  </template>
117
115
  ```
@@ -188,9 +186,9 @@ The framework exports its locale files as typed ES modules. App developers can i
188
186
  ### Importing Framework Locales
189
187
 
190
188
  ```typescript
191
- import en from '@vc-shell/framework/locales/en'
192
- import de from '@vc-shell/framework/locales/de'
193
- import type { VcShellLocale, VcShellLocalePartial } from '@vc-shell/framework/locales/types'
189
+ import en from "@vc-shell/framework/locales/en";
190
+ import de from "@vc-shell/framework/locales/de";
191
+ import type { VcShellLocale, VcShellLocalePartial } from "@vc-shell/framework/locales/types";
194
192
  ```
195
193
 
196
194
  The `VcShellLocale` interface provides autocomplete for all framework translation keys. Use it when creating a full translation to ensure no keys are missed.
@@ -200,8 +198,8 @@ The `VcShellLocale` interface provides autocomplete for all framework translatio
200
198
  Spread the English locale as a base and override all sections:
201
199
 
202
200
  ```typescript
203
- import en from '@vc-shell/framework/locales/en'
204
- import type { VcShellLocale } from '@vc-shell/framework/locales/types'
201
+ import en from "@vc-shell/framework/locales/en";
202
+ import type { VcShellLocale } from "@vc-shell/framework/locales/types";
205
203
 
206
204
  const fr: VcShellLocale = {
207
205
  ...en,
@@ -219,10 +217,10 @@ const fr: VcShellLocale = {
219
217
  ...en.COMPONENTS,
220
218
  // ... translate component strings
221
219
  },
222
- }
220
+ };
223
221
 
224
222
  // Register in your app's main.ts or plugin setup:
225
- app.config.globalProperties.$mergeLocaleMessage('fr', fr)
223
+ app.config.globalProperties.$mergeLocaleMessage("fr", fr);
226
224
  ```
227
225
 
228
226
  ### Overriding Specific Keys
@@ -230,13 +228,13 @@ app.config.globalProperties.$mergeLocaleMessage('fr', fr)
230
228
  Use `VcShellLocalePartial` for partial overrides — all keys are optional:
231
229
 
232
230
  ```typescript
233
- import type { VcShellLocalePartial } from '@vc-shell/framework/locales/types'
231
+ import type { VcShellLocalePartial } from "@vc-shell/framework/locales/types";
234
232
 
235
233
  const overrides: VcShellLocalePartial = {
236
- SHELL: { ACCOUNT: { LOGOUT: "Sign Out" } }
237
- }
234
+ SHELL: { ACCOUNT: { LOGOUT: "Sign Out" } },
235
+ };
238
236
 
239
- app.config.globalProperties.$mergeLocaleMessage('en', overrides)
237
+ app.config.globalProperties.$mergeLocaleMessage("en", overrides);
240
238
  ```
241
239
 
242
240
  ### Validating Your Translation
@@ -59,7 +59,11 @@ export default defineAppModule({
59
59
  ```vue
60
60
  <!-- modules/my-feature/pages/MyFeatureList.vue -->
61
61
  <template>
62
- <VcBlade title="My Feature" :closable="closable" @close="$emit('close:blade')">
62
+ <VcBlade
63
+ title="My Feature"
64
+ :closable="closable"
65
+ @close="$emit('close:blade')"
66
+ >
63
67
  <p>Hello from my first module!</p>
64
68
  </VcBlade>
65
69
  </template>
@@ -109,12 +113,12 @@ The module is installed by the host application (or loaded remotely via Module F
109
113
 
110
114
  A module is a **Vue plugin** created by `defineAppModule()`. It bundles everything a feature needs:
111
115
 
112
- | Asset | Purpose |
113
- |-------|---------|
114
- | **Blades** | Vue components registered in `BladeRegistry` for blade navigation |
115
- | **Locales** | Translation objects merged into the global vue-i18n instance |
116
- | **Notifications** | Notification type configurations for real-time push events |
117
- | **Dashboard widgets** | Cards displayed on the main dashboard (registered separately) |
116
+ | Asset | Purpose |
117
+ | --------------------- | ----------------------------------------------------------------- |
118
+ | **Blades** | Vue components registered in `BladeRegistry` for blade navigation |
119
+ | **Locales** | Translation objects merged into the global vue-i18n instance |
120
+ | **Notifications** | Notification type configurations for real-time push events |
121
+ | **Dashboard widgets** | Cards displayed on the main dashboard (registered separately) |
118
122
 
119
123
  Modules are self-contained: each module declares its own routes, menu entries, permissions, and translations. The framework composes them at runtime.
120
124
 
@@ -180,18 +184,20 @@ export default createAppModule(pages, locales, notificationTemplates, components
180
184
  export default defineAppModule({
181
185
  blades: pages,
182
186
  locales,
183
- notifications: { /* ... */ },
187
+ notifications: {
188
+ /* ... */
189
+ },
184
190
  });
185
191
  ```
186
192
 
187
193
  Key differences:
188
194
 
189
- | | `createAppModule` | `defineAppModule` |
190
- |---|---|---|
191
- | API style | Positional args | Named options object |
192
- | Notifications | `notificationTemplates` (legacy) | `notifications` (new typed config) |
195
+ | | `createAppModule` | `defineAppModule` |
196
+ | ----------------- | --------------------------------------- | ---------------------------------- |
197
+ | API style | Positional args | Named options object |
198
+ | Notifications | `notificationTemplates` (legacy) | `notifications` (new typed config) |
193
199
  | Global components | 4th arg registers via `app.component()` | Not supported (use provide/inject) |
194
- | Status | **Deprecated** -- will be removed | **Current** -- use this |
200
+ | Status | **Deprecated** -- will be removed | **Current** -- use this |
195
201
 
196
202
  Migration is a one-line change:
197
203
 
@@ -220,7 +226,7 @@ export default defineAppModule({
220
226
 
221
227
  // Notification type configurations (new API)
222
228
  notifications: {
223
- "OrderChangedEvent": {
229
+ OrderChangedEvent: {
224
230
  toast: { mode: "auto" },
225
231
  },
226
232
  },
@@ -249,14 +255,14 @@ export default defineAppModule({
249
255
 
250
256
  Each blade is registered in the `BladeRegistry` with:
251
257
 
252
- | Property | Source | Description |
253
- |----------|--------|-------------|
254
- | `name` | `component.name` or the export key | Unique identifier in the registry |
255
- | `component` | The Vue component itself | Used to render the blade |
256
- | `route` | `component.url` | URL path for routable blades |
257
- | `isWorkspace` | `component.isWorkspace` | `true` = top-level blade (fills the workspace) |
258
- | `routable` | `component.routable` | `true` = gets a Vue Router route (default: `true`) |
259
- | `permissions` | `component.permissions` | Required permissions to access the blade |
258
+ | Property | Source | Description |
259
+ | ------------- | ---------------------------------- | -------------------------------------------------- |
260
+ | `name` | `component.name` or the export key | Unique identifier in the registry |
261
+ | `component` | The Vue component itself | Used to render the blade |
262
+ | `route` | `component.url` | URL path for routable blades |
263
+ | `isWorkspace` | `component.isWorkspace` | `true` = top-level blade (fills the workspace) |
264
+ | `routable` | `component.routable` | `true` = gets a Vue Router route (default: `true`) |
265
+ | `permissions` | `component.permissions` | Required permissions to access the blade |
260
266
 
261
267
  > **Tip:** The export key (e.g., `ProductsList` in `{ ProductsList }`) is used as a fallback name when `component.name` is not defined. Always set `defineOptions({ name: "..." })` for clarity.
262
268
 
@@ -285,9 +291,9 @@ defineOptions({
285
291
 
286
292
  // Sidebar menu configuration. Only used if `url` is also set.
287
293
  menuItem: {
288
- title: "ORDERS.MENU.TITLE", // i18n key or plain string
289
- icon: "lucide-shopping-cart", // Icon name (lucide or fas)
290
- priority: 1, // Lower = higher in menu
294
+ title: "ORDERS.MENU.TITLE", // i18n key or plain string
295
+ icon: "lucide-shopping-cart", // Icon name (lucide or fas)
296
+ priority: 1, // Lower = higher in menu
291
297
  permissions: ["seller:orders:view"], // Optional override
292
298
  },
293
299
  });
@@ -318,9 +324,9 @@ defineOptions({
318
324
  url: "/products",
319
325
  isWorkspace: true,
320
326
  menuItem: {
321
- title: "PRODUCTS.MENU.TITLE", // Resolved via vue-i18n
327
+ title: "PRODUCTS.MENU.TITLE", // Resolved via vue-i18n
322
328
  icon: "lucide-package",
323
- priority: 10, // Sort order in the sidebar
329
+ priority: 10, // Sort order in the sidebar
324
330
  },
325
331
  permissions: ["seller:products:view"],
326
332
  });
@@ -353,27 +359,27 @@ export default defineAppModule({
353
359
  blades: { OrdersList },
354
360
  notifications: {
355
361
  // Simple: auto-show a toast when this event arrives
356
- "OrderCreatedEvent": {
362
+ OrderCreatedEvent: {
357
363
  toast: { mode: "auto" },
358
364
  },
359
365
 
360
366
  // With custom template and severity
361
- "OrderFailedEvent": {
367
+ OrderFailedEvent: {
362
368
  template: OrderNotification,
363
369
  toast: { mode: "auto", severity: "error" },
364
370
  },
365
371
 
366
372
  // Progress-style toast (e.g., long-running export)
367
- "ExportProgressEvent": {
373
+ ExportProgressEvent: {
368
374
  toast: {
369
375
  mode: "progress",
370
376
  isComplete: (msg) => msg.finished === true,
371
- completedType: (msg) => msg.errorCount > 0 ? "error" : "success",
377
+ completedType: (msg) => (msg.errorCount > 0 ? "error" : "success"),
372
378
  },
373
379
  },
374
380
 
375
381
  // Silent: stored in history, no toast
376
- "AuditLogEvent": {
382
+ AuditLogEvent: {
377
383
  toast: false,
378
384
  },
379
385
  },
@@ -382,21 +388,21 @@ export default defineAppModule({
382
388
 
383
389
  **`NotificationTypeConfig` options:**
384
390
 
385
- | Field | Type | Description |
386
- |-------|------|-------------|
387
- | `toast` | `ToastConfig \| false` | Toast display behavior. `false` = no toast (silent). |
388
- | `template` | `Component` | Custom Vue component for rendering in the notification panel |
389
- | `groupBy` | `string` | Group notifications by this field value |
391
+ | Field | Type | Description |
392
+ | ---------- | ---------------------- | ------------------------------------------------------------ |
393
+ | `toast` | `ToastConfig \| false` | Toast display behavior. `false` = no toast (silent). |
394
+ | `template` | `Component` | Custom Vue component for rendering in the notification panel |
395
+ | `groupBy` | `string` | Group notifications by this field value |
390
396
 
391
397
  **`ToastConfig` options:**
392
398
 
393
- | Field | Type | Default | Description |
394
- |-------|------|---------|-------------|
395
- | `mode` | `"auto" \| "progress" \| "silent"` | required | `auto` = show and auto-dismiss; `progress` = stay until complete; `silent` = no toast |
396
- | `severity` | `Severity \| (msg) => Severity` | `"info"` | Toast type: `"info"`, `"success"`, `"warning"`, `"error"` |
397
- | `timeout` | `number` | varies | Auto-dismiss timeout in milliseconds |
398
- | `isComplete` | `(msg) => boolean` | `msg.finished` | For `progress` mode: when to close the toast |
399
- | `completedType` | `(msg) => "success" \| "error"` | `() => "success"` | For `progress` mode: final toast type |
399
+ | Field | Type | Default | Description |
400
+ | --------------- | ---------------------------------- | ----------------- | ------------------------------------------------------------------------------------- |
401
+ | `mode` | `"auto" \| "progress" \| "silent"` | required | `auto` = show and auto-dismiss; `progress` = stay until complete; `silent` = no toast |
402
+ | `severity` | `Severity \| (msg) => Severity` | `"info"` | Toast type: `"info"`, `"success"`, `"warning"`, `"error"` |
403
+ | `timeout` | `number` | varies | Auto-dismiss timeout in milliseconds |
404
+ | `isComplete` | `(msg) => boolean` | `msg.finished` | For `progress` mode: when to close the toast |
405
+ | `completedType` | `(msg) => "success" \| "error"` | `() => "success"` | For `progress` mode: final toast type |
400
406
 
401
407
  ### Adding Locales
402
408
 
@@ -483,15 +489,15 @@ export default defineAppModule({ blades: pages, locales });
483
489
 
484
490
  **`DashboardWidget` options:**
485
491
 
486
- | Field | Type | Description |
487
- |-------|------|-------------|
488
- | `id` | `string` | Unique widget identifier |
489
- | `name` | `string` | Display name |
490
- | `component` | `Component` | Vue component to render |
491
- | `size` | `{ width: number; height: number }` | Grid size |
492
- | `position` | `{ x: number; y: number }` | Initial grid position (optional) |
493
- | `permissions` | `string[]` | Required permissions (optional) |
494
- | `props` | `Record<string, unknown>` | Props passed to the component (optional) |
492
+ | Field | Type | Description |
493
+ | ------------- | ----------------------------------- | ---------------------------------------- |
494
+ | `id` | `string` | Unique widget identifier |
495
+ | `name` | `string` | Display name |
496
+ | `component` | `Component` | Vue component to render |
497
+ | `size` | `{ width: number; height: number }` | Grid size |
498
+ | `position` | `{ x: number; y: number }` | Initial grid position (optional) |
499
+ | `permissions` | `string[]` | Required permissions (optional) |
500
+ | `props` | `Record<string, unknown>` | Props passed to the component (optional) |
495
501
 
496
502
  ### Module Version Compatibility
497
503
 
@@ -770,7 +776,9 @@ export default createAppModule(pages, locales, notificationTemplates);
770
776
  export default defineAppModule({
771
777
  blades: pages,
772
778
  locales,
773
- notifications: { /* ... */ },
779
+ notifications: {
780
+ /* ... */
781
+ },
774
782
  });
775
783
  ```
776
784
 
@@ -857,12 +865,12 @@ interface DefineAppModuleOptions {
857
865
 
858
866
  **Parameters:**
859
867
 
860
- | # | Parameter | Type | Description |
861
- |---|-----------|------|-------------|
862
- | 1 | `pages` | `Record<string, BladeInstanceConstructor>` | Blade components |
863
- | 2 | `locales` | `Record<string, object>` | Locale objects (optional) |
864
- | 3 | `notificationTemplates` | `Record<string, Component>` | Legacy notification templates (optional) |
865
- | 4 | `components` | `Record<string, Component>` | Global components (optional, ignored in new impl) |
868
+ | # | Parameter | Type | Description |
869
+ | --- | ----------------------- | ------------------------------------------ | ------------------------------------------------- |
870
+ | 1 | `pages` | `Record<string, BladeInstanceConstructor>` | Blade components |
871
+ | 2 | `locales` | `Record<string, object>` | Locale objects (optional) |
872
+ | 3 | `notificationTemplates` | `Record<string, Component>` | Legacy notification templates (optional) |
873
+ | 4 | `components` | `Record<string, Component>` | Global components (optional, ignored in new impl) |
866
874
 
867
875
  ---
868
876
 
@@ -886,22 +894,22 @@ interface DashboardWidget {
886
894
 
887
895
  ### Blade Static Properties (defineOptions)
888
896
 
889
- | Property | Type | Default | Description |
890
- |----------|------|---------|-------------|
891
- | `name` | `string` | export key | Unique blade identifier |
892
- | `url` | `string` | `undefined` | URL path for routing |
893
- | `isWorkspace` | `boolean` | `false` | Top-level workspace blade |
894
- | `routable` | `boolean` | `true` | Whether a Vue Router route is created |
895
- | `permissions` | `string[]` | `undefined` | Required access permissions |
896
- | `menuItem` | `MenuItemConfig` | `undefined` | Sidebar menu configuration |
897
+ | Property | Type | Default | Description |
898
+ | ------------- | ---------------- | ----------- | ------------------------------------- |
899
+ | `name` | `string` | export key | Unique blade identifier |
900
+ | `url` | `string` | `undefined` | URL path for routing |
901
+ | `isWorkspace` | `boolean` | `false` | Top-level workspace blade |
902
+ | `routable` | `boolean` | `true` | Whether a Vue Router route is created |
903
+ | `permissions` | `string[]` | `undefined` | Required access permissions |
904
+ | `menuItem` | `MenuItemConfig` | `undefined` | Sidebar menu configuration |
897
905
 
898
906
  **`MenuItemConfig`:**
899
907
 
900
- | Field | Type | Description |
901
- |-------|------|-------------|
902
- | `title` | `string` | Display text or i18n key |
903
- | `icon` | `string` | Icon name (lucide-* or fas fa-*) |
904
- | `priority` | `number` | Sort order (lower = higher in menu) |
908
+ | Field | Type | Description |
909
+ | ------------- | ---------- | --------------------------------------------------------------- |
910
+ | `title` | `string` | Display text or i18n key |
911
+ | `icon` | `string` | Icon name (lucide-_ or fas fa-_) |
912
+ | `priority` | `number` | Sort order (lower = higher in menu) |
905
913
  | `permissions` | `string[]` | Permission override (optional, falls back to blade permissions) |
906
914
 
907
915
  ---
@@ -937,13 +945,13 @@ interface ToastConfig {
937
945
 
938
946
  ## Related
939
947
 
940
- | Resource | Path | Description |
941
- |----------|------|-------------|
942
- | Extension Points Plugin | `core/plugins/extension-points/` | Cross-module UI extension system |
943
- | BladeRegistry | `core/composables/useBladeRegistry/` | Where blades are stored and looked up |
944
- | useMenuService | `core/composables/useMenuService/` | `addMenuItem()` for sidebar navigation |
945
- | useDashboard | `core/composables/useDashboard/` | Dashboard widget management |
946
- | NotificationStore | `core/notifications/` | Notification type registration and dispatch |
947
- | i18n Plugin | `core/plugins/i18n/` | vue-i18n singleton for locale merging |
948
- | mf-host | `packages/mf-host/` | Module Federation host that loads remote modules |
949
- | Blade Navigation | `shared/components/blade-navigation/` | Blade stack rendering and navigation |
948
+ | Resource | Path | Description |
949
+ | ----------------------- | ------------------------------------- | ------------------------------------------------ |
950
+ | Extension Points Plugin | `core/plugins/extension-points/` | Cross-module UI extension system |
951
+ | BladeRegistry | `core/composables/useBladeRegistry/` | Where blades are stored and looked up |
952
+ | useMenuService | `core/composables/useMenuService/` | `addMenuItem()` for sidebar navigation |
953
+ | useDashboard | `core/composables/useDashboard/` | Dashboard widget management |
954
+ | NotificationStore | `core/notifications/` | Notification type registration and dispatch |
955
+ | i18n Plugin | `core/plugins/i18n/` | vue-i18n singleton for locale merging |
956
+ | mf-host | `packages/mf-host/` | Module Federation host that loads remote modules |
957
+ | Blade Navigation | `shared/components/blade-navigation/` | Blade stack rendering and navigation |
@@ -39,14 +39,14 @@ Module developers use the composable or global property directly -- no registrat
39
39
 
40
40
  ### Global Property
41
41
 
42
- | Property | Type | Description |
43
- |----------|------|-------------|
42
+ | Property | Type | Description |
43
+ | ------------ | ----------------------------------------------------------- | --------------------------------------------------------- |
44
44
  | `$hasAccess` | `(permissions: string \| string[] \| undefined) => boolean` | Checks if the current user has the required permission(s) |
45
45
 
46
46
  ### Composable: `usePermissions()`
47
47
 
48
- | Export | Type | Description |
49
- |--------|------|-------------|
48
+ | Export | Type | Description |
49
+ | ----------- | ----------------------------------------------------------- | ------------------------------------- |
50
50
  | `hasAccess` | `(permissions: string \| string[] \| undefined) => boolean` | Returns `true` if the user has access |
51
51
 
52
52
  #### `hasAccess` Logic
@@ -63,19 +63,13 @@ Module developers use the composable or global property directly -- no registrat
63
63
  ```vue
64
64
  <template>
65
65
  <!-- Single permission check -->
66
- <VcButton v-if="$hasAccess('order:create')">
67
- Create Order
68
- </VcButton>
66
+ <VcButton v-if="$hasAccess('order:create')"> Create Order </VcButton>
69
67
 
70
68
  <!-- Multiple permissions (OR logic: any one is enough) -->
71
- <VcButton v-if="$hasAccess(['order:update', 'order:manage'])">
72
- Edit Order
73
- </VcButton>
69
+ <VcButton v-if="$hasAccess(['order:update', 'order:manage'])"> Edit Order </VcButton>
74
70
 
75
71
  <!-- No permission required (undefined = always visible) -->
76
- <VcButton v-if="$hasAccess(undefined)">
77
- View Dashboard
78
- </VcButton>
72
+ <VcButton v-if="$hasAccess(undefined)"> View Dashboard </VcButton>
79
73
  </template>
80
74
  ```
81
75
 
@@ -109,11 +103,11 @@ export default defineAppModule({
109
103
  OrdersList: {
110
104
  component: OrdersListBlade,
111
105
  route: "orders",
112
- permissions: ["order:read"], // Required to access this blade
106
+ permissions: ["order:read"], // Required to access this blade
113
107
  },
114
108
  OrderDetails: {
115
109
  component: OrderDetailsBlade,
116
- permissions: ["order:read", "order:manage"], // OR logic
110
+ permissions: ["order:read", "order:manage"], // OR logic
117
111
  },
118
112
  },
119
113
  });
@@ -129,7 +123,7 @@ const toolbar = useToolbar([
129
123
  id: "save",
130
124
  title: "Save",
131
125
  icon: "lucide-save",
132
- permissions: "order:update", // Only shown if user has this permission
126
+ permissions: "order:update", // Only shown if user has this permission
133
127
  clickHandler: () => saveOrder(),
134
128
  },
135
129
  {
@@ -35,27 +35,27 @@ Module developers do not install this plugin. It is registered once by the frame
35
35
 
36
36
  ### Plugin Options
37
37
 
38
- | Option | Type | Description |
39
- |--------|------|-------------|
38
+ | Option | Type | Description |
39
+ | --------- | --------------------- | -------------------------------------------------------------------------- |
40
40
  | `creator` | `string \| undefined` | Filters `SendSystemEvents` messages to only those matching this creator ID |
41
41
 
42
42
  ### Exports
43
43
 
44
- | Export | Type | Description |
45
- |--------|------|-------------|
46
- | `signalR` | `Plugin` | Vue plugin object with `install()` method |
44
+ | Export | Type | Description |
45
+ | ---------------------------- | -------------- | --------------------------------------------- |
46
+ | `signalR` | `Plugin` | Vue plugin object with `install()` method |
47
47
  | `updateSignalRCreatorSymbol` | `InjectionKey` | Injection key for the creator update function |
48
48
 
49
49
  ### Provided Injectables
50
50
 
51
- | Key | Type | Description |
52
- |-----|------|-------------|
51
+ | Key | Type | Description |
52
+ | ---------------------------- | ---------------------------------------- | --------------------------------------------- |
53
53
  | `updateSignalRCreatorSymbol` | `(creator: string \| undefined) => void` | Updates the SignalR creator filter at runtime |
54
54
 
55
55
  ### Global Properties
56
56
 
57
- | Property | Type | Description |
58
- |----------|------|-------------|
57
+ | Property | Type | Description |
58
+ | ----------------------- | ---------------------------------------- | ------------------------------------------------------------------- |
59
59
  | `$updateSignalRCreator` | `(creator: string \| undefined) => void` | Same as the injectable, accessible via `this.$updateSignalRCreator` |
60
60
 
61
61
  ## Connection Lifecycle
@@ -32,11 +32,11 @@ Object.entries(allRules).forEach(([name, rule]) => {
32
32
  });
33
33
 
34
34
  // Then register custom vc-shell rules
35
- defineRule("mindimensions", /* ... */);
36
- defineRule("fileWeight", /* ... */);
37
- defineRule("before", /* ... */);
38
- defineRule("after", /* ... */);
39
- defineRule("bigint", /* ... */);
35
+ defineRule("mindimensions" /* ... */);
36
+ defineRule("fileWeight" /* ... */);
37
+ defineRule("before" /* ... */);
38
+ defineRule("after" /* ... */);
39
+ defineRule("bigint" /* ... */);
40
40
  ```
41
41
 
42
42
  ## API
@@ -47,13 +47,13 @@ All rules from `@vee-validate/rules` are registered: `required`, `email`, `min`,
47
47
 
48
48
  ### Custom Rules
49
49
 
50
- | Rule | Params | Description |
51
- |------|--------|-------------|
52
- | `mindimensions` | `[width, height]` | Validates image files meet minimum pixel dimensions |
53
- | `fileWeight` | `[sizeInKB]` | Validates file size does not exceed the limit (in kilobytes) |
54
- | `before` | `[targetDate]` | Validates date is before the target date |
55
- | `after` | `[targetDate]` | Validates date is after the target date |
56
- | `bigint` | -- | Validates the value is a safe integer (`Number.isSafeInteger`) |
50
+ | Rule | Params | Description |
51
+ | --------------- | ----------------- | -------------------------------------------------------------- |
52
+ | `mindimensions` | `[width, height]` | Validates image files meet minimum pixel dimensions |
53
+ | `fileWeight` | `[sizeInKB]` | Validates file size does not exceed the limit (in kilobytes) |
54
+ | `before` | `[targetDate]` | Validates date is before the target date |
55
+ | `after` | `[targetDate]` | Validates date is after the target date |
56
+ | `bigint` | -- | Validates the value is a safe integer (`Number.isSafeInteger`) |
57
57
 
58
58
  ## Usage
59
59
 
@@ -63,16 +63,40 @@ The simplest approach for inline rule declarations:
63
63
 
64
64
  ```vue
65
65
  <template>
66
- <VcField name="email" rules="required|email" v-slot="{ field, errors }">
67
- <VcInput v-bind="field" :error-message="errors[0]" label="Email" />
66
+ <VcField
67
+ name="email"
68
+ rules="required|email"
69
+ v-slot="{ field, errors }"
70
+ >
71
+ <VcInput
72
+ v-bind="field"
73
+ :error-message="errors[0]"
74
+ label="Email"
75
+ />
68
76
  </VcField>
69
77
 
70
- <VcField name="username" rules="required|min:3|max:50" v-slot="{ field, errors }">
71
- <VcInput v-bind="field" :error-message="errors[0]" label="Username" />
78
+ <VcField
79
+ name="username"
80
+ rules="required|min:3|max:50"
81
+ v-slot="{ field, errors }"
82
+ >
83
+ <VcInput
84
+ v-bind="field"
85
+ :error-message="errors[0]"
86
+ label="Username"
87
+ />
72
88
  </VcField>
73
89
 
74
- <VcField name="age" rules="required|numeric|between:18,120" v-slot="{ field, errors }">
75
- <VcInput v-bind="field" :error-message="errors[0]" label="Age" />
90
+ <VcField
91
+ name="age"
92
+ rules="required|numeric|between:18,120"
93
+ v-slot="{ field, errors }"
94
+ >
95
+ <VcInput
96
+ v-bind="field"
97
+ :error-message="errors[0]"
98
+ label="Age"
99
+ />
76
100
  </VcField>
77
101
  </template>
78
102
  ```
@@ -105,12 +129,31 @@ const endDateRules = computed(() => `required|after:${startDate.value}`);
105
129
  </script>
106
130
 
107
131
  <template>
108
- <VcField name="startDate" rules="required" v-slot="{ field, errors }">
109
- <VcInput type="date" v-bind="field" v-model="startDate" :error-message="errors[0]" label="Start Date" />
132
+ <VcField
133
+ name="startDate"
134
+ rules="required"
135
+ v-slot="{ field, errors }"
136
+ >
137
+ <VcInput
138
+ type="date"
139
+ v-bind="field"
140
+ v-model="startDate"
141
+ :error-message="errors[0]"
142
+ label="Start Date"
143
+ />
110
144
  </VcField>
111
145
 
112
- <VcField name="endDate" :rules="endDateRules" v-slot="{ field, errors }">
113
- <VcInput type="date" v-bind="field" :error-message="errors[0]" label="End Date" />
146
+ <VcField
147
+ name="endDate"
148
+ :rules="endDateRules"
149
+ v-slot="{ field, errors }"
150
+ >
151
+ <VcInput
152
+ type="date"
153
+ v-bind="field"
154
+ :error-message="errors[0]"
155
+ label="End Date"
156
+ />
114
157
  </VcField>
115
158
  </template>
116
159
  ```