@vc-shell/framework 1.0.57 → 1.0.59

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 (139) hide show
  1. package/core/plugins/validation/rules.ts +67 -24
  2. package/core/types/index.ts +19 -2
  3. package/dist/framework.mjs +1859 -4863
  4. package/dist/index.css +1 -1
  5. package/dist/types/core/plugins/validation/rules.d.ts +8 -30
  6. package/dist/types/core/plugins/validation/rules.d.ts.map +1 -1
  7. package/dist/types/core/types/index.d.ts +17 -2
  8. package/dist/types/core/types/index.d.ts.map +1 -1
  9. package/dist/types/index.d.ts.map +1 -1
  10. package/dist/types/shared/components/app-switcher/components/index.d.ts.map +1 -0
  11. package/dist/types/shared/{app-switcher → components/app-switcher}/components/vc-app-switcher/index.d.ts +5 -5
  12. package/dist/types/shared/components/app-switcher/components/vc-app-switcher/index.d.ts.map +1 -0
  13. package/dist/types/shared/{app-switcher → components/app-switcher}/components/vc-app-switcher/vc-app-switcher.vue.d.ts +1 -1
  14. package/dist/types/shared/components/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts.map +1 -0
  15. package/dist/types/shared/components/app-switcher/composables/index.d.ts.map +1 -0
  16. package/dist/types/shared/{app-switcher → components/app-switcher}/composables/useAppSwitcher/index.d.ts +1 -1
  17. package/dist/types/shared/components/app-switcher/composables/useAppSwitcher/index.d.ts.map +1 -0
  18. package/dist/types/shared/components/app-switcher/index.d.ts.map +1 -0
  19. package/dist/types/shared/components/blade-navigation/components/index.d.ts.map +1 -0
  20. package/dist/types/shared/components/blade-navigation/components/vc-blade-navigation/index.d.ts.map +1 -0
  21. package/dist/types/shared/{blade-navigation → components/blade-navigation}/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts +1 -1
  22. package/dist/types/shared/components/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts.map +1 -0
  23. package/dist/types/shared/components/blade-navigation/composables/index.d.ts.map +1 -0
  24. package/dist/types/shared/{blade-navigation → components/blade-navigation}/composables/useBladeNavigation/index.d.ts +1 -1
  25. package/dist/types/shared/components/blade-navigation/composables/useBladeNavigation/index.d.ts.map +1 -0
  26. package/dist/types/shared/components/blade-navigation/index.d.ts.map +1 -0
  27. package/dist/types/shared/{blade-navigation → components/blade-navigation}/types/index.d.ts +1 -1
  28. package/dist/types/shared/components/blade-navigation/types/index.d.ts.map +1 -0
  29. package/dist/types/shared/index.d.ts +4 -3
  30. package/dist/types/shared/index.d.ts.map +1 -1
  31. package/dist/types/shared/{assets → modules/assets}/components/assets-details/assets-details.vue.d.ts +4 -13
  32. package/dist/types/shared/modules/assets/components/assets-details/assets-details.vue.d.ts.map +1 -0
  33. package/dist/types/shared/{assets → modules/assets}/components/assets-details/index.d.ts +6 -7
  34. package/dist/types/shared/modules/assets/components/assets-details/index.d.ts.map +1 -0
  35. package/dist/types/shared/modules/assets/components/index.d.ts.map +1 -0
  36. package/dist/types/shared/modules/assets/index.d.ts.map +1 -0
  37. package/dist/types/shared/modules/assets/locales/index.d.ts +3 -0
  38. package/dist/types/shared/modules/assets/locales/index.d.ts.map +1 -0
  39. package/dist/types/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts +58 -0
  40. package/dist/types/shared/modules/assets-manager/components/assets-manager/assets-manager.vue.d.ts.map +1 -0
  41. package/dist/types/shared/modules/assets-manager/components/assets-manager/index.d.ts +59 -0
  42. package/dist/types/shared/modules/assets-manager/components/assets-manager/index.d.ts.map +1 -0
  43. package/dist/types/shared/modules/assets-manager/components/index.d.ts +2 -0
  44. package/dist/types/shared/modules/assets-manager/components/index.d.ts.map +1 -0
  45. package/dist/types/shared/modules/assets-manager/index.d.ts +12 -0
  46. package/dist/types/shared/modules/assets-manager/index.d.ts.map +1 -0
  47. package/dist/types/shared/modules/assets-manager/locales/index.d.ts.map +1 -0
  48. package/dist/types/shared/utilities/assets.d.ts +5 -0
  49. package/dist/types/shared/utilities/assets.d.ts.map +1 -0
  50. package/dist/types/ui/components/atoms/vc-checkbox/vc-checkbox.vue.d.ts.map +1 -1
  51. package/dist/types/ui/components/molecules/vc-file-upload/vc-file-upload.vue.d.ts.map +1 -1
  52. package/dist/types/ui/components/molecules/vc-input/index.d.ts +0 -4
  53. package/dist/types/ui/components/molecules/vc-input/index.d.ts.map +1 -1
  54. package/dist/types/ui/components/molecules/vc-input/vc-input.vue.d.ts +1 -1
  55. package/dist/types/ui/components/molecules/vc-input/vc-input.vue.d.ts.map +1 -1
  56. package/dist/types/ui/components/molecules/vc-select/vc-select.vue.d.ts.map +1 -1
  57. 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
  58. package/dist/types/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue.d.ts +2 -19
  59. package/dist/types/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue.d.ts.map +1 -1
  60. package/dist/types/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue.d.ts +2 -20
  61. package/dist/types/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue.d.ts.map +1 -1
  62. package/dist/types/ui/components/organisms/vc-gallery/index.d.ts +30 -33
  63. package/dist/types/ui/components/organisms/vc-gallery/index.d.ts.map +1 -1
  64. package/dist/types/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts +2 -6
  65. package/dist/types/ui/components/organisms/vc-gallery/vc-gallery.vue.d.ts.map +1 -1
  66. package/dist/types/ui/components/organisms/vc-table/index.d.ts +49 -37
  67. package/dist/types/ui/components/organisms/vc-table/index.d.ts.map +1 -1
  68. package/dist/types/ui/components/organisms/vc-table/vc-table.stories.d.ts +49 -37
  69. package/dist/types/ui/components/organisms/vc-table/vc-table.stories.d.ts.map +1 -1
  70. package/dist/types/ui/components/organisms/vc-table/vc-table.vue.d.ts +12 -7
  71. package/dist/types/ui/components/organisms/vc-table/vc-table.vue.d.ts.map +1 -1
  72. package/package.json +5 -6
  73. package/shared/{app-switcher → components/app-switcher}/components/vc-app-switcher/vc-app-switcher.vue +1 -1
  74. package/shared/{app-switcher → components/app-switcher}/composables/useAppSwitcher/index.ts +2 -2
  75. package/shared/{app-switcher → components/app-switcher}/index.ts +1 -1
  76. package/shared/{blade-navigation → components/blade-navigation}/components/vc-blade-navigation/vc-blade-navigation.vue +2 -2
  77. package/shared/{blade-navigation → components/blade-navigation}/composables/useBladeNavigation/index.ts +6 -5
  78. package/shared/{blade-navigation → components/blade-navigation}/index.ts +1 -1
  79. package/shared/{blade-navigation → components/blade-navigation}/types/index.ts +1 -1
  80. package/shared/index.ts +10 -7
  81. package/shared/modules/assets/components/assets-details/assets-details.vue +166 -0
  82. package/shared/{assets → modules/assets}/index.ts +1 -1
  83. package/shared/{assets → modules/assets}/locales/en.json +7 -5
  84. package/shared/modules/assets/locales/index.ts +2 -0
  85. package/shared/modules/assets-manager/components/assets-manager/assets-manager.vue +372 -0
  86. package/shared/modules/assets-manager/components/assets-manager/index.ts +3 -0
  87. package/shared/modules/assets-manager/components/index.ts +1 -0
  88. package/shared/modules/assets-manager/index.ts +14 -0
  89. package/shared/modules/assets-manager/locales/en.json +28 -0
  90. package/shared/utilities/assets.ts +40 -0
  91. package/ui/components/atoms/vc-checkbox/vc-checkbox.vue +1 -11
  92. package/ui/components/molecules/vc-file-upload/vc-file-upload.vue +1 -0
  93. package/ui/components/molecules/vc-input/vc-input.vue +1 -1
  94. package/ui/components/molecules/vc-select/vc-select.vue +2 -2
  95. package/ui/components/organisms/vc-app/_internal/vc-app-bar/vc-app-bar.vue +3 -2
  96. package/ui/components/organisms/vc-app/_internal/vc-app-menu/_internal/vc-app-menu-item/vc-app-menu-item.vue +3 -6
  97. package/ui/components/organisms/vc-blade/_internal/vc-blade-header/vc-blade-header.vue +2 -6
  98. package/ui/components/organisms/vc-dynamic-property/vc-dynamic-property.vue +6 -0
  99. package/ui/components/organisms/vc-gallery/_internal/vc-gallery-item/vc-gallery-item.vue +5 -11
  100. package/ui/components/organisms/vc-gallery/vc-gallery.vue +164 -49
  101. package/ui/components/organisms/vc-table/vc-table.vue +171 -100
  102. package/dist/types/shared/app-switcher/components/index.d.ts.map +0 -1
  103. package/dist/types/shared/app-switcher/components/vc-app-switcher/index.d.ts.map +0 -1
  104. package/dist/types/shared/app-switcher/components/vc-app-switcher/vc-app-switcher.vue.d.ts.map +0 -1
  105. package/dist/types/shared/app-switcher/composables/index.d.ts.map +0 -1
  106. package/dist/types/shared/app-switcher/composables/useAppSwitcher/index.d.ts.map +0 -1
  107. package/dist/types/shared/app-switcher/index.d.ts.map +0 -1
  108. package/dist/types/shared/assets/components/assets-details/assets-details.vue.d.ts.map +0 -1
  109. package/dist/types/shared/assets/components/assets-details/index.d.ts.map +0 -1
  110. package/dist/types/shared/assets/components/index.d.ts.map +0 -1
  111. package/dist/types/shared/assets/index.d.ts.map +0 -1
  112. package/dist/types/shared/assets/locales/index.d.ts.map +0 -1
  113. package/dist/types/shared/blade-navigation/components/index.d.ts.map +0 -1
  114. package/dist/types/shared/blade-navigation/components/vc-blade-navigation/index.d.ts.map +0 -1
  115. package/dist/types/shared/blade-navigation/components/vc-blade-navigation/vc-blade-navigation.vue.d.ts.map +0 -1
  116. package/dist/types/shared/blade-navigation/composables/index.d.ts.map +0 -1
  117. package/dist/types/shared/blade-navigation/composables/useBladeNavigation/index.d.ts.map +0 -1
  118. package/dist/types/shared/blade-navigation/index.d.ts.map +0 -1
  119. package/dist/types/shared/blade-navigation/types/index.d.ts.map +0 -1
  120. package/shared/assets/components/assets-details/assets-details.vue +0 -116
  121. /package/dist/types/shared/{app-switcher → components/app-switcher}/components/index.d.ts +0 -0
  122. /package/dist/types/shared/{app-switcher → components/app-switcher}/composables/index.d.ts +0 -0
  123. /package/dist/types/shared/{app-switcher → components/app-switcher}/index.d.ts +0 -0
  124. /package/dist/types/shared/{blade-navigation → components/blade-navigation}/components/index.d.ts +0 -0
  125. /package/dist/types/shared/{blade-navigation → components/blade-navigation}/components/vc-blade-navigation/index.d.ts +0 -0
  126. /package/dist/types/shared/{blade-navigation → components/blade-navigation}/composables/index.d.ts +0 -0
  127. /package/dist/types/shared/{blade-navigation → components/blade-navigation}/index.d.ts +0 -0
  128. /package/dist/types/shared/{assets → modules/assets}/components/index.d.ts +0 -0
  129. /package/dist/types/shared/{assets → modules/assets}/index.d.ts +0 -0
  130. /package/dist/types/shared/{assets → modules/assets-manager}/locales/index.d.ts +0 -0
  131. /package/shared/{app-switcher → components/app-switcher}/components/index.ts +0 -0
  132. /package/shared/{app-switcher → components/app-switcher}/components/vc-app-switcher/index.ts +0 -0
  133. /package/shared/{app-switcher → components/app-switcher}/composables/index.ts +0 -0
  134. /package/shared/{blade-navigation → components/blade-navigation}/components/index.ts +0 -0
  135. /package/shared/{blade-navigation → components/blade-navigation}/components/vc-blade-navigation/index.ts +0 -0
  136. /package/shared/{blade-navigation → components/blade-navigation}/composables/index.ts +0 -0
  137. /package/shared/{assets → modules/assets}/components/assets-details/index.ts +0 -0
  138. /package/shared/{assets → modules/assets}/components/index.ts +0 -0
  139. /package/shared/{assets → modules/assets-manager}/locales/index.ts +0 -0
