@ozdao/martyrs 0.2.548 → 0.2.549

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 (51) hide show
  1. package/dist/martyrs/src/components/UploadImage/{UploadImage.vue2.cjs → UploadImage.vue.cjs} +2 -2
  2. package/dist/martyrs/src/components/UploadImage/{UploadImage.vue2.js.map → UploadImage.vue.cjs.map} +1 -1
  3. package/dist/martyrs/src/components/UploadImage/{UploadImage.vue2.js → UploadImage.vue.js} +2 -2
  4. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js.map +1 -0
  5. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +1 -1
  6. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +1 -1
  7. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.cjs +1 -1
  8. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +1 -1
  9. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
  10. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
  11. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +1 -1
  12. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
  13. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +1 -1
  14. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
  15. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +1 -1
  16. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +1 -1
  17. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +1 -1
  18. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +1 -1
  19. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +2 -2
  20. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +2 -2
  21. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs +1 -1
  22. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +1 -1
  23. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +2 -2
  24. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +2 -2
  25. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +2 -2
  26. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +2 -2
  27. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +1 -1
  28. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +1 -1
  29. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
  30. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +1 -1
  31. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.cjs +1 -1
  32. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js +1 -1
  33. package/dist/martyrs/src/modules/products/components/elements/{THC.vue2.cjs → THC.vue.cjs} +2 -2
  34. package/dist/martyrs/src/modules/products/components/elements/THC.vue.cjs.map +1 -0
  35. package/dist/martyrs/src/modules/products/components/elements/{THC.vue2.js → THC.vue.js} +2 -2
  36. package/dist/martyrs/src/modules/products/components/elements/THC.vue.js.map +1 -0
  37. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +1 -1
  38. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +1 -1
  39. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +1 -1
  40. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +1 -1
  41. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +1 -1
  42. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +1 -1
  43. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +24 -2
  44. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs.map +1 -1
  45. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +2 -2
  46. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js.map +1 -1
  47. package/package.json +1 -1
  48. package/src/modules/wallet/views/components/pages/Wallet.vue +6 -6
  49. package/dist/martyrs/src/components/UploadImage/UploadImage.vue2.cjs.map +0 -1
  50. package/dist/martyrs/src/modules/products/components/elements/THC.vue2.cjs.map +0 -1
  51. package/dist/martyrs/src/modules/products/components/elements/THC.vue2.js.map +0 -1
@@ -5,7 +5,7 @@ const axios = require("axios");
5
5
  const Loader = require("../Loader/Loader.vue2.cjs");
6
6
  const IconUpload = ;/* empty css */
7
7
  const IconDelete = require("../../modules/icons/navigation/IconDelete.vue.cjs");
8
- ;/* empty css */
8
+ ;/* empty css */
9
9
  const _pluginVue_exportHelper = require("../../../../_virtual/_plugin-vue_export-helper.cjs");
10
10
  const _hoisted_1 = ["src"];
