@ozdao/martyrs 0.2.492 → 0.2.493

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 (340) hide show
  1. package/dist/_virtual/index.cjs +4 -4
  2. package/dist/_virtual/index.js +4 -4
  3. package/dist/_virtual/index2.cjs +4 -4
  4. package/dist/_virtual/index2.js +4 -4
  5. package/dist/builder.cjs +52 -45
  6. package/dist/builder.js +53 -46
  7. package/dist/{crud-B-kQw3Z5.cjs → crud-JN_LFj01.cjs} +3 -0
  8. package/dist/{crud-Cwx5VlSm.js → crud-sE7GLPbj.js} +3 -0
  9. package/dist/globals.server.cjs +322 -3
  10. package/dist/globals.server.js +303 -1
  11. package/dist/{globals.verifier-D68mHEBl.cjs → globals.verifier-C0zj_LLo.cjs} +8 -1
  12. package/dist/{globals.verifier-CWFz5Gh2.js → globals.verifier-DFqKQ7hK.js} +8 -1
  13. package/dist/inventory.server.cjs +2 -2
  14. package/dist/inventory.server.js +2 -2
  15. package/dist/{main-SZQ1QjeP.js → main-CJm5myDI.js} +631 -607
  16. package/dist/{main-MzmGbSxs.cjs → main-DTaE01lg.cjs} +6 -6
  17. package/dist/martyrs/src/components/Calendar/Calendar.vue2.cjs +1 -1
  18. package/dist/martyrs/src/components/Calendar/Calendar.vue2.cjs.map +1 -1
  19. package/dist/martyrs/src/components/Calendar/Calendar.vue2.js +1 -1
  20. package/dist/martyrs/src/components/Calendar/Calendar.vue2.js.map +1 -1
  21. package/dist/martyrs/src/components/Feed/Feed.vue.cjs +33 -7
  22. package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
  23. package/dist/martyrs/src/components/Feed/Feed.vue.js +33 -7
  24. package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
  25. package/dist/martyrs/src/components/Field/{Field.vue2.cjs → Field.vue.cjs} +2 -2
  26. package/dist/martyrs/src/components/Field/{Field.vue2.js.map → Field.vue.cjs.map} +1 -1
  27. package/dist/martyrs/src/components/Field/{Field.vue2.js → Field.vue.js} +2 -2
  28. package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -0
  29. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +1 -1
  30. package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +1 -1
  31. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +1 -1
  32. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +1 -1
  33. package/dist/martyrs/src/components/Menu/{Menu.vue.cjs → Menu.vue2.cjs} +2 -2
  34. package/dist/martyrs/src/components/Menu/Menu.vue2.cjs.map +1 -0
  35. package/dist/martyrs/src/components/Menu/{Menu.vue.js → Menu.vue2.js} +2 -2
  36. package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +1 -0
  37. package/dist/martyrs/src/components/Menu/MenuItem.vue.js +2 -2
  38. package/dist/martyrs/src/components/Menu/MenuItem.vue.js.map +1 -1
  39. package/dist/martyrs/src/components/PhotoViewer/PhotoViewer.vue.js +4 -4
  40. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs +1 -1
  41. package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +1 -1
  42. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +1 -1
  43. package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
  44. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +1 -1
  45. package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
  46. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +2 -2
  47. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +2 -2
  48. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +1 -1
  49. package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +1 -1
  50. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +1 -1
  51. package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
  52. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +1 -1
  53. package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
  54. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +1 -1
  55. package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
  56. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.cjs +1 -1
  57. package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +1 -1
  58. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +2 -2
  59. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +2 -2
  60. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.cjs +1 -1
  61. package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +1 -1
  62. package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.cjs +1 -1
  63. package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.js +1 -1
  64. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
  65. package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
  66. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
  67. package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
  68. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +1 -1
  69. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +1 -1
  70. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
  71. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
  72. package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
  73. package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
  74. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.cjs +1 -1
  75. package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.js +1 -1
  76. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +5 -1
  77. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs.map +1 -1
  78. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +5 -1
  79. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js.map +1 -1
  80. package/dist/martyrs/src/modules/icons/entities/IconTime.vue.cjs +2 -2
  81. package/dist/martyrs/src/modules/icons/entities/IconTime.vue.js +2 -2
  82. package/dist/martyrs/src/modules/icons/navigation/IconChevronLeft.vue.cjs +2 -2
  83. package/dist/martyrs/src/modules/icons/navigation/IconChevronLeft.vue.js +2 -2
  84. package/dist/martyrs/src/modules/icons/navigation/IconChevronRight.vue.cjs +2 -2
  85. package/dist/martyrs/src/modules/icons/navigation/IconChevronRight.vue.js +2 -2
  86. package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js +6 -6
  87. package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js.map +1 -1
  88. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +1 -1
  89. package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +1 -1
  90. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +1 -1
  91. package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +1 -1
  92. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +1 -1
  93. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +1 -1
  94. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
  95. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +22 -15
  96. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs.map +1 -1
  97. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +23 -16
  98. package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js.map +1 -1
  99. package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.cjs +2 -2
  100. package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.cjs.map +1 -1
  101. package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js +2 -2
  102. package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js.map +1 -1
  103. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +31 -13
  104. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs.map +1 -1
  105. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +33 -15
  106. package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js.map +1 -1
  107. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +39 -22
  108. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs.map +1 -1
  109. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +39 -22
  110. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js.map +1 -1
  111. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +1 -1
  112. package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
  113. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +1 -1
  114. package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
  115. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +385 -125
  116. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs.map +1 -1
  117. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +391 -131
  118. package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js.map +1 -1
  119. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +24 -7
  120. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs.map +1 -1
  121. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +25 -8
  122. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js.map +1 -1
  123. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +99 -87
  124. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs.map +1 -1
  125. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +111 -99
  126. package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js.map +1 -1
  127. package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.cjs +21 -0
  128. package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.cjs.map +1 -0
  129. package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js +21 -0
  130. package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js.map +1 -0
  131. package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +442 -210
  132. package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs.map +1 -1
  133. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +445 -213
  134. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -1
  135. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +92 -117
  136. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs.map +1 -1
  137. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +93 -118
  138. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js.map +1 -1
  139. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.cjs +72 -113
  140. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.cjs.map +1 -1
  141. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js +78 -119
  142. package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js.map +1 -1
  143. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +15 -12
  144. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs.map +1 -1
  145. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +15 -12
  146. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js.map +1 -1
  147. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +558 -429
  148. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs.map +1 -1
  149. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +560 -431
  150. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -1
  151. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +146 -284
  152. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs.map +1 -1
  153. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +149 -287
  154. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js.map +1 -1
  155. package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +460 -63
  156. package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs.map +1 -1
  157. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +462 -65
  158. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -1
  159. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +126 -136
  160. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs.map +1 -1
  161. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +129 -139
  162. package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js.map +1 -1
  163. package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.cjs +18 -15
  164. package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.cjs.map +1 -1
  165. package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.js +18 -15
  166. package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.js.map +1 -1
  167. package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.cjs +28 -23
  168. package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.cjs.map +1 -1
  169. package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +29 -24
  170. package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js.map +1 -1
  171. package/dist/martyrs/src/modules/music/music.client.cjs +3 -6
  172. package/dist/martyrs/src/modules/music/music.client.cjs.map +1 -1
  173. package/dist/martyrs/src/modules/music/music.client.js +9 -12
  174. package/dist/martyrs/src/modules/music/music.client.js.map +1 -1
  175. package/dist/martyrs/src/modules/music/router/music.cjs +27 -1
  176. package/dist/martyrs/src/modules/music/router/music.cjs.map +1 -1
  177. package/dist/martyrs/src/modules/music/router/music.js +27 -1
  178. package/dist/martyrs/src/modules/music/router/music.js.map +1 -1
  179. package/dist/martyrs/src/modules/music/store/artists.cjs +6 -4
  180. package/dist/martyrs/src/modules/music/store/artists.cjs.map +1 -1
  181. package/dist/martyrs/src/modules/music/store/artists.js +6 -4
  182. package/dist/martyrs/src/modules/music/store/artists.js.map +1 -1
  183. package/dist/martyrs/src/modules/music/store/player.cjs +5 -0
  184. package/dist/martyrs/src/modules/music/store/player.cjs.map +1 -1
  185. package/dist/martyrs/src/modules/music/store/player.js +5 -0
  186. package/dist/martyrs/src/modules/music/store/player.js.map +1 -1
  187. package/dist/martyrs/src/modules/music/store/tracks.cjs +22 -0
  188. package/dist/martyrs/src/modules/music/store/tracks.cjs.map +1 -1
  189. package/dist/martyrs/src/modules/music/store/tracks.js +22 -0
  190. package/dist/martyrs/src/modules/music/store/tracks.js.map +1 -1
  191. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js +2 -2
  192. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +2 -2
  193. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +1 -1
  194. package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
  195. package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.cjs +1 -1
  196. package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.js +1 -1
  197. package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.cjs +1 -1
  198. package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.js +1 -1
  199. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +1 -1
  200. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
  201. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +2 -2
  202. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
  203. package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +1 -1
  204. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +1 -1
  205. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +1 -1
  206. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +1 -1
  207. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +1 -1
  208. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +1 -1
  209. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
  210. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
  211. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +1 -1
  212. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
  213. package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -1
  214. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
  215. package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
  216. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
  217. package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
  218. package/dist/martyrs/src/modules/organizations/router/organizations.cjs +1 -1
  219. package/dist/martyrs/src/modules/organizations/router/organizations.js +1 -1
  220. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -1
  221. package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
  222. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -1
  223. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
  224. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +1 -1
  225. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +1 -1
  226. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
  227. package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
  228. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +1 -1
  229. package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
  230. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +1 -1
  231. package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
  232. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +1 -1
  233. package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +1 -1
  234. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.cjs +4 -3
  235. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.cjs.map +1 -1
  236. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.js +4 -3
  237. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.js.map +1 -1
  238. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.cjs +37 -70
  239. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.cjs.map +1 -1
  240. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.js +38 -71
  241. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.js.map +1 -1
  242. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +2 -1
  243. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs.map +1 -1
  244. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +6 -5
  245. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js.map +1 -1
  246. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs +45 -52
  247. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs.map +1 -1
  248. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +46 -53
  249. package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js.map +1 -1
  250. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.cjs +1 -1
  251. package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +1 -1
  252. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +1 -1
  253. package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
  254. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
  255. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  256. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +1 -1
  257. package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +1 -1
  258. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +1 -1
  259. package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
  260. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.cjs +1 -1
  261. package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +1 -1
  262. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
  263. package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +1 -1
  264. package/dist/martyrs.cjs.js +1 -1
  265. package/dist/martyrs.css +1 -1
  266. package/dist/martyrs.es.js +1 -1
  267. package/dist/music.server.cjs +124 -31
  268. package/dist/music.server.js +124 -31
  269. package/dist/organizations.server.cjs +1 -1
  270. package/dist/organizations.server.js +1 -1
  271. package/dist/products.server.cjs +2 -2
  272. package/dist/products.server.js +2 -2
  273. package/dist/rents.server.cjs +3 -3
  274. package/dist/rents.server.js +3 -3
  275. package/dist/style.css +373 -80
  276. package/dist/{web-D7lZjuC0.js → web-Dkk0_7TA.js} +1 -1
  277. package/dist/{web-D-YZ9KHz.cjs → web-stVkXd0l.cjs} +1 -1
  278. package/package.json +1 -1
  279. package/src/builder/modes/ssr.prod.js +21 -5
  280. package/src/builder/rspack/rspack.config.ssr.client.js +40 -40
  281. package/src/components/Calendar/Calendar.vue +378 -377
  282. package/src/components/Feed/Feed.vue +28 -2
  283. package/src/modules/globals/controllers/classes/crud/crud.policies.js +5 -0
  284. package/src/modules/globals/controllers/classes/globals.validator.js +8 -1
  285. package/src/modules/globals/views/components/layouts/Client.vue +7 -0
  286. package/src/modules/music/README.md +8 -0
  287. package/src/modules/music/components/SidebarMusic.vue +6 -9
  288. package/src/modules/music/components/cards/AlbumCard.vue +20 -14
  289. package/src/modules/music/components/cards/ArtistCard.vue +1 -1
  290. package/src/modules/music/components/cards/PlaylistCard.vue +31 -11
  291. package/src/modules/music/components/cards/TrackListCard.vue +24 -13
  292. package/src/modules/music/components/forms/PlaylistForm.vue +417 -107
  293. package/src/modules/music/components/forms/SearchForm.vue +31 -8
  294. package/src/modules/music/components/forms/TrackForm.vue +50 -32
  295. package/src/modules/music/components/layouts/MusicBottomPlayer.vue +17 -0
  296. package/src/modules/music/components/pages/Album.vue +373 -186
  297. package/src/modules/music/components/pages/Artist.vue +54 -94
  298. package/src/modules/music/components/pages/MusicHome.vue +59 -56
  299. package/src/modules/music/components/pages/MusicLibrary.vue +13 -11
  300. package/src/modules/music/components/pages/Playlist.vue +495 -379
  301. package/src/modules/music/components/pages/SearchResults.vue +185 -313
  302. package/src/modules/music/components/pages/Track.vue +363 -69
  303. package/src/modules/music/components/player/MusicPlayer.vue +368 -97
  304. package/src/modules/music/components/player/TrackProgress.vue +76 -22
  305. package/src/modules/music/components/player/VolumeControl.vue +61 -28
  306. package/src/modules/music/controllers/search.controller.js +3 -0
  307. package/src/modules/music/controllers/stream.controller.js +11 -3
  308. package/src/modules/music/middlewares/playlists.verifier.js +1 -1
  309. package/src/modules/music/music.client.js +3 -6
  310. package/src/modules/music/music.server.js +8 -4
  311. package/src/modules/music/router/music.js +8 -1
  312. package/src/modules/music/routes/albums.routes.js +37 -5
  313. package/src/modules/music/routes/artists.routes.js +14 -4
  314. package/src/modules/music/routes/genres.routes.js +5 -1
  315. package/src/modules/music/routes/playlists.routes.js +42 -9
  316. package/src/modules/music/routes/tracks.routes.js +27 -2
  317. package/src/modules/music/store/artists.js +6 -2
  318. package/src/modules/music/store/player.js +6 -0
  319. package/src/modules/music/store/tracks.js +31 -0
  320. package/src/modules/music/websocket/streaming.handler.js +7 -1
  321. package/src/modules/rents/controllers/services/rents.services.js +2 -2
  322. package/src/modules/rents/views/components/pages/Gant/GanttBar.vue +4 -3
  323. package/src/modules/rents/views/components/pages/Gant/GanttChart.vue +42 -40
  324. package/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue +3 -1
  325. package/src/modules/rents/views/components/pages/Rents.vue +60 -56
  326. package/dist/globals.websocket-DzvdIBf6.js +0 -306
  327. package/dist/globals.websocket-k6_B1T7k.cjs +0 -322
  328. package/dist/martyrs/src/components/Field/Field.vue2.cjs.map +0 -1
  329. package/dist/martyrs/src/components/Menu/Menu.vue.cjs.map +0 -1
  330. package/dist/martyrs/src/components/Menu/Menu.vue.js.map +0 -1
  331. package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.cjs +0 -69
  332. package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.cjs.map +0 -1
  333. package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.js +0 -69
  334. package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.js.map +0 -1
  335. package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs +0 -104
  336. package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs.map +0 -1
  337. package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js +0 -104
  338. package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js.map +0 -1
  339. package/src/modules/music/components/cards/TrackCard.vue +0 -86
  340. package/src/modules/music/components/layouts/MusicLayout.vue +0 -83
