@vc-shell/vc-app-skill 2.0.0-alpha.32 → 2.0.0-alpha.33-pr220.455e322

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 +59 -47
  2. package/README.md +18 -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 +94 -0
  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 +31 -27
  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 +75 -19
  29. package/runtime/knowledge/docs/core/composables/useBladeRegistry/useBladeRegistry.docs.md +15 -15
  30. package/runtime/knowledge/docs/core/composables/useBladeWidgets/index.docs.md +74 -78
  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 +10 -10
  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/usePopup/usePopup.docs.md +32 -24
  46. package/runtime/knowledge/docs/core/composables/useResponsive/useResponsive.docs.md +32 -11
  47. package/runtime/knowledge/docs/core/composables/useSettings/useSettings.docs.md +24 -15
  48. package/runtime/knowledge/docs/core/composables/useSettingsMenu/useSettingsMenu.docs.md +7 -7
  49. package/runtime/knowledge/docs/core/composables/useSidebarState/useSidebarState.docs.md +32 -24
  50. package/runtime/knowledge/docs/core/composables/useSlowNetworkDetection/useSlowNetworkDetection.docs.md +21 -17
  51. package/runtime/knowledge/docs/core/composables/useTheme/useTheme.docs.md +24 -24
  52. package/runtime/knowledge/docs/core/composables/useToolbar/useToolbar.docs.md +28 -31
  53. package/runtime/knowledge/docs/core/composables/useUser/useUser.docs.md +43 -24
  54. package/runtime/knowledge/docs/core/composables/useUserManagement/useUserManagement.docs.md +68 -48
  55. package/runtime/knowledge/docs/core/composables/useWebVitals/useWebVitals.docs.md +19 -19
  56. package/runtime/knowledge/docs/core/composables/useWidgets/useWidgets.docs.md +42 -47
  57. package/runtime/knowledge/docs/core/directives/autofocus/autofocus.docs.md +10 -4
  58. package/runtime/knowledge/docs/core/directives/loading/loading.docs.md +35 -20
  59. package/runtime/knowledge/docs/core/notifications/notifications.docs.md +36 -35
  60. package/runtime/knowledge/docs/core/plugins/ai-agent/ai-agent.docs.md +38 -38
  61. package/runtime/knowledge/docs/core/plugins/extension-points/extension-points.docs.md +107 -91
  62. package/runtime/knowledge/docs/core/plugins/global-error-handler/global-error-handler.docs.md +10 -10
  63. package/runtime/knowledge/docs/core/plugins/i18n/i18n.docs.md +21 -23
  64. package/runtime/knowledge/docs/core/plugins/modularity/modularity.docs.md +98 -90
  65. package/runtime/knowledge/docs/core/plugins/permissions/permissions.docs.md +10 -16
  66. package/runtime/knowledge/docs/core/plugins/signalR/signalR.docs.md +9 -9
  67. package/runtime/knowledge/docs/core/plugins/validation/validation.docs.md +65 -22
  68. package/runtime/knowledge/docs/core/services/services.docs.md +19 -22
  69. package/runtime/knowledge/docs/core/types/types.docs.md +40 -40
  70. package/runtime/knowledge/docs/core/utilities/date/date-utilities.docs.md +27 -27
  71. package/runtime/knowledge/docs/core/utilities/shared-utilities.docs.md +23 -23
  72. package/runtime/knowledge/docs/core/utilities/thumbnail/thumbnail.docs.md +22 -25
  73. package/runtime/knowledge/docs/core/utilities/utilities.docs.md +64 -64
  74. package/runtime/knowledge/docs/injection-keys.docs.md +52 -51
  75. package/runtime/knowledge/docs/modules/assets-manager/assets-manager.docs.md +9 -9
  76. package/runtime/knowledge/docs/shell/_internal/popup/common/popup-common.docs.md +23 -43
  77. package/runtime/knowledge/docs/shell/auth/ChangePasswordPage/change-password-page.docs.md +102 -0
  78. package/runtime/knowledge/docs/shell/auth/ForgotPasswordPage/forgot-password-page.docs.md +5 -5
  79. package/runtime/knowledge/docs/shell/auth/InvitePage/invite-page.docs.md +8 -7
  80. package/runtime/knowledge/docs/shell/auth/LoginPage/login-page.docs.md +7 -7
  81. package/runtime/knowledge/docs/shell/auth/ResetPasswordPage/reset-password-page.docs.md +8 -7
  82. package/runtime/knowledge/docs/shell/auth/sign-in/sign-in.docs.md +29 -13
  83. package/runtime/knowledge/docs/shell/components/change-password/change-password.docs.md +13 -16
  84. package/runtime/knowledge/docs/shell/components/change-password-button/change-password-button.docs.md +1 -7
  85. package/runtime/knowledge/docs/shell/components/error-interceptor/error-interceptor.docs.md +5 -5
  86. package/runtime/knowledge/docs/shell/components/language-selector/language-selector.docs.md +1 -1
  87. package/runtime/knowledge/docs/shell/components/logout-button/logout-button.docs.md +1 -1
  88. package/runtime/knowledge/docs/shell/components/notification-template/notification-template.docs.md +17 -9
  89. package/runtime/knowledge/docs/shell/components/settings-menu/settings-menu.docs.md +12 -18
  90. package/runtime/knowledge/docs/shell/components/settings-menu-item/settings-menu-item.docs.md +34 -65
  91. package/runtime/knowledge/docs/shell/components/sidebar/sidebar.docs.md +16 -26
  92. package/runtime/knowledge/docs/shell/components/theme-selector/theme-selector.docs.md +2 -2
  93. package/runtime/knowledge/docs/shell/components/user-dropdown-button/user-dropdown-button.docs.md +7 -9
  94. package/runtime/knowledge/docs/shell/dashboard/dashboard-charts/dashboard-charts.docs.md +30 -40
  95. package/runtime/knowledge/docs/shell/dashboard/dashboard-widget-card/dashboard-widget-card.docs.md +26 -19
  96. package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/draggable-dashboard.docs.md +15 -12
  97. package/runtime/knowledge/docs/ui/components/atoms/vc-badge/vc-badge.docs.md +15 -26
  98. package/runtime/knowledge/docs/ui/components/atoms/vc-banner/vc-banner.docs.md +21 -19
  99. package/runtime/knowledge/docs/ui/components/atoms/vc-button/vc-button.docs.md +83 -67
  100. package/runtime/knowledge/docs/ui/components/atoms/vc-card/vc-card.docs.md +104 -59
  101. package/runtime/knowledge/docs/ui/components/atoms/vc-col/vc-col.docs.md +28 -11
  102. package/runtime/knowledge/docs/ui/components/atoms/vc-container/vc-container.docs.md +20 -17
  103. package/runtime/knowledge/docs/ui/components/atoms/vc-hint/vc-hint.docs.md +26 -17
  104. package/runtime/knowledge/docs/ui/components/atoms/vc-icon/vc-icon.docs.md +30 -32
  105. package/runtime/knowledge/docs/ui/components/atoms/vc-image/vc-image.docs.md +25 -48
  106. package/runtime/knowledge/docs/ui/components/atoms/vc-label/vc-label.docs.md +29 -24
  107. package/runtime/knowledge/docs/ui/components/atoms/vc-link/vc-link.docs.md +23 -15
  108. package/runtime/knowledge/docs/ui/components/atoms/vc-loading/vc-loading.docs.md +22 -13
  109. package/runtime/knowledge/docs/ui/components/atoms/vc-progress/vc-progress.docs.md +33 -18
  110. package/runtime/knowledge/docs/ui/components/atoms/vc-row/vc-row.docs.md +56 -15
  111. package/runtime/knowledge/docs/ui/components/atoms/vc-scrollable-container/vc-scrollable-container.docs.md +28 -15
  112. package/runtime/knowledge/docs/ui/components/atoms/vc-skeleton/vc-skeleton.docs.md +40 -20
  113. package/runtime/knowledge/docs/ui/components/atoms/vc-status/vc-status.docs.md +25 -14
  114. package/runtime/knowledge/docs/ui/components/atoms/vc-status-icon/vc-status-icon.docs.md +40 -14
  115. package/runtime/knowledge/docs/ui/components/atoms/vc-tooltip/vc-tooltip.docs.md +54 -42
  116. package/runtime/knowledge/docs/ui/components/atoms/vc-video/vc-video.docs.md +17 -17
  117. package/runtime/knowledge/docs/ui/components/atoms/vc-widget/vc-widget.docs.md +21 -21
  118. package/runtime/knowledge/docs/ui/components/molecules/multilanguage-selector/multilanguage-selector.docs.md +23 -10
  119. package/runtime/knowledge/docs/ui/components/molecules/vc-accordion/vc-accordion.docs.md +59 -44
  120. package/runtime/knowledge/docs/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.docs.md +23 -20
  121. package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox/vc-checkbox.docs.md +96 -64
  122. package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox-group/vc-checkbox-group.docs.md +26 -35
  123. package/runtime/knowledge/docs/ui/components/molecules/vc-color-input/vc-color-input.docs.md +69 -22
  124. package/runtime/knowledge/docs/ui/components/molecules/vc-date-picker/vc-date-picker.docs.md +58 -72
  125. package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown/vc-dropdown.docs.md +91 -85
  126. package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown-panel/vc-dropdown-panel.docs.md +38 -42
  127. package/runtime/knowledge/docs/ui/components/molecules/vc-editor/vc-editor.docs.md +60 -72
  128. package/runtime/knowledge/docs/ui/components/molecules/vc-field/vc-field.docs.md +65 -26
  129. package/runtime/knowledge/docs/ui/components/molecules/vc-file-upload/vc-file-upload.docs.md +46 -49
  130. package/runtime/knowledge/docs/ui/components/molecules/vc-form/vc-form.docs.md +35 -64
  131. package/runtime/knowledge/docs/ui/components/molecules/vc-image-tile/vc-image-tile.docs.md +38 -41
  132. package/runtime/knowledge/docs/ui/components/molecules/vc-input/vc-input.docs.md +115 -130
  133. package/runtime/knowledge/docs/ui/components/molecules/vc-input-currency/vc-input-currency.docs.md +53 -87
  134. package/runtime/knowledge/docs/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.docs.md +56 -63
  135. package/runtime/knowledge/docs/ui/components/molecules/vc-input-group/vc-input-group.docs.md +29 -24
  136. package/runtime/knowledge/docs/ui/components/molecules/vc-menu/vc-menu.docs.md +32 -28
  137. package/runtime/knowledge/docs/ui/components/molecules/vc-multivalue/vc-multivalue.docs.md +63 -64
  138. package/runtime/knowledge/docs/ui/components/molecules/vc-pagination/vc-pagination.docs.md +28 -26
  139. package/runtime/knowledge/docs/ui/components/molecules/vc-radio-button/vc-radio-button.docs.md +59 -19
  140. package/runtime/knowledge/docs/ui/components/molecules/vc-radio-group/vc-radio-group.docs.md +25 -34
  141. package/runtime/knowledge/docs/ui/components/molecules/vc-rating/vc-rating.docs.md +42 -32
  142. package/runtime/knowledge/docs/ui/components/molecules/vc-select/vc-select.docs.md +78 -82
  143. package/runtime/knowledge/docs/ui/components/molecules/vc-slider/vc-slider.docs.md +25 -15
  144. package/runtime/knowledge/docs/ui/components/molecules/vc-switch/vc-switch.docs.md +59 -63
  145. package/runtime/knowledge/docs/ui/components/molecules/vc-textarea/vc-textarea.docs.md +57 -69
  146. package/runtime/knowledge/docs/ui/components/molecules/vc-toast/vc-toast.docs.md +58 -57
  147. package/runtime/knowledge/docs/ui/components/organisms/vc-app/vc-app.docs.md +49 -26
  148. package/runtime/knowledge/docs/ui/components/organisms/vc-auth-layout/vc-auth-layout.docs.md +82 -28
  149. package/runtime/knowledge/docs/ui/components/organisms/vc-blade/vc-blade.docs.md +120 -75
  150. package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/composables/table-composables.docs.md +30 -44
  151. package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/vc-data-table.docs.md +536 -365
  152. package/runtime/knowledge/docs/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.docs.md +35 -52
  153. package/runtime/knowledge/docs/ui/components/organisms/vc-gallery/vc-gallery.docs.md +33 -62
  154. package/runtime/knowledge/docs/ui/components/organisms/vc-image-upload/vc-image-upload.docs.md +17 -23
  155. package/runtime/knowledge/docs/ui/components/organisms/vc-popup/vc-popup.docs.md +109 -68
  156. package/runtime/knowledge/docs/ui/components/organisms/vc-sidebar/vc-sidebar.docs.md +82 -44
  157. package/runtime/knowledge/docs/ui/composables/ui-composables.docs.md +8 -8
  158. package/runtime/knowledge/docs/ui/composables/useDataTablePagination.docs.md +164 -0
  159. package/runtime/knowledge/docs/ui/composables/useDataTableSort.docs.md +34 -26
  160. package/runtime/knowledge/docs/ui/composables/useTableSelection.docs.md +48 -40
  161. package/runtime/knowledge/docs/ui/composables/useTableSort.docs.md +30 -17
  162. package/runtime/knowledge/docs/ui/types/ui-types.docs.md +40 -29
  163. package/runtime/knowledge/examples/offers-module.md +15 -13
  164. package/runtime/knowledge/examples/team-module.md +82 -119
  165. package/runtime/knowledge/examples/videos-module.md +44 -17
  166. package/runtime/knowledge/index.md +22 -0
  167. package/runtime/knowledge/migration-prompts/blade-form-migration.md +255 -0
  168. package/runtime/knowledge/migration-prompts/blade-props-migration.md +194 -0
  169. package/runtime/knowledge/migration-prompts/datatable-migration.md +801 -0
  170. package/runtime/knowledge/migration-prompts/icon-migration.md +97 -0
  171. package/runtime/knowledge/migration-prompts/manual-migration-audit.md +117 -0
  172. package/runtime/knowledge/migration-prompts/notifications-migration.md +223 -0
  173. package/runtime/knowledge/migration-prompts/nswag-migration.md +244 -0
  174. package/runtime/knowledge/migration-prompts/use-assets-migration.md +164 -0
  175. package/runtime/knowledge/migration-prompts/use-data-table-pagination-migration.md +176 -0
  176. package/runtime/knowledge/migration-prompts/widgets-migration.md +178 -0
  177. package/runtime/knowledge/patterns/assets-management.md +20 -20
  178. package/runtime/knowledge/patterns/blade-navigation.md +7 -14
  179. package/runtime/knowledge/patterns/blade-widget.md +19 -17
  180. package/runtime/knowledge/patterns/child-blade-flow.md +19 -7
  181. package/runtime/knowledge/patterns/composable-details.md +20 -50
  182. package/runtime/knowledge/patterns/composable-list.md +43 -31
  183. package/runtime/knowledge/patterns/dashboard-widget.md +14 -16
  184. package/runtime/knowledge/patterns/datatable-pattern.md +521 -0
  185. package/runtime/knowledge/patterns/details-blade-pattern.md +78 -116
  186. package/runtime/knowledge/patterns/extension-points-usage.md +53 -44
  187. package/runtime/knowledge/patterns/form-validation.md +28 -64
  188. package/runtime/knowledge/patterns/list-blade-pattern.md +33 -21
  189. package/runtime/knowledge/patterns/module-structure.md +7 -1
  190. package/runtime/knowledge/patterns/multilanguage-fields.md +8 -14
  191. package/runtime/knowledge/patterns/notification-template.md +21 -14
  192. package/runtime/knowledge/patterns/signalr-notifications.md +30 -32
  193. package/runtime/knowledge/patterns/toolbar-pattern.md +18 -20
  194. package/runtime/vc-app.md +354 -49
  195. package/runtime/knowledge/docs/core/constants/constants.docs.md +0 -185
