@ozdao/martyrs 0.2.540 → 0.2.542

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/dist/_virtual/index.cjs +4 -4
  2. package/dist/_virtual/index.js +4 -4
  3. package/dist/_virtual/index2.cjs +3 -6
  4. package/dist/_virtual/index2.cjs.map +1 -1
  5. package/dist/_virtual/index2.js +2 -5
  6. package/dist/_virtual/index2.js.map +1 -1
  7. package/dist/{globals.verifier-CJ1lr-NW.cjs → globals.verifier-Bi-XLEi9.cjs} +24 -23
  8. package/dist/{globals.verifier-BhqUrneb.js → globals.verifier-gPPX_jhf.js} +24 -23
  9. package/dist/inventory.server.cjs +1 -1
  10. package/dist/inventory.server.js +1 -1
  11. package/dist/{main-gOfhekZG.js → main-ByKkD9qa.js} +2857 -3276
  12. package/dist/main-Czyu-VcC.cjs +11 -0
  13. package/dist/martyrs/src/components/Button/{Button.vue2.cjs → Button.vue.cjs} +2 -2
  14. package/dist/martyrs/src/components/Button/{Button.vue2.js.map → Button.vue.cjs.map} +1 -1
  15. package/dist/martyrs/src/components/Button/{Button.vue2.js → Button.vue.js} +2 -2
  16. package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -0
  17. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +1 -1
  18. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +1 -1
  19. package/dist/martyrs/src/components/FieldTags/BlockTags.vue.cjs +30 -21
  20. package/dist/martyrs/src/components/FieldTags/BlockTags.vue.cjs.map +1 -1
  21. package/dist/martyrs/src/components/FieldTags/BlockTags.vue.js +32 -23
  22. package/dist/martyrs/src/components/FieldTags/BlockTags.vue.js.map +1 -1
  23. package/dist/martyrs/src/components/FieldTags/FieldTags.vue2.cjs +235 -0
  24. package/dist/martyrs/src/components/FieldTags/FieldTags.vue2.cjs.map +1 -0
  25. package/dist/martyrs/src/components/FieldTags/FieldTags.vue2.js +235 -0
  26. package/dist/martyrs/src/components/FieldTags/FieldTags.vue2.js.map +1 -0
  27. package/dist/martyrs/src/components/Marquee/Marquee.vue.cjs +17 -8
  28. package/dist/martyrs/src/components/Marquee/Marquee.vue.cjs.map +1 -1
  29. package/dist/martyrs/src/components/Marquee/Marquee.vue.js +17 -8
  30. package/dist/martyrs/src/components/Marquee/Marquee.vue.js.map +1 -1
  31. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.cjs +161 -42
  32. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.cjs.map +1 -1
  33. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js +162 -43
  34. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js.map +1 -1
  35. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +1 -1
  36. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
  37. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +1 -1
  38. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
  39. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +1 -1
  40. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +1 -1
  41. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.cjs +1 -1
  42. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +1 -1
  43. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +1 -1
  44. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +4 -4
  45. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +1 -1
  46. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
  47. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +1 -1
  48. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
  49. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +1 -1
  50. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
  51. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.cjs +1 -1
  52. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +1 -1
  53. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
  54. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
  55. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -4
  56. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs.map +1 -1
  57. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -4
  58. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js.map +1 -1
  59. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +2 -2
  60. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.cjs +1 -1
  61. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
  62. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.cjs +1 -1
  63. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
  64. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
  65. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +21 -21
  66. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
  67. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
  68. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
  69. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
  70. package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
  71. package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
  72. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +1 -1
  73. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +1 -1
  74. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.cjs +1 -1
  75. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.js +1 -1
  76. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +1 -1
  77. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +1 -1
  78. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +1 -1
  79. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +1 -1
  80. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +1 -1
  81. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +1 -1
  82. package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.cjs +1 -1
  83. package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.js +1 -1
  84. package/dist/martyrs/src/modules/globals/views/store/globals.cjs +2 -2
  85. package/dist/martyrs/src/modules/globals/views/store/globals.cjs.map +1 -1
  86. package/dist/martyrs/src/modules/globals/views/store/globals.js +2 -2
  87. package/dist/martyrs/src/modules/globals/views/store/globals.js.map +1 -1
  88. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +1 -1
  89. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +1 -1
  90. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.cjs +1 -1
  91. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
  92. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.cjs +1 -1
  93. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
  94. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +1 -1
  95. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +1 -1
  96. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +1 -1
  97. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
  98. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +1 -1
  99. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
  100. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.cjs +1 -1
  101. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +1 -1
  102. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +1 -1
  103. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
  104. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +1 -1
  105. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
  106. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +1 -1
  107. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +11 -11
  108. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +1 -1
  109. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +12 -12
  110. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +1 -1
  111. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +16 -16
  112. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +1 -1
  113. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
  114. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +1 -1
  115. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +16 -16
  116. package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +1 -1
  117. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
  118. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +1 -1
  119. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
  120. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +1 -1
  121. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
  122. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +1 -1
  123. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +1 -1
  124. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +1 -1
  125. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
  126. package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +1 -1
  127. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
  128. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.cjs +1 -1
  129. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
  130. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +1 -1
  131. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
  132. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.cjs +1 -1
  133. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +1 -1
  134. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.cjs +1 -1
  135. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +1 -1
  136. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.cjs +1 -1
  137. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +1 -1
  138. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
  139. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
  140. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +1 -1
  141. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
  142. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +1 -1
  143. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
  144. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.cjs +1 -1
  145. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
  146. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.cjs +1 -1
  147. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
  148. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +3 -4
  149. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs.map +1 -1
  150. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +3 -4
  151. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js.map +1 -1
  152. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +1 -1
  153. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  154. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs +1 -1
  155. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +1 -1
  156. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs +1 -1
  157. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +20 -20
  158. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs +1 -1
  159. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +1 -1
  160. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +3 -4
  161. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs.map +1 -1
  162. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +3 -4
  163. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js.map +1 -1
  164. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +4 -5
  165. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs.map +1 -1
  166. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +4 -5
  167. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js.map +1 -1
  168. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +2 -3
  169. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs.map +1 -1
  170. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +2 -3
  171. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
  172. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
  173. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +6 -6
  174. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
  175. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -1
  176. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
  177. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
  178. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
  179. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
  180. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -1
  181. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
  182. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -1
  183. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
  184. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.cjs +1 -1
  185. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
  186. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.cjs +1 -1
  187. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js +1 -1
  188. package/dist/martyrs/src/modules/products/components/elements/{THC.vue2.cjs → THC.vue.cjs} +2 -2
  189. package/dist/martyrs/src/modules/products/components/elements/THC.vue.cjs.map +1 -0
  190. package/dist/martyrs/src/modules/products/components/elements/{THC.vue2.js → THC.vue.js} +2 -2
  191. package/dist/martyrs/src/modules/products/components/elements/THC.vue.js.map +1 -0
  192. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +1 -1
  193. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +1 -1
  194. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +63 -39
  195. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
  196. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +69 -45
  197. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
  198. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +1 -1
  199. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
  200. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
  201. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
  202. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +1 -1
  203. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
  204. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +1 -1
  205. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
  206. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +1 -1
  207. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +1 -1
  208. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs +1 -1
  209. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
  210. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs +1 -1
  211. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
  212. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +2 -2
  213. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +2 -2
  214. package/dist/martyrs/src/modules/products/store/categories.cjs +4 -0
  215. package/dist/martyrs/src/modules/products/store/categories.cjs.map +1 -1
  216. package/dist/martyrs/src/modules/products/store/categories.js +4 -0
  217. package/dist/martyrs/src/modules/products/store/categories.js.map +1 -1
  218. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +1 -1
  219. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
  220. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
  221. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
  222. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.cjs +1 -1
  223. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
  224. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +1 -1
  225. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +11 -11
  226. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +1 -1
  227. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
  228. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +1 -1
  229. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +1 -1
  230. package/dist/martyrs.cjs.js +1 -1
  231. package/dist/martyrs.css +1 -1
  232. package/dist/martyrs.es.js +1 -1
  233. package/dist/music.server.cjs +1 -1
  234. package/dist/music.server.js +1 -1
  235. package/dist/node_modules/.pnpm/lodash.merge@4.6.2/node_modules/lodash.merge/index.cjs +1 -1
  236. package/dist/node_modules/.pnpm/lodash.merge@4.6.2/node_modules/lodash.merge/index.js +1 -1
  237. package/dist/orders.server.cjs +1 -1
  238. package/dist/orders.server.js +1 -1
  239. package/dist/organizations.server.cjs +1 -1
  240. package/dist/organizations.server.js +1 -1
  241. package/dist/products.server.cjs +10 -2
  242. package/dist/products.server.js +10 -2
  243. package/dist/rents.server.cjs +1 -1
  244. package/dist/rents.server.js +1 -1
  245. package/dist/style.css +129 -129
  246. package/dist/{web-DxxU2bwy.js → web-BklgIiYr.js} +1 -1
  247. package/dist/{web-bMa0DMyG.cjs → web-CQBm7C6L.cjs} +1 -1
  248. package/package.json +1 -1
  249. package/src/components/FieldTags/BlockTags.vue +28 -16
  250. package/src/components/FieldTags/FieldTags.vue +327 -508
  251. package/src/components/Marquee/Marquee.vue +25 -14
  252. package/src/components/UploadImage/UploadImage.vue +192 -18
  253. package/src/modules/community/components/pages/CreateBlogPost.vue +0 -1
  254. package/src/modules/globals/controllers/classes/globals.validator.js +24 -23
  255. package/src/modules/globals/views/store/globals.js +2 -2
  256. package/src/modules/products/components/pages/CategoryEdit.vue +73 -39
  257. package/src/modules/products/middlewares/categories.verifier.js +9 -1
  258. package/src/modules/products/store/categories.js +5 -0
  259. package/dist/_virtual/index3.cjs +0 -5
  260. package/dist/_virtual/index3.cjs.map +0 -1
  261. package/dist/_virtual/index3.js +0 -5
  262. package/dist/_virtual/index3.js.map +0 -1
  263. package/dist/main-Zhs0EqRp.cjs +0 -11
  264. package/dist/martyrs/src/components/Button/Button.vue2.cjs.map +0 -1
  265. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +0 -480
  266. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs.map +0 -1
  267. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +0 -480
  268. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js.map +0 -1
  269. package/dist/martyrs/src/components/FieldTags/create-tags.cjs +0 -43
  270. package/dist/martyrs/src/components/FieldTags/create-tags.cjs.map +0 -1
  271. package/dist/martyrs/src/components/FieldTags/create-tags.js +0 -43
  272. package/dist/martyrs/src/components/FieldTags/create-tags.js.map +0 -1
  273. package/dist/martyrs/src/components/FieldTags/tag-input.vue2.cjs +0 -32
  274. package/dist/martyrs/src/components/FieldTags/tag-input.vue2.cjs.map +0 -1
  275. package/dist/martyrs/src/components/FieldTags/tag-input.vue2.js +0 -32
  276. package/dist/martyrs/src/components/FieldTags/tag-input.vue2.js.map +0 -1
  277. package/dist/martyrs/src/components/FieldTags/vue-tags-input.props.cjs +0 -329
  278. package/dist/martyrs/src/components/FieldTags/vue-tags-input.props.cjs.map +0 -1
  279. package/dist/martyrs/src/components/FieldTags/vue-tags-input.props.js +0 -329
  280. package/dist/martyrs/src/components/FieldTags/vue-tags-input.props.js.map +0 -1
  281. package/dist/martyrs/src/modules/products/components/elements/THC.vue2.cjs.map +0 -1
  282. package/dist/martyrs/src/modules/products/components/elements/THC.vue2.js.map +0 -1
  283. package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.cjs +0 -39
  284. package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.cjs.map +0 -1
  285. package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js +0 -39
  286. package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js.map +0 -1
  287. package/src/components/FieldTags/create-tags.js +0 -84
  288. package/src/components/FieldTags/tag-input.vue +0 -55
  289. package/src/components/FieldTags/vue-tags-input.props.js +0 -342
  290. package/src/components/FieldTags/vue-tags-input.scss +0 -149