@@ -10,7 +10,7 @@
10
10
  >
11
11
  <VcImage
12
12
  aspect="1x1"
13
- :src="image.url"
13
+ :src="image['url']"
14
14
  background="contain"
15
15
  ></VcImage>
16
16
  <div class="vc-gallery-item__overlay">
@@ -23,9 +23,9 @@
23
23
  ></VcIcon>
24
24
  <div
25
25
  class="tw-truncate"
26
- :title="image.name"
26
+ :title="image['name']"
27
27
  >
28
- {{ image.name }}
28
+ {{ image["name"] }}
29
29
  </div>
30
30
  </div>
31
31
  <div class="tw-flex tw-grow tw-basis-0 tw-items-center tw-justify-around">
@@ -73,7 +73,7 @@ import { clickOutside as vClickOutside } from "./../../../../../../core/directiv
73
73
  import { IImage } from "./../../../../../../core/types";
74
74
 
75
75
  export interface Props {
76
- image?: IImage | undefined;
76
+ image: IImage;
77
77
  readonly?: boolean | undefined;
78
78
  actions?:
79
79
  | {
@@ -87,12 +87,6 @@ export interface Props {
87
87
  }
88
88
 
89
89
  withDefaults(defineProps<Props>(), {
90
- image: () => ({
91
- sortOrder: undefined,
92
- title: undefined,
93
- name: undefined,
94
- url: undefined,
95
- }),
96
90
  readonly: false,
97
91
  actions: () => ({
98
92
  name: undefined,
@@ -126,7 +120,7 @@ function onClose() {
126
120
  }
127
121
 
128
122
  &__move {
129
- @apply tw-text-[#a1c0d4] tw-cursor-pointer tw-mr-2;
123
+ @apply tw-text-[#a1c0d4] tw-cursor-move tw-mr-2;
130
124
  }
131
125
 
132
126
  &__button {
@@ -9,44 +9,45 @@
9
9
  {{ label }}
10
10
  </VcLabel>
11
11
 
12
- <template v-if="(images && images.length) || !disabled">
13
- <div class="tw-flex tw-flex-wrap">
14
- <draggable
15
- :list="images"
12
+ <template v-if="(defaultImages && defaultImages.length) || !disabled">
13
+ <div class="tw-flex tw-flex-wrap tw-relative">
14
+ <div
16
15
  class="tw-flex tw-flex-wrap tw-w-full"
17
- tag="transition-group"
18
- v-bind="dragOptions"
19
- @change="updateOrder"
20
- :component-data="{
21
- tag: 'div',
22
- }"
16
+ ref="galleryRef"
23
17
  >
24
- <template #item="{ element, index }">
25
- <VcGalleryItem
26
- class="tw-m-2"
27
- :key="element.sortOrder"
28
- :image="element"
29
- :readonly="disabled"
30
- @preview="onPreviewClick(index)"
31
- @edit="$emit('item:edit', $event)"
32
- @remove="$emit('item:remove', $event)"
33
- :actions="itemActions"
34
- :disableDrag="disableDrag"
35
- ></VcGalleryItem>
36
- </template>
37
- <template #footer>
38
- <VcFileUpload
39
- v-if="!disabled && !hideAfterUpload"
40
- class="tw-m-2"
41
- :icon="uploadIcon"
42
- @upload="onUpload"
43
- :variant="variant"
44
- :multiple="multiple"
45
- :rules="rules"
46
- :name="name"
47
- ></VcFileUpload>
48
- </template>
49
- </draggable>
18
+ <VcGalleryItem
19
+ class="tw-m-2 vc-gallery__item"
20
+ v-for="(image, i) in defaultImages"
21
+ :key="`image_${i}`"
22
+ :image="image"
23
+ :readonly="disabled"
24
+ @preview="onPreviewClick(i)"
25
+ @edit="$emit('item:edit', $event)"
26
+ @remove="$emit('item:remove', $event)"
27
+ :actions="itemActions"
28
+ :disableDrag="disableDrag"
29
+ @mousedown="onItemMouseDown"
30
+ @dragstart="onItemDragStart($event, image)"
31
+ @dragover="onItemDragOver"
32
+ @dragleave="onItemDragLeave"
33
+ @drop="onItemDrop($event, image)"
34
+ @touchstart="onItemMouseDown"
35
+ ></VcGalleryItem>
36
+ <VcFileUpload
37
+ v-if="!disabled && !hideAfterUpload"
38
+ class="tw-m-2"
39
+ :icon="uploadIcon"
40
+ @upload="onUpload"
41
+ :variant="variant"
42
+ :multiple="multiple"
43
+ :rules="rules"
44
+ :name="name"
45
+ ></VcFileUpload>
46
+ </div>
47
+ <div
48
+ ref="reorderGalleryRef"
49
+ class="tw-w-0.5 tw-bg-[#41afe6] tw-h-full tw-absolute tw-top-0 tw-bottom-0 tw-z-[2] tw-hidden"
50
+ ></div>
50
51
  </div>
51
52
  </template>
52
53
  <div
@@ -66,7 +67,7 @@
66
67
  </template>
67
68
 
68
69
  <script lang="ts" setup>
69
- import { computed, ref } from "vue";
70
+ import { ref, watch } from "vue";
70
71
  import { IImage } from "../../../../core/types";
71
72
  import { VcLabel, VcFileUpload } from "./../../../components";
72
73
  import VcGalleryItem from "./_internal/vc-gallery-item/vc-gallery-item.vue";
@@ -99,7 +100,6 @@ export interface Emits {
99
100
  (event: "sort", sorted: IImage[]): void;
100
101
  (event: "item:edit", image: IImage): void;
101
102
  (event: "item:remove", image: IImage): void;
102
- (event: "item:move", image: IImage): void;
103
103
  }
104
104
 
105
105
  const props = withDefaults(defineProps<Props>(), {
@@ -118,15 +118,22 @@ const props = withDefaults(defineProps<Props>(), {
118
118
  const emit = defineEmits<Emits>();
119
119
 
120
120
  const preview = ref(false);
121
- const previewImageIndex = ref();
122
- const dragOptions = computed(() => {
123
- return {
124
- animation: 200,
125
- group: "description",
126
- disabled: props.disableDrag,
127
- ghostClass: "ghost",
128
- };
129
- });
121
+ const previewImageIndex = ref<number>();
122
+
123
+ const defaultImages = ref<IImage[]>([]);
124
+ const draggedItem = ref<IImage>();
125
+ const draggedElement = ref<HTMLElement>();
126
+ const galleryRef = ref<HTMLElement>();
127
+ const reorderGalleryRef = ref<HTMLElement>();
128
+ const dropPosition = ref<number>();
129
+
130
+ watch(
131
+ () => props.images,
132
+ (newVal) => {
133
+ defaultImages.value = newVal;
134
+ },
135
+ { deep: true, immediate: true }
136
+ );
130
137
 
131
138
  const onUpload = (files: FileList) => {
132
139
  if (files && files.length) {
@@ -140,11 +147,119 @@ const onPreviewClick = (index: number) => {
140
147
  };
141
148
 
142
149
  const updateOrder = () => {
143
- const images = props.images;
150
+ const images = defaultImages.value;
144
151
  const sortedImgs = images.map((item, index) => {
145
152
  item.sortOrder = index;
146
153
  return item;
147
154
  });
148
- emit("sort", ref(sortedImgs).value);
155
+
156
+ emit("sort", sortedImgs);
149
157
  };
158
+
159
+ function onItemMouseDown(event: MouseEvent & { currentTarget?: { draggable: boolean } }) {
160
+ if (!props.disableDrag) {
161
+ event.currentTarget.draggable = true;
162
+ return;
163
+ }
164
+ }
165
+
166
+ function onItemDragStart(event: DragEvent, item: IImage) {
167
+ draggedItem.value = item;
168
+ draggedElement.value = event.target as HTMLElement;
169
+ event.dataTransfer.setData("text", "gallery_reorder");
170
+ }
171
+
172
+ function onItemDragOver(event: DragEvent) {
173
+ let dropItem = findParentElement(event.target as HTMLElement);
174
+
175
+ if (!props.disableDrag && draggedItem.value && dropItem) {
176
+ event.preventDefault();
177
+
178
+ let containerOffset = galleryRef.value.getBoundingClientRect();
179
+ let dropItemOffset = dropItem.getBoundingClientRect();
180
+
181
+ if (draggedElement.value !== dropItem) {
182
+ let elementStyle = getComputedStyle(dropItem);
183
+ const dropItemOffsetWidth = dropItem.offsetWidth + parseFloat(elementStyle.marginLeft);
184
+ let targetLeft = dropItemOffset.left - containerOffset.left;
185
+ let columnCenter = dropItemOffset.left + dropItemOffsetWidth / 2;
186
+
187
+ reorderGalleryRef.value.style.top = dropItemOffset.top - containerOffset.top + "px";
188
+ reorderGalleryRef.value.style.height = dropItem.offsetHeight + "px";
189
+
190
+ if (event.pageX > columnCenter) {
191
+ reorderGalleryRef.value.style.left = targetLeft + dropItemOffsetWidth + "px";
192
+ dropPosition.value = 1;
193
+ } else {
194
+ reorderGalleryRef.value.style.left = targetLeft - parseFloat(elementStyle.marginLeft) + "px";
195
+ dropPosition.value = -1;
196
+ }
197
+
198
+ reorderGalleryRef.value.style.display = "block";
199
+ }
200
+ }
201
+ }
202
+
203
+ function onItemDragLeave(event: DragEvent) {
204
+ if (!props.disableDrag && draggedItem.value) {
205
+ event.preventDefault();
206
+
207
+ reorderGalleryRef.value.style.display = "none";
208
+ }
209
+ }
210
+
211
+ function onItemDrop(event: DragEvent, item: IImage) {
212
+ event.preventDefault();
213
+
214
+ if (draggedItem.value) {
215
+ let dragIndex = defaultImages.value.indexOf(draggedItem.value);
216
+ let dropIndex = defaultImages.value.indexOf(item);
217
+
218
+ let allowDrop = dragIndex !== dropIndex;
219
+
220
+ if (
221
+ allowDrop &&
222
+ ((dropIndex - dragIndex === 1 && dropPosition.value === -1) ||
223
+ (dropIndex - dragIndex === -1 && dropPosition.value === 1))
224
+ ) {
225
+ allowDrop = false;
226
+ }
227
+
228
+ if (allowDrop) {
229
+ reorderArray(defaultImages.value, dragIndex, dropIndex);
230
+
231
+ updateOrder();
232
+ }
233
+
234
+ reorderGalleryRef.value.style.display = "none";
235
+ draggedElement.value.draggable = false;
236
+ draggedItem.value = null;
237
+ dropPosition.value = null;
238
+ }
239
+ }
240
+
241
+ function reorderArray(value: unknown[], from: number, to: number) {
242
+ if (value && from !== to) {
243
+ if (to >= value.length) {
244
+ to %= value.length;
245
+ from %= value.length;
246
+ }
247
+
248
+ value.splice(to, 0, value.splice(from, 1)[0]);
249
+ }
250
+ }
251
+
252
+ function findParentElement(element: HTMLElement) {
253
+ if (element.classList.contains("vc-gallery__item")) {
254
+ return element;
255
+ } else {
256
+ let parent = element.parentElement;
257
+
258
+ while (!parent.classList.contains("vc-gallery__item")) {
259
+ parent = parent.parentElement;
260
+ if (!parent) break;
261
+ }
262
+ return parent;
263
+ }
264
+ }
150
265
  </script>