@@ -9,6 +9,7 @@ The vc-shell framework uses Vue's provide/inject mechanism extensively to share
9
9
  All keys are defined in a single file (`framework/injection-keys.ts`) to avoid symbol duplication and ensure type safety. The app shell provides these values at the root during bootstrap; components and composables inject them using the corresponding key.
10
10
 
11
11
  This centralized approach has several advantages:
12
+
12
13
  - **Type safety**: `inject(MenuServiceKey)` returns `MenuService | undefined`, not `unknown`
13
14
  - **No symbol collisions**: each key is a unique `Symbol`, preventing accidental overwrites
14
15
  - **Testability**: services can be mocked by providing different values in test wrappers
@@ -18,76 +19,76 @@ This centralized approach has several advantages:
18
19
 
19
20
  ### Blade Navigation
20
21
 
21
- | Key | Type | Description |
22
- |-----|------|-------------|
23
- | `NavigationViewLocationKey` | `BladeVNode` | Current blade VNode location in navigation |
24
- | `BladeDescriptorKey` | `ComputedRef<BladeDescriptor>` | Current blade descriptor metadata |
25
- | `BladeBackButtonKey` | `Component \| undefined` | Custom back button component for a blade |
26
- | `BladeDataKey` | *(from blade-navigation types)* | Data passed between parent/child blades |
27
- | `BladeContextKey` | `ComputedRef<Record<string, unknown>>` | Blade-exposed context for widgets/extensions |
28
- | `BladeRoutesKey` | `BladeRoutesRecord[]` | Registered blade routes |
29
- | `InternalRoutesKey` | `BladeRoutesRecord[]` | Internal framework routes |
22
+ | Key | Type | Description |
23
+ | --------------------------- | -------------------------------------- | -------------------------------------------- |
24
+ | `NavigationViewLocationKey` | `BladeVNode` | Current blade VNode location in navigation |
25
+ | `BladeDescriptorKey` | `ComputedRef<BladeDescriptor>` | Current blade descriptor metadata |
26
+ | `BladeBackButtonKey` | `Component \| undefined` | Custom back button component for a blade |
27
+ | `BladeDataKey` | _(from blade-navigation types)_ | Data passed between parent/child blades |
28
+ | `BladeContextKey` | `ComputedRef<Record<string, unknown>>` | Blade-exposed context for widgets/extensions |
29
+ | `BladeRoutesKey` | `BladeRoutesRecord[]` | Registered blade routes |
30
+ | `InternalRoutesKey` | `BladeRoutesRecord[]` | Internal framework routes |
30
31
 
