@ozdao/martyrs 0.2.570 → 0.2.572

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 (832) hide show
  1. package/dist/_virtual/dayjs.min.js +1 -1
  2. package/dist/_virtual/weekOfYear.js +1 -1
  3. package/dist/builder.js +1248 -106
  4. package/dist/{main-BFvlam0J.js → main-BfEQkhXS.js} +1173 -1191
  5. package/dist/martyrs/dist/{main-BFvlam0J.js → main-BfEQkhXS.js} +94 -112
  6. package/dist/martyrs/dist/main-BfEQkhXS.js.map +1 -0
  7. package/dist/martyrs/dist/{web-CH5wzMHy.js → web-BqTV9va1.js} +3 -3
  8. package/dist/martyrs/dist/{web-CH5wzMHy.js.map → web-BqTV9va1.js.map} +1 -1
  9. package/dist/martyrs/node_modules/.pnpm/{@capacitor_core@7.0.1 → @capacitor_core@7.4.4}/node_modules/@capacitor/core/dist/index.js +2 -1
  10. package/dist/martyrs/node_modules/.pnpm/@capacitor_core@7.4.4/node_modules/@capacitor/core/dist/index.js.map +1 -0
  11. package/dist/martyrs/node_modules/.pnpm/{@capacitor_preferences@7.0.0_@capacitor_core@7.0.1 → @capacitor_preferences@7.0.2_@capacitor_core@7.4.4}/node_modules/@capacitor/preferences/dist/esm/index.js +1 -1
  12. package/dist/martyrs/node_modules/.pnpm/{@capacitor_preferences@7.0.0_@capacitor_core@7.0.1 → @capacitor_preferences@7.0.2_@capacitor_core@7.4.4}/node_modules/@capacitor/preferences/dist/esm/index.js.map +1 -1
  13. package/dist/martyrs/node_modules/.pnpm/{@capacitor_preferences@7.0.0_@capacitor_core@7.0.1 → @capacitor_preferences@7.0.2_@capacitor_core@7.4.4}/node_modules/@capacitor/preferences/dist/esm/web.js +1 -1
  14. package/dist/martyrs/node_modules/.pnpm/{@capacitor_preferences@7.0.0_@capacitor_core@7.0.1 → @capacitor_preferences@7.0.2_@capacitor_core@7.4.4}/node_modules/@capacitor/preferences/dist/esm/web.js.map +1 -1
  15. package/dist/{node_modules/.pnpm/@vue_server-renderer@3.5.13_vue@3.5.13_typescript@5.8.3_ → martyrs}/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.js +1 -1
  16. package/dist/martyrs/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.js.map +1 -0
  17. package/dist/martyrs/node_modules/@vue/shared/dist/shared.esm-bundler.js.map +1 -0
  18. package/dist/{node_modules/.pnpm/dayjs@1.11.13 → martyrs}/node_modules/dayjs/dayjs.min.js +1 -1
  19. package/dist/martyrs/node_modules/dayjs/dayjs.min.js.map +1 -0
  20. package/dist/{node_modules/.pnpm/dayjs@1.11.13 → martyrs}/node_modules/dayjs/plugin/weekOfYear.js +1 -1
  21. package/dist/martyrs/node_modules/dayjs/plugin/weekOfYear.js.map +1 -0
  22. package/dist/martyrs/node_modules/uuid/dist/esm-browser/regex.js +5 -0
  23. package/dist/martyrs/node_modules/uuid/dist/esm-browser/regex.js.map +1 -0
  24. package/dist/martyrs/node_modules/uuid/dist/esm-browser/rng.js +15 -0
  25. package/dist/martyrs/node_modules/uuid/dist/esm-browser/rng.js.map +1 -0
  26. package/dist/martyrs/node_modules/uuid/dist/esm-browser/stringify.js +17 -0
  27. package/dist/martyrs/node_modules/uuid/dist/esm-browser/stringify.js.map +1 -0
  28. package/dist/martyrs/node_modules/uuid/dist/esm-browser/v4.js +13 -0
  29. package/dist/martyrs/node_modules/uuid/dist/esm-browser/v4.js.map +1 -0
  30. package/dist/martyrs/node_modules/uuid/dist/esm-browser/validate.js +8 -0
  31. package/dist/martyrs/node_modules/uuid/dist/esm-browser/validate.js.map +1 -0
  32. package/dist/martyrs/src/components/Block/Block.vue.js +1 -1
  33. package/dist/martyrs/src/components/Block/Block.vue.js.map +1 -1
  34. package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js +1 -1
  35. package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js.map +1 -1
  36. package/dist/martyrs/src/components/Button/{Button.vue.js → Button.vue2.js} +2 -2
  37. package/dist/martyrs/src/components/Button/Button.vue2.js.map +1 -0
  38. package/dist/martyrs/src/components/Calendar/Calendar.vue2.js +6 -6
  39. package/dist/martyrs/src/components/Calendar/Calendar.vue2.js.map +1 -1
  40. package/dist/martyrs/src/components/Checkbox/Checkbox.vue.js +2 -2
  41. package/dist/martyrs/src/components/Checkbox/Checkbox.vue.js.map +1 -1
  42. package/dist/martyrs/src/components/Chips/Chips.vue.js +2 -2
  43. package/dist/martyrs/src/components/Countdown/Countdown.vue.js +5 -5
  44. package/dist/martyrs/src/components/Countdown/Countdown.vue.js.map +1 -1
  45. package/dist/martyrs/src/components/DatePicker/DatePicker.vue.js +4 -4
  46. package/dist/martyrs/src/components/DatePicker/DatePicker.vue.js.map +1 -1
  47. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.js → Dropdown.vue2.js} +2 -2
  48. package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.js.map +1 -0
  49. package/dist/martyrs/src/components/EditImages/EditImages.vue2.js +1 -1
  50. package/dist/martyrs/src/components/EditImages/EditImages.vue2.js.map +1 -1
  51. package/dist/martyrs/src/components/Feed/Feed.vue.js +2 -2
  52. package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
  53. package/dist/martyrs/src/components/Field/{Field.vue2.js → Field.vue.js} +2 -2
  54. package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -0
  55. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +4 -4
  56. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js.map +1 -1
  57. package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.js +1 -1
  58. package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.js.map +1 -1
  59. package/dist/martyrs/src/components/FieldTags/BlockTags.vue.js +1 -1
  60. package/dist/martyrs/src/components/FieldTags/BlockTags.vue.js.map +1 -1
  61. package/dist/martyrs/src/components/Loader/Loader.vue2.js +1 -1
  62. package/dist/martyrs/src/components/Loader/Loader.vue2.js.map +1 -1
  63. package/dist/martyrs/src/components/Menu/{Menu.vue.js → Menu.vue2.js} +2 -2
  64. package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +1 -0
  65. package/dist/martyrs/src/components/Menu/MenuItem.vue.js +2 -2
  66. package/dist/martyrs/src/components/Menu/MenuItem.vue.js.map +1 -1
  67. package/dist/martyrs/src/components/PhotoViewer/PhotoViewer.vue.js +2 -2
  68. package/dist/martyrs/src/components/PhotoViewer/PhotoViewer.vue.js.map +1 -1
  69. package/dist/martyrs/src/components/Radio/Radio.vue.js +1 -1
  70. package/dist/martyrs/src/components/Radio/Radio.vue.js.map +1 -1
  71. package/dist/martyrs/src/components/Select/{Select.vue2.js → Select.vue.js} +4 -4
  72. package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -0
  73. package/dist/martyrs/src/components/SelectMulti/{SelectMulti.vue.js → SelectMulti.vue2.js} +2 -2
  74. package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue2.js.map +1 -0
  75. package/dist/martyrs/src/components/Table/Table.vue.js +3 -3
  76. package/dist/martyrs/src/components/Table/Table.vue.js.map +1 -1
  77. package/dist/martyrs/src/components/Text/Text.vue.js +1 -1
  78. package/dist/martyrs/src/components/Text/Text.vue.js.map +1 -1
  79. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js +3 -3
  80. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js.map +1 -1
  81. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +3 -3
  82. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js.map +1 -1
  83. package/dist/martyrs/src/modules/auth/views/components/blocks/CardUser.vue.js +2 -2
  84. package/dist/martyrs/src/modules/auth/views/components/blocks/ProfileCard.vue.js +4 -4
  85. package/dist/martyrs/src/modules/auth/views/components/blocks/ProfileCard.vue.js.map +1 -1
  86. package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js +1 -1
  87. package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js.map +1 -1
  88. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +1 -1
  89. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +4 -4
  90. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js.map +1 -1
  91. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +2 -2
  92. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +9 -9
  93. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
  94. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
  95. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js.map +1 -1
  96. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +2 -2
  97. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js.map +1 -1
  98. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +2 -2
  99. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +3 -3
  100. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js.map +1 -1
  101. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +5 -5
  102. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js.map +1 -1
  103. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +3 -3
  104. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js.map +1 -1
  105. package/dist/martyrs/src/modules/auth/views/components/pages/UserDashboard.vue.js +3 -3
  106. package/dist/martyrs/src/modules/auth/views/components/pages/UserDashboard.vue.js.map +1 -1
  107. package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.js +1 -1
  108. package/dist/martyrs/src/modules/auth/views/components/sections/FeaturedUsers.vue.js.map +1 -1
  109. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +9 -9
  110. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js.map +1 -1
  111. package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js +1 -1
  112. package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js.map +1 -1
  113. package/dist/martyrs/src/modules/auth/views/store/auth.js +1 -1
  114. package/dist/martyrs/src/modules/backoffice/components/pages/Dashboard.vue.js +4 -4
  115. package/dist/martyrs/src/modules/backoffice/components/pages/Dashboard.vue.js.map +1 -1
  116. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +6 -6
  117. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +1 -1
  118. package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.js +1 -1
  119. package/dist/martyrs/src/modules/chats/components/blocks/ChatMessage.vue.js.map +1 -1
  120. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js +2 -2
  121. package/dist/martyrs/src/modules/chats/components/sections/ChatWindow.vue.js.map +1 -1
  122. package/dist/martyrs/src/modules/community/components/blocks/Activity.vue.js +7 -7
  123. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +1 -1
  124. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js.map +1 -1
  125. package/dist/martyrs/src/modules/community/components/blocks/FooterBlogpost.vue.js +4 -4
  126. package/dist/martyrs/src/modules/community/components/blocks/FooterBlogpost.vue.js.map +1 -1
  127. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +11 -11
  128. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js.map +1 -1
  129. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
  130. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +3 -3
  131. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js.map +1 -1
  132. package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js +2 -2
  133. package/dist/martyrs/src/modules/community/components/pages/Posts.vue.js.map +1 -1
  134. package/dist/martyrs/src/modules/community/components/sections/Comment.vue.js +3 -3
  135. package/dist/martyrs/src/modules/community/components/sections/Comment.vue.js.map +1 -1
  136. package/dist/martyrs/src/modules/community/components/sections/Comments.vue.js +1 -1
  137. package/dist/martyrs/src/modules/constructor/components/elements/Audio.vue.js +1 -1
  138. package/dist/martyrs/src/modules/constructor/components/elements/Audio.vue.js.map +1 -1
  139. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +1 -1
  140. package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.js +2 -2
  141. package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.js.map +1 -1
  142. package/dist/martyrs/src/modules/constructor/components/elements/Textarea.vue2.js +1 -1
  143. package/dist/martyrs/src/modules/constructor/components/elements/Textarea.vue2.js.map +1 -1
  144. package/dist/martyrs/src/modules/constructor/components/elements/Video.vue.js +1 -1
  145. package/dist/martyrs/src/modules/constructor/components/elements/Video.vue.js.map +1 -1
  146. package/dist/martyrs/src/modules/constructor/components/sections/Constructor.vue.js +1 -1
  147. package/dist/martyrs/src/modules/core/views/classes/core.app.js +2 -1
  148. package/dist/martyrs/src/modules/core/views/classes/core.app.js.map +1 -1
  149. package/dist/martyrs/src/modules/core/views/components/blocks/BlockSearch.vue.js +1 -1
  150. package/dist/martyrs/src/modules/core/views/components/blocks/BlockSorting.vue.js +2 -2
  151. package/dist/martyrs/src/modules/core/views/components/blocks/BlockSorting.vue.js.map +1 -1
  152. package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js +9 -9
  153. package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js.map +1 -1
  154. package/dist/martyrs/src/modules/core/views/components/blocks/HelpCard.vue.js +2 -2
  155. package/dist/martyrs/src/modules/core/views/components/blocks/HelpCard.vue.js.map +1 -1
  156. package/dist/martyrs/src/modules/core/views/components/blocks/PopupAuth.vue.js +2 -2
  157. package/dist/martyrs/src/modules/core/views/components/blocks/PopupAuth.vue.js.map +1 -1
  158. package/dist/martyrs/src/modules/core/views/components/blocks/PopupDateSelector.vue.js +1 -1
  159. package/dist/martyrs/src/modules/core/views/components/elements/ButtonDate.vue.js +1 -1
  160. package/dist/martyrs/src/modules/core/views/components/elements/ButtonDate.vue.js.map +1 -1
  161. package/dist/martyrs/src/modules/core/views/components/elements/PhotoStack.vue.js +3 -3
  162. package/dist/martyrs/src/modules/core/views/components/layouts/App.vue.js +25 -5
  163. package/dist/martyrs/src/modules/core/views/components/layouts/App.vue.js.map +1 -1
  164. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +4 -4
  165. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
  166. package/dist/martyrs/src/modules/core/views/components/partials/BottomNavigationBar.vue.js +11 -11
  167. package/dist/martyrs/src/modules/core/views/components/partials/BottomNavigationBar.vue.js.map +1 -1
  168. package/dist/martyrs/src/modules/core/views/components/partials/CitySelection.vue.js +1 -1
  169. package/dist/martyrs/src/modules/core/views/components/partials/CitySelection.vue.js.map +1 -1
  170. package/dist/martyrs/src/modules/core/views/components/partials/Footer.vue.js +16 -16
  171. package/dist/martyrs/src/modules/core/views/components/partials/Footer.vue.js.map +1 -1
  172. package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js +9 -9
  173. package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js.map +1 -1
  174. package/dist/martyrs/src/modules/core/views/components/partials/LocationSelection.vue.js +1 -1
  175. package/dist/martyrs/src/modules/core/views/components/partials/LocationSelection.vue.js.map +1 -1
  176. package/dist/martyrs/src/modules/core/views/components/partials/Navigation.vue.js +24 -24
  177. package/dist/martyrs/src/modules/core/views/components/partials/Navigation.vue.js.map +1 -1
  178. package/dist/martyrs/src/modules/core/views/components/partials/NavigationBar.vue.js +4 -4
  179. package/dist/martyrs/src/modules/core/views/components/partials/NavigationBar.vue.js.map +1 -1
  180. package/dist/martyrs/src/modules/core/views/components/partials/Sidebar.vue.js +7 -7
  181. package/dist/martyrs/src/modules/core/views/components/partials/Sidebar.vue.js.map +1 -1
  182. package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js +2 -2
  183. package/dist/martyrs/src/modules/core/views/components/sections/SectionPageTitle.vue.js.map +1 -1
  184. package/dist/martyrs/src/modules/core/views/components/sections/Walkthrough.vue.js +1 -1
  185. package/dist/martyrs/src/modules/core/views/components/sections/filters/FilterCheckbox.vue2.js +2 -2
  186. package/dist/martyrs/src/modules/core/views/components/sections/filters/FilterCheckbox.vue2.js.map +1 -1
  187. package/dist/martyrs/src/modules/core/views/components/sections/filters/FilterDateRange.vue2.js +3 -3
  188. package/dist/martyrs/src/modules/core/views/components/sections/filters/FilterDateRange.vue2.js.map +1 -1
  189. package/dist/martyrs/src/modules/core/views/components/sections/filters/FilterRange.vue.js +3 -3
  190. package/dist/martyrs/src/modules/core/views/components/sections/filters/FilterRange.vue.js.map +1 -1
  191. package/dist/martyrs/src/modules/core/views/store/core.store.js +29 -47
  192. package/dist/martyrs/src/modules/core/views/store/core.store.js.map +1 -1
  193. package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js +21 -2
  194. package/dist/martyrs/src/modules/core/views/utils/vue-app-renderer.js.map +1 -1
  195. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +5 -5
  196. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js.map +1 -1
  197. package/dist/martyrs/src/modules/events/components/blocks/CardEventShort.vue.js +3 -3
  198. package/dist/martyrs/src/modules/events/components/blocks/CardEventShort.vue.js.map +1 -1
  199. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
  200. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
  201. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +4 -4
  202. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js.map +1 -1
  203. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +21 -21
  204. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js.map +1 -1
  205. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +7 -7
  206. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
  207. package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +2 -2
  208. package/dist/martyrs/src/modules/events/components/pages/Events.vue.js.map +1 -1
  209. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +2 -2
  210. package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js.map +1 -1
  211. package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js +7 -7
  212. package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js.map +1 -1
  213. package/dist/martyrs/src/modules/events/components/sections/EventsHot.vue.js +2 -2
  214. package/dist/martyrs/src/modules/events/components/sections/EventsHot.vue.js.map +1 -1
  215. package/dist/martyrs/src/modules/events/components/sections/List.vue.js +1 -1
  216. package/dist/martyrs/src/modules/events/components/sections/List.vue.js.map +1 -1
  217. package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.js +1 -1
  218. package/dist/martyrs/src/modules/events/components/sections/SelectDate.vue.js.map +1 -1
  219. package/dist/martyrs/src/modules/gallery/components/pages/Gallery.vue.js +1 -1
  220. package/dist/martyrs/src/modules/gallery/components/pages/Gallery.vue.js.map +1 -1
  221. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +5 -5
  222. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js.map +1 -1
  223. package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.js +4 -4
  224. package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.js.map +1 -1
  225. package/dist/martyrs/src/modules/icons/navigation/IconSort.vue.js +4 -4
  226. package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js +7 -7
  227. package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js.map +1 -1
  228. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +6 -6
  229. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js.map +1 -1
  230. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
  231. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +3 -3
  232. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js.map +1 -1
  233. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +4 -4
  234. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js.map +1 -1
  235. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +11 -11
  236. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js.map +1 -1
  237. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +9 -9
  238. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js.map +1 -1
  239. package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.js +5 -5
  240. package/dist/martyrs/src/modules/landing/components/sections/SectionEarn.vue.js.map +1 -1
  241. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js +2 -2
  242. package/dist/martyrs/src/modules/landing/components/sections/SectionGuide.vue.js.map +1 -1
  243. package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.js +1 -1
  244. package/dist/martyrs/src/modules/landing/components/sections/SectionHeroToken.vue.js.map +1 -1
  245. package/dist/martyrs/src/modules/landing/components/sections/SectionJoinUs.vue.js +2 -2
  246. package/dist/martyrs/src/modules/landing/components/sections/SectionJoinUs.vue.js.map +1 -1
  247. package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.js +3 -3
  248. package/dist/martyrs/src/modules/landing/components/sections/SectionMobileApp.vue.js.map +1 -1
  249. package/dist/martyrs/src/modules/landing/components/sections/SectionOverview.vue.js +2 -2
  250. package/dist/martyrs/src/modules/landing/components/sections/SectionOverview.vue.js.map +1 -1
  251. package/dist/martyrs/src/modules/landing/components/sections/SectionRoadmap.vue.js +3 -3
  252. package/dist/martyrs/src/modules/landing/components/sections/SectionRoadmap.vue.js.map +1 -1
  253. package/dist/martyrs/src/modules/marketplace/marketplace.client.js +3 -3
  254. package/dist/martyrs/src/modules/marketplace/marketplace.client.js.map +1 -1
  255. package/dist/martyrs/src/modules/marketplace/views/components/pages/Marketplace.vue.js +6 -6
  256. package/dist/martyrs/src/modules/marketplace/views/components/pages/Marketplace.vue.js.map +1 -1
  257. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +5 -3
  258. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js.map +1 -1
  259. package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js +4 -4
  260. package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js.map +1 -1
  261. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +6 -6
  262. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js.map +1 -1
  263. package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js +4 -4
  264. package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js.map +1 -1
  265. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +4 -4
  266. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js.map +1 -1
  267. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +6 -6
  268. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js.map +1 -1
  269. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +6 -6
  270. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js.map +1 -1
  271. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +11 -11
  272. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js.map +1 -1
  273. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +7 -7
  274. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js.map +1 -1
  275. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +9 -9
  276. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js.map +1 -1
  277. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +3 -3
  278. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js.map +1 -1
  279. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +16 -16
  280. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js.map +1 -1
  281. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +24 -24
  282. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -1
  283. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +8 -8
  284. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js.map +1 -1
  285. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js +10 -13
  286. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js.map +1 -1
  287. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +10 -10
  288. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js.map +1 -1
  289. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +27 -27
  290. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -1
  291. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +17 -17
  292. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js.map +1 -1
  293. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +27 -27
  294. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -1
  295. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
  296. package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +8 -8
  297. package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js.map +1 -1
  298. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +1 -1
  299. package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js +1 -1
  300. package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +1 -1
  301. package/dist/martyrs/src/modules/music/music.client.js +6 -6
  302. package/dist/martyrs/src/modules/music/music.client.js.map +1 -1
  303. package/dist/martyrs/src/modules/notifications/components/blocks/NotificationItem.vue.js +2 -2
  304. package/dist/martyrs/src/modules/notifications/components/blocks/NotificationItem.vue.js.map +1 -1
  305. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +1 -1
  306. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js.map +1 -1
  307. package/dist/martyrs/src/modules/notifications/notifications.client.js +2 -2
  308. package/dist/martyrs/src/modules/notifications/store/notifications.store.js +1 -1
  309. package/dist/martyrs/src/modules/orders/components/blocks/CardApplication.vue.js +2 -2
  310. package/dist/martyrs/src/modules/orders/components/blocks/CardCustomer.vue.js +2 -2
  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 +5 -5
  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 +9 -9
  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 +4 -4
  318. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js.map +1 -1
  319. package/dist/martyrs/src/modules/orders/components/blocks/StatusHistory.vue.js +2 -2
  320. package/dist/martyrs/src/modules/orders/components/blocks/StatusHistory.vue.js.map +1 -1
  321. package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js +1 -1
  322. package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js.map +1 -1
  323. package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.js +3 -3
  324. package/dist/martyrs/src/modules/orders/components/elements/PriceTotal.vue.js.map +1 -1
  325. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +5 -5
  326. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js.map +1 -1
  327. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +6 -6
  328. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js.map +1 -1
  329. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +1 -1
  330. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +18 -18
  331. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js.map +1 -1
  332. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +3 -3
  333. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js.map +1 -1
  334. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +6 -6
  335. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js.map +1 -1
  336. package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.js +2 -2
  337. package/dist/martyrs/src/modules/orders/components/partials/ShopCart.vue.js.map +1 -1
  338. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +4 -4
  339. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js.map +1 -1
  340. package/dist/martyrs/src/modules/orders/components/sections/AskToLogin.vue.js +1 -1
  341. package/dist/martyrs/src/modules/orders/components/sections/AskToLogin.vue.js.map +1 -1
  342. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +4 -4
  343. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js.map +1 -1
  344. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +2 -2
  345. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
  346. package/dist/martyrs/src/modules/orders/components/sections/Succes.vue.js +3 -3
  347. package/dist/martyrs/src/modules/orders/store/shopcart.js +1 -1
  348. package/dist/martyrs/src/modules/organizations/components/blocks/CardDepartment.vue.js +2 -2
  349. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +3 -3
  350. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js.map +1 -1
  351. package/dist/martyrs/src/modules/organizations/components/blocks/Contacts.vue.js +8 -8
  352. package/dist/martyrs/src/modules/organizations/components/blocks/Contacts.vue.js.map +1 -1
  353. package/dist/martyrs/src/modules/organizations/components/blocks/Rating.vue.js +1 -1
  354. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  355. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +4 -4
  356. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js.map +1 -1
  357. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +3 -3
  358. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js.map +1 -1
  359. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +3 -3
  360. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js.map +1 -1
  361. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js +2 -2
  362. package/dist/martyrs/src/modules/organizations/components/pages/Department.vue.js.map +1 -1
  363. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +1 -1
  364. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js.map +1 -1
  365. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +6 -6
  366. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js.map +1 -1
  367. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +2 -2
  368. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +4 -4
  369. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js +2 -2
  370. package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.js.map +1 -1
  371. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +5 -5
  372. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js.map +1 -1
  373. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +4 -4
  374. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js.map +1 -1
  375. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +2 -2
  376. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +4 -4
  377. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js.map +1 -1
  378. package/dist/martyrs/src/modules/pages/views/components/pages/Page.vue.js +5 -5
  379. package/dist/martyrs/src/modules/pages/views/components/pages/Page.vue.js.map +1 -1
  380. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +2 -2
  381. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
  382. package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js +1 -1
  383. package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js.map +1 -1
  384. package/dist/martyrs/src/modules/products/components/blocks/CardPosition.vue.js +4 -4
  385. package/dist/martyrs/src/modules/products/components/blocks/CardPosition.vue.js.map +1 -1
  386. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js +3 -3
  387. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js.map +1 -1
  388. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +4 -4
  389. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js.map +1 -1
  390. package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.js +3 -3
  391. package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.js.map +1 -1
  392. package/dist/martyrs/src/modules/products/components/blocks/ProductVariants.vue.js +2 -2
  393. package/dist/martyrs/src/modules/products/components/blocks/ProductVariants.vue.js.map +1 -1
  394. package/dist/martyrs/src/modules/products/components/elements/Image360.vue.js +4 -4
  395. package/dist/martyrs/src/modules/products/components/elements/Image360.vue.js.map +1 -1
  396. package/dist/martyrs/src/modules/products/components/elements/Price.vue.js +2 -2
  397. package/dist/martyrs/src/modules/products/components/elements/Price.vue.js.map +1 -1
  398. package/dist/martyrs/src/modules/products/components/elements/QuantitySelector.vue.js +3 -3
  399. package/dist/martyrs/src/modules/products/components/elements/QuantitySelector.vue.js.map +1 -1
  400. package/dist/martyrs/src/modules/products/components/elements/THC.vue.js +1 -1
  401. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +2 -2
  402. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js.map +1 -1
  403. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +5 -5
  404. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
  405. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +7 -7
  406. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js.map +1 -1
  407. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +10 -10
  408. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js.map +1 -1
  409. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +12 -12
  410. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js.map +1 -1
  411. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +6 -6
  412. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js.map +1 -1
  413. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +9 -9
  414. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js.map +1 -1
  415. package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.js +1 -1
  416. package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.js.map +1 -1
  417. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +11 -11
  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 +3 -3
  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 +3 -3
  422. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js.map +1 -1
  423. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +3 -3
  424. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js.map +1 -1
  425. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +7 -7
  426. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js.map +1 -1
  427. package/dist/martyrs/src/modules/rents/views/components/blocks/CardRent.vue.js +1 -1
  428. package/dist/martyrs/src/modules/rents/views/components/blocks/CardRent.vue.js.map +1 -1
  429. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/DateLabel.vue.js +1 -1
  430. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.js +2 -2
  431. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.js.map +1 -1
  432. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.js +8 -8
  433. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.js.map +1 -1
  434. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttHeaderCell.vue.js +1 -1
  435. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttHeaderCell.vue.js.map +1 -1
  436. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +2 -2
  437. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
  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 +8 -8
  440. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js.map +1 -1
  441. package/dist/martyrs/src/modules/reports/components/pages/BackofficeReports.vue.js +3 -3
  442. package/dist/martyrs/src/modules/reports/components/pages/BackofficeReports.vue.js.map +1 -1
  443. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +3 -3
  444. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js.map +1 -1
  445. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +5 -5
  446. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js.map +1 -1
  447. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +4 -4
  448. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js.map +1 -1
  449. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +4 -4
  450. package/dist/martyrs/src/modules/spots/components/layouts/Spots.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 +6 -6
  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 +5 -5
  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 +3 -3
  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/wallet/views/components/blocks/CardBalanceReplenished.vue.js +5 -5
  461. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue.js.map +1 -1
  462. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +6 -6
  463. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js.map +1 -1
  464. package/dist/martyrs/src/modules/wallet/views/components/blocks/CashDeposit.vue.js +2 -2
  465. package/dist/martyrs/src/modules/wallet/views/components/blocks/CashDeposit.vue.js.map +1 -1
  466. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +6 -6
  467. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js.map +1 -1
  468. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue.js +12 -12
  469. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue.js.map +1 -1
  470. package/dist/martyrs/src/modules/wallet/views/components/elements/ConnectMetamask.vue.js +4 -4
  471. package/dist/martyrs/src/modules/wallet/views/components/elements/ConnectMetamask.vue.js.map +1 -1
  472. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +25 -25
  473. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js.map +1 -1
  474. package/dist/martyrs.css +1 -1
  475. package/dist/martyrs.es.js +1 -1
  476. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/core/utils.js +1 -1
  477. package/dist/node_modules/.pnpm/qrcode@1.5.4/node_modules/qrcode/lib/renderer/utils.js +1 -1
  478. package/dist/style.css +194 -202
  479. package/dist/{web-CH5wzMHy.js → web-BqTV9va1.js} +1 -1
  480. package/package.json +6 -8
  481. package/src/builder/modes/ssr.prod.js +1 -0
  482. package/src/builder/modes/ssr.rspack.dev.js +82 -84
  483. package/src/builder/rspack/rspack.config.base.js +7 -0
  484. package/src/builder/rspack/rspack.config.ssr.client.js +19 -44
  485. package/src/builder/templates/page.js +21 -0
  486. package/src/components/Block/Block.vue +1 -1
  487. package/src/components/BottomSheet/BottomSheet.vue +1 -1
  488. package/src/components/Calendar/Calendar.vue +5 -5
  489. package/src/components/Checkbox/Checkbox.vue +2 -2
  490. package/src/components/Chips/Chips.vue +2 -2
  491. package/src/components/Completion/Completion.vue +2 -2
  492. package/src/components/Countdown/Countdown.vue +5 -5
  493. package/src/components/DatePicker/DatePicker.vue +4 -4
  494. package/src/components/EditImages/EditImages.vue +1 -1
  495. package/src/components/Feed/Feed.old.vue +1 -1
  496. package/src/components/Feed/Feed.vue +1 -1
  497. package/src/components/FieldBig/FieldBig.vue +2 -2
  498. package/src/components/FieldPhone/FieldPhone.vue +1 -1
  499. package/src/components/FieldTags/BlockTags.vue +1 -1
  500. package/src/components/Loader/Loader.vue +1 -1
  501. package/src/components/Menu/MenuItem.vue +2 -2
  502. package/src/components/PhotoViewer/PhotoViewer.vue +1 -1
  503. package/src/components/Radio/Radio.vue +1 -1
  504. package/src/components/Select/Select.vue +1 -1
  505. package/src/components/Table/Table.vue +2 -2
  506. package/src/components/Text/Text.vue +1 -1
  507. package/src/components/UploadImage/UploadImage.vue +2 -2
  508. package/src/components/UploadImageMultiple/UploadImageMultiple.vue +3 -3
  509. package/src/configurator/components/layouts/layoutConfigurator.vue +1 -1
  510. package/src/configurator/components/pages/Styles.vue +2 -2
  511. package/src/jit/.claude/settings.local.json +10 -0
  512. package/src/jit/CLAUDE.md +387 -0
  513. package/src/jit/core.js +274 -0
  514. package/src/jit/extractor.js +140 -0
  515. package/src/jit/index.js +19 -0
  516. package/src/jit/loader.js +46 -0
  517. package/src/jit/plugin.js +209 -0
  518. package/src/jit/rules.js +474 -0
  519. package/src/jit/variants.js +128 -0
  520. package/src/modules/auth/views/components/blocks/CardUser.vue +2 -2
  521. package/src/modules/auth/views/components/blocks/ProfileCard.vue +4 -4
  522. package/src/modules/auth/views/components/layouts/Auth.vue +1 -1
  523. package/src/modules/auth/views/components/pages/EnterPassword.vue +2 -2
  524. package/src/modules/auth/views/components/pages/Profile.vue +5 -5
  525. package/src/modules/auth/views/components/pages/ProfileBlogposts.vue +1 -1
  526. package/src/modules/auth/views/components/pages/ProfileEditAccount.vue +2 -2
  527. package/src/modules/auth/views/components/pages/ResetPassword.vue +1 -1
  528. package/src/modules/auth/views/components/pages/SignIn.vue +3 -3
  529. package/src/modules/auth/views/components/pages/SignUp.vue +1 -1
  530. package/src/modules/auth/views/components/pages/UserDashboard.vue +3 -3
  531. package/src/modules/auth/views/components/sections/FeaturedUsers.vue +1 -1
  532. package/src/modules/auth/views/components/sections/ProfileCompletion.vue +2 -2
  533. package/src/modules/auth/views/components/sections/ProfileEditCredentials.vue +7 -7
  534. package/src/modules/auth/views/components/sections/SliderFeatures.vue +1 -1
  535. package/src/modules/backoffice/components/admin/Backcalls.vue +1 -1
  536. package/src/modules/backoffice/components/admin/FastOrders.vue +1 -1
  537. package/src/modules/backoffice/components/admin/ProductEdit.vue +2 -2
  538. package/src/modules/backoffice/components/admin/UserEdit.vue +1 -1
  539. package/src/modules/backoffice/components/admin/Users.vue +2 -2
  540. package/src/modules/backoffice/components/pages/Dashboard.vue +4 -4
  541. package/src/modules/backoffice/components/partials/Sidebar.vue +5 -5
  542. package/src/modules/chats/components/blocks/ChatMessage.vue +1 -1
  543. package/src/modules/chats/components/sections/ChatWindow.vue +2 -2
  544. package/src/modules/community/components/blocks/Activity.vue +7 -7
  545. package/src/modules/community/components/blocks/CardBlogpost.vue +1 -1
  546. package/src/modules/community/components/blocks/FooterBlogpost.vue +4 -4
  547. package/src/modules/community/components/layouts/Community.vue +10 -10
  548. package/src/modules/community/components/pages/CreateBlogPost.vue +1 -1
  549. package/src/modules/community/components/pages/Posts.vue +2 -2
  550. package/src/modules/community/components/sections/Comment.vue +2 -2
  551. package/src/modules/constructor/components/elements/Audio.vue +1 -1
  552. package/src/modules/constructor/components/elements/Caption.vue +1 -1
  553. package/src/modules/constructor/components/elements/Embed.vue +1 -1
  554. package/src/modules/constructor/components/elements/Textarea.vue +1 -1
  555. package/src/modules/constructor/components/elements/Video.vue +1 -1
  556. package/src/modules/core/views/classes/core.app.js +2 -1
  557. package/src/modules/core/views/components/blocks/BlockSorting.vue +2 -2
  558. package/src/modules/core/views/components/blocks/CardFooter.vue +4 -4
  559. package/src/modules/core/views/components/blocks/CardHeader.vue +7 -7
  560. package/src/modules/core/views/components/blocks/HelpCard.vue +1 -1
  561. package/src/modules/core/views/components/blocks/PopupAuth.vue +1 -1
  562. package/src/modules/core/views/components/elements/ButtonDate.vue +1 -1
  563. package/src/modules/core/views/components/elements/PhotoStack.vue +3 -3
  564. package/src/modules/core/views/components/layouts/App.vue +28 -4
  565. package/src/modules/core/views/components/layouts/Client.vue +4 -4
  566. package/src/modules/core/views/components/partials/BottomNavigationBar.vue +15 -15
  567. package/src/modules/core/views/components/partials/CitySelection.vue +1 -1
  568. package/src/modules/core/views/components/partials/Footer.centered.vue +17 -17
  569. package/src/modules/core/views/components/partials/Footer.vue +18 -18
  570. package/src/modules/core/views/components/partials/Header.vue +10 -11
  571. package/src/modules/core/views/components/partials/LocationSelection.vue +1 -1
  572. package/src/modules/core/views/components/partials/Navigation.vue +20 -19
  573. package/src/modules/core/views/components/partials/NavigationBar.vue +3 -3
  574. package/src/modules/core/views/components/partials/Sidebar.vue +6 -6
  575. package/src/modules/core/views/components/sections/SectionPageTitle.vue +2 -2
  576. package/src/modules/core/views/components/sections/filters/FilterCheckbox.vue +1 -1
  577. package/src/modules/core/views/components/sections/filters/FilterDateRange.vue +2 -2
  578. package/src/modules/core/views/components/sections/filters/FilterPrice.vue +2 -2
  579. package/src/modules/core/views/components/sections/filters/FilterRange.vue +2 -2
  580. package/src/modules/core/views/store/core.store.js +36 -60
  581. package/src/modules/core/views/utils/vue-app-renderer.js +31 -1
  582. package/src/modules/events/components/blocks/CardEvent.vue +6 -6
  583. package/src/modules/events/components/blocks/CardEventShort.vue +3 -3
  584. package/src/modules/events/components/pages/EditEvent.vue +1 -1
  585. package/src/modules/events/components/pages/EditEventTickets.vue +18 -18
  586. package/src/modules/events/components/pages/Event.vue +5 -5
  587. package/src/modules/events/components/pages/Events.vue +2 -2
  588. package/src/modules/events/components/pages/EventsBackoffice.vue +2 -2
  589. package/src/modules/events/components/sections/EditTickets.vue +5 -5
  590. package/src/modules/events/components/sections/EventsHot.vue +2 -2
  591. package/src/modules/events/components/sections/List.vue +1 -1
  592. package/src/modules/events/components/sections/SelectDate.vue +1 -1
  593. package/src/modules/gallery/components/pages/Gallery.vue +1 -1
  594. package/src/modules/gallery/components/sections/BackofficeGallery.vue +1 -1
  595. package/src/modules/governance/reactcode/src/components/CreateInitiativeForm.tsx +14 -14
  596. package/src/modules/governance/reactcode/src/components/CreateMilestoneForm.tsx +13 -13
  597. package/src/modules/governance/reactcode/src/components/EmptyState.tsx +2 -2
  598. package/src/modules/governance/reactcode/src/components/InitiativeCard.tsx +1 -1
  599. package/src/modules/governance/reactcode/src/components/LinkedEntityCard.tsx +1 -1
  600. package/src/modules/governance/reactcode/src/components/MilestoneCard.tsx +2 -2
  601. package/src/modules/governance/reactcode/src/components/ProductRepositories.tsx +6 -6
  602. package/src/modules/governance/reactcode/src/components/ProductSummary.tsx +18 -18
  603. package/src/modules/governance/reactcode/src/components/ProductTeam.tsx +7 -7
  604. package/src/modules/governance/reactcode/src/components/ProposeTaskForm.tsx +9 -9
  605. package/src/modules/governance/reactcode/src/components/TaskAssignForm.tsx +4 -4
  606. package/src/modules/governance/reactcode/src/components/TaskCard.tsx +1 -1
  607. package/src/modules/governance/reactcode/src/components/TaskStatusBadge.tsx +1 -1
  608. package/src/modules/governance/reactcode/src/components/VoteForm.tsx +6 -6
  609. package/src/modules/governance/reactcode/src/components/VotingCard.tsx +2 -2
  610. package/src/modules/governance/reactcode/src/components/VotingResults.tsx +15 -15
  611. package/src/modules/governance/reactcode/src/pages/InitiativeDetailPage.tsx +41 -41
  612. package/src/modules/governance/reactcode/src/pages/InitiativeMilestonesPage.tsx +8 -8
  613. package/src/modules/governance/reactcode/src/pages/InitiativesListPage.tsx +6 -6
  614. package/src/modules/governance/reactcode/src/pages/MilestoneDetailPage.tsx +9 -9
  615. package/src/modules/governance/reactcode/src/pages/RoadmapPage.tsx +14 -14
  616. package/src/modules/governance/reactcode/src/pages/TaskDetailPage.tsx +44 -44
  617. package/src/modules/governance/reactcode/src/pages/VotingDetailPage.tsx +8 -8
  618. package/src/modules/governance/reactcode/src/pages/VotingsListPage.tsx +3 -3
  619. package/src/modules/governance/reactcode-2/App.tsx +28 -0
  620. package/src/modules/governance/reactcode-2/README.md +20 -0
  621. package/src/modules/governance/reactcode-2/components/Charts.tsx +58 -0
  622. package/src/modules/governance/reactcode-2/components/Layout.tsx +457 -0
  623. package/src/modules/governance/reactcode-2/components/TaskPage.tsx +325 -0
  624. package/src/modules/governance/reactcode-2/components/VoteBadge.tsx +27 -0
  625. package/src/modules/governance/reactcode-2/components/VotingsFeedPage.tsx +328 -0
  626. package/src/modules/governance/reactcode-2/constants.ts +154 -0
  627. package/src/modules/governance/reactcode-2/index.html +70 -0
  628. package/src/modules/governance/reactcode-2/index.tsx +15 -0
  629. package/src/modules/governance/reactcode-2/metadata.json +5 -0
  630. package/src/modules/governance/reactcode-2/package.json +23 -0
  631. package/src/modules/governance/reactcode-2/pnpm-lock.yaml +1410 -0
  632. package/src/modules/governance/reactcode-2/tsconfig.json +29 -0
  633. package/src/modules/governance/reactcode-2/types.ts +48 -0
  634. package/src/modules/governance/reactcode-2/vite.config.ts +23 -0
  635. package/src/modules/governance/views/components/blocks/CardInitiativeItem.vue +10 -10
  636. package/src/modules/governance/views/components/blocks/CardMilestoneItem.vue +15 -15
  637. package/src/modules/governance/views/components/blocks/CardTaskItem.vue +9 -9
  638. package/src/modules/governance/views/components/blocks/CardVotingItem.vue +11 -11
  639. package/src/modules/governance/views/components/layouts/Governance.vue +1 -1
  640. package/src/modules/governance/views/components/pages/Governance.vue +3 -3
  641. package/src/modules/governance/views/components/pages/Initiative.vue +112 -112
  642. package/src/modules/governance/views/components/pages/InitiativeMilestones.vue +31 -31
  643. package/src/modules/governance/views/components/pages/Initiatives.vue +20 -22
  644. package/src/modules/governance/views/components/pages/Milestone.vue +25 -25
  645. package/src/modules/governance/views/components/pages/Roadmap.vue +47 -47
  646. package/src/modules/governance/views/components/pages/Task.vue +106 -106
  647. package/src/modules/governance/views/components/pages/Tasks.vue +16 -16
  648. package/src/modules/governance/views/components/pages/Voting.vue +23 -23
  649. package/src/modules/governance/views/components/pages/Votings.vue +7 -7
  650. package/src/modules/governance/views/components/partials/EmptyState.vue +3 -3
  651. package/src/modules/governance/views/components/partials/LinkedEntityCard.vue +11 -11
  652. package/src/modules/governance/views/components/partials/TaskStatusBadge.vue +4 -4
  653. package/src/modules/governance/views/components/partials/VoteForm.vue +14 -14
  654. package/src/modules/governance/views/components/partials/VotingResults.vue +22 -22
  655. package/src/modules/icons/components/IconSearchPopup.vue +3 -3
  656. package/src/modules/icons/entities/IconCash.vue +23 -0
  657. package/src/modules/icons/navigation/IconSort.vue +4 -4
  658. package/src/modules/icons/pages/IconsPage.vue +7 -7
  659. package/src/modules/inventory/components/forms/AdjustmentForm.vue +3 -3
  660. package/src/modules/inventory/components/forms/HistoryView.vue +1 -1
  661. package/src/modules/inventory/components/forms/StockAlertsForm.vue +1 -1
  662. package/src/modules/inventory/components/pages/Inventory.vue +10 -10
  663. package/src/modules/inventory/components/pages/InventoryEdit.vue +6 -6
  664. package/src/modules/landing/components/blocks/MapBlock.vue +2 -2
  665. package/src/modules/landing/components/sections/Examples.vue +1 -1
  666. package/src/modules/landing/components/sections/InstagramSection.vue +1 -1
  667. package/src/modules/landing/components/sections/SectionEarn.vue +4 -4
  668. package/src/modules/landing/components/sections/SectionFeature.vue +1 -1
  669. package/src/modules/landing/components/sections/SectionFocus.vue +2 -2
  670. package/src/modules/landing/components/sections/SectionGuide.vue +2 -2
  671. package/src/modules/landing/components/sections/SectionHeroToken.vue +1 -1
  672. package/src/modules/landing/components/sections/SectionHeroVideo.vue +2 -2
  673. package/src/modules/landing/components/sections/SectionJoinUs.vue +2 -2
  674. package/src/modules/landing/components/sections/SectionMobileApp.vue +3 -3
  675. package/src/modules/landing/components/sections/SectionOverview.vue +2 -2
  676. package/src/modules/landing/components/sections/SectionRoadmap.vue +2 -2
  677. package/src/modules/marketplace/views/components/layouts/Marketplace.vue +8 -8
  678. package/src/modules/marketplace/views/components/pages/Marketplace.vue +5 -5
  679. package/src/modules/marketplace/views/components/sections/SectionMenu.vue +3 -3
  680. package/src/modules/music/components/SidebarMusic.vue +11 -11
  681. package/src/modules/music/components/blocks/ActionButtons.vue +2 -2
  682. package/src/modules/music/components/cards/AlbumCard.vue +4 -4
  683. package/src/modules/music/components/cards/ArtistCard.vue +3 -8
  684. package/src/modules/music/components/cards/ArtistCardSmall.vue +2 -2
  685. package/src/modules/music/components/cards/PlaylistCard.vue +4 -4
  686. package/src/modules/music/components/cards/TrackListCard.vue +5 -5
  687. package/src/modules/music/components/forms/AlbumForm.vue +8 -8
  688. package/src/modules/music/components/forms/ArtistForm.vue +4 -4
  689. package/src/modules/music/components/forms/PlaylistForm.vue +7 -7
  690. package/src/modules/music/components/forms/SearchForm.vue +1 -1
  691. package/src/modules/music/components/forms/TrackForm.vue +13 -13
  692. package/src/modules/music/components/pages/Album.vue +22 -22
  693. package/src/modules/music/components/pages/Artist.vue +7 -7
  694. package/src/modules/music/components/pages/MusicHome.vue +13 -18
  695. package/src/modules/music/components/pages/MusicLibrary.vue +9 -9
  696. package/src/modules/music/components/pages/Playlist.vue +25 -25
  697. package/src/modules/music/components/pages/SearchResults.vue +15 -15
  698. package/src/modules/music/components/pages/Track.vue +25 -25
  699. package/src/modules/music/components/player/FullscreenPlayer.vue +5 -5
  700. package/src/modules/notifications/components/blocks/NotificationItem.vue +1 -1
  701. package/src/modules/notifications/components/elements/NotificationBadge.vue +1 -1
  702. package/src/modules/orders/components/blocks/CardApplication.vue +1 -1
  703. package/src/modules/orders/components/blocks/CardCustomer.vue +1 -1
  704. package/src/modules/orders/components/blocks/CardOrder.vue +9 -9
  705. package/src/modules/orders/components/blocks/CardOrderBackoffice.vue +5 -5
  706. package/src/modules/orders/components/blocks/CardOrderItem.vue +9 -9
  707. package/src/modules/orders/components/blocks/CardOrderUser.vue +3 -3
  708. package/src/modules/orders/components/blocks/CardOrderVar1.vue +4 -4
  709. package/src/modules/orders/components/blocks/StatusHistory.vue +3 -3
  710. package/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue +1 -1
  711. package/src/modules/orders/components/elements/PriceTotal.vue +3 -3
  712. package/src/modules/orders/components/forms/FormApplicationDetails.vue +2 -2
  713. package/src/modules/orders/components/forms/FormCustomerDetails.vue +3 -3
  714. package/src/modules/orders/components/pages/Favorites.vue +1 -1
  715. package/src/modules/orders/components/pages/OrderBackoffice.vue +15 -15
  716. package/src/modules/orders/components/pages/OrderCreate.vue +2 -2
  717. package/src/modules/orders/components/pages/OrderCreateBackoffice.vue +4 -4
  718. package/src/modules/orders/components/pages/Orders_refact.vue +3 -3
  719. package/src/modules/orders/components/partials/ShopCart.vue +2 -2
  720. package/src/modules/orders/components/sections/ApplicationDetails.vue +2 -2
  721. package/src/modules/orders/components/sections/AskToLogin.vue +1 -1
  722. package/src/modules/orders/components/sections/CustomerDetails.vue +2 -2
  723. package/src/modules/orders/components/sections/Succes.vue +4 -4
  724. package/src/modules/organizations/components/blocks/CardDepartment.vue +1 -1
  725. package/src/modules/organizations/components/blocks/CardOrganization.vue +4 -4
  726. package/src/modules/organizations/components/blocks/Contacts.vue +8 -8
  727. package/src/modules/organizations/components/blocks/Rating.vue +1 -1
  728. package/src/modules/organizations/components/forms/AddExistingMembersForm.vue +3 -3
  729. package/src/modules/organizations/components/forms/DepartmentForm.vue +1 -1
  730. package/src/modules/organizations/components/forms/InviteForm.vue +1 -1
  731. package/src/modules/organizations/components/pages/Department.vue +2 -2
  732. package/src/modules/organizations/components/pages/DepartmentEdit.vue +1 -1
  733. package/src/modules/organizations/components/pages/Members.vue +1 -1
  734. package/src/modules/organizations/components/pages/Organization.new.vue +8 -8
  735. package/src/modules/organizations/components/pages/Organization.vue +6 -6
  736. package/src/modules/organizations/components/pages/OrganizationDocuments.vue +2 -2
  737. package/src/modules/organizations/components/pages/Organizations.vue +3 -3
  738. package/src/modules/organizations/components/sections/Documents.vue +2 -2
  739. package/src/modules/organizations/components/sections/MembersAdd.vue +1 -1
  740. package/src/modules/organizations/components/sections/Unit.vue +1 -1
  741. package/src/modules/pages/views/components/blocks/CardPage.vue +2 -2
  742. package/src/modules/pages/views/components/pages/Page.vue +5 -5
  743. package/src/modules/products/components/blocks/CardCategory.vue +1 -1
  744. package/src/modules/products/components/blocks/CardPosition.vue +4 -4
  745. package/src/modules/products/components/blocks/CardProduct.vue +3 -3
  746. package/src/modules/products/components/blocks/ProductDiscounts.vue +3 -3
  747. package/src/modules/products/components/blocks/ProductImages.vue +2 -2
  748. package/src/modules/products/components/blocks/ProductVariants.vue +2 -2
  749. package/src/modules/products/components/elements/Image360.vue +2 -2
  750. package/src/modules/products/components/elements/Price.vue +2 -2
  751. package/src/modules/products/components/elements/QuantitySelector.vue +3 -3
  752. package/src/modules/products/components/elements/THC.vue +1 -1
  753. package/src/modules/products/components/forms/ReorderSettingsForm.vue +1 -1
  754. package/src/modules/products/components/forms/StockAuditForm.vue +2 -2
  755. package/src/modules/products/components/forms/StockHistoryView.vue +1 -1
  756. package/src/modules/products/components/pages/Categories.vue +1 -1
  757. package/src/modules/products/components/pages/CategoryEdit.vue +2 -2
  758. package/src/modules/products/components/pages/Product.vue +6 -6
  759. package/src/modules/products/components/pages/ProductEdit.vue +6 -6
  760. package/src/modules/products/components/pages/Products.vue +11 -11
  761. package/src/modules/products/components/sections/EditAttributes.vue +4 -4
  762. package/src/modules/products/components/sections/EditCategories.vue +1 -1
  763. package/src/modules/products/components/sections/EditDiscounts.vue +6 -6
  764. package/src/modules/products/components/sections/EditRecommended.vue +1 -1
  765. package/src/modules/products/components/sections/EditVariants.vue +8 -8
  766. package/src/modules/products/components/sections/FilterProducts.vue +3 -3
  767. package/src/modules/products/components/sections/ProductConfigurator.vue +2 -2
  768. package/src/modules/products/components/sections/ProductInformationSection.vue +10 -10
  769. package/src/modules/products/components/sections/ProductsRecommended.vue +2 -2
  770. package/src/modules/products/components/sections/SectionProduct.vue +7 -7
  771. package/src/modules/products/experiments/product-recommendation/components/HeroRecommendation.vue +3 -3
  772. package/src/modules/rents/views/components/blocks/CardRent.vue +1 -1
  773. package/src/modules/rents/views/components/pages/Gant/DateLabel.vue +1 -1
  774. package/src/modules/rents/views/components/pages/Gant/GanttBar.vue +2 -2
  775. package/src/modules/rents/views/components/pages/Gant/GanttChart.vue +8 -8
  776. package/src/modules/rents/views/components/pages/Gant/GanttHeaderCell.vue +1 -1
  777. package/src/modules/rents/views/components/pages/Rents.vue +1 -1
  778. package/src/modules/rents/views/components/pages/RentsEdit.vue +6 -6
  779. package/src/modules/reports/components/pages/BackofficeReports.vue +3 -3
  780. package/src/modules/reports/components/sections/FormReport.vue +1 -1
  781. package/src/modules/spots/components/blocks/CardSpot.vue +4 -4
  782. package/src/modules/spots/components/blocks/SpotMemberModify.vue +1 -1
  783. package/src/modules/spots/components/layouts/Spots.vue +2 -2
  784. package/src/modules/spots/components/pages/Spot.vue +5 -5
  785. package/src/modules/spots/components/pages/SpotEdit.vue +2 -2
  786. package/src/modules/spots/components/pages/Spots.vue +3 -3
  787. package/src/modules/spots/components/sections/MapSection.vue +1 -1
  788. package/src/modules/spots/components/sections/WorktimeEdit.vue +4 -4
  789. package/src/modules/wallet/views/components/blocks/CardBalanceReplenished.vue +5 -5
  790. package/src/modules/wallet/views/components/blocks/CardDeposit.vue +5 -5
  791. package/src/modules/wallet/views/components/blocks/CashDeposit.vue +2 -2
  792. package/src/modules/wallet/views/components/blocks/CryptoDeposit.vue +4 -4
  793. package/src/modules/wallet/views/components/blocks/CryptoDepositProcessing.vue +11 -11
  794. package/src/modules/wallet/views/components/elements/ConnectMetamask.vue +4 -4
  795. package/src/modules/wallet/views/components/pages/Wallet.vue +22 -22
  796. package/src/styles/config.scss +193 -507
  797. package/src/styles/layout.scss +81 -1
  798. package/src/styles/reset.scss +2 -0
  799. package/src/styles/theme.scss +1 -8
  800. package/dist/martyrs/dist/main-BFvlam0J.js.map +0 -1
  801. package/dist/martyrs/node_modules/.pnpm/@capacitor_core@7.0.1/node_modules/@capacitor/core/dist/index.js.map +0 -1
  802. package/dist/martyrs/src/components/Button/Button.vue.js.map +0 -1
  803. package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +0 -1
  804. package/dist/martyrs/src/components/Field/Field.vue2.js.map +0 -1
  805. package/dist/martyrs/src/components/Menu/Menu.vue.js.map +0 -1
  806. package/dist/martyrs/src/components/Select/Select.vue2.js.map +0 -1
  807. package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue.js.map +0 -1
  808. package/dist/node_modules/.pnpm/@vue_server-renderer@3.5.13_vue@3.5.13_typescript@5.8.3_/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.js.map +0 -1
  809. package/dist/node_modules/.pnpm/@vue_shared@3.5.13/node_modules/@vue/shared/dist/shared.esm-bundler.js.map +0 -1
  810. package/dist/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js.map +0 -1
  811. package/dist/node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/plugin/weekOfYear.js.map +0 -1
  812. package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.js +0 -6
  813. package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.js.map +0 -1
  814. package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/rng.js +0 -15
  815. package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/rng.js.map +0 -1
  816. package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.js +0 -11
  817. package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.js.map +0 -1
  818. package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.js +0 -20
  819. package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.js.map +0 -1
  820. package/src/modules/LAYOUT.MD +0 -767
  821. package/src/modules/STYLES.MD +0 -298
  822. package/src/modules/inventory/inventory.router.js +0 -72
  823. package/src/modules/products/products.router.js +0 -299
  824. package/src/styles/base/all.scss +0 -233
  825. package/src/styles/base/backgrounds.scss +0 -70
  826. package/src/styles/base/borders.scss +0 -407
  827. package/src/styles/base/scrolling.scss +0 -137
  828. package/src/styles/base/shadow_transitions_hover_refactor.scss +0 -158
  829. package/src/styles/base/transitions.scss +0 -109
  830. package/src/styles/responsive.scss +0 -152
  831. package/src/styles/typography.scss +0 -161
  832. /package/dist/{node_modules/.pnpm/@vue_shared@3.5.13 → martyrs}/node_modules/@vue/shared/dist/shared.esm-bundler.js +0 -0
