@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.
- package/CHANGELOG.md +59 -47
- package/README.md +18 -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 +94 -0
- 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 +31 -27
- 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 +75 -19
- package/runtime/knowledge/docs/core/composables/useBladeRegistry/useBladeRegistry.docs.md +15 -15
- package/runtime/knowledge/docs/core/composables/useBladeWidgets/index.docs.md +74 -78
- 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 +10 -10
- 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/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 +24 -15
- 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 +107 -91
- 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 +98 -90
- 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 +102 -0
- 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 +12 -18
- 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 +104 -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 +59 -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 +96 -64
- package/runtime/knowledge/docs/ui/components/molecules/vc-checkbox-group/vc-checkbox-group.docs.md +26 -35
- package/runtime/knowledge/docs/ui/components/molecules/vc-color-input/vc-color-input.docs.md +69 -22
- package/runtime/knowledge/docs/ui/components/molecules/vc-date-picker/vc-date-picker.docs.md +58 -72
- 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 +60 -72
- package/runtime/knowledge/docs/ui/components/molecules/vc-field/vc-field.docs.md +65 -26
- package/runtime/knowledge/docs/ui/components/molecules/vc-file-upload/vc-file-upload.docs.md +46 -49
- 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 +115 -130
- package/runtime/knowledge/docs/ui/components/molecules/vc-input-currency/vc-input-currency.docs.md +53 -87
- package/runtime/knowledge/docs/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.docs.md +56 -63
- 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 +63 -64
- 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 +59 -19
- package/runtime/knowledge/docs/ui/components/molecules/vc-radio-group/vc-radio-group.docs.md +25 -34
- package/runtime/knowledge/docs/ui/components/molecules/vc-rating/vc-rating.docs.md +42 -32
- package/runtime/knowledge/docs/ui/components/molecules/vc-select/vc-select.docs.md +78 -82
- package/runtime/knowledge/docs/ui/components/molecules/vc-slider/vc-slider.docs.md +25 -15
- package/runtime/knowledge/docs/ui/components/molecules/vc-switch/vc-switch.docs.md +59 -63
- package/runtime/knowledge/docs/ui/components/molecules/vc-textarea/vc-textarea.docs.md +57 -69
- 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 +120 -75
- package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/composables/table-composables.docs.md +30 -44
- package/runtime/knowledge/docs/ui/components/organisms/vc-data-table/vc-data-table.docs.md +536 -365
- 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 +255 -0
- package/runtime/knowledge/migration-prompts/blade-props-migration.md +194 -0
- 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 +223 -0
- package/runtime/knowledge/migration-prompts/nswag-migration.md +244 -0
- 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 +178 -0
- 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 +354 -49
- package/runtime/knowledge/docs/core/constants/constants.docs.md +0 -185
|
@@ -14,66 +14,66 @@ All types are re-exported from `@vc-shell/framework`, so module developers impor
|
|
|
14
14
|
|
|
15
15
|
### Validation
|
|
16
16
|
|
|
17
|
-
| Type
|
|
18
|
-
|
|
17
|
+
| Type | Description |
|
|
18
|
+
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
19
19
|
| `IValidationRules` | Validation rule map for form fields. Supports `required`, `email`, `min`, `max`, `regex`, `between`, `confirmed`, `ext`, `mimes`, `dimensions`, `before`/`after` date comparison, and more. |
|
|
20
20
|
|
|
21
21
|
### Menu System (`menu-types.ts`)
|
|
22
22
|
|
|
23
|
-
| Type
|
|
24
|
-
|
|
25
|
-
| `MenuItemConfig`
|
|
26
|
-
| `MenuItemBadge`
|
|
27
|
-
| `MenuItemBadgeConfig` | Union: full `MenuItemBadge` object or shorthand `number \| string \| Ref \| ComputedRef \| function`.
|
|
28
|
-
| `MenuItem`
|
|
23
|
+
| Type | Description |
|
|
24
|
+
| --------------------- | ---------------------------------------------------------------------------------------------------------------------- |
|
|
25
|
+
| `MenuItemConfig` | Configuration for registering a menu item: `title`, `icon`, `priority`, `permissions`, `group`/`groupConfig`, `badge`. |
|
|
26
|
+
| `MenuItemBadge` | Badge display config: `content` (static, ref, computed, or function), `variant`, `isDot`. |
|
|
27
|
+
| `MenuItemBadgeConfig` | Union: full `MenuItemBadge` object or shorthand `number \| string \| Ref \| ComputedRef \| function`. |
|
|
28
|
+
| `MenuItem` | Runtime menu item extending `MenuItemConfig` with `routeId`, `url`, `children[]`, `groupIcon`, `groupId`. |
|
|
29
29
|
|
|
30
30
|
### Toolbar
|
|
31
31
|
|
|
32
|
-
| Type
|
|
33
|
-
|
|
34
|
-
| `IBladeToolbar`
|
|
35
|
-
| `ToolbarMenu<T>` | Generic toolbar menu item that infers component props from the provided component type.
|
|
32
|
+
| Type | Description |
|
|
33
|
+
| ---------------- | ------------------------------------------------------------------------------------------------------------------ |
|
|
34
|
+
| `IBladeToolbar` | Toolbar button config: `id`, `icon`, `disabled`, `title`, `isVisible`, `clickHandler`, `separator`, `permissions`. |
|
|
35
|
+
| `ToolbarMenu<T>` | Generic toolbar menu item that infers component props from the provided component type. |
|
|
36
36
|
|
|
37
37
|
### Table Columns
|
|
38
38
|
|
|
39
|
-
| Type
|
|
40
|
-
|
|
41
|
-
| `ITableColumnsBase`
|
|
42
|
-
| `ITableColumns`
|
|
43
|
-
| `IColumnFilterConfig` | Column filter: `true` (text), `string` (custom field), `{ options }` (select), `{ range }` (date range).
|
|
44
|
-
| `IFilterOption`
|
|
39
|
+
| Type | Description |
|
|
40
|
+
| --------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
41
|
+
| `ITableColumnsBase` | Column definition: `id`, `title`, `width`, `field`, `type` (money, date, image, status, etc.), `sortable`, `editable`, `rules`, `filter`, `mobilePosition`, `mobileVisible`. |
|
|
42
|
+
| `ITableColumns` | Union of `ITableColumnsBase` with specialized image and money column variants. |
|
|
43
|
+
| `IColumnFilterConfig` | Column filter: `true` (text), `string` (custom field), `{ options }` (select), `{ range }` (date range). |
|
|
44
|
+
| `IFilterOption` | Select filter option: `{ value, label }`. |
|
|
45
45
|
|
|
46
46
|
### Assets
|
|
47
47
|
|
|
48
|
-
| Type
|
|
49
|
-
|
|
50
|
-
| `ICommonAsset`
|
|
48
|
+
| Type | Description |
|
|
49
|
+
| ------------------ | ------------------------------------------------------------------------------------------ |
|
|
50
|
+
| `ICommonAsset` | Asset record: `url`, `relativeUrl`, `title`, `name`, `size`, `sortOrder`, `typeId`, dates. |
|
|
51
51
|
| `AssetsHandler<T>` | Asset operations: `upload()`, `edit()`, `remove()`, `loading` ref, `noRemoveConfirmation`. |
|
|
52
52
|
|
|
53
53
|
### Service Abstractions (`services.ts`)
|
|
54
54
|
|
|
55
|
-
| Type
|
|
56
|
-
|
|
57
|
-
| `ServiceLifecycle<T>`
|
|
58
|
-
| `PreregistrationQueue<T>`
|
|
59
|
-
| `RegistryService<TKey, TItem>` | Generic registry: `register()`, `unregister()`, `get()`, `has()`, `getAll()`, `clear()`.
|
|
60
|
-
| `ListService<T>`
|
|
61
|
-
| `OrderedListService<T>`
|
|
62
|
-
| `ObservableService<T>`
|
|
63
|
-
| `ServiceResult<T>`
|
|
64
|
-
| `WidgetRegistration`
|
|
65
|
-
| `MenuItemRegistration`
|
|
66
|
-
| `ToolbarItemRegistration`
|
|
55
|
+
| Type | Description |
|
|
56
|
+
| ------------------------------ | -------------------------------------------------------------------------------------------------- |
|
|
57
|
+
| `ServiceLifecycle<T>` | Service create/provide/cleanup lifecycle. |
|
|
58
|
+
| `PreregistrationQueue<T>` | Queue for items registered before a service initializes: `register()`, `flush()`, `clear()`. |
|
|
59
|
+
| `RegistryService<TKey, TItem>` | Generic registry: `register()`, `unregister()`, `get()`, `has()`, `getAll()`, `clear()`. |
|
|
60
|
+
| `ListService<T>` | Reactive list: `items` ref, `add()`, `remove()`, `find()`, `filter()`. |
|
|
61
|
+
| `OrderedListService<T>` | Extends `ListService` with `reorder()` and `getSorted()`. |
|
|
62
|
+
| `ObservableService<T>` | Subscribe/getValue pattern for change observation. |
|
|
63
|
+
| `ServiceResult<T>` | Async operation result: `success`, `data?`, `error?` with code/message/details. |
|
|
64
|
+
| `WidgetRegistration` | Widget entry: `id`, `component`, `props`, `order`, `isVisible`. |
|
|
65
|
+
| `MenuItemRegistration` | Menu item entry: `id`, `title`, `icon`, `priority`, `permissions`, `routeId`, `group`, `children`. |
|
|
66
|
+
| `ToolbarItemRegistration` | Toolbar item entry: `id`, `title`, `icon`, `order`, `disabled`, `clickHandler`, `permissions`. |
|
|
67
67
|
|
|
68
68
|
### Other
|
|
69
69
|
|
|
70
|
-
| Type
|
|
71
|
-
|
|
72
|
-
| `IBladeDropdownItem`
|
|
73
|
-
| `IMenuItem<T>`
|
|
74
|
-
| `NotificationTemplateConstructor` | Component constructor with a `notifyType` static field.
|
|
75
|
-
| `IActionBuilderResult<T>`
|
|
76
|
-
| `RequestPasswordResult`
|
|
70
|
+
| Type | Description |
|
|
71
|
+
| --------------------------------- | --------------------------------------------------------------------------------------------- |
|
|
72
|
+
| `IBladeDropdownItem` | Blade dropdown option: `id`, `title`, `icon`, `clickHandler`. |
|
|
73
|
+
| `IMenuItem<T>` | Generic menu item with optional component slot. |
|
|
74
|
+
| `NotificationTemplateConstructor` | Component constructor with a `notifyType` static field. |
|
|
75
|
+
| `IActionBuilderResult<T>` | Row action definition: `icon`, `title`, `type` (danger/success/warning/info), `clickHandler`. |
|
|
76
|
+
| `RequestPasswordResult` | Password reset result: `succeeded`, `error`, `errorCode`. |
|
|
77
77
|
|
|
78
78
|
## Usage Examples
|
|
79
79
|
|
|
@@ -8,13 +8,13 @@ The framework migrated from Moment.js to `date-fns`. These utilities handle the
|
|
|
8
8
|
|
|
9
9
|
## Exports
|
|
10
10
|
|
|
11
|
-
| Export
|
|
12
|
-
|
|
13
|
-
| `formatDateRelative`
|
|
14
|
-
| `formatDateWithPattern` | Formats a date using a Moment.js-compatible format string
|
|
15
|
-
| `convertMomentFormat`
|
|
16
|
-
| `resolveLocale`
|
|
17
|
-
| `resolveLocaleSync`
|
|
11
|
+
| Export | Description |
|
|
12
|
+
| ----------------------- | -------------------------------------------------------------------- |
|
|
13
|
+
| `formatDateRelative` | Formats a date as relative time (e.g., "3 hours ago", "2 days ago") |
|
|
14
|
+
| `formatDateWithPattern` | Formats a date using a Moment.js-compatible format string |
|
|
15
|
+
| `convertMomentFormat` | Converts a Moment.js format string to date-fns format |
|
|
16
|
+
| `resolveLocale` | Async: loads and caches a date-fns locale by code (e.g., "fr", "de") |
|
|
17
|
+
| `resolveLocaleSync` | Sync: returns cached locale or falls back to `enUS` while loading |
|
|
18
18
|
|
|
19
19
|
## Usage
|
|
20
20
|
|
|
@@ -48,30 +48,30 @@ formatDateWithPattern("2024-03-15T14:30:00Z", "LLL", "de");
|
|
|
48
48
|
```typescript
|
|
49
49
|
import { convertMomentFormat } from "@vc-shell/framework";
|
|
50
50
|
|
|
51
|
-
convertMomentFormat("YYYY-MM-DD");
|
|
52
|
-
convertMomentFormat("DD/MM/YYYY");
|
|
53
|
-
convertMomentFormat("LLL");
|
|
54
|
-
convertMomentFormat("dddd");
|
|
51
|
+
convertMomentFormat("YYYY-MM-DD"); // => "yyyy-MM-dd"
|
|
52
|
+
convertMomentFormat("DD/MM/YYYY"); // => "dd/MM/yyyy"
|
|
53
|
+
convertMomentFormat("LLL"); // => "PPp"
|
|
54
|
+
convertMomentFormat("dddd"); // => "EEEE"
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
### Token mapping reference
|
|
58
58
|
|
|
59
|
-
| Moment | date-fns | Meaning
|
|
60
|
-
|
|
61
|
-
| `YYYY` | `yyyy`
|
|
62
|
-
| `YY`
|
|
63
|
-
| `DD`
|
|
64
|
-
| `D`
|
|
65
|
-
| `Do`
|
|
66
|
-
| `dddd` | `EEEE`
|
|
67
|
-
| `ddd`
|
|
68
|
-
| `A`
|
|
69
|
-
| `L`
|
|
70
|
-
| `LL`
|
|
71
|
-
| `LLL`
|
|
72
|
-
| `LLLL` | `PPPp`
|
|
73
|
-
| `LT`
|
|
74
|
-
| `LTS`
|
|
59
|
+
| Moment | date-fns | Meaning |
|
|
60
|
+
| ------ | -------- | ---------------------------- |
|
|
61
|
+
| `YYYY` | `yyyy` | 4-digit year |
|
|
62
|
+
| `YY` | `yy` | 2-digit year |
|
|
63
|
+
| `DD` | `dd` | Day of month (zero-padded) |
|
|
64
|
+
| `D` | `d` | Day of month |
|
|
65
|
+
| `Do` | `do` | Day ordinal |
|
|
66
|
+
| `dddd` | `EEEE` | Weekday name |
|
|
67
|
+
| `ddd` | `EEE` | Weekday abbreviation |
|
|
68
|
+
| `A` | `a` | AM/PM |
|
|
69
|
+
| `L` | `P` | Localized date |
|
|
70
|
+
| `LL` | `PP` | Localized date (long) |
|
|
71
|
+
| `LLL` | `PPp` | Localized date + time |
|
|
72
|
+
| `LLLL` | `PPPp` | Localized date + time (full) |
|
|
73
|
+
| `LT` | `p` | Localized time |
|
|
74
|
+
| `LTS` | `pp` | Localized time with seconds |
|
|
75
75
|
|
|
76
76
|
### Locale resolution
|
|
77
77
|
|
|
@@ -8,18 +8,18 @@ This directory provides small, focused utility modules for asset handling, color
|
|
|
8
8
|
|
|
9
9
|
## Exports
|
|
10
10
|
|
|
11
|
-
| Export
|
|
12
|
-
|
|
13
|
-
| `isImage(name)`
|
|
14
|
-
| `getFileThumbnail(name)`
|
|
15
|
-
| `readableSize(bytes)`
|
|
16
|
-
| `convertColorNameToHex(name)` | `colorUtils.ts`
|
|
17
|
-
| `isValidHexColor(value)`
|
|
18
|
-
| `normalizeHexColor(hex)`
|
|
19
|
-
| `formatBadgeCount(value)`
|
|
20
|
-
| `ComponentProps<T>`
|
|
21
|
-
| `ComponentSlots<T>`
|
|
22
|
-
| `ComponentEmit<T>`
|
|
11
|
+
| Export | Module | Description |
|
|
12
|
+
| ----------------------------- | --------------------- | --------------------------------------------------------------------------- |
|
|
13
|
+
| `isImage(name)` | `assets.ts` | Returns `true` if the file extension is an image (png, jpg, jpeg, svg, gif) |
|
|
14
|
+
| `getFileThumbnail(name)` | `assets.ts` | Returns a Bootstrap icon class for the file type (e.g., `bi-filetype-pdf`) |
|
|
15
|
+
| `readableSize(bytes)` | `assets.ts` | Formats byte count as human-readable string (e.g., `"1.5 MB"`) |
|
|
16
|
+
| `convertColorNameToHex(name)` | `colorUtils.ts` | Converts a CSS color name to hex using the Canvas API |
|
|
17
|
+
| `isValidHexColor(value)` | `colorUtils.ts` | Validates a 6-digit hex color string |
|
|
18
|
+
| `normalizeHexColor(hex)` | `colorUtils.ts` | Ensures hex string starts with `#` |
|
|
19
|
+
| `formatBadgeCount(value)` | `formatBadgeCount.ts` | Truncates numbers > 99 to `"99+"` for badge display |
|
|
20
|
+
| `ComponentProps<T>` | `vueUtils.ts` | Extracts props type from a Vue component |
|
|
21
|
+
| `ComponentSlots<T>` | `vueUtils.ts` | Extracts slots type from a Vue component |
|
|
22
|
+
| `ComponentEmit<T>` | `vueUtils.ts` | Extracts emit type from a Vue component |
|
|
23
23
|
|
|
24
24
|
## Usage
|
|
25
25
|
|
|
@@ -28,15 +28,15 @@ This directory provides small, focused utility modules for asset handling, color
|
|
|
28
28
|
```typescript
|
|
29
29
|
import { isImage, getFileThumbnail, readableSize } from "@vc-shell/framework";
|
|
30
30
|
|
|
31
|
-
isImage("photo.jpg");
|
|
32
|
-
isImage("document.pdf");
|
|
31
|
+
isImage("photo.jpg"); // true
|
|
32
|
+
isImage("document.pdf"); // false
|
|
33
33
|
|
|
34
34
|
getFileThumbnail("report.xlsx"); // "bi-filetype-xls"
|
|
35
35
|
getFileThumbnail("archive.zip"); // "bi-file-zip"
|
|
36
36
|
getFileThumbnail("unknown.abc"); // "bi-file-earmark"
|
|
37
37
|
|
|
38
|
-
readableSize(1536);
|
|
39
|
-
readableSize(0);
|
|
38
|
+
readableSize(1536); // "1.5 KB"
|
|
39
|
+
readableSize(0); // "0 Bytes"
|
|
40
40
|
```
|
|
41
41
|
|
|
42
42
|
### Color utilities
|
|
@@ -44,14 +44,14 @@ readableSize(0); // "0 Bytes"
|
|
|
44
44
|
```typescript
|
|
45
45
|
import { convertColorNameToHex, isValidHexColor, normalizeHexColor } from "@vc-shell/framework";
|
|
46
46
|
|
|
47
|
-
convertColorNameToHex("red");
|
|
47
|
+
convertColorNameToHex("red"); // "#ff0000"
|
|
48
48
|
convertColorNameToHex("invalid"); // null
|
|
49
49
|
|
|
50
|
-
isValidHexColor("#ff0000");
|
|
51
|
-
isValidHexColor("ff0000");
|
|
52
|
-
isValidHexColor("#fff");
|
|
50
|
+
isValidHexColor("#ff0000"); // true
|
|
51
|
+
isValidHexColor("ff0000"); // true (checks with/without #)
|
|
52
|
+
isValidHexColor("#fff"); // false (only 6-digit supported)
|
|
53
53
|
|
|
54
|
-
normalizeHexColor("ff0000");
|
|
54
|
+
normalizeHexColor("ff0000"); // "#ff0000"
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
### Badge formatting
|
|
@@ -59,8 +59,8 @@ normalizeHexColor("ff0000"); // "#ff0000"
|
|
|
59
59
|
```typescript
|
|
60
60
|
import { formatBadgeCount } from "@vc-shell/framework";
|
|
61
61
|
|
|
62
|
-
formatBadgeCount(5);
|
|
63
|
-
formatBadgeCount(150);
|
|
62
|
+
formatBadgeCount(5); // "5"
|
|
63
|
+
formatBadgeCount(150); // "99+"
|
|
64
64
|
formatBadgeCount(undefined); // undefined
|
|
65
65
|
```
|
|
66
66
|
|
|
@@ -12,21 +12,21 @@ Transforms full-size image URLs into thumbnail variants by appending size suffix
|
|
|
12
12
|
|
|
13
13
|
### Named Presets
|
|
14
14
|
|
|
15
|
-
| Preset | Use Case
|
|
16
|
-
|
|
17
|
-
| `sm`
|
|
18
|
-
| `md`
|
|
19
|
-
| `lg`
|
|
15
|
+
| Preset | Use Case |
|
|
16
|
+
| ------ | ------------------------------------------- |
|
|
17
|
+
| `sm` | Small icons, table cells, avatar thumbnails |
|
|
18
|
+
| `md` | Medium previews, cards |
|
|
19
|
+
| `lg` | Large previews, hero images |
|
|
20
20
|
|
|
21
21
|
### Pixel Sizes
|
|
22
22
|
|
|
23
|
-
| Size
|
|
24
|
-
|
|
25
|
-
| `64x64`
|
|
26
|
-
| `128x128` | 128px
|
|
27
|
-
| `168x168` | 168px
|
|
28
|
-
| `216x216` | 216px
|
|
29
|
-
| `348x348` | 348px
|
|
23
|
+
| Size | Pixels | Use Case |
|
|
24
|
+
| --------- | ------ | ---------------------------- |
|
|
25
|
+
| `64x64` | 64px | Table cells, tiny thumbnails |
|
|
26
|
+
| `128x128` | 128px | Small tiles, list items |
|
|
27
|
+
| `168x168` | 168px | Medium tiles |
|
|
28
|
+
| `216x216` | 216px | Gallery tiles (md) |
|
|
29
|
+
| `348x348` | 348px | Large gallery tiles |
|
|
30
30
|
|
|
31
31
|
## API
|
|
32
32
|
|
|
@@ -37,20 +37,21 @@ Transforms an image URL by inserting a size suffix before the file extension.
|
|
|
37
37
|
```ts
|
|
38
38
|
import { getThumbnailUrl } from "@core/utilities/thumbnail";
|
|
39
39
|
|
|
40
|
-
getThumbnailUrl("https://cdn.example.com/photo.jpg", "sm")
|
|
40
|
+
getThumbnailUrl("https://cdn.example.com/photo.jpg", "sm");
|
|
41
41
|
// → "https://cdn.example.com/photo_sm.jpg"
|
|
42
42
|
|
|
43
|
-
getThumbnailUrl("https://cdn.example.com/photo.jpg", "128x128")
|
|
43
|
+
getThumbnailUrl("https://cdn.example.com/photo.jpg", "128x128");
|
|
44
44
|
// → "https://cdn.example.com/photo_128x128.jpg"
|
|
45
45
|
|
|
46
|
-
getThumbnailUrl("https://cdn.example.com/photo.jpg")
|
|
46
|
+
getThumbnailUrl("https://cdn.example.com/photo.jpg");
|
|
47
47
|
// → "https://cdn.example.com/photo.jpg" (unchanged)
|
|
48
48
|
|
|
49
|
-
getThumbnailUrl(undefined, "sm")
|
|
49
|
+
getThumbnailUrl(undefined, "sm");
|
|
50
50
|
// → undefined
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
**Parameters:**
|
|
54
|
+
|
|
54
55
|
- `url` — Original image URL (string or undefined)
|
|
55
56
|
- `size` — Thumbnail size preset or pixel dimensions (optional)
|
|
56
57
|
|
|
@@ -63,10 +64,10 @@ Maps a CSS pixel display size to the best-fit thumbnail preset. Picks the smalle
|
|
|
63
64
|
```ts
|
|
64
65
|
import { getBestThumbnailSize } from "@core/utilities/thumbnail";
|
|
65
66
|
|
|
66
|
-
getBestThumbnailSize(48)
|
|
67
|
-
getBestThumbnailSize(96)
|
|
68
|
-
getBestThumbnailSize(200)
|
|
69
|
-
getBestThumbnailSize(500)
|
|
67
|
+
getBestThumbnailSize(48); // → "64x64"
|
|
68
|
+
getBestThumbnailSize(96); // → "128x128"
|
|
69
|
+
getBestThumbnailSize(200); // → "216x216"
|
|
70
|
+
getBestThumbnailSize(500); // → "lg"
|
|
70
71
|
```
|
|
71
72
|
|
|
72
73
|
## Usage in Components
|
|
@@ -74,11 +75,7 @@ getBestThumbnailSize(500) // → "lg"
|
|
|
74
75
|
### VcImage
|
|
75
76
|
|
|
76
77
|
```vue
|
|
77
|
-
<VcImage
|
|
78
|
-
:src="product.imgSrc"
|
|
79
|
-
thumbnail-size="sm"
|
|
80
|
-
size="s"
|
|
81
|
-
/>
|
|
78
|
+
<VcImage :src="product.imgSrc" thumbnail-size="sm" size="s" />
|
|
82
79
|
```
|
|
83
80
|
|
|
84
81
|
### VcGallery
|
|
@@ -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
|