@@ -1,14 +1,14 @@
1
1
  <!-- components/pages/SearchResults.vue -->
2
2
  <template>
3
- <div class="search-results-page">
3
+ <div class="search-results-page pd-medium">
4
4
  <div class="search-header mn-b-medium">
5
- <h1 class=" mn-b-small">Search</h1>
5
+ <h1 class="mn-b-small">Search</h1>
6
6
 
7
- <SearchForm
8
- :initialQuery="searchQuery"
7
+ <BlockSearch
8
+ :placeholder="'What do you want to listen to?'"
9
+ class="bg-light w-m-40r"
9
10
  @search="handleSearch"
10
- placeholder="What do you want to listen to?"
11
- class="w-m-40r"
11
+ :autofocus="true"
12
12
  />
13
13
 
14
14
  <div v-if="searchQuery" class="search-filters flex gap-small mn-t-medium">
@@ -17,7 +17,7 @@
17
17
  :key="filter.id"
18
18
  @click="setActiveFilter(filter.id)"
19
19
  :class="[
20
- filter.id === activeFilter ? 'bg-white t-black' : 'bg-dark-transp-50 hover-bg-dark',
20
+ filter.id === activeFilter ? 'bg-white t-black' : 'bg-dark-transp-50 hover-bg-dark',
21
21
  ]"
