@ozdao/martyrs 0.2.492 → 0.2.494

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 (341) 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 +53 -90
  6. package/dist/builder.js +54 -91
  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.spa.client.js +0 -44
  281. package/src/builder/rspack/rspack.config.ssr.client.js +40 -40
  282. package/src/components/Calendar/Calendar.vue +378 -377
  283. package/src/components/Feed/Feed.vue +28 -2
  284. package/src/modules/globals/controllers/classes/crud/crud.policies.js +5 -0
  285. package/src/modules/globals/controllers/classes/globals.validator.js +8 -1
  286. package/src/modules/globals/views/components/layouts/Client.vue +7 -0
  287. package/src/modules/music/README.md +8 -0
  288. package/src/modules/music/components/SidebarMusic.vue +6 -9
  289. package/src/modules/music/components/cards/AlbumCard.vue +20 -14
  290. package/src/modules/music/components/cards/ArtistCard.vue +1 -1
  291. package/src/modules/music/components/cards/PlaylistCard.vue +31 -11
  292. package/src/modules/music/components/cards/TrackListCard.vue +24 -13
  293. package/src/modules/music/components/forms/PlaylistForm.vue +417 -107
  294. package/src/modules/music/components/forms/SearchForm.vue +31 -8
  295. package/src/modules/music/components/forms/TrackForm.vue +50 -32
  296. package/src/modules/music/components/layouts/MusicBottomPlayer.vue +17 -0
  297. package/src/modules/music/components/pages/Album.vue +373 -186
  298. package/src/modules/music/components/pages/Artist.vue +54 -94
  299. package/src/modules/music/components/pages/MusicHome.vue +59 -56
  300. package/src/modules/music/components/pages/MusicLibrary.vue +13 -11
  301. package/src/modules/music/components/pages/Playlist.vue +495 -379
  302. package/src/modules/music/components/pages/SearchResults.vue +185 -313
  303. package/src/modules/music/components/pages/Track.vue +363 -69
  304. package/src/modules/music/components/player/MusicPlayer.vue +368 -97
  305. package/src/modules/music/components/player/TrackProgress.vue +76 -22
  306. package/src/modules/music/components/player/VolumeControl.vue +61 -28
  307. package/src/modules/music/controllers/search.controller.js +3 -0
  308. package/src/modules/music/controllers/stream.controller.js +11 -3
  309. package/src/modules/music/middlewares/playlists.verifier.js +1 -1
  310. package/src/modules/music/music.client.js +3 -6
  311. package/src/modules/music/music.server.js +8 -4
  312. package/src/modules/music/router/music.js +8 -1
  313. package/src/modules/music/routes/albums.routes.js +37 -5
  314. package/src/modules/music/routes/artists.routes.js +14 -4
  315. package/src/modules/music/routes/genres.routes.js +5 -1
  316. package/src/modules/music/routes/playlists.routes.js +42 -9
  317. package/src/modules/music/routes/tracks.routes.js +27 -2
  318. package/src/modules/music/store/artists.js +6 -2
  319. package/src/modules/music/store/player.js +6 -0
  320. package/src/modules/music/store/tracks.js +31 -0
  321. package/src/modules/music/websocket/streaming.handler.js +7 -1
  322. package/src/modules/rents/controllers/services/rents.services.js +2 -2
  323. package/src/modules/rents/views/components/pages/Gant/GanttBar.vue +4 -3
  324. package/src/modules/rents/views/components/pages/Gant/GanttChart.vue +42 -40
  325. package/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue +3 -1
  326. package/src/modules/rents/views/components/pages/Rents.vue +60 -56
  327. package/dist/globals.websocket-DzvdIBf6.js +0 -306
  328. package/dist/globals.websocket-k6_B1T7k.cjs +0 -322
  329. package/dist/martyrs/src/components/Field/Field.vue2.cjs.map +0 -1
  330. package/dist/martyrs/src/components/Menu/Menu.vue.cjs.map +0 -1
  331. package/dist/martyrs/src/components/Menu/Menu.vue.js.map +0 -1
  332. package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.cjs +0 -69
  333. package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.cjs.map +0 -1
  334. package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.js +0 -69
  335. package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.js.map +0 -1
  336. package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs +0 -104
  337. package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs.map +0 -1
  338. package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js +0 -104
  339. package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js.map +0 -1
  340. package/src/modules/music/components/cards/TrackCard.vue +0 -86
  341. package/src/modules/music/components/layouts/MusicLayout.vue +0 -83
@@ -1,12 +1,12 @@
1
- import { ref, computed, resolveComponent, createElementBlock, openBlock, createElementVNode, createCommentVNode, createVNode, toDisplayString, withCtx, createBlock } from "vue";
1
+ import { ref, computed, createElementBlock, openBlock, createElementVNode, createVNode, toDisplayString, normalizeClass, withCtx, createBlock } from "vue";
2
2
  import Media from "../../../../components/Media/Media.vue.js";
3
3
  import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
4
4
  import TrackProgress from "./TrackProgress.vue.js";
5
5
  import VolumeControl from "./VolumeControl.vue.js";
6
6
  import _sfc_main$5 from "../../../icons/navigation/IconPlay.vue.js";
7
7
  import _sfc_main$4 from "../../../icons/navigation/IconPause.vue.js";
8
- import IconChevronRight from "../../../icons/navigation/IconChevronRight.vue.js";
9
- import IconChevronLeft from "../../../icons/navigation/IconChevronLeft.vue.js";
8
+ import IconNext from "../../../icons/navigation/IconChevronRight.vue.js";
9
+ import IconPrevious from "../../../icons/navigation/IconChevronLeft.vue.js";
10
10
  import _sfc_main$3 from "../../../icons/navigation/IconShuffle.vue.js";
11
11
  import _sfc_main$6 from "../../../icons/navigation/IconRefresh.vue.js";
12
12
  import _sfc_main$2 from "../../../icons/navigation/IconLike.vue.js";
@@ -15,19 +15,18 @@ import _sfc_main$8 from "../../../icons/navigation/IconMute.vue.js";
15
15
  import { state, actions } from "../../store/player.js";
16
16
  /* empty css */
17
17
  import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.js";
