@ozdao/martyrs 0.2.564 → 0.2.566

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 (366) hide show
  1. package/dist/abac-BPl9Bmf9.js +1527 -0
  2. package/dist/builder.js +51 -39
  3. package/dist/{common.schema-GFSlNJo7.js → common.schema-DswiUXKB.js} +1 -1
  4. package/dist/community.server.js +48 -9
  5. package/dist/core.server.js +6 -4
  6. package/dist/{crud-C7FSTUes.js → crud-q1ye5IhV.js} +7 -7
  7. package/dist/events.server.js +3 -3
  8. package/dist/gallery.server.js +2 -2
  9. package/dist/inventory.server.js +4 -6
  10. package/dist/{main-CmjWiDVF.js → main-B9o1iBAZ.js} +1279 -1287
  11. package/dist/marketplace.server.js +1 -1
  12. package/dist/martyrs/dist/main-B9o1iBAZ.js +943 -0
  13. package/dist/martyrs/dist/main-B9o1iBAZ.js.map +1 -0
  14. package/dist/martyrs/dist/web-BF3ijvEr.js +55 -0
  15. package/dist/martyrs/dist/web-BF3ijvEr.js.map +1 -0
  16. package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js +96 -0
  17. package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js.map +1 -0
  18. package/dist/martyrs/src/components/Button/{Button.vue.js → Button.vue2.js} +36 -45
  19. package/dist/martyrs/src/components/Button/Button.vue2.js.map +1 -0
  20. package/dist/martyrs/src/components/Feed/Carousel.vue.js +1 -1
  21. package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
  22. package/dist/martyrs/src/components/Field/{Field.vue2.js → Field.vue.js} +2 -2
  23. package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -0
  24. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +2 -2
  25. package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.js +1 -1
  26. package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.js.map +1 -1
  27. package/dist/martyrs/src/components/Loader/{Loader.vue2.js → Loader.vue.js} +3 -4
  28. package/dist/martyrs/src/components/Loader/Loader.vue.js.map +1 -0
  29. package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.js +1 -1
  30. package/dist/martyrs/src/components/Media/Media.vue.js +1 -1
  31. package/dist/martyrs/src/components/Menu/{Menu.vue.js → Menu.vue2.js} +2 -2
  32. package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +1 -0
  33. package/dist/martyrs/src/components/Select/{Select.vue2.js → Select.vue.js} +2 -2
  34. package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -0
  35. package/dist/martyrs/src/components/SelectMulti/{SelectMulti.vue.js → SelectMulti.vue2.js} +2 -2
  36. package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue2.js.map +1 -0
  37. package/dist/martyrs/src/components/Tree/Tree.vue.js +6 -3
  38. package/dist/martyrs/src/components/Tree/Tree.vue.js.map +1 -1
  39. package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js +1 -1
  40. package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +1 -1
  41. package/dist/martyrs/src/modules/auth/auth.client.js +10 -7
  42. package/dist/martyrs/src/modules/auth/auth.client.js.map +1 -1
  43. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +1 -1
  44. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +2 -2
  45. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +2 -2
  46. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +3 -3
  47. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
  48. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +1 -1
  49. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +2 -2
  50. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +2 -2
  51. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +13 -13
  52. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js.map +1 -1
  53. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +2 -2
  54. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +2 -2
  55. package/dist/martyrs/src/modules/auth/views/router/auth.router.js +116 -0
  56. package/dist/martyrs/src/modules/auth/views/router/auth.router.js.map +1 -0
  57. package/dist/martyrs/src/modules/auth/views/router/users.router.js +180 -0
  58. package/dist/martyrs/src/modules/auth/views/router/users.router.js.map +1 -0
  59. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +4 -4
  60. package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +1 -1
  61. package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +1 -1
  62. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +2 -2
  63. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +2 -2
  64. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +1 -1
  65. package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.js +1 -1
  66. package/dist/martyrs/src/modules/core/locales/en.js +45 -0
  67. package/dist/martyrs/src/modules/core/locales/en.js.map +1 -1
  68. package/dist/martyrs/src/modules/core/locales/ru.js +45 -0
  69. package/dist/martyrs/src/modules/core/locales/ru.js.map +1 -1
  70. package/dist/martyrs/src/modules/core/views/classes/i18n.manager.js +9 -0
  71. package/dist/martyrs/src/modules/core/views/classes/i18n.manager.js.map +1 -1
  72. package/dist/martyrs/src/modules/core/views/components/blocks/BlockSearch.vue.js +1 -1
  73. package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js +1 -1
  74. package/dist/martyrs/src/modules/core/views/components/blocks/PopupAuth.vue.js +1 -1
  75. package/dist/martyrs/src/modules/core/views/components/blocks/PopupDateSelector.vue.js +2 -2
  76. package/dist/martyrs/src/modules/core/views/components/layouts/App.vue.js +1 -1
  77. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +3 -2
  78. package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
  79. package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js +2 -2
  80. package/dist/martyrs/src/modules/core/views/components/partials/NavigationBar.vue.js +1 -1
  81. package/dist/martyrs/src/modules/core/views/components/sections/Walkthrough.vue.js +1 -1
  82. package/dist/martyrs/src/modules/core/views/components/sections/filters/FilterRange.vue.js +1 -1
  83. package/dist/martyrs/src/modules/core/views/mixins/mixins.js +1 -2
  84. package/dist/martyrs/src/modules/core/views/mixins/mixins.js.map +1 -1
  85. package/dist/martyrs/src/modules/core/views/router/addRoutes.js +6 -1
  86. package/dist/martyrs/src/modules/core/views/router/addRoutes.js.map +1 -1
  87. package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +2 -2
  88. package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
  89. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +4 -4
  90. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +2 -2
  91. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -2
  92. package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js +2 -2
  93. package/dist/martyrs/src/modules/events/components/sections/Feed.vue.js +1 -1
  94. package/dist/martyrs/src/modules/events/components/sections/List.vue.js +1 -1
  95. package/dist/martyrs/src/modules/events/events.client.js +15 -12
  96. package/dist/martyrs/src/modules/events/events.client.js.map +1 -1
  97. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +4 -4
  98. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +3 -3
  99. package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
  100. package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
  101. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +3 -3
  102. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +5 -5
  103. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js.map +1 -1
  104. package/dist/martyrs/src/modules/marketplace/views/components/pages/Marketplace.vue.js +1 -1
  105. package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +1 -1
  106. package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js +95 -0
  107. package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js.map +1 -0
  108. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +6 -3
  109. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js.map +1 -1
  110. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +25 -25
  111. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js.map +1 -1
  112. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
  113. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
  114. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +3 -3
  115. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +4 -4
  116. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +2 -2
  117. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
  118. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +3 -3
  119. package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js +31 -6
  120. package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js.map +1 -1
  121. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +121 -206
  122. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -1
  123. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +2 -2
  124. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js +9 -13
  125. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js.map +1 -1
  126. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
  127. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +167 -246
  128. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -1
  129. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +2 -2
  130. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +136 -221
  131. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -1
  132. package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
  133. package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +171 -0
  134. package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js.map +1 -0
  135. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +32 -154
  136. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js.map +1 -1
  137. package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js +96 -0
  138. package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js.map +1 -0
  139. package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +55 -27
  140. package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js.map +1 -1
  141. package/dist/martyrs/src/modules/music/components/player/tonar.png.js +5 -0
  142. package/dist/martyrs/src/modules/music/components/player/tonar.png.js.map +1 -0
  143. package/dist/martyrs/src/modules/music/store/albums.js +8 -2
  144. package/dist/martyrs/src/modules/music/store/albums.js.map +1 -1
  145. package/dist/martyrs/src/modules/music/store/player.js +83 -65
  146. package/dist/martyrs/src/modules/music/store/player.js.map +1 -1
  147. package/dist/martyrs/src/modules/music/store/tracks.js +4 -13
  148. package/dist/martyrs/src/modules/music/store/tracks.js.map +1 -1
  149. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +4 -4
  150. package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js.map +1 -1
  151. package/dist/martyrs/src/modules/notifications/notifications.client.js +2 -2
  152. package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js +3 -0
  153. package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js.map +1 -1
  154. package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +3 -3
  155. package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +3 -3
  156. package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +2 -2
  157. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +2 -2
  158. package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
  159. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +2 -2
  160. package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
  161. package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
  162. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +2 -2
  163. package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
  164. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +1 -1
  165. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js.map +1 -1
  166. package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
  167. package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +1 -1
  168. package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +2 -2
  169. package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +2 -2
  170. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +1 -1
  171. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +2 -2
  172. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +5 -5
  173. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
  174. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +3 -3
  175. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +3 -3
  176. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +3 -3
  177. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +2 -2
  178. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +2 -2
  179. package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
  180. package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js +1 -1
  181. package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js.map +1 -1
  182. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js +15 -2
  183. package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js.map +1 -1
  184. package/dist/martyrs/src/modules/products/components/elements/Image360.vue.js +1 -1
  185. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +10 -7
  186. package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js.map +1 -1
  187. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +7 -6
  188. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
  189. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +11 -2
  190. package/dist/martyrs/src/modules/products/components/pages/Product.vue.js.map +1 -1
  191. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +4 -4
  192. package/dist/martyrs/src/modules/products/components/pages/ProductRecommmendation.vue.js +1 -1
  193. package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
  194. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +2 -2
  195. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +3 -3
  196. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +3 -3
  197. package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
  198. package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
  199. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +11 -8
  200. package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js.map +1 -1
  201. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
  202. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +211 -61
  203. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js.map +1 -1
  204. package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +2 -2
  205. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +2 -2
  206. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  207. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +4 -4
  208. package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js.map +1 -1
  209. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +3 -3
  210. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +3 -3
  211. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +1 -1
  212. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +2 -2
  213. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +2 -2
  214. package/dist/martyrs.css +1 -1
  215. package/dist/martyrs.es.js +1 -1
  216. package/dist/music.server.js +44 -18
  217. package/dist/node_modules/.pnpm/{@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1 → @capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4}/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/definitions.js +1 -0
  218. package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/definitions.js.map +1 -0
  219. package/dist/node_modules/.pnpm/{@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1 → @capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4}/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/index.js +1 -1
  220. package/dist/node_modules/.pnpm/{@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1 → @capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4}/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/index.js.map +1 -1
  221. package/dist/node_modules/.pnpm/{@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1 → @capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4}/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/web.js +16 -1
  222. package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/web.js.map +1 -0
  223. package/dist/node_modules/.pnpm/{@capacitor_core@7.0.1 → @capacitor_core@7.4.4}/node_modules/@capacitor/core/dist/index.js +2 -1
  224. package/dist/node_modules/.pnpm/@capacitor_core@7.4.4/node_modules/@capacitor/core/dist/index.js.map +1 -0
  225. package/dist/node_modules/.pnpm/{@capacitor_device@7.0.0_@capacitor_core@7.0.1 → @capacitor_device@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/device/dist/esm/index.js +1 -1
  226. package/dist/node_modules/.pnpm/{@capacitor_device@7.0.0_@capacitor_core@7.0.1 → @capacitor_device@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/device/dist/esm/index.js.map +1 -1
  227. package/dist/node_modules/.pnpm/{@capacitor_device@7.0.0_@capacitor_core@7.0.1 → @capacitor_device@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/device/dist/esm/web.js +1 -1
  228. package/dist/node_modules/.pnpm/{@capacitor_device@7.0.0_@capacitor_core@7.0.1 → @capacitor_device@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/device/dist/esm/web.js.map +1 -1
  229. package/dist/node_modules/.pnpm/{@capacitor_keyboard@7.0.0_@capacitor_core@7.0.1 → @capacitor_keyboard@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/keyboard/dist/esm/definitions.js.map +1 -1
  230. package/dist/node_modules/.pnpm/{@capacitor_keyboard@7.0.0_@capacitor_core@7.0.1 → @capacitor_keyboard@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/keyboard/dist/esm/index.js +1 -1
  231. package/dist/node_modules/.pnpm/{@capacitor_keyboard@7.0.0_@capacitor_core@7.0.1 → @capacitor_keyboard@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/keyboard/dist/esm/index.js.map +1 -1
  232. package/dist/node_modules/.pnpm/{@capacitor_push-notifications@7.0.0_@capacitor_core@7.0.1 → @capacitor_push-notifications@7.0.3_@capacitor_core@7.4.4}/node_modules/@capacitor/push-notifications/dist/esm/index.js +1 -1
  233. package/dist/node_modules/.pnpm/{@capacitor_push-notifications@7.0.0_@capacitor_core@7.0.1 → @capacitor_push-notifications@7.0.3_@capacitor_core@7.4.4}/node_modules/@capacitor/push-notifications/dist/esm/index.js.map +1 -1
  234. package/dist/node_modules/.pnpm/{capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.0.1 → capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4}/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/index.js +1 -1
  235. package/dist/node_modules/.pnpm/{capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.0.1 → capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4}/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/index.js.map +1 -1
  236. package/dist/node_modules/.pnpm/{capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.0.1 → capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4}/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/web.js +1 -1
  237. package/dist/node_modules/.pnpm/{capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.0.1 → capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4}/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/web.js.map +1 -1
  238. package/dist/notifications.server.js +0 -3
  239. package/dist/orders.server.js +5 -6
  240. package/dist/organizations.server.js +9 -10
  241. package/dist/products.server.js +27 -26
  242. package/dist/{queryProcessor-CBQgZycY.js → queryProcessor-C_5Iipam.js} +4 -1
  243. package/dist/rents.server.js +2 -3
  244. package/dist/spots.server.js +1 -1
  245. package/dist/style.css +252 -161
  246. package/dist/{web-cNKIl_cL.js → web-BF3ijvEr.js} +1 -1
  247. package/package.json +1 -1
  248. package/src/builder/modes/ssr.rspack.dev.js +4 -3
  249. package/src/builder/rspack/rspack.config.api.js +15 -4
  250. package/src/builder/rspack/rspack.config.base.js +3 -3
  251. package/src/builder/rspack/rspack.config.ssr.client.js +28 -28
  252. package/src/builder/templates/page.js +2 -2
  253. package/src/components/BottomSheet/BottomSheet.vue +4 -4
  254. package/src/components/Button/Button.vue +50 -37
  255. package/src/components/FieldPhone/FieldPhone.vue +1 -1
  256. package/src/components/Loader/Loader.vue +1 -1
  257. package/src/components/Tree/Tree.vue +6 -3
  258. package/src/modules/LAYOUT.MD +767 -0
  259. package/src/modules/PROCESS.md +0 -0
  260. package/src/modules/TASKS.MD +17 -0
  261. package/src/modules/auth/auth.client.js +11 -7
  262. package/src/modules/auth/views/components/pages/SignIn.vue +1 -1
  263. package/src/modules/auth/views/router/auth.router.js +94 -0
  264. package/src/modules/auth/views/router/users.router.js +153 -0
  265. package/src/modules/backoffice/components/partials/Sidebar.vue +7 -7
  266. package/src/modules/community/community.server.js +8 -0
  267. package/src/modules/community/policies/blog.policies.js +55 -0
  268. package/src/modules/community/routes/blog.routes.js +1 -1
  269. package/src/modules/community/routes/comments.routes.js +1 -1
  270. package/src/modules/community/routes/reactions.routes.js +1 -4
  271. package/src/modules/core/controllers/classes/abac/abac.adapter.express.js +206 -124
  272. package/src/modules/core/controllers/classes/abac/abac.adapter.ws.js +203 -50
  273. package/src/modules/core/controllers/classes/abac/abac.core.js +127 -36
  274. package/src/modules/core/controllers/classes/abac/abac.fields.js +144 -179
  275. package/src/modules/core/controllers/classes/abac/abac.js +201 -10
  276. package/src/modules/core/controllers/classes/abac/abac.policies.js +147 -57
  277. package/src/modules/core/controllers/classes/crud/crud.policies.js +5 -5
  278. package/src/modules/core/controllers/policies/core.policies.js +5 -2
  279. package/src/modules/core/controllers/utils/queryProcessor.js +4 -1
  280. package/src/modules/core/core.server.js +1 -0
  281. package/src/modules/core/locales/en.js +45 -0
  282. package/src/modules/core/locales/ru.js +45 -0
  283. package/src/modules/core/models/schemas/common.schema.js +1 -1
  284. package/src/modules/core/views/classes/i18n.manager.js +13 -0
  285. package/src/modules/core/views/components/layouts/Client.vue +1 -1
  286. package/src/modules/core/views/components/sections/filters/FilterPrice.vue +81 -0
  287. package/src/modules/core/views/mixins/mixins.js +1 -2
  288. package/src/modules/core/views/router/addRoutes.js +6 -1
  289. package/src/modules/events/events.client.js +3 -0
  290. package/src/modules/events/routes/events.routes.js +1 -1
  291. package/src/modules/inventory/components/pages/InventoryEdit.vue +3 -3
  292. package/src/modules/inventory/policies/inventory.policies.js +1 -1
  293. package/src/modules/inventory/routes/inventory.routes.js +1 -1
  294. package/src/modules/marketplace/marketplace.router.js +66 -0
  295. package/src/modules/marketplace/views/components/layouts/Marketplace.vue +363 -0
  296. package/src/modules/marketplace/views/components/pages/Catalog.vue +73 -0
  297. package/src/modules/music/components/blocks/ActionButtons.vue +74 -0
  298. package/src/modules/music/components/cards/AlbumCard.vue +1 -1
  299. package/src/modules/music/components/cards/ArtistCardSmall.vue +8 -6
  300. package/src/modules/music/components/layouts/MusicBottomPlayer.vue +94 -4
  301. package/src/modules/music/components/pages/Album.vue +55 -67
  302. package/src/modules/music/components/pages/MusicHome.vue +4 -6
  303. package/src/modules/music/components/pages/Playlist.vue +61 -70
  304. package/src/modules/music/components/pages/Track.vue +54 -71
  305. package/src/modules/music/components/player/FullscreenPlayer.vue +248 -0
  306. package/src/modules/music/components/player/MusicPlayer.vue +21 -216
  307. package/src/modules/music/components/player/PlayerControls.vue +112 -0
  308. package/src/modules/music/components/player/Visualizer.vue +151 -0
  309. package/src/modules/music/components/player/VolumeControl.vue +75 -23
  310. package/src/modules/music/components/player/tonar.png +0 -0
  311. package/src/modules/music/controllers/stream.controller.js +1 -1
  312. package/src/modules/music/music.server.js +1 -1
  313. package/src/modules/music/policies/music.policies.js +3 -2
  314. package/src/modules/music/router/library.router.js +26 -0
  315. package/src/modules/music/router/music.router.js +176 -0
  316. package/src/modules/music/routes/albums.routes.js +13 -12
  317. package/src/modules/music/routes/tracks.routes.js +39 -0
  318. package/src/modules/music/store/albums.js +10 -2
  319. package/src/modules/music/store/player.js +101 -89
  320. package/src/modules/music/store/tracks.js +5 -21
  321. package/src/modules/notifications/components/elements/NotificationBadge.vue +5 -6
  322. package/src/modules/notifications/notifications.server.js +1 -3
  323. package/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue +5 -0
  324. package/src/modules/orders/orders.server.js +0 -1
  325. package/src/modules/organizations/components/blocks/CardOrganization.vue +2 -2
  326. package/src/modules/organizations/components/pages/DepartmentEdit.vue +2 -2
  327. package/src/modules/organizations/components/pages/OrganizationEdit.vue +2 -2
  328. package/src/modules/organizations/policies/organizations.policies.js +12 -6
  329. package/src/modules/organizations/routes/organizations.routes.js +1 -3
  330. package/src/modules/products/components/blocks/CardCategory.vue +1 -1
  331. package/src/modules/products/components/blocks/CardProduct.vue +16 -2
  332. package/src/modules/products/components/pages/Categories.vue +9 -6
  333. package/src/modules/products/components/pages/CategoryEdit.vue +8 -4
  334. package/src/modules/products/components/pages/Product.vue +11 -5
  335. package/src/modules/products/components/sections/SectionProduct.vue +11 -7
  336. package/src/modules/products/controllers/categories.controller.js +32 -27
  337. package/src/modules/products/routes/categories.routes.js +1 -1
  338. package/src/modules/rents/controllers/routes/rents.routes.js +1 -1
  339. package/src/modules/rents/views/components/pages/RentsEdit.vue +208 -49
  340. package/src/modules/spots/components/pages/Map.vue +2 -2
  341. package/src/styles/config.scss +6 -6
  342. package/dist/abac-DYoheWuc.js +0 -1031
  343. package/dist/core.abac-DUPBnlk6.js +0 -298
  344. package/dist/core.logger-C3q8A9dl.js +0 -51
  345. package/dist/martyrs/src/components/Button/Button.vue.js.map +0 -1
  346. package/dist/martyrs/src/components/Field/Field.vue2.js.map +0 -1
  347. package/dist/martyrs/src/components/Loader/Loader.vue2.js.map +0 -1
  348. package/dist/martyrs/src/components/Menu/Menu.vue.js.map +0 -1
  349. package/dist/martyrs/src/components/Select/Select.vue2.js.map +0 -1
  350. package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue.js.map +0 -1
  351. package/dist/martyrs/src/modules/auth/auth.router.js +0 -342
  352. package/dist/martyrs/src/modules/auth/auth.router.js.map +0 -1
  353. package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/definitions.js.map +0 -1
  354. package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/web.js.map +0 -1
  355. package/dist/node_modules/.pnpm/@capacitor_core@7.0.1/node_modules/@capacitor/core/dist/index.js.map +0 -1
  356. package/src/modules/auth/auth.router.js +0 -262
  357. package/src/modules/core/controllers/classes/abac/v2/abac-core-fixed.js +0 -313
  358. package/src/modules/core/controllers/classes/abac/v2/abac-express-fixed.js +0 -276
  359. package/src/modules/core/controllers/classes/abac/v2/abac-fields-fixed.js +0 -425
  360. package/src/modules/core/controllers/classes/abac/v2/abac-main-fixed.js +0 -295
  361. package/src/modules/core/controllers/classes/abac/v2/abac-policies-fixed.js +0 -316
  362. package/src/modules/core/controllers/classes/abac/v2/abac-ws-fixed.js +0 -237
  363. package/src/modules/core/controllers/classes/core.abac.js +0 -310
  364. package/src/modules/core/controllers/classes/core.crud.js +0 -89
  365. package/src/modules/governance/reactcode/eslint.config.js +0 -28
  366. /package/dist/node_modules/.pnpm/{@capacitor_keyboard@7.0.0_@capacitor_core@7.0.1 → @capacitor_keyboard@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/keyboard/dist/esm/definitions.js +0 -0
@@ -0,0 +1,151 @@
1
+ <template>
2
+ <div class="">
3
+ <canvas class="w-100 h-100" style="transform: rotate(-90deg)" id="audiowaves" ref="audiowaves"/>
4
+ </div>
5
+ </template>
6
+
7
+
8
+ <style lang="scss">
9
+ </style>
10
+
11
+ <script setup>
12
+ import { ref, reactive,onMounted, onUnmounted, watchEffect } from 'vue';
13
+ import { App } from '@capacitor/app';
14
+
15
+ import * as radioStore from './radio.store.js';
16
+
17
+ const props = defineProps({
18
+ options: {
19
+ type: Object,
20
+ default: {
21
+ position: false
22
+ }
23
+ }
24
+ })
25
+
26
+ const audiowaves = ref(null)
27
+ const cleanupResources = ref([]);
28
+
29
+ let audio, context, source, splitter, procNode, analChannel_0, analChannel_1;
30
+
31
+ App.addListener('appStateChange', ({ isActive }) => {
32
+ isActive ? initFullPlayer() : removeFullPlayer()
33
+ });
34
+
35
+ const stopAudioAndContext = async () => {
36
+ if (source) await source.disconnect();
37
+ if (context) await context.close();
38
+ };
39
+
40
+ async function initFullPlayer () {
41
+ audio = await radioStore.getPlayerInstance()
42
+ context = await radioStore.getContextInstance()
43
+ source = await radioStore.getSourceInstance(context,audio)
44
+
45
+ let c = document.getElementById('audiowaves');
46
+
47
+ if (c) {
48
+ let $ = c.getContext('2d');
49
+ let w = c.width = global.innerWidth;
50
+ let h = c.height = global.innerHeight;
51
+
52
+ //number of frequency bins to be displayed for each channel
53
+ let NUMBER_OF_COLUMNS = 1300;
54
+ let COLUMN_WIDTH = w / NUMBER_OF_COLUMNS;
55
+ let MIDDLE_HEIGHT = Math.round(h / 2);
56
+ let ANALYSERS_FFT_SIZE = 4096;
57
+ let HUE_STEP = Math.round(360 / 256);
58
+
59
+ let i, value;
60
+
61
+ //color step for frequency values
62
+ visualise(new Array(NUMBER_OF_COLUMNS), new Array(NUMBER_OF_COLUMNS));
63
+
64
+ analChannel_0 = context.createAnalyser();
65
+ analChannel_1 = context.createAnalyser();
66
+
67
+ analChannel_0.fftSize = analChannel_1.fftSize = ANALYSERS_FFT_SIZE;
68
+
69
+ splitter = context.createChannelSplitter(2);
70
+ splitter.connect(analChannel_0, 0);
71
+ splitter.connect(analChannel_1, 1);
72
+
73
+ //processing node callback to be called every 1024 samples collected
74
+ procNode = context.createScriptProcessor(1024);
75
+ procNode.connect(context.destination);
76
+ procNode.onaudioprocess = function(event) {
77
+ let array0 = new Uint8Array(analChannel_0.frequencyBinCount);
78
+ analChannel_0.getByteFrequencyData(array0);
79
+ let array1 = new Uint8Array(analChannel_1.frequencyBinCount);
80
+ analChannel_1.getByteFrequencyData(array1);
81
+
82
+ visualise(array0, array1);
83
+ }
84
+
85
+ source.connect(procNode);
86
+ source.connect(splitter);
87
+
88
+ cleanupResources.value.push(() => procNode.disconnect());
89
+ cleanupResources.value.push(() => splitter.disconnect());
90
+ cleanupResources.value.push(() => analChannel_0.disconnect());
91
+ cleanupResources.value.push(() => analChannel_1.disconnect());
92
+ cleanupResources.value.push(stopAudioAndContext);
93
+
94
+
95
+ function visualise(array0, array1) {
96
+
97
+ $.clearRect(0, 0, w, h);
98
+ $.fillStyle = 'black';
99
+ $.fillRect(0, 0, w, h);
100
+
101
+
102
+ for (i = 0; i < NUMBER_OF_COLUMNS; i++) {
103
+ value = array0[i] * radioStore.state.volume || 1;
104
+ $.fillStyle = 'hsl(' + ((value * HUE_STEP) - 180) + ', 100%, 81%)'; // Adjusted saturation and lightness
105
+ $.fillRect(i * COLUMN_WIDTH, MIDDLE_HEIGHT - (value * 0.7 || 1), COLUMN_WIDTH, 256);
106
+ }
107
+
108
+ $.clearRect(0, h / 2, w, h / 2);
109
+ $.fillStyle = 'black';
110
+ $.fillRect(0, h / 2, w, h / 2);
111
+
112
+ for (i = 0; i < NUMBER_OF_COLUMNS; i++) {
113
+ value = array1[i] * radioStore.state.volume || 1;
114
+ $.fillStyle = 'hsl(' + ((value * HUE_STEP) - 180) + ', 100%, 81%)'; // Adjusted saturation and lightness
115
+ $.fillRect(i * COLUMN_WIDTH, MIDDLE_HEIGHT + 1, COLUMN_WIDTH, value * 0.7 || 1);
116
+ }
117
+ }
118
+ }
119
+ }
120
+
121
+ async function removeFullPlayer () {
122
+ cleanupResources.value.forEach(cleanup => cleanup());
123
+
124
+ audio = null
125
+ context = null
126
+ source = null
127
+
128
+ radioStore.state.context = null
129
+ radioStore.state.source = null
130
+ radioStore.state.gain = null
131
+ radioStore.state.player = null
132
+
133
+
134
+ let playerNew = radioStore.getPlayerInstance()
135
+ radioStore.state.player.volume = radioStore.state.volume;
136
+
137
+ if (radioStore.state.isPlaying) {
138
+ await playerNew.play()
139
+ }
140
+ }
141
+
142
+ onMounted(async() => {
143
+ await initFullPlayer()
144
+ });
145
+
146
+ onUnmounted(async() => {
147
+ await removeFullPlayer()
148
+ App.removeAllListeners()
149
+ });
150
+
151
+ </script>
@@ -1,28 +1,42 @@
1
1
  <!-- components/player/VolumeControl.vue -->
2
2
  <template>
3
- <div class="volume-control">
4
- <div
5
- ref="volumeBarContainer"
6
- class="volume-bar-container"
7
- @click="setVolume"
8
- @mousedown="startVolumeChange"
9
- @mousemove="updateVolumePosition"
10
- @mouseup="endVolumeChange"
11
- @mouseleave="endVolumeChange"
3
+ <div class="volume-section">
4
+ <Button
5
+ @click="playerActions.toggleMute()"
6
+ class="volume-btn"
7
+ :showLoader="false"
8
+ :showSucces="false"
12
9
  >
13
- <div
14
- class="volume-track"
15
- :style="{
16
- background: `linear-gradient(to right, rgb(var(--black)) 0%, rgb(var(--black)) ${volumePercentage}%, rgb(var(--grey)) ${volumePercentage}%, rgb(var(--grey)) 100%)`
17
- }"
18
- >
19
- <div
20
- class="volume-thumb"
21
- :style="{
22
- left: `${volumePercentage}%`,
23
- opacity: muted ? 0 : 1
24
- }"
25
- ></div>
10
+ <IconMute v-if="muted || volume < 0.005" fill="rgb(var(--black))" class="volume-icon"/>
11
+ <IconUnMute v-else fill="rgb(var(--black))" class="volume-icon"/>
12
+ </Button>
13
+
14
+ <div class="volume-slider">
15
+ <div class="volume-control">
16
+ <div
17
+ ref="volumeBarContainer"
18
+ class="volume-bar-container"
19
+ @click="setVolume"
20
+ @mousedown="startVolumeChange"
21
+ @mousemove="updateVolumePosition"
22
+ @mouseup="endVolumeChange"
23
+ @mouseleave="endVolumeChange"
24
+ >
25
+ <div
26
+ class="volume-track"
27
+ :style="{
28
+ background: `linear-gradient(to right, rgb(var(--black)) 0%, rgb(var(--black)) ${volumePercentage}%, rgb(var(--grey)) ${volumePercentage}%, rgb(var(--grey)) 100%)`
29
+ }"
30
+ >
31
+ <div
32
+ class="volume-thumb"
33
+ :style="{
34
+ left: `${volumePercentage}%`,
35
+ opacity: muted ? 0 : 1
36
+ }"
37
+ ></div>
38
+ </div>
39
+ </div>
26
40
  </div>
27
41
  </div>
28
42
  </div>
@@ -30,6 +44,9 @@
30
44
 
31
45
  <script setup>
32
46
  import { ref, computed } from 'vue';
47
+ import Button from '@martyrs/src/components/Button/Button.vue';
48
+ import IconMute from '@martyrs/src/modules/icons/navigation/IconMute.vue';
49
+ import IconUnMute from '@martyrs/src/modules/icons/navigation/IconUnMute.vue';
33
50
 
34
51
  // Import player store
35
52
  import { state as playerState, actions as playerActions } from '../../store/player.js';
@@ -83,6 +100,41 @@ const endVolumeChange = () => {
83
100
  </script>
84
101
 
85
102
  <style scoped>
103
+ .volume-section {
104
+ display: flex;
105
+ align-items: center;
106
+ gap: 12px;
107
+ justify-content: center;
108
+ width: 100%;
109
+ }
110
+
111
+ .volume-btn {
112
+ background: none;
113
+ border: none;
114
+ color: rgb(var(--black));
115
+ cursor: pointer;
116
+ padding: 8px;
117
+ border-radius: 50%;
118
+ transition: all 0.2s ease;
119
+ display: flex;
120
+ align-items: center;
121
+ justify-content: center;
122
+ flex-shrink: 0;
123
+ }
124
+
125
+ .volume-icon {
126
+ width: 16px;
127
+ height: 16px;
128
+ }
129
+
130
+ .volume-btn:hover {
131
+ background: rgba(var(--black),0.1);
132
+ }
133
+
134
+ .volume-slider {
135
+ flex: 1;
136
+ }
137
+
86
138
  .volume-control {
87
139
  width: 100%;
88
140
  }
@@ -109,7 +161,7 @@ const endVolumeChange = () => {
109
161
  top: 50%;
110
162
  width: 12px;
111
163
  height: 12px;
112
- background: rgb(var(--black));
164
+ background: rgb(var(--black));
113
165
  border: 1px solid rgba(var(--white),0.1);
114
166
  border-radius: 50%;
115
167
  transform: translate(-50%, -50%);
@@ -1,4 +1,4 @@
1
- import coreabac from '@martyrs/src/modules/core/controllers/classes/core.abac.js';
1
+ import coreabac from '@martyrs/src/modules/core/controllers/classes/abac/abac.js';
2
2
  import Logger from '@martyrs/src/modules/core/controllers/classes/core.logger.js';
3
3
  import fs from 'fs';
4
4
  import path from 'path';
@@ -1,4 +1,4 @@
1
- import coreabac from '@martyrs/src/modules/core/controllers/classes/core.abac.js';
1
+ import coreabac from '@martyrs/src/modules/core/controllers/classes/abac/abac.js';
2
2
  import Cache from '@martyrs/src/modules/core/controllers/classes/core.cache.js';
3
3
  import Logger from '@martyrs/src/modules/core/controllers/classes/core.logger.js';
4
4
 
@@ -10,8 +10,9 @@ export default (function initializeMusicPolicies(abacAccessControl) {
10
10
  // For create actions, verify ownership
11
11
  if (action === 'create') {
12
12
  // Ensure that creator.target matches the authenticated user
13
- if (context.data.creator && context.data.creator.target) {
14
- return context.data.creator.target.toString() === user.toString();
13
+ const creator = context.data.body?.creator;
14
+ if (creator?.target) {
15
+ return creator.target.toString() === user.toString();
15
16
  }
16
17
  return false;
17
18
  }
@@ -0,0 +1,26 @@
1
+ export function getRoutes(options = {}) {
2
+ const route = options.route || 'Home';
3
+ const routes = [];
4
+
5
+ routes.push({
6
+ parentName: route,
7
+ config: {
8
+ basePath: 'music',
9
+ routes: [
10
+ {
11
+ path: 'library',
12
+ name: 'music-library',
13
+ component: () => import(/* webpackChunkName: 'music-library' */ '../components/pages/MusicLibrary.vue'),
14
+ meta: {
15
+ title: 'My Library',
16
+ requiresAuth: true,
17
+ },
18
+ },
19
+ ],
20
+ },
21
+ });
22
+
23
+ return routes;
24
+ }
25
+
26
+ export default { getRoutes };
@@ -0,0 +1,176 @@
1
+ function createArtistRoutes() {
2
+ return [
3
+ {
4
+ path: 'artists/create',
5
+ name: 'artist-create',
6
+ component: () => import(/* webpackChunkName: 'music-artist-create' */ '../components/pages/ArtistCreate.vue'),
7
+ meta: {
8
+ title: 'Create Artist',
9
+ requiresAuth: true,
10
+ },
11
+ },
12
+ {
13
+ path: 'artists/:url/edit',
14
+ name: 'artist-edit',
15
+ component: () => import(/* webpackChunkName: 'music-artist-edit' */ '../components/pages/ArtistEdit.vue'),
16
+ props: true,
17
+ meta: {
18
+ title: 'Edit Artist',
19
+ requiresAuth: true,
20
+ },
21
+ },
22
+ {
23
+ path: 'artists/:url',
24
+ name: 'artist',
25
+ component: () => import(/* webpackChunkName: 'music-artist' */ '../components/pages/Artist.vue'),
26
+ props: true,
27
+ meta: {
28
+ title: 'Artist',
29
+ },
30
+ },
31
+ ];
32
+ }
33
+
34
+ function createAlbumRoutes() {
35
+ return [
36
+ {
37
+ path: 'albums/create',
38
+ name: 'album-create',
39
+ component: () => import(/* webpackChunkName: 'music-album-create' */ '../components/pages/AlbumCreate.vue'),
40
+ meta: {
41
+ title: 'Create Album',
42
+ requiresAuth: true,
43
+ },
44
+ },
45
+ {
46
+ path: 'albums/:url/edit',
47
+ name: 'album-edit',
48
+ component: () => import(/* webpackChunkName: 'music-album-edit' */ '../components/pages/AlbumEdit.vue'),
49
+ props: true,
50
+ meta: {
51
+ title: 'Edit Album',
52
+ requiresAuth: true,
53
+ },
54
+ },
55
+ {
56
+ path: 'albums/:url',
57
+ name: 'album',
58
+ component: () => import(/* webpackChunkName: 'music-album' */ '../components/pages/Album.vue'),
59
+ props: true,
60
+ meta: {
61
+ title: 'Album',
62
+ },
63
+ },
64
+ ];
65
+ }
66
+
67
+ function createTrackRoutes() {
68
+ return [
69
+ {
70
+ path: 'tracks/create',
71
+ name: 'track-create',
72
+ component: () => import(/* webpackChunkName: 'music-track-create' */ '../components/pages/TrackCreate.vue'),
73
+ meta: {
74
+ title: 'Create Track',
75
+ requiresAuth: true,
76
+ },
77
+ },
78
+ {
79
+ path: 'tracks/:url/edit',
80
+ name: 'track-edit',
81
+ component: () => import(/* webpackChunkName: 'music-track-edit' */ '../components/pages/TrackEdit.vue'),
82
+ props: true,
83
+ meta: {
84
+ title: 'Edit Track',
85
+ requiresAuth: true,
86
+ },
87
+ },
88
+ {
89
+ path: 'tracks/:url',
90
+ name: 'track',
91
+ component: () => import(/* webpackChunkName: 'music-track' */ '../components/pages/Track.vue'),
92
+ props: true,
93
+ meta: {
94
+ title: 'Track',
95
+ },
96
+ },
97
+ ];
98
+ }
99
+
100
+ function createPlaylistRoutes() {
101
+ return [
102
+ {
103
+ path: 'playlists/create',
104
+ name: 'playlist-create',
105
+ component: () => import(/* webpackChunkName: 'music-playlist-create' */ '../components/pages/PlaylistCreate.vue'),
106
+ meta: {
107
+ title: 'Create Playlist',
108
+ requiresAuth: true,
109
+ },
110
+ },
111
+ {
112
+ path: 'playlists/:url/edit',
113
+ name: 'playlist-edit',
114
+ component: () => import(/* webpackChunkName: 'music-playlist-edit' */ '../components/pages/PlaylistEdit.vue'),
115
+ props: true,
116
+ meta: {
117
+ title: 'Edit Playlist',
118
+ requiresAuth: true,
119
+ },
120
+ },
121
+ {
122
+ path: 'playlists/:url',
123
+ name: 'playlist',
124
+ component: () => import(/* webpackChunkName: 'music-playlist' */ '../components/pages/Playlist.vue'),
125
+ props: true,
126
+ meta: {
127
+ title: 'Playlist',
128
+ },
129
+ },
130
+ ];
131
+ }
132
+
133
+ function buildMusicRoutes() {
134
+ return [
135
+ {
136
+ path: '',
137
+ name: 'music-home',
138
+ component: () => import(/* webpackChunkName: 'music-home' */ '../components/pages/MusicHome.vue'),
139
+ meta: {
140
+ title: 'Music Home',
141
+ },
142
+ },
143
+ {
144
+ path: 'search',
145
+ name: 'music-search',
146
+ component: () => import(/* webpackChunkName: 'music-search' */ '../components/pages/SearchResults.vue'),
147
+ meta: {
148
+ title: 'Search Music',
149
+ },
150
+ },
151
+ ...createArtistRoutes(),
152
+ ...createAlbumRoutes(),
153
+ ...createTrackRoutes(),
154
+ ...createPlaylistRoutes(),
155
+ ];
156
+ }
157
+
158
+ export function getRoutes(options = {}) {
159
+ const route = options.route || 'Home';
160
+ const routes = [];
161
+
162
+ routes.push({
163
+ parentName: route,
164
+ config: {
165
+ basePath: options.basePath || 'music',
166
+ meta: {
167
+ player: options.playerComponent || (() => import(/* webpackChunkName: 'music-bottom-player' */ '../components/layouts/MusicBottomPlayer.vue')),
168
+ },
169
+ routes: buildMusicRoutes(options),
170
+ },
171
+ });
172
+
173
+ return routes;
174
+ }
175
+
176
+ export default { getRoutes };
@@ -119,33 +119,34 @@ export default function setupAlbumsRoutes(app, db) {
119
119
  handler: async (req, res) => {
120
120
  try {
121
121
  const limit = parseInt(req.query.limit) || 10;
122
-
123
- // Получаем рекомендуемые альбомы (можно добавить поле featured в модель)
124
- // Пока используем популярные недавние альбомы
122
+ const skip = parseInt(req.query.skip) || 0;
123
+ const sortParam = req.query.sortParam || 'releaseDate';
124
+ const sortOrder = req.query.sortOrder === 'asc' ? 1 : -1;
125
+
126
+ const sortObject = { [sortParam]: sortOrder };
127
+
125
128
  const featuredAlbums = await db.album
126
- .find({
127
- status: 'published',
128
- releaseDate: {
129
- $gte: new Date(Date.now() - 90 * 24 * 60 * 60 * 1000) // последние 90 дней
130
- }
129
+ .find({
130
+ status: 'published'
131
131
  })
132
132
  .populate('artists', 'name url photoUrl isVerified')
133
- .sort({ createdAt: -1 })
133
+ .sort(sortObject)
134
+ .skip(skip)
134
135
  .limit(limit);
135
136
 
136
137
  // Update totalTracks count for each album
137
138
  for (const album of featuredAlbums) {
138
- const trackCount = await db.track.countDocuments({
139
+ const trackCount = await db.track.countDocuments({
139
140
  album: album._id,
140
141
  status: 'published'
141
142
  });
142
-
143
+
143
144
  if (album.totalTracks !== trackCount) {
144
145
  album.totalTracks = trackCount;
145
146
  await album.save();
146
147
  }
147
148
  }
148
-
149
+
149
150
  res.json(featuredAlbums);
150
151
  } catch (error) {
151
152
  console.error(error);
@@ -49,6 +49,7 @@ export default function setupTracksRoutes(app, db) {
49
49
  tracksCRUD.policies.disableForAction('recent');
50
50
  tracksCRUD.policies.disableForAction('popular');
51
51
  tracksCRUD.policies.disableForAction('by-genre');
52
+ tracksCRUD.policies.disableForAction('related');
52
53
 
53
54
  // Перенос кастомных роутов через addAction для обратной совместимости
54
55
 
@@ -170,5 +171,43 @@ export default function setupTracksRoutes(app, db) {
170
171
  }
171
172
  });
172
173
 
174
+ // Get related tracks by track URL - /api/tracks/related/:trackUrl
175
+ tracksCRUD.addAction('related', {
176
+ method: 'get',
177
+ path: '/related/:trackUrl',
178
+ auth: false,
179
+ abac: { enabled: false },
180
+ handler: async (req, res) => {
181
+ try {
182
+ // Найти трек по URL
183
+ const track = await db.track.findOne({ url: req.params.trackUrl });
184
+
185
+ if (!track) {
186
+ return res.status(404).json({ error: 'Track not found' });
187
+ }
188
+
189
+ const limit = parseInt(req.query.limit) || 10;
190
+
191
+ // Получить другие треки этого же артиста
192
+ const relatedTracks = await db.track
193
+ .find({
194
+ artist: track.artist,
195
+ _id: { $ne: track._id }, // Исключить текущий трек
196
+ status: 'published',
197
+ isPublic: true,
198
+ })
199
+ .populate('artist', 'name url photoUrl isVerified')
200
+ .populate('album', 'title url coverArt')
201
+ .sort({ playCount: -1, releaseDate: -1 })
202
+ .limit(limit);
203
+
204
+ res.json(relatedTracks);
205
+ } catch (error) {
206
+ console.error(error);
207
+ res.status(500).json({ error: error.message });
208
+ }
209
+ }
210
+ });
211
+
173
212
  return tracksCRUD;
174
213
  }
@@ -32,10 +32,18 @@ export const actions = {
32
32
  }
33
33
  },
34
34
 
35
- async fetchFeaturedAlbums() {
35
+ async fetchFeaturedAlbums(options = {}) {
36
36
  state.loadingFeatured = true;
37
37
  try {
38
- const response = await fetch(`${process.env.API_URL}/api/albums/featured`);
38
+ const queryParams = new URLSearchParams();
39
+
40
+ if (options.limit) queryParams.append('limit', options.limit);
41
+ if (options.skip) queryParams.append('skip', options.skip);
42
+ if (options.sortParam) queryParams.append('sortParam', options.sortParam);
43
+ if (options.sortOrder) queryParams.append('sortOrder', options.sortOrder);
44
+
45
+ const url = `${process.env.API_URL}/api/albums/featured${queryParams.toString() ? '?' + queryParams.toString() : ''}`;
46
+ const response = await fetch(url);
39
47
  const albums = await response.json();
40
48
  state.featured = albums;
41
49
  return albums;