31
32
  ### Notifications
32
33
 
33
- | Key | Type | Description |
34
- |-----|------|-------------|
34
+ | Key | Type | Description |
35
+ | -------------------------- | ----------------------------------- | ------------------------------------------- |
35
36
  | `NotificationTemplatesKey` | `NotificationTemplateConstructor[]` | Registered notification template components |
36
- | `NotificationStoreKey` | `NotificationStore` | Shared notification store singleton |
37
+ | `NotificationStoreKey` | `NotificationStore` | Shared notification store singleton |
37
38
 
38
39
  ### Services
39
40
 
40
- | Key | Type | Description |
41
- |-----|------|-------------|
42
- | `WidgetServiceKey` | `IWidgetService` | Widget registration and lookup |
43
- | `DashboardServiceKey` | `IDashboardService` | Dashboard widget management |
44
- | `GlobalSearchKey` | `GlobalSearchState` | Global search state |
45
- | `MenuServiceKey` | `MenuService` | Main navigation menu |
46
- | `SettingsMenuServiceKey` | `ISettingsMenuService` | Settings sidebar menu |
47
- | `AppBarWidgetServiceKey` | `IAppBarWidgetService` | App bar widget slots |
48
- | `AppBarMobileButtonsServiceKey` | `IAppBarMobileButtonsService` | Mobile app bar buttons |
49
- | `LanguageServiceKey` | `ILanguageService` | Localization service |
50
- | `ToolbarServiceKey` | `IToolbarService` | Blade toolbar actions |
51
- | `AiAgentServiceKey` | `IAiAgentService` | AI agent integration |
41
+ | Key | Type | Description |
42
+ | ------------------------------- | ----------------------------- | ------------------------------ |
43
+ | `WidgetServiceKey` | `IWidgetService` | Widget registration and lookup |
44
+ | `DashboardServiceKey` | `IDashboardService` | Dashboard widget management |
45
+ | `GlobalSearchKey` | `GlobalSearchState` | Global search state |
46
+ | `MenuServiceKey` | `MenuService` | Main navigation menu |
47
+ | `SettingsMenuServiceKey` | `ISettingsMenuService` | Settings sidebar menu |
48
+ | `AppBarWidgetServiceKey` | `IAppBarWidgetService` | App bar widget slots |
49
+ | `AppBarMobileButtonsServiceKey` | `IAppBarMobileButtonsService` | Mobile app bar buttons |
50
+ | `LanguageServiceKey` | `ILanguageService` | Localization service |
51
+ | `ToolbarServiceKey` | `IToolbarService` | Blade toolbar actions |
52
+ | `AiAgentServiceKey` | `IAiAgentService` | AI agent integration |
52
53
 