18
- const _hoisted_1 = { class: "music-player pd-small flex-between flex-v-center flex bg-dark br-t br-solid br-dark-transp-20" };
19
- const _hoisted_2 = { class: "player-track-info flex-v-center flex w-25r" };
20
- const _hoisted_3 = {
21
- key: 0,
22
- class: "player-track-cover mn-r-small"
23
- };
24
- const _hoisted_4 = { class: "player-track-details t-truncate" };
25
- const _hoisted_5 = { class: "player-track-title t-medium t-truncate" };
26
- const _hoisted_6 = { class: "player-track-artist t-grey t-small t-truncate" };
27
- const _hoisted_7 = { class: "player-favorite mn-l-small" };
28
- const _hoisted_8 = { class: "player-controls flex-1 flex flex-column items-center" };
29
- const _hoisted_9 = { class: "player-buttons flex-v-center flex gap-small" };
30
- const _hoisted_10 = { class: "player-volume flex-v-center flex w-15r" };
18
+ const _hoisted_1 = { class: "player-container" };
19
+ const _hoisted_2 = { class: "player" };
20
+ const _hoisted_3 = { class: "track-info" };
21
+ const _hoisted_4 = { class: "track-image" };
22
+ const _hoisted_5 = { class: "track-details" };
23
+ const _hoisted_6 = { class: "track-title" };
24
+ const _hoisted_7 = { class: "track-artist" };
25
+ const _hoisted_8 = { class: "controls" };
26
+ const _hoisted_9 = { class: "control-buttons" };
27
+ const _hoisted_10 = { class: "progress-section" };
28
+ const _hoisted_11 = { class: "volume-section" };
29
+ const _hoisted_12 = { class: "volume-slider" };
31
30
  const _sfc_main = {
32
31
  __name: "MusicPlayer",
33
32
  setup(__props) {
@@ -38,16 +37,6 @@ const _sfc_main = {
38
37
  const muted = computed(() => state.muted);
39
38
  const shuffle = computed(() => state.shuffle);
40
39
  const repeat = computed(() => state.repeat);
41
- const repeatIcon = computed(() => {
42
- switch (repeat.value) {
43
- case "one":
44
- return "rgb(var(--main))";
45
- case "all":
46
- return "rgb(var(--main))";
47
- default:
48
- return "rgb(var(--grey))";
49
- }
50
- });
51
40
  const togglePlay = () => {
52
41
  actions.togglePlay();
53
42
  };
@@ -80,147 +69,148 @@ const _sfc_main = {
80
69
  return "Unknown Artist";
81
70
  };
82
71
  return (_ctx, _cache) => {
83
- const _component_IconVolumeHalf = resolveComponent("IconVolumeHalf");
84
72
  return openBlock(), createElementBlock("div", _hoisted_1, [
85
73
  createElementVNode("div", _hoisted_2, [
86
- currentTrack.value ? (openBlock(), createElementBlock("div", _hoisted_3, [
87
- createVNode(Media, {
88
- url: currentTrack.value.coverUrl || currentTrack.value.album && currentTrack.value.album.coverUrl || "/assets/placeholder-track.jpg",
89
- class: "w-3r h-3r object-fit-cover radius-small"
90
- }, null, 8, ["url"])
91
- ])) : createCommentVNode("", true),
92
- createElementVNode("div", _hoisted_4, [
93
- createElementVNode("div", _hoisted_5, toDisplayString(currentTrack.value?.title || "No track playing"), 1),
94
- createElementVNode("div", _hoisted_6, toDisplayString(getArtistName(currentTrack.value)), 1)
95
- ]),
96
- createElementVNode("div", _hoisted_7, [
74
+ createElementVNode("div", _hoisted_3, [
75
+ createElementVNode("div", _hoisted_4, [
76
+ createVNode(Media, {
77
+ url: currentTrack.value?.coverUrl || currentTrack.value?.album && currentTrack.value.album.coverUrl || "/assets/placeholder-track.jpg",
78
+ class: "track-image-media"
79
+ }, null, 8, ["url"])
80
+ ]),
81
+ createElementVNode("div", _hoisted_5, [
82
+ createElementVNode("h3", _hoisted_6, toDisplayString(currentTrack.value?.title || "No track playing"), 1),
83
+ createElementVNode("p", _hoisted_7, toDisplayString(getArtistName(currentTrack.value)), 1)
84
+ ]),
97
85
  createVNode(_sfc_main$1, {
98
86
  onClick: toggleFavorite,
99
- class: "bg-transparent border-none pd-zero",
87
+ class: normalizeClass(["like-btn", { liked: isFavorite.value }]),
100
88
  showLoader: false,
101
89
  showSucces: false
102
90
  }, {
103
91
  default: withCtx(() => [
104
92
  createVNode(_sfc_main$2, {
105
- class: "i-small",
106
- fill: isFavorite.value ? "rgb(var(--main))" : "rgb(var(--grey))"
107
- }, null, 8, ["fill"])
108
- ]),
109
- _: 1
110
- })
111
- ])
112
- ]),
113
- createElementVNode("div", _hoisted_8, [
114
- createElementVNode("div", _hoisted_9, [
115
- createVNode(_sfc_main$1, {
116
- onClick: toggleShuffle,
117
- class: "bg-transparent border-none pd-zero",
118
- showLoader: false,
119
- showSucces: false
120
- }, {
121
- default: withCtx(() => [
122
- createVNode(_sfc_main$3, {
123
- class: "i-small",
124
- fill: shuffle.value ? "rgb(var(--main))" : "rgb(var(--grey))"
125
- }, null, 8, ["fill"])
126
- ]),
127
- _: 1
128
- }),
129
- createVNode(_sfc_main$1, {
130
- onClick: playPrevious,
131
- class: "bg-transparent border-none pd-zero",
132
- showLoader: false,
133
- showSucces: false
134
- }, {
135
- default: withCtx(() => [
136
- createVNode(IconChevronLeft, {
137
- class: "i-small",
138
- fill: "rgb(var(--white))"
93
+ fill: "rgb(var(--white))",
94
+ class: "like-icon"
139
95
  })
140
96
  ]),
141
97
  _: 1
142
- }),
98
+ }, 8, ["class"])
99
+ ]),
100
+ createElementVNode("div", _hoisted_8, [
101
+ createElementVNode("div", _hoisted_9, [
102
+ createVNode(_sfc_main$1, {
103
+ onClick: toggleShuffle,
104
+ class: normalizeClass(["control-btn secondary", { active: shuffle.value }]),
105
+ showLoader: false,
106
+ showSucces: false
107
+ }, {
108
+ default: withCtx(() => [
109
+ createVNode(_sfc_main$3, {
110
+ fill: "rgb(var(--white))",
111
+ class: "control-icon"
112
+ })
113
+ ]),
114
+ _: 1
115
+ }, 8, ["class"]),
116
+ createVNode(_sfc_main$1, {
117
+ onClick: playPrevious,
118
+ class: "control-btn secondary",
119
+ showLoader: false,
120
+ showSucces: false
121
+ }, {
122
+ default: withCtx(() => [
123
+ createVNode(IconPrevious, {
124
+ fill: "rgb(var(--white))",
125
+ class: "control-icon"
126
+ })
127
+ ]),
128
+ _: 1
129
+ }),
130
+ createVNode(_sfc_main$1, {
131
+ onClick: togglePlay,
132
+ class: "control-btn primary",
133
+ showLoader: false,
134
+ showSucces: false
135
+ }, {
136
+ default: withCtx(() => [
137
+ isPlaying.value ? (openBlock(), createBlock(_sfc_main$4, {
138
+ key: 0,
139
+ class: "play-icon"
140
+ })) : (openBlock(), createBlock(_sfc_main$5, {
141
+ key: 1,
142
+ class: "play-icon"
143
+ }))
144
+ ]),
145
+ _: 1
146
+ }),
147
+ createVNode(_sfc_main$1, {
148
+ onClick: playNext,
149
+ class: "control-btn secondary",
150
+ showLoader: false,
151
+ showSucces: false
152
+ }, {
153
+ default: withCtx(() => [
154
+ createVNode(IconNext, {
155
+ fill: "rgb(var(--white))",
156
+ class: "control-icon"
157
+ })
158
+ ]),
159
+ _: 1
160
+ }),
161
+ createVNode(_sfc_main$1, {
162
+ onClick: toggleRepeat,
163
+ class: normalizeClass(["control-btn secondary", { active: repeat.value !== "off" }]),
164
+ showLoader: false,
165
+ showSucces: false
166
+ }, {
167
+ default: withCtx(() => [
168
+ createVNode(_sfc_main$6, {
169
+ fill: "rgb(var(--white))",
170
+ class: "control-icon"
171
+ })
172
+ ]),
173
+ _: 1
174
+ }, 8, ["class"])
175
+ ]),
176
+ createElementVNode("div", _hoisted_10, [
177
+ createVNode(TrackProgress)
178
+ ])
179
+ ]),
180
+ createElementVNode("div", _hoisted_11, [
143
181
  createVNode(_sfc_main$1, {
144
- onClick: togglePlay,
145
- class: "play-pause-btn bg-white radius-round pd-micro flex-center flex",
182
+ onClick: toggleMute,
183
+ class: "volume-btn",
146
184
  showLoader: false,
147
185
  showSucces: false
148
186
  }, {
149
187
  default: withCtx(() => [
150
- isPlaying.value ? (openBlock(), createBlock(_sfc_main$4, {
188
+ !muted.value && volume.value > 0.5 ? (openBlock(), createBlock(_sfc_main$7, {
151
189
  key: 0,
152
- class: "i-medium",
153
- fill: "rgb(var(--black))"
154
- })) : (openBlock(), createBlock(_sfc_main$5, {
190
+ fill: "rgb(var(--white))",
191
+ class: "volume-icon"
192
+ })) : !muted.value && volume.value > 0 ? (openBlock(), createBlock(_sfc_main$7, {
155
193
  key: 1,
156
- class: "i-medium",
157
- fill: "rgb(var(--black))"
194
+ fill: "rgb(var(--white))",
195
+ class: "volume-icon"
196
+ })) : (openBlock(), createBlock(_sfc_main$8, {
197
+ key: 2,
198
+ fill: "rgb(var(--white))",
199
+ class: "volume-icon"
158
200
  }))
159
201
  ]),
160
202
  _: 1
161
203
  }),
162
- createVNode(_sfc_main$1, {
163
- onClick: playNext,
164
- class: "bg-transparent border-none pd-zero",
165
- showLoader: false,
166
- showSucces: false
167
- }, {
168
- default: withCtx(() => [
169
- createVNode(IconChevronRight, {
170
- class: "i-small",
171
- fill: "rgb(var(--white))"
172
- })
173
- ]),
174
- _: 1
175
- }),
176
- createVNode(_sfc_main$1, {
177
- onClick: toggleRepeat,
178
- class: "bg-transparent border-none pd-zero",
179
- showLoader: false,
180
- showSucces: false
181
- }, {
182
- default: withCtx(() => [
183
- createVNode(_sfc_main$6, {
184
- class: "i-small",
185
- fill: repeatIcon.value
186
- }, null, 8, ["fill"])
187
- ]),
188
- _: 1
189
- })
190
- ]),
191
- createVNode(TrackProgress, { class: "w-100 mn-t-thin" })
192
- ]),
193
- createElementVNode("div", _hoisted_10, [
194
- createVNode(_sfc_main$1, {
195
- onClick: toggleMute,
196
- class: "bg-transparent border-none pd-zero mn-r-small",
197
- showLoader: false,
198
- showSucces: false
199
- }, {
200
- default: withCtx(() => [
201
- !muted.value && volume.value > 0.5 ? (openBlock(), createBlock(_sfc_main$7, {
202
- key: 0,
203
- class: "i-small",
204
- fill: "rgb(var(--white))"
205
- })) : !muted.value && volume.value > 0 ? (openBlock(), createBlock(_component_IconVolumeHalf, {
206
- key: 1,
207
- class: "i-small",
208
- fill: "rgb(var(--white))"
209
- })) : (openBlock(), createBlock(_sfc_main$8, {
210
- key: 2,
211
- class: "i-small",
212
- fill: "rgb(var(--white))"
213
- }))
214
- ]),
215
- _: 1
216
- }),
217
- createVNode(VolumeControl)
204
+ createElementVNode("div", _hoisted_12, [
205
+ createVNode(VolumeControl)
206
+ ])
207
+ ])
218
208
  ])
219
209
  ]);
220
210
  };
221
211
  }
222
212
  };
223
- const MusicPlayer = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-f19b93ab"]]);
213
+ const MusicPlayer = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-8c2c90fa"]]);
224
214
  export {
225
215
  MusicPlayer as default
226
216
  };
@@ -1 +1 @@
1
- {"version":3,"file":"MusicPlayer.vue.js","sources":["../../../../../../../src/modules/music/components/player/MusicPlayer.vue"],"sourcesContent":["<!-- components/player/MusicPlayer.vue -->\n<template>\n <div class=\"music-player pd-small flex-between flex-v-center flex bg-dark br-t br-solid br-dark-transp-20 \">\n <!-- Current Track Info -->\n <div class=\"player-track-info flex-v-center flex w-25r\">\n <div v-if=\"currentTrack\" class=\"player-track-cover mn-r-small\">\n <Media \n :url=\"currentTrack.coverUrl || (currentTrack.album && currentTrack.album.coverUrl) || '/assets/placeholder-track.jpg'\" \n class=\"w-3r h-3r object-fit-cover radius-small\"\n />\n </div>\n \n <div class=\"player-track-details t-truncate\">\n <div class=\"player-track-title t-medium t-truncate\">\n {{ currentTrack?.title || 'No track playing' }}\n </div>\n <div class=\"player-track-artist t-grey t-small t-truncate\">\n {{ getArtistName(currentTrack) }}\n </div>\n </div>\n \n <div class=\"player-favorite mn-l-small\">\n <Button \n @click=\"toggleFavorite\" \n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconLike class=\"i-small\" :fill=\"isFavorite ? 'rgb(var(--main))' : 'rgb(var(--grey))'\"/>\n </Button>\n </div>\n </div>\n \n <!-- Player Controls -->\n <div class=\"player-controls flex-1 flex flex-column items-center\">\n <div class=\"player-buttons flex-v-center flex gap-small\">\n <Button \n @click=\"toggleShuffle\" \n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconShuffle class=\"i-small\" :fill=\"shuffle ? 'rgb(var(--main))' : 'rgb(var(--grey))'\"/>\n </Button>\n \n <Button \n @click=\"playPrevious\" \n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconPrevious class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n \n <Button \n @click=\"togglePlay\" \n class=\"play-pause-btn bg-white radius-round pd-micro flex-center flex\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconPause v-if=\"isPlaying\" class=\"i-medium\" fill=\"rgb(var(--black))\"/>\n <IconPlay v-else class=\"i-medium\" fill=\"rgb(var(--black))\"/>\n </Button>\n \n <Button \n @click=\"playNext\" \n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconNext class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n \n <Button \n @click=\"toggleRepeat\" \n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconRepeat class=\"i-small\" :fill=\"repeatIcon\"/>\n </Button>\n </div>\n \n <TrackProgress class=\"w-100 mn-t-thin\" />\n </div>\n \n <!-- Volume Control -->\n <div class=\"player-volume flex-v-center flex w-15r\">\n <Button \n @click=\"toggleMute\" \n class=\"bg-transparent border-none pd-zero mn-r-small\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconVolume v-if=\"!muted && volume > 0.5\" class=\"i-small\" fill=\"rgb(var(--white))\"/>\n <IconVolumeHalf v-else-if=\"!muted && volume > 0\" class=\"i-small\" fill=\"rgb(var(--white))\"/>\n <IconVolumeMute v-else class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n \n <VolumeControl />\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref } from 'vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport TrackProgress from './TrackProgress.vue';\nimport VolumeControl from './VolumeControl.vue';\n\n// Import icons\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\nimport IconPause from '@martyrs/src/modules/icons/navigation/IconPause.vue';\nimport IconNext from '@martyrs/src/modules/icons/navigation/IconChevronRight.vue';\nimport IconPrevious from '@martyrs/src/modules/icons/navigation/IconChevronLeft.vue';\nimport IconShuffle from '@martyrs/src/modules/icons/navigation/IconShuffle.vue';\nimport IconRepeat from '@martyrs/src/modules/icons/navigation/IconRefresh.vue';\nimport IconLike from '@martyrs/src/modules/icons/navigation/IconLike.vue';\nimport IconVolume from '@martyrs/src/modules/icons/navigation/IconVolume.vue';\n// import IconVolumeHalf from '@martyrs/src/modules/icons/navigation/IconVolume.vue'; // Using same icon but we'd style it differently\nimport IconVolumeMute from '@martyrs/src/modules/icons/navigation/IconMute.vue';\n\n// Import player store\nimport { state as playerState, actions as playerActions } from '../../store/player.js';\n\n// State\nconst isFavorite = ref(false);\n\n// Computed properties\nconst currentTrack = computed(() => playerState.currentTrack);\nconst isPlaying = computed(() => playerState.isPlaying);\nconst volume = computed(() => playerState.volume);\nconst muted = computed(() => playerState.muted);\nconst shuffle = computed(() => playerState.shuffle);\nconst repeat = computed(() => playerState.repeat);\n\nconst repeatIcon = computed(() => {\n switch(repeat.value) {\n case 'one':\n return 'rgb(var(--main))';\n case 'all':\n return 'rgb(var(--main))';\n default:\n return 'rgb(var(--grey))';\n }\n});\n\n// Methods\nconst togglePlay = () => {\n playerActions.togglePlay();\n};\n\nconst playNext = () => {\n playerActions.playNext();\n};\n\nconst playPrevious = () => {\n playerActions.playPrevious();\n};\n\nconst toggleShuffle = () => {\n playerActions.toggleShuffle();\n};\n\nconst toggleRepeat = () => {\n playerActions.toggleRepeat();\n};\n\nconst toggleMute = () => {\n playerActions.toggleMute();\n};\n\nconst toggleFavorite = () => {\n isFavorite.value = !isFavorite.value;\n // Implement favorite track logic here\n};\n\nconst getArtistName = (track) => {\n if (!track) return 'Unknown Artist';\n \n if (track.artist) {\n if (typeof track.artist === 'object') {\n return track.artist.name || 'Unknown Artist';\n }\n return track.artist;\n }\n return 'Unknown Artist';\n};\n</script>\n\n<style scoped>\n.play-pause-btn {\n width: 32px;\n height: 32px;\n transition: transform 0.2s ease;\n}\n\n.play-pause-btn:hover {\n transform: scale(1.1);\n}\n</style>"],"names":["playerState","playerActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+HA,UAAM,aAAa,IAAI,KAAK;AAG5B,UAAM,eAAe,SAAS,MAAMA,MAAY,YAAY;AAC5D,UAAM,YAAY,SAAS,MAAMA,MAAY,SAAS;AACtD,UAAM,SAAS,SAAS,MAAMA,MAAY,MAAM;AAChD,UAAM,QAAQ,SAAS,MAAMA,MAAY,KAAK;AAC9C,UAAM,UAAU,SAAS,MAAMA,MAAY,OAAO;AAClD,UAAM,SAAS,SAAS,MAAMA,MAAY,MAAM;AAEhD,UAAM,aAAa,SAAS,MAAM;AAChC,cAAO,OAAO,OAAK;AAAA,QACjB,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACb;AAAA,IACA,CAAC;AAGD,UAAM,aAAa,MAAM;AACvBC,cAAc,WAAU;AAAA,IAC1B;AAEA,UAAM,WAAW,MAAM;AACrBA,cAAc,SAAQ;AAAA,IACxB;AAEA,UAAM,eAAe,MAAM;AACzBA,cAAc,aAAY;AAAA,IAC5B;AAEA,UAAM,gBAAgB,MAAM;AAC1BA,cAAc,cAAa;AAAA,IAC7B;AAEA,UAAM,eAAe,MAAM;AACzBA,cAAc,aAAY;AAAA,IAC5B;AAEA,UAAM,aAAa,MAAM;AACvBA,cAAc,WAAU;AAAA,IAC1B;AAEA,UAAM,iBAAiB,MAAM;AAC3B,iBAAW,QAAQ,CAAC,WAAW;AAAA,IAEjC;AAEA,UAAM,gBAAgB,CAAC,UAAU;AAC/B,UAAI,CAAC,MAAO,QAAO;AAEnB,UAAI,MAAM,QAAQ;AAChB,YAAI,OAAO,MAAM,WAAW,UAAU;AACpC,iBAAO,MAAM,OAAO,QAAQ;AAAA,QAC9B;AACA,eAAO,MAAM;AAAA,MACf;AACA,aAAO;AAAA,IACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"MusicPlayer.vue.js","sources":["../../../../../../../src/modules/music/components/player/MusicPlayer.vue"],"sourcesContent":["<!-- components/player/MusicPlayer.vue -->\n<template>\n <div class=\"player-container\">\n <div class=\"player\">\n <!-- Track Info Section -->\n <div class=\"track-info\">\n <div class=\"track-image\">\n <Media \n :url=\"currentTrack?.coverUrl || (currentTrack?.album && currentTrack.album.coverUrl) || '/assets/placeholder-track.jpg'\" \n class=\"track-image-media\"\n />\n </div>\n <div class=\"track-details\">\n <h3 class=\"track-title\">{{ currentTrack?.title || 'No track playing' }}</h3>\n <p class=\"track-artist\">{{ getArtistName(currentTrack) }}</p>\n </div>\n <Button \n @click=\"toggleFavorite\" \n class=\"like-btn\"\n :class=\"{ liked: isFavorite }\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconLike fill=\"rgb(var(--white))\" class=\"like-icon\"/>\n </Button>\n </div>\n\n <!-- Control Section -->\n <div class=\"controls\">\n <div class=\"control-buttons\">\n <Button \n @click=\"toggleShuffle\" \n class=\"control-btn secondary\"\n :class=\"{ active: shuffle }\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconShuffle fill=\"rgb(var(--white))\" class=\"control-icon\"/>\n </Button>\n \n <Button \n @click=\"playPrevious\" \n class=\"control-btn secondary\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconPrevious fill=\"rgb(var(--white))\" class=\"control-icon\"/>\n </Button>\n \n <Button \n @click=\"togglePlay\" \n class=\"control-btn primary\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconPause v-if=\"isPlaying\" class=\"play-icon\"/>\n <IconPlay v-else class=\"play-icon\"/>\n </Button>\n \n <Button \n @click=\"playNext\" \n class=\"control-btn secondary\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconNext fill=\"rgb(var(--white))\" class=\"control-icon\"/>\n </Button>\n \n <Button \n @click=\"toggleRepeat\" \n class=\"control-btn secondary\"\n :class=\"{ active: repeat !== 'off' }\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconRepeat fill=\"rgb(var(--white))\" class=\"control-icon\"/>\n </Button>\n </div>\n \n <!-- Progress Bar -->\n <div class=\"progress-section\">\n <TrackProgress />\n </div>\n </div>\n\n <!-- Volume Section -->\n <div class=\"volume-section\">\n <Button \n @click=\"toggleMute\" \n class=\"volume-btn\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconVolume fill=\"rgb(var(--white))\" v-if=\"!muted && volume > 0.5\" class=\"volume-icon\"/>\n <IconVolumeHalf fill=\"rgb(var(--white))\" v-else-if=\"!muted && volume > 0\" class=\"volume-icon\"/>\n <IconVolumeMute fill=\"rgb(var(--white))\" v-else class=\"volume-icon\"/>\n </Button>\n \n <div class=\"volume-slider\">\n <VolumeControl />\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref } from 'vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport TrackProgress from './TrackProgress.vue';\nimport VolumeControl from './VolumeControl.vue';\n\n// Import icons\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\nimport IconPause from '@martyrs/src/modules/icons/navigation/IconPause.vue';\nimport IconNext from '@martyrs/src/modules/icons/navigation/IconChevronRight.vue';\nimport IconPrevious from '@martyrs/src/modules/icons/navigation/IconChevronLeft.vue';\nimport IconShuffle from '@martyrs/src/modules/icons/navigation/IconShuffle.vue';\nimport IconRepeat from '@martyrs/src/modules/icons/navigation/IconRefresh.vue';\nimport IconLike from '@martyrs/src/modules/icons/navigation/IconLike.vue';\nimport IconVolume from '@martyrs/src/modules/icons/navigation/IconVolume.vue';\nimport IconVolumeHalf from '@martyrs/src/modules/icons/navigation/IconVolume.vue';\nimport IconVolumeMute from '@martyrs/src/modules/icons/navigation/IconMute.vue';\n\n// Import player store\nimport { state as playerState, actions as playerActions } from '../../store/player.js';\n\n// State\nconst isFavorite = ref(false);\n\n// Computed properties\nconst currentTrack = computed(() => playerState.currentTrack);\nconst isPlaying = computed(() => playerState.isPlaying);\nconst volume = computed(() => playerState.volume);\nconst muted = computed(() => playerState.muted);\nconst shuffle = computed(() => playerState.shuffle);\nconst repeat = computed(() => playerState.repeat);\n\n// Methods\nconst togglePlay = () => {\n playerActions.togglePlay();\n};\n\nconst playNext = () => {\n playerActions.playNext();\n};\n\nconst playPrevious = () => {\n playerActions.playPrevious();\n};\n\nconst toggleShuffle = () => {\n playerActions.toggleShuffle();\n};\n\nconst toggleRepeat = () => {\n playerActions.toggleRepeat();\n};\n\nconst toggleMute = () => {\n playerActions.toggleMute();\n};\n\nconst toggleFavorite = () => {\n isFavorite.value = !isFavorite.value;\n // Implement favorite track logic here\n};\n\nconst getArtistName = (track) => {\n if (!track) return 'Unknown Artist';\n \n if (track.artist) {\n if (typeof track.artist === 'object') {\n return track.artist.name || 'Unknown Artist';\n }\n return track.artist;\n }\n return 'Unknown Artist';\n};\n</script>\n\n<style scoped>\n.player-container {\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 1000;\n background: linear-gradient(135deg, rgb(24, 24, 24) 0%, rgb(18, 18, 18) 100%);\n border-top: 1px solid rgb(40, 40, 40);\n backdrop-filter: blur(10px);\n}\n\n.player {\n display: grid;\n grid-template-columns: 1fr 2fr 1fr;\n align-items: center;\n padding: 12px 16px;\n gap: 16px;\n height: 90px;\n max-width: 100%;\n}\n\n/* Track Info Section */\n.track-info {\n display: flex;\n align-items: center;\n gap: 12px;\n min-width: 0;\n}\n\n.track-image {\n width: 56px;\n height: 56px;\n border-radius: 4px;\n overflow: hidden;\n flex-shrink: 0;\n}\n\n.track-image-media {\n width: 100%;\n height: 100%;\n object-fit: cover;\n transition: transform 0.3s ease;\n}\n\n.track-image:hover .track-image-media {\n transform: scale(1.05);\n}\n\n.track-details {\n min-width: 0;\n flex: 1;\n}\n\n.track-title {\n font-size: 14px;\n font-weight: 600;\n color: rgb(var(--white));\n margin: 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n line-height: 1.2;\n}\n\n.track-artist {\n font-size: 12px;\n color: rgb(var(--grey));\n margin: 2px 0 0 0;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.like-btn {\n background: none;\n border: none;\n color: rgb(var(--grey));\n cursor: pointer;\n padding: 8px;\n border-radius: 50%;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.like-icon {\n width: 16px;\n height: 16px;\n}\n\n.like-btn:hover {\n color: rgb(var(--white));\n background: rgba(255, 255, 255, 0.1);\n}\n\n.like-btn.liked {\n color: rgb(var(--main));\n}\n\n.like-btn.liked .like-icon {\n fill: rgb(var(--main));\n}\n\n.like-btn.liked:hover {\n color: rgb(var(--main));\n opacity: 0.8;\n}\n\n/* Controls Section */\n.controls {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 8px;\n width: 100%;\n}\n\n.control-buttons {\n display: flex;\n align-items: center;\n gap: 16px;\n}\n\n.control-btn {\n background: none;\n border: none;\n color: rgb(var(--grey));\n cursor: pointer;\n padding: 8px;\n border-radius: 50%;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.control-icon {\n width: 16px;\n height: 16px;\n}\n\n.control-btn.primary {\n background: rgb(var(--white));\n color: rgb(var(--black));\n width: 32px;\n height: 32px;\n}\n\n.play-icon {\n width: 14px;\n height: 14px;\n fill: rgb(var(--black));\n}\n\n.control-btn.primary:hover {\n background: rgb(240, 240, 240);\n transform: scale(1.06);\n}\n\n.control-btn.secondary:hover {\n color: rgb(var(--white));\n background: rgba(255, 255, 255, 0.1);\n}\n\n.control-btn.secondary:hover .control-icon {\n fill: rgb(var(--white));\n}\n\n.control-btn.active {\n color: rgb(var(--main));\n}\n\n.control-btn.active .control-icon {\n fill: rgb(var(--main));\n}\n\n.control-btn.active:hover {\n color: rgb(var(--main));\n opacity: 0.8;\n}\n\n/* Progress Section */\n.progress-section {\n width: 100%;\n max-width: 600px;\n}\n\n/* Volume Section */\n.volume-section {\n display: flex;\n align-items: center;\n gap: 12px;\n justify-content: flex-end;\n}\n\n.volume-btn {\n background: none;\n border: none;\n color: rgb(var(--grey));\n cursor: pointer;\n padding: 8px;\n border-radius: 50%;\n transition: all 0.2s ease;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.volume-icon {\n width: 16px;\n height: 16px;\n}\n\n.volume-btn:hover {\n color: rgb(var(--white));\n background: rgba(255, 255, 255, 0.1);\n}\n\n.volume-btn:hover .volume-icon {\n fill: rgb(var(--white));\n}\n\n.volume-slider {\n width: 100px;\n}\n\n/* Responsive Design */\n@media (max-width: 768px) {\n .player {\n grid-template-columns: 1fr;\n grid-template-rows: auto auto auto;\n height: auto;\n padding: 8px 12px 12px;\n gap: 12px;\n }\n\n .track-info {\n order: 1;\n }\n\n .controls {\n order: 2;\n }\n\n .volume-section {\n order: 3;\n justify-content: center;\n }\n\n .volume-slider {\n width: 120px;\n }\n\n .progress-section {\n max-width: 100%;\n }\n}\n\n/* Animations */\n@keyframes fadeIn {\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n.player-container {\n animation: fadeIn 0.3s ease-out;\n}\n\n@keyframes pulse {\n 0% {\n transform: scale(1);\n }\n 50% {\n transform: scale(1.05);\n }\n 100% {\n transform: scale(1);\n }\n}\n\n.control-btn.primary:active {\n animation: pulse 0.3s ease;\n}\n</style>"],"names":["playerState","playerActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiIA,UAAM,aAAa,IAAI,KAAK;AAG5B,UAAM,eAAe,SAAS,MAAMA,MAAY,YAAY;AAC5D,UAAM,YAAY,SAAS,MAAMA,MAAY,SAAS;AACtD,UAAM,SAAS,SAAS,MAAMA,MAAY,MAAM;AAChD,UAAM,QAAQ,SAAS,MAAMA,MAAY,KAAK;AAC9C,UAAM,UAAU,SAAS,MAAMA,MAAY,OAAO;AAClD,UAAM,SAAS,SAAS,MAAMA,MAAY,MAAM;AAGhD,UAAM,aAAa,MAAM;AACvBC,cAAc,WAAU;AAAA,IAC1B;AAEA,UAAM,WAAW,MAAM;AACrBA,cAAc,SAAQ;AAAA,IACxB;AAEA,UAAM,eAAe,MAAM;AACzBA,cAAc,aAAY;AAAA,IAC5B;AAEA,UAAM,gBAAgB,MAAM;AAC1BA,cAAc,cAAa;AAAA,IAC7B;AAEA,UAAM,eAAe,MAAM;AACzBA,cAAc,aAAY;AAAA,IAC5B;AAEA,UAAM,aAAa,MAAM;AACvBA,cAAc,WAAU;AAAA,IAC1B;AAEA,UAAM,iBAAiB,MAAM;AAC3B,iBAAW,QAAQ,CAAC,WAAW;AAAA,IAEjC;AAEA,UAAM,gBAAgB,CAAC,UAAU;AAC/B,UAAI,CAAC,MAAO,QAAO;AAEnB,UAAI,MAAM,QAAQ;AAChB,YAAI,OAAO,MAAM,WAAW,UAAU;AACpC,iBAAO,MAAM,OAAO,QAAQ;AAAA,QAC9B;AACA,eAAO,MAAM;AAAA,MACf;AACA,aAAO;AAAA,IACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -4,9 +4,10 @@ const vue = require("vue");
4
4
  const player = require("../../store/player.cjs");
5
5
  ;/* empty css */
6
6
  const _pluginVue_exportHelper = require("../../../../../../_virtual/_plugin-vue_export-helper.cjs");
7
- const _hoisted_1 = { class: "track-progress flex flex-v-center gap-small" };
8
- const _hoisted_2 = { class: "current-time t-grey t-small" };
9
- const _hoisted_3 = { class: "total-time t-grey t-small" };
7
+ const _hoisted_1 = { class: "progress-section" };
8
+ const _hoisted_2 = { class: "time-current" };
9
+ const _hoisted_3 = { class: "progress-track" };
10
+ const _hoisted_4 = { class: "time-total" };
10
11
  const _sfc_main = {
11
12
  __name: "TrackProgress",
12
13
  setup(__props) {
@@ -56,31 +57,33 @@ const _sfc_main = {
56
57
  });
57
58
  return (_ctx, _cache) => {
58
59
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
59
- vue.createElementVNode("div", _hoisted_2, vue.toDisplayString(formatTime(currentTime.value)), 1),
60
+ vue.createElementVNode("span", _hoisted_2, vue.toDisplayString(formatTime(currentTime.value)), 1),
60
61
  vue.createElementVNode("div", {
61
62
  ref_key: "progressBarContainer",
62
63
  ref: progressBarContainer,
63
- class: "progress-bar-container flex-1 h-thin bg-grey radius-extra pos-relative cursor-pointer",
64
+ class: "progress-bar",
64
65
  onClick: seek,
65
66
  onMousedown: startSeek,
66
67
  onMousemove: updateSeekPosition,
67
68
  onMouseup: endSeek,
68
69
  onMouseleave: endSeek
69
70
  }, [
70
- vue.createElementVNode("div", {
71
- class: "progress-bar h-100 bg-white radius-extra",
72
- style: vue.normalizeStyle({ width: progressPercentage.value + "%" })
73
- }, null, 4),
74
- vue.createElementVNode("div", {
75
- class: "progress-handle w-thin h-thin bg-white radius-round pos-absolute pos-t-50 pos-l-0",
76
- style: vue.normalizeStyle({ left: `calc(${progressPercentage.value}% - 4px)`, transform: "translateY(-50%)" })
77
- }, null, 4)
71
+ vue.createElementVNode("div", _hoisted_3, [
72
+ vue.createElementVNode("div", {
73
+ class: "progress-fill",
74
+ style: vue.normalizeStyle({ width: progressPercentage.value + "%" })
75
+ }, null, 4),
76
+ vue.createElementVNode("div", {
77
+ class: "progress-thumb",
78
+ style: vue.normalizeStyle({ left: progressPercentage.value + "%" })
79
+ }, null, 4)
80
+ ])
78
81
  ], 544),
79
- vue.createElementVNode("div", _hoisted_3, vue.toDisplayString(formatTime(duration.value)), 1)
82
+ vue.createElementVNode("span", _hoisted_4, vue.toDisplayString(formatTime(duration.value)), 1)
80
83
  ]);
81
84
  };
82
85
  }
83
86
  };
84
- const TrackProgress = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-4326ac71"]]);
87
+ const TrackProgress = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-0bee7510"]]);
85
88
  exports.default = TrackProgress;
86
89
  //# sourceMappingURL=TrackProgress.vue.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"TrackProgress.vue.cjs","sources":["../../../../../../../src/modules/music/components/player/TrackProgress.vue"],"sourcesContent":["<!-- components/player/TrackProgress.vue -->\n<template>\n <div class=\"track-progress flex flex-v-center gap-small\">\n <div class=\"current-time t-grey t-small\">{{ formatTime(currentTime) }}</div>\n \n <div \n ref=\"progressBarContainer\"\n class=\"progress-bar-container flex-1 h-thin bg-grey radius-extra pos-relative cursor-pointer\"\n @click=\"seek\"\n @mousedown=\"startSeek\"\n @mousemove=\"updateSeekPosition\"\n @mouseup=\"endSeek\"\n @mouseleave=\"endSeek\"\n >\n <div \n class=\"progress-bar h-100 bg-white radius-extra\" \n :style=\"{ width: progressPercentage + '%' }\"\n ></div>\n <div \n class=\"progress-handle w-thin h-thin bg-white radius-round pos-absolute pos-t-50 pos-l-0\"\n :style=\"{ left: `calc(${progressPercentage}% - 4px)`, transform: 'translateY(-50%)' }\"\n ></div>\n </div>\n \n <div class=\"total-time t-grey t-small\">{{ formatTime(duration) }}</div>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, onMounted, onUnmounted } from 'vue';\n\n// Import player store\nimport { state as playerState, actions as playerActions } from '../../store/player.js';\n\n// Refs\nconst progressBarContainer = ref(null);\nconst isSeeking = ref(false);\nconst seekPosition = ref(0);\n\n// Computed properties\nconst currentTime = computed(() => playerState.currentTime);\nconst duration = computed(() => playerState.duration);\nconst progressPercentage = computed(() => {\n if (!duration.value) return 0;\n return Math.min(100, (currentTime.value / duration.value) * 100);\n});\n\n// Methods\nconst formatTime = (seconds) => {\n if (!seconds) return '0:00';\n \n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n \n return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;\n};\n\nconst calculateSeekTime = (event) => {\n if (!progressBarContainer.value || !duration.value) return 0;\n \n const rect = progressBarContainer.value.getBoundingClientRect();\n const offsetX = event.clientX - rect.left;\n const percentage = Math.max(0, Math.min(1, offsetX / rect.width));\n \n return percentage * duration.value;\n};\n\nconst seek = (event) => {\n const seekTime = calculateSeekTime(event);\n playerActions.seek(seekTime);\n};\n\nconst startSeek = (event) => {\n isSeeking.value = true;\n seekPosition.value = calculateSeekTime(event);\n};\n\nconst updateSeekPosition = (event) => {\n if (isSeeking.value) {\n seekPosition.value = calculateSeekTime(event);\n }\n};\n\nconst endSeek = () => {\n if (isSeeking.value) {\n isSeeking.value = false;\n playerActions.seek(seekPosition.value);\n }\n};\n\n// Clean up event listeners when component is unmounted\nonUnmounted(() => {\n isSeeking.value = false;\n});\n</script>\n\n<style scoped>\n.progress-bar-container:hover .progress-bar {\n background-color: rgb(var(--main));\n}\n\n.progress-handle {\n display: none;\n}\n\n.progress-bar-container:hover .progress-handle {\n display: block;\n transform: translateY(-50%) scale(1.3);\n}\n</style>"],"names":["ref","computed","playerState","playerActions","onUnmounted"],"mappings":";;;;;;;;;;;;AAmCA,UAAM,uBAAuBA,IAAAA,IAAI,IAAI;AACrC,UAAM,YAAYA,IAAAA,IAAI,KAAK;AAC3B,UAAM,eAAeA,IAAAA,IAAI,CAAC;AAG1B,UAAM,cAAcC,IAAAA,SAAS,MAAMC,OAAAA,MAAY,WAAW;AAC1D,UAAM,WAAWD,IAAAA,SAAS,MAAMC,OAAAA,MAAY,QAAQ;AACpD,UAAM,qBAAqBD,IAAAA,SAAS,MAAM;AACxC,UAAI,CAAC,SAAS,MAAO,QAAO;AAC5B,aAAO,KAAK,IAAI,KAAM,YAAY,QAAQ,SAAS,QAAS,GAAG;AAAA,IACjE,CAAC;AAGD,UAAM,aAAa,CAAC,YAAY;AAC9B,UAAI,CAAC,QAAS,QAAO;AAErB,YAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,YAAM,mBAAmB,KAAK,MAAM,UAAU,EAAE;AAEhD,aAAO,GAAG,OAAO,IAAI,iBAAiB,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AAAA,IACnE;AAEA,UAAM,oBAAoB,CAAC,UAAU;AACnC,UAAI,CAAC,qBAAqB,SAAS,CAAC,SAAS,MAAO,QAAO;AAE3D,YAAM,OAAO,qBAAqB,MAAM,sBAAqB;AAC7D,YAAM,UAAU,MAAM,UAAU,KAAK;AACrC,YAAM,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,UAAU,KAAK,KAAK,CAAC;AAEhE,aAAO,aAAa,SAAS;AAAA,IAC/B;AAEA,UAAM,OAAO,CAAC,UAAU;AACtB,YAAM,WAAW,kBAAkB,KAAK;AACxCE,aAAAA,QAAc,KAAK,QAAQ;AAAA,IAC7B;AAEA,UAAM,YAAY,CAAC,UAAU;AAC3B,gBAAU,QAAQ;AAClB,mBAAa,QAAQ,kBAAkB,KAAK;AAAA,IAC9C;AAEA,UAAM,qBAAqB,CAAC,UAAU;AACpC,UAAI,UAAU,OAAO;AACnB,qBAAa,QAAQ,kBAAkB,KAAK;AAAA,MAC9C;AAAA,IACF;AAEA,UAAM,UAAU,MAAM;AACpB,UAAI,UAAU,OAAO;AACnB,kBAAU,QAAQ;AAClBA,uBAAc,KAAK,aAAa,KAAK;AAAA,MACvC;AAAA,IACF;AAGAC,QAAAA,YAAY,MAAM;AAChB,gBAAU,QAAQ;AAAA,IACpB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"TrackProgress.vue.cjs","sources":["../../../../../../../src/modules/music/components/player/TrackProgress.vue"],"sourcesContent":["<!-- components/player/TrackProgress.vue -->\n<template>\n <div class=\"progress-section\">\n <span class=\"time-current\">{{ formatTime(currentTime) }}</span>\n <div \n ref=\"progressBarContainer\"\n class=\"progress-bar\"\n @click=\"seek\"\n @mousedown=\"startSeek\"\n @mousemove=\"updateSeekPosition\"\n @mouseup=\"endSeek\"\n @mouseleave=\"endSeek\"\n >\n <div class=\"progress-track\">\n <div \n class=\"progress-fill\" \n :style=\"{ width: progressPercentage + '%' }\"\n ></div>\n <div \n class=\"progress-thumb\"\n :style=\"{ left: progressPercentage + '%' }\"\n ></div>\n </div>\n </div>\n <span class=\"time-total\">{{ formatTime(duration) }}</span>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, onUnmounted } from 'vue';\n\n// Import player store\nimport { state as playerState, actions as playerActions } from '../../store/player.js';\n\n// Refs\nconst progressBarContainer = ref(null);\nconst isSeeking = ref(false);\nconst seekPosition = ref(0);\n\n// Computed properties\nconst currentTime = computed(() => playerState.currentTime);\nconst duration = computed(() => playerState.duration);\nconst progressPercentage = computed(() => {\n if (!duration.value) return 0;\n return Math.min(100, (currentTime.value / duration.value) * 100);\n});\n\n// Methods\nconst formatTime = (seconds) => {\n if (!seconds) return '0:00';\n \n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n \n return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;\n};\n\nconst calculateSeekTime = (event) => {\n if (!progressBarContainer.value || !duration.value) return 0;\n \n const rect = progressBarContainer.value.getBoundingClientRect();\n const offsetX = event.clientX - rect.left;\n const percentage = Math.max(0, Math.min(1, offsetX / rect.width));\n \n return percentage * duration.value;\n};\n\nconst seek = (event) => {\n const seekTime = calculateSeekTime(event);\n playerActions.seek(seekTime);\n};\n\nconst startSeek = (event) => {\n isSeeking.value = true;\n seekPosition.value = calculateSeekTime(event);\n};\n\nconst updateSeekPosition = (event) => {\n if (isSeeking.value) {\n seekPosition.value = calculateSeekTime(event);\n }\n};\n\nconst endSeek = () => {\n if (isSeeking.value) {\n isSeeking.value = false;\n playerActions.seek(seekPosition.value);\n }\n};\n\n// Clean up event listeners when component is unmounted\nonUnmounted(() => {\n isSeeking.value = false;\n});\n</script>\n\n<style scoped>\n/* Progress Section */\n.progress-section {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n}\n\n.time-current,\n.time-total {\n font-size: 11px;\n color: rgb(var(--grey));\n font-weight: 400;\n min-width: 32px;\n text-align: center;\n}\n\n.progress-bar {\n flex: 1;\n height: 12px;\n display: flex;\n align-items: center;\n cursor: pointer;\n padding: 4px 0;\n}\n\n.progress-track {\n position: relative;\n width: 100%;\n height: 4px;\n background: rgb(79, 79, 79);\n border-radius: 2px;\n overflow: hidden;\n transition: height 0.2s ease;\n}\n\n.progress-fill {\n height: 100%;\n background: rgb(var(--white));\n border-radius: 2px;\n transition: width 0.1s ease;\n}\n\n.progress-thumb {\n position: absolute;\n top: 50%;\n width: 12px;\n height: 12px;\n background: rgb(var(--white));\n border-radius: 50%;\n transform: translate(-50%, -50%);\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.progress-bar:hover .progress-thumb {\n opacity: 1;\n}\n\n.progress-bar:hover .progress-track {\n height: 6px;\n}\n\n.progress-bar:hover .progress-fill {\n background: rgb(var(--main));\n}\n</style>"],"names":["ref","computed","playerState","playerActions","onUnmounted"],"mappings":";;;;;;;;;;;;;AAmCA,UAAM,uBAAuBA,IAAAA,IAAI,IAAI;AACrC,UAAM,YAAYA,IAAAA,IAAI,KAAK;AAC3B,UAAM,eAAeA,IAAAA,IAAI,CAAC;AAG1B,UAAM,cAAcC,IAAAA,SAAS,MAAMC,OAAAA,MAAY,WAAW;AAC1D,UAAM,WAAWD,IAAAA,SAAS,MAAMC,OAAAA,MAAY,QAAQ;AACpD,UAAM,qBAAqBD,IAAAA,SAAS,MAAM;AACxC,UAAI,CAAC,SAAS,MAAO,QAAO;AAC5B,aAAO,KAAK,IAAI,KAAM,YAAY,QAAQ,SAAS,QAAS,GAAG;AAAA,IACjE,CAAC;AAGD,UAAM,aAAa,CAAC,YAAY;AAC9B,UAAI,CAAC,QAAS,QAAO;AAErB,YAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,YAAM,mBAAmB,KAAK,MAAM,UAAU,EAAE;AAEhD,aAAO,GAAG,OAAO,IAAI,iBAAiB,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AAAA,IACnE;AAEA,UAAM,oBAAoB,CAAC,UAAU;AACnC,UAAI,CAAC,qBAAqB,SAAS,CAAC,SAAS,MAAO,QAAO;AAE3D,YAAM,OAAO,qBAAqB,MAAM,sBAAqB;AAC7D,YAAM,UAAU,MAAM,UAAU,KAAK;AACrC,YAAM,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,UAAU,KAAK,KAAK,CAAC;AAEhE,aAAO,aAAa,SAAS;AAAA,IAC/B;AAEA,UAAM,OAAO,CAAC,UAAU;AACtB,YAAM,WAAW,kBAAkB,KAAK;AACxCE,aAAAA,QAAc,KAAK,QAAQ;AAAA,IAC7B;AAEA,UAAM,YAAY,CAAC,UAAU;AAC3B,gBAAU,QAAQ;AAClB,mBAAa,QAAQ,kBAAkB,KAAK;AAAA,IAC9C;AAEA,UAAM,qBAAqB,CAAC,UAAU;AACpC,UAAI,UAAU,OAAO;AACnB,qBAAa,QAAQ,kBAAkB,KAAK;AAAA,MAC9C;AAAA,IACF;AAEA,UAAM,UAAU,MAAM;AACpB,UAAI,UAAU,OAAO;AACnB,kBAAU,QAAQ;AAClBA,uBAAc,KAAK,aAAa,KAAK;AAAA,MACvC;AAAA,IACF;AAGAC,QAAAA,YAAY,MAAM;AAChB,gBAAU,QAAQ;AAAA,IACpB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -2,9 +2,10 @@ import { ref, computed, onUnmounted, createElementBlock, openBlock, createElemen
2
2
  import { state, actions } from "../../store/player.js";
3
3
  /* empty css */
4
4
  import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.js";
5
- const _hoisted_1 = { class: "track-progress flex flex-v-center gap-small" };
6
- const _hoisted_2 = { class: "current-time t-grey t-small" };
7
- const _hoisted_3 = { class: "total-time t-grey t-small" };
5
+ const _hoisted_1 = { class: "progress-section" };
6
+ const _hoisted_2 = { class: "time-current" };
7
+ const _hoisted_3 = { class: "progress-track" };
8
+ const _hoisted_4 = { class: "time-total" };
8
9
  const _sfc_main = {
9
10
  __name: "TrackProgress",
10
11
  setup(__props) {
@@ -54,32 +55,34 @@ const _sfc_main = {
54
55
  });
55
56
  return (_ctx, _cache) => {
56
57
  return openBlock(), createElementBlock("div", _hoisted_1, [
57
- createElementVNode("div", _hoisted_2, toDisplayString(formatTime(currentTime.value)), 1),
58
+ createElementVNode("span", _hoisted_2, toDisplayString(formatTime(currentTime.value)), 1),
58
59
  createElementVNode("div", {
59
60
  ref_key: "progressBarContainer",
60
61
  ref: progressBarContainer,
61
- class: "progress-bar-container flex-1 h-thin bg-grey radius-extra pos-relative cursor-pointer",
62
+ class: "progress-bar",
62
63
  onClick: seek,
63
64
  onMousedown: startSeek,
64
65
  onMousemove: updateSeekPosition,
65
66
  onMouseup: endSeek,
66
67
  onMouseleave: endSeek
67
68
  }, [
68
- createElementVNode("div", {
69
- class: "progress-bar h-100 bg-white radius-extra",
70
- style: normalizeStyle({ width: progressPercentage.value + "%" })
71
- }, null, 4),
72
- createElementVNode("div", {
73
- class: "progress-handle w-thin h-thin bg-white radius-round pos-absolute pos-t-50 pos-l-0",
74
- style: normalizeStyle({ left: `calc(${progressPercentage.value}% - 4px)`, transform: "translateY(-50%)" })
75
- }, null, 4)
69
+ createElementVNode("div", _hoisted_3, [
70
+ createElementVNode("div", {
71
+ class: "progress-fill",
72
+ style: normalizeStyle({ width: progressPercentage.value + "%" })
73
+ }, null, 4),
74
+ createElementVNode("div", {
75
+ class: "progress-thumb",
76
+ style: normalizeStyle({ left: progressPercentage.value + "%" })
77
+ }, null, 4)
78
+ ])
76
79
  ], 544),
77
- createElementVNode("div", _hoisted_3, toDisplayString(formatTime(duration.value)), 1)
80
+ createElementVNode("span", _hoisted_4, toDisplayString(formatTime(duration.value)), 1)
78
81
  ]);
79
82
  };
80
83
  }
81
84
  };
