@ozdao/martyrs 0.2.546 → 0.2.548

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 (763) hide show
  1. package/dist/auth.server.cjs +9 -9
  2. package/dist/auth.server.js +9 -9
  3. package/dist/builder.cjs +12 -751
  4. package/dist/builder.js +21 -721
  5. package/dist/chats.server.cjs +61 -59
  6. package/dist/chats.server.js +61 -59
  7. package/dist/{common.schema-BzFEVNn3.cjs → common.schema-BtXLULba.cjs} +2 -2
  8. package/dist/{common.schema-Bw1O5_2Q.js → common.schema-GFSlNJo7.js} +2 -2
  9. package/dist/community.server.cjs +10 -10
  10. package/dist/community.server.js +10 -10
  11. package/dist/{credentials.schema-C9FB2EyY.js → credentials.schema--2vvcu8c.js} +2 -2
  12. package/dist/{credentials.schema-DwhGdrwC.cjs → credentials.schema-DVXaFnXl.cjs} +2 -2
  13. package/dist/{crud-Ed3dcRsC.js → crud-D_snnl2K.js} +78 -2
  14. package/dist/{crud-DGM6Xa1R.cjs → crud-pedHI2by.cjs} +78 -2
  15. package/dist/{engagement.schema-JADHu8pj.cjs → engagement.schema-DHw4iY_W.cjs} +2 -2
  16. package/dist/{engagement.schema-Dh1adRsn.js → engagement.schema-fh6W1fb_.js} +2 -2
  17. package/dist/events.server.cjs +452 -11
  18. package/dist/events.server.js +433 -9
  19. package/dist/files.server.cjs +2 -2
  20. package/dist/files.server.js +2 -2
  21. package/dist/gallery.server.cjs +5 -5
  22. package/dist/gallery.server.js +5 -5
  23. package/dist/globals.server.cjs +11 -373
  24. package/dist/globals.server.js +11 -356
  25. package/dist/globals.websocket-C2FxNmZ1.js +357 -0
  26. package/dist/globals.websocket-Cm72lPCs.cjs +374 -0
  27. package/dist/inventory.server.cjs +4 -5
  28. package/dist/inventory.server.js +2 -3
  29. package/dist/main-DvjCsGb1.cjs +11 -0
  30. package/dist/{main-d9n_ibdE.js → main-q-y0Lhcy.js} +28 -28
  31. package/dist/martyrs/node_modules/.pnpm/bignumber.js@9.2.1/node_modules/bignumber.js/bignumber.cjs +8 -8
  32. package/dist/martyrs/node_modules/.pnpm/bignumber.js@9.2.1/node_modules/bignumber.js/bignumber.cjs.map +1 -1
  33. package/dist/martyrs/node_modules/.pnpm/bignumber.js@9.2.1/node_modules/bignumber.js/bignumber.js +8 -8
  34. package/dist/martyrs/node_modules/.pnpm/bignumber.js@9.2.1/node_modules/bignumber.js/bignumber.js.map +1 -1
  35. package/dist/martyrs/node_modules/.pnpm/libphonenumber-js@1.12.6/node_modules/libphonenumber-js/es6/ParseError.cjs +2 -2
  36. package/dist/martyrs/node_modules/.pnpm/libphonenumber-js@1.12.6/node_modules/libphonenumber-js/es6/ParseError.cjs.map +1 -1
  37. package/dist/martyrs/node_modules/.pnpm/libphonenumber-js@1.12.6/node_modules/libphonenumber-js/es6/ParseError.js +2 -2
  38. package/dist/martyrs/node_modules/.pnpm/libphonenumber-js@1.12.6/node_modules/libphonenumber-js/es6/ParseError.js.map +1 -1
  39. package/dist/martyrs/node_modules/.pnpm/libphonenumber-js@1.12.6/node_modules/libphonenumber-js/es6/PhoneNumber.cjs +2 -2
  40. package/dist/martyrs/node_modules/.pnpm/libphonenumber-js@1.12.6/node_modules/libphonenumber-js/es6/PhoneNumber.cjs.map +1 -1
  41. package/dist/martyrs/node_modules/.pnpm/libphonenumber-js@1.12.6/node_modules/libphonenumber-js/es6/PhoneNumber.js +2 -2
  42. package/dist/martyrs/node_modules/.pnpm/libphonenumber-js@1.12.6/node_modules/libphonenumber-js/es6/PhoneNumber.js.map +1 -1
  43. package/dist/martyrs/node_modules/.pnpm/libphonenumber-js@1.12.6/node_modules/libphonenumber-js/es6/metadata.cjs +8 -8
  44. package/dist/martyrs/node_modules/.pnpm/libphonenumber-js@1.12.6/node_modules/libphonenumber-js/es6/metadata.cjs.map +1 -1
  45. package/dist/martyrs/node_modules/.pnpm/libphonenumber-js@1.12.6/node_modules/libphonenumber-js/es6/metadata.js +8 -8
  46. package/dist/martyrs/node_modules/.pnpm/libphonenumber-js@1.12.6/node_modules/libphonenumber-js/es6/metadata.js.map +1 -1
  47. package/dist/martyrs/src/components/Button/Button.vue.cjs.map +1 -1
  48. package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -1
  49. package/dist/martyrs/src/components/Calendar/Calendar.vue2.cjs +3 -3
  50. package/dist/martyrs/src/components/Calendar/Calendar.vue2.cjs.map +1 -1
  51. package/dist/martyrs/src/components/Calendar/Calendar.vue2.js +3 -3
  52. package/dist/martyrs/src/components/Calendar/Calendar.vue2.js.map +1 -1
  53. package/dist/martyrs/src/components/Chips/Chips.vue2.cjs +1 -1
  54. package/dist/martyrs/src/components/Chips/Chips.vue2.js +1 -1
  55. package/dist/martyrs/src/components/Countdown/Countdown.vue.cjs +4 -4
  56. package/dist/martyrs/src/components/Countdown/Countdown.vue.cjs.map +1 -1
  57. package/dist/martyrs/src/components/Countdown/Countdown.vue.js +4 -4
  58. package/dist/martyrs/src/components/Countdown/Countdown.vue.js.map +1 -1
  59. package/dist/martyrs/src/components/EditImages/EditImages.vue2.cjs +1 -1
  60. package/dist/martyrs/src/components/EditImages/EditImages.vue2.js +1 -1
  61. package/dist/martyrs/src/components/EmptyState/EmptyState.vue.cjs +1 -1
  62. package/dist/martyrs/src/components/EmptyState/EmptyState.vue.js +1 -1
  63. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +1 -1
  64. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs.map +1 -1
  65. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +1 -1
  66. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js.map +1 -1
  67. package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.cjs +1 -1
  68. package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.cjs.map +1 -1
  69. package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.js +1 -1
  70. package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.js.map +1 -1
  71. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.cjs +2 -2
  72. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.cjs.map +1 -1
  73. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.js +2 -2
  74. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.js.map +1 -1
  75. package/dist/martyrs/src/components/Menu/MenuItem.vue.cjs +1 -1
  76. package/dist/martyrs/src/components/Menu/MenuItem.vue.cjs.map +1 -1
  77. package/dist/martyrs/src/components/Menu/MenuItem.vue.js +1 -1
  78. package/dist/martyrs/src/components/Menu/MenuItem.vue.js.map +1 -1
  79. package/dist/martyrs/src/components/Spoiler/{Spoiler.vue.cjs → Spoiler.vue2.cjs} +2 -2
  80. package/dist/martyrs/src/components/Spoiler/Spoiler.vue2.cjs.map +1 -0
  81. package/dist/martyrs/src/components/Spoiler/{Spoiler.vue.js → Spoiler.vue2.js} +2 -2
  82. package/dist/martyrs/src/components/Spoiler/{Spoiler.vue.cjs.map → Spoiler.vue2.js.map} +1 -1
  83. package/dist/martyrs/src/components/Status/Snack.vue.cjs +1 -1
  84. package/dist/martyrs/src/components/Status/Snack.vue.cjs.map +1 -1
  85. package/dist/martyrs/src/components/Status/Snack.vue.js +1 -1
  86. package/dist/martyrs/src/components/Status/Snack.vue.js.map +1 -1
  87. package/dist/martyrs/src/components/Status/Status.vue.cjs +1 -1
  88. package/dist/martyrs/src/components/Status/Status.vue.cjs.map +1 -1
  89. package/dist/martyrs/src/components/Status/Status.vue.js +1 -1
  90. package/dist/martyrs/src/components/Status/Status.vue.js.map +1 -1
  91. package/dist/martyrs/src/components/UploadImage/{UploadImage.vue.cjs → UploadImage.vue2.cjs} +5 -5
  92. package/dist/martyrs/src/components/UploadImage/UploadImage.vue2.cjs.map +1 -0
  93. package/dist/martyrs/src/components/UploadImage/{UploadImage.vue.js → UploadImage.vue2.js} +5 -5
  94. package/dist/martyrs/src/components/UploadImage/UploadImage.vue2.js.map +1 -0
  95. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +1 -1
  96. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs.map +1 -1
  97. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
  98. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js.map +1 -1
  99. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +4 -4
  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 +4 -4
  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/ProfileEdit.vue.cjs +1 -1
  104. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.cjs.map +1 -1
  105. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
  106. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js.map +1 -1
  107. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +1 -1
  108. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +1 -1
  109. package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.cjs +1 -1
  110. package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.cjs.map +1 -1
  111. package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.js +1 -1
  112. package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.js.map +1 -1
  113. package/dist/martyrs/src/modules/backoffice/components/pages/Dashboard.vue.cjs +3 -3
  114. package/dist/martyrs/src/modules/backoffice/components/pages/Dashboard.vue.cjs.map +1 -1
  115. package/dist/martyrs/src/modules/backoffice/components/pages/Dashboard.vue.js +3 -3
  116. package/dist/martyrs/src/modules/backoffice/components/pages/Dashboard.vue.js.map +1 -1
  117. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.cjs +2 -2
  118. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.cjs.map +1 -1
  119. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +2 -2
  120. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +1 -1
  121. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.cjs.map +1 -1
  122. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js.map +1 -1
  123. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs +1 -1
  124. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs.map +1 -1
  125. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +1 -1
  126. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js.map +1 -1
  127. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs +2 -2
  128. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.cjs.map +1 -1
  129. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +2 -2
  130. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js.map +1 -1
  131. package/dist/martyrs/src/modules/community/components/sections/Comment.vue.cjs +2 -2
  132. package/dist/martyrs/src/modules/community/components/sections/Comment.vue.cjs.map +1 -1
  133. package/dist/martyrs/src/modules/community/components/sections/Comment.vue.js +2 -2
  134. package/dist/martyrs/src/modules/community/components/sections/Comment.vue.js.map +1 -1
  135. package/dist/martyrs/src/modules/community/components/sections/Comments.vue.cjs +1 -1
  136. package/dist/martyrs/src/modules/community/components/sections/Comments.vue.cjs.map +1 -1
  137. package/dist/martyrs/src/modules/community/components/sections/Comments.vue.js +1 -1
  138. package/dist/martyrs/src/modules/community/components/sections/Comments.vue.js.map +1 -1
  139. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.cjs +2 -2
  140. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.cjs.map +1 -1
  141. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +2 -2
  142. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js.map +1 -1
  143. package/dist/martyrs/src/modules/constructor/components/sections/Constructor.vue.cjs +2 -2
  144. package/dist/martyrs/src/modules/constructor/components/sections/Constructor.vue.cjs.map +1 -1
  145. package/dist/martyrs/src/modules/constructor/components/sections/Constructor.vue.js +2 -2
  146. package/dist/martyrs/src/modules/constructor/components/sections/Constructor.vue.js.map +1 -1
  147. package/dist/martyrs/src/modules/constructor/components/sections/Viewer.vue.cjs +1 -1
  148. package/dist/martyrs/src/modules/constructor/components/sections/Viewer.vue.cjs.map +1 -1
  149. package/dist/martyrs/src/modules/constructor/components/sections/Viewer.vue.js +1 -1
  150. package/dist/martyrs/src/modules/constructor/components/sections/Viewer.vue.js.map +1 -1
  151. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs +4 -4
  152. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs.map +1 -1
  153. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +4 -4
  154. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js.map +1 -1
  155. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +2 -2
  156. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +2 -2
  157. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +3 -3
  158. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs.map +1 -1
  159. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +3 -3
  160. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
  161. package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs +4 -4
  162. package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs.map +1 -1
  163. package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +4 -4
  164. package/dist/martyrs/src/modules/events/components/pages/Events.vue.js.map +1 -1
  165. package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.cjs +2 -2
  166. package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.cjs.map +1 -1
  167. package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.js +2 -2
  168. package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.js.map +1 -1
  169. package/dist/martyrs/src/modules/globals/globals.client.cjs +0 -6
  170. package/dist/martyrs/src/modules/globals/globals.client.cjs.map +1 -1
  171. package/dist/martyrs/src/modules/globals/globals.client.js +0 -6
  172. package/dist/martyrs/src/modules/globals/globals.client.js.map +1 -1
  173. package/dist/martyrs/src/modules/globals/views/classes/globals.app.cjs +4 -1
  174. package/dist/martyrs/src/modules/globals/views/classes/globals.app.cjs.map +1 -1
  175. package/dist/martyrs/src/modules/globals/views/classes/globals.app.js +4 -1
  176. package/dist/martyrs/src/modules/globals/views/classes/globals.app.js.map +1 -1
  177. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +4 -4
  178. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs.map +1 -1
  179. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +4 -4
  180. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js.map +1 -1
  181. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +1 -1
  182. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs.map +1 -1
  183. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +1 -1
  184. package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js.map +1 -1
  185. package/dist/martyrs/src/modules/globals/views/components/elements/PhotoStack.vue.cjs +4 -4
  186. package/dist/martyrs/src/modules/globals/views/components/elements/PhotoStack.vue.js +4 -4
  187. package/dist/martyrs/src/modules/globals/views/components/partials/CitySelection.vue.cjs +2 -2
  188. package/dist/martyrs/src/modules/globals/views/components/partials/CitySelection.vue.cjs.map +1 -1
  189. package/dist/martyrs/src/modules/globals/views/components/partials/CitySelection.vue.js +2 -2
  190. package/dist/martyrs/src/modules/globals/views/components/partials/CitySelection.vue.js.map +1 -1
  191. package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.cjs +31 -123
  192. package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.cjs.map +1 -1
  193. package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.js +31 -123
  194. package/dist/martyrs/src/modules/globals/views/components/partials/Footer.vue.js.map +1 -1
  195. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +3 -3
  196. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs.map +1 -1
  197. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +3 -3
  198. package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js.map +1 -1
  199. package/dist/martyrs/src/modules/globals/views/components/partials/LocationSelection.vue.cjs +1 -1
  200. package/dist/martyrs/src/modules/globals/views/components/partials/LocationSelection.vue.cjs.map +1 -1
  201. package/dist/martyrs/src/modules/globals/views/components/partials/LocationSelection.vue.js +1 -1
  202. package/dist/martyrs/src/modules/globals/views/components/partials/LocationSelection.vue.js.map +1 -1
  203. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +3 -3
  204. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs.map +1 -1
  205. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +3 -3
  206. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js.map +1 -1
  207. package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.cjs +2 -2
  208. package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.cjs.map +1 -1
  209. package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.js +2 -2
  210. package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.js.map +1 -1
  211. package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.cjs +10 -10
  212. package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.cjs.map +1 -1
  213. package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.js +10 -10
  214. package/dist/martyrs/src/modules/globals/views/components/sections/Walkthrough.vue.js.map +1 -1
  215. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +1 -1
  216. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs.map +1 -1
  217. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +1 -1
  218. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js.map +1 -1
  219. package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.cjs +3 -3
  220. package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.cjs.map +1 -1
  221. package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.js +3 -3
  222. package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.js.map +1 -1
  223. package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.cjs +2 -2
  224. package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.cjs.map +1 -1
  225. package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.js +2 -2
  226. package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.js.map +1 -1
  227. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.cjs +3 -3
  228. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.cjs.map +1 -1
  229. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +3 -3
  230. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js.map +1 -1
  231. package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.cjs +1 -1
  232. package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.cjs.map +1 -1
  233. package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.js +1 -1
  234. package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.js.map +1 -1
  235. package/dist/martyrs/src/modules/landing/components/sections/SectionJoinUs.vue.cjs +1 -1
  236. package/dist/martyrs/src/modules/landing/components/sections/SectionJoinUs.vue.cjs.map +1 -1
  237. package/dist/martyrs/src/modules/landing/components/sections/SectionJoinUs.vue.js +1 -1
  238. package/dist/martyrs/src/modules/landing/components/sections/SectionJoinUs.vue.js.map +1 -1
  239. package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.cjs +3 -3
  240. package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.cjs.map +1 -1
  241. package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.js +3 -3
  242. package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.js.map +1 -1
  243. package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.cjs +1 -1
  244. package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.cjs.map +1 -1
  245. package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.js +1 -1
  246. package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.js.map +1 -1
  247. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs +4 -4
  248. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.cjs.map +1 -1
  249. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js +4 -4
  250. package/dist/martyrs/src/modules/marketplace/views/components/layouts/Marketplace.vue.js.map +1 -1
  251. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.cjs +1 -1
  252. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.cjs.map +1 -1
  253. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +1 -1
  254. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js.map +1 -1
  255. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +3 -3
  256. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs.map +1 -1
  257. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +3 -3
  258. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js.map +1 -1
  259. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +5 -5
  260. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs.map +1 -1
  261. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +5 -5
  262. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js.map +1 -1
  263. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +7 -7
  264. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs.map +1 -1
  265. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +7 -7
  266. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js.map +1 -1
  267. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +5 -5
  268. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs.map +1 -1
  269. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +5 -5
  270. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js.map +1 -1
  271. package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +8 -8
  272. package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs.map +1 -1
  273. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +8 -8
  274. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -1
  275. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +10 -10
  276. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs.map +1 -1
  277. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +10 -10
  278. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js.map +1 -1
  279. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +4 -4
  280. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs.map +1 -1
  281. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +4 -4
  282. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js.map +1 -1
  283. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +5 -5
  284. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs.map +1 -1
  285. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +5 -5
  286. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -1
  287. package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +9 -9
  288. package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs.map +1 -1
  289. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +9 -9
  290. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -1
  291. package/dist/martyrs/src/modules/notifications/components/blocks/NotificationItem.vue.cjs +2 -2
  292. package/dist/martyrs/src/modules/notifications/components/blocks/NotificationItem.vue.cjs.map +1 -1
  293. package/dist/martyrs/src/modules/notifications/components/blocks/NotificationItem.vue.js +2 -2
  294. package/dist/martyrs/src/modules/notifications/components/blocks/NotificationItem.vue.js.map +1 -1
  295. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.cjs +2 -2
  296. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.cjs.map +1 -1
  297. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +2 -2
  298. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js.map +1 -1
  299. package/dist/martyrs/src/modules/orders/components/blocks/CardOrder.vue.cjs +8 -8
  300. package/dist/martyrs/src/modules/orders/components/blocks/CardOrder.vue.cjs.map +1 -1
  301. package/dist/martyrs/src/modules/orders/components/blocks/CardOrder.vue.js +8 -8
  302. package/dist/martyrs/src/modules/orders/components/blocks/CardOrder.vue.js.map +1 -1
  303. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.cjs +1 -1
  304. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.cjs.map +1 -1
  305. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js +1 -1
  306. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js.map +1 -1
  307. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.cjs +4 -4
  308. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.cjs.map +1 -1
  309. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js +4 -4
  310. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js.map +1 -1
  311. package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.cjs +2 -2
  312. package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.cjs.map +1 -1
  313. package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js +2 -2
  314. package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js.map +1 -1
  315. package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.cjs +1 -1
  316. package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.cjs.map +1 -1
  317. package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.js +1 -1
  318. package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.js.map +1 -1
  319. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +8 -8
  320. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs.map +1 -1
  321. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +8 -8
  322. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js.map +1 -1
  323. package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.cjs +1 -1
  324. package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.cjs.map +1 -1
  325. package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.js +1 -1
  326. package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.js.map +1 -1
  327. package/dist/martyrs/src/modules/orders/components/sections/AskToLogin.vue.cjs +1 -1
  328. package/dist/martyrs/src/modules/orders/components/sections/AskToLogin.vue.cjs.map +1 -1
  329. package/dist/martyrs/src/modules/orders/components/sections/AskToLogin.vue.js +1 -1
  330. package/dist/martyrs/src/modules/orders/components/sections/AskToLogin.vue.js.map +1 -1
  331. package/dist/martyrs/src/modules/orders/components/sections/Succes.vue.cjs +1 -1
  332. package/dist/martyrs/src/modules/orders/components/sections/Succes.vue.js +1 -1
  333. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.cjs +3 -3
  334. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +3 -3
  335. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +3 -3
  336. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs.map +1 -1
  337. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +3 -3
  338. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js.map +1 -1
  339. package/dist/martyrs/src/modules/organizations/components/blocks/EmptyState.vue.cjs +1 -1
  340. package/dist/martyrs/src/modules/organizations/components/blocks/EmptyState.vue.js +1 -1
  341. package/dist/martyrs/src/modules/organizations/components/blocks/Rating.vue.cjs +2 -2
  342. package/dist/martyrs/src/modules/organizations/components/blocks/Rating.vue.js +2 -2
  343. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs +1 -1
  344. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.cjs.map +1 -1
  345. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +1 -1
  346. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js.map +1 -1
  347. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs +4 -4
  348. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.cjs.map +1 -1
  349. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +4 -4
  350. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js.map +1 -1
  351. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs +1 -1
  352. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.cjs.map +1 -1
  353. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +1 -1
  354. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js.map +1 -1
  355. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs +5 -5
  356. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.cjs.map +1 -1
  357. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +5 -5
  358. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js.map +1 -1
  359. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +3 -3
  360. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +3 -3
  361. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +7 -7
  362. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs.map +1 -1
  363. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +7 -7
  364. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
  365. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +8 -8
  366. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs.map +1 -1
  367. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +8 -8
  368. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js.map +1 -1
  369. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
  370. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +1 -1
  371. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
  372. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs.map +1 -1
  373. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
  374. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js.map +1 -1
  375. package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.cjs +2 -2
  376. package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.cjs.map +1 -1
  377. package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js +2 -2
  378. package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js.map +1 -1
  379. package/dist/martyrs/src/modules/products/components/blocks/CardPosition.vue.cjs +1 -1
  380. package/dist/martyrs/src/modules/products/components/blocks/CardPosition.vue.cjs.map +1 -1
  381. package/dist/martyrs/src/modules/products/components/blocks/CardPosition.vue.js +1 -1
  382. package/dist/martyrs/src/modules/products/components/blocks/CardPosition.vue.js.map +1 -1
  383. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.cjs +4 -4
  384. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.cjs.map +1 -1
  385. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js +4 -4
  386. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js.map +1 -1
  387. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.cjs +3 -3
  388. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.cjs.map +1 -1
  389. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +3 -3
  390. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js.map +1 -1
  391. package/dist/martyrs/src/modules/products/components/elements/Price.vue.cjs +4 -4
  392. package/dist/martyrs/src/modules/products/components/elements/Price.vue.cjs.map +1 -1
  393. package/dist/martyrs/src/modules/products/components/elements/Price.vue.js +4 -4
  394. package/dist/martyrs/src/modules/products/components/elements/Price.vue.js.map +1 -1
  395. package/dist/martyrs/src/modules/products/components/elements/QuantitySelector.vue.cjs +2 -2
  396. package/dist/martyrs/src/modules/products/components/elements/QuantitySelector.vue.cjs.map +1 -1
  397. package/dist/martyrs/src/modules/products/components/elements/QuantitySelector.vue.js +2 -2
  398. package/dist/martyrs/src/modules/products/components/elements/QuantitySelector.vue.js.map +1 -1
  399. package/dist/martyrs/src/modules/products/components/elements/{THC.vue.cjs → THC.vue2.cjs} +2 -2
  400. package/dist/martyrs/src/modules/products/components/elements/THC.vue2.cjs.map +1 -0
  401. package/dist/martyrs/src/modules/products/components/elements/{THC.vue.js → THC.vue2.js} +2 -2
  402. package/dist/martyrs/src/modules/products/components/elements/THC.vue2.js.map +1 -0
  403. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +1 -1
  404. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +1 -1
  405. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +2 -2
  406. package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs.map +1 -1
  407. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +2 -2
  408. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js.map +1 -1
  409. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +5 -5
  410. package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs.map +1 -1
  411. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +5 -5
  412. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
  413. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +3 -3
  414. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs.map +1 -1
  415. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +3 -3
  416. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js.map +1 -1
  417. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +3 -3
  418. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs.map +1 -1
  419. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +3 -3
  420. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js.map +1 -1
  421. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +5 -5
  422. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs.map +1 -1
  423. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +5 -5
  424. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js.map +1 -1
  425. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.cjs +4 -4
  426. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.cjs.map +1 -1
  427. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js +4 -4
  428. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js.map +1 -1
  429. package/dist/martyrs/src/modules/products/components/sections/HeroRecommendation.vue.cjs +2 -2
  430. package/dist/martyrs/src/modules/products/components/sections/HeroRecommendation.vue.cjs.map +1 -1
  431. package/dist/martyrs/src/modules/products/components/sections/HeroRecommendation.vue.js +2 -2
  432. package/dist/martyrs/src/modules/products/components/sections/HeroRecommendation.vue.js.map +1 -1
  433. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs +1 -1
  434. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs.map +1 -1
  435. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
  436. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js.map +1 -1
  437. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs +1 -1
  438. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs.map +1 -1
  439. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
  440. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js.map +1 -1
  441. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +3 -3
  442. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs.map +1 -1
  443. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +3 -3
  444. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js.map +1 -1
  445. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs +2 -2
  446. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.cjs.map +1 -1
  447. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +2 -2
  448. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js.map +1 -1
  449. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +6 -6
  450. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs.map +1 -1
  451. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +6 -6
  452. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js.map +1 -1
  453. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
  454. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  455. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.cjs +4 -4
  456. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.cjs.map +1 -1
  457. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js +4 -4
  458. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js.map +1 -1
  459. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +4 -4
  460. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs.map +1 -1
  461. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +4 -4
  462. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js.map +1 -1
  463. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +2 -2
  464. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs.map +1 -1
  465. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +2 -2
  466. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js.map +1 -1
  467. package/dist/martyrs.cjs.js +1 -1
  468. package/dist/martyrs.css +1 -1
  469. package/dist/martyrs.es.js +1 -1
  470. package/dist/{metadata.schema-RlxNv46L.cjs → metadata.schema-BGykn-_r.cjs} +2 -2
  471. package/dist/{metadata.schema-CWmcDJN7.js → metadata.schema-CIRR_WQ-.js} +2 -2
  472. package/dist/music.server.cjs +30 -33
  473. package/dist/music.server.js +30 -33
  474. package/dist/node_modules/.pnpm/@vue_shared@3.5.21/node_modules/@vue/shared/dist/shared.esm-bundler.cjs +2 -2
  475. package/dist/node_modules/.pnpm/@vue_shared@3.5.21/node_modules/@vue/shared/dist/shared.esm-bundler.cjs.map +1 -1
  476. package/dist/node_modules/.pnpm/@vue_shared@3.5.21/node_modules/@vue/shared/dist/shared.esm-bundler.js +2 -2
  477. package/dist/node_modules/.pnpm/@vue_shared@3.5.21/node_modules/@vue/shared/dist/shared.esm-bundler.js.map +1 -1
  478. package/dist/node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/dayjs.min.cjs +13 -13
  479. package/dist/node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/dayjs.min.cjs.map +1 -1
  480. package/dist/node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/dayjs.min.js +13 -13
  481. package/dist/node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/dayjs.min.js.map +1 -1
  482. package/dist/node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/plugin/weekOfYear.cjs +3 -3
  483. package/dist/node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/plugin/weekOfYear.cjs.map +1 -1
  484. package/dist/node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/plugin/weekOfYear.js +3 -3
  485. package/dist/node_modules/.pnpm/dayjs@1.11.18/node_modules/dayjs/plugin/weekOfYear.js.map +1 -1
  486. package/dist/node_modules/.pnpm/lodash.merge@4.6.2/node_modules/lodash.merge/index.cjs +10 -10
  487. package/dist/node_modules/.pnpm/lodash.merge@4.6.2/node_modules/lodash.merge/index.cjs.map +1 -1
  488. package/dist/node_modules/.pnpm/lodash.merge@4.6.2/node_modules/lodash.merge/index.js +10 -10
  489. package/dist/node_modules/.pnpm/lodash.merge@4.6.2/node_modules/lodash.merge/index.js.map +1 -1
  490. package/dist/node_modules/.pnpm/vue-draggable-next@2.3.0_sortablejs@1.15.6_vue@3.5.21_typescript@5.9.2_/node_modules/vue-draggable-next/dist/vue-draggable-next.esm-bundler.cjs +2 -2
  491. package/dist/node_modules/.pnpm/vue-draggable-next@2.3.0_sortablejs@1.15.6_vue@3.5.21_typescript@5.9.2_/node_modules/vue-draggable-next/dist/vue-draggable-next.esm-bundler.cjs.map +1 -1
  492. package/dist/node_modules/.pnpm/vue-draggable-next@2.3.0_sortablejs@1.15.6_vue@3.5.21_typescript@5.9.2_/node_modules/vue-draggable-next/dist/vue-draggable-next.esm-bundler.js +2 -2
  493. package/dist/node_modules/.pnpm/vue-draggable-next@2.3.0_sortablejs@1.15.6_vue@3.5.21_typescript@5.9.2_/node_modules/vue-draggable-next/dist/vue-draggable-next.esm-bundler.js.map +1 -1
  494. package/dist/notifications.server.cjs +22 -18
  495. package/dist/notifications.server.js +22 -18
  496. package/dist/orders.server.cjs +10 -10
  497. package/dist/orders.server.js +10 -10
  498. package/dist/organizations.server.cjs +13 -13
  499. package/dist/organizations.server.js +13 -13
  500. package/dist/{ownership.schema-D1p5XSpt.cjs → ownership.schema-CRYdbemm.cjs} +2 -2
  501. package/dist/{ownership.schema-BqH4v5vH.js → ownership.schema-fwwDf_e5.js} +2 -2
  502. package/dist/pages.server.cjs +2 -2
  503. package/dist/pages.server.js +2 -2
  504. package/dist/products.server.cjs +13 -13
  505. package/dist/products.server.js +13 -13
  506. package/dist/{profile.schema-BGAe5VN5.js → profile.schema-CjLOfG7b.js} +2 -2
  507. package/dist/{profile.schema-pidHrksV.cjs → profile.schema-l0Dk4Ptu.cjs} +2 -2
  508. package/dist/rents.server.cjs +2 -2
  509. package/dist/rents.server.js +2 -2
  510. package/dist/reports.server.cjs +2 -2
  511. package/dist/reports.server.js +2 -2
  512. package/dist/{socials.schema-CtpSF9dE.cjs → socials.schema-CqEHax2w.cjs} +2 -2
  513. package/dist/{socials.schema-BOZV82Mp.js → socials.schema-DxnnaBgO.js} +2 -2
  514. package/dist/spots.server.cjs +4 -4
  515. package/dist/spots.server.js +4 -4
  516. package/dist/style.css +75 -76
  517. package/dist/{web-BkaOiiSn.js → web-8cpb2Zat.js} +1 -1
  518. package/dist/{web-CROHFHoW.cjs → web-B0k809Uc.cjs} +1 -1
  519. package/package.json +8 -12
  520. package/src/builder/builder.js +0 -6
  521. package/src/components/Button/Button.vue +0 -1
  522. package/src/components/Calendar/Calendar.vue +2 -2
  523. package/src/components/Chips/Chips.vue +1 -1
  524. package/src/components/Countdown/Countdown.vue +4 -4
  525. package/src/components/EmptyState/EmptyState.vue +1 -1
  526. package/src/components/FieldBig/FieldBig.vue +1 -1
  527. package/src/components/FieldPhone/FieldPhone.vue +1 -1
  528. package/src/components/LocationMarker/LocationMarker.vue +2 -2
  529. package/src/components/Menu/MenuItem.vue +1 -1
  530. package/src/components/Status/Snack.vue +1 -1
  531. package/src/components/Status/Status.vue +1 -1
  532. package/src/components/UploadImage/UploadImage.vue +2 -2
  533. package/src/configurator/components/layouts/layoutConfigurator.vue +1 -1
  534. package/src/modules/STYLES.MD +59 -77
  535. package/src/modules/TASK-CORE-TRANSFER.MD +62 -0
  536. package/src/modules/auth/views/components/pages/EnterPassword.vue +1 -1
  537. package/src/modules/auth/views/components/pages/Profile.vue +3 -3
  538. package/src/modules/auth/views/components/pages/ProfileEdit.vue +1 -1
  539. package/src/modules/auth/views/components/sections/FeaturedUsers.vue +1 -1
  540. package/src/modules/backoffice/components/admin/Users.vue +1 -1
  541. package/src/modules/backoffice/components/pages/Dashboard.vue +3 -3
  542. package/src/modules/backoffice/components/partials/Sidebar.vue +2 -2
  543. package/src/modules/chats/components/sections/ChatWindow.vue +1 -1
  544. package/src/modules/chats/routes/chats.routes.js +6 -4
  545. package/src/modules/community/components/blocks/CardBlogpost.vue +1 -1
  546. package/src/modules/community/components/layouts/Community.vue +2 -2
  547. package/src/modules/community/components/sections/Comment.vue +1 -1
  548. package/src/modules/community/components/sections/Comments.vue +1 -1
  549. package/src/modules/constructor/components/elements/Card.vue +1 -1
  550. package/src/modules/constructor/components/sections/Constructor.vue +2 -2
  551. package/src/modules/constructor/components/sections/Viewer.vue +1 -1
  552. package/src/modules/events/TASKS.MD +0 -0
  553. package/src/modules/events/components/blocks/CardEvent.vue +4 -4
  554. package/src/modules/events/components/pages/Event.vue +3 -3
  555. package/src/modules/events/components/pages/Events.vue +4 -4
  556. package/src/modules/events/components/sections/SelectDate.vue +2 -2
  557. package/src/modules/globals/TASK.MD +9 -102
  558. package/src/modules/globals/globals.client.js +0 -7
  559. package/src/modules/globals/globals.server.js +14 -1
  560. package/src/modules/globals/views/classes/globals.app.js +8 -4
  561. package/src/modules/globals/views/components/blocks/CardHeader.vue +4 -4
  562. package/src/modules/globals/views/components/blocks/PopupDateSelector.vue +1 -1
  563. package/src/modules/globals/views/components/elements/PhotoStack.vue +4 -4
  564. package/src/modules/globals/views/components/partials/CitySelection.vue +2 -2
  565. package/src/modules/globals/views/components/partials/Footer.centered.vue +6 -6
  566. package/src/modules/globals/views/components/partials/Footer.vue +31 -131
  567. package/src/modules/globals/views/components/partials/Header.vue +3 -3
  568. package/src/modules/globals/views/components/partials/LocationSelection.vue +1 -1
  569. package/src/modules/globals/views/components/partials/Navigation.vue +1 -1
  570. package/src/modules/globals/views/components/sections/SectionPageTitle.vue +2 -2
  571. package/src/modules/globals/views/components/sections/Walkthrough.vue +10 -10
  572. package/src/modules/governance/TASK-TRACKER.MD +192 -0
  573. package/src/modules/governance/controllers/routes/initiatives.routes.js +106 -11
  574. package/src/modules/governance/controllers/routes/milestones.routes.js +111 -0
  575. package/src/modules/governance/controllers/routes/tasks.routes.js +164 -11
  576. package/src/modules/governance/controllers/routes/votes.routes.js +50 -9
  577. package/src/modules/governance/controllers/routes/votings.routes.js +209 -12
  578. package/src/modules/governance/data/mockData.js +654 -0
  579. package/src/modules/governance/governance.server.js +6 -11
  580. package/src/modules/governance/middlewares/initiatives.verifier.js +197 -0
  581. package/src/modules/governance/middlewares/milestones.verifier.js +243 -0
  582. package/src/modules/governance/middlewares/tasks.verifier.js +224 -0
  583. package/src/modules/governance/middlewares/votes.verifier.js +115 -0
  584. package/src/modules/governance/middlewares/votings.verifier.js +237 -0
  585. package/src/modules/governance/models/initiative.model.js +14 -8
  586. package/src/modules/governance/models/task.model.js +13 -1
  587. package/src/modules/governance/models/voting.model.js +68 -2
  588. package/src/modules/governance/reactcode/.bolt/config.json +3 -0
  589. package/src/modules/governance/reactcode/.bolt/prompt +5 -0
  590. package/src/modules/governance/reactcode/eslint.config.js +28 -0
  591. package/src/modules/governance/reactcode/index.html +13 -0
  592. package/src/modules/governance/reactcode/package-lock.json +4229 -0
  593. package/src/modules/governance/reactcode/package.json +36 -0
  594. package/src/modules/governance/reactcode/postcss.config.js +6 -0
  595. package/src/modules/governance/reactcode/src/App.tsx +29 -0
  596. package/src/modules/governance/reactcode/src/components/CreateInitiativeForm.tsx +258 -0
  597. package/src/modules/governance/reactcode/src/components/CreateMilestoneForm.tsx +257 -0
  598. package/src/modules/governance/reactcode/src/components/EmptyState.tsx +29 -0
  599. package/src/modules/governance/reactcode/src/components/InitiativeCard.tsx +59 -0
  600. package/src/modules/governance/reactcode/src/components/LinkedEntityCard.tsx +58 -0
  601. package/src/modules/governance/reactcode/src/components/MilestoneCard.tsx +82 -0
  602. package/src/modules/governance/reactcode/src/components/ProductRepositories.tsx +70 -0
  603. package/src/modules/governance/reactcode/src/components/ProductSummary.tsx +183 -0
  604. package/src/modules/governance/reactcode/src/components/ProductTeam.tsx +100 -0
  605. package/src/modules/governance/reactcode/src/components/ProposeTaskForm.tsx +184 -0
  606. package/src/modules/governance/reactcode/src/components/TaskAssignForm.tsx +74 -0
  607. package/src/modules/governance/reactcode/src/components/TaskCard.tsx +88 -0
  608. package/src/modules/governance/reactcode/src/components/TaskStatusBadge.tsx +27 -0
  609. package/src/modules/governance/reactcode/src/components/VoteForm.tsx +96 -0
  610. package/src/modules/governance/reactcode/src/components/VotingCard.tsx +78 -0
  611. package/src/modules/governance/reactcode/src/components/VotingResults.tsx +155 -0
  612. package/src/modules/governance/reactcode/src/data/mockData.ts +1465 -0
  613. package/src/modules/governance/reactcode/src/index.css +3 -0
  614. package/src/modules/governance/reactcode/src/main.tsx +10 -0
  615. package/src/modules/governance/reactcode/src/pages/InitiativeDetailPage.tsx +569 -0
  616. package/src/modules/governance/reactcode/src/pages/InitiativeMilestonesPage.tsx +171 -0
  617. package/src/modules/governance/reactcode/src/pages/InitiativesListPage.tsx +182 -0
  618. package/src/modules/governance/reactcode/src/pages/MilestoneDetailPage.tsx +178 -0
  619. package/src/modules/governance/reactcode/src/pages/RoadmapPage.tsx +256 -0
  620. package/src/modules/governance/reactcode/src/pages/TaskDetailPage.tsx +529 -0
  621. package/src/modules/governance/reactcode/src/pages/VotingDetailPage.tsx +191 -0
  622. package/src/modules/governance/reactcode/src/pages/VotingsListPage.tsx +86 -0
  623. package/src/modules/governance/reactcode/src/vite-env.d.ts +1 -0
  624. package/src/modules/governance/reactcode/tailwind.config.js +8 -0
  625. package/src/modules/governance/reactcode/tsconfig.app.json +24 -0
  626. package/src/modules/governance/reactcode/tsconfig.json +7 -0
  627. package/src/modules/governance/reactcode/tsconfig.node.json +22 -0
  628. package/src/modules/governance/reactcode/vite.config.ts +10 -0
  629. package/src/modules/governance/seed-governance.js +348 -0
  630. package/src/modules/governance/views/components/blocks/CardInitiativeItem.vue +58 -7
  631. package/src/modules/governance/views/components/blocks/CardMilestoneItem.vue +70 -0
  632. package/src/modules/governance/views/components/blocks/CardTaskItem.vue +58 -7
  633. package/src/modules/governance/views/components/blocks/CardVotingItem.vue +65 -7
  634. package/src/modules/governance/views/components/layouts/Governance.vue +23 -0
  635. package/src/modules/governance/views/components/pages/Governance.vue +44 -0
  636. package/src/modules/governance/views/components/pages/Initiative.vue +413 -8
  637. package/src/modules/governance/views/components/pages/InitiativeMilestones.vue +159 -0
  638. package/src/modules/governance/views/components/pages/Initiatives.vue +164 -6
  639. package/src/modules/governance/views/components/pages/Milestone.vue +170 -0
  640. package/src/modules/governance/views/components/pages/Roadmap.vue +238 -0
  641. package/src/modules/governance/views/components/pages/Task.vue +393 -14
  642. package/src/modules/governance/views/components/pages/Tasks.vue +164 -10
  643. package/src/modules/governance/views/components/pages/Voting.vue +167 -20
  644. package/src/modules/governance/views/components/pages/Votings.vue +86 -9
  645. package/src/modules/governance/views/components/partials/EmptyState.vue +41 -0
  646. package/src/modules/governance/views/components/partials/LinkedEntityCard.vue +73 -0
  647. package/src/modules/governance/views/components/partials/TaskStatusBadge.vue +35 -0
  648. package/src/modules/governance/views/components/partials/VoteForm.vue +100 -0
  649. package/src/modules/governance/views/components/partials/VotingResults.vue +127 -0
  650. package/src/modules/governance/views/router/goverance.router.js +52 -1
  651. package/src/modules/governance/views/store/initiatives.js +10 -7
  652. package/src/modules/governance/views/store/tasks.js +10 -7
  653. package/src/modules/governance/views/store/votes.js +10 -7
  654. package/src/modules/governance/views/store/votings.js +9 -6
  655. package/src/modules/inventory/components/forms/AdjustmentForm.vue +1 -1
  656. package/src/modules/landing/components/sections/Examples.vue +1 -1
  657. package/src/modules/landing/components/sections/SectionEarn.vue +2 -2
  658. package/src/modules/landing/components/sections/SectionFeature.vue +1 -1
  659. package/src/modules/landing/components/sections/SectionFeaturesImages.vue +1 -1
  660. package/src/modules/landing/components/sections/SectionFocus.vue +1 -1
  661. package/src/modules/landing/components/sections/SectionGuide.vue +2 -2
  662. package/src/modules/landing/components/sections/SectionHeroToken.vue +1 -1
  663. package/src/modules/landing/components/sections/SectionHeroVideo.vue +2 -2
  664. package/src/modules/landing/components/sections/SectionJoinUs.vue +1 -1
  665. package/src/modules/landing/components/sections/SectionMobileApp.vue +3 -3
  666. package/src/modules/landing/components/sections/SubscribeNewsletter.vue +1 -1
  667. package/src/modules/marketplace/views/components/layouts/Marketplace.vue +3 -3
  668. package/src/modules/marketplace/views/components/sections/SectionMenu.vue +1 -1
  669. package/src/modules/music/components/forms/AlbumForm.vue +2 -2
  670. package/src/modules/music/components/forms/ArtistForm.vue +4 -4
  671. package/src/modules/music/components/forms/PlaylistForm.vue +6 -6
  672. package/src/modules/music/components/forms/TrackForm.vue +4 -4
  673. package/src/modules/music/components/pages/Album.vue +8 -8
  674. package/src/modules/music/components/pages/Artist.vue +10 -10
  675. package/src/modules/music/components/pages/MusicLibrary.vue +4 -4
  676. package/src/modules/music/components/pages/Playlist.vue +5 -5
  677. package/src/modules/music/components/pages/Track.vue +9 -9
  678. package/src/modules/music/music.server.js +0 -1
  679. package/src/modules/notifications/components/blocks/NotificationItem.vue +1 -1
  680. package/src/modules/notifications/components/elements/NotificationBadge.vue +1 -1
  681. package/src/modules/notifications/notifications.server.js +26 -20
  682. package/src/modules/orders/components/blocks/CardOrder.vue +7 -7
  683. package/src/modules/orders/components/blocks/CardOrderBackoffice.vue +1 -1
  684. package/src/modules/orders/components/blocks/CardOrderUser.vue +3 -3
  685. package/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue +2 -2
  686. package/src/modules/orders/components/elements/PriceTotal.vue +1 -1
  687. package/src/modules/orders/components/pages/Favorites.vue +1 -1
  688. package/src/modules/orders/components/pages/OrderBackoffice.vue +7 -7
  689. package/src/modules/orders/components/pages/Orders_refact.vue +3 -3
  690. package/src/modules/orders/components/partials/ShopCart.vue +1 -1
  691. package/src/modules/orders/components/sections/AskToLogin.vue +1 -1
  692. package/src/modules/orders/components/sections/Succes.vue +1 -1
  693. package/src/modules/organizations/components/blocks/CardOrganization.vue +3 -3
  694. package/src/modules/organizations/components/blocks/EmptyState.vue +1 -1
  695. package/src/modules/organizations/components/blocks/Rating.vue +2 -2
  696. package/src/modules/organizations/components/forms/AddExistingMembersForm.vue +1 -1
  697. package/src/modules/organizations/components/forms/DepartmentForm.vue +2 -2
  698. package/src/modules/organizations/components/forms/InviteForm.vue +1 -1
  699. package/src/modules/organizations/components/pages/Department.vue +2 -2
  700. package/src/modules/organizations/components/pages/DepartmentEdit.vue +2 -2
  701. package/src/modules/organizations/components/pages/Organization.new.vue +7 -7
  702. package/src/modules/organizations/components/pages/Organization.vue +6 -6
  703. package/src/modules/organizations/components/pages/OrganizationBackoffice.vue +8 -8
  704. package/src/modules/organizations/components/sections/MembersAdd.vue +1 -1
  705. package/src/modules/products/components/blocks/CardCategory.vue +2 -2
  706. package/src/modules/products/components/blocks/CardPosition.vue +1 -1
  707. package/src/modules/products/components/blocks/CardProduct.vue +3 -3
  708. package/src/modules/products/components/blocks/ProductDiscounts.vue +2 -2
  709. package/src/modules/products/components/elements/Price.vue +4 -4
  710. package/src/modules/products/components/elements/QuantitySelector.vue +2 -2
  711. package/src/modules/products/components/forms/StockAuditForm.vue +1 -1
  712. package/src/modules/products/components/pages/Product.vue +2 -2
  713. package/src/modules/products/components/pages/Products.vue +4 -4
  714. package/src/modules/products/components/sections/EditAttributes.vue +3 -3
  715. package/src/modules/products/components/sections/EditDiscounts.vue +3 -3
  716. package/src/modules/products/components/sections/EditVariants.vue +5 -5
  717. package/src/modules/products/components/sections/FilterProducts.vue +3 -3
  718. package/src/modules/products/components/sections/HeroRecommendation.vue +2 -2
  719. package/src/modules/products/components/sections/ProductConfigurator.vue +1 -1
  720. package/src/modules/products/components/sections/ProductsRecommended.vue +1 -1
  721. package/src/modules/products/components/sections/SectionProduct.vue +2 -2
  722. package/src/modules/reports/components/sections/FormReport.vue +2 -2
  723. package/src/modules/spots/components/blocks/CardSpot.vue +5 -5
  724. package/src/modules/spots/components/pages/Spot.vue +2 -2
  725. package/src/modules/spots/components/pages/SpotEdit.vue +3 -3
  726. package/src/modules/wallet/views/components/pages/Wallet.vue +4 -4
  727. package/src/styles/base/all.scss +20 -0
  728. package/src/styles/config.scss +10 -9
  729. package/src/styles/typography.scss +13 -13
  730. package/dist/globals.observer-C_FYclgV.cjs +0 -78
  731. package/dist/globals.observer-MZsqaE6F.js +0 -79
  732. package/dist/main-8f945Ngn.cjs +0 -11
  733. package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs +0 -2
  734. package/dist/martyrs/src/components/EditImages/EditImages.vue.cjs.map +0 -1
  735. package/dist/martyrs/src/components/EditImages/EditImages.vue.js +0 -2
  736. package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +0 -1
  737. package/dist/martyrs/src/components/Spoiler/Spoiler.vue.js.map +0 -1
  738. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.cjs.map +0 -1
  739. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js.map +0 -1
  740. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue2.cjs +0 -2
  741. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue2.cjs.map +0 -1
  742. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue2.js +0 -2
  743. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue2.js.map +0 -1
  744. package/dist/martyrs/src/modules/products/components/elements/THC.vue.cjs.map +0 -1
  745. package/dist/martyrs/src/modules/products/components/elements/THC.vue.js.map +0 -1
  746. package/dist/tickets.controller-9zoaVPcx.cjs +0 -444
  747. package/dist/tickets.controller-C8sWVqbB.js +0 -428
  748. package/dist/wallet.server.cjs +0 -528
  749. package/dist/wallet.server.js +0 -511
  750. package/src/builder/modes/ssr.vite.dev.js +0 -180
  751. package/src/builder/ssr/ssr-render-html.vite.js +0 -35
  752. package/src/builder/vite/index.js +0 -13
  753. package/src/builder/vite/vite.config.api.js +0 -52
  754. package/src/builder/vite/vite.config.base.js +0 -110
  755. package/src/builder/vite/vite.config.spa.client.js +0 -81
  756. package/src/builder/vite/vite.config.ssr.client.js +0 -244
  757. package/src/builder/vite/vite.config.ssr.server.js +0 -74
  758. package/src/modules/governance/controllers/factories/initiatives.controller.js +0 -90
  759. package/src/modules/governance/controllers/factories/tasks.controller.js +0 -88
  760. package/src/modules/governance/controllers/factories/votes.controller.js +0 -64
  761. package/src/modules/governance/controllers/factories/votings.controller.js +0 -105
  762. package/src/modules/governance/views/store/projects.js +0 -148
  763. /package/src/modules/governance/{DESCRIPTION.MD → IGNORE-ITS FOR FUTURE-DESCRIPTION.MD} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"EditDiscounts.vue.cjs","sources":["../../../../../../../src/modules/products/components/sections/EditDiscounts.vue"],"sourcesContent":["<template>\n <Block\n title=\"Discounts\"\n placeholder=\"No discounts added yet\"\n :actions=\"[{\n label: '+',\n function: () => openDiscountPopup()\n }]\"\n >\n <div v-if=\"discounts.length > 0\" class=\"cols-1 gap-thin\">\n <div\n v-for=\"(discount, index) in discounts\"\n :key=\"index\"\n class=\"bg-white radius-small pd-small flex-nowrap flex-v-center flex gap-thin\"\n >\n <div class=\"w-100\">\n <p class=\"p-medium mn-b-thin t-medium d-block\">{{ discount.name || 'Unnamed discount' }}</p>\n <p class=\"t-medium t-transp\">\n <template v-if=\"discount.type === 'special_price'\">\n Special price: {{ formatPrice(discount.value) }}\n </template>\n <template v-else>\n {{ discount.value }}% off\n </template>\n </p>\n <p v-if=\"discount.date && (discount.date.start || discount.date.end)\" class=\"t-small t-transp\">\n {{ formatDateRange(discount.date) }}\n </p>\n </div>\n \n <div class=\"flex gap-thin\">\n <div @click=\"() => openDiscountPopup(index)\" class=\"radius-small pd-small flex-center flex aspect-1x1 bg-light cursor-pointer hover-scale-1\">\n <IconEdit\n class=\"i-regular\"\n />\n </div>\n <div @click=\"() => discounts.splice(index, 1)\" class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red cursor-pointer hover-scale-1\">\n <IconDelete\n class=\"i-regular\"\n />\n </div>\n </div>\n </div>\n </div>\n </Block>\n\n <Popup\n title=\"Edit Discount\"\n @close-popup=\"closeDiscountPopup\"\n :isPopupOpen=\"isDiscountPopupOpen\"\n class=\"bg-white w-max-40r radius-medium pd-medium\"\n >\n <div class=\"cols-1 gap-thin\">\n <Field\n v-model:field=\"currentDiscount.name\"\n label=\"Name\"\n placeholder=\"Discount Name\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <Field\n v-model:field=\"currentDiscount.description\"\n label=\"Description\"\n type=\"textarea\"\n placeholder=\"Discount Description\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <Field\n v-model:field=\"currentDiscount.value\"\n :label=\"currentDiscount.type === 'special_price' ? 'Special Price' : 'Discount'\"\n :placeholder=\"currentDiscount.type === 'special_price' ? 'New price' : 'Discount percentage'\"\n class=\"w-100 bg-light radius-small pd-small\"\n >\n <Select \n v-model:select=\"currentDiscount.type\" \n placeholder=\"Select type\"\n value=\"label\"\n property=\"value\"\n :options=\"[\n { value: 'discount', label: 'Discount (%)' },\n { value: 'special_price', label: 'Special Price' },\n ]\"\n class=\"pos-relative t-nowrap bg-white gap-small flex flex-column pd-thin radius-thin\"\n />\n </Field>\n\n <Field\n v-model:field=\"currentDiscount.quantity\"\n label=\"Quantity\"\n type=\"number\"\n placeholder=\"Quantity to get discount\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <div class=\"t-medium mn-t-micro mn-b-micro\">Date Range</div>\n <div class=\"cols-2 mobile:cols-1 gap-thin\">\n <Field\n v-model:field=\"currentDiscount.date.start\"\n label=\"Start Date\"\n type=\"date\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n \n <Field\n v-model:field=\"currentDiscount.date.end\"\n label=\"End Date\"\n type=\"date\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n </div>\n\n <div class=\"t-medium mn-t-micro mn-b-micro\">Time Range</div>\n <div class=\"cols-2 mobile:cols-1 gap-thin\">\n <Field\n v-model:field=\"currentDiscount.time.start\"\n label=\"Start Time\"\n type=\"time\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n \n <Field\n v-model:field=\"currentDiscount.time.end\"\n label=\"End Time\"\n type=\"time\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n </div>\n \n \n \n <div class=\"flex gap-thin mn-t-medium\">\n <Button\n :showSuccess=\"false\"\n :showLoader=\"false\"\n class=\"bg-red t-white w-100\"\n @click=\"closeDiscountPopup\"\n >\n Cancel\n </Button>\n <Button\n class=\"bg-main w-100\"\n @click=\"saveDiscount\"\n >\n Save Discount\n </Button>\n </div>\n </div>\n </Popup>\n</template>\n\n<script setup>\nimport { ref, reactive, defineModel, computed } from 'vue';\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Field from '@martyrs/src/components/Field/Field.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Popup from '@martyrs/src/components/Popup/Popup.vue';\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue';\nimport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\n// Используем defineModel для более простой работы с v-model в родительском компоненте\nconst discounts = defineModel('discounts', { default: () => [] });\n\n// Локальное состояние\nconst isDiscountPopupOpen = ref(false);\nconst editingDiscountIndex = ref(null);\nconst currentDiscount = reactive({\n name: '',\n description: '',\n type: 'discount', // discount или special_price\n value: 0,\n quantity: 1,\n date: {\n start: null,\n end: null\n },\n time: {\n start: '',\n end: ''\n },\n users: []\n});\n\n// Используется для форматирования диапазона дат\nfunction formatDateRange(dateRange) {\n if (!dateRange) return '';\n \n let result = '';\n \n if (dateRange.start) {\n const startDate = new Date(dateRange.start);\n result += startDate.toLocaleDateString();\n }\n \n result += ' - ';\n \n if (dateRange.end) {\n const endDate = new Date(dateRange.end);\n result += endDate.toLocaleDateString();\n }\n \n return result;\n}\n\n// Функция открытия попапа добавления/редактирования\nfunction openDiscountPopup(index) {\n // Если передан индекс, это редактирование существующей скидки\n if (index !== undefined) {\n editingDiscountIndex.value = index;\n const discount = discounts.value[index];\n \n // Копируем данные в currentDiscount\n Object.assign(currentDiscount, {\n name: discount.name || '',\n description: discount.description || '',\n type: discount.type || 'discount',\n value: discount.value || 0,\n quantity: discount.quantity || 1,\n date: {\n start: discount.date?.start || null,\n end: discount.date?.end || null\n },\n time: {\n start: discount.time?.start || '',\n end: discount.time?.end || ''\n },\n users: Array.isArray(discount.users) ? [...discount.users] : []\n });\n } else {\n // Сброс данных при создании новой скидки\n editingDiscountIndex.value = null;\n Object.assign(currentDiscount, {\n name: '',\n description: '',\n type: 'discount',\n value: 0,\n quantity: 1,\n date: {\n start: null,\n end: null\n },\n time: {\n start: '',\n end: ''\n },\n users: []\n });\n }\n \n isDiscountPopupOpen.value = true;\n}\n\n// Закрытие попапа\nfunction closeDiscountPopup() {\n isDiscountPopupOpen.value = false;\n editingDiscountIndex.value = null;\n}\n\n\n\n// Сохранение скидки\nfunction saveDiscount() {\n // Проверка на основные поля\n if (currentDiscount.type === 'discount' && (currentDiscount.value < 0 || currentDiscount.value > 100)) {\n alert('Discount value must be between 0 and 100');\n return;\n }\n\n if (currentDiscount.type === 'special_price' && currentDiscount.value < 0) {\n alert('Special price must be greater than or equal to 0');\n return;\n }\n\n // Создаем копию текущей скидки для сохранения\n const discountToSave = {\n name: currentDiscount.name,\n description: currentDiscount.description,\n type: currentDiscount.type || 'discount',\n value: parseFloat(currentDiscount.value) || 0,\n quantity: parseInt(currentDiscount.quantity) || 1,\n date: {\n start: currentDiscount.date.start,\n end: currentDiscount.date.end\n },\n time: {\n start: currentDiscount.time.start,\n end: currentDiscount.time.end\n },\n users: [...currentDiscount.users]\n };\n\n // Если редактируем существующую скидку\n if (editingDiscountIndex.value !== null) {\n // Обновляем существующую скидку\n discounts.value.splice(editingDiscountIndex.value, 1, discountToSave);\n } else {\n // Добавляем новую скидку\n if (!discounts.value) {\n discounts.value = [];\n }\n discounts.value.push(discountToSave);\n }\n\n // Закрываем попап\n closeDiscountPopup();\n}\n</script>"],"names":["_useModel","ref","reactive"],"mappings":"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"}
