@ozdao/martyrs 0.2.604 → 0.2.605

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 (833) hide show
  1. package/README.md +2 -2
  2. package/dist/_virtual/dayjs.min.js +1 -1
  3. package/dist/_virtual/weekOfYear.js +1 -1
  4. package/dist/{abac-Blt8bUTL.js → abac-kz5xI99l.js} +1 -0
  5. package/dist/auth.server.js +52 -12
  6. package/dist/builder.js +67 -2
  7. package/dist/chats.server.js +2 -2
  8. package/dist/community.server.js +3 -3
  9. package/dist/core.server.js +2 -2
  10. package/dist/{core.websocket-Cl76z2wT.js → core.websocket-B2FA8gGl.js} +0 -2
  11. package/dist/{crud-BT5FIvQC.js → crud-Cwn0frBP.js} +8 -2
  12. package/dist/events.server.js +4 -4
  13. package/dist/files.server.js +1 -1
  14. package/dist/gallery.server.js +2 -2
  15. package/dist/governance.server.js +10 -10
  16. package/dist/{index-kvBwwb0w.js → index-CPACC651.js} +1 -1
  17. package/dist/inventory.server.js +4 -4
  18. package/dist/{mailing-DT7nbNjZ.js → mailing-BBCidXGr.js} +38 -2
  19. package/dist/marketplace.server.js +2 -2
  20. package/dist/martyrs/dist/martyrs.es3.js +1 -1
  21. package/dist/martyrs/dist/martyrs.es3.js.map +1 -1
  22. package/dist/{node_modules/.pnpm/dayjs@1.11.13 → martyrs/node_modules/.pnpm/dayjs@1.11.19}/node_modules/dayjs/dayjs.min.js +1 -1
  23. package/dist/{node_modules/.pnpm/dayjs@1.11.13 → martyrs/node_modules/.pnpm/dayjs@1.11.19}/node_modules/dayjs/dayjs.min.js.map +1 -1
  24. package/dist/{node_modules/.pnpm/dayjs@1.11.13 → martyrs/node_modules/.pnpm/dayjs@1.11.19}/node_modules/dayjs/plugin/weekOfYear.js +1 -1
  25. package/dist/{node_modules/.pnpm/dayjs@1.11.13 → martyrs/node_modules/.pnpm/dayjs@1.11.19}/node_modules/dayjs/plugin/weekOfYear.js.map +1 -1
  26. package/dist/{node_modules/.pnpm/vue-draggable-next@2.2.1_sortablejs@1.15.6_vue@3.5.13_typescript@5.8.3_ → martyrs/node_modules/.pnpm/vue-draggable-next@2.3.0_sortablejs@1.15.7_vue@3.5.13}/node_modules/vue-draggable-next/dist/vue-draggable-next.esm-bundler.js +305 -268
  27. package/dist/martyrs/node_modules/.pnpm/vue-draggable-next@2.3.0_sortablejs@1.15.7_vue@3.5.13/node_modules/vue-draggable-next/dist/vue-draggable-next.esm-bundler.js.map +1 -0
  28. package/dist/martyrs/src/components/Address/Address.vue2.js +13 -13
  29. package/dist/martyrs/src/components/Address/Address.vue2.js.map +1 -1
  30. package/dist/martyrs/src/components/Block/Block.vue.js +1 -1
  31. package/dist/martyrs/src/components/Button/Button.vue2.js +1 -1
  32. package/dist/martyrs/src/components/Button/Button.vue2.js.map +1 -1
  33. package/dist/martyrs/src/components/Calendar/Calendar.vue2.js +150 -143
  34. package/dist/martyrs/src/components/Calendar/Calendar.vue2.js.map +1 -1
  35. package/dist/martyrs/src/components/Chart/Chart.vue.js +296 -0
  36. package/dist/martyrs/src/components/Chart/Chart.vue.js.map +1 -0
  37. package/dist/martyrs/src/components/Checkbox/Checkbox.vue.js +1 -1
  38. package/dist/martyrs/src/components/Checkbox/Checkbox.vue.js.map +1 -1
  39. package/dist/martyrs/src/components/Chips/Chips.vue.js +5 -6
  40. package/dist/martyrs/src/components/Chips/Chips.vue.js.map +1 -1
  41. package/dist/martyrs/src/components/Countdown/Countdown.vue.js +5 -5
  42. package/dist/martyrs/src/components/Countdown/Countdown.vue.js.map +1 -1
  43. package/dist/martyrs/src/components/DatePicker/DatePicker.vue.js +2 -2
  44. package/dist/martyrs/src/components/DatePicker/DatePicker.vue.js.map +1 -1
  45. package/dist/martyrs/src/components/EditImages/{EditImages.vue2.js → EditImages.vue.js} +6 -6
  46. package/dist/martyrs/src/components/EditImages/EditImages.vue.js.map +1 -0
  47. package/dist/martyrs/src/components/EmptyState/EmptyState.vue.js +1 -1
  48. package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
  49. package/dist/martyrs/src/components/Field/Field.vue.js +4 -4
  50. package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -1
  51. package/dist/martyrs/src/components/FieldDate/FieldDate.vue.js +3 -3
  52. package/dist/martyrs/src/components/FieldDate/FieldDate.vue.js.map +1 -1
  53. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue2.js +27 -21
  54. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue2.js.map +1 -1
  55. package/dist/martyrs/src/components/Map/Map.vue.js +20 -16
  56. package/dist/martyrs/src/components/Map/Map.vue.js.map +1 -1
  57. package/dist/martyrs/src/components/Popup/Popup.vue.js +3 -4
  58. package/dist/martyrs/src/components/Popup/Popup.vue.js.map +1 -1
  59. package/dist/martyrs/src/components/Radio/Radio.vue.js +12 -10
  60. package/dist/martyrs/src/components/Radio/Radio.vue.js.map +1 -1
  61. package/dist/martyrs/src/components/Select/Select.vue.js +2 -2
  62. package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -1
  63. package/dist/martyrs/src/components/Status/Snack.vue.js +1 -1
  64. package/dist/martyrs/src/components/Status/Snack.vue.js.map +1 -1
  65. package/dist/martyrs/src/components/Status/Status.vue.js +1 -1
  66. package/dist/martyrs/src/components/Status/Status.vue.js.map +1 -1
  67. package/dist/martyrs/src/components/Table/Table.vue.js +21 -4
  68. package/dist/martyrs/src/components/Table/Table.vue.js.map +1 -1
  69. package/dist/martyrs/src/components/Tooltip/{Tooltip.vue2.js → Tooltip.vue.js} +2 -2
  70. package/dist/martyrs/src/components/Tooltip/Tooltip.vue.js.map +1 -0
  71. package/dist/martyrs/src/components/Tree/Tree.vue.js +1 -1
  72. package/dist/martyrs/src/components/Upload/Upload.vue2.js +2 -2
  73. package/dist/martyrs/src/components/Upload/Upload.vue2.js.map +1 -1
  74. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js +2 -2
  75. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js.map +1 -1
  76. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +1 -1
  77. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js.map +1 -1
  78. package/dist/martyrs/src/modules/auth/auth.client.js +14 -2
  79. package/dist/martyrs/src/modules/auth/auth.client.js.map +1 -1
  80. package/dist/martyrs/src/modules/auth/views/components/blocks/OtpDialog.vue.js +4 -4
  81. package/dist/martyrs/src/modules/auth/views/components/blocks/OtpDialog.vue.js.map +1 -1
  82. package/dist/martyrs/src/modules/auth/views/components/blocks/PopupAuth.vue.js +1 -1
  83. package/dist/martyrs/src/modules/auth/views/components/blocks/PopupAuth.vue.js.map +1 -1
  84. package/dist/martyrs/src/modules/auth/views/components/blocks/SidebarUserCard.vue.js +96 -0
  85. package/dist/martyrs/src/modules/auth/views/components/blocks/SidebarUserCard.vue.js.map +1 -0
  86. package/dist/martyrs/src/modules/auth/views/components/pages/BackofficeUsers.vue.js +337 -0
  87. package/dist/martyrs/src/modules/auth/views/components/pages/BackofficeUsers.vue.js.map +1 -0
  88. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
  89. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js.map +1 -1
  90. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +1 -1
  91. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
  92. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +32 -18
  93. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js.map +1 -1
  94. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +76 -40
  95. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js.map +1 -1
  96. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditSidebar.vue.js +6 -5
  97. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditSidebar.vue.js.map +1 -1
  98. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +4 -4
  99. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js.map +1 -1
  100. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +3 -1
  101. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js.map +1 -1
  102. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +3 -3
  103. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js.map +1 -1
  104. package/dist/martyrs/src/modules/auth/views/components/pages/UserDashboard.vue.js +28 -16
  105. package/dist/martyrs/src/modules/auth/views/components/pages/UserDashboard.vue.js.map +1 -1
  106. package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.js +1 -1
  107. package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.js.map +1 -1
  108. package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js +1 -1
  109. package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js.map +1 -1
  110. package/dist/martyrs/src/modules/auth/views/middlewares/auth.validation.js +6 -2
  111. package/dist/martyrs/src/modules/auth/views/middlewares/auth.validation.js.map +1 -1
  112. package/dist/martyrs/src/modules/auth/views/router/users.backoffice.router.js +53 -0
  113. package/dist/martyrs/src/modules/auth/views/router/users.backoffice.router.js.map +1 -0
  114. package/dist/martyrs/src/modules/auth/views/store/auth.js +2 -2
  115. package/dist/martyrs/src/modules/auth/views/store/auth.js.map +1 -1
  116. package/dist/martyrs/src/modules/backoffice/components/pages/Dashboard.vue.js +179 -253
  117. package/dist/martyrs/src/modules/backoffice/components/pages/Dashboard.vue.js.map +1 -1
  118. package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js +105 -44
  119. package/dist/martyrs/src/modules/backoffice/configs/navigation.backoffice.config.js.map +1 -1
  120. package/dist/martyrs/src/modules/backoffice/router/backoffice.router.js +11 -5
  121. package/dist/martyrs/src/modules/backoffice/router/backoffice.router.js.map +1 -1
  122. package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.js +1 -1
  123. package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.js.map +1 -1
  124. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js.map +1 -1
  125. package/dist/martyrs/src/modules/community/community.client.js +4 -4
  126. package/dist/martyrs/src/modules/community/community.client.js.map +1 -1
  127. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +1 -1
  128. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js.map +1 -1
  129. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +4 -4
  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.js +2 -2
  132. package/dist/martyrs/src/modules/community/components/sections/Comment.vue.js.map +1 -1
  133. package/dist/martyrs/src/modules/constructor/components/elements/ImageUpload.vue.js +1 -1
  134. package/dist/martyrs/src/modules/constructor/components/elements/ImageUpload.vue.js.map +1 -1
  135. package/dist/martyrs/src/modules/core/core.client.js +18 -16
  136. package/dist/martyrs/src/modules/core/core.client.js.map +1 -1
  137. package/dist/martyrs/src/modules/core/views/classes/core.app.js +25 -6
  138. package/dist/martyrs/src/modules/core/views/classes/core.app.js.map +1 -1
  139. package/dist/martyrs/src/modules/core/views/classes/module.manager.js +4 -2
  140. package/dist/martyrs/src/modules/core/views/classes/module.manager.js.map +1 -1
  141. package/dist/martyrs/src/modules/core/views/components/blocks/AlertDialog.vue.js +1 -1
  142. package/dist/martyrs/src/modules/core/views/components/blocks/AlertDialog.vue.js.map +1 -1
  143. package/dist/martyrs/src/modules/core/views/components/blocks/BlockSearch.vue.js +1 -1
  144. package/dist/martyrs/src/modules/core/views/components/blocks/BlockSearch.vue.js.map +1 -1
  145. package/dist/martyrs/src/modules/core/views/components/blocks/BlockSlider.vue.js +132 -0
  146. package/dist/martyrs/src/modules/core/views/components/blocks/BlockSlider.vue.js.map +1 -0
  147. package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js +3 -3
  148. package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js.map +1 -1
  149. package/dist/martyrs/src/modules/core/views/components/blocks/CardStat.vue.js +6 -28
  150. package/dist/martyrs/src/modules/core/views/components/blocks/CardStat.vue.js.map +1 -1
  151. package/dist/martyrs/src/modules/{auth → core}/views/components/blocks/CardUser.vue.js +29 -11
  152. package/dist/martyrs/src/modules/{auth → core}/views/components/blocks/CardUser.vue.js.map +1 -1
  153. package/dist/martyrs/src/modules/core/views/components/blocks/HelpCard.vue.js +2 -2
  154. package/dist/martyrs/src/modules/core/views/components/blocks/HelpCard.vue.js.map +1 -1
  155. package/dist/martyrs/src/modules/core/views/components/blocks/PopupDateSelector.vue.js +41 -26
  156. package/dist/martyrs/src/modules/core/views/components/blocks/PopupDateSelector.vue.js.map +1 -1
  157. package/dist/martyrs/src/modules/core/views/components/elements/OnlineIndicator.vue.js +1 -1
  158. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +2 -1
  159. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
  160. package/dist/martyrs/src/modules/core/views/components/pages/404.vue.js +2 -2
  161. package/dist/martyrs/src/modules/core/views/components/pages/404.vue.js.map +1 -1
  162. package/dist/martyrs/src/modules/core/views/components/partials/BottomNavigationBar.vue.js +5 -5
  163. package/dist/martyrs/src/modules/core/views/components/partials/BottomNavigationBar.vue.js.map +1 -1
  164. package/dist/martyrs/src/modules/core/views/components/partials/CitySelection.vue.js +2 -2
  165. package/dist/martyrs/src/modules/core/views/components/partials/CitySelection.vue.js.map +1 -1
  166. package/dist/martyrs/src/modules/core/views/components/partials/Footer.vue.js +2 -2
  167. package/dist/martyrs/src/modules/core/views/components/partials/Footer.vue.js.map +1 -1
  168. package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js +4 -4
  169. package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js.map +1 -1
  170. package/dist/martyrs/src/modules/core/views/components/partials/LocationSelection.vue.js +1 -1
  171. package/dist/martyrs/src/modules/core/views/components/partials/LocationSelection.vue.js.map +1 -1
  172. package/dist/martyrs/src/modules/core/views/components/partials/Navigation.vue.js +2 -2
  173. package/dist/martyrs/src/modules/core/views/components/partials/Navigation.vue.js.map +1 -1
  174. package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue2.js +3 -3
  175. package/dist/martyrs/src/modules/core/views/components/sections/Filters.vue2.js.map +1 -1
  176. package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js +2 -2
  177. package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js.map +1 -1
  178. package/dist/martyrs/src/modules/core/views/components/sections/Walkthrough.vue.js +6 -6
  179. package/dist/martyrs/src/modules/core/views/components/sections/Walkthrough.vue.js.map +1 -1
  180. package/dist/martyrs/src/modules/core/views/mixins/mixins.js +14 -1
  181. package/dist/martyrs/src/modules/core/views/mixins/mixins.js.map +1 -1
  182. package/dist/martyrs/src/modules/core/views/plugins/date-picker.plugin.js +8 -5
  183. package/dist/martyrs/src/modules/core/views/plugins/date-picker.plugin.js.map +1 -1
  184. package/dist/martyrs/src/modules/core/views/store/core.store.js +4 -0
  185. package/dist/martyrs/src/modules/core/views/store/core.store.js.map +1 -1
  186. package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js +3 -0
  187. package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js.map +1 -1
  188. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
  189. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +9 -9
  190. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js.map +1 -1
  191. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +1 -1
  192. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
  193. package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js +1 -1
  194. package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js.map +1 -1
  195. package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.js +1 -1
  196. package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.js.map +1 -1
  197. package/dist/martyrs/src/modules/events/events.client.js +4 -4
  198. package/dist/martyrs/src/modules/events/events.client.js.map +1 -1
  199. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +2 -2
  200. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js.map +1 -1
  201. package/dist/martyrs/src/modules/gallery/router/gallery.router.js +3 -3
  202. package/dist/martyrs/src/modules/gallery/router/gallery.router.js.map +1 -1
  203. package/dist/martyrs/src/modules/governance/views/components/blocks/CardInitiativeItem.vue.js +3 -3
  204. package/dist/martyrs/src/modules/governance/views/components/blocks/CardInitiativeItem.vue.js.map +1 -1
  205. package/dist/martyrs/src/modules/governance/views/components/blocks/CardSprintItem.vue.js +4 -4
  206. package/dist/martyrs/src/modules/governance/views/components/blocks/CardSprintItem.vue.js.map +1 -1
  207. package/dist/martyrs/src/modules/governance/views/components/blocks/CardTaskItem.vue.js +2 -2
  208. package/dist/martyrs/src/modules/governance/views/components/blocks/CardTaskItem.vue.js.map +1 -1
  209. package/dist/martyrs/src/modules/governance/views/components/blocks/CardVotingItem.vue.js +3 -3
  210. package/dist/martyrs/src/modules/governance/views/components/blocks/CardVotingItem.vue.js.map +1 -1
  211. package/dist/martyrs/src/modules/governance/views/components/pages/Initiatives.vue.js +3 -3
  212. package/dist/martyrs/src/modules/governance/views/components/pages/Initiatives.vue.js.map +1 -1
  213. package/dist/martyrs/src/modules/governance/views/components/partials/TaskStatusBadge.vue.js +1 -1
  214. package/dist/martyrs/src/modules/governance/views/components/partials/TaskStatusBadge.vue.js.map +1 -1
  215. package/dist/martyrs/src/modules/governance/views/components/sections/FormSprintDetails.vue.js +1 -1
  216. package/dist/martyrs/src/modules/governance/views/components/sections/FormSprintDetails.vue.js.map +1 -1
  217. package/dist/martyrs/src/modules/governance/views/components/sections/FormTaskDetails.vue.js +1 -1
  218. package/dist/martyrs/src/modules/governance/views/components/sections/FormTaskDetails.vue.js.map +1 -1
  219. package/dist/martyrs/src/modules/governance/views/router/governance.router.js +3 -3
  220. package/dist/martyrs/src/modules/governance/views/router/governance.router.js.map +1 -1
  221. package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.js +2 -2
  222. package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.js.map +1 -1
  223. package/dist/martyrs/src/modules/icons/entities/IconApplications.vue.js +32 -0
  224. package/dist/martyrs/src/modules/icons/entities/IconApplications.vue.js.map +1 -0
  225. package/dist/martyrs/src/modules/icons/entities/IconCustomers.vue.js +32 -0
  226. package/dist/martyrs/src/modules/icons/entities/IconCustomers.vue.js.map +1 -0
  227. package/dist/martyrs/src/modules/icons/entities/IconUsers.vue.js +32 -0
  228. package/dist/martyrs/src/modules/icons/entities/IconUsers.vue.js.map +1 -0
  229. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +2 -2
  230. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js.map +1 -1
  231. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +2 -2
  232. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js.map +1 -1
  233. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
  234. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js.map +1 -1
  235. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +3 -3
  236. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js.map +1 -1
  237. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +290 -173
  238. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js.map +1 -1
  239. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
  240. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js.map +1 -1
  241. package/dist/martyrs/src/modules/inventory/inventory.client.js +4 -4
  242. package/dist/martyrs/src/modules/inventory/inventory.client.js.map +1 -1
  243. package/dist/martyrs/src/modules/inventory/router/inventory.router.js +15 -0
  244. package/dist/martyrs/src/modules/inventory/router/inventory.router.js.map +1 -1
  245. package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.js +4 -4
  246. package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.js.map +1 -1
  247. package/dist/martyrs/src/modules/landing/components/sections/SectionFeatures.vue.js +1 -1
  248. package/dist/martyrs/src/modules/landing/components/sections/SectionFeatures.vue.js.map +1 -1
  249. package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.js +3 -3
  250. package/dist/martyrs/src/modules/landing/components/sections/SectionFeaturesImages.vue.js.map +1 -1
  251. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +2 -2
  252. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js.map +1 -1
  253. package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.js +1 -1
  254. package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.js.map +1 -1
  255. package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.js +2 -2
  256. package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.js.map +1 -1
  257. package/dist/martyrs/src/modules/landing/components/sections/SectionOverview.vue.js +1 -1
  258. package/dist/martyrs/src/modules/landing/components/sections/SectionOverview.vue.js.map +1 -1
  259. package/dist/martyrs/src/modules/landing/components/sections/SectionRoadmap.vue.js +2 -2
  260. package/dist/martyrs/src/modules/landing/components/sections/SectionRoadmap.vue.js.map +1 -1
  261. package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.js +1 -1
  262. package/dist/martyrs/src/modules/landing/components/sections/SubscribeNewsletter.vue.js.map +1 -1
  263. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +3 -3
  264. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js.map +1 -1
  265. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +2 -2
  266. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js.map +1 -1
  267. package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js +2 -2
  268. package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js.map +1 -1
  269. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +2 -2
  270. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js.map +1 -1
  271. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +2 -2
  272. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js.map +1 -1
  273. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +6 -6
  274. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js.map +1 -1
  275. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +2 -2
  276. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js.map +1 -1
  277. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
  278. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js.map +1 -1
  279. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +5 -5
  280. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js.map +1 -1
  281. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +3 -3
  282. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js.map +1 -1
  283. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +8 -8
  284. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -1
  285. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +5 -5
  286. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js.map +1 -1
  287. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +11 -11
  288. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -1
  289. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +3 -3
  290. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js.map +1 -1
  291. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +11 -11
  292. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -1
  293. package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +4 -4
  294. package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js.map +1 -1
  295. package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.js +2 -2
  296. package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.js.map +1 -1
  297. package/dist/martyrs/src/modules/notifications/components/sections/NotificationPreferences.vue.js +162 -68
  298. package/dist/martyrs/src/modules/notifications/components/sections/NotificationPreferences.vue.js.map +1 -1
  299. package/dist/martyrs/src/modules/notifications/notifications.client.js +181 -17
  300. package/dist/martyrs/src/modules/notifications/notifications.client.js.map +1 -1
  301. package/dist/martyrs/src/modules/notifications/router/notifications.backoffice.router.js +21 -0
  302. package/dist/martyrs/src/modules/notifications/router/notifications.backoffice.router.js.map +1 -0
  303. package/dist/martyrs/src/modules/notifications/router/notifications.router.js +13 -42
  304. package/dist/martyrs/src/modules/notifications/router/notifications.router.js.map +1 -1
  305. package/dist/martyrs/src/modules/notifications/store/notifications.store.js +66 -1
  306. package/dist/martyrs/src/modules/notifications/store/notifications.store.js.map +1 -1
  307. package/dist/martyrs/src/modules/orders/components/blocks/CardApplication.vue.js +9 -7
  308. package/dist/martyrs/src/modules/orders/components/blocks/CardApplication.vue.js.map +1 -1
  309. package/dist/martyrs/src/modules/orders/components/blocks/CardCustomer.vue.js +11 -9
  310. package/dist/martyrs/src/modules/orders/components/blocks/CardCustomer.vue.js.map +1 -1
  311. package/dist/martyrs/src/modules/orders/components/blocks/CardOrder.vue.js +9 -9
  312. package/dist/martyrs/src/modules/orders/components/blocks/CardOrder.vue.js.map +1 -1
  313. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js +66 -19
  314. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js.map +1 -1
  315. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.js +29 -27
  316. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderItem.vue.js.map +1 -1
  317. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js +7 -12
  318. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js.map +1 -1
  319. package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js +1 -1
  320. package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js.map +1 -1
  321. package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.js +4 -4
  322. package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.js.map +1 -1
  323. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +1 -1
  324. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js.map +1 -1
  325. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +46 -25
  326. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js.map +1 -1
  327. package/dist/martyrs/src/modules/orders/components/pages/Applications.vue.js +2 -2
  328. package/dist/martyrs/src/modules/orders/components/pages/Applications.vue.js.map +1 -1
  329. package/dist/martyrs/src/modules/orders/components/pages/Customers.vue.js +54 -38
  330. package/dist/martyrs/src/modules/orders/components/pages/Customers.vue.js.map +1 -1
  331. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +454 -139
  332. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js.map +1 -1
  333. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +2 -1
  334. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js.map +1 -1
  335. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +141 -68
  336. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js.map +1 -1
  337. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +38 -32
  338. package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js.map +1 -1
  339. package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.js +1 -1
  340. package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.js.map +1 -1
  341. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +4 -4
  342. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js.map +1 -1
  343. package/dist/martyrs/src/modules/orders/components/sections/AskToLogin.vue.js +1 -1
  344. package/dist/martyrs/src/modules/orders/components/sections/AskToLogin.vue.js.map +1 -1
  345. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +167 -95
  346. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js.map +1 -1
  347. package/dist/martyrs/src/modules/orders/orders.client.js +22 -20
  348. package/dist/martyrs/src/modules/orders/orders.client.js.map +1 -1
  349. package/dist/martyrs/src/modules/orders/store/orders.js +3 -5
  350. package/dist/martyrs/src/modules/orders/store/orders.js.map +1 -1
  351. package/dist/martyrs/src/modules/orders/store/shopcart.js +5 -5
  352. package/dist/martyrs/src/modules/orders/store/shopcart.js.map +1 -1
  353. package/dist/martyrs/src/modules/orders/utils/rent-price.js +60 -0
  354. package/dist/martyrs/src/modules/orders/utils/rent-price.js.map +1 -0
  355. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +2 -2
  356. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +45 -55
  357. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js.map +1 -1
  358. package/dist/martyrs/src/modules/organizations/components/blocks/EmptyState.vue.js +1 -1
  359. package/dist/martyrs/src/modules/organizations/components/blocks/Rating.vue.js +1 -1
  360. package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.js +2 -2
  361. package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.js.map +1 -1
  362. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  363. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js.map +1 -1
  364. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +3 -3
  365. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js.map +1 -1
  366. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +1 -1
  367. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js.map +1 -1
  368. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +1 -1
  369. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js.map +1 -1
  370. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +2 -2
  371. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js.map +1 -1
  372. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +8 -8
  373. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js.map +1 -1
  374. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +216 -83
  375. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
  376. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +35 -25
  377. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
  378. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +3 -2
  379. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js.map +1 -1
  380. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +2 -2
  381. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js.map +1 -1
  382. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +2 -2
  383. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js.map +1 -1
  384. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js +20 -18
  385. package/dist/martyrs/src/modules/organizations/configs/navigation.organization.config.js.map +1 -1
  386. package/dist/martyrs/src/modules/organizations/organizations.client.js +39 -33
  387. package/dist/martyrs/src/modules/organizations/organizations.client.js.map +1 -1
  388. package/dist/martyrs/src/modules/organizations/router/organizations.backoffice.router.js +81 -0
  389. package/dist/martyrs/src/modules/organizations/router/organizations.backoffice.router.js.map +1 -1
  390. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
  391. package/dist/martyrs/src/modules/pages/views/components/pages/Pages.vue.js +1 -1
  392. package/dist/martyrs/src/modules/pages/views/components/pages/Pages.vue.js.map +1 -1
  393. package/dist/martyrs/src/modules/pages/views/router/pages.router.js +2 -2
  394. package/dist/martyrs/src/modules/pages/views/router/pages.router.js.map +1 -1
  395. package/dist/martyrs/src/modules/products/components/blocks/CardPosition.vue.js +1 -1
  396. package/dist/martyrs/src/modules/products/components/blocks/CardPosition.vue.js.map +1 -1
  397. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js +2 -2
  398. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js.map +1 -1
  399. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +3 -3
  400. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js.map +1 -1
  401. package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.js +2 -2
  402. package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.js.map +1 -1
  403. package/dist/martyrs/src/modules/products/components/blocks/ProductVariants.vue.js +3 -3
  404. package/dist/martyrs/src/modules/products/components/blocks/ProductVariants.vue.js.map +1 -1
  405. package/dist/martyrs/src/modules/products/components/elements/Price.vue.js +2 -2
  406. package/dist/martyrs/src/modules/products/components/elements/Price.vue.js.map +1 -1
  407. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +9 -25
  408. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js.map +1 -1
  409. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +34 -17
  410. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js.map +1 -1
  411. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +96 -96
  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.js +1 -1
  414. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js.map +1 -1
  415. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +2 -2
  416. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js.map +1 -1
  417. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +22 -9
  418. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js.map +1 -1
  419. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js +1 -1
  420. package/dist/martyrs/src/modules/products/components/sections/FilterProducts.vue.js.map +1 -1
  421. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
  422. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js.map +1 -1
  423. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +3 -3
  424. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js.map +1 -1
  425. package/dist/martyrs/src/modules/products/router/categories.router.js +2 -2
  426. package/dist/martyrs/src/modules/products/router/categories.router.js.map +1 -1
  427. package/dist/martyrs/src/modules/products/router/products.router.js +17 -3
  428. package/dist/martyrs/src/modules/products/router/products.router.js.map +1 -1
  429. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.js +11 -10
  430. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.js.map +1 -1
  431. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.js +197 -81
  432. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.js.map +1 -1
  433. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttHeaderCell.vue.js +2 -2
  434. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttHeaderCell.vue.js.map +1 -1
  435. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +2 -2
  436. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js.map +1 -1
  437. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +685 -80
  438. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js.map +1 -1
  439. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +68 -18
  440. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js.map +1 -1
  441. package/dist/martyrs/src/modules/rents/views/router/rents.router.js +3 -3
  442. package/dist/martyrs/src/modules/rents/views/router/rents.router.js.map +1 -1
  443. package/dist/martyrs/src/modules/rents/views/store/rents.store.js +1 -1
  444. package/dist/martyrs/src/modules/rents/views/store/rents.store.js.map +1 -1
  445. package/dist/martyrs/src/modules/reports/components/pages/BackofficeReports.vue.js +3 -3
  446. package/dist/martyrs/src/modules/reports/components/pages/BackofficeReports.vue.js.map +1 -1
  447. package/dist/martyrs/src/modules/reports/router/reports.router.js +1 -1
  448. package/dist/martyrs/src/modules/reports/router/reports.router.js.map +1 -1
  449. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +5 -5
  450. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js.map +1 -1
  451. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
  452. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js +3 -3
  453. package/dist/martyrs/src/modules/spots/components/pages/Spot.vue.js.map +1 -1
  454. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +9 -7
  455. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js.map +1 -1
  456. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js +29 -37
  457. package/dist/martyrs/src/modules/spots/components/pages/Spots.vue.js.map +1 -1
  458. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +8 -8
  459. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js.map +1 -1
  460. package/dist/martyrs/src/modules/spots/router/spots.router.js +3 -3
  461. package/dist/martyrs/src/modules/spots/router/spots.router.js.map +1 -1
  462. package/dist/martyrs/src/modules/wallet/views/components/elements/ConnectMetamask.vue.js +3 -3
  463. package/dist/martyrs/src/modules/wallet/views/components/elements/ConnectMetamask.vue.js.map +1 -1
  464. package/dist/martyrs/src/modules/wallet/views/components/pages/Payments.vue.js +1 -1
  465. package/dist/martyrs/src/modules/wallet/views/components/pages/Payments.vue.js.map +1 -1
  466. package/dist/martyrs/src/modules/wallet/views/router/wallet.router.js +1 -1
  467. package/dist/martyrs/src/modules/wallet/views/router/wallet.router.js.map +1 -1
  468. package/dist/martyrs.es10.js +59 -57
  469. package/dist/martyrs.es106.js +2 -2
  470. package/dist/martyrs.es11.js +31 -30
  471. package/dist/martyrs.es113.js +22 -166
  472. package/dist/martyrs.es114.js +4 -457
  473. package/dist/martyrs.es115.js +8 -40
  474. package/dist/martyrs.es116.js +166 -9
  475. package/dist/martyrs.es117.js +451 -43
  476. package/dist/martyrs.es118.js +38 -10
  477. package/dist/martyrs.es119.js +9 -44
  478. package/dist/martyrs.es12.js +8 -9
  479. package/dist/martyrs.es120.js +49 -4
  480. package/dist/martyrs.es121.js +10 -127
  481. package/dist/martyrs.es122.js +42 -98
  482. package/dist/martyrs.es123.js +4 -86
  483. package/dist/martyrs.es124.js +120 -29
  484. package/dist/martyrs.es125.js +99 -10
  485. package/dist/martyrs.es126.js +71 -24
  486. package/dist/martyrs.es127.js +37 -8
  487. package/dist/martyrs.es128.js +11 -22
  488. package/dist/martyrs.es129.js +39 -4
  489. package/dist/martyrs.es13.js +22 -19
  490. package/dist/martyrs.es130.js +9 -8
  491. package/dist/martyrs.es131.js +7 -7
  492. package/dist/martyrs.es132.js +2 -2
  493. package/dist/martyrs.es133.js +1 -1
  494. package/dist/martyrs.es135.js +1 -1
  495. package/dist/martyrs.es137.js +1 -1
  496. package/dist/martyrs.es138.js +7 -8
  497. package/dist/martyrs.es139.js +8 -7
  498. package/dist/martyrs.es14.js +2 -2
  499. package/dist/martyrs.es140.js +2 -2
  500. package/dist/martyrs.es144.js +10 -29
  501. package/dist/martyrs.es145.js +29 -10
  502. package/dist/martyrs.es146.js +2 -2
  503. package/dist/martyrs.es147.js +2 -2
  504. package/dist/martyrs.es149.js +1 -1
  505. package/dist/martyrs.es2.js +31 -30
  506. package/dist/martyrs.es22.js +16 -16
  507. package/dist/martyrs.es23.js +8 -8
  508. package/dist/martyrs.es24.js +9 -9
  509. package/dist/martyrs.es26.js +9 -11
  510. package/dist/martyrs.es27.js +9 -9
  511. package/dist/martyrs.es28.js +1 -1
  512. package/dist/martyrs.es29.js +5 -5
  513. package/dist/martyrs.es3.js +1 -1
  514. package/dist/martyrs.es38.js +1 -1
  515. package/dist/martyrs.es4.js +12 -12
  516. package/dist/martyrs.es41.js +34 -224
  517. package/dist/martyrs.es5.js +251 -238
  518. package/dist/martyrs.es61.js +33 -26
  519. package/dist/martyrs.es74.js +7 -7
  520. package/dist/martyrs.es76.js +12 -12
  521. package/dist/martyrs.es8.js +31 -31
  522. package/dist/music.server.js +3 -3
  523. package/dist/node_modules/.pnpm/@googlemaps_js-api-loader@2.0.2/node_modules/@googlemaps/js-api-loader/dist/index.js +90 -0
  524. package/dist/node_modules/.pnpm/@googlemaps_js-api-loader@2.0.2/node_modules/@googlemaps/js-api-loader/dist/index.js.map +1 -0
  525. package/dist/notifications.server.js +255 -23
  526. package/dist/orders.server.js +674 -136
  527. package/dist/organizations.server.js +11 -6
  528. package/dist/products.server.js +68 -7
  529. package/dist/{queryProcessor-C_5Iipam.js → queryProcessor-B2FCngFP.js} +3 -2
  530. package/dist/rents.server.js +183 -7
  531. package/dist/{socials.schema-DxnnaBgO.js → socials.schema-C3RjkqJv.js} +4 -0
  532. package/dist/spots.server.js +1 -1
  533. package/dist/style.css +292 -204
  534. package/dist/{tickets.controller-DdF85W-i.js → tickets.controller-Dpzf4kQx.js} +1 -1
  535. package/dist/wallet.server.js +2 -2
  536. package/package.json +5 -3
  537. package/src/builder/modes/ssr.rspack.dev.js +2 -0
  538. package/src/builder/rspack/rspack.config.ssr.client.js +58 -1
  539. package/src/builder/ssr/asset-resolver.js +1 -1
  540. package/src/builder/templates/page.js +2 -0
  541. package/src/components/Address/Address.vue +16 -16
  542. package/src/components/Button/Button.vue +0 -1
  543. package/src/components/ButtonSegmented/ButtonSegmented.vue +1 -1
  544. package/src/components/Calendar/Calendar.vue +141 -118
  545. package/src/components/Chart/Chart.vue +216 -0
  546. package/src/components/Checkbox/Checkbox.vue +1 -1
  547. package/src/components/Chips/Chips.vue +4 -5
  548. package/src/components/Countdown/Countdown.vue +5 -5
  549. package/src/components/DatePicker/DatePicker.vue +2 -2
  550. package/src/components/EditImages/EditImages.vue +3 -3
  551. package/src/components/EmptyState/EmptyState.vue +1 -1
  552. package/src/components/Feed/Feed.vue +5 -0
  553. package/src/components/Field/Field.vue +3 -3
  554. package/src/components/FieldDate/FieldDate.vue +2 -2
  555. package/src/components/LocationMarker/LocationMarker.vue +28 -21
  556. package/src/components/Map/Map.vue +20 -15
  557. package/src/components/Popup/Popup.vue +3 -3
  558. package/src/components/Radio/Radio.vue +2 -2
  559. package/src/components/Select/Select.vue +1 -1
  560. package/src/components/Status/Snack.vue +1 -1
  561. package/src/components/Status/Status.vue +1 -1
  562. package/src/components/Table/Table.vue +16 -1
  563. package/src/components/Upload/Upload.vue +1 -1
  564. package/src/components/UploadImage/UploadImage.vue +1 -1
  565. package/src/components/UploadImageMultiple/UploadImageMultiple.vue +1 -1
  566. package/src/jit/rules.js +4 -0
  567. package/src/modules/TASKS.MD +16 -3
  568. package/src/modules/auth/auth.client.js +18 -3
  569. package/src/modules/auth/controllers/routes/users.routes.js +18 -0
  570. package/src/modules/auth/controllers/services/auth.service.js +3 -3
  571. package/src/modules/auth/controllers/services/users.service.js +34 -5
  572. package/src/modules/auth/views/components/blocks/OtpDialog.vue +4 -4
  573. package/src/modules/auth/views/components/blocks/PopupAuth.vue +1 -1
  574. package/src/modules/auth/views/components/blocks/SidebarUserCard.vue +95 -0
  575. package/src/modules/auth/views/components/pages/BackofficeUsers.vue +337 -0
  576. package/src/modules/auth/views/components/pages/Invite.vue +1 -1
  577. package/src/modules/auth/views/components/pages/Profile.vue +1 -1
  578. package/src/modules/auth/views/components/pages/ProfileEdit.vue +23 -14
  579. package/src/modules/auth/views/components/pages/ProfileEditAccount.vue +45 -26
  580. package/src/modules/auth/views/components/pages/ProfileEditSidebar.vue +8 -7
  581. package/src/modules/auth/views/components/pages/ResetPassword.vue +4 -4
  582. package/src/modules/auth/views/components/pages/SignUp.vue +3 -3
  583. package/src/modules/auth/views/components/pages/UserDashboard.vue +8 -5
  584. package/src/modules/auth/views/components/sections/FeaturedUsers.vue +1 -1
  585. package/src/modules/auth/views/components/sections/SliderFeatures.vue +1 -1
  586. package/src/modules/auth/views/middlewares/auth.validation.js +7 -2
  587. package/src/modules/auth/views/router/users.backoffice.router.js +39 -0
  588. package/src/modules/auth/views/store/auth.js +2 -2
  589. package/src/modules/backoffice/components/admin/Backcalls.vue +2 -2
  590. package/src/modules/backoffice/components/admin/Dashboard.sublime-workspace +1 -1
  591. package/src/modules/backoffice/components/admin/FastOrders.vue +3 -3
  592. package/src/modules/backoffice/components/admin/UserEdit.vue +1 -1
  593. package/src/modules/backoffice/components/pages/Dashboard.vue +102 -139
  594. package/src/modules/backoffice/configs/navigation.backoffice.config.js +91 -29
  595. package/src/modules/backoffice/router/backoffice.router.js +7 -1
  596. package/src/modules/chats/components/blocks/ChatMessage.vue +1 -1
  597. package/src/modules/chats/components/sections/ChatWindow.vue +1 -1
  598. package/src/modules/community/community.client.js +4 -4
  599. package/src/modules/community/components/blocks/CardBlogpost.vue +1 -1
  600. package/src/modules/community/components/layouts/Community.vue +4 -4
  601. package/src/modules/community/components/sections/Comment.vue +1 -1
  602. package/src/modules/constructor/components/elements/ImageUpload.vue +1 -1
  603. package/src/modules/core/TASK.MD +2 -2
  604. package/src/modules/core/controllers/classes/abac/abac.core.js +1 -0
  605. package/src/modules/core/controllers/classes/core.websocket.js +0 -2
  606. package/src/modules/core/controllers/classes/crud/crud.core.js +6 -0
  607. package/src/modules/core/controllers/classes/crud/crud.service.js +6 -0
  608. package/src/modules/core/controllers/utils/mailing.js +35 -26
  609. package/src/modules/core/controllers/utils/queryProcessor.js +4 -2
  610. package/src/modules/core/core.client.js +1 -0
  611. package/src/modules/core/models/schemas/embedding.schema.js +8 -0
  612. package/src/modules/core/models/schemas/socials.schema.js +4 -0
  613. package/src/modules/core/sw.js +448 -0
  614. package/src/modules/core/views/classes/core.app.js +37 -13
  615. package/src/modules/core/views/classes/module.manager.js +3 -1
  616. package/src/modules/core/views/components/blocks/AlertDialog.vue +1 -1
  617. package/src/modules/core/views/components/blocks/BlockSearch.vue +1 -1
  618. package/src/modules/core/views/components/blocks/BlockSlider.vue +96 -0
  619. package/src/modules/core/views/components/blocks/CardHeader.vue +2 -2
  620. package/src/modules/core/views/components/blocks/CardStat.vue +4 -18
  621. package/src/modules/{auth → core}/views/components/blocks/CardUser.vue +45 -20
  622. package/src/modules/core/views/components/blocks/HelpCard.vue +1 -1
  623. package/src/modules/core/views/components/blocks/PopupAuth.vue +1 -1
  624. package/src/modules/core/views/components/blocks/PopupDateSelector.vue +41 -24
  625. package/src/modules/core/views/components/layouts/Client.vue +1 -1
  626. package/src/modules/core/views/components/pages/404.vue +5 -5
  627. package/src/modules/core/views/components/partials/BottomNavigationBar.vue +5 -5
  628. package/src/modules/core/views/components/partials/CitySelection.vue +2 -2
  629. package/src/modules/core/views/components/partials/Footer.centered.vue +2 -2
  630. package/src/modules/core/views/components/partials/Footer.vue +2 -2
  631. package/src/modules/core/views/components/partials/Header.vue +3 -3
  632. package/src/modules/core/views/components/partials/LocationSelection.vue +1 -1
  633. package/src/modules/core/views/components/partials/Navigation.vue +1 -1
  634. package/src/modules/core/views/components/sections/Filters.vue +2 -2
  635. package/src/modules/core/views/components/sections/SectionPageTitle.vue +2 -2
  636. package/src/modules/core/views/components/sections/Walkthrough.vue +6 -6
  637. package/src/modules/core/views/mixins/mixins.js +17 -0
  638. package/src/modules/core/views/plugins/date-picker.plugin.js +8 -5
  639. package/src/modules/core/views/store/core.store.js +5 -0
  640. package/src/modules/core/views/utils/vue-app-renderer.js +5 -0
  641. package/src/modules/events/components/pages/EditEventTickets.vue +9 -9
  642. package/src/modules/events/components/pages/Event.vue +2 -2
  643. package/src/modules/events/components/sections/EditTickets.vue +1 -1
  644. package/src/modules/events/components/sections/SelectDate.vue +1 -1
  645. package/src/modules/events/events.client.js +4 -4
  646. package/src/modules/gallery/components/sections/BackofficeGallery.vue +1 -1
  647. package/src/modules/gallery/router/gallery.router.js +3 -3
  648. package/src/modules/governance/middlewares/sprints.verifier.js +3 -3
  649. package/src/modules/governance/middlewares/tasks.verifier.js +3 -3
  650. package/src/modules/governance/models/sprint.model.js +1 -1
  651. package/src/modules/governance/models/task.model.js +1 -1
  652. package/src/modules/governance/reactcode/src/components/TaskStatusBadge.tsx +1 -1
  653. package/src/modules/governance/views/components/blocks/CardInitiativeItem.vue +3 -3
  654. package/src/modules/governance/views/components/blocks/CardSprintItem.vue +4 -4
  655. package/src/modules/governance/views/components/blocks/CardTaskItem.vue +2 -2
  656. package/src/modules/governance/views/components/blocks/CardVotingItem.vue +3 -3
  657. package/src/modules/governance/views/components/pages/Initiatives.vue +3 -3
  658. package/src/modules/governance/views/components/partials/TaskStatusBadge.vue +1 -1
  659. package/src/modules/governance/views/components/sections/FormSprintDetails.vue +1 -1
  660. package/src/modules/governance/views/components/sections/FormTaskDetails.vue +1 -1
  661. package/src/modules/governance/views/router/governance.router.js +3 -3
  662. package/src/modules/icons/components/IconSearchPopup.vue +1 -1
  663. package/src/modules/icons/entities/IconApplications.vue +14 -0
  664. package/src/modules/icons/entities/IconCustomers.vue +14 -0
  665. package/src/modules/icons/entities/IconUsers.vue +14 -0
  666. package/src/modules/inventory/components/forms/AdjustmentForm.vue +2 -2
  667. package/src/modules/inventory/components/forms/ColumnSettingsMenu.vue +2 -2
  668. package/src/modules/inventory/components/forms/HistoryView.vue +1 -1
  669. package/src/modules/inventory/components/forms/StockAlertsForm.vue +3 -3
  670. package/src/modules/inventory/components/pages/Inventory.vue +278 -159
  671. package/src/modules/inventory/components/pages/InventoryEdit.vue +2 -2
  672. package/src/modules/inventory/inventory.client.js +4 -4
  673. package/src/modules/inventory/models/stock.audit.model.js +1 -1
  674. package/src/modules/inventory/router/inventory.router.js +12 -0
  675. package/src/modules/landing/components/sections/SectionEarn.vue +3 -3
  676. package/src/modules/landing/components/sections/SectionFeature.vue +1 -1
  677. package/src/modules/landing/components/sections/SectionFeatures.vue +1 -1
  678. package/src/modules/landing/components/sections/SectionFeaturesImages.vue +2 -2
  679. package/src/modules/landing/components/sections/SectionGuide.vue +2 -2
  680. package/src/modules/landing/components/sections/SectionHeroToken.vue +1 -1
  681. package/src/modules/landing/components/sections/SectionHeroVideo.vue +1 -1
  682. package/src/modules/landing/components/sections/SectionMobileApp.vue +2 -2
  683. package/src/modules/landing/components/sections/SectionOverview.vue +1 -1
  684. package/src/modules/landing/components/sections/SectionRoadmap.vue +1 -1
  685. package/src/modules/landing/components/sections/SubscribeNewsletter.vue +1 -1
  686. package/src/modules/marketplace/views/components/sections/SectionMenu.vue +2 -2
  687. package/src/modules/music/components/SidebarMusic.vue +1 -1
  688. package/src/modules/music/components/cards/AlbumCard.vue +1 -1
  689. package/src/modules/music/components/cards/ArtistCard.vue +1 -1
  690. package/src/modules/music/components/cards/ArtistCardSmall.vue +1 -1
  691. package/src/modules/music/components/cards/PlaylistCard.vue +1 -1
  692. package/src/modules/music/components/cards/TrackListCard.vue +6 -6
  693. package/src/modules/music/components/forms/AlbumForm.vue +2 -2
  694. package/src/modules/music/components/forms/ArtistForm.vue +1 -1
  695. package/src/modules/music/components/forms/PlaylistForm.vue +5 -5
  696. package/src/modules/music/components/forms/TrackForm.vue +3 -3
  697. package/src/modules/music/components/pages/Album.vue +8 -8
  698. package/src/modules/music/components/pages/Artist.vue +5 -5
  699. package/src/modules/music/components/pages/Playlist.vue +11 -11
  700. package/src/modules/music/components/pages/SearchResults.vue +2 -2
  701. package/src/modules/music/components/pages/Track.vue +11 -11
  702. package/src/modules/music/components/player/FullscreenPlayer.vue +3 -3
  703. package/src/modules/music/components/player/TrackProgress.vue +1 -1
  704. package/src/modules/notifications/components/sections/NotificationPreferences.vue +182 -52
  705. package/src/modules/notifications/controllers/notifications.controller.js +242 -17
  706. package/src/modules/notifications/models/notification-preference.model.js +4 -0
  707. package/src/modules/notifications/notifications.client.js +213 -20
  708. package/src/modules/notifications/router/notifications.backoffice.router.js +16 -0
  709. package/src/modules/notifications/router/notifications.router.js +13 -45
  710. package/src/modules/notifications/routes/notifications.routes.js +9 -0
  711. package/src/modules/notifications/services/notification.service.js +33 -9
  712. package/src/modules/notifications/services/telegram.service.js +2 -2
  713. package/src/modules/notifications/services/web-push.service.js +6 -2
  714. package/src/modules/notifications/store/notifications.store.js +69 -0
  715. package/src/modules/orders/components/blocks/CardApplication.vue +9 -6
  716. package/src/modules/orders/components/blocks/CardCustomer.vue +10 -7
  717. package/src/modules/orders/components/blocks/CardOrder.vue +8 -8
  718. package/src/modules/orders/components/blocks/CardOrderBackoffice.vue +58 -12
  719. package/src/modules/orders/components/blocks/CardOrderItem.vue +31 -28
  720. package/src/modules/orders/components/blocks/CardOrderUser.vue +7 -12
  721. package/src/modules/orders/components/blocks/CardOrderVar1.vue +3 -3
  722. package/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue +1 -1
  723. package/src/modules/orders/components/elements/PriceTotal.vue +4 -4
  724. package/src/modules/orders/components/forms/FormApplicationDetails.vue +1 -1
  725. package/src/modules/orders/components/forms/FormSelectCustomer.vue +48 -25
  726. package/src/modules/orders/components/pages/Applications.vue +2 -2
  727. package/src/modules/orders/components/pages/Customers.vue +35 -23
  728. package/src/modules/orders/components/pages/OrderBackoffice.vue +780 -393
  729. package/src/modules/orders/components/pages/OrderCreate.vue +5 -4
  730. package/src/modules/orders/components/pages/OrderCreateBackoffice.vue +112 -42
  731. package/src/modules/orders/components/pages/Orders.vue +20 -19
  732. package/src/modules/orders/components/pages/Orders_refact.vue +3 -3
  733. package/src/modules/orders/components/partials/ShopCart.vue +1 -1
  734. package/src/modules/orders/components/sections/ApplicationDetails.vue +2 -2
  735. package/src/modules/orders/components/sections/AskToLogin.vue +1 -1
  736. package/src/modules/orders/components/sections/CustomerDetails.vue +130 -64
  737. package/src/modules/orders/controllers/orders.controller.js +463 -134
  738. package/src/modules/orders/middlewares/applications.verifier.js +3 -3
  739. package/src/modules/orders/middlewares/customers.verifier.js +4 -0
  740. package/src/modules/orders/middlewares/orders.verifier.js +187 -0
  741. package/src/modules/orders/models/customer.model.js +2 -0
  742. package/src/modules/orders/models/order.model.js +20 -2
  743. package/src/modules/orders/orders.client.js +21 -19
  744. package/src/modules/orders/routes/applications.routes.js +13 -3
  745. package/src/modules/orders/routes/customers.routes.js +2 -0
  746. package/src/modules/orders/routes/orders.routes.js +46 -4
  747. package/src/modules/orders/store/orders.js +4 -7
  748. package/src/modules/orders/store/shopcart.js +6 -7
  749. package/src/modules/orders/utils/rent-price.js +90 -0
  750. package/src/modules/organizations/components/blocks/CardDepartment.vue +1 -1
  751. package/src/modules/organizations/components/blocks/CardOrganization.vue +30 -33
  752. package/src/modules/organizations/components/blocks/EmptyState.vue +1 -1
  753. package/src/modules/organizations/components/blocks/Rating.vue +1 -1
  754. package/src/modules/organizations/components/blocks/Socials.vue +2 -2
  755. package/src/modules/organizations/components/elements/ButtonToggleMembership.vue +1 -1
  756. package/src/modules/organizations/components/forms/AddExistingMembersForm.vue +3 -3
  757. package/src/modules/organizations/components/forms/DepartmentForm.vue +1 -1
  758. package/src/modules/organizations/components/forms/InviteForm.vue +1 -1
  759. package/src/modules/organizations/components/pages/Department.vue +2 -2
  760. package/src/modules/organizations/components/pages/DepartmentEdit.vue +1 -1
  761. package/src/modules/organizations/components/pages/Members.vue +8 -8
  762. package/src/modules/organizations/components/pages/Organization.vue +232 -124
  763. package/src/modules/organizations/components/pages/OrganizationCreate.vue +3 -3
  764. package/src/modules/organizations/components/pages/OrganizationDocuments.vue +1 -1
  765. package/src/modules/organizations/components/pages/OrganizationEdit.vue +15 -6
  766. package/src/modules/organizations/components/pages/Organizations.vue +3 -2
  767. package/src/modules/organizations/components/sections/Documents.vue +1 -1
  768. package/src/modules/organizations/components/sections/MembersAdd.vue +2 -2
  769. package/src/modules/organizations/configs/navigation.organization.config.js +34 -26
  770. package/src/modules/organizations/controllers/organizations.controller.js +8 -3
  771. package/src/modules/organizations/models/organization.model.js +1 -0
  772. package/src/modules/organizations/organizations.client.js +39 -33
  773. package/src/modules/organizations/router/organizations.backoffice.router.js +67 -0
  774. package/src/modules/pages/views/components/pages/Pages.vue +1 -1
  775. package/src/modules/pages/views/router/pages.router.js +2 -2
  776. package/src/modules/products/components/blocks/CardPosition.vue +2 -2
  777. package/src/modules/products/components/blocks/CardProduct.vue +2 -2
  778. package/src/modules/products/components/blocks/ProductDiscounts.vue +1 -1
  779. package/src/modules/products/components/blocks/ProductImages.vue +1 -1
  780. package/src/modules/products/components/blocks/ProductVariants.vue +3 -3
  781. package/src/modules/products/components/elements/Price.vue +2 -2
  782. package/src/modules/products/components/forms/ColumnSettingsMenu.vue +2 -2
  783. package/src/modules/products/components/forms/ReorderSettingsForm.vue +3 -3
  784. package/src/modules/products/components/forms/StockAuditForm.vue +2 -2
  785. package/src/modules/products/components/forms/StockHistoryView.vue +1 -1
  786. package/src/modules/products/components/pages/Categories.vue +9 -20
  787. package/src/modules/products/components/pages/ProductEdit.vue +19 -3
  788. package/src/modules/products/components/pages/Products.vue +20 -19
  789. package/src/modules/products/components/sections/EditAttributes.vue +1 -1
  790. package/src/modules/products/components/sections/EditCategories.vue +1 -1
  791. package/src/modules/products/components/sections/EditDiscounts.vue +2 -2
  792. package/src/modules/products/components/sections/EditVariants.vue +14 -2
  793. package/src/modules/products/components/sections/FilterProducts.vue +1 -1
  794. package/src/modules/products/components/sections/ProductConfigurator.vue +1 -1
  795. package/src/modules/products/components/sections/SectionProduct.vue +3 -3
  796. package/src/modules/products/controllers/products.controller.js +50 -5
  797. package/src/modules/products/experiments/product-recommendation/components/HeroRecommendation.vue +2 -2
  798. package/src/modules/products/models/product.model.js +7 -0
  799. package/src/modules/products/models/variant.model.js +4 -0
  800. package/src/modules/products/router/categories.router.js +2 -2
  801. package/src/modules/products/router/products.router.js +14 -3
  802. package/src/modules/rents/controllers/routes/rents.routes.js +11 -0
  803. package/src/modules/rents/controllers/services/rents.services.js +193 -2
  804. package/src/modules/rents/models/rent.model.js +9 -0
  805. package/src/modules/rents/views/components/pages/Gant/GanttBar.vue +28 -11
  806. package/src/modules/rents/views/components/pages/Gant/GanttChart.vue +200 -40
  807. package/src/modules/rents/views/components/pages/Gant/GanttHeaderCell.vue +2 -2
  808. package/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue +2 -2
  809. package/src/modules/rents/views/components/pages/Rents.vue +641 -142
  810. package/src/modules/rents/views/components/pages/RentsEdit.vue +44 -4
  811. package/src/modules/rents/views/router/rents.router.js +3 -3
  812. package/src/modules/rents/views/store/rents.store.js +1 -1
  813. package/src/modules/reports/components/pages/BackofficeReports.vue +3 -3
  814. package/src/modules/reports/router/reports.router.js +1 -1
  815. package/src/modules/spots/components/blocks/CardSpot.vue +6 -6
  816. package/src/modules/spots/components/pages/Spot.vue +2 -2
  817. package/src/modules/spots/components/pages/SpotEdit.vue +8 -6
  818. package/src/modules/spots/components/pages/Spots.vue +18 -24
  819. package/src/modules/spots/components/sections/WorktimeEdit.vue +7 -7
  820. package/src/modules/spots/router/spots.router.js +3 -3
  821. package/src/modules/wallet/views/components/blocks/CashDeposit.vue +1 -1
  822. package/src/modules/wallet/views/components/elements/ConnectMetamask.vue +3 -3
  823. package/src/modules/wallet/views/components/pages/Payments.vue +1 -1
  824. package/src/modules/wallet/views/components/pages/Wallet.vue +4 -4
  825. package/src/modules/wallet/views/router/wallet.router.js +1 -1
  826. package/src/styles/layout.scss +1 -1
  827. package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +0 -1
  828. package/dist/martyrs/src/components/Tooltip/Tooltip.vue2.js.map +0 -1
  829. package/dist/martyrs/src/modules/icons/entities/IconCash.vue.js +0 -70
  830. package/dist/martyrs/src/modules/icons/entities/IconCash.vue.js.map +0 -1
  831. package/dist/node_modules/.pnpm/@googlemaps_js-api-loader@1.16.8/node_modules/@googlemaps/js-api-loader/dist/index.js +0 -336
  832. package/dist/node_modules/.pnpm/@googlemaps_js-api-loader@1.16.8/node_modules/@googlemaps/js-api-loader/dist/index.js.map +0 -1
  833. package/dist/node_modules/.pnpm/vue-draggable-next@2.2.1_sortablejs@1.15.6_vue@3.5.13_typescript@5.8.3_/node_modules/vue-draggable-next/dist/vue-draggable-next.esm-bundler.js.map +0 -1
