@ozdao/martyrs 0.2.486 → 0.2.487

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 (591) hide show
  1. package/dist/Media-B2jWzwLB.cjs +1 -0
  2. package/dist/{Media-CXQSPHt2.js → Media-DZ5_ItXQ.js} +3 -3
  3. package/dist/auth.server.cjs +1 -1
  4. package/dist/auth.server.js +1 -1
  5. package/dist/{authJwt-DBB51Iql.cjs → authJwt-D35KyJlE.cjs} +31 -2
  6. package/dist/{authJwt-DcYNNwcr.js → authJwt-DqxhUym0.js} +31 -2
  7. package/dist/chats.server.cjs +1 -1
  8. package/dist/chats.server.js +1 -1
  9. package/dist/community.server.cjs +1 -1
  10. package/dist/community.server.js +1 -1
  11. package/dist/crud-BDIArc5A.cjs +1096 -0
  12. package/dist/crud-DJvpe0aZ.js +1097 -0
  13. package/dist/events.server.cjs +1 -1
  14. package/dist/events.server.js +1 -1
  15. package/dist/files.server.cjs +1 -1
  16. package/dist/files.server.js +1 -1
  17. package/dist/gallery.server.cjs +1 -1
  18. package/dist/gallery.server.js +1 -1
  19. package/dist/{index-CsJwdsBW.js → index-CVuQC4k1.js} +1 -1
  20. package/dist/{index-YNOkL1mu.cjs → index-DiSKVCaA.cjs} +1 -1
  21. package/dist/main-C6_DPWGX.cjs +11 -0
  22. package/dist/{main-Cfh5138F.js → main-nQmkbWsW.js} +825 -826
  23. package/dist/martyrs/src/components/Chips/{Chips.vue2.cjs → Chips.vue.cjs} +2 -2
  24. package/dist/martyrs/src/components/Chips/Chips.vue.cjs.map +1 -0
  25. package/dist/martyrs/src/components/Chips/{Chips.vue2.js → Chips.vue.js} +2 -2
  26. package/dist/martyrs/src/components/Chips/Chips.vue.js.map +1 -0
  27. package/dist/martyrs/src/components/Field/{Field.vue.cjs → Field.vue2.cjs} +5 -6
  28. package/dist/martyrs/src/components/Field/Field.vue2.cjs.map +1 -0
  29. package/dist/martyrs/src/components/Field/{Field.vue.js → Field.vue2.js} +5 -6
  30. package/dist/martyrs/src/components/Field/Field.vue2.js.map +1 -0
  31. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +10 -9
  32. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs.map +1 -1
  33. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +13 -12
  34. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js.map +1 -1
  35. package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.cjs +1 -1
  36. package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.cjs.map +1 -1
  37. package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.js +1 -1
  38. package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.js.map +1 -1
  39. package/dist/martyrs/src/components/Media/Media.vue.cjs +2 -2
  40. package/dist/martyrs/src/components/Media/Media.vue.cjs.map +1 -1
  41. package/dist/martyrs/src/components/Media/Media.vue.js +2 -2
  42. package/dist/martyrs/src/components/Media/Media.vue.js.map +1 -1
  43. package/dist/martyrs/src/components/Select/Select.vue.cjs +2 -2
  44. package/dist/martyrs/src/components/Select/Select.vue.cjs.map +1 -1
  45. package/dist/martyrs/src/components/Select/Select.vue.js +2 -2
  46. package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -1
  47. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs +1 -0
  48. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs.map +1 -1
  49. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +1 -0
  50. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js.map +1 -1
  51. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +1 -1
  52. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +5 -5
  53. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +1 -1
  54. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +5 -5
  55. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +1 -0
  56. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs.map +1 -1
  57. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +1 -0
  58. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
  59. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +1 -1
  60. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +10 -10
  61. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +1 -1
  62. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +4 -4
  63. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +1 -1
  64. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +5 -5
  65. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +1 -1
  66. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +4 -4
  67. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.cjs +1 -1
  68. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +23 -23
  69. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs +1 -1
  70. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +1 -1
  71. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
  72. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
  73. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
  74. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +11 -11
  75. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.cjs +1 -1
  76. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +3 -3
  77. package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.cjs +1 -1
  78. package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.js +2 -2
  79. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs +1 -1
  80. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +1 -1
  81. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
  82. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +25 -25
  83. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
  84. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +15 -15
  85. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +9 -2
  86. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs.map +1 -1
  87. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +9 -2
  88. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
  89. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +2 -1
  90. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs.map +1 -1
  91. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +2 -1
  92. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js.map +1 -1
  93. package/dist/martyrs/src/modules/globals/views/classes/globals.store.cjs +24 -58
  94. package/dist/martyrs/src/modules/globals/views/classes/globals.store.cjs.map +1 -1
  95. package/dist/martyrs/src/modules/globals/views/classes/globals.store.js +24 -58
  96. package/dist/martyrs/src/modules/globals/views/classes/globals.store.js.map +1 -1
  97. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.cjs +1 -1
  98. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.js +2 -2
  99. package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs +1 -0
  100. package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs.map +1 -1
  101. package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js +1 -0
  102. package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js.map +1 -1
  103. package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterOptions.vue.cjs +1 -1
  104. package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterOptions.vue.js +2 -2
  105. package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterPrice.vue.cjs +1 -1
  106. package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterPrice.vue.js +3 -3
  107. package/dist/martyrs/src/modules/globals/views/store/globals.cjs +6 -0
  108. package/dist/martyrs/src/modules/globals/views/store/globals.cjs.map +1 -1
  109. package/dist/martyrs/src/modules/globals/views/store/globals.js +6 -0
  110. package/dist/martyrs/src/modules/globals/views/store/globals.js.map +1 -1
  111. package/dist/martyrs/src/modules/globals/views/utils/query-serializer.cjs +100 -0
  112. package/dist/martyrs/src/modules/globals/views/utils/query-serializer.cjs.map +1 -0
  113. package/dist/martyrs/src/modules/globals/views/utils/query-serializer.js +100 -0
  114. package/dist/martyrs/src/modules/globals/views/utils/query-serializer.js.map +1 -0
  115. package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.cjs +224 -0
  116. package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.cjs.map +1 -0
  117. package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.js +224 -0
  118. package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.js.map +1 -0
  119. package/dist/martyrs/src/modules/icons/entities/IconAddress.vue.cjs +40 -0
  120. package/dist/martyrs/src/modules/icons/entities/IconAddress.vue.cjs.map +1 -0
  121. package/dist/martyrs/src/modules/icons/entities/IconAddress.vue.js +40 -0
  122. package/dist/martyrs/src/modules/icons/entities/IconAddress.vue.js.map +1 -0
  123. package/dist/martyrs/src/modules/icons/entities/IconDate.vue.cjs +6 -6
  124. package/dist/martyrs/src/modules/icons/entities/IconDate.vue.js +6 -6
  125. package/dist/martyrs/src/modules/icons/entities/IconEmail.vue.cjs +32 -0
  126. package/dist/martyrs/src/modules/icons/entities/IconEmail.vue.cjs.map +1 -0
  127. package/dist/martyrs/src/modules/icons/entities/IconEmail.vue.js +32 -0
  128. package/dist/martyrs/src/modules/icons/entities/IconEmail.vue.js.map +1 -0
  129. package/dist/martyrs/src/modules/icons/entities/IconMusic.vue.cjs +10 -12
  130. package/dist/martyrs/src/modules/icons/entities/IconMusic.vue.cjs.map +1 -1
  131. package/dist/martyrs/src/modules/icons/entities/IconMusic.vue.js +11 -13
  132. package/dist/martyrs/src/modules/icons/entities/IconMusic.vue.js.map +1 -1
  133. package/dist/martyrs/src/modules/icons/entities/IconPhone.vue.cjs +32 -0
  134. package/dist/martyrs/src/modules/icons/entities/IconPhone.vue.cjs.map +1 -0
  135. package/dist/martyrs/src/modules/icons/entities/IconPhone.vue.js +32 -0
  136. package/dist/martyrs/src/modules/icons/entities/IconPhone.vue.js.map +1 -0
  137. package/dist/martyrs/src/modules/icons/icons.client.cjs +48 -4
  138. package/dist/martyrs/src/modules/icons/icons.client.cjs.map +1 -1
  139. package/dist/martyrs/src/modules/icons/icons.client.js +172 -128
  140. package/dist/martyrs/src/modules/icons/icons.client.js.map +1 -1
  141. package/dist/martyrs/src/modules/icons/navigation/IconCross.vue.cjs +5 -7
  142. package/dist/martyrs/src/modules/icons/navigation/IconCross.vue.cjs.map +1 -1
  143. package/dist/martyrs/src/modules/icons/navigation/IconCross.vue.js +5 -7
  144. package/dist/martyrs/src/modules/icons/navigation/IconCross.vue.js.map +1 -1
  145. package/dist/martyrs/src/modules/icons/navigation/IconPause.vue.cjs +6 -11
  146. package/dist/martyrs/src/modules/icons/navigation/IconPause.vue.cjs.map +1 -1
  147. package/dist/martyrs/src/modules/icons/navigation/IconPause.vue.js +6 -11
  148. package/dist/martyrs/src/modules/icons/navigation/IconPause.vue.js.map +1 -1
  149. package/dist/martyrs/src/modules/icons/navigation/IconRefresh.vue.cjs +6 -11
  150. package/dist/martyrs/src/modules/icons/navigation/IconRefresh.vue.cjs.map +1 -1
  151. package/dist/martyrs/src/modules/icons/navigation/IconRefresh.vue.js +6 -11
  152. package/dist/martyrs/src/modules/icons/navigation/IconRefresh.vue.js.map +1 -1
  153. package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs +62 -6
  154. package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs.map +1 -1
  155. package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js +189 -133
  156. package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js.map +1 -1
  157. package/dist/martyrs/src/modules/icons/socials/dribbble.vue.cjs +21 -12
  158. package/dist/martyrs/src/modules/icons/socials/dribbble.vue.cjs.map +1 -1
  159. package/dist/martyrs/src/modules/icons/socials/dribbble.vue.js +21 -12
  160. package/dist/martyrs/src/modules/icons/socials/dribbble.vue.js.map +1 -1
  161. package/dist/martyrs/src/modules/icons/socials/facebook.vue.cjs +21 -12
  162. package/dist/martyrs/src/modules/icons/socials/facebook.vue.cjs.map +1 -1
  163. package/dist/martyrs/src/modules/icons/socials/facebook.vue.js +21 -12
  164. package/dist/martyrs/src/modules/icons/socials/facebook.vue.js.map +1 -1
  165. package/dist/martyrs/src/modules/icons/socials/instagram.vue.cjs +25 -17
  166. package/dist/martyrs/src/modules/icons/socials/instagram.vue.cjs.map +1 -1
  167. package/dist/martyrs/src/modules/icons/socials/instagram.vue.js +25 -17
  168. package/dist/martyrs/src/modules/icons/socials/instagram.vue.js.map +1 -1
  169. package/dist/martyrs/src/modules/icons/socials/line.vue.cjs +23 -14
  170. package/dist/martyrs/src/modules/icons/socials/line.vue.cjs.map +1 -1
  171. package/dist/martyrs/src/modules/icons/socials/line.vue.js +23 -14
  172. package/dist/martyrs/src/modules/icons/socials/line.vue.js.map +1 -1
  173. package/dist/martyrs/src/modules/icons/socials/linkedin.vue.cjs +26 -17
  174. package/dist/martyrs/src/modules/icons/socials/linkedin.vue.cjs.map +1 -1
  175. package/dist/martyrs/src/modules/icons/socials/linkedin.vue.js +26 -17
  176. package/dist/martyrs/src/modules/icons/socials/linkedin.vue.js.map +1 -1
  177. package/dist/martyrs/src/modules/icons/socials/reddit.vue.cjs +21 -12
  178. package/dist/martyrs/src/modules/icons/socials/reddit.vue.cjs.map +1 -1
  179. package/dist/martyrs/src/modules/icons/socials/reddit.vue.js +21 -12
  180. package/dist/martyrs/src/modules/icons/socials/reddit.vue.js.map +1 -1
  181. package/dist/martyrs/src/modules/icons/socials/telegram.vue.cjs +29 -20
  182. package/dist/martyrs/src/modules/icons/socials/telegram.vue.cjs.map +1 -1
  183. package/dist/martyrs/src/modules/icons/socials/telegram.vue.js +29 -20
  184. package/dist/martyrs/src/modules/icons/socials/telegram.vue.js.map +1 -1
  185. package/dist/martyrs/src/modules/icons/socials/twitter.vue.cjs +21 -12
  186. package/dist/martyrs/src/modules/icons/socials/twitter.vue.cjs.map +1 -1
  187. package/dist/martyrs/src/modules/icons/socials/twitter.vue.js +21 -12
  188. package/dist/martyrs/src/modules/icons/socials/twitter.vue.js.map +1 -1
  189. package/dist/martyrs/src/modules/icons/socials/vk.vue.cjs +21 -12
  190. package/dist/martyrs/src/modules/icons/socials/vk.vue.cjs.map +1 -1
  191. package/dist/martyrs/src/modules/icons/socials/vk.vue.js +21 -12
  192. package/dist/martyrs/src/modules/icons/socials/vk.vue.js.map +1 -1
  193. package/dist/martyrs/src/modules/icons/socials/whatsapp.vue.cjs +32 -0
  194. package/dist/martyrs/src/modules/icons/socials/whatsapp.vue.cjs.map +1 -0
  195. package/dist/martyrs/src/modules/icons/socials/whatsapp.vue.js +32 -0
  196. package/dist/martyrs/src/modules/icons/socials/whatsapp.vue.js.map +1 -0
  197. package/dist/martyrs/src/modules/icons/socials/youtube.vue.cjs +21 -12
  198. package/dist/martyrs/src/modules/icons/socials/youtube.vue.cjs.map +1 -1
  199. package/dist/martyrs/src/modules/icons/socials/youtube.vue.js +21 -12
  200. package/dist/martyrs/src/modules/icons/socials/youtube.vue.js.map +1 -1
  201. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +3 -3
  202. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs.map +1 -1
  203. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +3 -3
  204. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js.map +1 -1
  205. package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.cjs +3 -3
  206. package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.cjs.map +1 -1
  207. package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js +3 -3
  208. package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js.map +1 -1
  209. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +3 -3
  210. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs.map +1 -1
  211. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +3 -3
  212. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js.map +1 -1
  213. package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.cjs +2 -2
  214. package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.cjs.map +1 -1
  215. package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.js +2 -2
  216. package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.js.map +1 -1
  217. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +162 -0
  218. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs.map +1 -0
  219. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +162 -0
  220. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js.map +1 -0
  221. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +437 -0
  222. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs.map +1 -0
  223. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +437 -0
  224. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js.map +1 -0
  225. package/dist/martyrs/src/modules/music/components/{pages → forms}/ArtistForm.vue.cjs +140 -106
  226. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs.map +1 -0
  227. package/dist/martyrs/src/modules/music/components/{pages → forms}/ArtistForm.vue.js +162 -128
  228. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js.map +1 -0
  229. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +11 -11
  230. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs.map +1 -1
  231. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +23 -23
  232. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js.map +1 -1
  233. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +2 -2
  234. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs.map +1 -1
  235. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +2 -2
  236. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js.map +1 -1
  237. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +554 -0
  238. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs.map +1 -0
  239. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +554 -0
  240. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js.map +1 -0
  241. package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs +57 -68
  242. package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs.map +1 -1
  243. package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js +58 -69
  244. package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js.map +1 -1
  245. package/dist/martyrs/src/modules/music/components/pages/{AlbumDetail.vue.cjs → Album.vue.cjs} +47 -23
  246. package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs.map +1 -0
  247. package/dist/martyrs/src/modules/music/components/pages/{AlbumDetail.vue.js → Album.vue.js} +47 -23
  248. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -0
  249. package/dist/martyrs/src/modules/music/components/pages/AlbumCreate.vue.cjs +14 -0
  250. package/dist/martyrs/src/modules/music/components/pages/AlbumCreate.vue.cjs.map +1 -0
  251. package/dist/martyrs/src/modules/music/components/pages/AlbumCreate.vue.js +14 -0
  252. package/dist/martyrs/src/modules/music/components/pages/AlbumCreate.vue.js.map +1 -0
  253. package/dist/martyrs/src/modules/music/components/pages/AlbumEdit.vue.cjs +23 -0
  254. package/dist/martyrs/src/modules/music/components/pages/AlbumEdit.vue.cjs.map +1 -0
  255. package/dist/martyrs/src/modules/music/components/pages/AlbumEdit.vue.js +23 -0
  256. package/dist/martyrs/src/modules/music/components/pages/AlbumEdit.vue.js.map +1 -0
  257. package/dist/martyrs/src/modules/music/components/pages/{ArtistDetail.vue.cjs → Artist.vue.cjs} +11 -11
  258. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs.map +1 -0
  259. package/dist/martyrs/src/modules/music/components/pages/{ArtistDetail.vue.js → Artist.vue.js} +11 -11
  260. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js.map +1 -0
  261. package/dist/martyrs/src/modules/music/components/pages/ArtistCreate.vue.cjs +14 -0
  262. package/dist/martyrs/src/modules/music/components/pages/ArtistCreate.vue.cjs.map +1 -0
  263. package/dist/martyrs/src/modules/music/components/pages/ArtistCreate.vue.js +14 -0
  264. package/dist/martyrs/src/modules/music/components/pages/ArtistCreate.vue.js.map +1 -0
  265. package/dist/martyrs/src/modules/music/components/pages/ArtistEdit.vue.cjs +23 -0
  266. package/dist/martyrs/src/modules/music/components/pages/ArtistEdit.vue.cjs.map +1 -0
  267. package/dist/martyrs/src/modules/music/components/pages/ArtistEdit.vue.js +23 -0
  268. package/dist/martyrs/src/modules/music/components/pages/ArtistEdit.vue.js.map +1 -0
  269. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.cjs +94 -59
  270. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.cjs.map +1 -1
  271. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js +95 -60
  272. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js.map +1 -1
  273. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +168 -120
  274. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs.map +1 -1
  275. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +170 -122
  276. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js.map +1 -1
  277. package/dist/martyrs/src/modules/music/components/pages/{PlaylistDetail.vue.cjs → Playlist.vue.cjs} +60 -36
  278. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs.map +1 -0
  279. package/dist/martyrs/src/modules/music/components/pages/{PlaylistDetail.vue.js → Playlist.vue.js} +73 -49
  280. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -0
  281. package/dist/martyrs/src/modules/music/components/pages/PlaylistCreate.vue.cjs +14 -0
  282. package/dist/martyrs/src/modules/music/components/pages/PlaylistCreate.vue.cjs.map +1 -0
  283. package/dist/martyrs/src/modules/music/components/pages/PlaylistCreate.vue.js +14 -0
  284. package/dist/martyrs/src/modules/music/components/pages/PlaylistCreate.vue.js.map +1 -0
  285. package/dist/martyrs/src/modules/music/components/pages/PlaylistEdit.vue.cjs +23 -0
  286. package/dist/martyrs/src/modules/music/components/pages/PlaylistEdit.vue.cjs.map +1 -0
  287. package/dist/martyrs/src/modules/music/components/pages/PlaylistEdit.vue.js +23 -0
  288. package/dist/martyrs/src/modules/music/components/pages/PlaylistEdit.vue.js.map +1 -0
  289. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +52 -28
  290. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs.map +1 -1
  291. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +52 -28
  292. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js.map +1 -1
  293. package/dist/martyrs/src/modules/music/components/pages/{TrackDetail.vue.cjs → Track.vue.cjs} +37 -13
  294. package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs.map +1 -0
  295. package/dist/martyrs/src/modules/music/components/pages/{TrackDetail.vue.js → Track.vue.js} +38 -14
  296. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -0
  297. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.cjs +28 -0
  298. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.cjs.map +1 -0
  299. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +28 -0
  300. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js.map +1 -0
  301. package/dist/martyrs/src/modules/music/components/pages/TrackEdit.vue.cjs +23 -0
  302. package/dist/martyrs/src/modules/music/components/pages/TrackEdit.vue.cjs.map +1 -0
  303. package/dist/martyrs/src/modules/music/components/pages/TrackEdit.vue.js +23 -0
  304. package/dist/martyrs/src/modules/music/components/pages/TrackEdit.vue.js.map +1 -0
  305. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +3 -3
  306. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs.map +1 -1
  307. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +3 -3
  308. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js.map +1 -1
  309. package/dist/martyrs/src/modules/music/music.client.cjs +31 -31
  310. package/dist/martyrs/src/modules/music/music.client.cjs.map +1 -1
  311. package/dist/martyrs/src/modules/music/music.client.js +31 -31
  312. package/dist/martyrs/src/modules/music/music.client.js.map +1 -1
  313. package/dist/martyrs/src/modules/music/router/albums.cjs +34 -0
  314. package/dist/martyrs/src/modules/music/router/albums.cjs.map +1 -0
  315. package/dist/martyrs/src/modules/music/router/albums.js +34 -0
  316. package/dist/martyrs/src/modules/music/router/albums.js.map +1 -0
  317. package/dist/martyrs/src/modules/music/router/artists.cjs +34 -0
  318. package/dist/martyrs/src/modules/music/router/artists.cjs.map +1 -0
  319. package/dist/martyrs/src/modules/music/router/artists.js +34 -0
  320. package/dist/martyrs/src/modules/music/router/artists.js.map +1 -0
  321. package/dist/martyrs/src/modules/music/router/music.cjs +12 -64
  322. package/dist/martyrs/src/modules/music/router/music.cjs.map +1 -1
  323. package/dist/martyrs/src/modules/music/router/music.js +12 -64
  324. package/dist/martyrs/src/modules/music/router/music.js.map +1 -1
  325. package/dist/martyrs/src/modules/music/router/playlists.cjs +34 -0
  326. package/dist/martyrs/src/modules/music/router/playlists.cjs.map +1 -0
  327. package/dist/martyrs/src/modules/music/router/playlists.js +34 -0
  328. package/dist/martyrs/src/modules/music/router/playlists.js.map +1 -0
  329. package/dist/martyrs/src/modules/music/router/tracks.cjs +34 -0
  330. package/dist/martyrs/src/modules/music/router/tracks.cjs.map +1 -0
  331. package/dist/martyrs/src/modules/music/router/tracks.js +34 -0
  332. package/dist/martyrs/src/modules/music/router/tracks.js.map +1 -0
  333. package/dist/martyrs/src/modules/music/store/artists.cjs +12 -6
  334. package/dist/martyrs/src/modules/music/store/artists.cjs.map +1 -1
  335. package/dist/martyrs/src/modules/music/store/artists.js +12 -6
  336. package/dist/martyrs/src/modules/music/store/artists.js.map +1 -1
  337. package/dist/martyrs/src/modules/music/store/genres.cjs +123 -0
  338. package/dist/martyrs/src/modules/music/store/genres.cjs.map +1 -0
  339. package/dist/martyrs/src/modules/music/store/genres.js +123 -0
  340. package/dist/martyrs/src/modules/music/store/genres.js.map +1 -0
  341. package/dist/martyrs/src/modules/music/store/playlists.cjs +14 -6
  342. package/dist/martyrs/src/modules/music/store/playlists.cjs.map +1 -1
  343. package/dist/martyrs/src/modules/music/store/playlists.js +14 -6
  344. package/dist/martyrs/src/modules/music/store/playlists.js.map +1 -1
  345. package/dist/martyrs/src/modules/music/store/tracks.cjs +6 -2
  346. package/dist/martyrs/src/modules/music/store/tracks.cjs.map +1 -1
  347. package/dist/martyrs/src/modules/music/store/tracks.js +6 -2
  348. package/dist/martyrs/src/modules/music/store/tracks.js.map +1 -1
  349. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +1 -0
  350. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs.map +1 -1
  351. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -0
  352. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js.map +1 -1
  353. package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.cjs +1 -0
  354. package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.cjs.map +1 -1
  355. package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.js +1 -0
  356. package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.js.map +1 -1
  357. package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.cjs +1 -1
  358. package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.js +5 -5
  359. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +1 -1
  360. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +2 -2
  361. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +1 -1
  362. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +1 -1
  363. package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.js +16 -16
  364. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
  365. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +15 -15
  366. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
  367. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +16 -16
  368. package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs +1 -1
  369. package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.js +1 -1
  370. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
  371. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +2 -2
  372. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
  373. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +8 -8
  374. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -0
  375. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs.map +1 -1
  376. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -0
  377. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js.map +1 -1
  378. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -0
  379. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs.map +1 -1
  380. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -0
  381. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js.map +1 -1
  382. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -0
  383. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs.map +1 -1
  384. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -0
  385. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js.map +1 -1
  386. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.cjs +1 -1
  387. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +1 -1
  388. package/dist/martyrs/src/modules/products/components/forms/ReorderSettingsForm.vue.cjs +1 -1
  389. package/dist/martyrs/src/modules/products/components/forms/ReorderSettingsForm.vue.js +8 -8
  390. package/dist/martyrs/src/modules/products/components/forms/StockAuditForm.vue.cjs +1 -1
  391. package/dist/martyrs/src/modules/products/components/forms/StockAuditForm.vue.js +12 -12
  392. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +1 -1
  393. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +11 -11
  394. package/dist/martyrs/src/modules/products/components/pages/LeftoverEdit.vue.cjs +1 -1
  395. package/dist/martyrs/src/modules/products/components/pages/LeftoverEdit.vue.js +10 -10
  396. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
  397. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +17 -17
  398. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +1 -1
  399. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +6 -6
  400. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +1 -1
  401. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +12 -12
  402. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +1 -1
  403. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +16 -16
  404. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.cjs +1 -1
  405. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +4 -4
  406. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +1 -1
  407. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +1 -1
  408. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +1 -0
  409. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs.map +1 -1
  410. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -0
  411. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js.map +1 -1
  412. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -0
  413. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs.map +1 -1
  414. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -0
  415. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js.map +1 -1
  416. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +1 -1
  417. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +12 -12
  418. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +1 -1
  419. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +7 -7
  420. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.cjs +1 -1
  421. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +2 -2
  422. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
  423. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +2 -2
  424. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +1 -1
  425. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +1 -1
  426. package/dist/martyrs.cjs.js +1 -1
  427. package/dist/martyrs.css +1 -1
  428. package/dist/martyrs.es.js +1 -1
  429. package/dist/music.server.cjs +1165 -551
  430. package/dist/music.server.js +1161 -547
  431. package/dist/orders.server.cjs +89 -4
  432. package/dist/orders.server.js +88 -3
  433. package/dist/organizations.server.cjs +1 -1
  434. package/dist/organizations.server.js +1 -1
  435. package/dist/products.server.cjs +3 -1093
  436. package/dist/products.server.js +2 -1092
  437. package/dist/rents.server.cjs +1 -1
  438. package/dist/rents.server.js +1 -1
  439. package/dist/style.css +121 -77
  440. package/dist/wallet.server.cjs +1 -1
  441. package/dist/wallet.server.js +1 -1
  442. package/package.json +1 -1
  443. package/src/components/Field/Field.vue +13 -8
  444. package/src/components/FieldBig/FieldBig.vue +3 -5
  445. package/src/components/FieldPhone/FieldPhone.vue +1 -1
  446. package/src/components/Media/Media.vue +1 -1
  447. package/src/components/Select/Select.vue +1 -1
  448. package/src/components/Status/Snack.vue +83 -0
  449. package/src/modules/auth/controllers/middlewares/authJwt.js +59 -6
  450. package/src/modules/globals/views/classes/globals.store.js +31 -66
  451. package/src/modules/globals/views/components/partials/FooterAlt.vue +363 -0
  452. package/src/modules/globals/views/store/globals.js +42 -0
  453. package/src/modules/globals/views/utils/query-serializer.js +182 -0
  454. package/src/modules/icons/components/IconSearchPopup.vue +254 -0
  455. package/src/modules/icons/entities/IconAddress.vue +17 -0
  456. package/src/modules/icons/entities/IconDate.vue +3 -3
  457. package/src/modules/icons/entities/IconEmail.vue +14 -0
  458. package/src/modules/icons/entities/IconMusic.vue +3 -3
  459. package/src/modules/icons/entities/IconPhone.vue +14 -0
  460. package/src/modules/icons/icons.client.js +85 -31
  461. package/src/modules/icons/icons.server.js +292 -0
  462. package/src/modules/icons/navigation/IconCross.vue +4 -16
  463. package/src/modules/icons/navigation/IconPause.vue +9 -24
  464. package/src/modules/icons/navigation/IconRefresh.vue +9 -24
  465. package/src/modules/icons/pages/IconsPage.vue +78 -2
  466. package/src/modules/icons/routes/icons.routes.js +81 -0
  467. package/src/modules/icons/socials/dribbble.vue +11 -2
  468. package/src/modules/icons/socials/facebook.vue +11 -2
  469. package/src/modules/icons/socials/instagram.vue +11 -4
  470. package/src/modules/icons/socials/line.vue +11 -2
  471. package/src/modules/icons/socials/linkedin.vue +11 -2
  472. package/src/modules/icons/socials/reddit.vue +10 -1
  473. package/src/modules/icons/socials/telegram.vue +11 -2
  474. package/src/modules/icons/socials/twitter.vue +11 -2
  475. package/src/modules/icons/socials/vk.vue +11 -2
  476. package/src/modules/icons/socials/whatsapp.vue +12 -0
  477. package/src/modules/icons/socials/youtube.vue +11 -2
  478. package/src/modules/music/.claude/settings.local.json +8 -0
  479. package/src/modules/music/CLAUDE.md +312 -0
  480. package/src/modules/music/components/SidebarMusic.vue +8 -8
  481. package/src/modules/music/components/cards/AlbumCard.vue +2 -2
  482. package/src/modules/music/components/cards/ArtistCard.vue +2 -2
  483. package/src/modules/music/components/cards/PlaylistCard.vue +2 -2
  484. package/src/modules/music/components/cards/TrackCard.vue +1 -1
  485. package/src/modules/music/components/cards/TrackListCard.vue +135 -0
  486. package/src/modules/music/components/forms/AlbumForm.vue +463 -0
  487. package/src/modules/music/components/{pages → forms}/ArtistForm.vue +127 -96
  488. package/src/modules/music/components/forms/PlaylistForm.vue +10 -10
  489. package/src/modules/music/components/forms/SearchForm.vue +1 -1
  490. package/src/modules/music/components/forms/TrackForm.vue +577 -0
  491. package/src/modules/music/components/layouts/MusicLayout.vue +35 -41
  492. package/src/modules/music/components/pages/{AlbumDetail.vue → Album.vue} +42 -20
  493. package/src/modules/music/components/pages/AlbumCreate.vue +7 -0
  494. package/src/modules/music/components/pages/AlbumEdit.vue +14 -0
  495. package/src/modules/music/components/pages/{ArtistDetail.vue → Artist.vue} +9 -9
  496. package/src/modules/music/components/pages/ArtistCreate.vue +7 -0
  497. package/src/modules/music/components/pages/ArtistEdit.vue +14 -0
  498. package/src/modules/music/components/pages/MusicHome.vue +86 -67
  499. package/src/modules/music/components/pages/MusicLibrary.vue +136 -105
  500. package/src/modules/music/components/pages/{PlaylistDetail.vue → Playlist.vue} +56 -34
  501. package/src/modules/music/components/pages/PlaylistCreate.vue +7 -0
  502. package/src/modules/music/components/pages/PlaylistEdit.vue +14 -0
  503. package/src/modules/music/components/pages/SearchResults.vue +49 -27
  504. package/src/modules/music/components/pages/{TrackDetail.vue → Track.vue} +36 -14
  505. package/src/modules/music/components/pages/TrackCreate.vue +23 -0
  506. package/src/modules/music/components/pages/TrackEdit.vue +14 -0
  507. package/src/modules/music/components/player/MusicPlayer.vue +2 -2
  508. package/src/modules/music/middlewares/albums.verifier.js +234 -0
  509. package/src/modules/music/middlewares/artists.verifier.js +213 -0
  510. package/src/modules/music/middlewares/genres.verifier.js +148 -0
  511. package/src/modules/music/middlewares/playlists.verifier.js +219 -0
  512. package/src/modules/music/middlewares/tracks.verifier.js +263 -0
  513. package/src/modules/music/music.client.js +31 -33
  514. package/src/modules/music/music.server.js +33 -26
  515. package/src/modules/music/router/albums.js +31 -0
  516. package/src/modules/music/router/artists.js +31 -0
  517. package/src/modules/music/router/music.js +14 -65
  518. package/src/modules/music/router/playlists.js +31 -0
  519. package/src/modules/music/router/tracks.js +31 -0
  520. package/src/modules/music/routes/albums.routes.js +126 -0
  521. package/src/modules/music/routes/artists.routes.js +171 -0
  522. package/src/modules/music/routes/genres.routes.js +118 -0
  523. package/src/modules/music/routes/playlists.routes.js +239 -0
  524. package/src/modules/music/routes/tracks.routes.js +149 -0
  525. package/src/modules/music/store/artists.js +17 -7
  526. package/src/modules/music/store/genres.js +150 -0
  527. package/src/modules/music/store/playlists.js +19 -6
  528. package/src/modules/music/store/tracks.js +9 -2
  529. package/dist/Media-DhpD64nT.cjs +0 -1
  530. package/dist/globals.crud-BQG1Lm0A.js +0 -90
  531. package/dist/globals.crud-Dv7UXbRM.cjs +0 -89
  532. package/dist/main-DKJqboZy.cjs +0 -11
  533. package/dist/martyrs/src/components/Chips/Chips.vue2.cjs.map +0 -1
  534. package/dist/martyrs/src/components/Chips/Chips.vue2.js.map +0 -1
  535. package/dist/martyrs/src/components/Field/Field.vue.cjs.map +0 -1
  536. package/dist/martyrs/src/components/Field/Field.vue.js.map +0 -1
  537. package/dist/martyrs/src/modules/music/components/forms/UploadForm.vue.cjs +0 -328
  538. package/dist/martyrs/src/modules/music/components/forms/UploadForm.vue.cjs.map +0 -1
  539. package/dist/martyrs/src/modules/music/components/forms/UploadForm.vue.js +0 -328
  540. package/dist/martyrs/src/modules/music/components/forms/UploadForm.vue.js.map +0 -1
  541. package/dist/martyrs/src/modules/music/components/lists/AlbumList.vue.cjs +0 -44
  542. package/dist/martyrs/src/modules/music/components/lists/AlbumList.vue.cjs.map +0 -1
  543. package/dist/martyrs/src/modules/music/components/lists/AlbumList.vue.js +0 -44
  544. package/dist/martyrs/src/modules/music/components/lists/AlbumList.vue.js.map +0 -1
  545. package/dist/martyrs/src/modules/music/components/lists/ArtistList.vue.cjs +0 -305
  546. package/dist/martyrs/src/modules/music/components/lists/ArtistList.vue.cjs.map +0 -1
  547. package/dist/martyrs/src/modules/music/components/lists/ArtistList.vue.js +0 -305
  548. package/dist/martyrs/src/modules/music/components/lists/ArtistList.vue.js.map +0 -1
  549. package/dist/martyrs/src/modules/music/components/lists/PlaylistList.vue.cjs +0 -44
  550. package/dist/martyrs/src/modules/music/components/lists/PlaylistList.vue.cjs.map +0 -1
  551. package/dist/martyrs/src/modules/music/components/lists/PlaylistList.vue.js +0 -44
  552. package/dist/martyrs/src/modules/music/components/lists/PlaylistList.vue.js.map +0 -1
  553. package/dist/martyrs/src/modules/music/components/lists/TrackList.vue.cjs +0 -199
  554. package/dist/martyrs/src/modules/music/components/lists/TrackList.vue.cjs.map +0 -1
  555. package/dist/martyrs/src/modules/music/components/lists/TrackList.vue.js +0 -199
  556. package/dist/martyrs/src/modules/music/components/lists/TrackList.vue.js.map +0 -1
  557. package/dist/martyrs/src/modules/music/components/pages/AlbumDetail.vue.cjs.map +0 -1
  558. package/dist/martyrs/src/modules/music/components/pages/AlbumDetail.vue.js.map +0 -1
  559. package/dist/martyrs/src/modules/music/components/pages/ArtistDetail.vue.cjs.map +0 -1
  560. package/dist/martyrs/src/modules/music/components/pages/ArtistDetail.vue.js.map +0 -1
  561. package/dist/martyrs/src/modules/music/components/pages/ArtistForm.vue.cjs.map +0 -1
  562. package/dist/martyrs/src/modules/music/components/pages/ArtistForm.vue.js.map +0 -1
  563. package/dist/martyrs/src/modules/music/components/pages/ArtistManager.vue.cjs +0 -303
  564. package/dist/martyrs/src/modules/music/components/pages/ArtistManager.vue.cjs.map +0 -1
  565. package/dist/martyrs/src/modules/music/components/pages/ArtistManager.vue.js +0 -303
  566. package/dist/martyrs/src/modules/music/components/pages/ArtistManager.vue.js.map +0 -1
  567. package/dist/martyrs/src/modules/music/components/pages/MusicUpload.vue.cjs +0 -50
  568. package/dist/martyrs/src/modules/music/components/pages/MusicUpload.vue.cjs.map +0 -1
  569. package/dist/martyrs/src/modules/music/components/pages/MusicUpload.vue.js +0 -50
  570. package/dist/martyrs/src/modules/music/components/pages/MusicUpload.vue.js.map +0 -1
  571. package/dist/martyrs/src/modules/music/components/pages/PlaylistDetail.vue.cjs.map +0 -1
  572. package/dist/martyrs/src/modules/music/components/pages/PlaylistDetail.vue.js.map +0 -1
  573. package/dist/martyrs/src/modules/music/components/pages/TrackDetail.vue.cjs.map +0 -1
  574. package/dist/martyrs/src/modules/music/components/pages/TrackDetail.vue.js.map +0 -1
  575. package/src/modules/music/components/forms/UploadForm.vue +0 -313
  576. package/src/modules/music/components/lists/AlbumList.vue +0 -25
  577. package/src/modules/music/components/lists/ArtistList.vue +0 -280
  578. package/src/modules/music/components/lists/PlaylistList.vue +0 -25
  579. package/src/modules/music/components/lists/TrackList.vue +0 -175
  580. package/src/modules/music/components/pages/ArtistManager.vue +0 -277
  581. package/src/modules/music/components/pages/MusicUpload.vue +0 -44
  582. package/src/modules/music/controllers/album.controller.js +0 -82
  583. package/src/modules/music/controllers/artist.controller.js +0 -99
  584. package/src/modules/music/controllers/genre.controller.js +0 -63
  585. package/src/modules/music/controllers/music.controller.js +0 -145
  586. package/src/modules/music/controllers/playlist.controller.js +0 -146
  587. package/src/modules/music/routes/album.routes.js +0 -28
  588. package/src/modules/music/routes/artist.routes.js +0 -30
  589. package/src/modules/music/routes/genre.routes.js +0 -28
  590. package/src/modules/music/routes/music.routes.js +0 -106
  591. package/src/modules/music/routes/playlist.routes.js +0 -47
