@vc-shell/framework 1.1.0-alpha.3 → 1.1.0-alpha.4

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 (156) hide show
  1. package/core/composables/index.ts +18 -17
  2. package/core/composables/useDashboard/index.ts +19 -0
  3. package/core/composables/{useGlobalSearch.ts → useGlobalSearch/index.ts} +3 -5
  4. package/core/composables/useWidgets/index.ts +19 -18
  5. package/core/plugins/modularity/loader.ts +2 -1
  6. package/core/services/dashboard-service.ts +121 -0
  7. package/core/services/widget-service.ts +1 -4
  8. package/dist/core/composables/index.d.ts +1 -0
  9. package/dist/core/composables/index.d.ts.map +1 -1
  10. package/dist/core/composables/useDashboard/index.d.ts +5 -0
  11. package/dist/core/composables/useDashboard/index.d.ts.map +1 -0
  12. package/dist/core/composables/{useGlobalSearch.d.ts → useGlobalSearch/index.d.ts} +1 -1
  13. package/dist/core/composables/useGlobalSearch/index.d.ts.map +1 -0
  14. package/dist/core/plugins/modularity/loader.d.ts.map +1 -1
  15. package/dist/core/services/dashboard-service.d.ts +33 -0
  16. package/dist/core/services/dashboard-service.d.ts.map +1 -0
  17. package/dist/core/services/widget-service.d.ts.map +1 -1
  18. package/dist/framework.js +235 -225
  19. package/dist/{index-Bu12RZTu.js → index-8LELHzw9.js} +1 -1
  20. package/dist/{index-Bwl2ND2Q.js → index-9lJxZE5w.js} +1 -1
  21. package/dist/{index-CJi-BbTb.js → index-B1YR_MYV.js} +1 -1
  22. package/dist/{index-BhdwVgUw.js → index-BA98L1jI.js} +1 -1
  23. package/dist/{index-NdrUF1u3.js → index-BAeTsi-X.js} +1 -1
  24. package/dist/{index-CbRqPQTw.js → index-BBYyHeYA.js} +1 -1
  25. package/dist/{index-CsaYfhir.js → index-BrUitdDo.js} +1 -1
  26. package/dist/{index-CZ_pj3nW.js → index-BuO5ByG9.js} +1 -1
  27. package/dist/{index-DFPb-jDP.js → index-CJ5I7vTn.js} +1 -1
  28. package/dist/{index-BdoAu2fz.js → index-CWKrD2Cd.js} +1 -1
  29. package/dist/{index-DVaMW7gL.js → index-Cf9Tz1ql.js} +1 -1
  30. package/dist/{index-B89uIUkS.js → index-CrxFDC2b.js} +1 -1
  31. package/dist/{index-BcQiBkO6.js → index-D1JchciU.js} +1 -1
  32. package/dist/{index-CEvuTGIu.js → index-DLtsQ_PJ.js} +31254 -31134
  33. package/dist/{index-COjjAS6v.js → index-DVljTjbf.js} +1 -1
  34. package/dist/{index-DjQ6Ffv8.js → index-RwX3kiZh.js} +28 -28
  35. package/dist/{index-S9Ht7s3i.js → index-xLYzNPa7.js} +1 -1
  36. package/dist/index.css +1 -1
  37. package/dist/injection-keys.d.ts +28 -0
  38. package/dist/injection-keys.d.ts.map +1 -1
  39. package/dist/shared/components/dashboard-widget-card/dashboard-widget-card.vue.d.ts +25 -0
  40. package/dist/shared/components/dashboard-widget-card/dashboard-widget-card.vue.d.ts.map +1 -0
  41. package/dist/shared/components/dashboard-widget-card/index.d.ts +2 -0
  42. package/dist/shared/components/dashboard-widget-card/index.d.ts.map +1 -0
  43. package/dist/shared/components/draggable-dashboard/DraggableDashboard.vue.d.ts +6 -0
  44. package/dist/shared/components/draggable-dashboard/DraggableDashboard.vue.d.ts.map +1 -0
  45. package/dist/shared/components/draggable-dashboard/_internal/DashboardWidget.vue.d.ts +20 -0
  46. package/dist/shared/components/draggable-dashboard/_internal/DashboardWidget.vue.d.ts.map +1 -0
  47. package/dist/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.d.ts +354 -0
  48. package/dist/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.d.ts.map +1 -0
  49. package/dist/shared/components/draggable-dashboard/composables/useDashboardGrid.d.ts +12 -0
  50. package/dist/shared/components/draggable-dashboard/composables/useDashboardGrid.d.ts.map +1 -0
  51. package/dist/shared/components/draggable-dashboard/index.d.ts +2 -0
  52. package/dist/shared/components/draggable-dashboard/index.d.ts.map +1 -0
  53. package/dist/shared/components/draggable-dashboard/types.d.ts +80 -0
  54. package/dist/shared/components/draggable-dashboard/types.d.ts.map +1 -0
  55. package/dist/shared/components/index.d.ts +2 -0
  56. package/dist/shared/components/index.d.ts.map +1 -1
  57. package/dist/shared/components/user-dropdown-button/_internal/user-info.vue.d.ts.map +1 -1
  58. package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts.map +1 -1
  59. package/dist/shared/composables/useMenuExpanded.d.ts +2 -0
  60. package/dist/shared/composables/useMenuExpanded.d.ts.map +1 -1
  61. package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts +0 -41
  62. package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts.map +1 -1
  63. package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts.map +1 -1
  64. package/dist/shared/modules/dynamic/components/fields/storybook/common/templates.d.ts +1 -1
  65. package/dist/shared/modules/dynamic/components/fields/storybook/common/templates.d.ts.map +1 -1
  66. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts +2 -25
  67. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts.map +1 -1
  68. package/dist/tailwind.config.d.ts +1 -81
  69. package/dist/tailwind.config.d.ts.map +1 -1
  70. package/dist/tsconfig.tsbuildinfo +1 -1
  71. package/dist/ui/components/atoms/vc-button/vc-button.stories.d.ts +169 -734
  72. package/dist/ui/components/atoms/vc-button/vc-button.stories.d.ts.map +1 -1
  73. package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts +18 -2
  74. package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts.map +1 -1
  75. package/dist/ui/components/atoms/vc-card/index.d.ts +2 -0
  76. package/dist/ui/components/atoms/vc-card/index.d.ts.map +1 -1
  77. package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts +12 -0
  78. package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts.map +1 -1
  79. package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts +2 -0
  80. package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts.map +1 -1
  81. package/dist/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue.d.ts +18 -0
  82. package/dist/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue.d.ts.map +1 -0
  83. package/dist/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue.d.ts +18 -0
  84. package/dist/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue.d.ts.map +1 -0
  85. package/dist/ui/components/atoms/vc-icon/icons/index.d.ts +2 -0
  86. package/dist/ui/components/atoms/vc-icon/icons/index.d.ts.map +1 -1
  87. package/dist/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.d.ts +2 -0
  88. package/dist/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.d.ts.map +1 -1
  89. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts +0 -1
  90. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts.map +1 -1
  91. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue.d.ts +2 -1
  92. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue.d.ts.map +1 -1
  93. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue.d.ts.map +1 -1
  94. package/dist/ui/components/organisms/vc-app/vc-app.stories.d.ts +13 -67
  95. package/dist/ui/components/organisms/vc-app/vc-app.stories.d.ts.map +1 -1
  96. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts +5 -65
  97. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts.map +1 -1
  98. package/dist/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue.d.ts.map +1 -1
  99. package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/{vc-table-header/vc-table-header.vue.d.ts → vc-table-columns-header/vc-table-columns-header.vue.d.ts} +1 -1
  100. package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-columns-header/vc-table-columns-header.vue.d.ts.map +1 -0
  101. package/dist/ui/components/organisms/vc-table/_internal/vc-table-header/vc-table-header.vue.d.ts.map +1 -1
  102. package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue.d.ts +33 -3
  103. package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue.d.ts.map +1 -1
  104. package/dist/ui/components/organisms/vc-table/composables/useTableRowReorder.d.ts.map +1 -1
  105. package/package.json +10 -5
  106. package/shared/components/dashboard-widget-card/dashboard-widget-card.vue +67 -0
  107. package/shared/components/dashboard-widget-card/index.ts +1 -0
  108. package/shared/components/draggable-dashboard/DraggableDashboard.vue +369 -0
  109. package/shared/components/draggable-dashboard/_internal/DashboardWidget.vue +133 -0
  110. package/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.ts +547 -0
  111. package/shared/components/draggable-dashboard/composables/useDashboardGrid.ts +250 -0
  112. package/shared/components/draggable-dashboard/index.ts +1 -0
  113. package/shared/components/draggable-dashboard/types.ts +91 -0
  114. package/shared/components/index.ts +2 -0
  115. package/shared/components/user-dropdown-button/_internal/user-info.vue +25 -12
  116. package/shared/components/user-dropdown-button/user-dropdown-button.vue +3 -3
  117. package/shared/composables/useMenuExpanded.ts +24 -0
  118. package/shared/modules/assets/components/assets-details/assets-details.vue +1 -1
  119. package/shared/modules/dynamic/components/fields/storybook/Button.stories.ts +186 -247
  120. package/shared/modules/dynamic/components/fields/storybook/Card.stories.ts +175 -176
  121. package/shared/modules/dynamic/components/fields/storybook/common/templates.ts +8 -8
  122. package/shared/modules/dynamic/pages/dynamic-blade-list.vue +153 -187
  123. package/tailwind.config.ts +127 -126
  124. package/ui/components/atoms/vc-button/vc-button.stories.ts +1 -16
  125. package/ui/components/atoms/vc-button/vc-button.vue +74 -63
  126. package/ui/components/atoms/vc-card/vc-card.stories.ts +102 -102
  127. package/ui/components/atoms/vc-card/vc-card.vue +164 -159
  128. package/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue +22 -0
  129. package/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue +16 -0
  130. package/ui/components/atoms/vc-icon/icons/index.ts +2 -0
  131. package/ui/components/molecules/vc-field/vc-field.vue +1 -1
  132. package/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.ts +12 -1
  133. package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarContent.vue +1 -2
  134. package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarHeader.vue +1 -1
  135. package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarOverlay.vue +0 -1
  136. package/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue +274 -112
  137. package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue +81 -37
  138. package/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue +7 -5
  139. package/ui/components/organisms/vc-app/vc-app.vue +26 -15
  140. package/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue +5 -7
  141. package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/{vc-table-header/vc-table-header.vue → vc-table-columns-header/vc-table-columns-header.vue} +23 -21
  142. package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-row/vc-table-row.vue +1 -0
  143. package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/vc-table-desktop-view.vue +1 -1
  144. package/ui/components/organisms/vc-table/_internal/vc-table-header/vc-table-header.vue +12 -1
  145. package/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue +45 -2
  146. package/ui/components/organisms/vc-table/composables/useTableColumnReorder.ts +5 -5
  147. package/ui/components/organisms/vc-table/composables/useTableColumnResize.ts +1 -1
  148. package/ui/components/organisms/vc-table/composables/useTableRowReorder.ts +1 -0
  149. package/core/services/toolbarbus-service.ts +0 -34
  150. package/dist/core/composables/useGlobalSearch.d.ts.map +0 -1
  151. package/dist/core/services/toolbarbus-service.d.ts +0 -10
  152. package/dist/core/services/toolbarbus-service.d.ts.map +0 -1
  153. package/dist/ui/components/organisms/vc-app/composables/useToolbarSlots.d.ts +0 -5
  154. package/dist/ui/components/organisms/vc-app/composables/useToolbarSlots.d.ts.map +0 -1
  155. package/dist/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-header/vc-table-header.vue.d.ts.map +0 -1
  156. package/ui/components/organisms/vc-app/composables/useToolbarSlots.ts +0 -37