@@ -2,25 +2,81 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
4
  const axios = require("axios");
5
+ const Loader = require("../Loader/Loader.vue2.cjs");
6
+ const IconUpload = ;/* empty css */
7
+ const IconDelete = require("../../modules/icons/navigation/IconDelete.vue.cjs");
8
+ ;/* empty css */
9
+ const _pluginVue_exportHelper = require("../../../../_virtual/_plugin-vue_export-helper.cjs");
5
10
  const _hoisted_1 = ["src"];
6
11
  const _hoisted_2 = {
7
12
  key: 1,
8
- class: "flex-v-center flex-h-center flex w-100 h-100 bg-second"
13
+ class: "flex-v-center z-index-2 flex-h-center flex w-100 h-100 bg-second"
14
+ };
15
+ const _hoisted_3 = { class: "z-index-2 hover-controls pos-absolute w-100 h-100 flex-v-center flex-h-center flex" };
16
+ const _hoisted_4 = {
17
+ key: 0,
18
+ class: "hover-upload-icon"
19
+ };
20
+ const _hoisted_5 = {
21
+ key: 1,
22
+ class: "hover-buttons flex gap-small"
23
+ };
24
+ const _hoisted_6 = {
25
+ key: 2,
26
+ class: "z-index-2 loading-overlay pos-absolute w-100 h-100 flex-v-center flex-h-center flex"
27
+ };
28
+ const _hoisted_7 = {
29
+ key: 0,
30
+ class: "upload-text-block flex flex-column"
31
+ };
32
+ const _hoisted_8 = { class: "mn-b-small t-medium" };
33
+ const _hoisted_9 = { class: "mn-b-medium t-transp" };
34
+ const _hoisted_10 = { key: 0 };
35
+ const _hoisted_11 = {
36
+ key: 1,
37
+ class: "flex gap-thin"
9
38
  };