22
22
  class="radius-extra pd-small"
23
23
  :showLoader="false"
@@ -37,192 +37,127 @@
37
37
  </div>
38
38
 
39
39
  <div v-else-if="!searchQuery" class="search-empty t-center pd-big">
40
- <h2 class=" mn-b-small">Search for music</h2>
41
- <p class="t-grey t-medium">Find your favorite songs, artists, albums, and playlists</p>
40
+ <h2 class="mn-b-small">Search for music</h2>
41
+ <p class="t-transp t-medium">Find your favorite songs, artists, albums, and playlists</p>
42
42
  </div>
43
43
 
44
44
  <div v-else-if="!hasResults" class="search-no-results t-center pd-big">
45
- <h2 class=" mn-b-small">No results found for "{{ searchQuery }}"</h2>
46
- <p class="t-grey t-medium">Please try different keywords or check your spelling</p>
45
+ <h2 class="mn-b-small">No results found for "{{ searchQuery }}"</h2>
46
+ <p class="t-transp t-medium">Please try different keywords or check your spelling</p>
47
47
  </div>
48
48
 
49
49
  <div v-else class="search-results">
50
- <!-- Top Results Section -->
51
- <section v-if="activeFilter === 'all'" class="search-section mn-b-medium">
52
- <h2 class=" mn-b-small">Top Result</h2>
53
-
54
- <div class="search-top-result bg-dark-transp-20 radius-medium p-medium">
55
- <div v-if="topResult.type === 'artist'" class="top-result-artist pd-medium">
56
- <div class="top-artist-photo mn-b-medium">
57
- <Media
58
- :url="topResult.item.photoUrl || '/assets/placeholder-artist.jpg'"
59
- class="w-10r h-10r object-fit-cover radius-round"
60
- />
61
- </div>
62
- <h3 class=" t-semi">{{ topResult.item.name }}</h3>
63
- <p class="t-grey">Artist</p>
64
- <Button
65
- @click="playTopResult"
66
- class="bg-main radius-round pd-small mn-t-medium hover-scale-1"
67
- :showLoader="false"
68
- :showSucces="false"
69
- >
70
- PLAY
71
- </Button>
72
- </div>
73
-
74
- <div v-else-if="topResult.type === 'album'" class="top-result-album pd-medium">
75
- <div class="top-album-cover mn-b-medium">
76
- <Media
77
- :url="topResult.item.coverUrl || '/assets/placeholder-album.jpg'"
78
- class="w-10r h-10r object-fit-cover radius-small"
79
- />
80
- </div>
81
- <h3 class=" t-semi">{{ topResult.item.title }}</h3>
82
- <p class="t-grey">Album • {{ getArtistName(topResult.item) }}</p>
83
- <Button
84
- @click="playTopResult"
85
- class="bg-main radius-round pd-small mn-t-medium hover-scale-1"
86
- :showLoader="false"
87
- :showSucces="false"
88
- >
89
- PLAY
90
- </Button>
91
- </div>
92
-
93
- <div v-else-if="topResult.type === 'playlist'" class="top-result-playlist pd-medium">
94
- <div class="top-playlist-cover mn-b-medium">
95
- <Media
96
- :url="topResult.item.coverUrl || '/assets/placeholder-playlist.jpg'"
97
- class="w-10r h-10r object-fit-cover radius-small"
98
- />
99
- </div>
100
- <h3 class=" t-semi">{{ topResult.item.title }}</h3>
101
- <p class="t-grey">Playlist • {{ getPlaylistOwner(topResult.item) }}</p>
102
- <Button
103
- @click="playTopResult"
104
- class="bg-main radius-round pd-small mn-t-medium hover-scale-1"
105
- :showLoader="false"
106
- :showSucces="false"
107
- >
108
- PLAY
109
- </Button>
110
- </div>
111
- </div>
112
- </section>
113
-
114
50
  <!-- Songs Results -->