@@ -1,17 +1,18 @@
1
- export * from "./useFunctions";
2
- export * from "./useUser";
3
- export * from "./useNotifications";
4
- export * from "./useSettings";
5
- export * from "./usePermissions";
6
- export * from "./useAsync";
7
- export * from "./useApiClient";
8
- export * from "./useLoading";
9
- export * from "./useErrorHandler";
10
- export * from "./useAssets";
11
- export * from "./useMenuService";
12
- export * from "./useBeforeUnload";
13
- export * from "./useLanguages";
14
- export * from "./useBreadcrumbs";
15
- export * from "./useAppInsights";
16
- export * from "./useTheme";
17
- export * from "./useWidgets";
1
+ export * from "./useFunctions";
2
+ export * from "./useUser";
3
+ export * from "./useNotifications";
4
+ export * from "./useSettings";
5
+ export * from "./usePermissions";
6
+ export * from "./useAsync";
7
+ export * from "./useApiClient";
8
+ export * from "./useLoading";
9
+ export * from "./useErrorHandler";
10
+ export * from "./useAssets";
11
+ export * from "./useMenuService";
12
+ export * from "./useBeforeUnload";
13
+ export * from "./useLanguages";
14
+ export * from "./useBreadcrumbs";
15
+ export * from "./useAppInsights";
16
+ export * from "./useTheme";
17
+ export * from "./useWidgets";
18
+ export * from "./useDashboard";
@@ -0,0 +1,19 @@
1
+ import { createDashboardService, IDashboardService, registerDashboardWidget } from "../../services/dashboard-service";
2
+ import { provide, inject } from "vue";
3
+ import { DashboardServiceKey } from "../../../injection-keys";
4
+
5
+ export function provideDashboardService(): IDashboardService {
6
+ const service = createDashboardService();
7
+ provide(DashboardServiceKey, service);
8
+ return service;
9
+ }
10
+
11
+ export function useDashboard(): IDashboardService {
12
+ const service = inject(DashboardServiceKey);
13
+ if (!service) {
14
+ throw new Error("DashboardService not provided");
15
+ }
16
+ return service;
17
+ }
18
+
19
+ export { registerDashboardWidget };
@@ -1,6 +1,5 @@
1
1
  import { ref, inject, provide, Ref } from "vue";
