@vc-shell/framework 1.0.57 → 1.0.60

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 (173) hide show
  1. package/core/composables/index.ts +0 -1
  2. package/core/composables/useNotifications/index.ts +2 -2
  3. package/core/composables/usePermissions/index.ts +1 -1
  4. package/core/composables/useSettings/index.ts +2 -2
  5. package/core/composables/useUser/index.ts +2 -2
  6. package/core/plugins/validation/rules.ts +67 -24
  7. package/core/types/index.ts +19 -2
  8. package/dist/framework.mjs +2816 -5023
  9. package/dist/index.css +1 -1
  10. package/dist/types/core/composables/index.d.ts +0 -1
  11. package/dist/types/core/composables/index.d.ts.map +1 -1
  12. package/dist/types/core/composables/useNotifications/index.d.ts +1 -1
  13. package/dist/types/core/composables/useNotifications/index.d.ts.map +1 -1
  14. package/dist/types/core/composables/useUser/index.d.ts +2 -2
  15. package/dist/types/core/composables/useUser/index.d.ts.map +1 -1
  16. package/dist/types/core/plugins/validation/rules.d.ts +8 -30
  17. package/dist/types/core/plugins/validation/rules.d.ts.map +1 -1
  18. package/dist/types/core/types/index.d.ts +17 -2
  19. package/dist/types/core/types/index.d.ts.map +1 -1
  20. package/dist/types/index.d.ts.map +1 -1
  21. package/dist/types/shared/components/app-switcher/components/index.d.ts.map +1 -0
  22. package/dist/types/shared/{app-switcher → components/app-switcher}/components/vc-app-switcher/index.d.ts +5 -5
  23. package/dist/types/shared/components/app-switcher/components/vc-app-switcher/index.d.ts.map +1 -0
  24. package/dist/types/shared/{app-switcher → components/app-switcher}/components/vc-app-switcher/vc-app-switcher.vue.d.ts +1 -1
  25. package/dist/types/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts.map +1 -0
  26. package/dist/types/shared/components/app-switcher/composables/index.d.ts.map +1 -0
  27. package/dist/types/shared/{app-switcher → components/app-switcher}/composables/useAppSwitcher/index.d.ts +1 -1
  28. package/dist/types/shared/components/app-switcher/composables/useAppSwitcher/index.d.ts.map +1 -0
  29. package/dist/types/shared/components/app-switcher/index.d.ts.map +1 -0
  30. package/dist/types/shared/components/blade-navigation/components/index.d.ts.map +1 -0
  31. package/dist/types/shared/components/blade-navigation/components/vc-blade-navigation/index.d.ts.map +1 -0
  32. package/dist/types/shared/{blade-navigation → components/blade-navigation}/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts +1 -1
  33. package/dist/types/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts.map +1 -0
  34. package/dist/types/shared/components/blade-navigation/composables/index.d.ts.map +1 -0
  35. package/dist/types/shared/{blade-navigation → components/blade-navigation}/composables/useBladeNavigation/index.d.ts +1 -1
  36. package/dist/types/shared/components/blade-navigation/composables/useBladeNavigation/index.d.ts.map +1 -0
  37. package/dist/types/shared/components/blade-navigation/index.d.ts.map +1 -0
  38. package/dist/types/shared/{blade-navigation → components/blade-navigation}/types/index.d.ts +1 -1
  39. package/dist/types/shared/components/blade-navigation/types/index.d.ts.map +1 -0
  40. package/dist/types/shared/index.d.ts +4 -3
  41. package/dist/types/shared/index.d.ts.map +1 -1
  42. package/dist/types/shared/{assets → modules/assets}/components/assets-details/assets-details.vue.d.ts +5 -13
  43. package/dist/types/shared/modules/assets/components/assets-details/assets-details.vue.d.ts.map +1 -0
  44. package/dist/types/shared/{assets → modules/assets}/components/assets-details/index.d.ts +8 -7
  45. package/dist/types/shared/modules/assets/components/assets-details/index.d.ts.map +1 -0
  46. package/dist/types/shared/modules/assets/components/index.d.ts.map +1 -0
  47. package/dist/types/shared/modules/assets/index.d.ts.map +1 -0
  48. package/dist/types/shared/modules/assets/locales/index.d.ts +3 -0
  49. package/dist/types/shared/modules/assets/locales/index.d.ts.map +1 -0
  50. package/dist/types/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts +58 -0
  51. package/dist/types/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts.map +1 -0
  52. package/dist/types/shared/modules/assets-manager/components/assets-manager/index.d.ts +59 -0
  53. package/dist/types/shared/modules/assets-manager/components/assets-manager/index.d.ts.map +1 -0
  54. package/dist/types/shared/modules/assets-manager/components/index.d.ts +2 -0
  55. package/dist/types/shared/modules/assets-manager/components/index.d.ts.map +1 -0
  56. package/dist/types/shared/modules/assets-manager/index.d.ts +12 -0
  57. package/dist/types/shared/modules/assets-manager/index.d.ts.map +1 -0
  58. package/dist/types/shared/modules/assets-manager/locales/index.d.ts.map +1 -0
  59. package/dist/types/shared/utilities/assets.d.ts +5 -0
  60. package/dist/types/shared/utilities/assets.d.ts.map +1 -0
  61. package/dist/types/ui/components/atoms/vc-checkbox/vc-checkbox.vue.d.ts.map +1 -1
  62. package/dist/types/ui/components/molecules/vc-editor/vc-editor.vue.d.ts.map +1 -1
  63. package/dist/types/ui/components/molecules/vc-file-upload/index.d.ts +12 -12
  64. package/dist/types/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts.map +1 -1
  65. package/dist/types/ui/components/molecules/vc-input/index.d.ts +0 -4
  66. package/dist/types/ui/components/molecules/vc-input/index.d.ts.map +1 -1
  67. package/dist/types/ui/components/molecules/vc-input/vc-input.vue.d.ts +1 -1
  68. package/dist/types/ui/components/molecules/vc-input/vc-input.vue.d.ts.map +1 -1
  69. package/dist/types/ui/components/molecules/vc-select/index.d.ts +24 -0
  70. package/dist/types/ui/components/molecules/vc-select/index.d.ts.map +1 -1
  71. package/dist/types/ui/components/molecules/vc-select/vc-select.vue.d.ts +20 -0
  72. package/dist/types/ui/components/molecules/vc-select/vc-select.vue.d.ts.map +1 -1
  73. package/dist/types/ui/components/molecules/vc-textarea/index.d.ts +0 -4
  74. package/dist/types/ui/components/molecules/vc-textarea/index.d.ts.map +1 -1
  75. package/dist/types/ui/components/molecules/vc-textarea/vc-textarea.stories.d.ts +0 -4
  76. package/dist/types/ui/components/molecules/vc-textarea/vc-textarea.stories.d.ts.map +1 -1
  77. package/dist/types/ui/components/molecules/vc-textarea/vc-textarea.vue.d.ts +1 -1
  78. package/dist/types/ui/components/molecules/vc-textarea/vc-textarea.vue.d.ts.map +1 -1
  79. package/dist/types/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue.d.ts.map +1 -1
  80. package/dist/types/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue.d.ts +2 -19
  81. package/dist/types/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue.d.ts.map +1 -1
  82. package/dist/types/ui/components/organisms/vc-dynamic-property/index.d.ts +12 -0
  83. package/dist/types/ui/components/organisms/vc-dynamic-property/index.d.ts.map +1 -1
  84. package/dist/types/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue.d.ts +7 -0
  85. package/dist/types/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue.d.ts.map +1 -1
  86. package/dist/types/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue.d.ts +2 -20
  87. package/dist/types/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue.d.ts.map +1 -1
  88. package/dist/types/ui/components/organisms/vc-gallery/index.d.ts +28 -31
  89. package/dist/types/ui/components/organisms/vc-gallery/index.d.ts.map +1 -1
  90. package/dist/types/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts +2 -6
  91. package/dist/types/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts.map +1 -1
  92. package/dist/types/ui/components/organisms/vc-table/index.d.ts +49 -37
  93. package/dist/types/ui/components/organisms/vc-table/index.d.ts.map +1 -1
  94. package/dist/types/ui/components/organisms/vc-table/vc-table.stories.d.ts +49 -37
  95. package/dist/types/ui/components/organisms/vc-table/vc-table.stories.d.ts.map +1 -1
  96. package/dist/types/ui/components/organisms/vc-table/vc-table.vue.d.ts +12 -7
  97. package/dist/types/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
  98. package/package.json +5 -6
  99. package/shared/{app-switcher → components/app-switcher}/components/vc-app-switcher/vc-app-switcher.vue +1 -1
  100. package/shared/{app-switcher → components/app-switcher}/composables/useAppSwitcher/index.ts +2 -2
  101. package/shared/{app-switcher → components/app-switcher}/index.ts +1 -1
  102. package/shared/{blade-navigation → components/blade-navigation}/components/vc-blade-navigation/vc-blade-navigation.vue +2 -2
  103. package/shared/{blade-navigation → components/blade-navigation}/composables/useBladeNavigation/index.ts +6 -5
  104. package/shared/{blade-navigation → components/blade-navigation}/index.ts +1 -1
  105. package/shared/{blade-navigation → components/blade-navigation}/types/index.ts +1 -1
  106. package/shared/index.ts +10 -7
  107. package/shared/modules/assets/components/assets-details/assets-details.vue +204 -0
  108. package/shared/{assets → modules/assets}/index.ts +1 -1
  109. package/shared/{assets → modules/assets}/locales/en.json +7 -5
  110. package/shared/modules/assets/locales/index.ts +2 -0
  111. package/shared/modules/assets-manager/components/assets-manager/assets-manager.vue +389 -0
  112. package/shared/modules/assets-manager/components/assets-manager/index.ts +3 -0
  113. package/shared/modules/assets-manager/components/index.ts +1 -0
  114. package/shared/modules/assets-manager/index.ts +14 -0
  115. package/shared/modules/assets-manager/locales/en.json +28 -0
  116. package/shared/utilities/assets.ts +40 -0
  117. package/tailwind.config.js +0 -2
  118. package/ui/components/atoms/vc-button/vc-button.vue +0 -1
  119. package/ui/components/atoms/vc-checkbox/vc-checkbox.vue +1 -11
  120. package/ui/components/molecules/vc-editor/vc-editor.vue +21 -0
  121. package/ui/components/molecules/vc-file-upload/vc-file-upload.vue +1 -0
  122. package/ui/components/molecules/vc-input/vc-input.vue +1 -1
  123. package/ui/components/molecules/vc-select/vc-select.vue +40 -9
  124. package/ui/components/molecules/vc-textarea/vc-textarea.vue +1 -1
  125. package/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue +3 -2
  126. package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue +3 -6
  127. package/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue +2 -6
  128. package/ui/components/organisms/vc-dynamic-property/index.ts +0 -1
  129. package/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue +18 -1
  130. package/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue +5 -11
  131. package/ui/components/organisms/vc-gallery/vc-gallery.vue +164 -49
  132. package/ui/components/organisms/vc-table/vc-table.vue +189 -144
  133. package/core/composables/useAutosave/index.ts +0 -55
  134. package/dist/types/core/composables/useAutosave/index.d.ts +0 -9
  135. package/dist/types/core/composables/useAutosave/index.d.ts.map +0 -1
  136. package/dist/types/shared/app-switcher/components/index.d.ts.map +0 -1
  137. package/dist/types/shared/app-switcher/components/vc-app-switcher/index.d.ts.map +0 -1
  138. package/dist/types/shared/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts.map +0 -1
  139. package/dist/types/shared/app-switcher/composables/index.d.ts.map +0 -1
  140. package/dist/types/shared/app-switcher/composables/useAppSwitcher/index.d.ts.map +0 -1
  141. package/dist/types/shared/app-switcher/index.d.ts.map +0 -1
  142. package/dist/types/shared/assets/components/assets-details/assets-details.vue.d.ts.map +0 -1
  143. package/dist/types/shared/assets/components/assets-details/index.d.ts.map +0 -1
  144. package/dist/types/shared/assets/components/index.d.ts.map +0 -1
  145. package/dist/types/shared/assets/index.d.ts.map +0 -1
  146. package/dist/types/shared/assets/locales/index.d.ts.map +0 -1
  147. package/dist/types/shared/blade-navigation/components/index.d.ts.map +0 -1
  148. package/dist/types/shared/blade-navigation/components/vc-blade-navigation/index.d.ts.map +0 -1
  149. package/dist/types/shared/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts.map +0 -1
  150. package/dist/types/shared/blade-navigation/composables/index.d.ts.map +0 -1
  151. package/dist/types/shared/blade-navigation/composables/useBladeNavigation/index.d.ts.map +0 -1
  152. package/dist/types/shared/blade-navigation/index.d.ts.map +0 -1
  153. package/dist/types/shared/blade-navigation/types/index.d.ts.map +0 -1
  154. package/shared/assets/components/assets-details/assets-details.vue +0 -116
  155. /package/dist/types/shared/{app-switcher → components/app-switcher}/components/index.d.ts +0 -0
  156. /package/dist/types/shared/{app-switcher → components/app-switcher}/composables/index.d.ts +0 -0
  157. /package/dist/types/shared/{app-switcher → components/app-switcher}/index.d.ts +0 -0
  158. /package/dist/types/shared/{blade-navigation → components/blade-navigation}/components/index.d.ts +0 -0
  159. /package/dist/types/shared/{blade-navigation → components/blade-navigation}/components/vc-blade-navigation/index.d.ts +0 -0
  160. /package/dist/types/shared/{blade-navigation → components/blade-navigation}/composables/index.d.ts +0 -0
  161. /package/dist/types/shared/{blade-navigation → components/blade-navigation}/index.d.ts +0 -0
  162. /package/dist/types/shared/{assets → modules/assets}/components/index.d.ts +0 -0
  163. /package/dist/types/shared/{assets → modules/assets}/index.d.ts +0 -0
  164. /package/dist/types/shared/{assets → modules/assets-manager}/locales/index.d.ts +0 -0
  165. /package/shared/{app-switcher → components/app-switcher}/components/index.ts +0 -0
  166. /package/shared/{app-switcher → components/app-switcher}/components/vc-app-switcher/index.ts +0 -0
  167. /package/shared/{app-switcher → components/app-switcher}/composables/index.ts +0 -0
  168. /package/shared/{blade-navigation → components/blade-navigation}/components/index.ts +0 -0
  169. /package/shared/{blade-navigation → components/blade-navigation}/components/vc-blade-navigation/index.ts +0 -0
  170. /package/shared/{blade-navigation → components/blade-navigation}/composables/index.ts +0 -0
  171. /package/shared/{assets → modules/assets}/components/assets-details/index.ts +0 -0
  172. /package/shared/{assets → modules/assets}/components/index.ts +0 -0
  173. /package/shared/{assets → modules/assets-manager}/locales/index.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vc-shell/framework",
