@vc-shell/framework 1.1.22 → 1.1.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/core/composables/useAppInsights/index.ts +11 -1
  3. package/core/composables/useBladeRegistry/index.ts +176 -0
  4. package/core/composables/useDynamicProperties/index.ts +380 -255
  5. package/core/composables/useErrorHandler/index.ts +2 -3
  6. package/core/composables/useLanguages/index.ts +78 -78
  7. package/core/plugins/modularity/index.ts +17 -6
  8. package/core/services/global-search-service/index.ts +36 -0
  9. package/dist/core/composables/useAppInsights/index.d.ts +5 -2
  10. package/dist/core/composables/useAppInsights/index.d.ts.map +1 -1
  11. package/dist/core/composables/useBladeRegistry/index.d.ts +48 -0
  12. package/dist/core/composables/useBladeRegistry/index.d.ts.map +1 -0
  13. package/dist/core/composables/useDynamicProperties/index.d.ts +11 -9
  14. package/dist/core/composables/useDynamicProperties/index.d.ts.map +1 -1
  15. package/dist/core/composables/useErrorHandler/index.d.ts.map +1 -1
  16. package/dist/core/plugins/modularity/index.d.ts.map +1 -1
  17. package/dist/core/services/global-search-service/index.d.ts +10 -0
  18. package/dist/core/services/global-search-service/index.d.ts.map +1 -0
  19. package/dist/framework.js +1 -1
  20. package/dist/{index-BQtOyLub.js → index-BLmjssqE.js} +1 -1
  21. package/dist/{index-C_zSZ2pX.js → index-BYcoxn-f.js} +1 -1
  22. package/dist/{index-wjw1DwqR.js → index-BbuBDu8A.js} +1 -1
  23. package/dist/{index-DqDgL4W3.js → index-BnqqEJTE.js} +1 -1
  24. package/dist/{index--KQZx7Nr.js → index-Br7ZwtRW.js} +1 -1
  25. package/dist/{index-DwjKpYAo.js → index-CGL9e-cM.js} +1 -1
  26. package/dist/{index-DoHQrH4a.js → index-CIzLBvgg.js} +1 -1
  27. package/dist/{index-DFdFt54f.js → index-CLAYu8Qj.js} +1 -1
  28. package/dist/{index-BxrA7EzT.js → index-CRwMOCjN.js} +1 -1
  29. package/dist/{index-DL0-yUXC.js → index-Cmbxdwnl.js} +1 -1
  30. package/dist/{index-Bf4s6An9.js → index-Cxkjjuah.js} +1 -1
  31. package/dist/{index-xCbUzsUb.js → index-DAnceKLv.js} +1 -1
  32. package/dist/{index-BAngL0ix.js → index-Dk1K3-27.js} +1 -1
  33. package/dist/{index-d16x5dY_.js → index-DoArZBIw.js} +1 -1
  34. package/dist/{index-C-y5H4_R.js → index-DvenBxy6.js} +45753 -45502
  35. package/dist/{index-DI3UVoln.js → index-cuex9jil.js} +1 -1
  36. package/dist/{index--F0eI_oT.js → index-eOG-NNYN.js} +1 -1
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/index.d.ts +7 -12
  39. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/index.d.ts.map +1 -1
  40. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/internal/bladeActions.d.ts +15 -0
  41. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/internal/bladeActions.d.ts.map +1 -0
  42. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/internal/bladeRouteResolver.d.ts +11 -0
  43. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/internal/bladeRouteResolver.d.ts.map +1 -0
  44. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/internal/bladeState.d.ts +15 -0
  45. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/internal/bladeState.d.ts.map +1 -0
  46. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/internal/bladeWatchers.d.ts +6 -0
  47. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/internal/bladeWatchers.d.ts.map +1 -0
  48. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/internal/routerUtils.d.ts +28 -0
  49. package/dist/shared/components/blade-navigation/composables/useBladeNavigation/internal/routerUtils.d.ts.map +1 -0
  50. package/dist/shared/components/blade-navigation/plugin.d.ts.map +1 -1
  51. package/dist/shared/components/blade-navigation/types/index.d.ts +5 -5
  52. package/dist/shared/components/blade-navigation/types/index.d.ts.map +1 -1
  53. package/dist/shared/components/notification-template/notification-template.vue.d.ts +2 -2
  54. package/dist/shared/components/notification-template/notification-template.vue.d.ts.map +1 -1
  55. package/dist/shared/modules/dynamic/components/fields/storybook/pages/DynamicRender.d.ts +1 -9
  56. package/dist/shared/modules/dynamic/components/fields/storybook/pages/DynamicRender.d.ts.map +1 -1
  57. package/dist/shared/modules/dynamic/index.d.ts.map +1 -1
  58. package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts +2 -18
  59. package/dist/shared/modules/dynamic/pages/dynamic-blade-form.vue.d.ts.map +1 -1
  60. package/dist/tsconfig.tsbuildinfo +1 -1
  61. package/dist/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.vue.d.ts +2 -0
  62. package/dist/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.vue.d.ts.map +1 -1
  63. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts.map +1 -1
  64. package/dist/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue.d.ts.map +1 -1
  65. package/package.json +4 -4
  66. package/shared/components/blade-navigation/composables/useBladeNavigation/index.ts +199 -597
  67. package/shared/components/blade-navigation/composables/useBladeNavigation/internal/bladeActions.ts +151 -0
  68. package/shared/components/blade-navigation/composables/useBladeNavigation/internal/bladeRouteResolver.ts +243 -0
  69. package/shared/components/blade-navigation/composables/useBladeNavigation/internal/bladeState.ts +93 -0
  70. package/shared/components/blade-navigation/composables/useBladeNavigation/internal/bladeWatchers.ts +90 -0
  71. package/shared/components/blade-navigation/composables/useBladeNavigation/internal/routerUtils.ts +150 -0
  72. package/shared/components/blade-navigation/plugin.ts +17 -12
  73. package/shared/components/blade-navigation/types/index.ts +2 -4
  74. package/shared/components/notification-template/notification-template.vue +2 -2
  75. package/shared/modules/dynamic/index.ts +2 -8
  76. package/ui/components/molecules/vc-input-dropdown/vc-input-dropdown.vue +4 -0
  77. package/ui/components/organisms/vc-app/vc-app.vue +11 -6
  78. package/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue +10 -1