10
39
  const _sfc_main = {
11
40
  __name: "UploadImage",
12
- props: [
13
- "uploadPath",
14
- // only necessary prop
15
- "photo"
16
- // new prop for holding the image url
17
- ],
41
+ props: {
42
+ uploadPath: {
43
+ type: String,
44
+ required: true
45
+ },
46
+ photo: {
47
+ type: String,
48
+ default: null
49
+ },
50
+ text: {
51
+ type: [Object, Boolean],
52
+ default: null
53
+ }
54
+ },
18
55
  emits: ["update:photo", "error"],
19
56
  setup(__props, { emit: __emit }) {
20
57
  const imageUrl = vue.ref(null);
21
58
  const fileInput = vue.ref(null);
59
+ const previewUrl = vue.ref(null);
60
+ const loading = vue.ref(false);
22
61
  const props = __props;
23
62
  const emit = __emit;
63
+ const textConfig = vue.computed(() => {
64
+ const defaults = {
65
+ title: "Upload Image",
66
+ subtitle: "Drag & drop your image here or click button. Supported: JPG, PNG, GIF. Max size: 2MB",
67
+ buttonText: "Choose Image"
68
+ };
69
+ if (props.text === true) {
70
+ return defaults;
71
+ } else if (typeof props.text === "object" && props.text !== null) {
72
+ return {
73
+ title: props.text.title || defaults.title,
74
+ subtitle: props.text.subtitle || defaults.subtitle,
75
+ buttonText: props.text.buttonText || defaults.buttonText
76
+ };
77
+ }
78
+ return defaults;
79
+ });
24
80
  vue.watch(props, ({ photo }) => {
25
81
  if (photo) imageUrl.value = photo;
26
82
  });
@@ -33,18 +89,28 @@ const _sfc_main = {
33
89
  console.error("No file selected");
34
90
  return;
35
91
  }
92
+ const reader = new FileReader();
93
+ reader.onload = (e2) => {
94
+ previewUrl.value = e2.target.result;
95
+ };
96
+ reader.readAsDataURL(file);
36
97
  let formData = new FormData();
37
98
  formData.append("file", file);
38
99
  console.log("Sending file:", file.name);
100
+ loading.value = true;
39
101
  try {
40
102
  const $axios = axios.create({ baseURL: process.env.API_URL, withCredentials: true });
41
103
  let response = await $axios.post(`/api/upload/multiple?folderName=${encodeURIComponent(props.uploadPath)}`, formData);
42
104
  console.log("Upload response:", response);
43
105
  imageUrl.value = response.data[0].filepath;
106
+ previewUrl.value = null;
44
107
  emit("update:photo", imageUrl.value);
45
108
  } catch (error) {
46
109
  emit("error", error);
47
110
  console.error("Upload error:", error);
111
+ previewUrl.value = null;
112
+ } finally {
113
+ loading.value = false;
48
114
  }
49
115
  }
50
116
  function onDrop(e) {
@@ -55,46 +121,99 @@ const _sfc_main = {
55
121
  }
56
122
  });
57
123
  }