115
- <section v-if="activeFilter === 'all' || activeFilter === 'tracks'" class="search-section mn-b-medium">
116
- <h2 class=" mn-b-small">Songs</h2>
117
- <Feed
118
- :store="{
119
- read: () => Promise.resolve(trackResults),
120
- state: { isLoading: false }
121
- }"
122
- :external="true"
123
- :items="trackResults"
124
- :states="{
125
- empty: {
126
- title: 'No tracks found',
127
- description: 'Try different search terms',
128
- class: 'pd-medium bg-dark-transp-10 radius-medium'
129
- }
130
- }"
131
- class="gap-thin"
132
- >
133
- <template #default="{ items }">
134
- <TrackCard
135
- v-for="track in items"
136
- :key="track._id"
137
- :track="track"
138
- :showAlbum="true"
139
- :showCover="true"
140
- class="w-100 bg-dark-transp-10 radius-medium"
141
- />
142
- </template>
143
- </Feed>
51
+ <section v-if="(activeFilter === 'all' || activeFilter === 'tracks') && trackResults.length > 0" class="search-section mn-b-medium">
52
+ <div class="flex-between flex mn-b-small">
53
+ <h2 class="">Songs</h2>
54
+ <Button
55
+ v-if="trackResults.length > 5 && activeFilter === 'all'"
56
+ @click="setActiveFilter('tracks')"
57
+ class="t-main bg-transparent border-none hover-bg-dark-transp-10 pd-thin"
58
+ :showLoader="false"
59
+ :showSucces="false"
60
+ >
61
+ See all
62
+ </Button>
63
+ </div>
144
64
 
