@vc-shell/framework 1.1.3 → 1.1.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 (25) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/framework.js +1 -1
  3. package/dist/{index-xFQltarK.js → index-BBYKbiRX.js} +1 -1
  4. package/dist/{index-UnPPbmRc.js → index-BDm0tcWn.js} +18559 -18538
  5. package/dist/{index-CxMfHOup.js → index-BDqUaIyQ.js} +1 -1
  6. package/dist/{index-DRL7VovM.js → index-BdflTsg6.js} +1 -1
  7. package/dist/{index-DyGIijU2.js → index-BpBTtmQ6.js} +1 -1
  8. package/dist/{index-Dfcy8w9c.js → index-Br0y2YMn.js} +1 -1
  9. package/dist/{index-Cv6c_1IG.js → index-CIcET-ZI.js} +1 -1
  10. package/dist/{index-BW3krAiY.js → index-CYAMpxnu.js} +1 -1
  11. package/dist/{index-Ek7_XgGk.js → index-Cf2H7YZ1.js} +1 -1
  12. package/dist/{index-TSGli7LX.js → index-Ck055pN8.js} +1 -1
  13. package/dist/{index-C6tcHNVl.js → index-D-fPN3yf.js} +1 -1
  14. package/dist/{index-BKR3ecN5.js → index-DJOis7Nc.js} +1 -1
  15. package/dist/{index-CGyGGihY.js → index-DKtQMsy4.js} +1 -1
  16. package/dist/{index-CnQ56kqq.js → index-DWTsz5bC.js} +1 -1
  17. package/dist/{index-B83didIY.js → index-DuY7BIGm.js} +1 -1
  18. package/dist/{index-BN-_cebP.js → index-o6aSdNED.js} +1 -1
  19. package/dist/{index-BUHouW8T.js → index-wfv8ehcx.js} +1 -1
  20. package/dist/tsconfig.tsbuildinfo +1 -1
  21. package/dist/ui/components/atoms/vc-widget/vc-widget.vue.d.ts.map +1 -1
  22. package/dist/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue.d.ts.map +1 -1
  23. package/package.json +4 -4
  24. package/ui/components/atoms/vc-widget/vc-widget.vue +2 -0
  25. package/ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue +65 -32