124
+ function deleteImage() {
125
+ imageUrl.value = null;
126
+ previewUrl.value = null;
127
+ emit("update:photo", null);
128
+ if (fileInput.value) {
129
+ fileInput.value.value = "";
130
+ }
131
+ }
58
132
  return (_ctx, _cache) => {
59
133
  return vue.openBlock(), vue.createElementBlock("div", {
60
- onClick: onComponentClick,
61
- onDrop,
62
- onDragover: _cache[0] || (_cache[0] = vue.withModifiers(() => {
63
- }, ["prevent"])),
64
- class: "image-upload-area flex-v-center flex-h-center flex"
134
+ class: vue.normalizeClass(["upload-image-wrapper flex-v-center flex-nowrap flex gap-small", { "with-text": __props.text }])
65
135
  }, [
66
- imageUrl.value || __props.photo ? (vue.openBlock(), vue.createElementBlock("img", {
67
- key: 0,
68
- loading: "lazy",
69
- src: (_ctx.FILE_SERVER_URL || "") + (imageUrl.value || __props.photo),
70
- alt: "Uploaded image",
71
- class: "w-100 h-100 object-fit-cover"
72
- }, null, 8, _hoisted_1)) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_2, _cache[1] || (_cache[1] = [
73
- vue.createElementVNode("svg", {
74
- class: "i-medium",
75
- width: "104",
76
- height: "104",
77
- viewBox: "0 0 104 104",
78
- fill: "none",
79
- xmlns: "http://www.w3.org/2000/svg"
80
- }, [
81
- vue.createElementVNode("path", {
82
- fill: "rgb(var(--white))",
83
- d: "M21.2784 37.2973C18.8466 34.6628 18.8466 30.6098 21.2784 27.9753L47.2179 2.03584C48.6364 0.81993 50.2577 0.211974 51.8789 0.211974C53.5001 0.211974 55.1213 0.81993 56.5399 2.03584L82.4793 27.9753C84.9111 30.6098 84.9111 34.6628 82.4793 37.2973C79.8448 39.7291 75.7918 39.7291 73.1573 37.2973L58.3637 22.301V71.5454C58.3637 75.1932 55.5266 78.0303 51.8789 78.0303C48.2311 78.0303 45.394 75.1932 45.394 71.5454V22.301L30.6004 37.2973C27.966 39.7291 23.9129 39.7291 21.2784 37.2973ZM97.2729 71.5454C100.921 71.5454 103.758 74.3825 103.758 78.0303V97.4849C103.758 101.133 100.921 103.97 97.2729 103.97H6.48486C2.83713 103.97 0 101.133 0 97.4849V78.0303C0 74.3825 2.83713 71.5454 6.48486 71.5454H38.9092C38.9092 78.6382 44.7861 84.5151 51.8789 84.5151C58.9717 84.5151 64.8486 78.6382 64.8486 71.5454H97.2729ZM87.5456 92.6212C90.1801 92.6212 92.4092 90.392 92.4092 87.7576C92.4092 85.1231 90.1801 82.8939 87.5456 82.8939C84.9111 82.8939 82.682 85.1231 82.682 87.7576C82.682 90.392 84.9111 92.6212 87.5456 92.6212Z"
136
+ vue.createElementVNode("div", {
137
+ onClick: onComponentClick,
138
+ onDrop,
139
+ onDragover: _cache[0] || (_cache[0] = vue.withModifiers(() => {
140
+ }, ["prevent"])),
141
+ class: "pos-relative bg-light radius-small br-solid br-1px br-black-transp-10 h-100 aspect-1x1 flex-v-center flex-h-center flex cursor-pointer"
142
+ }, [
143
+ imageUrl.value || __props.photo || previewUrl.value ? (vue.openBlock(), vue.createElementBlock("img", {
144
+ key: 0,
145
+ loading: "lazy",
146
+ src: previewUrl.value || (_ctx.FILE_SERVER_URL || "") + (imageUrl.value || __props.photo),
147
+ alt: "Uploaded image",
148
+ class: "pos-absolute z-index-1 w-100 h-100 object-fit-cover"
149
+ }, null, 8, _hoisted_1)) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_2, [
150
+ vue.createVNode(IconUpload.default, {
151
+ class: "i-medium upload-icon",
152
+ fill: "rgb(var(--white))"
84
153
  })
85
- ], -1)
86
- ]))),
87
- vue.createElementVNode("input", {
88
- type: "file",
89
- name: "file",
90
- ref_key: "fileInput",
91
- ref: fileInput,
92
- onChange: onFileChange,
93
- style: { "display": "none" }
94
- }, null, 544)
95
- ], 32);
154
+ ])),
155
+ vue.createElementVNode("div", _hoisted_3, [
156
+ !imageUrl.value && !__props.photo && !previewUrl.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4, [
157
+ vue.createVNode(IconUpload.default, {
158
+ class: "i-medium",
159
+ fill: "rgb(var(--white))"
160
+ })
161
+ ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_5, [
162
+ vue.createElementVNode("button", {
163
+ onClick: vue.withModifiers(onComponentClick, ["stop"]),
164
+ class: "hover-button radius-small pd-thin bg-main t-white br-none cursor-pointer"
165
+ }, [
166
+ vue.createVNode(IconUpload.default, {
167
+ class: "i-semi",
168
+ fill: "rgb(var(--white))"
169
+ })
170
+ ]),
171
+ vue.createElementVNode("button", {
172
+ onClick: vue.withModifiers(deleteImage, ["stop"]),
173
+ class: "hover-button radius-small pd-thin bg-danger t-white br-none cursor-pointer"
174
+ }, [
175
+ vue.createVNode(IconDelete.default, {
176
+ class: "i-semi",
177
+ fill: "rgb(var(--white))"
178
+ })
179
+ ])
180
+ ]))
181
+ ]),
182
+ loading.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6, [
183
+ vue.createVNode(Loader.default, { centered: false })
184
+ ])) : vue.createCommentVNode("", true),
185
+ vue.createElementVNode("input", {
186
+ type: "file",
187
+ name: "file",
188
+ ref_key: "fileInput",
189
+ ref: fileInput,
190
+ onChange: onFileChange,
191
+ style: { "display": "none" }
192
+ }, null, 544)
193
+ ], 32),
194
+ __props.text ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7, [
195
+ vue.createElementVNode("span", _hoisted_8, vue.toDisplayString(textConfig.value.title), 1),
196
+ vue.createElementVNode("span", _hoisted_9, vue.toDisplayString(textConfig.value.subtitle), 1),
197
+ !imageUrl.value && !__props.photo && !previewUrl.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10, [
198
+ vue.createElementVNode("button", {
199
+ onClick: onComponentClick,
200
+ class: "button button-small w-max bg-main t-black cursor-pointer"
201
+ }, vue.toDisplayString(textConfig.value.buttonText), 1)
202
+ ])) : (vue.openBlock(), vue.createElementBlock("div", _hoisted_11, [
203
+ vue.createElementVNode("button", {
204
+ onClick: onComponentClick,
205
+ class: "button button-small w-max bg-second t-white cursor-pointer"
206
+ }, " Upload "),
207
+ vue.createElementVNode("button", {
208
+ onClick: deleteImage,
209
+ class: "button button-small w-max bg-red t-white cursor-pointer"
210
+ }, " Delete ")
211
+ ]))
212
+ ])) : vue.createCommentVNode("", true)
213
+ ], 2);
96
214
  };