145
- <Button
146
- v-if="trackResults.length > 4 && activeFilter === 'all'"
147
- @click="setActiveFilter('tracks')"
148
- class="t-main bg-transparent border-none t-center w-100 mn-t-small hover-bg-dark-transp-10 pd-thin"
149
- :showLoader="false"
150
- :showSucces="false"
151
- >
152
- See all songs
153
- </Button>
65
+ <div class="bg-light radius-medium o-hidden">
66
+ <TrackListCard
67
+ v-for="(track, index) in (activeFilter === 'all' ? trackResults.slice(0, 5) : trackResults)"
68
+ :key="track._id"
69
+ :track="track"
70
+ :index="index"
71
+ :showAlbum="true"
72
+ :showCover="true"
73
+ />
74
+ </div>
154
75
  </section>
155
76
 
156
77
  <!-- Artists Results -->
157
- <section v-if="activeFilter === 'all' || activeFilter === 'artists'" class="search-section mn-b-medium">
158
- <h2 class=" mn-b-small">Artists</h2>
78
+ <section v-if="(activeFilter === 'all' || activeFilter === 'artists') && artistResults.length > 0" class="search-section mn-b-medium">
79
+ <div class="flex-between flex mn-b-small">
80
+ <h2 class="">Artists</h2>
81
+ <Button
82
+ v-if="artistResults.length > 6 && activeFilter === 'all'"
83
+ @click="setActiveFilter('artists')"
84
+ class="t-main bg-transparent border-none hover-bg-dark-transp-10 pd-thin"
85
+ :showLoader="false"
86
+ :showSucces="false"
87
+ >
88
+ See all
89
+ </Button>
90
+ </div>
159
91
 
160
92
  <div class="artists-grid cols-6 mobile:cols-3 gap-small">
161
- <div v-for="artist in artistResults.slice(0, activeFilter === 'all' ? 6 : artistResults.length)" :key="artist._id">
93
+ <div v-for="artist in (activeFilter === 'all' ? artistResults.slice(0, 6) : artistResults)" :key="artist._id">
162
94
  <ArtistCard :artist="artist" />
163
95
  </div>
164
96
  </div>
165
-
166
- <Button
167
- v-if="artistResults.length > 6 && activeFilter === 'all'"
168
- @click="setActiveFilter('artists')"
169
- class="t-main bg-transparent border-none t-center w-100 mn-t-small hover-bg-dark-transp-10 pd-thin"
170
- :showLoader="false"
171
- :showSucces="false"
172
- >
173
- See all artists
174
- </Button>
175
97
  </section>
176
98
 
177
99
  <!-- Albums Results -->