@@ -1 +1 @@
1
- {"version":3,"file":"vc-widget.vue.d.ts","sourceRoot":"","sources":["../../../../../ui/components/atoms/vc-widget/vc-widget.vue"],"names":[],"mappings":"AA4KA,MAAM,WAAW,KAAK;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;;;;;;AAkID,wBAOG"}
1
+ {"version":3,"file":"vc-widget.vue.d.ts","sourceRoot":"","sources":["../../../../../ui/components/atoms/vc-widget/vc-widget.vue"],"names":[],"mappings":"AA8KA,MAAM,WAAW,KAAK;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;;;;;;AAsID,wBAOG"}
@@ -1 +1 @@
1
- {"version":3,"file":"vc-blade-toolbar.vue.d.ts","sourceRoot":"","sources":["../../../../../../../ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue"],"names":[],"mappings":"AAuJA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAO7D,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAkID,QAAA,IAAI,OAAO,IAAW,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAwB3D,QAAA,MAAM,eAAe;WA7JZ,aAAa,EAAE;6EAoKtB,CAAC;wBACkB,eAAe,CAAC,OAAO,eAAe,EAAE,WAAW,CAAC;AAAzE,wBAA0E;AAa1E,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"vc-blade-toolbar.vue.d.ts","sourceRoot":"","sources":["../../../../../../../ui/components/organisms/vc-blade/_internal/vc-blade-toolbar/vc-blade-toolbar.vue"],"names":[],"mappings":"AAwLA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAO7D,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAmKD,QAAA,IAAI,OAAO,IAAW,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAwB3D,QAAA,MAAM,eAAe;WA9LZ,aAAa,EAAE;6EAqMtB,CAAC;wBACkB,eAAe,CAAC,OAAO,eAAe,EAAE,WAAW,CAAC;AAAzE,wBAA0E;AAa1E,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vc-shell/framework",
3
- "version": "1.1.3",
3
+ "version": "1.1.4",
4
4
  "type": "module",
5
5
  "main": "./dist/framework.js",
6
6
  "types": "./dist/index.d.ts",
@@ -70,9 +70,9 @@
70
70
  "devDependencies": {
71
71
  "@fullhuman/postcss-purgecss": "^7.0.2",
72
72
  "@types/dompurify": "^3.0.5",
73
- "@vc-shell/api-client-generator": "^1.1.3",
74
- "@vc-shell/config-generator": "^1.1.3",
75
- "@vc-shell/ts-config": "^1.1.3",
73
+ "@vc-shell/api-client-generator": "^1.1.4",
74
+ "@vc-shell/config-generator": "^1.1.4",
75
+ "@vc-shell/ts-config": "^1.1.4",
76
76
  "@vitejs/plugin-vue": "^5.2.3",
77
77
  "@vue/test-utils": "^2.4.5",
78
78
  "cypress-signalr-mock": "^1.5.0",
@@ -13,6 +13,8 @@
13
13
  >
14
14
  <VcBadge
15
15
  :content="truncateCount"
16
+ custom-position
17
+ top="-6px"
16
18
  size="s"
17
19
  >
18
20
  <div class="vc-widget__icon-container">
@@ -20,7 +20,7 @@
20
20
  </template>
21
21
 
22
22
  <script lang="ts" setup>
23
- import { ComputedRef, computed, inject, onBeforeMount, onBeforeUnmount, watch, useSlots } from "vue";
23
+ import { ComputedRef, computed, inject, onBeforeMount, onBeforeUnmount, watch, useSlots, reactive } from "vue";
24
24
  import { useLocalStorage } from "@vueuse/core";
25
25
  import { usePermissions, useToolbar } from "../../../../../../core/composables";
26
26
  import { IBladeToolbar } from "../../../../../../core/types";
@@ -41,7 +41,8 @@ const props = withDefaults(defineProps<Props>(), {
41
41
  const slots = useSlots();
42
42
  const isExpanded = useLocalStorage("VC_BLADE_TOOLBAR_IS_EXPANDED", true);
43
43
  const { hasAccess } = usePermissions();
44
- const { registerToolbarItem, unregisterToolbarItem, getToolbarItems, clearBladeToolbarItems } = useToolbar();
44
+ const { registerToolbarItem, unregisterToolbarItem, getToolbarItems, clearBladeToolbarItems, updateToolbarItem } =
45
+ useToolbar();
45
46
 
46
47
  // Get the ID of the current blade
47
48
  const blade = inject<ComputedRef<IBladeInstance>>(
@@ -58,43 +59,80 @@ const blade = inject<ComputedRef<IBladeInstance>>(
58
59
 
59
60
  const bladeId = computed(() => blade.value?.id ?? FALLBACK_BLADE_ID);
60
61
 
62
+ const isMobile = inject<ComputedRef<boolean>>(
63
+ "isMobile",
64
+ computed(() => false),
65
+ );
66
+
61
67
  // Prefix for prop items to avoid ID conflicts
62
68
  const PROP_ITEM_ID_PREFIX = "prop_toolbar_item_";
63
69
 
64
- // Generate IDs for items without them
65
- function ensureItemHasId(item: IBladeToolbar, index: number): IToolbarItem {
66
- const itemCopy = { ...item } as IToolbarItem;
67
- if (!("id" in itemCopy) || !itemCopy.id) {
68
- itemCopy.id = `${PROP_ITEM_ID_PREFIX}${bladeId.value}_${index}`;
69
- }
70
- return itemCopy;
71
- }
70
+ // Create map to track registered item IDs
71
+ const registeredItemIds = reactive(new Map<number, string>());
72
+
73
+ // Convert IBladeToolbar to IToolbarItem
74
+ function convertToToolbarItem(item: IBladeToolbar, index: number): IToolbarItem {
75
+ const id = item.id || `${PROP_ITEM_ID_PREFIX}${bladeId.value}_${index}`;
72
76
 
73
- // Register prop items in the service
74
- function registerPropItems() {
75
- // Unregister previous items first to avoid duplicates
76
- unregisterPropItems();
77
+ return {
78
+ ...item,
79
+ id,
80
+ bladeId: bladeId.value,
81
+ priority: index * -1,
82
+ } as unknown as IToolbarItem;
83
+ }
77
84
 
78
- // Register new items
85
+ // Update all items from props
86
+ function updateItems(): void {
87
+ // Register new items or update existing ones
79
88
  props.items.forEach((item, index) => {
80
- const toolbarItem = ensureItemHasId(item, index);
81
- registerToolbarItem(toolbarItem);
89
+ const id = registeredItemIds.get(index);
90
+
91
+ if (id) {
92
+ // Item already registered, update it
93
+ const toolbarItem = convertToToolbarItem(item, index);
94
+ updateToolbarItem(id, toolbarItem);
95
+ } else {
96
+ // New item, register it
97
+ const toolbarItem = convertToToolbarItem(item, index);
98
+ registerToolbarItem(toolbarItem);
99
+ registeredItemIds.set(index, toolbarItem.id);
100
+ }
101
+ });
102
+
103
+ // Remove items that no longer exist in props.items
104
+ const indices = [...registeredItemIds.keys()];
105
+ indices.forEach((index) => {
106
+ if (index >= props.items.length) {
107
+ const id = registeredItemIds.get(index);
108
+ if (id) {
109
+ unregisterToolbarItem(id);
110
+ registeredItemIds.delete(index);
111
+ }
112
+ }
82
113
  });
83
114
  }
84
115
 
85
- // Unregister prop items from the service
86
- function unregisterPropItems() {
87
- const itemsToRemove = getToolbarItems().filter((item) => item.id.startsWith(PROP_ITEM_ID_PREFIX + bladeId.value));
116
+ // Unregister all toolbar items
117
+ function clearToolbarItems(): void {
118
+ // Clear all previously registered items
119
+ for (const id of registeredItemIds.values()) {
120
+ unregisterToolbarItem(id);
121
+ }
88
122
 
89
- itemsToRemove.forEach((item) => {
90
- unregisterToolbarItem(item.id);
91
- });
123
+ // Clear the map
124
+ registeredItemIds.clear();
92
125
  }
93
126
 
94
127
  // Filter visible items from service
95
128
  const visibleItems = computed(() => {
96
129
  return getToolbarItems()
97
- .filter((item) => hasAccess(item.permissions) && (item.isVisible === undefined || item.isVisible) && !item.disabled)
130
+ .filter(
131
+ (item) =>
132
+ hasAccess(item.permissions) &&
133
+ (item.isVisible === undefined || item.isVisible) &&
134
+ (isMobile.value ? !item.disabled : true),
135
+ )
98
136
  .sort((a, b) => {
99
137
  const priorityA = a.priority ?? 0;
100
138
  const priorityB = b.priority ?? 0;
@@ -106,19 +144,14 @@ const visibleItems = computed(() => {
106
144
  watch(
107
145
  () => props.items,
108
146
  () => {
109
- registerPropItems();
147
+ updateItems();
110
148
  },
111
- { deep: true },
149
+ { deep: true, immediate: true },
112
150
  );
113
151
 
114
- // Initial registration
115
- onBeforeMount(() => {
116
- registerPropItems();
117
- });
118
-
119
152
  // Cleanup on unmount
120
153
  onBeforeUnmount(() => {
121
- unregisterPropItems();
154
+ clearToolbarItems();
122
155
  });
123
156
  </script>
124
157