@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.
- package/CHANGELOG.md +78 -54
- package/README.md +42 -12
- package/package.json +4 -4
- package/runtime/VERSION +1 -1
- package/runtime/agents/api-analyzer.md +31 -16
- package/runtime/agents/blade-enhancer.md +15 -9
- package/runtime/agents/details-blade-generator.md +47 -31
- package/runtime/agents/list-blade-generator.md +21 -37
- package/runtime/agents/locales-generator.md +3 -0
- package/runtime/agents/migration-agent.md +18 -7
- package/runtime/agents/module-analyzer.md +2 -0
- package/runtime/agents/module-assembler.md +15 -0
- package/runtime/agents/promote-agent.md +15 -4
- package/runtime/agents/type-checker.md +11 -0
- package/runtime/knowledge/docs/_BUILD_HASH.md +1 -1
- package/runtime/knowledge/docs/core/api/platform.docs.md +30 -30
- package/runtime/knowledge/docs/core/blade-navigation/blade-nav-composables.docs.md +41 -41
- package/runtime/knowledge/docs/core/composables/bladeContext/index.docs.md +12 -10
- package/runtime/knowledge/docs/core/composables/useApiClient/useApiClient.docs.md +11 -14
- package/runtime/knowledge/docs/core/composables/useAppBarMobileButtons/useAppBarMobileButtons.docs.md +35 -35
- package/runtime/knowledge/docs/core/composables/useAppBarWidget/useAppBarWidget.docs.md +35 -35
- package/runtime/knowledge/docs/core/composables/useAppInsights/useAppInsights.docs.md +15 -15
- package/runtime/knowledge/docs/core/composables/useAssets/useAssets.docs.md +21 -18
- package/runtime/knowledge/docs/core/composables/useAssetsManager/useAssetsManager.docs.md +28 -24
- package/runtime/knowledge/docs/core/composables/useAsync/useAsync.docs.md +90 -61
- package/runtime/knowledge/docs/core/composables/useBeforeUnload/useBeforeUnload.docs.md +19 -18
- package/runtime/knowledge/docs/core/composables/useBlade/useBlade.docs.md +89 -68
- package/runtime/knowledge/docs/core/composables/useBladeForm/useBladeForm.docs.md +27 -25
- package/runtime/knowledge/docs/core/composables/useBladeRegistry/useBladeRegistry.docs.md +15 -15
- package/runtime/knowledge/docs/core/composables/useBladeWidgets/index.docs.md +43 -47
- package/runtime/knowledge/docs/core/composables/useBreadcrumbs/useBreadcrumbs.docs.md +11 -11
- package/runtime/knowledge/docs/core/composables/useConnectionStatus/useConnectionStatus.docs.md +27 -15
- package/runtime/knowledge/docs/core/composables/useDashboard/useDashboard.docs.md +30 -30
- package/runtime/knowledge/docs/core/composables/useDynamicProperties/useDynamicProperties.docs.md +34 -36
- package/runtime/knowledge/docs/core/composables/useErrorHandler/useErrorHandler.docs.md +44 -23
- package/runtime/knowledge/docs/core/composables/useFunctions/useFunctions.docs.md +14 -11
- package/runtime/knowledge/docs/core/composables/useKeyboardNavigation/useKeyboardNavigation.docs.md +47 -38
- package/runtime/knowledge/docs/core/composables/useLanguages/useLanguages.docs.md +37 -28
- package/runtime/knowledge/docs/core/composables/useLoading/useLoading.docs.md +23 -17
- package/runtime/knowledge/docs/core/composables/useMenuExpanded/index.docs.md +9 -9
- package/runtime/knowledge/docs/core/composables/useMenuService/useMenuService.docs.md +42 -42
- package/runtime/knowledge/docs/core/composables/useModificationTracker/useModificationTracker.docs.md +22 -12
- package/runtime/knowledge/docs/core/composables/useNotifications/useNotifications.docs.md +33 -41
- package/runtime/knowledge/docs/core/composables/usePermissions/usePermissions.docs.md +16 -16
- package/runtime/knowledge/docs/core/composables/usePlatformLocaleSync/usePlatformLocaleSync.docs.md +28 -0
- package/runtime/knowledge/docs/core/composables/usePopup/usePopup.docs.md +32 -24
- package/runtime/knowledge/docs/core/composables/useResponsive/useResponsive.docs.md +32 -11
- package/runtime/knowledge/docs/core/composables/useSettings/useSettings.docs.md +22 -13
- package/runtime/knowledge/docs/core/composables/useSettingsMenu/useSettingsMenu.docs.md +7 -7
- package/runtime/knowledge/docs/core/composables/useSidebarState/useSidebarState.docs.md +32 -24
- package/runtime/knowledge/docs/core/composables/useSlowNetworkDetection/useSlowNetworkDetection.docs.md +21 -17
- package/runtime/knowledge/docs/core/composables/useTheme/useTheme.docs.md +24 -24
- package/runtime/knowledge/docs/core/composables/useToolbar/useToolbar.docs.md +28 -31
- package/runtime/knowledge/docs/core/composables/useUser/useUser.docs.md +43 -24
- package/runtime/knowledge/docs/core/composables/useUserManagement/useUserManagement.docs.md +68 -48
- package/runtime/knowledge/docs/core/composables/useWebVitals/useWebVitals.docs.md +19 -19
- package/runtime/knowledge/docs/core/composables/useWidgets/useWidgets.docs.md +42 -47
- package/runtime/knowledge/docs/core/directives/autofocus/autofocus.docs.md +10 -4
- package/runtime/knowledge/docs/core/directives/loading/loading.docs.md +35 -20
- package/runtime/knowledge/docs/core/notifications/notifications.docs.md +36 -35
- package/runtime/knowledge/docs/core/plugins/ai-agent/ai-agent.docs.md +38 -38
- package/runtime/knowledge/docs/core/plugins/extension-points/extension-points.docs.md +79 -62
- package/runtime/knowledge/docs/core/plugins/global-error-handler/global-error-handler.docs.md +10 -10
- package/runtime/knowledge/docs/core/plugins/i18n/i18n.docs.md +21 -23
- package/runtime/knowledge/docs/core/plugins/modularity/modularity.docs.md +91 -83
- package/runtime/knowledge/docs/core/plugins/permissions/permissions.docs.md +10 -16
- package/runtime/knowledge/docs/core/plugins/signalR/signalR.docs.md +9 -9
- package/runtime/knowledge/docs/core/plugins/validation/validation.docs.md +65 -22
- package/runtime/knowledge/docs/core/services/services.docs.md +19 -22
- package/runtime/knowledge/docs/core/types/types.docs.md +40 -40
- package/runtime/knowledge/docs/core/utilities/date/date-utilities.docs.md +27 -27
- package/runtime/knowledge/docs/core/utilities/shared-utilities.docs.md +23 -23
- package/runtime/knowledge/docs/core/utilities/thumbnail/thumbnail.docs.md +22 -25
- package/runtime/knowledge/docs/core/utilities/utilities.docs.md +64 -64
- package/runtime/knowledge/docs/injection-keys.docs.md +52 -51
- package/runtime/knowledge/docs/modules/assets-manager/assets-manager.docs.md +9 -9
- package/runtime/knowledge/docs/shell/_internal/popup/common/popup-common.docs.md +23 -43
- package/runtime/knowledge/docs/shell/auth/ChangePasswordPage/change-password-page.docs.md +5 -5
- package/runtime/knowledge/docs/shell/auth/ForgotPasswordPage/forgot-password-page.docs.md +5 -5
- package/runtime/knowledge/docs/shell/auth/InvitePage/invite-page.docs.md +8 -7
- package/runtime/knowledge/docs/shell/auth/LoginPage/login-page.docs.md +7 -7
- package/runtime/knowledge/docs/shell/auth/ResetPasswordPage/reset-password-page.docs.md +8 -7
- package/runtime/knowledge/docs/shell/auth/sign-in/sign-in.docs.md +29 -13
- package/runtime/knowledge/docs/shell/components/change-password/change-password.docs.md +13 -16
- package/runtime/knowledge/docs/shell/components/change-password-button/change-password-button.docs.md +1 -7
- package/runtime/knowledge/docs/shell/components/error-interceptor/error-interceptor.docs.md +5 -5
- package/runtime/knowledge/docs/shell/components/language-selector/language-selector.docs.md +1 -1
- package/runtime/knowledge/docs/shell/components/logout-button/logout-button.docs.md +1 -1
- package/runtime/knowledge/docs/shell/components/notification-template/notification-template.docs.md +17 -9
- package/runtime/knowledge/docs/shell/components/settings-menu/settings-menu.docs.md +11 -17
- package/runtime/knowledge/docs/shell/components/settings-menu-item/settings-menu-item.docs.md +34 -65
- package/runtime/knowledge/docs/shell/components/sidebar/sidebar.docs.md +16 -26
- package/runtime/knowledge/docs/shell/components/theme-selector/theme-selector.docs.md +2 -2
- package/runtime/knowledge/docs/shell/components/user-dropdown-button/user-dropdown-button.docs.md +7 -9
- package/runtime/knowledge/docs/shell/dashboard/dashboard-charts/dashboard-charts.docs.md +30 -40
- package/runtime/knowledge/docs/shell/dashboard/dashboard-widget-card/dashboard-widget-card.docs.md +26 -19
- package/runtime/knowledge/docs/shell/dashboard/draggable-dashboard/draggable-dashboard.docs.md +15 -12
- package/runtime/knowledge/docs/ui/components/atoms/vc-badge/vc-badge.docs.md +15 -26
- package/runtime/knowledge/docs/ui/components/atoms/vc-banner/vc-banner.docs.md +21 -19
- package/runtime/knowledge/docs/ui/components/atoms/vc-button/vc-button.docs.md +83 -67
- package/runtime/knowledge/docs/ui/components/atoms/vc-card/vc-card.docs.md +100 -59
- package/runtime/knowledge/docs/ui/components/atoms/vc-col/vc-col.docs.md +28 -11
- package/runtime/knowledge/docs/ui/components/atoms/vc-container/vc-container.docs.md +20 -17
- package/runtime/knowledge/docs/ui/components/atoms/vc-hint/vc-hint.docs.md +26 -17
- package/runtime/knowledge/docs/ui/components/atoms/vc-icon/vc-icon.docs.md +30 -32
- package/runtime/knowledge/docs/ui/components/atoms/vc-image/vc-image.docs.md +25 -48
- package/runtime/knowledge/docs/ui/components/atoms/vc-label/vc-label.docs.md +29 -24
- package/runtime/knowledge/docs/ui/components/atoms/vc-link/vc-link.docs.md +23 -15
- package/runtime/knowledge/docs/ui/components/atoms/vc-loading/vc-loading.docs.md +22 -13
- package/runtime/knowledge/docs/ui/components/atoms/vc-progress/vc-progress.docs.md +33 -18
- package/runtime/knowledge/docs/ui/components/atoms/vc-row/vc-row.docs.md +56 -15
- package/runtime/knowledge/docs/ui/components/atoms/vc-scrollable-container/vc-scrollable-container.docs.md +28 -15
- package/runtime/knowledge/docs/ui/components/atoms/vc-skeleton/vc-skeleton.docs.md +40 -20
- package/runtime/knowledge/docs/ui/components/atoms/vc-status/vc-status.docs.md +25 -14
- package/runtime/knowledge/docs/ui/components/atoms/vc-status-icon/vc-status-icon.docs.md +40 -14
- package/runtime/knowledge/docs/ui/components/atoms/vc-tooltip/vc-tooltip.docs.md +54 -42
- package/runtime/knowledge/docs/ui/components/atoms/vc-video/vc-video.docs.md +17 -17
- package/runtime/knowledge/docs/ui/components/atoms/vc-widget/vc-widget.docs.md +21 -21
- package/runtime/knowledge/docs/ui/components/molecules/multilanguage-selector/multilanguage-selector.docs.md +23 -10
- package/runtime/knowledge/docs/ui/components/molecules/vc-accordion/vc-accordion.docs.md +55 -44
- package/runtime/knowledge/docs/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.docs.md +23 -20
- package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox/vc-checkbox.docs.md +92 -65
- package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox-group/vc-checkbox-group.docs.md +22 -36
- package/runtime/knowledge/docs/ui/components/molecules/vc-color-input/vc-color-input.docs.md +65 -23
- package/runtime/knowledge/docs/ui/components/molecules/vc-date-picker/vc-date-picker.docs.md +52 -73
- package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown/vc-dropdown.docs.md +91 -85
- package/runtime/knowledge/docs/ui/components/molecules/vc-dropdown-panel/vc-dropdown-panel.docs.md +38 -42
- package/runtime/knowledge/docs/ui/components/molecules/vc-editor/vc-editor.docs.md +56 -73
- package/runtime/knowledge/docs/ui/components/molecules/vc-field/vc-field.docs.md +61 -27
- package/runtime/knowledge/docs/ui/components/molecules/vc-file-upload/vc-file-upload.docs.md +42 -50
- package/runtime/knowledge/docs/ui/components/molecules/vc-form/vc-form.docs.md +35 -64
- package/runtime/knowledge/docs/ui/components/molecules/vc-image-tile/vc-image-tile.docs.md +38 -41
- package/runtime/knowledge/docs/ui/components/molecules/vc-input/vc-input.docs.md +109 -131
- package/runtime/knowledge/docs/ui/components/molecules/vc-input-currency/vc-input-currency.docs.md +47 -88
- package/runtime/knowledge/docs/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.docs.md +50 -64
- package/runtime/knowledge/docs/ui/components/molecules/vc-input-group/vc-input-group.docs.md +29 -24
- package/runtime/knowledge/docs/ui/components/molecules/vc-menu/vc-menu.docs.md +32 -28
- package/runtime/knowledge/docs/ui/components/molecules/vc-multivalue/vc-multivalue.docs.md +57 -65
- package/runtime/knowledge/docs/ui/components/molecules/vc-pagination/vc-pagination.docs.md +28 -26
- package/runtime/knowledge/docs/ui/components/molecules/vc-radio-button/vc-radio-button.docs.md +55 -20
- package/runtime/knowledge/docs/ui/components/molecules/vc-radio-group/vc-radio-group.docs.md +21 -35
- package/runtime/knowledge/docs/ui/components/molecules/vc-rating/vc-rating.docs.md +38 -33
- package/runtime/knowledge/docs/ui/components/molecules/vc-select/vc-select.docs.md +72 -83
- package/runtime/knowledge/docs/ui/components/molecules/vc-slider/vc-slider.docs.md +21 -16
- package/runtime/knowledge/docs/ui/components/molecules/vc-switch/vc-switch.docs.md +55 -64
- package/runtime/knowledge/docs/ui/components/molecules/vc-textarea/vc-textarea.docs.md +51 -70
- package/runtime/knowledge/docs/ui/components/molecules/vc-toast/vc-toast.docs.md +58 -57
- package/runtime/knowledge/docs/ui/components/organisms/vc-app/vc-app.docs.md +49 -26
- package/runtime/knowledge/docs/ui/components/organisms/vc-auth-layout/vc-auth-layout.docs.md +82 -28
- package/runtime/knowledge/docs/ui/components/organisms/vc-blade/vc-blade.docs.md +90 -75
- package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/composables/table-composables.docs.md +99 -48
- package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/vc-data-table.docs.md +548 -367
- package/runtime/knowledge/docs/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.docs.md +35 -52
- package/runtime/knowledge/docs/ui/components/organisms/vc-gallery/vc-gallery.docs.md +33 -62
- package/runtime/knowledge/docs/ui/components/organisms/vc-image-upload/vc-image-upload.docs.md +17 -23
- package/runtime/knowledge/docs/ui/components/organisms/vc-popup/vc-popup.docs.md +109 -68
- package/runtime/knowledge/docs/ui/components/organisms/vc-sidebar/vc-sidebar.docs.md +82 -44
- package/runtime/knowledge/docs/ui/composables/ui-composables.docs.md +8 -8
- package/runtime/knowledge/docs/ui/composables/useDataTablePagination.docs.md +164 -0
- package/runtime/knowledge/docs/ui/composables/useDataTableSort.docs.md +34 -26
- package/runtime/knowledge/docs/ui/composables/useTableSelection.docs.md +48 -40
- package/runtime/knowledge/docs/ui/composables/useTableSort.docs.md +30 -17
- package/runtime/knowledge/docs/ui/types/ui-types.docs.md +40 -29
- package/runtime/knowledge/examples/offers-module.md +15 -13
- package/runtime/knowledge/examples/team-module.md +82 -119
- package/runtime/knowledge/examples/videos-module.md +44 -17
- package/runtime/knowledge/index.md +22 -0
- package/runtime/knowledge/migration-prompts/blade-form-migration.md +17 -8
- package/runtime/knowledge/migration-prompts/blade-props-migration.md +1 -2
- package/runtime/knowledge/migration-prompts/datatable-migration.md +801 -0
- package/runtime/knowledge/migration-prompts/icon-migration.md +97 -0
- package/runtime/knowledge/migration-prompts/manual-migration-audit.md +117 -0
- package/runtime/knowledge/migration-prompts/notifications-migration.md +8 -3
- package/runtime/knowledge/migration-prompts/nswag-migration.md +25 -29
- package/runtime/knowledge/migration-prompts/use-assets-migration.md +164 -0
- package/runtime/knowledge/migration-prompts/use-data-table-pagination-migration.md +176 -0
- package/runtime/knowledge/migration-prompts/widgets-migration.md +48 -27
- package/runtime/knowledge/patterns/assets-management.md +20 -20
- package/runtime/knowledge/patterns/blade-navigation.md +7 -14
- package/runtime/knowledge/patterns/blade-widget.md +19 -17
- package/runtime/knowledge/patterns/child-blade-flow.md +19 -7
- package/runtime/knowledge/patterns/composable-details.md +20 -50
- package/runtime/knowledge/patterns/composable-list.md +43 -31
- package/runtime/knowledge/patterns/dashboard-widget.md +14 -16
- package/runtime/knowledge/patterns/datatable-pattern.md +521 -0
- package/runtime/knowledge/patterns/details-blade-pattern.md +78 -116
- package/runtime/knowledge/patterns/extension-points-usage.md +53 -44
- package/runtime/knowledge/patterns/form-validation.md +28 -64
- package/runtime/knowledge/patterns/list-blade-pattern.md +33 -21
- package/runtime/knowledge/patterns/module-structure.md +7 -1
- package/runtime/knowledge/patterns/multilanguage-fields.md +8 -14
- package/runtime/knowledge/patterns/notification-template.md +21 -14
- package/runtime/knowledge/patterns/signalr-notifications.md +30 -32
- package/runtime/knowledge/patterns/toolbar-pattern.md +18 -20
- package/runtime/vc-app.md +241 -62
|
@@ -8,42 +8,42 @@ The utilities module provides a collection of commonly needed functions: string
|
|
|
8
8
|
|
|
9
9
|
## String Utilities
|
|
10
10
|
|
|
11
|
-
| Function
|
|
12
|
-
|
|
13
|
-
| `camelToSnake`
|
|
14
|
-
| `camelize`
|
|
15
|
-
| `kebabToCamel`
|
|
16
|
-
| `kebabToPascal` | `(str: string) => string` | Converts kebab-case to PascalCase
|
|
11
|
+
| Function | Signature | Description |
|
|
12
|
+
| --------------- | ------------------------- | ----------------------------------------------------------------- |
|
|
13
|
+
| `camelToSnake` | `(str: string) => string` | Converts camelCase to snake_case |
|
|
14
|
+
| `camelize` | `(str: string) => string` | Converts delimited string to camelCase (splits on non-word chars) |
|
|
15
|
+
| `kebabToCamel` | `(str: string) => string` | Converts kebab-case to camelCase |
|
|
16
|
+
| `kebabToPascal` | `(str: string) => string` | Converts kebab-case to PascalCase |
|
|
17
17
|
|
|
18
18
|
### String utility examples
|
|
19
19
|
|
|
20
20
|
```typescript
|
|
21
21
|
import { camelToSnake, camelize, kebabToCamel, kebabToPascal } from "@vc-shell/framework";
|
|
22
22
|
|
|
23
|
-
camelToSnake("myPropName");
|
|
24
|
-
camelToSnake("backgroundColor");
|
|
23
|
+
camelToSnake("myPropName"); // "my_prop_name"
|
|
24
|
+
camelToSnake("backgroundColor"); // "background_color"
|
|
25
25
|
|
|
26
|
-
camelize("some-prop-name");
|
|
27
|
-
camelize("SOME_CONSTANT");
|
|
26
|
+
camelize("some-prop-name"); // "somePropName"
|
|
27
|
+
camelize("SOME_CONSTANT"); // "sOMECONSTANT" (splits on non-word chars)
|
|
28
28
|
|
|
29
|
-
kebabToCamel("vc-data-table");
|
|
30
|
-
kebabToCamel("my-component-name");
|
|
29
|
+
kebabToCamel("vc-data-table"); // "vcDataTable"
|
|
30
|
+
kebabToCamel("my-component-name"); // "myComponentName"
|
|
31
31
|
|
|
32
|
-
kebabToPascal("vc-data-table");
|
|
33
|
-
kebabToPascal("dashboard-widget");
|
|
32
|
+
kebabToPascal("vc-data-table"); // "VcDataTable"
|
|
33
|
+
kebabToPascal("dashboard-widget"); // "DashboardWidget"
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
## Date Utilities
|
|
37
37
|
|
|
38
38
|
Located in `date/`. Uses `date-fns` internally with lazy locale loading.
|
|
39
39
|
|
|
40
|
-
| Function
|
|
41
|
-
|
|
42
|
-
| `formatDateRelative`
|
|
43
|
-
| `formatDateWithPattern` | `(value: DateInput, momentFormatStr: string, localeCode?: string) => string` | Formats date using a Moment.js-style format string, auto-converted to date-fns tokens
|
|
44
|
-
| `convertMomentFormat`
|
|
45
|
-
| `resolveLocale`
|
|
46
|
-
| `resolveLocaleSync`
|
|
40
|
+
| Function | Signature | Description |
|
|
41
|
+
| ----------------------- | ---------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- |
|
|
42
|
+
| `formatDateRelative` | `(value: DateInput, localeCode?: string) => string` | Formats date as relative time (e.g. "3 hours ago") via `formatDistanceToNow` |
|
|
43
|
+
| `formatDateWithPattern` | `(value: DateInput, momentFormatStr: string, localeCode?: string) => string` | Formats date using a Moment.js-style format string, auto-converted to date-fns tokens |
|
|
44
|
+
| `convertMomentFormat` | `(momentFormat: string) => string` | Converts a Moment.js format string to date-fns format (e.g. `YYYY` to `yyyy`, `DD` to `dd`) |
|
|
45
|
+
| `resolveLocale` | `(localeCode: string) => Promise<Locale>` | Async-loads a date-fns locale by code, with fallback to base language then `enUS` |
|
|
46
|
+
| `resolveLocaleSync` | `(localeCode: string) => Locale` | Returns cached locale synchronously; triggers async load if missing, returns `enUS` as fallback |
|
|
47
47
|
|
|
48
48
|
`DateInput` is `string | number | Date | null | undefined`.
|
|
49
49
|
|
|
@@ -53,46 +53,46 @@ Located in `date/`. Uses `date-fns` internally with lazy locale loading.
|
|
|
53
53
|
import { formatDateRelative, formatDateWithPattern, convertMomentFormat } from "@vc-shell/framework";
|
|
54
54
|
|
|
55
55
|
// Relative time
|
|
56
|
-
formatDateRelative("2024-01-15");
|
|
57
|
-
formatDateRelative(new Date(Date.now() - 3600000));
|
|
58
|
-
formatDateRelative("2024-01-15", "de");
|
|
56
|
+
formatDateRelative("2024-01-15"); // "about 2 years ago"
|
|
57
|
+
formatDateRelative(new Date(Date.now() - 3600000)); // "about 1 hour ago"
|
|
58
|
+
formatDateRelative("2024-01-15", "de"); // "vor etwa 2 Jahren"
|
|
59
59
|
|
|
60
60
|
// Formatted dates using Moment.js-style patterns (auto-converted to date-fns)
|
|
61
|
-
formatDateWithPattern("2024-01-15", "LL");
|
|
62
|
-
formatDateWithPattern("2024-06-01", "DD/MM/YYYY");
|
|
63
|
-
formatDateWithPattern("2024-01-15", "LL", "de");
|
|
61
|
+
formatDateWithPattern("2024-01-15", "LL"); // "January 15, 2024"
|
|
62
|
+
formatDateWithPattern("2024-06-01", "DD/MM/YYYY"); // "01/06/2024"
|
|
63
|
+
formatDateWithPattern("2024-01-15", "LL", "de"); // "15. Januar 2024"
|
|
64
64
|
|
|
65
65
|
// Format conversion
|
|
66
|
-
convertMomentFormat("YYYY-MM-DD");
|
|
67
|
-
convertMomentFormat("DD/MM/YYYY");
|
|
68
|
-
convertMomentFormat("hh:mm A");
|
|
66
|
+
convertMomentFormat("YYYY-MM-DD"); // "yyyy-MM-dd"
|
|
67
|
+
convertMomentFormat("DD/MM/YYYY"); // "dd/MM/yyyy"
|
|
68
|
+
convertMomentFormat("hh:mm A"); // "hh:mm a"
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
## Error Utilities
|
|
72
72
|
|
|
73
73
|
### Display errors (`error.ts`)
|
|
74
74
|
|
|
75
|
-
| Export
|
|
76
|
-
|
|
77
|
-
| `DisplayableError` | `class extends Error`
|
|
78
|
-
| `parseError`
|
|
75
|
+
| Export | Signature | Description |
|
|
76
|
+
| ------------------ | --------------------------------------------- | ----------------------------------------------------------------------------------- |
|
|
77
|
+
| `DisplayableError` | `class extends Error` | Normalized error with `details: string` and `originalError: unknown` properties |
|
|
78
|
+
| `parseError` | `(errorToParse: unknown) => DisplayableError` | Parses any error type (Axios, plain object, string, JSON) into a `DisplayableError` |
|
|
79
79
|
|
|
80
80
|
### Typed framework errors (`errorTypes.ts`)
|
|
81
81
|
|
|
82
|
-
| Class
|
|
83
|
-
|
|
84
|
-
| `FrameworkError`
|
|
85
|
-
| `ValidationError`
|
|
86
|
-
| `ServiceError`
|
|
87
|
-
| `InjectionError`
|
|
88
|
-
| `RegistrationError` | `REGISTRATION_ERROR` | `(componentName, reason, context?)`
|
|
89
|
-
| `BladeError`
|
|
90
|
-
| `ModuleLoadError`
|
|
91
|
-
|
|
92
|
-
| Function
|
|
93
|
-
|
|
94
|
-
| `isFrameworkError` | `(error: unknown) => error is FrameworkError`
|
|
95
|
-
| `wrapError`
|
|
82
|
+
| Class | Code | Constructor |
|
|
83
|
+
| ------------------- | -------------------- | --------------------------------------------------------- |
|
|
84
|
+
| `FrameworkError` | custom | `(message, code, context?)` -- base class with `toJSON()` |
|
|
85
|
+
| `ValidationError` | `VALIDATION_ERROR` | `(message, context?)` |
|
|
86
|
+
| `ServiceError` | `SERVICE_ERROR` | `(message, context?)` |
|
|
87
|
+
| `InjectionError` | `INJECTION_ERROR` | `(serviceName, context?)` |
|
|
88
|
+
| `RegistrationError` | `REGISTRATION_ERROR` | `(componentName, reason, context?)` |
|
|
89
|
+
| `BladeError` | `BLADE_ERROR` | `(message, bladeId?, context?)` |
|
|
90
|
+
| `ModuleLoadError` | `MODULE_LOAD_ERROR` | `(moduleId, reason, context?)` |
|
|
91
|
+
|
|
92
|
+
| Function | Signature | Description |
|
|
93
|
+
| ------------------ | --------------------------------------------------- | ----------------------------------------------------------------- |
|
|
94
|
+
| `isFrameworkError` | `(error: unknown) => error is FrameworkError` | Type guard for `FrameworkError` instances |
|
|
95
|
+
| `wrapError` | `(error: unknown, code?: string) => FrameworkError` | Wraps any error into a `FrameworkError`, preserving existing ones |
|
|
96
96
|
|
|
97
97
|
### Error utility examples
|
|
98
98
|
|
|
@@ -103,12 +103,12 @@ try {
|
|
|
103
103
|
await apiClient.save(data);
|
|
104
104
|
} catch (err) {
|
|
105
105
|
const parsed = parseError(err);
|
|
106
|
-
console.log(parsed.message);
|
|
107
|
-
console.log(parsed.details);
|
|
106
|
+
console.log(parsed.message); // "Request failed with status 422"
|
|
107
|
+
console.log(parsed.details); // "Validation error: name is required"
|
|
108
108
|
}
|
|
109
109
|
|
|
110
110
|
if (isFrameworkError(err)) {
|
|
111
|
-
console.log(err.code);
|
|
111
|
+
console.log(err.code); // e.g. "INJECTION_ERROR"
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
throw new InjectionError("WidgetService"); // "WidgetService is not provided. ..."
|
|
@@ -116,8 +116,8 @@ throw new InjectionError("WidgetService"); // "WidgetService is not provided. ..
|
|
|
116
116
|
|
|
117
117
|
## ID Generation
|
|
118
118
|
|
|
119
|
-
| Function
|
|
120
|
-
|
|
119
|
+
| Function | Signature | Description |
|
|
120
|
+
| ------------ | -------------- | --------------------------------------------------------------------------------- |
|
|
121
121
|
| `generateId` | `() => string` | Returns a random 7-character alphanumeric string via `Math.random().toString(36)` |
|
|
122
122
|
|
|
123
123
|
```typescript
|
|
@@ -131,12 +131,12 @@ const widgetId = `widget-${generateId()}`; // e.g. "widget-m7p2x1b"
|
|
|
131
131
|
|
|
132
132
|
Factory-based logger with level filtering. Default level: `debug` in dev, `warn` in production.
|
|
133
133
|
|
|
134
|
-
| Export
|
|
135
|
-
|
|
134
|
+
| Export | Type | Description |
|
|
135
|
+
| -------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------------- |
|
|
136
136
|
| `createLogger` | `(context?: string) => Logger` | Creates a logger instance with `debug`, `info`, `warn`, `error`, `child`, `setLevel`, `setEnabled` methods |
|
|
137
|
-
| `logger`
|
|
138
|
-
| `loggers`
|
|
139
|
-
| `LogLevel`
|
|
137
|
+
| `logger` | `Logger` | Default logger instance (no context prefix) |
|
|
138
|
+
| `loggers` | `Record<string, Logger>` | Pre-configured loggers: `core`, `ui`, `shared`, `plugins`, `services`, `composables` |
|
|
139
|
+
| `LogLevel` | `type` | `"debug" \| "info" \| "warn" \| "error" \| "none"` |
|
|
140
140
|
|
|
141
141
|
### Logger examples
|
|
142
142
|
|
|
@@ -144,13 +144,13 @@ Factory-based logger with level filtering. Default level: `debug` in dev, `warn`
|
|
|
144
144
|
import { createLogger, loggers } from "@vc-shell/framework";
|
|
145
145
|
|
|
146
146
|
const log = createLogger("OrdersModule");
|
|
147
|
-
log.info("Module initialized");
|
|
148
|
-
log.error("Failed to load orders", error);
|
|
147
|
+
log.info("Module initialized"); // [OrdersModule] Module initialized
|
|
148
|
+
log.error("Failed to load orders", error); // [OrdersModule] Failed to load orders Error: ...
|
|
149
149
|
|
|
150
150
|
const subLog = log.child("DataSync");
|
|
151
|
-
subLog.debug("Syncing 50 records");
|
|
151
|
+
subLog.debug("Syncing 50 records"); // [OrdersModule:DataSync] Syncing 50 records
|
|
152
152
|
|
|
153
|
-
log.setLevel("error");
|
|
153
|
+
log.setLevel("error"); // Only errors will be logged
|
|
154
154
|
```
|
|
155
155
|
|
|
156
156
|
## Tip: Use createLogger Instead of console.log
|
|
@@ -171,8 +171,8 @@ log.info("Order saved", { orderId: order.id });
|
|
|
171
171
|
The `convertMomentFormat` function maps common Moment.js tokens to date-fns tokens, but does not cover every edge case. Uncommon tokens (like `X` for Unix timestamp) may need manual handling:
|
|
172
172
|
|
|
173
173
|
```typescript
|
|
174
|
-
convertMomentFormat("YYYY-MM-DD");
|
|
175
|
-
convertMomentFormat("X");
|
|
174
|
+
convertMomentFormat("YYYY-MM-DD"); // "yyyy-MM-dd" (correct)
|
|
175
|
+
convertMomentFormat("X"); // May not convert as expected
|
|
176
176
|
```
|
|
177
177
|
|
|
178
178
|
## Related
|
|
@@ -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
|
|
22
|
-
|
|
23
|
-
| `NavigationViewLocationKey` | `BladeVNode`
|
|
24
|
-
| `BladeDescriptorKey`
|
|
25
|
-
| `BladeBackButtonKey`
|
|
26
|
-
| `BladeDataKey`
|
|
27
|
-
| `BladeContextKey`
|
|
28
|
-
| `BladeRoutesKey`
|
|
29
|
-
| `InternalRoutesKey`
|
|
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
|
|
34
|
-
|
|
34
|
+
| Key | Type | Description |
|
|
35
|
+
| -------------------------- | ----------------------------------- | ------------------------------------------- |
|
|
35
36
|
| `NotificationTemplatesKey` | `NotificationTemplateConstructor[]` | Registered notification template components |
|
|
36
|
-
| `NotificationStoreKey`
|
|
37
|
+
| `NotificationStoreKey` | `NotificationStore` | Shared notification store singleton |
|
|
37
38
|
|
|
38
39
|
### Services
|
|
39
40
|
|
|
40
|
-
| Key
|
|
41
|
-
|
|
42
|
-
| `WidgetServiceKey`
|
|
43
|
-
| `DashboardServiceKey`
|
|
44
|
-
| `GlobalSearchKey`
|
|
45
|
-
| `MenuServiceKey`
|
|
46
|
-
| `SettingsMenuServiceKey`
|
|
47
|
-
| `AppBarWidgetServiceKey`
|
|
48
|
-
| `AppBarMobileButtonsServiceKey` | `IAppBarMobileButtonsService` | Mobile app bar buttons
|
|
49
|
-
| `LanguageServiceKey`
|
|
50
|
-
| `ToolbarServiceKey`
|
|
51
|
-
| `AiAgentServiceKey`
|
|
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
|
|
56
|
-
|
|
57
|
-
| `DynamicModulesKey`
|
|
58
|
-
| `ModulesReadyKey`
|
|
59
|
-
| `ModulesLoadErrorKey` | `Ref<boolean>`
|
|
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
|
|
64
|
-
|
|
65
|
-
| `WidgetScopeKey`
|
|
66
|
-
| `AppRootElementKey`
|
|
67
|
-
| `EmbeddedModeKey`
|
|
68
|
-
| `ShellIndicatorsKey`
|
|
69
|
-
| `CloseSettingsMenuKey` | `() => void`
|
|
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
|
|
74
|
-
|
|
75
|
-
| `IsMobileKey`
|
|
76
|
-
| `IsDesktopKey` | `Ref<boolean>` | Desktop breakpoint
|
|
77
|
-
| `IsPhoneKey`
|
|
78
|
-
| `IsTabletKey`
|
|
79
|
-
| `IsTouchKey`
|
|
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
|
|
84
|
-
|
|
85
|
-
| `navigationViewLocation`
|
|
86
|
-
| `BladeDescriptor`
|
|
87
|
-
| `NotificationTemplatesSymbol` | `NotificationTemplatesKey`
|
|
88
|
-
| `BLADE_BACK_BUTTON`
|
|
89
|
-
| `TOOLBAR_SERVICE`
|
|
90
|
-
| `EMBEDDED_MODE`
|
|
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
|
|
25
|
-
|
|
26
|
-
| `title`
|
|
27
|
-
| `manager`
|
|
28
|
-
| `disabled`
|
|
29
|
-
| `hiddenFields` | `string[]?`
|
|
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
|
|
75
|
-
|
|
76
|
-
| Add
|
|
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
|
|
16
|
-
|
|
17
|
-
| `title`
|
|
18
|
-
| `variant`
|
|
19
|
-
| `mode`
|
|
20
|
-
| `actionLabel`
|
|
21
|
-
| `confirmLabel`
|
|
22
|
-
| `cancelLabel`
|
|
23
|
-
| `confirmAsText`
|
|
24
|
-
| `closable`
|
|
25
|
-
| `isMobileFullscreen` | `boolean`
|
|
26
|
-
| `closeOnConfirm`
|
|
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
|
|
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
|
|
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
|
|
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>
|
|
@@ -35,11 +35,11 @@ With custom branding:
|
|
|
35
35
|
|
|
36
36
|
## Key Props
|
|
37
37
|
|
|
38
|
-
| Prop
|
|
39
|
-
|
|
40
|
-
| `forced`
|
|
41
|
-
| `logo`
|
|
42
|
-
| `background` | `string`
|
|
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
43
|
|
|
44
44
|
## Recipe: Router Configuration with Forced Mode
|
|
45
45
|
|
|
@@ -31,11 +31,11 @@ With custom branding:
|
|
|
31
31
|
|
|
32
32
|
## Key Props
|
|
33
33
|
|
|
34
|
-
| Prop
|
|
35
|
-
|
|
36
|
-
| `logo`
|
|
37
|
-
| `background` | `string`
|
|
38
|
-
| `composable` | `() => { forgotPassword }` | -
|
|
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
|
|
40
|
-
|
|
41
|
-
| `userId`
|
|
42
|
-
| `userName`
|
|
43
|
-
| `token`
|
|
44
|
-
| `logo`
|
|
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
|
|
38
|
-
|
|
39
|
-
| `logo`
|
|
40
|
-
| `background` | `string`
|
|
41
|
-
| `title`
|
|
42
|
-
| `subtitle`
|
|
43
|
-
| `ssoOnly`
|
|
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
|
|