@ozdao/martyrs 0.2.487 → 0.2.489

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 (829) hide show
  1. package/dist/_virtual/index.cjs +4 -4
  2. package/dist/_virtual/index.js +4 -4
  3. package/dist/_virtual/index2.cjs +4 -4
  4. package/dist/_virtual/index2.js +4 -4
  5. package/dist/auth.server.cjs +1 -1
  6. package/dist/auth.server.js +1 -1
  7. package/dist/{authJwt-D35KyJlE.cjs → authJwt-BIZ2GIfT.cjs} +0 -27
  8. package/dist/{authJwt-DqxhUym0.js → authJwt-J1csaMWA.js} +0 -27
  9. package/dist/builder.cjs +10 -0
  10. package/dist/builder.js +10 -0
  11. package/dist/chats.server.cjs +1 -1
  12. package/dist/chats.server.js +1 -1
  13. package/dist/community.server.cjs +3 -3
  14. package/dist/community.server.js +3 -3
  15. package/dist/{crud-BDIArc5A.cjs → crud-B-kQw3Z5.cjs} +5 -4
  16. package/dist/{crud-DJvpe0aZ.js → crud-Cwx5VlSm.js} +5 -4
  17. package/dist/events.server.cjs +3 -3
  18. package/dist/events.server.js +3 -3
  19. package/dist/files.server.cjs +31 -14
  20. package/dist/files.server.js +31 -14
  21. package/dist/gallery.server.cjs +2 -2
  22. package/dist/gallery.server.js +2 -2
  23. package/dist/{globals.abac-Cm9e8Jdk.cjs → globals.abac-CPXLas7N.cjs} +1 -1
  24. package/dist/{globals.abac-DBV_kaOq.js → globals.abac-DNdtSYop.js} +1 -1
  25. package/dist/{index-DiSKVCaA.cjs → index-BFxqqmgh.cjs} +1 -1
  26. package/dist/{index-CVuQC4k1.js → index-_Edcmck_.js} +1 -1
  27. package/dist/main-CmuUC0tl.cjs +11 -0
  28. package/dist/{main-nQmkbWsW.js → main-IVRL6IjM.js} +2949 -2666
  29. package/dist/martyrs/src/components/Button/{Button.vue.cjs → Button.vue2.cjs} +3 -3
  30. package/dist/martyrs/src/components/Button/Button.vue2.cjs.map +1 -0
  31. package/dist/martyrs/src/components/Button/{Button.vue.js → Button.vue2.js} +3 -3
  32. package/dist/martyrs/src/components/Button/{Button.vue.cjs.map → Button.vue2.js.map} +1 -1
  33. package/dist/martyrs/src/components/Calendar/Calendar.vue.cjs +31 -5
  34. package/dist/martyrs/src/components/Calendar/Calendar.vue.cjs.map +1 -1
  35. package/dist/martyrs/src/components/Calendar/Calendar.vue.js +32 -6
  36. package/dist/martyrs/src/components/Calendar/Calendar.vue.js.map +1 -1
  37. package/dist/martyrs/src/components/Chips/{Chips.vue.cjs → Chips.vue2.cjs} +2 -2
  38. package/dist/martyrs/src/components/Chips/Chips.vue2.cjs.map +1 -0
  39. package/dist/martyrs/src/components/Chips/{Chips.vue.js → Chips.vue2.js} +2 -2
  40. package/dist/martyrs/src/components/Chips/Chips.vue2.js.map +1 -0
  41. package/dist/martyrs/src/components/Countdown/Countdown.vue.cjs +4 -4
  42. package/dist/martyrs/src/components/Countdown/Countdown.vue.cjs.map +1 -1
  43. package/dist/martyrs/src/components/Countdown/Countdown.vue.js +4 -4
  44. package/dist/martyrs/src/components/Countdown/Countdown.vue.js.map +1 -1
  45. package/dist/martyrs/src/components/DatePicker/DatePicker.vue.cjs +28 -19
  46. package/dist/martyrs/src/components/DatePicker/DatePicker.vue.cjs.map +1 -1
  47. package/dist/martyrs/src/components/DatePicker/DatePicker.vue.js +29 -20
  48. package/dist/martyrs/src/components/DatePicker/DatePicker.vue.js.map +1 -1
  49. package/dist/martyrs/src/components/Feed/Carousel.vue.cjs +20 -9
  50. package/dist/martyrs/src/components/Feed/Carousel.vue.cjs.map +1 -1
  51. package/dist/martyrs/src/components/Feed/Carousel.vue.js +22 -11
  52. package/dist/martyrs/src/components/Feed/Carousel.vue.js.map +1 -1
  53. package/dist/martyrs/src/components/Feed/Feed.vue.cjs +29 -26
  54. package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
  55. package/dist/martyrs/src/components/Feed/Feed.vue.js +45 -42
  56. package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
  57. package/dist/martyrs/src/components/Field/{Field.vue2.cjs → Field.vue.cjs} +15 -9
  58. package/dist/martyrs/src/components/Field/Field.vue.cjs.map +1 -0
  59. package/dist/martyrs/src/components/Field/{Field.vue2.js → Field.vue.js} +16 -10
  60. package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -0
  61. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +25 -24
  62. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs.map +1 -1
  63. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +27 -26
  64. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js.map +1 -1
  65. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +1 -1
  66. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +1 -1
  67. package/dist/martyrs/src/components/Loader/Loader.vue2.cjs +1 -1
  68. package/dist/martyrs/src/components/Loader/Loader.vue2.cjs.map +1 -1
  69. package/dist/martyrs/src/components/Loader/Loader.vue2.js +1 -1
  70. package/dist/martyrs/src/components/Loader/Loader.vue2.js.map +1 -1
  71. package/dist/martyrs/src/components/Menu/MenuItem.vue.cjs +1 -1
  72. package/dist/martyrs/src/components/Menu/MenuItem.vue.cjs.map +1 -1
  73. package/dist/martyrs/src/components/Menu/MenuItem.vue.js +1 -1
  74. package/dist/martyrs/src/components/Menu/MenuItem.vue.js.map +1 -1
  75. package/dist/martyrs/src/components/Select/Select.vue.cjs +27 -15
  76. package/dist/martyrs/src/components/Select/Select.vue.cjs.map +1 -1
  77. package/dist/martyrs/src/components/Select/Select.vue.js +28 -16
  78. package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -1
  79. package/dist/martyrs/src/components/Status/Snack.vue.cjs +63 -0
  80. package/dist/martyrs/src/components/Status/Snack.vue.cjs.map +1 -0
  81. package/dist/martyrs/src/components/Status/Snack.vue.js +63 -0
  82. package/dist/martyrs/src/components/Status/Snack.vue.js.map +1 -0
  83. package/dist/martyrs/src/components/Tab/Tab.vue2.cjs +2 -2
  84. package/dist/martyrs/src/components/Tab/Tab.vue2.cjs.map +1 -1
  85. package/dist/martyrs/src/components/Tab/Tab.vue2.js +2 -2
  86. package/dist/martyrs/src/components/Tab/Tab.vue2.js.map +1 -1
  87. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.cjs +3 -2
  88. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.cjs.map +1 -1
  89. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +3 -2
  90. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js.map +1 -1
  91. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs +0 -1
  92. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs.map +1 -1
  93. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +0 -1
  94. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js.map +1 -1
  95. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +2 -2
  96. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +5 -5
  97. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +2 -2
  98. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +5 -5
  99. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +1 -2
  100. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs.map +1 -1
  101. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +1 -2
  102. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
  103. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.cjs +1 -1
  104. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +1 -1
  105. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +2 -2
  106. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +10 -10
  107. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +3 -3
  108. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs.map +1 -1
  109. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +5 -5
  110. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js.map +1 -1
  111. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +3 -3
  112. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs.map +1 -1
  113. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +6 -6
  114. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js.map +1 -1
  115. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +3 -3
  116. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs.map +1 -1
  117. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +5 -5
  118. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js.map +1 -1
  119. package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.cjs +1 -1
  120. package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.cjs.map +1 -1
  121. package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.js +1 -1
  122. package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.js.map +1 -1
  123. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.cjs +2 -2
  124. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +23 -23
  125. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.cjs +3 -3
  126. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.cjs.map +1 -1
  127. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +3 -3
  128. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +1 -1
  129. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs +2 -2
  130. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs.map +1 -1
  131. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +2 -2
  132. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js.map +1 -1
  133. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs +4 -4
  134. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs.map +1 -1
  135. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +4 -4
  136. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js.map +1 -1
  137. package/dist/martyrs/src/modules/community/components/pages/Blog.vue.cjs +1 -1
  138. package/dist/martyrs/src/modules/community/components/pages/Blog.vue.cjs.map +1 -1
  139. package/dist/martyrs/src/modules/community/components/pages/Blog.vue.js +1 -1
  140. package/dist/martyrs/src/modules/community/components/pages/Blog.vue.js.map +1 -1
  141. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +2 -4
  142. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs.map +1 -1
  143. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +2 -4
  144. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js.map +1 -1
  145. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +3 -3
  146. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +12 -12
  147. package/dist/martyrs/src/modules/community/components/sections/Comments.vue.cjs +1 -1
  148. package/dist/martyrs/src/modules/community/components/sections/Comments.vue.cjs.map +1 -1
  149. package/dist/martyrs/src/modules/community/components/sections/Comments.vue.js +1 -1
  150. package/dist/martyrs/src/modules/community/components/sections/Comments.vue.js.map +1 -1
  151. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.cjs +1 -1
  152. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +3 -3
  153. package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.cjs +1 -1
  154. package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.js +2 -2
  155. package/dist/martyrs/src/modules/constructor/components/sections/Viewer.vue.cjs +1 -1
  156. package/dist/martyrs/src/modules/constructor/components/sections/Viewer.vue.cjs.map +1 -1
  157. package/dist/martyrs/src/modules/constructor/components/sections/Viewer.vue.js +1 -1
  158. package/dist/martyrs/src/modules/constructor/components/sections/Viewer.vue.js.map +1 -1
  159. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs +33 -30
  160. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs.map +1 -1
  161. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +36 -33
  162. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js.map +1 -1
  163. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.cjs +1 -1
  164. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
  165. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.cjs +1 -1
  166. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
  167. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +3 -2
  168. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs.map +1 -1
  169. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +26 -25
  170. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js.map +1 -1
  171. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +2 -2
  172. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +15 -15
  173. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +8 -8
  174. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs.map +1 -1
  175. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +8 -8
  176. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
  177. package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs +3 -3
  178. package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs.map +1 -1
  179. package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +3 -3
  180. package/dist/martyrs/src/modules/events/components/pages/Events.vue.js.map +1 -1
  181. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs +1 -1
  182. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs.map +1 -1
  183. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
  184. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js.map +1 -1
  185. package/dist/martyrs/src/modules/events/components/sections/FeaturedEvents.vue.cjs +9 -5
  186. package/dist/martyrs/src/modules/events/components/sections/FeaturedEvents.vue.cjs.map +1 -1
  187. package/dist/martyrs/src/modules/events/components/sections/FeaturedEvents.vue.js +9 -5
  188. package/dist/martyrs/src/modules/events/components/sections/FeaturedEvents.vue.js.map +1 -1
  189. package/dist/martyrs/src/modules/events/components/sections/List.vue.cjs +18 -24
  190. package/dist/martyrs/src/modules/events/components/sections/List.vue.cjs.map +1 -1
  191. package/dist/martyrs/src/modules/events/components/sections/List.vue.js +19 -25
  192. package/dist/martyrs/src/modules/events/components/sections/List.vue.js.map +1 -1
  193. package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.cjs +3 -3
  194. package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.cjs.map +1 -1
  195. package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.js +3 -3
  196. package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.js.map +1 -1
  197. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +2 -3
  198. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs.map +1 -1
  199. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +2 -3
  200. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js.map +1 -1
  201. package/dist/martyrs/src/modules/globals/locales/en.cjs +9 -1
  202. package/dist/martyrs/src/modules/globals/locales/en.cjs.map +1 -1
  203. package/dist/martyrs/src/modules/globals/locales/en.js +9 -1
  204. package/dist/martyrs/src/modules/globals/locales/en.js.map +1 -1
  205. package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
  206. package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
  207. package/dist/martyrs/src/modules/globals/views/classes/globals.store.cjs +5 -2
  208. package/dist/martyrs/src/modules/globals/views/classes/globals.store.cjs.map +1 -1
  209. package/dist/martyrs/src/modules/globals/views/classes/globals.store.js +5 -2
  210. package/dist/martyrs/src/modules/globals/views/classes/globals.store.js.map +1 -1
  211. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.cjs +16 -15
  212. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.cjs.map +1 -1
  213. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.js +17 -16
  214. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.js.map +1 -1
  215. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +16 -20
  216. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs.map +1 -1
  217. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +16 -20
  218. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js.map +1 -1
  219. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.cjs +1 -1
  220. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.js +1 -1
  221. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +14 -7
  222. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs.map +1 -1
  223. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +14 -7
  224. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js.map +1 -1
  225. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +11 -3
  226. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs.map +1 -1
  227. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +11 -3
  228. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js.map +1 -1
  229. package/dist/martyrs/src/modules/globals/views/components/partials/CitySelection.vue.cjs +1 -1
  230. package/dist/martyrs/src/modules/globals/views/components/partials/CitySelection.vue.cjs.map +1 -1
  231. package/dist/martyrs/src/modules/globals/views/components/partials/CitySelection.vue.js +1 -1
  232. package/dist/martyrs/src/modules/globals/views/components/partials/CitySelection.vue.js.map +1 -1
  233. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +1 -1
  234. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +1 -1
  235. package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.cjs +1 -1
  236. package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.js +1 -1
  237. package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.cjs +2 -2
  238. package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.cjs.map +1 -1
  239. package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.js +2 -2
  240. package/dist/martyrs/src/modules/globals/views/components/partials/Sidebar.vue.js.map +1 -1
  241. package/dist/martyrs/src/modules/globals/views/plugins/date-picker.plugin.cjs +17 -7
  242. package/dist/martyrs/src/modules/globals/views/plugins/date-picker.plugin.cjs.map +1 -1
  243. package/dist/martyrs/src/modules/globals/views/plugins/date-picker.plugin.js +18 -8
  244. package/dist/martyrs/src/modules/globals/views/plugins/date-picker.plugin.js.map +1 -1
  245. package/dist/martyrs/src/modules/globals/views/router/addRoutes.cjs +4 -1
  246. package/dist/martyrs/src/modules/globals/views/router/addRoutes.cjs.map +1 -1
  247. package/dist/martyrs/src/modules/globals/views/router/addRoutes.js +4 -1
  248. package/dist/martyrs/src/modules/globals/views/router/addRoutes.js.map +1 -1
  249. package/dist/martyrs/src/modules/globals/views/store/globals.cjs +30 -0
  250. package/dist/martyrs/src/modules/globals/views/store/globals.cjs.map +1 -1
  251. package/dist/martyrs/src/modules/globals/views/store/globals.js +30 -0
  252. package/dist/martyrs/src/modules/globals/views/store/globals.js.map +1 -1
  253. package/dist/martyrs/src/modules/icons/actions/IconOpenLink.vue.cjs +32 -0
  254. package/dist/martyrs/src/modules/icons/actions/IconOpenLink.vue.cjs.map +1 -0
  255. package/dist/martyrs/src/modules/icons/actions/IconOpenLink.vue.js +32 -0
  256. package/dist/martyrs/src/modules/icons/actions/IconOpenLink.vue.js.map +1 -0
  257. package/dist/martyrs/src/modules/icons/entities/IconInfo.vue.cjs +4 -2
  258. package/dist/martyrs/src/modules/icons/entities/IconInfo.vue.cjs.map +1 -1
  259. package/dist/martyrs/src/modules/icons/entities/IconInfo.vue.js +5 -3
  260. package/dist/martyrs/src/modules/icons/entities/IconInfo.vue.js.map +1 -1
  261. package/dist/martyrs/src/modules/icons/icons.client.cjs +4 -0
  262. package/dist/martyrs/src/modules/icons/icons.client.cjs.map +1 -1
  263. package/dist/martyrs/src/modules/icons/icons.client.js +108 -104
  264. package/dist/martyrs/src/modules/icons/icons.client.js.map +1 -1
  265. package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs +3 -1
  266. package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs.map +1 -1
  267. package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js +138 -136
  268. package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js.map +1 -1
  269. package/dist/martyrs/src/modules/icons/skeletons/SkeletonEventShort.vue.cjs +1 -1
  270. package/dist/martyrs/src/modules/icons/skeletons/SkeletonEventShort.vue.cjs.map +1 -1
  271. package/dist/martyrs/src/modules/icons/skeletons/SkeletonEventShort.vue.js +1 -1
  272. package/dist/martyrs/src/modules/icons/skeletons/SkeletonEventShort.vue.js.map +1 -1
  273. package/dist/martyrs/src/modules/icons/socials/telegram.vue.cjs +11 -7
  274. package/dist/martyrs/src/modules/icons/socials/telegram.vue.cjs.map +1 -1
  275. package/dist/martyrs/src/modules/icons/socials/telegram.vue.js +11 -7
  276. package/dist/martyrs/src/modules/icons/socials/telegram.vue.js.map +1 -1
  277. package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.cjs +2 -2
  278. package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.cjs.map +1 -1
  279. package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.js +2 -2
  280. package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.js.map +1 -1
  281. package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.cjs +2 -2
  282. package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.cjs.map +1 -1
  283. package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.js +2 -2
  284. package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.js.map +1 -1
  285. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.cjs +1 -1
  286. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.cjs.map +1 -1
  287. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +1 -1
  288. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js.map +1 -1
  289. package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.cjs +1 -1
  290. package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.cjs.map +1 -1
  291. package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.js +1 -1
  292. package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.js.map +1 -1
  293. package/dist/martyrs/src/modules/landing/components/sections/SectionJoinUs.vue.cjs +1 -1
  294. package/dist/martyrs/src/modules/landing/components/sections/SectionJoinUs.vue.cjs.map +1 -1
  295. package/dist/martyrs/src/modules/landing/components/sections/SectionJoinUs.vue.js +1 -1
  296. package/dist/martyrs/src/modules/landing/components/sections/SectionJoinUs.vue.js.map +1 -1
  297. package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.cjs +1 -1
  298. package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.cjs.map +1 -1
  299. package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.js +1 -1
  300. package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.js.map +1 -1
  301. package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.cjs +1 -1
  302. package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.cjs.map +1 -1
  303. package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.js +1 -1
  304. package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.js.map +1 -1
  305. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs +0 -13
  306. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs.map +1 -1
  307. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js +0 -13
  308. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js.map +1 -1
  309. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +1 -1
  310. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +1 -1
  311. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +1 -1
  312. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
  313. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +1 -1
  314. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
  315. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +2 -2
  316. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +14 -14
  317. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +2 -2
  318. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +19 -19
  319. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +2 -2
  320. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +13 -13
  321. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +1 -1
  322. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
  323. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +2 -2
  324. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +22 -22
  325. package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs +1 -1
  326. package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js +1 -1
  327. package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +1 -1
  328. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +1 -1
  329. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +1 -1
  330. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +1 -1
  331. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +1 -1
  332. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
  333. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +2 -2
  334. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +11 -11
  335. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +1 -1
  336. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +1 -1
  337. package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +1 -1
  338. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +1 -1
  339. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.cjs +1 -1
  340. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
  341. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +1 -1
  342. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
  343. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.cjs +2 -2
  344. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.cjs.map +1 -1
  345. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +2 -2
  346. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js.map +1 -1
  347. package/dist/martyrs/src/modules/orders/components/blocks/CardOrder.vue.cjs +8 -8
  348. package/dist/martyrs/src/modules/orders/components/blocks/CardOrder.vue.cjs.map +1 -1
  349. package/dist/martyrs/src/modules/orders/components/blocks/CardOrder.vue.js +8 -8
  350. package/dist/martyrs/src/modules/orders/components/blocks/CardOrder.vue.js.map +1 -1
  351. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.cjs +98 -73
  352. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.cjs.map +1 -1
  353. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.js +99 -74
  354. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.js.map +1 -1
  355. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.cjs +2 -2
  356. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.cjs.map +1 -1
  357. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js +2 -2
  358. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js.map +1 -1
  359. package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.cjs +1 -1
  360. package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.cjs.map +1 -1
  361. package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.js +1 -1
  362. package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.js.map +1 -1
  363. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +82 -57
  364. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs.map +1 -1
  365. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +82 -57
  366. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js.map +1 -1
  367. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +22 -14
  368. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs.map +1 -1
  369. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +22 -14
  370. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js.map +1 -1
  371. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +205 -36
  372. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs.map +1 -1
  373. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +208 -39
  374. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js.map +1 -1
  375. package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.cjs +20 -11
  376. package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.cjs.map +1 -1
  377. package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.js +20 -11
  378. package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.js.map +1 -1
  379. package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.cjs +1 -2
  380. package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.cjs.map +1 -1
  381. package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.js +1 -2
  382. package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.js.map +1 -1
  383. package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.cjs +1 -1
  384. package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.js +5 -5
  385. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +1 -1
  386. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +2 -2
  387. package/dist/martyrs/src/modules/orders/components/sections/Succes.vue.cjs +1 -1
  388. package/dist/martyrs/src/modules/orders/components/sections/Succes.vue.js +1 -1
  389. package/dist/martyrs/src/modules/orders/orders.client.cjs +6 -0
  390. package/dist/martyrs/src/modules/orders/orders.client.cjs.map +1 -1
  391. package/dist/martyrs/src/modules/orders/orders.client.js +6 -0
  392. package/dist/martyrs/src/modules/orders/orders.client.js.map +1 -1
  393. package/dist/martyrs/src/modules/orders/store/shopcart.cjs +75 -94
  394. package/dist/martyrs/src/modules/orders/store/shopcart.cjs.map +1 -1
  395. package/dist/martyrs/src/modules/orders/store/shopcart.js +75 -94
  396. package/dist/martyrs/src/modules/orders/store/shopcart.js.map +1 -1
  397. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +11 -3
  398. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs.map +1 -1
  399. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +11 -3
  400. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js.map +1 -1
  401. package/dist/martyrs/src/modules/organizations/components/blocks/Rating.vue.cjs +1 -1
  402. package/dist/martyrs/src/modules/organizations/components/blocks/Rating.vue.js +1 -1
  403. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +1 -1
  404. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  405. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +1 -1
  406. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs.map +1 -1
  407. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +1 -1
  408. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js.map +1 -1
  409. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +2 -3
  410. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs.map +1 -1
  411. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +16 -17
  412. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js.map +1 -1
  413. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +2 -2
  414. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs.map +1 -1
  415. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +2 -2
  416. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
  417. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +3 -3
  418. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs.map +1 -1
  419. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +3 -3
  420. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js.map +1 -1
  421. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +2 -2
  422. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +16 -16
  423. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
  424. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs.map +1 -1
  425. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +1 -1
  426. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js.map +1 -1
  427. package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs +2 -2
  428. package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs.map +1 -1
  429. package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.js +2 -2
  430. package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.js.map +1 -1
  431. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +2 -2
  432. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +3 -3
  433. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +2 -2
  434. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +8 -8
  435. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -2
  436. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs.map +1 -1
  437. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -2
  438. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js.map +1 -1
  439. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs +3 -3
  440. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.cjs.map +1 -1
  441. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js +3 -3
  442. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js.map +1 -1
  443. package/dist/martyrs/src/modules/organizations/organizations.client.cjs +0 -3
  444. package/dist/martyrs/src/modules/organizations/organizations.client.cjs.map +1 -1
  445. package/dist/martyrs/src/modules/organizations/organizations.client.js +18 -21
  446. package/dist/martyrs/src/modules/organizations/organizations.client.js.map +1 -1
  447. package/dist/martyrs/src/modules/organizations/router/organizations.cjs +0 -2
  448. package/dist/martyrs/src/modules/organizations/router/organizations.cjs.map +1 -1
  449. package/dist/martyrs/src/modules/organizations/router/organizations.js +0 -2
  450. package/dist/martyrs/src/modules/organizations/router/organizations.js.map +1 -1
  451. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -2
  452. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs.map +1 -1
  453. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -2
  454. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js.map +1 -1
  455. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -2
  456. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs.map +1 -1
  457. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -2
  458. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js.map +1 -1
  459. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.cjs +1 -1
  460. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
  461. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.cjs +7 -4
  462. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.cjs.map +1 -1
  463. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js +7 -4
  464. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js.map +1 -1
  465. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.cjs +1 -1
  466. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +1 -1
  467. package/dist/martyrs/src/modules/products/components/blocks/ProductVariants.vue.cjs +18 -21
  468. package/dist/martyrs/src/modules/products/components/blocks/ProductVariants.vue.cjs.map +1 -1
  469. package/dist/martyrs/src/modules/products/components/blocks/ProductVariants.vue.js +19 -22
  470. package/dist/martyrs/src/modules/products/components/blocks/ProductVariants.vue.js.map +1 -1
  471. package/dist/martyrs/src/modules/products/components/elements/Price.vue.cjs +1 -1
  472. package/dist/martyrs/src/modules/products/components/elements/Price.vue.cjs.map +1 -1
  473. package/dist/martyrs/src/modules/products/components/elements/Price.vue.js +1 -1
  474. package/dist/martyrs/src/modules/products/components/elements/Price.vue.js.map +1 -1
  475. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +48 -45
  476. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs.map +1 -1
  477. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +49 -46
  478. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js.map +1 -1
  479. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +13 -21
  480. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
  481. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +23 -31
  482. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
  483. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +29 -18
  484. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs.map +1 -1
  485. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +29 -18
  486. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js.map +1 -1
  487. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +5 -7
  488. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs.map +1 -1
  489. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +21 -23
  490. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js.map +1 -1
  491. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +3 -2
  492. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs.map +1 -1
  493. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +3 -2
  494. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
  495. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +2 -2
  496. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +6 -6
  497. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +2 -2
  498. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +12 -12
  499. package/dist/martyrs/src/modules/products/components/sections/EditIngredients.vue.cjs +11 -3
  500. package/dist/martyrs/src/modules/products/components/sections/EditIngredients.vue.cjs.map +1 -1
  501. package/dist/martyrs/src/modules/products/components/sections/EditIngredients.vue.js +11 -3
  502. package/dist/martyrs/src/modules/products/components/sections/EditIngredients.vue.js.map +1 -1
  503. package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.cjs +8 -16
  504. package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.cjs.map +1 -1
  505. package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.js +8 -16
  506. package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.js.map +1 -1
  507. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +80 -61
  508. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs.map +1 -1
  509. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +100 -81
  510. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js.map +1 -1
  511. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.cjs +3 -3
  512. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.cjs.map +1 -1
  513. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js +3 -3
  514. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js.map +1 -1
  515. package/dist/martyrs/src/modules/products/components/sections/HeroRecommendation.vue.cjs +1 -1
  516. package/dist/martyrs/src/modules/products/components/sections/HeroRecommendation.vue.cjs.map +1 -1
  517. package/dist/martyrs/src/modules/products/components/sections/HeroRecommendation.vue.js +1 -1
  518. package/dist/martyrs/src/modules/products/components/sections/HeroRecommendation.vue.js.map +1 -1
  519. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs +8 -14
  520. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs.map +1 -1
  521. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +9 -15
  522. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js.map +1 -1
  523. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs +1 -1
  524. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
  525. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +3 -3
  526. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs.map +1 -1
  527. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +3 -3
  528. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js.map +1 -1
  529. package/dist/martyrs/src/modules/products/products.client.cjs +1 -13
  530. package/dist/martyrs/src/modules/products/products.client.cjs.map +1 -1
  531. package/dist/martyrs/src/modules/products/products.client.js +36 -48
  532. package/dist/martyrs/src/modules/products/products.client.js.map +1 -1
  533. package/dist/martyrs/src/modules/products/store/products.cjs +4 -4
  534. package/dist/martyrs/src/modules/products/store/products.cjs.map +1 -1
  535. package/dist/martyrs/src/modules/products/store/products.js +4 -4
  536. package/dist/martyrs/src/modules/products/store/products.js.map +1 -1
  537. package/dist/martyrs/src/modules/rents/views/components/pages/GanttChart.vue.cjs +3 -3
  538. package/dist/martyrs/src/modules/rents/views/components/pages/GanttChart.vue.cjs.map +1 -1
  539. package/dist/martyrs/src/modules/rents/views/components/pages/GanttChart.vue.js +3 -3
  540. package/dist/martyrs/src/modules/rents/views/components/pages/GanttChart.vue.js.map +1 -1
  541. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.cjs +12 -4
  542. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.cjs.map +1 -1
  543. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +15 -7
  544. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js.map +1 -1
  545. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +1 -1
  546. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +1 -1
  547. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +41 -33
  548. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs.map +1 -1
  549. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +42 -34
  550. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js.map +1 -1
  551. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +0 -1
  552. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs.map +1 -1
  553. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +0 -1
  554. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js.map +1 -1
  555. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +0 -1
  556. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs.map +1 -1
  557. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +0 -1
  558. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js.map +1 -1
  559. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.cjs +1 -1
  560. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
  561. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.cjs +2 -2
  562. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.cjs.map +1 -1
  563. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js +2 -2
  564. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js.map +1 -1
  565. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +2 -2
  566. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +13 -13
  567. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +2 -2
  568. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +8 -8
  569. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.cjs +1 -1
  570. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +2 -2
  571. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
  572. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +2 -2
  573. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +4 -4
  574. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs.map +1 -1
  575. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +4 -4
  576. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js.map +1 -1
  577. package/dist/martyrs.cjs.js +1 -1
  578. package/dist/martyrs.css +1 -1
  579. package/dist/martyrs.es.js +20 -20
  580. package/dist/music.server.cjs +3 -3
  581. package/dist/music.server.js +3 -3
  582. package/dist/notifications.server.cjs +1 -1
  583. package/dist/notifications.server.js +1 -1
  584. package/dist/orders.server.cjs +155 -64
  585. package/dist/orders.server.js +155 -64
  586. package/dist/organizations.server.cjs +25 -4
  587. package/dist/organizations.server.js +25 -4
  588. package/dist/{ownership.schema-CCZX5vfw.js → ownership.schema-BqH4v5vH.js} +2 -2
  589. package/dist/{ownership.schema-DCosqOc1.cjs → ownership.schema-D1p5XSpt.cjs} +2 -2
  590. package/dist/products.server.cjs +64 -288
  591. package/dist/products.server.js +64 -288
  592. package/dist/rents.server.cjs +35 -13
  593. package/dist/rents.server.js +35 -13
  594. package/dist/style.css +198 -201
  595. package/dist/wallet.server.cjs +1 -1
  596. package/dist/wallet.server.js +1 -1
  597. package/dist/web-BXhlxo6M.cjs +1 -0
  598. package/dist/web-Czi05iGG.js +54 -0
  599. package/package.json +1 -1
  600. package/src/builder/rspack/rspack.config.base.js +14 -0
  601. package/src/components/Breadcrumbs/Breadcrumbs.vue +200 -62
  602. package/src/components/Button/Button.vue +1 -1
  603. package/src/components/Calendar/Calendar.vue +53 -3
  604. package/src/components/Countdown/Countdown.vue +4 -4
  605. package/src/components/DatePicker/DatePicker.vue +32 -22
  606. package/src/components/Feed/Carousel.vue +18 -3
  607. package/src/components/Feed/Feed.vue +24 -31
  608. package/src/components/Field/Field.vue +9 -31
  609. package/src/components/FieldBig/FieldBig.vue +17 -18
  610. package/src/components/Loader/Loader.vue +1 -8
  611. package/src/components/Menu/MenuItem.vue +1 -1
  612. package/src/components/Select/Select.vue +19 -27
  613. package/src/components/Status/Snack.vue +4 -2
  614. package/src/components/Tab/Tab.vue +2 -2
  615. package/src/components/UploadImageMultiple/UploadImageMultiple.vue +9 -14
  616. package/src/main.js +2 -0
  617. package/src/modules/auth/controllers/middlewares/authJwt.js +0 -29
  618. package/src/modules/auth/views/components/pages/ResetPassword.vue +1 -1
  619. package/src/modules/auth/views/components/pages/SignIn.vue +1 -1
  620. package/src/modules/auth/views/components/pages/SignUp.vue +1 -1
  621. package/src/modules/auth/views/components/sections/FeaturedUsers.vue +1 -1
  622. package/src/modules/backoffice/components/admin/Users.vue +1 -1
  623. package/src/modules/backoffice/components/partials/Sidebar.vue +3 -3
  624. package/src/modules/community/components/blocks/CardBlogpost.vue +1 -1
  625. package/src/modules/community/components/layouts/Community.vue +5 -5
  626. package/src/modules/community/components/pages/Blog.vue +1 -1
  627. package/src/modules/community/components/sections/Comments.vue +1 -1
  628. package/src/modules/constructor/components/sections/Viewer.vue +1 -1
  629. package/src/modules/events/components/blocks/CardEvent.vue +35 -29
  630. package/src/modules/events/components/pages/Event.vue +4 -3
  631. package/src/modules/events/components/pages/Events.vue +3 -3
  632. package/src/modules/events/components/pages/EventsBackoffice.vue +1 -1
  633. package/src/modules/events/components/sections/FeaturedEvents.vue +8 -4
  634. package/src/modules/events/components/sections/List.vue +17 -18
  635. package/src/modules/events/components/sections/SelectDate.vue +2 -2
  636. package/src/modules/files/controllers/files.controller.js +14 -3
  637. package/src/modules/files/middlewares/server/middlewareBusboy.js +46 -17
  638. package/src/modules/globals/controllers/classes/crud/crud.controller.js +5 -2
  639. package/src/modules/globals/controllers/classes/crud/crud.js +1 -1
  640. package/src/modules/globals/controllers/classes/crud/crud.service.js +0 -1
  641. package/src/modules/globals/controllers/classes/globals.abac.js +1 -1
  642. package/src/modules/globals/locales/en.js +8 -0
  643. package/src/modules/globals/models/schemas/ownership.schema.js +2 -2
  644. package/src/modules/globals/views/classes/globals.store.js +8 -2
  645. package/src/modules/globals/views/components/blocks/BlockSearch.vue +12 -17
  646. package/src/modules/globals/views/components/blocks/CardHeader.vue +9 -11
  647. package/src/modules/globals/views/components/blocks/PopupDateSelector.vue +19 -9
  648. package/src/modules/globals/views/components/layouts/Client.vue +15 -9
  649. package/src/modules/globals/views/components/partials/CitySelection.vue +1 -1
  650. package/src/modules/globals/views/components/partials/FooterAlt.vue +1 -1
  651. package/src/modules/globals/views/components/partials/Sidebar.vue +1 -1
  652. package/src/modules/globals/views/components/sections/Walkthrough.vue +2 -2
  653. package/src/modules/globals/views/plugins/date-picker.plugin.js +17 -7
  654. package/src/modules/globals/views/router/addRoutes.js +4 -1
  655. package/src/modules/globals/views/store/globals.js +1 -1
  656. package/src/modules/icons/actions/IconOpenLink.vue +14 -0
  657. package/src/modules/icons/entities/IconInfo.vue +2 -2
  658. package/src/modules/icons/icons.client.js +8 -0
  659. package/src/modules/icons/pages/IconsPage.vue +2 -0
  660. package/src/modules/icons/skeletons/SkeletonEventShort.vue +2 -2
  661. package/src/modules/icons/socials/telegram.vue +2 -2
  662. package/src/modules/inventory/components/forms/AdjustmentForm.vue +225 -0
  663. package/src/modules/inventory/components/forms/ColumnSettingsMenu.vue +80 -0
  664. package/src/modules/inventory/components/forms/HistoryView.vue +134 -0
  665. package/src/modules/inventory/components/forms/StockAlertsForm.vue +181 -0
  666. package/src/modules/{products/components/pages/Leftovers.vue → inventory/components/pages/Inventory.vue} +60 -41
  667. package/src/modules/{products/components/pages/LeftoverEdit.vue → inventory/components/pages/InventoryEdit.vue} +131 -86
  668. package/src/modules/inventory/docs/README.md +291 -0
  669. package/src/modules/inventory/inventory.client.js +65 -0
  670. package/src/modules/inventory/inventory.server.js +8 -5
  671. package/src/modules/inventory/middlewares/stock.alerts.verifier.js +194 -0
  672. package/src/modules/inventory/models/stock.alerts.model.js +45 -0
  673. package/src/modules/inventory/models/stock.audit.model.js +60 -0
  674. package/src/modules/inventory/models/stock.availability.model.js +6 -6
  675. package/src/modules/inventory/policies/inventory.policies.js +28 -28
  676. package/src/modules/inventory/router/inventory.router.js +28 -0
  677. package/src/modules/inventory/routes/inventory.routes.js +8 -4
  678. package/src/modules/inventory/routes/stock.alerts.routes.js +43 -0
  679. package/src/modules/inventory/services/inventory.crud.js +204 -21
  680. package/src/modules/inventory/services/inventory.verifier.js +67 -11
  681. package/src/modules/inventory/store/ inventory.store.js +4 -2
  682. package/src/modules/inventory/store/stock.alerts.store.js +5 -0
  683. package/src/modules/inventory/tests/inventory.test.js +281 -0
  684. package/src/modules/landing/components/sections/SectionEarn.vue +1 -1
  685. package/src/modules/landing/components/sections/SectionFeature.vue +1 -1
  686. package/src/modules/landing/components/sections/SectionFeaturesImages.vue +1 -1
  687. package/src/modules/landing/components/sections/SectionFocus.vue +1 -1
  688. package/src/modules/landing/components/sections/SectionGuide.vue +1 -1
  689. package/src/modules/landing/components/sections/SectionHeroToken.vue +1 -1
  690. package/src/modules/landing/components/sections/SectionHeroVideo.vue +2 -2
  691. package/src/modules/landing/components/sections/SectionJoinUs.vue +1 -1
  692. package/src/modules/landing/components/sections/SectionMobileApp.vue +1 -1
  693. package/src/modules/landing/components/sections/SubscribeNewsletter.vue +1 -1
  694. package/src/modules/marketplace/views/components/layouts/Marketplace.vue +14 -14
  695. package/src/modules/notifications/components/elements/NotificationBadge.vue +1 -1
  696. package/src/modules/orders/components/blocks/CardOrder.vue +7 -7
  697. package/src/modules/orders/components/blocks/CardOrderItem.vue +96 -91
  698. package/src/modules/orders/components/blocks/CardOrderUser.vue +1 -1
  699. package/src/modules/orders/components/elements/PriceTotal.vue +1 -1
  700. package/src/modules/orders/components/pages/Favorites.vue +1 -1
  701. package/src/modules/orders/components/pages/OrderBackoffice.vue +59 -29
  702. package/src/modules/orders/components/pages/OrderCreate.vue +15 -7
  703. package/src/modules/orders/components/pages/OrderCreateBackoffice.vue +201 -16
  704. package/src/modules/orders/components/pages/Orders_refact.vue +3 -3
  705. package/src/modules/orders/components/partials/ShopCart.vue +17 -8
  706. package/src/modules/orders/components/sections/Succes.vue +1 -1
  707. package/src/modules/orders/controllers/orders.controller.js +175 -77
  708. package/src/modules/orders/orders.client.js +6 -0
  709. package/src/modules/orders/routes/orders.routes.js +15 -10
  710. package/src/modules/orders/store/shopcart.js +54 -131
  711. package/src/modules/organizations/components/blocks/CardOrganization.vue +9 -1
  712. package/src/modules/organizations/components/blocks/Rating.vue +1 -1
  713. package/src/modules/organizations/components/pages/Department.vue +1 -1
  714. package/src/modules/organizations/components/pages/DepartmentEdit.vue +0 -1
  715. package/src/modules/organizations/components/pages/Organization.vue +2 -2
  716. package/src/modules/organizations/components/pages/OrganizationBackoffice.vue +3 -3
  717. package/src/modules/organizations/components/pages/Organizations.vue +1 -1
  718. package/src/modules/organizations/components/sections/DetailsTabSection.vue +1 -1
  719. package/src/modules/organizations/configs/navigation.organization.config.js +3 -3
  720. package/src/modules/organizations/controllers/utils/lookupConfigs.js +22 -1
  721. package/src/modules/organizations/models/schemas/accesses.schema.js +1 -1
  722. package/src/modules/organizations/organizations.client.js +0 -3
  723. package/src/modules/organizations/router/organizations.js +0 -2
  724. package/src/modules/products/components/blocks/CardProduct.vue +1 -1
  725. package/src/modules/products/components/blocks/ProductVariants.vue +5 -5
  726. package/src/modules/products/components/elements/Price.vue +1 -1
  727. package/src/modules/products/components/forms/StockHistoryView.vue +4 -4
  728. package/src/modules/products/components/pages/Categories.vue +4 -2
  729. package/src/modules/products/components/pages/CategoryEdit.vue +23 -10
  730. package/src/modules/products/components/pages/Product.vue +28 -78
  731. package/src/modules/products/components/pages/ProductEdit.vue +3 -12
  732. package/src/modules/products/components/pages/Products.vue +3 -2
  733. package/src/modules/products/components/sections/EditIngredients.vue +11 -2
  734. package/src/modules/products/components/sections/EditRecommended.vue +3 -14
  735. package/src/modules/products/components/sections/EditVariants.vue +52 -25
  736. package/src/modules/products/components/sections/FilterProducts.vue +3 -3
  737. package/src/modules/products/components/sections/HeroRecommendation.vue +1 -1
  738. package/src/modules/products/components/sections/ProductConfigurator.vue +5 -11
  739. package/src/modules/products/components/sections/SectionProduct.vue +2 -2
  740. package/src/modules/products/controllers/configs/products.lookup.config.js +52 -80
  741. package/src/modules/products/controllers/products.controller.js +2 -2
  742. package/src/modules/products/middlewares/variants.verifier.js +1 -1
  743. package/src/modules/products/products.client.js +0 -12
  744. package/src/modules/products/products.server.js +0 -8
  745. package/src/modules/products/routes/variants.routes.js +0 -59
  746. package/src/modules/products/store/products.js +4 -4
  747. package/src/modules/rents/controllers/services/rents.services.js +41 -11
  748. package/src/modules/rents/models/rent.model.js +1 -0
  749. package/src/modules/rents/views/components/pages/GanttChart.vue +1 -1
  750. package/src/modules/rents/views/components/pages/RentsEdit.vue +10 -2
  751. package/src/modules/spots/components/blocks/CardSpot.vue +14 -11
  752. package/src/modules/spots/components/pages/Spot.vue +1 -1
  753. package/src/modules/wallet/views/components/pages/Wallet.vue +2 -2
  754. package/src/styles/base/all.scss +10 -1
  755. package/src/styles/base/borders.scss +234 -155
  756. package/src/styles/layout.scss +36 -0
  757. package/src/styles/typography.scss +12 -4
  758. package/dist/Media-B2jWzwLB.cjs +0 -1
  759. package/dist/Media-DZ5_ItXQ.js +0 -111
  760. package/dist/main-C6_DPWGX.cjs +0 -11
  761. package/dist/martyrs/src/components/Button/Button.vue.js.map +0 -1
  762. package/dist/martyrs/src/components/Chips/Chips.vue.cjs.map +0 -1
  763. package/dist/martyrs/src/components/Chips/Chips.vue.js.map +0 -1
  764. package/dist/martyrs/src/components/Field/Field.vue2.cjs.map +0 -1
  765. package/dist/martyrs/src/components/Field/Field.vue2.js.map +0 -1
  766. package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs +0 -184
  767. package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs.map +0 -1
  768. package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js +0 -184
  769. package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js.map +0 -1
  770. package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterOptions.vue.cjs +0 -67
  771. package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterOptions.vue.cjs.map +0 -1
  772. package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterOptions.vue.js +0 -67
  773. package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterOptions.vue.js.map +0 -1
  774. package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterPrice.vue.cjs +0 -91
  775. package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterPrice.vue.cjs.map +0 -1
  776. package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterPrice.vue.js +0 -91
  777. package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterPrice.vue.js.map +0 -1
  778. package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterRange.vue2.cjs +0 -64
  779. package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterRange.vue2.cjs.map +0 -1
  780. package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterRange.vue2.js +0 -64
  781. package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterRange.vue2.js.map +0 -1
  782. package/dist/martyrs/src/modules/organizations/components/blocks/EditArray.vue.cjs +0 -80
  783. package/dist/martyrs/src/modules/organizations/components/blocks/EditArray.vue.cjs.map +0 -1
  784. package/dist/martyrs/src/modules/organizations/components/blocks/EditArray.vue.js +0 -80
  785. package/dist/martyrs/src/modules/organizations/components/blocks/EditArray.vue.js.map +0 -1
  786. package/dist/martyrs/src/modules/products/components/blocks/CardLeftover.vue.cjs +0 -118
  787. package/dist/martyrs/src/modules/products/components/blocks/CardLeftover.vue.cjs.map +0 -1
  788. package/dist/martyrs/src/modules/products/components/blocks/CardLeftover.vue.js +0 -118
  789. package/dist/martyrs/src/modules/products/components/blocks/CardLeftover.vue.js.map +0 -1
  790. package/dist/martyrs/src/modules/products/components/forms/ColumnSettingsMenu.vue.cjs +0 -73
  791. package/dist/martyrs/src/modules/products/components/forms/ColumnSettingsMenu.vue.cjs.map +0 -1
  792. package/dist/martyrs/src/modules/products/components/forms/ColumnSettingsMenu.vue.js +0 -73
  793. package/dist/martyrs/src/modules/products/components/forms/ColumnSettingsMenu.vue.js.map +0 -1
  794. package/dist/martyrs/src/modules/products/components/forms/ReorderSettingsForm.vue.cjs +0 -101
  795. package/dist/martyrs/src/modules/products/components/forms/ReorderSettingsForm.vue.cjs.map +0 -1
  796. package/dist/martyrs/src/modules/products/components/forms/ReorderSettingsForm.vue.js +0 -101
  797. package/dist/martyrs/src/modules/products/components/forms/ReorderSettingsForm.vue.js.map +0 -1
  798. package/dist/martyrs/src/modules/products/components/forms/StockAuditForm.vue.cjs +0 -135
  799. package/dist/martyrs/src/modules/products/components/forms/StockAuditForm.vue.cjs.map +0 -1
  800. package/dist/martyrs/src/modules/products/components/forms/StockAuditForm.vue.js +0 -135
  801. package/dist/martyrs/src/modules/products/components/forms/StockAuditForm.vue.js.map +0 -1
  802. package/dist/martyrs/src/modules/products/components/forms/StockHistoryView.vue.cjs +0 -148
  803. package/dist/martyrs/src/modules/products/components/forms/StockHistoryView.vue.cjs.map +0 -1
  804. package/dist/martyrs/src/modules/products/components/forms/StockHistoryView.vue.js +0 -148
  805. package/dist/martyrs/src/modules/products/components/forms/StockHistoryView.vue.js.map +0 -1
  806. package/dist/martyrs/src/modules/products/components/pages/LeftoverEdit.vue.cjs +0 -345
  807. package/dist/martyrs/src/modules/products/components/pages/LeftoverEdit.vue.cjs.map +0 -1
  808. package/dist/martyrs/src/modules/products/components/pages/LeftoverEdit.vue.js +0 -345
  809. package/dist/martyrs/src/modules/products/components/pages/LeftoverEdit.vue.js.map +0 -1
  810. package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.cjs +0 -316
  811. package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.cjs.map +0 -1
  812. package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.js +0 -316
  813. package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.js.map +0 -1
  814. package/dist/martyrs/src/modules/products/router/leftovers.router.cjs +0 -51
  815. package/dist/martyrs/src/modules/products/router/leftovers.router.cjs.map +0 -1
  816. package/dist/martyrs/src/modules/products/router/leftovers.router.js +0 -51
  817. package/dist/martyrs/src/modules/products/router/leftovers.router.js.map +0 -1
  818. package/dist/martyrs/src/modules/products/store/leftovers.cjs +0 -111
  819. package/dist/martyrs/src/modules/products/store/leftovers.cjs.map +0 -1
  820. package/dist/martyrs/src/modules/products/store/leftovers.js +0 -111
  821. package/dist/martyrs/src/modules/products/store/leftovers.js.map +0 -1
  822. package/src/modules/inventory/models/stock.inventory.model.js +0 -38
  823. package/src/modules/organizations/components/blocks/EditArray.vue +0 -147
  824. package/src/modules/products/components/blocks/CardLeftover.vue +0 -117
  825. package/src/modules/products/controllers/leftovers.controller.js +0 -117
  826. package/src/modules/products/models/leftover.model.js +0 -105
  827. package/src/modules/products/router/leftovers.router.js +0 -40
  828. package/src/modules/products/routes/leftovers.routes.js +0 -15
  829. package/src/modules/products/store/leftovers.js +0 -121