@@ -0,0 +1,123 @@
1
+ import Store from "../../globals/views/classes/globals.store.js";
2
+ import { reactive } from "vue";
3
+ const genreStore = new Store(`${process.env.API_URL}/api/genres`);
4
+ const state = reactive({
5
+ genres: [],
6
+ popularGenres: [],
7
+ currentGenre: null,
8
+ genreTracks: [],
9
+ isLoading: false,
10
+ loadingPopular: false
11
+ });
12
+ const actions = {
13
+ async fetchGenres(options = {}) {
14
+ state.isLoading = true;
15
+ try {
16
+ const genres = await genreStore.read(options);
17
+ state.genres = genres;
18
+ return genres;
19
+ } catch (error) {
20
+ console.error("Error fetching genres:", error);
21
+ return [];
22
+ } finally {
23
+ state.isLoading = false;
24
+ }
25
+ },
26
+ async fetchPopularGenres(options = {}) {
27
+ state.loadingPopular = true;
28
+ try {
29
+ const queryOptions = {
30
+ limit: options.limit || 10,
31
+ sortParam: options.sortParam || "popularity",
32
+ sortOrder: options.sortOrder || "desc",
33
+ status: "published"
34
+ };
35
+ if (options.skip) queryOptions.skip = options.skip;
36
+ if (options.search) queryOptions.search = options.search;
37
+ if (options.popular) {
38
+ queryOptions.sortParam = "popularity";
39
+ queryOptions.sortOrder = "desc";
40
+ }
41
+ const genres = await genreStore.read(queryOptions);
42
+ state.popularGenres = genres;
43
+ return genres;
44
+ } catch (error) {
45
+ console.error("Error fetching popular genres:", error);
46
+ return [];
47
+ } finally {
48
+ state.loadingPopular = false;
49
+ }
50
+ },
51
+ async fetchGenreByUrl(url) {
52
+ try {
53
+ const response = await fetch(`${process.env.API_URL}/api/genres/url/${url}`);
54
+ const genre = await response.json();
55
+ state.currentGenre = genre;
56
+ await this.fetchGenreTracks(genre._id);
57
+ return genre;
58
+ } catch (error) {
59
+ console.error("Error fetching genre by URL:", error);
60
+ return null;
61
+ }
62
+ },
63
+ async fetchGenreTracks(genreId) {
64
+ try {
65
+ const response = await fetch(`${process.env.API_URL}/api/genres/${genreId}/tracks`);
66
+ const tracks = await response.json();
67
+ state.genreTracks = tracks;
68
+ return tracks;
69
+ } catch (error) {
70
+ console.error("Error fetching genre tracks:", error);
71
+ return [];
72
+ }
73
+ },
74
+ async createGenre(genreData) {
75
+ try {
76
+ const createdGenre = await genreStore.create(genreData);
77
+ state.genres.unshift(createdGenre);
78
+ return createdGenre;
79
+ } catch (error) {
80
+ console.error("Error creating genre:", error);
81
+ throw error;
82
+ }
83
+ },
84
+ async updateGenre(genreData) {
85
+ try {
86
+ const updatedGenre = await genreStore.update(genreData);
87
+ const index = state.genres.findIndex((g) => g._id === updatedGenre._id);
88
+ if (index !== -1) {
89
+ state.genres[index] = updatedGenre;
90
+ }
91
+ const popularIndex = state.popularGenres.findIndex((g) => g._id === updatedGenre._id);
92
+ if (popularIndex !== -1) {
93
+ state.popularGenres[popularIndex] = updatedGenre;
94
+ }
95
+ if (state.currentGenre && state.currentGenre._id === updatedGenre._id) {
96
+ state.currentGenre = updatedGenre;
97
+ }
98
+ return updatedGenre;
99
+ } catch (error) {
100
+ console.error("Error updating genre:", error);
101
+ throw error;
102
+ }
103
+ },
104
+ async deleteGenre(genreId) {
105
+ try {
106
+ await genreStore.delete({ _id: genreId });
107
+ state.genres = state.genres.filter((g) => g._id !== genreId);
108
+ state.popularGenres = state.popularGenres.filter((g) => g._id !== genreId);
109
+ if (state.currentGenre && state.currentGenre._id === genreId) {
110
+ state.currentGenre = null;
111
+ }
112
+ return true;
113
+ } catch (error) {
114
+ console.error("Error deleting genre:", error);
115
+ throw error;
116
+ }
117
+ }
118
+ };
119
+ export {
120
+ actions,
121
+ state
122
+ };
123
+ //# sourceMappingURL=genres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"genres.js","sources":["../../../../../../src/modules/music/store/genres.js"],"sourcesContent":["// store/genres.js\nimport Store from '@martyrs/src/modules/globals/views/classes/globals.store.js';\nimport { reactive } from 'vue';\n\n// Create store instance\nconst genreStore = new Store(`${process.env.API_URL}/api/genres`);\n\n// State\nexport const state = reactive({\n genres: [],\n popularGenres: [],\n currentGenre: null,\n genreTracks: [],\n isLoading: false,\n loadingPopular: false,\n});\n\n// Actions\nexport const actions = {\n async fetchGenres(options = {}) {\n state.isLoading = true;\n try {\n const genres = await genreStore.read(options);\n state.genres = genres;\n return genres;\n } catch (error) {\n console.error('Error fetching genres:', error);\n return [];\n } finally {\n state.isLoading = false;\n }\n },\n\n async fetchPopularGenres(options = {}) {\n state.loadingPopular = true;\n try {\n // Обрабатываем options от Feed компонента\n const queryOptions = {\n limit: options.limit || 10,\n sortParam: options.sortParam || 'popularity',\n sortOrder: options.sortOrder || 'desc',\n status: 'published',\n };\n \n // Добавляем дополнительные параметры если есть\n if (options.skip) queryOptions.skip = options.skip;\n if (options.search) queryOptions.search = options.search;\n \n // Если указан popular=true, используем сортировку по популярности\n if (options.popular) {\n queryOptions.sortParam = 'popularity';\n queryOptions.sortOrder = 'desc';\n }\n\n const genres = await genreStore.read(queryOptions);\n state.popularGenres = genres;\n return genres;\n } catch (error) {\n console.error('Error fetching popular genres:', error);\n return [];\n } finally {\n state.loadingPopular = false;\n }\n },\n\n async fetchGenreByUrl(url) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/genres/url/${url}`);\n const genre = await response.json();\n state.currentGenre = genre;\n\n // Fetch genre tracks\n await this.fetchGenreTracks(genre._id);\n\n return genre;\n } catch (error) {\n console.error('Error fetching genre by URL:', error);\n return null;\n }\n },\n\n async fetchGenreTracks(genreId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/genres/${genreId}/tracks`);\n const tracks = await response.json();\n state.genreTracks = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching genre tracks:', error);\n return [];\n }\n },\n\n async createGenre(genreData) {\n try {\n const createdGenre = await genreStore.create(genreData);\n // Update local state\n state.genres.unshift(createdGenre);\n return createdGenre;\n } catch (error) {\n console.error('Error creating genre:', error);\n throw error;\n }\n },\n\n async updateGenre(genreData) {\n try {\n const updatedGenre = await genreStore.update(genreData);\n\n // Update local state\n const index = state.genres.findIndex(g => g._id === updatedGenre._id);\n if (index !== -1) {\n state.genres[index] = updatedGenre;\n }\n\n const popularIndex = state.popularGenres.findIndex(g => g._id === updatedGenre._id);\n if (popularIndex !== -1) {\n state.popularGenres[popularIndex] = updatedGenre;\n }\n\n if (state.currentGenre && state.currentGenre._id === updatedGenre._id) {\n state.currentGenre = updatedGenre;\n }\n\n return updatedGenre;\n } catch (error) {\n console.error('Error updating genre:', error);\n throw error;\n }\n },\n\n async deleteGenre(genreId) {\n try {\n await genreStore.delete({ _id: genreId });\n\n // Update local state\n state.genres = state.genres.filter(g => g._id !== genreId);\n state.popularGenres = state.popularGenres.filter(g => g._id !== genreId);\n\n if (state.currentGenre && state.currentGenre._id === genreId) {\n state.currentGenre = null;\n }\n\n return true;\n } catch (error) {\n console.error('Error deleting genre:', error);\n throw error;\n }\n },\n};"],"names":[],"mappings":"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"}
@@ -26,15 +26,23 @@ const actions = {
26
26
  state.isLoading = false;
27
27
  }