1
+ {"version":3,"file":"EditDiscounts.vue.cjs","sources":["../../../../../../../src/modules/products/components/sections/EditDiscounts.vue"],"sourcesContent":["<template>\n <Block\n title=\"Discounts\"\n placeholder=\"No discounts added yet\"\n :actions=\"[{\n label: '+',\n function: () => openDiscountPopup()\n }]\"\n >\n <div v-if=\"discounts.length > 0\" class=\"cols-1 gap-thin\">\n <div\n v-for=\"(discount, index) in discounts\"\n :key=\"index\"\n class=\"bg-white radius-small pd-small flex-nowrap flex-v-center flex gap-thin\"\n >\n <div class=\"w-100\">\n <p class=\"p-regular mn-b-thin t-medium d-block\">{{ discount.name || 'Unnamed discount' }}</p>\n <p class=\"t-medium t-transp\">\n <template v-if=\"discount.type === 'special_price'\">\n Special price: {{ formatPrice(discount.value) }}\n </template>\n <template v-else>\n {{ discount.value }}% off\n </template>\n </p>\n <p v-if=\"discount.date && (discount.date.start || discount.date.end)\" class=\"t-small t-transp\">\n {{ formatDateRange(discount.date) }}\n </p>\n </div>\n \n <div class=\"flex gap-thin\">\n <div @click=\"() => openDiscountPopup(index)\" class=\"radius-small pd-small flex-center flex aspect-1x1 bg-light cursor-pointer hover-scale-1\">\n <IconEdit\n class=\"i-medium\"\n />\n </div>\n <div @click=\"() => discounts.splice(index, 1)\" class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red cursor-pointer hover-scale-1\">\n <IconDelete\n class=\"i-medium\"\n />\n </div>\n </div>\n </div>\n </div>\n </Block>\n\n <Popup\n title=\"Edit Discount\"\n @close-popup=\"closeDiscountPopup\"\n :isPopupOpen=\"isDiscountPopupOpen\"\n class=\"bg-white w-max-40r radius-medium pd-medium\"\n >\n <div class=\"cols-1 gap-thin\">\n <Field\n v-model:field=\"currentDiscount.name\"\n label=\"Name\"\n placeholder=\"Discount Name\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <Field\n v-model:field=\"currentDiscount.description\"\n label=\"Description\"\n type=\"textarea\"\n placeholder=\"Discount Description\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <Field\n v-model:field=\"currentDiscount.value\"\n :label=\"currentDiscount.type === 'special_price' ? 'Special Price' : 'Discount'\"\n :placeholder=\"currentDiscount.type === 'special_price' ? 'New price' : 'Discount percentage'\"\n class=\"w-100 bg-light radius-small pd-small\"\n >\n <Select \n v-model:select=\"currentDiscount.type\" \n placeholder=\"Select type\"\n value=\"label\"\n property=\"value\"\n :options=\"[\n { value: 'discount', label: 'Discount (%)' },\n { value: 'special_price', label: 'Special Price' },\n ]\"\n class=\"pos-relative t-nowrap bg-white gap-small flex flex-column pd-thin radius-thin\"\n />\n </Field>\n\n <Field\n v-model:field=\"currentDiscount.quantity\"\n label=\"Quantity\"\n type=\"number\"\n placeholder=\"Quantity to get discount\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <div class=\"t-medium mn-t-micro mn-b-micro\">Date Range</div>\n <div class=\"cols-2 mobile:cols-1 gap-thin\">\n <Field\n v-model:field=\"currentDiscount.date.start\"\n label=\"Start Date\"\n type=\"date\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n \n <Field\n v-model:field=\"currentDiscount.date.end\"\n label=\"End Date\"\n type=\"date\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n </div>\n\n <div class=\"t-medium mn-t-micro mn-b-micro\">Time Range</div>\n <div class=\"cols-2 mobile:cols-1 gap-thin\">\n <Field\n v-model:field=\"currentDiscount.time.start\"\n label=\"Start Time\"\n type=\"time\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n \n <Field\n v-model:field=\"currentDiscount.time.end\"\n label=\"End Time\"\n type=\"time\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n </div>\n \n \n \n <div class=\"flex gap-thin mn-t-medium\">\n <Button\n :showSuccess=\"false\"\n :showLoader=\"false\"\n class=\"bg-red t-white w-100\"\n @click=\"closeDiscountPopup\"\n >\n Cancel\n </Button>\n <Button\n class=\"bg-main w-100\"\n @click=\"saveDiscount\"\n >\n Save Discount\n </Button>\n </div>\n </div>\n </Popup>\n</template>\n\n<script setup>\nimport { ref, reactive, defineModel, computed } from 'vue';\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Field from '@martyrs/src/components/Field/Field.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Popup from '@martyrs/src/components/Popup/Popup.vue';\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue';\nimport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\n// Используем defineModel для более простой работы с v-model в родительском компоненте\nconst discounts = defineModel('discounts', { default: () => [] });\n\n// Локальное состояние\nconst isDiscountPopupOpen = ref(false);\nconst editingDiscountIndex = ref(null);\nconst currentDiscount = reactive({\n name: '',\n description: '',\n type: 'discount', // discount или special_price\n value: 0,\n quantity: 1,\n date: {\n start: null,\n end: null\n },\n time: {\n start: '',\n end: ''\n },\n users: []\n});\n\n// Используется для форматирования диапазона дат\nfunction formatDateRange(dateRange) {\n if (!dateRange) return '';\n \n let result = '';\n \n if (dateRange.start) {\n const startDate = new Date(dateRange.start);\n result += startDate.toLocaleDateString();\n }\n \n result += ' - ';\n \n if (dateRange.end) {\n const endDate = new Date(dateRange.end);\n result += endDate.toLocaleDateString();\n }\n \n return result;\n}\n\n// Функция открытия попапа добавления/редактирования\nfunction openDiscountPopup(index) {\n // Если передан индекс, это редактирование существующей скидки\n if (index !== undefined) {\n editingDiscountIndex.value = index;\n const discount = discounts.value[index];\n \n // Копируем данные в currentDiscount\n Object.assign(currentDiscount, {\n name: discount.name || '',\n description: discount.description || '',\n type: discount.type || 'discount',\n value: discount.value || 0,\n quantity: discount.quantity || 1,\n date: {\n start: discount.date?.start || null,\n end: discount.date?.end || null\n },\n time: {\n start: discount.time?.start || '',\n end: discount.time?.end || ''\n },\n users: Array.isArray(discount.users) ? [...discount.users] : []\n });\n } else {\n // Сброс данных при создании новой скидки\n editingDiscountIndex.value = null;\n Object.assign(currentDiscount, {\n name: '',\n description: '',\n type: 'discount',\n value: 0,\n quantity: 1,\n date: {\n start: null,\n end: null\n },\n time: {\n start: '',\n end: ''\n },\n users: []\n });\n }\n \n isDiscountPopupOpen.value = true;\n}\n\n// Закрытие попапа\nfunction closeDiscountPopup() {\n isDiscountPopupOpen.value = false;\n editingDiscountIndex.value = null;\n}\n\n\n\n// Сохранение скидки\nfunction saveDiscount() {\n // Проверка на основные поля\n if (currentDiscount.type === 'discount' && (currentDiscount.value < 0 || currentDiscount.value > 100)) {\n alert('Discount value must be between 0 and 100');\n return;\n }\n\n if (currentDiscount.type === 'special_price' && currentDiscount.value < 0) {\n alert('Special price must be greater than or equal to 0');\n return;\n }\n\n // Создаем копию текущей скидки для сохранения\n const discountToSave = {\n name: currentDiscount.name,\n description: currentDiscount.description,\n type: currentDiscount.type || 'discount',\n value: parseFloat(currentDiscount.value) || 0,\n quantity: parseInt(currentDiscount.quantity) || 1,\n date: {\n start: currentDiscount.date.start,\n end: currentDiscount.date.end\n },\n time: {\n start: currentDiscount.time.start,\n end: currentDiscount.time.end\n },\n users: [...currentDiscount.users]\n };\n\n // Если редактируем существующую скидку\n if (editingDiscountIndex.value !== null) {\n // Обновляем существующую скидку\n discounts.value.splice(editingDiscountIndex.value, 1, discountToSave);\n } else {\n // Добавляем новую скидку\n if (!discounts.value) {\n discounts.value = [];\n }\n discounts.value.push(discountToSave);\n }\n\n // Закрываем попап\n closeDiscountPopup();\n}\n</script>"],"names":["_useModel","ref","reactive"],"mappings":"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"}
@@ -11,7 +11,7 @@ const _hoisted_1 = {
11
11
  class: "cols-1 gap-thin"
12
12
  };