package/CHANGELOG.md CHANGED
@@ -1,3 +1,24 @@
1
+ ## [1.1.24](https://github.com/VirtoCommerce/vc-shell/compare/v1.1.23...v1.1.24) (2025-05-29)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **useDynamicProperties:** export SetPropertyValueParams interface for better accessibility in dynamic properties management ([bddd03f](https://github.com/VirtoCommerce/vc-shell/commit/bddd03f08fd0bb15754109064887ef22c7acf542))
7
+
8
+
9
+
10
+ ## [1.1.23](https://github.com/VirtoCommerce/vc-shell/compare/v1.1.22...v1.1.23) (2025-05-29)
11
+
12
+
13
+ ### Features
14
+
15
+ * **blade-navigation:** implement blade registry and enhance navigation functionality with state management and routing utilities ([ab76268](https://github.com/VirtoCommerce/vc-shell/commit/ab762680f03e1c2a130ff802b8fbbbbf96e7b86a))
16
+ * **blade-registry:** integrate Blade Registry into the application, enhance error handling for main route validation, and update notification component types for improved type safety ([2535a78](https://github.com/VirtoCommerce/vc-shell/commit/2535a78be870edaf4f563aa69dd0f76b2a6729a5))
17
+ * **useAppInsights:** enhance app insights integration with page tracking and expose appInsights instance ([603c2b8](https://github.com/VirtoCommerce/vc-shell/commit/603c2b81b82a320209ba5da7685fd36f2797074d))
18
+ * **useDynamicProperties:** refactor dynamic properties composable with improved type definitions and utility functions; enhance vc-input-dropdown and vc-dynamic-property components for multilingual support ([4e13175](https://github.com/VirtoCommerce/vc-shell/commit/4e1317545c59cf3aeeaf9141a3f395825c04d285))
19
+
20
+
21
+
1
22
  ## [1.1.22](https://github.com/VirtoCommerce/vc-shell/compare/v1.1.21...v1.1.22) (2025-05-28)
2
23
 
3
24
 
@@ -2,8 +2,17 @@ import { inject } from "vue";
2
2
  import { AppInsightsPluginOptions, useAppInsights as useInsights } from "vue3-application-insights";
3
3
  import { generateW3CId } from "@microsoft/applicationinsights-core-js";
4
4
  import { useUser } from "./../useUser";
5
+ import { ApplicationInsights, Snippet } from "@microsoft/applicationinsights-web";
5
6
 
6
- export function useAppInsights() {
7
+ export interface IUseAppInsights {
8
+ setupPageTracking: {
9
+ beforeEach: (route: { name: string }) => void;
10
+ afterEach: (route: { name: string; fullPath: string }) => void;
11
+ };
12
+ appInsights: ApplicationInsights;
13
+ }
14
+
15
+ export function useAppInsights(): IUseAppInsights {
7
16
  const appInsights = useInsights();
8
17
  const { user } = useUser();
9
18
  const appInsightsOptions = inject<AppInsightsPluginOptions>("appInsightsOptions");
@@ -40,5 +49,6 @@ export function useAppInsights() {
40
49
 
41
50
  return {
42
51
  setupPageTracking: setupPageTracking(),
52
+ appInsights,
43
53
  };
44
54
  }
@@ -0,0 +1,176 @@
1
+ import { App, inject, shallowRef, computed, ComputedRef, readonly as vueReadonly } from "vue";
2
+ import { BladeInstanceConstructor } from "../../../shared/components/blade-navigation/types";
3
+
4
+ /**
5
+ * Interface for blade registration data
6
+ */
7
+ export interface IBladeRegistrationData {
8
+ component: BladeInstanceConstructor;
9
+ route?: string;
10
+ isWorkspace?: boolean;
11
+ // ... other metadata
12
+ }
13
+
14
+ /**
15
+ * Injection key for provide/inject pattern
16
+ */
17
+ export const BladeRegistryKey = Symbol("BladeRegistry");
18
+
19
+ /**
20
+ * Public interface for blade registry
21
+ */
22
+ export interface IBladeRegistry {
23
+ /** Readonly map of all registered blades */
24
+ readonly registeredBladesMap: ComputedRef<ReadonlyMap<string, IBladeRegistrationData>>;
25
+ /** Get blade registration data by name */
26
+ getBlade: (name: string) => IBladeRegistrationData | undefined;
27
+ /** Get blade component by name */
28
+ getBladeComponent: (name: string) => BladeInstanceConstructor | undefined;
29
+ }
30
+
31
+ /**
32
+ * Extended interface for blade registry instance with internal registration function
33
+ */
34
+ export interface IBladeRegistryInstance extends IBladeRegistry {
35
+ _registerBladeFn: (name: string, registrationData: IBladeRegistrationData) => void;
36
+ }
37
+
38
+ /**
39
+ * Validates if a component is a valid blade component
40
+ */
41
+ function isValidBladeComponent(component: unknown): component is BladeInstanceConstructor {
42
+ if (!component || (typeof component !== "function" && typeof component !== "object")) {
43
+ return false;
44
+ }
45
+
46
+ // Additional validation for blade-specific properties could be added here
47
+ // For now, we accept any function or object that could be a Vue component
48
+ return true;
49
+ }
50
+
51
+ /**
52
+ * Creates a blade registry instance
53
+ * This function should be called once during application initialization
54
+ *
55
+ * @param app - Vue application instance
56
+ * @returns Blade registry instance with registration capabilities
57
+ */
58
+ export function createBladeRegistry(app: App): IBladeRegistryInstance {
59
+ const registeredBladesInternal = shallowRef<Map<string, IBladeRegistrationData>>(new Map());
60
+
61
+ /**
62
+ * Registers a blade component in the registry
63
+ *
64
+ * @param name - Unique name for the blade
65
+ * @param registrationData - Blade registration data including component and metadata
66
+ */
67
+ function registerBlade(name: string, registrationData: IBladeRegistrationData): void {
68
+ if (!name || typeof name !== "string") {
69
+ throw new Error("BladeRegistry: Blade name must be a non-empty string");
70
+ }
71
+
72
+ if (!registrationData?.component) {
73
+ throw new Error(`BladeRegistry: Registration data must include a component for blade '${name}'`);
74
+ }
75
+
76
+ if (!isValidBladeComponent(registrationData.component)) {
77
+ throw new Error(`BladeRegistry: Invalid component provided for blade '${name}'`);
78
+ }
79
+
80
+ // Create new map to trigger reactivity
81
+ const newMap = new Map(registeredBladesInternal.value);
82
+
83
+ if (newMap.has(name)) {
84
+ console.warn(`BladeRegistry: Blade '${name}' is already registered. It will be overwritten.`);
85
+ }
86
+
87
+ // Register component globally if not already registered or different
88
+ const existingGlobalComponent = app.component(name);
89
+ if (!existingGlobalComponent || existingGlobalComponent !== registrationData.component) {
90
+ if (existingGlobalComponent && existingGlobalComponent !== registrationData.component) {
91
+ console.warn(
92
+ `BladeRegistry: Global component '${name}' already exists and is different. Overwriting with new blade component.`,
93
+ );
94
+ }
95
+ app.component(name, registrationData.component);
96
+ }
97
+
98
+ newMap.set(name, registrationData);
99
+ registeredBladesInternal.value = newMap;
100
+ }
101
+
102
+ /**
103
+ * Gets blade registration data by name
104
+ *
105
+ * @param name - Blade name
106
+ * @returns Registration data or undefined if not found
107
+ */
108
+ function getBlade(name: string): IBladeRegistrationData | undefined {
109
+ if (!name || typeof name !== "string") {
110
+ return undefined;
111
+ }
112
+ return registeredBladesInternal.value.get(name);
113
+ }
114
+
115
+ /**
116
+ * Gets blade component by name
117
+ * Checks registry first, then falls back to global components
118
+ *
119
+ * @param name - Blade name
120
+ * @returns Blade component or undefined if not found
121
+ */
122
+ function getBladeComponent(name: string): BladeInstanceConstructor | undefined {
123
+ if (!name || typeof name !== "string") {
124
+ return undefined;
125
+ }
126
+
127
+ // First check registry
128
+ const registration = registeredBladesInternal.value.get(name);
129
+ if (registration) {
130
+ return registration.component;
131
+ }
132
+
133
+ // Fallback to global components
134
+ try {
135
+ const globalComponent = app._context.components[name] as BladeInstanceConstructor | undefined;
136
+ if (globalComponent && isValidBladeComponent(globalComponent)) {
137
+ return globalComponent;
138
+ }
139
+ } catch (error) {
140
+ console.warn(`BladeRegistry: Error accessing global component '${name}':`, error);
141
+ }
142
+
143
+ return undefined;
144
+ }
145
+
146
+ // Cache the readonly map to avoid recreating it on every access
147
+ const readonlyBladesMap = computed(() => vueReadonly(registeredBladesInternal.value));
148
+
149
+ const registryApi: IBladeRegistry = {
150
+ registeredBladesMap: readonlyBladesMap,
151
+ getBlade,
152
+ getBladeComponent,
153
+ };
154
+
155
+ return {
156
+ ...registryApi,
157
+ _registerBladeFn: registerBlade,
158
+ };
159
+ }
160
+
161
+ /**
162
+ * Composable function for accessing blade registry
163
+ * Must be used after createBladeRegistry is called and provided with BladeRegistryKey
164
+ *
165
+ * @returns Blade registry interface
166
+ * @throws Error if registry is not available
167
+ */
168
+ export function useBladeRegistry(): IBladeRegistry {
169
+ const registry = inject<IBladeRegistry>(BladeRegistryKey);
170
+ if (!registry) {
171
+ throw new Error(
172
+ "useBladeRegistry must be used after createBladeRegistry is called and provided with BladeRegistryKey.",
173
+ );
174
+ }
175
+ return registry;
176
+ }