@ozdao/martyrs 0.2.541 → 0.2.542
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.
- package/dist/_virtual/index.cjs +4 -4
- package/dist/_virtual/index.js +4 -4
- package/dist/_virtual/index2.cjs +3 -6
- package/dist/_virtual/index2.cjs.map +1 -1
- package/dist/_virtual/index2.js +2 -5
- package/dist/_virtual/index2.js.map +1 -1
- package/dist/{main-BpBtIUcJ.js → main-ByKkD9qa.js} +2724 -3143
- package/dist/main-Czyu-VcC.cjs +11 -0
- package/dist/martyrs/src/components/FieldTags/BlockTags.vue.cjs +30 -21
- package/dist/martyrs/src/components/FieldTags/BlockTags.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/FieldTags/BlockTags.vue.js +32 -23
- package/dist/martyrs/src/components/FieldTags/BlockTags.vue.js.map +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue2.cjs +235 -0
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue2.js +235 -0
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Marquee/Marquee.vue.cjs +17 -8
- package/dist/martyrs/src/components/Marquee/Marquee.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Marquee/Marquee.vue.js +17 -8
- package/dist/martyrs/src/components/Marquee/Marquee.vue.js.map +1 -1
- package/dist/martyrs/src/components/Spoiler/{Spoiler.vue.cjs → Spoiler.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Spoiler/Spoiler.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Spoiler/{Spoiler.vue.js → Spoiler.vue2.js} +2 -2
- package/dist/martyrs/src/components/Spoiler/{Spoiler.vue.cjs.map → Spoiler.vue2.js.map} +1 -1
- package/dist/martyrs/src/components/Tab/{Tab.vue.cjs → Tab.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Tab/Tab.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Tab/{Tab.vue.js → Tab.vue2.js} +2 -2
- package/dist/martyrs/src/components/Tab/{Tab.vue.cjs.map → Tab.vue2.js.map} +1 -1
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue.cjs +161 -42
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js +162 -43
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +4 -4
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +0 -3
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +0 -3
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js.map +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +21 -21
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.js +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.cjs +1 -1
- package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +11 -11
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +12 -12
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +16 -16
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +16 -16
- package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.cjs +1 -1
- package/dist/martyrs/src/modules/notifications/components/pages/Notifications.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +3 -4
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +3 -4
- package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +20 -20
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +3 -4
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +3 -4
- package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +4 -5
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +4 -5
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +3 -4
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +3 -4
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +7 -7
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +46 -38
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +52 -44
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +11 -11
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/node_modules/.pnpm/lodash.merge@4.6.2/node_modules/lodash.merge/index.cjs +1 -1
- package/dist/node_modules/.pnpm/lodash.merge@4.6.2/node_modules/lodash.merge/index.js +1 -1
- package/dist/style.css +129 -129
- package/dist/{web-DsdyXC8n.js → web-BklgIiYr.js} +1 -1
- package/dist/{web-C9bVm6Nw.cjs → web-CQBm7C6L.cjs} +1 -1
- package/package.json +1 -1
- package/src/components/FieldTags/BlockTags.vue +28 -16
- package/src/components/FieldTags/FieldTags.vue +327 -508
- package/src/components/Marquee/Marquee.vue +25 -14
- package/src/components/UploadImage/UploadImage.vue +192 -18
- package/src/modules/community/components/pages/CreateBlogPost.vue +0 -1
- package/src/modules/products/components/pages/CategoryEdit.vue +53 -39
- package/dist/_virtual/index3.cjs +0 -5
- package/dist/_virtual/index3.cjs.map +0 -1
- package/dist/_virtual/index3.js +0 -5
- package/dist/_virtual/index3.js.map +0 -1
- package/dist/main-7IA3UHca.cjs +0 -11
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +0 -480
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +0 -480
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js.map +0 -1
- package/dist/martyrs/src/components/FieldTags/create-tags.cjs +0 -52
- package/dist/martyrs/src/components/FieldTags/create-tags.cjs.map +0 -1
- package/dist/martyrs/src/components/FieldTags/create-tags.js +0 -52
- package/dist/martyrs/src/components/FieldTags/create-tags.js.map +0 -1
- package/dist/martyrs/src/components/FieldTags/tag-input.vue2.cjs +0 -32
- package/dist/martyrs/src/components/FieldTags/tag-input.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/FieldTags/tag-input.vue2.js +0 -32
- package/dist/martyrs/src/components/FieldTags/tag-input.vue2.js.map +0 -1
- package/dist/martyrs/src/components/FieldTags/vue-tags-input.props.cjs +0 -329
- package/dist/martyrs/src/components/FieldTags/vue-tags-input.props.cjs.map +0 -1
- package/dist/martyrs/src/components/FieldTags/vue-tags-input.props.js +0 -329
- package/dist/martyrs/src/components/FieldTags/vue-tags-input.props.js.map +0 -1
- package/dist/martyrs/src/components/Spoiler/Spoiler.vue.js.map +0 -1
- package/dist/martyrs/src/components/Tab/Tab.vue.js.map +0 -1
- package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.cjs +0 -39
- package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.cjs.map +0 -1
- package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js +0 -39
- package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js.map +0 -1
- package/src/components/FieldTags/FieldTagsNew.vue +0 -366
- package/src/components/FieldTags/README.md +0 -513
- package/src/components/FieldTags/create-tags.js +0 -97
- package/src/components/FieldTags/tag-input.vue +0 -55
- package/src/components/FieldTags/vue-tags-input.props.js +0 -342
- package/src/components/FieldTags/vue-tags-input.scss +0 -149
|
@@ -69,6 +69,7 @@ const loopInterval = ref(null)
|
|
|
69
69
|
const resizeObserver = ref(null)
|
|
70
70
|
const checkInterval = ref(null)
|
|
71
71
|
const resizeTimeout = ref(null)
|
|
72
|
+
const previousSize = ref({ width: 0, height: 0 })
|
|
72
73
|
|
|
73
74
|
const widthMin = ref('100%')
|
|
74
75
|
const widthContainer = ref(0)
|
|
@@ -152,11 +153,22 @@ const checkForClone = async () => {
|
|
|
152
153
|
resizeObserver.value.disconnect()
|
|
153
154
|
}
|
|
154
155
|
|
|
155
|
-
resizeObserver.value = new ResizeObserver(() => {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
156
|
+
resizeObserver.value = new ResizeObserver((entries) => {
|
|
157
|
+
const entry = entries[0]
|
|
158
|
+
const newWidth = entry.contentRect.width
|
|
159
|
+
const newHeight = entry.contentRect.height
|
|
160
|
+
|
|
161
|
+
// Only recalculate if size changed significantly (more than 1px)
|
|
162
|
+
const widthChanged = Math.abs(newWidth - previousSize.value.width) > 1
|
|
163
|
+
const heightChanged = Math.abs(newHeight - previousSize.value.height) > 1
|
|
164
|
+
|
|
165
|
+
if (widthChanged || heightChanged) {
|
|
166
|
+
previousSize.value = { width: newWidth, height: newHeight }
|
|
167
|
+
clearTimeout(resizeTimeout.value)
|
|
168
|
+
resizeTimeout.value = setTimeout(() => {
|
|
169
|
+
calculateClones()
|
|
170
|
+
}, 300)
|
|
171
|
+
}
|
|
160
172
|
})
|
|
161
173
|
|
|
162
174
|
resizeObserver.value.observe(marqueeOverlayContainer.value)
|
|
@@ -188,7 +200,7 @@ const getCurrentStyle = computed(() => {
|
|
|
188
200
|
'--pauseOnHover': `${props.pauseOnHover ? 'paused' : 'running'}`,
|
|
189
201
|
'--pauseOnClick': `${props.pauseOnClick ? 'paused' : 'running'}`,
|
|
190
202
|
'--pauseAnimation': `${(props.vertical && verticalAnimationPause.value) || props.pause ? 'paused' : 'running'}`,
|
|
191
|
-
'--gradient-color':
|
|
203
|
+
'--gradient-color': props.gradientColor,
|
|
192
204
|
'--gradient-length': `${gradientLength.value}`,
|
|
193
205
|
'--min-width': `${widthMin.value}`,
|
|
194
206
|
'--min-height': `${heightMin.value}`,
|
|
@@ -258,9 +270,9 @@ watch(
|
|
|
258
270
|
(newVal, oldVal) => {
|
|
259
271
|
if (newVal !== oldVal) {
|
|
260
272
|
if (newVal) {
|
|
261
|
-
emits('onResume')
|
|
262
|
-
} else {
|
|
263
273
|
emits('onPause')
|
|
274
|
+
} else {
|
|
275
|
+
emits('onResume')
|
|
264
276
|
}
|
|
265
277
|
}
|
|
266
278
|
}
|
|
@@ -271,20 +283,19 @@ watch(
|
|
|
271
283
|
.vue3-marquee {
|
|
272
284
|
display: flex !important;
|
|
273
285
|
position: relative;
|
|
286
|
+
will-change: transform;
|
|
287
|
+
transform: translateZ(0);
|
|
288
|
+
backface-visibility: hidden;
|
|
274
289
|
|
|
275
290
|
.marquee {
|
|
276
291
|
flex: 0 0 auto;
|
|
277
292
|
min-width: var(--min-width);
|
|
278
293
|
min-height: var(--min-height);
|
|
279
294
|
z-index: 1;
|
|
280
|
-
will-change: transform;
|
|
281
|
-
transform: translateZ(0);
|
|
282
|
-
backface-visibility: hidden;
|
|
283
295
|
|
|
284
296
|
animation: var(--orientation) var(--duration) linear var(--delay) var(--loops);
|
|
285
297
|
animation-play-state: var(--pauseAnimation);
|
|
286
298
|
animation-direction: var(--direction);
|
|
287
|
-
contain: layout style paint;
|
|
288
299
|
}
|
|
289
300
|
|
|
290
301
|
.overlay {
|
|
@@ -325,7 +336,7 @@ watch(
|
|
|
325
336
|
}
|
|
326
337
|
|
|
327
338
|
.overlay::before,.overlay::after {
|
|
328
|
-
background: linear-gradient(to right, var(--gradient-color));
|
|
339
|
+
background: linear-gradient(to right, var(--gradient-color), transparent);
|
|
329
340
|
height: 100%;
|
|
330
341
|
width: var(--gradient-length);
|
|
331
342
|
}
|
|
@@ -351,7 +362,7 @@ watch(
|
|
|
351
362
|
}
|
|
352
363
|
|
|
353
364
|
.overlay::before, .overlay::after {
|
|
354
|
-
background: linear-gradient(to bottom, var(--gradient-color));
|
|
365
|
+
background: linear-gradient(to bottom, var(--gradient-color), transparent);
|
|
355
366
|
height: var(--gradient-length);
|
|
356
367
|
width: 100%;
|
|
357
368
|
}
|
|
@@ -1,40 +1,116 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<div
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
<div class="upload-image-wrapper flex-v-center flex-nowrap flex gap-small" :class="{'with-text': text}">
|
|
3
|
+
<div
|
|
4
|
+
@click="onComponentClick"
|
|
5
|
+
@drop="onDrop"
|
|
6
|
+
@dragover.prevent
|
|
7
|
+
class="pos-relative bg-light radius-small br-solid br-1px br-black-transp-10 h-100 aspect-1x1 flex-v-center flex-h-center flex cursor-pointer"
|
|
8
|
+
>
|
|
7
9
|
<img loading="lazy"
|
|
8
|
-
v-if="imageUrl || photo"
|
|
9
|
-
:src="(FILE_SERVER_URL || '') + (imageUrl || photo)"
|
|
10
|
+
v-if="imageUrl || photo || previewUrl"
|
|
11
|
+
:src="previewUrl || (FILE_SERVER_URL || '') + (imageUrl || photo)"
|
|
10
12
|
alt="Uploaded image"
|
|
11
|
-
class="w-100 h-100 object-fit-cover"
|
|
12
|
-
|
|
13
|
+
class="pos-absolute z-index-1 w-100 h-100 object-fit-cover"
|
|
14
|
+
/>
|
|
13
15
|
|
|
14
|
-
<div v-else class="flex-v-center flex-h-center flex w-100 h-100 bg-second" >
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
<div v-else class="flex-v-center z-index-2 flex-h-center flex w-100 h-100 bg-second" >
|
|
17
|
+
<IconUpload class="i-medium upload-icon" fill="rgb(var(--white))" />
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<!-- Hover controls -->
|
|
21
|
+
<div class="z-index-2 hover-controls pos-absolute w-100 h-100 flex-v-center flex-h-center flex">
|
|
22
|
+
<div v-if="!imageUrl && !photo && !previewUrl" class="hover-upload-icon">
|
|
23
|
+
<IconUpload class="i-medium" fill="rgb(var(--white))" />
|
|
24
|
+
</div>
|
|
25
|
+
<div v-else class="hover-buttons flex gap-small">
|
|
26
|
+
<button @click.stop="onComponentClick" class="hover-button radius-small pd-thin bg-main t-white br-none cursor-pointer">
|
|
27
|
+
<IconUpload class="i-semi" fill="rgb(var(--white))" />
|
|
28
|
+
</button>
|
|
29
|
+
<button @click.stop="deleteImage" class="hover-button radius-small pd-thin bg-danger t-white br-none cursor-pointer">
|
|
30
|
+
<IconDelete class="i-semi" fill="rgb(var(--white))" />
|
|
31
|
+
</button>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
|
|
35
|
+
<!-- Loading overlay -->
|
|
36
|
+
<div v-if="loading" class="z-index-2 loading-overlay pos-absolute w-100 h-100 flex-v-center flex-h-center flex">
|
|
37
|
+
<Loader :centered="false" />
|
|
18
38
|
</div>
|
|
19
39
|
|
|
20
40
|
<input type="file" name="file" ref="fileInput" @change="onFileChange" style="display: none"/>
|
|
41
|
+
</div>
|
|
42
|
+
|
|
43
|
+
<!-- Text block -->
|
|
44
|
+
<div v-if="text" class="upload-text-block flex flex-column">
|
|
45
|
+
<span class="mn-b-small t-medium">{{ textConfig.title }}</span>
|
|
46
|
+
<span class="mn-b-medium t-transp">{{ textConfig.subtitle }}</span>
|
|
47
|
+
<div v-if="!imageUrl && !photo && !previewUrl">
|
|
48
|
+
<button @click="onComponentClick" class="button button-small w-max bg-main t-black cursor-pointer">
|
|
49
|
+
{{ textConfig.buttonText }}
|
|
50
|
+
</button>
|
|
51
|
+
</div>
|
|
52
|
+
<div v-else class="flex gap-thin">
|
|
53
|
+
<button @click="onComponentClick" class="button button-small w-max bg-second t-white cursor-pointer">
|
|
54
|
+
Upload
|
|
55
|
+
</button>
|
|
56
|
+
<button @click="deleteImage" class="button button-small w-max bg-red t-white cursor-pointer">
|
|
57
|
+
Delete
|
|
58
|
+
</button>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|
|
21
61
|
</div>
|
|
22
62
|
</template>
|
|
23
63
|
|
|
24
64
|
<script setup>
|
|
25
|
-
import { ref, watch } from 'vue';
|
|
65
|
+
import { ref, watch, computed } from 'vue';
|
|
26
66
|
import axios from 'axios';
|
|
67
|
+
import Loader from '@martyrs/src/components/Loader/Loader.vue';
|
|
68
|
+
import IconUpload from '@martyrs/src/modules/icons/navigation/IconUpload.vue';
|
|
69
|
+
import IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';
|
|
27
70
|
|
|
28
71
|
const imageUrl = ref(null);
|
|
29
72
|
const fileInput = ref(null);
|
|
73
|
+
const previewUrl = ref(null);
|
|
74
|
+
const loading = ref(false);
|
|
30
75
|
|
|
31
|
-
const props = defineProps(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
76
|
+
const props = defineProps({
|
|
77
|
+
uploadPath: {
|
|
78
|
+
type: String,
|
|
79
|
+
required: true
|
|
80
|
+
},
|
|
81
|
+
photo: {
|
|
82
|
+
type: String,
|
|
83
|
+
default: null
|
|
84
|
+
},
|
|
85
|
+
text: {
|
|
86
|
+
type: [Object, Boolean],
|
|
87
|
+
default: null
|
|
88
|
+
}
|
|
89
|
+
});
|
|
35
90
|
|
|
36
91
|
const emit = defineEmits(['update:photo', 'error']);
|
|
37
92
|
|
|
93
|
+
// Text configuration with defaults
|
|
94
|
+
const textConfig = computed(() => {
|
|
95
|
+
const defaults = {
|
|
96
|
+
title: 'Upload Image',
|
|
97
|
+
subtitle: 'Drag & drop your image here or click button. Supported: JPG, PNG, GIF. Max size: 2MB',
|
|
98
|
+
buttonText: 'Choose Image'
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
if (props.text === true) {
|
|
102
|
+
return defaults;
|
|
103
|
+
} else if (typeof props.text === 'object' && props.text !== null) {
|
|
104
|
+
return {
|
|
105
|
+
title: props.text.title || defaults.title,
|
|
106
|
+
subtitle: props.text.subtitle || defaults.subtitle,
|
|
107
|
+
buttonText: props.text.buttonText || defaults.buttonText
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
return defaults;
|
|
112
|
+
});
|
|
113
|
+
|
|
38
114
|
watch(props, ({photo}) => {
|
|
39
115
|
if(photo) imageUrl.value = photo;
|
|
40
116
|
});
|
|
@@ -50,10 +126,19 @@ async function onFileChange(e) {
|
|
|
50
126
|
return;
|
|
51
127
|
}
|
|
52
128
|
|
|
129
|
+
// Create preview from file
|
|
130
|
+
const reader = new FileReader();
|
|
131
|
+
reader.onload = (e) => {
|
|
132
|
+
previewUrl.value = e.target.result;
|
|
133
|
+
};
|
|
134
|
+
reader.readAsDataURL(file);
|
|
135
|
+
|
|
53
136
|
let formData = new FormData();
|
|
54
137
|
formData.append("file", file);
|
|
55
138
|
|
|
56
139
|
console.log("Sending file:", file.name); // Логируем имя файла перед отправкой
|
|
140
|
+
|
|
141
|
+
loading.value = true;
|
|
57
142
|
|
|
58
143
|
try {
|
|
59
144
|
const $axios = axios.create({ baseURL: process.env.API_URL, withCredentials: true });
|
|
@@ -61,10 +146,14 @@ async function onFileChange(e) {
|
|
|
61
146
|
let response = await $axios.post(`/api/upload/multiple?folderName=${encodeURIComponent(props.uploadPath)}`, formData);
|
|
62
147
|
console.log("Upload response:", response); // Логируем ответ сервера
|
|
63
148
|
imageUrl.value = response.data[0].filepath;
|
|
149
|
+
previewUrl.value = null; // Clear preview after successful upload
|
|
64
150
|
emit('update:photo', imageUrl.value);
|
|
65
151
|
} catch (error) {
|
|
66
152
|
emit('error', error);
|
|
67
153
|
console.error("Upload error:", error); // Логируем ошибку
|
|
154
|
+
previewUrl.value = null; // Clear preview on error
|
|
155
|
+
} finally {
|
|
156
|
+
loading.value = false;
|
|
68
157
|
}
|
|
69
158
|
}
|
|
70
159
|
|
|
@@ -77,4 +166,89 @@ function onDrop(e) {
|
|
|
77
166
|
}
|
|
78
167
|
});
|
|
79
168
|
}
|
|
169
|
+
|
|
170
|
+
function deleteImage() {
|
|
171
|
+
imageUrl.value = null;
|
|
172
|
+
previewUrl.value = null;
|
|
173
|
+
emit('update:photo', null);
|
|
174
|
+
// Reset file input
|
|
175
|
+
if (fileInput.value) {
|
|
176
|
+
fileInput.value.value = '';
|
|
177
|
+
}
|
|
178
|
+
}
|
|
80
179
|
</script>
|
|
180
|
+
|
|
181
|
+
<style scoped>
|
|
182
|
+
.image-upload-area {
|
|
183
|
+
overflow: hidden;
|
|
184
|
+
transition: all 0.3s ease;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
.image-upload-area:hover {
|
|
188
|
+
opacity: 0.95;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/* Hover controls */
|
|
192
|
+
.hover-controls {
|
|
193
|
+
top: 0;
|
|
194
|
+
left: 0;
|
|
195
|
+
background: rgba(0, 0, 0, 0.7);
|
|
196
|
+
opacity: 0;
|
|
197
|
+
transition: opacity 0.3s ease;
|
|
198
|
+
pointer-events: none;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.image-upload-area:hover .hover-controls {
|
|
202
|
+
opacity: 1;
|
|
203
|
+
pointer-events: all;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.hover-upload-icon {
|
|
207
|
+
animation: pulse 1.5s infinite;
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
.hover-button {
|
|
211
|
+
transition: transform 0.2s ease, background-color 0.2s ease;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.hover-button:hover {
|
|
215
|
+
transform: scale(1.1);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.hover-button:active {
|
|
219
|
+
transform: scale(0.95);
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
/* Loading overlay */
|
|
223
|
+
.loading-overlay {
|
|
224
|
+
top: 0;
|
|
225
|
+
left: 0;
|
|
226
|
+
background: rgba(255, 255, 255, 0.9);
|
|
227
|
+
z-index: 10;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/* Animations */
|
|
231
|
+
@keyframes pulse {
|
|
232
|
+
0% {
|
|
233
|
+
transform: scale(1);
|
|
234
|
+
opacity: 1;
|
|
235
|
+
}
|
|
236
|
+
50% {
|
|
237
|
+
transform: scale(1.05);
|
|
238
|
+
opacity: 0.8;
|
|
239
|
+
}
|
|
240
|
+
100% {
|
|
241
|
+
transform: scale(1);
|
|
242
|
+
opacity: 1;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
/* Upload icon in empty state */
|
|
247
|
+
.upload-icon {
|
|
248
|
+
transition: transform 0.3s ease;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
.image-upload-area:hover .upload-icon {
|
|
252
|
+
transform: scale(1.1);
|
|
253
|
+
}
|
|
254
|
+
</style>
|
|
@@ -130,7 +130,6 @@ import Textarea from '@martyrs/src/modules/constructor/components/elements/Texta
|
|
|
130
130
|
import Constructor from '@martyrs/src/modules/constructor/components/sections/Constructor.vue';
|
|
131
131
|
|
|
132
132
|
import Popup from '@martyrs/src/components/Popup/Popup.vue'
|
|
133
|
-
import FieldTags from '@martyrs/src/components/FieldTags/FieldTags.vue'
|
|
134
133
|
import BlockTags from '@martyrs/src/components/FieldTags/BlockTags.vue'
|
|
135
134
|
import Checkbox from '@martyrs/src/components/Checkbox/Checkbox.vue'
|
|
136
135
|
import Field from '@martyrs/src/components/Field/Field.vue'
|
|
@@ -17,36 +17,41 @@
|
|
|
17
17
|
title="Profile"
|
|
18
18
|
class="mn-b-thin"
|
|
19
19
|
>
|
|
20
|
-
|
|
20
|
+
|
|
21
|
+
<Select
|
|
22
|
+
v-model:select="categories.state.current.status"
|
|
23
|
+
label="Status"
|
|
24
|
+
:options="[
|
|
25
|
+
'draft',
|
|
26
|
+
'internal',
|
|
27
|
+
'published',
|
|
28
|
+
'removed'
|
|
29
|
+
]"
|
|
30
|
+
placeholder="Select category"
|
|
31
|
+
class="pos-relative mn-b-thin w-100 bg-white radius-small pd-medium"
|
|
32
|
+
/>
|
|
33
|
+
|
|
34
|
+
<Field
|
|
35
|
+
v-model:field="categories.state.current.name"
|
|
36
|
+
label="Name"
|
|
37
|
+
placeholder="Enter category name"
|
|
38
|
+
class="w-100 mn-b-thin bg-white radius-small pd-medium"
|
|
39
|
+
/>
|
|
40
|
+
|
|
41
|
+
<div class="w-100 mn-b-thin bg-white radius-small pd-medium cols-1">
|
|
21
42
|
<UploadImage
|
|
22
|
-
|
|
43
|
+
v-model:photo="categories.state.current.photo"
|
|
23
44
|
:uploadPath="'categories'"
|
|
24
|
-
|
|
45
|
+
:text="{
|
|
46
|
+
title: 'Upload category image',
|
|
47
|
+
subtitle: 'Supported: JPG, PNG, GIF. Max size: 5MB',
|
|
48
|
+
buttonText: 'Select Image'
|
|
49
|
+
}"
|
|
50
|
+
class="pos-relative"
|
|
25
51
|
/>
|
|
26
|
-
<Field
|
|
27
|
-
v-model:field="categories.state.current.name"
|
|
28
|
-
label="Name"
|
|
29
|
-
placeholder="Enter category name"
|
|
30
|
-
class="w-100 bg-white radius-small pd-medium"
|
|
31
|
-
/>
|
|
32
52
|
</div>
|
|
33
53
|
|
|
34
|
-
|
|
35
|
-
<Field
|
|
36
|
-
v-model:field="categories.state.current.order"
|
|
37
|
-
label="Order"
|
|
38
|
-
:disabled="true"
|
|
39
|
-
class="w-40 bg-white radius-small pd-medium"
|
|
40
|
-
/>
|
|
41
|
-
<Field
|
|
42
|
-
v-model:field="categories.state.current.slug"
|
|
43
|
-
label="Slug"
|
|
44
|
-
placeholder="Enter category slug"
|
|
45
|
-
:disabled="route.params.category ? true : false"
|
|
46
|
-
class="w-100 bg-white radius-small pd-medium"
|
|
47
|
-
/>
|
|
48
|
-
</div>
|
|
49
|
-
|
|
54
|
+
|
|
50
55
|
<Field
|
|
51
56
|
v-if="route.params.category"
|
|
52
57
|
v-model:field="categories.state.current.url"
|
|
@@ -54,19 +59,25 @@
|
|
|
54
59
|
:disabled="true"
|
|
55
60
|
class="w-100 bg-white radius-small pd-medium mn-b-thin"
|
|
56
61
|
/>
|
|
62
|
+
|
|
57
63
|
|
|
58
|
-
<
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
64
|
+
<div class="mn-b-thin w-100 flex-nowrap gap-thin flex">
|
|
65
|
+
<Field
|
|
66
|
+
v-model:field="categories.state.current.order"
|
|
67
|
+
label="Order"
|
|
68
|
+
:disabled="true"
|
|
69
|
+
class="w-40 bg-white radius-small pd-medium"
|
|
70
|
+
/>
|
|
71
|
+
<Field
|
|
72
|
+
v-model:field="categories.state.current.slug"
|
|
73
|
+
label="Slug"
|
|
74
|
+
placeholder="Enter category slug"
|
|
75
|
+
:disabled="route.params.category ? true : false"
|
|
76
|
+
class="w-100 bg-white radius-small pd-medium"
|
|
77
|
+
/>
|
|
78
|
+
</div>
|
|
79
|
+
|
|
80
|
+
|
|
70
81
|
|
|
71
82
|
<!-- <div class="flex-v-center flex-nowrap flex">
|
|
72
83
|
<h4 class="mn-r-thin t-medium">Localization</h4>
|
|
@@ -125,8 +136,11 @@
|
|
|
125
136
|
class="w-100 bg-white radius-small pd-medium"
|
|
126
137
|
/>
|
|
127
138
|
<FieldTags
|
|
128
|
-
v-model
|
|
129
|
-
placeholder="Add filter options"
|
|
139
|
+
v-model="item.options"
|
|
140
|
+
:placeholder="'Add filter options'"
|
|
141
|
+
:separators="[',', ';']"
|
|
142
|
+
:add-on-key="[13, ',', ';']"
|
|
143
|
+
:max-tags="20"
|
|
130
144
|
class="w-100 bg-white radius-small pd-medium"
|
|
131
145
|
/>
|
|
132
146
|
<div
|
package/dist/_virtual/index3.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index3.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
package/dist/_virtual/index3.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index3.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|