13
13
  const _hoisted_2 = { class: "w-100" };
14
- const _hoisted_3 = { class: "p-medium mn-b-thin t-medium d-block" };
14
+ const _hoisted_3 = { class: "p-regular mn-b-thin t-medium d-block" };
15
15
  const _hoisted_4 = { class: "t-medium t-transp" };
16
16
  const _hoisted_5 = {
17
17
  key: 0,
@@ -179,13 +179,13 @@ const _sfc_main = {
179
179
  onClick: () => openDiscountPopup(index),
180
180
  class: "radius-small pd-small flex-center flex aspect-1x1 bg-light cursor-pointer hover-scale-1"
181
181
  }, [
182
- createVNode(_sfc_main$2, { class: "i-regular" })
182
+ createVNode(_sfc_main$2, { class: "i-medium" })
183
183
  ], 8, _hoisted_7),
184
184
  createElementVNode("div", {
185
185
  onClick: () => discounts.value.splice(index, 1),
186
186
  class: "radius-small pd-small flex-center flex aspect-1x1 bg-red cursor-pointer hover-scale-1"
187
187
  }, [
188
- createVNode(_sfc_main$3, { class: "i-regular" })
188
+ createVNode(_sfc_main$3, { class: "i-medium" })
189
189
  ], 8, _hoisted_8)