@@ -1 +1 @@
1
- {"version":3,"file":"CategoryEdit.vue.js","sources":["../../../../../../../src/modules/products/components/pages/CategoryEdit.vue"],"sourcesContent":["<template>\n <div v-if=\"!isLoading\" class=\"pd-thin bg-white for-transition w-100\">\n <Block v-if=\"!MOBILE_APP\" class=\"radius-medium mn-b-thin flex-nowrap flex-v-center flex\">\n <h1 class=\"mn-r-auto\">\n {{route.params.category ? 'Edit Category' : 'Add Category'}}\n </h1>\n\n <Button \n :submit=\"onSubmit\"\n class=\"pd-small radius-medium bg-main t-black uppercase t-medium\"\n >\n Save Category \n </Button>\n </Block>\n \n <Block \n title=\"Profile\"\n class=\"mn-b-thin\"\n >\n <div class=\"mn-b-medium w-100 flex-nowrap gap-thin flex\">\n <UploadImage \n v-model:photo=\"categories.state.current.photo\"\n :uploadPath=\"'categories'\"\n class=\"w-8r aspect-1x1 o-hidden mn-r-small radius-extra\" \n />\n <Field\n v-model:field=\"categories.state.current.name\"\n label=\"Name\"\n placeholder=\"Enter category name\"\n class=\"w-100 mn-b-small bg-white radius-small pd-medium\"\n /> \n </div>\n\n <div class=\"mn-b-medium w-100 flex-nowrap gap-thin flex\">\n\n\n <Field\n v-model:field=\"categories.state.current.order\"\n label=\"Order\"\n :disabled=\"true\"\n class=\"w-40 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"categories.state.current.url\"\n label=\"URL\"\n placeholder=\"Enter category URL\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n \n </div>\n\n <Select \n v-model:select=\"categories.state.current.status\"\n label=\"Status\"\n :options=\"[\n 'draft', \n 'internal',\n 'published',\n 'removed'\n ]\"\n placeholder=\"Display product\"\n class=\"pos-relative w-100 mn-b-small bg-white radius-small pd-medium\"\n />\n\n <div class=\"flex-v-center flex-nowrap flex\">\n <h4 class=\"mn-r-thin t-medium\">Localization</h4>\n \n <button \n @click=\"() => categories.state.current.translations.push({locale: '', text: ''})\" \n class=\"i-small pd-thin button-delete button\"\n >\n +\n </button>\n </div>\n <div \n class=\"gap-thin mn-b-thin flex-nowrap flex\" \n v-for=\"(item, index) in categories.state.current.translations\" \n :key=\"index\"\n > \n <Field\n v-model:field=\"item.locale\"\n placeholder=\"Locale\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.text\"\n placeholder=\"Text\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <div\n @click=\"() => categories.state.current.translations.splice(index, 1)\" \n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red\"\n >\n <IconDelete \n class=\"i-medium\"\n />\n </div>\n </div>\n\n \n </Block>\n <!-- Filters -->\n <Block\n title=\"Filters\"\n placeholder=\"No filters added yet\"\n :actions=\"[{\n label: '+',\n function: () => categories.state.current.filters.push({name: '', url: ''})\n }]\"\n >\n <div \n class=\"gap-thin mn-b-thin flex-nowrap flex\" \n v-for=\"(item, index) in categories.state.current.filters\" \n :key=\"index\"\n > \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Filter name\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.options\"\n placeholder=\"Filter options divided by ,\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <div\n @click=\"() => categories.state.current.filters.splice(index, 1)\" \n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red\"\n >\n <IconDelete \n class=\"i-medium\"\n />\n </div>\n </div> \n </Block>\n </div>\n \n</template>\n\n<script setup>\n // Import libs\n import { computed, onUnmounted, onMounted, ref } from 'vue'\n import { useRoute,useRouter } from 'vue-router'\n \n import IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\n import Button from \"@martyrs/src/components/Button/Button.vue\";\n import Select from \"@martyrs/src/components/Select/Select.vue\";\n import UploadImage from '@martyrs/src/components/UploadImage/UploadImage.vue';\n import Field from \"@martyrs/src/components/Field/Field.vue\";\n import Feed from '@martyrs/src/components/Feed/Feed.vue'\n\n\n import Block from '@martyrs/src/components/Block/Block.vue';\n\n import IconCheckmark from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue'\n\n // Import the new store structure\n import * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js'; \n import * as categories from '@martyrs/src/modules/products/store/categories.js';\n\n const route = useRoute()\n const router = useRouter()\n\n const emits = defineEmits(['page-loading', 'page-loaded']);\n\n // Data prefetching\n const isLoading = ref(true)\n onMounted(async () => {\n emits('page-loading');\n if (route.params.category) {\n await categories.actions.read({url: route.params.category})\n } else {\n categories.actions.clean() // Adjusted based on the new store's method to reset the category state\n }\n\n emits('page-loaded');\n isLoading.value = false\n })\n\n // Accessing state\n const category = computed(() => categories.state.current)\n const routePath = computed(() => route.name)\n\n // Navigation Bar\n globals.state.navigation_bar.actions = [{\n component: IconCheckmark,\n props: {\n fill: \"rgb(var(--main))\" \n },\n condition: () => auth.state.user && auth.state.user._id,\n action: () => onSubmit()\n }],\n\n onUnmounted(() => {\n globals.state.navigation_bar.actions = [];\n });\n\n\n\n // Functions\n async function onSubmit() {\n if (route.params.category) {\n\n categories.state.current.creator = {\n type: categories.state.current.creator.type,\n hidden: categories.state.current.creator.hidden,\n target: categories.state.current.creator.target._id\n }\n\n categories.state.current.owner = {\n type: categories.state.current.owner.type,\n target: categories.state.current.owner.target._id\n }\n\n await categories.actions.update(categories.state.current)\n\n redirectTo()\n } else {\n\n categories.state.current.creator = {\n type: 'user',\n hidden: false,\n target: auth.state.user._id\n }\n\n categories.state.current.owner = {\n type: route.params._id ? 'organization' : 'platform',\n hidden: false,\n target: route.params._id ? route.params._id : null\n }\n\n await categories.actions.create(categories.state.current)\n redirectTo()\n }\n }\n\n function redirectTo () {\n router.push({\n name: 'Categories', \n params: { \n _id: route.params._id\n } \n })\n }\n</script>\n\n<style lang=\"scss\">\n /* Your styles here */\n</style>\n"],"names":["categories.actions","categories.state","globals.state","IconCheckmark","auth.state"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkKE,UAAM,QAAQ,SAAQ;AACtB,UAAM,SAAS,UAAS;AAExB,UAAM,QAAQ;AAGd,UAAM,YAAY,IAAI,IAAI;AAC1B,cAAU,YAAY;AACpB,YAAM,cAAc;AACpB,UAAI,MAAM,OAAO,UAAU;AACzB,cAAMA,QAAmB,KAAK,EAAC,KAAK,MAAM,OAAO,SAAQ,CAAC;AAAA,MAChE,OAAW;AACLA,gBAAmB,MAAO;AAAA,MAChC;AAEI,YAAM,aAAa;AACnB,gBAAU,QAAQ;AAAA,IACnB,CAAA;AAGgB,aAAS,MAAMC,MAAiB,OAAO;AACtC,aAAS,MAAM,MAAM,IAAI;AAG3CC,YAAc,eAAe,UAAU,CAAC;AAAA,MACtC,WAAWC;AAAAA,MACX,OAAO;AAAA,QACL,MAAM;AAAA,MACP;AAAA,MACD,WAAW,MAAMC,QAAW,QAAQA,QAAW,KAAK;AAAA,MACpD,QAAQ,MAAM,SAAQ;AAAA,IAC1B,CAAG,GAEF,YAAY,MAAM;AACfF,cAAc,eAAe,UAAU,CAAE;AAAA,IAC7C,CAAG;AAKD,mBAAe,WAAW;AACxB,UAAI,MAAM,OAAO,UAAU;AAEzBD,cAAiB,QAAQ,UAAU;AAAA,UACjC,MAAMA,MAAiB,QAAQ,QAAQ;AAAA,UACvC,QAAQA,MAAiB,QAAQ,QAAQ;AAAA,UACzC,QAAQA,MAAiB,QAAQ,QAAQ,OAAO;AAAA,QACxD;AAEMA,cAAiB,QAAQ,QAAQ;AAAA,UAC/B,MAAMA,MAAiB,QAAQ,MAAM;AAAA,UACrC,QAAQA,MAAiB,QAAQ,MAAM,OAAO;AAAA,QACtD;AAEM,cAAMD,QAAmB,OAAOC,MAAiB,OAAO;AAExD,mBAAU;AAAA,MAChB,OAAW;AAELA,cAAiB,QAAQ,UAAU;AAAA,UACjC,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,QAAQG,QAAW,KAAK;AAAA,QAChC;AAEMH,cAAiB,QAAQ,QAAQ;AAAA,UAC/B,MAAM,MAAM,OAAO,MAAM,iBAAiB;AAAA,UAC1C,QAAQ;AAAA,UACR,QAAQ,MAAM,OAAO,MAAM,MAAM,OAAO,MAAM;AAAA,QACtD;AAEM,cAAMD,QAAmB,OAAOC,MAAiB,OAAO;AACxD,mBAAU;AAAA,MAChB;AAAA,IACA;AAEE,aAAS,aAAc;AACrB,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,KAAK,MAAM,OAAO;AAAA,QACnB;AAAA,MACF,CAAA;AAAA,IACL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"CategoryEdit.vue.js","sources":["../../../../../../../src/modules/products/components/pages/CategoryEdit.vue"],"sourcesContent":["<template>\n <div v-if=\"!isLoading\" class=\"rows-auto pd-thin bg-white for-transition w-100\">\n <Block v-if=\"!MOBILE_APP\" class=\"radius-medium mn-b-thin flex-nowrap flex-v-center flex\">\n <h1 class=\"mn-r-auto\">\n {{route.params.category ? 'Edit Category' : 'Add Category'}}\n </h1>\n\n <Button \n :submit=\"onSubmit\"\n class=\"pd-small radius-medium bg-main t-black uppercase t-medium\"\n >\n Save Category \n </Button>\n </Block>\n \n <Block \n title=\"Profile\"\n class=\"mn-b-thin\"\n >\n <div class=\"cols-auto-1fr mn-b-thin w-100 \">\n <UploadImage \n v-model:photo=\"categories.state.current.photo\"\n :uploadPath=\"'categories'\"\n class=\"aspect-1x1 h-100 o-hidden mn-r-small radius-extra\" \n />\n <Field\n v-model:field=\"categories.state.current.name\"\n label=\"Name\"\n placeholder=\"Enter category name\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n </div>\n\n <div class=\"mn-b-thin w-100 flex-nowrap gap-thin flex\">\n\n\n <Field\n v-model:field=\"categories.state.current.order\"\n label=\"Order\"\n :disabled=\"true\"\n class=\"w-40 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"categories.state.current.url\"\n label=\"URL\"\n placeholder=\"Enter category URL\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n \n </div>\n\n <Select \n v-model:select=\"categories.state.current.status\"\n label=\"Status\"\n :options=\"[\n 'draft', \n 'internal',\n 'published',\n 'removed'\n ]\"\n placeholder=\"Select category\"\n class=\"pos-relative w-100 bg-white radius-small pd-medium\"\n />\n\n <!-- <div class=\"flex-v-center flex-nowrap flex\">\n <h4 class=\"mn-r-thin t-medium\">Localization</h4>\n \n <button \n @click=\"() => categories.state.current.translations.push({locale: '', text: ''})\" \n class=\"i-small pd-thin button-delete button\"\n >\n +\n </button>\n </div> -->\n <div \n class=\"gap-thin mn-b-thin flex-nowrap flex\" \n v-for=\"(item, index) in categories.state.current.translations\" \n :key=\"index\"\n > \n <Field\n v-model:field=\"item.locale\"\n placeholder=\"Locale\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.text\"\n placeholder=\"Text\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <div\n @click=\"() => categories.state.current.translations.splice(index, 1)\" \n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red\"\n >\n <IconDelete \n class=\"i-medium\"\n />\n </div>\n </div>\n\n \n </Block>\n <!-- Filters -->\n <Block\n title=\"Filters\"\n placeholder=\"No filters added yet\"\n :actions=\"[{\n label: '+',\n function: () => categories.state.current.filters.push({name: '', url: ''})\n }]\"\n >\n <div \n class=\"gap-thin mn-b-thin flex-nowrap flex\" \n v-for=\"(item, index) in categories.state.current.filters\" \n :key=\"index\"\n > \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Filter name\"\n class=\"w-100 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.options\"\n placeholder=\"Filter options divided by ,\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <div\n @click=\"() => categories.state.current.filters.splice(index, 1)\" \n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red\"\n >\n <IconDelete \n class=\"i-medium\"\n />\n </div>\n </div> \n </Block>\n </div>\n \n</template>\n\n<script setup>\n // Import libs\n import { computed, onUnmounted, onMounted, ref } from 'vue'\n import { useRoute,useRouter } from 'vue-router'\n \n import IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\n import Button from \"@martyrs/src/components/Button/Button.vue\";\n import Select from \"@martyrs/src/components/Select/Select.vue\";\n import UploadImage from '@martyrs/src/components/UploadImage/UploadImage.vue';\n import Field from \"@martyrs/src/components/Field/Field.vue\";\n import Feed from '@martyrs/src/components/Feed/Feed.vue'\n\n\n import Block from '@martyrs/src/components/Block/Block.vue';\n\n import IconCheckmark from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue'\n\n // Import the new store structure\n import * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js'; \n import * as categories from '@martyrs/src/modules/products/store/categories.js';\n\n const route = useRoute()\n const router = useRouter()\n\n const emits = defineEmits(['page-loading', 'page-loaded']);\n\n // Data prefetching\n const isLoading = ref(true)\n onMounted(async () => {\n emits('page-loading');\n if (route.params.category) {\n await categories.actions.read({url: route.params.category})\n } else {\n categories.actions.clean() // Adjusted based on the new store's method to reset the category state\n }\n\n emits('page-loaded');\n isLoading.value = false\n })\n\n // Accessing state\n const category = computed(() => categories.state.current)\n const routePath = computed(() => route.name)\n\n // Navigation Bar\n globals.state.navigation_bar.actions = [{\n component: IconCheckmark,\n props: {\n fill: \"rgb(var(--main))\" \n },\n condition: () => auth.state.user && auth.state.user._id,\n action: () => onSubmit()\n }],\n\n onUnmounted(() => {\n globals.state.navigation_bar.actions = [];\n });\n\n\n\n // Functions\n async function onSubmit() {\n if (route.params.category) {\n\n categories.state.current.creator = {\n type: categories.state.current.creator.type,\n hidden: categories.state.current.creator.hidden,\n target: categories.state.current.creator.target._id\n }\n\n categories.state.current.owner = {\n type: categories.state.current.owner.type,\n target: categories.state.current.owner.target._id\n }\n\n await categories.actions.update(categories.state.current)\n\n redirectTo()\n } else {\n\n categories.state.current.creator = {\n type: 'user',\n hidden: false,\n target: auth.state.user._id\n }\n\n categories.state.current.owner = {\n type: route.params._id ? 'organization' : 'platform',\n hidden: false,\n target: route.params._id ? route.params._id : null\n }\n\n await categories.actions.create(categories.state.current)\n redirectTo()\n }\n }\n\n function redirectTo () {\n router.push({\n name: 'Categories', \n params: { \n _id: route.params._id\n } \n })\n }\n</script>\n\n<style lang=\"scss\">\n.container {\n max-width: 100%;\n margin: auto;\n}\n\n.grid {\n \n}\n\n.square {\n aspect-ratio: 1 / 1;\n height: 100%;\n background: #ccc;\n}\n</style>\n"],"names":["categories.actions","categories.state","globals.state","IconCheckmark","auth.state"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkKE,UAAM,QAAQ,SAAQ;AACtB,UAAM,SAAS,UAAS;AAExB,UAAM,QAAQ;AAGd,UAAM,YAAY,IAAI,IAAI;AAC1B,cAAU,YAAY;AACpB,YAAM,cAAc;AACpB,UAAI,MAAM,OAAO,UAAU;AACzB,cAAMA,QAAmB,KAAK,EAAC,KAAK,MAAM,OAAO,SAAQ,CAAC;AAAA,MAChE,OAAW;AACLA,gBAAmB,MAAO;AAAA,MAChC;AAEI,YAAM,aAAa;AACnB,gBAAU,QAAQ;AAAA,IACnB,CAAA;AAGgB,aAAS,MAAMC,MAAiB,OAAO;AACtC,aAAS,MAAM,MAAM,IAAI;AAG3CC,YAAc,eAAe,UAAU,CAAC;AAAA,MACtC,WAAWC;AAAAA,MACX,OAAO;AAAA,QACL,MAAM;AAAA,MACP;AAAA,MACD,WAAW,MAAMC,QAAW,QAAQA,QAAW,KAAK;AAAA,MACpD,QAAQ,MAAM,SAAQ;AAAA,IAC1B,CAAG,GAEF,YAAY,MAAM;AACfF,cAAc,eAAe,UAAU,CAAE;AAAA,IAC7C,CAAG;AAKD,mBAAe,WAAW;AACxB,UAAI,MAAM,OAAO,UAAU;AAEzBD,cAAiB,QAAQ,UAAU;AAAA,UACjC,MAAMA,MAAiB,QAAQ,QAAQ;AAAA,UACvC,QAAQA,MAAiB,QAAQ,QAAQ;AAAA,UACzC,QAAQA,MAAiB,QAAQ,QAAQ,OAAO;AAAA,QACxD;AAEMA,cAAiB,QAAQ,QAAQ;AAAA,UAC/B,MAAMA,MAAiB,QAAQ,MAAM;AAAA,UACrC,QAAQA,MAAiB,QAAQ,MAAM,OAAO;AAAA,QACtD;AAEM,cAAMD,QAAmB,OAAOC,MAAiB,OAAO;AAExD,mBAAU;AAAA,MAChB,OAAW;AAELA,cAAiB,QAAQ,UAAU;AAAA,UACjC,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,QAAQG,QAAW,KAAK;AAAA,QAChC;AAEMH,cAAiB,QAAQ,QAAQ;AAAA,UAC/B,MAAM,MAAM,OAAO,MAAM,iBAAiB;AAAA,UAC1C,QAAQ;AAAA,UACR,QAAQ,MAAM,OAAO,MAAM,MAAM,OAAO,MAAM;AAAA,QACtD;AAEM,cAAMD,QAAmB,OAAOC,MAAiB,OAAO;AACxD,mBAAU;AAAA,MAChB;AAAA,IACA;AAEE,aAAS,aAAc;AACrB,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ;AAAA,UACN,KAAK,MAAM,OAAO;AAAA,QACnB;AAAA,MACF,CAAA;AAAA,IACL;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -10,7 +10,7 @@ const products = require("../../store/products.cjs");
10
10
  require("../../store/categories.cjs");
11
11
  const shopcart = require("../../../orders/store/shopcart.cjs");
12
12
  ;/* empty css */
13
- ;/* empty css */
13
+ ;/* empty css */
14
14
  ;/* empty css */
15
15
  ;/* empty css */
16
16
  const IconEdit = require("../../../icons/navigation/IconEdit.vue.cjs");
@@ -44,7 +44,10 @@ const _hoisted_7 = {
44
44
  };
45
45
  const _hoisted_8 = { class: "w-100 pd-small radius-small flex flex-column gap-small bg-light" };
46
46
  const _hoisted_9 = ["innerHTML"];
47
- const _hoisted_10 = { class: "mn-b-small flex-nowrap flex flex-v-center" };
47
+ const _hoisted_10 = {
48
+ key: 5,
49
+ class: "mn-b-small flex-nowrap flex flex-v-center"
50
+ };
48
51
  const _hoisted_11 = { class: "cols-2 mn-b-medium w-100 gap-small" };
49
52
  const _hoisted_12 = { class: "w-100 pd-small radius-small bg-light product-attributes" };
50
53
  const _hoisted_13 = { class: "mn-b-thin t-demi" };
@@ -78,7 +81,7 @@ const _sfc_main = {
78
81
  vue.onMounted(async () => {
79
82
  var _a, _b;
80
83
  emits("page-loading");
81
- await products.actions.read({ _id: route.params.product, lookup: ["recommended"] });
84
+ await products.actions.read({ _id: route.params.product, lookup: ["variants", "recommended", "inventory"] });
82
85
  currentImages.value = [...productImages.value];
83
86
  if (typeof gtag === "function") {
84
87
  gtag("event", "view_item", {
@@ -105,18 +108,26 @@ const _sfc_main = {
105
108
  currentImages.value = [...productImages.value];
106
109
  }
107
110
  }
108
- async function handleAddVariantToCart(variantItem) {
111
+ async function handleAddToCart({ variant, quantity }) {
109
112
  var _a, _b, _c;
113
+ console.log("variant is", variant);
114
+ console.log("quantity is", quantity);
115
+ let selectedDates = null;
110
116
  try {
117
+ if (!variant) {
118
+ throw new Error("Variant is required for adding product to cart");
119
+ }
111
120
  if (!shopcart.state.organization) {
112
121
  shopcart.state.organization = product.value.owner.target._id;
113
122
  }
114
123
  if (product.value.listing === "rent") {
115
- const selectedDates = await proxy.$dateSelector({
116
- product: product.value
117
- });
124
+ selectedDates = await proxy.$dateSelector(
125
+ product.value._id,
126
+ variant._id,
127
+ quantity,
128
+ variant.price || product.value.price
129
+ );
118
130
  if (!selectedDates) throw new Error("Date selection cancelled");
119
- variantItem.selectedDates = selectedDates;
120
131
  }
121
132
  if (shopcart.state.organization !== product.value.owner.target._id) {
122
133
  const result = await proxy.$alert({
@@ -134,21 +145,21 @@ const _sfc_main = {
134
145
  if (typeof gtag === "function") {
135
146
  gtag("event", "add_to_cart", {
136
147
  currency: returnCurrency(),
137
- value: variantItem.price || 0,
148
+ value: variant.price || 0,
138
149
  items: [{
139
- item_id: variantItem._id,
140
- item_name: variantItem.name,
141
- price: variantItem.price || 0,
150
+ item_id: product.value._id,
151
+ item_name: product.value.name,
152
+ price: variant.price || product.value.price || 0,
142
153
  quantity: 1,
143
154
  item_category: product.value.category || "",
144
155
  item_brand: ((_c = (_b = (_a = product.value.owner) == null ? void 0 : _a.target) == null ? void 0 : _b.profile) == null ? void 0 : _c.name) || ""
145
156
  }]
146
157
  });
147
158
  }
148
- await shopcart.actions.addVariantToCart(variantItem, product.value.owner.target._id);
159
+ await shopcart.actions.addProductToCart(product.value, variant, product.value.owner.target._id, selectedDates, quantity);
149
160
  return true;
150
161
  } catch (error) {
151
- console.error("Error while adding variant to cart:", error);
162
+ console.error("Error while adding product to cart:", error);
152
163
  throw error;
153
164
  }
154
165
  }
@@ -185,7 +196,7 @@ const _sfc_main = {
185
196
  discounts: product.value.discounts,
186
197
  regularPrice: 100,
187
198
  onVariantSelected: handleVariantSelected,
188
- onAddToCart: handleAddVariantToCart,
199
+ onAddToCart: handleAddToCart,
189
200
  onUpdateImages: handleUpdateImages
190
201
  }, null, 8, ["product-variants", "product-id", "product-name", "discounts"])) : vue.createCommentVNode("", true),
191
202
  product.value.included ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6, [
@@ -201,10 +212,10 @@ const _sfc_main = {
201
212
  }, null, 8, _hoisted_9)
202
213
  ])
203
214
  ])) : vue.createCommentVNode("", true),
204
- vue.createElementVNode("div", _hoisted_10, [
215
+ product.value.attributes && product.value.attributes.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_10, [
205
216
  vue.createVNode(IconInfo.default, { class: "mn-r-micro i-medium" }),
206
217
  _cache[1] || (_cache[1] = vue.createElementVNode("p", { class: "t-medium" }, "Product Details", -1))
207
- ]),
218
+ ])) : vue.createCommentVNode("", true),
208
219
  vue.createElementVNode("div", _hoisted_11, [
209
220
  product.value.attributes && product.value.attributes.length > 0 ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(product.value.attributes, (attributes) => {
210
221
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_12, [
@@ -218,7 +229,7 @@ const _sfc_main = {
218
229
  _cache[2] || (_cache[2] = vue.createElementVNode("p", { class: "t-medium" }, "Provided by", -1))
219
230
  ]),
220
231
  product.value.owner ? (vue.openBlock(), vue.createBlock(CardOrganization.default, {
221
- key: 5,
232
+ key: 6,
222
233
  organization: product.value.owner.target,
223
234
  showRating: true,
224
235
  showFollowers: false,
@@ -1 +1 @@
1
- {"version":3,"file":"Product.vue.cjs","sources":["../../../../../../../src/modules/products/components/pages/Product.vue"],"sourcesContent":["<template>\n <div v-if=\"products.state.current\" class=\"w-100 mobile:pd-thin pd-small bg-white\">\n <div class=\"cols-2 mobile:cols-1 w-100 gap-medium\">\n\n <ProductImages\n :images=\"currentImages\"\n :product=\"product\"\n />\n\n <div class=\"pos-relative w-100 h-100 flex-column flex-h-center flex\">\n <!-- Edit Button -->\n <router-link\n v-if=\"hasAccess(route.params._id, 'products', 'edit', auth.state.accesses, auth.state.access.roles)\"\n :to=\"\n route.params._id \n ? { name: 'Organization_ProductEdit', params: { id: route.params._id, product: product._id } } \n : { name: 'ProductEdit', params: { product: product._id } }\n \"\n class=\"\n z-index-2\n cursor-pointer \n pos-absolute pos-t-zero pos-r-zero\n radius-extra pd-thin bg-second\n \"\n >\n <IconEdit\n class=\"i-regular\"\n classes=\"fill-white\"\n />\n </router-link>\n\n <h2 class=\"w-100 h1-product mn-b-medium\">{{ product.name }}</h2>\n\n <p v-if=\"product.description\" class=\"w-100 mn-b-medium\" style=\"white-space: pre-line;\">\n {{ product.translations?.length > 1 ? t('description') : product.description }}\n </p>\n \n <!-- Компонент выбора вариантов товара -->\n <ProductConfigurator\n v-if=\"product.variants?.length > 0\"\n :product-variants=\"product.variants\"\n :product-id=\"product._id\"\n :product-name=\"product.name\"\n :discounts=\"product.discounts\"\n :regularPrice=\"100\"\n @variant-selected=\"handleVariantSelected\"\n @add-to-cart=\"handleAddVariantToCart\"\n @update-images=\"handleUpdateImages\"\n />\n\n <div v-if=\"product.included\" class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconList class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Included</p>\n </div>\n\n <div v-if=\"product.included\" class=\"cols-1 mn-b-medium w-100 \">\n <div\n class=\"w-100 pd-small radius-small flex flex-column gap-small bg-light\"\n >\n <p class=\"t-medium\" style=\"white-space: pre-line;\" v-html=\"product.included\"></p>\n </div>\n </div>\n\n\n <div class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconInfo class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Product Details</p>\n </div>\n\n <div class=\"cols-2 mn-b-medium w-100 gap-small\">\n <div\n v-if=\"product.attributes && product.attributes.length > 0\"\n v-for=\"attributes in product.attributes\"\n class=\"w-100 pd-small radius-small bg-light product-attributes\"\n >\n <p class=\"mn-b-thin t-demi\">{{ attributes.name }}</p>\n <p>{{ attributes.value }}</p>\n </div>\n </div>\n\n <div class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconGroups class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Provided by</p>\n </div>\n\n <CardOrganization \n v-if=\"product.owner\"\n :organization=\"product.owner.target\"\n :showRating=\"true\"\n :showFollowers=\"false\"\n :showProducts=\"false\"\n class=\"bg-light w-100 o-hidden radius-medium pd-small \"\n />\n </div>\n </div>\n \n <ProductsRecommended \n v-if=\"product.recommended.length > 0\"\n :products=\"product.recommended\"\n class=\" mn-t-big h-max pos-relative\"\n />\n\n <div class=\"h-max mn-t-big pos-relative\">\n <h3 class=\"pd-b-small\">Most Popular</h3>\n <ProductsPopular class=\"mn-r-big-negative mn-l-big-negative\"/>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, onMounted, getCurrentInstance } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useGlobalMixins } from \"@martyrs/src/modules/globals/views/mixins/mixins.js\"\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js'\nimport * as products from '@martyrs/src/modules/products/store/products.js'\nimport * as categories from '@martyrs/src/modules/products/store/categories.js'\nimport * as shopcart from '@martyrs/src/modules/orders/store/shopcart.js'\n\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Popup from '@martyrs/src/components/Popup/Popup.vue'\nimport Tab from '@martyrs/src/components/Tab/Tab.vue'\nimport Calendar from '@martyrs/src/components/Calendar/Calendar.vue'\n\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue'\nimport IconInfo from '@martyrs/src/modules/icons/navigation/IconInfo.vue'\n\nimport IconShopcartAdd from '@martyrs/src/modules/icons/actions/IconShopcartAdd.vue'\n\nimport IconList from '@martyrs/src/modules/icons/entities/IconList.vue';\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\n\nimport ProductImages from '@martyrs/src/modules/products/components/blocks/ProductImages.vue'\nimport ProductConfigurator from '@martyrs/src/modules/products/components/sections/ProductConfigurator.vue'\nimport ProductsRecommended from '@martyrs/src/modules/products/components/sections/ProductsRecommended.vue';\nimport ProductsPopular from '@martyrs/src/modules/products/components/sections/ProductsPopular.vue'\n\nimport CardOrganization from '@martyrs/src/modules/organizations/components/blocks/CardOrganization.vue'\n\nconst route = useRoute()\nconst router = useRouter()\nconst { proxy } = getCurrentInstance()\nconst { returnCurrency, hasAccess } = useGlobalMixins()\n\nconst product = computed(() => products.state.current)\nconst productImages = computed(() => products.state.current.images || [])\n\n// Состояние для отслеживания текущих изображений (товара или варианта)\nconst currentImages = ref([])\n// Выбранный вариант товара\nconst selectedVariant = ref(null)\n\nconst text = {\n en: { addtoorder: 'Add to Cart', fastorder: 'Fast Order', description: 'Description' },\n ru: { addtoorder: 'Добавить в корзину', fastorder: 'Быстрый заказ', description: 'Описание' }\n}\n\nconst { t } = useI18n({ messages: text })\n\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\nconst recommendation = defineProps({\n recommendation: {\n type: Boolean,\n default: false\n }\n})\n \nproducts.state.current = null\n\nonMounted(async () => {\n emits('page-loading');\n \n await products.actions.read({ _id: route.params.product, lookup: ['recommended'] })\n \n // Инициализируем текущие изображения изображениями товара\n currentImages.value = [...productImages.value]\n\n if (typeof gtag === 'function') {\n gtag('event', 'view_item', {\n currency: returnCurrency(),\n value: product.value.price || 0,\n items: [{\n item_id: product.value._id,\n item_name: product.value.name,\n price: product.value.price || 0,\n item_category: product.value.category || '',\n item_brand: product.value.owner?.target?.profile.name || ''\n }]\n });\n }\n\n emits('page-loaded');\n})\n\n// Обработчик выбора варианта\nfunction handleVariantSelected(variant) {\n selectedVariant.value = variant\n}\n\n// Обработчик обновления изображений при выборе варианта\nfunction handleUpdateImages(images) {\n if (images && images.length > 0) {\n currentImages.value = [...images]\n } else {\n // Если у варианта нет изображений, возвращаем изображения товара\n currentImages.value = [...productImages.value]\n }\n}\n\n// Обработчик добавления варианта в корзину\nasync function handleAddVariantToCart(variantItem) {\n try {\n if (!shopcart.state.organization) {\n shopcart.state.organization = product.value.owner.target._id\n }\n \n // Проверка на товар с арендой\n if (product.value.listing === 'rent') {\n const selectedDates = await proxy.$dateSelector({\n product: product.value\n });\n \n if (!selectedDates) throw new Error('Date selection cancelled')\n \n variantItem.selectedDates = selectedDates\n }\n \n // Проверка на разные организации в корзине\n if (shopcart.state.organization !== product.value.owner.target._id) {\n const result = await proxy.$alert({\n title: 'Replace items in your cart?',\n message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,\n actions: [\n { label: 'Cancel', value: false },\n { label: 'Replace', value: true }\n ]\n })\n\n if (!result) throw new Error('Cart replacement cancelled')\n\n shopcart.state.positions = []\n shopcart.state.organization = product.value.owner.target._id\n }\n\n // Аналитика: регистрируем добавление в корзину\n if (typeof gtag === 'function') {\n gtag('event', 'add_to_cart', {\n currency: returnCurrency(),\n value: variantItem.price || 0,\n items: [{\n item_id: variantItem._id,\n item_name: variantItem.name,\n price: variantItem.price || 0,\n quantity: 1,\n item_category: product.value.category || '',\n item_brand: product.value.owner?.target?.profile?.name || ''\n }]\n });\n }\n \n // Добавляем вариант в корзину\n await shopcart.actions.addVariantToCart(variantItem, product.value.owner.target._id)\n return true\n } catch (error) {\n console.error('Error while adding variant to cart:', error)\n throw error\n }\n}\n\n// Оригинальная функция добавления товара в корзину (для товаров без вариантов)\nasync function addToCart(product) {\n let selectedDates = null\n\n try {\n if (!shopcart.state.organization) {\n shopcart.state.organization = product.owner.target._id\n }\n if (product.listing === 'rent') {\n selectedDates = await proxy.$dateSelector({\n product: product.value\n });\n \n if (!selectedDates) throw new Error('Date selection cancelled')\n \n }\n // Если организация товара отличается от текущей в корзине\n if (shopcart.state.organization !== product.owner.target._id) {\n const result = await proxy.$alert({\n title: 'Replace items in your cart?',\n message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,\n actions: [\n { label: 'Cancel', value: false },\n { label: 'Replace', value: true }\n ]\n })\n\n if (!result) throw new Error('Cart replacement cancelled')\n\n shopcart.state.positions = []\n shopcart.state.organization = product.owner.target._id\n }\n\n if (typeof gtag === 'function') {\n gtag('event', 'add_to_cart', {\n currency: returnCurrency(),\n value: product.price || 0,\n items: [{\n item_id: product._id,\n item_name: product.name,\n price: product.price || 0,\n quantity: 1,\n item_category: product.category || '',\n item_brand: product.owner?.target?.profile?.name || ''\n }]\n });\n }\n \n await shopcart.actions.addProductToCart(product, product.owner.target._id, selectedDates)\n return true\n } catch (error) {\n console.error('Error while adding product to cart:', error)\n throw error\n }\n}\n</script>"],"names":["useRoute","useRouter","getCurrentInstance","useGlobalMixins","computed","products.state","ref","useI18n","onMounted","products.actions","shopcart.state","shopcart.actions"],"mappings":"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"}
1
+ {"version":3,"file":"Product.vue.cjs","sources":["../../../../../../../src/modules/products/components/pages/Product.vue"],"sourcesContent":["<template>\n <div v-if=\"products.state.current\" class=\"w-100 mobile:pd-thin pd-small bg-white\">\n <div class=\"cols-2 mobile:cols-1 w-100 gap-medium\">\n\n <ProductImages\n :images=\"currentImages\"\n :product=\"product\"\n />\n\n <div class=\"pos-relative w-100 h-100 flex-column flex-h-center flex\">\n <!-- Edit Button -->\n <router-link\n v-if=\"hasAccess(route.params._id, 'products', 'edit', auth.state.accesses, auth.state.access.roles)\"\n :to=\"\n route.params._id \n ? { name: 'Organization_ProductEdit', params: { id: route.params._id, product: product._id } } \n : { name: 'ProductEdit', params: { product: product._id } }\n \"\n class=\"\n z-index-2\n cursor-pointer \n pos-absolute pos-t-zero pos-r-zero\n radius-extra pd-thin bg-second\n \"\n >\n <IconEdit\n class=\"i-regular\"\n classes=\"fill-white\"\n />\n </router-link>\n\n <h2 class=\"w-100 h1-product mn-b-medium\">{{ product.name }}</h2>\n\n <p v-if=\"product.description\" class=\"w-100 mn-b-medium\" style=\"white-space: pre-line;\">\n {{ product.translations?.length > 1 ? t('description') : product.description }}\n </p>\n \n <!-- Компонент выбора вариантов товара -->\n <ProductConfigurator\n v-if=\"product.variants?.length > 0\"\n :product-variants=\"product.variants\"\n :product-id=\"product._id\"\n :product-name=\"product.name\"\n :discounts=\"product.discounts\"\n :regularPrice=\"100\"\n @variant-selected=\"handleVariantSelected\"\n @add-to-cart=\"handleAddToCart\"\n @update-images=\"handleUpdateImages\"\n />\n\n <div v-if=\"product.included\" class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconList class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Included</p>\n </div>\n\n <div v-if=\"product.included\" class=\"cols-1 mn-b-medium w-100 \">\n <div\n class=\"w-100 pd-small radius-small flex flex-column gap-small bg-light\"\n >\n <p class=\"t-medium\" style=\"white-space: pre-line;\" v-html=\"product.included\"></p>\n </div>\n </div>\n\n\n <div v-if=\"product.attributes && product.attributes.length > 0\" class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconInfo class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Product Details</p>\n </div>\n\n <div class=\"cols-2 mn-b-medium w-100 gap-small\">\n <div\n v-if=\"product.attributes && product.attributes.length > 0\"\n v-for=\"attributes in product.attributes\"\n class=\"w-100 pd-small radius-small bg-light product-attributes\"\n >\n <p class=\"mn-b-thin t-demi\">{{ attributes.name }}</p>\n <p>{{ attributes.value }}</p>\n </div>\n </div>\n\n <div class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconGroups class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Provided by</p>\n </div>\n\n <CardOrganization \n v-if=\"product.owner\"\n :organization=\"product.owner.target\"\n :showRating=\"true\"\n :showFollowers=\"false\"\n :showProducts=\"false\"\n class=\"bg-light w-100 o-hidden radius-medium pd-small \"\n />\n </div>\n </div>\n \n <ProductsRecommended \n v-if=\"product.recommended.length > 0\"\n :products=\"product.recommended\"\n class=\" mn-t-big h-max pos-relative\"\n />\n\n <div class=\"h-max mn-t-big pos-relative\">\n <h3 class=\"pd-b-small\">Most Popular</h3>\n <ProductsPopular class=\"mn-r-big-negative mn-l-big-negative\"/>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, onMounted, getCurrentInstance } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useGlobalMixins } from \"@martyrs/src/modules/globals/views/mixins/mixins.js\"\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js'\nimport * as products from '@martyrs/src/modules/products/store/products.js'\nimport * as categories from '@martyrs/src/modules/products/store/categories.js'\nimport * as shopcart from '@martyrs/src/modules/orders/store/shopcart.js'\n\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Popup from '@martyrs/src/components/Popup/Popup.vue'\nimport Tab from '@martyrs/src/components/Tab/Tab.vue'\nimport Calendar from '@martyrs/src/components/Calendar/Calendar.vue'\n\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue'\nimport IconInfo from '@martyrs/src/modules/icons/navigation/IconInfo.vue'\n\nimport IconShopcartAdd from '@martyrs/src/modules/icons/actions/IconShopcartAdd.vue'\n\nimport IconList from '@martyrs/src/modules/icons/entities/IconList.vue';\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\n\nimport ProductImages from '@martyrs/src/modules/products/components/blocks/ProductImages.vue'\nimport ProductConfigurator from '@martyrs/src/modules/products/components/sections/ProductConfigurator.vue'\nimport ProductsRecommended from '@martyrs/src/modules/products/components/sections/ProductsRecommended.vue';\nimport ProductsPopular from '@martyrs/src/modules/products/components/sections/ProductsPopular.vue'\n\nimport CardOrganization from '@martyrs/src/modules/organizations/components/blocks/CardOrganization.vue'\n\nconst route = useRoute()\nconst router = useRouter()\nconst { proxy } = getCurrentInstance()\nconst { returnCurrency, hasAccess } = useGlobalMixins()\n\nconst product = computed(() => products.state.current)\nconst productImages = computed(() => products.state.current.images || [])\n\n// Состояние для отслеживания текущих изображений (товара или варианта)\nconst currentImages = ref([])\n// Выбранный вариант товара\nconst selectedVariant = ref(null)\n\nconst text = {\n en: { addtoorder: 'Add to Cart', fastorder: 'Fast Order', description: 'Description' },\n ru: { addtoorder: 'Добавить в корзину', fastorder: 'Быстрый заказ', description: 'Описание' }\n}\n\nconst { t } = useI18n({ messages: text })\n\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\nconst recommendation = defineProps({\n recommendation: {\n type: Boolean,\n default: false\n }\n})\n \nproducts.state.current = null\n\nonMounted(async () => {\n emits('page-loading');\n \n await products.actions.read({ _id: route.params.product, lookup: ['variants','recommended','inventory'] })\n \n // Инициализируем текущие изображения изображениями товара\n currentImages.value = [...productImages.value]\n\n if (typeof gtag === 'function') {\n gtag('event', 'view_item', {\n currency: returnCurrency(),\n value: product.value.price || 0,\n items: [{\n item_id: product.value._id,\n item_name: product.value.name,\n price: product.value.price || 0,\n item_category: product.value.category || '',\n item_brand: product.value.owner?.target?.profile.name || ''\n }]\n });\n }\n\n emits('page-loaded');\n})\n\n// Обработчик выбора варианта\nfunction handleVariantSelected(variant) {\n selectedVariant.value = variant\n}\n\n// Обработчик обновления изображений при выборе варианта\nfunction handleUpdateImages(images) {\n if (images && images.length > 0) {\n currentImages.value = [...images]\n } else {\n // Если у варианта нет изображений, возвращаем изображения товара\n currentImages.value = [...productImages.value]\n }\n}\n\n// Функция добавления товара в корзину - теперь требует выбранный вариант\nasync function handleAddToCart({variant, quantity}) {\n console.log('variant is', variant)\n console.log('quantity is', quantity)\n let selectedDates = null\n\n try {\n if (!variant) {\n throw new Error('Variant is required for adding product to cart')\n }\n\n if (!shopcart.state.organization) {\n shopcart.state.organization = product.value.owner.target._id\n }\n \n if (product.value.listing === 'rent') {\n selectedDates = await proxy.$dateSelector(\n product.value._id,\n variant._id,\n quantity,\n variant.price || product.value.price\n );\n \n if (!selectedDates) throw new Error('Date selection cancelled')\n }\n \n // Если организация товара отличается от текущей в корзине\n if (shopcart.state.organization !== product.value.owner.target._id) {\n const result = await proxy.$alert({\n title: 'Replace items in your cart?',\n message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,\n actions: [\n { label: 'Cancel', value: false },\n { label: 'Replace', value: true }\n ]\n })\n\n if (!result) throw new Error('Cart replacement cancelled')\n\n shopcart.state.positions = []\n shopcart.state.organization = product.value.owner.target._id\n }\n\n if (typeof gtag === 'function') {\n gtag('event', 'add_to_cart', {\n currency: returnCurrency(),\n value: variant.price || 0,\n items: [{\n item_id: product.value._id,\n item_name: product.value.name,\n price: variant.price || product.value.price || 0,\n quantity: 1,\n item_category: product.value.category || '',\n item_brand: product.value.owner?.target?.profile?.name || ''\n }]\n });\n }\n \n await shopcart.actions.addProductToCart(product.value, variant, product.value.owner.target._id, selectedDates, quantity)\n return true\n } catch (error) {\n console.error('Error while adding product to cart:', error)\n throw error\n }\n}\n</script>"],"names":["useRoute","useRouter","getCurrentInstance","useGlobalMixins","computed","products.state","ref","useI18n","onMounted","products.actions","shopcart.state","shopcart.actions"],"mappings":"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"}
@@ -8,7 +8,7 @@ import { state, actions } from "../../store/products.js";
8
8
  import "../../store/categories.js";
9
9
  import { state as state$2, actions as actions$1 } from "../../../orders/store/shopcart.js";
10
10
  /* empty css */
11
- /* empty css */
11
+ /* empty css */
12
12
  /* empty css */
13
13
  /* empty css */
14
14
  import _sfc_main$1 from "../../../icons/navigation/IconEdit.vue.js";
@@ -42,7 +42,10 @@ const _hoisted_7 = {
42
42
  };
43
43
  const _hoisted_8 = { class: "w-100 pd-small radius-small flex flex-column gap-small bg-light" };
44
44
  const _hoisted_9 = ["innerHTML"];
45
- const _hoisted_10 = { class: "mn-b-small flex-nowrap flex flex-v-center" };
45
+ const _hoisted_10 = {
46
+ key: 5,
47
+ class: "mn-b-small flex-nowrap flex flex-v-center"
48
+ };
46
49
  const _hoisted_11 = { class: "cols-2 mn-b-medium w-100 gap-small" };
47
50
  const _hoisted_12 = { class: "w-100 pd-small radius-small bg-light product-attributes" };
48
51
  const _hoisted_13 = { class: "mn-b-thin t-demi" };
@@ -76,7 +79,7 @@ const _sfc_main = {
76
79
  onMounted(async () => {
77
80
  var _a, _b;
78
81
  emits("page-loading");
79
- await actions.read({ _id: route.params.product, lookup: ["recommended"] });
82
+ await actions.read({ _id: route.params.product, lookup: ["variants", "recommended", "inventory"] });
80
83
  currentImages.value = [...productImages.value];
81
84
  if (typeof gtag === "function") {
82
85
  gtag("event", "view_item", {
@@ -103,18 +106,26 @@ const _sfc_main = {
103
106
  currentImages.value = [...productImages.value];
104
107
  }
105
108
  }
106
- async function handleAddVariantToCart(variantItem) {
109
+ async function handleAddToCart({ variant, quantity }) {
107
110
  var _a, _b, _c;
111
+ console.log("variant is", variant);
112
+ console.log("quantity is", quantity);
113
+ let selectedDates = null;
108
114
  try {
115
+ if (!variant) {
116
+ throw new Error("Variant is required for adding product to cart");
117
+ }
109
118
  if (!state$2.organization) {
110
119
  state$2.organization = product.value.owner.target._id;
111
120
  }
112
121
  if (product.value.listing === "rent") {
113
- const selectedDates = await proxy.$dateSelector({
114
- product: product.value
115
- });
122
+ selectedDates = await proxy.$dateSelector(
123
+ product.value._id,
124
+ variant._id,
125
+ quantity,
126
+ variant.price || product.value.price
127
+ );
116
128
  if (!selectedDates) throw new Error("Date selection cancelled");
117
- variantItem.selectedDates = selectedDates;
118
129
  }
119
130
  if (state$2.organization !== product.value.owner.target._id) {
120
131
  const result = await proxy.$alert({
@@ -132,21 +143,21 @@ const _sfc_main = {
132
143
  if (typeof gtag === "function") {
133
144
  gtag("event", "add_to_cart", {
134
145
  currency: returnCurrency(),
135
- value: variantItem.price || 0,
146
+ value: variant.price || 0,
136
147
  items: [{
137
- item_id: variantItem._id,
138
- item_name: variantItem.name,
139
- price: variantItem.price || 0,
148
+ item_id: product.value._id,
149
+ item_name: product.value.name,
150
+ price: variant.price || product.value.price || 0,
140
151
  quantity: 1,
141
152
  item_category: product.value.category || "",
142
153
  item_brand: ((_c = (_b = (_a = product.value.owner) == null ? void 0 : _a.target) == null ? void 0 : _b.profile) == null ? void 0 : _c.name) || ""
143
154
  }]
144
155
  });
145
156
  }
146
- await actions$1.addVariantToCart(variantItem, product.value.owner.target._id);
157
+ await actions$1.addProductToCart(product.value, variant, product.value.owner.target._id, selectedDates, quantity);
147
158
  return true;
148
159
  } catch (error) {
149
- console.error("Error while adding variant to cart:", error);
160
+ console.error("Error while adding product to cart:", error);
150
161
  throw error;
151
162
  }
152
163
  }
@@ -183,7 +194,7 @@ const _sfc_main = {
183
194
  discounts: product.value.discounts,
184
195
  regularPrice: 100,
185
196
  onVariantSelected: handleVariantSelected,
186
- onAddToCart: handleAddVariantToCart,
197
+ onAddToCart: handleAddToCart,
187
198
  onUpdateImages: handleUpdateImages
188
199
  }, null, 8, ["product-variants", "product-id", "product-name", "discounts"])) : createCommentVNode("", true),
189
200
  product.value.included ? (openBlock(), createElementBlock("div", _hoisted_6, [
@@ -199,10 +210,10 @@ const _sfc_main = {
199
210
  }, null, 8, _hoisted_9)
200
211
  ])
201
212
  ])) : createCommentVNode("", true),
202
- createElementVNode("div", _hoisted_10, [
213
+ product.value.attributes && product.value.attributes.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_10, [
203
214
  createVNode(_sfc_main$4, { class: "mn-r-micro i-medium" }),
204
215
  _cache[1] || (_cache[1] = createElementVNode("p", { class: "t-medium" }, "Product Details", -1))
205
- ]),
216
+ ])) : createCommentVNode("", true),
206
217
  createElementVNode("div", _hoisted_11, [
207
218
  product.value.attributes && product.value.attributes.length > 0 ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(product.value.attributes, (attributes) => {
208
219
  return openBlock(), createElementBlock("div", _hoisted_12, [
@@ -216,7 +227,7 @@ const _sfc_main = {
216
227
  _cache[2] || (_cache[2] = createElementVNode("p", { class: "t-medium" }, "Provided by", -1))
217
228
  ]),
218
229
  product.value.owner ? (openBlock(), createBlock(_sfc_main$6, {
219
- key: 5,
230
+ key: 6,
220
231
  organization: product.value.owner.target,
221
232
  showRating: true,
222
233
  showFollowers: false,
@@ -1 +1 @@
1
- {"version":3,"file":"Product.vue.js","sources":["../../../../../../../src/modules/products/components/pages/Product.vue"],"sourcesContent":["<template>\n <div v-if=\"products.state.current\" class=\"w-100 mobile:pd-thin pd-small bg-white\">\n <div class=\"cols-2 mobile:cols-1 w-100 gap-medium\">\n\n <ProductImages\n :images=\"currentImages\"\n :product=\"product\"\n />\n\n <div class=\"pos-relative w-100 h-100 flex-column flex-h-center flex\">\n <!-- Edit Button -->\n <router-link\n v-if=\"hasAccess(route.params._id, 'products', 'edit', auth.state.accesses, auth.state.access.roles)\"\n :to=\"\n route.params._id \n ? { name: 'Organization_ProductEdit', params: { id: route.params._id, product: product._id } } \n : { name: 'ProductEdit', params: { product: product._id } }\n \"\n class=\"\n z-index-2\n cursor-pointer \n pos-absolute pos-t-zero pos-r-zero\n radius-extra pd-thin bg-second\n \"\n >\n <IconEdit\n class=\"i-regular\"\n classes=\"fill-white\"\n />\n </router-link>\n\n <h2 class=\"w-100 h1-product mn-b-medium\">{{ product.name }}</h2>\n\n <p v-if=\"product.description\" class=\"w-100 mn-b-medium\" style=\"white-space: pre-line;\">\n {{ product.translations?.length > 1 ? t('description') : product.description }}\n </p>\n \n <!-- Компонент выбора вариантов товара -->\n <ProductConfigurator\n v-if=\"product.variants?.length > 0\"\n :product-variants=\"product.variants\"\n :product-id=\"product._id\"\n :product-name=\"product.name\"\n :discounts=\"product.discounts\"\n :regularPrice=\"100\"\n @variant-selected=\"handleVariantSelected\"\n @add-to-cart=\"handleAddVariantToCart\"\n @update-images=\"handleUpdateImages\"\n />\n\n <div v-if=\"product.included\" class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconList class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Included</p>\n </div>\n\n <div v-if=\"product.included\" class=\"cols-1 mn-b-medium w-100 \">\n <div\n class=\"w-100 pd-small radius-small flex flex-column gap-small bg-light\"\n >\n <p class=\"t-medium\" style=\"white-space: pre-line;\" v-html=\"product.included\"></p>\n </div>\n </div>\n\n\n <div class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconInfo class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Product Details</p>\n </div>\n\n <div class=\"cols-2 mn-b-medium w-100 gap-small\">\n <div\n v-if=\"product.attributes && product.attributes.length > 0\"\n v-for=\"attributes in product.attributes\"\n class=\"w-100 pd-small radius-small bg-light product-attributes\"\n >\n <p class=\"mn-b-thin t-demi\">{{ attributes.name }}</p>\n <p>{{ attributes.value }}</p>\n </div>\n </div>\n\n <div class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconGroups class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Provided by</p>\n </div>\n\n <CardOrganization \n v-if=\"product.owner\"\n :organization=\"product.owner.target\"\n :showRating=\"true\"\n :showFollowers=\"false\"\n :showProducts=\"false\"\n class=\"bg-light w-100 o-hidden radius-medium pd-small \"\n />\n </div>\n </div>\n \n <ProductsRecommended \n v-if=\"product.recommended.length > 0\"\n :products=\"product.recommended\"\n class=\" mn-t-big h-max pos-relative\"\n />\n\n <div class=\"h-max mn-t-big pos-relative\">\n <h3 class=\"pd-b-small\">Most Popular</h3>\n <ProductsPopular class=\"mn-r-big-negative mn-l-big-negative\"/>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, onMounted, getCurrentInstance } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useGlobalMixins } from \"@martyrs/src/modules/globals/views/mixins/mixins.js\"\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js'\nimport * as products from '@martyrs/src/modules/products/store/products.js'\nimport * as categories from '@martyrs/src/modules/products/store/categories.js'\nimport * as shopcart from '@martyrs/src/modules/orders/store/shopcart.js'\n\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Popup from '@martyrs/src/components/Popup/Popup.vue'\nimport Tab from '@martyrs/src/components/Tab/Tab.vue'\nimport Calendar from '@martyrs/src/components/Calendar/Calendar.vue'\n\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue'\nimport IconInfo from '@martyrs/src/modules/icons/navigation/IconInfo.vue'\n\nimport IconShopcartAdd from '@martyrs/src/modules/icons/actions/IconShopcartAdd.vue'\n\nimport IconList from '@martyrs/src/modules/icons/entities/IconList.vue';\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\n\nimport ProductImages from '@martyrs/src/modules/products/components/blocks/ProductImages.vue'\nimport ProductConfigurator from '@martyrs/src/modules/products/components/sections/ProductConfigurator.vue'\nimport ProductsRecommended from '@martyrs/src/modules/products/components/sections/ProductsRecommended.vue';\nimport ProductsPopular from '@martyrs/src/modules/products/components/sections/ProductsPopular.vue'\n\nimport CardOrganization from '@martyrs/src/modules/organizations/components/blocks/CardOrganization.vue'\n\nconst route = useRoute()\nconst router = useRouter()\nconst { proxy } = getCurrentInstance()\nconst { returnCurrency, hasAccess } = useGlobalMixins()\n\nconst product = computed(() => products.state.current)\nconst productImages = computed(() => products.state.current.images || [])\n\n// Состояние для отслеживания текущих изображений (товара или варианта)\nconst currentImages = ref([])\n// Выбранный вариант товара\nconst selectedVariant = ref(null)\n\nconst text = {\n en: { addtoorder: 'Add to Cart', fastorder: 'Fast Order', description: 'Description' },\n ru: { addtoorder: 'Добавить в корзину', fastorder: 'Быстрый заказ', description: 'Описание' }\n}\n\nconst { t } = useI18n({ messages: text })\n\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\nconst recommendation = defineProps({\n recommendation: {\n type: Boolean,\n default: false\n }\n})\n \nproducts.state.current = null\n\nonMounted(async () => {\n emits('page-loading');\n \n await products.actions.read({ _id: route.params.product, lookup: ['recommended'] })\n \n // Инициализируем текущие изображения изображениями товара\n currentImages.value = [...productImages.value]\n\n if (typeof gtag === 'function') {\n gtag('event', 'view_item', {\n currency: returnCurrency(),\n value: product.value.price || 0,\n items: [{\n item_id: product.value._id,\n item_name: product.value.name,\n price: product.value.price || 0,\n item_category: product.value.category || '',\n item_brand: product.value.owner?.target?.profile.name || ''\n }]\n });\n }\n\n emits('page-loaded');\n})\n\n// Обработчик выбора варианта\nfunction handleVariantSelected(variant) {\n selectedVariant.value = variant\n}\n\n// Обработчик обновления изображений при выборе варианта\nfunction handleUpdateImages(images) {\n if (images && images.length > 0) {\n currentImages.value = [...images]\n } else {\n // Если у варианта нет изображений, возвращаем изображения товара\n currentImages.value = [...productImages.value]\n }\n}\n\n// Обработчик добавления варианта в корзину\nasync function handleAddVariantToCart(variantItem) {\n try {\n if (!shopcart.state.organization) {\n shopcart.state.organization = product.value.owner.target._id\n }\n \n // Проверка на товар с арендой\n if (product.value.listing === 'rent') {\n const selectedDates = await proxy.$dateSelector({\n product: product.value\n });\n \n if (!selectedDates) throw new Error('Date selection cancelled')\n \n variantItem.selectedDates = selectedDates\n }\n \n // Проверка на разные организации в корзине\n if (shopcart.state.organization !== product.value.owner.target._id) {\n const result = await proxy.$alert({\n title: 'Replace items in your cart?',\n message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,\n actions: [\n { label: 'Cancel', value: false },\n { label: 'Replace', value: true }\n ]\n })\n\n if (!result) throw new Error('Cart replacement cancelled')\n\n shopcart.state.positions = []\n shopcart.state.organization = product.value.owner.target._id\n }\n\n // Аналитика: регистрируем добавление в корзину\n if (typeof gtag === 'function') {\n gtag('event', 'add_to_cart', {\n currency: returnCurrency(),\n value: variantItem.price || 0,\n items: [{\n item_id: variantItem._id,\n item_name: variantItem.name,\n price: variantItem.price || 0,\n quantity: 1,\n item_category: product.value.category || '',\n item_brand: product.value.owner?.target?.profile?.name || ''\n }]\n });\n }\n \n // Добавляем вариант в корзину\n await shopcart.actions.addVariantToCart(variantItem, product.value.owner.target._id)\n return true\n } catch (error) {\n console.error('Error while adding variant to cart:', error)\n throw error\n }\n}\n\n// Оригинальная функция добавления товара в корзину (для товаров без вариантов)\nasync function addToCart(product) {\n let selectedDates = null\n\n try {\n if (!shopcart.state.organization) {\n shopcart.state.organization = product.owner.target._id\n }\n if (product.listing === 'rent') {\n selectedDates = await proxy.$dateSelector({\n product: product.value\n });\n \n if (!selectedDates) throw new Error('Date selection cancelled')\n \n }\n // Если организация товара отличается от текущей в корзине\n if (shopcart.state.organization !== product.owner.target._id) {\n const result = await proxy.$alert({\n title: 'Replace items in your cart?',\n message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,\n actions: [\n { label: 'Cancel', value: false },\n { label: 'Replace', value: true }\n ]\n })\n\n if (!result) throw new Error('Cart replacement cancelled')\n\n shopcart.state.positions = []\n shopcart.state.organization = product.owner.target._id\n }\n\n if (typeof gtag === 'function') {\n gtag('event', 'add_to_cart', {\n currency: returnCurrency(),\n value: product.price || 0,\n items: [{\n item_id: product._id,\n item_name: product.name,\n price: product.price || 0,\n quantity: 1,\n item_category: product.category || '',\n item_brand: product.owner?.target?.profile?.name || ''\n }]\n });\n }\n \n await shopcart.actions.addProductToCart(product, product.owner.target._id, selectedDates)\n return true\n } catch (error) {\n console.error('Error while adding product to cart:', error)\n throw error\n }\n}\n</script>"],"names":["products.state","products.actions","shopcart.state","shopcart.actions"],"mappings":"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"}
1
+ {"version":3,"file":"Product.vue.js","sources":["../../../../../../../src/modules/products/components/pages/Product.vue"],"sourcesContent":["<template>\n <div v-if=\"products.state.current\" class=\"w-100 mobile:pd-thin pd-small bg-white\">\n <div class=\"cols-2 mobile:cols-1 w-100 gap-medium\">\n\n <ProductImages\n :images=\"currentImages\"\n :product=\"product\"\n />\n\n <div class=\"pos-relative w-100 h-100 flex-column flex-h-center flex\">\n <!-- Edit Button -->\n <router-link\n v-if=\"hasAccess(route.params._id, 'products', 'edit', auth.state.accesses, auth.state.access.roles)\"\n :to=\"\n route.params._id \n ? { name: 'Organization_ProductEdit', params: { id: route.params._id, product: product._id } } \n : { name: 'ProductEdit', params: { product: product._id } }\n \"\n class=\"\n z-index-2\n cursor-pointer \n pos-absolute pos-t-zero pos-r-zero\n radius-extra pd-thin bg-second\n \"\n >\n <IconEdit\n class=\"i-regular\"\n classes=\"fill-white\"\n />\n </router-link>\n\n <h2 class=\"w-100 h1-product mn-b-medium\">{{ product.name }}</h2>\n\n <p v-if=\"product.description\" class=\"w-100 mn-b-medium\" style=\"white-space: pre-line;\">\n {{ product.translations?.length > 1 ? t('description') : product.description }}\n </p>\n \n <!-- Компонент выбора вариантов товара -->\n <ProductConfigurator\n v-if=\"product.variants?.length > 0\"\n :product-variants=\"product.variants\"\n :product-id=\"product._id\"\n :product-name=\"product.name\"\n :discounts=\"product.discounts\"\n :regularPrice=\"100\"\n @variant-selected=\"handleVariantSelected\"\n @add-to-cart=\"handleAddToCart\"\n @update-images=\"handleUpdateImages\"\n />\n\n <div v-if=\"product.included\" class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconList class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Included</p>\n </div>\n\n <div v-if=\"product.included\" class=\"cols-1 mn-b-medium w-100 \">\n <div\n class=\"w-100 pd-small radius-small flex flex-column gap-small bg-light\"\n >\n <p class=\"t-medium\" style=\"white-space: pre-line;\" v-html=\"product.included\"></p>\n </div>\n </div>\n\n\n <div v-if=\"product.attributes && product.attributes.length > 0\" class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconInfo class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Product Details</p>\n </div>\n\n <div class=\"cols-2 mn-b-medium w-100 gap-small\">\n <div\n v-if=\"product.attributes && product.attributes.length > 0\"\n v-for=\"attributes in product.attributes\"\n class=\"w-100 pd-small radius-small bg-light product-attributes\"\n >\n <p class=\"mn-b-thin t-demi\">{{ attributes.name }}</p>\n <p>{{ attributes.value }}</p>\n </div>\n </div>\n\n <div class=\"mn-b-small flex-nowrap flex flex-v-center\">\n <IconGroups class=\"mn-r-micro i-medium\"/>\n <p class=\"t-medium \">Provided by</p>\n </div>\n\n <CardOrganization \n v-if=\"product.owner\"\n :organization=\"product.owner.target\"\n :showRating=\"true\"\n :showFollowers=\"false\"\n :showProducts=\"false\"\n class=\"bg-light w-100 o-hidden radius-medium pd-small \"\n />\n </div>\n </div>\n \n <ProductsRecommended \n v-if=\"product.recommended.length > 0\"\n :products=\"product.recommended\"\n class=\" mn-t-big h-max pos-relative\"\n />\n\n <div class=\"h-max mn-t-big pos-relative\">\n <h3 class=\"pd-b-small\">Most Popular</h3>\n <ProductsPopular class=\"mn-r-big-negative mn-l-big-negative\"/>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref, onMounted, getCurrentInstance } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useGlobalMixins } from \"@martyrs/src/modules/globals/views/mixins/mixins.js\"\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js'\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js'\nimport * as products from '@martyrs/src/modules/products/store/products.js'\nimport * as categories from '@martyrs/src/modules/products/store/categories.js'\nimport * as shopcart from '@martyrs/src/modules/orders/store/shopcart.js'\n\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Popup from '@martyrs/src/components/Popup/Popup.vue'\nimport Tab from '@martyrs/src/components/Tab/Tab.vue'\nimport Calendar from '@martyrs/src/components/Calendar/Calendar.vue'\n\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue'\nimport IconInfo from '@martyrs/src/modules/icons/navigation/IconInfo.vue'\n\nimport IconShopcartAdd from '@martyrs/src/modules/icons/actions/IconShopcartAdd.vue'\n\nimport IconList from '@martyrs/src/modules/icons/entities/IconList.vue';\nimport IconGroups from '@martyrs/src/modules/icons/entities/IconGroups.vue'\n\nimport ProductImages from '@martyrs/src/modules/products/components/blocks/ProductImages.vue'\nimport ProductConfigurator from '@martyrs/src/modules/products/components/sections/ProductConfigurator.vue'\nimport ProductsRecommended from '@martyrs/src/modules/products/components/sections/ProductsRecommended.vue';\nimport ProductsPopular from '@martyrs/src/modules/products/components/sections/ProductsPopular.vue'\n\nimport CardOrganization from '@martyrs/src/modules/organizations/components/blocks/CardOrganization.vue'\n\nconst route = useRoute()\nconst router = useRouter()\nconst { proxy } = getCurrentInstance()\nconst { returnCurrency, hasAccess } = useGlobalMixins()\n\nconst product = computed(() => products.state.current)\nconst productImages = computed(() => products.state.current.images || [])\n\n// Состояние для отслеживания текущих изображений (товара или варианта)\nconst currentImages = ref([])\n// Выбранный вариант товара\nconst selectedVariant = ref(null)\n\nconst text = {\n en: { addtoorder: 'Add to Cart', fastorder: 'Fast Order', description: 'Description' },\n ru: { addtoorder: 'Добавить в корзину', fastorder: 'Быстрый заказ', description: 'Описание' }\n}\n\nconst { t } = useI18n({ messages: text })\n\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\nconst recommendation = defineProps({\n recommendation: {\n type: Boolean,\n default: false\n }\n})\n \nproducts.state.current = null\n\nonMounted(async () => {\n emits('page-loading');\n \n await products.actions.read({ _id: route.params.product, lookup: ['variants','recommended','inventory'] })\n \n // Инициализируем текущие изображения изображениями товара\n currentImages.value = [...productImages.value]\n\n if (typeof gtag === 'function') {\n gtag('event', 'view_item', {\n currency: returnCurrency(),\n value: product.value.price || 0,\n items: [{\n item_id: product.value._id,\n item_name: product.value.name,\n price: product.value.price || 0,\n item_category: product.value.category || '',\n item_brand: product.value.owner?.target?.profile.name || ''\n }]\n });\n }\n\n emits('page-loaded');\n})\n\n// Обработчик выбора варианта\nfunction handleVariantSelected(variant) {\n selectedVariant.value = variant\n}\n\n// Обработчик обновления изображений при выборе варианта\nfunction handleUpdateImages(images) {\n if (images && images.length > 0) {\n currentImages.value = [...images]\n } else {\n // Если у варианта нет изображений, возвращаем изображения товара\n currentImages.value = [...productImages.value]\n }\n}\n\n// Функция добавления товара в корзину - теперь требует выбранный вариант\nasync function handleAddToCart({variant, quantity}) {\n console.log('variant is', variant)\n console.log('quantity is', quantity)\n let selectedDates = null\n\n try {\n if (!variant) {\n throw new Error('Variant is required for adding product to cart')\n }\n\n if (!shopcart.state.organization) {\n shopcart.state.organization = product.value.owner.target._id\n }\n \n if (product.value.listing === 'rent') {\n selectedDates = await proxy.$dateSelector(\n product.value._id,\n variant._id,\n quantity,\n variant.price || product.value.price\n );\n \n if (!selectedDates) throw new Error('Date selection cancelled')\n }\n \n // Если организация товара отличается от текущей в корзине\n if (shopcart.state.organization !== product.value.owner.target._id) {\n const result = await proxy.$alert({\n title: 'Replace items in your cart?',\n message: `Your cart has items from another vendor. If you continue, we'll clear it so you can order from this one instead.`,\n actions: [\n { label: 'Cancel', value: false },\n { label: 'Replace', value: true }\n ]\n })\n\n if (!result) throw new Error('Cart replacement cancelled')\n\n shopcart.state.positions = []\n shopcart.state.organization = product.value.owner.target._id\n }\n\n if (typeof gtag === 'function') {\n gtag('event', 'add_to_cart', {\n currency: returnCurrency(),\n value: variant.price || 0,\n items: [{\n item_id: product.value._id,\n item_name: product.value.name,\n price: variant.price || product.value.price || 0,\n quantity: 1,\n item_category: product.value.category || '',\n item_brand: product.value.owner?.target?.profile?.name || ''\n }]\n });\n }\n \n await shopcart.actions.addProductToCart(product.value, variant, product.value.owner.target._id, selectedDates, quantity)\n return true\n } catch (error) {\n console.error('Error while adding product to cart:', error)\n throw error\n }\n}\n</script>"],"names":["products.state","products.actions","shopcart.state","shopcart.actions"],"mappings":"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"}
@@ -4,9 +4,9 @@ const vue = require("vue");
4
4
  const vueRouter = require("vue-router");
5
5
  const Block = require("../../../../components/Block/Block.vue.cjs");
6
6
  const Tab = require("../../../../components/Tab/Tab.vue2.cjs");
7
- const Field = require("../../../../components/Field/Field.vue2.cjs");
7
+ const Field = require("../../../../components/Field/Field.vue.cjs");
8
8
  const Select = require("../../../../components/Select/Select.vue.cjs");
9
- const Button = require("../../../../components/Button/Button.vue.cjs");
9
+ const Button = require("../../../../components/Button/Button.vue2.cjs");
10
10
  const EditImages = require("../../../../components/EditImages/EditImages.vue2.cjs");
11
11
  const BlockMultiselect = require("../../../globals/views/components/blocks/BlockMultiselect.vue.cjs");
12
12
  const IconCross = require("../../../icons/navigation/IconCross.vue.cjs");
@@ -97,7 +97,6 @@ const _sfc_main = {
97
97
  });
98
98
  async function onSubmit() {
99
99
  try {
100
- console.log("product is", products.state.current);
101
100
  if (route.params.product) {
102
101
  await products.actions.update(route.params.product, products.state.current);
103
102
  } else {
@@ -131,7 +130,7 @@ const _sfc_main = {
131
130
  return vue.unref(isPageLoaded) ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
132
131
  !_ctx.MOBILE_APP ? (vue.openBlock(), vue.createBlock(Block.default, {
133
132
  key: 0,
134
- class: "flex-nowrap gap-thin flex-v-center flex"
133
+ class: "flex-nowrap mn-b-thin gap-thin flex-v-center flex"
135
134
  }, {
136
135
  default: vue.withCtx(() => [
137
136
  vue.createElementVNode("h2", _hoisted_2, vue.toDisplayString(vue.unref(route).params.product ? products.state.current.name : "Create Product"), 1),
@@ -170,7 +169,8 @@ const _sfc_main = {
170
169
  { label: "Recommended", value: "recommended" },
171
170
  { label: "Localization", value: "localization" }
172
171
  ],
173
- class: "flex-child-default bg-light radius-medium h-max pd-thin o-x-scroll"
172
+ class: "flex-child-default gap-micro scroll-hide bg-light radius-medium h-max pd-thin mn-b-thin o-x-scroll",
173
+ classTab: "bg-white"
174
174
  }, null, 8, ["selected"])) : vue.createCommentVNode("", true),
175
175
  vue.unref(activeTab) === "details" ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3, [
176
176
  vue.createVNode(Block.default, {
@@ -381,7 +381,6 @@ const _sfc_main = {
381
381
  vue.unref(route).params.product ? (vue.openBlock(), vue.createBlock(Button.default, {
382
382
  key: 0,
383
383
  submit: onDelete,
384
- callback: redirectTo,
385
384
  class: "bg-red t-white w-100"
386
385
  }, {
387
386
  default: vue.withCtx(() => _cache[14] || (_cache[14] = [
@@ -391,7 +390,6 @@ const _sfc_main = {
391
390
  })) : vue.createCommentVNode("", true),
392
391
  vue.createVNode(Button.default, {
393
392
  submit: onSubmit,
394
- callback: redirectTo,
395
393
  class: "w-100 bg-main"
396
394
  }, {
397
395
  default: vue.withCtx(() => _cache[15] || (_cache[15] = [
@@ -1 +1 @@
1
- {"version":3,"file":"ProductEdit.vue.cjs","sources":["../../../../../../../src/modules/products/components/pages/ProductEdit.vue"],"sourcesContent":["<template>\n <div v-if=\"isPageLoaded\" class=\"w-100 bg-white pd-thin gap-thin\">\n \n <Block v-if=\"!MOBILE_APP\" class=\"flex-nowrap gap-thin flex-v-center flex\">\n <h2 class=\"t-truncate mn-r-auto\">\n {{ route.params.product ? products.state.current.name : 'Create Product' }}\n </h2>\n\n <Button \n v-if=\"route.params.product\"\n :submit=\"onDelete\" \n :callback=\"redirectTo\"\n class=\"w-10 w-max-20r w-min-8r bg-red\"\n >\n Delete \n </Button>\n\n <Button \n :submit=\"onSubmit\" \n :callback=\"redirectTo\"\n class=\"w-10 w-max-20r w-min-8r bg-main\"\n >\n Save\n </Button>\n </Block>\n\n <!-- Tab Navigation -->\n <Tab\n v-model:selected=\"activeTab\"\n v-if=\"route.params.product\"\n :tabs=\"[\n { label: 'Details', value: 'details' },\n { label: 'Variants', value: 'variants' },\n { label: 'Discounts', value: 'discounts' },\n { label: 'Recommended', value: 'recommended' },\n { label: 'Localization', value: 'localization' }\n ]\"\n class=\"flex-child-default bg-light radius-medium h-max pd-thin o-x-scroll\"\n />\n\n <!-- Tab Content -->\n <div v-if=\"activeTab === 'details'\" class=\"cols-1 gap-thin\">\n <!-- Product Images -->\n <Block\n placeholder=\"The product doesn't have any images yet.\"\n class=\"h-min\"\n >\n <EditImages \n :images=\"products.state.current.images\"\n :uploadPath=\"'photos'\" \n @update:images=\"(imagesNew) => { products.state.current.images = imagesNew }\" \n />\n </Block>\n\n <Block title=\"Categories\">\n <BlockMultiselect\n v-model=\"products.state.current.category\"\n placeholder=\"Search categories...\"\n :multiple=\"true\"\n :transform=\"(item) => ({ _id: item._id, name: item.name })\"\n :store=\"{\n read: (options) => categories.actions.read(options),\n state: categories.state\n }\"\n :options=\"{\n rootOnly: false,\n excludeChildren: false,\n limit: 50\n }\"\n :skeleton=\"{\n hide: false,\n horizontal: true,\n class: 'radius-small',\n structure: [{ \n block: 'text', size: 'large'\n }]\n }\"\n :states=\"{\n empty: {\n title: 'No categories found',\n description: 'Try different search terms or create a new category',\n class: 'radius-small'\n }\n }\"\n key=\"_id\"\n :label=\"item => item.name\"\n classSearch=\"bg-white radius-small\"\n classSelected=\"bg-white pd-small radius-small\"\n classDropdown=\"bg-white pd-small radius-medium bs-small\"\n classItem=\"pd-small radius-small hover-bg-light cursor-pointer\"\n classFeed=\"h-max-30r gap-thin flex-column flex o-scroll\"\n >\n <!-- Слот для выбранных категорий -->\n <template #selected=\"{ item, clear }\">\n <div class=\"flex-nowrap flex-v-center flex gap-thin\">\n <span class=\"t-medium\">{{ item?.name || item }}</span>\n <button \n @click.stop=\"clear\"\n class=\"i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover-scale-1\"\n >\n <IconCross class=\"i-micro fill-white\" />\n </button>\n </div>\n </template>\n \n <!-- Слот для элементов в списке -->\n <template #item=\"{ item }\">\n <div class=\"flex-nowrap flex-v-center flex\">\n <img \n v-if=\"item.photo\" \n :src=\"(FILE_SERVER_URL || '') + item.photo\"\n class=\"i-medium radius-small object-fit-cover mn-r-thin\"\n />\n <div class=\"w-100\">\n <p class=\"t-medium\">{{ item.name }}</p>\n <p v-if=\"item.description\" class=\"t-small t-transp\">{{ item.description }}</p>\n </div>\n </div>\n </template>\n </BlockMultiselect>\n </Block>\n\n <!-- Product Profile -->\n <Block title=\"Profile\">\n <div class=\"mn-b-thin flex-nowrap flex gap-thin\">\n <Select \n v-model:select=\"products.state.current.status\"\n label=\"Status\"\n :options=\"[\n 'draft', \n 'published',\n 'featured',\n 'archived',\n 'removed'\n ]\"\n placeholder=\"Display product\"\n class=\"pos-relative w-100 bg-white radius-small pd-medium\"\n />\n <Select \n v-model:select=\"products.state.current.listing\"\n label=\"Type\"\n :options=\"[\n 'sale', \n 'rent',\n ]\"\n placeholder=\"Type of listing\"\n class=\"pos-relative w-100 bg-white radius-small pd-medium\"\n />\n </div>\n\n <Field \n v-model:field=\"products.state.current.name\" \n placeholder=\"Enter product name\"\n class=\"w-100 mn-b-thin bg-white radius-small pd-medium\"\n />\n <Field\n v-model:field=\"products.state.current.description\" \n placeholder=\"Enter product description\" \n class=\"w-100 bg-white radius-small mn-b-thin pd-medium\"\n style=\"resize: vertical\"\n type=\"textarea\"\n />\n <Field\n v-model:field=\"products.state.current.included\" \n placeholder=\"Enter what's inside\" \n class=\"w-100 bg-white radius-small pd-medium\"\n style=\"resize: vertical\"\n type=\"textarea\"\n />\n </Block>\n <!-- Categories -->\n \n\n\n <!-- Attributes -->\n <EditAttributes \n v-model:attributes=\"products.state.current.attributes\" \n />\n </div>\n\n <!-- Variants Tab -->\n <EditVariants\n\t\t\tv-if=\"activeTab === 'variants'\"\n v-model:variants=\"products.state.current.variants\" \n />\n\n <!-- Discounts Tab -->\n <EditDiscounts\n\t\t\tv-if=\"activeTab === 'discounts'\"\n v-model:discounts=\"products.state.current.discounts\"\n />\n <EditRecommended \n v-if=\"activeTab === 'recommended'\" \n v-model:recommended=\"products.state.current.recommended\"\n class=\"cols-1 gap-thin\"\n />\n\n <!-- Localization Tab -->\n <Block\n\t\t v-if=\"activeTab === 'localization'\"\n title=\"Localization\"\n placeholder=\"No localizations added yet\"\n :actions=\"[{\n label: '+',\n function: () => products.state.current.translations.push({locale: '', name: '', description: ''})\n }]\"\n >\n <div \n class=\"gap-thin mn-b-thin flex-nowrap flex\" \n v-for=\"(item, index) in products.state.current.translations\" \n :key=\"index\"\n > \n <Field\n v-model:field=\"item.locale\"\n placeholder=\"Locale (en, ru, etc.)\"\n class=\"w-30 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Product name\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <Field\n v-model:field=\"item.description\"\n placeholder=\"Product description\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <div class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red cursor-pointer hover-scale-1\">\n <IconDelete \n @click=\"() => products.state.current.translations.splice(index, 1)\" \n class=\"i-medium\"\n />\n </div>\n </div>\n </Block>\n\n <!-- Bottom Action Buttons -->\n <div class=\"flex-nowrap flex gap-thin\">\n <Button \n v-if=\"route.params.product\"\n :submit=\"onDelete\" \n :callback=\"redirectTo\"\n class=\"bg-red t-white w-100\"\n >\n Delete \n </Button>\n\n <Button \n :submit=\"onSubmit\" \n :callback=\"redirectTo\"\n class=\"w-100 bg-main\"\n >\n Save\n </Button>\n </div>\n </div>\n</template>\n\n<script setup>\n// Import libs\nimport { reactive, computed, onMounted, ref } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\n\n// Import components\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Tab from \"@martyrs/src/components/Tab/Tab.vue\";\nimport Field from \"@martyrs/src/components/Field/Field.vue\";\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport Checkbox from \"@martyrs/src/components/Checkbox/Checkbox.vue\";\nimport Button from \"@martyrs/src/components/Button/Button.vue\";\nimport Tree from \"@martyrs/src/components/Tree/Tree.vue\";\nimport EditImages from '@martyrs/src/components/EditImages/EditImages.vue';\n\nimport BlockMultiselect from '@martyrs/src/modules/globals/views/components/blocks/BlockMultiselect.vue';\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';\nimport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\nimport EditVariants from '@martyrs/src/modules/products/components/sections/EditVariants.vue';\nimport EditAttributes from '@martyrs/src/modules/products/components/sections/EditAttributes.vue';\nimport EditDiscounts from '@martyrs/src/modules/products/components/sections/EditDiscounts.vue';\nimport EditCategories from '@martyrs/src/modules/products/components/sections/EditCategories.vue';\nimport EditRecommended from '@martyrs/src/modules/products/components/sections/EditRecommended.vue';\n\n// Accessing router and store\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\nimport * as products from '@martyrs/src/modules/products/store/products.js';\nimport * as categories from '@martyrs/src/modules/products/store/categories.js';\n\nimport { setError } from '@martyrs/src/modules/globals/views/store/globals.js'\n\nconst route = useRoute()\nconst router = useRouter()\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\nlet isPageLoaded = ref(false)\nlet activeTab = ref('details')\n\nonMounted(async() => { \n emits('page-loading');\n\n products.mutations.resetProduct();\n\n if (route.params.product) {\n await products.actions.read({ _id: route.params.product, lookup: ['variants','categories','recommended'] });\n } else {\n // Создаем дефолтный вариант для нового товара\n if (!products.state.current.variants || products.state.current.variants.length === 0) {\n products.state.current.variants = [{\n name: 'Default',\n sku: '',\n images: [],\n price: 0,\n cost: 0,\n quantity: 1,\n unit: 'pcs',\n available: 0,\n ingredients: [],\n attributes: []\n }];\n }\n }\n\n // Убедимся, что массивы инициализированы\n if (!products.state.current.translations) {\n products.state.current.translations = []\n }\n // Убедимся, что массивы инициализированы\n if (!products.state.current.recommended) {\n products.state.current.recommended = []\n }\n if (!products.state.current.discounts) {\n products.state.current.discounts = []\n }\n\n try {\n // Data prefetching\n categories.state.all = await categories.actions.read({\n user: auth.state.user._id,\n rootOnly: true,\n excludeChildren: false,\n limit: 100\n })\n } catch (error) {\n console.error('error loading categories:', error);\n }\n\n emits('page-loaded');\n isPageLoaded.value = true\n})\n\nasync function onSubmit() {\n try {\n // // Проверка на наличие хотя бы одного варианта\n // if (!products.state.current.variants || products.state.current.variants.length === 0) {\n // setError({ response: { data: { errorCode: \"PRODUCT_MUST_HAVE_VARIANT\" }} })\n // return;\n // }\n console.log('product is',products.state.current)\n if (route.params.product) {\n await products.actions.update(route.params.product, products.state.current)\n } else {\n products.state.current.owner = {\n target: route.params._id || auth.state.user._id,\n type: route.params._id ? 'organization' : 'user'\n }\n \n products.state.current.creator = {\n target: auth.state.user._id,\n type: 'user',\n hidden: false\n }\n\n await products.actions.create(products.state.current)\n }\n \n redirectTo()\n } catch (error) {\n setError({ response: { data: { errorCode: \"PRODUCT_NOT_CREATED\" }} })\n console.error('Product creation error:', error)\n }\n}\n\nfunction onDelete() {\n products.actions.deleteProduct(products.state.current._id)\n}\n\nfunction redirectTo() {\n router.push({\n name: route.params._id ? 'Organization' : 'Products', \n params: route.params._id ? { _id: route.params._id } : {}\n })\n}\n</script>"],"names":["useRoute","useRouter","ref","onMounted","products.mutations","products.actions","products.state","categories.state","categories.actions","auth.state","setError"],"mappings":"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"}
1
+ {"version":3,"file":"ProductEdit.vue.cjs","sources":["../../../../../../../src/modules/products/components/pages/ProductEdit.vue"],"sourcesContent":["<template>\n <div v-if=\"isPageLoaded\" class=\"w-100 bg-white pd-thin gap-thin\">\n \n <Block v-if=\"!MOBILE_APP\" class=\"flex-nowrap mn-b-thin gap-thin flex-v-center flex\">\n <h2 class=\"t-truncate mn-r-auto\">\n {{ route.params.product ? products.state.current.name : 'Create Product' }}\n </h2>\n\n <Button \n v-if=\"route.params.product\"\n :submit=\"onDelete\" \n :callback=\"redirectTo\"\n class=\"w-10 w-max-20r w-min-8r bg-red\"\n >\n Delete \n </Button>\n\n <Button \n :submit=\"onSubmit\" \n :callback=\"redirectTo\"\n class=\"w-10 w-max-20r w-min-8r bg-main\"\n >\n Save\n </Button>\n </Block>\n\n <!-- Tab Navigation -->\n <Tab\n v-model:selected=\"activeTab\"\n v-if=\"route.params.product\"\n :tabs=\"[\n { label: 'Details', value: 'details' },\n { label: 'Variants', value: 'variants' },\n { label: 'Discounts', value: 'discounts' },\n { label: 'Recommended', value: 'recommended' },\n { label: 'Localization', value: 'localization' }\n ]\"\n class=\"flex-child-default gap-micro scroll-hide bg-light radius-medium h-max pd-thin mn-b-thin o-x-scroll\"\n classTab=\"bg-white\"\n />\n\n <!-- Tab Content -->\n <div v-if=\"activeTab === 'details'\" class=\"cols-1 gap-thin\">\n <!-- Product Images -->\n <Block\n placeholder=\"The product doesn't have any images yet.\"\n class=\"h-min\"\n >\n <EditImages \n :images=\"products.state.current.images\"\n :uploadPath=\"'photos'\" \n @update:images=\"(imagesNew) => { products.state.current.images = imagesNew }\" \n />\n </Block>\n\n <Block title=\"Categories\">\n <BlockMultiselect\n v-model=\"products.state.current.category\"\n placeholder=\"Search categories...\"\n :multiple=\"true\"\n :transform=\"(item) => ({ _id: item._id, name: item.name })\"\n :store=\"{\n read: (options) => categories.actions.read(options),\n state: categories.state\n }\"\n :options=\"{\n rootOnly: false,\n excludeChildren: false,\n limit: 50\n }\"\n :skeleton=\"{\n hide: false,\n horizontal: true,\n class: 'radius-small',\n structure: [{ \n block: 'text', size: 'large'\n }]\n }\"\n :states=\"{\n empty: {\n title: 'No categories found',\n description: 'Try different search terms or create a new category',\n class: 'radius-small'\n }\n }\"\n key=\"_id\"\n :label=\"item => item.name\"\n classSearch=\"bg-white radius-small\"\n classSelected=\"bg-white pd-small radius-small\"\n classDropdown=\"bg-white pd-small radius-medium bs-small\"\n classItem=\"pd-small radius-small hover-bg-light cursor-pointer\"\n classFeed=\"h-max-30r gap-thin flex-column flex o-scroll\"\n >\n <!-- Слот для выбранных категорий -->\n <template #selected=\"{ item, clear }\">\n <div class=\"flex-nowrap flex-v-center flex gap-thin\">\n <span class=\"t-medium\">{{ item?.name || item }}</span>\n <button \n @click.stop=\"clear\"\n class=\"i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover-scale-1\"\n >\n <IconCross class=\"i-micro fill-white\" />\n </button>\n </div>\n </template>\n \n <!-- Слот для элементов в списке -->\n <template #item=\"{ item }\">\n <div class=\"flex-nowrap flex-v-center flex\">\n <img \n v-if=\"item.photo\" \n :src=\"(FILE_SERVER_URL || '') + item.photo\"\n class=\"i-medium radius-small object-fit-cover mn-r-thin\"\n />\n <div class=\"w-100\">\n <p class=\"t-medium\">{{ item.name }}</p>\n <p v-if=\"item.description\" class=\"t-small t-transp\">{{ item.description }}</p>\n </div>\n </div>\n </template>\n </BlockMultiselect>\n </Block>\n\n <!-- Product Profile -->\n <Block title=\"Profile\">\n <div class=\"mn-b-thin flex-nowrap flex gap-thin\">\n <Select \n v-model:select=\"products.state.current.status\"\n label=\"Status\"\n :options=\"[\n 'draft', \n 'published',\n 'featured',\n 'archived',\n 'removed'\n ]\"\n placeholder=\"Display product\"\n class=\"pos-relative w-100 bg-white radius-small pd-medium\"\n />\n <Select \n v-model:select=\"products.state.current.listing\"\n label=\"Type\"\n :options=\"[\n 'sale', \n 'rent',\n ]\"\n placeholder=\"Type of listing\"\n class=\"pos-relative w-100 bg-white radius-small pd-medium\"\n />\n </div>\n\n <Field \n v-model:field=\"products.state.current.name\" \n placeholder=\"Enter product name\"\n class=\"w-100 mn-b-thin bg-white radius-small pd-medium\"\n />\n <Field\n v-model:field=\"products.state.current.description\" \n placeholder=\"Enter product description\" \n class=\"w-100 bg-white radius-small mn-b-thin pd-medium\"\n style=\"resize: vertical\"\n type=\"textarea\"\n />\n <Field\n v-model:field=\"products.state.current.included\" \n placeholder=\"Enter what's inside\" \n class=\"w-100 bg-white radius-small pd-medium\"\n style=\"resize: vertical\"\n type=\"textarea\"\n />\n </Block>\n <!-- Categories -->\n \n\n\n <!-- Attributes -->\n <EditAttributes \n v-model:attributes=\"products.state.current.attributes\" \n />\n </div>\n\n <!-- Variants Tab -->\n <EditVariants\n\t\t\tv-if=\"activeTab === 'variants'\"\n v-model:variants=\"products.state.current.variants\" \n />\n\n <!-- Discounts Tab -->\n <EditDiscounts\n\t\t\tv-if=\"activeTab === 'discounts'\"\n v-model:discounts=\"products.state.current.discounts\"\n />\n <EditRecommended \n v-if=\"activeTab === 'recommended'\" \n v-model:recommended=\"products.state.current.recommended\"\n class=\"cols-1 gap-thin\"\n />\n\n <!-- Localization Tab -->\n <Block\n\t\t v-if=\"activeTab === 'localization'\"\n title=\"Localization\"\n placeholder=\"No localizations added yet\"\n :actions=\"[{\n label: '+',\n function: () => products.state.current.translations.push({locale: '', name: '', description: ''})\n }]\"\n >\n <div \n class=\"gap-thin mn-b-thin flex-nowrap flex\" \n v-for=\"(item, index) in products.state.current.translations\" \n :key=\"index\"\n > \n <Field\n v-model:field=\"item.locale\"\n placeholder=\"Locale (en, ru, etc.)\"\n class=\"w-30 bg-white radius-small pd-medium\"\n /> \n <Field\n v-model:field=\"item.name\"\n placeholder=\"Product name\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <Field\n v-model:field=\"item.description\"\n placeholder=\"Product description\"\n class=\"w-100 bg-white radius-small pd-medium\"\n />\n <div class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red cursor-pointer hover-scale-1\">\n <IconDelete \n @click=\"() => products.state.current.translations.splice(index, 1)\" \n class=\"i-medium\"\n />\n </div>\n </div>\n </Block>\n\n <!-- Bottom Action Buttons -->\n <div class=\"flex-nowrap flex gap-thin\">\n <Button \n v-if=\"route.params.product\"\n :submit=\"onDelete\" \n class=\"bg-red t-white w-100\"\n >\n Delete \n </Button>\n\n <Button \n :submit=\"onSubmit\" \n class=\"w-100 bg-main\"\n >\n Save\n </Button>\n </div>\n </div>\n</template>\n\n<script setup>\n// Import libs\nimport { reactive, computed, onMounted, ref } from 'vue'\nimport { useRoute, useRouter } from 'vue-router'\n\n// Import components\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Tab from \"@martyrs/src/components/Tab/Tab.vue\";\nimport Field from \"@martyrs/src/components/Field/Field.vue\";\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport Checkbox from \"@martyrs/src/components/Checkbox/Checkbox.vue\";\nimport Button from \"@martyrs/src/components/Button/Button.vue\";\nimport Tree from \"@martyrs/src/components/Tree/Tree.vue\";\nimport EditImages from '@martyrs/src/components/EditImages/EditImages.vue';\n\nimport BlockMultiselect from '@martyrs/src/modules/globals/views/components/blocks/BlockMultiselect.vue';\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';\nimport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\nimport EditVariants from '@martyrs/src/modules/products/components/sections/EditVariants.vue';\nimport EditAttributes from '@martyrs/src/modules/products/components/sections/EditAttributes.vue';\nimport EditDiscounts from '@martyrs/src/modules/products/components/sections/EditDiscounts.vue';\nimport EditCategories from '@martyrs/src/modules/products/components/sections/EditCategories.vue';\nimport EditRecommended from '@martyrs/src/modules/products/components/sections/EditRecommended.vue';\n\n// Accessing router and store\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\nimport * as products from '@martyrs/src/modules/products/store/products.js';\nimport * as categories from '@martyrs/src/modules/products/store/categories.js';\n\nimport { setError } from '@martyrs/src/modules/globals/views/store/globals.js'\n\nconst route = useRoute()\nconst router = useRouter()\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\nlet isPageLoaded = ref(false)\nlet activeTab = ref('details')\n\nonMounted(async() => { \n emits('page-loading');\n\n products.mutations.resetProduct();\n\n if (route.params.product) {\n await products.actions.read({ _id: route.params.product, lookup: ['variants','categories','recommended'] });\n } else {\n // Создаем дефолтный вариант для нового товара\n if (!products.state.current.variants || products.state.current.variants.length === 0) {\n products.state.current.variants = [{\n name: 'Default',\n sku: '',\n images: [],\n price: 0,\n cost: 0,\n quantity: 1,\n unit: 'pcs',\n available: 0,\n ingredients: [],\n attributes: []\n }];\n }\n }\n\n // Убедимся, что массивы инициализированы\n if (!products.state.current.translations) {\n products.state.current.translations = []\n }\n // Убедимся, что массивы инициализированы\n if (!products.state.current.recommended) {\n products.state.current.recommended = []\n }\n if (!products.state.current.discounts) {\n products.state.current.discounts = []\n }\n\n try {\n // Data prefetching\n categories.state.all = await categories.actions.read({\n user: auth.state.user._id,\n rootOnly: true,\n excludeChildren: false,\n limit: 100\n })\n } catch (error) {\n console.error('error loading categories:', error);\n }\n\n emits('page-loaded');\n isPageLoaded.value = true\n})\n\nasync function onSubmit() {\n try {\n if (route.params.product) {\n await products.actions.update(route.params.product, products.state.current)\n } else {\n products.state.current.owner = {\n target: route.params._id || auth.state.user._id,\n type: route.params._id ? 'organization' : 'user'\n }\n products.state.current.creator = {\n target: auth.state.user._id,\n type: 'user',\n hidden: false\n }\n await products.actions.create(products.state.current)\n }\n \n redirectTo()\n } catch (error) {\n setError({ response: { data: { errorCode: \"PRODUCT_NOT_CREATED\" }} })\n console.error('Product creation error:', error)\n }\n}\n\nfunction onDelete() {\n products.actions.deleteProduct(products.state.current._id)\n}\n\nfunction redirectTo() {\n router.push({\n name: route.params._id ? 'Organization' : 'Products', \n params: route.params._id ? { _id: route.params._id } : {}\n })\n}\n</script>"],"names":["useRoute","useRouter","ref","onMounted","products.mutations","products.actions","products.state","categories.state","categories.actions","auth.state","setError"],"mappings":"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"}