28
28
  },
29
- async fetchFeaturedPlaylists(limit = 10) {
29
+ async fetchFeaturedPlaylists(options = {}) {
30
30
  state.loadingFeatured = true;
31
31
  try {
32
- const options = {
33
- status: "featured",
34
- isPublic: true,
35
- limit
32
+ const queryOptions = {
33
+ limit: options.limit || 10,
34
+ isPublic: true
36
35
  };
37
- const playlists = await playlistStore.read(options);
36
+ if (options.skip) queryOptions.skip = options.skip;
37
+ if (options.search) queryOptions.search = options.search;
38
+ if (options.sortParam) queryOptions.sortParam = options.sortParam;
39
+ if (options.sortOrder) queryOptions.sortOrder = options.sortOrder;
40
+ if (options.featured) {
41
+ queryOptions.status = "featured";
42
+ queryOptions.sortParam = queryOptions.sortParam || "followers";
43
+ queryOptions.sortOrder = queryOptions.sortOrder || "desc";
44
+ }
45
+ const playlists = await playlistStore.read(queryOptions);
38
46
  state.featuredPlaylists = playlists;
39
47
  return playlists;
40
48
  } catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"playlists.cjs","sources":["../../../../../../src/modules/music/store/playlists.js"],"sourcesContent":["// store/playlists.js\nimport Store from '@martyrs/src/modules/globals/views/classes/globals.store.js';\nimport { reactive } from 'vue';\n\n// Create store instance\nconst playlistStore = new Store(`${process.env.API_URL}/api/playlists`);\n\n// State\nexport const state = reactive({\n playlists: [],\n featuredPlaylists: [],\n userPlaylists: [],\n currentPlaylist: null,\n currentPlaylistTracks: [],\n isLoading: false,\n loadingFeatured: false,\n});\n\n// Actions\nexport const actions = {\n async fetchPlaylists(options = {}) {\n state.isLoading = true;\n try {\n const playlists = await playlistStore.read(options);\n state.playlists = playlists;\n return playlists;\n } catch (error) {\n console.error('Error fetching playlists:', error);\n return [];\n } finally {\n state.isLoading = false;\n }\n },\n\n async fetchFeaturedPlaylists(limit = 10) {\n state.loadingFeatured = true;\n try {\n // Assuming there's a status field for featured playlists\n const options = {\n status: 'featured',\n isPublic: true,\n limit,\n };\n\n const playlists = await playlistStore.read(options);\n state.featuredPlaylists = playlists;\n return playlists;\n } catch (error) {\n console.error('Error fetching featured playlists:', error);\n return [];\n } finally {\n state.loadingFeatured = false;\n }\n },\n\n async fetchPlaylistByUrl(url) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/url/${url}`);\n const playlist = await response.json();\n state.currentPlaylist = playlist;\n\n // Extract tracks from the playlist\n state.currentPlaylistTracks = playlist.tracks?.map(item => item.track) || [];\n\n return playlist;\n } catch (error) {\n console.error('Error fetching playlist by URL:', error);\n return null;\n }\n },\n\n async createPlaylist(playlistData) {\n try {\n const createdPlaylist = await playlistStore.create(playlistData);\n // Update local state\n state.playlists.unshift(createdPlaylist);\n state.userPlaylists.unshift(createdPlaylist);\n return createdPlaylist;\n } catch (error) {\n console.error('Error creating playlist:', error);\n throw error;\n }\n },\n\n async updatePlaylist(playlistData) {\n try {\n const updatedPlaylist = await playlistStore.update(playlistData);\n\n // Update local state\n const index = state.playlists.findIndex(p => p._id === updatedPlaylist._id);\n if (index !== -1) {\n state.playlists[index] = updatedPlaylist;\n }\n\n const userIndex = state.userPlaylists.findIndex(p => p._id === updatedPlaylist._id);\n if (userIndex !== -1) {\n state.userPlaylists[userIndex] = updatedPlaylist;\n }\n\n if (state.currentPlaylist && state.currentPlaylist._id === updatedPlaylist._id) {\n state.currentPlaylist = updatedPlaylist;\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error updating playlist:', error);\n throw error;\n }\n },\n\n async deletePlaylist(playlistId) {\n try {\n await playlistStore.delete({ _id: playlistId });\n\n // Update local state\n state.playlists = state.playlists.filter(p => p._id !== playlistId);\n state.userPlaylists = state.userPlaylists.filter(p => p._id !== playlistId);\n\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = null;\n state.currentPlaylistTracks = [];\n }\n\n return true;\n } catch (error) {\n console.error('Error deleting playlist:', error);\n throw error;\n }\n },\n\n async fetchUserPlaylists(userId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/user/${userId || ''}`);\n const playlists = await response.json();\n state.userPlaylists = playlists;\n return playlists;\n } catch (error) {\n console.error('Error fetching user playlists:', error);\n return [];\n }\n },\n\n async addTrackToPlaylist(playlistId, trackId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/tracks/${trackId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n const updatedPlaylist = await response.json();\n\n // Update local state\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = updatedPlaylist;\n // Update tracks list\n const track = updatedPlaylist.tracks.find(item => item.track._id === trackId)?.track;\n if (track && !state.currentPlaylistTracks.some(t => t._id === trackId)) {\n state.currentPlaylistTracks.push(track);\n }\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error adding track to playlist:', error);\n throw error;\n }\n },\n\n async removeTrackFromPlaylist(playlistId, trackId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/tracks/${trackId}`, {\n method: 'DELETE',\n });\n\n const updatedPlaylist = await response.json();\n\n // Update local state\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = updatedPlaylist;\n state.currentPlaylistTracks = state.currentPlaylistTracks.filter(track => track._id !== trackId);\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error removing track from playlist:', error);\n throw error;\n }\n },\n\n async addCollaborator(playlistId, userId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/collaborators/${userId}`, {\n method: 'POST',\n });\n\n const updatedPlaylist = await response.json();\n\n // Update local state\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = updatedPlaylist;\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error adding collaborator to playlist:', error);\n throw error;\n }\n },\n};\n"],"names":["Store","reactive"],"mappings":"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"}
1
+ {"version":3,"file":"playlists.cjs","sources":["../../../../../../src/modules/music/store/playlists.js"],"sourcesContent":["// store/playlists.js\nimport Store from '@martyrs/src/modules/globals/views/classes/globals.store.js';\nimport { reactive } from 'vue';\n\n// Create store instance\nconst playlistStore = new Store(`${process.env.API_URL}/api/playlists`);\n\n// State\nexport const state = reactive({\n playlists: [],\n featuredPlaylists: [],\n userPlaylists: [],\n currentPlaylist: null,\n currentPlaylistTracks: [],\n isLoading: false,\n loadingFeatured: false,\n});\n\n// Actions\nexport const actions = {\n async fetchPlaylists(options = {}) {\n state.isLoading = true;\n try {\n const playlists = await playlistStore.read(options);\n state.playlists = playlists;\n return playlists;\n } catch (error) {\n console.error('Error fetching playlists:', error);\n return [];\n } finally {\n state.isLoading = false;\n }\n },\n\n async fetchFeaturedPlaylists(options = {}) {\n state.loadingFeatured = true;\n try {\n // Обрабатываем options от Feed компонента\n const queryOptions = {\n limit: options.limit || 10,\n isPublic: true,\n };\n \n // Добавляем дополнительные параметры если есть\n if (options.skip) queryOptions.skip = options.skip;\n if (options.search) queryOptions.search = options.search;\n if (options.sortParam) queryOptions.sortParam = options.sortParam;\n if (options.sortOrder) queryOptions.sortOrder = options.sortOrder;\n \n // Если указан featured=true, добавляем соответствующий фильтр\n if (options.featured) {\n queryOptions.status = 'featured';\n // Или можно использовать sortParam для featured плейлистов\n queryOptions.sortParam = queryOptions.sortParam || 'followers';\n queryOptions.sortOrder = queryOptions.sortOrder || 'desc';\n }\n\n const playlists = await playlistStore.read(queryOptions);\n state.featuredPlaylists = playlists;\n return playlists;\n } catch (error) {\n console.error('Error fetching featured playlists:', error);\n return [];\n } finally {\n state.loadingFeatured = false;\n }\n },\n\n async fetchPlaylistByUrl(url) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/url/${url}`);\n const playlist = await response.json();\n state.currentPlaylist = playlist;\n\n // Extract tracks from the playlist\n state.currentPlaylistTracks = playlist.tracks?.map(item => item.track) || [];\n\n return playlist;\n } catch (error) {\n console.error('Error fetching playlist by URL:', error);\n return null;\n }\n },\n\n async createPlaylist(playlistData) {\n try {\n const createdPlaylist = await playlistStore.create(playlistData);\n // Update local state\n state.playlists.unshift(createdPlaylist);\n state.userPlaylists.unshift(createdPlaylist);\n return createdPlaylist;\n } catch (error) {\n console.error('Error creating playlist:', error);\n throw error;\n }\n },\n\n async updatePlaylist(playlistData) {\n try {\n const updatedPlaylist = await playlistStore.update(playlistData);\n\n // Update local state\n const index = state.playlists.findIndex(p => p._id === updatedPlaylist._id);\n if (index !== -1) {\n state.playlists[index] = updatedPlaylist;\n }\n\n const userIndex = state.userPlaylists.findIndex(p => p._id === updatedPlaylist._id);\n if (userIndex !== -1) {\n state.userPlaylists[userIndex] = updatedPlaylist;\n }\n\n if (state.currentPlaylist && state.currentPlaylist._id === updatedPlaylist._id) {\n state.currentPlaylist = updatedPlaylist;\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error updating playlist:', error);\n throw error;\n }\n },\n\n async deletePlaylist(playlistId) {\n try {\n await playlistStore.delete({ _id: playlistId });\n\n // Update local state\n state.playlists = state.playlists.filter(p => p._id !== playlistId);\n state.userPlaylists = state.userPlaylists.filter(p => p._id !== playlistId);\n\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = null;\n state.currentPlaylistTracks = [];\n }\n\n return true;\n } catch (error) {\n console.error('Error deleting playlist:', error);\n throw error;\n }\n },\n\n async fetchUserPlaylists(userId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/user/${userId || ''}`);\n const playlists = await response.json();\n state.userPlaylists = playlists;\n return playlists;\n } catch (error) {\n console.error('Error fetching user playlists:', error);\n return [];\n }\n },\n\n async addTrackToPlaylist(playlistId, trackId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/tracks/${trackId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n const updatedPlaylist = await response.json();\n\n // Update local state\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = updatedPlaylist;\n // Update tracks list\n const track = updatedPlaylist.tracks.find(item => item.track._id === trackId)?.track;\n if (track && !state.currentPlaylistTracks.some(t => t._id === trackId)) {\n state.currentPlaylistTracks.push(track);\n }\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error adding track to playlist:', error);\n throw error;\n }\n },\n\n async removeTrackFromPlaylist(playlistId, trackId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/tracks/${trackId}`, {\n method: 'DELETE',\n });\n\n const updatedPlaylist = await response.json();\n\n // Update local state\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = updatedPlaylist;\n state.currentPlaylistTracks = state.currentPlaylistTracks.filter(track => track._id !== trackId);\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error removing track from playlist:', error);\n throw error;\n }\n },\n\n async addCollaborator(playlistId, userId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/collaborators/${userId}`, {\n method: 'POST',\n });\n\n const updatedPlaylist = await response.json();\n\n // Update local state\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = updatedPlaylist;\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error adding collaborator to playlist:', error);\n throw error;\n }\n },\n};\n"],"names":["Store","reactive"],"mappings":"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"}
@@ -24,15 +24,23 @@ const actions = {
24
24
  state.isLoading = false;
25
25
  }
26
26
  },
27
- async fetchFeaturedPlaylists(limit = 10) {
27
+ async fetchFeaturedPlaylists(options = {}) {
28
28
  state.loadingFeatured = true;
29
29
  try {
30
- const options = {
31
- status: "featured",
32
- isPublic: true,
33
- limit
30
+ const queryOptions = {
31
+ limit: options.limit || 10,
32
+ isPublic: true
34
33
  };
35
- const playlists = await playlistStore.read(options);
34
+ if (options.skip) queryOptions.skip = options.skip;
35
+ if (options.search) queryOptions.search = options.search;
36
+ if (options.sortParam) queryOptions.sortParam = options.sortParam;
37
+ if (options.sortOrder) queryOptions.sortOrder = options.sortOrder;
38
+ if (options.featured) {
39
+ queryOptions.status = "featured";
40
+ queryOptions.sortParam = queryOptions.sortParam || "followers";
41
+ queryOptions.sortOrder = queryOptions.sortOrder || "desc";
42
+ }
43
+ const playlists = await playlistStore.read(queryOptions);
36
44
  state.featuredPlaylists = playlists;
37
45
  return playlists;
38
46
  } catch (error) {
@@ -1 +1 @@
1
- {"version":3,"file":"playlists.js","sources":["../../../../../../src/modules/music/store/playlists.js"],"sourcesContent":["// store/playlists.js\nimport Store from '@martyrs/src/modules/globals/views/classes/globals.store.js';\nimport { reactive } from 'vue';\n\n// Create store instance\nconst playlistStore = new Store(`${process.env.API_URL}/api/playlists`);\n\n// State\nexport const state = reactive({\n playlists: [],\n featuredPlaylists: [],\n userPlaylists: [],\n currentPlaylist: null,\n currentPlaylistTracks: [],\n isLoading: false,\n loadingFeatured: false,\n});\n\n// Actions\nexport const actions = {\n async fetchPlaylists(options = {}) {\n state.isLoading = true;\n try {\n const playlists = await playlistStore.read(options);\n state.playlists = playlists;\n return playlists;\n } catch (error) {\n console.error('Error fetching playlists:', error);\n return [];\n } finally {\n state.isLoading = false;\n }\n },\n\n async fetchFeaturedPlaylists(limit = 10) {\n state.loadingFeatured = true;\n try {\n // Assuming there's a status field for featured playlists\n const options = {\n status: 'featured',\n isPublic: true,\n limit,\n };\n\n const playlists = await playlistStore.read(options);\n state.featuredPlaylists = playlists;\n return playlists;\n } catch (error) {\n console.error('Error fetching featured playlists:', error);\n return [];\n } finally {\n state.loadingFeatured = false;\n }\n },\n\n async fetchPlaylistByUrl(url) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/url/${url}`);\n const playlist = await response.json();\n state.currentPlaylist = playlist;\n\n // Extract tracks from the playlist\n state.currentPlaylistTracks = playlist.tracks?.map(item => item.track) || [];\n\n return playlist;\n } catch (error) {\n console.error('Error fetching playlist by URL:', error);\n return null;\n }\n },\n\n async createPlaylist(playlistData) {\n try {\n const createdPlaylist = await playlistStore.create(playlistData);\n // Update local state\n state.playlists.unshift(createdPlaylist);\n state.userPlaylists.unshift(createdPlaylist);\n return createdPlaylist;\n } catch (error) {\n console.error('Error creating playlist:', error);\n throw error;\n }\n },\n\n async updatePlaylist(playlistData) {\n try {\n const updatedPlaylist = await playlistStore.update(playlistData);\n\n // Update local state\n const index = state.playlists.findIndex(p => p._id === updatedPlaylist._id);\n if (index !== -1) {\n state.playlists[index] = updatedPlaylist;\n }\n\n const userIndex = state.userPlaylists.findIndex(p => p._id === updatedPlaylist._id);\n if (userIndex !== -1) {\n state.userPlaylists[userIndex] = updatedPlaylist;\n }\n\n if (state.currentPlaylist && state.currentPlaylist._id === updatedPlaylist._id) {\n state.currentPlaylist = updatedPlaylist;\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error updating playlist:', error);\n throw error;\n }\n },\n\n async deletePlaylist(playlistId) {\n try {\n await playlistStore.delete({ _id: playlistId });\n\n // Update local state\n state.playlists = state.playlists.filter(p => p._id !== playlistId);\n state.userPlaylists = state.userPlaylists.filter(p => p._id !== playlistId);\n\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = null;\n state.currentPlaylistTracks = [];\n }\n\n return true;\n } catch (error) {\n console.error('Error deleting playlist:', error);\n throw error;\n }\n },\n\n async fetchUserPlaylists(userId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/user/${userId || ''}`);\n const playlists = await response.json();\n state.userPlaylists = playlists;\n return playlists;\n } catch (error) {\n console.error('Error fetching user playlists:', error);\n return [];\n }\n },\n\n async addTrackToPlaylist(playlistId, trackId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/tracks/${trackId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n const updatedPlaylist = await response.json();\n\n // Update local state\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = updatedPlaylist;\n // Update tracks list\n const track = updatedPlaylist.tracks.find(item => item.track._id === trackId)?.track;\n if (track && !state.currentPlaylistTracks.some(t => t._id === trackId)) {\n state.currentPlaylistTracks.push(track);\n }\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error adding track to playlist:', error);\n throw error;\n }\n },\n\n async removeTrackFromPlaylist(playlistId, trackId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/tracks/${trackId}`, {\n method: 'DELETE',\n });\n\n const updatedPlaylist = await response.json();\n\n // Update local state\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = updatedPlaylist;\n state.currentPlaylistTracks = state.currentPlaylistTracks.filter(track => track._id !== trackId);\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error removing track from playlist:', error);\n throw error;\n }\n },\n\n async addCollaborator(playlistId, userId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/collaborators/${userId}`, {\n method: 'POST',\n });\n\n const updatedPlaylist = await response.json();\n\n // Update local state\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = updatedPlaylist;\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error adding collaborator to playlist:', error);\n throw error;\n }\n },\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"playlists.js","sources":["../../../../../../src/modules/music/store/playlists.js"],"sourcesContent":["// store/playlists.js\nimport Store from '@martyrs/src/modules/globals/views/classes/globals.store.js';\nimport { reactive } from 'vue';\n\n// Create store instance\nconst playlistStore = new Store(`${process.env.API_URL}/api/playlists`);\n\n// State\nexport const state = reactive({\n playlists: [],\n featuredPlaylists: [],\n userPlaylists: [],\n currentPlaylist: null,\n currentPlaylistTracks: [],\n isLoading: false,\n loadingFeatured: false,\n});\n\n// Actions\nexport const actions = {\n async fetchPlaylists(options = {}) {\n state.isLoading = true;\n try {\n const playlists = await playlistStore.read(options);\n state.playlists = playlists;\n return playlists;\n } catch (error) {\n console.error('Error fetching playlists:', error);\n return [];\n } finally {\n state.isLoading = false;\n }\n },\n\n async fetchFeaturedPlaylists(options = {}) {\n state.loadingFeatured = true;\n try {\n // Обрабатываем options от Feed компонента\n const queryOptions = {\n limit: options.limit || 10,\n isPublic: true,\n };\n \n // Добавляем дополнительные параметры если есть\n if (options.skip) queryOptions.skip = options.skip;\n if (options.search) queryOptions.search = options.search;\n if (options.sortParam) queryOptions.sortParam = options.sortParam;\n if (options.sortOrder) queryOptions.sortOrder = options.sortOrder;\n \n // Если указан featured=true, добавляем соответствующий фильтр\n if (options.featured) {\n queryOptions.status = 'featured';\n // Или можно использовать sortParam для featured плейлистов\n queryOptions.sortParam = queryOptions.sortParam || 'followers';\n queryOptions.sortOrder = queryOptions.sortOrder || 'desc';\n }\n\n const playlists = await playlistStore.read(queryOptions);\n state.featuredPlaylists = playlists;\n return playlists;\n } catch (error) {\n console.error('Error fetching featured playlists:', error);\n return [];\n } finally {\n state.loadingFeatured = false;\n }\n },\n\n async fetchPlaylistByUrl(url) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/url/${url}`);\n const playlist = await response.json();\n state.currentPlaylist = playlist;\n\n // Extract tracks from the playlist\n state.currentPlaylistTracks = playlist.tracks?.map(item => item.track) || [];\n\n return playlist;\n } catch (error) {\n console.error('Error fetching playlist by URL:', error);\n return null;\n }\n },\n\n async createPlaylist(playlistData) {\n try {\n const createdPlaylist = await playlistStore.create(playlistData);\n // Update local state\n state.playlists.unshift(createdPlaylist);\n state.userPlaylists.unshift(createdPlaylist);\n return createdPlaylist;\n } catch (error) {\n console.error('Error creating playlist:', error);\n throw error;\n }\n },\n\n async updatePlaylist(playlistData) {\n try {\n const updatedPlaylist = await playlistStore.update(playlistData);\n\n // Update local state\n const index = state.playlists.findIndex(p => p._id === updatedPlaylist._id);\n if (index !== -1) {\n state.playlists[index] = updatedPlaylist;\n }\n\n const userIndex = state.userPlaylists.findIndex(p => p._id === updatedPlaylist._id);\n if (userIndex !== -1) {\n state.userPlaylists[userIndex] = updatedPlaylist;\n }\n\n if (state.currentPlaylist && state.currentPlaylist._id === updatedPlaylist._id) {\n state.currentPlaylist = updatedPlaylist;\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error updating playlist:', error);\n throw error;\n }\n },\n\n async deletePlaylist(playlistId) {\n try {\n await playlistStore.delete({ _id: playlistId });\n\n // Update local state\n state.playlists = state.playlists.filter(p => p._id !== playlistId);\n state.userPlaylists = state.userPlaylists.filter(p => p._id !== playlistId);\n\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = null;\n state.currentPlaylistTracks = [];\n }\n\n return true;\n } catch (error) {\n console.error('Error deleting playlist:', error);\n throw error;\n }\n },\n\n async fetchUserPlaylists(userId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/user/${userId || ''}`);\n const playlists = await response.json();\n state.userPlaylists = playlists;\n return playlists;\n } catch (error) {\n console.error('Error fetching user playlists:', error);\n return [];\n }\n },\n\n async addTrackToPlaylist(playlistId, trackId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/tracks/${trackId}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n const updatedPlaylist = await response.json();\n\n // Update local state\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = updatedPlaylist;\n // Update tracks list\n const track = updatedPlaylist.tracks.find(item => item.track._id === trackId)?.track;\n if (track && !state.currentPlaylistTracks.some(t => t._id === trackId)) {\n state.currentPlaylistTracks.push(track);\n }\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error adding track to playlist:', error);\n throw error;\n }\n },\n\n async removeTrackFromPlaylist(playlistId, trackId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/tracks/${trackId}`, {\n method: 'DELETE',\n });\n\n const updatedPlaylist = await response.json();\n\n // Update local state\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = updatedPlaylist;\n state.currentPlaylistTracks = state.currentPlaylistTracks.filter(track => track._id !== trackId);\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error removing track from playlist:', error);\n throw error;\n }\n },\n\n async addCollaborator(playlistId, userId) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/playlists/${playlistId}/collaborators/${userId}`, {\n method: 'POST',\n });\n\n const updatedPlaylist = await response.json();\n\n // Update local state\n if (state.currentPlaylist && state.currentPlaylist._id === playlistId) {\n state.currentPlaylist = updatedPlaylist;\n }\n\n return updatedPlaylist;\n } catch (error) {\n console.error('Error adding collaborator to playlist:', error);\n throw error;\n }\n },\n};\n"],"names":[],"mappings":"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"}
@@ -29,10 +29,14 @@ const actions = {
29
29
  state.isLoading = false;
30
30
  }
31
31
  },
32
- async fetchPopularTracks(limit = 10) {
32
+ async fetchPopularTracks(options = {}) {
33
33
  state.loadingPopular = true;
34
34
  try {
35
- const response = await fetch(`${process.env.API_URL}/api/tracks/popular?limit=${limit}`);
35
+ const queryParams = new URLSearchParams();
36
+ queryParams.append("limit", options.limit || 10);
37
+ if (options.skip) queryParams.append("skip", options.skip);
38
+ if (options.search) queryParams.append("search", options.search);
39
+ const response = await fetch(`${process.env.API_URL}/api/tracks/popular?${queryParams.toString()}`);
36
40
  const tracks = await response.json();
37
41
  state.popular = tracks;
38
42
  return tracks;
@@ -1 +1 @@
1
- {"version":3,"file":"tracks.cjs","sources":["../../../../../../src/modules/music/store/tracks.js"],"sourcesContent":["// store/tracks.js\nimport Store from '@martyrs/src/modules/globals/views/classes/globals.store.js';\nimport { reactive } from 'vue';\n\n// Create store instance\nconst trackStore = new Store(`${process.env.API_URL}/api/tracks`);\n\n// State\nexport const state = reactive({\n tracks: [],\n popular: [],\n recent: [],\n featured: [],\n userTracks: [],\n currentTrack: null,\n isLoading: false,\n loadingPopular: false,\n loadingRecent: false,\n loadingFeatured: false,\n});\n\n// Actions\nexport const actions = {\n async fetchTracks(options = {}) {\n state.isLoading = true;\n try {\n const tracks = await trackStore.read(options);\n state.tracks = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching tracks:', error);\n return [];\n } finally {\n state.isLoading = false;\n }\n },\n\n async fetchPopularTracks(limit = 10) {\n state.loadingPopular = true;\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/popular?limit=${limit}`);\n const tracks = await response.json();\n state.popular = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching popular tracks:', error);\n return [];\n } finally {\n state.loadingPopular = false;\n }\n },\n\n async fetchRecentTracks(limit = 10) {\n state.loadingRecent = true;\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/recent?limit=${limit}`);\n const tracks = await response.json();\n state.recent = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching recent tracks:', error);\n return [];\n } finally {\n state.loadingRecent = false;\n }\n },\n\n async fetchTracksByGenre(genreId, limit = 20) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/genre/${genreId}?limit=${limit}`);\n return await response.json();\n } catch (error) {\n console.error('Error fetching tracks by genre:', error);\n return [];\n }\n },\n\n async fetchTrackByUrl(url) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/url/${url}`);\n const track = await response.json();\n state.currentTrack = track;\n return track;\n } catch (error) {\n console.error('Error fetching track by URL:', error);\n return null;\n }\n },\n\n // Improved createTrack action with better error handling\n async createTrack(trackData) {\n console.log('Creating track with data:', trackData);\n\n // Validate required fields to prevent silent failures\n const requiredFields = ['title', 'artist', 'genre', 'fileUrl'];\n const missingFields = requiredFields.filter(field => !trackData[field]);\n\n if (missingFields.length > 0) {\n const error = new Error(`Missing required fields: ${missingFields.join(', ')}`);\n console.error(error);\n throw error;\n }\n\n // Ensure proper structure for owner and creator fields\n if (!trackData.owner || !trackData.owner.target || !trackData.owner.type) {\n console.error('Track data missing owner information');\n throw new Error('Owner information is required');\n }\n\n if (!trackData.creator || !trackData.creator.target || !trackData.creator.type) {\n console.error('Track data missing creator information');\n throw new Error('Creator information is required');\n }\n\n try {\n console.log('Calling API to create track...');\n\n // Check what API URL we're using\n console.log('API URL:', trackStore.apiUrl);\n\n // Use a timeout to detect hanging requests\n const timeoutPromise = new Promise((_, reject) => {\n setTimeout(() => reject(new Error('Request timed out after 15 seconds')), 15000);\n });\n\n // Race between the actual request and the timeout\n const createdTrack = await Promise.race([trackStore.create(trackData), timeoutPromise]);\n\n console.log('Track created successfully, server response:', createdTrack);\n\n // Check if the response is what we expect\n if (!createdTrack || !createdTrack._id) {\n console.error('API returned success but without expected track data:', createdTrack);\n throw new Error('Invalid response from server');\n }\n\n // Update local state\n state.tracks.unshift(createdTrack);\n state.userTracks.unshift(createdTrack);\n\n console.log('Local state updated with new track');\n return createdTrack;\n } catch (error) {\n console.error('Error creating track:', error);\n\n // Enhanced error logging\n if (error.response) {\n console.error('Error response:', error.response);\n }\n\n // Format the error for better user feedback\n const formattedError = new Error(error.message || 'Failed to create track. Please try again.');\n formattedError.originalError = error;\n\n // Set a global error\n setError({\n message: formattedError.message,\n errorCode: error.errorCode || 'TRACK_CREATE_FAILED',\n });\n\n throw formattedError;\n }\n },\n\n async updateTrack(trackData) {\n try {\n const updatedTrack = await trackStore.update(trackData);\n\n // Update local state\n const index = state.tracks.findIndex(t => t._id === updatedTrack._id);\n if (index !== -1) {\n state.tracks[index] = updatedTrack;\n }\n\n const userIndex = state.userTracks.findIndex(t => t._id === updatedTrack._id);\n if (userIndex !== -1) {\n state.userTracks[userIndex] = updatedTrack;\n }\n\n if (state.currentTrack && state.currentTrack._id === updatedTrack._id) {\n state.currentTrack = updatedTrack;\n }\n\n return updatedTrack;\n } catch (error) {\n console.error('Error updating track:', error);\n throw error;\n }\n },\n\n async deleteTrack(trackId) {\n try {\n await trackStore.delete({ _id: trackId });\n\n // Update local state\n state.tracks = state.tracks.filter(t => t._id !== trackId);\n state.userTracks = state.userTracks.filter(t => t._id !== trackId);\n\n if (state.currentTrack && state.currentTrack._id === trackId) {\n state.currentTrack = null;\n }\n\n return true;\n } catch (error) {\n console.error('Error deleting track:', error);\n throw error;\n }\n },\n\n async fetchUserTracks(userId) {\n try {\n const options = {\n creator: userId,\n limit: 100,\n };\n console.log('fetchUserTracks', userId);\n const tracks = await trackStore.read(options);\n state.userTracks = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching user tracks:', error);\n return [];\n }\n },\n};\n"],"names":["Store","reactive"],"mappings":"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"}
1
+ {"version":3,"file":"tracks.cjs","sources":["../../../../../../src/modules/music/store/tracks.js"],"sourcesContent":["// store/tracks.js\nimport Store from '@martyrs/src/modules/globals/views/classes/globals.store.js';\nimport { reactive } from 'vue';\n\n// Create store instance\nconst trackStore = new Store(`${process.env.API_URL}/api/tracks`);\n\n// State\nexport const state = reactive({\n tracks: [],\n popular: [],\n recent: [],\n featured: [],\n userTracks: [],\n currentTrack: null,\n isLoading: false,\n loadingPopular: false,\n loadingRecent: false,\n loadingFeatured: false,\n});\n\n// Actions\nexport const actions = {\n async fetchTracks(options = {}) {\n state.isLoading = true;\n try {\n const tracks = await trackStore.read(options);\n state.tracks = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching tracks:', error);\n return [];\n } finally {\n state.isLoading = false;\n }\n },\n\n async fetchPopularTracks(options = {}) {\n state.loadingPopular = true;\n try {\n // Обрабатываем options от Feed компонента\n const queryParams = new URLSearchParams();\n queryParams.append('limit', options.limit || 10);\n \n if (options.skip) queryParams.append('skip', options.skip);\n if (options.search) queryParams.append('search', options.search);\n \n const response = await fetch(`${process.env.API_URL}/api/tracks/popular?${queryParams.toString()}`);\n const tracks = await response.json();\n state.popular = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching popular tracks:', error);\n return [];\n } finally {\n state.loadingPopular = false;\n }\n },\n\n async fetchRecentTracks(limit = 10) {\n state.loadingRecent = true;\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/recent?limit=${limit}`);\n const tracks = await response.json();\n state.recent = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching recent tracks:', error);\n return [];\n } finally {\n state.loadingRecent = false;\n }\n },\n\n async fetchTracksByGenre(genreId, limit = 20) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/genre/${genreId}?limit=${limit}`);\n return await response.json();\n } catch (error) {\n console.error('Error fetching tracks by genre:', error);\n return [];\n }\n },\n\n async fetchTrackByUrl(url) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/url/${url}`);\n const track = await response.json();\n state.currentTrack = track;\n return track;\n } catch (error) {\n console.error('Error fetching track by URL:', error);\n return null;\n }\n },\n\n // Improved createTrack action with better error handling\n async createTrack(trackData) {\n console.log('Creating track with data:', trackData);\n\n // Validate required fields to prevent silent failures\n const requiredFields = ['title', 'artist', 'genre', 'fileUrl'];\n const missingFields = requiredFields.filter(field => !trackData[field]);\n\n if (missingFields.length > 0) {\n const error = new Error(`Missing required fields: ${missingFields.join(', ')}`);\n console.error(error);\n throw error;\n }\n\n // Ensure proper structure for owner and creator fields\n if (!trackData.owner || !trackData.owner.target || !trackData.owner.type) {\n console.error('Track data missing owner information');\n throw new Error('Owner information is required');\n }\n\n if (!trackData.creator || !trackData.creator.target || !trackData.creator.type) {\n console.error('Track data missing creator information');\n throw new Error('Creator information is required');\n }\n\n try {\n console.log('Calling API to create track...');\n\n // Check what API URL we're using\n console.log('API URL:', trackStore.apiUrl);\n\n // Use a timeout to detect hanging requests\n const timeoutPromise = new Promise((_, reject) => {\n setTimeout(() => reject(new Error('Request timed out after 15 seconds')), 15000);\n });\n\n // Race between the actual request and the timeout\n const createdTrack = await Promise.race([trackStore.create(trackData), timeoutPromise]);\n\n console.log('Track created successfully, server response:', createdTrack);\n\n // Check if the response is what we expect\n if (!createdTrack || !createdTrack._id) {\n console.error('API returned success but without expected track data:', createdTrack);\n throw new Error('Invalid response from server');\n }\n\n // Update local state\n state.tracks.unshift(createdTrack);\n state.userTracks.unshift(createdTrack);\n\n console.log('Local state updated with new track');\n return createdTrack;\n } catch (error) {\n console.error('Error creating track:', error);\n\n // Enhanced error logging\n if (error.response) {\n console.error('Error response:', error.response);\n }\n\n // Format the error for better user feedback\n const formattedError = new Error(error.message || 'Failed to create track. Please try again.');\n formattedError.originalError = error;\n\n // Set a global error\n setError({\n message: formattedError.message,\n errorCode: error.errorCode || 'TRACK_CREATE_FAILED',\n });\n\n throw formattedError;\n }\n },\n\n async updateTrack(trackData) {\n try {\n const updatedTrack = await trackStore.update(trackData);\n\n // Update local state\n const index = state.tracks.findIndex(t => t._id === updatedTrack._id);\n if (index !== -1) {\n state.tracks[index] = updatedTrack;\n }\n\n const userIndex = state.userTracks.findIndex(t => t._id === updatedTrack._id);\n if (userIndex !== -1) {\n state.userTracks[userIndex] = updatedTrack;\n }\n\n if (state.currentTrack && state.currentTrack._id === updatedTrack._id) {\n state.currentTrack = updatedTrack;\n }\n\n return updatedTrack;\n } catch (error) {\n console.error('Error updating track:', error);\n throw error;\n }\n },\n\n async deleteTrack(trackId) {\n try {\n await trackStore.delete({ _id: trackId });\n\n // Update local state\n state.tracks = state.tracks.filter(t => t._id !== trackId);\n state.userTracks = state.userTracks.filter(t => t._id !== trackId);\n\n if (state.currentTrack && state.currentTrack._id === trackId) {\n state.currentTrack = null;\n }\n\n return true;\n } catch (error) {\n console.error('Error deleting track:', error);\n throw error;\n }\n },\n\n async fetchUserTracks(userId) {\n try {\n const options = {\n creator: userId,\n limit: 100,\n };\n console.log('fetchUserTracks', userId);\n const tracks = await trackStore.read(options);\n state.userTracks = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching user tracks:', error);\n return [];\n }\n },\n};\n"],"names":["Store","reactive"],"mappings":"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"}
@@ -27,10 +27,14 @@ const actions = {
27
27
  state.isLoading = false;
28
28
  }
29
29
  },
30
- async fetchPopularTracks(limit = 10) {
30
+ async fetchPopularTracks(options = {}) {
31
31
  state.loadingPopular = true;
32
32
  try {
33
- const response = await fetch(`${process.env.API_URL}/api/tracks/popular?limit=${limit}`);
33
+ const queryParams = new URLSearchParams();
34
+ queryParams.append("limit", options.limit || 10);
35
+ if (options.skip) queryParams.append("skip", options.skip);
36
+ if (options.search) queryParams.append("search", options.search);
37
+ const response = await fetch(`${process.env.API_URL}/api/tracks/popular?${queryParams.toString()}`);
34
38
  const tracks = await response.json();
35
39
  state.popular = tracks;
36
40
  return tracks;
@@ -1 +1 @@
1
- {"version":3,"file":"tracks.js","sources":["../../../../../../src/modules/music/store/tracks.js"],"sourcesContent":["// store/tracks.js\nimport Store from '@martyrs/src/modules/globals/views/classes/globals.store.js';\nimport { reactive } from 'vue';\n\n// Create store instance\nconst trackStore = new Store(`${process.env.API_URL}/api/tracks`);\n\n// State\nexport const state = reactive({\n tracks: [],\n popular: [],\n recent: [],\n featured: [],\n userTracks: [],\n currentTrack: null,\n isLoading: false,\n loadingPopular: false,\n loadingRecent: false,\n loadingFeatured: false,\n});\n\n// Actions\nexport const actions = {\n async fetchTracks(options = {}) {\n state.isLoading = true;\n try {\n const tracks = await trackStore.read(options);\n state.tracks = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching tracks:', error);\n return [];\n } finally {\n state.isLoading = false;\n }\n },\n\n async fetchPopularTracks(limit = 10) {\n state.loadingPopular = true;\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/popular?limit=${limit}`);\n const tracks = await response.json();\n state.popular = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching popular tracks:', error);\n return [];\n } finally {\n state.loadingPopular = false;\n }\n },\n\n async fetchRecentTracks(limit = 10) {\n state.loadingRecent = true;\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/recent?limit=${limit}`);\n const tracks = await response.json();\n state.recent = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching recent tracks:', error);\n return [];\n } finally {\n state.loadingRecent = false;\n }\n },\n\n async fetchTracksByGenre(genreId, limit = 20) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/genre/${genreId}?limit=${limit}`);\n return await response.json();\n } catch (error) {\n console.error('Error fetching tracks by genre:', error);\n return [];\n }\n },\n\n async fetchTrackByUrl(url) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/url/${url}`);\n const track = await response.json();\n state.currentTrack = track;\n return track;\n } catch (error) {\n console.error('Error fetching track by URL:', error);\n return null;\n }\n },\n\n // Improved createTrack action with better error handling\n async createTrack(trackData) {\n console.log('Creating track with data:', trackData);\n\n // Validate required fields to prevent silent failures\n const requiredFields = ['title', 'artist', 'genre', 'fileUrl'];\n const missingFields = requiredFields.filter(field => !trackData[field]);\n\n if (missingFields.length > 0) {\n const error = new Error(`Missing required fields: ${missingFields.join(', ')}`);\n console.error(error);\n throw error;\n }\n\n // Ensure proper structure for owner and creator fields\n if (!trackData.owner || !trackData.owner.target || !trackData.owner.type) {\n console.error('Track data missing owner information');\n throw new Error('Owner information is required');\n }\n\n if (!trackData.creator || !trackData.creator.target || !trackData.creator.type) {\n console.error('Track data missing creator information');\n throw new Error('Creator information is required');\n }\n\n try {\n console.log('Calling API to create track...');\n\n // Check what API URL we're using\n console.log('API URL:', trackStore.apiUrl);\n\n // Use a timeout to detect hanging requests\n const timeoutPromise = new Promise((_, reject) => {\n setTimeout(() => reject(new Error('Request timed out after 15 seconds')), 15000);\n });\n\n // Race between the actual request and the timeout\n const createdTrack = await Promise.race([trackStore.create(trackData), timeoutPromise]);\n\n console.log('Track created successfully, server response:', createdTrack);\n\n // Check if the response is what we expect\n if (!createdTrack || !createdTrack._id) {\n console.error('API returned success but without expected track data:', createdTrack);\n throw new Error('Invalid response from server');\n }\n\n // Update local state\n state.tracks.unshift(createdTrack);\n state.userTracks.unshift(createdTrack);\n\n console.log('Local state updated with new track');\n return createdTrack;\n } catch (error) {\n console.error('Error creating track:', error);\n\n // Enhanced error logging\n if (error.response) {\n console.error('Error response:', error.response);\n }\n\n // Format the error for better user feedback\n const formattedError = new Error(error.message || 'Failed to create track. Please try again.');\n formattedError.originalError = error;\n\n // Set a global error\n setError({\n message: formattedError.message,\n errorCode: error.errorCode || 'TRACK_CREATE_FAILED',\n });\n\n throw formattedError;\n }\n },\n\n async updateTrack(trackData) {\n try {\n const updatedTrack = await trackStore.update(trackData);\n\n // Update local state\n const index = state.tracks.findIndex(t => t._id === updatedTrack._id);\n if (index !== -1) {\n state.tracks[index] = updatedTrack;\n }\n\n const userIndex = state.userTracks.findIndex(t => t._id === updatedTrack._id);\n if (userIndex !== -1) {\n state.userTracks[userIndex] = updatedTrack;\n }\n\n if (state.currentTrack && state.currentTrack._id === updatedTrack._id) {\n state.currentTrack = updatedTrack;\n }\n\n return updatedTrack;\n } catch (error) {\n console.error('Error updating track:', error);\n throw error;\n }\n },\n\n async deleteTrack(trackId) {\n try {\n await trackStore.delete({ _id: trackId });\n\n // Update local state\n state.tracks = state.tracks.filter(t => t._id !== trackId);\n state.userTracks = state.userTracks.filter(t => t._id !== trackId);\n\n if (state.currentTrack && state.currentTrack._id === trackId) {\n state.currentTrack = null;\n }\n\n return true;\n } catch (error) {\n console.error('Error deleting track:', error);\n throw error;\n }\n },\n\n async fetchUserTracks(userId) {\n try {\n const options = {\n creator: userId,\n limit: 100,\n };\n console.log('fetchUserTracks', userId);\n const tracks = await trackStore.read(options);\n state.userTracks = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching user tracks:', error);\n return [];\n }\n },\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tracks.js","sources":["../../../../../../src/modules/music/store/tracks.js"],"sourcesContent":["// store/tracks.js\nimport Store from '@martyrs/src/modules/globals/views/classes/globals.store.js';\nimport { reactive } from 'vue';\n\n// Create store instance\nconst trackStore = new Store(`${process.env.API_URL}/api/tracks`);\n\n// State\nexport const state = reactive({\n tracks: [],\n popular: [],\n recent: [],\n featured: [],\n userTracks: [],\n currentTrack: null,\n isLoading: false,\n loadingPopular: false,\n loadingRecent: false,\n loadingFeatured: false,\n});\n\n// Actions\nexport const actions = {\n async fetchTracks(options = {}) {\n state.isLoading = true;\n try {\n const tracks = await trackStore.read(options);\n state.tracks = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching tracks:', error);\n return [];\n } finally {\n state.isLoading = false;\n }\n },\n\n async fetchPopularTracks(options = {}) {\n state.loadingPopular = true;\n try {\n // Обрабатываем options от Feed компонента\n const queryParams = new URLSearchParams();\n queryParams.append('limit', options.limit || 10);\n \n if (options.skip) queryParams.append('skip', options.skip);\n if (options.search) queryParams.append('search', options.search);\n \n const response = await fetch(`${process.env.API_URL}/api/tracks/popular?${queryParams.toString()}`);\n const tracks = await response.json();\n state.popular = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching popular tracks:', error);\n return [];\n } finally {\n state.loadingPopular = false;\n }\n },\n\n async fetchRecentTracks(limit = 10) {\n state.loadingRecent = true;\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/recent?limit=${limit}`);\n const tracks = await response.json();\n state.recent = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching recent tracks:', error);\n return [];\n } finally {\n state.loadingRecent = false;\n }\n },\n\n async fetchTracksByGenre(genreId, limit = 20) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/genre/${genreId}?limit=${limit}`);\n return await response.json();\n } catch (error) {\n console.error('Error fetching tracks by genre:', error);\n return [];\n }\n },\n\n async fetchTrackByUrl(url) {\n try {\n const response = await fetch(`${process.env.API_URL}/api/tracks/url/${url}`);\n const track = await response.json();\n state.currentTrack = track;\n return track;\n } catch (error) {\n console.error('Error fetching track by URL:', error);\n return null;\n }\n },\n\n // Improved createTrack action with better error handling\n async createTrack(trackData) {\n console.log('Creating track with data:', trackData);\n\n // Validate required fields to prevent silent failures\n const requiredFields = ['title', 'artist', 'genre', 'fileUrl'];\n const missingFields = requiredFields.filter(field => !trackData[field]);\n\n if (missingFields.length > 0) {\n const error = new Error(`Missing required fields: ${missingFields.join(', ')}`);\n console.error(error);\n throw error;\n }\n\n // Ensure proper structure for owner and creator fields\n if (!trackData.owner || !trackData.owner.target || !trackData.owner.type) {\n console.error('Track data missing owner information');\n throw new Error('Owner information is required');\n }\n\n if (!trackData.creator || !trackData.creator.target || !trackData.creator.type) {\n console.error('Track data missing creator information');\n throw new Error('Creator information is required');\n }\n\n try {\n console.log('Calling API to create track...');\n\n // Check what API URL we're using\n console.log('API URL:', trackStore.apiUrl);\n\n // Use a timeout to detect hanging requests\n const timeoutPromise = new Promise((_, reject) => {\n setTimeout(() => reject(new Error('Request timed out after 15 seconds')), 15000);\n });\n\n // Race between the actual request and the timeout\n const createdTrack = await Promise.race([trackStore.create(trackData), timeoutPromise]);\n\n console.log('Track created successfully, server response:', createdTrack);\n\n // Check if the response is what we expect\n if (!createdTrack || !createdTrack._id) {\n console.error('API returned success but without expected track data:', createdTrack);\n throw new Error('Invalid response from server');\n }\n\n // Update local state\n state.tracks.unshift(createdTrack);\n state.userTracks.unshift(createdTrack);\n\n console.log('Local state updated with new track');\n return createdTrack;\n } catch (error) {\n console.error('Error creating track:', error);\n\n // Enhanced error logging\n if (error.response) {\n console.error('Error response:', error.response);\n }\n\n // Format the error for better user feedback\n const formattedError = new Error(error.message || 'Failed to create track. Please try again.');\n formattedError.originalError = error;\n\n // Set a global error\n setError({\n message: formattedError.message,\n errorCode: error.errorCode || 'TRACK_CREATE_FAILED',\n });\n\n throw formattedError;\n }\n },\n\n async updateTrack(trackData) {\n try {\n const updatedTrack = await trackStore.update(trackData);\n\n // Update local state\n const index = state.tracks.findIndex(t => t._id === updatedTrack._id);\n if (index !== -1) {\n state.tracks[index] = updatedTrack;\n }\n\n const userIndex = state.userTracks.findIndex(t => t._id === updatedTrack._id);\n if (userIndex !== -1) {\n state.userTracks[userIndex] = updatedTrack;\n }\n\n if (state.currentTrack && state.currentTrack._id === updatedTrack._id) {\n state.currentTrack = updatedTrack;\n }\n\n return updatedTrack;\n } catch (error) {\n console.error('Error updating track:', error);\n throw error;\n }\n },\n\n async deleteTrack(trackId) {\n try {\n await trackStore.delete({ _id: trackId });\n\n // Update local state\n state.tracks = state.tracks.filter(t => t._id !== trackId);\n state.userTracks = state.userTracks.filter(t => t._id !== trackId);\n\n if (state.currentTrack && state.currentTrack._id === trackId) {\n state.currentTrack = null;\n }\n\n return true;\n } catch (error) {\n console.error('Error deleting track:', error);\n throw error;\n }\n },\n\n async fetchUserTracks(userId) {\n try {\n const options = {\n creator: userId,\n limit: 100,\n };\n console.log('fetchUserTracks', userId);\n const tracks = await trackStore.read(options);\n state.userTracks = tracks;\n return tracks;\n } catch (error) {\n console.error('Error fetching user tracks:', error);\n return [];\n }\n },\n};\n"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  const vue = require("vue");
4
4
  const vueRouter = require("vue-router");
5
+ ;/* empty css */
5
6
  const Button = require("../../../../components/Button/Button.vue.cjs");
6
7
  const Tab = require("../../../../components/Tab/Tab.vue2.cjs");
7
8
  const Popup = require("../../../../components/Popup/Popup.vue.cjs");
@@ -1 +1 @@
1
- {"version":3,"file":"OrderCreateBackoffice.vue.cjs","sources":["../../../../../../../src/modules/orders/components/pages/OrderCreateBackoffice.vue"],"sourcesContent":["<template>\n <div class=\"h-100 flex flex-column pd-thin\">\n <Block class=\"mn-b-thin\">\n <header class=\"flex-v-center flex-nowrap flex\">\n <h2 class=\"mn-r-auto\">Create Order</h2>\n <Button \n :submit=\"onSubmit\"\n :callback=\"redirectTo\"\n class=\"pd-small radius-big bg-main t-black uppercase t-medium\"\n >\n Add Order \n </Button>\n </header>\n </Block>\n\n <Tab \n v-model:selected=\"tabOrderCreate\"\n :tabs=\"[\n {name: 'Positions', value: 'positions'},\n {name: 'Customer', value: 'customer'},\n {name: 'Delivery', value: 'delivery'},\n {name: 'Payment', value: 'payment'}\n ]\"\n class=\"t-medium radius-medium bg-light mn-b-small\"\n />\n\n <Popup \n @close-popup=\"closeProductsPopup\" \n :isPopupOpen=\"isOpenProductsPopup\"\n class=\"bg-white flex flex-column radius-big pd-medium pos-relative\"\n >\n\n <h3 class=\"mn-b-small\">Add to order</h3>\n\n <div class=\"bg-light h-max-100 mn-b-thin o-scroll pd-medium radius-big\">\n <Feed\n :showLoadMore=\"false\"\n :search=\"{\n placeholder: 'Search products...',\n class: 'bg-white mn-b-thin'\n }\"\n :states=\"{\n empty: {\n title: 'No Products Found',\n description: 'Currently, there are no such products available.'\n },\n skeleton: {\n hide: true\n }\n }\"\n :store=\"{\n read: (options) => products.actions.read(options),\n state: null\n }\"\n :options=\"{\n owner: route.params._id\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"\"\n >\n <CardOrderItem\n v-for=\"(product, index) in items\" :key=\"product._id\"\n :editable=\"false\" \n :product=\"product\" \n @click=\"() => { \n let p = { ...product };\n p.quantity = 1;\n globals.actions.add(orders.state.current.positions, p) \n closeProductsPopup();\n }\"\n class=\"bg-white pd-thin radius-medium w-100 mn-b-thin\"\n />\n </Feed>\n </div>\n </Popup>\n\n <Block\n v-if=\"tabOrderCreate === 'positions'\"\n title=\"Positions\"\n :actions=\"[{\n label: '+',\n function: () => openProductsPopup()\n }]\"\n class=\"mn-b-small\"\n >\n <span \n v-if=\"orders.state.current.positions.length === 0\" \n class=\"w-100\"\n >\n No positions added yet\n </span> \n\n <CardOrderItem\n v-for=\"(product, index) in orders.state.current.positions\" \n :key=\"product._id\"\n :editable=\"true\" \n :product=\"product\" \n @increase=\"() => { globals.actions.increment(orders.state.current.positions, product) }\"\n @decrease=\"() => { globals.actions.decrement(orders.state.current.positions, product) }\"\n @remove=\"() => { globals.actions.delete(orders.state.current.positions, product) }\"э\n @updateRentDates=\"(product, dates) => orders.mutations.updateRentDates({ positions: orders.state.current.positions, productId: product._id, dates })\"\n class=\"mn-b-thin pd-thin radius-medium bg-white\"\n /> \n </Block>\n\n <Block\n v-if=\"tabOrderCreate === 'customer'\"\n title=\"Customer\"\n class=\"mn-b-semi\"\n :actions=\"[{\n label: '+',\n function: () => openCustomerPopup()\n }]\"\n >\n <CardUser\n v-if=\"orders.state.current.customer._id\"\n :user=\"orders.state.current.customer\"\n :photo=\"orders.state.current.customer.profile.photo\"\n :name=\"orders.state.current.customer.profile.name || orders.state.current.customer.phone || orders.state.current.customer.email\"\n @click=\"() => { \n orders.mutations.resetCustomer(orders.state.current.customer)\n }\"\n class=\"bg-white pd-thin h-4r radius-medium w-100 mn-b-thin\"\n />\n <Feed\n v-else\n :search=\"{\n placeholder: 'Search customer...',\n class: 'bg-white mn-b-thin'\n }\"\n :states=\"{\n empty: {\n title: 'No Products Found',\n description: 'Currently, there are no such products available.'\n }\n }\"\n :store=\"{\n read: (options) => customers.read(options),\n state: null\n }\"\n :options=\"{\n owner: route.params._id\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"bg-light h-max-20r o-scroll\"\n >\n <CardUser\n v-for=\"(user, index) in items\" \n :key=\"user._id\"\n :user=\"user\"\n :photo=\"user.profile.photo\"\n :name=\"user.profile.name || user.phone || user.email\"\n @click=\"() => { \n orders.state.current.customer = user\n }\"\n class=\"bg-white pd-thin h-4r radius-medium w-100 mn-b-thin\"\n />\n </Feed>\n \n </Block>\n\n <FormDelivery \n v-if=\"tabOrderCreate === 'delivery'\" \n :order=\"orders.state.current\"\n :organization=\"orderOrganization[0]\" \n />\n\n <FormPayment \n v-if=\"tabOrderCreate === 'payment'\"\n :order=\"orders.state.current\" \n :organization=\"orderOrganization[0]\" \n />\n\n <Popup \n title=\"Add customer\" \n @close-popup=\"closeCustomerPopup\" \n :isPopupOpen=\"isOpenCustomerPopup\"\n :class=\"'bg-white w-min-30r w-max-30r radius-big pd-medium'\"\n >\n <FormAddCustomer \n @callbackCustomer=\"closeCustomerPopup\"\n />\n </Popup>\n\n <Block\n class=\"mn-b-semi\"\n >\n <div class=\"h3 flex\">\n <span class=\"mn-r-auto t-transp\">In total</span>\n <span>{{ cartTotalPrice }} {{returnCurrency()}} </span >\n </div>\n </Block>\n</div>\n\n\n</template>\n\n<script setup=\"props\">\n import { computed, ref, defineProps, onMounted, reactive, toRefs, watch } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n\n\n import Field from '@martyrs/src/components/Field/Field.vue'\n import Button from \"@martyrs/src/components/Button/Button.vue\"; \n import Tab from '@martyrs/src/components/Tab/Tab.vue'\n import Popup from '@martyrs/src/components/Popup/Popup.vue';\n\timport Block from '@martyrs/src/components/Block/Block.vue';\n import Feed from '@martyrs/src/components/Feed/Feed.vue'\n\n import CardOrderItem from '@martyrs/src/modules/orders/components/blocks/CardOrderItem.vue'\n import CardPosition from '@martyrs/src/modules/products/components/blocks/CardPosition.vue';\n import CardUser from '@martyrs/src/modules/auth/views/components/blocks/CardUser.vue'\n\n import BlockSearch from '@martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue'\n\n import FormAddCustomer from '@martyrs/src/modules/orders/components/sections/FormAddCustomer.vue'\n import FormDelivery from '@martyrs/src/modules/orders/components/sections/FormDelivery.vue'\n import FormPayment from '@martyrs/src/modules/orders/components/sections/FormPayment.vue'\n\n // Import your store\n import * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n import * as orders from '@martyrs/src/modules/orders/store/orders.js';\n import * as organizations from '@martyrs/src/modules/organizations/store/organizations.js';\n import * as products from '@martyrs/src/modules/products/store/products.js';\n\n import customers from '@martyrs/src/modules/orders/store/customers.store';\n\t\n // Accessing router\n const route = useRoute()\n const router = useRouter()\n\n orders.mutations.resetOrder(orders.state.current)\n\n let cartTotalPrice = computed(() => {\n return Number(orders.state.current.positions.reduce((total, product) => {\n return total + product.price * product.quantity;\n }, 0));\n })\n\n // Tab\n const tabOrderCreate = ref('positions')\n\n // Popup\n const isOpenProductsPopup = ref(false);\n\n function openProductsPopup() {\n isOpenProductsPopup.value = true;\n }\n\n function closeProductsPopup() {\n isOpenProductsPopup.value = false;\n }\n\n const isOpenCustomerPopup = ref(false);\n\n function openCustomerPopup() {\n isOpenCustomerPopup.value = true;\n }\n\n function closeCustomerPopup() {\n isOpenCustomerPopup.value = false;\n }\n\n // Data\n let order = ref(null)\n\n async function onSubmit() {\n\n orders.state.current.creator = {\n type: 'User',\n target: auth.state.user._id\n }\n\n orders.state.current.owner = {\n type: 'Organization',\n target: route.params._id,\n }\n\n orders.state.current.customer = {\n type: 'Customer',\n target: orders.state.current.customer._id || null,\n }\n\n order.value = await orders.actions.create(orders.state.current)\n }\n\n function redirectTo () {\n router.push({\n name: route.meta.context === 'backoffice' ? 'BackofficeOrderEdit' : 'OrganizationOrderEdit',\n params: { \n order: order.value._id,\n _id: route.params._id\n } \n })\n }\n\n const orderOrganization = ref({})\n\n\n\n onMounted(async() => {\n\n orderOrganization.value = await organizations.actions.read({\n _id: route.params._id,\n lookup: ['spots']\n })\n\n // await orders.actions.fetchOrder(route.params.id) // Implement this action in your store\n\n // order.value = orders.state.current\n })\n\n</script>\n\n\n<style lang=\"scss\">\n\n.vue-select {\n width: inherit;\n\n margin-right: 1rem;\n}\n.vue-select-header {\n height: 3rem;\n}\n</style>\n"],"names":["useRoute","useRouter","orders.mutations","orders.state","computed","ref","auth.state","orders.actions","onMounted","organizations.actions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyOE,UAAM,QAAQA,UAAQ,SAAA;AACtB,UAAM,SAASC,UAAS,UAAA;AAEvBC,qBAAiB,WAAWC,OAAAA,MAAa,OAAO;AAEjD,QAAI,iBAAiBC,IAAAA,SAAS,MAAM;AAClC,aAAO,OAAOD,OAAAA,MAAa,QAAQ,UAAU,OAAO,CAAC,OAAO,YAAY;AACtE,eAAO,QAAQ,QAAQ,QAAQ,QAAQ;AAAA,MACxC,GAAE,CAAC,CAAC;AAAA,IACN,CAAA;AAGD,UAAM,iBAAiBE,IAAAA,IAAI,WAAW;AAGtC,UAAM,sBAAsBA,IAAG,IAAC,KAAK;AAErC,aAAS,oBAAoB;AAC3B,0BAAoB,QAAQ;AAAA,IAChC;AAEE,aAAS,qBAAqB;AAC5B,0BAAoB,QAAQ;AAAA,IAChC;AAEE,UAAM,sBAAsBA,IAAG,IAAC,KAAK;AAErC,aAAS,oBAAoB;AAC3B,0BAAoB,QAAQ;AAAA,IAChC;AAEE,aAAS,qBAAqB;AAC5B,0BAAoB,QAAQ;AAAA,IAChC;AAGE,QAAI,QAAQA,IAAAA,IAAI,IAAI;AAEpB,mBAAe,WAAW;AAExBF,aAAY,MAAC,QAAQ,UAAU;AAAA,QAC7B,MAAM;AAAA,QACN,QAAQG,KAAU,MAAC,KAAK;AAAA,MAC9B;AAEIH,aAAY,MAAC,QAAQ,QAAQ;AAAA,QAC3B,MAAM;AAAA,QACN,QAAQ,MAAM,OAAO;AAAA,MAC3B;AAEIA,aAAY,MAAC,QAAQ,WAAW;AAAA,QAC9B,MAAM;AAAA,QACN,QAAQA,OAAAA,MAAa,QAAQ,SAAS,OAAO;AAAA,MACnD;AAEI,YAAM,QAAQ,MAAMI,OAAc,QAAC,OAAOJ,OAAY,MAAC,OAAO;AAAA,IAClE;AAEE,aAAS,aAAc;AACrB,aAAO,KAAK;AAAA,QACV,MAAM,MAAM,KAAK,YAAY,eAAe,wBAAwB;AAAA,QACpE,QAAQ;AAAA,UACN,OAAO,MAAM,MAAM;AAAA,UACnB,KAAK,MAAM,OAAO;AAAA,QACnB;AAAA,MACF,CAAA;AAAA,IACL;AAEE,UAAM,oBAAoBE,IAAAA,IAAI,CAAE,CAAA;AAIhCG,QAAAA,UAAU,YAAW;AAEnB,wBAAkB,QAAQ,MAAMC,cAAqB,QAAC,KAAK;AAAA,QACzD,KAAK,MAAM,OAAO;AAAA,QAClB,QAAQ,CAAC,OAAO;AAAA,MACjB,CAAA;AAAA,IAKF,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"OrderCreateBackoffice.vue.cjs","sources":["../../../../../../../src/modules/orders/components/pages/OrderCreateBackoffice.vue"],"sourcesContent":["<template>\n <div class=\"h-100 flex flex-column pd-thin\">\n <Block class=\"mn-b-thin\">\n <header class=\"flex-v-center flex-nowrap flex\">\n <h2 class=\"mn-r-auto\">Create Order</h2>\n <Button \n :submit=\"onSubmit\"\n :callback=\"redirectTo\"\n class=\"pd-small radius-big bg-main t-black uppercase t-medium\"\n >\n Add Order \n </Button>\n </header>\n </Block>\n\n <Tab \n v-model:selected=\"tabOrderCreate\"\n :tabs=\"[\n {name: 'Positions', value: 'positions'},\n {name: 'Customer', value: 'customer'},\n {name: 'Delivery', value: 'delivery'},\n {name: 'Payment', value: 'payment'}\n ]\"\n class=\"t-medium radius-medium bg-light mn-b-small\"\n />\n\n <Popup \n @close-popup=\"closeProductsPopup\" \n :isPopupOpen=\"isOpenProductsPopup\"\n class=\"bg-white flex flex-column radius-big pd-medium pos-relative\"\n >\n\n <h3 class=\"mn-b-small\">Add to order</h3>\n\n <div class=\"bg-light h-max-100 mn-b-thin o-scroll pd-medium radius-big\">\n <Feed\n :showLoadMore=\"false\"\n :search=\"{\n placeholder: 'Search products...',\n class: 'bg-white mn-b-thin'\n }\"\n :states=\"{\n empty: {\n title: 'No Products Found',\n description: 'Currently, there are no such products available.'\n },\n skeleton: {\n hide: true\n }\n }\"\n :store=\"{\n read: (options) => products.actions.read(options),\n state: null\n }\"\n :options=\"{\n owner: route.params._id\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"\"\n >\n <CardOrderItem\n v-for=\"(product, index) in items\" :key=\"product._id\"\n :editable=\"false\" \n :product=\"product\" \n @click=\"() => { \n let p = { ...product };\n p.quantity = 1;\n globals.actions.add(orders.state.current.positions, p) \n closeProductsPopup();\n }\"\n class=\"bg-white pd-thin radius-medium w-100 mn-b-thin\"\n />\n </Feed>\n </div>\n </Popup>\n\n <Block\n v-if=\"tabOrderCreate === 'positions'\"\n title=\"Positions\"\n :actions=\"[{\n label: '+',\n function: () => openProductsPopup()\n }]\"\n class=\"mn-b-small\"\n >\n <span \n v-if=\"orders.state.current.positions.length === 0\" \n class=\"w-100\"\n >\n No positions added yet\n </span> \n\n <CardOrderItem\n v-for=\"(product, index) in orders.state.current.positions\" \n :key=\"product._id\"\n :editable=\"true\" \n :product=\"product\" \n @increase=\"() => { globals.actions.increment(orders.state.current.positions, product) }\"\n @decrease=\"() => { globals.actions.decrement(orders.state.current.positions, product) }\"\n @remove=\"() => { globals.actions.delete(orders.state.current.positions, product) }\"э\n @updateRentDates=\"(product, dates) => orders.mutations.updateRentDates({ positions: orders.state.current.positions, productId: product._id, dates })\"\n class=\"mn-b-thin pd-thin radius-medium bg-white\"\n /> \n </Block>\n\n <Block\n v-if=\"tabOrderCreate === 'customer'\"\n title=\"Customer\"\n class=\"mn-b-semi\"\n :actions=\"[{\n label: '+',\n function: () => openCustomerPopup()\n }]\"\n >\n <CardUser\n v-if=\"orders.state.current.customer._id\"\n :user=\"orders.state.current.customer\"\n :photo=\"orders.state.current.customer.profile.photo\"\n :name=\"orders.state.current.customer.profile.name || orders.state.current.customer.phone || orders.state.current.customer.email\"\n @click=\"() => { \n orders.mutations.resetCustomer(orders.state.current.customer)\n }\"\n class=\"bg-white pd-thin h-4r radius-medium w-100 mn-b-thin\"\n />\n <Feed\n v-else\n :search=\"{\n placeholder: 'Search customer...',\n class: 'bg-white mn-b-thin'\n }\"\n :states=\"{\n empty: {\n title: 'No Products Found',\n description: 'Currently, there are no such products available.'\n }\n }\"\n :store=\"{\n read: (options) => customers.read(options),\n state: null\n }\"\n :options=\"{\n owner: route.params._id\n }\"\n v-slot=\"{ \n items \n }\"\n class=\"bg-light h-max-20r o-scroll\"\n >\n <CardUser\n v-for=\"(user, index) in items\" \n :key=\"user._id\"\n :user=\"user\"\n :photo=\"user.profile.photo\"\n :name=\"user.profile.name || user.phone || user.email\"\n @click=\"() => { \n orders.state.current.customer = user\n }\"\n class=\"bg-white pd-thin h-4r radius-medium w-100 mn-b-thin\"\n />\n </Feed>\n \n </Block>\n\n <FormDelivery \n v-if=\"tabOrderCreate === 'delivery'\" \n :order=\"orders.state.current\"\n :organization=\"orderOrganization[0]\" \n />\n\n <FormPayment \n v-if=\"tabOrderCreate === 'payment'\"\n :order=\"orders.state.current\" \n :organization=\"orderOrganization[0]\" \n />\n\n <Popup \n title=\"Add customer\" \n @close-popup=\"closeCustomerPopup\" \n :isPopupOpen=\"isOpenCustomerPopup\"\n :class=\"'bg-white w-min-30r w-max-30r radius-big pd-medium'\"\n >\n <FormAddCustomer \n @callbackCustomer=\"closeCustomerPopup\"\n />\n </Popup>\n\n <Block\n class=\"mn-b-semi\"\n >\n <div class=\"h3 flex\">\n <span class=\"mn-r-auto t-transp\">In total</span>\n <span>{{ cartTotalPrice }} {{returnCurrency()}} </span >\n </div>\n </Block>\n</div>\n\n\n</template>\n\n<script setup=\"props\">\n import { computed, ref, defineProps, onMounted, reactive, toRefs, watch } from 'vue'\n import { useRoute, useRouter } from 'vue-router'\n\n\n import Field from '@martyrs/src/components/Field/Field.vue'\n import Button from \"@martyrs/src/components/Button/Button.vue\"; \n import Tab from '@martyrs/src/components/Tab/Tab.vue'\n import Popup from '@martyrs/src/components/Popup/Popup.vue';\n\timport Block from '@martyrs/src/components/Block/Block.vue';\n import Feed from '@martyrs/src/components/Feed/Feed.vue'\n\n import CardOrderItem from '@martyrs/src/modules/orders/components/blocks/CardOrderItem.vue'\n import CardPosition from '@martyrs/src/modules/products/components/blocks/CardPosition.vue';\n import CardUser from '@martyrs/src/modules/auth/views/components/blocks/CardUser.vue'\n\n import BlockSearch from '@martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue'\n\n import FormAddCustomer from '@martyrs/src/modules/orders/components/sections/FormAddCustomer.vue'\n import FormDelivery from '@martyrs/src/modules/orders/components/sections/FormDelivery.vue'\n import FormPayment from '@martyrs/src/modules/orders/components/sections/FormPayment.vue'\n\n // Import your store\n import * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\n import * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n import * as orders from '@martyrs/src/modules/orders/store/orders.js';\n import * as organizations from '@martyrs/src/modules/organizations/store/organizations.js';\n import * as products from '@martyrs/src/modules/products/store/products.js';\n\n import customers from '@martyrs/src/modules/orders/store/customers.store';\n\t\n // Accessing router\n const route = useRoute()\n const router = useRouter()\n\n orders.mutations.resetOrder(orders.state.current)\n\n let cartTotalPrice = computed(() => {\n return Number(orders.state.current.positions.reduce((total, product) => {\n return total + product.price * product.quantity;\n }, 0));\n })\n\n // Tab\n const tabOrderCreate = ref('positions')\n\n // Popup\n const isOpenProductsPopup = ref(false);\n\n function openProductsPopup() {\n isOpenProductsPopup.value = true;\n }\n\n function closeProductsPopup() {\n isOpenProductsPopup.value = false;\n }\n\n const isOpenCustomerPopup = ref(false);\n\n function openCustomerPopup() {\n isOpenCustomerPopup.value = true;\n }\n\n function closeCustomerPopup() {\n isOpenCustomerPopup.value = false;\n }\n\n // Data\n let order = ref(null)\n\n async function onSubmit() {\n\n orders.state.current.creator = {\n type: 'User',\n target: auth.state.user._id\n }\n\n orders.state.current.owner = {\n type: 'Organization',\n target: route.params._id,\n }\n\n orders.state.current.customer = {\n type: 'Customer',\n target: orders.state.current.customer._id || null,\n }\n\n order.value = await orders.actions.create(orders.state.current)\n }\n\n function redirectTo () {\n router.push({\n name: route.meta.context === 'backoffice' ? 'BackofficeOrderEdit' : 'OrganizationOrderEdit',\n params: { \n order: order.value._id,\n _id: route.params._id\n } \n })\n }\n\n const orderOrganization = ref({})\n\n\n\n onMounted(async() => {\n\n orderOrganization.value = await organizations.actions.read({\n _id: route.params._id,\n lookup: ['spots']\n })\n\n // await orders.actions.fetchOrder(route.params.id) // Implement this action in your store\n\n // order.value = orders.state.current\n })\n\n</script>\n\n\n<style lang=\"scss\">\n\n.vue-select {\n width: inherit;\n\n margin-right: 1rem;\n}\n.vue-select-header {\n height: 3rem;\n}\n</style>\n"],"names":["useRoute","useRouter","orders.mutations","orders.state","computed","ref","auth.state","orders.actions","onMounted","organizations.actions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyOE,UAAM,QAAQA,UAAQ,SAAA;AACtB,UAAM,SAASC,UAAS,UAAA;AAEvBC,qBAAiB,WAAWC,OAAAA,MAAa,OAAO;AAEjD,QAAI,iBAAiBC,IAAAA,SAAS,MAAM;AAClC,aAAO,OAAOD,OAAAA,MAAa,QAAQ,UAAU,OAAO,CAAC,OAAO,YAAY;AACtE,eAAO,QAAQ,QAAQ,QAAQ,QAAQ;AAAA,MACxC,GAAE,CAAC,CAAC;AAAA,IACN,CAAA;AAGD,UAAM,iBAAiBE,IAAAA,IAAI,WAAW;AAGtC,UAAM,sBAAsBA,IAAG,IAAC,KAAK;AAErC,aAAS,oBAAoB;AAC3B,0BAAoB,QAAQ;AAAA,IAChC;AAEE,aAAS,qBAAqB;AAC5B,0BAAoB,QAAQ;AAAA,IAChC;AAEE,UAAM,sBAAsBA,IAAG,IAAC,KAAK;AAErC,aAAS,oBAAoB;AAC3B,0BAAoB,QAAQ;AAAA,IAChC;AAEE,aAAS,qBAAqB;AAC5B,0BAAoB,QAAQ;AAAA,IAChC;AAGE,QAAI,QAAQA,IAAAA,IAAI,IAAI;AAEpB,mBAAe,WAAW;AAExBF,aAAY,MAAC,QAAQ,UAAU;AAAA,QAC7B,MAAM;AAAA,QACN,QAAQG,KAAU,MAAC,KAAK;AAAA,MAC9B;AAEIH,aAAY,MAAC,QAAQ,QAAQ;AAAA,QAC3B,MAAM;AAAA,QACN,QAAQ,MAAM,OAAO;AAAA,MAC3B;AAEIA,aAAY,MAAC,QAAQ,WAAW;AAAA,QAC9B,MAAM;AAAA,QACN,QAAQA,OAAAA,MAAa,QAAQ,SAAS,OAAO;AAAA,MACnD;AAEI,YAAM,QAAQ,MAAMI,OAAc,QAAC,OAAOJ,OAAY,MAAC,OAAO;AAAA,IAClE;AAEE,aAAS,aAAc;AACrB,aAAO,KAAK;AAAA,QACV,MAAM,MAAM,KAAK,YAAY,eAAe,wBAAwB;AAAA,QACpE,QAAQ;AAAA,UACN,OAAO,MAAM,MAAM;AAAA,UACnB,KAAK,MAAM,OAAO;AAAA,QACnB;AAAA,MACF,CAAA;AAAA,IACL;AAEE,UAAM,oBAAoBE,IAAAA,IAAI,CAAE,CAAA;AAIhCG,QAAAA,UAAU,YAAW;AAEnB,wBAAkB,QAAQ,MAAMC,cAAqB,QAAC,KAAK;AAAA,QACzD,KAAK,MAAM,OAAO;AAAA,QAClB,QAAQ,CAAC,OAAO;AAAA,MACjB,CAAA;AAAA,IAKF,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +1,6 @@
1
1
  import { computed, ref, onMounted, createElementBlock, openBlock, createVNode, createBlock, createCommentVNode, withCtx, createElementVNode, createTextVNode, unref, Fragment, renderList, normalizeClass, toDisplayString } from "vue";
2
2
  import { useRoute, useRouter } from "vue-router";
3
+ /* empty css */
3
4
  import _sfc_main$2 from "../../../../components/Button/Button.vue.js";
4
5
  import _sfc_main$3 from "../../../../components/Tab/Tab.vue2.js";
5
6
  import _sfc_main$4 from "../../../../components/Popup/Popup.vue.js";