178
- <section v-if="activeFilter === 'all' || activeFilter === 'albums'" class="search-section mn-b-medium">
179
- <h2 class=" mn-b-small">Albums</h2>
100
+ <section v-if="(activeFilter === 'all' || activeFilter === 'albums') && albumResults.length > 0" class="search-section mn-b-medium">
101
+ <div class="flex-between flex mn-b-small">
102
+ <h2 class="">Albums</h2>
103
+ <Button
104
+ v-if="albumResults.length > 5 && activeFilter === 'all'"
105
+ @click="setActiveFilter('albums')"
106
+ class="t-main bg-transparent border-none hover-bg-dark-transp-10 pd-thin"
107
+ :showLoader="false"
108
+ :showSucces="false"
109
+ >
110
+ See all
111
+ </Button>
112
+ </div>
180
113
 
181
114
  <div class="albums-grid cols-5 mobile:cols-2 gap-small">
182
- <div v-for="album in albumResults.slice(0, activeFilter === 'all' ? 5 : albumResults.length)" :key="album._id">
115
+ <div v-for="album in (activeFilter === 'all' ? albumResults.slice(0, 5) : albumResults)" :key="album._id">
183
116
  <AlbumCard :album="album" />
184
117
  </div>
185
118
  </div>
186
-
187
- <Button
188
- v-if="albumResults.length > 5 && activeFilter === 'all'"
189
- @click="setActiveFilter('albums')"
190
- class="t-main bg-transparent border-none t-center w-100 mn-t-small hover-bg-dark-transp-10 pd-thin"
191
- :showLoader="false"
192
- :showSucces="false"
193
- >
194
- See all albums
195
- </Button>
196
119
  </section>
197
120
 
198
121
  <!-- Playlists Results -->
199
- <section v-if="activeFilter === 'all' || activeFilter === 'playlists'" class="search-section mn-b-medium">
200
- <h2 class=" mn-b-small">Playlists</h2>
122
+ <section v-if="(activeFilter === 'all' || activeFilter === 'playlists') && playlistResults.length > 0" class="search-section mn-b-medium">
123
+ <div class="flex-between flex mn-b-small">
124
+ <h2 class="">Playlists</h2>
125
+ <Button
126
+ v-if="playlistResults.length > 5 && activeFilter === 'all'"
127
+ @click="setActiveFilter('playlists')"
128
+ class="t-main bg-transparent border-none hover-bg-dark-transp-10 pd-thin"
129
+ :showLoader="false"
130
+ :showSucces="false"
131
+ >
132
+ See all
133
+ </Button>
134
+ </div>
201
135
 
202
136
  <div class="playlists-grid cols-5 mobile:cols-2 gap-small">
203
- <div v-for="playlist in playlistResults.slice(0, activeFilter === 'all' ? 5 : playlistResults.length)" :key="playlist._id">
137
+ <div v-for="playlist in (activeFilter === 'all' ? playlistResults.slice(0, 5) : playlistResults)" :key="playlist._id">
204
138
  <PlaylistCard :playlist="playlist" />
205
139
  </div>
206
140
  </div>
207
-
208
- <Button
209
- v-if="playlistResults.length > 5 && activeFilter === 'all'"
210
- @click="setActiveFilter('playlists')"
211
- class="t-main bg-transparent border-none t-center w-100 mn-t-small hover-bg-dark-transp-10 pd-thin"
212
- :showLoader="false"
213
- :showSucces="false"
214
- >
215
- See all playlists
216
- </Button>
217
141
  </section>
218
142
 
219
143
  <!-- Genres Results -->
220
144
  <section v-if="(activeFilter === 'all' || activeFilter === 'genres') && genreResults.length > 0" class="search-section">
221
- <h2 class=" mn-b-small">Genres</h2>
145
+ <div class="flex-between flex mn-b-small">
146
+ <h2 class="">Genres</h2>
147
+ <Button
148
+ v-if="genreResults.length > 4 && activeFilter === 'all'"
149
+ @click="setActiveFilter('genres')"
150
+ class="t-main bg-transparent border-none hover-bg-dark-transp-10 pd-thin"
151
+ :showLoader="false"
152
+ :showSucces="false"
153
+ >
154
+ See all
155
+ </Button>
156
+ </div>
222
157
 
223
158
  <div class="genres-grid cols-4 mobile:cols-2 gap-small">
224
159
  <router-link
225
- v-for="genre in genreResults.slice(0, activeFilter === 'all' ? 4 : genreResults.length)"
160
+ v-for="genre in (activeFilter === 'all' ? genreResults.slice(0, 4) : genreResults)"
226
161
  :key="genre._id"
227
162
  :to="{ name: 'genre-detail', params: { url: genre.url } }"
228
163
  class="genre-card bg-gradient-color pd-medium radius-medium t-center hover-scale-1 transition-cubic-in-out"
@@ -233,85 +168,64 @@
233
168
  <h3 class="">{{ genre.name }}</h3>
234
169
  </router-link>
235
170
  </div>
236
-
237
- <Button
238
- v-if="genreResults.length > 4 && activeFilter === 'all'"
239
- @click="setActiveFilter('genres')"
240
- class="t-main bg-transparent border-none t-center w-100 mn-t-small hover-bg-dark-transp-10 pd-thin"
241
- :showLoader="false"
242
- :showSucces="false"
243
- >
244
- See all genres
245
- </Button>
246
171
  </section>
247
172
  </div>
248
173
  </div>
249
- </template>
174
+ </template>
250
175
 
