@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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Artist.vue.cjs","sources":["../../../../../../../src/modules/music/components/pages/Artist.vue"],"sourcesContent":["<template>\n <div>\n <!-- Loading state -->\n <div v-if=\"isLoading\" class=\"flex-center flex pd-extra\">\n <Loader />\n </div>\n \n <!-- Artist not found -->\n <div v-else-if=\"!artist\" class=\"flex-center flex-column flex pd-extra\">\n <h2 class=\"h2 mn-b-medium\">Artist Not Found</h2>\n <p class=\"p-medium t-transp mn-b-medium\">The artist you are looking for doesn't exist or may have been removed.</p>\n <Button\n :submit=\"() => router.push({ name: 'music-home' })\"\n class=\"bg-main \"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n Back to Music\n </Button>\n </div>\n \n <!-- Artist content -->\n <div v-else>\n <!-- Cover image -->\n <div \n class=\"w-100 t-white h-50vh pos-relative\"\n :style=\"artist.coverUrl ? `background-image: url(${FILE_SERVER_URL + artist.coverUrl}); background-size: cover; background-position: center;` : ''\"\n >\n <div class=\"pos-absolute pos-t-0 pos-l-0 w-100 h-100 bg-blur-small\" :class=\"artist.coverUrl ? 'bg-black-transp-50' : 'bg-black'\"></div>\n \n <!-- Artist actions for edit/manage -->\n <div v-if=\"isOwner\" class=\"pos-absolute pos-t-medium pos-r-medium z-index-1\">\n <Button\n :submit=\"editArtist\"\n class=\"bg-main mn-r-small\"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n Edit Artist\n </Button>\n \n <Button\n :submit=\"manageContent\"\n class=\"bg-white t-black\"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n Manage Content\n </Button>\n </div>\n \n <!-- Artist profile info -->\n <div class=\"flex-v-center t-white pos-absolute pos-b-0 pos-l-0 w-100 pd-medium z-index-1 flex mobile:flex-column mobile:flex-h-center\">\n <div class=\"w-15r h-15r radius-medium o-hidden mn-r-medium bs-black mobile:mn-r-0 mobile:mn-b-medium\">\n <img\n v-if=\"artist.photoUrl\"\n :src=\"FILE_SERVER_URL + artist.photoUrl\"\n alt=\"Artist photo\"\n class=\"w-100 h-100 object-fit-cover\"\n />\n <div v-else class=\"w-100 h-100 bg-white flex-center flex\">\n <span class=\"h1\">{{ artist.name[0] }}</span>\n </div>\n </div>\n \n <div class=\" mobile:t-center\">\n <div class=\"flex-v-center flex-nowrap flex mn-b-small mobile:flex-center\">\n <h1 class=\"h1 mn-r-small\">{{ artist.name }}</h1>\n <span v-if=\"artist.isVerified\" class=\"bg-main-nano pd-micro radius-small\">\n ✓ Verified\n </span>\n </div>\n \n <p v-if=\"artist.location\" class=\"p-medium mn-b-small\">{{ artist.location }}</p>\n \n <!-- Social media links -->\n <div class=\"flex flex-nowrap gap-small mobile:flex-center\">\n <a \n v-if=\"artist.socials.telegram\" \n :href=\"`https://t.me/${artist.socials.telegram}`\" \n target=\"_blank\"\n class=\"bg-white t-black flex-center flex w-2r h-2r radius-extra\"\n >\n <span>T</span>\n </a>\n \n <a \n v-if=\"artist.socials.twitter\" \n :href=\"`https://twitter.com/${artist.socials.twitter}`\" \n target=\"_blank\"\n class=\"bg-white t-black flex-center flex w-2r h-2r radius-extra\"\n >\n <span>𝕏</span>\n </a>\n \n <a \n v-if=\"artist.socials.instagram\" \n :href=\"`https://instagram.com/${artist.socials.instagram}`\" \n target=\"_blank\"\n class=\"bg-white t-black flex-center flex w-2r h-2r radius-extra\"\n >\n <span>I</span>\n </a>\n \n <a \n v-if=\"artist.socials.facebook\" \n :href=\"`https://facebook.com/${artist.socials.facebook}`\" \n target=\"_blank\"\n class=\"bg-white t-black flex-center flex w-2r h-2r radius-extra\"\n >\n <span>F</span>\n </a>\n \n <a \n v-if=\"artist.website\" \n :href=\"artist.website\" \n target=\"_blank\"\n class=\"bg-white t-black flex-center flex w-2r h-2r radius-extra\"\n >\n <span>W</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n \n <!-- Main content -->\n <div class=\"pd-medium\">\n <div class=\"cols-2-1_2 gap-medium mobile:cols-1\">\n <!-- Left column - Bio and details -->\n <div>\n <div class=\"bg-light pd-medium radius-medium mn-b-medium\">\n <h2 class=\"h3 mn-b-small\">Biography</h2>\n <p v-if=\"artist.bio\" class=\"p-medium\">{{ artist.bio }}</p>\n <p v-else class=\"p-medium t-transp\">No biography available for this artist.</p>\n </div>\n \n <!-- Genres -->\n <div v-if=\"genres.length > 0\" class=\"bg-light pd-medium radius-medium\">\n <h2 class=\"h3 mn-b-small\">Genres</h2>\n <div class=\"flex flex-wrap gap-small\">\n <span \n v-for=\"genre in genres\" \n :key=\"genre._id\"\n class=\"bg-white pd-thin radius-medium\"\n >\n {{ genre.name }}\n </span>\n </div>\n </div>\n </div>\n \n <!-- Right column - Discography -->\n <div>\n <!-- Albums section -->\n <div v-if=\"discography.albums.length > 0\" class=\"bg-light pd-medium radius-medium mn-b-medium\">\n <h2 class=\"h3 mn-b-medium\">Albums</h2>\n \n <div class=\"cols-2 gap-small mobile:cols-1\">\n <div\n v-for=\"album in discography.albums\"\n :key=\"album._id\"\n class=\"bg-white pd-small radius-medium flex-v-center flex cursor-pointer hover-bg-white\"\n @click=\"navigateToAlbum(album)\"\n >\n <div class=\"w-3r h-3r radius-small o-hidden mn-r-small\">\n <img\n v-if=\"album.coverUrl\"\n :src=\"FILE_SERVER_URL + album.coverUrl\"\n alt=\"Album cover\"\n class=\"w-100 h-100 object-fit-cover\"\n />\n <div v-else class=\"w-100 h-100 bg-light flex-center flex\">\n <span>A</span>\n </div>\n </div>\n \n <div class=\"w-100 o-hidden\">\n <p class=\"p-medium t-truncate\">{{ album.title }}</p>\n <p class=\"p-small t-transp\">{{ formatDate(album.releaseDate) }}</p>\n </div>\n </div>\n </div>\n \n <Button\n v-if=\"discography.albums.length > 4\"\n :submit=\"viewAllAlbums\"\n class=\"mn-t-small w-100 bg-white t-black\"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n View All Albums\n </Button>\n </div>\n \n <!-- Singles section -->\n <div v-if=\"discography.singles.length > 0\" class=\"bg-light pd-medium radius-medium\">\n <h2 class=\"h3 mn-b-medium\">Singles & EPs</h2>\n \n <div class=\"cols-1 gap-small\">\n <div\n v-for=\"single in discography.singles\"\n :key=\"single._id\"\n class=\"bg-white pd-small radius-medium flex-v-center flex cursor-pointer hover-bg-white\"\n @click=\"navigateToTrack(single)\"\n >\n <div class=\"w-3r h-3r radius-small o-hidden mn-r-small\">\n <img\n v-if=\"single.coverUrl\"\n :src=\"FILE_SERVER_URL + single.coverUrl\"\n alt=\"Single cover\"\n class=\"w-100 h-100 object-fit-cover\"\n />\n <div v-else class=\"w-100 h-100 bg-light flex-center flex\">\n <span>S</span>\n </div>\n </div>\n \n <div class=\"w-100 o-hidden\">\n <p class=\"p-medium t-truncate\">{{ single.title }}</p>\n <p class=\"p-small t-transp\">{{ formatDate(single.releaseDate) }}</p>\n </div>\n </div>\n </div>\n \n <Button\n v-if=\"discography.singles.length > 5\"\n :submit=\"viewAllSingles\"\n class=\"mn-t-small w-100 bg-white t-black\"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n View All Singles & EPs\n </Button>\n </div>\n \n <!-- No discography yet -->\n <div \n v-if=\"discography.albums.length === 0 && discography.singles.length === 0\" \n class=\"bg-light pd-medium radius-medium t-center\"\n >\n <p class=\"p-medium mn-b-small\">No releases yet</p>\n <p class=\"p-small t-transp\">This artist hasn't released any albums or singles yet.</p>\n \n <Button\n v-if=\"isOwner\"\n :submit=\"addRelease\"\n class=\"mn-t-medium bg-main \"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n Add Release\n </Button>\n </div>\n </div>\n </div>\n \n <!-- Related Artists -->\n <div v-if=\"relatedArtists.length > 0\" class=\"mn-t-medium\">\n <h2 class=\"h3 mn-b-medium\">Fans Also Like</h2>\n \n <div class=\"cols-5 gap-medium mobile:cols-2\">\n <div\n v-for=\"relatedArtist in relatedArtists\"\n :key=\"relatedArtist._id\"\n class=\"t-center cursor-pointer\"\n @click=\"navigateToArtist(relatedArtist)\"\n >\n <div class=\"w-100 aspect-1x1 radius-medium o-hidden mn-b-small\">\n <img\n v-if=\"relatedArtist.photoUrl\"\n :src=\"FILE_SERVER_URL + relatedArtist.photoUrl\"\n alt=\"Artist photo\"\n class=\"w-100 h-100 object-fit-cover\"\n />\n <div v-else class=\"w-100 h-100 bg-light flex-center flex\">\n <span>{{ relatedArtist.name[0] }}</span>\n </div>\n </div>\n \n <p class=\"p-medium t-truncate\">{{ relatedArtist.name }}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, onMounted } from 'vue';\nimport { useRouter, useRoute } from 'vue-router';\n\n// Import Martyrs components\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\n\n// Import store\nimport * as artistsStore from '../../store/artists';\n// import * as genreStore from '../../store/genres'; // Assuming you have a genre store\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\n\n// Import mixins\nimport { useGlobalMixins } from '@martyrs/src/modules/globals/views/mixins/mixins.js';\nconst { formatDate } = useGlobalMixins();\n\n// Router and route\nconst router = useRouter();\nconst route = useRoute();\n\n// State\nconst isLoading = ref(true);\nconst genres = ref([]);\n\n// Computed\nconst artist = computed(() => {\n return artistsStore.state.currentArtist;\n});\n\nconst discography = computed(() => {\n return artistsStore.state.discography;\n});\n\nconst relatedArtists = computed(() => {\n return artistsStore.state.relatedArtists;\n});\n\nconst isOwner = computed(() => {\n if (!artist.value || !auth.state.user._id) return false;\n \n // Check if current user is the creator of the artist\n return artist.value.creator?.target?._id === auth.state.user._id;\n});\n\n// Methods\nconst fetchArtist = async () => {\n isLoading.value = true;\n try {\n // Get URL from route params\n const url = route.params.url;\n if (!url) {\n throw new Error('Artist URL is required');\n }\n \n await artistsStore.actions.fetchArtistByUrl(url);\n \n // Fetch genre details if we have genre IDs\n if (artist.value?.genre && artist.value.genre.length > 0) {\n await fetchGenres();\n }\n } catch (error) {\n console.error('Error fetching artist:', error);\n globals.actions.setError({\n message: 'Failed to load artist'\n });\n } finally {\n isLoading.value = false;\n }\n};\n\nconst fetchGenres = async () => {\n try {\n // Assuming genreStore has a method to fetch multiple genres by IDs\n // const fetchedGenres = await genreStore.actions.fetchGenresByIds(artist.value.genre);\n // genres.value = fetchedGenres;\n } catch (error) {\n console.error('Error fetching genres:', error);\n }\n};\n\nconst editArtist = () => {\n router.push({\n name: 'artist-edit',\n params: { url: artist.value.url }\n });\n};\n\nconst manageContent = () => {\n // Navigate to a page for managing artist content (albums, tracks, etc.)\n router.push({\n name: 'artist-manage-content',\n params: { artistId: artist.value._id }\n });\n};\n\nconst navigateToAlbum = (album) => {\n router.push({\n name: 'album',\n params: { url: album.url }\n });\n};\n\nconst navigateToTrack = (track) => {\n router.push({\n name: 'track',\n params: { url: track.url }\n });\n};\n\nconst navigateToArtist = (artist) => {\n router.push({\n name: 'artist',\n params: { url: artist.url }\n });\n};\n\nconst viewAllAlbums = () => {\n router.push({\n name: 'artist-albums',\n params: { artistId: artist.value._id }\n });\n};\n\nconst viewAllSingles = () => {\n router.push({\n name: 'artist-singles',\n params: { artistId: artist.value._id }\n });\n};\n\nconst addRelease = () => {\n router.push({\n name: 'release-create',\n query: { artistId: artist.value._id }\n });\n};\n\n// Lifecycle hooks\nonMounted(async () => {\n await fetchArtist();\n});\n</script>"],"names":["useGlobalMixins","useRouter","useRoute","ref","computed","artistsStore.state","auth.state","artistsStore.actions","globals.actions","artist","onMounted"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiTA,UAAM,EAAE,WAAU,IAAKA,uBAAe;AAGtC,UAAM,SAASC,UAAAA,UAAS;AACxB,UAAM,QAAQC,UAAAA,SAAQ;AAGtB,UAAM,YAAYC,IAAAA,IAAI,IAAI;AAC1B,UAAM,SAASA,IAAAA,IAAI,EAAE;AAGrB,UAAM,SAASC,IAAAA,SAAS,MAAM;AAC5B,aAAOC,QAAAA,MAAmB;AAAA,IAC5B,CAAC;AAED,UAAM,cAAcD,IAAAA,SAAS,MAAM;AACjC,aAAOC,QAAAA,MAAmB;AAAA,IAC5B,CAAC;AAED,UAAM,iBAAiBD,IAAAA,SAAS,MAAM;AACpC,aAAOC,QAAAA,MAAmB;AAAA,IAC5B,CAAC;AAED,UAAM,UAAUD,IAAAA,SAAS,MAAM;AAC7B,UAAI,CAAC,OAAO,SAAS,CAACE,KAAAA,MAAW,KAAK,IAAK,QAAO;AAGlD,aAAO,OAAO,MAAM,SAAS,QAAQ,QAAQA,KAAAA,MAAW,KAAK;AAAA,IAC/D,CAAC;AAGD,UAAM,cAAc,YAAY;AAC9B,gBAAU,QAAQ;AAClB,UAAI;AAEF,cAAM,MAAM,MAAM,OAAO;AACzB,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,wBAAwB;AAAA,QAC1C;AAEA,cAAMC,QAAAA,QAAqB,iBAAiB,GAAG;AAG/C,YAAI,OAAO,OAAO,SAAS,OAAO,MAAM,MAAM,SAAS,GAAG;AACxD,gBAAM,YAAW;AAAA,QACnB;AAAA,MACF,SAAS,OAAO;AACd,gBAAQ,MAAM,0BAA0B,KAAK;AAC7CC,gBAAAA,QAAgB,SAAS;AAAA,UACvB,SAAS;AAAA,QACf,CAAK;AAAA,MACH,UAAC;AACC,kBAAU,QAAQ;AAAA,MACpB;AAAA,IACF;AAEA,UAAM,cAAc,YAAY;AAAA,IAQhC;AAEA,UAAM,aAAa,MAAM;AACvB,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ,EAAE,KAAK,OAAO,MAAM,IAAG;AAAA,MACnC,CAAG;AAAA,IACH;AAEA,UAAM,gBAAgB,MAAM;AAE1B,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ,EAAE,UAAU,OAAO,MAAM,IAAG;AAAA,MACxC,CAAG;AAAA,IACH;AAEA,UAAM,kBAAkB,CAAC,UAAU;AACjC,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ,EAAE,KAAK,MAAM,IAAG;AAAA,MAC5B,CAAG;AAAA,IACH;AAEA,UAAM,kBAAkB,CAAC,UAAU;AACjC,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ,EAAE,KAAK,MAAM,IAAG;AAAA,MAC5B,CAAG;AAAA,IACH;AAEA,UAAM,mBAAmB,CAACC,YAAW;AACnC,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ,EAAE,KAAKA,QAAO,IAAG;AAAA,MAC7B,CAAG;AAAA,IACH;AAEA,UAAM,gBAAgB,MAAM;AAC1B,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ,EAAE,UAAU,OAAO,MAAM,IAAG;AAAA,MACxC,CAAG;AAAA,IACH;AAEA,UAAM,iBAAiB,MAAM;AAC3B,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,QAAQ,EAAE,UAAU,OAAO,MAAM,IAAG;AAAA,MACxC,CAAG;AAAA,IACH;AAEA,UAAM,aAAa,MAAM;AACvB,aAAO,KAAK;AAAA,QACV,MAAM;AAAA,QACN,OAAO,EAAE,UAAU,OAAO,MAAM,IAAG;AAAA,MACvC,CAAG;AAAA,IACH;AAGAC,QAAAA,UAAU,YAAY;AACpB,YAAM,YAAW;AAAA,IACnB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"Artist.vue.cjs","sources":["../../../../../../../src/modules/music/components/pages/Artist.vue"],"sourcesContent":["<template>\n <div class=\"w-100 pos-relative\">\n \n <!-- Artist not found -->\n <div v-if=\"hasLoaded && !artist\" class=\"flex-center flex-column flex pd-extra\">\n <h2 class=\"h2 mn-b-medium\">Artist Not Found</h2>\n <p class=\"p-medium t-transp mn-b-medium\">The artist you are looking for doesn't exist or may have been removed.</p>\n <Button\n :submit=\"() => router.push({ name: 'music-home' })\"\n class=\"bg-main \"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n Back to Music\n </Button>\n </div>\n \n <!-- Artist content -->\n <div v-if=\"artist\">\n <!-- Cover image -->\n <div \n class=\"w-100 t-white h-50vh pos-relative\"\n :style=\"artist.coverUrl ? `background-image: url(${FILE_SERVER_URL + artist.coverUrl}); background-size: cover; background-position: center;` : ''\"\n >\n <div class=\"pos-absolute pos-t-0 pos-l-0 w-100 h-100 bg-blur-small\" :class=\"artist.coverUrl ? 'bg-black-transp-50' : 'bg-black'\"></div>\n \n <!-- Artist actions for edit/manage -->\n <div v-if=\"isOwner\" class=\"pos-absolute pos-t-medium pos-r-medium z-index-1\">\n <Button\n @click=\"router.push({ name: 'artist-edit', params: { url: artist.url } })\"\n class=\"bg-main mn-r-small\"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n Edit Artist\n </Button>\n \n <Button\n @click=\"router.push({ name: 'artist-manage-content', params: { artistId: artist._id } })\"\n class=\"bg-white t-black\"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n Manage Content\n </Button>\n </div>\n \n <!-- Artist profile info -->\n <div class=\"flex-v-center t-white pos-absolute pos-b-0 pos-l-0 w-100 pd-medium z-index-1 flex mobile:flex-column mobile:flex-h-center\">\n <div class=\"w-15r h-15r radius-medium o-hidden mn-r-medium bs-black mobile:mn-r-0 mobile:mn-b-medium\">\n <img\n v-if=\"artist.photoUrl\"\n :src=\"FILE_SERVER_URL + artist.photoUrl\"\n alt=\"Artist photo\"\n class=\"w-100 h-100 object-fit-cover\"\n />\n <div v-else class=\"w-100 h-100 bg-white flex-center flex\">\n <span class=\"h1\">{{ artist?.name?.[0] || 'A' }}</span>\n </div>\n </div>\n \n <div class=\" mobile:t-center\">\n <div class=\"flex-v-center flex-nowrap flex mn-b-small mobile:flex-center\">\n <h1 class=\"h1 mn-r-small\">{{ artist.name }}</h1>\n <span v-if=\"artist.isVerified\" class=\"bg-main-nano pd-micro radius-small\">\n ✓ Verified\n </span>\n </div>\n \n <p v-if=\"artist.location\" class=\"p-medium mn-b-small\">{{ artist.location }}</p>\n \n <!-- Social media links -->\n <div class=\"flex flex-nowrap gap-small mobile:flex-center\">\n <a \n v-if=\"artist.socials.telegram\" \n :href=\"`https://t.me/${artist.socials.telegram}`\" \n target=\"_blank\"\n class=\"bg-white t-black flex-center flex w-2r h-2r radius-extra\"\n >\n <span>T</span>\n </a>\n \n <a \n v-if=\"artist.socials.twitter\" \n :href=\"`https://twitter.com/${artist.socials.twitter}`\" \n target=\"_blank\"\n class=\"bg-white t-black flex-center flex w-2r h-2r radius-extra\"\n >\n <span>𝕏</span>\n </a>\n \n <a \n v-if=\"artist.socials.instagram\" \n :href=\"`https://instagram.com/${artist.socials.instagram}`\" \n target=\"_blank\"\n class=\"bg-white t-black flex-center flex w-2r h-2r radius-extra\"\n >\n <span>I</span>\n </a>\n \n <a \n v-if=\"artist.socials.facebook\" \n :href=\"`https://facebook.com/${artist.socials.facebook}`\" \n target=\"_blank\"\n class=\"bg-white t-black flex-center flex w-2r h-2r radius-extra\"\n >\n <span>F</span>\n </a>\n \n <a \n v-if=\"artist.website\" \n :href=\"artist.website\" \n target=\"_blank\"\n class=\"bg-white t-black flex-center flex w-2r h-2r radius-extra\"\n >\n <span>W</span>\n </a>\n </div>\n </div>\n </div>\n </div>\n \n <!-- Main content -->\n <div class=\"pd-medium\">\n <div class=\"cols-2-1_2 gap-medium mobile:cols-1\">\n <!-- Left column - Bio and details -->\n <div>\n <div class=\"bg-light pd-medium radius-medium mn-b-medium\">\n <h2 class=\"h3 mn-b-small\">Biography</h2>\n <p v-if=\"artist.bio\" class=\"p-medium\">{{ artist.bio }}</p>\n <p v-else class=\"p-medium t-transp\">No biography available for this artist.</p>\n </div>\n \n <!-- Genres -->\n <div v-if=\"genres.length > 0\" class=\"bg-light pd-medium radius-medium\">\n <h2 class=\"h3 mn-b-small\">Genres</h2>\n <div class=\"flex flex-wrap gap-small\">\n <span \n v-for=\"genre in genres\" \n :key=\"genre._id\"\n class=\"bg-white pd-thin radius-medium\"\n >\n {{ genre.name }}\n </span>\n </div>\n </div>\n </div>\n \n <!-- Right column - Discography -->\n <div>\n <!-- Albums section -->\n <div v-if=\"discography.albums.length > 0\" class=\"bg-light pd-medium radius-medium mn-b-medium\">\n <h2 class=\"h3 mn-b-medium\">Albums</h2>\n \n <div class=\"cols-2 gap-small mobile:cols-1\">\n <div\n v-for=\"album in discography.albums\"\n :key=\"album._id\"\n class=\"bg-white pd-small radius-medium flex-v-center flex cursor-pointer hover-bg-white\"\n @click=\"router.push({ name: 'album', params: { url: album.url } })\"\n >\n <div class=\"w-3r h-3r radius-small o-hidden mn-r-small\">\n <img\n v-if=\"album.coverUrl\"\n :src=\"FILE_SERVER_URL + album.coverUrl\"\n alt=\"Album cover\"\n class=\"w-100 h-100 object-fit-cover\"\n />\n <div v-else class=\"w-100 h-100 bg-light flex-center flex\">\n <span>A</span>\n </div>\n </div>\n \n <div class=\"w-100 o-hidden\">\n <p class=\"p-medium t-truncate\">{{ album.title }}</p>\n <p class=\"p-small t-transp\">{{ formatDate(album.releaseDate) }}</p>\n </div>\n </div>\n </div>\n \n <Button\n v-if=\"discography.albums.length > 4\"\n @click=\"router.push({ name: 'artist-albums', params: { artistId: artist._id } })\"\n class=\"mn-t-small w-100 bg-white t-black\"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n View All Albums\n </Button>\n </div>\n \n <!-- Singles section -->\n <div v-if=\"discography.singles.length > 0\" class=\"bg-light pd-medium radius-medium\">\n <h2 class=\"h3 mn-b-medium\">Singles & EPs</h2>\n \n <div class=\"cols-1 gap-small\">\n <div\n v-for=\"single in discography.singles\"\n :key=\"single._id\"\n class=\"bg-white pd-small radius-medium flex-v-center flex cursor-pointer hover-bg-white\"\n @click=\"router.push({ name: 'track', params: { url: single.url } })\"\n >\n <div class=\"w-3r h-3r radius-small o-hidden mn-r-small\">\n <img\n v-if=\"single.coverUrl\"\n :src=\"FILE_SERVER_URL + single.coverUrl\"\n alt=\"Single cover\"\n class=\"w-100 h-100 object-fit-cover\"\n />\n <div v-else class=\"w-100 h-100 bg-light flex-center flex\">\n <span>S</span>\n </div>\n </div>\n \n <div class=\"w-100 o-hidden\">\n <p class=\"p-medium t-truncate\">{{ single.title }}</p>\n <p class=\"p-small t-transp\">{{ formatDate(single.releaseDate) }}</p>\n </div>\n </div>\n </div>\n \n <Button\n v-if=\"discography.singles.length > 5\"\n @click=\"router.push({ name: 'artist-singles', params: { artistId: artist._id } })\"\n class=\"mn-t-small w-100 bg-white t-black\"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n View All Singles & EPs\n </Button>\n </div>\n \n <!-- Popular Tracks Section -->\n <div v-if=\"artistTracks.length > 0\" class=\"bg-light pd-medium radius-medium mn-b-medium\">\n <h2 class=\"h3 mn-b-medium\">Popular Tracks</h2>\n \n <div class=\"bg-white radius-medium o-hidden\">\n <TrackListCard\n v-for=\"(track, index) in artistTracks\"\n :key=\"track._id\"\n :track=\"track\"\n :index=\"index\"\n :showAlbum=\"true\"\n :showCover=\"true\"\n />\n </div>\n </div>\n \n <!-- No discography yet -->\n <div \n v-if=\"discography.albums.length === 0 && discography.singles.length === 0\" \n class=\"bg-light pd-medium radius-medium t-center\"\n >\n <p class=\"p-medium mn-b-small\">No releases yet</p>\n <p class=\"p-small t-transp\">This artist hasn't released any albums or singles yet.</p>\n \n <Button\n v-if=\"isOwner\"\n @click=\"router.push({ name: 'release-create', query: { artistId: artist._id } })\"\n class=\"mn-t-medium bg-main \"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n Add Release\n </Button>\n </div>\n </div>\n </div>\n \n <!-- Related Artists -->\n <div v-if=\"relatedArtists.length > 0\" class=\"mn-t-medium\">\n <h2 class=\"h3 mn-b-medium\">Fans Also Like</h2>\n \n <div class=\"cols-5 gap-medium mobile:cols-2\">\n <div\n v-for=\"relatedArtist in relatedArtists\"\n :key=\"relatedArtist._id\"\n class=\"t-center cursor-pointer\"\n @click=\"router.push({ name: 'artist', params: { url: relatedArtist.url } })\"\n >\n <div class=\"w-100 aspect-1x1 radius-medium o-hidden mn-b-small\">\n <img\n v-if=\"relatedArtist.photoUrl\"\n :src=\"FILE_SERVER_URL + relatedArtist.photoUrl\"\n alt=\"Artist photo\"\n class=\"w-100 h-100 object-fit-cover\"\n />\n <div v-else class=\"w-100 h-100 bg-light flex-center flex\">\n <span>{{ relatedArtist?.name?.[0] || 'A' }}</span>\n </div>\n </div>\n \n <p class=\"p-medium t-truncate\">{{ relatedArtist.name }}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, onMounted } from 'vue';\nimport { useRouter, useRoute } from 'vue-router';\n\n// Import Martyrs components\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\nimport TrackListCard from '../cards/TrackListCard.vue';\n\n// Import store\nimport * as artistsStore from '../../store/artists';\n// import * as genreStore from '../../store/genres'; // Assuming you have a genre store\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\n\n// Import mixins\nimport { useGlobalMixins } from '@martyrs/src/modules/globals/views/mixins/mixins.js';\nconst { formatDate } = useGlobalMixins();\n\n// Router and route\nconst router = useRouter();\nconst route = useRoute();\n\n// Emits\nconst emits = defineEmits(['page-loading', 'page-loaded']);\n\n// State\nconst genres = ref([]);\nconst hasLoaded = ref(false);\n\n// Computed\nconst artist = computed(() => {\n return artistsStore.state.currentArtist;\n});\n\nconst discography = computed(() => {\n return artistsStore.state.discography;\n});\n\nconst relatedArtists = computed(() => {\n return artistsStore.state.relatedArtists;\n});\n\nconst artistTracks = computed(() => {\n return artistsStore.state.discography.tracks || [];\n});\n\nconst isOwner = computed(() => {\n if (!artist.value || !auth.state.user._id) return false;\n \n // Check if current user is the creator of the artist\n return artist.value.creator?.target?._id === auth.state.user._id;\n});\n\n// Clear current artist state\nartistsStore.state.currentArtist = null;\n// Clear discography state\nartistsStore.state.discography = {\n albums: [],\n singles: [],\n tracks: []\n};\nartistsStore.state.relatedArtists = [];\n\n// Methods\nconst fetchArtist = async () => {\n try {\n // Get URL from route params\n const url = route.params.url;\n if (!url) {\n throw new Error('Artist URL is required');\n }\n \n await artistsStore.actions.fetchArtistByUrl(url);\n } catch (error) {\n console.error('Error fetching artist:', error);\n globals.actions.setError({\n message: 'Failed to load artist'\n });\n }\n};\n\n// Lifecycle hooks\nonMounted(async () => {\n emits('page-loading');\n \n await fetchArtist();\n \n hasLoaded.value = true;\n emits('page-loaded');\n});\n</script>"],"names":["useGlobalMixins","useRouter","useRoute","ref","computed","artistsStore.state","auth.state","artistsStore.actions","globals.actions","onMounted"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8TA,UAAM,EAAE,WAAU,IAAKA,uBAAe;AAGtC,UAAM,SAASC,UAAAA,UAAS;AACxB,UAAM,QAAQC,UAAAA,SAAQ;AAGtB,UAAM,QAAQ;AAGd,UAAM,SAASC,IAAAA,IAAI,EAAE;AACrB,UAAM,YAAYA,IAAAA,IAAI,KAAK;AAG3B,UAAM,SAASC,IAAAA,SAAS,MAAM;AAC5B,aAAOC,QAAAA,MAAmB;AAAA,IAC5B,CAAC;AAED,UAAM,cAAcD,IAAAA,SAAS,MAAM;AACjC,aAAOC,QAAAA,MAAmB;AAAA,IAC5B,CAAC;AAED,UAAM,iBAAiBD,IAAAA,SAAS,MAAM;AACpC,aAAOC,QAAAA,MAAmB;AAAA,IAC5B,CAAC;AAED,UAAM,eAAeD,IAAAA,SAAS,MAAM;AAClC,aAAOC,QAAAA,MAAmB,YAAY,UAAU,CAAA;AAAA,IAClD,CAAC;AAED,UAAM,UAAUD,IAAAA,SAAS,MAAM;AAC7B,UAAI,CAAC,OAAO,SAAS,CAACE,KAAAA,MAAW,KAAK,IAAK,QAAO;AAGlD,aAAO,OAAO,MAAM,SAAS,QAAQ,QAAQA,KAAAA,MAAW,KAAK;AAAA,IAC/D,CAAC;AAGDD,YAAAA,MAAmB,gBAAgB;AAEnCA,YAAAA,MAAmB,cAAc;AAAA,MAC/B,QAAQ,CAAA;AAAA,MACR,SAAS,CAAA;AAAA,MACT,QAAQ,CAAA;AAAA,IACV;AACAA,YAAAA,MAAmB,iBAAiB,CAAA;AAGpC,UAAM,cAAc,YAAY;AAC9B,UAAI;AAEF,cAAM,MAAM,MAAM,OAAO;AACzB,YAAI,CAAC,KAAK;AACR,gBAAM,IAAI,MAAM,wBAAwB;AAAA,QAC1C;AAEA,cAAME,QAAAA,QAAqB,iBAAiB,GAAG;AAAA,MACjD,SAAS,OAAO;AACd,gBAAQ,MAAM,0BAA0B,KAAK;AAC7CC,gBAAAA,QAAgB,SAAS;AAAA,UACvB,SAAS;AAAA,QACf,CAAK;AAAA,MACH;AAAA,IACF;AAGAC,QAAAA,UAAU,YAAY;AACpB,YAAM,cAAc;AAEpB,YAAM,YAAW;AAEjB,gBAAU,QAAQ;AAClB,YAAM,aAAa;AAAA,IACrB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,20 +1,18 @@
|
|
|
1
|
-
import { ref, computed, onMounted, createElementBlock, openBlock,
|
|
1
|
+
import { ref, computed, onMounted, createElementBlock, openBlock, createCommentVNode, createElementVNode, createVNode, unref, withCtx, createTextVNode, normalizeStyle, normalizeClass, toDisplayString, Fragment, renderList, createBlock } from "vue";
|
|
2
2
|
import { useRouter, useRoute } from "vue-router";
|
|
3
3
|
import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
|
|
4
|
-
|
|
4
|
+
/* empty css */
|
|
5
|
+
import _sfc_main$2 from "../cards/TrackListCard.vue.js";
|
|
5
6
|
import { state, actions } from "../../store/artists.js";
|
|
6
7
|
import { state as state$1 } from "../../../auth/views/store/auth.js";
|
|
7
8
|
import { actions as actions$1 } from "../../../globals/views/store/globals.js";
|
|
8
9
|
import { useGlobalMixins } from "../../../globals/views/mixins/mixins.js";
|
|
9
|
-
const _hoisted_1 = {
|
|
10
|
-
key: 0,
|
|
11
|
-
class: "flex-center flex pd-extra"
|
|
12
|
-
};
|
|
10
|
+
const _hoisted_1 = { class: "w-100 pos-relative" };
|
|
13
11
|
const _hoisted_2 = {
|
|
14
|
-
key:
|
|
12
|
+
key: 0,
|
|
15
13
|
class: "flex-center flex-column flex pd-extra"
|
|
16
14
|
};
|
|
17
|
-
const _hoisted_3 = { key:
|
|
15
|
+
const _hoisted_3 = { key: 1 };
|
|
18
16
|
const _hoisted_4 = {
|
|
19
17
|
key: 0,
|
|
20
18
|
class: "pos-absolute pos-t-medium pos-r-medium z-index-1"
|
|
@@ -92,29 +90,36 @@ const _hoisted_44 = { class: "p-medium t-truncate" };
|
|
|
92
90
|
const _hoisted_45 = { class: "p-small t-transp" };
|
|
93
91
|
const _hoisted_46 = {
|
|
94
92
|
key: 2,
|
|
93
|
+
class: "bg-light pd-medium radius-medium mn-b-medium"
|
|
94
|
+
};
|
|
95
|
+
const _hoisted_47 = { class: "bg-white radius-medium o-hidden" };
|
|
96
|
+
const _hoisted_48 = {
|
|
97
|
+
key: 3,
|
|
95
98
|
class: "bg-light pd-medium radius-medium t-center"
|
|
96
99
|
};
|
|
97
|
-
const
|
|
100
|
+
const _hoisted_49 = {
|
|
98
101
|
key: 0,
|
|
99
102
|
class: "mn-t-medium"
|
|
100
103
|
};
|
|
101
|
-
const
|
|
102
|
-
const
|
|
103
|
-
const
|
|
104
|
-
const
|
|
105
|
-
const
|
|
104
|
+
const _hoisted_50 = { class: "cols-5 gap-medium mobile:cols-2" };
|
|
105
|
+
const _hoisted_51 = ["onClick"];
|
|
106
|
+
const _hoisted_52 = { class: "w-100 aspect-1x1 radius-medium o-hidden mn-b-small" };
|
|
107
|
+
const _hoisted_53 = ["src"];
|
|
108
|
+
const _hoisted_54 = {
|
|
106
109
|
key: 1,
|
|
107
110
|
class: "w-100 h-100 bg-light flex-center flex"
|
|
108
111
|
};
|
|
109
|
-
const
|
|
112
|
+
const _hoisted_55 = { class: "p-medium t-truncate" };
|
|
110
113
|
const _sfc_main = {
|
|
111
114
|
__name: "Artist",
|
|
112
|
-
|
|
115
|
+
emits: ["page-loading", "page-loaded"],
|
|
116
|
+
setup(__props, { emit: __emit }) {
|
|
113
117
|
const { formatDate } = useGlobalMixins();
|
|
114
118
|
const router = useRouter();
|
|
115
119
|
const route = useRoute();
|
|
116
|
-
const
|
|
120
|
+
const emits = __emit;
|
|
117
121
|
const genres = ref([]);
|
|
122
|
+
const hasLoaded = ref(false);
|
|
118
123
|
const artist = computed(() => {
|
|
119
124
|
return state.currentArtist;
|
|
120
125
|
});
|
|
@@ -124,102 +129,58 @@ const _sfc_main = {
|
|
|
124
129
|
const relatedArtists = computed(() => {
|
|
125
130
|
return state.relatedArtists;
|
|
126
131
|
});
|
|
132
|
+
const artistTracks = computed(() => {
|
|
133
|
+
return state.discography.tracks || [];
|
|
134
|
+
});
|
|
127
135
|
const isOwner = computed(() => {
|
|
128
136
|
if (!artist.value || !state$1.user._id) return false;
|
|
129
137
|
return artist.value.creator?.target?._id === state$1.user._id;
|
|
130
138
|
});
|
|
139
|
+
state.currentArtist = null;
|
|
140
|
+
state.discography = {
|
|
141
|
+
albums: [],
|
|
142
|
+
singles: [],
|
|
143
|
+
tracks: []
|
|
144
|
+
};
|
|
145
|
+
state.relatedArtists = [];
|
|
131
146
|
const fetchArtist = async () => {
|
|
132
|
-
isLoading.value = true;
|
|
133
147
|
try {
|
|
134
148
|
const url = route.params.url;
|
|
135
149
|
if (!url) {
|
|
136
150
|
throw new Error("Artist URL is required");
|
|
137
151
|
}
|
|
138
152
|
await actions.fetchArtistByUrl(url);
|
|
139
|
-
if (artist.value?.genre && artist.value.genre.length > 0) {
|
|
140
|
-
await fetchGenres();
|
|
141
|
-
}
|
|
142
153
|
} catch (error) {
|
|
143
154
|
console.error("Error fetching artist:", error);
|
|
144
155
|
actions$1.setError({
|
|
145
156
|
message: "Failed to load artist"
|
|
146
157
|
});
|
|
147
|
-
} finally {
|
|
148
|
-
isLoading.value = false;
|
|
149
158
|
}
|
|
150
159
|
};
|
|
151
|
-
const fetchGenres = async () => {
|
|
152
|
-
};
|
|
153
|
-
const editArtist = () => {
|
|
154
|
-
router.push({
|
|
155
|
-
name: "artist-edit",
|
|
156
|
-
params: { url: artist.value.url }
|
|
157
|
-
});
|
|
158
|
-
};
|
|
159
|
-
const manageContent = () => {
|
|
160
|
-
router.push({
|
|
161
|
-
name: "artist-manage-content",
|
|
162
|
-
params: { artistId: artist.value._id }
|
|
163
|
-
});
|
|
164
|
-
};
|
|
165
|
-
const navigateToAlbum = (album) => {
|
|
166
|
-
router.push({
|
|
167
|
-
name: "album",
|
|
168
|
-
params: { url: album.url }
|
|
169
|
-
});
|
|
170
|
-
};
|
|
171
|
-
const navigateToTrack = (track) => {
|
|
172
|
-
router.push({
|
|
173
|
-
name: "track",
|
|
174
|
-
params: { url: track.url }
|
|
175
|
-
});
|
|
176
|
-
};
|
|
177
|
-
const navigateToArtist = (artist2) => {
|
|
178
|
-
router.push({
|
|
179
|
-
name: "artist",
|
|
180
|
-
params: { url: artist2.url }
|
|
181
|
-
});
|
|
182
|
-
};
|
|
183
|
-
const viewAllAlbums = () => {
|
|
184
|
-
router.push({
|
|
185
|
-
name: "artist-albums",
|
|
186
|
-
params: { artistId: artist.value._id }
|
|
187
|
-
});
|
|
188
|
-
};
|
|
189
|
-
const viewAllSingles = () => {
|
|
190
|
-
router.push({
|
|
191
|
-
name: "artist-singles",
|
|
192
|
-
params: { artistId: artist.value._id }
|
|
193
|
-
});
|
|
194
|
-
};
|
|
195
|
-
const addRelease = () => {
|
|
196
|
-
router.push({
|
|
197
|
-
name: "release-create",
|
|
198
|
-
query: { artistId: artist.value._id }
|
|
199
|
-
});
|
|
200
|
-
};
|
|
201
160
|
onMounted(async () => {
|
|
161
|
+
emits("page-loading");
|
|
202
162
|
await fetchArtist();
|
|
163
|
+
hasLoaded.value = true;
|
|
164
|
+
emits("page-loaded");
|
|
203
165
|
});
|
|
204
166
|
return (_ctx, _cache) => {
|
|
205
|
-
return openBlock(), createElementBlock("div",
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
_cache[1] || (_cache[1] = createElementVNode("h2", { class: "h2 mn-b-medium" }, "Artist Not Found", -1)),
|
|
210
|
-
_cache[2] || (_cache[2] = createElementVNode("p", { class: "p-medium t-transp mn-b-medium" }, "The artist you are looking for doesn't exist or may have been removed.", -1)),
|
|
167
|
+
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
168
|
+
hasLoaded.value && !artist.value ? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
169
|
+
_cache[6] || (_cache[6] = createElementVNode("h2", { class: "h2 mn-b-medium" }, "Artist Not Found", -1)),
|
|
170
|
+
_cache[7] || (_cache[7] = createElementVNode("p", { class: "p-medium t-transp mn-b-medium" }, "The artist you are looking for doesn't exist or may have been removed.", -1)),
|
|
211
171
|
createVNode(_sfc_main$1, {
|
|
212
172
|
submit: () => unref(router).push({ name: "music-home" }),
|
|
213
173
|
class: "bg-main",
|
|
214
174
|
showSucces: false,
|
|
215
175
|
showLoader: false
|
|
216
176
|
}, {
|
|
217
|
-
default: withCtx(() => _cache[
|
|
177
|
+
default: withCtx(() => _cache[5] || (_cache[5] = [
|
|
218
178
|
createTextVNode(" Back to Music ")
|
|
219
179
|
])),
|
|
220
180
|
_: 1
|
|
221
181
|
}, 8, ["submit"])
|
|
222
|
-
])) : (
|
|
182
|
+
])) : createCommentVNode("", true),
|
|
183
|
+
artist.value ? (openBlock(), createElementBlock("div", _hoisted_3, [
|
|
223
184
|
createElementVNode("div", {
|
|
224
185
|
class: "w-100 t-white h-50vh pos-relative",
|
|
225
186
|
style: normalizeStyle(artist.value.coverUrl ? `background-image: url(${_ctx.FILE_SERVER_URL + artist.value.coverUrl}); background-size: cover; background-position: center;` : "")
|
|
@@ -229,23 +190,23 @@ const _sfc_main = {
|
|
|
229
190
|
}, null, 2),
|
|
230
191
|
isOwner.value ? (openBlock(), createElementBlock("div", _hoisted_4, [
|
|
231
192
|
createVNode(_sfc_main$1, {
|
|
232
|
-
|
|
193
|
+
onClick: _cache[0] || (_cache[0] = ($event) => unref(router).push({ name: "artist-edit", params: { url: artist.value.url } })),
|
|
233
194
|
class: "bg-main mn-r-small",
|
|
234
195
|
showSucces: false,
|
|
235
196
|
showLoader: false
|
|
236
197
|
}, {
|
|
237
|
-
default: withCtx(() => _cache[
|
|
198
|
+
default: withCtx(() => _cache[8] || (_cache[8] = [
|
|
238
199
|
createTextVNode(" Edit Artist ")
|
|
239
200
|
])),
|
|
240
201
|
_: 1
|
|
241
202
|
}),
|
|
242
203
|
createVNode(_sfc_main$1, {
|
|
243
|
-
|
|
204
|
+
onClick: _cache[1] || (_cache[1] = ($event) => unref(router).push({ name: "artist-manage-content", params: { artistId: artist.value._id } })),
|
|
244
205
|
class: "bg-white t-black",
|
|
245
206
|
showSucces: false,
|
|
246
207
|
showLoader: false
|
|
247
208
|
}, {
|
|
248
|
-
default: withCtx(() => _cache[
|
|
209
|
+
default: withCtx(() => _cache[9] || (_cache[9] = [
|
|
249
210
|
createTextVNode(" Manage Content ")
|
|
250
211
|
])),
|
|
251
212
|
_: 1
|
|
@@ -259,7 +220,7 @@ const _sfc_main = {
|
|
|
259
220
|
alt: "Artist photo",
|
|
260
221
|
class: "w-100 h-100 object-fit-cover"
|
|
261
222
|
}, null, 8, _hoisted_7)) : (openBlock(), createElementBlock("div", _hoisted_8, [
|
|
262
|
-
createElementVNode("span", _hoisted_9, toDisplayString(artist.value
|
|
223
|
+
createElementVNode("span", _hoisted_9, toDisplayString(artist.value?.name?.[0] || "A"), 1)
|
|
263
224
|
]))
|
|
264
225
|
]),
|
|
265
226
|
createElementVNode("div", _hoisted_10, [
|
|
@@ -274,7 +235,7 @@ const _sfc_main = {
|
|
|
274
235
|
href: `https://t.me/${artist.value.socials.telegram}`,
|
|
275
236
|
target: "_blank",
|
|
276
237
|
class: "bg-white t-black flex-center flex w-2r h-2r radius-extra"
|
|
277
|
-
}, _cache[
|
|
238
|
+
}, _cache[10] || (_cache[10] = [
|
|
278
239
|
createElementVNode("span", null, "T", -1)
|
|
279
240
|
]), 8, _hoisted_16)) : createCommentVNode("", true),
|
|
280
241
|
artist.value.socials.twitter ? (openBlock(), createElementBlock("a", {
|
|
@@ -282,7 +243,7 @@ const _sfc_main = {
|
|
|
282
243
|
href: `https://twitter.com/${artist.value.socials.twitter}`,
|
|
283
244
|
target: "_blank",
|
|
284
245
|
class: "bg-white t-black flex-center flex w-2r h-2r radius-extra"
|
|
285
|
-
}, _cache[
|
|
246
|
+
}, _cache[11] || (_cache[11] = [
|
|
286
247
|
createElementVNode("span", null, "𝕏", -1)
|
|
287
248
|
]), 8, _hoisted_17)) : createCommentVNode("", true),
|
|
288
249
|
artist.value.socials.instagram ? (openBlock(), createElementBlock("a", {
|
|
@@ -290,7 +251,7 @@ const _sfc_main = {
|
|
|
290
251
|
href: `https://instagram.com/${artist.value.socials.instagram}`,
|
|
291
252
|
target: "_blank",
|
|
292
253
|
class: "bg-white t-black flex-center flex w-2r h-2r radius-extra"
|
|
293
|
-
}, _cache[
|
|
254
|
+
}, _cache[12] || (_cache[12] = [
|
|
294
255
|
createElementVNode("span", null, "I", -1)
|
|
295
256
|
]), 8, _hoisted_18)) : createCommentVNode("", true),
|
|
296
257
|
artist.value.socials.facebook ? (openBlock(), createElementBlock("a", {
|
|
@@ -298,7 +259,7 @@ const _sfc_main = {
|
|
|
298
259
|
href: `https://facebook.com/${artist.value.socials.facebook}`,
|
|
299
260
|
target: "_blank",
|
|
300
261
|
class: "bg-white t-black flex-center flex w-2r h-2r radius-extra"
|
|
301
|
-
}, _cache[
|
|
262
|
+
}, _cache[13] || (_cache[13] = [
|
|
302
263
|
createElementVNode("span", null, "F", -1)
|
|
303
264
|
]), 8, _hoisted_19)) : createCommentVNode("", true),
|
|
304
265
|
artist.value.website ? (openBlock(), createElementBlock("a", {
|
|
@@ -306,7 +267,7 @@ const _sfc_main = {
|
|
|
306
267
|
href: artist.value.website,
|
|
307
268
|
target: "_blank",
|
|
308
269
|
class: "bg-white t-black flex-center flex w-2r h-2r radius-extra"
|
|
309
|
-
}, _cache[
|
|
270
|
+
}, _cache[14] || (_cache[14] = [
|
|
310
271
|
createElementVNode("span", null, "W", -1)
|
|
311
272
|
]), 8, _hoisted_20)) : createCommentVNode("", true)
|
|
312
273
|
])
|
|
@@ -317,11 +278,11 @@ const _sfc_main = {
|
|
|
317
278
|
createElementVNode("div", _hoisted_22, [
|
|
318
279
|
createElementVNode("div", null, [
|
|
319
280
|
createElementVNode("div", _hoisted_23, [
|
|
320
|
-
_cache[
|
|
281
|
+
_cache[15] || (_cache[15] = createElementVNode("h2", { class: "h3 mn-b-small" }, "Biography", -1)),
|
|
321
282
|
artist.value.bio ? (openBlock(), createElementBlock("p", _hoisted_24, toDisplayString(artist.value.bio), 1)) : (openBlock(), createElementBlock("p", _hoisted_25, "No biography available for this artist."))
|
|
322
283
|
]),
|
|
323
284
|
genres.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_26, [
|
|
324
|
-
_cache[
|
|
285
|
+
_cache[16] || (_cache[16] = createElementVNode("h2", { class: "h3 mn-b-small" }, "Genres", -1)),
|
|
325
286
|
createElementVNode("div", _hoisted_27, [
|
|
326
287
|
(openBlock(true), createElementBlock(Fragment, null, renderList(genres.value, (genre) => {
|
|
327
288
|
return openBlock(), createElementBlock("span", {
|
|
@@ -334,13 +295,13 @@ const _sfc_main = {
|
|
|
334
295
|
]),
|
|
335
296
|
createElementVNode("div", null, [
|
|
336
297
|
discography.value.albums.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_28, [
|
|
337
|
-
_cache[
|
|
298
|
+
_cache[19] || (_cache[19] = createElementVNode("h2", { class: "h3 mn-b-medium" }, "Albums", -1)),
|
|
338
299
|
createElementVNode("div", _hoisted_29, [
|
|
339
300
|
(openBlock(true), createElementBlock(Fragment, null, renderList(discography.value.albums, (album) => {
|
|
340
301
|
return openBlock(), createElementBlock("div", {
|
|
341
302
|
key: album._id,
|
|
342
303
|
class: "bg-white pd-small radius-medium flex-v-center flex cursor-pointer hover-bg-white",
|
|
343
|
-
onClick: ($event) =>
|
|
304
|
+
onClick: ($event) => unref(router).push({ name: "album", params: { url: album.url } })
|
|
344
305
|
}, [
|
|
345
306
|
createElementVNode("div", _hoisted_31, [
|
|
346
307
|
album.coverUrl ? (openBlock(), createElementBlock("img", {
|
|
@@ -348,7 +309,7 @@ const _sfc_main = {
|
|
|
348
309
|
src: _ctx.FILE_SERVER_URL + album.coverUrl,
|
|
349
310
|
alt: "Album cover",
|
|
350
311
|
class: "w-100 h-100 object-fit-cover"
|
|
351
|
-
}, null, 8, _hoisted_32)) : (openBlock(), createElementBlock("div", _hoisted_33, _cache[
|
|
312
|
+
}, null, 8, _hoisted_32)) : (openBlock(), createElementBlock("div", _hoisted_33, _cache[17] || (_cache[17] = [
|
|
352
313
|
createElementVNode("span", null, "A", -1)
|
|
353
314
|
])))
|
|
354
315
|
]),
|
|
@@ -361,25 +322,25 @@ const _sfc_main = {
|
|
|
361
322
|
]),
|
|
362
323
|
discography.value.albums.length > 4 ? (openBlock(), createBlock(_sfc_main$1, {
|
|
363
324
|
key: 0,
|
|
364
|
-
|
|
325
|
+
onClick: _cache[2] || (_cache[2] = ($event) => unref(router).push({ name: "artist-albums", params: { artistId: artist.value._id } })),
|
|
365
326
|
class: "mn-t-small w-100 bg-white t-black",
|
|
366
327
|
showSucces: false,
|
|
367
328
|
showLoader: false
|
|
368
329
|
}, {
|
|
369
|
-
default: withCtx(() => _cache[
|
|
330
|
+
default: withCtx(() => _cache[18] || (_cache[18] = [
|
|
370
331
|
createTextVNode(" View All Albums ")
|
|
371
332
|
])),
|
|
372
333
|
_: 1
|
|
373
334
|
})) : createCommentVNode("", true)
|
|
374
335
|
])) : createCommentVNode("", true),
|
|
375
336
|
discography.value.singles.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_37, [
|
|
376
|
-
_cache[
|
|
337
|
+
_cache[22] || (_cache[22] = createElementVNode("h2", { class: "h3 mn-b-medium" }, "Singles & EPs", -1)),
|
|
377
338
|
createElementVNode("div", _hoisted_38, [
|
|
378
339
|
(openBlock(true), createElementBlock(Fragment, null, renderList(discography.value.singles, (single) => {
|
|
379
340
|
return openBlock(), createElementBlock("div", {
|
|
380
341
|
key: single._id,
|
|
381
342
|
class: "bg-white pd-small radius-medium flex-v-center flex cursor-pointer hover-bg-white",
|
|
382
|
-
onClick: ($event) =>
|
|
343
|
+
onClick: ($event) => unref(router).push({ name: "track", params: { url: single.url } })
|
|
383
344
|
}, [
|
|
384
345
|
createElementVNode("div", _hoisted_40, [
|
|
385
346
|
single.coverUrl ? (openBlock(), createElementBlock("img", {
|
|
@@ -387,7 +348,7 @@ const _sfc_main = {
|
|
|
387
348
|
src: _ctx.FILE_SERVER_URL + single.coverUrl,
|
|
388
349
|
alt: "Single cover",
|
|
389
350
|
class: "w-100 h-100 object-fit-cover"
|
|
390
|
-
}, null, 8, _hoisted_41)) : (openBlock(), createElementBlock("div", _hoisted_42, _cache[
|
|
351
|
+
}, null, 8, _hoisted_41)) : (openBlock(), createElementBlock("div", _hoisted_42, _cache[20] || (_cache[20] = [
|
|
391
352
|
createElementVNode("span", null, "S", -1)
|
|
392
353
|
])))
|
|
393
354
|
]),
|
|
@@ -400,28 +361,42 @@ const _sfc_main = {
|
|
|
400
361
|
]),
|
|
401
362
|
discography.value.singles.length > 5 ? (openBlock(), createBlock(_sfc_main$1, {
|
|
402
363
|
key: 0,
|
|
403
|
-
|
|
364
|
+
onClick: _cache[3] || (_cache[3] = ($event) => unref(router).push({ name: "artist-singles", params: { artistId: artist.value._id } })),
|
|
404
365
|
class: "mn-t-small w-100 bg-white t-black",
|
|
405
366
|
showSucces: false,
|
|
406
367
|
showLoader: false
|
|
407
368
|
}, {
|
|
408
|
-
default: withCtx(() => _cache[
|
|
369
|
+
default: withCtx(() => _cache[21] || (_cache[21] = [
|
|
409
370
|
createTextVNode(" View All Singles & EPs ")
|
|
410
371
|
])),
|
|
411
372
|
_: 1
|
|
412
373
|
})) : createCommentVNode("", true)
|
|
413
374
|
])) : createCommentVNode("", true),
|
|
414
|
-
|
|
415
|
-
_cache[
|
|
416
|
-
|
|
375
|
+
artistTracks.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_46, [
|
|
376
|
+
_cache[23] || (_cache[23] = createElementVNode("h2", { class: "h3 mn-b-medium" }, "Popular Tracks", -1)),
|
|
377
|
+
createElementVNode("div", _hoisted_47, [
|
|
378
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(artistTracks.value, (track, index) => {
|
|
379
|
+
return openBlock(), createBlock(_sfc_main$2, {
|
|
380
|
+
key: track._id,
|
|
381
|
+
track,
|
|
382
|
+
index,
|
|
383
|
+
showAlbum: true,
|
|
384
|
+
showCover: true
|
|
385
|
+
}, null, 8, ["track", "index"]);
|
|
386
|
+
}), 128))
|
|
387
|
+
])
|
|
388
|
+
])) : createCommentVNode("", true),
|
|
389
|
+
discography.value.albums.length === 0 && discography.value.singles.length === 0 ? (openBlock(), createElementBlock("div", _hoisted_48, [
|
|
390
|
+
_cache[25] || (_cache[25] = createElementVNode("p", { class: "p-medium mn-b-small" }, "No releases yet", -1)),
|
|
391
|
+
_cache[26] || (_cache[26] = createElementVNode("p", { class: "p-small t-transp" }, "This artist hasn't released any albums or singles yet.", -1)),
|
|
417
392
|
isOwner.value ? (openBlock(), createBlock(_sfc_main$1, {
|
|
418
393
|
key: 0,
|
|
419
|
-
|
|
394
|
+
onClick: _cache[4] || (_cache[4] = ($event) => unref(router).push({ name: "release-create", query: { artistId: artist.value._id } })),
|
|
420
395
|
class: "mn-t-medium bg-main",
|
|
421
396
|
showSucces: false,
|
|
422
397
|
showLoader: false
|
|
423
398
|
}, {
|
|
424
|
-
default: withCtx(() => _cache[
|
|
399
|
+
default: withCtx(() => _cache[24] || (_cache[24] = [
|
|
425
400
|
createTextVNode(" Add Release ")
|
|
426
401
|
])),
|
|
427
402
|
_: 1
|
|
@@ -429,32 +404,32 @@ const _sfc_main = {
|
|
|
429
404
|
])) : createCommentVNode("", true)
|
|
430
405
|
])
|
|
431
406
|
]),
|
|
432
|
-
relatedArtists.value.length > 0 ? (openBlock(), createElementBlock("div",
|
|
433
|
-
_cache[
|
|
434
|
-
createElementVNode("div",
|
|
407
|
+
relatedArtists.value.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_49, [
|
|
408
|
+
_cache[27] || (_cache[27] = createElementVNode("h2", { class: "h3 mn-b-medium" }, "Fans Also Like", -1)),
|
|
409
|
+
createElementVNode("div", _hoisted_50, [
|
|
435
410
|
(openBlock(true), createElementBlock(Fragment, null, renderList(relatedArtists.value, (relatedArtist) => {
|
|
436
411
|
return openBlock(), createElementBlock("div", {
|
|
437
412
|
key: relatedArtist._id,
|
|
438
413
|
class: "t-center cursor-pointer",
|
|
439
|
-
onClick: ($event) =>
|
|
414
|
+
onClick: ($event) => unref(router).push({ name: "artist", params: { url: relatedArtist.url } })
|
|
440
415
|
}, [
|
|
441
|
-
createElementVNode("div",
|
|
416
|
+
createElementVNode("div", _hoisted_52, [
|
|
442
417
|
relatedArtist.photoUrl ? (openBlock(), createElementBlock("img", {
|
|
443
418
|
key: 0,
|
|
444
419
|
src: _ctx.FILE_SERVER_URL + relatedArtist.photoUrl,
|
|
445
420
|
alt: "Artist photo",
|
|
446
421
|
class: "w-100 h-100 object-fit-cover"
|
|
447
|
-
}, null, 8,
|
|
448
|
-
createElementVNode("span", null, toDisplayString(relatedArtist
|
|
422
|
+
}, null, 8, _hoisted_53)) : (openBlock(), createElementBlock("div", _hoisted_54, [
|
|
423
|
+
createElementVNode("span", null, toDisplayString(relatedArtist?.name?.[0] || "A"), 1)
|
|
449
424
|
]))
|
|
450
425
|
]),
|
|
451
|
-
createElementVNode("p",
|
|
452
|
-
], 8,
|
|
426
|
+
createElementVNode("p", _hoisted_55, toDisplayString(relatedArtist.name), 1)
|
|
427
|
+
], 8, _hoisted_51);
|
|
453
428
|
}), 128))
|
|
454
429
|
])
|
|
455
430
|
])) : createCommentVNode("", true)
|
|
456
431
|
])
|
|
457
|
-
]))
|
|
432
|
+
])) : createCommentVNode("", true)
|
|
458
433
|
]);
|
|
459
434
|
};
|
|
460
435
|
}
|