97
215
  }
98
216
  };
99
- exports.default = _sfc_main;
217
+ const UploadImage = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-78cc3140"]]);
218
+ exports.default = UploadImage;
100
219
  //# sourceMappingURL=UploadImage.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"UploadImage.vue.cjs","sources":["../../../../../src/components/UploadImage/UploadImage.vue"],"sourcesContent":["<template>\n <div \n @click=\"onComponentClick\"\n @drop=\"onDrop\"\n @dragover.prevent\n class=\"image-upload-area flex-v-center flex-h-center flex\">\n <img loading=\"lazy\" \n v-if=\"imageUrl || photo\" \n :src=\"(FILE_SERVER_URL || '') + (imageUrl || photo)\"\n alt=\"Uploaded image\" \n class=\"w-100 h-100 object-fit-cover\"\n />\n \n <div v-else class=\"flex-v-center flex-h-center flex w-100 h-100 bg-second\" >\n <svg class=\"i-medium\" width=\"104\" height=\"104\" viewBox=\"0 0 104 104\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill=\"rgb(var(--white))\" d=\"M21.2784 37.2973C18.8466 34.6628 18.8466 30.6098 21.2784 27.9753L47.2179 2.03584C48.6364 0.81993 50.2577 0.211974 51.8789 0.211974C53.5001 0.211974 55.1213 0.81993 56.5399 2.03584L82.4793 27.9753C84.9111 30.6098 84.9111 34.6628 82.4793 37.2973C79.8448 39.7291 75.7918 39.7291 73.1573 37.2973L58.3637 22.301V71.5454C58.3637 75.1932 55.5266 78.0303 51.8789 78.0303C48.2311 78.0303 45.394 75.1932 45.394 71.5454V22.301L30.6004 37.2973C27.966 39.7291 23.9129 39.7291 21.2784 37.2973ZM97.2729 71.5454C100.921 71.5454 103.758 74.3825 103.758 78.0303V97.4849C103.758 101.133 100.921 103.97 97.2729 103.97H6.48486C2.83713 103.97 0 101.133 0 97.4849V78.0303C0 74.3825 2.83713 71.5454 6.48486 71.5454H38.9092C38.9092 78.6382 44.7861 84.5151 51.8789 84.5151C58.9717 84.5151 64.8486 78.6382 64.8486 71.5454H97.2729ZM87.5456 92.6212C90.1801 92.6212 92.4092 90.392 92.4092 87.7576C92.4092 85.1231 90.1801 82.8939 87.5456 82.8939C84.9111 82.8939 82.682 85.1231 82.682 87.7576C82.682 90.392 84.9111 92.6212 87.5456 92.6212Z\"/>\n </svg>\n </div>\n \n <input type=\"file\" name=\"file\" ref=\"fileInput\" @change=\"onFileChange\" style=\"display: none\"/>\n </div>\n</template>\n\n<script setup>\nimport { ref, watch } from 'vue';\nimport axios from 'axios';\n\nconst imageUrl = ref(null);\nconst fileInput = ref(null);\n\nconst props = defineProps([\n 'uploadPath', // only necessary prop\n 'photo' // new prop for holding the image url\n]);\n\nconst emit = defineEmits(['update:photo', 'error']);\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 let formData = new FormData();\n formData.append(\"file\", file);\n\n console.log(\"Sending file:\", file.name); // Логируем имя файла перед отправкой\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 emit('update:photo', imageUrl.value);\n } catch (error) {\n emit('error', error);\n console.error(\"Upload error:\", error); // Логируем ошибку\n }\n}\n\n\nfunction onDrop(e) {\n e.preventDefault();\n onFileChange({\n target: {\n files: e.dataTransfer.files\n }\n });\n}\n</script>\n"],"names":["ref","watch"],"mappings":";;;;;;;;;;;;;;;;;;;AA2BA,UAAM,WAAWA,IAAAA,IAAI,IAAI;AACzB,UAAM,YAAYA,IAAAA,IAAI,IAAI;AAE1B,UAAM,QAAQ;AAKd,UAAM,OAAO;AAEbC,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;AAEA,UAAI,WAAW,IAAI,SAAQ;AAC3B,eAAS,OAAO,QAAQ,IAAI;AAE5B,cAAQ,IAAI,iBAAiB,KAAK,IAAI;AAEtC,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,aAAK,gBAAgB,SAAS,KAAK;AAAA,MACrC,SAAS,OAAO;AACd,aAAK,SAAS,KAAK;AACnB,gBAAQ,MAAM,iBAAiB,KAAK;AAAA,MACtC;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
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 bg-light radius-small br-solid br-1px br-black-transp-10 h-100 aspect-1x1 flex-v-center flex-h-center flex cursor-pointer\"\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 z-index-1 w-100 h-100 object-fit-cover\"\n />\n \n <div v-else class=\"flex-v-center z-index-2 flex-h-center flex w-100 h-100 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 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-semi\" 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-semi\" 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,24 +1,80 @@
1
- import { ref, watch, createElementBlock, openBlock, withModifiers, createElementVNode } from "vue";
1
+ import { ref, computed, watch, createElementBlock, openBlock, normalizeClass, createElementVNode, createCommentVNode, withModifiers, createVNode, toDisplayString } from "vue";
2
2
  import axios from "axios";
3
+ import Loader from "../Loader/Loader.vue2.js";
4
+ import _sfc_main$1 from "../../modules/icons/navigation/IconUpload.vue.js";
5
+ import _sfc_main$2 from "../../modules/icons/navigation/IconDelete.vue.js";
6
+ /* empty css */
7
+ import _export_sfc from "../../../../_virtual/_plugin-vue_export-helper.js";
3
8
  const _hoisted_1 = ["src"];