251
- <script setup>
252
- import { ref, computed, onMounted, watch } from 'vue';
253
- import { useRoute, useRouter } from 'vue-router';
254
- import SearchForm from '../forms/SearchForm.vue';
255
- import Feed from '@martyrs/src/components/Feed/Feed.vue';
256
- import TrackCard from '../cards/TrackCard.vue';
257
- import AlbumCard from '../cards/AlbumCard.vue';
258
- import PlaylistCard from '../cards/PlaylistCard.vue';
259
- import ArtistCard from '../cards/ArtistCard.vue';
260
- import Button from '@martyrs/src/components/Button/Button.vue';
261
- import Loader from '@martyrs/src/components/Loader/Loader.vue';
262
- import Media from '@martyrs/src/components/Media/Media.vue';
176
+ <script setup>
177
+ import { ref, computed, onMounted, watch } from 'vue';
178
+ import { useRoute, useRouter } from 'vue-router';
179
+ import BlockSearch from '@martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue';
180
+ import TrackListCard from '../cards/TrackListCard.vue';
181
+ import AlbumCard from '../cards/AlbumCard.vue';
182
+ import PlaylistCard from '../cards/PlaylistCard.vue';
183
+ import ArtistCard from '../cards/ArtistCard.vue';
184
+ import Button from '@martyrs/src/components/Button/Button.vue';
185
+ import Loader from '@martyrs/src/components/Loader/Loader.vue';
263
186
 
264
- // Import search store
265
- import { state as searchState, actions as searchActions, computed as searchComputed } from '../../store/search.js';
266
- import { actions as playerActions } from '../../store/player.js';
187
+ // Import search store
188
+ import { state as searchState, actions as searchActions } from '../../store/search.js';
267
189
 
268
- const route = useRoute();
269
- const router = useRouter();
190
+ const route = useRoute();
191
+ const router = useRouter();
270
192
 
271
- // State
272
- const searchQuery = ref('');
273
- const activeFilter = ref('all');
193
+ // State
194
+ const searchQuery = ref('');
195
+ const activeFilter = ref('all');
274
196
 
275
- // Array of search filters
276
- const searchFilters = [
277
- { id: 'all', label: 'All' },
278
- { id: 'tracks', label: 'Songs' },
279
- { id: 'artists', label: 'Artists' },
280
- { id: 'albums', label: 'Albums' },
281
- { id: 'playlists', label: 'Playlists' },
282
- { id: 'genres', label: 'Genres' }
283
- ];
197
+ // Array of search filters
198
+ const searchFilters = [
199
+ { id: 'all', label: 'All' },
200
+ { id: 'tracks', label: 'Songs' },
201
+ { id: 'artists', label: 'Artists' },
202
+ { id: 'albums', label: 'Albums' },
203
+ { id: 'playlists', label: 'Playlists' },
204
+ { id: 'genres', label: 'Genres' }
205
+ ];
284
206
 
285
- // Computed properties
286
- const isLoading = computed(() => searchState.isLoading);
287
- const searchError = computed(() => searchState.error);
288
- const hasResults = computed(() => searchComputed.hasResults());
207
+ // Computed properties
208
+ const isLoading = computed(() => searchState.isLoading);
209
+ const searchError = computed(() => searchState.error);
210
+ const hasResults = computed(() => {
211
+ return trackResults.value.length > 0 ||
212
+ artistResults.value.length > 0 ||
213
+ albumResults.value.length > 0 ||
214
+ playlistResults.value.length > 0 ||
215
+ genreResults.value.length > 0;
216
+ });
289
217
 
290
- const trackResults = computed(() => searchState.results.tracks || []);
291
- const artistResults = computed(() => searchState.results.artists || []);
292
- const albumResults = computed(() => searchState.results.albums || []);
293
- const playlistResults = computed(() => searchState.results.playlists || []);
294
- const genreResults = computed(() => searchState.results.genres || []);
218
+ const trackResults = computed(() => searchState.results.tracks || []);
219
+ const artistResults = computed(() => searchState.results.artists || []);
220
+ const albumResults = computed(() => searchState.results.albums || []);
221
+ const playlistResults = computed(() => searchState.results.playlists || []);
222
+ const genreResults = computed(() => searchState.results.genres || []);
295
223
 