3
- "version": "1.0.57",
3
+ "version": "1.0.60",
4
4
  "main": "./dist/framework.mjs",
5
5
  "module": "./dist/framework.mjs",
6
6
  "types": "./dist/types/index.d.ts",
@@ -53,12 +53,11 @@
53
53
  "vue-i18n": "^9.1.7",
54
54
  "vue-router": "^4.1.6",
55
55
  "vue3-ace-editor": "^2.2.2",
56
- "vue3-touch-events": "^4.1.0",
57
- "vuedraggable": "^4.1.0"
56
+ "vue3-touch-events": "^4.1.0"
58
57
  },
59
58
  "devDependencies": {
60
- "@vc-shell/api-client-generator": "^1.0.57",
61
- "@vc-shell/config-generator": "^1.0.57",
59
+ "@vc-shell/api-client-generator": "^1.0.60",
60
+ "@vc-shell/config-generator": "^1.0.60",
62
61
  "sass": "^1.49.0",
63
62
  "typescript": "^4.9.5",
64
63
  "url-pattern": "^1.0.3"
@@ -67,5 +66,5 @@
67
66
  "access": "public",
68
67
  "registry": "https://registry.npmjs.org/"
69
68
  },
70
- "gitHead": "ca294492c2aa439befaba5ee3899dd867c50e35b"
69
+ "gitHead": "0b80b6ecc59e3dbef598932343cafd6ea63a56d2"
71
70
  }