11
11
  const _hoisted_2 = {
@@ -216,4 +216,4 @@ const _sfc_main = {
216
216
  };
217
217
  const UploadImage = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-65075013"]]);
218
218
  exports.default = UploadImage;
219
- //# sourceMappingURL=UploadImage.vue2.cjs.map
219
+ //# sourceMappingURL=UploadImage.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"UploadImage.vue2.js","sources":["../../../../../src/components/UploadImage/UploadImage.vue"],"sourcesContent":["<template>\n <div class=\"upload-image-wrapper flex-v-center flex-nowrap flex gap-small\" :class=\"{'with-text': text}\">\n <div \n @click=\"onComponentClick\"\n @drop=\"onDrop\"\n @dragover.prevent\n class=\"pos-relative radius-small br-solid br-1px br-black-transp-10 h-100 aspect-1x1 flex-v-center flex-h-center flex cursor-pointer\"\n >\n <img loading=\"lazy\" \n v-if=\"imageUrl || photo || previewUrl\" \n :src=\"previewUrl || (FILE_SERVER_URL || '') + (imageUrl || photo)\"\n alt=\"Uploaded image\" \n class=\"pos-absolute radius-small o-hidden z-index-1 w-100 h-100 object-fit-cover\"\n />\n \n <div v-else class=\"flex-v-center pos-relative z-index-2 flex-h-center flex w-100 h-100 radius-small bg-second\" >\n <IconUpload class=\"i-medium upload-icon\" fill=\"rgb(var(--white))\" />\n </div>\n \n <!-- Hover controls -->\n <div class=\"z-index-2 pos-relative hover-controls pos-absolute w-100 h-100 flex-v-center flex-h-center flex\">\n <div v-if=\"!imageUrl && !photo && !previewUrl\" class=\"hover-upload-icon\">\n <IconUpload class=\"i-medium\" fill=\"rgb(var(--white))\" />\n </div>\n <div v-else class=\"hover-buttons flex gap-small\">\n <button @click.stop=\"onComponentClick\" class=\"hover-button radius-small pd-thin bg-main t-white br-none cursor-pointer\">\n <IconUpload class=\"i-medium\" fill=\"rgb(var(--white))\" />\n </button>\n <button @click.stop=\"deleteImage\" class=\"hover-button radius-small pd-thin bg-danger t-white br-none cursor-pointer\">\n <IconDelete class=\"i-medium\" fill=\"rgb(var(--white))\" />\n </button>\n </div>\n </div>\n \n <!-- Loading overlay -->\n <div v-if=\"loading\" class=\"z-index-2 loading-overlay pos-absolute w-100 h-100 flex-v-center flex-h-center flex\">\n <Loader :centered=\"false\" />\n </div>\n \n <input type=\"file\" name=\"file\" ref=\"fileInput\" @change=\"onFileChange\" style=\"display: none\"/>\n </div>\n \n <!-- Text block -->\n <div v-if=\"text\" class=\"upload-text-block flex flex-column\">\n <span class=\"mn-b-small t-medium\">{{ textConfig.title }}</span>\n <span class=\"mn-b-medium t-transp\">{{ textConfig.subtitle }}</span>\n <div v-if=\"!imageUrl && !photo && !previewUrl\">\n <button @click=\"onComponentClick\" class=\"button button-small w-max bg-main t-black cursor-pointer\">\n {{ textConfig.buttonText }}\n </button>\n </div>\n <div v-else class=\"flex gap-thin\">\n <button @click=\"onComponentClick\" class=\"button button-small w-max bg-second t-white cursor-pointer\">\n Upload \n </button>\n <button @click=\"deleteImage\" class=\"button button-small w-max bg-red t-white cursor-pointer\">\n Delete\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, watch, computed } from 'vue';\nimport axios from 'axios';\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\nimport IconUpload from '@martyrs/src/modules/icons/navigation/IconUpload.vue';\nimport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\nconst imageUrl = ref(null);\nconst fileInput = ref(null);\nconst previewUrl = ref(null);\nconst loading = ref(false);\n\nconst props = defineProps({\n uploadPath: {\n type: String,\n required: true\n },\n photo: {\n type: String,\n default: null\n },\n text: {\n type: [Object, Boolean],\n default: null\n }\n});\n\nconst emit = defineEmits(['update:photo', 'error']);\n\n// Text configuration with defaults\nconst textConfig = computed(() => {\n const defaults = {\n title: 'Upload Image',\n subtitle: 'Drag & drop your image here or click button. Supported: JPG, PNG, GIF. Max size: 2MB',\n buttonText: 'Choose Image'\n };\n \n if (props.text === true) {\n return defaults;\n } else if (typeof props.text === 'object' && props.text !== null) {\n return {\n title: props.text.title || defaults.title,\n subtitle: props.text.subtitle || defaults.subtitle,\n buttonText: props.text.buttonText || defaults.buttonText\n };\n }\n \n return defaults;\n});\n\nwatch(props, ({photo}) => {\n if(photo) imageUrl.value = photo;\n});\n\nfunction onComponentClick() {\n fileInput.value.click();\n}\n\nasync function onFileChange(e) {\n let file = e.target.files[0];\n if (!file) {\n console.error(\"No file selected\");\n return;\n }\n \n // Create preview from file\n const reader = new FileReader();\n reader.onload = (e) => {\n previewUrl.value = e.target.result;\n };\n reader.readAsDataURL(file);\n \n let formData = new FormData();\n formData.append(\"file\", file);\n\n console.log(\"Sending file:\", file.name); // Логируем имя файла перед отправкой\n \n loading.value = true;\n\n try {\n const $axios = axios.create({ baseURL: process.env.API_URL, withCredentials: true }); \n\n let response = await $axios.post(`/api/upload/multiple?folderName=${encodeURIComponent(props.uploadPath)}`, formData);\n console.log(\"Upload response:\", response); // Логируем ответ сервера\n imageUrl.value = response.data[0].filepath;\n previewUrl.value = null; // Clear preview after successful upload\n emit('update:photo', imageUrl.value);\n } catch (error) {\n emit('error', error);\n console.error(\"Upload error:\", error); // Логируем ошибку\n previewUrl.value = null; // Clear preview on error\n } finally {\n loading.value = false;\n }\n}\n\n\nfunction onDrop(e) {\n e.preventDefault();\n onFileChange({\n target: {\n files: e.dataTransfer.files\n }\n });\n}\n\nfunction deleteImage() {\n imageUrl.value = null;\n previewUrl.value = null;\n emit('update:photo', null);\n // Reset file input\n if (fileInput.value) {\n fileInput.value.value = '';\n }\n}\n</script>\n\n<style scoped>\n.image-upload-area {\n overflow: hidden;\n transition: all 0.3s ease;\n}\n\n.image-upload-area:hover {\n opacity: 0.95;\n}\n\n/* Hover controls */\n.hover-controls {\n top: 0;\n left: 0;\n background: rgba(0, 0, 0, 0.7);\n opacity: 0;\n transition: opacity 0.3s ease;\n pointer-events: none;\n}\n\n.image-upload-area:hover .hover-controls {\n opacity: 1;\n pointer-events: all;\n}\n\n.hover-upload-icon {\n animation: pulse 1.5s infinite;\n}\n\n.hover-button {\n transition: transform 0.2s ease, background-color 0.2s ease;\n}\n\n.hover-button:hover {\n transform: scale(1.1);\n}\n\n.hover-button:active {\n transform: scale(0.95);\n}\n\n/* Loading overlay */\n.loading-overlay {\n top: 0;\n left: 0;\n background: rgba(255, 255, 255, 0.9);\n z-index: 10;\n}\n\n/* Animations */\n@keyframes pulse {\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(1.05);\n opacity: 0.8;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n/* Upload icon in empty state */\n.upload-icon {\n transition: transform 0.3s ease;\n}\n\n.image-upload-area:hover .upload-icon {\n transform: scale(1.1);\n}\n</style>\n"],"names":["e"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEA,UAAM,WAAW,IAAI,IAAI;AACzB,UAAM,YAAY,IAAI,IAAI;AAC1B,UAAM,aAAa,IAAI,IAAI;AAC3B,UAAM,UAAU,IAAI,KAAK;AAEzB,UAAM,QAAQ;AAed,UAAM,OAAO;AAGb,UAAM,aAAa,SAAS,MAAM;AAChC,YAAM,WAAW;AAAA,QACf,OAAO;AAAA,QACP,UAAU;AAAA,QACV,YAAY;AAAA,MAChB;AAEE,UAAI,MAAM,SAAS,MAAM;AACvB,eAAO;AAAA,MACT,WAAW,OAAO,MAAM,SAAS,YAAY,MAAM,SAAS,MAAM;AAChE,eAAO;AAAA,UACL,OAAO,MAAM,KAAK,SAAS,SAAS;AAAA,UACpC,UAAU,MAAM,KAAK,YAAY,SAAS;AAAA,UAC1C,YAAY,MAAM,KAAK,cAAc,SAAS;AAAA,QACpD;AAAA,MACE;AAEA,aAAO;AAAA,IACT,CAAC;AAED,UAAM,OAAO,CAAC,EAAC,MAAK,MAAM;AACxB,UAAG,MAAO,UAAS,QAAQ;AAAA,IAC7B,CAAC;AAED,aAAS,mBAAmB;AAC1B,gBAAU,MAAM,MAAK;AAAA,IACvB;AAEA,mBAAe,aAAa,GAAG;AAC7B,UAAI,OAAO,EAAE,OAAO,MAAM,CAAC;AAC3B,UAAI,CAAC,MAAM;AACT,gBAAQ,MAAM,kBAAkB;AAChC;AAAA,MACF;AAGA,YAAM,SAAS,IAAI,WAAU;AAC7B,aAAO,SAAS,CAACA,OAAM;AACrB,mBAAW,QAAQA,GAAE,OAAO;AAAA,MAC9B;AACA,aAAO,cAAc,IAAI;AAEzB,UAAI,WAAW,IAAI,SAAQ;AAC3B,eAAS,OAAO,QAAQ,IAAI;AAE5B,cAAQ,IAAI,iBAAiB,KAAK,IAAI;AAEtC,cAAQ,QAAQ;AAEhB,UAAI;AACF,cAAM,SAAS,MAAM,OAAO,EAAE,SAAS,QAAQ,IAAI,SAAS,iBAAiB,KAAI,CAAE;AAEnF,YAAI,WAAW,MAAM,OAAO,KAAK,mCAAmC,mBAAmB,MAAM,UAAU,CAAC,IAAI,QAAQ;AACpH,gBAAQ,IAAI,oBAAoB,QAAQ;AACxC,iBAAS,QAAQ,SAAS,KAAK,CAAC,EAAE;AAClC,mBAAW,QAAQ;AACnB,aAAK,gBAAgB,SAAS,KAAK;AAAA,MACrC,SAAS,OAAO;AACd,aAAK,SAAS,KAAK;AACnB,gBAAQ,MAAM,iBAAiB,KAAK;AACpC,mBAAW,QAAQ;AAAA,MACrB,UAAC;AACC,gBAAQ,QAAQ;AAAA,MAClB;AAAA,IACF;AAGA,aAAS,OAAO,GAAG;AACjB,QAAE,eAAc;AAChB,mBAAa;AAAA,QACX,QAAQ;AAAA,UACN,OAAO,EAAE,aAAa;AAAA,QAC5B;AAAA,MACA,CAAG;AAAA,IACH;AAEA,aAAS,cAAc;AACrB,eAAS,QAAQ;AACjB,iBAAW,QAAQ;AACnB,WAAK,gBAAgB,IAAI;AAEzB,UAAI,UAAU,OAAO;AACnB,kBAAU,MAAM,QAAQ;AAAA,MAC1B;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"UploadImage.vue.cjs","sources":["../../../../../src/components/UploadImage/UploadImage.vue"],"sourcesContent":["<template>\n <div class=\"upload-image-wrapper flex-v-center flex-nowrap flex gap-small\" :class=\"{'with-text': text}\">\n <div \n @click=\"onComponentClick\"\n @drop=\"onDrop\"\n @dragover.prevent\n class=\"pos-relative radius-small br-solid br-1px br-black-transp-10 h-100 aspect-1x1 flex-v-center flex-h-center flex cursor-pointer\"\n >\n <img loading=\"lazy\" \n v-if=\"imageUrl || photo || previewUrl\" \n :src=\"previewUrl || (FILE_SERVER_URL || '') + (imageUrl || photo)\"\n alt=\"Uploaded image\" \n class=\"pos-absolute radius-small o-hidden z-index-1 w-100 h-100 object-fit-cover\"\n />\n \n <div v-else class=\"flex-v-center pos-relative z-index-2 flex-h-center flex w-100 h-100 radius-small bg-second\" >\n <IconUpload class=\"i-medium upload-icon\" fill=\"rgb(var(--white))\" />\n </div>\n \n <!-- Hover controls -->\n <div class=\"z-index-2 pos-relative hover-controls pos-absolute w-100 h-100 flex-v-center flex-h-center flex\">\n <div v-if=\"!imageUrl && !photo && !previewUrl\" class=\"hover-upload-icon\">\n <IconUpload class=\"i-medium\" fill=\"rgb(var(--white))\" />\n </div>\n <div v-else class=\"hover-buttons flex gap-small\">\n <button @click.stop=\"onComponentClick\" class=\"hover-button radius-small pd-thin bg-main t-white br-none cursor-pointer\">\n <IconUpload class=\"i-medium\" fill=\"rgb(var(--white))\" />\n </button>\n <button @click.stop=\"deleteImage\" class=\"hover-button radius-small pd-thin bg-danger t-white br-none cursor-pointer\">\n <IconDelete class=\"i-medium\" fill=\"rgb(var(--white))\" />\n </button>\n </div>\n </div>\n \n <!-- Loading overlay -->\n <div v-if=\"loading\" class=\"z-index-2 loading-overlay pos-absolute w-100 h-100 flex-v-center flex-h-center flex\">\n <Loader :centered=\"false\" />\n </div>\n \n <input type=\"file\" name=\"file\" ref=\"fileInput\" @change=\"onFileChange\" style=\"display: none\"/>\n </div>\n \n <!-- Text block -->\n <div v-if=\"text\" class=\"upload-text-block flex flex-column\">\n <span class=\"mn-b-small t-medium\">{{ textConfig.title }}</span>\n <span class=\"mn-b-medium t-transp\">{{ textConfig.subtitle }}</span>\n <div v-if=\"!imageUrl && !photo && !previewUrl\">\n <button @click=\"onComponentClick\" class=\"button button-small w-max bg-main t-black cursor-pointer\">\n {{ textConfig.buttonText }}\n </button>\n </div>\n <div v-else class=\"flex gap-thin\">\n <button @click=\"onComponentClick\" class=\"button button-small w-max bg-second t-white cursor-pointer\">\n Upload \n </button>\n <button @click=\"deleteImage\" class=\"button button-small w-max bg-red t-white cursor-pointer\">\n Delete\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, watch, computed } from 'vue';\nimport axios from 'axios';\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\nimport IconUpload from '@martyrs/src/modules/icons/navigation/IconUpload.vue';\nimport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\nconst imageUrl = ref(null);\nconst fileInput = ref(null);\nconst previewUrl = ref(null);\nconst loading = ref(false);\n\nconst props = defineProps({\n uploadPath: {\n type: String,\n required: true\n },\n photo: {\n type: String,\n default: null\n },\n text: {\n type: [Object, Boolean],\n default: null\n }\n});\n\nconst emit = defineEmits(['update:photo', 'error']);\n\n// Text configuration with defaults\nconst textConfig = computed(() => {\n const defaults = {\n title: 'Upload Image',\n subtitle: 'Drag & drop your image here or click button. Supported: JPG, PNG, GIF. Max size: 2MB',\n buttonText: 'Choose Image'\n };\n \n if (props.text === true) {\n return defaults;\n } else if (typeof props.text === 'object' && props.text !== null) {\n return {\n title: props.text.title || defaults.title,\n subtitle: props.text.subtitle || defaults.subtitle,\n buttonText: props.text.buttonText || defaults.buttonText\n };\n }\n \n return defaults;\n});\n\nwatch(props, ({photo}) => {\n if(photo) imageUrl.value = photo;\n});\n\nfunction onComponentClick() {\n fileInput.value.click();\n}\n\nasync function onFileChange(e) {\n let file = e.target.files[0];\n if (!file) {\n console.error(\"No file selected\");\n return;\n }\n \n // Create preview from file\n const reader = new FileReader();\n reader.onload = (e) => {\n previewUrl.value = e.target.result;\n };\n reader.readAsDataURL(file);\n \n let formData = new FormData();\n formData.append(\"file\", file);\n\n console.log(\"Sending file:\", file.name); // Логируем имя файла перед отправкой\n \n loading.value = true;\n\n try {\n const $axios = axios.create({ baseURL: process.env.API_URL, withCredentials: true }); \n\n let response = await $axios.post(`/api/upload/multiple?folderName=${encodeURIComponent(props.uploadPath)}`, formData);\n console.log(\"Upload response:\", response); // Логируем ответ сервера\n imageUrl.value = response.data[0].filepath;\n previewUrl.value = null; // Clear preview after successful upload\n emit('update:photo', imageUrl.value);\n } catch (error) {\n emit('error', error);\n console.error(\"Upload error:\", error); // Логируем ошибку\n previewUrl.value = null; // Clear preview on error\n } finally {\n loading.value = false;\n }\n}\n\n\nfunction onDrop(e) {\n e.preventDefault();\n onFileChange({\n target: {\n files: e.dataTransfer.files\n }\n });\n}\n\nfunction deleteImage() {\n imageUrl.value = null;\n previewUrl.value = null;\n emit('update:photo', null);\n // Reset file input\n if (fileInput.value) {\n fileInput.value.value = '';\n }\n}\n</script>\n\n<style scoped>\n.image-upload-area {\n overflow: hidden;\n transition: all 0.3s ease;\n}\n\n.image-upload-area:hover {\n opacity: 0.95;\n}\n\n/* Hover controls */\n.hover-controls {\n top: 0;\n left: 0;\n background: rgba(0, 0, 0, 0.7);\n opacity: 0;\n transition: opacity 0.3s ease;\n pointer-events: none;\n}\n\n.image-upload-area:hover .hover-controls {\n opacity: 1;\n pointer-events: all;\n}\n\n.hover-upload-icon {\n animation: pulse 1.5s infinite;\n}\n\n.hover-button {\n transition: transform 0.2s ease, background-color 0.2s ease;\n}\n\n.hover-button:hover {\n transform: scale(1.1);\n}\n\n.hover-button:active {\n transform: scale(0.95);\n}\n\n/* Loading overlay */\n.loading-overlay {\n top: 0;\n left: 0;\n background: rgba(255, 255, 255, 0.9);\n z-index: 10;\n}\n\n/* Animations */\n@keyframes pulse {\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(1.05);\n opacity: 0.8;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n/* Upload icon in empty state */\n.upload-icon {\n transition: transform 0.3s ease;\n}\n\n.image-upload-area:hover .upload-icon {\n transform: scale(1.1);\n}\n</style>\n"],"names":["ref","computed","watch","e"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEA,UAAM,WAAWA,IAAAA,IAAI,IAAI;AACzB,UAAM,YAAYA,IAAAA,IAAI,IAAI;AAC1B,UAAM,aAAaA,IAAAA,IAAI,IAAI;AAC3B,UAAM,UAAUA,IAAAA,IAAI,KAAK;AAEzB,UAAM,QAAQ;AAed,UAAM,OAAO;AAGb,UAAM,aAAaC,IAAAA,SAAS,MAAM;AAChC,YAAM,WAAW;AAAA,QACf,OAAO;AAAA,QACP,UAAU;AAAA,QACV,YAAY;AAAA,MAChB;AAEE,UAAI,MAAM,SAAS,MAAM;AACvB,eAAO;AAAA,MACT,WAAW,OAAO,MAAM,SAAS,YAAY,MAAM,SAAS,MAAM;AAChE,eAAO;AAAA,UACL,OAAO,MAAM,KAAK,SAAS,SAAS;AAAA,UACpC,UAAU,MAAM,KAAK,YAAY,SAAS;AAAA,UAC1C,YAAY,MAAM,KAAK,cAAc,SAAS;AAAA,QACpD;AAAA,MACE;AAEA,aAAO;AAAA,IACT,CAAC;AAEDC,QAAAA,MAAM,OAAO,CAAC,EAAC,MAAK,MAAM;AACxB,UAAG,MAAO,UAAS,QAAQ;AAAA,IAC7B,CAAC;AAED,aAAS,mBAAmB;AAC1B,gBAAU,MAAM,MAAK;AAAA,IACvB;AAEA,mBAAe,aAAa,GAAG;AAC7B,UAAI,OAAO,EAAE,OAAO,MAAM,CAAC;AAC3B,UAAI,CAAC,MAAM;AACT,gBAAQ,MAAM,kBAAkB;AAChC;AAAA,MACF;AAGA,YAAM,SAAS,IAAI,WAAU;AAC7B,aAAO,SAAS,CAACC,OAAM;AACrB,mBAAW,QAAQA,GAAE,OAAO;AAAA,MAC9B;AACA,aAAO,cAAc,IAAI;AAEzB,UAAI,WAAW,IAAI,SAAQ;AAC3B,eAAS,OAAO,QAAQ,IAAI;AAE5B,cAAQ,IAAI,iBAAiB,KAAK,IAAI;AAEtC,cAAQ,QAAQ;AAEhB,UAAI;AACF,cAAM,SAAS,MAAM,OAAO,EAAE,SAAS,QAAQ,IAAI,SAAS,iBAAiB,KAAI,CAAE;AAEnF,YAAI,WAAW,MAAM,OAAO,KAAK,mCAAmC,mBAAmB,MAAM,UAAU,CAAC,IAAI,QAAQ;AACpH,gBAAQ,IAAI,oBAAoB,QAAQ;AACxC,iBAAS,QAAQ,SAAS,KAAK,CAAC,EAAE;AAClC,mBAAW,QAAQ;AACnB,aAAK,gBAAgB,SAAS,KAAK;AAAA,MACrC,SAAS,OAAO;AACd,aAAK,SAAS,KAAK;AACnB,gBAAQ,MAAM,iBAAiB,KAAK;AACpC,mBAAW,QAAQ;AAAA,MACrB,UAAC;AACC,gBAAQ,QAAQ;AAAA,MAClB;AAAA,IACF;AAGA,aAAS,OAAO,GAAG;AACjB,QAAE,eAAc;AAChB,mBAAa;AAAA,QACX,QAAQ;AAAA,UACN,OAAO,EAAE,aAAa;AAAA,QAC5B;AAAA,MACA,CAAG;AAAA,IACH;AAEA,aAAS,cAAc;AACrB,eAAS,QAAQ;AACjB,iBAAW,QAAQ;AACnB,WAAK,gBAAgB,IAAI;AAEzB,UAAI,UAAU,OAAO;AACnB,kBAAU,MAAM,QAAQ;AAAA,MAC1B;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -3,7 +3,7 @@ import axios from "axios";
3
3
  import Loader from "../Loader/Loader.vue2.js";
4
4
  import _sfc_main$1 from "../../modules/icons/navigation/IconUpload.vue.js";
5
5
  import _sfc_main$2 from "../../modules/icons/navigation/IconDelete.vue.js";
6
- /* empty css */
6
+ /* empty css */
7
7
  import _export_sfc from "../../../../_virtual/_plugin-vue_export-helper.js";
8
8
  const _hoisted_1 = ["src"];
9
9
  const _hoisted_2 = {
@@ -216,4 +216,4 @@ const UploadImage = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-
216
216
  export {
217
217
  UploadImage as default
218
218
  };
219
- //# sourceMappingURL=UploadImage.vue2.js.map
219
+ //# sourceMappingURL=UploadImage.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UploadImage.vue.js","sources":["../../../../../src/components/UploadImage/UploadImage.vue"],"sourcesContent":["<template>\n <div class=\"upload-image-wrapper flex-v-center flex-nowrap flex gap-small\" :class=\"{'with-text': text}\">\n <div \n @click=\"onComponentClick\"\n @drop=\"onDrop\"\n @dragover.prevent\n class=\"pos-relative radius-small br-solid br-1px br-black-transp-10 h-100 aspect-1x1 flex-v-center flex-h-center flex cursor-pointer\"\n >\n <img loading=\"lazy\" \n v-if=\"imageUrl || photo || previewUrl\" \n :src=\"previewUrl || (FILE_SERVER_URL || '') + (imageUrl || photo)\"\n alt=\"Uploaded image\" \n class=\"pos-absolute radius-small o-hidden z-index-1 w-100 h-100 object-fit-cover\"\n />\n \n <div v-else class=\"flex-v-center pos-relative z-index-2 flex-h-center flex w-100 h-100 radius-small bg-second\" >\n <IconUpload class=\"i-medium upload-icon\" fill=\"rgb(var(--white))\" />\n </div>\n \n <!-- Hover controls -->\n <div class=\"z-index-2 pos-relative hover-controls pos-absolute w-100 h-100 flex-v-center flex-h-center flex\">\n <div v-if=\"!imageUrl && !photo && !previewUrl\" class=\"hover-upload-icon\">\n <IconUpload class=\"i-medium\" fill=\"rgb(var(--white))\" />\n </div>\n <div v-else class=\"hover-buttons flex gap-small\">\n <button @click.stop=\"onComponentClick\" class=\"hover-button radius-small pd-thin bg-main t-white br-none cursor-pointer\">\n <IconUpload class=\"i-medium\" fill=\"rgb(var(--white))\" />\n </button>\n <button @click.stop=\"deleteImage\" class=\"hover-button radius-small pd-thin bg-danger t-white br-none cursor-pointer\">\n <IconDelete class=\"i-medium\" fill=\"rgb(var(--white))\" />\n </button>\n </div>\n </div>\n \n <!-- Loading overlay -->\n <div v-if=\"loading\" class=\"z-index-2 loading-overlay pos-absolute w-100 h-100 flex-v-center flex-h-center flex\">\n <Loader :centered=\"false\" />\n </div>\n \n <input type=\"file\" name=\"file\" ref=\"fileInput\" @change=\"onFileChange\" style=\"display: none\"/>\n </div>\n \n <!-- Text block -->\n <div v-if=\"text\" class=\"upload-text-block flex flex-column\">\n <span class=\"mn-b-small t-medium\">{{ textConfig.title }}</span>\n <span class=\"mn-b-medium t-transp\">{{ textConfig.subtitle }}</span>\n <div v-if=\"!imageUrl && !photo && !previewUrl\">\n <button @click=\"onComponentClick\" class=\"button button-small w-max bg-main t-black cursor-pointer\">\n {{ textConfig.buttonText }}\n </button>\n </div>\n <div v-else class=\"flex gap-thin\">\n <button @click=\"onComponentClick\" class=\"button button-small w-max bg-second t-white cursor-pointer\">\n Upload \n </button>\n <button @click=\"deleteImage\" class=\"button button-small w-max bg-red t-white cursor-pointer\">\n Delete\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, watch, computed } from 'vue';\nimport axios from 'axios';\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\nimport IconUpload from '@martyrs/src/modules/icons/navigation/IconUpload.vue';\nimport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\nconst imageUrl = ref(null);\nconst fileInput = ref(null);\nconst previewUrl = ref(null);\nconst loading = ref(false);\n\nconst props = defineProps({\n uploadPath: {\n type: String,\n required: true\n },\n photo: {\n type: String,\n default: null\n },\n text: {\n type: [Object, Boolean],\n default: null\n }\n});\n\nconst emit = defineEmits(['update:photo', 'error']);\n\n// Text configuration with defaults\nconst textConfig = computed(() => {\n const defaults = {\n title: 'Upload Image',\n subtitle: 'Drag & drop your image here or click button. Supported: JPG, PNG, GIF. Max size: 2MB',\n buttonText: 'Choose Image'\n };\n \n if (props.text === true) {\n return defaults;\n } else if (typeof props.text === 'object' && props.text !== null) {\n return {\n title: props.text.title || defaults.title,\n subtitle: props.text.subtitle || defaults.subtitle,\n buttonText: props.text.buttonText || defaults.buttonText\n };\n }\n \n return defaults;\n});\n\nwatch(props, ({photo}) => {\n if(photo) imageUrl.value = photo;\n});\n\nfunction onComponentClick() {\n fileInput.value.click();\n}\n\nasync function onFileChange(e) {\n let file = e.target.files[0];\n if (!file) {\n console.error(\"No file selected\");\n return;\n }\n \n // Create preview from file\n const reader = new FileReader();\n reader.onload = (e) => {\n previewUrl.value = e.target.result;\n };\n reader.readAsDataURL(file);\n \n let formData = new FormData();\n formData.append(\"file\", file);\n\n console.log(\"Sending file:\", file.name); // Логируем имя файла перед отправкой\n \n loading.value = true;\n\n try {\n const $axios = axios.create({ baseURL: process.env.API_URL, withCredentials: true }); \n\n let response = await $axios.post(`/api/upload/multiple?folderName=${encodeURIComponent(props.uploadPath)}`, formData);\n console.log(\"Upload response:\", response); // Логируем ответ сервера\n imageUrl.value = response.data[0].filepath;\n previewUrl.value = null; // Clear preview after successful upload\n emit('update:photo', imageUrl.value);\n } catch (error) {\n emit('error', error);\n console.error(\"Upload error:\", error); // Логируем ошибку\n previewUrl.value = null; // Clear preview on error\n } finally {\n loading.value = false;\n }\n}\n\n\nfunction onDrop(e) {\n e.preventDefault();\n onFileChange({\n target: {\n files: e.dataTransfer.files\n }\n });\n}\n\nfunction deleteImage() {\n imageUrl.value = null;\n previewUrl.value = null;\n emit('update:photo', null);\n // Reset file input\n if (fileInput.value) {\n fileInput.value.value = '';\n }\n}\n</script>\n\n<style scoped>\n.image-upload-area {\n overflow: hidden;\n transition: all 0.3s ease;\n}\n\n.image-upload-area:hover {\n opacity: 0.95;\n}\n\n/* Hover controls */\n.hover-controls {\n top: 0;\n left: 0;\n background: rgba(0, 0, 0, 0.7);\n opacity: 0;\n transition: opacity 0.3s ease;\n pointer-events: none;\n}\n\n.image-upload-area:hover .hover-controls {\n opacity: 1;\n pointer-events: all;\n}\n\n.hover-upload-icon {\n animation: pulse 1.5s infinite;\n}\n\n.hover-button {\n transition: transform 0.2s ease, background-color 0.2s ease;\n}\n\n.hover-button:hover {\n transform: scale(1.1);\n}\n\n.hover-button:active {\n transform: scale(0.95);\n}\n\n/* Loading overlay */\n.loading-overlay {\n top: 0;\n left: 0;\n background: rgba(255, 255, 255, 0.9);\n z-index: 10;\n}\n\n/* Animations */\n@keyframes pulse {\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(1.05);\n opacity: 0.8;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n/* Upload icon in empty state */\n.upload-icon {\n transition: transform 0.3s ease;\n}\n\n.image-upload-area:hover .upload-icon {\n transform: scale(1.1);\n}\n</style>\n"],"names":["e"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEA,UAAM,WAAW,IAAI,IAAI;AACzB,UAAM,YAAY,IAAI,IAAI;AAC1B,UAAM,aAAa,IAAI,IAAI;AAC3B,UAAM,UAAU,IAAI,KAAK;AAEzB,UAAM,QAAQ;AAed,UAAM,OAAO;AAGb,UAAM,aAAa,SAAS,MAAM;AAChC,YAAM,WAAW;AAAA,QACf,OAAO;AAAA,QACP,UAAU;AAAA,QACV,YAAY;AAAA,MAChB;AAEE,UAAI,MAAM,SAAS,MAAM;AACvB,eAAO;AAAA,MACT,WAAW,OAAO,MAAM,SAAS,YAAY,MAAM,SAAS,MAAM;AAChE,eAAO;AAAA,UACL,OAAO,MAAM,KAAK,SAAS,SAAS;AAAA,UACpC,UAAU,MAAM,KAAK,YAAY,SAAS;AAAA,UAC1C,YAAY,MAAM,KAAK,cAAc,SAAS;AAAA,QACpD;AAAA,MACE;AAEA,aAAO;AAAA,IACT,CAAC;AAED,UAAM,OAAO,CAAC,EAAC,MAAK,MAAM;AACxB,UAAG,MAAO,UAAS,QAAQ;AAAA,IAC7B,CAAC;AAED,aAAS,mBAAmB;AAC1B,gBAAU,MAAM,MAAK;AAAA,IACvB;AAEA,mBAAe,aAAa,GAAG;AAC7B,UAAI,OAAO,EAAE,OAAO,MAAM,CAAC;AAC3B,UAAI,CAAC,MAAM;AACT,gBAAQ,MAAM,kBAAkB;AAChC;AAAA,MACF;AAGA,YAAM,SAAS,IAAI,WAAU;AAC7B,aAAO,SAAS,CAACA,OAAM;AACrB,mBAAW,QAAQA,GAAE,OAAO;AAAA,MAC9B;AACA,aAAO,cAAc,IAAI;AAEzB,UAAI,WAAW,IAAI,SAAQ;AAC3B,eAAS,OAAO,QAAQ,IAAI;AAE5B,cAAQ,IAAI,iBAAiB,KAAK,IAAI;AAEtC,cAAQ,QAAQ;AAEhB,UAAI;AACF,cAAM,SAAS,MAAM,OAAO,EAAE,SAAS,QAAQ,IAAI,SAAS,iBAAiB,KAAI,CAAE;AAEnF,YAAI,WAAW,MAAM,OAAO,KAAK,mCAAmC,mBAAmB,MAAM,UAAU,CAAC,IAAI,QAAQ;AACpH,gBAAQ,IAAI,oBAAoB,QAAQ;AACxC,iBAAS,QAAQ,SAAS,KAAK,CAAC,EAAE;AAClC,mBAAW,QAAQ;AACnB,aAAK,gBAAgB,SAAS,KAAK;AAAA,MACrC,SAAS,OAAO;AACd,aAAK,SAAS,KAAK;AACnB,gBAAQ,MAAM,iBAAiB,KAAK;AACpC,mBAAW,QAAQ;AAAA,MACrB,UAAC;AACC,gBAAQ,QAAQ;AAAA,MAClB;AAAA,IACF;AAGA,aAAS,OAAO,GAAG;AACjB,QAAE,eAAc;AAChB,mBAAa;AAAA,QACX,QAAQ;AAAA,UACN,OAAO,EAAE,aAAa;AAAA,QAC5B;AAAA,MACA,CAAG;AAAA,IACH;AAEA,aAAS,cAAc;AACrB,eAAS,QAAQ;AACjB,iBAAW,QAAQ;AACnB,WAAK,gBAAgB,IAAI;AAEzB,UAAI,UAAU,OAAO;AACnB,kBAAU,MAAM,QAAQ;AAAA,MAC1B;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const vue = require("vue");
4
4
  const Field = require("../../../../../components/Field/Field.vue2.cjs");
5
5
  const Button = require("../../../../../components/Button/Button.vue.cjs");
6
- const UploadImage = require("../../../../../components/UploadImage/UploadImage.vue2.cjs");
6
+ const UploadImage = require("../../../../../components/UploadImage/UploadImage.vue.cjs");
7
7
  const vueRouter = require("vue-router");
8
8
  const users = require("../../store/users.cjs");
9
9
  const _hoisted_1 = { class: "for-transition w-100" };
@@ -1,7 +1,7 @@
1
1
  import { createElementBlock, openBlock, createElementVNode, createVNode, toDisplayString, withCtx, createTextVNode } from "vue";
2
2
  import Field from "../../../../../components/Field/Field.vue2.js";
3
3
  import _sfc_main$1 from "../../../../../components/Button/Button.vue.js";
4
- import UploadImage from "../../../../../components/UploadImage/UploadImage.vue2.js";
4
+ import UploadImage from "../../../../../components/UploadImage/UploadImage.vue.js";
5
5
  import { useRouter } from "vue-router";
6
6
  import { state, actions } from "../../store/users.js";
7
7
  const _hoisted_1 = { class: "for-transition w-100" };
@@ -2,7 +2,7 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
4
  const Field = require("../../../../components/Field/Field.vue2.cjs");
5
- const UploadImage = require("../../../../components/UploadImage/UploadImage.vue2.cjs");
5
+ const UploadImage = require("../../../../components/UploadImage/UploadImage.vue.cjs");
6
6
  const _hoisted_1 = { class: "w-100 pd-medium bg-white radius-medium pos-relative" };
7
7
  const _hoisted_2 = { class: "flex flex-v-center gap-thin" };
8
8
  const _hoisted_3 = {
@@ -1,6 +1,6 @@
1
1
  import { ref, createElementBlock, openBlock, createElementVNode, createCommentVNode, createBlock, Fragment, createVNode, toDisplayString } from "vue";
2
2
  import Field from "../../../../components/Field/Field.vue2.js";
3
- import UploadImage from "../../../../components/UploadImage/UploadImage.vue2.js";
3
+ import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
4
4
  const _hoisted_1 = { class: "w-100 pd-medium bg-white radius-medium pos-relative" };
5
5
  const _hoisted_2 = { class: "flex flex-v-center gap-thin" };
6
6
  const _hoisted_3 = {
@@ -15,7 +15,7 @@ const Checkbox = require("../../../../components/Checkbox/Checkbox.vue.cjs");
15
15
  ;/* empty css */
16
16
  require("axios");
17
17
  ;/* empty css */
18
- const UploadImage = require("../../../../components/UploadImage/UploadImage.vue2.cjs");
18
+ const UploadImage = require("../../../../components/UploadImage/UploadImage.vue.cjs");
19
19
  ;/* empty css */
20
20
  ;/* empty css */
21
21
  const Feed = require("../../../../components/Feed/Feed.vue.cjs");
@@ -13,7 +13,7 @@ import _sfc_main$8 from "../../../../components/Checkbox/Checkbox.vue.js";
13
13
  /* empty css */
14
14
  import "axios";
15
15
  /* empty css */
16
- import UploadImage from "../../../../components/UploadImage/UploadImage.vue2.js";
16
+ import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
17
17
  /* empty css */
18
18
  /* empty css */
19
19
  import _sfc_main$7 from "../../../../components/Feed/Feed.vue.js";
@@ -6,7 +6,7 @@ const Field = require("../../../../components/Field/Field.vue2.cjs");
6
6
  const Block = require("../../../../components/Block/Block.vue.cjs");
7
7
  const Button = require("../../../../components/Button/Button.vue.cjs");
8
8
  const Select = require("../../../../components/Select/Select.vue.cjs");
9
- const UploadImage = require("../../../../components/UploadImage/UploadImage.vue2.cjs");
9
+ const UploadImage = require("../../../../components/UploadImage/UploadImage.vue.cjs");
10
10
  const IconCross = require("../../../icons/navigation/IconCross.vue.cjs");
11
11
  const BlockMultiselect = require("../../../globals/views/components/blocks/BlockMultiselect.vue.cjs");
12
12
  const albums = require("../../store/albums.cjs");
@@ -4,7 +4,7 @@ import Field from "../../../../components/Field/Field.vue2.js";
4
4
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
5
5
  import _sfc_main$3 from "../../../../components/Button/Button.vue.js";
6
6
  import Select from "../../../../components/Select/Select.vue.js";
7
- import UploadImage from "../../../../components/UploadImage/UploadImage.vue2.js";
7
+ import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
8
8
  import _sfc_main$2 from "../../../icons/navigation/IconCross.vue.js";
9
9
  import BlockMultiselect from "../../../globals/views/components/blocks/BlockMultiselect.vue.js";
10
10
  import { actions as actions$2 } from "../../store/albums.js";
@@ -7,7 +7,7 @@ const Block = require("../../../../components/Block/Block.vue.cjs");
7
7
  const Button = require("../../../../components/Button/Button.vue.cjs");
8
8
  const Checkbox = require("../../../../components/Checkbox/Checkbox.vue.cjs");
9
9
  const Select = require("../../../../components/Select/Select.vue.cjs");
10
- const UploadImage = require("../../../../components/UploadImage/UploadImage.vue2.cjs");
10
+ const UploadImage = require("../../../../components/UploadImage/UploadImage.vue.cjs");
11
11
  ;/* empty css */
12
12
  const BlockMultiselect = require("../../../globals/views/components/blocks/BlockMultiselect.vue.cjs");
13
13
  const IconCross = require("../../../icons/navigation/IconCross.vue.cjs");
@@ -5,7 +5,7 @@ import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
5
5
  import _sfc_main$4 from "../../../../components/Button/Button.vue.js";
6
6
  import _sfc_main$3 from "../../../../components/Checkbox/Checkbox.vue.js";
7
7
  import Select from "../../../../components/Select/Select.vue.js";
8
- import UploadImage from "../../../../components/UploadImage/UploadImage.vue2.js";
8
+ import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
9
9
  /* empty css */
10
10
  import BlockMultiselect from "../../../globals/views/components/blocks/BlockMultiselect.vue.js";
11
11
  import _sfc_main$2 from "../../../icons/navigation/IconCross.vue.js";
@@ -6,7 +6,7 @@ const Field = require("../../../../components/Field/Field.vue2.cjs");
6
6
  const Block = require("../../../../components/Block/Block.vue.cjs");
7
7
  const Button = require("../../../../components/Button/Button.vue.cjs");
8
8
  const Radio = require("../../../../components/Radio/Radio.vue.cjs");
9
- const UploadImage = require("../../../../components/UploadImage/UploadImage.vue2.cjs");
9
+ const UploadImage = require("../../../../components/UploadImage/UploadImage.vue.cjs");
10
10
  const IconCross = require("../../../icons/navigation/IconCross.vue.cjs");
11
11
  const BlockMultiselect = require("../../../globals/views/components/blocks/BlockMultiselect.vue.cjs");
12
12
  const playlists = require("../../store/playlists.cjs");
@@ -4,7 +4,7 @@ import Field from "../../../../components/Field/Field.vue2.js";
4
4
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
5
5
  import _sfc_main$4 from "../../../../components/Button/Button.vue.js";
6
6
  import _sfc_main$3 from "../../../../components/Radio/Radio.vue.js";
7
- import UploadImage from "../../../../components/UploadImage/UploadImage.vue2.js";
7
+ import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
8
8
  import _sfc_main$2 from "../../../icons/navigation/IconCross.vue.js";
9
9
  import BlockMultiselect from "../../../globals/views/components/blocks/BlockMultiselect.vue.js";
10
10
  import { actions as actions$1 } from "../../store/playlists.js";
@@ -7,7 +7,7 @@ const Block = require("../../../../components/Block/Block.vue.cjs");
7
7
  const Button = require("../../../../components/Button/Button.vue.cjs");
8
8
  const Checkbox = require("../../../../components/Checkbox/Checkbox.vue.cjs");
9
9
  const Select = require("../../../../components/Select/Select.vue.cjs");
10
- const UploadImage = require("../../../../components/UploadImage/UploadImage.vue2.cjs");
10
+ const UploadImage = require("../../../../components/UploadImage/UploadImage.vue.cjs");
11
11
  const Upload = require("../../../../components/Upload/Upload.vue2.cjs");
12
12
  const IconCross = require("../../../icons/navigation/IconCross.vue.cjs");
13
13
  const BlockMultiselect = require("../../../globals/views/components/blocks/BlockMultiselect.vue.cjs");
@@ -5,7 +5,7 @@ import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
5
5
  import _sfc_main$4 from "../../../../components/Button/Button.vue.js";
6
6
  import _sfc_main$3 from "../../../../components/Checkbox/Checkbox.vue.js";
7
7
  import Select from "../../../../components/Select/Select.vue.js";
8
- import UploadImage from "../../../../components/UploadImage/UploadImage.vue2.js";
8
+ import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
9
9
  import Upload from "../../../../components/Upload/Upload.vue2.js";
10
10
  import _sfc_main$2 from "../../../icons/navigation/IconCross.vue.js";
11
11
  import BlockMultiselect from "../../../globals/views/components/blocks/BlockMultiselect.vue.js";
@@ -24,13 +24,13 @@ require("../../../../components/Menu/MenuItem.vue.cjs");
24
24
  ;/* empty css */
25
25
  ;/* empty css */
26
26
  ;/* empty css */
27
- ;/* empty css */
27
+ ;/* empty css */
28
28
  ;/* empty css */
29
29
  ;/* empty css */
30
30
  ;/* empty css */
31
31
  ;/* empty css */
32
32
  require("axios");
33
- ;/* empty css */
33
+ ;/* empty css */
34
34
  ;/* empty css */
35
35
  ;/* empty css */
36
36
  ;/* empty css */
@@ -22,13 +22,13 @@ import "../../../../components/Menu/MenuItem.vue.js";
22
22
  /* empty css */
23
23
  /* empty css */
24
24
  /* empty css */
25
- /* empty css */
25
+ /* empty css */
26
26
  /* empty css */
27
27
  /* empty css */
28
28
  /* empty css */
29
29
  /* empty css */
30
30
  import "axios";
31
- /* empty css */
31
+ /* empty css */
32
32
  /* empty css */
33
33
  /* empty css */
34
34
  /* empty css */
@@ -2,7 +2,7 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
4
  const vueRouter = require("vue-router");
5
- const UploadImage = require("../../../../components/UploadImage/UploadImage.vue2.cjs");
5
+ const UploadImage = require("../../../../components/UploadImage/UploadImage.vue.cjs");
6
6
  const Field = require("../../../../components/Field/Field.vue2.cjs");
7
7
  const Checkbox = require("../../../../components/Checkbox/Checkbox.vue.cjs");
8
8
  const Button = require("../../../../components/Button/Button.vue.cjs");
@@ -1,6 +1,6 @@
1
1
  import { computed, ref, reactive, createElementBlock, openBlock, createVNode, createElementVNode, withCtx, Fragment, renderList, createBlock, createTextVNode, toDisplayString, createCommentVNode, unref, normalizeClass } from "vue";
2
2
  import { useRoute } from "vue-router";
3
- import UploadImage from "../../../../components/UploadImage/UploadImage.vue2.js";
3
+ import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
4
4
  import Field from "../../../../components/Field/Field.vue2.js";
5
5
  import _sfc_main$4 from "../../../../components/Checkbox/Checkbox.vue.js";
6
6
  import _sfc_main$6 from "../../../../components/Button/Button.vue.js";
@@ -25,13 +25,13 @@ const IconEdit = require("../../../icons/navigation/IconEdit.vue.cjs");
25
25
  ;/* empty css */
26
26
  ;/* empty css */
27
27
  ;/* empty css */
28
- ;/* empty css */
28
+ ;/* empty css */
29
29
  ;/* empty css */
30
30
  ;/* empty css */
31
31
  ;/* empty css */
32
32
  ;/* empty css */
33
33
  require("axios");
34
- ;/* empty css */
34
+ ;/* empty css */
35
35
  ;/* empty css */
36
36
  const DepartmentSub = require("../blocks/DepartmentSub.vue.cjs");
37
37
  ;/* empty css */
@@ -23,13 +23,13 @@ import _sfc_main$1 from "../../../icons/navigation/IconEdit.vue.js";
23
23
  /* empty css */
24
24
  /* empty css */
25
25
  /* empty css */
26
- /* empty css */
26
+ /* empty css */
27
27
  /* empty css */
28
28
  /* empty css */
29
29
  /* empty css */
30
30
  /* empty css */
31
31
  import "axios";
32
- /* empty css */
32
+ /* empty css */
33
33
  /* empty css */
34
34
  import DepartmentSub from "../blocks/DepartmentSub.vue.js";
35
35
  /* empty css */
@@ -27,7 +27,7 @@ require("../../../../components/Menu/MenuItem.vue.cjs");
27
27
  ;/* empty css */
28
28
  ;/* empty css */
29
29
  ;/* empty css */
30
- ;/* empty css */
30
+ ;/* empty css */
31
31
  ;/* empty css */
32
32
  const auth = require("../../../auth/views/store/auth.cjs");
33
33
  ;/* empty css */
@@ -35,7 +35,7 @@ const auth = require("../../../auth/views/store/auth.cjs");
35
35
  ;/* empty css */
36
36
  require("axios");
37
37
  const IconDelete = require("../../../icons/navigation/IconDelete.vue.cjs");
38
- ;/* empty css */
38
+ ;/* empty css */
39
39
  ;/* empty css */
40
40
  const DepartmentForm = require("../forms/DepartmentForm.vue.cjs");
41
41
  const InviteForm = require("../forms/InviteForm.vue.cjs");
@@ -25,7 +25,7 @@ import "../../../../components/Menu/MenuItem.vue.js";
25
25
  /* empty css */
26
26
  /* empty css */
27
27
  /* empty css */
28
- /* empty css */
28
+ /* empty css */
29
29
  /* empty css */
30
30
  import { state } from "../../../auth/views/store/auth.js";
31
31
  /* empty css */
@@ -33,7 +33,7 @@ import { state } from "../../../auth/views/store/auth.js";
33
33
  /* empty css */
34
34
  import "axios";
35
35
  import _sfc_main$4 from "../../../icons/navigation/IconDelete.vue.js";
36
- /* empty css */
36
+ /* empty css */
37
37
  /* empty css */
38
38
  import _sfc_main$8 from "../forms/DepartmentForm.vue.js";
39
39
  import _sfc_main$6 from "../forms/InviteForm.vue.js";
@@ -32,7 +32,7 @@ const globals = require("../../../globals/views/store/globals.cjs");
32
32
  ;/* empty css */
33
33
  ;/* empty css */
34
34
  require("axios");
35
- ;/* empty css */
35
+ ;/* empty css */
36
36
  ;/* empty css */
37
37
  const ButtonToggleMembership = require("../elements/ButtonToggleMembership.vue.cjs");
38
38
  ;/* empty css */
@@ -30,7 +30,7 @@ import { state as state$2 } from "../../../globals/views/store/globals.js";
30
30
  /* empty css */
31
31
  /* empty css */
32
32
  import "axios";
33
- /* empty css */
33
+ /* empty css */
34
34
  /* empty css */
35
35
  import _sfc_main$4 from "../elements/ButtonToggleMembership.vue.js";
36
36
  /* empty css */
@@ -9,7 +9,7 @@ const BlockTags = require("../../../../components/FieldTags/BlockTags.vue.cjs");
9
9
  const Field = require("../../../../components/Field/Field.vue2.cjs");
10
10
  ;/* empty css */
11
11
  const SelectMulti = require("../../../../components/SelectMulti/SelectMulti.vue2.cjs");
12
- const UploadImage = require("../../../../components/UploadImage/UploadImage.vue2.cjs");
12
+ const UploadImage = require("../../../../components/UploadImage/UploadImage.vue.cjs");
13
13
  const Button = require("../../../../components/Button/Button.vue.cjs");
14
14
  ;/* empty css */
15
15
  const auth = require("../../../auth/views/store/auth.cjs");
@@ -7,7 +7,7 @@ import _sfc_main$2 from "../../../../components/FieldTags/BlockTags.vue.js";
7
7
  import Field from "../../../../components/Field/Field.vue2.js";
8
8
  /* empty css */
9
9
  import _sfc_main$1 from "../../../../components/SelectMulti/SelectMulti.vue2.js";
10
- import UploadImage from "../../../../components/UploadImage/UploadImage.vue2.js";
10
+ import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
11
11
  import _sfc_main$3 from "../../../../components/Button/Button.vue.js";
12
12
  /* empty css */
13
13
  import { state as state$1 } from "../../../auth/views/store/auth.js";
@@ -4,7 +4,7 @@ const vue = require("vue");
4
4
  const vueI18n = require("vue-i18n");
5
5
  const IconEdit = require("../../../icons/navigation/IconEdit.vue.cjs");
6
6
  const IconShopcartAdd = require("../../../icons/actions/IconShopcartAdd.vue.cjs");
7
- const THC = require("../elements/THC.vue2.cjs");
7
+ const THC = require("../elements/THC.vue.cjs");
8
8
  const Price = require("../elements/Price.vue.cjs");
9
9
  const PlaceholderImage = require("../../../icons/placeholders/PlaceholderImage.vue.cjs");
10
10
  ;/* empty css */
@@ -2,7 +2,7 @@ import { resolveComponent, createElementBlock, openBlock, createBlock, createCom
2
2
  import { useI18n } from "vue-i18n";
3
3
  import _sfc_main$1 from "../../../icons/navigation/IconEdit.vue.js";
4
4
  import _sfc_main$4 from "../../../icons/actions/IconShopcartAdd.vue.js";
5
- import _sfc_main$2 from "../elements/THC.vue2.js";
5
+ import _sfc_main$2 from "../elements/THC.vue.js";
6
6
  import _sfc_main$3 from "../elements/Price.vue.js";
7
7
  import PlaceholderImage from "../../../icons/placeholders/PlaceholderImage.vue.js";
8
8
  /* empty css */
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
- ;/* empty css */
4
+ ;/* empty css */
5
5
  const _hoisted_1 = {
6
6
  key: 0,
7
7
  class: "thc"
@@ -86,4 +86,4 @@ const _sfc_main = {
86
86
  }
87
87
  };
88
88
  exports.default = _sfc_main;
89
- //# sourceMappingURL=THC.vue2.cjs.map
89
+ //# sourceMappingURL=THC.vue.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"THC.vue.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { createElementBlock, createCommentVNode, openBlock, createElementVNode, toDisplayString } from "vue";
2
- /* empty css */
2
+ /* empty css */
3
3
  const _hoisted_1 = {
4
4
  key: 0,
5
5
  class: "thc"
@@ -86,4 +86,4 @@ const _sfc_main = {
86
86
  export {
87
87
  _sfc_main as default
88
88
  };
89
- //# sourceMappingURL=THC.vue2.js.map
89
+ //# sourceMappingURL=THC.vue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"THC.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -5,7 +5,7 @@ const vueRouter = require("vue-router");
5
5
  const IconDelete = require("../../../icons/navigation/IconDelete.vue.cjs");
6
6
  const Button = require("../../../../components/Button/Button.vue.cjs");
7
7
  const Select = require("../../../../components/Select/Select.vue.cjs");
8
- const UploadImage = require("../../../../components/UploadImage/UploadImage.vue2.cjs");
8
+ const UploadImage = require("../../../../components/UploadImage/UploadImage.vue.cjs");
9
9
  const Field = require("../../../../components/Field/Field.vue2.cjs");
10
10
  const FieldTags = require("../../../../components/FieldTags/FieldTags.vue2.cjs");
11
11
  ;/* empty css */
@@ -3,7 +3,7 @@ import { useRoute, useRouter } from "vue-router";
3
3
  import _sfc_main$4 from "../../../icons/navigation/IconDelete.vue.js";
4
4
  import _sfc_main$3 from "../../../../components/Button/Button.vue.js";
5
5
  import Select from "../../../../components/Select/Select.vue.js";
6
- import UploadImage from "../../../../components/UploadImage/UploadImage.vue2.js";
6
+ import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
7
7
  import Field from "../../../../components/Field/Field.vue2.js";
8
8
  import FieldTags from "../../../../components/FieldTags/FieldTags.vue2.js";
9
9
  /* empty css */
@@ -7,7 +7,7 @@ const IconEdit = require("../../../icons/navigation/IconEdit.vue.cjs");
7
7
  const PlaceholderImage = require("../../../icons/placeholders/PlaceholderImage.vue.cjs");
8
8
  const Image360 = require("../elements/Image360.vue.cjs");
9
9
  const ProductImages = require("../blocks/ProductImages.vue.cjs");
10
- ;/* empty css */
10
+ ;/* empty css */
11
11
  const Price = require("../elements/Price.vue.cjs");
12
12
  const vueRouter = require("vue-router");
13
13
  const vueI18n = require("vue-i18n");
@@ -5,7 +5,7 @@ import _sfc_main$1 from "../../../icons/navigation/IconEdit.vue.js";
5
5
  import PlaceholderImage from "../../../icons/placeholders/PlaceholderImage.vue.js";
6
6
  import Image360 from "../elements/Image360.vue.js";
7
7
  import ProductImages from "../blocks/ProductImages.vue.js";
8
- /* empty css */
8
+ /* empty css */
9
9
  import _sfc_main$2 from "../elements/Price.vue.js";
10
10
  import { useRoute, useRouter } from "vue-router";
11
11
  import { useI18n } from "vue-i18n";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const vue = require("vue");
4
4
  const vueRouter = require("vue-router");
5
5
  const Block = require("../../../../components/Block/Block.vue.cjs");
6
- const UploadImage = require("../../../../components/UploadImage/UploadImage.vue2.cjs");
6
+ const UploadImage = require("../../../../components/UploadImage/UploadImage.vue.cjs");
7
7
  ;/* empty css */
8
8
  const Field = require("../../../../components/Field/Field.vue2.cjs");
9
9
  const Select = require("../../../../components/Select/Select.vue.cjs");
@@ -1,7 +1,7 @@
1
1
  import { ref, onMounted, createElementBlock, openBlock, createVNode, createElementVNode, withCtx, toDisplayString, unref, createTextVNode, Fragment, renderList } from "vue";
2
2
  import { useRouter, useRoute } from "vue-router";
3
3
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
4
- import UploadImage from "../../../../components/UploadImage/UploadImage.vue2.js";
4
+ import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
5
5
  /* empty css */
6
6
  import Field from "../../../../components/Field/Field.vue2.js";
7
7
  import Select from "../../../../components/Select/Select.vue.js";
@@ -1,8 +1,29 @@
1
1
  "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
2
24
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
25
  const vue = require("vue");
4
26
  const vueI18n = require("vue-i18n");
5
- const Web3 = require("web3");
6
27
  const wallet_store = require("../../store/wallet.store.cjs");
7
28
  const wallet = require("../../localization/wallet.json.cjs");
8
29
  const Popup = require("../../../../../components/Popup/Popup.vue.cjs");
@@ -76,12 +97,13 @@ const _sfc_main = {
76
97
  useScope: "global",
77
98
  ...wallet.default
78
99
  });
79
- vue.onMounted(() => {
100
+ vue.onMounted(async () => {
80
101
  window.ethereum.on("accountsChanged", (accounts) => {
81
102
  if (accounts.length < 1) {
82
103
  wallet_store.state.account = null;
83
104
  }
84
105
  });
106
+ const { default: Web3 } = await import("web3");
85
107
  wallet_store.state.web3 = new Web3(window.ethereum || "http://localhost:8080");
86
108
  wallet_store.actions.listRewards();
87
109
  wallet_store.actions.tryReconnectWallet();
@@ -1 +1 @@
1
- {"version":3,"file":"Wallet.vue.cjs","sources":["../../../../../../../../src/modules/wallet/views/components/pages/Wallet.vue"],"sourcesContent":["<template>\n <div class=\"pd-thin\">\n <section class=\"bg-black t-white mn-b-thin radius-big pd-big\">\n <h1 class=\"mn-b-medium\">{{ t('wallet.title') }}</h1>\n\n <p class=\"mn-b-semi t-transp p-medium\">\n {{ t('wallet.subtitle') }}\n </p>\n\n <div \n v-if=\"state.account\"\n class=\"gap-thin mn-b-thin flex-nowrap bg-black radius-extra t-white br-solid br-white-transp-10 br-1px flex-v-center flex pd-medium\"\n >\n <div class=\"flex-v-center flex-nowrap flex mn-r-auto\">\n <!-- <img loading=\"lazy\" src=\"/logo/wdt.svg\" class=\"mn-r-thin i-big\"> -->\n <h2>{{state.tokenBalance}} {{ t('wallet.token') }}</h2>\n </div>\n\n <button @click=\"openGetMorePopup\" class=\"t-nowrap w-max bg-main t-medium button\">Get More</button>\n\n\n <Button \n :submit=\"actions.collectRewards\" \n class=\"w-max bg-white t-black t-medium button\"\n >\n Withdraw\n </Button>\n </div>\n\n <ConnectMetamask class=\"mn-b-thin radius-extra br-solid br-white-transp-10 br-1px w-100\" />\n\n <div\n v-if=\"state.account\"\n class=\"w-100 mn-b-semi flex-column flex pd-big radius-big bg-main t-black\"\n >\n <p class=\"t-transp t-medium mn-b-thin\">You own:</p>\n <p class=\"h1 mn-b-small\">{{state.share}}%</p>\n <p class=\"t-white p-medium t-medium mn-b-semi\">of all shares</p>\n\n <div\n class=\"flex-v-center mn-b-small flex-nowrap flex pd-small bg-black-transp-5 radius-extra\"\n >\n <!-- <img loading=\"lazy\" src=\"@/assets/icons/metamask.svg\" class=\"mn-r-small i-big\" > -->\n \n <p v-if=\"state.account\" class=\"t-transp t-medium \">\n <span class=\"uppercase p-small t-medium t-transp\">Connected Metamask</span><br>\n <span>{{state.account}}</span>\n </p>\n\n <button\n v-if=\"state.account\"\n @click=\"actions.disconnectWallet\"\n class=\"mn-l-auto bg-red button\"\n >\n Disconnect Wallet\n </button>\n </div>\n </div>\n\n </section>\n\n <div v-if=\"!state.account\" class=\"mn-b-semi cols-2 gap-thin\">\n <div\n class=\"w-100 pd-medium radius-medium t-center bg-light\"\n >\n <h3 class=\"mn-b-small\">Make first order and start earning Weeder Token</h3>\n <button class=\"mn-l-auto mn-r-auto bg-main button\">Explore marketplace</button>\n </div>\n\n <div\n class=\"w-100 pd-medium flex-center flex flex-column radius-medium t-center bg-light\"\n >\n <h3 \n v-if=\"!state.account\"\n class=\"mn-b-small\"\n >\n Connect Metamask to withdrawal your earnings.\n </h3>\n\n <button\n v-if=\"!state.account\"\n @click=\"actions.connectWallet\"\n class=\"br-solid br-2px br-black-transp-10 t-black button\"\n >\n Connect Wallet\n </button>\n </div>\n </div>\n\n <h2 class=\"mn-b-small\" v-if=\"state.rewards.length > 0\">Latest Rewards </h2>\n\n <section class=\"cols-3 mobile:cols-1 gap-thin\">\n <div \n class=\"radius-medium bg-light\"\n v-for=\"income in state.rewards\"\n > \n <div class=\"flex-nowrap br-b br-black-transp-10 br-solid flex pd-medium\">\n <!-- <img loading=\"lazy\" src=\"/logo/wdt-plus.svg\" class=\"mn-r-thin i-medium\"> -->\n <p class=\"t-semi mn-r-auto\">{{income.amount}} WDT</p>\n \n <span class=\"pd-t-nano pd-b-nano pd-l-thin pd-r-thin bg-main flex flex-center radius-extra t-semi p-small\">{{income.type === 'blogpost' ? 'Community Reward' : income.type}}</span>\n </div>\n\n <div class=\"pd-medium\">\n <h4 class=\"t-regular mn-b-thin\">{{income.name}}</h4>\n <!-- <p class=\"p-small\">{{income.content[0].content}}</p> -->\n </div>\n\n </div>\n\n\n </section>\n\n <h2 class=\"mn-b-small\" v-if=\"state.rewards.length > 0\">Activity</h2>\n\n <section class=\"cols-3 mobile:cols-1 gap-thin\">\n <div \n class=\"radius-medium bg-grey\"\n v-for=\"income in state.rewards\"\n > \n <div class=\"flex-nowrap br-b br-black-transp-10 br-solid flex pd-medium\">\n <!-- <img loading=\"lazy\" src=\"/logo/wdt-plus.svg\" class=\"mn-r-thin i-medium\"> -->\n <p class=\"t-semi mn-r-auto\">{{income.amount}} WDT</p>\n \n <span class=\"pd-t-nano pd-b-nano pd-l-thin pd-r-thin bg-main flex flex-center radius-extra t-semi p-small\">{{income.type === 'blogpost' ? 'Community Reward' : income.type}}</span>\n </div>\n\n <div class=\"pd-medium\">\n <h4 class=\"t-regular mn-b-thin\">{{income.name}}</h4>\n <!-- <p class=\"p-small\">{{income.content[0].content}}</p> -->\n </div>\n </div>\n </section>\n\n <Popup \n @close-popup=\"closeGetMorePopup\" \n :isPopupOpen=\"isGetMorePopup\"\n class=\"w-m-50r t-left pd-big bg-white radius-big\"\n >\n <div\n v-if=\"currentMenuPopup === 0\"\n >\n <h2 class=\"mn-b-small t-center t-bold\">Choose the way of deposit</h2>\n\n <button\n class=\"w-100 bg-white t-black pd-thin radius-medium h3 t-center br-solid br-2px br-black-transp-10 mn-t-small\"\n @click=\"switchGetMoreMenu(1)\"\n >\n CASH\n </button>\n\n <button\n class=\"w-100 bg-white t-black pd-thin radius-medium h3 t-center br-solid br-2px br-black-transp-10 mn-t-small\"\n @click=\"switchGetMoreMenu(2)\"\n >\n CARD\n </button>\n\n <button\n class=\"w-100 bg-white t-black pd-thin radius-medium h3 t-center br-solid br-2px br-black-transp-10 mn-t-small\"\n @click=\"switchGetMoreMenu(4)\"\n >\n CRYPTO\n </button>\n </div>\n\n <CashDepositMenu\n v-if=\"currentMenuPopup === 1\"\n @back-selection=\"switchGetMoreMenu(0)\"\n />\n\n <CardDepositMenu\n v-if=\"currentMenuPopup === 2\"\n @back-selection=\"switchGetMoreMenu(0)\"\n @switch-menu=\"switchGetMoreMenu\"\n />\n\n <CardBalanceReplenished\n v-if=\"currentMenuPopup === 3\"\n @close=\"closeGetMorePopup\"\n />\n\n <CryptoDepositMenu\n v-if=\"currentMenuPopup === 4\"\n @back-selection=\"switchGetMoreMenu(0)\"\n @switch-menu=\"switchGetMoreMenu\"\n />\n\n <CryptoDepositProcessing\n v-if=\"currentMenuPopup === 5\"\n @back-selection=\"switchGetMoreMenu(0)\"\n @switch-menu=\"switchGetMoreMenu\"\n />\n </Popup>\n </div>\n</template>\n\n<script setup>\n import { onMounted, ref } from 'vue';\n import { useI18n } from 'vue-i18n'\n import Web3 from \"web3\";\n\n import { state, actions } from '@martyrs/src/modules/wallet/views/store/wallet.store';\n\n import text from '@martyrs/src/modules/wallet/views/localization/wallet.json'\n \n const { t } = useI18n({\n useScope: 'global', \n ...text\n })\n\n import Popup from '@martyrs/src/components/Popup/Popup.vue';\n import Button from '@martyrs/src/components/Button/Button.vue'; \n\n import CardBlogpost from '@martyrs/src/modules/community/components/blocks/CardBlogpost.vue';\n\n import ConnectMetamask from '@martyrs/src/modules/wallet/views/components/elements/ConnectMetamask.vue';\n\n import CashDepositMenu from '@martyrs/src/modules/wallet/views/components/blocks/CashDeposit.vue';\n import CardDepositMenu from '@martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue';\n import CryptoDepositMenu from '@martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue';\n import CardBalanceReplenished from '@martyrs/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue';\n import CryptoDepositProcessing from '@martyrs/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue';\n\n\n\n onMounted(() => {\n // User has disconnected metamask from extension\n window.ethereum.on('accountsChanged', (accounts) => {\n if (accounts.length < 1) {\n state.account = null;\n }\n });\n\n\n state.web3 = new Web3(window.ethereum || 'http://localhost:8080');\n\n actions.listRewards();\n actions.tryReconnectWallet();\n });\n\n // /////////////////////////////////////////\n // GetMore Popup\n // /////////////////////////////////////////\n const isGetMorePopup = ref(false)\n const currentMenuPopup = ref(0)\n\n function switchGetMoreMenu(value) {\n currentMenuPopup.value = value;\n }\n\n function openGetMorePopup() {\n isGetMorePopup.value = true;\n }\n function closeGetMorePopup() {\n isGetMorePopup.value = false;\n currentMenuPopup.value = 0;\n actions.stopTimer();\n actions.disconnectWebSocket();\n }\n</script>"],"names":["useI18n","text","onMounted","state","actions","ref"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8ME,UAAM,EAAE,EAAC,IAAKA,gBAAQ;AAAA,MACpB,UAAU;AAAA,MACV,GAAGC,OAAAA;AAAAA,IACP,CAAG;AAiBDC,QAAAA,UAAU,MAAM;AAEd,aAAO,SAAS,GAAG,mBAAmB,CAAC,aAAa;AAClD,YAAI,SAAS,SAAS,GAAG;AACvBC,uBAAAA,MAAM,UAAU;AAAA,QAClB;AAAA,MACF,CAAC;AAGDA,mBAAAA,MAAM,OAAO,IAAI,KAAK,OAAO,YAAY,uBAAuB;AAEhEC,mBAAAA,QAAQ,YAAW;AACnBA,mBAAAA,QAAQ,mBAAkB;AAAA,IAC5B,CAAC;AAKD,UAAM,iBAAiBC,IAAAA,IAAI,KAAK;AAChC,UAAM,mBAAmBA,IAAAA,IAAI,CAAC;AAE9B,aAAS,kBAAkB,OAAO;AAChC,uBAAiB,QAAQ;AAAA,IAC3B;AAEA,aAAS,mBAAmB;AAC1B,qBAAe,QAAQ;AAAA,IACzB;AACA,aAAS,oBAAoB;AAC3B,qBAAe,QAAQ;AACvB,uBAAiB,QAAQ;AACzBD,mBAAAA,QAAQ,UAAS;AACjBA,mBAAAA,QAAQ,oBAAmB;AAAA,IAC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Wallet.vue.cjs","sources":["../../../../../../../../src/modules/wallet/views/components/pages/Wallet.vue"],"sourcesContent":["<template>\n <div class=\"pd-thin\">\n <section class=\"bg-black t-white mn-b-thin radius-big pd-big\">\n <h1 class=\"mn-b-medium\">{{ t('wallet.title') }}</h1>\n\n <p class=\"mn-b-semi t-transp p-medium\">\n {{ t('wallet.subtitle') }}\n </p>\n\n <div \n v-if=\"state.account\"\n class=\"gap-thin mn-b-thin flex-nowrap bg-black radius-extra t-white br-solid br-white-transp-10 br-1px flex-v-center flex pd-medium\"\n >\n <div class=\"flex-v-center flex-nowrap flex mn-r-auto\">\n <!-- <img loading=\"lazy\" src=\"/logo/wdt.svg\" class=\"mn-r-thin i-big\"> -->\n <h2>{{state.tokenBalance}} {{ t('wallet.token') }}</h2>\n </div>\n\n <button @click=\"openGetMorePopup\" class=\"t-nowrap w-max bg-main t-medium button\">Get More</button>\n\n\n <Button \n :submit=\"actions.collectRewards\" \n class=\"w-max bg-white t-black t-medium button\"\n >\n Withdraw\n </Button>\n </div>\n\n <ConnectMetamask class=\"mn-b-thin radius-extra br-solid br-white-transp-10 br-1px w-100\" />\n\n <div\n v-if=\"state.account\"\n class=\"w-100 mn-b-semi flex-column flex pd-big radius-big bg-main t-black\"\n >\n <p class=\"t-transp t-medium mn-b-thin\">You own:</p>\n <p class=\"h1 mn-b-small\">{{state.share}}%</p>\n <p class=\"t-white p-medium t-medium mn-b-semi\">of all shares</p>\n\n <div\n class=\"flex-v-center mn-b-small flex-nowrap flex pd-small bg-black-transp-5 radius-extra\"\n >\n <!-- <img loading=\"lazy\" src=\"@/assets/icons/metamask.svg\" class=\"mn-r-small i-big\" > -->\n \n <p v-if=\"state.account\" class=\"t-transp t-medium \">\n <span class=\"uppercase p-small t-medium t-transp\">Connected Metamask</span><br>\n <span>{{state.account}}</span>\n </p>\n\n <button\n v-if=\"state.account\"\n @click=\"actions.disconnectWallet\"\n class=\"mn-l-auto bg-red button\"\n >\n Disconnect Wallet\n </button>\n </div>\n </div>\n\n </section>\n\n <div v-if=\"!state.account\" class=\"mn-b-semi cols-2 gap-thin\">\n <div\n class=\"w-100 pd-medium radius-medium t-center bg-light\"\n >\n <h3 class=\"mn-b-small\">Make first order and start earning Weeder Token</h3>\n <button class=\"mn-l-auto mn-r-auto bg-main button\">Explore marketplace</button>\n </div>\n\n <div\n class=\"w-100 pd-medium flex-center flex flex-column radius-medium t-center bg-light\"\n >\n <h3 \n v-if=\"!state.account\"\n class=\"mn-b-small\"\n >\n Connect Metamask to withdrawal your earnings.\n </h3>\n\n <button\n v-if=\"!state.account\"\n @click=\"actions.connectWallet\"\n class=\"br-solid br-2px br-black-transp-10 t-black button\"\n >\n Connect Wallet\n </button>\n </div>\n </div>\n\n <h2 class=\"mn-b-small\" v-if=\"state.rewards.length > 0\">Latest Rewards </h2>\n\n <section class=\"cols-3 mobile:cols-1 gap-thin\">\n <div \n class=\"radius-medium bg-light\"\n v-for=\"income in state.rewards\"\n > \n <div class=\"flex-nowrap br-b br-black-transp-10 br-solid flex pd-medium\">\n <!-- <img loading=\"lazy\" src=\"/logo/wdt-plus.svg\" class=\"mn-r-thin i-medium\"> -->\n <p class=\"t-semi mn-r-auto\">{{income.amount}} WDT</p>\n \n <span class=\"pd-t-nano pd-b-nano pd-l-thin pd-r-thin bg-main flex flex-center radius-extra t-semi p-small\">{{income.type === 'blogpost' ? 'Community Reward' : income.type}}</span>\n </div>\n\n <div class=\"pd-medium\">\n <h4 class=\"t-regular mn-b-thin\">{{income.name}}</h4>\n <!-- <p class=\"p-small\">{{income.content[0].content}}</p> -->\n </div>\n\n </div>\n\n\n </section>\n\n <h2 class=\"mn-b-small\" v-if=\"state.rewards.length > 0\">Activity</h2>\n\n <section class=\"cols-3 mobile:cols-1 gap-thin\">\n <div \n class=\"radius-medium bg-grey\"\n v-for=\"income in state.rewards\"\n > \n <div class=\"flex-nowrap br-b br-black-transp-10 br-solid flex pd-medium\">\n <!-- <img loading=\"lazy\" src=\"/logo/wdt-plus.svg\" class=\"mn-r-thin i-medium\"> -->\n <p class=\"t-semi mn-r-auto\">{{income.amount}} WDT</p>\n \n <span class=\"pd-t-nano pd-b-nano pd-l-thin pd-r-thin bg-main flex flex-center radius-extra t-semi p-small\">{{income.type === 'blogpost' ? 'Community Reward' : income.type}}</span>\n </div>\n\n <div class=\"pd-medium\">\n <h4 class=\"t-regular mn-b-thin\">{{income.name}}</h4>\n <!-- <p class=\"p-small\">{{income.content[0].content}}</p> -->\n </div>\n </div>\n </section>\n\n <Popup \n @close-popup=\"closeGetMorePopup\" \n :isPopupOpen=\"isGetMorePopup\"\n class=\"w-m-50r t-left pd-big bg-white radius-big\"\n >\n <div\n v-if=\"currentMenuPopup === 0\"\n >\n <h2 class=\"mn-b-small t-center t-bold\">Choose the way of deposit</h2>\n\n <button\n class=\"w-100 bg-white t-black pd-thin radius-medium h3 t-center br-solid br-2px br-black-transp-10 mn-t-small\"\n @click=\"switchGetMoreMenu(1)\"\n >\n CASH\n </button>\n\n <button\n class=\"w-100 bg-white t-black pd-thin radius-medium h3 t-center br-solid br-2px br-black-transp-10 mn-t-small\"\n @click=\"switchGetMoreMenu(2)\"\n >\n CARD\n </button>\n\n <button\n class=\"w-100 bg-white t-black pd-thin radius-medium h3 t-center br-solid br-2px br-black-transp-10 mn-t-small\"\n @click=\"switchGetMoreMenu(4)\"\n >\n CRYPTO\n </button>\n </div>\n\n <CashDepositMenu\n v-if=\"currentMenuPopup === 1\"\n @back-selection=\"switchGetMoreMenu(0)\"\n />\n\n <CardDepositMenu\n v-if=\"currentMenuPopup === 2\"\n @back-selection=\"switchGetMoreMenu(0)\"\n @switch-menu=\"switchGetMoreMenu\"\n />\n\n <CardBalanceReplenished\n v-if=\"currentMenuPopup === 3\"\n @close=\"closeGetMorePopup\"\n />\n\n <CryptoDepositMenu\n v-if=\"currentMenuPopup === 4\"\n @back-selection=\"switchGetMoreMenu(0)\"\n @switch-menu=\"switchGetMoreMenu\"\n />\n\n <CryptoDepositProcessing\n v-if=\"currentMenuPopup === 5\"\n @back-selection=\"switchGetMoreMenu(0)\"\n @switch-menu=\"switchGetMoreMenu\"\n />\n </Popup>\n </div>\n</template>\n\n<script setup>\n import { onMounted, ref } from 'vue';\n import { useI18n } from 'vue-i18n'\n\n import { state, actions } from '@martyrs/src/modules/wallet/views/store/wallet.store';\n\n import text from '@martyrs/src/modules/wallet/views/localization/wallet.json'\n\n const { t } = useI18n({\n useScope: 'global',\n ...text\n })\n\n import Popup from '@martyrs/src/components/Popup/Popup.vue';\n import Button from '@martyrs/src/components/Button/Button.vue';\n\n import CardBlogpost from '@martyrs/src/modules/community/components/blocks/CardBlogpost.vue';\n\n import ConnectMetamask from '@martyrs/src/modules/wallet/views/components/elements/ConnectMetamask.vue';\n\n import CashDepositMenu from '@martyrs/src/modules/wallet/views/components/blocks/CashDeposit.vue';\n import CardDepositMenu from '@martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue';\n import CryptoDepositMenu from '@martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue';\n import CardBalanceReplenished from '@martyrs/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue';\n import CryptoDepositProcessing from '@martyrs/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue';\n\n\n\n onMounted(async () => {\n // User has disconnected metamask from extension\n window.ethereum.on('accountsChanged', (accounts) => {\n if (accounts.length < 1) {\n state.account = null;\n }\n });\n\n // Динамический импорт Web3 только когда компонент монтируется\n const { default: Web3 } = await import('web3');\n state.web3 = new Web3(window.ethereum || 'http://localhost:8080');\n\n actions.listRewards();\n actions.tryReconnectWallet();\n });\n\n // /////////////////////////////////////////\n // GetMore Popup\n // /////////////////////////////////////////\n const isGetMorePopup = ref(false)\n const currentMenuPopup = ref(0)\n\n function switchGetMoreMenu(value) {\n currentMenuPopup.value = value;\n }\n\n function openGetMorePopup() {\n isGetMorePopup.value = true;\n }\n function closeGetMorePopup() {\n isGetMorePopup.value = false;\n currentMenuPopup.value = 0;\n actions.stopTimer();\n actions.disconnectWebSocket();\n }\n</script>"],"names":["useI18n","text","onMounted","state","actions","ref"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6ME,UAAM,EAAE,EAAC,IAAKA,gBAAQ;AAAA,MACpB,UAAU;AAAA,MACV,GAAGC,OAAAA;AAAAA,IACP,CAAG;AAiBDC,QAAAA,UAAU,YAAY;AAEpB,aAAO,SAAS,GAAG,mBAAmB,CAAC,aAAa;AAClD,YAAI,SAAS,SAAS,GAAG;AACvBC,uBAAAA,MAAM,UAAU;AAAA,QAClB;AAAA,MACF,CAAC;AAGD,YAAM,EAAE,SAAS,SAAS,MAAM,OAAO,MAAM;AAC7CA,mBAAAA,MAAM,OAAO,IAAI,KAAK,OAAO,YAAY,uBAAuB;AAEhEC,mBAAAA,QAAQ,YAAW;AACnBA,mBAAAA,QAAQ,mBAAkB;AAAA,IAC5B,CAAC;AAKD,UAAM,iBAAiBC,IAAAA,IAAI,KAAK;AAChC,UAAM,mBAAmBA,IAAAA,IAAI,CAAC;AAE9B,aAAS,kBAAkB,OAAO;AAChC,uBAAiB,QAAQ;AAAA,IAC3B;AAEA,aAAS,mBAAmB;AAC1B,qBAAe,QAAQ;AAAA,IACzB;AACA,aAAS,oBAAoB;AAC3B,qBAAe,QAAQ;AACvB,uBAAiB,QAAQ;AACzBD,mBAAAA,QAAQ,UAAS;AACjBA,mBAAAA,QAAQ,oBAAmB;AAAA,IAC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,6 +1,5 @@
1
1
  import { onMounted, ref, createElementBlock, openBlock, createElementVNode, createCommentVNode, createVNode, toDisplayString, unref, withCtx, createTextVNode, Fragment, renderList, createBlock } from "vue";
2
2
  import { useI18n } from "vue-i18n";
3
- import Web3 from "web3";
4
3
  import { state, actions } from "../../store/wallet.store.js";
5
4
  import text from "../../localization/wallet.json.js";
6
5
  import _sfc_main$3 from "../../../../../components/Popup/Popup.vue.js";
@@ -74,12 +73,13 @@ const _sfc_main = {
74
73
  useScope: "global",
75
74
  ...text
76
75
  });
77
- onMounted(() => {
76
+ onMounted(async () => {
78
77
  window.ethereum.on("accountsChanged", (accounts) => {
79
78
  if (accounts.length < 1) {
80
79
  state.account = null;
81
80
  }
82
81
  });
82
+ const { default: Web3 } = await import("web3");
83
83
  state.web3 = new Web3(window.ethereum || "http://localhost:8080");
84
84
  actions.listRewards();
85
85
  actions.tryReconnectWallet();
@@ -1 +1 @@
1
- {"version":3,"file":"Wallet.vue.js","sources":["../../../../../../../../src/modules/wallet/views/components/pages/Wallet.vue"],"sourcesContent":["<template>\n <div class=\"pd-thin\">\n <section class=\"bg-black t-white mn-b-thin radius-big pd-big\">\n <h1 class=\"mn-b-medium\">{{ t('wallet.title') }}</h1>\n\n <p class=\"mn-b-semi t-transp p-medium\">\n {{ t('wallet.subtitle') }}\n </p>\n\n <div \n v-if=\"state.account\"\n class=\"gap-thin mn-b-thin flex-nowrap bg-black radius-extra t-white br-solid br-white-transp-10 br-1px flex-v-center flex pd-medium\"\n >\n <div class=\"flex-v-center flex-nowrap flex mn-r-auto\">\n <!-- <img loading=\"lazy\" src=\"/logo/wdt.svg\" class=\"mn-r-thin i-big\"> -->\n <h2>{{state.tokenBalance}} {{ t('wallet.token') }}</h2>\n </div>\n\n <button @click=\"openGetMorePopup\" class=\"t-nowrap w-max bg-main t-medium button\">Get More</button>\n\n\n <Button \n :submit=\"actions.collectRewards\" \n class=\"w-max bg-white t-black t-medium button\"\n >\n Withdraw\n </Button>\n </div>\n\n <ConnectMetamask class=\"mn-b-thin radius-extra br-solid br-white-transp-10 br-1px w-100\" />\n\n <div\n v-if=\"state.account\"\n class=\"w-100 mn-b-semi flex-column flex pd-big radius-big bg-main t-black\"\n >\n <p class=\"t-transp t-medium mn-b-thin\">You own:</p>\n <p class=\"h1 mn-b-small\">{{state.share}}%</p>\n <p class=\"t-white p-medium t-medium mn-b-semi\">of all shares</p>\n\n <div\n class=\"flex-v-center mn-b-small flex-nowrap flex pd-small bg-black-transp-5 radius-extra\"\n >\n <!-- <img loading=\"lazy\" src=\"@/assets/icons/metamask.svg\" class=\"mn-r-small i-big\" > -->\n \n <p v-if=\"state.account\" class=\"t-transp t-medium \">\n <span class=\"uppercase p-small t-medium t-transp\">Connected Metamask</span><br>\n <span>{{state.account}}</span>\n </p>\n\n <button\n v-if=\"state.account\"\n @click=\"actions.disconnectWallet\"\n class=\"mn-l-auto bg-red button\"\n >\n Disconnect Wallet\n </button>\n </div>\n </div>\n\n </section>\n\n <div v-if=\"!state.account\" class=\"mn-b-semi cols-2 gap-thin\">\n <div\n class=\"w-100 pd-medium radius-medium t-center bg-light\"\n >\n <h3 class=\"mn-b-small\">Make first order and start earning Weeder Token</h3>\n <button class=\"mn-l-auto mn-r-auto bg-main button\">Explore marketplace</button>\n </div>\n\n <div\n class=\"w-100 pd-medium flex-center flex flex-column radius-medium t-center bg-light\"\n >\n <h3 \n v-if=\"!state.account\"\n class=\"mn-b-small\"\n >\n Connect Metamask to withdrawal your earnings.\n </h3>\n\n <button\n v-if=\"!state.account\"\n @click=\"actions.connectWallet\"\n class=\"br-solid br-2px br-black-transp-10 t-black button\"\n >\n Connect Wallet\n </button>\n </div>\n </div>\n\n <h2 class=\"mn-b-small\" v-if=\"state.rewards.length > 0\">Latest Rewards </h2>\n\n <section class=\"cols-3 mobile:cols-1 gap-thin\">\n <div \n class=\"radius-medium bg-light\"\n v-for=\"income in state.rewards\"\n > \n <div class=\"flex-nowrap br-b br-black-transp-10 br-solid flex pd-medium\">\n <!-- <img loading=\"lazy\" src=\"/logo/wdt-plus.svg\" class=\"mn-r-thin i-medium\"> -->\n <p class=\"t-semi mn-r-auto\">{{income.amount}} WDT</p>\n \n <span class=\"pd-t-nano pd-b-nano pd-l-thin pd-r-thin bg-main flex flex-center radius-extra t-semi p-small\">{{income.type === 'blogpost' ? 'Community Reward' : income.type}}</span>\n </div>\n\n <div class=\"pd-medium\">\n <h4 class=\"t-regular mn-b-thin\">{{income.name}}</h4>\n <!-- <p class=\"p-small\">{{income.content[0].content}}</p> -->\n </div>\n\n </div>\n\n\n </section>\n\n <h2 class=\"mn-b-small\" v-if=\"state.rewards.length > 0\">Activity</h2>\n\n <section class=\"cols-3 mobile:cols-1 gap-thin\">\n <div \n class=\"radius-medium bg-grey\"\n v-for=\"income in state.rewards\"\n > \n <div class=\"flex-nowrap br-b br-black-transp-10 br-solid flex pd-medium\">\n <!-- <img loading=\"lazy\" src=\"/logo/wdt-plus.svg\" class=\"mn-r-thin i-medium\"> -->\n <p class=\"t-semi mn-r-auto\">{{income.amount}} WDT</p>\n \n <span class=\"pd-t-nano pd-b-nano pd-l-thin pd-r-thin bg-main flex flex-center radius-extra t-semi p-small\">{{income.type === 'blogpost' ? 'Community Reward' : income.type}}</span>\n </div>\n\n <div class=\"pd-medium\">\n <h4 class=\"t-regular mn-b-thin\">{{income.name}}</h4>\n <!-- <p class=\"p-small\">{{income.content[0].content}}</p> -->\n </div>\n </div>\n </section>\n\n <Popup \n @close-popup=\"closeGetMorePopup\" \n :isPopupOpen=\"isGetMorePopup\"\n class=\"w-m-50r t-left pd-big bg-white radius-big\"\n >\n <div\n v-if=\"currentMenuPopup === 0\"\n >\n <h2 class=\"mn-b-small t-center t-bold\">Choose the way of deposit</h2>\n\n <button\n class=\"w-100 bg-white t-black pd-thin radius-medium h3 t-center br-solid br-2px br-black-transp-10 mn-t-small\"\n @click=\"switchGetMoreMenu(1)\"\n >\n CASH\n </button>\n\n <button\n class=\"w-100 bg-white t-black pd-thin radius-medium h3 t-center br-solid br-2px br-black-transp-10 mn-t-small\"\n @click=\"switchGetMoreMenu(2)\"\n >\n CARD\n </button>\n\n <button\n class=\"w-100 bg-white t-black pd-thin radius-medium h3 t-center br-solid br-2px br-black-transp-10 mn-t-small\"\n @click=\"switchGetMoreMenu(4)\"\n >\n CRYPTO\n </button>\n </div>\n\n <CashDepositMenu\n v-if=\"currentMenuPopup === 1\"\n @back-selection=\"switchGetMoreMenu(0)\"\n />\n\n <CardDepositMenu\n v-if=\"currentMenuPopup === 2\"\n @back-selection=\"switchGetMoreMenu(0)\"\n @switch-menu=\"switchGetMoreMenu\"\n />\n\n <CardBalanceReplenished\n v-if=\"currentMenuPopup === 3\"\n @close=\"closeGetMorePopup\"\n />\n\n <CryptoDepositMenu\n v-if=\"currentMenuPopup === 4\"\n @back-selection=\"switchGetMoreMenu(0)\"\n @switch-menu=\"switchGetMoreMenu\"\n />\n\n <CryptoDepositProcessing\n v-if=\"currentMenuPopup === 5\"\n @back-selection=\"switchGetMoreMenu(0)\"\n @switch-menu=\"switchGetMoreMenu\"\n />\n </Popup>\n </div>\n</template>\n\n<script setup>\n import { onMounted, ref } from 'vue';\n import { useI18n } from 'vue-i18n'\n import Web3 from \"web3\";\n\n import { state, actions } from '@martyrs/src/modules/wallet/views/store/wallet.store';\n\n import text from '@martyrs/src/modules/wallet/views/localization/wallet.json'\n \n const { t } = useI18n({\n useScope: 'global', \n ...text\n })\n\n import Popup from '@martyrs/src/components/Popup/Popup.vue';\n import Button from '@martyrs/src/components/Button/Button.vue'; \n\n import CardBlogpost from '@martyrs/src/modules/community/components/blocks/CardBlogpost.vue';\n\n import ConnectMetamask from '@martyrs/src/modules/wallet/views/components/elements/ConnectMetamask.vue';\n\n import CashDepositMenu from '@martyrs/src/modules/wallet/views/components/blocks/CashDeposit.vue';\n import CardDepositMenu from '@martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue';\n import CryptoDepositMenu from '@martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue';\n import CardBalanceReplenished from '@martyrs/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue';\n import CryptoDepositProcessing from '@martyrs/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue';\n\n\n\n onMounted(() => {\n // User has disconnected metamask from extension\n window.ethereum.on('accountsChanged', (accounts) => {\n if (accounts.length < 1) {\n state.account = null;\n }\n });\n\n\n state.web3 = new Web3(window.ethereum || 'http://localhost:8080');\n\n actions.listRewards();\n actions.tryReconnectWallet();\n });\n\n // /////////////////////////////////////////\n // GetMore Popup\n // /////////////////////////////////////////\n const isGetMorePopup = ref(false)\n const currentMenuPopup = ref(0)\n\n function switchGetMoreMenu(value) {\n currentMenuPopup.value = value;\n }\n\n function openGetMorePopup() {\n isGetMorePopup.value = true;\n }\n function closeGetMorePopup() {\n isGetMorePopup.value = false;\n currentMenuPopup.value = 0;\n actions.stopTimer();\n actions.disconnectWebSocket();\n }\n</script>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8ME,UAAM,EAAE,EAAC,IAAK,QAAQ;AAAA,MACpB,UAAU;AAAA,MACV,GAAG;AAAA,IACP,CAAG;AAiBD,cAAU,MAAM;AAEd,aAAO,SAAS,GAAG,mBAAmB,CAAC,aAAa;AAClD,YAAI,SAAS,SAAS,GAAG;AACvB,gBAAM,UAAU;AAAA,QAClB;AAAA,MACF,CAAC;AAGD,YAAM,OAAO,IAAI,KAAK,OAAO,YAAY,uBAAuB;AAEhE,cAAQ,YAAW;AACnB,cAAQ,mBAAkB;AAAA,IAC5B,CAAC;AAKD,UAAM,iBAAiB,IAAI,KAAK;AAChC,UAAM,mBAAmB,IAAI,CAAC;AAE9B,aAAS,kBAAkB,OAAO;AAChC,uBAAiB,QAAQ;AAAA,IAC3B;AAEA,aAAS,mBAAmB;AAC1B,qBAAe,QAAQ;AAAA,IACzB;AACA,aAAS,oBAAoB;AAC3B,qBAAe,QAAQ;AACvB,uBAAiB,QAAQ;AACzB,cAAQ,UAAS;AACjB,cAAQ,oBAAmB;AAAA,IAC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Wallet.vue.js","sources":["../../../../../../../../src/modules/wallet/views/components/pages/Wallet.vue"],"sourcesContent":["<template>\n <div class=\"pd-thin\">\n <section class=\"bg-black t-white mn-b-thin radius-big pd-big\">\n <h1 class=\"mn-b-medium\">{{ t('wallet.title') }}</h1>\n\n <p class=\"mn-b-semi t-transp p-medium\">\n {{ t('wallet.subtitle') }}\n </p>\n\n <div \n v-if=\"state.account\"\n class=\"gap-thin mn-b-thin flex-nowrap bg-black radius-extra t-white br-solid br-white-transp-10 br-1px flex-v-center flex pd-medium\"\n >\n <div class=\"flex-v-center flex-nowrap flex mn-r-auto\">\n <!-- <img loading=\"lazy\" src=\"/logo/wdt.svg\" class=\"mn-r-thin i-big\"> -->\n <h2>{{state.tokenBalance}} {{ t('wallet.token') }}</h2>\n </div>\n\n <button @click=\"openGetMorePopup\" class=\"t-nowrap w-max bg-main t-medium button\">Get More</button>\n\n\n <Button \n :submit=\"actions.collectRewards\" \n class=\"w-max bg-white t-black t-medium button\"\n >\n Withdraw\n </Button>\n </div>\n\n <ConnectMetamask class=\"mn-b-thin radius-extra br-solid br-white-transp-10 br-1px w-100\" />\n\n <div\n v-if=\"state.account\"\n class=\"w-100 mn-b-semi flex-column flex pd-big radius-big bg-main t-black\"\n >\n <p class=\"t-transp t-medium mn-b-thin\">You own:</p>\n <p class=\"h1 mn-b-small\">{{state.share}}%</p>\n <p class=\"t-white p-medium t-medium mn-b-semi\">of all shares</p>\n\n <div\n class=\"flex-v-center mn-b-small flex-nowrap flex pd-small bg-black-transp-5 radius-extra\"\n >\n <!-- <img loading=\"lazy\" src=\"@/assets/icons/metamask.svg\" class=\"mn-r-small i-big\" > -->\n \n <p v-if=\"state.account\" class=\"t-transp t-medium \">\n <span class=\"uppercase p-small t-medium t-transp\">Connected Metamask</span><br>\n <span>{{state.account}}</span>\n </p>\n\n <button\n v-if=\"state.account\"\n @click=\"actions.disconnectWallet\"\n class=\"mn-l-auto bg-red button\"\n >\n Disconnect Wallet\n </button>\n </div>\n </div>\n\n </section>\n\n <div v-if=\"!state.account\" class=\"mn-b-semi cols-2 gap-thin\">\n <div\n class=\"w-100 pd-medium radius-medium t-center bg-light\"\n >\n <h3 class=\"mn-b-small\">Make first order and start earning Weeder Token</h3>\n <button class=\"mn-l-auto mn-r-auto bg-main button\">Explore marketplace</button>\n </div>\n\n <div\n class=\"w-100 pd-medium flex-center flex flex-column radius-medium t-center bg-light\"\n >\n <h3 \n v-if=\"!state.account\"\n class=\"mn-b-small\"\n >\n Connect Metamask to withdrawal your earnings.\n </h3>\n\n <button\n v-if=\"!state.account\"\n @click=\"actions.connectWallet\"\n class=\"br-solid br-2px br-black-transp-10 t-black button\"\n >\n Connect Wallet\n </button>\n </div>\n </div>\n\n <h2 class=\"mn-b-small\" v-if=\"state.rewards.length > 0\">Latest Rewards </h2>\n\n <section class=\"cols-3 mobile:cols-1 gap-thin\">\n <div \n class=\"radius-medium bg-light\"\n v-for=\"income in state.rewards\"\n > \n <div class=\"flex-nowrap br-b br-black-transp-10 br-solid flex pd-medium\">\n <!-- <img loading=\"lazy\" src=\"/logo/wdt-plus.svg\" class=\"mn-r-thin i-medium\"> -->\n <p class=\"t-semi mn-r-auto\">{{income.amount}} WDT</p>\n \n <span class=\"pd-t-nano pd-b-nano pd-l-thin pd-r-thin bg-main flex flex-center radius-extra t-semi p-small\">{{income.type === 'blogpost' ? 'Community Reward' : income.type}}</span>\n </div>\n\n <div class=\"pd-medium\">\n <h4 class=\"t-regular mn-b-thin\">{{income.name}}</h4>\n <!-- <p class=\"p-small\">{{income.content[0].content}}</p> -->\n </div>\n\n </div>\n\n\n </section>\n\n <h2 class=\"mn-b-small\" v-if=\"state.rewards.length > 0\">Activity</h2>\n\n <section class=\"cols-3 mobile:cols-1 gap-thin\">\n <div \n class=\"radius-medium bg-grey\"\n v-for=\"income in state.rewards\"\n > \n <div class=\"flex-nowrap br-b br-black-transp-10 br-solid flex pd-medium\">\n <!-- <img loading=\"lazy\" src=\"/logo/wdt-plus.svg\" class=\"mn-r-thin i-medium\"> -->\n <p class=\"t-semi mn-r-auto\">{{income.amount}} WDT</p>\n \n <span class=\"pd-t-nano pd-b-nano pd-l-thin pd-r-thin bg-main flex flex-center radius-extra t-semi p-small\">{{income.type === 'blogpost' ? 'Community Reward' : income.type}}</span>\n </div>\n\n <div class=\"pd-medium\">\n <h4 class=\"t-regular mn-b-thin\">{{income.name}}</h4>\n <!-- <p class=\"p-small\">{{income.content[0].content}}</p> -->\n </div>\n </div>\n </section>\n\n <Popup \n @close-popup=\"closeGetMorePopup\" \n :isPopupOpen=\"isGetMorePopup\"\n class=\"w-m-50r t-left pd-big bg-white radius-big\"\n >\n <div\n v-if=\"currentMenuPopup === 0\"\n >\n <h2 class=\"mn-b-small t-center t-bold\">Choose the way of deposit</h2>\n\n <button\n class=\"w-100 bg-white t-black pd-thin radius-medium h3 t-center br-solid br-2px br-black-transp-10 mn-t-small\"\n @click=\"switchGetMoreMenu(1)\"\n >\n CASH\n </button>\n\n <button\n class=\"w-100 bg-white t-black pd-thin radius-medium h3 t-center br-solid br-2px br-black-transp-10 mn-t-small\"\n @click=\"switchGetMoreMenu(2)\"\n >\n CARD\n </button>\n\n <button\n class=\"w-100 bg-white t-black pd-thin radius-medium h3 t-center br-solid br-2px br-black-transp-10 mn-t-small\"\n @click=\"switchGetMoreMenu(4)\"\n >\n CRYPTO\n </button>\n </div>\n\n <CashDepositMenu\n v-if=\"currentMenuPopup === 1\"\n @back-selection=\"switchGetMoreMenu(0)\"\n />\n\n <CardDepositMenu\n v-if=\"currentMenuPopup === 2\"\n @back-selection=\"switchGetMoreMenu(0)\"\n @switch-menu=\"switchGetMoreMenu\"\n />\n\n <CardBalanceReplenished\n v-if=\"currentMenuPopup === 3\"\n @close=\"closeGetMorePopup\"\n />\n\n <CryptoDepositMenu\n v-if=\"currentMenuPopup === 4\"\n @back-selection=\"switchGetMoreMenu(0)\"\n @switch-menu=\"switchGetMoreMenu\"\n />\n\n <CryptoDepositProcessing\n v-if=\"currentMenuPopup === 5\"\n @back-selection=\"switchGetMoreMenu(0)\"\n @switch-menu=\"switchGetMoreMenu\"\n />\n </Popup>\n </div>\n</template>\n\n<script setup>\n import { onMounted, ref } from 'vue';\n import { useI18n } from 'vue-i18n'\n\n import { state, actions } from '@martyrs/src/modules/wallet/views/store/wallet.store';\n\n import text from '@martyrs/src/modules/wallet/views/localization/wallet.json'\n\n const { t } = useI18n({\n useScope: 'global',\n ...text\n })\n\n import Popup from '@martyrs/src/components/Popup/Popup.vue';\n import Button from '@martyrs/src/components/Button/Button.vue';\n\n import CardBlogpost from '@martyrs/src/modules/community/components/blocks/CardBlogpost.vue';\n\n import ConnectMetamask from '@martyrs/src/modules/wallet/views/components/elements/ConnectMetamask.vue';\n\n import CashDepositMenu from '@martyrs/src/modules/wallet/views/components/blocks/CashDeposit.vue';\n import CardDepositMenu from '@martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue';\n import CryptoDepositMenu from '@martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue';\n import CardBalanceReplenished from '@martyrs/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue';\n import CryptoDepositProcessing from '@martyrs/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue';\n\n\n\n onMounted(async () => {\n // User has disconnected metamask from extension\n window.ethereum.on('accountsChanged', (accounts) => {\n if (accounts.length < 1) {\n state.account = null;\n }\n });\n\n // Динамический импорт Web3 только когда компонент монтируется\n const { default: Web3 } = await import('web3');\n state.web3 = new Web3(window.ethereum || 'http://localhost:8080');\n\n actions.listRewards();\n actions.tryReconnectWallet();\n });\n\n // /////////////////////////////////////////\n // GetMore Popup\n // /////////////////////////////////////////\n const isGetMorePopup = ref(false)\n const currentMenuPopup = ref(0)\n\n function switchGetMoreMenu(value) {\n currentMenuPopup.value = value;\n }\n\n function openGetMorePopup() {\n isGetMorePopup.value = true;\n }\n function closeGetMorePopup() {\n isGetMorePopup.value = false;\n currentMenuPopup.value = 0;\n actions.stopTimer();\n actions.disconnectWebSocket();\n }\n</script>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6ME,UAAM,EAAE,EAAC,IAAK,QAAQ;AAAA,MACpB,UAAU;AAAA,MACV,GAAG;AAAA,IACP,CAAG;AAiBD,cAAU,YAAY;AAEpB,aAAO,SAAS,GAAG,mBAAmB,CAAC,aAAa;AAClD,YAAI,SAAS,SAAS,GAAG;AACvB,gBAAM,UAAU;AAAA,QAClB;AAAA,MACF,CAAC;AAGD,YAAM,EAAE,SAAS,SAAS,MAAM,OAAO,MAAM;AAC7C,YAAM,OAAO,IAAI,KAAK,OAAO,YAAY,uBAAuB;AAEhE,cAAQ,YAAW;AACnB,cAAQ,mBAAkB;AAAA,IAC5B,CAAC;AAKD,UAAM,iBAAiB,IAAI,KAAK;AAChC,UAAM,mBAAmB,IAAI,CAAC;AAE9B,aAAS,kBAAkB,OAAO;AAChC,uBAAiB,QAAQ;AAAA,IAC3B;AAEA,aAAS,mBAAmB;AAC1B,qBAAe,QAAQ;AAAA,IACzB;AACA,aAAS,oBAAoB;AAC3B,qBAAe,QAAQ;AACvB,uBAAiB,QAAQ;AACzB,cAAQ,UAAS;AACjB,cAAQ,oBAAmB;AAAA,IAC7B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ozdao/martyrs",
3
- "version": "0.2.548",
3
+ "version": "0.2.549",
4
4
  "description": "Fullstack framework focused on user experience and ease of development.",
5
5
  "author": "OZ DAO <hello@ozdao.dev>",
6
6
  "license": "GPL-3.0-or-later",
@@ -198,19 +198,18 @@
198
198
  <script setup>
199
199
  import { onMounted, ref } from 'vue';
200
200
  import { useI18n } from 'vue-i18n'
201
- import Web3 from "web3";
202
201
 
203
202
  import { state, actions } from '@martyrs/src/modules/wallet/views/store/wallet.store';
204
203
 
205
204
  import text from '@martyrs/src/modules/wallet/views/localization/wallet.json'
206
-
205
+
207
206
  const { t } = useI18n({
208
- useScope: 'global',
207
+ useScope: 'global',
209
208
  ...text
210
209
  })
211
210
 
212
211
  import Popup from '@martyrs/src/components/Popup/Popup.vue';
213
- import Button from '@martyrs/src/components/Button/Button.vue';
212
+ import Button from '@martyrs/src/components/Button/Button.vue';
214
213
 
215
214
  import CardBlogpost from '@martyrs/src/modules/community/components/blocks/CardBlogpost.vue';
216
215
 
@@ -224,7 +223,7 @@
224
223
 
225
224
 
226
225
 
227
- onMounted(() => {
226
+ onMounted(async () => {
228
227
  // User has disconnected metamask from extension
229
228
  window.ethereum.on('accountsChanged', (accounts) => {
230
229
  if (accounts.length < 1) {
@@ -232,7 +231,8 @@
232
231
  }
233
232
  });
234
233
 
235
-
234
+ // Динамический импорт Web3 только когда компонент монтируется
235
+ const { default: Web3 } = await import('web3');
236
236
  state.web3 = new Web3(window.ethereum || 'http://localhost:8080');
237
237
 
238
238
  actions.listRewards();
@@ -1 +0,0 @@
1
- {"version":3,"file":"UploadImage.vue2.cjs","sources":["../../../../../src/components/UploadImage/UploadImage.vue"],"sourcesContent":["<template>\n <div class=\"upload-image-wrapper flex-v-center flex-nowrap flex gap-small\" :class=\"{'with-text': text}\">\n <div \n @click=\"onComponentClick\"\n @drop=\"onDrop\"\n @dragover.prevent\n class=\"pos-relative radius-small br-solid br-1px br-black-transp-10 h-100 aspect-1x1 flex-v-center flex-h-center flex cursor-pointer\"\n >\n <img loading=\"lazy\" \n v-if=\"imageUrl || photo || previewUrl\" \n :src=\"previewUrl || (FILE_SERVER_URL || '') + (imageUrl || photo)\"\n alt=\"Uploaded image\" \n class=\"pos-absolute radius-small o-hidden z-index-1 w-100 h-100 object-fit-cover\"\n />\n \n <div v-else class=\"flex-v-center pos-relative z-index-2 flex-h-center flex w-100 h-100 radius-small bg-second\" >\n <IconUpload class=\"i-medium upload-icon\" fill=\"rgb(var(--white))\" />\n </div>\n \n <!-- Hover controls -->\n <div class=\"z-index-2 pos-relative hover-controls pos-absolute w-100 h-100 flex-v-center flex-h-center flex\">\n <div v-if=\"!imageUrl && !photo && !previewUrl\" class=\"hover-upload-icon\">\n <IconUpload class=\"i-medium\" fill=\"rgb(var(--white))\" />\n </div>\n <div v-else class=\"hover-buttons flex gap-small\">\n <button @click.stop=\"onComponentClick\" class=\"hover-button radius-small pd-thin bg-main t-white br-none cursor-pointer\">\n <IconUpload class=\"i-medium\" fill=\"rgb(var(--white))\" />\n </button>\n <button @click.stop=\"deleteImage\" class=\"hover-button radius-small pd-thin bg-danger t-white br-none cursor-pointer\">\n <IconDelete class=\"i-medium\" fill=\"rgb(var(--white))\" />\n </button>\n </div>\n </div>\n \n <!-- Loading overlay -->\n <div v-if=\"loading\" class=\"z-index-2 loading-overlay pos-absolute w-100 h-100 flex-v-center flex-h-center flex\">\n <Loader :centered=\"false\" />\n </div>\n \n <input type=\"file\" name=\"file\" ref=\"fileInput\" @change=\"onFileChange\" style=\"display: none\"/>\n </div>\n \n <!-- Text block -->\n <div v-if=\"text\" class=\"upload-text-block flex flex-column\">\n <span class=\"mn-b-small t-medium\">{{ textConfig.title }}</span>\n <span class=\"mn-b-medium t-transp\">{{ textConfig.subtitle }}</span>\n <div v-if=\"!imageUrl && !photo && !previewUrl\">\n <button @click=\"onComponentClick\" class=\"button button-small w-max bg-main t-black cursor-pointer\">\n {{ textConfig.buttonText }}\n </button>\n </div>\n <div v-else class=\"flex gap-thin\">\n <button @click=\"onComponentClick\" class=\"button button-small w-max bg-second t-white cursor-pointer\">\n Upload \n </button>\n <button @click=\"deleteImage\" class=\"button button-small w-max bg-red t-white cursor-pointer\">\n Delete\n </button>\n </div>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, watch, computed } from 'vue';\nimport axios from 'axios';\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\nimport IconUpload from '@martyrs/src/modules/icons/navigation/IconUpload.vue';\nimport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\nconst imageUrl = ref(null);\nconst fileInput = ref(null);\nconst previewUrl = ref(null);\nconst loading = ref(false);\n\nconst props = defineProps({\n uploadPath: {\n type: String,\n required: true\n },\n photo: {\n type: String,\n default: null\n },\n text: {\n type: [Object, Boolean],\n default: null\n }\n});\n\nconst emit = defineEmits(['update:photo', 'error']);\n\n// Text configuration with defaults\nconst textConfig = computed(() => {\n const defaults = {\n title: 'Upload Image',\n subtitle: 'Drag & drop your image here or click button. Supported: JPG, PNG, GIF. Max size: 2MB',\n buttonText: 'Choose Image'\n };\n \n if (props.text === true) {\n return defaults;\n } else if (typeof props.text === 'object' && props.text !== null) {\n return {\n title: props.text.title || defaults.title,\n subtitle: props.text.subtitle || defaults.subtitle,\n buttonText: props.text.buttonText || defaults.buttonText\n };\n }\n \n return defaults;\n});\n\nwatch(props, ({photo}) => {\n if(photo) imageUrl.value = photo;\n});\n\nfunction onComponentClick() {\n fileInput.value.click();\n}\n\nasync function onFileChange(e) {\n let file = e.target.files[0];\n if (!file) {\n console.error(\"No file selected\");\n return;\n }\n \n // Create preview from file\n const reader = new FileReader();\n reader.onload = (e) => {\n previewUrl.value = e.target.result;\n };\n reader.readAsDataURL(file);\n \n let formData = new FormData();\n formData.append(\"file\", file);\n\n console.log(\"Sending file:\", file.name); // Логируем имя файла перед отправкой\n \n loading.value = true;\n\n try {\n const $axios = axios.create({ baseURL: process.env.API_URL, withCredentials: true }); \n\n let response = await $axios.post(`/api/upload/multiple?folderName=${encodeURIComponent(props.uploadPath)}`, formData);\n console.log(\"Upload response:\", response); // Логируем ответ сервера\n imageUrl.value = response.data[0].filepath;\n previewUrl.value = null; // Clear preview after successful upload\n emit('update:photo', imageUrl.value);\n } catch (error) {\n emit('error', error);\n console.error(\"Upload error:\", error); // Логируем ошибку\n previewUrl.value = null; // Clear preview on error\n } finally {\n loading.value = false;\n }\n}\n\n\nfunction onDrop(e) {\n e.preventDefault();\n onFileChange({\n target: {\n files: e.dataTransfer.files\n }\n });\n}\n\nfunction deleteImage() {\n imageUrl.value = null;\n previewUrl.value = null;\n emit('update:photo', null);\n // Reset file input\n if (fileInput.value) {\n fileInput.value.value = '';\n }\n}\n</script>\n\n<style scoped>\n.image-upload-area {\n overflow: hidden;\n transition: all 0.3s ease;\n}\n\n.image-upload-area:hover {\n opacity: 0.95;\n}\n\n/* Hover controls */\n.hover-controls {\n top: 0;\n left: 0;\n background: rgba(0, 0, 0, 0.7);\n opacity: 0;\n transition: opacity 0.3s ease;\n pointer-events: none;\n}\n\n.image-upload-area:hover .hover-controls {\n opacity: 1;\n pointer-events: all;\n}\n\n.hover-upload-icon {\n animation: pulse 1.5s infinite;\n}\n\n.hover-button {\n transition: transform 0.2s ease, background-color 0.2s ease;\n}\n\n.hover-button:hover {\n transform: scale(1.1);\n}\n\n.hover-button:active {\n transform: scale(0.95);\n}\n\n/* Loading overlay */\n.loading-overlay {\n top: 0;\n left: 0;\n background: rgba(255, 255, 255, 0.9);\n z-index: 10;\n}\n\n/* Animations */\n@keyframes pulse {\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(1.05);\n opacity: 0.8;\n }\n 100% {\n transform: scale(1);\n opacity: 1;\n }\n}\n\n/* Upload icon in empty state */\n.upload-icon {\n transition: transform 0.3s ease;\n}\n\n.image-upload-area:hover .upload-icon {\n transform: scale(1.1);\n}\n</style>\n"],"names":["ref","computed","watch","e"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEA,UAAM,WAAWA,IAAAA,IAAI,IAAI;AACzB,UAAM,YAAYA,IAAAA,IAAI,IAAI;AAC1B,UAAM,aAAaA,IAAAA,IAAI,IAAI;AAC3B,UAAM,UAAUA,IAAAA,IAAI,KAAK;AAEzB,UAAM,QAAQ;AAed,UAAM,OAAO;AAGb,UAAM,aAAaC,IAAAA,SAAS,MAAM;AAChC,YAAM,WAAW;AAAA,QACf,OAAO;AAAA,QACP,UAAU;AAAA,QACV,YAAY;AAAA,MAChB;AAEE,UAAI,MAAM,SAAS,MAAM;AACvB,eAAO;AAAA,MACT,WAAW,OAAO,MAAM,SAAS,YAAY,MAAM,SAAS,MAAM;AAChE,eAAO;AAAA,UACL,OAAO,MAAM,KAAK,SAAS,SAAS;AAAA,UACpC,UAAU,MAAM,KAAK,YAAY,SAAS;AAAA,UAC1C,YAAY,MAAM,KAAK,cAAc,SAAS;AAAA,QACpD;AAAA,MACE;AAEA,aAAO;AAAA,IACT,CAAC;AAEDC,QAAAA,MAAM,OAAO,CAAC,EAAC,MAAK,MAAM;AACxB,UAAG,MAAO,UAAS,QAAQ;AAAA,IAC7B,CAAC;AAED,aAAS,mBAAmB;AAC1B,gBAAU,MAAM,MAAK;AAAA,IACvB;AAEA,mBAAe,aAAa,GAAG;AAC7B,UAAI,OAAO,EAAE,OAAO,MAAM,CAAC;AAC3B,UAAI,CAAC,MAAM;AACT,gBAAQ,MAAM,kBAAkB;AAChC;AAAA,MACF;AAGA,YAAM,SAAS,IAAI,WAAU;AAC7B,aAAO,SAAS,CAACC,OAAM;AACrB,mBAAW,QAAQA,GAAE,OAAO;AAAA,MAC9B;AACA,aAAO,cAAc,IAAI;AAEzB,UAAI,WAAW,IAAI,SAAQ;AAC3B,eAAS,OAAO,QAAQ,IAAI;AAE5B,cAAQ,IAAI,iBAAiB,KAAK,IAAI;AAEtC,cAAQ,QAAQ;AAEhB,UAAI;AACF,cAAM,SAAS,MAAM,OAAO,EAAE,SAAS,QAAQ,IAAI,SAAS,iBAAiB,KAAI,CAAE;AAEnF,YAAI,WAAW,MAAM,OAAO,KAAK,mCAAmC,mBAAmB,MAAM,UAAU,CAAC,IAAI,QAAQ;AACpH,gBAAQ,IAAI,oBAAoB,QAAQ;AACxC,iBAAS,QAAQ,SAAS,KAAK,CAAC,EAAE;AAClC,mBAAW,QAAQ;AACnB,aAAK,gBAAgB,SAAS,KAAK;AAAA,MACrC,SAAS,OAAO;AACd,aAAK,SAAS,KAAK;AACnB,gBAAQ,MAAM,iBAAiB,KAAK;AACpC,mBAAW,QAAQ;AAAA,MACrB,UAAC;AACC,gBAAQ,QAAQ;AAAA,MAClB;AAAA,IACF;AAGA,aAAS,OAAO,GAAG;AACjB,QAAE,eAAc;AAChB,mBAAa;AAAA,QACX,QAAQ;AAAA,UACN,OAAO,EAAE,aAAa;AAAA,QAC5B;AAAA,MACA,CAAG;AAAA,IACH;AAEA,aAAS,cAAc;AACrB,eAAS,QAAQ;AACjB,iBAAW,QAAQ;AACnB,WAAK,gBAAgB,IAAI;AAEzB,UAAI,UAAU,OAAO;AACnB,kBAAU,MAAM,QAAQ;AAAA,MAC1B;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"THC.vue2.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"THC.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}