4
9
  const _hoisted_2 = {
5
10
  key: 1,
6
- class: "flex-v-center flex-h-center flex w-100 h-100 bg-second"
11
+ class: "flex-v-center z-index-2 flex-h-center flex w-100 h-100 bg-second"
12
+ };
13
+ const _hoisted_3 = { class: "z-index-2 hover-controls pos-absolute w-100 h-100 flex-v-center flex-h-center flex" };
14
+ const _hoisted_4 = {
15
+ key: 0,
16
+ class: "hover-upload-icon"
17
+ };
18
+ const _hoisted_5 = {
19
+ key: 1,
20
+ class: "hover-buttons flex gap-small"
21
+ };
22
+ const _hoisted_6 = {
23
+ key: 2,
24
+ class: "z-index-2 loading-overlay pos-absolute w-100 h-100 flex-v-center flex-h-center flex"
25
+ };
26
+ const _hoisted_7 = {
27
+ key: 0,
28
+ class: "upload-text-block flex flex-column"
29
+ };
30
+ const _hoisted_8 = { class: "mn-b-small t-medium" };
31
+ const _hoisted_9 = { class: "mn-b-medium t-transp" };
32
+ const _hoisted_10 = { key: 0 };
33
+ const _hoisted_11 = {
34
+ key: 1,
35
+ class: "flex gap-thin"
7
36
  };
8
37
  const _sfc_main = {
9
38
  __name: "UploadImage",
10
- props: [
11
- "uploadPath",
12
- // only necessary prop
13
- "photo"
14
- // new prop for holding the image url
15
- ],
39
+ props: {
40
+ uploadPath: {
41
+ type: String,
42
+ required: true
43
+ },
44
+ photo: {
45
+ type: String,
46
+ default: null
47
+ },
48
+ text: {
49
+ type: [Object, Boolean],
50
+ default: null
51
+ }
52
+ },
16
53
  emits: ["update:photo", "error"],
17
54
  setup(__props, { emit: __emit }) {
18
55
  const imageUrl = ref(null);
19
56
  const fileInput = ref(null);
57
+ const previewUrl = ref(null);
58
+ const loading = ref(false);
20
59
  const props = __props;
21
60
  const emit = __emit;
61
+ const textConfig = computed(() => {
62
+ const defaults = {
63
+ title: "Upload Image",
64
+ subtitle: "Drag & drop your image here or click button. Supported: JPG, PNG, GIF. Max size: 2MB",
65
+ buttonText: "Choose Image"
66
+ };
67
+ if (props.text === true) {
68
+ return defaults;
69
+ } else if (typeof props.text === "object" && props.text !== null) {
70
+ return {
71
+ title: props.text.title || defaults.title,
72
+ subtitle: props.text.subtitle || defaults.subtitle,
73
+ buttonText: props.text.buttonText || defaults.buttonText
74
+ };
75
+ }
76
+ return defaults;
77
+ });
22
78
  watch(props, ({ photo }) => {
23
79
  if (photo) imageUrl.value = photo;
24
80
  });
@@ -31,18 +87,28 @@ const _sfc_main = {
31
87
  console.error("No file selected");
32
88
  return;
33
89
  }
90
+ const reader = new FileReader();
91
+ reader.onload = (e2) => {
92
+ previewUrl.value = e2.target.result;
93
+ };
94
+ reader.readAsDataURL(file);
34
95
  let formData = new FormData();
35
96
  formData.append("file", file);
36
97
  console.log("Sending file:", file.name);
98
+ loading.value = true;
37
99
  try {
38
100
  const $axios = axios.create({ baseURL: process.env.API_URL, withCredentials: true });
39
101
  let response = await $axios.post(`/api/upload/multiple?folderName=${encodeURIComponent(props.uploadPath)}`, formData);
40
102
  console.log("Upload response:", response);
41
103
  imageUrl.value = response.data[0].filepath;
104
+ previewUrl.value = null;
42
105
  emit("update:photo", imageUrl.value);
43
106
  } catch (error) {
44
107
  emit("error", error);
45
108
  console.error("Upload error:", error);
109
+ previewUrl.value = null;
110
+ } finally {
111
+ loading.value = false;
46
112
  }
47
113
  }
48
114
  function onDrop(e) {
@@ -53,48 +119,101 @@ const _sfc_main = {
53
119
  }
54
120
  });
55
121
  }