@@ -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-regular mn-b-thin fw-medium d-block\">{{ discount.name || 'Unnamed discount' }}</p>\n <p class=\"fw-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.05]\">\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.05]\">\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 ws-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=\"fw-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=\"fw-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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"}
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 fw-medium d-block\">{{ discount.name || 'Unnamed discount' }}</p>\n <p class=\"fw-medium opacity-50\">\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 opacity-50\">\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.05]\">\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.05]\">\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 ws-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=\"fw-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=\"fw-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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"}
@@ -8,8 +8,9 @@ import Field from "../../../../components/Field/Field.vue.js";
8
8
  import Button from "../../../../components/Button/Button.vue2.js";
9
9
  import _sfc_main$6 from "../../../../components/Popup/Popup.vue.js";
10
10
  import Select from "../../../../components/Select/Select.vue.js";
11
+ import _sfc_main$8 from "../../../../components/Checkbox/Checkbox.vue.js";
11
12
  import _sfc_main$2 from "../../../../components/Feed/Feed.vue.js";
12
- import _sfc_main$8 from "../../../../components/EditImages/EditImages.vue2.js";
13
+ import _sfc_main$9 from "../../../../components/EditImages/EditImages.vue.js";
13
14
  import _sfc_main$7 from "./EditIngredients.vue.js";