190
190
  ])
191
191
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"EditDiscounts.vue.js","sources":["../../../../../../../src/modules/products/components/sections/EditDiscounts.vue"],"sourcesContent":["<template>\n <Block\n title=\"Discounts\"\n placeholder=\"No discounts added yet\"\n :actions=\"[{\n label: '+',\n function: () => openDiscountPopup()\n }]\"\n >\n <div v-if=\"discounts.length > 0\" class=\"cols-1 gap-thin\">\n <div\n v-for=\"(discount, index) in discounts\"\n :key=\"index\"\n class=\"bg-white radius-small pd-small flex-nowrap flex-v-center flex gap-thin\"\n >\n <div class=\"w-100\">\n <p class=\"p-medium mn-b-thin t-medium d-block\">{{ discount.name || 'Unnamed discount' }}</p>\n <p class=\"t-medium t-transp\">\n <template v-if=\"discount.type === 'special_price'\">\n Special price: {{ formatPrice(discount.value) }}\n </template>\n <template v-else>\n {{ discount.value }}% off\n </template>\n </p>\n <p v-if=\"discount.date && (discount.date.start || discount.date.end)\" class=\"t-small t-transp\">\n {{ formatDateRange(discount.date) }}\n </p>\n </div>\n \n <div class=\"flex gap-thin\">\n <div @click=\"() => openDiscountPopup(index)\" class=\"radius-small pd-small flex-center flex aspect-1x1 bg-light cursor-pointer hover-scale-1\">\n <IconEdit\n class=\"i-regular\"\n />\n </div>\n <div @click=\"() => discounts.splice(index, 1)\" class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red cursor-pointer hover-scale-1\">\n <IconDelete\n class=\"i-regular\"\n />\n </div>\n </div>\n </div>\n </div>\n </Block>\n\n <Popup\n title=\"Edit Discount\"\n @close-popup=\"closeDiscountPopup\"\n :isPopupOpen=\"isDiscountPopupOpen\"\n class=\"bg-white w-max-40r radius-medium pd-medium\"\n >\n <div class=\"cols-1 gap-thin\">\n <Field\n v-model:field=\"currentDiscount.name\"\n label=\"Name\"\n placeholder=\"Discount Name\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <Field\n v-model:field=\"currentDiscount.description\"\n label=\"Description\"\n type=\"textarea\"\n placeholder=\"Discount Description\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <Field\n v-model:field=\"currentDiscount.value\"\n :label=\"currentDiscount.type === 'special_price' ? 'Special Price' : 'Discount'\"\n :placeholder=\"currentDiscount.type === 'special_price' ? 'New price' : 'Discount percentage'\"\n class=\"w-100 bg-light radius-small pd-small\"\n >\n <Select \n v-model:select=\"currentDiscount.type\" \n placeholder=\"Select type\"\n value=\"label\"\n property=\"value\"\n :options=\"[\n { value: 'discount', label: 'Discount (%)' },\n { value: 'special_price', label: 'Special Price' },\n ]\"\n class=\"pos-relative t-nowrap bg-white gap-small flex flex-column pd-thin radius-thin\"\n />\n </Field>\n\n <Field\n v-model:field=\"currentDiscount.quantity\"\n label=\"Quantity\"\n type=\"number\"\n placeholder=\"Quantity to get discount\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <div class=\"t-medium mn-t-micro mn-b-micro\">Date Range</div>\n <div class=\"cols-2 mobile:cols-1 gap-thin\">\n <Field\n v-model:field=\"currentDiscount.date.start\"\n label=\"Start Date\"\n type=\"date\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n \n <Field\n v-model:field=\"currentDiscount.date.end\"\n label=\"End Date\"\n type=\"date\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n </div>\n\n <div class=\"t-medium mn-t-micro mn-b-micro\">Time Range</div>\n <div class=\"cols-2 mobile:cols-1 gap-thin\">\n <Field\n v-model:field=\"currentDiscount.time.start\"\n label=\"Start Time\"\n type=\"time\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n \n <Field\n v-model:field=\"currentDiscount.time.end\"\n label=\"End Time\"\n type=\"time\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n </div>\n \n \n \n <div class=\"flex gap-thin mn-t-medium\">\n <Button\n :showSuccess=\"false\"\n :showLoader=\"false\"\n class=\"bg-red t-white w-100\"\n @click=\"closeDiscountPopup\"\n >\n Cancel\n </Button>\n <Button\n class=\"bg-main w-100\"\n @click=\"saveDiscount\"\n >\n Save Discount\n </Button>\n </div>\n </div>\n </Popup>\n</template>\n\n<script setup>\nimport { ref, reactive, defineModel, computed } from 'vue';\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Field from '@martyrs/src/components/Field/Field.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Popup from '@martyrs/src/components/Popup/Popup.vue';\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue';\nimport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\n// Используем defineModel для более простой работы с v-model в родительском компоненте\nconst discounts = defineModel('discounts', { default: () => [] });\n\n// Локальное состояние\nconst isDiscountPopupOpen = ref(false);\nconst editingDiscountIndex = ref(null);\nconst currentDiscount = reactive({\n name: '',\n description: '',\n type: 'discount', // discount или special_price\n value: 0,\n quantity: 1,\n date: {\n start: null,\n end: null\n },\n time: {\n start: '',\n end: ''\n },\n users: []\n});\n\n// Используется для форматирования диапазона дат\nfunction formatDateRange(dateRange) {\n if (!dateRange) return '';\n \n let result = '';\n \n if (dateRange.start) {\n const startDate = new Date(dateRange.start);\n result += startDate.toLocaleDateString();\n }\n \n result += ' - ';\n \n if (dateRange.end) {\n const endDate = new Date(dateRange.end);\n result += endDate.toLocaleDateString();\n }\n \n return result;\n}\n\n// Функция открытия попапа добавления/редактирования\nfunction openDiscountPopup(index) {\n // Если передан индекс, это редактирование существующей скидки\n if (index !== undefined) {\n editingDiscountIndex.value = index;\n const discount = discounts.value[index];\n \n // Копируем данные в currentDiscount\n Object.assign(currentDiscount, {\n name: discount.name || '',\n description: discount.description || '',\n type: discount.type || 'discount',\n value: discount.value || 0,\n quantity: discount.quantity || 1,\n date: {\n start: discount.date?.start || null,\n end: discount.date?.end || null\n },\n time: {\n start: discount.time?.start || '',\n end: discount.time?.end || ''\n },\n users: Array.isArray(discount.users) ? [...discount.users] : []\n });\n } else {\n // Сброс данных при создании новой скидки\n editingDiscountIndex.value = null;\n Object.assign(currentDiscount, {\n name: '',\n description: '',\n type: 'discount',\n value: 0,\n quantity: 1,\n date: {\n start: null,\n end: null\n },\n time: {\n start: '',\n end: ''\n },\n users: []\n });\n }\n \n isDiscountPopupOpen.value = true;\n}\n\n// Закрытие попапа\nfunction closeDiscountPopup() {\n isDiscountPopupOpen.value = false;\n editingDiscountIndex.value = null;\n}\n\n\n\n// Сохранение скидки\nfunction saveDiscount() {\n // Проверка на основные поля\n if (currentDiscount.type === 'discount' && (currentDiscount.value < 0 || currentDiscount.value > 100)) {\n alert('Discount value must be between 0 and 100');\n return;\n }\n\n if (currentDiscount.type === 'special_price' && currentDiscount.value < 0) {\n alert('Special price must be greater than or equal to 0');\n return;\n }\n\n // Создаем копию текущей скидки для сохранения\n const discountToSave = {\n name: currentDiscount.name,\n description: currentDiscount.description,\n type: currentDiscount.type || 'discount',\n value: parseFloat(currentDiscount.value) || 0,\n quantity: parseInt(currentDiscount.quantity) || 1,\n date: {\n start: currentDiscount.date.start,\n end: currentDiscount.date.end\n },\n time: {\n start: currentDiscount.time.start,\n end: currentDiscount.time.end\n },\n users: [...currentDiscount.users]\n };\n\n // Если редактируем существующую скидку\n if (editingDiscountIndex.value !== null) {\n // Обновляем существующую скидку\n discounts.value.splice(editingDiscountIndex.value, 1, discountToSave);\n } else {\n // Добавляем новую скидку\n if (!discounts.value) {\n discounts.value = [];\n }\n discounts.value.push(discountToSave);\n }\n\n // Закрываем попап\n closeDiscountPopup();\n}\n</script>"],"names":["_useModel"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkKA,UAAM,YAAYA,SAAW,SAAC,WAAkC;AAGhE,UAAM,sBAAsB,IAAI,KAAK;AACrC,UAAM,uBAAuB,IAAI,IAAI;AACrC,UAAM,kBAAkB,SAAS;AAAA,MAC/B,MAAM;AAAA,MACN,aAAa;AAAA,MACb,MAAM;AAAA;AAAA,MACN,OAAO;AAAA,MACP,UAAU;AAAA,MACV,MAAM;AAAA,QACJ,OAAO;AAAA,QACP,KAAK;AAAA,MACT;AAAA,MACE,MAAM;AAAA,QACJ,OAAO;AAAA,QACP,KAAK;AAAA,MACT;AAAA,MACE,OAAO,CAAA;AAAA,IACT,CAAC;AAGD,aAAS,gBAAgB,WAAW;AAClC,UAAI,CAAC,UAAW,QAAO;AAEvB,UAAI,SAAS;AAEb,UAAI,UAAU,OAAO;AACnB,cAAM,YAAY,IAAI,KAAK,UAAU,KAAK;AAC1C,kBAAU,UAAU,mBAAkB;AAAA,MACxC;AAEA,gBAAU;AAEV,UAAI,UAAU,KAAK;AACjB,cAAM,UAAU,IAAI,KAAK,UAAU,GAAG;AACtC,kBAAU,QAAQ,mBAAkB;AAAA,MACtC;AAEA,aAAO;AAAA,IACT;AAGA,aAAS,kBAAkB,OAAO;AAEhC,UAAI,UAAU,QAAW;AACvB,6BAAqB,QAAQ;AAC7B,cAAM,WAAW,UAAU,MAAM,KAAK;AAGtC,eAAO,OAAO,iBAAiB;AAAA,UAC7B,MAAM,SAAS,QAAQ;AAAA,UACvB,aAAa,SAAS,eAAe;AAAA,UACrC,MAAM,SAAS,QAAQ;AAAA,UACvB,OAAO,SAAS,SAAS;AAAA,UACzB,UAAU,SAAS,YAAY;AAAA,UAC/B,MAAM;AAAA,YACJ,OAAO,SAAS,MAAM,SAAS;AAAA,YAC/B,KAAK,SAAS,MAAM,OAAO;AAAA,UACnC;AAAA,UACM,MAAM;AAAA,YACJ,OAAO,SAAS,MAAM,SAAS;AAAA,YAC/B,KAAK,SAAS,MAAM,OAAO;AAAA,UACnC;AAAA,UACM,OAAO,MAAM,QAAQ,SAAS,KAAK,IAAI,CAAC,GAAG,SAAS,KAAK,IAAI,CAAA;AAAA,QACnE,CAAK;AAAA,MACH,OAAO;AAEL,6BAAqB,QAAQ;AAC7B,eAAO,OAAO,iBAAiB;AAAA,UAC7B,MAAM;AAAA,UACN,aAAa;AAAA,UACb,MAAM;AAAA,UACN,OAAO;AAAA,UACP,UAAU;AAAA,UACV,MAAM;AAAA,YACJ,OAAO;AAAA,YACP,KAAK;AAAA,UACb;AAAA,UACM,MAAM;AAAA,YACJ,OAAO;AAAA,YACP,KAAK;AAAA,UACb;AAAA,UACM,OAAO,CAAA;AAAA,QACb,CAAK;AAAA,MACH;AAEA,0BAAoB,QAAQ;AAAA,IAC9B;AAGA,aAAS,qBAAqB;AAC5B,0BAAoB,QAAQ;AAC5B,2BAAqB,QAAQ;AAAA,IAC/B;AAKA,aAAS,eAAe;AAEtB,UAAI,gBAAgB,SAAS,eAAe,gBAAgB,QAAQ,KAAK,gBAAgB,QAAQ,MAAM;AACrG,cAAM,0CAA0C;AAChD;AAAA,MACF;AAEA,UAAI,gBAAgB,SAAS,mBAAmB,gBAAgB,QAAQ,GAAG;AACzE,cAAM,kDAAkD;AACxD;AAAA,MACF;AAGA,YAAM,iBAAiB;AAAA,QACrB,MAAM,gBAAgB;AAAA,QACtB,aAAa,gBAAgB;AAAA,QAC7B,MAAM,gBAAgB,QAAQ;AAAA,QAC9B,OAAO,WAAW,gBAAgB,KAAK,KAAK;AAAA,QAC5C,UAAU,SAAS,gBAAgB,QAAQ,KAAK;AAAA,QAChD,MAAM;AAAA,UACJ,OAAO,gBAAgB,KAAK;AAAA,UAC5B,KAAK,gBAAgB,KAAK;AAAA,QAChC;AAAA,QACI,MAAM;AAAA,UACJ,OAAO,gBAAgB,KAAK;AAAA,UAC5B,KAAK,gBAAgB,KAAK;AAAA,QAChC;AAAA,QACI,OAAO,CAAC,GAAG,gBAAgB,KAAK;AAAA,MACpC;AAGE,UAAI,qBAAqB,UAAU,MAAM;AAEvC,kBAAU,MAAM,OAAO,qBAAqB,OAAO,GAAG,cAAc;AAAA,MACtE,OAAO;AAEL,YAAI,CAAC,UAAU,OAAO;AACpB,oBAAU,QAAQ,CAAA;AAAA,QACpB;AACA,kBAAU,MAAM,KAAK,cAAc;AAAA,MACrC;AAGA,yBAAkB;AAAA,IACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"EditDiscounts.vue.js","sources":["../../../../../../../src/modules/products/components/sections/EditDiscounts.vue"],"sourcesContent":["<template>\n <Block\n title=\"Discounts\"\n placeholder=\"No discounts added yet\"\n :actions=\"[{\n label: '+',\n function: () => openDiscountPopup()\n }]\"\n >\n <div v-if=\"discounts.length > 0\" class=\"cols-1 gap-thin\">\n <div\n v-for=\"(discount, index) in discounts\"\n :key=\"index\"\n class=\"bg-white radius-small pd-small flex-nowrap flex-v-center flex gap-thin\"\n >\n <div class=\"w-100\">\n <p class=\"p-regular mn-b-thin t-medium d-block\">{{ discount.name || 'Unnamed discount' }}</p>\n <p class=\"t-medium t-transp\">\n <template v-if=\"discount.type === 'special_price'\">\n Special price: {{ formatPrice(discount.value) }}\n </template>\n <template v-else>\n {{ discount.value }}% off\n </template>\n </p>\n <p v-if=\"discount.date && (discount.date.start || discount.date.end)\" class=\"t-small t-transp\">\n {{ formatDateRange(discount.date) }}\n </p>\n </div>\n \n <div class=\"flex gap-thin\">\n <div @click=\"() => openDiscountPopup(index)\" class=\"radius-small pd-small flex-center flex aspect-1x1 bg-light cursor-pointer hover-scale-1\">\n <IconEdit\n class=\"i-medium\"\n />\n </div>\n <div @click=\"() => discounts.splice(index, 1)\" class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red cursor-pointer hover-scale-1\">\n <IconDelete\n class=\"i-medium\"\n />\n </div>\n </div>\n </div>\n </div>\n </Block>\n\n <Popup\n title=\"Edit Discount\"\n @close-popup=\"closeDiscountPopup\"\n :isPopupOpen=\"isDiscountPopupOpen\"\n class=\"bg-white w-max-40r radius-medium pd-medium\"\n >\n <div class=\"cols-1 gap-thin\">\n <Field\n v-model:field=\"currentDiscount.name\"\n label=\"Name\"\n placeholder=\"Discount Name\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <Field\n v-model:field=\"currentDiscount.description\"\n label=\"Description\"\n type=\"textarea\"\n placeholder=\"Discount Description\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <Field\n v-model:field=\"currentDiscount.value\"\n :label=\"currentDiscount.type === 'special_price' ? 'Special Price' : 'Discount'\"\n :placeholder=\"currentDiscount.type === 'special_price' ? 'New price' : 'Discount percentage'\"\n class=\"w-100 bg-light radius-small pd-small\"\n >\n <Select \n v-model:select=\"currentDiscount.type\" \n placeholder=\"Select type\"\n value=\"label\"\n property=\"value\"\n :options=\"[\n { value: 'discount', label: 'Discount (%)' },\n { value: 'special_price', label: 'Special Price' },\n ]\"\n class=\"pos-relative t-nowrap bg-white gap-small flex flex-column pd-thin radius-thin\"\n />\n </Field>\n\n <Field\n v-model:field=\"currentDiscount.quantity\"\n label=\"Quantity\"\n type=\"number\"\n placeholder=\"Quantity to get discount\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <div class=\"t-medium mn-t-micro mn-b-micro\">Date Range</div>\n <div class=\"cols-2 mobile:cols-1 gap-thin\">\n <Field\n v-model:field=\"currentDiscount.date.start\"\n label=\"Start Date\"\n type=\"date\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n \n <Field\n v-model:field=\"currentDiscount.date.end\"\n label=\"End Date\"\n type=\"date\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n </div>\n\n <div class=\"t-medium mn-t-micro mn-b-micro\">Time Range</div>\n <div class=\"cols-2 mobile:cols-1 gap-thin\">\n <Field\n v-model:field=\"currentDiscount.time.start\"\n label=\"Start Time\"\n type=\"time\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n \n <Field\n v-model:field=\"currentDiscount.time.end\"\n label=\"End Time\"\n type=\"time\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n </div>\n \n \n \n <div class=\"flex gap-thin mn-t-medium\">\n <Button\n :showSuccess=\"false\"\n :showLoader=\"false\"\n class=\"bg-red t-white w-100\"\n @click=\"closeDiscountPopup\"\n >\n Cancel\n </Button>\n <Button\n class=\"bg-main w-100\"\n @click=\"saveDiscount\"\n >\n Save Discount\n </Button>\n </div>\n </div>\n </Popup>\n</template>\n\n<script setup>\nimport { ref, reactive, defineModel, computed } from 'vue';\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Field from '@martyrs/src/components/Field/Field.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Popup from '@martyrs/src/components/Popup/Popup.vue';\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue';\nimport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\n\n// Используем defineModel для более простой работы с v-model в родительском компоненте\nconst discounts = defineModel('discounts', { default: () => [] });\n\n// Локальное состояние\nconst isDiscountPopupOpen = ref(false);\nconst editingDiscountIndex = ref(null);\nconst currentDiscount = reactive({\n name: '',\n description: '',\n type: 'discount', // discount или special_price\n value: 0,\n quantity: 1,\n date: {\n start: null,\n end: null\n },\n time: {\n start: '',\n end: ''\n },\n users: []\n});\n\n// Используется для форматирования диапазона дат\nfunction formatDateRange(dateRange) {\n if (!dateRange) return '';\n \n let result = '';\n \n if (dateRange.start) {\n const startDate = new Date(dateRange.start);\n result += startDate.toLocaleDateString();\n }\n \n result += ' - ';\n \n if (dateRange.end) {\n const endDate = new Date(dateRange.end);\n result += endDate.toLocaleDateString();\n }\n \n return result;\n}\n\n// Функция открытия попапа добавления/редактирования\nfunction openDiscountPopup(index) {\n // Если передан индекс, это редактирование существующей скидки\n if (index !== undefined) {\n editingDiscountIndex.value = index;\n const discount = discounts.value[index];\n \n // Копируем данные в currentDiscount\n Object.assign(currentDiscount, {\n name: discount.name || '',\n description: discount.description || '',\n type: discount.type || 'discount',\n value: discount.value || 0,\n quantity: discount.quantity || 1,\n date: {\n start: discount.date?.start || null,\n end: discount.date?.end || null\n },\n time: {\n start: discount.time?.start || '',\n end: discount.time?.end || ''\n },\n users: Array.isArray(discount.users) ? [...discount.users] : []\n });\n } else {\n // Сброс данных при создании новой скидки\n editingDiscountIndex.value = null;\n Object.assign(currentDiscount, {\n name: '',\n description: '',\n type: 'discount',\n value: 0,\n quantity: 1,\n date: {\n start: null,\n end: null\n },\n time: {\n start: '',\n end: ''\n },\n users: []\n });\n }\n \n isDiscountPopupOpen.value = true;\n}\n\n// Закрытие попапа\nfunction closeDiscountPopup() {\n isDiscountPopupOpen.value = false;\n editingDiscountIndex.value = null;\n}\n\n\n\n// Сохранение скидки\nfunction saveDiscount() {\n // Проверка на основные поля\n if (currentDiscount.type === 'discount' && (currentDiscount.value < 0 || currentDiscount.value > 100)) {\n alert('Discount value must be between 0 and 100');\n return;\n }\n\n if (currentDiscount.type === 'special_price' && currentDiscount.value < 0) {\n alert('Special price must be greater than or equal to 0');\n return;\n }\n\n // Создаем копию текущей скидки для сохранения\n const discountToSave = {\n name: currentDiscount.name,\n description: currentDiscount.description,\n type: currentDiscount.type || 'discount',\n value: parseFloat(currentDiscount.value) || 0,\n quantity: parseInt(currentDiscount.quantity) || 1,\n date: {\n start: currentDiscount.date.start,\n end: currentDiscount.date.end\n },\n time: {\n start: currentDiscount.time.start,\n end: currentDiscount.time.end\n },\n users: [...currentDiscount.users]\n };\n\n // Если редактируем существующую скидку\n if (editingDiscountIndex.value !== null) {\n // Обновляем существующую скидку\n discounts.value.splice(editingDiscountIndex.value, 1, discountToSave);\n } else {\n // Добавляем новую скидку\n if (!discounts.value) {\n discounts.value = [];\n }\n discounts.value.push(discountToSave);\n }\n\n // Закрываем попап\n closeDiscountPopup();\n}\n</script>"],"names":["_useModel"],"mappings":"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"}
@@ -22,7 +22,7 @@ const _hoisted_1 = { class: "aspect-1x1 h-3r flex-child-default radius-small o-h
22
22
  const _hoisted_2 = ["src"];
23
23
  const _hoisted_3 = { class: "w-100" };
24
24
  const _hoisted_4 = { class: "flex-nowrap mn-b-nano flex-v-center flex" };
25
- const _hoisted_5 = { class: "p-medium t-medium d-block" };
25
+ const _hoisted_5 = { class: "p-regular t-medium d-block" };
26
26
  const _hoisted_6 = {
27
27
  key: 0,
28
28
  class: "t-small pd-thin mn-l-thin radius-thin bg-light"
@@ -300,7 +300,7 @@ const _sfc_main = {
300
300
  submit: () => copyVariant(variant)
301
301
  }, {
302
302
  default: vue.withCtx(() => [
303
- vue.createVNode(IconDuplicate.default, { class: "i-regular" })
303
+ vue.createVNode(IconDuplicate.default, { class: "i-medium" })
304
304
  ]),
305
305
  _: 2
306
306
  }, 1032, ["submit"]),
@@ -311,7 +311,7 @@ const _sfc_main = {
311
311
  submit: () => openVariantPopup(variant)
312
312
  }, {
313
313
  default: vue.withCtx(() => [
314
- vue.createVNode(IconEdit.default, { class: "i-regular" })
314
+ vue.createVNode(IconEdit.default, { class: "i-medium" })
315
315
  ]),
316
316
  _: 2
317
317
  }, 1032, ["submit"]),