296
- // Top result determination
297
- const topResult = computed(() => {
298
- // Determine which result to show as top result based on relevance
299
- if (artistResults.value.length > 0) {
300
- return { type: 'artist', item: artistResults.value[0] };
301
- } else if (albumResults.value.length > 0) {
302
- return { type: 'album', item: albumResults.value[0] };
303
- } else if (playlistResults.value.length > 0) {
304
- return { type: 'playlist', item: playlistResults.value[0] };
305
- } else if (trackResults.value.length > 0) {
306
- return { type: 'track', item: trackResults.value[0] };
307
- }
308
- return null;
309
- });
310
-
311
- // Methods
312
- const handleSearch = (query) => {
313
- searchQuery.value = query;
314
-
224
+ // Methods
225
+ const handleSearch = (query) => {
226
+ searchQuery.value = query;
227
+
228
+ if (query.trim()) {
315
229
  // Update URL without reloading the page
316
230
  router.push({
317
231
  name: 'music-search',
@@ -321,99 +235,57 @@
321
235
 
322
236
  // Perform search
323
237
  searchActions.search(query);
324
- };
325
-
326
- const setActiveFilter = (filter) => {
327
- activeFilter.value = filter;
328
- searchActions.setFilter(filter);
329
- };
330
-
331
- const playTopResult = () => {
332
- if (!topResult.value) return;
333
-
334
- const { type, item } = topResult.value;
335
-
336
- switch (type) {
337
- case 'track':
338
- playerActions.playTrack(item);
339
- break;
340
- case 'album':
341
- // Navigate to album page
342
- router.push({ name: 'album', params: { url: item.url } });
343
- break;
344
- case 'playlist':
345
- // Navigate to playlist page
346
- router.push({ name: 'playlist', params: { url: item.url } });
347
- break;
348
- case 'artist':
349
- // Navigate to artist page
350
- router.push({ name: 'artist', params: { url: item.url } });
351
- break;
352
- }
353
- };
354
-
355
- const getArtistName = (item) => {
356
- if (!item) return 'Unknown Artist';
357
-
358
- if (item.artist) {
359
- if (typeof item.artist === 'object') {
360
- return item.artist.name || 'Unknown Artist';
361
- }
362
- return item.artist;
363
- }
364
- return 'Unknown Artist';
365
- };
366
-
367
- const getPlaylistOwner = (playlist) => {
368
- if (!playlist) return 'Unknown';
369
-
370
- if (playlist.owner?.target) {
371
- if (typeof playlist.owner.target === 'object') {
372
- if (playlist.owner.target.profile?.name) {
373
- return playlist.owner.target.profile.name;
374
- }
375
- return playlist.owner.target.name || 'Unknown';
376
- }
377
- }
378
- return 'Unknown';
379
- };
238
+ } else {
239
+ // Clear search when query is empty
240
+ router.push({
241
+ name: 'music-search',
242
+ replace: true
243
+ });
244
+ searchActions.clearSearch();
245
+ }
246
+ };
380
247
 
381
- // Generate random gradient for genre cards
382
- const getRandomGradient = () => {
383
- const colors = [
384
- 'linear-gradient(135deg, #1DB954, #1ED760)',
385
- 'linear-gradient(135deg, #FF6B6B, #FFE66D)',
386
- 'linear-gradient(135deg, #4776E6, #8E54E9)',
387
- 'linear-gradient(135deg, #FF8008, #FFC837)',
388
- 'linear-gradient(135deg, #7F00FF, #E100FF)',
389
- 'linear-gradient(135deg, #11998E, #38EF7D)'
390
- ];
391
-
392
- return colors[Math.floor(Math.random() * colors.length)];
393
- };
248
+ const setActiveFilter = (filter) => {
249
+ activeFilter.value = filter;
250
+ searchActions.setFilter(filter);
251
+ };
394
252
 
395
- // Watch for URL query parameter changes
396
- onMounted(() => {
397
- const query = route.query.q;
398
- if (query) {
399
- searchQuery.value = query;
400
- searchActions.search(query);
401
- }
402
- });
253
+ // Generate random gradient for genre cards
254
+ const getRandomGradient = () => {
255
+ const colors = [
256
+ 'linear-gradient(135deg, #1DB954, #1ED760)',
257
+ 'linear-gradient(135deg, #FF6B6B, #FFE66D)',
258
+ 'linear-gradient(135deg, #4776E6, #8E54E9)',
259
+ 'linear-gradient(135deg, #FF8008, #FFC837)',
260
+ 'linear-gradient(135deg, #7F00FF, #E100FF)',
261
+ 'linear-gradient(135deg, #11998E, #38EF7D)'
262
+ ];
263
+
264
+ return colors[Math.floor(Math.random() * colors.length)];
265
+ };
403
266
 
404
- watch(() => route.query.q, (newQuery) => {
405
- if (newQuery && newQuery !== searchQuery.value) {
406
- searchQuery.value = newQuery;
407
- searchActions.search(newQuery);
408
- } else if (!newQuery) {
409
- searchQuery.value = '';
410
- searchActions.clearSearch();
411
- }
412
- });
413
- </script>
267
+ // Watch for URL query parameter changes
268
+ onMounted(() => {
269
+ const query = route.query.q;
270
+ if (query) {
271
+ searchQuery.value = query;
272
+ searchActions.search(query);
273
+ }
274
+ });
414
275
 
415
- <style scoped>
416
- .bg-gradient-color {
417
- background: var(--gradient-color, linear-gradient(135deg, #1DB954, #1ED760));
276
+ watch(() => route.query.q, (newQuery) => {
277
+ if (newQuery && newQuery !== searchQuery.value) {
278
+ searchQuery.value = newQuery;
279
+ searchActions.search(newQuery);
280
+ } else if (!newQuery) {
281
+ searchQuery.value = '';
282
+ searchActions.clearSearch();
418
283
  }
419
- </style>
284
+ });
285
+ </script>
286
+
287
+ <style scoped>
288
+ .bg-gradient-color {
289
+ background: var(--gradient-color, linear-gradient(135deg, #1DB954, #1ED760));
290
+ }
291
+ </style>