@@ -1,5 +1,5 @@
1
1
  import { resolveComponent, createBlock, openBlock, withCtx, createElementVNode, createCommentVNode, createElementBlock, toDisplayString, createTextVNode } from "vue";
2
- import _sfc_main$2 from "../../../../components/Button/Button.vue.js";
2
+ import _sfc_main$2 from "../../../../components/Button/Button.vue2.js";
3
3
  import Media from "../../../../components/Media/Media.vue.js";
4
4
  import _sfc_main$1 from "../../../icons/navigation/IconCheckmark.vue.js";
5
5
  /* empty css */
@@ -47,7 +47,7 @@ const _sfc_main = {
47
47
  const _component_router_link = resolveComponent("router-link");
48
48
  return openBlock(), createBlock(_component_router_link, {
49
49
  to: __props.artist.url ? { name: "artist", params: { url: __props.artist.url } } : __props.artist.to,
50
- class: "artist-card bg-light pd-medium radius-medium flex flex-v-center flex-justify-between gap-thin flex-1 hover-opacity"
50
+ class: "artist-card bg-light pd-medium radius-medium flex flex-v-center flex-justify-between gap-thin flex-child-1 hover:opacity-70"
51
51
  }, {
52
52
  default: withCtx(() => [
53
53
  createElementVNode("div", _hoisted_1, [
@@ -64,7 +64,7 @@ const _sfc_main = {
64
64
  createElementVNode("span", _hoisted_5, toDisplayString(__props.artist.name), 1),
65
65
  __props.artist.isVerified ? (openBlock(), createBlock(_sfc_main$1, {
66
66
  key: 0,
67
- class: "w-1r h-1r t-primary"
67
+ class: "w-1r h-1r t-main"
68
68
  })) : createCommentVNode("", true)
69
69
  ]),
70
70
  createElementVNode("span", _hoisted_6, toDisplayString(__props.artistType), 1)
@@ -88,7 +88,7 @@ const _sfc_main = {
88
88
  };
89
89
  }
90
90
  };
91
- const ArtistCardSmall = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-64fdf510"]]);
91
+ const ArtistCardSmall = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-3ff14280"]]);
92
92
  export {
93
93
  ArtistCardSmall as default
94
94
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ArtistCardSmall.vue.js","sources":["../../../../../../../src/modules/music/components/cards/ArtistCardSmall.vue"],"sourcesContent":["<!-- components/cards/ArtistCard.vue -->\n<template>\n <router-link\n :to=\"artist.url ? { name: 'artist', params: { url: artist.url } } : artist.to\"\n class=\"artist-card bg-light pd-medium radius-medium flex flex-v-center flex-justify-between gap-thin flex-1 hover-opacity\"\n >\n <div\n class=\"flex flex-nowrap flex-v-center gap-thin\"\n >\n <div class=\"artist-avatar\">\n <Media \n v-if=\"artist.photoUrl\"\n :url=\"artist.photoUrl\"\n :alt=\"artist.name\"\n class=\"w-4r h-4r radius-full object-fit-cover\"\n />\n <div v-else class=\"w-4r h-4r flex flex center radius-extra radius-full bg-main flex-center\">\n {{ artist.name.charAt(0) }}\n </div>\n </div>\n\n <div>\n <div class=\"flex items-center gap-thin\">\n <span class=\"mn-b-thin\">{{ artist.name }}</span>\n <IconVerified v-if=\"artist.isVerified\" class=\"w-1r h-1r t-primary\" />\n </div>\n <span class=\"t-small t-transp\">{{ artistType }}</span>\n </div>\n </div>\n\n <Button \n v-if=\"showFollowButton\"\n @click=\"handleFollowClick\"\n :color=\"isFollowing ? 'primary' : 'transp'\"\n size=\"small\"\n class=\"bg-main\"\n >\n {{ isFollowing ? 'Following' : 'Follow' }}\n </Button>\n </router-link>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport IconVerified from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue';\n\nconst props = defineProps({\n artist: {\n type: Object,\n required: true,\n validator: (value) => {\n return value._id && value.name && value.url;\n }\n },\n isFollowing: {\n type: Boolean,\n default: false\n },\n showFollowButton: {\n type: Boolean,\n default: true\n },\n artistType: {\n type: String,\n default: 'Artist'\n }\n});\n\nconst emit = defineEmits(['toggle-follow']);\n\nconst handleFollowClick = () => {\n emit('toggle-follow', props.artist._id);\n};\n</script>\n\n<style scoped>\n.artist-card {\n transition: all 0.2s ease;\n}\n\n.artist-card:hover {\n transform: translateY(-5px);\n}\n\n.artist-avatar img {\n transition: transform 0.2s ease;\n}\n\n.artist-card:hover .artist-avatar img {\n transform: scale(1.05);\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDA,UAAM,QAAQ;AAsBd,UAAM,OAAO;AAEb,UAAM,oBAAoB,MAAM;AAC9B,WAAK,iBAAiB,MAAM,OAAO,GAAG;AAAA,IACxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"ArtistCardSmall.vue.js","sources":["../../../../../../../src/modules/music/components/cards/ArtistCardSmall.vue"],"sourcesContent":["<!-- components/cards/ArtistCard.vue -->\n<template>\n <router-link\n :to=\"artist.url ? { name: 'artist', params: { url: artist.url } } : artist.to\"\n class=\"artist-card bg-light pd-medium radius-medium flex flex-v-center flex-justify-between gap-thin flex-child-1 hover:opacity-70\"\n >\n <div\n class=\"flex flex-nowrap flex-v-center gap-thin\"\n >\n <div class=\"artist-avatar\">\n <Media \n v-if=\"artist.photoUrl\"\n :url=\"artist.photoUrl\"\n :alt=\"artist.name\"\n class=\"w-4r h-4r radius-full object-fit-cover\"\n />\n <div v-else class=\"w-4r h-4r flex flex center radius-extra radius-full bg-main flex-center\">\n {{ artist.name.charAt(0) }}\n </div>\n </div>\n\n <div>\n <div class=\"flex items-center gap-thin\">\n <span class=\"mn-b-thin\">{{ artist.name }}</span>\n <IconVerified v-if=\"artist.isVerified\" class=\"w-1r h-1r t-main\" />\n </div>\n <span class=\"t-small t-transp\">{{ artistType }}</span>\n </div>\n </div>\n\n <Button \n v-if=\"showFollowButton\"\n @click=\"handleFollowClick\"\n :color=\"isFollowing ? 'primary' : 'transp'\"\n size=\"small\"\n class=\"bg-main\"\n >\n {{ isFollowing ? 'Following' : 'Follow' }}\n </Button>\n </router-link>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport IconVerified from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue';\n\nconst props = defineProps({\n artist: {\n type: Object,\n required: true,\n validator: (value) => {\n return value._id && value.name && value.url;\n }\n },\n isFollowing: {\n type: Boolean,\n default: false\n },\n showFollowButton: {\n type: Boolean,\n default: true\n },\n artistType: {\n type: String,\n default: 'Artist'\n }\n});\n\nconst emit = defineEmits(['toggle-follow']);\n\nconst handleFollowClick = () => {\n emit('toggle-follow', props.artist._id);\n};\n</script>\n\n<style scoped>\n.artist-card {\n transition: all 0.2s ease;\n}\n\n.artist-card:hover {\n transform: translateY(-5px);\n}\n\n.artist-avatar img {\n transition: transform 0.2s ease;\n}\n\n.artist-card:hover .artist-avatar img {\n transform: scale(1.05);\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgDA,UAAM,QAAQ;AAsBd,UAAM,OAAO;AAEb,UAAM,oBAAoB,MAAM;AAC9B,WAAK,iBAAiB,MAAM,OAAO,GAAG;AAAA,IACxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,6 +1,6 @@
1
1
  import { computed, resolveComponent, createBlock, openBlock, withCtx, createElementVNode, createVNode, createElementBlock, createCommentVNode, withModifiers, toDisplayString } from "vue";
2
2
  import Media from "../../../../components/Media/Media.vue.js";
3
- import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
3
+ import _sfc_main$1 from "../../../../components/Button/Button.vue2.js";
4
4
  import _sfc_main$2 from "../../../icons/navigation/IconPlay.vue.js";
5
5
  import { actions as actions$1 } from "../../store/player.js";
6
6
  import { actions, state } from "../../store/playlists.js";
@@ -9,11 +9,11 @@ import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.js
9
9
  const _hoisted_1 = { class: "playlist-cover pos-relative" };
10
10
  const _hoisted_2 = {
11
11
  key: 0,
12
- class: "playlist-overlay pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center flex transition-cubic-in-out"
12
+ class: "playlist-overlay pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center flex ease-cubic-in-out"
13
13
  };
14
14
  const _hoisted_3 = { class: "playlist-info pd-small bg-light" };
15
- const _hoisted_4 = { class: "t-medium mn-b-small t-truncate" };
16
- const _hoisted_5 = { class: "t-transp t-small t-truncate" };
15
+ const _hoisted_4 = { class: "fw-medium mn-b-small truncate" };
16
+ const _hoisted_5 = { class: "t-transp t-small truncate" };
17
17
  const _sfc_main = {
18
18
  __name: "PlaylistCard",
19
19
  props: {
@@ -69,7 +69,7 @@ const _sfc_main = {
69
69
  __props.playlist.tracks && __props.playlist.tracks.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_2, [
70
70
  createVNode(_sfc_main$1, {
71
71
  onClick: _cache[0] || (_cache[0] = withModifiers(($event) => playPlaylist(__props.playlist), ["stop", "prevent"])),
72
- class: "play-button bg-main radius-round flex-center flex aspect-1x1",
72
+ class: "play-button bg-main radius-extra flex-center flex aspect-1x1",
73
73
  showLoader: false,
74
74
  showSucces: false
75
75
  }, {
@@ -93,7 +93,7 @@ const _sfc_main = {
93
93
  };
94
94
  }
95
95
  };
96
- const PlaylistCard = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-be2a71af"]]);
96
+ const PlaylistCard = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-f2da5559"]]);
97
97
  export {
98
98
  PlaylistCard as default
99
99
  };
@@ -1 +1 @@
1
- {"version":3,"file":"PlaylistCard.vue.js","sources":["../../../../../../../src/modules/music/components/cards/PlaylistCard.vue"],"sourcesContent":["<!-- components/cards/PlaylistCard.vue -->\n<template>\n <router-link \n :to=\"{ name: 'playlist', params: { url: playlist.url } }\" \n class=\"playlist-card d-block radius-small o-hidden\"\n >\n <div class=\"playlist-cover pos-relative\">\n <Media \n :url=\"playlist.coverUrl || '/logo/logo-placeholder.jpg'\" \n class=\"w-100 aspect-1x1 object-fit-cover\"\n />\n <div v-if=\"playlist.tracks && playlist.tracks.length > 0\" class=\"playlist-overlay pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center flex transition-cubic-in-out\">\n <Button \n @click.stop.prevent=\"playPlaylist(playlist)\" \n class=\"play-button bg-main radius-round flex-center flex aspect-1x1\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPlay class=\"i-small\" fill=\"rgb(var(--black))\" />\n </Button>\n </div>\n </div>\n <div class=\"playlist-info pd-small bg-light\">\n <h3 class=\" t-medium mn-b-small t-truncate\">{{ playlist.title }}</h3>\n <p class=\"t-transp t-small t-truncate\">{{ playlistInfo }}</p>\n </div>\n </router-link>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\n\n// Import player store\nimport { actions as playerActions } from '../../store/player.js';\nimport { state as playlistsState, actions as playlistsActions } from '../../store/playlists.js';\n\nconst props = defineProps({\n playlist: {\n type: Object,\n required: true\n }\n});\n\n// Computed properties\nconst playlistInfo = computed(() => {\n const trackCount = props.playlist.tracks?.length || 0;\n let creatorName = 'Unknown';\n \n if (props.playlist.creator?.target?.profile?.name) {\n creatorName = props.playlist.creator.target.profile.name;\n } else if (props.playlist.creator?.target?.name) {\n creatorName = props.playlist.creator.target.name;\n }\n \n return `${creatorName} • ${trackCount} ${trackCount === 1 ? 'track' : 'tracks'}`;\n});\n\n// Methods\nconst playPlaylist = async (playlist) => {\n if (!playlist || !playlist.url) {\n console.warn('Playlist or URL not available');\n return;\n }\n \n try {\n console.log('Loading playlist:', playlist.url);\n \n // Fetch full playlist data with populated tracks\n await playlistsActions.fetchPlaylistByUrl(playlist.url);\n \n // Get tracks from store after loading\n const tracks = playlistsState.currentPlaylistTracks || [];\n \n console.log('Loaded tracks:', tracks);\n \n if (tracks.length > 0) {\n console.log('Setting queue with tracks:', tracks);\n playerActions.setQueue(tracks);\n } else {\n console.warn('No tracks found in playlist after loading');\n }\n } catch (error) {\n console.error('Error loading playlist for playback:', error);\n }\n};\n</script>\n\n<style scoped>\n.playlist-card {\n transition: transform 0.3s ease;\n}\n\n.playlist-card:hover {\n transform: translateY(-5px);\n}\n\n.playlist-overlay {\n background: rgba(0, 0, 0, 0.5);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.playlist-card:hover .playlist-overlay {\n opacity: 1;\n}\n\n.play-button {\n width: 48px;\n height: 48px;\n transform: scale(0.8);\n transition: transform 0.3s ease;\n}\n\n.playlist-card:hover .play-button {\n transform: scale(1);\n}\n</style>"],"names":["playlistsActions","playlistsState","playerActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,UAAM,QAAQ;AAQd,UAAM,eAAe,SAAS,MAAM;AAClC,YAAM,aAAa,MAAM,SAAS,QAAQ,UAAU;AACpD,UAAI,cAAc;AAElB,UAAI,MAAM,SAAS,SAAS,QAAQ,SAAS,MAAM;AACjD,sBAAc,MAAM,SAAS,QAAQ,OAAO,QAAQ;AAAA,MACtD,WAAW,MAAM,SAAS,SAAS,QAAQ,MAAM;AAC/C,sBAAc,MAAM,SAAS,QAAQ,OAAO;AAAA,MAC9C;AAEA,aAAO,GAAG,WAAW,MAAM,UAAU,IAAI,eAAe,IAAI,UAAU,QAAQ;AAAA,IAChF,CAAC;AAGD,UAAM,eAAe,OAAO,aAAa;AACvC,UAAI,CAAC,YAAY,CAAC,SAAS,KAAK;AAC9B,gBAAQ,KAAK,+BAA+B;AAC5C;AAAA,MACF;AAEA,UAAI;AACF,gBAAQ,IAAI,qBAAqB,SAAS,GAAG;AAG7C,cAAMA,QAAiB,mBAAmB,SAAS,GAAG;AAGtD,cAAM,SAASC,MAAe,yBAAyB,CAAA;AAEvD,gBAAQ,IAAI,kBAAkB,MAAM;AAEpC,YAAI,OAAO,SAAS,GAAG;AACrB,kBAAQ,IAAI,8BAA8B,MAAM;AAChDC,oBAAc,SAAS,MAAM;AAAA,QAC/B,OAAO;AACL,kBAAQ,KAAK,2CAA2C;AAAA,QAC1D;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,wCAAwC,KAAK;AAAA,MAC7D;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlaylistCard.vue.js","sources":["../../../../../../../src/modules/music/components/cards/PlaylistCard.vue"],"sourcesContent":["<!-- components/cards/PlaylistCard.vue -->\n<template>\n <router-link \n :to=\"{ name: 'playlist', params: { url: playlist.url } }\" \n class=\"playlist-card d-block radius-small o-hidden\"\n >\n <div class=\"playlist-cover pos-relative\">\n <Media \n :url=\"playlist.coverUrl || '/logo/logo-placeholder.jpg'\" \n class=\"w-100 aspect-1x1 object-fit-cover\"\n />\n <div v-if=\"playlist.tracks && playlist.tracks.length > 0\" class=\"playlist-overlay pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center flex ease-cubic-in-out\">\n <Button \n @click.stop.prevent=\"playPlaylist(playlist)\" \n class=\"play-button bg-main radius-extra flex-center flex aspect-1x1\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPlay class=\"i-small\" fill=\"rgb(var(--black))\" />\n </Button>\n </div>\n </div>\n <div class=\"playlist-info pd-small bg-light\">\n <h3 class=\" fw-medium mn-b-small truncate\">{{ playlist.title }}</h3>\n <p class=\"t-transp t-small truncate\">{{ playlistInfo }}</p>\n </div>\n </router-link>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\n\n// Import player store\nimport { actions as playerActions } from '../../store/player.js';\nimport { state as playlistsState, actions as playlistsActions } from '../../store/playlists.js';\n\nconst props = defineProps({\n playlist: {\n type: Object,\n required: true\n }\n});\n\n// Computed properties\nconst playlistInfo = computed(() => {\n const trackCount = props.playlist.tracks?.length || 0;\n let creatorName = 'Unknown';\n \n if (props.playlist.creator?.target?.profile?.name) {\n creatorName = props.playlist.creator.target.profile.name;\n } else if (props.playlist.creator?.target?.name) {\n creatorName = props.playlist.creator.target.name;\n }\n \n return `${creatorName} • ${trackCount} ${trackCount === 1 ? 'track' : 'tracks'}`;\n});\n\n// Methods\nconst playPlaylist = async (playlist) => {\n if (!playlist || !playlist.url) {\n console.warn('Playlist or URL not available');\n return;\n }\n \n try {\n console.log('Loading playlist:', playlist.url);\n \n // Fetch full playlist data with populated tracks\n await playlistsActions.fetchPlaylistByUrl(playlist.url);\n \n // Get tracks from store after loading\n const tracks = playlistsState.currentPlaylistTracks || [];\n \n console.log('Loaded tracks:', tracks);\n \n if (tracks.length > 0) {\n console.log('Setting queue with tracks:', tracks);\n playerActions.setQueue(tracks);\n } else {\n console.warn('No tracks found in playlist after loading');\n }\n } catch (error) {\n console.error('Error loading playlist for playback:', error);\n }\n};\n</script>\n\n<style scoped>\n.playlist-card {\n transition: transform 0.3s ease;\n}\n\n.playlist-card:hover {\n transform: translateY(-5px);\n}\n\n.playlist-overlay {\n background: rgba(0, 0, 0, 0.5);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.playlist-card:hover .playlist-overlay {\n opacity: 1;\n}\n\n.play-button {\n width: 48px;\n height: 48px;\n transform: scale(0.8);\n transition: transform 0.3s ease;\n}\n\n.playlist-card:hover .play-button {\n transform: scale(1);\n}\n</style>"],"names":["playlistsActions","playlistsState","playerActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,UAAM,QAAQ;AAQd,UAAM,eAAe,SAAS,MAAM;AAClC,YAAM,aAAa,MAAM,SAAS,QAAQ,UAAU;AACpD,UAAI,cAAc;AAElB,UAAI,MAAM,SAAS,SAAS,QAAQ,SAAS,MAAM;AACjD,sBAAc,MAAM,SAAS,QAAQ,OAAO,QAAQ;AAAA,MACtD,WAAW,MAAM,SAAS,SAAS,QAAQ,MAAM;AAC/C,sBAAc,MAAM,SAAS,QAAQ,OAAO;AAAA,MAC9C;AAEA,aAAO,GAAG,WAAW,MAAM,UAAU,IAAI,eAAe,IAAI,UAAU,QAAQ;AAAA,IAChF,CAAC;AAGD,UAAM,eAAe,OAAO,aAAa;AACvC,UAAI,CAAC,YAAY,CAAC,SAAS,KAAK;AAC9B,gBAAQ,KAAK,+BAA+B;AAC5C;AAAA,MACF;AAEA,UAAI;AACF,gBAAQ,IAAI,qBAAqB,SAAS,GAAG;AAG7C,cAAMA,QAAiB,mBAAmB,SAAS,GAAG;AAGtD,cAAM,SAASC,MAAe,yBAAyB,CAAA;AAEvD,gBAAQ,IAAI,kBAAkB,MAAM;AAEpC,YAAI,OAAO,SAAS,GAAG;AACrB,kBAAQ,IAAI,8BAA8B,MAAM;AAChDC,oBAAc,SAAS,MAAM;AAAA,QAC/B,OAAO;AACL,kBAAQ,KAAK,2CAA2C;AAAA,QAC1D;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,wCAAwC,KAAK;AAAA,MAC7D;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { ref, resolveComponent, createElementBlock, openBlock, normalizeClass, createElementVNode, createCommentVNode, createBlock, toDisplayString, withModifiers, withCtx, createVNode, createTextVNode } from "vue";
2
- import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
2
+ import _sfc_main$1 from "../../../../components/Button/Button.vue2.js";
3
3
  import Media from "../../../../components/Media/Media.vue.js";
4
4
  import _sfc_main$2 from "../../../icons/navigation/IconPlay.vue.js";
5
5
  import _sfc_main$3 from "../../../icons/navigation/IconPause.vue.js";
@@ -19,7 +19,7 @@ const _hoisted_6 = { key: 1 };
19
19
  const _hoisted_7 = { key: 1 };
20
20
  const _hoisted_8 = {
21
21
  key: 0,
22
- class: "track-album w-15r mobile:w-0 mobile:hidden t-transp t-truncate"
22
+ class: "track-album w-15r mobile:w-0 mobile:hidden t-transp truncate"
23
23
  };
24
24
  const _hoisted_9 = { key: 1 };
25
25
  const _hoisted_10 = { class: "track-duration w-5r t-right t-transp" };
@@ -72,7 +72,7 @@ const _sfc_main = {
72
72
  return (_ctx, _cache) => {
73
73
  const _component_router_link = resolveComponent("router-link");
74
74
  return openBlock(), createElementBlock("div", {
75
- class: normalizeClass(["track-item pd-small hover-bg-white-transp-25 flex-v-center flex cursor-pointer", { "bg-main-transp-10": isPlaying(__props.track) }]),
75
+ class: normalizeClass(["track-item pd-small hover:bg-white-transp-25 flex-v-center flex cursor-pointer", { "bg-main-transp-10": isPlaying(__props.track) }]),
76
76
  onClick: _cache[7] || (_cache[7] = ($event) => playTrack(__props.track)),
77
77
  onDblclick: _cache[8] || (_cache[8] = ($event) => playTrack(__props.track, true)),
78
78
  onMouseenter: _cache[9] || (_cache[9] = ($event) => hoveredIndex.value = props.index),
@@ -125,7 +125,7 @@ const _sfc_main = {
125
125
  __props.track.url ? (openBlock(), createBlock(_component_router_link, {
126
126
  key: 0,
127
127
  to: "/music/tracks/" + __props.track.url,
128
- class: normalizeClass(["hover-t-main hover-t-underline", { "t-main": isPlaying(__props.track) }]),
128
+ class: normalizeClass(["hover:t-main hover:underline", { "t-main": isPlaying(__props.track) }]),
129
129
  onClick: _cache[4] || (_cache[4] = withModifiers(() => {
130
130
  }, ["stop"]))
131
131
  }, {
@@ -141,7 +141,7 @@ const _sfc_main = {
141
141
  __props.track.artist && __props.track.artist._id ? (openBlock(), createBlock(_component_router_link, {
142
142
  key: 0,
143
143
  to: "/music/artists/" + __props.track.artist.url,
144
- class: "t-transp hover-t-underline",
144
+ class: "t-transp hover:underline",
145
145
  onClick: _cache[5] || (_cache[5] = withModifiers(() => {
146
146
  }, ["stop"]))
147
147
  }, {
@@ -157,7 +157,7 @@ const _sfc_main = {
157
157
  __props.track.album && __props.track.album._id ? (openBlock(), createBlock(_component_router_link, {
158
158
  key: 0,
159
159
  to: "/music/albums/" + __props.track.album.url,
160
- class: "t-transp hover-t-underline",
160
+ class: "t-transp hover:underline",
161
161
  onClick: _cache[6] || (_cache[6] = withModifiers(() => {
162
162
  }, ["stop"]))
163
163
  }, {
@@ -1 +1 @@
1
- {"version":3,"file":"TrackListCard.vue.js","sources":["../../../../../../../src/modules/music/components/cards/TrackListCard.vue"],"sourcesContent":["<!-- components/cards/TrackListCard.vue -->\n<template>\n <div \n class=\"track-item pd-small hover-bg-white-transp-25 flex-v-center flex cursor-pointer\"\n :class=\"{'bg-main-transp-10': isPlaying(track)}\"\n @click=\"playTrack(track)\"\n @dblclick=\"playTrack(track, true)\"\n @mouseenter=\"hoveredIndex = props.index\"\n @mouseleave=\"hoveredIndex = -1\"\n >\n <div class=\"track-number w-3r t-center pos-relative\">\n <span v-if=\"!isPlaying(track) && hoveredIndex !== props.index\" class=\"t-transp\">{{ props.index + 1 }}</span>\n <Button \n v-else-if=\"!isPlaying(track) && hoveredIndex === props.index\"\n @click.stop=\"playTrack(track)\"\n class=\"bg-main pd-thin\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPlay @click.stop=\"playTrack(track)\" class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n <Button \n v-else\n @click.stop=\"pauseTrack()\"\n class=\"bg-main pd-thin\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPause @click.stop=\"pauseTrack()\" class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n </div>\n \n <div class=\"track-title flex-child-1 flex flex-v-center\">\n <div v-if=\"showCover\" class=\"track-cover mn-r-small\">\n <Media \n :url=\"track.coverUrl || (track.album && track.album.coverUrl) || '/logo/logo-placeholder.jpg'\" \n class=\"w-3r h-3r object-fit-cover o-hidden radius-small\"\n />\n </div>\n \n <div class=\"track-info\">\n <div class=\"track-name \" :class=\"{'t-main': isPlaying(track)}\">\n <router-link\n v-if=\"track.url\"\n :to=\"'/music/tracks/' + track.url\"\n class=\"hover-t-main hover-t-underline\"\n :class=\"{'t-main': isPlaying(track)}\"\n @click.stop\n >\n {{ track.title }}\n </router-link>\n <span v-else>{{ track.title }}</span>\n </div>\n <div :class=\"{'t-main': isPlaying(track)}\" class=\"track-artist t-transp t-small\">\n <router-link\n v-if=\"track.artist && track.artist._id\"\n :to=\"'/music/artists/' + track.artist.url\"\n class=\"t-transp hover-t-underline\"\n @click.stop\n >\n {{ getArtistName(track) }}\n </router-link>\n <span v-else>{{ getArtistName(track) }}</span>\n </div>\n </div>\n </div>\n \n <div v-if=\"showAlbum\" class=\"track-album w-15r mobile:w-0 mobile:hidden t-transp t-truncate\">\n <router-link\n v-if=\"track.album && track.album._id\"\n :to=\"'/music/albums/' + track.album.url\"\n class=\"t-transp hover-t-underline\"\n @click.stop\n >\n {{ track.album.title }}\n </router-link>\n <span v-else>{{ track.album?.title || 'Single' }}</span>\n </div>\n \n <div class=\"track-duration w-5r t-right t-transp\">{{ formatDuration(track.duration) }}</div>\n </div>\n</template>\n\n<script setup>\nimport { ref } from 'vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\nimport IconPause from '@martyrs/src/modules/icons/navigation/IconPause.vue';\n\n// Import player store\nimport { state as playerState, actions as playerActions } from '../../store/player.js';\n\n// Props\nconst props = defineProps({\n track: {\n type: Object,\n required: true\n },\n index: {\n type: Number,\n default: 0\n },\n showCover: {\n type: Boolean,\n default: true\n },\n showAlbum: {\n type: Boolean,\n default: true\n }\n});\n\n// State\nconst hoveredIndex = ref(-1);\n\n// Methods\nconst isPlaying = (track) => {\n return playerState.currentTrack && playerState.currentTrack._id === track._id && playerState.isPlaying;\n};\n\nconst playTrack = (track, force = false) => {\n if (isPlaying(track) && !force) {\n playerActions.togglePlay();\n } else {\n playerActions.playTrack(track);\n }\n};\n\nconst pauseTrack = () => {\n playerActions.togglePlay();\n};\n\nconst getArtistName = (track) => {\n if (!track || !track.artist) return 'Unknown Artist';\n return typeof track.artist === 'object' ? track.artist.name : 'Unknown Artist';\n};\n\nconst formatDuration = (duration) => {\n if (!duration) return '--:--';\n \n const minutes = Math.floor(duration / 60);\n const seconds = Math.floor(duration % 60);\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n};\n</script>"],"names":["playerState","playerActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8FA,UAAM,QAAQ;AAoBd,UAAM,eAAe,IAAI,EAAE;AAG3B,UAAM,YAAY,CAAC,UAAU;AAC3B,aAAOA,MAAY,gBAAgBA,MAAY,aAAa,QAAQ,MAAM,OAAOA,MAAY;AAAA,IAC/F;AAEA,UAAM,YAAY,CAAC,OAAO,QAAQ,UAAU;AAC1C,UAAI,UAAU,KAAK,KAAK,CAAC,OAAO;AAC9BC,gBAAc,WAAU;AAAA,MAC1B,OAAO;AACLA,gBAAc,UAAU,KAAK;AAAA,MAC/B;AAAA,IACF;AAEA,UAAM,aAAa,MAAM;AACvBA,cAAc,WAAU;AAAA,IAC1B;AAEA,UAAM,gBAAgB,CAAC,UAAU;AAC/B,UAAI,CAAC,SAAS,CAAC,MAAM,OAAQ,QAAO;AACpC,aAAO,OAAO,MAAM,WAAW,WAAW,MAAM,OAAO,OAAO;AAAA,IAChE;AAEA,UAAM,iBAAiB,CAAC,aAAa;AACnC,UAAI,CAAC,SAAU,QAAO;AAEtB,YAAM,UAAU,KAAK,MAAM,WAAW,EAAE;AACxC,YAAM,UAAU,KAAK,MAAM,WAAW,EAAE;AACxC,aAAO,GAAG,OAAO,IAAI,QAAQ,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AAAA,IAC1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"TrackListCard.vue.js","sources":["../../../../../../../src/modules/music/components/cards/TrackListCard.vue"],"sourcesContent":["<!-- components/cards/TrackListCard.vue -->\n<template>\n <div \n class=\"track-item pd-small hover:bg-white-transp-25 flex-v-center flex cursor-pointer\"\n :class=\"{'bg-main-transp-10': isPlaying(track)}\"\n @click=\"playTrack(track)\"\n @dblclick=\"playTrack(track, true)\"\n @mouseenter=\"hoveredIndex = props.index\"\n @mouseleave=\"hoveredIndex = -1\"\n >\n <div class=\"track-number w-3r t-center pos-relative\">\n <span v-if=\"!isPlaying(track) && hoveredIndex !== props.index\" class=\"t-transp\">{{ props.index + 1 }}</span>\n <Button \n v-else-if=\"!isPlaying(track) && hoveredIndex === props.index\"\n @click.stop=\"playTrack(track)\"\n class=\"bg-main pd-thin\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPlay @click.stop=\"playTrack(track)\" class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n <Button \n v-else\n @click.stop=\"pauseTrack()\"\n class=\"bg-main pd-thin\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPause @click.stop=\"pauseTrack()\" class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n </div>\n \n <div class=\"track-title flex-child-1 flex flex-v-center\">\n <div v-if=\"showCover\" class=\"track-cover mn-r-small\">\n <Media \n :url=\"track.coverUrl || (track.album && track.album.coverUrl) || '/logo/logo-placeholder.jpg'\" \n class=\"w-3r h-3r object-fit-cover o-hidden radius-small\"\n />\n </div>\n \n <div class=\"track-info\">\n <div class=\"track-name \" :class=\"{'t-main': isPlaying(track)}\">\n <router-link\n v-if=\"track.url\"\n :to=\"'/music/tracks/' + track.url\"\n class=\"hover:t-main hover:underline\"\n :class=\"{'t-main': isPlaying(track)}\"\n @click.stop\n >\n {{ track.title }}\n </router-link>\n <span v-else>{{ track.title }}</span>\n </div>\n <div :class=\"{'t-main': isPlaying(track)}\" class=\"track-artist t-transp t-small\">\n <router-link\n v-if=\"track.artist && track.artist._id\"\n :to=\"'/music/artists/' + track.artist.url\"\n class=\"t-transp hover:underline\"\n @click.stop\n >\n {{ getArtistName(track) }}\n </router-link>\n <span v-else>{{ getArtistName(track) }}</span>\n </div>\n </div>\n </div>\n \n <div v-if=\"showAlbum\" class=\"track-album w-15r mobile:w-0 mobile:hidden t-transp truncate\">\n <router-link\n v-if=\"track.album && track.album._id\"\n :to=\"'/music/albums/' + track.album.url\"\n class=\"t-transp hover:underline\"\n @click.stop\n >\n {{ track.album.title }}\n </router-link>\n <span v-else>{{ track.album?.title || 'Single' }}</span>\n </div>\n \n <div class=\"track-duration w-5r t-right t-transp\">{{ formatDuration(track.duration) }}</div>\n </div>\n</template>\n\n<script setup>\nimport { ref } from 'vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\nimport IconPause from '@martyrs/src/modules/icons/navigation/IconPause.vue';\n\n// Import player store\nimport { state as playerState, actions as playerActions } from '../../store/player.js';\n\n// Props\nconst props = defineProps({\n track: {\n type: Object,\n required: true\n },\n index: {\n type: Number,\n default: 0\n },\n showCover: {\n type: Boolean,\n default: true\n },\n showAlbum: {\n type: Boolean,\n default: true\n }\n});\n\n// State\nconst hoveredIndex = ref(-1);\n\n// Methods\nconst isPlaying = (track) => {\n return playerState.currentTrack && playerState.currentTrack._id === track._id && playerState.isPlaying;\n};\n\nconst playTrack = (track, force = false) => {\n if (isPlaying(track) && !force) {\n playerActions.togglePlay();\n } else {\n playerActions.playTrack(track);\n }\n};\n\nconst pauseTrack = () => {\n playerActions.togglePlay();\n};\n\nconst getArtistName = (track) => {\n if (!track || !track.artist) return 'Unknown Artist';\n return typeof track.artist === 'object' ? track.artist.name : 'Unknown Artist';\n};\n\nconst formatDuration = (duration) => {\n if (!duration) return '--:--';\n \n const minutes = Math.floor(duration / 60);\n const seconds = Math.floor(duration % 60);\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n};\n</script>"],"names":["playerState","playerActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8FA,UAAM,QAAQ;AAoBd,UAAM,eAAe,IAAI,EAAE;AAG3B,UAAM,YAAY,CAAC,UAAU;AAC3B,aAAOA,MAAY,gBAAgBA,MAAY,aAAa,QAAQ,MAAM,OAAOA,MAAY;AAAA,IAC/F;AAEA,UAAM,YAAY,CAAC,OAAO,QAAQ,UAAU;AAC1C,UAAI,UAAU,KAAK,KAAK,CAAC,OAAO;AAC9BC,gBAAc,WAAU;AAAA,MAC1B,OAAO;AACLA,gBAAc,UAAU,KAAK;AAAA,MAC/B;AAAA,IACF;AAEA,UAAM,aAAa,MAAM;AACvBA,cAAc,WAAU;AAAA,IAC1B;AAEA,UAAM,gBAAgB,CAAC,UAAU;AAC/B,UAAI,CAAC,SAAS,CAAC,MAAM,OAAQ,QAAO;AACpC,aAAO,OAAO,MAAM,WAAW,WAAW,MAAM,OAAO,OAAO;AAAA,IAChE;AAEA,UAAM,iBAAiB,CAAC,aAAa;AACnC,UAAI,CAAC,SAAU,QAAO;AAEtB,YAAM,UAAU,KAAK,MAAM,WAAW,EAAE;AACxC,YAAM,UAAU,KAAK,MAAM,WAAW,EAAE;AACxC,aAAO,GAAG,OAAO,IAAI,QAAQ,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AAAA,IAC1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,9 +1,9 @@
1
1
  import { reactive, ref, watch, onMounted, createElementBlock, openBlock, createElementVNode, toDisplayString, withModifiers, createVNode, withCtx, createCommentVNode, createTextVNode } from "vue";
2
2
  import { useRouter, useRoute } from "vue-router";
3
- import Field from "../../../../components/Field/Field.vue2.js";
3
+ import Field from "../../../../components/Field/Field.vue.js";
4
4
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
5
- import _sfc_main$3 from "../../../../components/Button/Button.vue.js";
6
- import Select from "../../../../components/Select/Select.vue2.js";
5
+ import _sfc_main$3 from "../../../../components/Button/Button.vue2.js";
6
+ import Select from "../../../../components/Select/Select.vue.js";
7
7
  import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
8
8
  import _sfc_main$2 from "../../../icons/navigation/IconCross.vue.js";
9
9
  import BlockMultiselect from "../../../core/views/components/blocks/BlockMultiselect.vue.js";
@@ -17,21 +17,21 @@ const _hoisted_2 = { class: "h2 mn-b-medium" };
17
17
  const _hoisted_3 = { class: "bg-light pd-medium radius-medium" };
18
18
  const _hoisted_4 = { class: "mn-b-medium" };
19
19
  const _hoisted_5 = { class: "flex-nowrap flex-v-center flex gap-thin" };
20
- const _hoisted_6 = { class: "t-medium" };
20
+ const _hoisted_6 = { class: "fw-medium" };
21
21
  const _hoisted_7 = ["onClick"];
22
22
  const _hoisted_8 = { class: "flex-nowrap flex-v-center flex" };
23
23
  const _hoisted_9 = { class: "w-100" };
24
- const _hoisted_10 = { class: "t-medium" };
24
+ const _hoisted_10 = { class: "fw-medium" };
25
25
  const _hoisted_11 = {
26
26
  key: 0,
27
27
  class: "t-small t-transp"
28
28
  };
29
29
  const _hoisted_12 = { class: "flex-nowrap flex-v-center flex gap-thin" };
30
- const _hoisted_13 = { class: "t-medium" };
30
+ const _hoisted_13 = { class: "fw-medium" };
31
31
  const _hoisted_14 = ["onClick"];
32
32
  const _hoisted_15 = { class: "flex-nowrap flex-v-center flex" };
33
33
  const _hoisted_16 = { class: "w-100" };
34
- const _hoisted_17 = { class: "t-medium" };
34
+ const _hoisted_17 = { class: "fw-medium" };
35
35
  const _hoisted_18 = {
36
36
  key: 0,
37
37
  class: "t-small t-transp"
@@ -300,7 +300,7 @@ const _sfc_main = {
300
300
  classSearch: "bg-white radius-small",
301
301
  classSelected: "bg-white pd-small radius-small",
302
302
  classDropdown: "bg-white pd-small radius-medium bs-small",
303
- classItem: "pd-small radius-small hover-bg-light cursor-pointer",
303
+ classItem: "pd-small radius-small hover:bg-light cursor-pointer",
304
304
  classFeed: "h-max-30r gap-thin flex-column flex o-scroll"
305
305
  }, {
306
306
  selected: withCtx(({ item, clear }) => [
@@ -308,7 +308,7 @@ const _sfc_main = {
308
308
  createElementVNode("span", _hoisted_6, toDisplayString(item?.name || item), 1),
309
309
  createElementVNode("button", {
310
310
  onClick: withModifiers(clear, ["stop"]),
311
- class: "i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover-scale-1"
311
+ class: "i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover:scale-[1.05]"
312
312
  }, [
313
313
  createVNode(_sfc_main$2, { class: "i-micro fill-white" })
314
314
  ], 8, _hoisted_7)
@@ -365,7 +365,7 @@ const _sfc_main = {
365
365
  classSearch: "bg-white radius-small",
366
366
  classSelected: "bg-white pd-small radius-small",
367
367
  classDropdown: "bg-white pd-small radius-medium bs-small",
368
- classItem: "pd-small radius-small hover-bg-light cursor-pointer",
368
+ classItem: "pd-small radius-small hover:bg-light cursor-pointer",
369
369
  classFeed: "h-max-30r gap-thin flex-column flex o-scroll"
370
370
  }, {
371
371
  selected: withCtx(({ item, clear }) => [
@@ -373,7 +373,7 @@ const _sfc_main = {
373
373
  createElementVNode("span", _hoisted_13, toDisplayString(item?.name || item), 1),
374
374
  createElementVNode("button", {
375
375
  onClick: withModifiers(clear, ["stop"]),
376
- class: "i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover-scale-1"
376
+ class: "i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover:scale-[1.05]"
377
377
  }, [
378
378
  createVNode(_sfc_main$2, { class: "i-micro fill-white" })
379
379
  ], 8, _hoisted_14)
@@ -1 +1 @@
1
- {"version":3,"file":"AlbumForm.vue.js","sources":["../../../../../../../src/modules/music/components/forms/AlbumForm.vue"],"sourcesContent":["<template>\n <div class=\"pd-medium\">\n <h2 class=\"h2 mn-b-medium\">{{ editMode ? 'Edit Album' : 'Create Album' }}</h2>\n \n <form @submit.prevent=\"submitForm\" class=\"cols-1 gap-regular\">\n <!-- Basic Info Section -->\n <div class=\"bg-light pd-medium radius-medium\">\n <h3 class=\"h3 mn-b-medium\">Basic Information</h3>\n \n <!-- Album Cover -->\n <div class=\"mn-b-medium\">\n <p class=\"p-medium mn-b-small\">Album Cover</p>\n <UploadImage\n v-model:photo=\"album.coverArt\"\n uploadPath=\"albums/covers\"\n class=\"w-100 h-15r radius-small o-hidden mn-b-small\"\n @error=\"handleUploadError\"\n />\n </div>\n \n <!-- Title -->\n <Field\n v-model:field=\"album.title\"\n label=\"Title\"\n placeholder=\"Enter album title\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n :validation=\"validation.title\"\n />\n \n <!-- URL -->\n <Field\n v-model:field=\"album.url\"\n label=\"URL\"\n placeholder=\"Leave blank for auto-generation based on the album title\"\n class=\"bg-white radius-small pd-small mn-b-small\"\n />\n \n <!-- Description -->\n <Field\n v-model:field=\"album.description\"\n label=\"Description\"\n type=\"textarea\"\n placeholder=\"Enter album description\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n :validation=\"validation.description\"\n />\n \n <!-- Release Date -->\n <Field\n v-model:field=\"album.releaseDate\"\n label=\"Release Date\"\n type=\"date\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n :validation=\"validation.releaseDate\"\n />\n \n <!-- Album Type -->\n <Select\n v-model:select=\"album.type\"\n :options=\"albumTypeOptions\"\n label=\"Album Type\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n />\n </div>\n \n <!-- Artists Section -->\n <Block title=\"Artists\">\n <BlockMultiselect\n v-model=\"album.artists\"\n placeholder=\"Search artists...\"\n :multiple=\"true\"\n :transform=\"(item) => ({ _id: item._id, name: item.name })\"\n :store=\"{\n read: (options) => artistsStore.actions.fetchArtists(options),\n state: artistsStore.state\n }\"\n :options=\"{\n rootOnly: false,\n excludeChildren: false,\n limit: 50\n }\"\n :skeleton=\"{\n hide: false,\n horizontal: true,\n class: 'radius-small',\n structure: [{ \n block: 'text', size: 'large'\n }]\n }\"\n :states=\"{\n empty: {\n title: 'No artists found',\n description: 'Try different search terms or create a new artist',\n class: 'radius-small'\n }\n }\"\n key=\"_id\"\n :label=\"item => item.name\"\n classSearch=\"bg-white radius-small\"\n classSelected=\"bg-white pd-small radius-small\"\n classDropdown=\"bg-white pd-small radius-medium bs-small\"\n classItem=\"pd-small radius-small hover-bg-light cursor-pointer\"\n classFeed=\"h-max-30r gap-thin flex-column flex o-scroll\"\n >\n <!-- Слот для выбранных артистов -->\n <template #selected=\"{ item, clear }\">\n <div class=\"flex-nowrap flex-v-center flex gap-thin\">\n <span class=\"t-medium\">{{ item?.name || item }}</span>\n <button \n @click.stop=\"clear\"\n class=\"i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover-scale-1\"\n >\n <IconCross class=\"i-micro fill-white\" />\n </button>\n </div>\n </template>\n \n <!-- Слот для элементов в списке -->\n <template #item=\"{ item }\">\n <div class=\"flex-nowrap flex-v-center flex\">\n <div class=\"w-100\">\n <p class=\"t-medium\">{{ item.name }}</p>\n <p v-if=\"item.bio\" class=\"t-small t-transp\">{{ item.bio }}</p>\n </div>\n </div>\n </template>\n </BlockMultiselect>\n </Block>\n \n <!-- Genres Section -->\n <Block title=\"Genres\">\n <BlockMultiselect\n v-model=\"album.genres\"\n placeholder=\"Search genres...\"\n :multiple=\"true\"\n :transform=\"(item) => ({ _id: item._id, name: item.name })\"\n :store=\"{\n read: (options) => genresStore.actions.fetchGenres(options),\n state: genresStore.state\n }\"\n :options=\"{\n rootOnly: false,\n excludeChildren: false,\n limit: 50\n }\"\n :skeleton=\"{\n hide: false,\n horizontal: true,\n class: 'radius-small',\n structure: [{ \n block: 'text', size: 'large'\n }]\n }\"\n :states=\"{\n empty: {\n title: 'No genres found',\n description: 'Try different search terms or create a new genre',\n class: 'radius-small'\n }\n }\"\n key=\"_id\"\n :label=\"item => item.name\"\n classSearch=\"bg-white radius-small\"\n classSelected=\"bg-white pd-small radius-small\"\n classDropdown=\"bg-white pd-small radius-medium bs-small\"\n classItem=\"pd-small radius-small hover-bg-light cursor-pointer\"\n classFeed=\"h-max-30r gap-thin flex-column flex o-scroll\"\n >\n <!-- Слот для выбранных жанров -->\n <template #selected=\"{ item, clear }\">\n <div class=\"flex-nowrap flex-v-center flex gap-thin\">\n <span class=\"t-medium\">{{ item?.name || item }}</span>\n <button \n @click.stop=\"clear\"\n class=\"i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover-scale-1\"\n >\n <IconCross class=\"i-micro fill-white\" />\n </button>\n </div>\n </template>\n \n <!-- Слот для элементов в списке -->\n <template #item=\"{ item }\">\n <div class=\"flex-nowrap flex-v-center flex\">\n <div class=\"w-100\">\n <p class=\"t-medium\">{{ item.name }}</p>\n <p v-if=\"item.description\" class=\"t-small t-transp\">{{ item.description }}</p>\n </div>\n </div>\n </template>\n </BlockMultiselect>\n </Block>\n \n <!-- Status Section -->\n <div class=\"bg-light pd-medium radius-medium\">\n <h3 class=\"h3 mn-b-medium\">Publishing Status</h3>\n \n <Select\n v-model:select=\"album.status\"\n :options=\"statusOptions\"\n label=\"Status\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n />\n </div>\n \n <!-- Submit Button -->\n <div class=\"flex flex-justify-between\">\n <Button\n @click=\"$router.go(-1)\"\n class=\"bg-grey-nano t-black\"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n Cancel\n </Button>\n \n <Button\n :submit=\"submitForm\"\n class=\"bg-main t-black\"\n :text=\"{\n success: editMode ? 'Updated!' : 'Created!'\n }\"\n >\n {{ editMode ? 'Update Album' : 'Create Album' }}\n </Button>\n </div>\n </form>\n </div>\n</template>\n\n<script setup>\nimport { ref, reactive, onMounted, watch } from 'vue';\nimport { useRouter, useRoute } from 'vue-router';\n\n// Import Martyrs components\nimport Field from '@martyrs/src/components/Field/Field.vue';\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport UploadImage from '@martyrs/src/components/UploadImage/UploadImage.vue';\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';\n\nimport BlockMultiselect from '@martyrs/src/modules/core/views/components/blocks/BlockMultiselect.vue';\n\n// Import stores\nimport * as albumsStore from '../../store/albums';\nimport * as artistsStore from '../../store/artists';\nimport * as genresStore from '../../store/genres';\nimport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js';\n\nconst store = useStore();\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n\n// Props\nconst props = defineProps({\n editMode: {\n type: Boolean,\n default: false\n },\n url: {\n type: String,\n default: ''\n }\n});\n\n// Router and route\nconst router = useRouter();\nconst route = useRoute();\n\n// State\nconst album = reactive({\n title: '',\n description: '',\n releaseDate: new Date().toISOString().split('T')[0],\n coverArt: '',\n artists: [],\n type: 'album',\n genres: [],\n totalTracks: 0,\n url: '',\n status: 'draft'\n});\n\nconst validation = reactive({\n title: false,\n description: false,\n releaseDate: false\n});\n\n// Track if URL was manually entered\nconst urlManuallySet = ref(false);\n\n// Function to generate URL-friendly slug from text\nconst generateSlug = (text) => {\n if (!text) return '';\n return text\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, '') // Remove special characters\n .replace(/\\s+/g, '-') // Replace spaces with hyphens\n .replace(/-+/g, '-') // Replace multiple hyphens with single\n .trim('-'); // Remove leading/trailing hyphens\n};\n\n// Watch for changes in album title to auto-generate URL\nwatch(() => album.title, (newTitle) => {\n // Only auto-generate if URL hasn't been manually set and we're not in edit mode\n if (!urlManuallySet.value && !props.editMode) {\n album.url = generateSlug(newTitle);\n }\n});\n\n// Watch for manual changes to URL field\nwatch(() => album.url, (newUrl, oldUrl) => {\n // If user manually changes URL, mark as manually set\n if (newUrl !== generateSlug(album.title)) {\n urlManuallySet.value = true;\n }\n});\n\n// Options\nconst statusOptions = [\n 'draft',\n 'published',\n 'archived'\n];\n\nconst albumTypeOptions = [\n 'album',\n 'single',\n 'EP',\n 'compilation'\n];\n\nconst fetchAlbum = async () => {\n if (!props.url) return;\n \n try {\n const fetchedAlbum = await albumsStore.actions.fetchAlbumByUrl(props.url);\n \n if (!fetchedAlbum) {\n store.core.actions.setError({\n message: 'Album not found'\n });\n return;\n }\n \n // Update local album data\n Object.assign(album, {\n title: fetchedAlbum.title || '',\n description: fetchedAlbum.description || '',\n releaseDate: fetchedAlbum.releaseDate ? new Date(fetchedAlbum.releaseDate).toISOString().split('T')[0] : '',\n coverArt: fetchedAlbum.coverArt || '',\n artists: fetchedAlbum.artists || [],\n type: fetchedAlbum.type || 'album',\n genres: fetchedAlbum.genres || [],\n totalTracks: fetchedAlbum.totalTracks || 0,\n url: fetchedAlbum.url || '',\n status: fetchedAlbum.status || 'draft',\n _id: fetchedAlbum._id\n });\n \n } catch (error) {\n console.error('Error fetching album:', error);\n store.core.actions.setError({\n message: 'Failed to load album details'\n });\n }\n};\n\nconst validateForm = () => {\n let isValid = true;\n \n // Validate title\n if (!album.title.trim()) {\n validation.title = {\n message: 'Album title is required'\n };\n isValid = false;\n } else {\n validation.title = false;\n }\n \n // Validate release date\n if (!album.releaseDate) {\n validation.releaseDate = {\n message: 'Release date is required'\n };\n isValid = false;\n } else {\n validation.releaseDate = false;\n }\n \n // Validate description\n if (album.description && album.description.length > 2000) {\n validation.description = {\n message: 'Description is too long (max 2000 characters)'\n };\n isValid = false;\n } else {\n validation.description = false;\n }\n \n return isValid;\n};\n\nconst submitForm = async () => {\n if (!validateForm()) {\n return;\n }\n \n try {\n // Prepare data for submission\n const formData = {\n ...album,\n artists: album.artists.map(artist => artist._id || artist),\n genres: album.genres.map(genre => genre._id || genre)\n };\n \n // Add ownership data if creating new album\n if (!props.editMode) {\n formData.owner = {\n type: 'user',\n target: auth.state.user._id\n };\n }\n \n let result;\n if (props.editMode) {\n result = await albumsStore.actions.updateAlbum(formData);\n } else {\n result = await albumsStore.actions.createAlbum(formData);\n }\n \n // Navigate to album detail page\n setTimeout(() => {\n router.push({\n name: 'album',\n params: { url: result.url }\n });\n }, 1000);\n \n } catch (error) {\n console.error('Error saving album:', error);\n store.core.actions.setError({\n message: 'Failed to save album'\n });\n }\n};\n\nconst handleUploadError = (error) => {\n console.error('Upload error:', error);\n store.core.actions.setError({\n message: 'Error uploading image'\n });\n};\n\n// Lifecycle hooks\nonMounted(async () => {\n if (props.editMode) {\n await fetchAlbum();\n // Mark URL as manually set in edit mode to prevent auto-generation\n urlManuallySet.value = true;\n }\n});\n</script>\n"],"names":["albumsStore.actions","auth.state"],"mappings":"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"}
1
+ {"version":3,"file":"AlbumForm.vue.js","sources":["../../../../../../../src/modules/music/components/forms/AlbumForm.vue"],"sourcesContent":["<template>\n <div class=\"pd-medium\">\n <h2 class=\"h2 mn-b-medium\">{{ editMode ? 'Edit Album' : 'Create Album' }}</h2>\n \n <form @submit.prevent=\"submitForm\" class=\"cols-1 gap-regular\">\n <!-- Basic Info Section -->\n <div class=\"bg-light pd-medium radius-medium\">\n <h3 class=\"h3 mn-b-medium\">Basic Information</h3>\n \n <!-- Album Cover -->\n <div class=\"mn-b-medium\">\n <p class=\"p-medium mn-b-small\">Album Cover</p>\n <UploadImage\n v-model:photo=\"album.coverArt\"\n uploadPath=\"albums/covers\"\n class=\"w-100 h-15r radius-small o-hidden mn-b-small\"\n @error=\"handleUploadError\"\n />\n </div>\n \n <!-- Title -->\n <Field\n v-model:field=\"album.title\"\n label=\"Title\"\n placeholder=\"Enter album title\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n :validation=\"validation.title\"\n />\n \n <!-- URL -->\n <Field\n v-model:field=\"album.url\"\n label=\"URL\"\n placeholder=\"Leave blank for auto-generation based on the album title\"\n class=\"bg-white radius-small pd-small mn-b-small\"\n />\n \n <!-- Description -->\n <Field\n v-model:field=\"album.description\"\n label=\"Description\"\n type=\"textarea\"\n placeholder=\"Enter album description\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n :validation=\"validation.description\"\n />\n \n <!-- Release Date -->\n <Field\n v-model:field=\"album.releaseDate\"\n label=\"Release Date\"\n type=\"date\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n :validation=\"validation.releaseDate\"\n />\n \n <!-- Album Type -->\n <Select\n v-model:select=\"album.type\"\n :options=\"albumTypeOptions\"\n label=\"Album Type\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n />\n </div>\n \n <!-- Artists Section -->\n <Block title=\"Artists\">\n <BlockMultiselect\n v-model=\"album.artists\"\n placeholder=\"Search artists...\"\n :multiple=\"true\"\n :transform=\"(item) => ({ _id: item._id, name: item.name })\"\n :store=\"{\n read: (options) => artistsStore.actions.fetchArtists(options),\n state: artistsStore.state\n }\"\n :options=\"{\n rootOnly: false,\n excludeChildren: false,\n limit: 50\n }\"\n :skeleton=\"{\n hide: false,\n horizontal: true,\n class: 'radius-small',\n structure: [{ \n block: 'text', size: 'large'\n }]\n }\"\n :states=\"{\n empty: {\n title: 'No artists found',\n description: 'Try different search terms or create a new artist',\n class: 'radius-small'\n }\n }\"\n key=\"_id\"\n :label=\"item => item.name\"\n classSearch=\"bg-white radius-small\"\n classSelected=\"bg-white pd-small radius-small\"\n classDropdown=\"bg-white pd-small radius-medium bs-small\"\n classItem=\"pd-small radius-small hover:bg-light cursor-pointer\"\n classFeed=\"h-max-30r gap-thin flex-column flex o-scroll\"\n >\n <!-- Слот для выбранных артистов -->\n <template #selected=\"{ item, clear }\">\n <div class=\"flex-nowrap flex-v-center flex gap-thin\">\n <span class=\"fw-medium\">{{ item?.name || item }}</span>\n <button \n @click.stop=\"clear\"\n class=\"i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover:scale-[1.05]\"\n >\n <IconCross class=\"i-micro fill-white\" />\n </button>\n </div>\n </template>\n \n <!-- Слот для элементов в списке -->\n <template #item=\"{ item }\">\n <div class=\"flex-nowrap flex-v-center flex\">\n <div class=\"w-100\">\n <p class=\"fw-medium\">{{ item.name }}</p>\n <p v-if=\"item.bio\" class=\"t-small t-transp\">{{ item.bio }}</p>\n </div>\n </div>\n </template>\n </BlockMultiselect>\n </Block>\n \n <!-- Genres Section -->\n <Block title=\"Genres\">\n <BlockMultiselect\n v-model=\"album.genres\"\n placeholder=\"Search genres...\"\n :multiple=\"true\"\n :transform=\"(item) => ({ _id: item._id, name: item.name })\"\n :store=\"{\n read: (options) => genresStore.actions.fetchGenres(options),\n state: genresStore.state\n }\"\n :options=\"{\n rootOnly: false,\n excludeChildren: false,\n limit: 50\n }\"\n :skeleton=\"{\n hide: false,\n horizontal: true,\n class: 'radius-small',\n structure: [{ \n block: 'text', size: 'large'\n }]\n }\"\n :states=\"{\n empty: {\n title: 'No genres found',\n description: 'Try different search terms or create a new genre',\n class: 'radius-small'\n }\n }\"\n key=\"_id\"\n :label=\"item => item.name\"\n classSearch=\"bg-white radius-small\"\n classSelected=\"bg-white pd-small radius-small\"\n classDropdown=\"bg-white pd-small radius-medium bs-small\"\n classItem=\"pd-small radius-small hover:bg-light cursor-pointer\"\n classFeed=\"h-max-30r gap-thin flex-column flex o-scroll\"\n >\n <!-- Слот для выбранных жанров -->\n <template #selected=\"{ item, clear }\">\n <div class=\"flex-nowrap flex-v-center flex gap-thin\">\n <span class=\"fw-medium\">{{ item?.name || item }}</span>\n <button \n @click.stop=\"clear\"\n class=\"i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover:scale-[1.05]\"\n >\n <IconCross class=\"i-micro fill-white\" />\n </button>\n </div>\n </template>\n \n <!-- Слот для элементов в списке -->\n <template #item=\"{ item }\">\n <div class=\"flex-nowrap flex-v-center flex\">\n <div class=\"w-100\">\n <p class=\"fw-medium\">{{ item.name }}</p>\n <p v-if=\"item.description\" class=\"t-small t-transp\">{{ item.description }}</p>\n </div>\n </div>\n </template>\n </BlockMultiselect>\n </Block>\n \n <!-- Status Section -->\n <div class=\"bg-light pd-medium radius-medium\">\n <h3 class=\"h3 mn-b-medium\">Publishing Status</h3>\n \n <Select\n v-model:select=\"album.status\"\n :options=\"statusOptions\"\n label=\"Status\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n />\n </div>\n \n <!-- Submit Button -->\n <div class=\"flex flex-justify-between\">\n <Button\n @click=\"$router.go(-1)\"\n class=\"bg-grey-nano t-black\"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n Cancel\n </Button>\n \n <Button\n :submit=\"submitForm\"\n class=\"bg-main t-black\"\n :text=\"{\n success: editMode ? 'Updated!' : 'Created!'\n }\"\n >\n {{ editMode ? 'Update Album' : 'Create Album' }}\n </Button>\n </div>\n </form>\n </div>\n</template>\n\n<script setup>\nimport { ref, reactive, onMounted, watch } from 'vue';\nimport { useRouter, useRoute } from 'vue-router';\n\n// Import Martyrs components\nimport Field from '@martyrs/src/components/Field/Field.vue';\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport UploadImage from '@martyrs/src/components/UploadImage/UploadImage.vue';\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';\n\nimport BlockMultiselect from '@martyrs/src/modules/core/views/components/blocks/BlockMultiselect.vue';\n\n// Import stores\nimport * as albumsStore from '../../store/albums';\nimport * as artistsStore from '../../store/artists';\nimport * as genresStore from '../../store/genres';\nimport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js';\n\nconst store = useStore();\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n\n// Props\nconst props = defineProps({\n editMode: {\n type: Boolean,\n default: false\n },\n url: {\n type: String,\n default: ''\n }\n});\n\n// Router and route\nconst router = useRouter();\nconst route = useRoute();\n\n// State\nconst album = reactive({\n title: '',\n description: '',\n releaseDate: new Date().toISOString().split('T')[0],\n coverArt: '',\n artists: [],\n type: 'album',\n genres: [],\n totalTracks: 0,\n url: '',\n status: 'draft'\n});\n\nconst validation = reactive({\n title: false,\n description: false,\n releaseDate: false\n});\n\n// Track if URL was manually entered\nconst urlManuallySet = ref(false);\n\n// Function to generate URL-friendly slug from text\nconst generateSlug = (text) => {\n if (!text) return '';\n return text\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, '') // Remove special characters\n .replace(/\\s+/g, '-') // Replace spaces with hyphens\n .replace(/-+/g, '-') // Replace multiple hyphens with single\n .trim('-'); // Remove leading/trailing hyphens\n};\n\n// Watch for changes in album title to auto-generate URL\nwatch(() => album.title, (newTitle) => {\n // Only auto-generate if URL hasn't been manually set and we're not in edit mode\n if (!urlManuallySet.value && !props.editMode) {\n album.url = generateSlug(newTitle);\n }\n});\n\n// Watch for manual changes to URL field\nwatch(() => album.url, (newUrl, oldUrl) => {\n // If user manually changes URL, mark as manually set\n if (newUrl !== generateSlug(album.title)) {\n urlManuallySet.value = true;\n }\n});\n\n// Options\nconst statusOptions = [\n 'draft',\n 'published',\n 'archived'\n];\n\nconst albumTypeOptions = [\n 'album',\n 'single',\n 'EP',\n 'compilation'\n];\n\nconst fetchAlbum = async () => {\n if (!props.url) return;\n \n try {\n const fetchedAlbum = await albumsStore.actions.fetchAlbumByUrl(props.url);\n \n if (!fetchedAlbum) {\n store.core.actions.setError({\n message: 'Album not found'\n });\n return;\n }\n \n // Update local album data\n Object.assign(album, {\n title: fetchedAlbum.title || '',\n description: fetchedAlbum.description || '',\n releaseDate: fetchedAlbum.releaseDate ? new Date(fetchedAlbum.releaseDate).toISOString().split('T')[0] : '',\n coverArt: fetchedAlbum.coverArt || '',\n artists: fetchedAlbum.artists || [],\n type: fetchedAlbum.type || 'album',\n genres: fetchedAlbum.genres || [],\n totalTracks: fetchedAlbum.totalTracks || 0,\n url: fetchedAlbum.url || '',\n status: fetchedAlbum.status || 'draft',\n _id: fetchedAlbum._id\n });\n \n } catch (error) {\n console.error('Error fetching album:', error);\n store.core.actions.setError({\n message: 'Failed to load album details'\n });\n }\n};\n\nconst validateForm = () => {\n let isValid = true;\n \n // Validate title\n if (!album.title.trim()) {\n validation.title = {\n message: 'Album title is required'\n };\n isValid = false;\n } else {\n validation.title = false;\n }\n \n // Validate release date\n if (!album.releaseDate) {\n validation.releaseDate = {\n message: 'Release date is required'\n };\n isValid = false;\n } else {\n validation.releaseDate = false;\n }\n \n // Validate description\n if (album.description && album.description.length > 2000) {\n validation.description = {\n message: 'Description is too long (max 2000 characters)'\n };\n isValid = false;\n } else {\n validation.description = false;\n }\n \n return isValid;\n};\n\nconst submitForm = async () => {\n if (!validateForm()) {\n return;\n }\n \n try {\n // Prepare data for submission\n const formData = {\n ...album,\n artists: album.artists.map(artist => artist._id || artist),\n genres: album.genres.map(genre => genre._id || genre)\n };\n \n // Add ownership data if creating new album\n if (!props.editMode) {\n formData.owner = {\n type: 'user',\n target: auth.state.user._id\n };\n }\n \n let result;\n if (props.editMode) {\n result = await albumsStore.actions.updateAlbum(formData);\n } else {\n result = await albumsStore.actions.createAlbum(formData);\n }\n \n // Navigate to album detail page\n setTimeout(() => {\n router.push({\n name: 'album',\n params: { url: result.url }\n });\n }, 1000);\n \n } catch (error) {\n console.error('Error saving album:', error);\n store.core.actions.setError({\n message: 'Failed to save album'\n });\n }\n};\n\nconst handleUploadError = (error) => {\n console.error('Upload error:', error);\n store.core.actions.setError({\n message: 'Error uploading image'\n });\n};\n\n// Lifecycle hooks\nonMounted(async () => {\n if (props.editMode) {\n await fetchAlbum();\n // Mark URL as manually set in edit mode to prevent auto-generation\n urlManuallySet.value = true;\n }\n});\n</script>\n"],"names":["albumsStore.actions","auth.state"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { reactive, ref, watch, onMounted, createElementBlock, openBlock, createElementVNode, toDisplayString, withModifiers, createVNode, withCtx, createCommentVNode, createTextVNode } from "vue";
2
2
  import { useRouter, useRoute } from "vue-router";
3
- import Field from "../../../../components/Field/Field.vue2.js";
3
+ import Field from "../../../../components/Field/Field.vue.js";
4
4
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
5
- import _sfc_main$4 from "../../../../components/Button/Button.vue.js";
5
+ import _sfc_main$4 from "../../../../components/Button/Button.vue2.js";
6
6
  import _sfc_main$3 from "../../../../components/Checkbox/Checkbox.vue.js";
7
- import Select from "../../../../components/Select/Select.vue2.js";
7
+ import Select from "../../../../components/Select/Select.vue.js";
8
8
  import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
9
9
  /* empty css */
10
10
  import BlockMultiselect from "../../../core/views/components/blocks/BlockMultiselect.vue.js";
@@ -20,11 +20,11 @@ const _hoisted_4 = { class: "cols-2 mobile:cols-1 gap-regular" };
20
20
  const _hoisted_5 = { class: "bg-light pd-medium radius-medium" };
21
21
  const _hoisted_6 = { class: "cols-2 mobile:cols-1 gap-thin" };
22
22
  const _hoisted_7 = { class: "flex-nowrap flex-v-center flex gap-thin" };
23
- const _hoisted_8 = { class: "t-medium" };
23
+ const _hoisted_8 = { class: "fw-medium" };
24
24
  const _hoisted_9 = ["onClick"];
25
25
  const _hoisted_10 = { class: "flex-nowrap flex-v-center flex" };
26
26
  const _hoisted_11 = { class: "w-100" };
27
- const _hoisted_12 = { class: "t-medium" };
27
+ const _hoisted_12 = { class: "fw-medium" };
28
28
  const _hoisted_13 = {
29
29
  key: 0,
30
30
  class: "t-small t-transp"
@@ -337,7 +337,7 @@ const _sfc_main = {
337
337
  classSearch: "bg-white radius-small",
338
338
  classSelected: "bg-white pd-small radius-small",
339
339
  classDropdown: "bg-white pd-small radius-medium bs-small",
340
- classItem: "pd-small radius-small hover-bg-light cursor-pointer",
340
+ classItem: "pd-small radius-small hover:bg-light cursor-pointer",
341
341
  classFeed: "h-max-30r gap-thin flex-column flex o-scroll"
342
342
  }, {
343
343
  selected: withCtx(({ item, clear }) => [
@@ -345,7 +345,7 @@ const _sfc_main = {
345
345
  createElementVNode("span", _hoisted_8, toDisplayString(item?.name || item), 1),
346
346
  createElementVNode("button", {
347
347
  onClick: withModifiers(clear, ["stop"]),
348
- class: "i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover-scale-1"
348
+ class: "i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover:scale-[1.05]"
349
349
  }, [
350
350
  createVNode(_sfc_main$2, { class: "i-micro fill-white" })
351
351
  ], 8, _hoisted_9)
@@ -1 +1 @@
1
- {"version":3,"file":"ArtistForm.vue.js","sources":["../../../../../../../src/modules/music/components/forms/ArtistForm.vue"],"sourcesContent":["<template>\n <div class=\"pd-medium\">\n <h2 class=\"h2 mn-b-medium\">{{ editMode ? 'Edit Artist' : 'Create Artist' }}</h2>\n \n <form @submit.prevent=\"submitForm\" class=\"cols-1 gap-regular\">\n <!-- Basic Info Section -->\n <div class=\"bg-light pd-medium radius-medium\">\n <h3 class=\"h3 mn-b-medium\">Basic Information</h3>\n \n <div class=\"cols-2 mobile:cols-1 gap-regular\">\n <!-- Artist Photo -->\n <div>\n <p class=\"p-medium mn-b-small\">Artist Photo</p>\n <UploadImage\n v-model:photo=\"artist.photoUrl\"\n uploadPath=\"artists/photos\"\n class=\"w-100 h-15r radius-small o-hidden mn-b-small\"\n @error=\"handleUploadError\"\n />\n </div>\n \n <!-- Artist Cover -->\n <div>\n <p class=\"p-medium mn-b-small\">Cover Image</p>\n <UploadImage\n v-model:photo=\"artist.coverUrl\"\n uploadPath=\"artists/covers\"\n class=\"w-100 h-15r radius-small o-hidden mn-b-small\"\n @error=\"handleUploadError\"\n />\n </div>\n </div>\n \n <!-- Name -->\n <Field\n v-model:field=\"artist.name\"\n label=\"Name\"\n placeholder=\"Enter artist name\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n :validation=\"validation.name\"\n />\n <!-- URL -->\n <Field\n v-model:field=\"artist.url\"\n label=\"URL\"\n placeholder=\"Leave blank for auto-generation based on the artist name\"\n class=\"bg-white radius-small pd-small mn-b-small\"\n />\n \n <!-- Bio -->\n <Field\n v-model:field=\"artist.bio\"\n label=\"Biography\"\n type=\"textarea\"\n placeholder=\"Enter artist biography\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n :validation=\"validation.bio\"\n />\n \n <!-- Location -->\n <Field\n v-model:field=\"artist.location\"\n label=\"Location\"\n placeholder=\"e.g., Los Angeles, CA\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n />\n \n <!-- Website -->\n <Field\n v-model:field=\"artist.website\"\n label=\"Website\"\n placeholder=\"https://example.com\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n />\n \n \n </div>\n \n <!-- Social Media Section -->\n <div class=\"bg-light pd-medium radius-medium\">\n <h3 class=\"h3 mn-b-medium\">Social Media</h3>\n \n <div class=\"cols-2 mobile:cols-1 gap-thin\">\n <!-- Telegram -->\n <Field\n v-model:field=\"artist.socials.telegram\"\n label=\"Telegram\"\n placeholder=\"@username\"\n class=\"bg-white radius-small pd-small\"\n />\n \n <!-- Twitter -->\n <Field\n v-model:field=\"artist.socials.twitter\"\n label=\"Twitter\"\n placeholder=\"@username\"\n class=\"bg-white radius-small pd-small\"\n />\n \n <!-- Facebook -->\n <Field\n v-model:field=\"artist.socials.facebook\"\n label=\"Facebook\"\n placeholder=\"username or page-name\"\n class=\"bg-white radius-small pd-small\"\n />\n \n <!-- Instagram -->\n <Field\n v-model:field=\"artist.socials.instagram\"\n label=\"Instagram\"\n placeholder=\"@username\"\n class=\"bg-white radius-small pd-small\"\n />\n </div>\n </div>\n \n <!-- Genres Section (assuming genres are available) -->\n <Block title=\"Genres\">\n <BlockMultiselect\n v-model=\"artist.genres\"\n placeholder=\"Search genres...\"\n :multiple=\"true\"\n :transform=\"(item) => ({ _id: item._id, name: item.name })\"\n :store=\"{\n read: (options) => genresStore.actions.fetchGenres(options),\n state: genresStore.state\n }\"\n :options=\"{\n rootOnly: false,\n excludeChildren: false,\n limit: 50\n }\"\n :skeleton=\"{\n hide: false,\n horizontal: true,\n class: 'radius-small',\n structure: [{ \n block: 'text', size: 'large'\n }]\n }\"\n :states=\"{\n empty: {\n title: 'No genres found',\n description: 'Try different search terms or create a new genre',\n class: 'radius-small'\n }\n }\"\n key=\"_id\"\n :label=\"item => item.name\"\n classSearch=\"bg-white radius-small\"\n classSelected=\"bg-white pd-small radius-small\"\n classDropdown=\"bg-white pd-small radius-medium bs-small\"\n classItem=\"pd-small radius-small hover-bg-light cursor-pointer\"\n classFeed=\"h-max-30r gap-thin flex-column flex o-scroll\"\n >\n <!-- Слот для выбранных жанров -->\n <template #selected=\"{ item, clear }\">\n <div class=\"flex-nowrap flex-v-center flex gap-thin\">\n <span class=\"t-medium\">{{ item?.name || item }}</span>\n <button \n @click.stop=\"clear\"\n class=\"i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover-scale-1\"\n >\n <IconCross class=\"i-micro fill-white\" />\n </button>\n </div>\n </template>\n \n <!-- Слот для элементов в списке -->\n <template #item=\"{ item }\">\n <div class=\"flex-nowrap flex-v-center flex\">\n <div class=\"w-100\">\n <p class=\"t-medium\">{{ item.name }}</p>\n <p v-if=\"item.description\" class=\"t-small t-transp\">{{ item.description }}</p>\n </div>\n </div>\n </template>\n </BlockMultiselect>\n </Block>\n \n <!-- Status Section -->\n <div class=\"bg-light pd-medium radius-medium\">\n <h3 class=\"h3 mn-b-medium\">Publishing Status</h3>\n \n <Select\n v-model:select=\"artist.status\"\n :options=\"statusOptions\"\n label=\"Status\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n />\n \n <Checkbox\n v-model:active=\"artist.isVerified\"\n label=\"Verified Artist\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n />\n </div>\n \n <!-- Submit Button -->\n <div class=\"flex flex-justify-between\">\n <Button\n @click=\"$router.go(-1)\"\n class=\"bg-grey-nano t-black\"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n Cancel\n </Button>\n \n <Button\n :submit=\"submitForm\"\n class=\"bg-main t-black\"\n :text=\"{\n success: editMode ? 'Updated!' : 'Created!'\n }\"\n >\n {{ editMode ? 'Update Artist' : 'Create Artist' }}\n </Button>\n </div>\n </form>\n </div>\n</template>\n\n<script setup>\nimport { ref, reactive, onMounted, computed, watch } from 'vue';\nimport { useRouter, useRoute } from 'vue-router';\n\n// Import Martyrs components\nimport Field from '@martyrs/src/components/Field/Field.vue';\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Checkbox from '@martyrs/src/components/Checkbox/Checkbox.vue';\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport UploadImage from '@martyrs/src/components/UploadImage/UploadImage.vue';\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\n\n\nimport BlockMultiselect from '@martyrs/src/modules/core/views/components/blocks/BlockMultiselect.vue';\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';\n\n// Import store\nimport * as artistsStore from '../../store/artists';\nimport * as genresStore from '../../store/genres';\nimport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js';\n\nconst store = useStore();\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n\n// Props\nconst props = defineProps({\n editMode: {\n type: Boolean,\n default: false\n },\n url: {\n type: String,\n default: ''\n }\n});\n\n// Router and route\nconst router = useRouter();\nconst route = useRoute();\n\n// State\nconst artist = reactive({\n name: '',\n bio: '',\n photoUrl: '',\n coverUrl: '',\n website: '',\n location: '',\n isVerified: false,\n status: 'draft',\n socials: {\n telegram: '',\n twitter: '',\n facebook: '',\n instagram: ''\n },\n url: '',\n genres: []\n});\n\nconst validation = reactive({\n name: false,\n bio: false\n});\n\n// Track if URL was manually entered\nconst urlManuallySet = ref(false);\n\n// Function to generate URL-friendly slug from text\nconst generateSlug = (text) => {\n if (!text) return '';\n return text\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, '') // Remove special characters\n .replace(/\\s+/g, '-') // Replace spaces with hyphens\n .replace(/-+/g, '-') // Replace multiple hyphens with single\n .trim('-'); // Remove leading/trailing hyphens\n};\n\n// Watch for changes in artist name to auto-generate URL\nwatch(() => artist.name, (newName) => {\n // Only auto-generate if URL hasn't been manually set and we're not in edit mode\n if (!urlManuallySet.value && !props.editMode) {\n artist.url = generateSlug(newName);\n }\n});\n\n// Watch for manual changes to URL field\nwatch(() => artist.url, (newUrl, oldUrl) => {\n // If user manually changes URL, mark as manually set\n if (newUrl !== generateSlug(artist.name)) {\n urlManuallySet.value = true;\n }\n});\n\n// Status options\nconst statusOptions = [\n 'draft',\n 'published',\n 'archived'\n];\n\n\nconst fetchArtist = async () => {\n if (!props.url) return;\n \n try {\n const fetchedArtist = await artistsStore.actions.fetchArtistByUrl(props.url);\n \n if (!fetchedArtist) {\n store.core.actions.setError({\n message: 'Artist not found'\n });\n return;\n }\n \n // Update local artist data\n Object.assign(artist, {\n name: fetchedArtist.name || '',\n bio: fetchedArtist.bio || '',\n photoUrl: fetchedArtist.photoUrl || '',\n coverUrl: fetchedArtist.coverUrl || '',\n website: fetchedArtist.website || '',\n location: fetchedArtist.location || '',\n isVerified: fetchedArtist.isVerified || false,\n status: fetchedArtist.status || 'draft',\n url: fetchedArtist.url || '',\n genres: fetchedArtist.genres || [],\n _id: fetchedArtist._id,\n socials: {\n telegram: fetchedArtist.socials?.telegram || '',\n twitter: fetchedArtist.socials?.twitter || '',\n facebook: fetchedArtist.socials?.facebook || '',\n instagram: fetchedArtist.socials?.instagram || ''\n }\n });\n \n } catch (error) {\n console.error('Error fetching artist:', error);\n store.core.actions.setError({\n message: 'Failed to load artist details'\n });\n }\n};\n\nconst validateForm = () => {\n let isValid = true;\n \n // Validate name\n if (!artist.name.trim()) {\n validation.name = {\n message: 'Artist name is required'\n };\n isValid = false;\n } else {\n validation.name = false;\n }\n \n // Validate bio\n if (artist.bio && artist.bio.length > 2000) {\n validation.bio = {\n message: 'Biography is too long (max 2000 characters)'\n };\n isValid = false;\n } else {\n validation.bio = false;\n }\n \n return isValid;\n};\n\nconst submitForm = async () => {\n if (!validateForm()) {\n return;\n }\n \n try {\n // Prepare data for submission\n const formData = {\n ...artist,\n genres: artist.genres.map(genre => genre._id || genre)\n };\n \n // Add ownership data if creating new artist\n if (!props.editMode) {\n formData.owner = {\n type: 'user',\n target: auth.state.user._id\n };\n formData.creator = {\n type: 'user',\n target: auth.state.user._id\n };\n }\n \n let result;\n if (props.editMode) {\n result = await artistsStore.actions.updateArtist(formData);\n } else {\n result = await artistsStore.actions.createArtist(formData);\n }\n \n // Navigate to artist detail page\n setTimeout(() => {\n router.push({\n name: 'artist',\n params: { url: result.url }\n });\n }, 1000);\n \n } catch (error) {\n console.error('Error saving artist:', error);\n store.core.actions.setError({\n message: 'Failed to save artist'\n });\n }\n};\n\nconst handleUploadError = (error) => {\n console.error('Upload error:', error);\n store.core.actions.setError({\n message: 'Error uploading image'\n });\n};\n\n// Lifecycle hooks\nonMounted(async () => {\n if (props.editMode) {\n await fetchArtist();\n // Mark URL as manually set in edit mode to prevent auto-generation\n urlManuallySet.value = true;\n }\n});\n</script>\n"],"names":["artistsStore.actions","auth.state"],"mappings":"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"}
1
+ {"version":3,"file":"ArtistForm.vue.js","sources":["../../../../../../../src/modules/music/components/forms/ArtistForm.vue"],"sourcesContent":["<template>\n <div class=\"pd-medium\">\n <h2 class=\"h2 mn-b-medium\">{{ editMode ? 'Edit Artist' : 'Create Artist' }}</h2>\n \n <form @submit.prevent=\"submitForm\" class=\"cols-1 gap-regular\">\n <!-- Basic Info Section -->\n <div class=\"bg-light pd-medium radius-medium\">\n <h3 class=\"h3 mn-b-medium\">Basic Information</h3>\n \n <div class=\"cols-2 mobile:cols-1 gap-regular\">\n <!-- Artist Photo -->\n <div>\n <p class=\"p-medium mn-b-small\">Artist Photo</p>\n <UploadImage\n v-model:photo=\"artist.photoUrl\"\n uploadPath=\"artists/photos\"\n class=\"w-100 h-15r radius-small o-hidden mn-b-small\"\n @error=\"handleUploadError\"\n />\n </div>\n \n <!-- Artist Cover -->\n <div>\n <p class=\"p-medium mn-b-small\">Cover Image</p>\n <UploadImage\n v-model:photo=\"artist.coverUrl\"\n uploadPath=\"artists/covers\"\n class=\"w-100 h-15r radius-small o-hidden mn-b-small\"\n @error=\"handleUploadError\"\n />\n </div>\n </div>\n \n <!-- Name -->\n <Field\n v-model:field=\"artist.name\"\n label=\"Name\"\n placeholder=\"Enter artist name\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n :validation=\"validation.name\"\n />\n <!-- URL -->\n <Field\n v-model:field=\"artist.url\"\n label=\"URL\"\n placeholder=\"Leave blank for auto-generation based on the artist name\"\n class=\"bg-white radius-small pd-small mn-b-small\"\n />\n \n <!-- Bio -->\n <Field\n v-model:field=\"artist.bio\"\n label=\"Biography\"\n type=\"textarea\"\n placeholder=\"Enter artist biography\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n :validation=\"validation.bio\"\n />\n \n <!-- Location -->\n <Field\n v-model:field=\"artist.location\"\n label=\"Location\"\n placeholder=\"e.g., Los Angeles, CA\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n />\n \n <!-- Website -->\n <Field\n v-model:field=\"artist.website\"\n label=\"Website\"\n placeholder=\"https://example.com\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n />\n \n \n </div>\n \n <!-- Social Media Section -->\n <div class=\"bg-light pd-medium radius-medium\">\n <h3 class=\"h3 mn-b-medium\">Social Media</h3>\n \n <div class=\"cols-2 mobile:cols-1 gap-thin\">\n <!-- Telegram -->\n <Field\n v-model:field=\"artist.socials.telegram\"\n label=\"Telegram\"\n placeholder=\"@username\"\n class=\"bg-white radius-small pd-small\"\n />\n \n <!-- Twitter -->\n <Field\n v-model:field=\"artist.socials.twitter\"\n label=\"Twitter\"\n placeholder=\"@username\"\n class=\"bg-white radius-small pd-small\"\n />\n \n <!-- Facebook -->\n <Field\n v-model:field=\"artist.socials.facebook\"\n label=\"Facebook\"\n placeholder=\"username or page-name\"\n class=\"bg-white radius-small pd-small\"\n />\n \n <!-- Instagram -->\n <Field\n v-model:field=\"artist.socials.instagram\"\n label=\"Instagram\"\n placeholder=\"@username\"\n class=\"bg-white radius-small pd-small\"\n />\n </div>\n </div>\n \n <!-- Genres Section (assuming genres are available) -->\n <Block title=\"Genres\">\n <BlockMultiselect\n v-model=\"artist.genres\"\n placeholder=\"Search genres...\"\n :multiple=\"true\"\n :transform=\"(item) => ({ _id: item._id, name: item.name })\"\n :store=\"{\n read: (options) => genresStore.actions.fetchGenres(options),\n state: genresStore.state\n }\"\n :options=\"{\n rootOnly: false,\n excludeChildren: false,\n limit: 50\n }\"\n :skeleton=\"{\n hide: false,\n horizontal: true,\n class: 'radius-small',\n structure: [{ \n block: 'text', size: 'large'\n }]\n }\"\n :states=\"{\n empty: {\n title: 'No genres found',\n description: 'Try different search terms or create a new genre',\n class: 'radius-small'\n }\n }\"\n key=\"_id\"\n :label=\"item => item.name\"\n classSearch=\"bg-white radius-small\"\n classSelected=\"bg-white pd-small radius-small\"\n classDropdown=\"bg-white pd-small radius-medium bs-small\"\n classItem=\"pd-small radius-small hover:bg-light cursor-pointer\"\n classFeed=\"h-max-30r gap-thin flex-column flex o-scroll\"\n >\n <!-- Слот для выбранных жанров -->\n <template #selected=\"{ item, clear }\">\n <div class=\"flex-nowrap flex-v-center flex gap-thin\">\n <span class=\"fw-medium\">{{ item?.name || item }}</span>\n <button \n @click.stop=\"clear\"\n class=\"i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover:scale-[1.05]\"\n >\n <IconCross class=\"i-micro fill-white\" />\n </button>\n </div>\n </template>\n \n <!-- Слот для элементов в списке -->\n <template #item=\"{ item }\">\n <div class=\"flex-nowrap flex-v-center flex\">\n <div class=\"w-100\">\n <p class=\"fw-medium\">{{ item.name }}</p>\n <p v-if=\"item.description\" class=\"t-small t-transp\">{{ item.description }}</p>\n </div>\n </div>\n </template>\n </BlockMultiselect>\n </Block>\n \n <!-- Status Section -->\n <div class=\"bg-light pd-medium radius-medium\">\n <h3 class=\"h3 mn-b-medium\">Publishing Status</h3>\n \n <Select\n v-model:select=\"artist.status\"\n :options=\"statusOptions\"\n label=\"Status\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n />\n \n <Checkbox\n v-model:active=\"artist.isVerified\"\n label=\"Verified Artist\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n />\n </div>\n \n <!-- Submit Button -->\n <div class=\"flex flex-justify-between\">\n <Button\n @click=\"$router.go(-1)\"\n class=\"bg-grey-nano t-black\"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n Cancel\n </Button>\n \n <Button\n :submit=\"submitForm\"\n class=\"bg-main t-black\"\n :text=\"{\n success: editMode ? 'Updated!' : 'Created!'\n }\"\n >\n {{ editMode ? 'Update Artist' : 'Create Artist' }}\n </Button>\n </div>\n </form>\n </div>\n</template>\n\n<script setup>\nimport { ref, reactive, onMounted, computed, watch } from 'vue';\nimport { useRouter, useRoute } from 'vue-router';\n\n// Import Martyrs components\nimport Field from '@martyrs/src/components/Field/Field.vue';\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Checkbox from '@martyrs/src/components/Checkbox/Checkbox.vue';\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport UploadImage from '@martyrs/src/components/UploadImage/UploadImage.vue';\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\n\n\nimport BlockMultiselect from '@martyrs/src/modules/core/views/components/blocks/BlockMultiselect.vue';\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';\n\n// Import store\nimport * as artistsStore from '../../store/artists';\nimport * as genresStore from '../../store/genres';\nimport { useStore } from '@martyrs/src/modules/core/views/store/core.store.js';\n\nconst store = useStore();\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n\n// Props\nconst props = defineProps({\n editMode: {\n type: Boolean,\n default: false\n },\n url: {\n type: String,\n default: ''\n }\n});\n\n// Router and route\nconst router = useRouter();\nconst route = useRoute();\n\n// State\nconst artist = reactive({\n name: '',\n bio: '',\n photoUrl: '',\n coverUrl: '',\n website: '',\n location: '',\n isVerified: false,\n status: 'draft',\n socials: {\n telegram: '',\n twitter: '',\n facebook: '',\n instagram: ''\n },\n url: '',\n genres: []\n});\n\nconst validation = reactive({\n name: false,\n bio: false\n});\n\n// Track if URL was manually entered\nconst urlManuallySet = ref(false);\n\n// Function to generate URL-friendly slug from text\nconst generateSlug = (text) => {\n if (!text) return '';\n return text\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, '') // Remove special characters\n .replace(/\\s+/g, '-') // Replace spaces with hyphens\n .replace(/-+/g, '-') // Replace multiple hyphens with single\n .trim('-'); // Remove leading/trailing hyphens\n};\n\n// Watch for changes in artist name to auto-generate URL\nwatch(() => artist.name, (newName) => {\n // Only auto-generate if URL hasn't been manually set and we're not in edit mode\n if (!urlManuallySet.value && !props.editMode) {\n artist.url = generateSlug(newName);\n }\n});\n\n// Watch for manual changes to URL field\nwatch(() => artist.url, (newUrl, oldUrl) => {\n // If user manually changes URL, mark as manually set\n if (newUrl !== generateSlug(artist.name)) {\n urlManuallySet.value = true;\n }\n});\n\n// Status options\nconst statusOptions = [\n 'draft',\n 'published',\n 'archived'\n];\n\n\nconst fetchArtist = async () => {\n if (!props.url) return;\n \n try {\n const fetchedArtist = await artistsStore.actions.fetchArtistByUrl(props.url);\n \n if (!fetchedArtist) {\n store.core.actions.setError({\n message: 'Artist not found'\n });\n return;\n }\n \n // Update local artist data\n Object.assign(artist, {\n name: fetchedArtist.name || '',\n bio: fetchedArtist.bio || '',\n photoUrl: fetchedArtist.photoUrl || '',\n coverUrl: fetchedArtist.coverUrl || '',\n website: fetchedArtist.website || '',\n location: fetchedArtist.location || '',\n isVerified: fetchedArtist.isVerified || false,\n status: fetchedArtist.status || 'draft',\n url: fetchedArtist.url || '',\n genres: fetchedArtist.genres || [],\n _id: fetchedArtist._id,\n socials: {\n telegram: fetchedArtist.socials?.telegram || '',\n twitter: fetchedArtist.socials?.twitter || '',\n facebook: fetchedArtist.socials?.facebook || '',\n instagram: fetchedArtist.socials?.instagram || ''\n }\n });\n \n } catch (error) {\n console.error('Error fetching artist:', error);\n store.core.actions.setError({\n message: 'Failed to load artist details'\n });\n }\n};\n\nconst validateForm = () => {\n let isValid = true;\n \n // Validate name\n if (!artist.name.trim()) {\n validation.name = {\n message: 'Artist name is required'\n };\n isValid = false;\n } else {\n validation.name = false;\n }\n \n // Validate bio\n if (artist.bio && artist.bio.length > 2000) {\n validation.bio = {\n message: 'Biography is too long (max 2000 characters)'\n };\n isValid = false;\n } else {\n validation.bio = false;\n }\n \n return isValid;\n};\n\nconst submitForm = async () => {\n if (!validateForm()) {\n return;\n }\n \n try {\n // Prepare data for submission\n const formData = {\n ...artist,\n genres: artist.genres.map(genre => genre._id || genre)\n };\n \n // Add ownership data if creating new artist\n if (!props.editMode) {\n formData.owner = {\n type: 'user',\n target: auth.state.user._id\n };\n formData.creator = {\n type: 'user',\n target: auth.state.user._id\n };\n }\n \n let result;\n if (props.editMode) {\n result = await artistsStore.actions.updateArtist(formData);\n } else {\n result = await artistsStore.actions.createArtist(formData);\n }\n \n // Navigate to artist detail page\n setTimeout(() => {\n router.push({\n name: 'artist',\n params: { url: result.url }\n });\n }, 1000);\n \n } catch (error) {\n console.error('Error saving artist:', error);\n store.core.actions.setError({\n message: 'Failed to save artist'\n });\n }\n};\n\nconst handleUploadError = (error) => {\n console.error('Upload error:', error);\n store.core.actions.setError({\n message: 'Error uploading image'\n });\n};\n\n// Lifecycle hooks\nonMounted(async () => {\n if (props.editMode) {\n await fetchArtist();\n // Mark URL as manually set in edit mode to prevent auto-generation\n urlManuallySet.value = true;\n }\n});\n</script>\n"],"names":["artistsStore.actions","auth.state"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
1
  import { reactive, ref, watch, computed, onMounted, createElementBlock, openBlock, createElementVNode, toDisplayString, withModifiers, createVNode, withCtx, createCommentVNode, createTextVNode } from "vue";
2
2
  import { useRouter, useRoute } from "vue-router";
3
- import Field from "../../../../components/Field/Field.vue2.js";
3
+ import Field from "../../../../components/Field/Field.vue.js";
4
4
  import _sfc_main$1 from "../../../../components/Block/Block.vue.js";
5
- import _sfc_main$4 from "../../../../components/Button/Button.vue.js";
5
+ import _sfc_main$4 from "../../../../components/Button/Button.vue2.js";
6
6
  import _sfc_main$3 from "../../../../components/Radio/Radio.vue.js";
7
7
  import UploadImage from "../../../../components/UploadImage/UploadImage.vue.js";
8
8
  import _sfc_main$2 from "../../../icons/navigation/IconCross.vue.js";
@@ -18,8 +18,8 @@ const _hoisted_4 = { class: "mn-b-medium" };
18
18
  const _hoisted_5 = { class: "flex-nowrap flex-v-center flex gap-thin" };
19
19
  const _hoisted_6 = ["onClick", "disabled"];
20
20
  const _hoisted_7 = ["onClick", "disabled"];
21
- const _hoisted_8 = { class: "flex-1" };
22
- const _hoisted_9 = { class: "t-medium" };
21
+ const _hoisted_8 = { class: "flex-child-1" };
22
+ const _hoisted_9 = { class: "fw-medium" };
23
23
  const _hoisted_10 = { class: "t-small t-transp" };
24
24
  const _hoisted_11 = { key: 0 };
25
25
  const _hoisted_12 = {
@@ -29,7 +29,7 @@ const _hoisted_12 = {
29
29
  const _hoisted_13 = ["onClick"];
30
30
  const _hoisted_14 = { class: "flex-nowrap flex-v-center flex" };
31
31
  const _hoisted_15 = { class: "w-100" };
32
- const _hoisted_16 = { class: "t-medium" };
32
+ const _hoisted_16 = { class: "fw-medium" };
33
33
  const _hoisted_17 = { class: "t-small t-transp" };
34
34
  const _hoisted_18 = { key: 0 };
35
35
  const _hoisted_19 = {
@@ -299,7 +299,7 @@ const _sfc_main = {
299
299
  classSearch: "bg-white radius-small",
300
300
  classSelected: "bg-white pd-small radius-small",
301
301
  classDropdown: "bg-white pd-small radius-medium bs-small",
302
- classItem: "pd-small radius-small hover-bg-light cursor-pointer",
302
+ classItem: "pd-small radius-small hover:bg-light cursor-pointer",
303
303
  classFeed: "h-max-30r gap-thin flex-column flex o-scroll"
304
304
  }, {
305
305
  selected: withCtx(({ item, clear, index }) => [
@@ -308,7 +308,7 @@ const _sfc_main = {
308
308
  key: 0,
309
309
  onClick: withModifiers(($event) => moveTrack(index, "up"), ["stop"]),
310
310
  disabled: index === 0,
311
- class: "i-small pd-micro bg-grey-nano radius-extra flex-center flex aspect-1x1 hover-scale-1"
311
+ class: "i-small pd-micro bg-grey-nano radius-extra flex-center flex aspect-1x1 hover:scale-[1.05]"
312
312
  }, [
313
313
  createVNode(_sfc_main$2, { class: "i-micro" })
314
314
  ], 8, _hoisted_6)) : createCommentVNode("", true),
@@ -316,7 +316,7 @@ const _sfc_main = {
316
316
  key: 1,
317
317
  onClick: withModifiers(($event) => moveTrack(index, "down"), ["stop"]),
318
318
  disabled: index === playlist.tracks.length - 1,
319
- class: "i-small pd-micro bg-grey-nano radius-extra flex-center flex aspect-1x1 hover-scale-1"
319
+ class: "i-small pd-micro bg-grey-nano radius-extra flex-center flex aspect-1x1 hover:scale-[1.05]"
320
320
  }, [
321
321
  createVNode(_sfc_main$2, { class: "i-micro" })
322
322
  ], 8, _hoisted_7)) : createCommentVNode("", true),
@@ -330,7 +330,7 @@ const _sfc_main = {
330
330
  item.duration ? (openBlock(), createElementBlock("span", _hoisted_12, toDisplayString(formatDuration(item.duration)), 1)) : createCommentVNode("", true),
331
331
  createElementVNode("button", {
332
332
  onClick: withModifiers(clear, ["stop"]),
333
- class: "i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover-scale-1"
333
+ class: "i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover:scale-[1.05]"
334
334
  }, [
335
335
  createVNode(_sfc_main$2, { class: "i-micro fill-white" })
336
336
  ], 8, _hoisted_13)