@@ -322,7 +322,7 @@ const _sfc_main = {
322
322
  submit: () => deleteVariant(variant)
323
323
  }, {
324
324
  default: vue.withCtx(() => [
325
- vue.createVNode(IconDelete.default, { class: "i-regular" })
325
+ vue.createVNode(IconDelete.default, { class: "i-medium" })
326
326
  ]),
327
327
  _: 2
328
328
  }, 1032, ["submit"])
@@ -412,7 +412,7 @@ const _sfc_main = {
412
412
  vue.createElementVNode("div", _hoisted_13, [
413
413
  vue.createVNode(IconDelete.default, {
414
414
  onClick: () => currentVariant.attributes.splice(attrIndex, 1),
415
- class: "i-regular"
415
+ class: "i-medium"
416
416
  }, null, 8, ["onClick"])
417
417
  ])
418
418
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"EditVariants.vue.cjs","sources":["../../../../../../../src/modules/products/components/sections/EditVariants.vue"],"sourcesContent":["<template>\n <Block\n title=\"Variants\"\n placeholder=\"No variants added yet. At least one variant is required.\"\n :actions=\"[{\n label: '+',\n function: () => openVariantPopup()\n }]\"\n >\n <!-- is {{currentVariants}} -->\n <Feed\n v-model:items=\"currentVariants\"\n :store=\"variants\"\n :options=\"{\n product: route.params.product,\n }\"\n :skeleton=\"{\n structure: [\n { block: 'text', size: 'small' },\n { block: 'text', size: 'medium' },\n { block: 'text', size: 'small' }\n ]\n }\"\n :states=\"{\n empty: {\n title: 'No variants',\n description: 'Create your first variant'\n }\n }\"\n >\n <template #default=\"{ items }\">\n <li\n v-for=\"variant in items\"\n :key=\"variant._id\"\n class=\"bg-white radius-small pd-small flex-nowrap flex-v-center flex gap-thin mn-b-thin\"\n >\n <div class=\"aspect-1x1 h-3r flex-child-default radius-small o-hidden\">\n <img\n v-if=\"variant.images?.length > 0\"\n :src=\"(FILE_SERVER_URL || '') + variant.images[0]\"\n alt=\"Variant image\"\n class=\"w-100 h-100 object-fit-cover\"\n />\n <PlaceholderImage v-else class=\"w-100 h-100\" />\n </div>\n \n <div class=\"w-100\">\n <div class=\"flex-nowrap mn-b-nano flex-v-center flex\">\n <p class=\"p-medium t-medium d-block\">{{ variant.name || 'Unnamed variant' }}</p>\n <p v-if=\"variant.status\" class=\"t-small pd-thin mn-l-thin radius-thin bg-light\">{{ variant.status }}</p>\n </div>\n\n <p class=\"t-medium t-transp\">{{ returnCurrency() }}{{ variant.price }} per {{ variant.quantity }}{{ variant.unit }}</p>\n <p v-if=\"variant.ingredients?.length\" class=\"t-small t-transp\">{{ variant.ingredients.length }} ingredients</p>\n \n </div>\n \n <div class=\"flex gap-thin\">\n <Button\n :showSuccess=\"false\"\n :showLoader=\"true\"\n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-light cursor-pointer hover-scale-1\"\n :submit=\"() => copyVariant(variant)\"\n >\n <IconDuplicate class=\"i-regular\" />\n </Button>\n <Button\n :showSuccess=\"false\"\n :showLoader=\"false\"\n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-light cursor-pointer hover-scale-1\"\n :submit=\"() => openVariantPopup(variant)\"\n >\n <IconEdit class=\"i-regular\" />\n </Button>\n <Button\n :showSuccess=\"false\"\n :showLoader=\"true\"\n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red cursor-pointer hover-scale-1\"\n :submit=\"() => deleteVariant(variant)\"\n >\n <IconDelete class=\"i-regular\" />\n </Button>\n </div>\n </li>\n </template>\n </Feed>\n </Block>\n\n <Popup\n :title=\"editingVariant ? 'Edit Variant' : 'Create Variant'\"\n @close-popup=\"closeVariantPopup\"\n :isPopupOpen=\"isVariantPopupOpen\"\n align=\"center right\"\n class=\"bg-white h-min-100 w-max-50r pd-medium\"\n >\n <div class=\"cols-1 gap-thin o-y-scroll\">\n <!-- Status and Quantity at the top -->\n <div class=\"flex gap-thin\">\n <Select\n v-model:select=\"currentVariant.status\"\n label=\"Status\"\n placeholder=\"Select status\"\n :options=\"['published', 'draft', 'archived']\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n \n <Field \n v-model:field=\"currentVariant.quantity\" \n label=\"Quantity\"\n placeholder=\"Enter quantity\" \n class=\"w-100 bg-light radius-small pd-small\"\n type=\"number\"\n >\n <Select \n v-model:select=\"currentVariant.unit\" \n placeholder=\"Unit\"\n :options=\"['pcs', 'g', 'kg', 'ml', 'l', 'oz']\"\n class=\"pos-relative bg-white gap-small flex flex-column pd-thin radius-thin\"\n />\n </Field>\n </div>\n\n <!-- Price and Cost -->\n <div class=\"flex gap-thin\">\n <Field\n v-model:field=\"currentVariant.price\"\n label=\"Price\"\n type=\"number\"\n placeholder=\"Price\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n \n <Field\n v-model:field=\"currentVariant.cost\"\n label=\"Cost\"\n type=\"number\"\n placeholder=\"Cost\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n </div>\n \n <!-- Attributes Section -->\n <div class=\"t-medium mn-t-small mn-b-small\">Attributes</div>\n <div \n class=\"gap-micro flex-nowrap flex mn-b-small\" \n v-for=\"(attr, attrIndex) in currentVariant.attributes\" \n :key=\"attrIndex\"\n > \n <Field\n v-model:field=\"attr.name\"\n placeholder=\"Attribute Name\"\n class=\"w-100 bg-light radius-small pd-small\"\n /> \n <Field\n v-model:field=\"attr.value\"\n placeholder=\"Attribute Value\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n <div class=\"radius-small h-100 flex-center flex-child-default flex aspect-1x1 bg-red cursor-pointer hover-scale-1\">\n <IconDelete \n @click=\"() => currentVariant.attributes.splice(attrIndex, 1)\" \n class=\"i-regular\"\n />\n </div>\n </div>\n\n <Button\n class=\"bg-light w-100\"\n :showSuccess=\"false\"\n :showLoader=\"false\"\n @click=\"addAttribute\"\n >\n Add Attribute\n </Button>\n\n <!-- SKU and Name - auto-generated -->\n <Field\n v-model:field=\"currentVariant.sku\"\n label=\"SKU\"\n placeholder=\"SKU\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <Field\n v-model:field=\"currentVariant.name\"\n label=\"Name\"\n placeholder=\"Variant Name\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <Field\n v-model:field=\"currentVariant.description\"\n label=\"Description\"\n placeholder=\"Enter variant description\"\n class=\"w-100 bg-light radius-small pd-small\"\n style=\"resize: vertical\"\n type=\"textarea\"\n />\n\n <!-- Ingredients Section -->\n <div class=\"mn-t-medium\">\n <EditIngredients \n v-model:ingredients=\"currentVariant.ingredients\"\n />\n </div>\n\n <!-- Images Section -->\n <div class=\"t-medium mn-t-small mn-b-small\">Images</div>\n <EditImages\n :images=\"currentVariant.images || []\"\n :uploadPath=\"'variants'\"\n class=\"bg-light pd-small radius-small\"\n @update:images=\"(newImages) => { currentVariant.images = newImages }\"\n />\n \n <!-- Action Buttons -->\n <div class=\"flex gap-thin mn-t-medium\">\n <Button\n :showSuccess=\"false\"\n :showLoader=\"false\"\n class=\"bg-red t-white w-100\"\n :submit=\"closeVariantPopup\"\n >\n Cancel\n </Button>\n <Button\n class=\"bg-main w-100\"\n :submit=\"saveVariant\"\n >\n {{ editingVariant ? 'Update Variant' : 'Create Variant' }}\n </Button>\n </div>\n </div>\n </Popup>\n</template>\n\n<script setup>\nimport { ref, reactive, computed, watch } from 'vue';\nimport { useRoute } from 'vue-router';\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\nimport variants from '@martyrs/src/modules/products/store/variants.store.js';\nimport * as products from '@martyrs/src/modules/products/store/products.js';\n\n// Components\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Field from '@martyrs/src/components/Field/Field.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Popup from '@martyrs/src/components/Popup/Popup.vue';\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport Feed from '@martyrs/src/components/Feed/Feed.vue';\nimport EditImages from '@martyrs/src/components/EditImages/EditImages.vue';\nimport EditIngredients from '@martyrs/src/modules/products/components/sections/EditIngredients.vue';\n\n// Icons\nimport PlaceholderImage from '@martyrs/src/modules/icons/placeholders/PlaceholderImage.vue';\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue';\nimport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\nimport IconDuplicate from '@martyrs/src/modules/icons/actions/IconDuplicate.vue';\nimport { useGlobalMixins } from '@martyrs/src/modules/globals/views/mixins/mixins.js';\n\nconst route = useRoute();\nconst { returnCurrency } = useGlobalMixins();\n\nconst productId = computed(() => route.params.product);\n\nconst productOwner = computed(() => {\n return products?.state?.current?.owner;\n});\n\n// Локальное состояние\nconst isVariantPopupOpen = ref(false);\nconst editingVariant = ref(null);\nconst currentVariants = ref([]);\n\n// Функция генерации SKU\nfunction generateSKU() {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 5);\n return `VAR-${timestamp}-${random}`.toUpperCase();\n}\n\n// Функция генерации имени из атрибутов\nfunction generateNameFromAttributes() {\n if (currentVariant.attributes.length > 0) {\n const validAttributes = currentVariant.attributes\n .filter(attr => attr.name && attr.value)\n .map(attr => `${attr.value}`)\n .join(' ');\n \n if (validAttributes) {\n return validAttributes;\n }\n }\n \n // Если нет атрибутов, используем название продукта и количество\n const productName = products?.state?.current?.name || 'Product';\n return `${productName} ${currentVariant.quantity}${currentVariant.unit}`;\n}\n\n// Реактивный объект для текущего варианта\nconst currentVariant = reactive({\n name: '',\n description: '',\n sku: '',\n images: [],\n price: 0,\n cost: 0,\n quantity: 1,\n unit: 'pcs',\n status: 'published',\n ingredients: [],\n attributes: [],\n owner: null,\n creator: null,\n product: null\n});\n\n// Следим за изменениями атрибутов, количества и единиц для автогенерации имени\nwatch(\n () => [currentVariant.attributes, currentVariant.quantity, currentVariant.unit],\n () => {\n if (!editingVariant.value || !currentVariant.name) {\n currentVariant.name = generateNameFromAttributes();\n }\n },\n { deep: true }\n);\n\n// Функция открытия попапа варианта\nfunction openVariantPopup(variant = null) {\n editingVariant.value = variant;\n \n if (variant) {\n // Обновляем реактивный объект через Vue реактивность\n currentVariant.name = variant.name || '';\n currentVariant.description = variant.description || '';\n currentVariant.sku = variant.sku || '';\n currentVariant.images = [...(variant.images || [])];\n currentVariant.price = variant.price || 0;\n currentVariant.cost = variant.cost || 0;\n currentVariant.quantity = variant.quantity || 1;\n currentVariant.unit = variant.unit || 'pcs';\n currentVariant.status = variant.status || 'published';\n currentVariant.ingredients = [...(variant.ingredients || [])];\n currentVariant.attributes = (variant.attributes || []).map(attr => ({ ...attr }));\n currentVariant.owner = variant.owner;\n currentVariant.creator = variant.creator;\n currentVariant.product = variant.product;\n } else {\n // Для нового варианта генерируем SKU и устанавливаем только нужные поля\n currentVariant.sku = generateSKU();\n currentVariant.owner = {\n target: route.params._id || auth.state.user._id,\n type: route.params._id ? 'organization' : 'user'\n };\n currentVariant.creator = {\n target: auth.state.user._id,\n type: 'user',\n hidden: false\n };\n currentVariant.product = productId.value;\n \n // Генерируем имя после установки всех полей\n currentVariant.name = generateNameFromAttributes();\n }\n \n isVariantPopupOpen.value = true;\n}\n\nfunction closeVariantPopup() {\n isVariantPopupOpen.value = false;\n editingVariant.value = null;\n \n // Сбрасываем значения к дефолтным\n currentVariant.name = '';\n currentVariant.description = '';\n currentVariant.sku = '';\n currentVariant.images = [];\n currentVariant.price = 0;\n currentVariant.cost = 0;\n currentVariant.quantity = 1;\n currentVariant.unit = 'pcs';\n currentVariant.status = 'published';\n currentVariant.ingredients = [];\n currentVariant.attributes = [];\n currentVariant.owner = null;\n currentVariant.creator = null;\n currentVariant.product = null;\n}\n\nfunction addAttribute() {\n currentVariant.attributes.push({ name: '', value: '' });\n}\n\nasync function copyVariant(variant) {\n const variantCopy = {\n name: `${variant.name} (Copy)`,\n description: variant.description || '',\n sku: generateSKU(), // Генерируем новый SKU для копии\n images: [...(variant.images || [])],\n price: variant.price || 0,\n cost: variant.cost || 0,\n quantity: variant.quantity || 1,\n unit: variant.unit || 'pcs',\n status: variant.status || 'published',\n ingredients: (variant.ingredients || []).map(ing => ({ ...ing })),\n attributes: (variant.attributes || []).map(attr => ({ ...attr })),\n owner: {\n target: route.params._id || auth.state.user._id,\n type: route.params._id ? 'organization' : 'user'\n },\n creator: {\n target: auth.state.user._id,\n type: 'user',\n hidden: false\n },\n product: productId.value\n };\n \n try {\n const created = await variants.create(variantCopy);\n variants.addItem(created, currentVariants.value);\n } catch (error) {\n console.error('Error copying variant:', error);\n }\n}\n\nasync function deleteVariant(variant) {\n if (confirm('Are you sure you want to delete this variant?')) {\n try {\n console.log(variant)\n await variants.delete(variant);\n variants.removeItem(variant, currentVariants.value);\n } catch (error) {\n console.error('Error deleting variant:', error);\n }\n }\n}\n\nasync function saveVariant() {\n if (!currentVariant.name) {\n currentVariant.name = generateNameFromAttributes();\n }\n \n if (!currentVariant.sku) {\n currentVariant.sku = generateSKU();\n }\n\n const variantToSave = {\n name: currentVariant.name,\n description: currentVariant.description,\n sku: currentVariant.sku,\n images: [...currentVariant.images],\n price: parseFloat(currentVariant.price) || 0,\n cost: parseFloat(currentVariant.cost) || 0,\n quantity: parseInt(currentVariant.quantity) || 1,\n unit: currentVariant.unit || 'pcs',\n status: currentVariant.status,\n ingredients: currentVariant.ingredients.map(ing => ({ ...ing })),\n attributes: currentVariant.attributes.filter(attr => attr.name || attr.value),\n product: currentVariant.product\n };\n\n // Добавляем owner и creator только при создании нового варианта\n if (!editingVariant.value) {\n variantToSave.owner = {\n target: route.params._id || auth.state.user._id,\n type: route.params._id ? 'organization' : 'user'\n };\n variantToSave.creator = {\n target: auth.state.user._id,\n type: 'user',\n hidden: false\n };\n }\n\n try {\n if (editingVariant.value) {\n // Обновление существующего варианта\n variantToSave._id = editingVariant.value._id;\n const updated = await variants.update(variantToSave);\n variants.updateItem(updated, currentVariants.value);\n } else {\n // Создание нового варианта\n const created = await variants.create(variantToSave);\n variants.addItem(created, currentVariants.value);\n }\n \n closeVariantPopup();\n } catch (error) {\n console.error('Error saving variant:', error);\n throw error;\n }\n}\n</script>"],"names":["useRoute","useGlobalMixins","computed","products?.state","ref","reactive","watch","auth.state","variants"],"mappings":"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"}
1
+ {"version":3,"file":"EditVariants.vue.cjs","sources":["../../../../../../../src/modules/products/components/sections/EditVariants.vue"],"sourcesContent":["<template>\n <Block\n title=\"Variants\"\n placeholder=\"No variants added yet. At least one variant is required.\"\n :actions=\"[{\n label: '+',\n function: () => openVariantPopup()\n }]\"\n >\n <!-- is {{currentVariants}} -->\n <Feed\n v-model:items=\"currentVariants\"\n :store=\"variants\"\n :options=\"{\n product: route.params.product,\n }\"\n :skeleton=\"{\n structure: [\n { block: 'text', size: 'small' },\n { block: 'text', size: 'medium' },\n { block: 'text', size: 'small' }\n ]\n }\"\n :states=\"{\n empty: {\n title: 'No variants',\n description: 'Create your first variant'\n }\n }\"\n >\n <template #default=\"{ items }\">\n <li\n v-for=\"variant in items\"\n :key=\"variant._id\"\n class=\"bg-white radius-small pd-small flex-nowrap flex-v-center flex gap-thin mn-b-thin\"\n >\n <div class=\"aspect-1x1 h-3r flex-child-default radius-small o-hidden\">\n <img\n v-if=\"variant.images?.length > 0\"\n :src=\"(FILE_SERVER_URL || '') + variant.images[0]\"\n alt=\"Variant image\"\n class=\"w-100 h-100 object-fit-cover\"\n />\n <PlaceholderImage v-else class=\"w-100 h-100\" />\n </div>\n \n <div class=\"w-100\">\n <div class=\"flex-nowrap mn-b-nano flex-v-center flex\">\n <p class=\"p-regular t-medium d-block\">{{ variant.name || 'Unnamed variant' }}</p>\n <p v-if=\"variant.status\" class=\"t-small pd-thin mn-l-thin radius-thin bg-light\">{{ variant.status }}</p>\n </div>\n\n <p class=\"t-medium t-transp\">{{ returnCurrency() }}{{ variant.price }} per {{ variant.quantity }}{{ variant.unit }}</p>\n <p v-if=\"variant.ingredients?.length\" class=\"t-small t-transp\">{{ variant.ingredients.length }} ingredients</p>\n \n </div>\n \n <div class=\"flex gap-thin\">\n <Button\n :showSuccess=\"false\"\n :showLoader=\"true\"\n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-light cursor-pointer hover-scale-1\"\n :submit=\"() => copyVariant(variant)\"\n >\n <IconDuplicate class=\"i-medium\" />\n </Button>\n <Button\n :showSuccess=\"false\"\n :showLoader=\"false\"\n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-light cursor-pointer hover-scale-1\"\n :submit=\"() => openVariantPopup(variant)\"\n >\n <IconEdit class=\"i-medium\" />\n </Button>\n <Button\n :showSuccess=\"false\"\n :showLoader=\"true\"\n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red cursor-pointer hover-scale-1\"\n :submit=\"() => deleteVariant(variant)\"\n >\n <IconDelete class=\"i-medium\" />\n </Button>\n </div>\n </li>\n </template>\n </Feed>\n </Block>\n\n <Popup\n :title=\"editingVariant ? 'Edit Variant' : 'Create Variant'\"\n @close-popup=\"closeVariantPopup\"\n :isPopupOpen=\"isVariantPopupOpen\"\n align=\"center right\"\n class=\"bg-white h-min-100 w-max-50r pd-medium\"\n >\n <div class=\"cols-1 gap-thin o-y-scroll\">\n <!-- Status and Quantity at the top -->\n <div class=\"flex gap-thin\">\n <Select\n v-model:select=\"currentVariant.status\"\n label=\"Status\"\n placeholder=\"Select status\"\n :options=\"['published', 'draft', 'archived']\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n \n <Field \n v-model:field=\"currentVariant.quantity\" \n label=\"Quantity\"\n placeholder=\"Enter quantity\" \n class=\"w-100 bg-light radius-small pd-small\"\n type=\"number\"\n >\n <Select \n v-model:select=\"currentVariant.unit\" \n placeholder=\"Unit\"\n :options=\"['pcs', 'g', 'kg', 'ml', 'l', 'oz']\"\n class=\"pos-relative bg-white gap-small flex flex-column pd-thin radius-thin\"\n />\n </Field>\n </div>\n\n <!-- Price and Cost -->\n <div class=\"flex gap-thin\">\n <Field\n v-model:field=\"currentVariant.price\"\n label=\"Price\"\n type=\"number\"\n placeholder=\"Price\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n \n <Field\n v-model:field=\"currentVariant.cost\"\n label=\"Cost\"\n type=\"number\"\n placeholder=\"Cost\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n </div>\n \n <!-- Attributes Section -->\n <div class=\"t-medium mn-t-small mn-b-small\">Attributes</div>\n <div \n class=\"gap-micro flex-nowrap flex mn-b-small\" \n v-for=\"(attr, attrIndex) in currentVariant.attributes\" \n :key=\"attrIndex\"\n > \n <Field\n v-model:field=\"attr.name\"\n placeholder=\"Attribute Name\"\n class=\"w-100 bg-light radius-small pd-small\"\n /> \n <Field\n v-model:field=\"attr.value\"\n placeholder=\"Attribute Value\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n <div class=\"radius-small h-100 flex-center flex-child-default flex aspect-1x1 bg-red cursor-pointer hover-scale-1\">\n <IconDelete \n @click=\"() => currentVariant.attributes.splice(attrIndex, 1)\" \n class=\"i-medium\"\n />\n </div>\n </div>\n\n <Button\n class=\"bg-light w-100\"\n :showSuccess=\"false\"\n :showLoader=\"false\"\n @click=\"addAttribute\"\n >\n Add Attribute\n </Button>\n\n <!-- SKU and Name - auto-generated -->\n <Field\n v-model:field=\"currentVariant.sku\"\n label=\"SKU\"\n placeholder=\"SKU\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <Field\n v-model:field=\"currentVariant.name\"\n label=\"Name\"\n placeholder=\"Variant Name\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <Field\n v-model:field=\"currentVariant.description\"\n label=\"Description\"\n placeholder=\"Enter variant description\"\n class=\"w-100 bg-light radius-small pd-small\"\n style=\"resize: vertical\"\n type=\"textarea\"\n />\n\n <!-- Ingredients Section -->\n <div class=\"mn-t-medium\">\n <EditIngredients \n v-model:ingredients=\"currentVariant.ingredients\"\n />\n </div>\n\n <!-- Images Section -->\n <div class=\"t-medium mn-t-small mn-b-small\">Images</div>\n <EditImages\n :images=\"currentVariant.images || []\"\n :uploadPath=\"'variants'\"\n class=\"bg-light pd-small radius-small\"\n @update:images=\"(newImages) => { currentVariant.images = newImages }\"\n />\n \n <!-- Action Buttons -->\n <div class=\"flex gap-thin mn-t-medium\">\n <Button\n :showSuccess=\"false\"\n :showLoader=\"false\"\n class=\"bg-red t-white w-100\"\n :submit=\"closeVariantPopup\"\n >\n Cancel\n </Button>\n <Button\n class=\"bg-main w-100\"\n :submit=\"saveVariant\"\n >\n {{ editingVariant ? 'Update Variant' : 'Create Variant' }}\n </Button>\n </div>\n </div>\n </Popup>\n</template>\n\n<script setup>\nimport { ref, reactive, computed, watch } from 'vue';\nimport { useRoute } from 'vue-router';\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\nimport variants from '@martyrs/src/modules/products/store/variants.store.js';\nimport * as products from '@martyrs/src/modules/products/store/products.js';\n\n// Components\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Field from '@martyrs/src/components/Field/Field.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Popup from '@martyrs/src/components/Popup/Popup.vue';\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport Feed from '@martyrs/src/components/Feed/Feed.vue';\nimport EditImages from '@martyrs/src/components/EditImages/EditImages.vue';\nimport EditIngredients from '@martyrs/src/modules/products/components/sections/EditIngredients.vue';\n\n// Icons\nimport PlaceholderImage from '@martyrs/src/modules/icons/placeholders/PlaceholderImage.vue';\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue';\nimport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\nimport IconDuplicate from '@martyrs/src/modules/icons/actions/IconDuplicate.vue';\nimport { useGlobalMixins } from '@martyrs/src/modules/globals/views/mixins/mixins.js';\n\nconst route = useRoute();\nconst { returnCurrency } = useGlobalMixins();\n\nconst productId = computed(() => route.params.product);\n\nconst productOwner = computed(() => {\n return products?.state?.current?.owner;\n});\n\n// Локальное состояние\nconst isVariantPopupOpen = ref(false);\nconst editingVariant = ref(null);\nconst currentVariants = ref([]);\n\n// Функция генерации SKU\nfunction generateSKU() {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 5);\n return `VAR-${timestamp}-${random}`.toUpperCase();\n}\n\n// Функция генерации имени из атрибутов\nfunction generateNameFromAttributes() {\n if (currentVariant.attributes.length > 0) {\n const validAttributes = currentVariant.attributes\n .filter(attr => attr.name && attr.value)\n .map(attr => `${attr.value}`)\n .join(' ');\n \n if (validAttributes) {\n return validAttributes;\n }\n }\n \n // Если нет атрибутов, используем название продукта и количество\n const productName = products?.state?.current?.name || 'Product';\n return `${productName} ${currentVariant.quantity}${currentVariant.unit}`;\n}\n\n// Реактивный объект для текущего варианта\nconst currentVariant = reactive({\n name: '',\n description: '',\n sku: '',\n images: [],\n price: 0,\n cost: 0,\n quantity: 1,\n unit: 'pcs',\n status: 'published',\n ingredients: [],\n attributes: [],\n owner: null,\n creator: null,\n product: null\n});\n\n// Следим за изменениями атрибутов, количества и единиц для автогенерации имени\nwatch(\n () => [currentVariant.attributes, currentVariant.quantity, currentVariant.unit],\n () => {\n if (!editingVariant.value || !currentVariant.name) {\n currentVariant.name = generateNameFromAttributes();\n }\n },\n { deep: true }\n);\n\n// Функция открытия попапа варианта\nfunction openVariantPopup(variant = null) {\n editingVariant.value = variant;\n \n if (variant) {\n // Обновляем реактивный объект через Vue реактивность\n currentVariant.name = variant.name || '';\n currentVariant.description = variant.description || '';\n currentVariant.sku = variant.sku || '';\n currentVariant.images = [...(variant.images || [])];\n currentVariant.price = variant.price || 0;\n currentVariant.cost = variant.cost || 0;\n currentVariant.quantity = variant.quantity || 1;\n currentVariant.unit = variant.unit || 'pcs';\n currentVariant.status = variant.status || 'published';\n currentVariant.ingredients = [...(variant.ingredients || [])];\n currentVariant.attributes = (variant.attributes || []).map(attr => ({ ...attr }));\n currentVariant.owner = variant.owner;\n currentVariant.creator = variant.creator;\n currentVariant.product = variant.product;\n } else {\n // Для нового варианта генерируем SKU и устанавливаем только нужные поля\n currentVariant.sku = generateSKU();\n currentVariant.owner = {\n target: route.params._id || auth.state.user._id,\n type: route.params._id ? 'organization' : 'user'\n };\n currentVariant.creator = {\n target: auth.state.user._id,\n type: 'user',\n hidden: false\n };\n currentVariant.product = productId.value;\n \n // Генерируем имя после установки всех полей\n currentVariant.name = generateNameFromAttributes();\n }\n \n isVariantPopupOpen.value = true;\n}\n\nfunction closeVariantPopup() {\n isVariantPopupOpen.value = false;\n editingVariant.value = null;\n \n // Сбрасываем значения к дефолтным\n currentVariant.name = '';\n currentVariant.description = '';\n currentVariant.sku = '';\n currentVariant.images = [];\n currentVariant.price = 0;\n currentVariant.cost = 0;\n currentVariant.quantity = 1;\n currentVariant.unit = 'pcs';\n currentVariant.status = 'published';\n currentVariant.ingredients = [];\n currentVariant.attributes = [];\n currentVariant.owner = null;\n currentVariant.creator = null;\n currentVariant.product = null;\n}\n\nfunction addAttribute() {\n currentVariant.attributes.push({ name: '', value: '' });\n}\n\nasync function copyVariant(variant) {\n const variantCopy = {\n name: `${variant.name} (Copy)`,\n description: variant.description || '',\n sku: generateSKU(), // Генерируем новый SKU для копии\n images: [...(variant.images || [])],\n price: variant.price || 0,\n cost: variant.cost || 0,\n quantity: variant.quantity || 1,\n unit: variant.unit || 'pcs',\n status: variant.status || 'published',\n ingredients: (variant.ingredients || []).map(ing => ({ ...ing })),\n attributes: (variant.attributes || []).map(attr => ({ ...attr })),\n owner: {\n target: route.params._id || auth.state.user._id,\n type: route.params._id ? 'organization' : 'user'\n },\n creator: {\n target: auth.state.user._id,\n type: 'user',\n hidden: false\n },\n product: productId.value\n };\n \n try {\n const created = await variants.create(variantCopy);\n variants.addItem(created, currentVariants.value);\n } catch (error) {\n console.error('Error copying variant:', error);\n }\n}\n\nasync function deleteVariant(variant) {\n if (confirm('Are you sure you want to delete this variant?')) {\n try {\n console.log(variant)\n await variants.delete(variant);\n variants.removeItem(variant, currentVariants.value);\n } catch (error) {\n console.error('Error deleting variant:', error);\n }\n }\n}\n\nasync function saveVariant() {\n if (!currentVariant.name) {\n currentVariant.name = generateNameFromAttributes();\n }\n \n if (!currentVariant.sku) {\n currentVariant.sku = generateSKU();\n }\n\n const variantToSave = {\n name: currentVariant.name,\n description: currentVariant.description,\n sku: currentVariant.sku,\n images: [...currentVariant.images],\n price: parseFloat(currentVariant.price) || 0,\n cost: parseFloat(currentVariant.cost) || 0,\n quantity: parseInt(currentVariant.quantity) || 1,\n unit: currentVariant.unit || 'pcs',\n status: currentVariant.status,\n ingredients: currentVariant.ingredients.map(ing => ({ ...ing })),\n attributes: currentVariant.attributes.filter(attr => attr.name || attr.value),\n product: currentVariant.product\n };\n\n // Добавляем owner и creator только при создании нового варианта\n if (!editingVariant.value) {\n variantToSave.owner = {\n target: route.params._id || auth.state.user._id,\n type: route.params._id ? 'organization' : 'user'\n };\n variantToSave.creator = {\n target: auth.state.user._id,\n type: 'user',\n hidden: false\n };\n }\n\n try {\n if (editingVariant.value) {\n // Обновление существующего варианта\n variantToSave._id = editingVariant.value._id;\n const updated = await variants.update(variantToSave);\n variants.updateItem(updated, currentVariants.value);\n } else {\n // Создание нового варианта\n const created = await variants.create(variantToSave);\n variants.addItem(created, currentVariants.value);\n }\n \n closeVariantPopup();\n } catch (error) {\n console.error('Error saving variant:', error);\n throw error;\n }\n}\n</script>"],"names":["useRoute","useGlobalMixins","computed","products?.state","ref","reactive","watch","auth.state","variants"],"mappings":"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"}
@@ -20,7 +20,7 @@ const _hoisted_1 = { class: "aspect-1x1 h-3r flex-child-default radius-small o-h
20
20
  const _hoisted_2 = ["src"];
21
21
  const _hoisted_3 = { class: "w-100" };
22
22
  const _hoisted_4 = { class: "flex-nowrap mn-b-nano flex-v-center flex" };
23
- const _hoisted_5 = { class: "p-medium t-medium d-block" };
23
+ const _hoisted_5 = { class: "p-regular t-medium d-block" };
24
24
  const _hoisted_6 = {
25
25
  key: 0,
26
26
  class: "t-small pd-thin mn-l-thin radius-thin bg-light"
@@ -298,7 +298,7 @@ const _sfc_main = {
298
298
  submit: () => copyVariant(variant)
299
299
  }, {
300
300
  default: withCtx(() => [
301
- createVNode(_sfc_main$4, { class: "i-regular" })
301
+ createVNode(_sfc_main$4, { class: "i-medium" })
302
302
  ]),
303
303
  _: 2
304
304
  }, 1032, ["submit"]),
@@ -309,7 +309,7 @@ const _sfc_main = {
309
309
  submit: () => openVariantPopup(variant)
310
310
  }, {
311
311
  default: withCtx(() => [
312
- createVNode(_sfc_main$5, { class: "i-regular" })
312
+ createVNode(_sfc_main$5, { class: "i-medium" })
313
313
  ]),
314
314
  _: 2
315
315
  }, 1032, ["submit"]),