53
54
  ### Module System
54
55
 
55
- | Key | Type | Description |
56
- |-----|------|-------------|
57
- | `DynamicModulesKey` | `DynamicModuleRegistry \| undefined` | Registry of loaded dynamic modules (extensible via declaration merging) |
58
- | `ModulesReadyKey` | `Ref<boolean>` | Whether all modules have finished loading |
59
- | `ModulesLoadErrorKey` | `Ref<boolean>` | Whether all modules failed to load |
56
+ | Key | Type | Description |
57
+ | --------------------- | ------------------------------------ | ----------------------------------------------------------------------- |
58
+ | `DynamicModulesKey` | `DynamicModuleRegistry \| undefined` | Registry of loaded dynamic modules (extensible via declaration merging) |
59
+ | `ModulesReadyKey` | `Ref<boolean>` | Whether all modules have finished loading |
60
+ | `ModulesLoadErrorKey` | `Ref<boolean>` | Whether all modules failed to load |
60
61
 
61
62
  ### UI State
62
63
 
63
- | Key | Type | Description |
64
- |-----|------|-------------|
65
- | `WidgetScopeKey` | `IWidgetScope` | Widget scope (provided by WidgetContainer for component-based widgets via `WidgetScope.vue`) |
66
- | `AppRootElementKey` | `Ref<HTMLElement \| undefined>` | App root element for scoped Teleport |
67
- | `EmbeddedModeKey` | `boolean` | Whether the app runs in embedded mode |
68
- | `ShellIndicatorsKey` | `ComputedRef<boolean>` | Unread indicator state for sidebar |
69
- | `CloseSettingsMenuKey` | `() => void` | Callback to close the settings menu |
64
+ | Key | Type | Description |
65
+ | ---------------------- | ------------------------------- | -------------------------------------------------------------------------------------------- |
66
+ | `WidgetScopeKey` | `IWidgetScope` | Widget scope (provided by WidgetContainer for component-based widgets via `WidgetScope.vue`) |
67
+ | `AppRootElementKey` | `Ref<HTMLElement \| undefined>` | App root element for scoped Teleport |
68
+ | `EmbeddedModeKey` | `boolean` | Whether the app runs in embedded mode |
69
+ | `ShellIndicatorsKey` | `ComputedRef<boolean>` | Unread indicator state for sidebar |
70
+ | `CloseSettingsMenuKey` | `() => void` | Callback to close the settings menu |
70
71
 
71
72
  ### Breakpoints
72
73
 
73
- | Key | Type | Description |
74
- |-----|------|-------------|
75
- | `IsMobileKey` | `Ref<boolean>` | Mobile breakpoint |
76
- | `IsDesktopKey` | `Ref<boolean>` | Desktop breakpoint |
77
- | `IsPhoneKey` | `Ref<boolean>` | Phone breakpoint |
78
- | `IsTabletKey` | `Ref<boolean>` | Tablet breakpoint |
79
- | `IsTouchKey` | `boolean` | Touch device detection |
74
+ | Key | Type | Description |
75
+ | -------------- | -------------- | ---------------------- |
76
+ | `IsMobileKey` | `Ref<boolean>` | Mobile breakpoint |
77
+ | `IsDesktopKey` | `Ref<boolean>` | Desktop breakpoint |
78
+ | `IsPhoneKey` | `Ref<boolean>` | Phone breakpoint |
79
+ | `IsTabletKey` | `Ref<boolean>` | Tablet breakpoint |
80
+ | `IsTouchKey` | `boolean` | Touch device detection |
80
81
 
81
82
  ### Legacy Aliases (Deprecated)
82
83
 