14
15
  import PlaceholderImage from "../../../icons/placeholders/PlaceholderImage.vue.js";
15
16
  import _sfc_main$4 from "../../../icons/navigation/IconEdit.vue.js";
@@ -25,10 +26,10 @@ const _hoisted_6 = {
25
26
  key: 0,
26
27
  class: "t-small pd-thin mn-l-thin radius-thin bg-light"
27
28
  };
28
- const _hoisted_7 = { class: "fw-medium t-transp" };
29
+ const _hoisted_7 = { class: "fw-medium opacity-50" };
29
30
  const _hoisted_8 = {
30
31
  key: 0,
31
- class: "t-small t-transp"
32
+ class: "t-small opacity-50"
32
33
  };
33
34
  const _hoisted_9 = { class: "flex gap-thin" };
34
35
  const _hoisted_10 = { class: "cols-1 gap-thin o-y-scroll" };
@@ -76,6 +77,7 @@ const _sfc_main = {
76
77
  status: "published",
77
78
  ingredients: [],
78
79
  attributes: [],
80
+ showImages: false,
79
81
  owner: null,
80
82
  creator: null,
81
83
  product: null
@@ -103,6 +105,7 @@ const _sfc_main = {
103
105
  currentVariant.status = variant.status || "published";
104
106
  currentVariant.ingredients = [...variant.ingredients || []];
105
107
  currentVariant.attributes = (variant.attributes || []).map((attr) => ({ ...attr }));
108
+ currentVariant.showImages = variant.showImages || false;
106
109
  currentVariant.owner = variant.owner;
107
110
  currentVariant.creator = variant.creator;
108
111
  currentVariant.product = variant.product;
@@ -136,6 +139,7 @@ const _sfc_main = {
136
139
  currentVariant.status = "published";
137
140
  currentVariant.ingredients = [];
138
141
  currentVariant.attributes = [];
142
+ currentVariant.showImages = false;
139
143
  currentVariant.owner = null;
140
144
  currentVariant.creator = null;
141
145
  currentVariant.product = null;
@@ -157,6 +161,7 @@ const _sfc_main = {
157
161
  status: variant.status || "published",
158
162
  ingredients: (variant.ingredients || []).map((ing) => ({ ...ing })),
159
163
  attributes: (variant.attributes || []).map((attr) => ({ ...attr })),
164
+ showImages: variant.showImages || false,
160
165
  owner: {
161
166
  target: route.params._id || state$1.user._id,
162
167
  type: route.params._id ? "organization" : "user"
@@ -205,6 +210,7 @@ const _sfc_main = {
205
210
  status: currentVariant.status,
206
211
  ingredients: currentVariant.ingredients.map((ing) => ({ ...ing })),
207
212
  attributes: currentVariant.attributes.filter((attr) => attr.name || attr.value),
213
+ showImages: currentVariant.showImages,
208
214
  product: currentVariant.product
209
215
  };
210
216
  if (!editingVariant.value) {
@@ -389,7 +395,7 @@ const _sfc_main = {
389
395
  class: "w-100 bg-light radius-small pd-small"
390
396
  }, null, 8, ["field"])
391
397
  ]),
392
- _cache[13] || (_cache[13] = createElementVNode("div", { class: "fw-medium mn-t-small mn-b-small" }, "Attributes", -1)),
398
+ _cache[14] || (_cache[14] = createElementVNode("div", { class: "fw-medium mn-t-small mn-b-small" }, "Attributes", -1)),
393
399
  (openBlock(true), createElementBlock(Fragment, null, renderList(currentVariant.attributes, (attr, attrIndex) => {
394
400
  return openBlock(), createElementBlock("div", {
395
401
  class: "gap-micro flex-nowrap flex mn-b-small",
@@ -421,7 +427,7 @@ const _sfc_main = {
421
427
  showLoader: false,
422
428
  onClick: addAttribute
423
429
  }, {
424
- default: withCtx(() => _cache[11] || (_cache[11] = [
430
+ default: withCtx(() => _cache[12] || (_cache[12] = [
425
431
  createTextVNode(" Add Attribute ")
426
432
  ])),
427
433
  _: 1
@@ -455,15 +461,22 @@ const _sfc_main = {
455
461
  "onUpdate:ingredients": _cache[9] || (_cache[9] = ($event) => currentVariant.ingredients = $event)
456
462
  }, null, 8, ["ingredients"])
457
463
  ]),
458
- _cache[14] || (_cache[14] = createElementVNode("div", { class: "fw-medium mn-t-small mn-b-small" }, "Images", -1)),
464
+ _cache[15] || (_cache[15] = createElementVNode("div", { class: "fw-medium mn-t-small mn-b-small" }, "Images", -1)),
459
465
  createVNode(_sfc_main$8, {
466
+ radio: currentVariant.showImages,
467
+ "onUpdate:radio": _cache[10] || (_cache[10] = ($event) => currentVariant.showImages = $event),
468
+ label: "Show in variant selector",
469
+ class: "bg-light radius-small pd-small"
470
+ }, null, 8, ["radio"]),
471
+ currentVariant.showImages ? (openBlock(), createBlock(_sfc_main$9, {
472
+ key: 0,
460
473
  images: currentVariant.images || [],
461
474
  uploadPath: "variants",
462
475
  class: "bg-light pd-small radius-small",
463
- "onUpdate:images": _cache[10] || (_cache[10] = (newImages) => {
476
+ "onUpdate:images": _cache[11] || (_cache[11] = (newImages) => {
464
477
  currentVariant.images = newImages;
465
478
  })
466
- }, null, 8, ["images"]),
479
+ }, null, 8, ["images"])) : createCommentVNode("", true),
467
480
  createElementVNode("div", _hoisted_15, [
468
481
  createVNode(Button, {
469
482
  showSuccess: false,
@@ -471,7 +484,7 @@ const _sfc_main = {
471
484
  class: "bg-red t-white w-100",
472
485
  submit: closeVariantPopup
473
486
  }, {
474
- default: withCtx(() => _cache[12] || (_cache[12] = [
487
+ default: withCtx(() => _cache[13] || (_cache[13] = [
475
488
  createTextVNode(" Cancel ")
476
489
  ])),
477
490
  _: 1
@@ -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-regular fw-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=\"fw-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.05]\"\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.05]\"\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.05]\"\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=\"fw-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.05]\">\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=\"fw-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/core/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 fw-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=\"fw-medium opacity-50\">{{ returnCurrency() }}{{ variant.price }} per {{ variant.quantity }}{{ variant.unit }}</p>\n <p v-if=\"variant.ingredients?.length\" class=\"t-small opacity-50\">{{ 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.05]\"\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.05]\"\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.05]\"\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=\"fw-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.05]\">\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=\"fw-medium mn-t-small mn-b-small\">Images</div>\n <Checkbox\n v-model:radio=\"currentVariant.showImages\"\n label=\"Show in variant selector\"\n class=\"bg-light radius-small pd-small\"\n />\n <EditImages\n v-if=\"currentVariant.showImages\"\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 Checkbox from '@martyrs/src/components/Checkbox/Checkbox.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/core/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 showImages: false,\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.showImages = variant.showImages || false;\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.showImages = false;\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 showImages: variant.showImages || false,\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 showImages: currentVariant.showImages,\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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"}
@@ -136,7 +136,7 @@ const _sfc_main = {
136
136
  ]),
137
137
  _: 1
138
138
  }),
139
- _cache[4] || (_cache[4] = createElementVNode("hr", { class: "mn-b-small t-transp" }, null, -1)),
139
+ _cache[4] || (_cache[4] = createElementVNode("hr", { class: "mn-b-small opacity-50" }, null, -1)),
140
140
  createVNode(_sfc_main$1, {
141
141
  class: "radius-small o-hidden mn-b-small",
142
142
  status: false
@@ -1 +1 @@
1
- {"version":3,"file":"FilterProducts.vue.js","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 fw-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 fw-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 fw-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":["marketplace.state","categories.actions","categories.state"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFA,UAAM,QAAQ,SAAQ;AACtB,UAAM,SAAS,UAAS;AAKxB,QAAI,UAAU;AAAA,MACZ,QAAQ;AAAA,IACV;AAEsB,QAAI;AAAA,MACxB,YAAY,CAAA;AAAA,MACZ,QAAQ,CAAA;AAAA,MACR,UAAU,CAAA;AAAA,MACV,OAAO,CAAA;AAAA,IACT,CAAC;AAwBD,UAAM,MAAMA,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;AAEjB,cAAU,YAAY;AACpB,YAAMC,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;AACID,cAAkB,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;AAEEE,YAAiB,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,MAAM,QAAQ,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"FilterProducts.vue.js","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 fw-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 opacity-50\">\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 fw-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 fw-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":["marketplace.state","categories.actions","categories.state"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFA,UAAM,QAAQ,SAAQ;AACtB,UAAM,SAAS,UAAS;AAKxB,QAAI,UAAU;AAAA,MACZ,QAAQ;AAAA,IACV;AAEsB,QAAI;AAAA,MACxB,YAAY,CAAA;AAAA,MACZ,QAAQ,CAAA;AAAA,MACR,UAAU,CAAA;AAAA,MACV,OAAO,CAAA;AAAA,IACT,CAAC;AAwBD,UAAM,MAAMA,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;AAEjB,cAAU,YAAY;AACpB,YAAMC,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;AACID,cAAkB,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;AAEEE,YAAiB,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,MAAM,QAAQ,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -16,7 +16,7 @@ const _hoisted_4 = { class: "w-100" };
16
16
  const _hoisted_5 = { class: "flex flex-nowrap flex-v-center mn-b-thin" };
17
17
  const _hoisted_6 = {
18
18
  key: 0,
19
- class: "t-small t-transp mn-l-thin"
19
+ class: "t-small opacity-50 mn-l-thin"
20
20
  };
21
21
  const _hoisted_7 = {
22
22
  key: 0,
@@ -1 +1 @@
1
- {"version":3,"file":"ProductConfigurator.vue.js","sources":["../../../../../../../src/modules/products/components/sections/ProductConfigurator.vue"],"sourcesContent":["<template>\n <div v-if=\"productVariants?.length\" class=\"w-100\">\n <!-- Variants Selection Component -->\n <ProductVariants\n :productVariants=\"productVariants\"\n :productId=\"productId\"\n :productName=\"productName\"\n @variant-selected=\"handleVariantSelected\"\n @update-images=\"$emit('update-images', $event)\"\n />\n \n <!-- Discounts Component -->\n <ProductDiscounts\n :discounts=\"discounts\"\n :regularPrice=\"regularPrice\"\n :selectedVariant=\"selectedVariant\"\n :productVariants=\"productVariants\"\n @select-discount=\"handleDiscountSelected\"\n class=\"mn-b-medium\"\n />\n \n <!-- Показываем цену, если нет вариантов или не выбран ни один вариант -->\n <div class=\"flex-nowrap flex gap-thin\">\n <div class=\"\">\n <p class=\"fw-medium mn-b-thin\">Price</p>\n <Price \n :product=\"selectedVariant || productVariants[0]\"\n :variants=\"productVariants\" \n size=\"big\" \n class=\"flex gap-micro flex-center pd-small bg-second t-white w-max mn-b-medium\" \n />\n </div>\n \n \n <!-- Quantity Selection -->\n <div class=\"w-100\">\n <div class=\"flex flex-nowrap flex-v-center mn-b-thin\">\n <p class=\"fw-medium\">Quantity</p>\n <span v-if=\"selectedVariant\" class=\"t-small t-transp mn-l-thin\">\n (Max: {{ maxQuantity }})\n </span>\n </div>\n \n <QuantitySelector v-model=\"quantity\" :maxValue=\"maxQuantity\" />\n </div>\n </div>\n\n <!-- Out of stock notice -->\n <div v-if=\"selectedVariant && !selectedVariant.available\" class=\"mn-b-medium\">\n <div class=\"flex flex-nowrap gap-small pd-small bg-error-light radius-small t-error\">\n <span>Out of stock</span>\n </div>\n </div>\n\n <!-- Add to cart button -->\n <div class=\"w-100 mn-b-medium\">\n <Button\n :submit=\"isVariantAvailable ? addProductToCart : undefined\"\n :disabled=\"!isVariantAvailable\"\n class=\"cursor-pointer pd-medium radius-big w-100 bg-main button h-3r\"\n >\n <div v-if=\"isVariantAvailable\" class=\"gap-micro flex flex-center flex-nowrap\">\n <IconShopcartAdd class=\"i-medium\"/>\n <span class=\"ws-nowrap\">{{ t('addtoorder') }}</span>\n </div>\n <template v-else>\n <span v-if=\"!selectedVariant && productVariants.length > 1\">Select variant</span>\n <span v-else>Out of Stock</span>\n </template>\n </Button>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport IconShopcartAdd from '@martyrs/src/modules/icons/actions/IconShopcartAdd.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\n\nimport ProductVariants from '../blocks/ProductVariants.vue';\nimport ProductDiscounts from '../blocks/ProductDiscounts.vue';\nimport QuantitySelector from '../elements/QuantitySelector.vue';\n\nimport Price from '@martyrs/src/modules/products/components/elements/Price.vue'\n\nconst props = defineProps({\n productVariants: { type: Array, default: () => [] },\n productId: { type: String, required: true },\n productName: { type: String, required: true },\n discounts: { type: Array, default: () => [] },\n regularPrice: { type: String, required: true }\n});\n\nconst emits = defineEmits(['variant-selected', 'add-to-cart', 'update-images']);\nconst { t } = useI18n({ messages: { en: { addtoorder: 'Add to Cart' }, ru: { addtoorder: 'Добавить в корзину' } } });\n\nconst selectedVariant = ref(null);\nconst quantity = ref(1);\n\n// Computed properties\nconst isVariantAvailable = computed(() => \n selectedVariant.value ? selectedVariant.value.available :\n props.productVariants.length === 1 ? props.productVariants[0].available : false\n);\n\nconst maxQuantity = computed(() => \n selectedVariant.value ? selectedVariant.value.available : \n props.productVariants.length === 1 ? props.productVariants[0].available || 1 : 1\n);\n\n// Methods\nfunction handleVariantSelected(variant) {\n selectedVariant.value = variant;\n if (quantity.value > variant.available) quantity.value = variant.available;\n emits('variant-selected', variant);\n}\n\nfunction handleDiscountSelected(discount) {\n // Update quantity based on discount requirements\n if (discount.quantity && discount.quantity > quantity.value) {\n quantity.value = discount.quantity;\n }\n}\n\nfunction addProductToCart() {\n const variant = selectedVariant.value || \n (props.productVariants.length === 1 ? props.productVariants[0] : null);\n \n if (!variant || !variant.available || quantity.value > variant.available) return false;\n \n emits('add-to-cart', {\n variant: variant,\n quantity: quantity.value\n });\n \n return true;\n}\n</script>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsFA,UAAM,QAAQ;AAQd,UAAM,QAAQ;AACd,UAAM,EAAE,EAAC,IAAK,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,cAAa,GAAI,IAAI,EAAE,YAAY,qBAAoB,EAAE,EAAE,CAAE;AAEnH,UAAM,kBAAkB,IAAI,IAAI;AAChC,UAAM,WAAW,IAAI,CAAC;AAGtB,UAAM,qBAAqB;AAAA,MAAS,MAClC,gBAAgB,QAAQ,gBAAgB,MAAM,YAC9C,MAAM,gBAAgB,WAAW,IAAI,MAAM,gBAAgB,CAAC,EAAE,YAAY;AAAA,IAC5E;AAEA,UAAM,cAAc;AAAA,MAAS,MAC3B,gBAAgB,QAAQ,gBAAgB,MAAM,YAC9C,MAAM,gBAAgB,WAAW,IAAI,MAAM,gBAAgB,CAAC,EAAE,aAAa,IAAI;AAAA,IACjF;AAGA,aAAS,sBAAsB,SAAS;AACtC,sBAAgB,QAAQ;AACxB,UAAI,SAAS,QAAQ,QAAQ,UAAW,UAAS,QAAQ,QAAQ;AACjE,YAAM,oBAAoB,OAAO;AAAA,IACnC;AAEA,aAAS,uBAAuB,UAAU;AAExC,UAAI,SAAS,YAAY,SAAS,WAAW,SAAS,OAAO;AAC3D,iBAAS,QAAQ,SAAS;AAAA,MAC5B;AAAA,IACF;AAEA,aAAS,mBAAmB;AAC1B,YAAM,UAAU,gBAAgB,UAC7B,MAAM,gBAAgB,WAAW,IAAI,MAAM,gBAAgB,CAAC,IAAI;AAEnE,UAAI,CAAC,WAAW,CAAC,QAAQ,aAAa,SAAS,QAAQ,QAAQ,UAAW,QAAO;AAEjF,YAAM,eAAe;AAAA,QACnB;AAAA,QACA,UAAU,SAAS;AAAA,MACvB,CAAG;AAED,aAAO;AAAA,IACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ProductConfigurator.vue.js","sources":["../../../../../../../src/modules/products/components/sections/ProductConfigurator.vue"],"sourcesContent":["<template>\n <div v-if=\"productVariants?.length\" class=\"w-100\">\n <!-- Variants Selection Component -->\n <ProductVariants\n :productVariants=\"productVariants\"\n :productId=\"productId\"\n :productName=\"productName\"\n @variant-selected=\"handleVariantSelected\"\n @update-images=\"$emit('update-images', $event)\"\n />\n \n <!-- Discounts Component -->\n <ProductDiscounts\n :discounts=\"discounts\"\n :regularPrice=\"regularPrice\"\n :selectedVariant=\"selectedVariant\"\n :productVariants=\"productVariants\"\n @select-discount=\"handleDiscountSelected\"\n class=\"mn-b-medium\"\n />\n \n <!-- Показываем цену, если нет вариантов или не выбран ни один вариант -->\n <div class=\"flex-nowrap flex gap-thin\">\n <div class=\"\">\n <p class=\"fw-medium mn-b-thin\">Price</p>\n <Price \n :product=\"selectedVariant || productVariants[0]\"\n :variants=\"productVariants\" \n size=\"big\" \n class=\"flex gap-micro flex-center pd-small bg-second t-white w-max mn-b-medium\" \n />\n </div>\n \n \n <!-- Quantity Selection -->\n <div class=\"w-100\">\n <div class=\"flex flex-nowrap flex-v-center mn-b-thin\">\n <p class=\"fw-medium\">Quantity</p>\n <span v-if=\"selectedVariant\" class=\"t-small opacity-50 mn-l-thin\">\n (Max: {{ maxQuantity }})\n </span>\n </div>\n \n <QuantitySelector v-model=\"quantity\" :maxValue=\"maxQuantity\" />\n </div>\n </div>\n\n <!-- Out of stock notice -->\n <div v-if=\"selectedVariant && !selectedVariant.available\" class=\"mn-b-medium\">\n <div class=\"flex flex-nowrap gap-small pd-small bg-error-light radius-small t-error\">\n <span>Out of stock</span>\n </div>\n </div>\n\n <!-- Add to cart button -->\n <div class=\"w-100 mn-b-medium\">\n <Button\n :submit=\"isVariantAvailable ? addProductToCart : undefined\"\n :disabled=\"!isVariantAvailable\"\n class=\"cursor-pointer pd-medium radius-big w-100 bg-main button h-3r\"\n >\n <div v-if=\"isVariantAvailable\" class=\"gap-micro flex flex-center flex-nowrap\">\n <IconShopcartAdd class=\"i-medium\"/>\n <span class=\"ws-nowrap\">{{ t('addtoorder') }}</span>\n </div>\n <template v-else>\n <span v-if=\"!selectedVariant && productVariants.length > 1\">Select variant</span>\n <span v-else>Out of Stock</span>\n </template>\n </Button>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, watch } from 'vue';\nimport { useI18n } from 'vue-i18n';\nimport IconShopcartAdd from '@martyrs/src/modules/icons/actions/IconShopcartAdd.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\n\nimport ProductVariants from '../blocks/ProductVariants.vue';\nimport ProductDiscounts from '../blocks/ProductDiscounts.vue';\nimport QuantitySelector from '../elements/QuantitySelector.vue';\n\nimport Price from '@martyrs/src/modules/products/components/elements/Price.vue'\n\nconst props = defineProps({\n productVariants: { type: Array, default: () => [] },\n productId: { type: String, required: true },\n productName: { type: String, required: true },\n discounts: { type: Array, default: () => [] },\n regularPrice: { type: String, required: true }\n});\n\nconst emits = defineEmits(['variant-selected', 'add-to-cart', 'update-images']);\nconst { t } = useI18n({ messages: { en: { addtoorder: 'Add to Cart' }, ru: { addtoorder: 'Добавить в корзину' } } });\n\nconst selectedVariant = ref(null);\nconst quantity = ref(1);\n\n// Computed properties\nconst isVariantAvailable = computed(() => \n selectedVariant.value ? selectedVariant.value.available :\n props.productVariants.length === 1 ? props.productVariants[0].available : false\n);\n\nconst maxQuantity = computed(() => \n selectedVariant.value ? selectedVariant.value.available : \n props.productVariants.length === 1 ? props.productVariants[0].available || 1 : 1\n);\n\n// Methods\nfunction handleVariantSelected(variant) {\n selectedVariant.value = variant;\n if (quantity.value > variant.available) quantity.value = variant.available;\n emits('variant-selected', variant);\n}\n\nfunction handleDiscountSelected(discount) {\n // Update quantity based on discount requirements\n if (discount.quantity && discount.quantity > quantity.value) {\n quantity.value = discount.quantity;\n }\n}\n\nfunction addProductToCart() {\n const variant = selectedVariant.value || \n (props.productVariants.length === 1 ? props.productVariants[0] : null);\n \n if (!variant || !variant.available || quantity.value > variant.available) return false;\n \n emits('add-to-cart', {\n variant: variant,\n quantity: quantity.value\n });\n \n return true;\n}\n</script>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsFA,UAAM,QAAQ;AAQd,UAAM,QAAQ;AACd,UAAM,EAAE,EAAC,IAAK,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,cAAa,GAAI,IAAI,EAAE,YAAY,qBAAoB,EAAE,EAAE,CAAE;AAEnH,UAAM,kBAAkB,IAAI,IAAI;AAChC,UAAM,WAAW,IAAI,CAAC;AAGtB,UAAM,qBAAqB;AAAA,MAAS,MAClC,gBAAgB,QAAQ,gBAAgB,MAAM,YAC9C,MAAM,gBAAgB,WAAW,IAAI,MAAM,gBAAgB,CAAC,EAAE,YAAY;AAAA,IAC5E;AAEA,UAAM,cAAc;AAAA,MAAS,MAC3B,gBAAgB,QAAQ,gBAAgB,MAAM,YAC9C,MAAM,gBAAgB,WAAW,IAAI,MAAM,gBAAgB,CAAC,EAAE,aAAa,IAAI;AAAA,IACjF;AAGA,aAAS,sBAAsB,SAAS;AACtC,sBAAgB,QAAQ;AACxB,UAAI,SAAS,QAAQ,QAAQ,UAAW,UAAS,QAAQ,QAAQ;AACjE,YAAM,oBAAoB,OAAO;AAAA,IACnC;AAEA,aAAS,uBAAuB,UAAU;AAExC,UAAI,SAAS,YAAY,SAAS,WAAW,SAAS,OAAO;AAC3D,iBAAS,QAAQ,SAAS;AAAA,MAC5B;AAAA,IACF;AAEA,aAAS,mBAAmB;AAC1B,YAAM,UAAU,gBAAgB,UAC7B,MAAM,gBAAgB,WAAW,IAAI,MAAM,gBAAgB,CAAC,IAAI;AAEnE,UAAI,CAAC,WAAW,CAAC,QAAQ,aAAa,SAAS,QAAQ,QAAQ,UAAW,QAAO;AAEjF,YAAM,eAAe;AAAA,QACnB;AAAA,QACA,UAAU,SAAS;AAAA,MACvB,CAAG;AAED,aAAO;AAAA,IACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -23,11 +23,11 @@ const _hoisted_8 = {
23
23
  };
24
24
  const _hoisted_9 = {
25
25
  key: 0,
26
- class: "w-100 t-transp"
26
+ class: "w-100 opacity-50"
27
27
  };
28
28
  const _hoisted_10 = {
29
29
  key: 1,
30
- class: "w-100 t-transp"
30
+ class: "w-100 opacity-50"
31
31
  };
32
32
  const _hoisted_11 = {
33
33
  key: 1,
@@ -149,7 +149,7 @@ const _sfc_main = {
149
149
  __props.accesses && _ctx.hasAccess(unref(route).params._id, "products", "edit", __props.accesses) ? (openBlock(), createBlock(_sfc_main$1, {
150
150
  key: 0,
151
151
  onClick: _cache[0] || (_cache[0] = ($event) => _ctx.$router.push(editPath.value)),
152
- class: "pos-absolute pos-t-regular pos-r-regular i-medium t-transp"
152
+ class: "pos-absolute pos-t-regular pos-r-regular i-medium opacity-50"
153
153
  })) : createCommentVNode("", true),
154
154
  createElementVNode("h1", _hoisted_6, toDisplayString(__props.product.name), 1),
155
155
  __props.product.listing !== "rent" ? (openBlock(), createBlock(_sfc_main$2, {
@@ -1 +1 @@
1
- {"version":3,"file":"SectionProduct.vue.js","sources":["../../../../../../../src/modules/products/components/sections/SectionProduct.vue"],"sourcesContent":["<template>\n\t<div class=\"cols-[1fr_2fr] mobile:cols-1 pd-small w-100 gap-thin\">\n\t\t\n\t\t<div class=\"pd-small bg-light radius-medium flex-nowrap flex-column flex pos-relative\">\n\t\t\t<div class=\"w-100 bg-light radius-semi o-hidden\">\n\t\t\t\t<!-- PRODUCT IMAGE -->\n\t\t\t\t<Image360\n\t\t\t\t\tv-if=\"product && product.image3d\"\n\t\t\t\t\tclass=\"h-100 w-100\"\n\t\t\t\t\t:imagePath=\"`/assets/images/products/${product.image3d}`\"\n\t\t\t\t\t:imageCount=\"36\"\n\t\t\t\t/>\n\n\t\t\t\t<img loading=\"lazy\" \n\t\t\t\t\tv-if=\"images[0] && !product.image3d\"\n\t\t\t\t\tclass=\"h-max bg-light w-100\"\n\t\t\t\t\tstyle=\"object-fit: contain;\"\n\t\t\t\t\t:src=\"(FILE_SERVER_URL || '') + images[0]\"\n\t\t\t\t/>\n\n\t\t\t\t<PlaceholderImage\n\t\t\t\t\tv-if=\"!images[0] && !product.image3d\"\n\t\t\t\t\tclass=\"h-max-20r h-100 w-100\"\n\t\t\t\t\tstyle=\"object-fit: cover;\"\n\t\t\t\t/>\n\n\t\t\t</div>\n\n\t\t\t<ProductImages\n\t\t\t\tv-if=\"images.length > 1\"\n\t\t\t\t:images=\"images\"\n\t\t\t\tclass=\"mn-t-thin\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div class=\"radius-medium pos-relative w-100 h-100 flex-column flex-justify flex col\">\n\n\t\t\t<IconEdit\n\t\t\t\tv-if=\"accesses && hasAccess(route.params._id, 'products', 'edit', accesses)\"\n\t\t\t\t@click=\"$router.push(editPath)\"\n\t\t\t\tclass=\"pos-absolute pos-t-regular pos-r-regular i-medium t-transp\"\n\t\t\t/>\n\n\t\t\t<!-- Name -->\n\t\t\t<h1 class=\"w-100 h1-product mn-b-small\">{{ product.name }}</h1>\n\t\t\t<!-- Price -->\n\t\t\t<Price v-if=\"product.listing !== 'rent'\" :product=\"product\" size=\"big\" class=\"mn-b-semi\" />\n\t\t\t<!-- Variants -->\n\t\t\t<!-- <div v-if=\"product.variants.length > 0\" class=\"flex-justify-start flex\">\n\t\t\t\t<SelectElement v-if=\"sizes2.length > 0\" :elements=\"sizes2\" :selected=\"product.selectedSize\" class=\"mn-r-medium\" />\n\t\t\t</div> -->\n\t\t\t<!-- Description -->\n\n\t\t\t<Tab \n\t\t\t\tv-model:selected=\"tabProduct\"\n\t\t\t\t:tabs=\"[\n\t\t\t\t\t{name: 'Description', value: 'description'},\n\t\t\t\t\t{name: 'Specifications', value: 'specifications'}\n\t\t\t\t]\"\n\t\t\t\tclassTab=\"pd-small pd-r-medium pd-l-medium w-100 pd-small radius-small\"\n\t\t\t\tclass=\"bg-light mn-b-small\"\n\t\t\t/>\n\n\t\t\t<div class=\"h-min-5r pos-relative\">\n\t\t\t\t<transition name=\"slide-fade\">\n\n\t\t\t\t\t<div v-if=\"tabProduct === 'description'\" class=\"pd-medium radius-medium bg-light \">\n\t\t\t\t\t\t<p v-if=\"product.description && !product.translations < 1\" class=\"w-100 t-transp\">\n\t\t\t\t\t\t\t{{ product.description }}\n\t\t\t\t\t\t</p>\n\n\t\t\t\t\t\t<p v-if=\"product.translations && product.translations.length > 1\" class=\"w-100 t-transp\">\n\t\t\t\t\t\t\t{{ t('description') }}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div \n\t\t\t\t\t\tv-else\n\t\t\t\t\t\tclass=\"cols-2 mobile:cols-1 w-100 bg-light radius-medium pd-medium gap-small\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div \n\t\t\t\t\t\t\tv-if=\"product.attributes.length > 0\" \n\t\t\t\t\t\t\tv-for=\"attributes in product.attributes\" \n\t\t\t\t\t\t\tclass=\"w-100 pd-small radius-small bg-white product-attributes\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p class=\"fw-demi\">{{ attributes.name }}</p>\n\t\t\t\t\t\t\t<p>{{ attributes.value }}</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</transition>\n\t\t\t</div>\n\n\t\t\t<div v-if=\"product.listing === 'rent'\" class=\"mn-t-small max-w-33rem mobile-w-100 t-white gap-small cols-2 mobile:cols-1\">\n\t\t\t\t<Button\n\t\t\t\t\t:submit=\"() => { addToCart(product) } \" \n\t\t\t\t\t:text=\"{\n\t\t\t\t\t\tsuccess: ' ✔ Added',\n\t\t\t\t\t\terror: 'error'\n\t\t\t\t\t}\"\n\t\t\t\t\tclass=\"h-3r w-100 mn-r-small bg-main button\"\n\t\t\t\t> \n\t\t\t\t\t{{ t('addtoorder') }}\n\t\t\t\t</Button>\n\t\t\t</div>\n\n\t\t\t<!-- Actions -->\n\t\t\t<div v-else class=\"mn-t-small max-w-33rem mobile-w-100 t-white gap-small cols-2 mobile:cols-1\">\n\t\t\t\t<Button\n\t\t\t\t\tv-if=\"product.quantity > 0\"\n\t\t\t\t\t:submit=\"a => addToCart(product)\" \n\t\t\t\t\t:disabled=\"validateToCard(product)\" \n\t\t\t\t\t:text=\"{\n\t\t\t\t\t\tsuccess: ' ✔ Added',\n\t\t\t\t\t\terror: 'error'\n\t\t\t\t\t}\"\n\t\t\t\t\tclass=\"h-3r w-100 mn-r-small bg-main button\"\n\t\t\t\t> \n\t\t\t\t\t\t{{ t('addtoorder') }}\n\t\t\t\t</Button>\n\t\t\t\t<div v-else class=\"flex-center flex uppercase radius-medium t-black w-max pd-small fw-medium bg-grey h-3r w-100 mn-r-smallbutton\">\n\t\t\t\t\tOut of Stock\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup>\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Tab from '@martyrs/src/components/Tab/Tab.vue'\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue'\nimport PlaceholderImage from '@martyrs/src/modules/icons/placeholders/PlaceholderImage.vue'\n\nimport Image360 \tfrom '@martyrs/src/modules/products/components/elements/Image360.vue'\nimport ProductImages from \"@martyrs/src/modules/products/components/blocks/ProductImages.vue\";\n\nimport THC from '@martyrs/src/modules/products/components/elements/THC.vue'\nimport Price from '@martyrs/src/modules/products/components/elements/Price.vue'\n// import SelectElement \tfrom '@/components/elements/SelectElement.vue'\n\nimport { computed, ref } from 'vue'\n\n\timport { useRoute,useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\n\nimport * as shopcart from '@martyrs/src/modules/orders/store/shopcart.js';\n\n// Props\nconst props = defineProps({\n product: {\n type: Object,\n required: true\n },\n user: {\n type: String,\n },\n accesses: {\n type: Object,\n\t default: null\n }\n})\n\n\n\n\tconst route = useRoute()\n\tconst router = useRouter()\n\n// Computed properties\nconst images = computed(() => {\n return props.product.images\n})\n\nconst editPath = computed(() => {\n\tif (route.meta.context === 'backoffice') {\n\t\treturn `/backoffice/products/${props.product._id}/edit`\n\t}\n\tif (route.meta.context === 'organization') {\n\t\treturn `/organizations/${props.product.owner.target}/products/${props.product._id}/edit`\n\t}\n\treturn `/products/${props.product._id}/edit`\n})\n\nconst tabProduct = ref('description')\n\nconst text = {\n\tmessages: {\n\t en: {\n\t \tairecommend: 'AI Recommends You',\n\t \tdescription: '',\n\t \taddtoorder: 'Add to order',\n\t fastorder: 'Fast Order'\n\t },\n\t ru: {\n\t \tairecommend: 'AI Рекомендует вам',\n\t \tdescription: '',\n\t \taddtoorder: 'Добавить в корзину',\n\t fastorder: 'Быстрый заказ'\n\t }\n\t}\n}\n\nconst { t } = useI18n(text)\n\n// Methods\nfunction validateToCard(product) {\n if (product.quantity > 0) {\n return false\n }\n return true\n}\nasync function addToCart(product) {\n\tconsole.log(product)\n try {\n if (shopcart.state.organization !== product.owner.target) {\n shopcart.state.organization = product.owner.target\n shopcart.state.positions = []\n }\n await shopcart.actions.addProductToCart(product, product.owner.target)\n return true // Make sure we return something\n } catch (error) {\n console.error('Ошибка при добавлении товара в корзину:', error)\n throw error\n }\n}\n</script>\n"],"names":["shopcart.state","shopcart.actions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoJA,UAAM,QAAQ;AAgBb,UAAM,QAAQ,SAAQ;AACP,cAAS;AAGzB,UAAM,SAAS,SAAS,MAAM;AAC5B,aAAO,MAAM,QAAQ;AAAA,IACvB,CAAC;AAED,UAAM,WAAW,SAAS,MAAM;AAC/B,UAAI,MAAM,KAAK,YAAY,cAAc;AACxC,eAAO,wBAAwB,MAAM,QAAQ,GAAG;AAAA,MACjD;AACA,UAAI,MAAM,KAAK,YAAY,gBAAgB;AAC1C,eAAO,kBAAkB,MAAM,QAAQ,MAAM,MAAM,aAAa,MAAM,QAAQ,GAAG;AAAA,MAClF;AACA,aAAO,aAAa,MAAM,QAAQ,GAAG;AAAA,IACtC,CAAC;AAED,UAAM,aAAa,IAAI,aAAa;AAEpC,UAAM,OAAO;AAAA,MACZ,UAAU;AAAA,QACR,IAAI;AAAA,UACH,aAAa;AAAA,UACb,aAAa;AAAA,UACb,YAAY;AAAA,UACX,WAAW;AAAA,QAChB;AAAA,QACG,IAAI;AAAA,UACH,aAAa;AAAA,UACb,aAAa;AAAA,UACb,YAAY;AAAA,UACX,WAAW;AAAA,QAChB;AAAA,MACA;AAAA,IACA;AAEA,UAAM,EAAE,EAAC,IAAK,QAAQ,IAAI;AAG1B,aAAS,eAAe,SAAS;AAC/B,UAAI,QAAQ,WAAW,GAAG;AACxB,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AACA,mBAAe,UAAU,SAAS;AACjC,cAAQ,IAAI,OAAO;AAChB,UAAI;AACA,YAAIA,MAAe,iBAAiB,QAAQ,MAAM,QAAQ;AACtDA,gBAAe,eAAe,QAAQ,MAAM;AAC5CA,gBAAe,YAAY,CAAA;AAAA,QAC/B;AACA,cAAMC,QAAiB,iBAAiB,SAAS,QAAQ,MAAM,MAAM;AACrE,eAAO;AAAA,MACX,SAAS,OAAO;AACZ,gBAAQ,MAAM,2CAA2C,KAAK;AAC9D,cAAM;AAAA,MACV;AAAA,IACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"SectionProduct.vue.js","sources":["../../../../../../../src/modules/products/components/sections/SectionProduct.vue"],"sourcesContent":["<template>\n\t<div class=\"cols-[1fr_2fr] mobile:cols-1 pd-small w-100 gap-thin\">\n\t\t\n\t\t<div class=\"pd-small bg-light radius-medium flex-nowrap flex-column flex pos-relative\">\n\t\t\t<div class=\"w-100 bg-light radius-semi o-hidden\">\n\t\t\t\t<!-- PRODUCT IMAGE -->\n\t\t\t\t<Image360\n\t\t\t\t\tv-if=\"product && product.image3d\"\n\t\t\t\t\tclass=\"h-100 w-100\"\n\t\t\t\t\t:imagePath=\"`/assets/images/products/${product.image3d}`\"\n\t\t\t\t\t:imageCount=\"36\"\n\t\t\t\t/>\n\n\t\t\t\t<img loading=\"lazy\" \n\t\t\t\t\tv-if=\"images[0] && !product.image3d\"\n\t\t\t\t\tclass=\"h-max bg-light w-100\"\n\t\t\t\t\tstyle=\"object-fit: contain;\"\n\t\t\t\t\t:src=\"(FILE_SERVER_URL || '') + images[0]\"\n\t\t\t\t/>\n\n\t\t\t\t<PlaceholderImage\n\t\t\t\t\tv-if=\"!images[0] && !product.image3d\"\n\t\t\t\t\tclass=\"h-max-20r h-100 w-100\"\n\t\t\t\t\tstyle=\"object-fit: cover;\"\n\t\t\t\t/>\n\n\t\t\t</div>\n\n\t\t\t<ProductImages\n\t\t\t\tv-if=\"images.length > 1\"\n\t\t\t\t:images=\"images\"\n\t\t\t\tclass=\"mn-t-thin\"\n\t\t\t/>\n\t\t</div>\n\n\t\t<div class=\"radius-medium pos-relative w-100 h-100 flex-column flex-justify flex col\">\n\n\t\t\t<IconEdit\n\t\t\t\tv-if=\"accesses && hasAccess(route.params._id, 'products', 'edit', accesses)\"\n\t\t\t\t@click=\"$router.push(editPath)\"\n\t\t\t\tclass=\"pos-absolute pos-t-regular pos-r-regular i-medium opacity-50\"\n\t\t\t/>\n\n\t\t\t<!-- Name -->\n\t\t\t<h1 class=\"w-100 h1-product mn-b-small\">{{ product.name }}</h1>\n\t\t\t<!-- Price -->\n\t\t\t<Price v-if=\"product.listing !== 'rent'\" :product=\"product\" size=\"big\" class=\"mn-b-semi\" />\n\t\t\t<!-- Variants -->\n\t\t\t<!-- <div v-if=\"product.variants.length > 0\" class=\"flex-justify-start flex\">\n\t\t\t\t<SelectElement v-if=\"sizes2.length > 0\" :elements=\"sizes2\" :selected=\"product.selectedSize\" class=\"mn-r-medium\" />\n\t\t\t</div> -->\n\t\t\t<!-- Description -->\n\n\t\t\t<Tab \n\t\t\t\tv-model:selected=\"tabProduct\"\n\t\t\t\t:tabs=\"[\n\t\t\t\t\t{name: 'Description', value: 'description'},\n\t\t\t\t\t{name: 'Specifications', value: 'specifications'}\n\t\t\t\t]\"\n\t\t\t\tclassTab=\"pd-small pd-r-medium pd-l-medium w-100 pd-small radius-small\"\n\t\t\t\tclass=\"bg-light mn-b-small\"\n\t\t\t/>\n\n\t\t\t<div class=\"h-min-5r pos-relative\">\n\t\t\t\t<transition name=\"slide-fade\">\n\n\t\t\t\t\t<div v-if=\"tabProduct === 'description'\" class=\"pd-medium radius-medium bg-light \">\n\t\t\t\t\t\t<p v-if=\"product.description && !product.translations < 1\" class=\"w-100 opacity-50\">\n\t\t\t\t\t\t\t{{ product.description }}\n\t\t\t\t\t\t</p>\n\n\t\t\t\t\t\t<p v-if=\"product.translations && product.translations.length > 1\" class=\"w-100 opacity-50\">\n\t\t\t\t\t\t\t{{ t('description') }}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div \n\t\t\t\t\t\tv-else\n\t\t\t\t\t\tclass=\"cols-2 mobile:cols-1 w-100 bg-light radius-medium pd-medium gap-small\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div \n\t\t\t\t\t\t\tv-if=\"product.attributes.length > 0\" \n\t\t\t\t\t\t\tv-for=\"attributes in product.attributes\" \n\t\t\t\t\t\t\tclass=\"w-100 pd-small radius-small bg-white product-attributes\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p class=\"fw-demi\">{{ attributes.name }}</p>\n\t\t\t\t\t\t\t<p>{{ attributes.value }}</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</transition>\n\t\t\t</div>\n\n\t\t\t<div v-if=\"product.listing === 'rent'\" class=\"mn-t-small max-w-33rem mobile-w-100 t-white gap-small cols-2 mobile:cols-1\">\n\t\t\t\t<Button\n\t\t\t\t\t:submit=\"() => { addToCart(product) } \" \n\t\t\t\t\t:text=\"{\n\t\t\t\t\t\tsuccess: ' ✔ Added',\n\t\t\t\t\t\terror: 'error'\n\t\t\t\t\t}\"\n\t\t\t\t\tclass=\"h-3r w-100 mn-r-small bg-main button\"\n\t\t\t\t> \n\t\t\t\t\t{{ t('addtoorder') }}\n\t\t\t\t</Button>\n\t\t\t</div>\n\n\t\t\t<!-- Actions -->\n\t\t\t<div v-else class=\"mn-t-small max-w-33rem mobile-w-100 t-white gap-small cols-2 mobile:cols-1\">\n\t\t\t\t<Button\n\t\t\t\t\tv-if=\"product.quantity > 0\"\n\t\t\t\t\t:submit=\"a => addToCart(product)\" \n\t\t\t\t\t:disabled=\"validateToCard(product)\" \n\t\t\t\t\t:text=\"{\n\t\t\t\t\t\tsuccess: ' ✔ Added',\n\t\t\t\t\t\terror: 'error'\n\t\t\t\t\t}\"\n\t\t\t\t\tclass=\"h-3r w-100 mn-r-small bg-main button\"\n\t\t\t\t> \n\t\t\t\t\t\t{{ t('addtoorder') }}\n\t\t\t\t</Button>\n\t\t\t\t<div v-else class=\"flex-center flex uppercase radius-medium t-black w-max pd-small fw-medium bg-grey h-3r w-100 mn-r-smallbutton\">\n\t\t\t\t\tOut of Stock\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script setup>\nimport Button from '@martyrs/src/components/Button/Button.vue'\nimport Tab from '@martyrs/src/components/Tab/Tab.vue'\nimport IconEdit from '@martyrs/src/modules/icons/navigation/IconEdit.vue'\nimport PlaceholderImage from '@martyrs/src/modules/icons/placeholders/PlaceholderImage.vue'\n\nimport Image360 \tfrom '@martyrs/src/modules/products/components/elements/Image360.vue'\nimport ProductImages from \"@martyrs/src/modules/products/components/blocks/ProductImages.vue\";\n\nimport THC from '@martyrs/src/modules/products/components/elements/THC.vue'\nimport Price from '@martyrs/src/modules/products/components/elements/Price.vue'\n// import SelectElement \tfrom '@/components/elements/SelectElement.vue'\n\nimport { computed, ref } from 'vue'\n\n\timport { useRoute,useRouter } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\n\nimport * as shopcart from '@martyrs/src/modules/orders/store/shopcart.js';\n\n// Props\nconst props = defineProps({\n product: {\n type: Object,\n required: true\n },\n user: {\n type: String,\n },\n accesses: {\n type: Object,\n\t default: null\n }\n})\n\n\n\n\tconst route = useRoute()\n\tconst router = useRouter()\n\n// Computed properties\nconst images = computed(() => {\n return props.product.images\n})\n\nconst editPath = computed(() => {\n\tif (route.meta.context === 'backoffice') {\n\t\treturn `/backoffice/products/${props.product._id}/edit`\n\t}\n\tif (route.meta.context === 'organization') {\n\t\treturn `/organizations/${props.product.owner.target}/products/${props.product._id}/edit`\n\t}\n\treturn `/products/${props.product._id}/edit`\n})\n\nconst tabProduct = ref('description')\n\nconst text = {\n\tmessages: {\n\t en: {\n\t \tairecommend: 'AI Recommends You',\n\t \tdescription: '',\n\t \taddtoorder: 'Add to order',\n\t fastorder: 'Fast Order'\n\t },\n\t ru: {\n\t \tairecommend: 'AI Рекомендует вам',\n\t \tdescription: '',\n\t \taddtoorder: 'Добавить в корзину',\n\t fastorder: 'Быстрый заказ'\n\t }\n\t}\n}\n\nconst { t } = useI18n(text)\n\n// Methods\nfunction validateToCard(product) {\n if (product.quantity > 0) {\n return false\n }\n return true\n}\nasync function addToCart(product) {\n\tconsole.log(product)\n try {\n if (shopcart.state.organization !== product.owner.target) {\n shopcart.state.organization = product.owner.target\n shopcart.state.positions = []\n }\n await shopcart.actions.addProductToCart(product, product.owner.target)\n return true // Make sure we return something\n } catch (error) {\n console.error('Ошибка при добавлении товара в корзину:', error)\n throw error\n }\n}\n</script>\n"],"names":["shopcart.state","shopcart.actions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoJA,UAAM,QAAQ;AAgBb,UAAM,QAAQ,SAAQ;AACP,cAAS;AAGzB,UAAM,SAAS,SAAS,MAAM;AAC5B,aAAO,MAAM,QAAQ;AAAA,IACvB,CAAC;AAED,UAAM,WAAW,SAAS,MAAM;AAC/B,UAAI,MAAM,KAAK,YAAY,cAAc;AACxC,eAAO,wBAAwB,MAAM,QAAQ,GAAG;AAAA,MACjD;AACA,UAAI,MAAM,KAAK,YAAY,gBAAgB;AAC1C,eAAO,kBAAkB,MAAM,QAAQ,MAAM,MAAM,aAAa,MAAM,QAAQ,GAAG;AAAA,MAClF;AACA,aAAO,aAAa,MAAM,QAAQ,GAAG;AAAA,IACtC,CAAC;AAED,UAAM,aAAa,IAAI,aAAa;AAEpC,UAAM,OAAO;AAAA,MACZ,UAAU;AAAA,QACR,IAAI;AAAA,UACH,aAAa;AAAA,UACb,aAAa;AAAA,UACb,YAAY;AAAA,UACX,WAAW;AAAA,QAChB;AAAA,QACG,IAAI;AAAA,UACH,aAAa;AAAA,UACb,aAAa;AAAA,UACb,YAAY;AAAA,UACX,WAAW;AAAA,QAChB;AAAA,MACA;AAAA,IACA;AAEA,UAAM,EAAE,EAAC,IAAK,QAAQ,IAAI;AAG1B,aAAS,eAAe,SAAS;AAC/B,UAAI,QAAQ,WAAW,GAAG;AACxB,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AACA,mBAAe,UAAU,SAAS;AACjC,cAAQ,IAAI,OAAO;AAChB,UAAI;AACA,YAAIA,MAAe,iBAAiB,QAAQ,MAAM,QAAQ;AACtDA,gBAAe,eAAe,QAAQ,MAAM;AAC5CA,gBAAe,YAAY,CAAA;AAAA,QAC/B;AACA,cAAMC,QAAiB,iBAAiB,SAAS,QAAQ,MAAM,MAAM;AACrE,eAAO;AAAA,MACX,SAAS,OAAO;AACZ,gBAAQ,MAAM,2CAA2C,KAAK;AAC9D,cAAM;AAAA,MACV;AAAA,IACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -6,7 +6,7 @@ function getRoutes(options = {}) {
6
6
  const routeBackoffice = options.routeBackoffice || "Backoffice Root";
7
7
  const routeOrganizations = options.routeOrganizations || "OrganizationRoot";
8
8
  const routes = [];
9
- if (!options.withBackoffice) {
9
+ if (!options.contexts || options.contexts.includes("backoffice")) {
10
10
  routes.push({
11
11
  parentName: routeBackoffice,
12
12
  config: {
@@ -86,7 +86,7 @@ function getRoutes(options = {}) {
86
86
  }
87
87
  });
88
88
  }
89
- if (!options.withOrganizationRoutes) {
89
+ if (!options.contexts || options.contexts.includes("organization")) {
90
90
  routes.push({
91
91
  parentName: routeOrganizations,
92
92
  config: {
@@ -1 +1 @@
1
- {"version":3,"file":"categories.router.js","sources":["../../../../../../src/modules/products/router/categories.router.js"],"sourcesContent":["import * as validationAuth from '@martyrs/src/modules/auth/views/middlewares/auth.validation.js';\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js';\n\nconst { hasAccess, isAdmin } = useGlobalMixins();\n\nexport function getRoutes(options = {}) {\n const routeBackoffice = options.routeBackoffice || 'Backoffice Root';\n const routeOrganizations = options.routeOrganizations || 'OrganizationRoot';\n\n const routes = [];\n\n // Backoffice контекст\n if (!options.withBackoffice) {\n routes.push({\n parentName: routeBackoffice,\n config: {\n basePath: options.backofficeBasePath || 'categories',\n routeNamePrefix: 'Backoffice',\n meta: {\n title: {\n en: 'Categories',\n ru: 'Категории',\n },\n context: 'backoffice',\n },\n routes: [\n {\n path: '',\n name: 'Categories',\n meta: {\n title: {\n en: 'Categories',\n ru: 'Категории',\n },\n },\n component: () => import(/* webpackChunkName: 'categories-backoffice' */ '../components/pages/Categories.vue'),\n },\n {\n path: 'add',\n name: 'CategoryAdd',\n meta: {\n title: {\n en: 'Add Category',\n ru: 'Добавить категорию',\n },\n },\n beforeEnter: [\n validationAuth.requiresAuth,\n (to, from, next) => {\n if (isAdmin(auth.state.access.roles)) {\n next();\n } else {\n next('/401');\n }\n }\n ],\n component: () => import(/* webpackChunkName: 'category-backoffice-edit' */ '../components/pages/CategoryEdit.vue'),\n },\n {\n path: ':category/edit',\n name: 'CategoryEdit',\n meta: {\n title: {\n en: 'Edit Category',\n ru: 'Редактировать категорию',\n },\n },\n beforeEnter: [\n validationAuth.requiresAuth,\n (to, from, next) => {\n if (isAdmin(auth.state.access.roles)) {\n next();\n } else {\n next('/401');\n }\n }\n ],\n component: () => import(/* webpackChunkName: 'category-backoffice-edit' */ '../components/pages/CategoryEdit.vue'),\n },\n ],\n },\n });\n }\n\n // Organizations контекст\n if (!options.withOrganizationRoutes) {\n routes.push({\n parentName: routeOrganizations,\n config: {\n basePath: options.organizationBasePath || 'categories',\n routeNamePrefix: 'Organization_',\n meta: {\n title: {\n en: 'Organization Categories',\n ru: 'Категории Организации',\n },\n context: 'organization',\n },\n routes: [\n {\n path: '',\n name: 'Categories',\n meta: {\n title: {\n en: 'Categories',\n ru: 'Категории',\n },\n },\n component: () => import(/* webpackChunkName: 'categories' */ '../components/pages/Categories.vue'),\n },\n {\n path: 'add',\n name: 'CategoryAdd',\n meta: {\n title: {\n en: 'Add Category',\n ru: 'Добавить категорию',\n },\n },\n beforeEnter: [\n validationAuth.requiresAuth,\n (to, from, next) => {\n if (isAdmin(auth.state.access.roles) || hasAccess(to.params._id, 'categories', 'create', auth.state.accesses, auth.state.access.roles)) {\n next();\n } else {\n next('/401');\n }\n }\n ],\n component: () => import(/* webpackChunkName: 'category-edit' */ '../components/pages/CategoryEdit.vue'),\n },\n {\n path: ':category/edit',\n name: 'CategoryEdit',\n meta: {\n title: {\n en: 'Edit Category',\n ru: 'Редактировать категорию',\n },\n },\n beforeEnter: [\n validationAuth.requiresAuth,\n (to, from, next) => {\n if (isAdmin(auth.state.access.roles) || hasAccess(to.params._id, 'categories', 'edit', auth.state.accesses, auth.state.access.roles)) {\n next();\n } else {\n next('/401');\n }\n }\n ],\n component: () => import(/* webpackChunkName: 'category-edit' */ '../components/pages/CategoryEdit.vue'),\n },\n ],\n },\n });\n }\n\n return routes;\n}\n\nexport default { getRoutes };\n"],"names":["validationAuth.requiresAuth","auth.state"],"mappings":";;;AAIA,MAAM,EAAE,WAAW,QAAO,IAAK,gBAAe;AAEvC,SAAS,UAAU,UAAU,IAAI;AACtC,QAAM,kBAAkB,QAAQ,mBAAmB;AACnD,QAAM,qBAAqB,QAAQ,sBAAsB;AAEzD,QAAM,SAAS,CAAA;AAGf,MAAI,CAAC,QAAQ,gBAAgB;AAC3B,WAAO,KAAK;AAAA,MACV,YAAY;AAAA,MACZ,QAAQ;AAAA,QACN,UAAU,QAAQ,sBAAsB;AAAA,QACxC,iBAAiB;AAAA,QACjB,MAAM;AAAA,UACJ,OAAO;AAAA,YACL,IAAI;AAAA,YACJ,IAAI;AAAA,UAChB;AAAA,UACU,SAAS;AAAA,QACnB;AAAA,QACQ,QAAQ;AAAA,UACN;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,cACJ,OAAO;AAAA,gBACL,IAAI;AAAA,gBACJ,IAAI;AAAA,cACpB;AAAA,YACA;AAAA,YACY,WAAW,MAAM;AAAA;AAAA,cAAuD;AAAA,YAAoC;AAAA,UACxH;AAAA,UACU;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,cACJ,OAAO;AAAA,gBACL,IAAI;AAAA,gBACJ,IAAI;AAAA,cACpB;AAAA,YACA;AAAA,YACY,aAAa;AAAA,cACXA;AAAAA,cACA,CAAC,IAAI,MAAM,SAAS;AAClB,oBAAI,QAAQC,MAAW,OAAO,KAAK,GAAG;AACpC,uBAAI;AAAA,gBACN,OAAO;AACL,uBAAK,MAAM;AAAA,gBACb;AAAA,cACF;AAAA,YACd;AAAA,YACY,WAAW,MAAM;AAAA;AAAA,cAA0D;AAAA,YAAsC;AAAA,UAC7H;AAAA,UACU;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,cACJ,OAAO;AAAA,gBACL,IAAI;AAAA,gBACJ,IAAI;AAAA,cACpB;AAAA,YACA;AAAA,YACY,aAAa;AAAA,cACXD;AAAAA,cACA,CAAC,IAAI,MAAM,SAAS;AAClB,oBAAI,QAAQC,MAAW,OAAO,KAAK,GAAG;AACpC,uBAAI;AAAA,gBACN,OAAO;AACL,uBAAK,MAAM;AAAA,gBACb;AAAA,cACF;AAAA,YACd;AAAA,YACY,WAAW,MAAM;AAAA;AAAA,cAA0D;AAAA,YAAsC;AAAA,UAC7H;AAAA,QACA;AAAA,MACA;AAAA,IACA,CAAK;AAAA,EACH;AAGA,MAAI,CAAC,QAAQ,wBAAwB;AACnC,WAAO,KAAK;AAAA,MACV,YAAY;AAAA,MACZ,QAAQ;AAAA,QACN,UAAU,QAAQ,wBAAwB;AAAA,QAC1C,iBAAiB;AAAA,QACjB,MAAM;AAAA,UACJ,OAAO;AAAA,YACL,IAAI;AAAA,YACJ,IAAI;AAAA,UAChB;AAAA,UACU,SAAS;AAAA,QACnB;AAAA,QACQ,QAAQ;AAAA,UACN;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,cACJ,OAAO;AAAA,gBACL,IAAI;AAAA,gBACJ,IAAI;AAAA,cACpB;AAAA,YACA;AAAA,YACY,WAAW,MAAM;AAAA;AAAA,cAA4C;AAAA,YAAoC;AAAA,UAC7G;AAAA,UACU;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,cACJ,OAAO;AAAA,gBACL,IAAI;AAAA,gBACJ,IAAI;AAAA,cACpB;AAAA,YACA;AAAA,YACY,aAAa;AAAA,cACXD;AAAAA,cACA,CAAC,IAAI,MAAM,SAAS;AAClB,oBAAI,QAAQC,MAAW,OAAO,KAAK,KAAK,UAAU,GAAG,OAAO,KAAK,cAAc,UAAUA,MAAW,UAAUA,MAAW,OAAO,KAAK,GAAG;AACtI,uBAAI;AAAA,gBACN,OAAO;AACL,uBAAK,MAAM;AAAA,gBACb;AAAA,cACF;AAAA,YACd;AAAA,YACY,WAAW,MAAM;AAAA;AAAA,cAA+C;AAAA,YAAsC;AAAA,UAClH;AAAA,UACU;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,MAAM;AAAA,cACJ,OAAO;AAAA,gBACL,IAAI;AAAA,gBACJ,IAAI;AAAA,cACpB;AAAA,YACA;AAAA,YACY,aAAa;AAAA,cACXD;AAAAA,cACA,CAAC,IAAI,MAAM,SAAS;AAClB,oBAAI,QAAQC,MAAW,OAAO,KAAK,KAAK,UAAU,GAAG,OAAO,KAAK,cAAc,QAAQA,MAAW,UAAUA,MAAW,OAAO,KAAK,GAAG;AACpI,uBAAI;AAAA,gBACN,OAAO;AACL,uBAAK,MAAM;AAAA,gBACb;AAAA,cACF;AAAA,YACd;AAAA,YACY,WAAW,MAAM;AAAA;AAAA,cAA+C;AAAA,YAAsC;AAAA,UAClH;AAAA,QACA;AAAA,MACA;AAAA,IACA,CAAK;AAAA,EACH;AAEA,SAAO;AACT;"}
1
+ {"version":3,"file":"categories.router.js","sources":["../../../../../../src/modules/products/router/categories.router.js"],"sourcesContent":["import * as validationAuth from '@martyrs/src/modules/auth/views/middlewares/auth.validation.js';\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\nimport { useGlobalMixins } from '@martyrs/src/modules/core/views/mixins/mixins.js';\n\nconst { hasAccess, isAdmin } = useGlobalMixins();\n\nexport function getRoutes(options = {}) {\n const routeBackoffice = options.routeBackoffice || 'Backoffice Root';\n const routeOrganizations = options.routeOrganizations || 'OrganizationRoot';\n\n const routes = [];\n\n // Backoffice контекст\n if (!options.contexts || options.contexts.includes('backoffice')) {\n routes.push({\n parentName: routeBackoffice,\n config: {\n basePath: options.backofficeBasePath || 'categories',\n routeNamePrefix: 'Backoffice',\n meta: {\n title: {\n en: 'Categories',\n ru: 'Категории',\n },\n context: 'backoffice',\n },\n routes: [\n {\n path: '',\n name: 'Categories',\n meta: {\n title: {\n en: 'Categories',\n ru: 'Категории',\n },\n },\n component: () => import(/* webpackChunkName: 'categories-backoffice' */ '../components/pages/Categories.vue'),\n },\n {\n path: 'add',\n name: 'CategoryAdd',\n meta: {\n title: {\n en: 'Add Category',\n ru: 'Добавить категорию',\n },\n },\n beforeEnter: [\n validationAuth.requiresAuth,\n (to, from, next) => {\n if (isAdmin(auth.state.access.roles)) {\n next();\n } else {\n next('/401');\n }\n }\n ],\n component: () => import(/* webpackChunkName: 'category-backoffice-edit' */ '../components/pages/CategoryEdit.vue'),\n },\n {\n path: ':category/edit',\n name: 'CategoryEdit',\n meta: {\n title: {\n en: 'Edit Category',\n ru: 'Редактировать категорию',\n },\n },\n beforeEnter: [\n validationAuth.requiresAuth,\n (to, from, next) => {\n if (isAdmin(auth.state.access.roles)) {\n next();\n } else {\n next('/401');\n }\n }\n ],\n component: () => import(/* webpackChunkName: 'category-backoffice-edit' */ '../components/pages/CategoryEdit.vue'),\n },\n ],\n },\n });\n }\n\n // Organizations контекст\n if (!options.contexts || options.contexts.includes('organization')) {\n routes.push({\n parentName: routeOrganizations,\n config: {\n basePath: options.organizationBasePath || 'categories',\n routeNamePrefix: 'Organization_',\n meta: {\n title: {\n en: 'Organization Categories',\n ru: 'Категории Организации',\n },\n context: 'organization',\n },\n routes: [\n {\n path: '',\n name: 'Categories',\n meta: {\n title: {\n en: 'Categories',\n ru: 'Категории',\n },\n },\n component: () => import(/* webpackChunkName: 'categories' */ '../components/pages/Categories.vue'),\n },\n {\n path: 'add',\n name: 'CategoryAdd',\n meta: {\n title: {\n en: 'Add Category',\n ru: 'Добавить категорию',\n },\n },\n beforeEnter: [\n validationAuth.requiresAuth,\n (to, from, next) => {\n if (isAdmin(auth.state.access.roles) || hasAccess(to.params._id, 'categories', 'create', auth.state.accesses, auth.state.access.roles)) {\n next();\n } else {\n next('/401');\n }\n }\n ],\n component: () => import(/* webpackChunkName: 'category-edit' */ '../components/pages/CategoryEdit.vue'),\n },\n {\n path: ':category/edit',\n name: 'CategoryEdit',\n meta: {\n title: {\n en: 'Edit Category',\n ru: 'Редактировать категорию',\n },\n },\n beforeEnter: [\n validationAuth.requiresAuth,\n (to, from, next) => {\n if (isAdmin(auth.state.access.roles) || hasAccess(to.params._id, 'categories', 'edit', auth.state.accesses, auth.state.access.roles)) {\n next();\n } else {\n next('/401');\n }\n }\n ],\n component: () => import(/* webpackChunkName: 'category-edit' */ '../components/pages/CategoryEdit.vue'),\n },\n ],\n },\n });\n }\n\n return routes;\n}\n\nexport default { getRoutes };\n"],"names":["validationAuth.requiresAuth","auth.state"],"mappings":"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"}
@@ -7,7 +7,7 @@ function getRoutes(options = {}) {
7
7
  const routeBackoffice = options.routeBackoffice || "Backoffice Root";
8
8
  const routeOrganizations = options.routeOrganizations || "OrganizationRoot";
9
9
  const routes = [];
10
- routes.push({
10
+ if (!options.contexts || options.contexts.includes("client")) routes.push({
11
11
  parentName: route,
12
12
  config: {
13
13
  basePath: options.basePath || "products",
@@ -94,7 +94,7 @@ function getRoutes(options = {}) {
94
94
  ]
95
95
  }
96
96
  });
97
- if (!options.withBackoffice) {
97
+ if (!options.contexts || options.contexts.includes("backoffice")) {
98
98
  routes.push({
99
99
  parentName: routeBackoffice,
100
100
  config: {
@@ -122,6 +122,20 @@ function getRoutes(options = {}) {
122
122
  "../components/pages/Products.vue.js"
123
123
  )
124
124
  },
125
+ {
126
+ path: "categories/:categoryPath(.*)",
127
+ name: "ProductsCategory",
128
+ meta: {
129
+ title: {
130
+ en: "Products",
131
+ ru: "Товары"
132
+ }
133
+ },
134
+ component: () => import(
135
+ /* webpackChunkName: 'products-backoffice' */
136
+ "../components/pages/Products.vue.js"
137
+ )
138
+ },
125
139
  {
126
140
  path: "add",
127
141
  name: "ProductAdd",
@@ -189,7 +203,7 @@ function getRoutes(options = {}) {
189
203
  }
190
204
  });
191
205
  }
192
- if (!options.withOrganizationRoutes) {
206
+ if (!options.contexts || options.contexts.includes("organization")) {
193
207
  routes.push({
194
208
  parentName: routeOrganizations,
195
209
  config: {