@@ -320,7 +320,7 @@ const _sfc_main = {
320
320
  submit: () => deleteVariant(variant)
321
321
  }, {
322
322
  default: withCtx(() => [
323
- createVNode(_sfc_main$6, { class: "i-regular" })
323
+ createVNode(_sfc_main$6, { class: "i-medium" })
324
324
  ]),
325
325
  _: 2
326
326
  }, 1032, ["submit"])
@@ -410,7 +410,7 @@ const _sfc_main = {
410
410
  createElementVNode("div", _hoisted_13, [
411
411
  createVNode(_sfc_main$6, {
412
412
  onClick: () => currentVariant.attributes.splice(attrIndex, 1),
413
- class: "i-regular"
413
+ class: "i-medium"
414
414
  }, null, 8, ["onClick"])
415
415
  ])
416
416
  ]);
@@ -1 +1 @@
1
- {"version":3,"file":"EditVariants.vue.js","sources":["../../../../../../../src/modules/products/components/sections/EditVariants.vue"],"sourcesContent":["<template>\n <Block\n title=\"Variants\"\n placeholder=\"No variants added yet. At least one variant is required.\"\n :actions=\"[{\n label: '+',\n function: () => openVariantPopup()\n }]\"\n >\n <!-- is {{currentVariants}} -->\n <Feed\n v-model:items=\"currentVariants\"\n :store=\"variants\"\n :options=\"{\n product: route.params.product,\n }\"\n :skeleton=\"{\n structure: [\n { block: 'text', size: 'small' },\n { block: 'text', size: 'medium' },\n { block: 'text', size: 'small' }\n ]\n }\"\n :states=\"{\n empty: {\n title: 'No variants',\n description: 'Create your first variant'\n }\n }\"\n >\n <template #default=\"{ items }\">\n <li\n v-for=\"variant in items\"\n :key=\"variant._id\"\n class=\"bg-white radius-small pd-small flex-nowrap flex-v-center flex gap-thin mn-b-thin\"\n >\n <div class=\"aspect-1x1 h-3r flex-child-default radius-small o-hidden\">\n <img\n v-if=\"variant.images?.length > 0\"\n :src=\"(FILE_SERVER_URL || '') + variant.images[0]\"\n alt=\"Variant image\"\n class=\"w-100 h-100 object-fit-cover\"\n />\n <PlaceholderImage v-else class=\"w-100 h-100\" />\n </div>\n \n <div class=\"w-100\">\n <div class=\"flex-nowrap mn-b-nano flex-v-center flex\">\n <p class=\"p-medium t-medium d-block\">{{ variant.name || 'Unnamed variant' }}</p>\n <p v-if=\"variant.status\" class=\"t-small pd-thin mn-l-thin radius-thin bg-light\">{{ variant.status }}</p>\n </div>\n\n <p class=\"t-medium t-transp\">{{ returnCurrency() }}{{ variant.price }} per {{ variant.quantity }}{{ variant.unit }}</p>\n <p v-if=\"variant.ingredients?.length\" class=\"t-small t-transp\">{{ variant.ingredients.length }} ingredients</p>\n \n </div>\n \n <div class=\"flex gap-thin\">\n <Button\n :showSuccess=\"false\"\n :showLoader=\"true\"\n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-light cursor-pointer hover-scale-1\"\n :submit=\"() => copyVariant(variant)\"\n >\n <IconDuplicate class=\"i-regular\" />\n </Button>\n <Button\n :showSuccess=\"false\"\n :showLoader=\"false\"\n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-light cursor-pointer hover-scale-1\"\n :submit=\"() => openVariantPopup(variant)\"\n >\n <IconEdit class=\"i-regular\" />\n </Button>\n <Button\n :showSuccess=\"false\"\n :showLoader=\"true\"\n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red cursor-pointer hover-scale-1\"\n :submit=\"() => deleteVariant(variant)\"\n >\n <IconDelete class=\"i-regular\" />\n </Button>\n </div>\n </li>\n </template>\n </Feed>\n </Block>\n\n <Popup\n :title=\"editingVariant ? 'Edit Variant' : 'Create Variant'\"\n @close-popup=\"closeVariantPopup\"\n :isPopupOpen=\"isVariantPopupOpen\"\n align=\"center right\"\n class=\"bg-white h-min-100 w-max-50r pd-medium\"\n >\n <div class=\"cols-1 gap-thin o-y-scroll\">\n <!-- Status and Quantity at the top -->\n <div class=\"flex gap-thin\">\n <Select\n v-model:select=\"currentVariant.status\"\n label=\"Status\"\n placeholder=\"Select status\"\n :options=\"['published', 'draft', 'archived']\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n \n <Field \n v-model:field=\"currentVariant.quantity\" \n label=\"Quantity\"\n placeholder=\"Enter quantity\" \n class=\"w-100 bg-light radius-small pd-small\"\n type=\"number\"\n >\n <Select \n v-model:select=\"currentVariant.unit\" \n placeholder=\"Unit\"\n :options=\"['pcs', 'g', 'kg', 'ml', 'l', 'oz']\"\n class=\"pos-relative bg-white gap-small flex flex-column pd-thin radius-thin\"\n />\n </Field>\n </div>\n\n <!-- Price and Cost -->\n <div class=\"flex gap-thin\">\n <Field\n v-model:field=\"currentVariant.price\"\n label=\"Price\"\n type=\"number\"\n placeholder=\"Price\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n \n <Field\n v-model:field=\"currentVariant.cost\"\n label=\"Cost\"\n type=\"number\"\n placeholder=\"Cost\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n </div>\n \n <!-- Attributes Section -->\n <div class=\"t-medium mn-t-small mn-b-small\">Attributes</div>\n <div \n class=\"gap-micro flex-nowrap flex mn-b-small\" \n v-for=\"(attr, attrIndex) in currentVariant.attributes\" \n :key=\"attrIndex\"\n > \n <Field\n v-model:field=\"attr.name\"\n placeholder=\"Attribute Name\"\n class=\"w-100 bg-light radius-small pd-small\"\n /> \n <Field\n v-model:field=\"attr.value\"\n placeholder=\"Attribute Value\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n <div class=\"radius-small h-100 flex-center flex-child-default flex aspect-1x1 bg-red cursor-pointer hover-scale-1\">\n <IconDelete \n @click=\"() => currentVariant.attributes.splice(attrIndex, 1)\" \n class=\"i-regular\"\n />\n </div>\n </div>\n\n <Button\n class=\"bg-light w-100\"\n :showSuccess=\"false\"\n :showLoader=\"false\"\n @click=\"addAttribute\"\n >\n Add Attribute\n </Button>\n\n <!-- SKU and Name - auto-generated -->\n <Field\n v-model:field=\"currentVariant.sku\"\n label=\"SKU\"\n placeholder=\"SKU\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <Field\n v-model:field=\"currentVariant.name\"\n label=\"Name\"\n placeholder=\"Variant Name\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <Field\n v-model:field=\"currentVariant.description\"\n label=\"Description\"\n placeholder=\"Enter variant description\"\n class=\"w-100 bg-light radius-small pd-small\"\n style=\"resize: vertical\"\n type=\"textarea\"\n />\n\n <!-- Ingredients Section -->\n <div class=\"mn-t-medium\">\n <EditIngredients \n v-model:ingredients=\"currentVariant.ingredients\"\n />\n </div>\n\n <!-- Images Section -->\n <div class=\"t-medium mn-t-small mn-b-small\">Images</div>\n <EditImages\n :images=\"currentVariant.images || []\"\n :uploadPath=\"'variants'\"\n class=\"bg-light pd-small radius-small\"\n @update:images=\"(newImages) => { currentVariant.images = newImages }\"\n />\n \n <!-- Action Buttons -->\n <div class=\"flex gap-thin mn-t-medium\">\n <Button\n :showSuccess=\"false\"\n :showLoader=\"false\"\n class=\"bg-red t-white w-100\"\n :submit=\"closeVariantPopup\"\n >\n Cancel\n </Button>\n <Button\n class=\"bg-main w-100\"\n :submit=\"saveVariant\"\n >\n {{ editingVariant ? 'Update Variant' : 'Create Variant' }}\n </Button>\n </div>\n </div>\n </Popup>\n</template>\n\n<script setup>\nimport { ref, reactive, computed, watch } from 'vue';\nimport { useRoute } from 'vue-router';\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\nimport variants from '@martyrs/src/modules/products/store/variants.store.js';\nimport * as products from '@martyrs/src/modules/products/store/products.js';\n\n// Components\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Field from '@martyrs/src/components/Field/Field.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Popup from '@martyrs/src/components/Popup/Popup.vue';\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport Feed from '@martyrs/src/components/Feed/Feed.vue';\nimport EditImages from '@martyrs/src/components/EditImages/EditImages.vue';\nimport EditIngredients from '@martyrs/src/modules/products/components/sections/EditIngredients.vue';\n\n// Icons\nimport PlaceholderImage from '@martyrs/src/modules/icons/placeholders/PlaceholderImage.vue';\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue';\nimport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\nimport IconDuplicate from '@martyrs/src/modules/icons/actions/IconDuplicate.vue';\nimport { useGlobalMixins } from '@martyrs/src/modules/globals/views/mixins/mixins.js';\n\nconst route = useRoute();\nconst { returnCurrency } = useGlobalMixins();\n\nconst productId = computed(() => route.params.product);\n\nconst productOwner = computed(() => {\n return products?.state?.current?.owner;\n});\n\n// Локальное состояние\nconst isVariantPopupOpen = ref(false);\nconst editingVariant = ref(null);\nconst currentVariants = ref([]);\n\n// Функция генерации SKU\nfunction generateSKU() {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 5);\n return `VAR-${timestamp}-${random}`.toUpperCase();\n}\n\n// Функция генерации имени из атрибутов\nfunction generateNameFromAttributes() {\n if (currentVariant.attributes.length > 0) {\n const validAttributes = currentVariant.attributes\n .filter(attr => attr.name && attr.value)\n .map(attr => `${attr.value}`)\n .join(' ');\n \n if (validAttributes) {\n return validAttributes;\n }\n }\n \n // Если нет атрибутов, используем название продукта и количество\n const productName = products?.state?.current?.name || 'Product';\n return `${productName} ${currentVariant.quantity}${currentVariant.unit}`;\n}\n\n// Реактивный объект для текущего варианта\nconst currentVariant = reactive({\n name: '',\n description: '',\n sku: '',\n images: [],\n price: 0,\n cost: 0,\n quantity: 1,\n unit: 'pcs',\n status: 'published',\n ingredients: [],\n attributes: [],\n owner: null,\n creator: null,\n product: null\n});\n\n// Следим за изменениями атрибутов, количества и единиц для автогенерации имени\nwatch(\n () => [currentVariant.attributes, currentVariant.quantity, currentVariant.unit],\n () => {\n if (!editingVariant.value || !currentVariant.name) {\n currentVariant.name = generateNameFromAttributes();\n }\n },\n { deep: true }\n);\n\n// Функция открытия попапа варианта\nfunction openVariantPopup(variant = null) {\n editingVariant.value = variant;\n \n if (variant) {\n // Обновляем реактивный объект через Vue реактивность\n currentVariant.name = variant.name || '';\n currentVariant.description = variant.description || '';\n currentVariant.sku = variant.sku || '';\n currentVariant.images = [...(variant.images || [])];\n currentVariant.price = variant.price || 0;\n currentVariant.cost = variant.cost || 0;\n currentVariant.quantity = variant.quantity || 1;\n currentVariant.unit = variant.unit || 'pcs';\n currentVariant.status = variant.status || 'published';\n currentVariant.ingredients = [...(variant.ingredients || [])];\n currentVariant.attributes = (variant.attributes || []).map(attr => ({ ...attr }));\n currentVariant.owner = variant.owner;\n currentVariant.creator = variant.creator;\n currentVariant.product = variant.product;\n } else {\n // Для нового варианта генерируем SKU и устанавливаем только нужные поля\n currentVariant.sku = generateSKU();\n currentVariant.owner = {\n target: route.params._id || auth.state.user._id,\n type: route.params._id ? 'organization' : 'user'\n };\n currentVariant.creator = {\n target: auth.state.user._id,\n type: 'user',\n hidden: false\n };\n currentVariant.product = productId.value;\n \n // Генерируем имя после установки всех полей\n currentVariant.name = generateNameFromAttributes();\n }\n \n isVariantPopupOpen.value = true;\n}\n\nfunction closeVariantPopup() {\n isVariantPopupOpen.value = false;\n editingVariant.value = null;\n \n // Сбрасываем значения к дефолтным\n currentVariant.name = '';\n currentVariant.description = '';\n currentVariant.sku = '';\n currentVariant.images = [];\n currentVariant.price = 0;\n currentVariant.cost = 0;\n currentVariant.quantity = 1;\n currentVariant.unit = 'pcs';\n currentVariant.status = 'published';\n currentVariant.ingredients = [];\n currentVariant.attributes = [];\n currentVariant.owner = null;\n currentVariant.creator = null;\n currentVariant.product = null;\n}\n\nfunction addAttribute() {\n currentVariant.attributes.push({ name: '', value: '' });\n}\n\nasync function copyVariant(variant) {\n const variantCopy = {\n name: `${variant.name} (Copy)`,\n description: variant.description || '',\n sku: generateSKU(), // Генерируем новый SKU для копии\n images: [...(variant.images || [])],\n price: variant.price || 0,\n cost: variant.cost || 0,\n quantity: variant.quantity || 1,\n unit: variant.unit || 'pcs',\n status: variant.status || 'published',\n ingredients: (variant.ingredients || []).map(ing => ({ ...ing })),\n attributes: (variant.attributes || []).map(attr => ({ ...attr })),\n owner: {\n target: route.params._id || auth.state.user._id,\n type: route.params._id ? 'organization' : 'user'\n },\n creator: {\n target: auth.state.user._id,\n type: 'user',\n hidden: false\n },\n product: productId.value\n };\n \n try {\n const created = await variants.create(variantCopy);\n variants.addItem(created, currentVariants.value);\n } catch (error) {\n console.error('Error copying variant:', error);\n }\n}\n\nasync function deleteVariant(variant) {\n if (confirm('Are you sure you want to delete this variant?')) {\n try {\n console.log(variant)\n await variants.delete(variant);\n variants.removeItem(variant, currentVariants.value);\n } catch (error) {\n console.error('Error deleting variant:', error);\n }\n }\n}\n\nasync function saveVariant() {\n if (!currentVariant.name) {\n currentVariant.name = generateNameFromAttributes();\n }\n \n if (!currentVariant.sku) {\n currentVariant.sku = generateSKU();\n }\n\n const variantToSave = {\n name: currentVariant.name,\n description: currentVariant.description,\n sku: currentVariant.sku,\n images: [...currentVariant.images],\n price: parseFloat(currentVariant.price) || 0,\n cost: parseFloat(currentVariant.cost) || 0,\n quantity: parseInt(currentVariant.quantity) || 1,\n unit: currentVariant.unit || 'pcs',\n status: currentVariant.status,\n ingredients: currentVariant.ingredients.map(ing => ({ ...ing })),\n attributes: currentVariant.attributes.filter(attr => attr.name || attr.value),\n product: currentVariant.product\n };\n\n // Добавляем owner и creator только при создании нового варианта\n if (!editingVariant.value) {\n variantToSave.owner = {\n target: route.params._id || auth.state.user._id,\n type: route.params._id ? 'organization' : 'user'\n };\n variantToSave.creator = {\n target: auth.state.user._id,\n type: 'user',\n hidden: false\n };\n }\n\n try {\n if (editingVariant.value) {\n // Обновление существующего варианта\n variantToSave._id = editingVariant.value._id;\n const updated = await variants.update(variantToSave);\n variants.updateItem(updated, currentVariants.value);\n } else {\n // Создание нового варианта\n const created = await variants.create(variantToSave);\n variants.addItem(created, currentVariants.value);\n }\n \n closeVariantPopup();\n } catch (error) {\n console.error('Error saving variant:', error);\n throw error;\n }\n}\n</script>"],"names":["products?.state","auth.state","variants"],"mappings":"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"}
1
+ {"version":3,"file":"EditVariants.vue.js","sources":["../../../../../../../src/modules/products/components/sections/EditVariants.vue"],"sourcesContent":["<template>\n <Block\n title=\"Variants\"\n placeholder=\"No variants added yet. At least one variant is required.\"\n :actions=\"[{\n label: '+',\n function: () => openVariantPopup()\n }]\"\n >\n <!-- is {{currentVariants}} -->\n <Feed\n v-model:items=\"currentVariants\"\n :store=\"variants\"\n :options=\"{\n product: route.params.product,\n }\"\n :skeleton=\"{\n structure: [\n { block: 'text', size: 'small' },\n { block: 'text', size: 'medium' },\n { block: 'text', size: 'small' }\n ]\n }\"\n :states=\"{\n empty: {\n title: 'No variants',\n description: 'Create your first variant'\n }\n }\"\n >\n <template #default=\"{ items }\">\n <li\n v-for=\"variant in items\"\n :key=\"variant._id\"\n class=\"bg-white radius-small pd-small flex-nowrap flex-v-center flex gap-thin mn-b-thin\"\n >\n <div class=\"aspect-1x1 h-3r flex-child-default radius-small o-hidden\">\n <img\n v-if=\"variant.images?.length > 0\"\n :src=\"(FILE_SERVER_URL || '') + variant.images[0]\"\n alt=\"Variant image\"\n class=\"w-100 h-100 object-fit-cover\"\n />\n <PlaceholderImage v-else class=\"w-100 h-100\" />\n </div>\n \n <div class=\"w-100\">\n <div class=\"flex-nowrap mn-b-nano flex-v-center flex\">\n <p class=\"p-regular t-medium d-block\">{{ variant.name || 'Unnamed variant' }}</p>\n <p v-if=\"variant.status\" class=\"t-small pd-thin mn-l-thin radius-thin bg-light\">{{ variant.status }}</p>\n </div>\n\n <p class=\"t-medium t-transp\">{{ returnCurrency() }}{{ variant.price }} per {{ variant.quantity }}{{ variant.unit }}</p>\n <p v-if=\"variant.ingredients?.length\" class=\"t-small t-transp\">{{ variant.ingredients.length }} ingredients</p>\n \n </div>\n \n <div class=\"flex gap-thin\">\n <Button\n :showSuccess=\"false\"\n :showLoader=\"true\"\n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-light cursor-pointer hover-scale-1\"\n :submit=\"() => copyVariant(variant)\"\n >\n <IconDuplicate class=\"i-medium\" />\n </Button>\n <Button\n :showSuccess=\"false\"\n :showLoader=\"false\"\n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-light cursor-pointer hover-scale-1\"\n :submit=\"() => openVariantPopup(variant)\"\n >\n <IconEdit class=\"i-medium\" />\n </Button>\n <Button\n :showSuccess=\"false\"\n :showLoader=\"true\"\n class=\"radius-small pd-small flex-center flex aspect-1x1 bg-red cursor-pointer hover-scale-1\"\n :submit=\"() => deleteVariant(variant)\"\n >\n <IconDelete class=\"i-medium\" />\n </Button>\n </div>\n </li>\n </template>\n </Feed>\n </Block>\n\n <Popup\n :title=\"editingVariant ? 'Edit Variant' : 'Create Variant'\"\n @close-popup=\"closeVariantPopup\"\n :isPopupOpen=\"isVariantPopupOpen\"\n align=\"center right\"\n class=\"bg-white h-min-100 w-max-50r pd-medium\"\n >\n <div class=\"cols-1 gap-thin o-y-scroll\">\n <!-- Status and Quantity at the top -->\n <div class=\"flex gap-thin\">\n <Select\n v-model:select=\"currentVariant.status\"\n label=\"Status\"\n placeholder=\"Select status\"\n :options=\"['published', 'draft', 'archived']\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n \n <Field \n v-model:field=\"currentVariant.quantity\" \n label=\"Quantity\"\n placeholder=\"Enter quantity\" \n class=\"w-100 bg-light radius-small pd-small\"\n type=\"number\"\n >\n <Select \n v-model:select=\"currentVariant.unit\" \n placeholder=\"Unit\"\n :options=\"['pcs', 'g', 'kg', 'ml', 'l', 'oz']\"\n class=\"pos-relative bg-white gap-small flex flex-column pd-thin radius-thin\"\n />\n </Field>\n </div>\n\n <!-- Price and Cost -->\n <div class=\"flex gap-thin\">\n <Field\n v-model:field=\"currentVariant.price\"\n label=\"Price\"\n type=\"number\"\n placeholder=\"Price\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n \n <Field\n v-model:field=\"currentVariant.cost\"\n label=\"Cost\"\n type=\"number\"\n placeholder=\"Cost\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n </div>\n \n <!-- Attributes Section -->\n <div class=\"t-medium mn-t-small mn-b-small\">Attributes</div>\n <div \n class=\"gap-micro flex-nowrap flex mn-b-small\" \n v-for=\"(attr, attrIndex) in currentVariant.attributes\" \n :key=\"attrIndex\"\n > \n <Field\n v-model:field=\"attr.name\"\n placeholder=\"Attribute Name\"\n class=\"w-100 bg-light radius-small pd-small\"\n /> \n <Field\n v-model:field=\"attr.value\"\n placeholder=\"Attribute Value\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n <div class=\"radius-small h-100 flex-center flex-child-default flex aspect-1x1 bg-red cursor-pointer hover-scale-1\">\n <IconDelete \n @click=\"() => currentVariant.attributes.splice(attrIndex, 1)\" \n class=\"i-medium\"\n />\n </div>\n </div>\n\n <Button\n class=\"bg-light w-100\"\n :showSuccess=\"false\"\n :showLoader=\"false\"\n @click=\"addAttribute\"\n >\n Add Attribute\n </Button>\n\n <!-- SKU and Name - auto-generated -->\n <Field\n v-model:field=\"currentVariant.sku\"\n label=\"SKU\"\n placeholder=\"SKU\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <Field\n v-model:field=\"currentVariant.name\"\n label=\"Name\"\n placeholder=\"Variant Name\"\n class=\"w-100 bg-light radius-small pd-small\"\n />\n\n <Field\n v-model:field=\"currentVariant.description\"\n label=\"Description\"\n placeholder=\"Enter variant description\"\n class=\"w-100 bg-light radius-small pd-small\"\n style=\"resize: vertical\"\n type=\"textarea\"\n />\n\n <!-- Ingredients Section -->\n <div class=\"mn-t-medium\">\n <EditIngredients \n v-model:ingredients=\"currentVariant.ingredients\"\n />\n </div>\n\n <!-- Images Section -->\n <div class=\"t-medium mn-t-small mn-b-small\">Images</div>\n <EditImages\n :images=\"currentVariant.images || []\"\n :uploadPath=\"'variants'\"\n class=\"bg-light pd-small radius-small\"\n @update:images=\"(newImages) => { currentVariant.images = newImages }\"\n />\n \n <!-- Action Buttons -->\n <div class=\"flex gap-thin mn-t-medium\">\n <Button\n :showSuccess=\"false\"\n :showLoader=\"false\"\n class=\"bg-red t-white w-100\"\n :submit=\"closeVariantPopup\"\n >\n Cancel\n </Button>\n <Button\n class=\"bg-main w-100\"\n :submit=\"saveVariant\"\n >\n {{ editingVariant ? 'Update Variant' : 'Create Variant' }}\n </Button>\n </div>\n </div>\n </Popup>\n</template>\n\n<script setup>\nimport { ref, reactive, computed, watch } from 'vue';\nimport { useRoute } from 'vue-router';\n\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\nimport variants from '@martyrs/src/modules/products/store/variants.store.js';\nimport * as products from '@martyrs/src/modules/products/store/products.js';\n\n// Components\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Field from '@martyrs/src/components/Field/Field.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Popup from '@martyrs/src/components/Popup/Popup.vue';\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport Feed from '@martyrs/src/components/Feed/Feed.vue';\nimport EditImages from '@martyrs/src/components/EditImages/EditImages.vue';\nimport EditIngredients from '@martyrs/src/modules/products/components/sections/EditIngredients.vue';\n\n// Icons\nimport PlaceholderImage from '@martyrs/src/modules/icons/placeholders/PlaceholderImage.vue';\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue';\nimport IconDelete from '@martyrs/src/modules/icons/navigation/IconDelete.vue';\nimport IconDuplicate from '@martyrs/src/modules/icons/actions/IconDuplicate.vue';\nimport { useGlobalMixins } from '@martyrs/src/modules/globals/views/mixins/mixins.js';\n\nconst route = useRoute();\nconst { returnCurrency } = useGlobalMixins();\n\nconst productId = computed(() => route.params.product);\n\nconst productOwner = computed(() => {\n return products?.state?.current?.owner;\n});\n\n// Локальное состояние\nconst isVariantPopupOpen = ref(false);\nconst editingVariant = ref(null);\nconst currentVariants = ref([]);\n\n// Функция генерации SKU\nfunction generateSKU() {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 5);\n return `VAR-${timestamp}-${random}`.toUpperCase();\n}\n\n// Функция генерации имени из атрибутов\nfunction generateNameFromAttributes() {\n if (currentVariant.attributes.length > 0) {\n const validAttributes = currentVariant.attributes\n .filter(attr => attr.name && attr.value)\n .map(attr => `${attr.value}`)\n .join(' ');\n \n if (validAttributes) {\n return validAttributes;\n }\n }\n \n // Если нет атрибутов, используем название продукта и количество\n const productName = products?.state?.current?.name || 'Product';\n return `${productName} ${currentVariant.quantity}${currentVariant.unit}`;\n}\n\n// Реактивный объект для текущего варианта\nconst currentVariant = reactive({\n name: '',\n description: '',\n sku: '',\n images: [],\n price: 0,\n cost: 0,\n quantity: 1,\n unit: 'pcs',\n status: 'published',\n ingredients: [],\n attributes: [],\n owner: null,\n creator: null,\n product: null\n});\n\n// Следим за изменениями атрибутов, количества и единиц для автогенерации имени\nwatch(\n () => [currentVariant.attributes, currentVariant.quantity, currentVariant.unit],\n () => {\n if (!editingVariant.value || !currentVariant.name) {\n currentVariant.name = generateNameFromAttributes();\n }\n },\n { deep: true }\n);\n\n// Функция открытия попапа варианта\nfunction openVariantPopup(variant = null) {\n editingVariant.value = variant;\n \n if (variant) {\n // Обновляем реактивный объект через Vue реактивность\n currentVariant.name = variant.name || '';\n currentVariant.description = variant.description || '';\n currentVariant.sku = variant.sku || '';\n currentVariant.images = [...(variant.images || [])];\n currentVariant.price = variant.price || 0;\n currentVariant.cost = variant.cost || 0;\n currentVariant.quantity = variant.quantity || 1;\n currentVariant.unit = variant.unit || 'pcs';\n currentVariant.status = variant.status || 'published';\n currentVariant.ingredients = [...(variant.ingredients || [])];\n currentVariant.attributes = (variant.attributes || []).map(attr => ({ ...attr }));\n currentVariant.owner = variant.owner;\n currentVariant.creator = variant.creator;\n currentVariant.product = variant.product;\n } else {\n // Для нового варианта генерируем SKU и устанавливаем только нужные поля\n currentVariant.sku = generateSKU();\n currentVariant.owner = {\n target: route.params._id || auth.state.user._id,\n type: route.params._id ? 'organization' : 'user'\n };\n currentVariant.creator = {\n target: auth.state.user._id,\n type: 'user',\n hidden: false\n };\n currentVariant.product = productId.value;\n \n // Генерируем имя после установки всех полей\n currentVariant.name = generateNameFromAttributes();\n }\n \n isVariantPopupOpen.value = true;\n}\n\nfunction closeVariantPopup() {\n isVariantPopupOpen.value = false;\n editingVariant.value = null;\n \n // Сбрасываем значения к дефолтным\n currentVariant.name = '';\n currentVariant.description = '';\n currentVariant.sku = '';\n currentVariant.images = [];\n currentVariant.price = 0;\n currentVariant.cost = 0;\n currentVariant.quantity = 1;\n currentVariant.unit = 'pcs';\n currentVariant.status = 'published';\n currentVariant.ingredients = [];\n currentVariant.attributes = [];\n currentVariant.owner = null;\n currentVariant.creator = null;\n currentVariant.product = null;\n}\n\nfunction addAttribute() {\n currentVariant.attributes.push({ name: '', value: '' });\n}\n\nasync function copyVariant(variant) {\n const variantCopy = {\n name: `${variant.name} (Copy)`,\n description: variant.description || '',\n sku: generateSKU(), // Генерируем новый SKU для копии\n images: [...(variant.images || [])],\n price: variant.price || 0,\n cost: variant.cost || 0,\n quantity: variant.quantity || 1,\n unit: variant.unit || 'pcs',\n status: variant.status || 'published',\n ingredients: (variant.ingredients || []).map(ing => ({ ...ing })),\n attributes: (variant.attributes || []).map(attr => ({ ...attr })),\n owner: {\n target: route.params._id || auth.state.user._id,\n type: route.params._id ? 'organization' : 'user'\n },\n creator: {\n target: auth.state.user._id,\n type: 'user',\n hidden: false\n },\n product: productId.value\n };\n \n try {\n const created = await variants.create(variantCopy);\n variants.addItem(created, currentVariants.value);\n } catch (error) {\n console.error('Error copying variant:', error);\n }\n}\n\nasync function deleteVariant(variant) {\n if (confirm('Are you sure you want to delete this variant?')) {\n try {\n console.log(variant)\n await variants.delete(variant);\n variants.removeItem(variant, currentVariants.value);\n } catch (error) {\n console.error('Error deleting variant:', error);\n }\n }\n}\n\nasync function saveVariant() {\n if (!currentVariant.name) {\n currentVariant.name = generateNameFromAttributes();\n }\n \n if (!currentVariant.sku) {\n currentVariant.sku = generateSKU();\n }\n\n const variantToSave = {\n name: currentVariant.name,\n description: currentVariant.description,\n sku: currentVariant.sku,\n images: [...currentVariant.images],\n price: parseFloat(currentVariant.price) || 0,\n cost: parseFloat(currentVariant.cost) || 0,\n quantity: parseInt(currentVariant.quantity) || 1,\n unit: currentVariant.unit || 'pcs',\n status: currentVariant.status,\n ingredients: currentVariant.ingredients.map(ing => ({ ...ing })),\n attributes: currentVariant.attributes.filter(attr => attr.name || attr.value),\n product: currentVariant.product\n };\n\n // Добавляем owner и creator только при создании нового варианта\n if (!editingVariant.value) {\n variantToSave.owner = {\n target: route.params._id || auth.state.user._id,\n type: route.params._id ? 'organization' : 'user'\n };\n variantToSave.creator = {\n target: auth.state.user._id,\n type: 'user',\n hidden: false\n };\n }\n\n try {\n if (editingVariant.value) {\n // Обновление существующего варианта\n variantToSave._id = editingVariant.value._id;\n const updated = await variants.update(variantToSave);\n variants.updateItem(updated, currentVariants.value);\n } else {\n // Создание нового варианта\n const created = await variants.create(variantToSave);\n variants.addItem(created, currentVariants.value);\n }\n \n closeVariantPopup();\n } catch (error) {\n console.error('Error saving variant:', error);\n throw error;\n }\n}\n</script>"],"names":["products?.state","auth.state","variants"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
- const Spoiler = require("../../../../components/Spoiler/Spoiler.vue.cjs");
4
+ const Spoiler = require("../../../../components/Spoiler/Spoiler.vue2.cjs");
5
5
  const Checkbox = require("../../../../components/Checkbox/Checkbox.vue.cjs");
6
6
  const vueI18n = require("vue-i18n");
7
7
  const vueRouter = require("vue-router");
@@ -9,8 +9,8 @@ const categories = require("../../store/categories.cjs");
9
9
  const marketplace = require("../../../marketplace/views/store/marketplace.cjs");
10
10
  ;/* empty css */
11
11
  const _hoisted_1 = { class: "pd-medium bg-light radius-medium" };
12
- const _hoisted_2 = { class: "cursor-pointer mn-r-auto t-medium p-semi" };
13
- const _hoisted_3 = { class: "cursor-pointer mn-r-auto t-medium p-semi" };
12
+ const _hoisted_2 = { class: "cursor-pointer mn-r-auto t-medium p-medium" };
13
+ const _hoisted_3 = { class: "cursor-pointer mn-r-auto t-medium p-medium" };
14
14
  const _sfc_main = {
15
15
  __name: "FilterProducts",
16
16
  props: {
@@ -166,7 +166,7 @@ const _sfc_main = {
166
166
  status: false
167
167
  }, {
168
168
  header: vue.withCtx(() => _cache[3] || (_cache[3] = [
169
- vue.createElementVNode("p", { class: "cursor-pointer mn-r-auto t-medium p-semi" }, "Delivery", -1)
169
+ vue.createElementVNode("p", { class: "cursor-pointer mn-r-auto t-medium p-medium" }, "Delivery", -1)
170
170
  ])),
171
171
  content: vue.withCtx(() => [
172
172
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.deliveryOptions, (deliveryOption, index) => {
@@ -1 +1 @@
1
- {"version":3,"file":"FilterProducts.vue.cjs","sources":["../../../../../../../src/modules/products/components/sections/FilterProducts.vue"],"sourcesContent":[" <template>\n <div class=\"pd-medium bg-light radius-medium\">\n <!-- Categories Filter -->\n <Spoiler \n class=\"radius-small o-hidden mn-b-small\"\n :status=\"true\"\n >\n <template #header>\n <p class=\"cursor-pointer mn-r-auto t-medium p-semi\">{{ t('categoriesTitle') }}</p>\n <!-- SVG Icon -->\n </template>\n <template #content>\n <Checkbox \n v-for=\"(category, index) in categories.state.all\"\n :key=\"index\"\n :label=\"category.name\"\n :value=\"category.url\"\n class=\"w-100 mn-t-small mn-b-small bg-white radius-small pd-small\"\n :radio=\"marketplace.state.filter.categories\"\n @update:radio=\"event => marketplace.state.filter.categories = event\"\n />\n </template>\n </Spoiler>\n\n <hr class=\"mn-b-small t-transp\">\n\n <!-- Prices Filter -->\n <Spoiler \n class=\"radius-small o-hidden mn-b-small\"\n :status=\"false\"\n >\n <template #header>\n <p class=\"cursor-pointer mn-r-auto t-medium p-semi\">{{ t('filters.price.title') }}</p>\n <!-- SVG Icon -->\n </template>\n <template #content>\n <Checkbox \n v-for=\"(price, index) in prices\"\n :key=\"index\"\n :label=\"price.label\"\n :value=\"price.value\"\n class=\"w-100 mn-t-small bg-white radius-small pd-small\"\n :radio=\"marketplace.state.filter.prices\"\n @update:radio=\"event => marketplace.state.filter.prices = event\"\n />\n </template>\n </Spoiler>\n\n <hr class=\"mn-b-small\">\n\n <!-- Delivery Filter -->\n <Spoiler \n class=\"radius-small o-hidden mn-b-small\"\n :status=\"false\"\n >\n <template #header>\n <p class=\"cursor-pointer mn-r-auto t-medium p-semi\">Delivery</p>\n </template>\n <template #content>\n <Checkbox \n v-for=\"(deliveryOption, index) in deliveryOptions\"\n :key=\"index\"\n :label=\"deliveryOption.label\"\n :value=\"deliveryOption.value\"\n class=\"w-100 mn-t-small bg-white radius-small pd-small\"\n :radio=\"marketplace.state.filter.delivery\"\n @update:radio=\"event => marketplace.state.filter.delivery = event\"\n />\n </template>\n </Spoiler>\n\n <hr class=\"mn-b-semi\">\n\n <!-- Reset filter -->\n <button @click=\"resetFilters\" class=\"bg-main w-100 button\">{{ t('filters.reset') }}</button>\n </div>\n </template>\n\n<script setup>\nimport { ref, watch, onMounted } from 'vue'\n\nimport Spoiler from \"@martyrs/src/components/Spoiler/Spoiler.vue\"\nimport Checkbox from \"@martyrs/src/components/Checkbox/Checkbox.vue\"\n\nimport { useI18n } from 'vue-i18n'\nimport { useRoute, useRouter,onBeforeRouteLeave } from 'vue-router'\n\nconst route = useRoute()\nconst router = useRouter()\n\nimport * as categories from '@martyrs/src/modules/products/store/categories.js';\nimport * as marketplace from '@martyrs/src/modules/marketplace/views/store/marketplace.js';\n\nlet options = {\n status: 'published'\n}\n\nlet selectedFilters = ref({\n categories: [],\n prices: [],\n delivery: [],\n extra: []\n})\n\n// Пропсы и данные, которые вы передаёте в компонент\nconst props = defineProps({\n selectedFilters: Object,\n prices: {\n type: Array,\n default: () => [\n { label: 'Under 300฿', value: '<300' },\n { label: '300฿ to 600฿', value: '300-600' },\n { label: '600฿ to 1200฿', value: '600-1200' },\n { label: '$1200 and above', value: '>1200' }\n ]\n },\n deliveryOptions: {\n type: Array,\n default: () => [\n { label: 'Pickup', value: { min: 0, max: 25 } },\n { label: 'Courier', value: { min: 25, max: 50 } },\n { label: 'Post', value: { min: 50, max: 100 } }\n ]\n }\n})\n\nwatch(() => marketplace.state.filter, (newFilterValue, oldFilterValue) => {\n // Переводим фильтр в формат query\n const query = { ...route.query };\n\n // Удаляем старые значения фильтра из query\n Object.keys(oldFilterValue).forEach(key => {\n if (query[key]) {\n delete query[key];\n }\n });\n\n // Добавляем новые значения фильтра в query\n const newQueryValues = Object.fromEntries(\n Object.entries(newFilterValue)\n .filter(([key, value]) => Array.isArray(value) && value.length > 0)\n .map(([key, value]) => [key, value.join(',')])\n );\n Object.assign(query, newQueryValues);\n\n // Обновляем маршрут с новым query\n router.repalce({ query });\n}, { deep: true })\n\nonMounted(async () => {\n await categories.actions.read(options)\n \n if (route.query) {\n const query = route.query;\n const newFilterValue = {\n categories: query.categories ? query.categories.split(',') : [],\n prices: query.prices ? query.prices.split(',') : [],\n delivery: query.delivery ? query.delivery.split(',') : [],\n // Продолжайте этот паттерн для остальных полей фильтра\n };\n marketplace.state.filter.innerHTML = newFilterValue;\n }\n})\n\nconst emit = defineEmits(['updateFilters', 'resetFilters'])\n\nconst emitFilterChange = (filterType, value) => {\n emit('updateFilters', { filterType, value })\n}\n\nconst resetFilters = () => {\n emit('resetFilters')\n}\nconst text = {\n locale: 'en',\n messages: {\n en: {\n categoriesTitle: 'Category',\n categories: [],\n filters: {\n title: 'Filters',\n price: {\n title: 'Price',\n from: 'From',\n to: 'To'\n },\n filters: [],\n reset: 'Reset Filters'\n }\n },\n ru: {\n categoriesTitle: 'Категория',\n categories: [],\n filters: {\n title: 'Фильтры',\n price: {\n title: 'Цена',\n from: 'От',\n to: 'До'\n },\n filters: [],\n reset: 'Сбросить фильтры',\n }\n }\n }\n }\n\n categories.state.all.forEach( category => {\n category.translations.forEach( localization => {\n text.messages[localization.locale].categories.push(localization.text)\n })\n })\n\n const { t } = useI18n(text)\n \n\n\n// Добавьте свою локализацию и методы t, если они нужны\n</script>\n\n<style>\n/* Ваши стили */\n</style>\n"],"names":["useRoute","useRouter","ref","watch","marketplace.state","onMounted","categories.actions","categories.state","useI18n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFA,UAAM,QAAQA,UAAAA,SAAQ;AACtB,UAAM,SAASC,UAAAA,UAAS;AAKxB,QAAI,UAAU;AAAA,MACZ,QAAQ;AAAA,IACV;AAEsBC,QAAAA,IAAI;AAAA,MACxB,YAAY,CAAA;AAAA,MACZ,QAAQ,CAAA;AAAA,MACR,UAAU,CAAA;AAAA,MACV,OAAO,CAAA;AAAA,IACT,CAAC;AAwBDC,QAAAA,MAAM,MAAMC,YAAAA,MAAkB,QAAQ,CAAC,gBAAgB,mBAAmB;AAExE,YAAM,QAAQ,EAAE,GAAG,MAAM,MAAK;AAG9B,aAAO,KAAK,cAAc,EAAE,QAAQ,SAAO;AACzC,YAAI,MAAM,GAAG,GAAG;AACd,iBAAO,MAAM,GAAG;AAAA,QAClB;AAAA,MACF,CAAC;AAGD,YAAM,iBAAiB,OAAO;AAAA,QAC5B,OAAO,QAAQ,cAAc,EAC1B,OAAO,CAAC,CAAC,KAAK,KAAK,MAAM,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,CAAC,EACjE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,MAAM,KAAK,GAAG,CAAC,CAAC;AAAA,MACnD;AACE,aAAO,OAAO,OAAO,cAAc;AAGnC,aAAO,QAAQ,EAAE,OAAO;AAAA,IAC1B,GAAG,EAAE,MAAM,KAAI,CAAE;AAEjBC,QAAAA,UAAU,YAAY;AACpB,YAAMC,WAAAA,QAAmB,KAAK,OAAO;AAErC,UAAI,MAAM,OAAO;AACf,cAAM,QAAQ,MAAM;AACpB,cAAM,iBAAiB;AAAA,UACrB,YAAY,MAAM,aAAa,MAAM,WAAW,MAAM,GAAG,IAAI,CAAA;AAAA,UAC7D,QAAQ,MAAM,SAAS,MAAM,OAAO,MAAM,GAAG,IAAI,CAAA;AAAA,UACjD,UAAU,MAAM,WAAW,MAAM,SAAS,MAAM,GAAG,IAAI,CAAA;AAAA;AAAA,QAE7D;AACIF,0BAAkB,OAAO,YAAY;AAAA,MACvC;AAAA,IACF,CAAC;AAED,UAAM,OAAO;AAMb,UAAM,eAAe,MAAM;AACzB,WAAK,cAAc;AAAA,IACrB;AACA,UAAM,OAAO;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,QACR,IAAI;AAAA,UACF,iBAAiB;AAAA,UACjB,YAAY,CAAA;AAAA,UACZ,SAAS;AAAA,YACP,OAAO;AAAA,YACP,OAAO;AAAA,cACL,OAAO;AAAA,cACP,MAAM;AAAA,cACN,IAAI;AAAA,YAChB;AAAA,YACU,SAAS,CAAA;AAAA,YACT,OAAO;AAAA,UACjB;AAAA,QACA;AAAA,QACM,IAAI;AAAA,UACF,iBAAiB;AAAA,UACjB,YAAY,CAAA;AAAA,UACZ,SAAS;AAAA,YACP,OAAO;AAAA,YACP,OAAO;AAAA,cACL,OAAO;AAAA,cACP,MAAM;AAAA,cACN,IAAI;AAAA,YAChB;AAAA,YACU,SAAS,CAAA;AAAA,YACT,OAAO;AAAA,UACjB;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAEEG,qBAAiB,IAAI,QAAS,cAAY;AACxC,eAAS,aAAa,QAAS,kBAAgB;AAC7C,aAAK,SAAS,aAAa,MAAM,EAAE,WAAW,KAAK,aAAa,IAAI;AAAA,MACtE,CAAC;AAAA,IACH,CAAC;AAED,UAAM,EAAE,MAAMC,QAAAA,QAAQ,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"FilterProducts.vue.cjs","sources":["../../../../../../../src/modules/products/components/sections/FilterProducts.vue"],"sourcesContent":[" <template>\n <div class=\"pd-medium bg-light radius-medium\">\n <!-- Categories Filter -->\n <Spoiler \n class=\"radius-small o-hidden mn-b-small\"\n :status=\"true\"\n >\n <template #header>\n <p class=\"cursor-pointer mn-r-auto t-medium p-medium\">{{ t('categoriesTitle') }}</p>\n <!-- SVG Icon -->\n </template>\n <template #content>\n <Checkbox \n v-for=\"(category, index) in categories.state.all\"\n :key=\"index\"\n :label=\"category.name\"\n :value=\"category.url\"\n class=\"w-100 mn-t-small mn-b-small bg-white radius-small pd-small\"\n :radio=\"marketplace.state.filter.categories\"\n @update:radio=\"event => marketplace.state.filter.categories = event\"\n />\n </template>\n </Spoiler>\n\n <hr class=\"mn-b-small t-transp\">\n\n <!-- Prices Filter -->\n <Spoiler \n class=\"radius-small o-hidden mn-b-small\"\n :status=\"false\"\n >\n <template #header>\n <p class=\"cursor-pointer mn-r-auto t-medium p-medium\">{{ t('filters.price.title') }}</p>\n <!-- SVG Icon -->\n </template>\n <template #content>\n <Checkbox \n v-for=\"(price, index) in prices\"\n :key=\"index\"\n :label=\"price.label\"\n :value=\"price.value\"\n class=\"w-100 mn-t-small bg-white radius-small pd-small\"\n :radio=\"marketplace.state.filter.prices\"\n @update:radio=\"event => marketplace.state.filter.prices = event\"\n />\n </template>\n </Spoiler>\n\n <hr class=\"mn-b-small\">\n\n <!-- Delivery Filter -->\n <Spoiler \n class=\"radius-small o-hidden mn-b-small\"\n :status=\"false\"\n >\n <template #header>\n <p class=\"cursor-pointer mn-r-auto t-medium p-medium\">Delivery</p>\n </template>\n <template #content>\n <Checkbox \n v-for=\"(deliveryOption, index) in deliveryOptions\"\n :key=\"index\"\n :label=\"deliveryOption.label\"\n :value=\"deliveryOption.value\"\n class=\"w-100 mn-t-small bg-white radius-small pd-small\"\n :radio=\"marketplace.state.filter.delivery\"\n @update:radio=\"event => marketplace.state.filter.delivery = event\"\n />\n </template>\n </Spoiler>\n\n <hr class=\"mn-b-semi\">\n\n <!-- Reset filter -->\n <button @click=\"resetFilters\" class=\"bg-main w-100 button\">{{ t('filters.reset') }}</button>\n </div>\n </template>\n\n<script setup>\nimport { ref, watch, onMounted } from 'vue'\n\nimport Spoiler from \"@martyrs/src/components/Spoiler/Spoiler.vue\"\nimport Checkbox from \"@martyrs/src/components/Checkbox/Checkbox.vue\"\n\nimport { useI18n } from 'vue-i18n'\nimport { useRoute, useRouter,onBeforeRouteLeave } from 'vue-router'\n\nconst route = useRoute()\nconst router = useRouter()\n\nimport * as categories from '@martyrs/src/modules/products/store/categories.js';\nimport * as marketplace from '@martyrs/src/modules/marketplace/views/store/marketplace.js';\n\nlet options = {\n status: 'published'\n}\n\nlet selectedFilters = ref({\n categories: [],\n prices: [],\n delivery: [],\n extra: []\n})\n\n// Пропсы и данные, которые вы передаёте в компонент\nconst props = defineProps({\n selectedFilters: Object,\n prices: {\n type: Array,\n default: () => [\n { label: 'Under 300฿', value: '<300' },\n { label: '300฿ to 600฿', value: '300-600' },\n { label: '600฿ to 1200฿', value: '600-1200' },\n { label: '$1200 and above', value: '>1200' }\n ]\n },\n deliveryOptions: {\n type: Array,\n default: () => [\n { label: 'Pickup', value: { min: 0, max: 25 } },\n { label: 'Courier', value: { min: 25, max: 50 } },\n { label: 'Post', value: { min: 50, max: 100 } }\n ]\n }\n})\n\nwatch(() => marketplace.state.filter, (newFilterValue, oldFilterValue) => {\n // Переводим фильтр в формат query\n const query = { ...route.query };\n\n // Удаляем старые значения фильтра из query\n Object.keys(oldFilterValue).forEach(key => {\n if (query[key]) {\n delete query[key];\n }\n });\n\n // Добавляем новые значения фильтра в query\n const newQueryValues = Object.fromEntries(\n Object.entries(newFilterValue)\n .filter(([key, value]) => Array.isArray(value) && value.length > 0)\n .map(([key, value]) => [key, value.join(',')])\n );\n Object.assign(query, newQueryValues);\n\n // Обновляем маршрут с новым query\n router.repalce({ query });\n}, { deep: true })\n\nonMounted(async () => {\n await categories.actions.read(options)\n \n if (route.query) {\n const query = route.query;\n const newFilterValue = {\n categories: query.categories ? query.categories.split(',') : [],\n prices: query.prices ? query.prices.split(',') : [],\n delivery: query.delivery ? query.delivery.split(',') : [],\n // Продолжайте этот паттерн для остальных полей фильтра\n };\n marketplace.state.filter.innerHTML = newFilterValue;\n }\n})\n\nconst emit = defineEmits(['updateFilters', 'resetFilters'])\n\nconst emitFilterChange = (filterType, value) => {\n emit('updateFilters', { filterType, value })\n}\n\nconst resetFilters = () => {\n emit('resetFilters')\n}\nconst text = {\n locale: 'en',\n messages: {\n en: {\n categoriesTitle: 'Category',\n categories: [],\n filters: {\n title: 'Filters',\n price: {\n title: 'Price',\n from: 'From',\n to: 'To'\n },\n filters: [],\n reset: 'Reset Filters'\n }\n },\n ru: {\n categoriesTitle: 'Категория',\n categories: [],\n filters: {\n title: 'Фильтры',\n price: {\n title: 'Цена',\n from: 'От',\n to: 'До'\n },\n filters: [],\n reset: 'Сбросить фильтры',\n }\n }\n }\n }\n\n categories.state.all.forEach( category => {\n category.translations.forEach( localization => {\n text.messages[localization.locale].categories.push(localization.text)\n })\n })\n\n const { t } = useI18n(text)\n \n\n\n// Добавьте свою локализацию и методы t, если они нужны\n</script>\n\n<style>\n/* Ваши стили */\n</style>\n"],"names":["useRoute","useRouter","ref","watch","marketplace.state","onMounted","categories.actions","categories.state","useI18n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFA,UAAM,QAAQA,UAAAA,SAAQ;AACtB,UAAM,SAASC,UAAAA,UAAS;AAKxB,QAAI,UAAU;AAAA,MACZ,QAAQ;AAAA,IACV;AAEsBC,QAAAA,IAAI;AAAA,MACxB,YAAY,CAAA;AAAA,MACZ,QAAQ,CAAA;AAAA,MACR,UAAU,CAAA;AAAA,MACV,OAAO,CAAA;AAAA,IACT,CAAC;AAwBDC,QAAAA,MAAM,MAAMC,YAAAA,MAAkB,QAAQ,CAAC,gBAAgB,mBAAmB;AAExE,YAAM,QAAQ,EAAE,GAAG,MAAM,MAAK;AAG9B,aAAO,KAAK,cAAc,EAAE,QAAQ,SAAO;AACzC,YAAI,MAAM,GAAG,GAAG;AACd,iBAAO,MAAM,GAAG;AAAA,QAClB;AAAA,MACF,CAAC;AAGD,YAAM,iBAAiB,OAAO;AAAA,QAC5B,OAAO,QAAQ,cAAc,EAC1B,OAAO,CAAC,CAAC,KAAK,KAAK,MAAM,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,CAAC,EACjE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,MAAM,KAAK,GAAG,CAAC,CAAC;AAAA,MACnD;AACE,aAAO,OAAO,OAAO,cAAc;AAGnC,aAAO,QAAQ,EAAE,OAAO;AAAA,IAC1B,GAAG,EAAE,MAAM,KAAI,CAAE;AAEjBC,QAAAA,UAAU,YAAY;AACpB,YAAMC,WAAAA,QAAmB,KAAK,OAAO;AAErC,UAAI,MAAM,OAAO;AACf,cAAM,QAAQ,MAAM;AACpB,cAAM,iBAAiB;AAAA,UACrB,YAAY,MAAM,aAAa,MAAM,WAAW,MAAM,GAAG,IAAI,CAAA;AAAA,UAC7D,QAAQ,MAAM,SAAS,MAAM,OAAO,MAAM,GAAG,IAAI,CAAA;AAAA,UACjD,UAAU,MAAM,WAAW,MAAM,SAAS,MAAM,GAAG,IAAI,CAAA;AAAA;AAAA,QAE7D;AACIF,0BAAkB,OAAO,YAAY;AAAA,MACvC;AAAA,IACF,CAAC;AAED,UAAM,OAAO;AAMb,UAAM,eAAe,MAAM;AACzB,WAAK,cAAc;AAAA,IACrB;AACA,UAAM,OAAO;AAAA,MACT,QAAQ;AAAA,MACR,UAAU;AAAA,QACR,IAAI;AAAA,UACF,iBAAiB;AAAA,UACjB,YAAY,CAAA;AAAA,UACZ,SAAS;AAAA,YACP,OAAO;AAAA,YACP,OAAO;AAAA,cACL,OAAO;AAAA,cACP,MAAM;AAAA,cACN,IAAI;AAAA,YAChB;AAAA,YACU,SAAS,CAAA;AAAA,YACT,OAAO;AAAA,UACjB;AAAA,QACA;AAAA,QACM,IAAI;AAAA,UACF,iBAAiB;AAAA,UACjB,YAAY,CAAA;AAAA,UACZ,SAAS;AAAA,YACP,OAAO;AAAA,YACP,OAAO;AAAA,cACL,OAAO;AAAA,cACP,MAAM;AAAA,cACN,IAAI;AAAA,YAChB;AAAA,YACU,SAAS,CAAA;AAAA,YACT,OAAO;AAAA,UACjB;AAAA,QACA;AAAA,MACA;AAAA,IACA;AAEEG,qBAAiB,IAAI,QAAS,cAAY;AACxC,eAAS,aAAa,QAAS,kBAAgB;AAC7C,aAAK,SAAS,aAAa,MAAM,EAAE,WAAW,KAAK,aAAa,IAAI;AAAA,MACtE,CAAC;AAAA,IACH,CAAC;AAED,UAAM,EAAE,MAAMC,QAAAA,QAAQ,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}