@vc-shell/framework 1.1.0-alpha.2 → 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 (162) 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-DkfZxmI7.js → index-8LELHzw9.js} +1 -1
  20. package/dist/{index-Dn54TX9M.js → index-9lJxZE5w.js} +1 -1
  21. package/dist/{index-BbLSuXfB.js → index-B1YR_MYV.js} +1 -1
  22. package/dist/{index-CUuop2Pm.js → index-BA98L1jI.js} +1 -1
  23. package/dist/{index-B7KsNz2e.js → index-BAeTsi-X.js} +1 -1
  24. package/dist/{index-q2J1GObW.js → index-BBYyHeYA.js} +1 -1
  25. package/dist/{index-DQXUkbse.js → index-BrUitdDo.js} +1 -1
  26. package/dist/{index-DY3kTJtR.js → index-BuO5ByG9.js} +1 -1
  27. package/dist/{index-DnpVJexS.js → index-CJ5I7vTn.js} +1 -1
  28. package/dist/{index-D8YubeMT.js → index-CWKrD2Cd.js} +1 -1
  29. package/dist/{index-D7HzlheD.js → index-Cf9Tz1ql.js} +1 -1
  30. package/dist/{index-h6Tp1RYq.js → index-CrxFDC2b.js} +1 -1
  31. package/dist/{index-D5mVNTjP.js → index-D1JchciU.js} +1 -1
  32. package/dist/{index-3eLJLrzP.js → index-DLtsQ_PJ.js} +31277 -31144
  33. package/dist/{index-Yc2AandF.js → index-DVljTjbf.js} +1 -1
  34. package/dist/{index-DdgLwPZH.js → index-RwX3kiZh.js} +28 -28
  35. package/dist/{index-lE5Ov0XL.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/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts.map +1 -1
  40. package/dist/shared/components/dashboard-widget-card/dashboard-widget-card.vue.d.ts +25 -0
  41. package/dist/shared/components/dashboard-widget-card/dashboard-widget-card.vue.d.ts.map +1 -0
  42. package/dist/shared/components/dashboard-widget-card/index.d.ts +2 -0
  43. package/dist/shared/components/dashboard-widget-card/index.d.ts.map +1 -0
  44. package/dist/shared/components/draggable-dashboard/DraggableDashboard.vue.d.ts +6 -0
  45. package/dist/shared/components/draggable-dashboard/DraggableDashboard.vue.d.ts.map +1 -0
  46. package/dist/shared/components/draggable-dashboard/_internal/DashboardWidget.vue.d.ts +20 -0
  47. package/dist/shared/components/draggable-dashboard/_internal/DashboardWidget.vue.d.ts.map +1 -0
  48. package/dist/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.d.ts +354 -0
  49. package/dist/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.d.ts.map +1 -0
  50. package/dist/shared/components/draggable-dashboard/composables/useDashboardGrid.d.ts +12 -0
  51. package/dist/shared/components/draggable-dashboard/composables/useDashboardGrid.d.ts.map +1 -0
  52. package/dist/shared/components/draggable-dashboard/index.d.ts +2 -0
  53. package/dist/shared/components/draggable-dashboard/index.d.ts.map +1 -0
  54. package/dist/shared/components/draggable-dashboard/types.d.ts +80 -0
  55. package/dist/shared/components/draggable-dashboard/types.d.ts.map +1 -0
  56. package/dist/shared/components/index.d.ts +2 -0
  57. package/dist/shared/components/index.d.ts.map +1 -1
  58. package/dist/shared/components/user-dropdown-button/_internal/user-info.vue.d.ts.map +1 -1
  59. package/dist/shared/components/user-dropdown-button/_internal/user-sidebar.vue.d.ts +1 -1
  60. package/dist/shared/components/user-dropdown-button/user-dropdown-button.vue.d.ts.map +1 -1
  61. package/dist/shared/composables/useMenuExpanded.d.ts +2 -0
  62. package/dist/shared/composables/useMenuExpanded.d.ts.map +1 -1
  63. package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts +0 -41
  64. package/dist/shared/modules/dynamic/components/fields/storybook/Button.stories.d.ts.map +1 -1
  65. package/dist/shared/modules/dynamic/components/fields/storybook/Card.stories.d.ts.map +1 -1
  66. package/dist/shared/modules/dynamic/components/fields/storybook/common/templates.d.ts +1 -1
  67. package/dist/shared/modules/dynamic/components/fields/storybook/common/templates.d.ts.map +1 -1
  68. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts +2 -25
  69. package/dist/shared/modules/dynamic/pages/dynamic-blade-list.vue.d.ts.map +1 -1
  70. package/dist/tailwind.config.d.ts +1 -81
  71. package/dist/tailwind.config.d.ts.map +1 -1
  72. package/dist/tsconfig.tsbuildinfo +1 -1
  73. package/dist/ui/components/atoms/vc-button/vc-button.stories.d.ts +169 -734
  74. package/dist/ui/components/atoms/vc-button/vc-button.stories.d.ts.map +1 -1
  75. package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts +18 -2
  76. package/dist/ui/components/atoms/vc-button/vc-button.vue.d.ts.map +1 -1
  77. package/dist/ui/components/atoms/vc-card/index.d.ts +2 -0
  78. package/dist/ui/components/atoms/vc-card/index.d.ts.map +1 -1
  79. package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts +12 -0
  80. package/dist/ui/components/atoms/vc-card/vc-card.stories.d.ts.map +1 -1
  81. package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts +2 -0
  82. package/dist/ui/components/atoms/vc-card/vc-card.vue.d.ts.map +1 -1
  83. package/dist/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue.d.ts +18 -0
  84. package/dist/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue.d.ts.map +1 -0
  85. package/dist/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue.d.ts +18 -0
  86. package/dist/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue.d.ts.map +1 -0
  87. package/dist/ui/components/atoms/vc-icon/icons/index.d.ts +2 -0
  88. package/dist/ui/components/atoms/vc-icon/icons/index.d.ts.map +1 -1
  89. package/dist/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.d.ts +2 -0
  90. package/dist/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.d.ts.map +1 -1
  91. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarHeader.vue.d.ts.map +1 -1
  92. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts +0 -1
  93. package/dist/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue.d.ts.map +1 -1
  94. 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
  95. 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
  96. package/dist/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue.d.ts.map +1 -1
  97. package/dist/ui/components/organisms/vc-app/vc-app.stories.d.ts +13 -67
  98. package/dist/ui/components/organisms/vc-app/vc-app.stories.d.ts.map +1 -1
  99. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts +5 -65
  100. package/dist/ui/components/organisms/vc-app/vc-app.vue.d.ts.map +1 -1
  101. package/dist/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue.d.ts.map +1 -1
  102. 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
  103. 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
  104. package/dist/ui/components/organisms/vc-table/_internal/vc-table-header/vc-table-header.vue.d.ts.map +1 -1
  105. package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue.d.ts +33 -3
  106. package/dist/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue.d.ts.map +1 -1
  107. package/dist/ui/components/organisms/vc-table/composables/useTableRowReorder.d.ts.map +1 -1
  108. package/package.json +10 -5
  109. package/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue +1 -3
  110. package/shared/components/dashboard-widget-card/dashboard-widget-card.vue +67 -0
  111. package/shared/components/dashboard-widget-card/index.ts +1 -0
  112. package/shared/components/draggable-dashboard/DraggableDashboard.vue +369 -0
  113. package/shared/components/draggable-dashboard/_internal/DashboardWidget.vue +133 -0
  114. package/shared/components/draggable-dashboard/composables/useDashboardDragAndDrop.ts +547 -0
  115. package/shared/components/draggable-dashboard/composables/useDashboardGrid.ts +250 -0
  116. package/shared/components/draggable-dashboard/index.ts +1 -0
  117. package/shared/components/draggable-dashboard/types.ts +91 -0
  118. package/shared/components/index.ts +2 -0
  119. package/shared/components/user-dropdown-button/_internal/user-info.vue +25 -12
  120. package/shared/components/user-dropdown-button/user-dropdown-button.vue +3 -3
  121. package/shared/composables/useMenuExpanded.ts +24 -0
  122. package/shared/modules/assets/components/assets-details/assets-details.vue +1 -1
  123. package/shared/modules/dynamic/components/fields/storybook/Button.stories.ts +186 -247
  124. package/shared/modules/dynamic/components/fields/storybook/Card.stories.ts +175 -176
  125. package/shared/modules/dynamic/components/fields/storybook/common/templates.ts +8 -8
  126. package/shared/modules/dynamic/pages/dynamic-blade-list.vue +153 -187
  127. package/tailwind.config.ts +127 -126
  128. package/ui/components/atoms/vc-button/vc-button.stories.ts +1 -16
  129. package/ui/components/atoms/vc-button/vc-button.vue +74 -63
  130. package/ui/components/atoms/vc-card/vc-card.stories.ts +102 -102
  131. package/ui/components/atoms/vc-card/vc-card.vue +164 -159
  132. package/ui/components/atoms/vc-icon/icons/GridDotsIcon.vue +22 -0
  133. package/ui/components/atoms/vc-icon/icons/ShoppingCardIcon.vue +16 -0
  134. package/ui/components/atoms/vc-icon/icons/index.ts +2 -0
  135. package/ui/components/molecules/vc-breadcrumbs/vc-breadcrumbs.vue +1 -1
  136. package/ui/components/molecules/vc-field/vc-field.vue +1 -1
  137. package/ui/components/organisms/vc-app/_internal/composables/useAppMenuState.ts +12 -1
  138. package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarContent.vue +1 -2
  139. package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarHeader.vue +5 -2
  140. package/ui/components/organisms/vc-app/_internal/vc-app-bar/_internal/AppBarOverlay.vue +0 -1
  141. package/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue +275 -110
  142. package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/_internal/vc-app-menu-link.vue +81 -37
  143. package/ui/components/organisms/vc-app/_internal/vc-app-menu/vc-app-menu.vue +7 -5
  144. package/ui/components/organisms/vc-app/vc-app.vue +30 -16
  145. package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/_internal/vc-blade-toolbar-buttons/desktop/vc-blade-toolbar-desktop.vue +1 -1
  146. package/ui/components/organisms/vc-table/_internal/vc-table-base-header/vc-table-base-header.vue +5 -7
  147. 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
  148. package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/_internal/vc-table-row/vc-table-row.vue +1 -0
  149. package/ui/components/organisms/vc-table/_internal/vc-table-desktop-view/vc-table-desktop-view.vue +1 -1
  150. package/ui/components/organisms/vc-table/_internal/vc-table-header/vc-table-header.vue +12 -1
  151. package/ui/components/organisms/vc-table/_internal/vc-table-mobile-view/vc-table-mobile-view.vue +45 -2
  152. package/ui/components/organisms/vc-table/composables/useTableColumnReorder.ts +5 -5
  153. package/ui/components/organisms/vc-table/composables/useTableColumnResize.ts +1 -1
  154. package/ui/components/organisms/vc-table/composables/useTableRowReorder.ts +1 -0
  155. package/core/services/toolbarbus-service.ts +0 -34
  156. package/dist/core/composables/useGlobalSearch.d.ts.map +0 -1
  157. package/dist/core/services/toolbarbus-service.d.ts +0 -10
  158. package/dist/core/services/toolbarbus-service.d.ts.map +0 -1
  159. package/dist/ui/components/organisms/vc-app/composables/useToolbarSlots.d.ts +0 -5
  160. package/dist/ui/components/organisms/vc-app/composables/useToolbarSlots.d.ts.map +0 -1
  161. 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
  162. 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"}