2
-
3
- const GLOBAL_SEARCH_KEY = Symbol("globalSearch");
2
+ import { GlobalSearchKey } from "../../../injection-keys";
4
3
 
5
4
  export interface GlobalSearchState {
6
5
  isSearchVisible: Ref<Record<string, boolean>>;
@@ -15,7 +14,6 @@ export function createGlobalSearch() {
15
14
 
16
15
  const toggleSearch = (bladeId: number) => {
17
16
  isSearchVisible.value[bladeId] = !isSearchVisible.value[bladeId];
18
- console.log("toggleSearch", bladeId, isSearchVisible.value[bladeId]);
19
17
  };
20
18
 
21
19
  const setSearchQuery = (bladeId: number, query: string) => {
@@ -29,12 +27,12 @@ export function createGlobalSearch() {
29
27
  setSearchQuery,
30
28
  };
31
29
 
32
- provide(GLOBAL_SEARCH_KEY, state);
30
+ provide(GlobalSearchKey, state);
33
31
  return state;
34
32
  }
35
33
 
36
34
  export function useGlobalSearch() {
37
- const state = inject<GlobalSearchState>(GLOBAL_SEARCH_KEY);
35
+ const state = inject<GlobalSearchState>(GlobalSearchKey);
38
36
 
39
37
  if (!state) {
40
38
  throw new Error("useGlobalSearch must be used within a component that has called createGlobalSearch");
@@ -1,18 +1,19 @@
1
- import { getCurrentInstance, inject, provide } from "vue";
2
- import { createWidgetService, IWidgetService } from "./../../services/widget-service";
3
- import { WidgetServiceKey } from "./../../../injection-keys";
4
-
5
- export function provideWidgetService(): IWidgetService {
6
- const service = createWidgetService();
7
- provide(WidgetServiceKey, service);
8
- return service;
9
- }
10
-
11
- export function useWidgets(): IWidgetService {
12
- const service = inject(WidgetServiceKey);
13
- if (!service) {
14
- console.error("Widget service not found in current context. Injection chain:", getCurrentInstance());
15
- throw new Error("WidgetService not provided");
16
- }
17
- return service;
18
- }
1
+ import { getCurrentInstance, inject, provide } from "vue";
2
+ import { createWidgetService, IWidgetService } from "./../../services/widget-service";
3
+ import { WidgetServiceKey } from "./../../../injection-keys";
4
+
5
+ export function provideWidgetService(): IWidgetService {
6
+ const service = createWidgetService();
7
+ provide(WidgetServiceKey, service);
8
+ return service;
9
+ }
10
+
11
+ export function useWidgets(): IWidgetService {
12
+ const service = inject(WidgetServiceKey);
13
+ if (!service) {
14
+ console.error("Widget service not found in current context. Injection chain:", getCurrentInstance());
15
+ throw new Error("WidgetService not provided");
16
+ }
17
+ return service;
18
+ }
19
+
@@ -1,6 +1,7 @@
1
1
  import { App, Plugin } from "vue";
2
2
  import { Router } from "vue-router";
3
3
  import { ExtensionRegistry, createExtensionsHelper, registerModuleExtensions } from "./extensions-helper";
4
+ import { DynamicModulesKey } from "../../../injection-keys";
4
5
 
5
6
  interface ModuleManifest {
6
7
  file: string;
@@ -161,7 +162,7 @@ export function useDynamicModules(
161
162
  ...(app.config.globalProperties.$dynamicModules || {}),
162
163
  ...window.VcShellDynamicModules,
163
164
  };
164
- app.provide("$dynamicModules", app.config.globalProperties.$dynamicModules);
165
+ app.provide(DynamicModulesKey, app.config.globalProperties.$dynamicModules);
165
166
  }
166
167
 
167
168
  return {
@@ -0,0 +1,121 @@
1
+ import { reactive, Component } from "vue";
2
+ import { DashboardServiceKey } from "../../injection-keys";
3
+ import { usePermissions } from "../composables/usePermissions";
4
+
5
+ export interface DashboardWidgetSize {
6
+ width: number;
7
+ height: number;
8
+ }
9
+
10
+ export interface DashboardWidgetPosition {
11
+ x: number;
12
+ y: number;
13
+ }
14
+
15
+ export interface DashboardWidget {
16
+ id: string;
17
+ name: string;
18
+ component: Component;
19
+ size: DashboardWidgetSize;
20
+ position?: DashboardWidgetPosition;
21
+ permissions?: string[];
22
+ props?: Record<string, unknown>;
23
+ }
24
+
25
+ export interface IDashboardService {
26
+ registerWidget: (widget: DashboardWidget) => void;
27
+ getWidgets: () => DashboardWidget[];
28
+ updateWidgetPosition: (widgetId: string, position: DashboardWidgetPosition) => void;
29
+ getLayout: () => Map<string, DashboardWidgetPosition>;
30
+ }
31
+
32
+ // Global state for pre-registering widgets
33
+ const preregisteredWidgets: DashboardWidget[] = [];
34
+
35
+ /**
36
+ * Registers a widget before the service is initialized
37
+ */
38
+ export function registerDashboardWidget(widget: DashboardWidget): void {
39
+ const existingWidget = preregisteredWidgets.find((w) => w.id === widget.id);
40
+ if (!existingWidget) {
41
+ preregisteredWidgets.push(widget);
42
+ }
43
+ }
44
+
45
+ const createState = () => ({
46
+ widgets: reactive<Map<string, DashboardWidget>>(new Map()),
47
+ layout: reactive<Map<string, DashboardWidgetPosition>>(new Map()),
48
+ });
49
+
50
+ /**
51
+ * Creates a service for managing dashboard widgets
52
+ */
53
+ export function createDashboardService(): IDashboardService {
54
+ const state = createState();
55
+ const { hasAccess } = usePermissions();
56
+
57
+ const registerWidget = (widget: DashboardWidget): void => {
58
+ if (state.widgets.has(widget.id)) {
59
+ throw new Error(`Widget with id ${widget.id} already registered`);
60
+ }
61
+
62
+ state.widgets.set(widget.id, widget);
63
+
64
+ // If the position is not specified, add the widget to the end
65
+ if (!widget.position) {
66
+ const lastWidget = Array.from(state.layout.values()).reduce((max, pos) => {
67
+ return pos.y > max ? pos.y : max;
68
+ }, 0);
69
+
70
+ state.layout.set(widget.id, {
71
+ x: 0,
72
+ y: lastWidget + 1,
73
+ });
74
+ } else {
75
+ state.layout.set(widget.id, widget.position);
76
+ }
77
+ };
78
+
79
+ /**
80
+ * Returns a list of widgets with access rights
81
+ */
82
+ const getWidgets = (): DashboardWidget[] => {
83
+ return Array.from(state.widgets.values()).filter((widget) => {
84
+ // If the widget has no permissions requirements, show it to everyone
85
+ if (!widget.permissions || widget.permissions.length === 0) {
86
+ return true;
87
+ }
88
+
89
+ // Check if the user has the necessary permissions
90
+ return hasAccess(widget.permissions);
91
+ });
92
+ };
93
+
94
+ const updateWidgetPosition = (widgetId: string, position: DashboardWidgetPosition): void => {
95
+ if (!state.widgets.has(widgetId)) {
96
+ throw new Error(`Widget with id ${widgetId} not found`);
97
+ }
98
+
99
+ state.layout.set(widgetId, position);
100
+ };
101
+
102
+ const getLayout = (): Map<string, DashboardWidgetPosition> => {
103
+ return state.layout;
104
+ };
105
+
106
+ // Register pre-registered widgets
107
+ preregisteredWidgets.forEach((widget) => {
108
+ try {
109
+ registerWidget(widget);
110
+ } catch (e) {
111
+ console.warn(`Failed to register preregistered widget ${widget.id}:`, e);
112
+ }
113
+ });
114
+
115
+ return {
116
+ registerWidget,
117
+ getWidgets,
118
+ updateWidgetPosition,
119
+ getLayout,
120
+ };
121
+ }
@@ -1,4 +1,4 @@
1
- import { ConcreteComponent, reactive, ref, ComponentInternalInstance, watch } from "vue";
1
+ import { ConcreteComponent, reactive, ref, ComponentInternalInstance } from "vue";
2
2
 
3
3
  export type WidgetEventHandler = (...args: unknown[]) => void;
4
4
 
@@ -93,12 +93,9 @@ export function createWidgetService(): IWidgetService {
93
93
  activeWidgetRef.value = undefined;
94
94
 
95
95
  activeWidgetRef.value = ref;
96
-
97
- console.log("setActiveWidget", activeWidgetRef.value);
98
96
  };
99
97
 
100
98
  const updateActiveWidget = (): void => {
101
- console.log("updateActiveWidget", activeWidgetRef.value);
102
99
  if (!activeWidgetRef.value) {
103
100
  return;
104
101
  }
@@ -15,4 +15,5 @@ export * from "./useBreadcrumbs";
15
15
  export * from "./useAppInsights";
16
16
  export * from "./useTheme";
17
17
  export * from "./useWidgets";
18
+ export * from "./useDashboard";
18
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core/composables/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../core/composables/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { IDashboardService, registerDashboardWidget } from "../../services/dashboard-service";
2
+ export declare function provideDashboardService(): IDashboardService;
3
+ export declare function useDashboard(): IDashboardService;
4
+ export { registerDashboardWidget };
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../core/composables/useDashboard/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAItH,wBAAgB,uBAAuB,IAAI,iBAAiB,CAI3D;AAED,wBAAgB,YAAY,IAAI,iBAAiB,CAMhD;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -7,4 +7,4 @@ export interface GlobalSearchState {
7
7
  }
8
8
  export declare function createGlobalSearch(): GlobalSearchState;
9
9
  export declare function useGlobalSearch(): GlobalSearchState;
10
- //# sourceMappingURL=useGlobalSearch.d.ts.map
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../core/composables/useGlobalSearch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,GAAG,EAAE,MAAM,KAAK,CAAC;AAGhD,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9C,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACzC,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,cAAc,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D;AAED,wBAAgB,kBAAkB,sBAqBjC;AAED,wBAAgB,eAAe,sBAQ9B"}
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../core/plugins/modularity/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAU,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAkDpC,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB;AAOD,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,GAAG,EACR,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACxD,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;;;EAyGnC"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../../core/plugins/modularity/loader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAU,MAAM,KAAK,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAmDpC,UAAU,YAAY;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;CACvB;AAOD,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,GAAG,EACR,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EACxD,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;;;EAyGnC"}
@@ -0,0 +1,33 @@
1
+ import { Component } from "vue";
2
+ export interface DashboardWidgetSize {
3
+ width: number;
4
+ height: number;
5
+ }
6
+ export interface DashboardWidgetPosition {
7
+ x: number;
8
+ y: number;
9
+ }
10
+ export interface DashboardWidget {
11
+ id: string;
12
+ name: string;
13
+ component: Component;
14
+ size: DashboardWidgetSize;
15
+ position?: DashboardWidgetPosition;
16
+ permissions?: string[];
17
+ props?: Record<string, unknown>;
18
+ }
19
+ export interface IDashboardService {
20
+ registerWidget: (widget: DashboardWidget) => void;
21
+ getWidgets: () => DashboardWidget[];
22
+ updateWidgetPosition: (widgetId: string, position: DashboardWidgetPosition) => void;
23
+ getLayout: () => Map<string, DashboardWidgetPosition>;
24
+ }
25
+ /**
26
+ * Registers a widget before the service is initialized
27
+ */
28
+ export declare function registerDashboardWidget(widget: DashboardWidget): void;
29
+ /**
30
+ * Creates a service for managing dashboard widgets
31
+ */
32
+ export declare function createDashboardService(): IDashboardService;
33
+ //# sourceMappingURL=dashboard-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dashboard-service.d.ts","sourceRoot":"","sources":["../../../core/services/dashboard-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAE,MAAM,KAAK,CAAC;AAI1C,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,CAAC,EAAE,uBAAuB,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAClD,UAAU,EAAE,MAAM,eAAe,EAAE,CAAC;IACpC,oBAAoB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACpF,SAAS,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;CACvD;AAKD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CAKrE;AAOD;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,iBAAiB,CAoE1D"}
@@ -1 +1 @@
1
- {"version":3,"file":"widget-service.d.ts","sourceRoot":"","sources":["../../../core/services/widget-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiB,yBAAyB,EAAS,MAAM,KAAK,CAAC;AAEzF,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;IAC3C,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,iBAAiB,EAAE,mBAAmB,EAAE,CAAC;IACzC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,eAAe,EAAE,CAAC,GAAG,EAAE,yBAAyB,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IACrE,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;CAC7C;AAED,wBAAgB,mBAAmB,IAAI,cAAc,CA8FpD"}
1
+ {"version":3,"file":"widget-service.d.ts","sourceRoot":"","sources":["../../../core/services/widget-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiB,yBAAyB,EAAE,MAAM,KAAK,CAAC;AAElF,MAAM,MAAM,kBAAkB,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAE9D,MAAM,WAAW,aAAa;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC,kBAAkB,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9D,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;IAC3C,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,iBAAiB,EAAE,mBAAmB,EAAE,CAAC;IACzC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,eAAe,EAAE,CAAC,GAAG,EAAE,yBAAyB,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IACrE,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAC/B,kBAAkB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC;CAC7C;AAED,wBAAgB,mBAAmB,IAAI,cAAc,CA2FpD"}