82
- const TrackProgress = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-4326ac71"]]);
85
+ const TrackProgress = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-0bee7510"]]);
83
86
  export {
84
87
  TrackProgress as default
85
88
  };
@@ -1 +1 @@
1
- {"version":3,"file":"TrackProgress.vue.js","sources":["../../../../../../../src/modules/music/components/player/TrackProgress.vue"],"sourcesContent":["<!-- components/player/TrackProgress.vue -->\n<template>\n <div class=\"track-progress flex flex-v-center gap-small\">\n <div class=\"current-time t-grey t-small\">{{ formatTime(currentTime) }}</div>\n \n <div \n ref=\"progressBarContainer\"\n class=\"progress-bar-container flex-1 h-thin bg-grey radius-extra pos-relative cursor-pointer\"\n @click=\"seek\"\n @mousedown=\"startSeek\"\n @mousemove=\"updateSeekPosition\"\n @mouseup=\"endSeek\"\n @mouseleave=\"endSeek\"\n >\n <div \n class=\"progress-bar h-100 bg-white radius-extra\" \n :style=\"{ width: progressPercentage + '%' }\"\n ></div>\n <div \n class=\"progress-handle w-thin h-thin bg-white radius-round pos-absolute pos-t-50 pos-l-0\"\n :style=\"{ left: `calc(${progressPercentage}% - 4px)`, transform: 'translateY(-50%)' }\"\n ></div>\n </div>\n \n <div class=\"total-time t-grey t-small\">{{ formatTime(duration) }}</div>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, onMounted, onUnmounted } from 'vue';\n\n// Import player store\nimport { state as playerState, actions as playerActions } from '../../store/player.js';\n\n// Refs\nconst progressBarContainer = ref(null);\nconst isSeeking = ref(false);\nconst seekPosition = ref(0);\n\n// Computed properties\nconst currentTime = computed(() => playerState.currentTime);\nconst duration = computed(() => playerState.duration);\nconst progressPercentage = computed(() => {\n if (!duration.value) return 0;\n return Math.min(100, (currentTime.value / duration.value) * 100);\n});\n\n// Methods\nconst formatTime = (seconds) => {\n if (!seconds) return '0:00';\n \n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n \n return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;\n};\n\nconst calculateSeekTime = (event) => {\n if (!progressBarContainer.value || !duration.value) return 0;\n \n const rect = progressBarContainer.value.getBoundingClientRect();\n const offsetX = event.clientX - rect.left;\n const percentage = Math.max(0, Math.min(1, offsetX / rect.width));\n \n return percentage * duration.value;\n};\n\nconst seek = (event) => {\n const seekTime = calculateSeekTime(event);\n playerActions.seek(seekTime);\n};\n\nconst startSeek = (event) => {\n isSeeking.value = true;\n seekPosition.value = calculateSeekTime(event);\n};\n\nconst updateSeekPosition = (event) => {\n if (isSeeking.value) {\n seekPosition.value = calculateSeekTime(event);\n }\n};\n\nconst endSeek = () => {\n if (isSeeking.value) {\n isSeeking.value = false;\n playerActions.seek(seekPosition.value);\n }\n};\n\n// Clean up event listeners when component is unmounted\nonUnmounted(() => {\n isSeeking.value = false;\n});\n</script>\n\n<style scoped>\n.progress-bar-container:hover .progress-bar {\n background-color: rgb(var(--main));\n}\n\n.progress-handle {\n display: none;\n}\n\n.progress-bar-container:hover .progress-handle {\n display: block;\n transform: translateY(-50%) scale(1.3);\n}\n</style>"],"names":["playerState","playerActions"],"mappings":";;;;;;;;;;AAmCA,UAAM,uBAAuB,IAAI,IAAI;AACrC,UAAM,YAAY,IAAI,KAAK;AAC3B,UAAM,eAAe,IAAI,CAAC;AAG1B,UAAM,cAAc,SAAS,MAAMA,MAAY,WAAW;AAC1D,UAAM,WAAW,SAAS,MAAMA,MAAY,QAAQ;AACpD,UAAM,qBAAqB,SAAS,MAAM;AACxC,UAAI,CAAC,SAAS,MAAO,QAAO;AAC5B,aAAO,KAAK,IAAI,KAAM,YAAY,QAAQ,SAAS,QAAS,GAAG;AAAA,IACjE,CAAC;AAGD,UAAM,aAAa,CAAC,YAAY;AAC9B,UAAI,CAAC,QAAS,QAAO;AAErB,YAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,YAAM,mBAAmB,KAAK,MAAM,UAAU,EAAE;AAEhD,aAAO,GAAG,OAAO,IAAI,iBAAiB,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AAAA,IACnE;AAEA,UAAM,oBAAoB,CAAC,UAAU;AACnC,UAAI,CAAC,qBAAqB,SAAS,CAAC,SAAS,MAAO,QAAO;AAE3D,YAAM,OAAO,qBAAqB,MAAM,sBAAqB;AAC7D,YAAM,UAAU,MAAM,UAAU,KAAK;AACrC,YAAM,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,UAAU,KAAK,KAAK,CAAC;AAEhE,aAAO,aAAa,SAAS;AAAA,IAC/B;AAEA,UAAM,OAAO,CAAC,UAAU;AACtB,YAAM,WAAW,kBAAkB,KAAK;AACxCC,cAAc,KAAK,QAAQ;AAAA,IAC7B;AAEA,UAAM,YAAY,CAAC,UAAU;AAC3B,gBAAU,QAAQ;AAClB,mBAAa,QAAQ,kBAAkB,KAAK;AAAA,IAC9C;AAEA,UAAM,qBAAqB,CAAC,UAAU;AACpC,UAAI,UAAU,OAAO;AACnB,qBAAa,QAAQ,kBAAkB,KAAK;AAAA,MAC9C;AAAA,IACF;AAEA,UAAM,UAAU,MAAM;AACpB,UAAI,UAAU,OAAO;AACnB,kBAAU,QAAQ;AAClBA,gBAAc,KAAK,aAAa,KAAK;AAAA,MACvC;AAAA,IACF;AAGA,gBAAY,MAAM;AAChB,gBAAU,QAAQ;AAAA,IACpB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"TrackProgress.vue.js","sources":["../../../../../../../src/modules/music/components/player/TrackProgress.vue"],"sourcesContent":["<!-- components/player/TrackProgress.vue -->\n<template>\n <div class=\"progress-section\">\n <span class=\"time-current\">{{ formatTime(currentTime) }}</span>\n <div \n ref=\"progressBarContainer\"\n class=\"progress-bar\"\n @click=\"seek\"\n @mousedown=\"startSeek\"\n @mousemove=\"updateSeekPosition\"\n @mouseup=\"endSeek\"\n @mouseleave=\"endSeek\"\n >\n <div class=\"progress-track\">\n <div \n class=\"progress-fill\" \n :style=\"{ width: progressPercentage + '%' }\"\n ></div>\n <div \n class=\"progress-thumb\"\n :style=\"{ left: progressPercentage + '%' }\"\n ></div>\n </div>\n </div>\n <span class=\"time-total\">{{ formatTime(duration) }}</span>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, onUnmounted } from 'vue';\n\n// Import player store\nimport { state as playerState, actions as playerActions } from '../../store/player.js';\n\n// Refs\nconst progressBarContainer = ref(null);\nconst isSeeking = ref(false);\nconst seekPosition = ref(0);\n\n// Computed properties\nconst currentTime = computed(() => playerState.currentTime);\nconst duration = computed(() => playerState.duration);\nconst progressPercentage = computed(() => {\n if (!duration.value) return 0;\n return Math.min(100, (currentTime.value / duration.value) * 100);\n});\n\n// Methods\nconst formatTime = (seconds) => {\n if (!seconds) return '0:00';\n \n const minutes = Math.floor(seconds / 60);\n const remainingSeconds = Math.floor(seconds % 60);\n \n return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;\n};\n\nconst calculateSeekTime = (event) => {\n if (!progressBarContainer.value || !duration.value) return 0;\n \n const rect = progressBarContainer.value.getBoundingClientRect();\n const offsetX = event.clientX - rect.left;\n const percentage = Math.max(0, Math.min(1, offsetX / rect.width));\n \n return percentage * duration.value;\n};\n\nconst seek = (event) => {\n const seekTime = calculateSeekTime(event);\n playerActions.seek(seekTime);\n};\n\nconst startSeek = (event) => {\n isSeeking.value = true;\n seekPosition.value = calculateSeekTime(event);\n};\n\nconst updateSeekPosition = (event) => {\n if (isSeeking.value) {\n seekPosition.value = calculateSeekTime(event);\n }\n};\n\nconst endSeek = () => {\n if (isSeeking.value) {\n isSeeking.value = false;\n playerActions.seek(seekPosition.value);\n }\n};\n\n// Clean up event listeners when component is unmounted\nonUnmounted(() => {\n isSeeking.value = false;\n});\n</script>\n\n<style scoped>\n/* Progress Section */\n.progress-section {\n display: flex;\n align-items: center;\n gap: 12px;\n width: 100%;\n}\n\n.time-current,\n.time-total {\n font-size: 11px;\n color: rgb(var(--grey));\n font-weight: 400;\n min-width: 32px;\n text-align: center;\n}\n\n.progress-bar {\n flex: 1;\n height: 12px;\n display: flex;\n align-items: center;\n cursor: pointer;\n padding: 4px 0;\n}\n\n.progress-track {\n position: relative;\n width: 100%;\n height: 4px;\n background: rgb(79, 79, 79);\n border-radius: 2px;\n overflow: hidden;\n transition: height 0.2s ease;\n}\n\n.progress-fill {\n height: 100%;\n background: rgb(var(--white));\n border-radius: 2px;\n transition: width 0.1s ease;\n}\n\n.progress-thumb {\n position: absolute;\n top: 50%;\n width: 12px;\n height: 12px;\n background: rgb(var(--white));\n border-radius: 50%;\n transform: translate(-50%, -50%);\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n\n.progress-bar:hover .progress-thumb {\n opacity: 1;\n}\n\n.progress-bar:hover .progress-track {\n height: 6px;\n}\n\n.progress-bar:hover .progress-fill {\n background: rgb(var(--main));\n}\n</style>"],"names":["playerState","playerActions"],"mappings":";;;;;;;;;;;AAmCA,UAAM,uBAAuB,IAAI,IAAI;AACrC,UAAM,YAAY,IAAI,KAAK;AAC3B,UAAM,eAAe,IAAI,CAAC;AAG1B,UAAM,cAAc,SAAS,MAAMA,MAAY,WAAW;AAC1D,UAAM,WAAW,SAAS,MAAMA,MAAY,QAAQ;AACpD,UAAM,qBAAqB,SAAS,MAAM;AACxC,UAAI,CAAC,SAAS,MAAO,QAAO;AAC5B,aAAO,KAAK,IAAI,KAAM,YAAY,QAAQ,SAAS,QAAS,GAAG;AAAA,IACjE,CAAC;AAGD,UAAM,aAAa,CAAC,YAAY;AAC9B,UAAI,CAAC,QAAS,QAAO;AAErB,YAAM,UAAU,KAAK,MAAM,UAAU,EAAE;AACvC,YAAM,mBAAmB,KAAK,MAAM,UAAU,EAAE;AAEhD,aAAO,GAAG,OAAO,IAAI,iBAAiB,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AAAA,IACnE;AAEA,UAAM,oBAAoB,CAAC,UAAU;AACnC,UAAI,CAAC,qBAAqB,SAAS,CAAC,SAAS,MAAO,QAAO;AAE3D,YAAM,OAAO,qBAAqB,MAAM,sBAAqB;AAC7D,YAAM,UAAU,MAAM,UAAU,KAAK;AACrC,YAAM,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,UAAU,KAAK,KAAK,CAAC;AAEhE,aAAO,aAAa,SAAS;AAAA,IAC/B;AAEA,UAAM,OAAO,CAAC,UAAU;AACtB,YAAM,WAAW,kBAAkB,KAAK;AACxCC,cAAc,KAAK,QAAQ;AAAA,IAC7B;AAEA,UAAM,YAAY,CAAC,UAAU;AAC3B,gBAAU,QAAQ;AAClB,mBAAa,QAAQ,kBAAkB,KAAK;AAAA,IAC9C;AAEA,UAAM,qBAAqB,CAAC,UAAU;AACpC,UAAI,UAAU,OAAO;AACnB,qBAAa,QAAQ,kBAAkB,KAAK;AAAA,MAC9C;AAAA,IACF;AAEA,UAAM,UAAU,MAAM;AACpB,UAAI,UAAU,OAAO;AACnB,kBAAU,QAAQ;AAClBA,gBAAc,KAAK,aAAa,KAAK;AAAA,MACvC;AAAA,IACF;AAGA,gBAAY,MAAM;AAChB,gBAAU,QAAQ;AAAA,IACpB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -4,6 +4,7 @@ const vue = require("vue");
4
4
  const player = require("../../store/player.cjs");