122
+ function deleteImage() {
123
+ imageUrl.value = null;
124
+ previewUrl.value = null;
125
+ emit("update:photo", null);
126
+ if (fileInput.value) {
127
+ fileInput.value.value = "";
128
+ }
129
+ }
56
130
  return (_ctx, _cache) => {
57
131
  return openBlock(), createElementBlock("div", {
58
- onClick: onComponentClick,
59
- onDrop,
60
- onDragover: _cache[0] || (_cache[0] = withModifiers(() => {
61
- }, ["prevent"])),
62
- class: "image-upload-area flex-v-center flex-h-center flex"
132
+ class: normalizeClass(["upload-image-wrapper flex-v-center flex-nowrap flex gap-small", { "with-text": __props.text }])
63
133
  }, [
64
- imageUrl.value || __props.photo ? (openBlock(), createElementBlock("img", {
65
- key: 0,
66
- loading: "lazy",
67
- src: (_ctx.FILE_SERVER_URL || "") + (imageUrl.value || __props.photo),
68
- alt: "Uploaded image",
69
- class: "w-100 h-100 object-fit-cover"
70
- }, null, 8, _hoisted_1)) : (openBlock(), createElementBlock("div", _hoisted_2, _cache[1] || (_cache[1] = [
71
- createElementVNode("svg", {
72
- class: "i-medium",
73
- width: "104",
74
- height: "104",
75
- viewBox: "0 0 104 104",
76
- fill: "none",
77
- xmlns: "http://www.w3.org/2000/svg"
78
- }, [
79
- createElementVNode("path", {
80
- fill: "rgb(var(--white))",
81
- d: "M21.2784 37.2973C18.8466 34.6628 18.8466 30.6098 21.2784 27.9753L47.2179 2.03584C48.6364 0.81993 50.2577 0.211974 51.8789 0.211974C53.5001 0.211974 55.1213 0.81993 56.5399 2.03584L82.4793 27.9753C84.9111 30.6098 84.9111 34.6628 82.4793 37.2973C79.8448 39.7291 75.7918 39.7291 73.1573 37.2973L58.3637 22.301V71.5454C58.3637 75.1932 55.5266 78.0303 51.8789 78.0303C48.2311 78.0303 45.394 75.1932 45.394 71.5454V22.301L30.6004 37.2973C27.966 39.7291 23.9129 39.7291 21.2784 37.2973ZM97.2729 71.5454C100.921 71.5454 103.758 74.3825 103.758 78.0303V97.4849C103.758 101.133 100.921 103.97 97.2729 103.97H6.48486C2.83713 103.97 0 101.133 0 97.4849V78.0303C0 74.3825 2.83713 71.5454 6.48486 71.5454H38.9092C38.9092 78.6382 44.7861 84.5151 51.8789 84.5151C58.9717 84.5151 64.8486 78.6382 64.8486 71.5454H97.2729ZM87.5456 92.6212C90.1801 92.6212 92.4092 90.392 92.4092 87.7576C92.4092 85.1231 90.1801 82.8939 87.5456 82.8939C84.9111 82.8939 82.682 85.1231 82.682 87.7576C82.682 90.392 84.9111 92.6212 87.5456 92.6212Z"
134
+ createElementVNode("div", {
135
+ onClick: onComponentClick,
136
+ onDrop,
137
+ onDragover: _cache[0] || (_cache[0] = withModifiers(() => {
138
+ }, ["prevent"])),
139
+ class: "pos-relative bg-light radius-small br-solid br-1px br-black-transp-10 h-100 aspect-1x1 flex-v-center flex-h-center flex cursor-pointer"
140
+ }, [
141
+ imageUrl.value || __props.photo || previewUrl.value ? (openBlock(), createElementBlock("img", {
142
+ key: 0,
143
+ loading: "lazy",
144
+ src: previewUrl.value || (_ctx.FILE_SERVER_URL || "") + (imageUrl.value || __props.photo),
145
+ alt: "Uploaded image",
146
+ class: "pos-absolute z-index-1 w-100 h-100 object-fit-cover"
147
+ }, null, 8, _hoisted_1)) : (openBlock(), createElementBlock("div", _hoisted_2, [
148
+ createVNode(_sfc_main$1, {
149
+ class: "i-medium upload-icon",
150
+ fill: "rgb(var(--white))"
82
151
  })
83
- ], -1)
84
- ]))),
85
- createElementVNode("input", {
86
- type: "file",
87
- name: "file",
88
- ref_key: "fileInput",
89
- ref: fileInput,
90
- onChange: onFileChange,
91
- style: { "display": "none" }
92
- }, null, 544)
93
- ], 32);
152
+ ])),
153
+ createElementVNode("div", _hoisted_3, [
154
+ !imageUrl.value && !__props.photo && !previewUrl.value ? (openBlock(), createElementBlock("div", _hoisted_4, [
155
+ createVNode(_sfc_main$1, {
156
+ class: "i-medium",
157
+ fill: "rgb(var(--white))"
158
+ })
159
+ ])) : (openBlock(), createElementBlock("div", _hoisted_5, [
160
+ createElementVNode("button", {
161
+ onClick: withModifiers(onComponentClick, ["stop"]),
162
+ class: "hover-button radius-small pd-thin bg-main t-white br-none cursor-pointer"
163
+ }, [
164
+ createVNode(_sfc_main$1, {
165
+ class: "i-semi",
166
+ fill: "rgb(var(--white))"
167
+ })
168
+ ]),
169
+ createElementVNode("button", {
170
+ onClick: withModifiers(deleteImage, ["stop"]),
171
+ class: "hover-button radius-small pd-thin bg-danger t-white br-none cursor-pointer"
172
+ }, [
173
+ createVNode(_sfc_main$2, {
174
+ class: "i-semi",
175
+ fill: "rgb(var(--white))"
176
+ })
177
+ ])
178
+ ]))
179
+ ]),
180
+ loading.value ? (openBlock(), createElementBlock("div", _hoisted_6, [
181
+ createVNode(Loader, { centered: false })
182
+ ])) : createCommentVNode("", true),
183
+ createElementVNode("input", {
184
+ type: "file",
185
+ name: "file",
186
+ ref_key: "fileInput",
187
+ ref: fileInput,
188
+ onChange: onFileChange,
189
+ style: { "display": "none" }
190
+ }, null, 544)
191
+ ], 32),
192
+ __props.text ? (openBlock(), createElementBlock("div", _hoisted_7, [
193
+ createElementVNode("span", _hoisted_8, toDisplayString(textConfig.value.title), 1),
194
+ createElementVNode("span", _hoisted_9, toDisplayString(textConfig.value.subtitle), 1),
195
+ !imageUrl.value && !__props.photo && !previewUrl.value ? (openBlock(), createElementBlock("div", _hoisted_10, [
196
+ createElementVNode("button", {
197
+ onClick: onComponentClick,
198
+ class: "button button-small w-max bg-main t-black cursor-pointer"
199
+ }, toDisplayString(textConfig.value.buttonText), 1)
200
+ ])) : (openBlock(), createElementBlock("div", _hoisted_11, [
201
+ createElementVNode("button", {
202
+ onClick: onComponentClick,
203
+ class: "button button-small w-max bg-second t-white cursor-pointer"
204
+ }, " Upload "),
205
+ createElementVNode("button", {
206
+ onClick: deleteImage,
207
+ class: "button button-small w-max bg-red t-white cursor-pointer"
208
+ }, " Delete ")
209
+ ]))
210
+ ])) : createCommentVNode("", true)
211
+ ], 2);
94
212
  };
95
213
  }
96
214
  };
215
+ const UploadImage = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-78cc3140"]]);
97
216
  export {
98
- _sfc_main as default
217
+ UploadImage as default
99
218
  };