83
- | Deprecated | Use Instead |
84
- |------------|-------------|
85
- | `navigationViewLocation` | `NavigationViewLocationKey` |
86
- | `BladeDescriptor` | `BladeDescriptorKey` |
87
- | `NotificationTemplatesSymbol` | `NotificationTemplatesKey` |
88
- | `BLADE_BACK_BUTTON` | `BladeBackButtonKey` |
89
- | `TOOLBAR_SERVICE` | `ToolbarServiceKey` |
90
- | `EMBEDDED_MODE` | `EmbeddedModeKey` |
84
+ | Deprecated | Use Instead |
85
+ | ----------------------------- | --------------------------- |
86
+ | `navigationViewLocation` | `NavigationViewLocationKey` |
87
+ | `BladeDescriptor` | `BladeDescriptorKey` |
88
+ | `NotificationTemplatesSymbol` | `NotificationTemplatesKey` |
89
+ | `BLADE_BACK_BUTTON` | `BladeBackButtonKey` |
90
+ | `TOOLBAR_SERVICE` | `ToolbarServiceKey` |
91
+ | `EMBEDDED_MODE` | `EmbeddedModeKey` |
91
92
 
92
93
  ## Usage Examples
93
94
 
@@ -21,12 +21,12 @@ The module exports `AssetsManagerModule` (a Vue plugin) and the `AssetsManager`
21
21
 
22
22
  The blade reads its configuration from `options` via `useBlade<AssetsManagerOptions>()` (not props):
23
23
 
24
- | Option | Type | Description |
25
- |---|---|---|
26
- | `title` | `string?` | Custom blade title (defaults to i18n `ASSETS_MANAGER.TITLE`) |
27
- | `manager` | `UseAssetsManagerReturn` | The asset manager instance from `useAssetsManager()`. **Must be wrapped in `markRaw()`** |
28
- | `disabled` | `boolean?` | When true, hides upload/delete actions and disables reordering |
29
- | `hiddenFields` | `string[]?` | Fields to hide in the detail view |
24
+ | Option | Type | Description |
25
+ | -------------- | ------------------------ | ---------------------------------------------------------------------------------------- |
26
+ | `title` | `string?` | Custom blade title (defaults to i18n `ASSETS_MANAGER.TITLE`) |
27
+ | `manager` | `UseAssetsManagerReturn` | The asset manager instance from `useAssetsManager()`. **Must be wrapped in `markRaw()`** |
28
+ | `disabled` | `boolean?` | When true, hides upload/delete actions and disables reordering |
29
+ | `hiddenFields` | `string[]?` | Fields to hide in the detail view |
30
30
 