@@ -42,7 +42,7 @@
42
42
 
43
43
  <script lang="ts" setup>
44
44
  import { ref } from "vue";
45
- import { AppDescriptor } from "./../../../../core/api";
45
+ import { AppDescriptor } from "../../../../../core/api";
46
46
 
47
47
  export interface Props {
48
48
  appsList: AppDescriptor[];
@@ -1,6 +1,6 @@
1
1
  import { computed, Ref, ref } from "vue";
2
- import { AppDescriptor, AppsClient } from "./../../../../core/api";
3
- import { useUser, usePermissions } from "./../../../../core/composables";
2
+ import { AppDescriptor, AppsClient } from "../../../../../core/api";
3
+ import { useUser, usePermissions } from "../../../../../core/composables";
4
4
 
5
5
  interface IUseAppSwitcher {
6
6
  readonly appsList: Ref<AppDescriptor[]>;
@@ -1,4 +1,4 @@
1
- import { createModule } from "../../core/plugins/modularity";
1
+ import { createModule } from "../../../core/plugins/modularity";
2
2
  import * as components from "./components";
3
3
 
4
4
  // Declare globally
@@ -33,7 +33,7 @@
33
33
  <script lang="ts" setup>
34
34
  import { computed, onBeforeUpdate, ref } from "vue";
35
35
  import { useRoute } from "vue-router";
36
- import { IBladeContainer, IBladeElement, IBladeEvent, IParentCallArgs } from "./../../../../shared";
36
+ import { IBladeContainer, IBladeElement, IBladeEvent, IParentCallArgs } from "./../../../../../shared";
37
37
 
38
38
  export interface Props {
39
39
  blades: IBladeContainer[];
@@ -64,7 +64,7 @@ onBeforeUpdate(() => {
64
64
  });
65
65
 
66
66
  const setBladesRef = (el: IBladeElement) => {
67
- if (el && Object.keys(el).length) {
67
+ if (el && el !== null) {
68
68
  bladesRefs.value.push(el);
69
69
  }
70
70
  };
@@ -1,8 +1,8 @@
1
1
  import { computed, ref, unref, watch, Ref } from "vue";
2
2
  import { isEqual } from "lodash-es";
3
3
  import { useRouter, useRoute, NavigationFailure } from "vue-router";
4
- import { usePermissions } from "./../../../../core/composables";
5
- import { ExtendedComponent, IBladeContainer, IBladeElement, IBladeEvent, IParentCallArgs } from "./../../../../shared";
4
+ import { usePermissions } from "../../../../../core/composables";
5
+ import { ExtendedComponent, IBladeContainer, IBladeElement, IBladeEvent, IParentCallArgs } from "../../../..";
6
6
 
7
7
  interface IUseBladeNavigation {
8
8
  readonly blades: Ref<IBladeContainer[]>;
@@ -52,7 +52,7 @@ export default (): IUseBladeNavigation => {
52
52
  index?: number,
53
53
  navigationCb?: () => Promise<void | NavigationFailure>
54
54
  ) {
55
- console.debug(`openBlade(${1}) called.`);
55
+ console.debug(`openBlade called.`);
56
56
 
57
57
  const parent = unref(parentBlade);
58
58
  const child = unref(blade);
@@ -91,8 +91,9 @@ export default (): IUseBladeNavigation => {
91
91
  }
92
92
 
93
93
  async function closeBlade(index: number) {
94
- if (index < bladesRefs.value.length) {
95
- const children = bladesRefs.value.slice(index).reverse();
94
+ const refsIndex = index + 1;
95
+ if (refsIndex < bladesRefs.value.length) {
96
+ const children = bladesRefs.value.slice(refsIndex).reverse();
96
97
 
97
98
  isPrevented.value = false;
98
99
  for (let i = 0; i < children.length; i++) {
@@ -1,4 +1,4 @@
1
- import { createModule } from "../../core/plugins/modularity";
1
+ import { createModule } from "../../../core/plugins/modularity";
2
2
  import * as components from "./components";
3
3
 
4
4
  // Declare globally
@@ -1,5 +1,5 @@
1
1
  import { Component, ComponentPublicInstance } from "vue";
2
- import { IMenuItems } from "./../../../core/types";
2
+ import { IMenuItems } from "../../../../core/types";
3
3
  import { NavigationFailure } from "vue-router";
4
4
 
5
5
  /* onParentCall event interface */
package/shared/index.ts CHANGED
@@ -1,14 +1,17 @@
1
1
  import { App } from "vue";
2
- import { default as AssetsDetailsModule } from "./assets";
3
- import { default as VcAppSwitcherModule } from "./app-switcher";
4
- import { default as VcBladeNavigationModule } from "./blade-navigation";
2
+ import { default as AssetsDetailsModule } from "./modules/assets";
3
+ import { default as VcAppSwitcherComponent } from "./components/app-switcher";
4
+ import { default as VcBladeNavigationComponent } from "./components/blade-navigation";
5
+ import { default as AssetsManagerModule } from "./modules/assets-manager";
5
6
 
6
7
  export default {
7
8
  install(app: App): void {
8
- app.use(AssetsDetailsModule).use(VcAppSwitcherModule).use(VcBladeNavigationModule);
9
+ app.use(AssetsDetailsModule).use(AssetsManagerModule).use(VcBladeNavigationComponent).use(VcAppSwitcherComponent);
9
10
  },
10
11
  };
11
12
 
12
- export * from "./assets";
13
- export * from "./app-switcher";
14
- export * from "./blade-navigation";
13
+ export * from "./modules/assets";
14
+ export * from "./modules/assets-manager";
15
+
16
+ export * from "./components/app-switcher";
17
+ export * from "./components/blade-navigation";
@@ -0,0 +1,204 @@
1
+ <template>
2
+ <VcBlade
3
+ :title="options?.asset?.name"
4
+ :subtitle="$t('ASSETS.PAGES.DETAILS.SUBTITLE')"
5
+ :expanded="expanded"
6
+ :closable="closable"
7
+ :toolbarItems="bladeToolbar"
8
+ @close="$emit('close:blade')"
9
+ >
10
+ <!-- Blade contents -->
11
+ <div class="tw-flex tw-grow-1 tw-border-t tw-border-solid tw-border-t-[#eaedf3]">
12
+ <div class="assets-details__content tw-grow tw-basis-0 tw-w-full">
13
+ <VcContainer :no-padding="true">
14
+ <div class="tw-p-4">
15
+ <VcForm>
16
+ <VcRow class="tw-mb-4 !tw-flex">
17
+ <template v-if="isImage(defaultAsset.name)">
18
+ <VcImage
19
+ :src="defaultAsset.url"
20
+ size="xl"
21
+ :bordered="true"
22
+ class="tw-shrink-0"
23
+ ></VcImage>
24
+ </template>
25
+ <template v-else>
26
+ <VcIcon
27
+ :icon="getFileThumbnail(defaultAsset.name)"
28
+ class="tw-text-[#a9bfd2] tw-text-[128px] tw-shrink-0"
29
+ ></VcIcon>
30
+ </template>
31
+ <VcCol class="tw-ml-6">
32
+ <VcCol>
33
+ <VcCol>
34
+ <VcLabel>{{ $t("ASSETS.PAGES.DETAILS.FIELDS.SIZE") }}</VcLabel>
35
+ <VcHint class="tw-text-s">{{ readableSize(defaultAsset.size) }}</VcHint>
36
+ </VcCol>
37
+ <VcCol>
38
+ <VcLabel>{{ $t("ASSETS.PAGES.DETAILS.FIELDS.CREATED_DATE") }}</VcLabel>
39
+ <VcHint class="tw-text-s">{{
40
+ (defaultAsset.createdDate && moment(defaultAsset.createdDate).fromNow()) || "N/A"
41
+ }}</VcHint>
42
+ </VcCol>
43
+ <VcCol class="tw-w-full">
44
+ <VcLabel>{{ $t("ASSETS.PAGES.DETAILS.FIELDS.URL") }}</VcLabel>
45
+ <div class="tw-flex tw-flex-row tw-justify-stretch tw-truncate">
46
+ <div class="tw-truncate">
47
+ <VcLink
48
+ class="vc-link tw-text-s tw-truncate tw-w-full"
49
+ @click="openLink(defaultAsset.url)"
50
+ >{{ props.options?.asset.name }}</VcLink
51
+ >
52
+ </div>
53
+ <VcButton
54
+ icon="far fa-copy"
55
+ size="m"
56
+ class="tw-ml-2"
57
+ variant="onlytext"
58
+ @click="copyLink(defaultAsset.url)"
59
+ title="Copy link"
60
+ ></VcButton>
61
+ </div>
62
+ </VcCol>
63
+ </VcCol>
64
+ </VcCol>
65
+ </VcRow>
66
+
67
+ <Field
68
+ :label="$t('ASSETS.PAGES.DETAILS.FIELDS.NAME.TITLE')"
69
+ name="asset_name"
70
+ rules="required"
71
+ :modelValue="defaultAsset.name"
72
+ v-slot="{ errorMessage, handleChange, errors }"
73
+ >
74
+ <VcInput
75
+ class="tw-mb-4"
76
+ :label="$t('ASSETS.PAGES.DETAILS.FIELDS.NAME.TITLE')"
77
+ v-model="assetNameClean"
78
+ @update:modelValue="handleChange"
79
+ clearable
80
+ required
81
+ :error="!!errors.length"
82
+ :error-message="errorMessage"
83
+ :placeholder="$t('ASSETS.PAGES.DETAILS.FIELDS.NAME.PLACEHOLDER')"
84
+ :disabled="readonly"
85
+ ></VcInput>
86
+ </Field>
87
+ <VcInput
88
+ class="tw-mb-4"
89
+ :label="$t('ASSETS.PAGES.DETAILS.FIELDS.ALT.TITLE')"
90
+ v-model="defaultAsset.altText"
91
+ clearable
92
+ :placeholder="$t('ASSETS.PAGES.DETAILS.FIELDS.ALT.PLACEHOLDER')"
93
+ :tooltip="$t('ASSETS.PAGES.DETAILS.FIELDS.ALT.TOOLTIP')"
94
+ v-if="assetType === 'Image'"
95
+ :disabled="readonly"
96
+ ></VcInput>
97
+ <VcTextarea
98
+ class="tw-mb-4"
99
+ :label="$t('ASSETS.PAGES.DETAILS.FIELDS.DESCRIPTION.TITLE')"
100
+ v-model="defaultAsset.description"
101
+ :placeholder="$t('ASSETS.PAGES.DETAILS.FIELDS.DESCRIPTION.PLACEHOLDER')"
102
+ :disabled="readonly"
103
+ ></VcTextarea>
104
+ </VcForm>
105
+ </div>
106
+ </VcContainer>
107
+ </div>
108
+ </div>
109
+ </VcBlade>
110
+ </template>
111
+
112
+ <script lang="ts" setup>
113
+ import { Asset, IBladeToolbar } from "./../../../../../core/types";
114
+ import { computed, ref } from "vue";
115
+ import { useI18n } from "vue-i18n";
116
+ import { VcBlade, VcContainer, VcForm, VcImage, VcInput, VcTextarea } from "./../../../../../ui/components";
117
+ import { isImage, getFileThumbnail, readableSize } from "./../../../../utilities/assets";
118
+ import moment from "moment";
119
+ import { useIsFormValid, Field, useForm, useIsFormDirty } from "vee-validate";
120
+
121
+ export interface Props {
122
+ expanded?: boolean;
123
+ closable?: boolean;
124
+ options?: {
125
+ asset: Asset;
126
+ disabled?: boolean;
127
+ assetEditHandler?: (defaultAsset: Asset) => void;
128
+ assetRemoveHandler?: (defaultAsset: Asset) => void;
129
+ };
130
+ }
131
+
132
+ export interface Emits {
133
+ (event: "close:blade"): void;
134
+ }
135
+
136
+ const props = withDefaults(defineProps<Props>(), {
137
+ expanded: true,
138
+ closable: true,
139
+ });
140
+
141
+ const emit = defineEmits<Emits>();
142
+ useForm({ validateOnMount: false });
143
+ const isValid = useIsFormValid();
144
+ const isDirty = useIsFormDirty();
145
+ const { t } = useI18n();
146
+ const defaultAsset = ref<Asset>({ ...props.options?.asset });
147
+
148
+ const readonly = computed(() => props.options.disabled);
149
+
150
+ const assetNameClean = computed({
151
+ get() {
152
+ return defaultAsset.value.name.split(".").shift();
153
+ },
154
+ set(value: string) {
155
+ const fileExtension = defaultAsset.value.name.split(".").pop();
156
+ defaultAsset.value.name = value + "." + fileExtension;
157
+ },
158
+ });
159
+
160
+ const isDisabled = computed(() => {
161
+ return !isDirty.value || !isValid.value;
162
+ });
163
+
164
+ const bladeToolbar = ref<IBladeToolbar[]>([
165
+ {
166
+ id: "save",
167
+ title: t("ASSETS.PAGES.DETAILS.TOOLBAR.SAVE"),
168
+ icon: "fas fa-save",
169
+ clickHandler() {
170
+ if (props.options?.assetEditHandler && typeof props.options?.assetEditHandler === "function") {
171
+ props.options?.assetEditHandler(defaultAsset.value);
172
+ emit("close:blade");
173
+ }
174
+ },
175
+ disabled: computed(() => isDisabled.value || readonly.value),
176
+ },
177
+ {
178
+ id: "delete",
179
+ title: t("ASSETS.PAGES.DETAILS.TOOLBAR.DELETE"),
180
+ icon: "fas fa-trash",
181
+ clickHandler() {
182
+ if (props.options?.assetRemoveHandler && typeof props.options?.assetRemoveHandler === "function") {
183
+ props.options?.assetRemoveHandler(defaultAsset.value);
184
+ emit("close:blade");
185
+ }
186
+ },
187
+ disabled: computed(() => readonly.value),
188
+ },
189
+ ]);
190
+
191
+ const assetType = computed(() => defaultAsset.value?.typeId);
192
+
193
+ function copyLink(link: string) {
194
+ if (link.charAt(0) === "/") {
195
+ navigator.clipboard?.writeText(`${location.origin}${link}`);
196
+ } else {
197
+ navigator.clipboard?.writeText(link);
198
+ }
199
+ }
200
+
201
+ function openLink(link: string) {
202
+ location.href = link;
203
+ }
204
+ </script>
@@ -1,4 +1,4 @@
1
- import { createModule } from "../../core/plugins/modularity";
1
+ import { createModule } from "../../../core/plugins/modularity";
2
2
  import * as components from "./components";
3
3
  import * as locales from "./locales";
4
4
 
@@ -2,15 +2,18 @@
2
2
  "ASSETS": {
3
3
  "PAGES": {
4
4
  "DETAILS": {
5
- "SUBTITLE": "Image edit",
5
+ "SUBTITLE": "Asset edit",
6
6
  "TOOLBAR": {
7
7
  "SAVE": "Save",
8
8
  "DELETE": "Delete"
9
9
  },
10
10
  "FIELDS": {
11
+ "SIZE": "Size",
12
+ "CREATED_DATE": "Created date",
13
+ "URL": "Url",
11
14
  "NAME": {
12
- "TITLE": "Image name",
13
- "PLACEHOLDER": "Enter image name"
15
+ "TITLE": "Asset name",
16
+ "PLACEHOLDER": "Enter asset name"
14
17
  },
15
18
  "ALT": {
16
19
  "TITLE": "Image alternative text",
@@ -21,8 +24,7 @@
21
24
  "TITLE": "Meta description",
22
25
  "PLACEHOLDER": "Enter meta description"
23
26
  }
24
- },
25
- "DELETE_CONFIRMATION": "Are you sure you want to delete this image?"
27
+ }
26
28
  }
27
29
  }
28
30
  }
@@ -0,0 +1,2 @@
1
+ import * as en from "./en.json";
2
+ export { en };