100
219
  //# sourceMappingURL=UploadImage.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"UploadImage.vue.js","sources":["../../../../../src/components/UploadImage/UploadImage.vue"],"sourcesContent":["<template>\n <div \n @click=\"onComponentClick\"\n @drop=\"onDrop\"\n @dragover.prevent\n class=\"image-upload-area flex-v-center flex-h-center flex\">\n <img loading=\"lazy\" \n v-if=\"imageUrl || photo\" \n :src=\"(FILE_SERVER_URL || '') + (imageUrl || photo)\"\n alt=\"Uploaded image\" \n class=\"w-100 h-100 object-fit-cover\"\n />\n \n <div v-else class=\"flex-v-center flex-h-center flex w-100 h-100 bg-second\" >\n <svg class=\"i-medium\" width=\"104\" height=\"104\" viewBox=\"0 0 104 104\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill=\"rgb(var(--white))\" d=\"M21.2784 37.2973C18.8466 34.6628 18.8466 30.6098 21.2784 27.9753L47.2179 2.03584C48.6364 0.81993 50.2577 0.211974 51.8789 0.211974C53.5001 0.211974 55.1213 0.81993 56.5399 2.03584L82.4793 27.9753C84.9111 30.6098 84.9111 34.6628 82.4793 37.2973C79.8448 39.7291 75.7918 39.7291 73.1573 37.2973L58.3637 22.301V71.5454C58.3637 75.1932 55.5266 78.0303 51.8789 78.0303C48.2311 78.0303 45.394 75.1932 45.394 71.5454V22.301L30.6004 37.2973C27.966 39.7291 23.9129 39.7291 21.2784 37.2973ZM97.2729 71.5454C100.921 71.5454 103.758 74.3825 103.758 78.0303V97.4849C103.758 101.133 100.921 103.97 97.2729 103.97H6.48486C2.83713 103.97 0 101.133 0 97.4849V78.0303C0 74.3825 2.83713 71.5454 6.48486 71.5454H38.9092C38.9092 78.6382 44.7861 84.5151 51.8789 84.5151C58.9717 84.5151 64.8486 78.6382 64.8486 71.5454H97.2729ZM87.5456 92.6212C90.1801 92.6212 92.4092 90.392 92.4092 87.7576C92.4092 85.1231 90.1801 82.8939 87.5456 82.8939C84.9111 82.8939 82.682 85.1231 82.682 87.7576C82.682 90.392 84.9111 92.6212 87.5456 92.6212Z\"/>\n </svg>\n </div>\n \n <input type=\"file\" name=\"file\" ref=\"fileInput\" @change=\"onFileChange\" style=\"display: none\"/>\n </div>\n</template>\n\n<script setup>\nimport { ref, watch } from 'vue';\nimport axios from 'axios';\n\nconst imageUrl = ref(null);\nconst fileInput = ref(null);\n\nconst props = defineProps([\n 'uploadPath', // only necessary prop\n 'photo' // new prop for holding the image url\n]);\n\nconst emit = defineEmits(['update:photo', 'error']);\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 let formData = new FormData();\n formData.append(\"file\", file);\n\n console.log(\"Sending file:\", file.name); // Логируем имя файла перед отправкой\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 emit('update:photo', imageUrl.value);\n } catch (error) {\n emit('error', error);\n console.error(\"Upload error:\", error); // Логируем ошибку\n }\n}\n\n\nfunction onDrop(e) {\n e.preventDefault();\n onFileChange({\n target: {\n files: e.dataTransfer.files\n }\n });\n}\n</script>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA2BA,UAAM,WAAW,IAAI,IAAI;AACzB,UAAM,YAAY,IAAI,IAAI;AAE1B,UAAM,QAAQ;AAKd,UAAM,OAAO;AAEb,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;AAEA,UAAI,WAAW,IAAI,SAAQ;AAC3B,eAAS,OAAO,QAAQ,IAAI;AAE5B,cAAQ,IAAI,iBAAiB,KAAK,IAAI;AAEtC,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,aAAK,gBAAgB,SAAS,KAAK;AAAA,MACrC,SAAS,OAAO;AACd,aAAK,SAAS,KAAK;AACnB,gBAAQ,MAAM,iBAAiB,KAAK;AAAA,MACtC;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
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 bg-light radius-small br-solid br-1px br-black-transp-10 h-100 aspect-1x1 flex-v-center flex-h-center flex cursor-pointer\"\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 z-index-1 w-100 h-100 object-fit-cover\"\n />\n \n <div v-else class=\"flex-v-center z-index-2 flex-h-center flex w-100 h-100 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 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-semi\" 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-semi\" 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
  ;/* empty css */
5
5
  const Field = require("../../../../../components/Field/Field.vue.cjs");
6
- const Button = require("../../../../../components/Button/Button.vue2.cjs");
6
+ const Button = require("../../../../../components/Button/Button.vue.cjs");
7
7
  const vueRouter = require("vue-router");
8
8
  const vueI18n = require("vue-i18n");
9
9
  const auth = require("../../store/auth.cjs");
@@ -1,7 +1,7 @@
1
1
  import { ref, createElementBlock, openBlock, createElementVNode, createCommentVNode, createVNode, toDisplayString, unref, createTextVNode, withCtx } from "vue";
2
2
  /* empty css */
3
3
  import Field from "../../../../../components/Field/Field.vue.js";
4
- import _sfc_main$1 from "../../../../../components/Button/Button.vue2.js";
4
+ import _sfc_main$1 from "../../../../../components/Button/Button.vue.js";
5
5
  import { useRoute, useRouter } from "vue-router";
6
6
  import { useI18n } from "vue-i18n";
7
7
  import { state, actions } from "../../store/auth.js";
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
3
3
  const vue = require("vue");
4
4
  ;/* empty css */
5
5
  const Field = require("../../../../../components/Field/Field.vue.cjs");
6
- const Button = require("../../../../../components/Button/Button.vue2.cjs");
6
+ const Button = require("../../../../../components/Button/Button.vue.cjs");
7
7
  const vueRouter = require("vue-router");
8
8
  const auth = require("../../store/auth.cjs");
9
9
  const invites_store = require("../../../../organizations/store/invites.store.cjs");
@@ -1,7 +1,7 @@
1
1
  import { ref, onMounted, createElementBlock, openBlock, createElementVNode, createVNode, withCtx } from "vue";
2
2
  /* empty css */
3
3
  import Field from "../../../../../components/Field/Field.vue.js";
4
- import _sfc_main$1 from "../../../../../components/Button/Button.vue2.js";
4
+ import _sfc_main$1 from "../../../../../components/Button/Button.vue.js";
5
5
  import { useRoute, useRouter } from "vue-router";
6
6
  import { state, actions } from "../../store/auth.js";
7
7
  import invitesStore from "../../../../organizations/store/invites.store.js";