31
31
  > **Breaking change:** The old options (`assets`, `loading`, `assetsUploadHandler`, `assetsEditHandler`, `assetsRemoveHandler`) have been removed. Pass a single `manager` instance instead. See [migration guide #32](../../../migration/32-use-assets-manager.md).
32
32
 
@@ -71,9 +71,9 @@ openBlade({
71
71
 
72
72
  ## Toolbar
73
73
 
74
- | Button | Condition | Action |
75
- |---|---|---|
76
- | Add | `!disabled` | Opens file picker for upload |
74
+ | Button | Condition | Action |
75
+ | ------ | ------------------------------ | ------------------------------------------------ |
76
+ | Add | `!disabled` | Opens file picker for upload |
77
77
  | Delete | `!disabled` and items selected | Calls `manager.removeMany()` with selected items |
78
78
 
79
79
  ## Tips
@@ -12,18 +12,18 @@ These components provide ready-to-use modal dialogs for common scenarios. Each v
12
12
 
13
13
  The foundation component. Wraps `VcPopup` and adds footer action buttons based on the `mode`.
14
14
 
15
- | Prop | Type | Default | Description |
16
- |---|---|---|---|
17
- | `title` | `string` | -- | Dialog title |
18
- | `variant` | `PopupVariant` | `"default"` | Visual style: `"default"`, `"warning"`, `"error"`, `"info"` |
19
- | `mode` | `"acknowledge" \| "confirm"` | `"acknowledge"` | `acknowledge` = single OK button; `confirm` = Confirm + Cancel |
20
- | `actionLabel` | `string` | `""` | Label for the single button in acknowledge mode |
21
- | `confirmLabel` | `string` | `""` | Label for the confirm button |
22
- | `cancelLabel` | `string` | `""` | Label for the cancel button |
23
- | `confirmAsText` | `boolean` | `false` | Render confirm button as text-only style |
24
- | `closable` | `boolean` | `true` | Show close (X) button in the header |
25
- | `isMobileFullscreen` | `boolean` | `true` | Expand to fullscreen on mobile |
26
- | `closeOnConfirm` | `boolean` | `false` | Auto-close the popup after confirm is emitted |
15
+ | Prop | Type | Default | Description |
16
+ | -------------------- | ---------------------------- | --------------- | -------------------------------------------------------------- |
17
+ | `title` | `string` | -- | Dialog title |
18
+ | `variant` | `PopupVariant` | `"default"` | Visual style: `"default"`, `"warning"`, `"error"`, `"info"` |
19
+ | `mode` | `"acknowledge" \| "confirm"` | `"acknowledge"` | `acknowledge` = single OK button; `confirm` = Confirm + Cancel |
20
+ | `actionLabel` | `string` | `""` | Label for the single button in acknowledge mode |
21
+ | `confirmLabel` | `string` | `""` | Label for the confirm button |
22
+ | `cancelLabel` | `string` | `""` | Label for the cancel button |
23
+ | `confirmAsText` | `boolean` | `false` | Render confirm button as text-only style |
24
+ | `closable` | `boolean` | `true` | Show close (X) button in the header |
25
+ | `isMobileFullscreen` | `boolean` | `true` | Expand to fullscreen on mobile |
26
+ | `closeOnConfirm` | `boolean` | `false` | Auto-close the popup after confirm is emitted |
27
27
 
28
28
  Events: `close`, `confirm`
29
29
 
@@ -34,17 +34,13 @@ Slots: `header`, `default` (content), `footer` (receives `{ close, confirm }`)
34
34
  A confirm dialog styled with the `warning` variant. Shows Confirm and Cancel buttons.
35
35
 
36
36
  ```vue
37
- <VcPopupWarning
38
- title="Delete item?"
39
- @close="onCancel"
40
- @confirm="onDelete"
41
- >
37
+ <VcPopupWarning title="Delete item?" @close="onCancel" @confirm="onDelete">
42
38
  <p>This action cannot be undone.</p>
43
39
  </VcPopupWarning>
44
40
  ```
45
41
 
46
- | Prop | Type | Description |
47
- |---|---|---|
42
+ | Prop | Type | Description |
43
+ | ------- | -------- | ------------ |
48
44
  | `title` | `string` | Dialog title |
49
45
 
50
46
  Events: `close`, `confirm`
@@ -55,16 +51,13 @@ Slots: `header`, `default`
55
51
  An acknowledge dialog styled with the `error` variant. Shows a single OK button.
56
52
 
57
53
  ```vue
58
- <VcPopupError
59
- title="Operation Failed"
60
- @close="dismiss"
61
- >
54
+ <VcPopupError title="Operation Failed" @close="dismiss">
62
55
  <p>Could not save changes. Please try again.</p>
63
56
  </VcPopupError>
64
57
  ```
65
58
 
66
- | Prop | Type | Description |
67
- |---|---|---|
59
+ | Prop | Type | Description |
60
+ | ------- | -------- | ------------ |
68
61
  | `title` | `string` | Dialog title |
69
62
 
70
63
  Events: `close`
@@ -75,16 +68,13 @@ Slots: `header`, `default`
75
68
  An acknowledge dialog styled with the `info` variant. Shows a single OK button.
76
69
 
77
70
  ```vue
78
- <VcPopupInfo
79
- title="Information"
80
- @close="dismiss"
81
- >
71
+ <VcPopupInfo title="Information" @close="dismiss">
82
72
  <p>Your changes have been saved successfully.</p>
83
73
  </VcPopupInfo>
84
74
  ```
85
75
 
86
- | Prop | Type | Description |
87
- |---|---|---|
76
+ | Prop | Type | Description |
77
+ | ------- | -------- | ------------ |
88
78
  | `title` | `string` | Dialog title |
89
79
 
90
80
  Events: `close`
@@ -95,12 +85,7 @@ Slots: `header`, `default`
95
85
  ### Confirmation before destructive action
96
86
 
97
87
  ```vue
98
- <VcPopupWarning
99
- v-if="showDeleteConfirm"
100
- title="Delete Order"
101
- @confirm="deleteOrder"
102
- @close="showDeleteConfirm = false"
103
- >
88
+ <VcPopupWarning v-if="showDeleteConfirm" title="Delete Order" @confirm="deleteOrder" @close="showDeleteConfirm = false">
104
89
  Are you sure you want to delete this order?
105
90
  </VcPopupWarning>
106
91
  ```
@@ -108,12 +93,7 @@ Slots: `header`, `default`
108
93
  ### Custom footer in VcPopupBase
109
94
 
110
95
  ```vue
111
- <VcPopupBase
112
- variant="warning"
113
- mode="confirm"
114
- title="Custom Actions"
115
- @close="onClose"
116
- >
96
+ <VcPopupBase variant="warning" mode="confirm" title="Custom Actions" @close="onClose">
117
97
  <template #footer="{ close, confirm }">
118
98
  <VcButton variant="danger" @click="confirm">Delete Forever</VcButton>
119
99
  <VcButton @click="close">Keep</VcButton>
@@ -0,0 +1,102 @@
1
+ # ChangePasswordPage
2
+
3
+ Change password page with current, new, and confirm password fields. Supports a `forced` mode for expired passwords that displays an info banner and is triggered by post-login redirect. This full-page variant is used when the user must change their password before accessing the application (e.g., expired password policy). For voluntary password changes from within the app, the `ChangePasswordButton` in the settings menu opens a popup instead.
4
+
5
+ ## When to Use
6
+
7
+ - When a signed-in user wants to change their password (full-page flow)
8
+ - In `forced` mode after login when the user's password has expired
9
+ - The standard vc-shell routing maps `/change-password` to this page
10
+
11
+ ## Basic Usage
12
+
13
+ ```vue
14
+ <template>
15
+ <ChangePassword />
16
+ </template>
17
+
18
+ <!-- Forced mode (expired password) -->
19
+ <template>
20
+ <ChangePassword forced />
21
+ </template>
22
+ ```
23
+
24
+ With custom branding:
25
+
26
+ ```vue
27
+ <template>
28
+ <ChangePassword
29
+ forced
30
+ logo="/assets/my-company-logo.svg"
31
+ background="/assets/custom-background.jpg"
32
+ />
33
+ </template>
34
+ ```
35
+
36
+ ## Key Props
37
+
38
+ | Prop | Type | Default | Description |
39
+ | ------------ | --------- | ------- | ---------------------------------------------------- |
40
+ | `forced` | `boolean` | `false` | Show expired-password info banner and adjusted title |
41
+ | `logo` | `string` | - | Override logo image URL |
42
+ | `background` | `string` | - | Custom background image URL |
43
+
44
+ ## Recipe: Router Configuration with Forced Mode
45
+
46
+ Set up the route so the login page can redirect here when the password is expired:
47
+
48
+ ```ts
49
+ import ChangePassword from "@vc-shell/framework/shared/pages/ChangePasswordPage";
50
+
51
+ const routes = [
52
+ {
53
+ path: "/change-password",
54
+ name: "ChangePassword",
55
+ component: ChangePassword,
56
+ props: (route) => ({
57
+ forced: route.query.forced === "true",
58
+ }),
59
+ },
60
+ ];
61
+ ```
62
+
63
+ In the login flow, redirect when the user's password has expired:
64
+
65
+ ```ts
66
+ async function handleLogin() {
67
+ const result = await signIn(username.value, password.value);
68
+ if (result.passwordExpired) {
69
+ router.push({ name: "ChangePassword", query: { forced: "true" } });
70
+ } else {
71
+ router.push("/");
72
+ }
73
+ }
74
+ ```
75
+
76
+ ## Features
77
+
78
+ - **Real-time password policy validation**: Uses `useUserManagement().validatePassword` to check the new password against the platform's policy as the user types (minimum length, required uppercase, lowercase, digits, special characters)
79
+ - **Equal password detection**: Shows a specific "Equal-passwords" error when the new password matches the current password, without making an API call
80
+ - **Confirm-password mismatch detection**: Validates that the new password and confirm password fields match
81
+ - **Forced mode banner**: When `forced` is `true`, displays an info banner explaining that the password has expired and must be changed
82
+ - **Cancel behavior**: Cancel button signs out the user and redirects to `/login`
83
+ - **Success redirect**: On successful password change, redirects to `/` (main application)
84
+
85
+ ## Details
86
+
87
+ - **Auth layout**: Renders inside `VcAuthLayout`, providing the centered card design with logo and background.
88
+ - **Password policy**: The validation rules are fetched from the platform API and include configurable requirements (minimum length, character classes, etc.). The component displays these rules as a checklist.
89
+ - **Forced vs voluntary**: In forced mode (`forced=true`), the page title changes to reflect the expired password scenario, and an info banner explains why the change is required. The form fields and behavior are otherwise identical.
90
+ - **Sign-out on cancel**: If the user cancels during a forced password change, they are signed out. This prevents access to the application with an expired password.
91
+
92
+ ## Tips
93
+
94
+ - The `forced` prop is typically set via a route query parameter, not hardcoded. The login page detects expired passwords and redirects with the appropriate flag.
95
+ - Password policy validation runs on keyup, providing immediate feedback. The submit button is disabled until all policy requirements are met and the passwords match.
96
+ - This page is distinct from the `ChangePasswordButton` popup. The page is for full-screen flow (forced changes), while the popup is for voluntary in-app password changes.
97
+
98
+ ## Related Components
99
+
100
+ - **VcAuthLayout** - The underlying centered card layout
101
+ - **LoginPage** - Redirects here when `user.passwordExpired` is true
102
+ - **ChangePasswordButton** - Settings menu popup variant for voluntary password changes
@@ -31,11 +31,11 @@ With custom branding:
31
31
 
32
32
  ## Key Props
33
33
 
34
- | Prop | Type | Default | Description |
35
- |------|------|---------|-------------|
36
- | `logo` | `string` | - | Override logo image URL |
37
- | `background` | `string` | - | Custom background image URL |
38
- | `composable` | `() => { forgotPassword }` | - | Custom composable providing `forgotPassword(args)` |
34
+ | Prop | Type | Default | Description |
35
+ | ------------ | -------------------------- | ------- | -------------------------------------------------- |
36
+ | `logo` | `string` | - | Override logo image URL |
37
+ | `background` | `string` | - | Custom background image URL |
38
+ | `composable` | `() => { forgotPassword }` | - | Custom composable providing `forgotPassword(args)` |
39
39
 
40
40
  ## Recipe: Custom Reset Flow with a Different API
41
41
 
@@ -36,13 +36,13 @@ With custom branding:
36
36
 
37
37
  ## Key Props
38
38
 
39
- | Prop | Type | Default | Description |
40
- |------|------|---------|-------------|
41
- | `userId` | `string` | **required** | Invited user's ID from the link |
42
- | `userName` | `string` | **required** | Invited user's email (shown as disabled field) |
43
- | `token` | `string` | **required** | Invitation token from the email link |
44
- | `logo` | `string` | `/assets/logo-white.svg` | Logo image URL |
45
- | `background` | `string` | `/assets/background.jpg` | Background image URL |
39
+ | Prop | Type | Default | Description |
40
+ | ------------ | -------- | ------------------------ | ---------------------------------------------- |
41
+ | `userId` | `string` | **required** | Invited user's ID from the link |
42
+ | `userName` | `string` | **required** | Invited user's email (shown as disabled field) |
43
+ | `token` | `string` | **required** | Invitation token from the email link |
44
+ | `logo` | `string` | `/assets/logo-white.svg` | Logo image URL |
45
+ | `background` | `string` | `/assets/background.jpg` | Background image URL |
46
46
 
47
47
  ## Recipe: Router Configuration
48
48
 
@@ -67,6 +67,7 @@ const routes = [
67
67
  ```
68
68
 
69
69
  The invitation email link typically looks like:
70
+
70
71
  ```
71
72
  https://your-app.com/invite?userId=abc123&userName=jane@example.com&token=xyz789...
72
73
  ```
@@ -34,13 +34,13 @@ SSO-only mode:
34
34
 
35
35
  ## Key Props
36
36
 
37
- | Prop | Type | Default | Description |
38
- |------|------|---------|-------------|
39
- | `logo` | `string` | - | Override logo image URL |
40
- | `background` | `string` | - | Custom background image URL |
41
- | `title` | `string` | i18n `LOGIN.TITLE` | Page heading text |
42
- | `subtitle` | `string` | i18n `LOGIN.SUBTITLE` | Page subheading text |
43
- | `ssoOnly` | `boolean` | `false` | Hide credentials form, show only SSO providers |
37
+ | Prop | Type | Default | Description |
38
+ | ------------ | --------- | --------------------- | ---------------------------------------------- |
39
+ | `logo` | `string` | - | Override logo image URL |
40
+ | `background` | `string` | - | Custom background image URL |
41
+ | `title` | `string` | i18n `LOGIN.TITLE` | Page heading text |
42
+ | `subtitle` | `string` | i18n `LOGIN.SUBTITLE` | Page subheading text |
43
+ | `ssoOnly` | `boolean` | `false` | Hide credentials form, show only SSO providers |
44
44
 
45
45
  ## Recipe: Router Configuration
46
46
 
@@ -36,13 +36,13 @@ With custom branding:
36
36
 
37
37
  ## Key Props
38
38
 
39
- | Prop | Type | Default | Description |
40
- |------|------|---------|-------------|
41
- | `userId` | `string` | **required** | User ID from the reset link |
42
- | `userName` | `string` | **required** | Username/email for auto-sign-in after reset |
43
- | `token` | `string` | **required** | Reset token from the email link |
44
- | `logo` | `string` | `/assets/logo-white.svg` | Logo image URL |
45
- | `background` | `string` | `/assets/background.jpg` | Background image URL |
39
+ | Prop | Type | Default | Description |
40
+ | ------------ | -------- | ------------------------ | ------------------------------------------- |
41
+ | `userId` | `string` | **required** | User ID from the reset link |
42
+ | `userName` | `string` | **required** | Username/email for auto-sign-in after reset |
43
+ | `token` | `string` | **required** | Reset token from the email link |
44
+ | `logo` | `string` | `/assets/logo-white.svg` | Logo image URL |
45
+ | `background` | `string` | `/assets/background.jpg` | Background image URL |
46
46
 
47
47
  ## Recipe: Router Configuration
48
48
 
@@ -67,6 +67,7 @@ const routes = [
67
67
  ```
68
68
 
69
69
  The reset email link typically looks like:
70
+
70
71
  ```
71
72
  https://your-app.com/reset-password?userId=abc123&userName=jane@example.com&token=xyz789...
72
73
  ```
@@ -34,18 +34,18 @@ onMounted(async () => {
34
34
 
35
35
  ## Components
36
36
 
37
- | Component | Props | Description |
38
- |-----------|-------|-------------|
37
+ | Component | Props | Description |
38
+ | ------------------- | ----------------------------------------- | ----------------------------------------------- |
39
39
  | `ExternalProviders` | `providers: ExternalSignInProviderInfo[]` | Renders a vertical list of SSO provider buttons |
40
40
 
41
41
  ## API (`useExternalProvider`)
42
42
 
43
- | Method | Signature | Description |
44
- |--------|-----------|-------------|
45
- | `getProviders` | `() => Promise<ExternalSignInProviderInfo[]>` | Fetch available SSO providers from the platform API |
46
- | `signIn` | `(authenticationType: string) => Promise<void>` | Redirect to external provider login |
47
- | `signOut` | `(authenticationType: string) => Promise<void>` | Redirect to external provider logout |
48
- | `storage` | `Ref<{ providerType?: string }>` | Persisted localStorage ref tracking the active provider |
43
+ | Method | Signature | Description |
44
+ | -------------- | ----------------------------------------------- | ------------------------------------------------------- |
45
+ | `getProviders` | `() => Promise<ExternalSignInProviderInfo[]>` | Fetch available SSO providers from the platform API |
46
+ | `signIn` | `(authenticationType: string) => Promise<void>` | Redirect to external provider login |
47
+ | `signOut` | `(authenticationType: string) => Promise<void>` | Redirect to external provider logout |
48
+ | `storage` | `Ref<{ providerType?: string }>` | Persisted localStorage ref tracking the active provider |
49
49
 
50
50
  ## Recipe: Custom Login Page with SSO and Credentials
51
51
 
@@ -67,18 +67,31 @@ onMounted(async () => {
67
67
  <VcAuthLayout>
68
68
  <!-- Standard credentials form -->
69
69
  <form @submit.prevent="handleLogin">
70
- <VcInput v-model="username" label="Email" />
71
- <VcInput v-model="password" label="Password" type="password" />
70
+ <VcInput
71
+ v-model="username"
72
+ label="Email"
73
+ />
74
+ <VcInput
75
+ v-model="password"
76
+ label="Password"
77
+ type="password"
78
+ />
72
79
  <VcButton type="submit">Sign In</VcButton>
73
80
  </form>
74
81
 
75
82
  <!-- Divider between credentials and SSO -->
76
- <div v-if="hasProviders" class="tw-my-4 tw-text-center tw-text-gray-400">
83
+ <div
84
+ v-if="hasProviders"
85
+ class="tw-my-4 tw-text-center tw-text-gray-400"
86
+ >
77
87
  or continue with
78
88
  </div>
79
89
 
80
90
  <!-- SSO provider buttons -->
81
- <ExternalProviders v-if="hasProviders" :providers="providers" />
91
+ <ExternalProviders
92
+ v-if="hasProviders"
93
+ :providers="providers"
94
+ />
82
95
  </VcAuthLayout>
83
96
  </template>
84
97
  ```
@@ -89,7 +102,10 @@ When the platform is configured for SSO-only authentication, use the `LoginPage`
89
102
 
90
103
  ```vue
91
104
  <template>
92
- <Login sso-only title="Sign in with your corporate account" />
105
+ <Login
106
+ sso-only
107
+ title="Sign in with your corporate account"
108
+ />
93
109
  </template>
94
110
  ```
95
111
 
@@ -8,20 +8,21 @@ The `ChangePassword` component renders a `VcPopup` with three validated input fi
8
8
 
9
9
  ## Props
10
10
 
11
- | Prop | Type | Default | Description |
12
- |---|---|---|---|
11
+ | Prop | Type | Default | Description |
12
+ | -------- | --------- | ------- | -------------------------------------------------------------------------------------------- |
13
13
  | `forced` | `boolean` | `false` | When true, the user cannot dismiss the dialog -- cancelling signs out and redirects to login |
14
- | `login` | `string` | -- | The current user's login name (for context) |
14
+ | `login` | `string` | -- | The current user's login name (for context) |
15
15
 
16
16
  ## Events
17
17
 
18
- | Event | Description |
19
- |---|---|
18
+ | Event | Description |
19
+ | ------- | -------------------------------------------------------------------------------------------- |
20
20
  | `close` | Emitted when the dialog should close (cancel in non-forced mode, or after successful change) |
21
21
 
22
22
  ## Behavior
23
23
 
24
24
  ### Normal mode (`forced: false`)
25
+
25
26
  - User fills in current password, new password, and confirmation.
26
27
  - Real-time validation runs on each keystroke (via `validatePassword` API call).
27
28
  - Errors are shown inline (field-level) and below the footer (API errors like password policy violations).
@@ -29,6 +30,7 @@ The `ChangePassword` component renders a `VcPopup` with three validated input fi
29
30
  - Save button calls `changeUserPassword()`. On success, emits `close`.
30
31
 
31
32
  ### Forced mode (`forced: true`)
33
+
32
34
  - An info banner explains that a password change is required.
33
35
  - Cancel button signs the user out and redirects to `/login`.
34
36
  - Save button changes the password and redirects to `/` on success.
@@ -43,12 +45,7 @@ The `ChangePassword` component renders a `VcPopup` with three validated input fi
43
45
  ## Usage
44
46
 
45
47
  ```vue
46
- <ChangePassword
47
- v-if="showChangePassword"
48
- :forced="mustChangePassword"
49
- :login="currentUser.userName"
50
- @close="showChangePassword = false"
51
- />
48
+ <ChangePassword v-if="showChangePassword" :forced="mustChangePassword" :login="currentUser.userName" @close="showChangePassword = false" />
52
49
  ```
53
50
 
54
51
  ### Typical trigger locations
@@ -58,11 +55,11 @@ The `ChangePassword` component renders a `VcPopup` with three validated input fi
58
55
 
59
56
  ## Form Fields
60
57
 
61
- | Field | Validation | Description |
62
- |---|---|---|
63
- | Current Password | `required`, `min:6` | Verifies the user knows their current password |
64
- | New Password | `required`, `min:6`, platform policy | The desired new password |
65
- | Confirm Password | `required`, `min:6`, must match new | Confirmation of the new password |
58
+ | Field | Validation | Description |
59
+ | ---------------- | ------------------------------------ | ---------------------------------------------- |
60
+ | Current Password | `required`, `min:6` | Verifies the user knows their current password |
61
+ | New Password | `required`, `min:6`, platform policy | The desired new password |
62
+ | Confirm Password | `required`, `min:6`, must match new | Confirmation of the new password |
66
63
 
67
64
  ## Error Codes
68
65