5
5
  ;/* empty css */
6
6
  const _pluginVue_exportHelper = require("../../../../../../_virtual/_plugin-vue_export-helper.cjs");
7
+ const _hoisted_1 = { class: "volume-control" };
7
8
  const _sfc_main = {
8
9
  __name: "VolumeControl",
9
10
  setup(__props) {
@@ -41,32 +42,36 @@ const _sfc_main = {
41
42
  isChangingVolume.value = false;
42
43
  };
43
44
  return (_ctx, _cache) => {
44
- return vue.openBlock(), vue.createElementBlock("div", {
45
- ref_key: "volumeBarContainer",
46
- ref: volumeBarContainer,
47
- class: "volume-bar-container w-100 h-thin bg-grey-transp-50 radius-extra pos-relative cursor-pointer",
48
- onClick: setVolume,
49
- onMousedown: startVolumeChange,
50
- onMousemove: updateVolumePosition,
51
- onMouseup: endVolumeChange,
52
- onMouseleave: endVolumeChange
53
- }, [
45
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
54
46
  vue.createElementVNode("div", {
55
- class: vue.normalizeClass(["volume-bar h-100 bg-white radius-extra", { "muted": muted.value }]),
56
- style: vue.normalizeStyle({ width: volumePercentage.value + "%" })
57
- }, null, 6),
58
- vue.createElementVNode("div", {
59
- class: "volume-handle w-thin h-thin bg-white radius-round pos-absolute pos-t-50 pos-l-0",
60
- style: vue.normalizeStyle({
61
- left: `calc(${volumePercentage.value}% - 4px)`,
62
- transform: "translateY(-50%)",
63
- opacity: muted.value ? 0 : 1
64
- })
65
- }, null, 4)
66
- ], 544);
47
+ ref_key: "volumeBarContainer",
48
+ ref: volumeBarContainer,
49
+ class: "volume-bar-container",
50
+ onClick: setVolume,
51
+ onMousedown: startVolumeChange,
52
+ onMousemove: updateVolumePosition,
53
+ onMouseup: endVolumeChange,
54
+ onMouseleave: endVolumeChange
55
+ }, [
56
+ vue.createElementVNode("div", {
57
+ class: "volume-track",
58
+ style: vue.normalizeStyle({
59
+ background: `linear-gradient(to right, rgb(var(--main)) 0%, rgb(var(--main)) ${volumePercentage.value}%, rgb(79, 79, 79) ${volumePercentage.value}%, rgb(79, 79, 79) 100%)`
60
+ })
61
+ }, [
62
+ vue.createElementVNode("div", {
63
+ class: "volume-thumb",
64
+ style: vue.normalizeStyle({
65
+ left: `${volumePercentage.value}%`,
66
+ opacity: muted.value ? 0 : 1
67
+ })
68
+ }, null, 4)
69
+ ], 4)
70
+ ], 544)
71
+ ]);
67
72
  };
68
73
  }
69
74
  };
70
- const VolumeControl = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-08586594"]]);
75
+ const VolumeControl = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-a6e8eccb"]]);
71
76
  exports.default = VolumeControl;
72
77
  //# sourceMappingURL=VolumeControl.vue.cjs.map