@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.
- package/dist/_virtual/index.cjs +4 -4
- package/dist/_virtual/index.js +4 -4
- package/dist/_virtual/index2.cjs +4 -4
- package/dist/_virtual/index2.js +4 -4
- package/dist/builder.cjs +53 -90
- package/dist/builder.js +54 -91
- package/dist/{crud-B-kQw3Z5.cjs → crud-JN_LFj01.cjs} +3 -0
- package/dist/{crud-Cwx5VlSm.js → crud-sE7GLPbj.js} +3 -0
- package/dist/globals.server.cjs +322 -3
- package/dist/globals.server.js +303 -1
- package/dist/{globals.verifier-D68mHEBl.cjs → globals.verifier-C0zj_LLo.cjs} +8 -1
- package/dist/{globals.verifier-CWFz5Gh2.js → globals.verifier-DFqKQ7hK.js} +8 -1
- package/dist/inventory.server.cjs +2 -2
- package/dist/inventory.server.js +2 -2
- package/dist/{main-SZQ1QjeP.js → main-CJm5myDI.js} +631 -607
- package/dist/{main-MzmGbSxs.cjs → main-DTaE01lg.cjs} +6 -6
- package/dist/martyrs/src/components/Calendar/Calendar.vue2.cjs +1 -1
- package/dist/martyrs/src/components/Calendar/Calendar.vue2.cjs.map +1 -1
- package/dist/martyrs/src/components/Calendar/Calendar.vue2.js +1 -1
- package/dist/martyrs/src/components/Calendar/Calendar.vue2.js.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs +33 -7
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +33 -7
- package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
- package/dist/martyrs/src/components/Field/{Field.vue2.cjs → Field.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Field/{Field.vue2.js.map → Field.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Field/{Field.vue2.js → Field.vue.js} +2 -2
- package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -0
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +1 -1
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +1 -1
- package/dist/martyrs/src/components/Menu/{Menu.vue.cjs → Menu.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Menu/Menu.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Menu/{Menu.vue.js → Menu.vue2.js} +2 -2
- package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Menu/MenuItem.vue.js +2 -2
- package/dist/martyrs/src/components/Menu/MenuItem.vue.js.map +1 -1
- package/dist/martyrs/src/components/PhotoViewer/PhotoViewer.vue.js +4 -4
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +2 -2
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +2 -2
- package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.cjs +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.cjs +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/BlockSearch.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +5 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +5 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/entities/IconTime.vue.cjs +2 -2
- package/dist/martyrs/src/modules/icons/entities/IconTime.vue.js +2 -2
- package/dist/martyrs/src/modules/icons/navigation/IconChevronLeft.vue.cjs +2 -2
- package/dist/martyrs/src/modules/icons/navigation/IconChevronLeft.vue.js +2 -2
- package/dist/martyrs/src/modules/icons/navigation/IconChevronRight.vue.cjs +2 -2
- package/dist/martyrs/src/modules/icons/navigation/IconChevronRight.vue.js +2 -2
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js +6 -6
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +22 -15
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +23 -16
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +31 -13
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +33 -15
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +39 -22
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +39 -22
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +385 -125
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +391 -131
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +24 -7
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +25 -8
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs +99 -87
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +111 -99
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.cjs +21 -0
- package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js +21 -0
- package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +442 -210
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +445 -213
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +92 -117
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +93 -118
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.cjs +72 -113
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js +78 -119
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +15 -12
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +15 -12
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +558 -429
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +560 -431
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +146 -284
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +149 -287
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +460 -63
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +462 -65
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +126 -136
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +129 -139
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.cjs +18 -15
- package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.js +18 -15
- package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.cjs +28 -23
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +29 -24
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/music.client.cjs +3 -6
- package/dist/martyrs/src/modules/music/music.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/music.client.js +9 -12
- package/dist/martyrs/src/modules/music/music.client.js.map +1 -1
- package/dist/martyrs/src/modules/music/router/music.cjs +27 -1
- package/dist/martyrs/src/modules/music/router/music.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/router/music.js +27 -1
- package/dist/martyrs/src/modules/music/router/music.js.map +1 -1
- package/dist/martyrs/src/modules/music/store/artists.cjs +6 -4
- package/dist/martyrs/src/modules/music/store/artists.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/store/artists.js +6 -4
- package/dist/martyrs/src/modules/music/store/artists.js.map +1 -1
- package/dist/martyrs/src/modules/music/store/player.cjs +5 -0
- package/dist/martyrs/src/modules/music/store/player.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/store/player.js +5 -0
- package/dist/martyrs/src/modules/music/store/player.js.map +1 -1
- package/dist/martyrs/src/modules/music/store/tracks.cjs +22 -0
- package/dist/martyrs/src/modules/music/store/tracks.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/store/tracks.js +22 -0
- package/dist/martyrs/src/modules/music/store/tracks.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormCustomerDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/router/organizations.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/router/organizations.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.cjs +4 -3
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.js +4 -3
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttBar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.cjs +37 -70
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.js +38 -71
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttChart.vue.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +2 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +6 -5
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs +45 -52
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +46 -53
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +1 -1
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/music.server.cjs +124 -31
- package/dist/music.server.js +124 -31
- package/dist/organizations.server.cjs +1 -1
- package/dist/organizations.server.js +1 -1
- package/dist/products.server.cjs +2 -2
- package/dist/products.server.js +2 -2
- package/dist/rents.server.cjs +3 -3
- package/dist/rents.server.js +3 -3
- package/dist/style.css +373 -80
- package/dist/{web-D7lZjuC0.js → web-Dkk0_7TA.js} +1 -1
- package/dist/{web-D-YZ9KHz.cjs → web-stVkXd0l.cjs} +1 -1
- package/package.json +1 -1
- package/src/builder/modes/ssr.prod.js +21 -5
- package/src/builder/rspack/rspack.config.spa.client.js +0 -44
- package/src/builder/rspack/rspack.config.ssr.client.js +40 -40
- package/src/components/Calendar/Calendar.vue +378 -377
- package/src/components/Feed/Feed.vue +28 -2
- package/src/modules/globals/controllers/classes/crud/crud.policies.js +5 -0
- package/src/modules/globals/controllers/classes/globals.validator.js +8 -1
- package/src/modules/globals/views/components/layouts/Client.vue +7 -0
- package/src/modules/music/README.md +8 -0
- package/src/modules/music/components/SidebarMusic.vue +6 -9
- package/src/modules/music/components/cards/AlbumCard.vue +20 -14
- package/src/modules/music/components/cards/ArtistCard.vue +1 -1
- package/src/modules/music/components/cards/PlaylistCard.vue +31 -11
- package/src/modules/music/components/cards/TrackListCard.vue +24 -13
- package/src/modules/music/components/forms/PlaylistForm.vue +417 -107
- package/src/modules/music/components/forms/SearchForm.vue +31 -8
- package/src/modules/music/components/forms/TrackForm.vue +50 -32
- package/src/modules/music/components/layouts/MusicBottomPlayer.vue +17 -0
- package/src/modules/music/components/pages/Album.vue +373 -186
- package/src/modules/music/components/pages/Artist.vue +54 -94
- package/src/modules/music/components/pages/MusicHome.vue +59 -56
- package/src/modules/music/components/pages/MusicLibrary.vue +13 -11
- package/src/modules/music/components/pages/Playlist.vue +495 -379
- package/src/modules/music/components/pages/SearchResults.vue +185 -313
- package/src/modules/music/components/pages/Track.vue +363 -69
- package/src/modules/music/components/player/MusicPlayer.vue +368 -97
- package/src/modules/music/components/player/TrackProgress.vue +76 -22
- package/src/modules/music/components/player/VolumeControl.vue +61 -28
- package/src/modules/music/controllers/search.controller.js +3 -0
- package/src/modules/music/controllers/stream.controller.js +11 -3
- package/src/modules/music/middlewares/playlists.verifier.js +1 -1
- package/src/modules/music/music.client.js +3 -6
- package/src/modules/music/music.server.js +8 -4
- package/src/modules/music/router/music.js +8 -1
- package/src/modules/music/routes/albums.routes.js +37 -5
- package/src/modules/music/routes/artists.routes.js +14 -4
- package/src/modules/music/routes/genres.routes.js +5 -1
- package/src/modules/music/routes/playlists.routes.js +42 -9
- package/src/modules/music/routes/tracks.routes.js +27 -2
- package/src/modules/music/store/artists.js +6 -2
- package/src/modules/music/store/player.js +6 -0
- package/src/modules/music/store/tracks.js +31 -0
- package/src/modules/music/websocket/streaming.handler.js +7 -1
- package/src/modules/rents/controllers/services/rents.services.js +2 -2
- package/src/modules/rents/views/components/pages/Gant/GanttBar.vue +4 -3
- package/src/modules/rents/views/components/pages/Gant/GanttChart.vue +42 -40
- package/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue +3 -1
- package/src/modules/rents/views/components/pages/Rents.vue +60 -56
- package/dist/globals.websocket-DzvdIBf6.js +0 -306
- package/dist/globals.websocket-k6_B1T7k.cjs +0 -322
- package/dist/martyrs/src/components/Field/Field.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Menu/Menu.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/Menu/Menu.vue.js.map +0 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.cjs +0 -69
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.js +0 -69
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.js.map +0 -1
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs +0 -104
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js +0 -104
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js.map +0 -1
- package/src/modules/music/components/cards/TrackCard.vue +0 -86
- package/src/modules/music/components/layouts/MusicLayout.vue +0 -83
|
@@ -13,7 +13,7 @@ const IconEllipsis = require("../../../icons/navigation/IconEllipsis.vue.cjs");
|
|
|
13
13
|
const AdjustmentForm = require("../forms/AdjustmentForm.vue.cjs");
|
|
14
14
|
const StockAlertsForm = require("../forms/StockAlertsForm.vue.cjs");
|
|
15
15
|
const HistoryView = require("../forms/HistoryView.vue.cjs");
|
|
16
|
-
const ColumnSettingsMenu =
|
|
16
|
+
const ColumnSettingsMenu = ;/* empty css */
|
|
17
17
|
const _inventory_store = require("../../store/ inventory.store.cjs");
|
|
18
18
|
const products = require("../../../products/store/products.cjs");
|
|
19
19
|
const auth = require("../../../auth/views/store/auth.cjs");
|
|
@@ -3,7 +3,7 @@ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toString
|
|
|
3
3
|
const vue = require("vue");
|
|
4
4
|
const Block = require("../../../../components/Block/Block.vue.cjs");
|
|
5
5
|
const Button = require("../../../../components/Button/Button.vue.cjs");
|
|
6
|
-
const Field = require("../../../../components/Field/Field.
|
|
6
|
+
const Field = require("../../../../components/Field/Field.vue.cjs");
|
|
7
7
|
const Feed = require("../../../../components/Feed/Feed.vue.cjs");
|
|
8
8
|
;/* empty css */
|
|
9
9
|
;/* empty css */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ref, computed, onMounted, createElementBlock, openBlock, createElementVNode, createVNode, withCtx, unref, Fragment, renderList, createBlock, createCommentVNode, toDisplayString } from "vue";
|
|
2
2
|
import _sfc_main$4 from "../../../../components/Block/Block.vue.js";
|
|
3
3
|
import _sfc_main$7 from "../../../../components/Button/Button.vue.js";
|
|
4
|
-
import Field from "../../../../components/Field/Field.
|
|
4
|
+
import Field from "../../../../components/Field/Field.vue.js";
|
|
5
5
|
import _sfc_main$2 from "../../../../components/Feed/Feed.vue.js";
|
|
6
6
|
/* empty css */
|
|
7
7
|
/* empty css */
|
|
@@ -9,10 +9,13 @@ const albums = require("../../store/albums.cjs");
|
|
|
9
9
|
;/* empty css */
|
|
10
10
|
const _pluginVue_exportHelper = require("../../../../../../_virtual/_plugin-vue_export-helper.cjs");
|
|
11
11
|
const _hoisted_1 = { class: "album-cover pos-relative" };
|
|
12
|
-
const _hoisted_2 = {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
const _hoisted_2 = {
|
|
13
|
+
key: 0,
|
|
14
|
+
class: "album-overlay pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center flex transition-cubic-in-out"
|
|
15
|
+
};
|
|
16
|
+
const _hoisted_3 = { class: "album-info pd-medium bg-light" };
|
|
17
|
+
const _hoisted_4 = { class: "mn-b-thin t-medium t-truncate" };
|
|
18
|
+
const _hoisted_5 = { class: "t-transp t-small t-truncate" };
|
|
16
19
|
const _sfc_main = {
|
|
17
20
|
__name: "AlbumCard",
|
|
18
21
|
props: {
|
|
@@ -26,10 +29,14 @@ const _sfc_main = {
|
|
|
26
29
|
const albumInfo = vue.computed(() => {
|
|
27
30
|
const releaseYear = props.album.releaseDate ? new Date(props.album.releaseDate).getFullYear() : "";
|
|
28
31
|
let artistName = "Unknown Artist";
|
|
29
|
-
if (props.album.
|
|
32
|
+
if (props.album.artists && props.album.artists.length > 0) {
|
|
33
|
+
if (props.album.artists[0]?.name) {
|
|
34
|
+
artistName = props.album.artists.map((artist) => artist.name).join(", ");
|
|
35
|
+
} else if (typeof props.album.artists[0] === "string") {
|
|
36
|
+
artistName = "Various Artists";
|
|
37
|
+
}
|
|
38
|
+
} else if (props.album.artist?.name) {
|
|
30
39
|
artistName = props.album.artist.name;
|
|
31
|
-
} else if (typeof props.album.artist === "string") {
|
|
32
|
-
artistName = props.album.artist;
|
|
33
40
|
}
|
|
34
41
|
return releaseYear ? `${artistName} • ${releaseYear}` : artistName;
|
|
35
42
|
});
|
|
@@ -47,30 +54,30 @@ const _sfc_main = {
|
|
|
47
54
|
const _component_router_link = vue.resolveComponent("router-link");
|
|
48
55
|
return vue.openBlock(), vue.createBlock(_component_router_link, {
|
|
49
56
|
to: { name: "album", params: { url: __props.album.url } },
|
|
50
|
-
class: "album-card d-block radius-
|
|
57
|
+
class: "album-card d-block radius-medium o-hidden"
|
|
51
58
|
}, {
|
|
52
59
|
default: vue.withCtx(() => [
|
|
53
60
|
vue.createElementVNode("div", _hoisted_1, [
|
|
54
61
|
vue.createVNode(Media.default, {
|
|
55
|
-
url: __props.album.coverUrl || "/
|
|
62
|
+
url: __props.album.coverArt || __props.album.coverUrl || "/logo/logo-placeholder.jpg",
|
|
56
63
|
class: "w-100 aspect-1x1 object-fit-cover"
|
|
57
64
|
}, null, 8, ["url"]),
|
|
58
|
-
vue.
|
|
65
|
+
__props.album.totalTracks && __props.album.totalTracks > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2, [
|
|
59
66
|
vue.createVNode(Button.default, {
|
|
60
|
-
onClick: _cache[0] || (_cache[0] = vue.withModifiers(($event) => playAlbum(__props.album), ["stop"])),
|
|
61
|
-
class: "play-button bg-main radius-round flex-center flex aspect-1x1",
|
|
67
|
+
onClick: _cache[0] || (_cache[0] = vue.withModifiers(($event) => playAlbum(__props.album), ["stop", "prevent"])),
|
|
68
|
+
class: "play-button i-big bg-main radius-round flex-center flex aspect-1x1",
|
|
62
69
|
showLoader: false,
|
|
63
70
|
showSucces: false
|
|
64
71
|
}, {
|
|
65
72
|
default: vue.withCtx(() => [
|
|
66
73
|
vue.createVNode(IconPlay.default, {
|
|
67
74
|
class: "i-small",
|
|
68
|
-
fill: "rgb(var(--
|
|
75
|
+
fill: "rgb(var(--white))"
|
|
69
76
|
})
|
|
70
77
|
]),
|
|
71
78
|
_: 1
|
|
72
79
|
})
|
|
73
|
-
])
|
|
80
|
+
])) : vue.createCommentVNode("", true)
|
|
74
81
|
]),
|
|
75
82
|
vue.createElementVNode("div", _hoisted_3, [
|
|
76
83
|
vue.createElementVNode("h3", _hoisted_4, vue.toDisplayString(__props.album.title), 1),
|
|
@@ -82,6 +89,6 @@ const _sfc_main = {
|
|
|
82
89
|
};
|
|
83
90
|
}
|
|
84
91
|
};
|
|
85
|
-
const AlbumCard = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-
|
|
92
|
+
const AlbumCard = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-faf7f060"]]);
|
|
86
93
|
exports.default = AlbumCard;
|
|
87
94
|
//# sourceMappingURL=AlbumCard.vue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AlbumCard.vue.cjs","sources":["../../../../../../../src/modules/music/components/cards/AlbumCard.vue"],"sourcesContent":["<!-- components/cards/AlbumCard.vue -->\n<template>\n <router-link \n :to=\"{ name: 'album', params: { url: album.url } }\" \n class=\"album-card d-block radius-
|
|
1
|
+
{"version":3,"file":"AlbumCard.vue.cjs","sources":["../../../../../../../src/modules/music/components/cards/AlbumCard.vue"],"sourcesContent":["<!-- components/cards/AlbumCard.vue -->\n<template>\n <router-link \n :to=\"{ name: 'album', params: { url: album.url } }\" \n class=\"album-card d-block radius-medium o-hidden\"\n >\n <div class=\"album-cover pos-relative\">\n <Media \n :url=\"album.coverArt || album.coverUrl || '/logo/logo-placeholder.jpg'\" \n class=\"w-100 aspect-1x1 object-fit-cover\"\n />\n <div v-if=\"album.totalTracks && album.totalTracks > 0\" class=\"album-overlay pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center flex transition-cubic-in-out\">\n <Button \n @click.stop.prevent=\"playAlbum(album)\" \n class=\"play-button i-big bg-main radius-round flex-center flex aspect-1x1\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPlay class=\"i-small\" fill=\"rgb(var(--white))\" />\n </Button>\n </div>\n </div>\n <div class=\"album-info pd-medium bg-light\">\n <h3 class=\"mn-b-thin t-medium t-truncate\">{{ album.title }}</h3>\n <p class=\"t-transp t-small t-truncate\">{{ albumInfo }}</p>\n </div>\n </router-link>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\n\n// Import player store & albums store\nimport { actions as playerActions } from '../../store/player.js';\nimport { state as albumsState, actions as albumsActions } from '../../store/albums.js';\n\nconst props = defineProps({\n album: {\n type: Object,\n required: true\n }\n});\n\n// Computed properties\nconst albumInfo = computed(() => {\n const releaseYear = props.album.releaseDate ? new Date(props.album.releaseDate).getFullYear() : '';\n let artistName = 'Unknown Artist';\n \n // Handle artists array (model uses 'artists' not 'artist')\n if (props.album.artists && props.album.artists.length > 0) {\n // If populated, artists[0] will have name property\n if (props.album.artists[0]?.name) {\n artistName = props.album.artists.map(artist => artist.name).join(', ');\n } else if (typeof props.album.artists[0] === 'string') {\n // If not populated, it might be just IDs\n artistName = 'Various Artists';\n }\n } else if (props.album.artist?.name) {\n // Fallback for old data structure\n artistName = props.album.artist.name;\n }\n \n return releaseYear ? `${artistName} • ${releaseYear}` : artistName;\n});\n\n// Methods\nconst playAlbum = async (album) => {\n // If album tracks are already loaded in state, use those\n if (albumsState.currentAlbum && albumsState.currentAlbum._id === album._id && albumsState.currentAlbumTracks.length > 0) {\n playerActions.setQueue(albumsState.currentAlbumTracks);\n return;\n }\n \n // Otherwise fetch tracks for this album\n const tracks = await albumsActions.fetchAlbumTracks(album._id);\n \n if (tracks && tracks.length > 0) {\n playerActions.setQueue(tracks);\n }\n};\n</script>\n\n<style scoped>\n.album-card {\n transition: transform 0.3s ease;\n}\n\n.album-card:hover {\n transform: translateY(-5px);\n}\n\n.album-overlay {\n background: rgba(0, 0, 0, 0.5);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.album-card:hover .album-overlay {\n opacity: 1;\n}\n\n.play-button {\n transform: scale(0.8);\n transition: transform 0.3s ease;\n}\n\n.album-card:hover .play-button {\n transform: scale(1);\n}\n</style>"],"names":["computed","albumsState","playerActions","albumsActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,UAAM,QAAQ;AAQd,UAAM,YAAYA,IAAAA,SAAS,MAAM;AAC/B,YAAM,cAAc,MAAM,MAAM,cAAc,IAAI,KAAK,MAAM,MAAM,WAAW,EAAE,YAAW,IAAK;AAChG,UAAI,aAAa;AAGjB,UAAI,MAAM,MAAM,WAAW,MAAM,MAAM,QAAQ,SAAS,GAAG;AAEzD,YAAI,MAAM,MAAM,QAAQ,CAAC,GAAG,MAAM;AAChC,uBAAa,MAAM,MAAM,QAAQ,IAAI,YAAU,OAAO,IAAI,EAAE,KAAK,IAAI;AAAA,QACvE,WAAW,OAAO,MAAM,MAAM,QAAQ,CAAC,MAAM,UAAU;AAErD,uBAAa;AAAA,QACf;AAAA,MACF,WAAW,MAAM,MAAM,QAAQ,MAAM;AAEnC,qBAAa,MAAM,MAAM,OAAO;AAAA,MAClC;AAEA,aAAO,cAAc,GAAG,UAAU,MAAM,WAAW,KAAK;AAAA,IAC1D,CAAC;AAGD,UAAM,YAAY,OAAO,UAAU;AAEjC,UAAIC,aAAY,gBAAgBA,OAAAA,MAAY,aAAa,QAAQ,MAAM,OAAOA,OAAAA,MAAY,mBAAmB,SAAS,GAAG;AACvHC,uBAAc,SAASD,OAAAA,MAAY,kBAAkB;AACrD;AAAA,MACF;AAGA,YAAM,SAAS,MAAME,OAAAA,QAAc,iBAAiB,MAAM,GAAG;AAE7D,UAAI,UAAU,OAAO,SAAS,GAAG;AAC/BD,eAAAA,QAAc,SAAS,MAAM;AAAA,MAC/B;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { computed, resolveComponent, createBlock, openBlock, withCtx, createElementVNode, createVNode, withModifiers, toDisplayString } from "vue";
|
|
1
|
+
import { computed, resolveComponent, createBlock, openBlock, withCtx, createElementVNode, createVNode, createElementBlock, createCommentVNode, withModifiers, toDisplayString } from "vue";
|
|
2
2
|
import Media from "../../../../components/Media/Media.vue.js";
|
|
3
3
|
import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
|
|
4
4
|
import _sfc_main$2 from "../../../icons/navigation/IconPlay.vue.js";
|
|
@@ -7,10 +7,13 @@ import { state, actions as actions$1 } from "../../store/albums.js";
|
|
|
7
7
|
/* empty css */
|
|
8
8
|
import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.js";
|
|
9
9
|
const _hoisted_1 = { class: "album-cover pos-relative" };
|
|
10
|
-
const _hoisted_2 = {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
const _hoisted_2 = {
|
|
11
|
+
key: 0,
|
|
12
|
+
class: "album-overlay pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center flex transition-cubic-in-out"
|
|
13
|
+
};
|
|
14
|
+
const _hoisted_3 = { class: "album-info pd-medium bg-light" };
|
|
15
|
+
const _hoisted_4 = { class: "mn-b-thin t-medium t-truncate" };
|
|
16
|
+
const _hoisted_5 = { class: "t-transp t-small t-truncate" };
|
|
14
17
|
const _sfc_main = {
|
|
15
18
|
__name: "AlbumCard",
|
|
16
19
|
props: {
|
|
@@ -24,10 +27,14 @@ const _sfc_main = {
|
|
|
24
27
|
const albumInfo = computed(() => {
|
|
25
28
|
const releaseYear = props.album.releaseDate ? new Date(props.album.releaseDate).getFullYear() : "";
|
|
26
29
|
let artistName = "Unknown Artist";
|
|
27
|
-
if (props.album.
|
|
30
|
+
if (props.album.artists && props.album.artists.length > 0) {
|
|
31
|
+
if (props.album.artists[0]?.name) {
|
|
32
|
+
artistName = props.album.artists.map((artist) => artist.name).join(", ");
|
|
33
|
+
} else if (typeof props.album.artists[0] === "string") {
|
|
34
|
+
artistName = "Various Artists";
|
|
35
|
+
}
|
|
36
|
+
} else if (props.album.artist?.name) {
|
|
28
37
|
artistName = props.album.artist.name;
|
|
29
|
-
} else if (typeof props.album.artist === "string") {
|
|
30
|
-
artistName = props.album.artist;
|
|
31
38
|
}
|
|
32
39
|
return releaseYear ? `${artistName} • ${releaseYear}` : artistName;
|
|
33
40
|
});
|
|
@@ -45,30 +52,30 @@ const _sfc_main = {
|
|
|
45
52
|
const _component_router_link = resolveComponent("router-link");
|
|
46
53
|
return openBlock(), createBlock(_component_router_link, {
|
|
47
54
|
to: { name: "album", params: { url: __props.album.url } },
|
|
48
|
-
class: "album-card d-block radius-
|
|
55
|
+
class: "album-card d-block radius-medium o-hidden"
|
|
49
56
|
}, {
|
|
50
57
|
default: withCtx(() => [
|
|
51
58
|
createElementVNode("div", _hoisted_1, [
|
|
52
59
|
createVNode(Media, {
|
|
53
|
-
url: __props.album.coverUrl || "/
|
|
60
|
+
url: __props.album.coverArt || __props.album.coverUrl || "/logo/logo-placeholder.jpg",
|
|
54
61
|
class: "w-100 aspect-1x1 object-fit-cover"
|
|
55
62
|
}, null, 8, ["url"]),
|
|
56
|
-
|
|
63
|
+
__props.album.totalTracks && __props.album.totalTracks > 0 ? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
57
64
|
createVNode(_sfc_main$1, {
|
|
58
|
-
onClick: _cache[0] || (_cache[0] = withModifiers(($event) => playAlbum(__props.album), ["stop"])),
|
|
59
|
-
class: "play-button bg-main radius-round flex-center flex aspect-1x1",
|
|
65
|
+
onClick: _cache[0] || (_cache[0] = withModifiers(($event) => playAlbum(__props.album), ["stop", "prevent"])),
|
|
66
|
+
class: "play-button i-big bg-main radius-round flex-center flex aspect-1x1",
|
|
60
67
|
showLoader: false,
|
|
61
68
|
showSucces: false
|
|
62
69
|
}, {
|
|
63
70
|
default: withCtx(() => [
|
|
64
71
|
createVNode(_sfc_main$2, {
|
|
65
72
|
class: "i-small",
|
|
66
|
-
fill: "rgb(var(--
|
|
73
|
+
fill: "rgb(var(--white))"
|
|
67
74
|
})
|
|
68
75
|
]),
|
|
69
76
|
_: 1
|
|
70
77
|
})
|
|
71
|
-
])
|
|
78
|
+
])) : createCommentVNode("", true)
|
|
72
79
|
]),
|
|
73
80
|
createElementVNode("div", _hoisted_3, [
|
|
74
81
|
createElementVNode("h3", _hoisted_4, toDisplayString(__props.album.title), 1),
|
|
@@ -80,7 +87,7 @@ const _sfc_main = {
|
|
|
80
87
|
};
|
|
81
88
|
}
|
|
82
89
|
};
|
|
83
|
-
const AlbumCard = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
90
|
+
const AlbumCard = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-faf7f060"]]);
|
|
84
91
|
export {
|
|
85
92
|
AlbumCard as default
|
|
86
93
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AlbumCard.vue.js","sources":["../../../../../../../src/modules/music/components/cards/AlbumCard.vue"],"sourcesContent":["<!-- components/cards/AlbumCard.vue -->\n<template>\n <router-link \n :to=\"{ name: 'album', params: { url: album.url } }\" \n class=\"album-card d-block radius-
|
|
1
|
+
{"version":3,"file":"AlbumCard.vue.js","sources":["../../../../../../../src/modules/music/components/cards/AlbumCard.vue"],"sourcesContent":["<!-- components/cards/AlbumCard.vue -->\n<template>\n <router-link \n :to=\"{ name: 'album', params: { url: album.url } }\" \n class=\"album-card d-block radius-medium o-hidden\"\n >\n <div class=\"album-cover pos-relative\">\n <Media \n :url=\"album.coverArt || album.coverUrl || '/logo/logo-placeholder.jpg'\" \n class=\"w-100 aspect-1x1 object-fit-cover\"\n />\n <div v-if=\"album.totalTracks && album.totalTracks > 0\" class=\"album-overlay pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center flex transition-cubic-in-out\">\n <Button \n @click.stop.prevent=\"playAlbum(album)\" \n class=\"play-button i-big bg-main radius-round flex-center flex aspect-1x1\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPlay class=\"i-small\" fill=\"rgb(var(--white))\" />\n </Button>\n </div>\n </div>\n <div class=\"album-info pd-medium bg-light\">\n <h3 class=\"mn-b-thin t-medium t-truncate\">{{ album.title }}</h3>\n <p class=\"t-transp t-small t-truncate\">{{ albumInfo }}</p>\n </div>\n </router-link>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\n\n// Import player store & albums store\nimport { actions as playerActions } from '../../store/player.js';\nimport { state as albumsState, actions as albumsActions } from '../../store/albums.js';\n\nconst props = defineProps({\n album: {\n type: Object,\n required: true\n }\n});\n\n// Computed properties\nconst albumInfo = computed(() => {\n const releaseYear = props.album.releaseDate ? new Date(props.album.releaseDate).getFullYear() : '';\n let artistName = 'Unknown Artist';\n \n // Handle artists array (model uses 'artists' not 'artist')\n if (props.album.artists && props.album.artists.length > 0) {\n // If populated, artists[0] will have name property\n if (props.album.artists[0]?.name) {\n artistName = props.album.artists.map(artist => artist.name).join(', ');\n } else if (typeof props.album.artists[0] === 'string') {\n // If not populated, it might be just IDs\n artistName = 'Various Artists';\n }\n } else if (props.album.artist?.name) {\n // Fallback for old data structure\n artistName = props.album.artist.name;\n }\n \n return releaseYear ? `${artistName} • ${releaseYear}` : artistName;\n});\n\n// Methods\nconst playAlbum = async (album) => {\n // If album tracks are already loaded in state, use those\n if (albumsState.currentAlbum && albumsState.currentAlbum._id === album._id && albumsState.currentAlbumTracks.length > 0) {\n playerActions.setQueue(albumsState.currentAlbumTracks);\n return;\n }\n \n // Otherwise fetch tracks for this album\n const tracks = await albumsActions.fetchAlbumTracks(album._id);\n \n if (tracks && tracks.length > 0) {\n playerActions.setQueue(tracks);\n }\n};\n</script>\n\n<style scoped>\n.album-card {\n transition: transform 0.3s ease;\n}\n\n.album-card:hover {\n transform: translateY(-5px);\n}\n\n.album-overlay {\n background: rgba(0, 0, 0, 0.5);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.album-card:hover .album-overlay {\n opacity: 1;\n}\n\n.play-button {\n transform: scale(0.8);\n transition: transform 0.3s ease;\n}\n\n.album-card:hover .play-button {\n transform: scale(1);\n}\n</style>"],"names":["albumsState","playerActions","albumsActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,UAAM,QAAQ;AAQd,UAAM,YAAY,SAAS,MAAM;AAC/B,YAAM,cAAc,MAAM,MAAM,cAAc,IAAI,KAAK,MAAM,MAAM,WAAW,EAAE,YAAW,IAAK;AAChG,UAAI,aAAa;AAGjB,UAAI,MAAM,MAAM,WAAW,MAAM,MAAM,QAAQ,SAAS,GAAG;AAEzD,YAAI,MAAM,MAAM,QAAQ,CAAC,GAAG,MAAM;AAChC,uBAAa,MAAM,MAAM,QAAQ,IAAI,YAAU,OAAO,IAAI,EAAE,KAAK,IAAI;AAAA,QACvE,WAAW,OAAO,MAAM,MAAM,QAAQ,CAAC,MAAM,UAAU;AAErD,uBAAa;AAAA,QACf;AAAA,MACF,WAAW,MAAM,MAAM,QAAQ,MAAM;AAEnC,qBAAa,MAAM,MAAM,OAAO;AAAA,MAClC;AAEA,aAAO,cAAc,GAAG,UAAU,MAAM,WAAW,KAAK;AAAA,IAC1D,CAAC;AAGD,UAAM,YAAY,OAAO,UAAU;AAEjC,UAAIA,MAAY,gBAAgBA,MAAY,aAAa,QAAQ,MAAM,OAAOA,MAAY,mBAAmB,SAAS,GAAG;AACvHC,gBAAc,SAASD,MAAY,kBAAkB;AACrD;AAAA,MACF;AAGA,YAAM,SAAS,MAAME,UAAc,iBAAiB,MAAM,GAAG;AAE7D,UAAI,UAAU,OAAO,SAAS,GAAG;AAC/BD,gBAAc,SAAS,MAAM;AAAA,MAC/B;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -13,7 +13,7 @@ const _hoisted_3 = {
|
|
|
13
13
|
const _hoisted_4 = { class: "h3" };
|
|
14
14
|
const _hoisted_5 = { class: "p-small" };
|
|
15
15
|
const _hoisted_6 = { class: "pd-small" };
|
|
16
|
-
const _hoisted_7 = { class: "mn-b-
|
|
16
|
+
const _hoisted_7 = { class: "t-medium mn-b-small t-truncate" };
|
|
17
17
|
const _hoisted_8 = {
|
|
18
18
|
key: 0,
|
|
19
19
|
class: "p-small t-transp t-trim"
|
|
@@ -79,6 +79,6 @@ const _sfc_main = {
|
|
|
79
79
|
};
|
|
80
80
|
}
|
|
81
81
|
};
|
|
82
|
-
const ArtistCard = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-
|
|
82
|
+
const ArtistCard = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-648ab17c"]]);
|
|
83
83
|
exports.default = ArtistCard;
|
|
84
84
|
//# sourceMappingURL=ArtistCard.vue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArtistCard.vue.cjs","sources":["../../../../../../../src/modules/music/components/cards/ArtistCard.vue"],"sourcesContent":["<template>\n <div \n class=\"artist-card flex flex-column radius-medium o-hidden bg-white\"\n :class=\"{ 'cursor-pointer hover-scale-1': clickable }\"\n @click=\"handleClick\"\n >\n <div class=\"artist-image w-100 pos-relative aspect-1x1\">\n <img \n v-if=\"artist.photo\" \n :src=\"FILE_SERVER_URL + artist.photo\" \n :alt=\"artist.name\"\n class=\"w-100 h-100 object-fit-cover\"\n loading=\"lazy\"\n />\n <div v-else class=\"w-100 h-100 bg-light flex-center flex\">\n <span class=\"h3\">{{ artist.name ? artist.name.charAt(0) : '?' }}</span>\n </div>\n \n <div \n v-if=\"showStatus\" \n class=\"pos-absolute pos-t-small pos-r-small pd-micro radius-medium\"\n :class=\"{\n 'bg-second': artist.status === 'published',\n 'bg-fifth': artist.status === 'featured',\n 'bg-grey': artist.status === 'draft'\n }\"\n >\n <span class=\" p-small\">{{ artist.status }}</span>\n </div>\n </div>\n \n <div class=\"pd-small\">\n <h4 class=\"mn-b-
|
|
1
|
+
{"version":3,"file":"ArtistCard.vue.cjs","sources":["../../../../../../../src/modules/music/components/cards/ArtistCard.vue"],"sourcesContent":["<template>\n <div \n class=\"artist-card flex flex-column radius-medium o-hidden bg-white\"\n :class=\"{ 'cursor-pointer hover-scale-1': clickable }\"\n @click=\"handleClick\"\n >\n <div class=\"artist-image w-100 pos-relative aspect-1x1\">\n <img \n v-if=\"artist.photo\" \n :src=\"FILE_SERVER_URL + artist.photo\" \n :alt=\"artist.name\"\n class=\"w-100 h-100 object-fit-cover\"\n loading=\"lazy\"\n />\n <div v-else class=\"w-100 h-100 bg-light flex-center flex\">\n <span class=\"h3\">{{ artist.name ? artist.name.charAt(0) : '?' }}</span>\n </div>\n \n <div \n v-if=\"showStatus\" \n class=\"pos-absolute pos-t-small pos-r-small pd-micro radius-medium\"\n :class=\"{\n 'bg-second': artist.status === 'published',\n 'bg-fifth': artist.status === 'featured',\n 'bg-grey': artist.status === 'draft'\n }\"\n >\n <span class=\" p-small\">{{ artist.status }}</span>\n </div>\n </div>\n \n <div class=\"pd-small\">\n <h4 class=\"t-medium mn-b-small t-truncate\">{{ artist.name }}</h4>\n <p v-if=\"artist.genres && artist.genres.length\" class=\"p-small t-transp t-trim\">\n {{ artist.genres.join(', ') }}\n </p>\n </div>\n \n <slot name=\"actions\"></slot>\n </div>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\nimport { useRouter } from 'vue-router';\n\nconst props = defineProps({\n artist: {\n type: Object,\n required: true\n },\n clickable: {\n type: Boolean,\n default: true\n },\n showStatus: {\n type: Boolean,\n default: false\n }\n});\n\nconst router = useRouter();\n\nconst handleClick = () => {\n if (!props.clickable) return;\n \n router.push({\n name: 'artist',\n params: { url: props.artist.url }\n });\n};\n</script>\n\n<style scoped>\n.artist-card {\n border: 1px solid rgba(var(--grey), 0.2);\n transition: transform 0.2s ease;\n}\n\n.hover-scale-1:hover {\n transform: scale(1.02);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n}\n</style>"],"names":["useRouter"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,UAAM,QAAQ;AAed,UAAM,SAASA,UAAAA,UAAS;AAExB,UAAM,cAAc,MAAM;AACxB,UAAI,CAAC,MAAM,UAAW;AAEtB,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ,EAAE,KAAK,MAAM,OAAO,IAAG;AAAA,MACnC,CAAG;AAAA,IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -11,7 +11,7 @@ const _hoisted_3 = {
|
|
|
11
11
|
const _hoisted_4 = { class: "h3" };
|
|
12
12
|
const _hoisted_5 = { class: "p-small" };
|
|
13
13
|
const _hoisted_6 = { class: "pd-small" };
|
|
14
|
-
const _hoisted_7 = { class: "mn-b-
|
|
14
|
+
const _hoisted_7 = { class: "t-medium mn-b-small t-truncate" };
|
|
15
15
|
const _hoisted_8 = {
|
|
16
16
|
key: 0,
|
|
17
17
|
class: "p-small t-transp t-trim"
|
|
@@ -77,7 +77,7 @@ const _sfc_main = {
|
|
|
77
77
|
};
|
|
78
78
|
}
|
|
79
79
|
};
|
|
80
|
-
const ArtistCard = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
80
|
+
const ArtistCard = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-648ab17c"]]);
|
|
81
81
|
export {
|
|
82
82
|
ArtistCard as default
|
|
83
83
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArtistCard.vue.js","sources":["../../../../../../../src/modules/music/components/cards/ArtistCard.vue"],"sourcesContent":["<template>\n <div \n class=\"artist-card flex flex-column radius-medium o-hidden bg-white\"\n :class=\"{ 'cursor-pointer hover-scale-1': clickable }\"\n @click=\"handleClick\"\n >\n <div class=\"artist-image w-100 pos-relative aspect-1x1\">\n <img \n v-if=\"artist.photo\" \n :src=\"FILE_SERVER_URL + artist.photo\" \n :alt=\"artist.name\"\n class=\"w-100 h-100 object-fit-cover\"\n loading=\"lazy\"\n />\n <div v-else class=\"w-100 h-100 bg-light flex-center flex\">\n <span class=\"h3\">{{ artist.name ? artist.name.charAt(0) : '?' }}</span>\n </div>\n \n <div \n v-if=\"showStatus\" \n class=\"pos-absolute pos-t-small pos-r-small pd-micro radius-medium\"\n :class=\"{\n 'bg-second': artist.status === 'published',\n 'bg-fifth': artist.status === 'featured',\n 'bg-grey': artist.status === 'draft'\n }\"\n >\n <span class=\" p-small\">{{ artist.status }}</span>\n </div>\n </div>\n \n <div class=\"pd-small\">\n <h4 class=\"mn-b-
|
|
1
|
+
{"version":3,"file":"ArtistCard.vue.js","sources":["../../../../../../../src/modules/music/components/cards/ArtistCard.vue"],"sourcesContent":["<template>\n <div \n class=\"artist-card flex flex-column radius-medium o-hidden bg-white\"\n :class=\"{ 'cursor-pointer hover-scale-1': clickable }\"\n @click=\"handleClick\"\n >\n <div class=\"artist-image w-100 pos-relative aspect-1x1\">\n <img \n v-if=\"artist.photo\" \n :src=\"FILE_SERVER_URL + artist.photo\" \n :alt=\"artist.name\"\n class=\"w-100 h-100 object-fit-cover\"\n loading=\"lazy\"\n />\n <div v-else class=\"w-100 h-100 bg-light flex-center flex\">\n <span class=\"h3\">{{ artist.name ? artist.name.charAt(0) : '?' }}</span>\n </div>\n \n <div \n v-if=\"showStatus\" \n class=\"pos-absolute pos-t-small pos-r-small pd-micro radius-medium\"\n :class=\"{\n 'bg-second': artist.status === 'published',\n 'bg-fifth': artist.status === 'featured',\n 'bg-grey': artist.status === 'draft'\n }\"\n >\n <span class=\" p-small\">{{ artist.status }}</span>\n </div>\n </div>\n \n <div class=\"pd-small\">\n <h4 class=\"t-medium mn-b-small t-truncate\">{{ artist.name }}</h4>\n <p v-if=\"artist.genres && artist.genres.length\" class=\"p-small t-transp t-trim\">\n {{ artist.genres.join(', ') }}\n </p>\n </div>\n \n <slot name=\"actions\"></slot>\n </div>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\nimport { useRouter } from 'vue-router';\n\nconst props = defineProps({\n artist: {\n type: Object,\n required: true\n },\n clickable: {\n type: Boolean,\n default: true\n },\n showStatus: {\n type: Boolean,\n default: false\n }\n});\n\nconst router = useRouter();\n\nconst handleClick = () => {\n if (!props.clickable) return;\n \n router.push({\n name: 'artist',\n params: { url: props.artist.url }\n });\n};\n</script>\n\n<style scoped>\n.artist-card {\n border: 1px solid rgba(var(--grey), 0.2);\n transition: transform 0.2s ease;\n}\n\n.hover-scale-1:hover {\n transform: scale(1.02);\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);\n}\n</style>"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CA,UAAM,QAAQ;AAed,UAAM,SAAS,UAAS;AAExB,UAAM,cAAc,MAAM;AACxB,UAAI,CAAC,MAAM,UAAW;AAEtB,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ,EAAE,KAAK,MAAM,OAAO,IAAG;AAAA,MACnC,CAAG;AAAA,IACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -5,13 +5,17 @@ const Media = require("../../../../components/Media/Media.vue.cjs");
|
|
|
5
5
|
const Button = require("../../../../components/Button/Button.vue.cjs");
|
|
6
6
|
const IconPlay = require("../../../icons/navigation/IconPlay.vue.cjs");
|
|
7
7
|
const player = require("../../store/player.cjs");
|
|
8
|
+
const playlists = require("../../store/playlists.cjs");
|
|
8
9
|
;/* empty css */
|
|
9
10
|
const _pluginVue_exportHelper = require("../../../../../../_virtual/_plugin-vue_export-helper.cjs");
|
|
10
11
|
const _hoisted_1 = { class: "playlist-cover pos-relative" };
|
|
11
|
-
const _hoisted_2 = {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
const _hoisted_2 = {
|
|
13
|
+
key: 0,
|
|
14
|
+
class: "playlist-overlay pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center flex transition-cubic-in-out"
|
|
15
|
+
};
|
|
16
|
+
const _hoisted_3 = { class: "playlist-info pd-small bg-light" };
|
|
17
|
+
const _hoisted_4 = { class: "t-medium mn-b-small t-truncate" };
|
|
18
|
+
const _hoisted_5 = { class: "t-transp t-small t-truncate" };
|
|
15
19
|
const _sfc_main = {
|
|
16
20
|
__name: "PlaylistCard",
|
|
17
21
|
props: {
|
|
@@ -32,10 +36,24 @@ const _sfc_main = {
|
|
|
32
36
|
}
|
|
33
37
|
return `${creatorName} • ${trackCount} ${trackCount === 1 ? "track" : "tracks"}`;
|
|
34
38
|
});
|
|
35
|
-
const playPlaylist = (playlist) => {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
+
const playPlaylist = async (playlist) => {
|
|
40
|
+
if (!playlist || !playlist.url) {
|
|
41
|
+
console.warn("Playlist or URL not available");
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
console.log("Loading playlist:", playlist.url);
|
|
46
|
+
await playlists.actions.fetchPlaylistByUrl(playlist.url);
|
|
47
|
+
const tracks = playlists.state.currentPlaylistTracks || [];
|
|
48
|
+
console.log("Loaded tracks:", tracks);
|
|
49
|
+
if (tracks.length > 0) {
|
|
50
|
+
console.log("Setting queue with tracks:", tracks);
|
|
51
|
+
player.actions.setQueue(tracks);
|
|
52
|
+
} else {
|
|
53
|
+
console.warn("No tracks found in playlist after loading");
|
|
54
|
+
}
|
|
55
|
+
} catch (error) {
|
|
56
|
+
console.error("Error loading playlist for playback:", error);
|
|
39
57
|
}
|
|
40
58
|
};
|
|
41
59
|
return (_ctx, _cache) => {
|
|
@@ -47,12 +65,12 @@ const _sfc_main = {
|
|
|
47
65
|
default: vue.withCtx(() => [
|
|
48
66
|
vue.createElementVNode("div", _hoisted_1, [
|
|
49
67
|
vue.createVNode(Media.default, {
|
|
50
|
-
url: __props.playlist.coverUrl || "/
|
|
68
|
+
url: __props.playlist.coverUrl || "/logo/logo-placeholder.jpg",
|
|
51
69
|
class: "w-100 aspect-1x1 object-fit-cover"
|
|
52
70
|
}, null, 8, ["url"]),
|
|
53
|
-
vue.
|
|
71
|
+
__props.playlist.tracks && __props.playlist.tracks.length > 0 ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2, [
|
|
54
72
|
vue.createVNode(Button.default, {
|
|
55
|
-
onClick: _cache[0] || (_cache[0] = vue.withModifiers(($event) => playPlaylist(__props.playlist), ["stop"])),
|
|
73
|
+
onClick: _cache[0] || (_cache[0] = vue.withModifiers(($event) => playPlaylist(__props.playlist), ["stop", "prevent"])),
|
|
56
74
|
class: "play-button bg-main radius-round flex-center flex aspect-1x1",
|
|
57
75
|
showLoader: false,
|
|
58
76
|
showSucces: false
|
|
@@ -65,7 +83,7 @@ const _sfc_main = {
|
|
|
65
83
|
]),
|
|
66
84
|
_: 1
|
|
67
85
|
})
|
|
68
|
-
])
|
|
86
|
+
])) : vue.createCommentVNode("", true)
|
|
69
87
|
]),
|
|
70
88
|
vue.createElementVNode("div", _hoisted_3, [
|
|
71
89
|
vue.createElementVNode("h3", _hoisted_4, vue.toDisplayString(__props.playlist.title), 1),
|
|
@@ -77,6 +95,6 @@ const _sfc_main = {
|
|
|
77
95
|
};
|
|
78
96
|
}
|
|
79
97
|
};
|
|
80
|
-
const PlaylistCard = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-
|
|
98
|
+
const PlaylistCard = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-be2a71af"]]);
|
|
81
99
|
exports.default = PlaylistCard;
|
|
82
100
|
//# sourceMappingURL=PlaylistCard.vue.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaylistCard.vue.cjs","sources":["../../../../../../../src/modules/music/components/cards/PlaylistCard.vue"],"sourcesContent":["<!-- components/cards/PlaylistCard.vue -->\n<template>\n <router-link \n :to=\"{ name: 'playlist', params: { url: playlist.url } }\" \n class=\"playlist-card d-block radius-small o-hidden\"\n >\n <div class=\"playlist-cover pos-relative\">\n <Media \n :url=\"playlist.coverUrl || '/
|
|
1
|
+
{"version":3,"file":"PlaylistCard.vue.cjs","sources":["../../../../../../../src/modules/music/components/cards/PlaylistCard.vue"],"sourcesContent":["<!-- components/cards/PlaylistCard.vue -->\n<template>\n <router-link \n :to=\"{ name: 'playlist', params: { url: playlist.url } }\" \n class=\"playlist-card d-block radius-small o-hidden\"\n >\n <div class=\"playlist-cover pos-relative\">\n <Media \n :url=\"playlist.coverUrl || '/logo/logo-placeholder.jpg'\" \n class=\"w-100 aspect-1x1 object-fit-cover\"\n />\n <div v-if=\"playlist.tracks && playlist.tracks.length > 0\" class=\"playlist-overlay pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center flex transition-cubic-in-out\">\n <Button \n @click.stop.prevent=\"playPlaylist(playlist)\" \n class=\"play-button bg-main radius-round flex-center flex aspect-1x1\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPlay class=\"i-small\" fill=\"rgb(var(--black))\" />\n </Button>\n </div>\n </div>\n <div class=\"playlist-info pd-small bg-light\">\n <h3 class=\" t-medium mn-b-small t-truncate\">{{ playlist.title }}</h3>\n <p class=\"t-transp t-small t-truncate\">{{ playlistInfo }}</p>\n </div>\n </router-link>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\n\n// Import player store\nimport { actions as playerActions } from '../../store/player.js';\nimport { state as playlistsState, actions as playlistsActions } from '../../store/playlists.js';\n\nconst props = defineProps({\n playlist: {\n type: Object,\n required: true\n }\n});\n\n// Computed properties\nconst playlistInfo = computed(() => {\n const trackCount = props.playlist.tracks?.length || 0;\n let creatorName = 'Unknown';\n \n if (props.playlist.creator?.target?.profile?.name) {\n creatorName = props.playlist.creator.target.profile.name;\n } else if (props.playlist.creator?.target?.name) {\n creatorName = props.playlist.creator.target.name;\n }\n \n return `${creatorName} • ${trackCount} ${trackCount === 1 ? 'track' : 'tracks'}`;\n});\n\n// Methods\nconst playPlaylist = async (playlist) => {\n if (!playlist || !playlist.url) {\n console.warn('Playlist or URL not available');\n return;\n }\n \n try {\n console.log('Loading playlist:', playlist.url);\n \n // Fetch full playlist data with populated tracks\n await playlistsActions.fetchPlaylistByUrl(playlist.url);\n \n // Get tracks from store after loading\n const tracks = playlistsState.currentPlaylistTracks || [];\n \n console.log('Loaded tracks:', tracks);\n \n if (tracks.length > 0) {\n console.log('Setting queue with tracks:', tracks);\n playerActions.setQueue(tracks);\n } else {\n console.warn('No tracks found in playlist after loading');\n }\n } catch (error) {\n console.error('Error loading playlist for playback:', error);\n }\n};\n</script>\n\n<style scoped>\n.playlist-card {\n transition: transform 0.3s ease;\n}\n\n.playlist-card:hover {\n transform: translateY(-5px);\n}\n\n.playlist-overlay {\n background: rgba(0, 0, 0, 0.5);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.playlist-card:hover .playlist-overlay {\n opacity: 1;\n}\n\n.play-button {\n width: 48px;\n height: 48px;\n transform: scale(0.8);\n transition: transform 0.3s ease;\n}\n\n.playlist-card:hover .play-button {\n transform: scale(1);\n}\n</style>"],"names":["computed","playlistsActions","playlistsState","playerActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,UAAM,QAAQ;AAQd,UAAM,eAAeA,IAAAA,SAAS,MAAM;AAClC,YAAM,aAAa,MAAM,SAAS,QAAQ,UAAU;AACpD,UAAI,cAAc;AAElB,UAAI,MAAM,SAAS,SAAS,QAAQ,SAAS,MAAM;AACjD,sBAAc,MAAM,SAAS,QAAQ,OAAO,QAAQ;AAAA,MACtD,WAAW,MAAM,SAAS,SAAS,QAAQ,MAAM;AAC/C,sBAAc,MAAM,SAAS,QAAQ,OAAO;AAAA,MAC9C;AAEA,aAAO,GAAG,WAAW,MAAM,UAAU,IAAI,eAAe,IAAI,UAAU,QAAQ;AAAA,IAChF,CAAC;AAGD,UAAM,eAAe,OAAO,aAAa;AACvC,UAAI,CAAC,YAAY,CAAC,SAAS,KAAK;AAC9B,gBAAQ,KAAK,+BAA+B;AAC5C;AAAA,MACF;AAEA,UAAI;AACF,gBAAQ,IAAI,qBAAqB,SAAS,GAAG;AAG7C,cAAMC,kBAAiB,mBAAmB,SAAS,GAAG;AAGtD,cAAM,SAASC,gBAAe,yBAAyB,CAAA;AAEvD,gBAAQ,IAAI,kBAAkB,MAAM;AAEpC,YAAI,OAAO,SAAS,GAAG;AACrB,kBAAQ,IAAI,8BAA8B,MAAM;AAChDC,iBAAAA,QAAc,SAAS,MAAM;AAAA,QAC/B,OAAO;AACL,kBAAQ,KAAK,2CAA2C;AAAA,QAC1D;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,wCAAwC,KAAK;AAAA,MAC7D;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
|
-
import { computed, resolveComponent, createBlock, openBlock, withCtx, createElementVNode, createVNode, withModifiers, toDisplayString } from "vue";
|
|
1
|
+
import { computed, resolveComponent, createBlock, openBlock, withCtx, createElementVNode, createVNode, createElementBlock, createCommentVNode, withModifiers, toDisplayString } from "vue";
|
|
2
2
|
import Media from "../../../../components/Media/Media.vue.js";
|
|
3
3
|
import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
|
|
4
4
|
import _sfc_main$2 from "../../../icons/navigation/IconPlay.vue.js";
|
|
5
|
-
import { actions } from "../../store/player.js";
|
|
5
|
+
import { actions as actions$1 } from "../../store/player.js";
|
|
6
|
+
import { actions, state } from "../../store/playlists.js";
|
|
6
7
|
/* empty css */
|
|
7
8
|
import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.js";
|
|
8
9
|
const _hoisted_1 = { class: "playlist-cover pos-relative" };
|
|
9
|
-
const _hoisted_2 = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
const _hoisted_2 = {
|
|
11
|
+
key: 0,
|
|
12
|
+
class: "playlist-overlay pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center flex transition-cubic-in-out"
|
|
13
|
+
};
|
|
14
|
+
const _hoisted_3 = { class: "playlist-info pd-small bg-light" };
|
|
15
|
+
const _hoisted_4 = { class: "t-medium mn-b-small t-truncate" };
|
|
16
|
+
const _hoisted_5 = { class: "t-transp t-small t-truncate" };
|
|
13
17
|
const _sfc_main = {
|
|
14
18
|
__name: "PlaylistCard",
|
|
15
19
|
props: {
|
|
@@ -30,10 +34,24 @@ const _sfc_main = {
|
|
|
30
34
|
}
|
|
31
35
|
return `${creatorName} • ${trackCount} ${trackCount === 1 ? "track" : "tracks"}`;
|
|
32
36
|
});
|
|
33
|
-
const playPlaylist = (playlist) => {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
+
const playPlaylist = async (playlist) => {
|
|
38
|
+
if (!playlist || !playlist.url) {
|
|
39
|
+
console.warn("Playlist or URL not available");
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
console.log("Loading playlist:", playlist.url);
|
|
44
|
+
await actions.fetchPlaylistByUrl(playlist.url);
|
|
45
|
+
const tracks = state.currentPlaylistTracks || [];
|
|
46
|
+
console.log("Loaded tracks:", tracks);
|
|
47
|
+
if (tracks.length > 0) {
|
|
48
|
+
console.log("Setting queue with tracks:", tracks);
|
|
49
|
+
actions$1.setQueue(tracks);
|
|
50
|
+
} else {
|
|
51
|
+
console.warn("No tracks found in playlist after loading");
|
|
52
|
+
}
|
|
53
|
+
} catch (error) {
|
|
54
|
+
console.error("Error loading playlist for playback:", error);
|
|
37
55
|
}
|
|
38
56
|
};
|
|
39
57
|
return (_ctx, _cache) => {
|
|
@@ -45,12 +63,12 @@ const _sfc_main = {
|
|
|
45
63
|
default: withCtx(() => [
|
|
46
64
|
createElementVNode("div", _hoisted_1, [
|
|
47
65
|
createVNode(Media, {
|
|
48
|
-
url: __props.playlist.coverUrl || "/
|
|
66
|
+
url: __props.playlist.coverUrl || "/logo/logo-placeholder.jpg",
|
|
49
67
|
class: "w-100 aspect-1x1 object-fit-cover"
|
|
50
68
|
}, null, 8, ["url"]),
|
|
51
|
-
|
|
69
|
+
__props.playlist.tracks && __props.playlist.tracks.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
52
70
|
createVNode(_sfc_main$1, {
|
|
53
|
-
onClick: _cache[0] || (_cache[0] = withModifiers(($event) => playPlaylist(__props.playlist), ["stop"])),
|
|
71
|
+
onClick: _cache[0] || (_cache[0] = withModifiers(($event) => playPlaylist(__props.playlist), ["stop", "prevent"])),
|
|
54
72
|
class: "play-button bg-main radius-round flex-center flex aspect-1x1",
|
|
55
73
|
showLoader: false,
|
|
56
74
|
showSucces: false
|
|
@@ -63,7 +81,7 @@ const _sfc_main = {
|
|
|
63
81
|
]),
|
|
64
82
|
_: 1
|
|
65
83
|
})
|
|
66
|
-
])
|
|
84
|
+
])) : createCommentVNode("", true)
|
|
67
85
|
]),
|
|
68
86
|
createElementVNode("div", _hoisted_3, [
|
|
69
87
|
createElementVNode("h3", _hoisted_4, toDisplayString(__props.playlist.title), 1),
|
|
@@ -75,7 +93,7 @@ const _sfc_main = {
|
|
|
75
93
|
};
|
|
76
94
|
}
|
|
77
95
|
};
|
|
78
|
-
const PlaylistCard = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-
|
|
96
|
+
const PlaylistCard = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-be2a71af"]]);
|
|
79
97
|
export {
|
|
80
98
|
PlaylistCard as default
|
|
81
99
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlaylistCard.vue.js","sources":["../../../../../../../src/modules/music/components/cards/PlaylistCard.vue"],"sourcesContent":["<!-- components/cards/PlaylistCard.vue -->\n<template>\n <router-link \n :to=\"{ name: 'playlist', params: { url: playlist.url } }\" \n class=\"playlist-card d-block radius-small o-hidden\"\n >\n <div class=\"playlist-cover pos-relative\">\n <Media \n :url=\"playlist.coverUrl || '/
|
|
1
|
+
{"version":3,"file":"PlaylistCard.vue.js","sources":["../../../../../../../src/modules/music/components/cards/PlaylistCard.vue"],"sourcesContent":["<!-- components/cards/PlaylistCard.vue -->\n<template>\n <router-link \n :to=\"{ name: 'playlist', params: { url: playlist.url } }\" \n class=\"playlist-card d-block radius-small o-hidden\"\n >\n <div class=\"playlist-cover pos-relative\">\n <Media \n :url=\"playlist.coverUrl || '/logo/logo-placeholder.jpg'\" \n class=\"w-100 aspect-1x1 object-fit-cover\"\n />\n <div v-if=\"playlist.tracks && playlist.tracks.length > 0\" class=\"playlist-overlay pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center flex transition-cubic-in-out\">\n <Button \n @click.stop.prevent=\"playPlaylist(playlist)\" \n class=\"play-button bg-main radius-round flex-center flex aspect-1x1\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPlay class=\"i-small\" fill=\"rgb(var(--black))\" />\n </Button>\n </div>\n </div>\n <div class=\"playlist-info pd-small bg-light\">\n <h3 class=\" t-medium mn-b-small t-truncate\">{{ playlist.title }}</h3>\n <p class=\"t-transp t-small t-truncate\">{{ playlistInfo }}</p>\n </div>\n </router-link>\n</template>\n\n<script setup>\nimport { computed } from 'vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\n\n// Import player store\nimport { actions as playerActions } from '../../store/player.js';\nimport { state as playlistsState, actions as playlistsActions } from '../../store/playlists.js';\n\nconst props = defineProps({\n playlist: {\n type: Object,\n required: true\n }\n});\n\n// Computed properties\nconst playlistInfo = computed(() => {\n const trackCount = props.playlist.tracks?.length || 0;\n let creatorName = 'Unknown';\n \n if (props.playlist.creator?.target?.profile?.name) {\n creatorName = props.playlist.creator.target.profile.name;\n } else if (props.playlist.creator?.target?.name) {\n creatorName = props.playlist.creator.target.name;\n }\n \n return `${creatorName} • ${trackCount} ${trackCount === 1 ? 'track' : 'tracks'}`;\n});\n\n// Methods\nconst playPlaylist = async (playlist) => {\n if (!playlist || !playlist.url) {\n console.warn('Playlist or URL not available');\n return;\n }\n \n try {\n console.log('Loading playlist:', playlist.url);\n \n // Fetch full playlist data with populated tracks\n await playlistsActions.fetchPlaylistByUrl(playlist.url);\n \n // Get tracks from store after loading\n const tracks = playlistsState.currentPlaylistTracks || [];\n \n console.log('Loaded tracks:', tracks);\n \n if (tracks.length > 0) {\n console.log('Setting queue with tracks:', tracks);\n playerActions.setQueue(tracks);\n } else {\n console.warn('No tracks found in playlist after loading');\n }\n } catch (error) {\n console.error('Error loading playlist for playback:', error);\n }\n};\n</script>\n\n<style scoped>\n.playlist-card {\n transition: transform 0.3s ease;\n}\n\n.playlist-card:hover {\n transform: translateY(-5px);\n}\n\n.playlist-overlay {\n background: rgba(0, 0, 0, 0.5);\n opacity: 0;\n transition: opacity 0.3s ease;\n}\n\n.playlist-card:hover .playlist-overlay {\n opacity: 1;\n}\n\n.play-button {\n width: 48px;\n height: 48px;\n transform: scale(0.8);\n transition: transform 0.3s ease;\n}\n\n.playlist-card:hover .play-button {\n transform: scale(1);\n}\n</style>"],"names":["playlistsActions","playlistsState","playerActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,UAAM,QAAQ;AAQd,UAAM,eAAe,SAAS,MAAM;AAClC,YAAM,aAAa,MAAM,SAAS,QAAQ,UAAU;AACpD,UAAI,cAAc;AAElB,UAAI,MAAM,SAAS,SAAS,QAAQ,SAAS,MAAM;AACjD,sBAAc,MAAM,SAAS,QAAQ,OAAO,QAAQ;AAAA,MACtD,WAAW,MAAM,SAAS,SAAS,QAAQ,MAAM;AAC/C,sBAAc,MAAM,SAAS,QAAQ,OAAO;AAAA,MAC9C;AAEA,aAAO,GAAG,WAAW,MAAM,UAAU,IAAI,eAAe,IAAI,UAAU,QAAQ;AAAA,IAChF,CAAC;AAGD,UAAM,eAAe,OAAO,aAAa;AACvC,UAAI,CAAC,YAAY,CAAC,SAAS,KAAK;AAC9B,gBAAQ,KAAK,+BAA+B;AAC5C;AAAA,MACF;AAEA,UAAI;AACF,gBAAQ,IAAI,qBAAqB,SAAS,GAAG;AAG7C,cAAMA,QAAiB,mBAAmB,SAAS,GAAG;AAGtD,cAAM,SAASC,MAAe,yBAAyB,CAAA;AAEvD,gBAAQ,IAAI,kBAAkB,MAAM;AAEpC,YAAI,OAAO,SAAS,GAAG;AACrB,kBAAQ,IAAI,8BAA8B,MAAM;AAChDC,oBAAc,SAAS,MAAM;AAAA,QAC/B,OAAO;AACL,kBAAQ,KAAK,2CAA2C;AAAA,QAC1D;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,wCAAwC,KAAK;AAAA,MAC7D;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|