@ozdao/martyrs 0.2.486 → 0.2.487
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/Media-B2jWzwLB.cjs +1 -0
- package/dist/{Media-CXQSPHt2.js → Media-DZ5_ItXQ.js} +3 -3
- package/dist/auth.server.cjs +1 -1
- package/dist/auth.server.js +1 -1
- package/dist/{authJwt-DBB51Iql.cjs → authJwt-D35KyJlE.cjs} +31 -2
- package/dist/{authJwt-DcYNNwcr.js → authJwt-DqxhUym0.js} +31 -2
- package/dist/chats.server.cjs +1 -1
- package/dist/chats.server.js +1 -1
- package/dist/community.server.cjs +1 -1
- package/dist/community.server.js +1 -1
- package/dist/crud-BDIArc5A.cjs +1096 -0
- package/dist/crud-DJvpe0aZ.js +1097 -0
- package/dist/events.server.cjs +1 -1
- package/dist/events.server.js +1 -1
- package/dist/files.server.cjs +1 -1
- package/dist/files.server.js +1 -1
- package/dist/gallery.server.cjs +1 -1
- package/dist/gallery.server.js +1 -1
- package/dist/{index-CsJwdsBW.js → index-CVuQC4k1.js} +1 -1
- package/dist/{index-YNOkL1mu.cjs → index-DiSKVCaA.cjs} +1 -1
- package/dist/main-C6_DPWGX.cjs +11 -0
- package/dist/{main-Cfh5138F.js → main-nQmkbWsW.js} +825 -826
- package/dist/martyrs/src/components/Chips/{Chips.vue2.cjs → Chips.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Chips/Chips.vue.cjs.map +1 -0
- package/dist/martyrs/src/components/Chips/{Chips.vue2.js → Chips.vue.js} +2 -2
- package/dist/martyrs/src/components/Chips/Chips.vue.js.map +1 -0
- package/dist/martyrs/src/components/Field/{Field.vue.cjs → Field.vue2.cjs} +5 -6
- package/dist/martyrs/src/components/Field/Field.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Field/{Field.vue.js → Field.vue2.js} +5 -6
- package/dist/martyrs/src/components/Field/Field.vue2.js.map +1 -0
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs +10 -9
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +13 -12
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js.map +1 -1
- package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.cjs +1 -1
- package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.js +1 -1
- package/dist/martyrs/src/components/FieldPhone/FieldPhone.vue.js.map +1 -1
- package/dist/martyrs/src/components/Media/Media.vue.cjs +2 -2
- package/dist/martyrs/src/components/Media/Media.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Media/Media.vue.js +2 -2
- package/dist/martyrs/src/components/Media/Media.vue.js.map +1 -1
- package/dist/martyrs/src/components/Select/Select.vue.cjs +2 -2
- package/dist/martyrs/src/components/Select/Select.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Select/Select.vue.js +2 -2
- package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs +1 -0
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +1 -0
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js.map +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 +5 -5
- 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 +5 -5
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +1 -0
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +1 -0
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js.map +1 -1
- 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 +10 -10
- 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 +4 -4
- 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 +5 -5
- 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 +4 -4
- 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 +23 -23
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +11 -11
- package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.cjs +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +3 -3
- package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.cjs +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.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 +25 -25
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +15 -15
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +9 -2
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +9 -2
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js.map +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +2 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +2 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.store.cjs +24 -58
- package/dist/martyrs/src/modules/globals/views/classes/globals.store.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.store.js +24 -58
- package/dist/martyrs/src/modules/globals/views/classes/globals.store.js.map +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 +2 -2
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs +1 -0
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js +1 -0
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterOptions.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterOptions.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterPrice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/filters/FilterPrice.vue.js +3 -3
- package/dist/martyrs/src/modules/globals/views/store/globals.cjs +6 -0
- package/dist/martyrs/src/modules/globals/views/store/globals.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/store/globals.js +6 -0
- package/dist/martyrs/src/modules/globals/views/store/globals.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/utils/query-serializer.cjs +100 -0
- package/dist/martyrs/src/modules/globals/views/utils/query-serializer.cjs.map +1 -0
- package/dist/martyrs/src/modules/globals/views/utils/query-serializer.js +100 -0
- package/dist/martyrs/src/modules/globals/views/utils/query-serializer.js.map +1 -0
- package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.cjs +224 -0
- package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.js +224 -0
- package/dist/martyrs/src/modules/icons/components/IconSearchPopup.vue.js.map +1 -0
- package/dist/martyrs/src/modules/icons/entities/IconAddress.vue.cjs +40 -0
- package/dist/martyrs/src/modules/icons/entities/IconAddress.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/icons/entities/IconAddress.vue.js +40 -0
- package/dist/martyrs/src/modules/icons/entities/IconAddress.vue.js.map +1 -0
- package/dist/martyrs/src/modules/icons/entities/IconDate.vue.cjs +6 -6
- package/dist/martyrs/src/modules/icons/entities/IconDate.vue.js +6 -6
- package/dist/martyrs/src/modules/icons/entities/IconEmail.vue.cjs +32 -0
- package/dist/martyrs/src/modules/icons/entities/IconEmail.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/icons/entities/IconEmail.vue.js +32 -0
- package/dist/martyrs/src/modules/icons/entities/IconEmail.vue.js.map +1 -0
- package/dist/martyrs/src/modules/icons/entities/IconMusic.vue.cjs +10 -12
- package/dist/martyrs/src/modules/icons/entities/IconMusic.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/entities/IconMusic.vue.js +11 -13
- package/dist/martyrs/src/modules/icons/entities/IconMusic.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/entities/IconPhone.vue.cjs +32 -0
- package/dist/martyrs/src/modules/icons/entities/IconPhone.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/icons/entities/IconPhone.vue.js +32 -0
- package/dist/martyrs/src/modules/icons/entities/IconPhone.vue.js.map +1 -0
- package/dist/martyrs/src/modules/icons/icons.client.cjs +48 -4
- package/dist/martyrs/src/modules/icons/icons.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/icons.client.js +172 -128
- package/dist/martyrs/src/modules/icons/icons.client.js.map +1 -1
- package/dist/martyrs/src/modules/icons/navigation/IconCross.vue.cjs +5 -7
- package/dist/martyrs/src/modules/icons/navigation/IconCross.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/navigation/IconCross.vue.js +5 -7
- package/dist/martyrs/src/modules/icons/navigation/IconCross.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/navigation/IconPause.vue.cjs +6 -11
- package/dist/martyrs/src/modules/icons/navigation/IconPause.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/navigation/IconPause.vue.js +6 -11
- package/dist/martyrs/src/modules/icons/navigation/IconPause.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/navigation/IconRefresh.vue.cjs +6 -11
- package/dist/martyrs/src/modules/icons/navigation/IconRefresh.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/navigation/IconRefresh.vue.js +6 -11
- package/dist/martyrs/src/modules/icons/navigation/IconRefresh.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs +62 -6
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js +189 -133
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/dribbble.vue.cjs +21 -12
- package/dist/martyrs/src/modules/icons/socials/dribbble.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/dribbble.vue.js +21 -12
- package/dist/martyrs/src/modules/icons/socials/dribbble.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/facebook.vue.cjs +21 -12
- package/dist/martyrs/src/modules/icons/socials/facebook.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/facebook.vue.js +21 -12
- package/dist/martyrs/src/modules/icons/socials/facebook.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/instagram.vue.cjs +25 -17
- package/dist/martyrs/src/modules/icons/socials/instagram.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/instagram.vue.js +25 -17
- package/dist/martyrs/src/modules/icons/socials/instagram.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/line.vue.cjs +23 -14
- package/dist/martyrs/src/modules/icons/socials/line.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/line.vue.js +23 -14
- package/dist/martyrs/src/modules/icons/socials/line.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/linkedin.vue.cjs +26 -17
- package/dist/martyrs/src/modules/icons/socials/linkedin.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/linkedin.vue.js +26 -17
- package/dist/martyrs/src/modules/icons/socials/linkedin.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/reddit.vue.cjs +21 -12
- package/dist/martyrs/src/modules/icons/socials/reddit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/reddit.vue.js +21 -12
- package/dist/martyrs/src/modules/icons/socials/reddit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/telegram.vue.cjs +29 -20
- package/dist/martyrs/src/modules/icons/socials/telegram.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/telegram.vue.js +29 -20
- package/dist/martyrs/src/modules/icons/socials/telegram.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/twitter.vue.cjs +21 -12
- package/dist/martyrs/src/modules/icons/socials/twitter.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/twitter.vue.js +21 -12
- package/dist/martyrs/src/modules/icons/socials/twitter.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/vk.vue.cjs +21 -12
- package/dist/martyrs/src/modules/icons/socials/vk.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/vk.vue.js +21 -12
- package/dist/martyrs/src/modules/icons/socials/vk.vue.js.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/whatsapp.vue.cjs +32 -0
- package/dist/martyrs/src/modules/icons/socials/whatsapp.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/icons/socials/whatsapp.vue.js +32 -0
- package/dist/martyrs/src/modules/icons/socials/whatsapp.vue.js.map +1 -0
- package/dist/martyrs/src/modules/icons/socials/youtube.vue.cjs +21 -12
- package/dist/martyrs/src/modules/icons/socials/youtube.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/socials/youtube.vue.js +21 -12
- package/dist/martyrs/src/modules/icons/socials/youtube.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- 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 +3 -3
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +162 -0
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +162 -0
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs +437 -0
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +437 -0
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/{pages → forms}/ArtistForm.vue.cjs +140 -106
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/{pages → forms}/ArtistForm.vue.js +162 -128
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +11 -11
- 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 +23 -23
- 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 +2 -2
- 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 +2 -2
- 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 +554 -0
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +554 -0
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs +57 -68
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js +58 -69
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/{AlbumDetail.vue.cjs → Album.vue.cjs} +47 -23
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/{AlbumDetail.vue.js → Album.vue.js} +47 -23
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/AlbumCreate.vue.cjs +14 -0
- package/dist/martyrs/src/modules/music/components/pages/AlbumCreate.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/AlbumCreate.vue.js +14 -0
- package/dist/martyrs/src/modules/music/components/pages/AlbumCreate.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/AlbumEdit.vue.cjs +23 -0
- package/dist/martyrs/src/modules/music/components/pages/AlbumEdit.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/AlbumEdit.vue.js +23 -0
- package/dist/martyrs/src/modules/music/components/pages/AlbumEdit.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/{ArtistDetail.vue.cjs → Artist.vue.cjs} +11 -11
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/{ArtistDetail.vue.js → Artist.vue.js} +11 -11
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistCreate.vue.cjs +14 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistCreate.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistCreate.vue.js +14 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistCreate.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistEdit.vue.cjs +23 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistEdit.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistEdit.vue.js +23 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistEdit.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.cjs +94 -59
- 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 +95 -60
- 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 +168 -120
- 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 +170 -122
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/{PlaylistDetail.vue.cjs → Playlist.vue.cjs} +60 -36
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/{PlaylistDetail.vue.js → Playlist.vue.js} +73 -49
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/PlaylistCreate.vue.cjs +14 -0
- package/dist/martyrs/src/modules/music/components/pages/PlaylistCreate.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/PlaylistCreate.vue.js +14 -0
- package/dist/martyrs/src/modules/music/components/pages/PlaylistCreate.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/PlaylistEdit.vue.cjs +23 -0
- package/dist/martyrs/src/modules/music/components/pages/PlaylistEdit.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/PlaylistEdit.vue.js +23 -0
- package/dist/martyrs/src/modules/music/components/pages/PlaylistEdit.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +52 -28
- 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 +52 -28
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/{TrackDetail.vue.cjs → Track.vue.cjs} +37 -13
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/{TrackDetail.vue.js → Track.vue.js} +38 -14
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.cjs +28 -0
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +28 -0
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/TrackEdit.vue.cjs +23 -0
- package/dist/martyrs/src/modules/music/components/pages/TrackEdit.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/TrackEdit.vue.js +23 -0
- package/dist/martyrs/src/modules/music/components/pages/TrackEdit.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +3 -3
- 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 +3 -3
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/music.client.cjs +31 -31
- package/dist/martyrs/src/modules/music/music.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/music.client.js +31 -31
- package/dist/martyrs/src/modules/music/music.client.js.map +1 -1
- package/dist/martyrs/src/modules/music/router/albums.cjs +34 -0
- package/dist/martyrs/src/modules/music/router/albums.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/router/albums.js +34 -0
- package/dist/martyrs/src/modules/music/router/albums.js.map +1 -0
- package/dist/martyrs/src/modules/music/router/artists.cjs +34 -0
- package/dist/martyrs/src/modules/music/router/artists.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/router/artists.js +34 -0
- package/dist/martyrs/src/modules/music/router/artists.js.map +1 -0
- package/dist/martyrs/src/modules/music/router/music.cjs +12 -64
- package/dist/martyrs/src/modules/music/router/music.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/router/music.js +12 -64
- package/dist/martyrs/src/modules/music/router/music.js.map +1 -1
- package/dist/martyrs/src/modules/music/router/playlists.cjs +34 -0
- package/dist/martyrs/src/modules/music/router/playlists.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/router/playlists.js +34 -0
- package/dist/martyrs/src/modules/music/router/playlists.js.map +1 -0
- package/dist/martyrs/src/modules/music/router/tracks.cjs +34 -0
- package/dist/martyrs/src/modules/music/router/tracks.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/router/tracks.js +34 -0
- package/dist/martyrs/src/modules/music/router/tracks.js.map +1 -0
- package/dist/martyrs/src/modules/music/store/artists.cjs +12 -6
- package/dist/martyrs/src/modules/music/store/artists.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/store/artists.js +12 -6
- package/dist/martyrs/src/modules/music/store/artists.js.map +1 -1
- package/dist/martyrs/src/modules/music/store/genres.cjs +123 -0
- package/dist/martyrs/src/modules/music/store/genres.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/store/genres.js +123 -0
- package/dist/martyrs/src/modules/music/store/genres.js.map +1 -0
- package/dist/martyrs/src/modules/music/store/playlists.cjs +14 -6
- package/dist/martyrs/src/modules/music/store/playlists.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/store/playlists.js +14 -6
- package/dist/martyrs/src/modules/music/store/playlists.js.map +1 -1
- package/dist/martyrs/src/modules/music/store/tracks.cjs +6 -2
- package/dist/martyrs/src/modules/music/store/tracks.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/store/tracks.js +6 -2
- package/dist/martyrs/src/modules/music/store/tracks.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +1 -0
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -0
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.cjs +1 -0
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.js +1 -0
- package/dist/martyrs/src/modules/orders/components/sections/FormAddCustomer.vue.js.map +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 +5 -5
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/Socials.vue.js +16 -16
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +15 -15
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +16 -16
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.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 +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +8 -8
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs +1 -0
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +1 -0
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs +1 -0
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +1 -0
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -0
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -0
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/forms/ReorderSettingsForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/forms/ReorderSettingsForm.vue.js +8 -8
- package/dist/martyrs/src/modules/products/components/forms/StockAuditForm.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/forms/StockAuditForm.vue.js +12 -12
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +11 -11
- package/dist/martyrs/src/modules/products/components/pages/LeftoverEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/LeftoverEdit.vue.js +10 -10
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +17 -17
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +6 -6
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +12 -12
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +16 -16
- 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 +4 -4
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs +1 -0
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +1 -0
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -0
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -0
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js.map +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 +12 -12
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +7 -7
- 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 +2 -2
- 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 +2 -2
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.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 +1165 -551
- package/dist/music.server.js +1161 -547
- package/dist/orders.server.cjs +89 -4
- package/dist/orders.server.js +88 -3
- package/dist/organizations.server.cjs +1 -1
- package/dist/organizations.server.js +1 -1
- package/dist/products.server.cjs +3 -1093
- package/dist/products.server.js +2 -1092
- package/dist/rents.server.cjs +1 -1
- package/dist/rents.server.js +1 -1
- package/dist/style.css +121 -77
- package/dist/wallet.server.cjs +1 -1
- package/dist/wallet.server.js +1 -1
- package/package.json +1 -1
- package/src/components/Field/Field.vue +13 -8
- package/src/components/FieldBig/FieldBig.vue +3 -5
- package/src/components/FieldPhone/FieldPhone.vue +1 -1
- package/src/components/Media/Media.vue +1 -1
- package/src/components/Select/Select.vue +1 -1
- package/src/components/Status/Snack.vue +83 -0
- package/src/modules/auth/controllers/middlewares/authJwt.js +59 -6
- package/src/modules/globals/views/classes/globals.store.js +31 -66
- package/src/modules/globals/views/components/partials/FooterAlt.vue +363 -0
- package/src/modules/globals/views/store/globals.js +42 -0
- package/src/modules/globals/views/utils/query-serializer.js +182 -0
- package/src/modules/icons/components/IconSearchPopup.vue +254 -0
- package/src/modules/icons/entities/IconAddress.vue +17 -0
- package/src/modules/icons/entities/IconDate.vue +3 -3
- package/src/modules/icons/entities/IconEmail.vue +14 -0
- package/src/modules/icons/entities/IconMusic.vue +3 -3
- package/src/modules/icons/entities/IconPhone.vue +14 -0
- package/src/modules/icons/icons.client.js +85 -31
- package/src/modules/icons/icons.server.js +292 -0
- package/src/modules/icons/navigation/IconCross.vue +4 -16
- package/src/modules/icons/navigation/IconPause.vue +9 -24
- package/src/modules/icons/navigation/IconRefresh.vue +9 -24
- package/src/modules/icons/pages/IconsPage.vue +78 -2
- package/src/modules/icons/routes/icons.routes.js +81 -0
- package/src/modules/icons/socials/dribbble.vue +11 -2
- package/src/modules/icons/socials/facebook.vue +11 -2
- package/src/modules/icons/socials/instagram.vue +11 -4
- package/src/modules/icons/socials/line.vue +11 -2
- package/src/modules/icons/socials/linkedin.vue +11 -2
- package/src/modules/icons/socials/reddit.vue +10 -1
- package/src/modules/icons/socials/telegram.vue +11 -2
- package/src/modules/icons/socials/twitter.vue +11 -2
- package/src/modules/icons/socials/vk.vue +11 -2
- package/src/modules/icons/socials/whatsapp.vue +12 -0
- package/src/modules/icons/socials/youtube.vue +11 -2
- package/src/modules/music/.claude/settings.local.json +8 -0
- package/src/modules/music/CLAUDE.md +312 -0
- package/src/modules/music/components/SidebarMusic.vue +8 -8
- package/src/modules/music/components/cards/AlbumCard.vue +2 -2
- package/src/modules/music/components/cards/ArtistCard.vue +2 -2
- package/src/modules/music/components/cards/PlaylistCard.vue +2 -2
- package/src/modules/music/components/cards/TrackCard.vue +1 -1
- package/src/modules/music/components/cards/TrackListCard.vue +135 -0
- package/src/modules/music/components/forms/AlbumForm.vue +463 -0
- package/src/modules/music/components/{pages → forms}/ArtistForm.vue +127 -96
- package/src/modules/music/components/forms/PlaylistForm.vue +10 -10
- package/src/modules/music/components/forms/SearchForm.vue +1 -1
- package/src/modules/music/components/forms/TrackForm.vue +577 -0
- package/src/modules/music/components/layouts/MusicLayout.vue +35 -41
- package/src/modules/music/components/pages/{AlbumDetail.vue → Album.vue} +42 -20
- package/src/modules/music/components/pages/AlbumCreate.vue +7 -0
- package/src/modules/music/components/pages/AlbumEdit.vue +14 -0
- package/src/modules/music/components/pages/{ArtistDetail.vue → Artist.vue} +9 -9
- package/src/modules/music/components/pages/ArtistCreate.vue +7 -0
- package/src/modules/music/components/pages/ArtistEdit.vue +14 -0
- package/src/modules/music/components/pages/MusicHome.vue +86 -67
- package/src/modules/music/components/pages/MusicLibrary.vue +136 -105
- package/src/modules/music/components/pages/{PlaylistDetail.vue → Playlist.vue} +56 -34
- package/src/modules/music/components/pages/PlaylistCreate.vue +7 -0
- package/src/modules/music/components/pages/PlaylistEdit.vue +14 -0
- package/src/modules/music/components/pages/SearchResults.vue +49 -27
- package/src/modules/music/components/pages/{TrackDetail.vue → Track.vue} +36 -14
- package/src/modules/music/components/pages/TrackCreate.vue +23 -0
- package/src/modules/music/components/pages/TrackEdit.vue +14 -0
- package/src/modules/music/components/player/MusicPlayer.vue +2 -2
- package/src/modules/music/middlewares/albums.verifier.js +234 -0
- package/src/modules/music/middlewares/artists.verifier.js +213 -0
- package/src/modules/music/middlewares/genres.verifier.js +148 -0
- package/src/modules/music/middlewares/playlists.verifier.js +219 -0
- package/src/modules/music/middlewares/tracks.verifier.js +263 -0
- package/src/modules/music/music.client.js +31 -33
- package/src/modules/music/music.server.js +33 -26
- package/src/modules/music/router/albums.js +31 -0
- package/src/modules/music/router/artists.js +31 -0
- package/src/modules/music/router/music.js +14 -65
- package/src/modules/music/router/playlists.js +31 -0
- package/src/modules/music/router/tracks.js +31 -0
- package/src/modules/music/routes/albums.routes.js +126 -0
- package/src/modules/music/routes/artists.routes.js +171 -0
- package/src/modules/music/routes/genres.routes.js +118 -0
- package/src/modules/music/routes/playlists.routes.js +239 -0
- package/src/modules/music/routes/tracks.routes.js +149 -0
- package/src/modules/music/store/artists.js +17 -7
- package/src/modules/music/store/genres.js +150 -0
- package/src/modules/music/store/playlists.js +19 -6
- package/src/modules/music/store/tracks.js +9 -2
- package/dist/Media-DhpD64nT.cjs +0 -1
- package/dist/globals.crud-BQG1Lm0A.js +0 -90
- package/dist/globals.crud-Dv7UXbRM.cjs +0 -89
- package/dist/main-DKJqboZy.cjs +0 -11
- package/dist/martyrs/src/components/Chips/Chips.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Chips/Chips.vue2.js.map +0 -1
- package/dist/martyrs/src/components/Field/Field.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/Field/Field.vue.js.map +0 -1
- package/dist/martyrs/src/modules/music/components/forms/UploadForm.vue.cjs +0 -328
- package/dist/martyrs/src/modules/music/components/forms/UploadForm.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/music/components/forms/UploadForm.vue.js +0 -328
- package/dist/martyrs/src/modules/music/components/forms/UploadForm.vue.js.map +0 -1
- package/dist/martyrs/src/modules/music/components/lists/AlbumList.vue.cjs +0 -44
- package/dist/martyrs/src/modules/music/components/lists/AlbumList.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/music/components/lists/AlbumList.vue.js +0 -44
- package/dist/martyrs/src/modules/music/components/lists/AlbumList.vue.js.map +0 -1
- package/dist/martyrs/src/modules/music/components/lists/ArtistList.vue.cjs +0 -305
- package/dist/martyrs/src/modules/music/components/lists/ArtistList.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/music/components/lists/ArtistList.vue.js +0 -305
- package/dist/martyrs/src/modules/music/components/lists/ArtistList.vue.js.map +0 -1
- package/dist/martyrs/src/modules/music/components/lists/PlaylistList.vue.cjs +0 -44
- package/dist/martyrs/src/modules/music/components/lists/PlaylistList.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/music/components/lists/PlaylistList.vue.js +0 -44
- package/dist/martyrs/src/modules/music/components/lists/PlaylistList.vue.js.map +0 -1
- package/dist/martyrs/src/modules/music/components/lists/TrackList.vue.cjs +0 -199
- package/dist/martyrs/src/modules/music/components/lists/TrackList.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/music/components/lists/TrackList.vue.js +0 -199
- package/dist/martyrs/src/modules/music/components/lists/TrackList.vue.js.map +0 -1
- package/dist/martyrs/src/modules/music/components/pages/AlbumDetail.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/music/components/pages/AlbumDetail.vue.js.map +0 -1
- package/dist/martyrs/src/modules/music/components/pages/ArtistDetail.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/music/components/pages/ArtistDetail.vue.js.map +0 -1
- package/dist/martyrs/src/modules/music/components/pages/ArtistForm.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/music/components/pages/ArtistForm.vue.js.map +0 -1
- package/dist/martyrs/src/modules/music/components/pages/ArtistManager.vue.cjs +0 -303
- package/dist/martyrs/src/modules/music/components/pages/ArtistManager.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/music/components/pages/ArtistManager.vue.js +0 -303
- package/dist/martyrs/src/modules/music/components/pages/ArtistManager.vue.js.map +0 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicUpload.vue.cjs +0 -50
- package/dist/martyrs/src/modules/music/components/pages/MusicUpload.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicUpload.vue.js +0 -50
- package/dist/martyrs/src/modules/music/components/pages/MusicUpload.vue.js.map +0 -1
- package/dist/martyrs/src/modules/music/components/pages/PlaylistDetail.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/music/components/pages/PlaylistDetail.vue.js.map +0 -1
- package/dist/martyrs/src/modules/music/components/pages/TrackDetail.vue.cjs.map +0 -1
- package/dist/martyrs/src/modules/music/components/pages/TrackDetail.vue.js.map +0 -1
- package/src/modules/music/components/forms/UploadForm.vue +0 -313
- package/src/modules/music/components/lists/AlbumList.vue +0 -25
- package/src/modules/music/components/lists/ArtistList.vue +0 -280
- package/src/modules/music/components/lists/PlaylistList.vue +0 -25
- package/src/modules/music/components/lists/TrackList.vue +0 -175
- package/src/modules/music/components/pages/ArtistManager.vue +0 -277
- package/src/modules/music/components/pages/MusicUpload.vue +0 -44
- package/src/modules/music/controllers/album.controller.js +0 -82
- package/src/modules/music/controllers/artist.controller.js +0 -99
- package/src/modules/music/controllers/genre.controller.js +0 -63
- package/src/modules/music/controllers/music.controller.js +0 -145
- package/src/modules/music/controllers/playlist.controller.js +0 -146
- package/src/modules/music/routes/album.routes.js +0 -28
- package/src/modules/music/routes/artist.routes.js +0 -30
- package/src/modules/music/routes/genre.routes.js +0 -28
- package/src/modules/music/routes/music.routes.js +0 -106
- package/src/modules/music/routes/playlist.routes.js +0 -47
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { ref, resolveComponent, createElementBlock, openBlock, normalizeClass, createElementVNode, createCommentVNode, createBlock, toDisplayString, withModifiers, withCtx, createVNode, createTextVNode } from "vue";
|
|
2
|
+
import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
|
|
3
|
+
import Media from "../../../../components/Media/Media.vue.js";
|
|
4
|
+
import _sfc_main$2 from "../../../icons/navigation/IconPlay.vue.js";
|
|
5
|
+
import _sfc_main$3 from "../../../icons/navigation/IconPause.vue.js";
|
|
6
|
+
import { actions, state } from "../../store/player.js";
|
|
7
|
+
const _hoisted_1 = { class: "track-number w-3r t-center pos-relative" };
|
|
8
|
+
const _hoisted_2 = {
|
|
9
|
+
key: 0,
|
|
10
|
+
class: "t-grey"
|
|
11
|
+
};
|
|
12
|
+
const _hoisted_3 = { class: "track-title flex-child-1 flex flex-v-center" };
|
|
13
|
+
const _hoisted_4 = {
|
|
14
|
+
key: 0,
|
|
15
|
+
class: "track-cover mn-r-small"
|
|
16
|
+
};
|
|
17
|
+
const _hoisted_5 = { class: "track-info" };
|
|
18
|
+
const _hoisted_6 = { class: "track-artist t-grey t-small" };
|
|
19
|
+
const _hoisted_7 = { key: 1 };
|
|
20
|
+
const _hoisted_8 = {
|
|
21
|
+
key: 0,
|
|
22
|
+
class: "track-album w-15r mobile:w-0 mobile:hidden t-grey t-truncate"
|
|
23
|
+
};
|
|
24
|
+
const _hoisted_9 = { key: 1 };
|
|
25
|
+
const _hoisted_10 = { class: "track-duration w-5r t-right t-grey" };
|
|
26
|
+
const _sfc_main = {
|
|
27
|
+
__name: "TrackListCard",
|
|
28
|
+
props: {
|
|
29
|
+
track: {
|
|
30
|
+
type: Object,
|
|
31
|
+
required: true
|
|
32
|
+
},
|
|
33
|
+
index: {
|
|
34
|
+
type: Number,
|
|
35
|
+
default: 0
|
|
36
|
+
},
|
|
37
|
+
showCover: {
|
|
38
|
+
type: Boolean,
|
|
39
|
+
default: true
|
|
40
|
+
},
|
|
41
|
+
showAlbum: {
|
|
42
|
+
type: Boolean,
|
|
43
|
+
default: true
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
setup(__props) {
|
|
47
|
+
const props = __props;
|
|
48
|
+
const hoveredIndex = ref(-1);
|
|
49
|
+
const isPlaying = (track) => {
|
|
50
|
+
return state.currentTrack && state.currentTrack._id === track._id && state.isPlaying;
|
|
51
|
+
};
|
|
52
|
+
const playTrack = (track, force = false) => {
|
|
53
|
+
if (isPlaying(track) && !force) {
|
|
54
|
+
actions.togglePlay();
|
|
55
|
+
} else {
|
|
56
|
+
actions.playTrack(track);
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
const pauseTrack = () => {
|
|
60
|
+
actions.pause();
|
|
61
|
+
};
|
|
62
|
+
const getArtistName = (track) => {
|
|
63
|
+
if (!track || !track.artist) return "Unknown Artist";
|
|
64
|
+
return typeof track.artist === "object" ? track.artist.name : "Unknown Artist";
|
|
65
|
+
};
|
|
66
|
+
const formatDuration = (duration) => {
|
|
67
|
+
if (!duration) return "--:--";
|
|
68
|
+
const minutes = Math.floor(duration / 60);
|
|
69
|
+
const seconds = Math.floor(duration % 60);
|
|
70
|
+
return `${minutes}:${seconds.toString().padStart(2, "0")}`;
|
|
71
|
+
};
|
|
72
|
+
return (_ctx, _cache) => {
|
|
73
|
+
var _a;
|
|
74
|
+
const _component_router_link = resolveComponent("router-link");
|
|
75
|
+
return openBlock(), createElementBlock("div", {
|
|
76
|
+
class: normalizeClass(["track-item pd-small hover-bg-dark-transp-25 flex-v-center flex cursor-pointer", { "bg-dark-transp-25": isPlaying(__props.track) }]),
|
|
77
|
+
onClick: _cache[4] || (_cache[4] = ($event) => playTrack(__props.track)),
|
|
78
|
+
onDblclick: _cache[5] || (_cache[5] = ($event) => playTrack(__props.track, true)),
|
|
79
|
+
onMouseenter: _cache[6] || (_cache[6] = ($event) => hoveredIndex.value = props.index),
|
|
80
|
+
onMouseleave: _cache[7] || (_cache[7] = ($event) => hoveredIndex.value = -1)
|
|
81
|
+
}, [
|
|
82
|
+
createElementVNode("div", _hoisted_1, [
|
|
83
|
+
!isPlaying(__props.track) && hoveredIndex.value !== props.index ? (openBlock(), createElementBlock("span", _hoisted_2, toDisplayString(props.index + 1), 1)) : !isPlaying(__props.track) && hoveredIndex.value === props.index ? (openBlock(), createBlock(_sfc_main$1, {
|
|
84
|
+
key: 1,
|
|
85
|
+
onClick: _cache[0] || (_cache[0] = withModifiers(($event) => playTrack(__props.track), ["stop"])),
|
|
86
|
+
class: "bg-transparent border-none pd-zero",
|
|
87
|
+
showLoader: false,
|
|
88
|
+
showSucces: false
|
|
89
|
+
}, {
|
|
90
|
+
default: withCtx(() => [
|
|
91
|
+
createVNode(_sfc_main$2, {
|
|
92
|
+
class: "i-small",
|
|
93
|
+
fill: "rgb(var(--white))"
|
|
94
|
+
})
|
|
95
|
+
]),
|
|
96
|
+
_: 1
|
|
97
|
+
})) : (openBlock(), createBlock(_sfc_main$1, {
|
|
98
|
+
key: 2,
|
|
99
|
+
onClick: _cache[1] || (_cache[1] = withModifiers(($event) => pauseTrack(), ["stop"])),
|
|
100
|
+
class: "bg-transparent border-none pd-zero",
|
|
101
|
+
showLoader: false,
|
|
102
|
+
showSucces: false
|
|
103
|
+
}, {
|
|
104
|
+
default: withCtx(() => [
|
|
105
|
+
createVNode(_sfc_main$3, {
|
|
106
|
+
class: "i-small",
|
|
107
|
+
fill: "rgb(var(--main))"
|
|
108
|
+
})
|
|
109
|
+
]),
|
|
110
|
+
_: 1
|
|
111
|
+
}))
|
|
112
|
+
]),
|
|
113
|
+
createElementVNode("div", _hoisted_3, [
|
|
114
|
+
__props.showCover ? (openBlock(), createElementBlock("div", _hoisted_4, [
|
|
115
|
+
createVNode(Media, {
|
|
116
|
+
url: __props.track.coverUrl || __props.track.album && __props.track.album.coverUrl || "/assets/placeholder-track.jpg",
|
|
117
|
+
class: "w-3r h-3r object-fit-cover o-hidden radius-small"
|
|
118
|
+
}, null, 8, ["url"])
|
|
119
|
+
])) : createCommentVNode("", true),
|
|
120
|
+
createElementVNode("div", _hoisted_5, [
|
|
121
|
+
createElementVNode("div", {
|
|
122
|
+
class: normalizeClass(["track-name", { "t-main": isPlaying(__props.track) }])
|
|
123
|
+
}, toDisplayString(__props.track.title), 3),
|
|
124
|
+
createElementVNode("div", _hoisted_6, [
|
|
125
|
+
__props.track.artist && __props.track.artist._id ? (openBlock(), createBlock(_component_router_link, {
|
|
126
|
+
key: 0,
|
|
127
|
+
to: { name: "artist", params: { url: __props.track.artist.url } },
|
|
128
|
+
class: "t-grey hover-",
|
|
129
|
+
onClick: _cache[2] || (_cache[2] = withModifiers(() => {
|
|
130
|
+
}, ["stop"]))
|
|
131
|
+
}, {
|
|
132
|
+
default: withCtx(() => [
|
|
133
|
+
createTextVNode(toDisplayString(getArtistName(__props.track)), 1)
|
|
134
|
+
]),
|
|
135
|
+
_: 1
|
|
136
|
+
}, 8, ["to"])) : (openBlock(), createElementBlock("span", _hoisted_7, toDisplayString(getArtistName(__props.track)), 1))
|
|
137
|
+
])
|
|
138
|
+
])
|
|
139
|
+
]),
|
|
140
|
+
__props.showAlbum ? (openBlock(), createElementBlock("div", _hoisted_8, [
|
|
141
|
+
__props.track.album && __props.track.album._id ? (openBlock(), createBlock(_component_router_link, {
|
|
142
|
+
key: 0,
|
|
143
|
+
to: { name: "album", params: { url: __props.track.album.url } },
|
|
144
|
+
class: "t-grey hover-",
|
|
145
|
+
onClick: _cache[3] || (_cache[3] = withModifiers(() => {
|
|
146
|
+
}, ["stop"]))
|
|
147
|
+
}, {
|
|
148
|
+
default: withCtx(() => [
|
|
149
|
+
createTextVNode(toDisplayString(__props.track.album.title), 1)
|
|
150
|
+
]),
|
|
151
|
+
_: 1
|
|
152
|
+
}, 8, ["to"])) : (openBlock(), createElementBlock("span", _hoisted_9, toDisplayString(((_a = __props.track.album) == null ? void 0 : _a.title) || "Single"), 1))
|
|
153
|
+
])) : createCommentVNode("", true),
|
|
154
|
+
createElementVNode("div", _hoisted_10, toDisplayString(formatDuration(__props.track.duration)), 1)
|
|
155
|
+
], 34);
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
export {
|
|
160
|
+
_sfc_main as default
|
|
161
|
+
};
|
|
162
|
+
//# sourceMappingURL=TrackListCard.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrackListCard.vue.js","sources":["../../../../../../../src/modules/music/components/cards/TrackListCard.vue"],"sourcesContent":["<!-- components/cards/TrackListCard.vue -->\n<template>\n <div \n class=\"track-item pd-small hover-bg-dark-transp-25 flex-v-center flex cursor-pointer\"\n :class=\"{'bg-dark-transp-25': isPlaying(track)}\"\n @click=\"playTrack(track)\"\n @dblclick=\"playTrack(track, true)\"\n @mouseenter=\"hoveredIndex = props.index\"\n @mouseleave=\"hoveredIndex = -1\"\n >\n <div class=\"track-number w-3r t-center pos-relative\">\n <span v-if=\"!isPlaying(track) && hoveredIndex !== props.index\" class=\"t-grey\">{{ props.index + 1 }}</span>\n <Button \n v-else-if=\"!isPlaying(track) && hoveredIndex === props.index\"\n @click.stop=\"playTrack(track)\"\n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPlay class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n <Button \n v-else\n @click.stop=\"pauseTrack()\"\n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\"\n :showSucces=\"false\"\n >\n <IconPause class=\"i-small\" fill=\"rgb(var(--main))\"/>\n </Button>\n </div>\n \n <div class=\"track-title flex-child-1 flex flex-v-center\">\n <div v-if=\"showCover\" class=\"track-cover mn-r-small\">\n <Media \n :url=\"track.coverUrl || (track.album && track.album.coverUrl) || '/assets/placeholder-track.jpg'\" \n class=\"w-3r h-3r object-fit-cover o-hidden radius-small\"\n />\n </div>\n \n <div class=\"track-info\">\n <div class=\"track-name \" :class=\"{'t-main': isPlaying(track)}\">{{ track.title }}</div>\n <div class=\"track-artist t-grey t-small\">\n <router-link \n v-if=\"track.artist && track.artist._id\"\n :to=\"{ name: 'artist', params: { url: track.artist.url } }\"\n class=\"t-grey hover-\"\n @click.stop\n >\n {{ getArtistName(track) }}\n </router-link>\n <span v-else>{{ getArtistName(track) }}</span>\n </div>\n </div>\n </div>\n \n <div v-if=\"showAlbum\" class=\"track-album w-15r mobile:w-0 mobile:hidden t-grey t-truncate\">\n <router-link \n v-if=\"track.album && track.album._id\"\n :to=\"{ name: 'album', params: { url: track.album.url } }\"\n class=\"t-grey hover-\"\n @click.stop\n >\n {{ track.album.title }}\n </router-link>\n <span v-else>{{ track.album?.title || 'Single' }}</span>\n </div>\n \n <div class=\"track-duration w-5r t-right t-grey\">{{ formatDuration(track.duration) }}</div>\n </div>\n</template>\n\n<script setup>\nimport { ref } from 'vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\nimport IconPause from '@martyrs/src/modules/icons/navigation/IconPause.vue';\n\n// Import player store\nimport { state as playerState, actions as playerActions } from '../../store/player.js';\n\n// Props\nconst props = defineProps({\n track: {\n type: Object,\n required: true\n },\n index: {\n type: Number,\n default: 0\n },\n showCover: {\n type: Boolean,\n default: true\n },\n showAlbum: {\n type: Boolean,\n default: true\n }\n});\n\n// State\nconst hoveredIndex = ref(-1);\n\n// Methods\nconst isPlaying = (track) => {\n return playerState.currentTrack && playerState.currentTrack._id === track._id && playerState.isPlaying;\n};\n\nconst playTrack = (track, force = false) => {\n if (isPlaying(track) && !force) {\n playerActions.togglePlay();\n } else {\n playerActions.playTrack(track);\n }\n};\n\nconst pauseTrack = () => {\n playerActions.pause();\n};\n\nconst getArtistName = (track) => {\n if (!track || !track.artist) return 'Unknown Artist';\n return typeof track.artist === 'object' ? track.artist.name : 'Unknown Artist';\n};\n\nconst formatDuration = (duration) => {\n if (!duration) return '--:--';\n \n const minutes = Math.floor(duration / 60);\n const seconds = Math.floor(duration % 60);\n return `${minutes}:${seconds.toString().padStart(2, '0')}`;\n};\n</script>"],"names":["playerState","playerActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmFA,UAAM,QAAQ;AAoBd,UAAM,eAAe,IAAI,EAAE;AAG3B,UAAM,YAAY,CAAC,UAAU;AAC3B,aAAOA,MAAY,gBAAgBA,MAAY,aAAa,QAAQ,MAAM,OAAOA,MAAY;AAAA,IAC/F;AAEA,UAAM,YAAY,CAAC,OAAO,QAAQ,UAAU;AAC1C,UAAI,UAAU,KAAK,KAAK,CAAC,OAAO;AAC9BC,gBAAc,WAAY;AAAA,MAC9B,OAAS;AACLA,gBAAc,UAAU,KAAK;AAAA,MACjC;AAAA,IACA;AAEA,UAAM,aAAa,MAAM;AACvBA,cAAc,MAAO;AAAA,IACvB;AAEA,UAAM,gBAAgB,CAAC,UAAU;AAC/B,UAAI,CAAC,SAAS,CAAC,MAAM,OAAQ,QAAO;AACpC,aAAO,OAAO,MAAM,WAAW,WAAW,MAAM,OAAO,OAAO;AAAA,IAChE;AAEA,UAAM,iBAAiB,CAAC,aAAa;AACnC,UAAI,CAAC,SAAU,QAAO;AAEtB,YAAM,UAAU,KAAK,MAAM,WAAW,EAAE;AACxC,YAAM,UAAU,KAAK,MAAM,WAAW,EAAE;AACxC,aAAO,GAAG,OAAO,IAAI,QAAQ,SAAU,EAAC,SAAS,GAAG,GAAG,CAAC;AAAA,IAC1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const vue = require("vue");
|
|
4
|
+
const vueRouter = require("vue-router");
|
|
5
|
+
const Field = require("../../../../components/Field/Field.vue2.cjs");
|
|
6
|
+
const Block = require("../../../../components/Block/Block.vue.cjs");
|
|
7
|
+
const Button = require("../../../../components/Button/Button.vue.cjs");
|
|
8
|
+
const Select = require("../../../../components/Select/Select.vue.cjs");
|
|
9
|
+
const UploadImage = require("../../../../components/UploadImage/UploadImage.vue.cjs");
|
|
10
|
+
const IconCross = require("../../../icons/navigation/IconCross.vue.cjs");
|
|
11
|
+
const BlockMultiselect = require("../../../globals/views/components/blocks/BlockMultiselect.vue.cjs");
|
|
12
|
+
const albums = require("../../store/albums.cjs");
|
|
13
|
+
const artists = require("../../store/artists.cjs");
|
|
14
|
+
const genres = require("../../store/genres.cjs");
|
|
15
|
+
const globals = require("../../../globals/views/store/globals.cjs");
|
|
16
|
+
const auth = require("../../../auth/views/store/auth.cjs");
|
|
17
|
+
const _hoisted_1 = { class: "pd-medium" };
|
|
18
|
+
const _hoisted_2 = { class: "h2 mn-b-medium" };
|
|
19
|
+
const _hoisted_3 = { class: "bg-light pd-medium radius-medium" };
|
|
20
|
+
const _hoisted_4 = { class: "mn-b-medium" };
|
|
21
|
+
const _hoisted_5 = { class: "flex-nowrap flex-v-center flex gap-thin" };
|
|
22
|
+
const _hoisted_6 = { class: "t-medium" };
|
|
23
|
+
const _hoisted_7 = ["onClick"];
|
|
24
|
+
const _hoisted_8 = { class: "flex-nowrap flex-v-center flex" };
|
|
25
|
+
const _hoisted_9 = { class: "w-100" };
|
|
26
|
+
const _hoisted_10 = { class: "t-medium" };
|
|
27
|
+
const _hoisted_11 = {
|
|
28
|
+
key: 0,
|
|
29
|
+
class: "t-small t-transp"
|
|
30
|
+
};
|
|
31
|
+
const _hoisted_12 = { class: "flex-nowrap flex-v-center flex gap-thin" };
|
|
32
|
+
const _hoisted_13 = { class: "t-medium" };
|
|
33
|
+
const _hoisted_14 = ["onClick"];
|
|
34
|
+
const _hoisted_15 = { class: "flex-nowrap flex-v-center flex" };
|
|
35
|
+
const _hoisted_16 = { class: "w-100" };
|
|
36
|
+
const _hoisted_17 = { class: "t-medium" };
|
|
37
|
+
const _hoisted_18 = {
|
|
38
|
+
key: 0,
|
|
39
|
+
class: "t-small t-transp"
|
|
40
|
+
};
|
|
41
|
+
const _hoisted_19 = { class: "bg-light pd-medium radius-medium" };
|
|
42
|
+
const _hoisted_20 = { class: "flex flex-justify-between" };
|
|
43
|
+
const _sfc_main = {
|
|
44
|
+
__name: "AlbumForm",
|
|
45
|
+
props: {
|
|
46
|
+
editMode: {
|
|
47
|
+
type: Boolean,
|
|
48
|
+
default: false
|
|
49
|
+
},
|
|
50
|
+
url: {
|
|
51
|
+
type: String,
|
|
52
|
+
default: ""
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
setup(__props) {
|
|
56
|
+
const props = __props;
|
|
57
|
+
const router = vueRouter.useRouter();
|
|
58
|
+
vueRouter.useRoute();
|
|
59
|
+
const album = vue.reactive({
|
|
60
|
+
title: "",
|
|
61
|
+
description: "",
|
|
62
|
+
releaseDate: (/* @__PURE__ */ new Date()).toISOString().split("T")[0],
|
|
63
|
+
coverArt: "",
|
|
64
|
+
artists: [],
|
|
65
|
+
type: "album",
|
|
66
|
+
genres: [],
|
|
67
|
+
totalTracks: 0,
|
|
68
|
+
url: "",
|
|
69
|
+
status: "draft"
|
|
70
|
+
});
|
|
71
|
+
const validation = vue.reactive({
|
|
72
|
+
title: false,
|
|
73
|
+
description: false,
|
|
74
|
+
releaseDate: false
|
|
75
|
+
});
|
|
76
|
+
const urlManuallySet = vue.ref(false);
|
|
77
|
+
const generateSlug = (text) => {
|
|
78
|
+
if (!text) return "";
|
|
79
|
+
return text.toLowerCase().replace(/[^a-z0-9\s-]/g, "").replace(/\s+/g, "-").replace(/-+/g, "-").trim("-");
|
|
80
|
+
};
|
|
81
|
+
vue.watch(() => album.title, (newTitle) => {
|
|
82
|
+
if (!urlManuallySet.value && !props.editMode) {
|
|
83
|
+
album.url = generateSlug(newTitle);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
vue.watch(() => album.url, (newUrl, oldUrl) => {
|
|
87
|
+
if (newUrl !== generateSlug(album.title)) {
|
|
88
|
+
urlManuallySet.value = true;
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
const statusOptions = [
|
|
92
|
+
"draft",
|
|
93
|
+
"published",
|
|
94
|
+
"archived"
|
|
95
|
+
];
|
|
96
|
+
const albumTypeOptions = [
|
|
97
|
+
"album",
|
|
98
|
+
"single",
|
|
99
|
+
"EP",
|
|
100
|
+
"compilation"
|
|
101
|
+
];
|
|
102
|
+
const fetchAlbum = async () => {
|
|
103
|
+
if (!props.url) return;
|
|
104
|
+
try {
|
|
105
|
+
const fetchedAlbum = await albums.actions.fetchAlbumByUrl(props.url);
|
|
106
|
+
if (!fetchedAlbum) {
|
|
107
|
+
globals.actions.setError({
|
|
108
|
+
message: "Album not found"
|
|
109
|
+
});
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
Object.assign(album, {
|
|
113
|
+
title: fetchedAlbum.title || "",
|
|
114
|
+
description: fetchedAlbum.description || "",
|
|
115
|
+
releaseDate: fetchedAlbum.releaseDate ? new Date(fetchedAlbum.releaseDate).toISOString().split("T")[0] : "",
|
|
116
|
+
coverArt: fetchedAlbum.coverArt || "",
|
|
117
|
+
artists: fetchedAlbum.artists || [],
|
|
118
|
+
type: fetchedAlbum.type || "album",
|
|
119
|
+
genres: fetchedAlbum.genres || [],
|
|
120
|
+
totalTracks: fetchedAlbum.totalTracks || 0,
|
|
121
|
+
url: fetchedAlbum.url || "",
|
|
122
|
+
status: fetchedAlbum.status || "draft",
|
|
123
|
+
_id: fetchedAlbum._id
|
|
124
|
+
});
|
|
125
|
+
} catch (error) {
|
|
126
|
+
console.error("Error fetching album:", error);
|
|
127
|
+
globals.actions.setError({
|
|
128
|
+
message: "Failed to load album details"
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
const validateForm = () => {
|
|
133
|
+
let isValid = true;
|
|
134
|
+
if (!album.title.trim()) {
|
|
135
|
+
validation.title = {
|
|
136
|
+
message: "Album title is required"
|
|
137
|
+
};
|
|
138
|
+
isValid = false;
|
|
139
|
+
} else {
|
|
140
|
+
validation.title = false;
|
|
141
|
+
}
|
|
142
|
+
if (!album.releaseDate) {
|
|
143
|
+
validation.releaseDate = {
|
|
144
|
+
message: "Release date is required"
|
|
145
|
+
};
|
|
146
|
+
isValid = false;
|
|
147
|
+
} else {
|
|
148
|
+
validation.releaseDate = false;
|
|
149
|
+
}
|
|
150
|
+
if (album.description && album.description.length > 2e3) {
|
|
151
|
+
validation.description = {
|
|
152
|
+
message: "Description is too long (max 2000 characters)"
|
|
153
|
+
};
|
|
154
|
+
isValid = false;
|
|
155
|
+
} else {
|
|
156
|
+
validation.description = false;
|
|
157
|
+
}
|
|
158
|
+
return isValid;
|
|
159
|
+
};
|
|
160
|
+
const submitForm = async () => {
|
|
161
|
+
if (!validateForm()) {
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
try {
|
|
165
|
+
const formData = {
|
|
166
|
+
...album,
|
|
167
|
+
artists: album.artists.map((artist) => artist._id || artist),
|
|
168
|
+
genres: album.genres.map((genre) => genre._id || genre)
|
|
169
|
+
};
|
|
170
|
+
if (!props.editMode) {
|
|
171
|
+
formData.owner = {
|
|
172
|
+
type: "user",
|
|
173
|
+
target: auth.state.user._id
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
let result;
|
|
177
|
+
if (props.editMode) {
|
|
178
|
+
result = await albums.actions.updateAlbum(formData);
|
|
179
|
+
} else {
|
|
180
|
+
result = await albums.actions.createAlbum(formData);
|
|
181
|
+
}
|
|
182
|
+
setTimeout(() => {
|
|
183
|
+
router.push({
|
|
184
|
+
name: "album",
|
|
185
|
+
params: { url: result.url }
|
|
186
|
+
});
|
|
187
|
+
}, 1e3);
|
|
188
|
+
} catch (error) {
|
|
189
|
+
console.error("Error saving album:", error);
|
|
190
|
+
globals.actions.setError({
|
|
191
|
+
message: "Failed to save album"
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
const handleUploadError = (error) => {
|
|
196
|
+
console.error("Upload error:", error);
|
|
197
|
+
globals.actions.setError({
|
|
198
|
+
message: "Error uploading image"
|
|
199
|
+
});
|
|
200
|
+
};
|
|
201
|
+
vue.onMounted(async () => {
|
|
202
|
+
if (props.editMode) {
|
|
203
|
+
await fetchAlbum();
|
|
204
|
+
urlManuallySet.value = true;
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
return (_ctx, _cache) => {
|
|
208
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
|
|
209
|
+
vue.createElementVNode("h2", _hoisted_2, vue.toDisplayString(__props.editMode ? "Edit Album" : "Create Album"), 1),
|
|
210
|
+
vue.createElementVNode("form", {
|
|
211
|
+
onSubmit: vue.withModifiers(submitForm, ["prevent"]),
|
|
212
|
+
class: "cols-1 gap-medium"
|
|
213
|
+
}, [
|
|
214
|
+
vue.createElementVNode("div", _hoisted_3, [
|
|
215
|
+
_cache[11] || (_cache[11] = vue.createElementVNode("h3", { class: "h3 mn-b-medium" }, "Basic Information", -1)),
|
|
216
|
+
vue.createElementVNode("div", _hoisted_4, [
|
|
217
|
+
_cache[10] || (_cache[10] = vue.createElementVNode("p", { class: "p-semi mn-b-small" }, "Album Cover", -1)),
|
|
218
|
+
vue.createVNode(UploadImage.default, {
|
|
219
|
+
photo: album.coverArt,
|
|
220
|
+
"onUpdate:photo": _cache[0] || (_cache[0] = ($event) => album.coverArt = $event),
|
|
221
|
+
uploadPath: "albums/covers",
|
|
222
|
+
class: "w-100 h-15r radius-small o-hidden mn-b-small",
|
|
223
|
+
onError: handleUploadError
|
|
224
|
+
}, null, 8, ["photo"])
|
|
225
|
+
]),
|
|
226
|
+
vue.createVNode(Field.default, {
|
|
227
|
+
field: album.title,
|
|
228
|
+
"onUpdate:field": _cache[1] || (_cache[1] = ($event) => album.title = $event),
|
|
229
|
+
label: "Title",
|
|
230
|
+
placeholder: "Enter album title",
|
|
231
|
+
class: "bg-white radius-small pd-small mn-b-thin",
|
|
232
|
+
validation: validation.title
|
|
233
|
+
}, null, 8, ["field", "validation"]),
|
|
234
|
+
vue.createVNode(Field.default, {
|
|
235
|
+
field: album.url,
|
|
236
|
+
"onUpdate:field": _cache[2] || (_cache[2] = ($event) => album.url = $event),
|
|
237
|
+
label: "URL",
|
|
238
|
+
placeholder: "Leave blank for auto-generation based on the album title",
|
|
239
|
+
class: "bg-white radius-small pd-small mn-b-small"
|
|
240
|
+
}, null, 8, ["field"]),
|
|
241
|
+
vue.createVNode(Field.default, {
|
|
242
|
+
field: album.description,
|
|
243
|
+
"onUpdate:field": _cache[3] || (_cache[3] = ($event) => album.description = $event),
|
|
244
|
+
label: "Description",
|
|
245
|
+
type: "textarea",
|
|
246
|
+
placeholder: "Enter album description",
|
|
247
|
+
class: "bg-white radius-small pd-small mn-b-thin",
|
|
248
|
+
validation: validation.description
|
|
249
|
+
}, null, 8, ["field", "validation"]),
|
|
250
|
+
vue.createVNode(Field.default, {
|
|
251
|
+
field: album.releaseDate,
|
|
252
|
+
"onUpdate:field": _cache[4] || (_cache[4] = ($event) => album.releaseDate = $event),
|
|
253
|
+
label: "Release Date",
|
|
254
|
+
type: "date",
|
|
255
|
+
class: "bg-white radius-small pd-small mn-b-thin",
|
|
256
|
+
validation: validation.releaseDate
|
|
257
|
+
}, null, 8, ["field", "validation"]),
|
|
258
|
+
vue.createVNode(Select.default, {
|
|
259
|
+
select: album.type,
|
|
260
|
+
"onUpdate:select": _cache[5] || (_cache[5] = ($event) => album.type = $event),
|
|
261
|
+
options: albumTypeOptions,
|
|
262
|
+
label: "Album Type",
|
|
263
|
+
class: "bg-white radius-small pd-small mn-b-thin"
|
|
264
|
+
}, null, 8, ["select"])
|
|
265
|
+
]),
|
|
266
|
+
vue.createVNode(Block.default, { title: "Artists" }, {
|
|
267
|
+
default: vue.withCtx(() => [
|
|
268
|
+
vue.createVNode(BlockMultiselect.default, {
|
|
269
|
+
modelValue: album.artists,
|
|
270
|
+
"onUpdate:modelValue": _cache[6] || (_cache[6] = ($event) => album.artists = $event),
|
|
271
|
+
placeholder: "Search artists...",
|
|
272
|
+
multiple: true,
|
|
273
|
+
transform: (item) => ({ _id: item._id, name: item.name }),
|
|
274
|
+
store: {
|
|
275
|
+
read: (options) => artists.actions.fetchArtists(options),
|
|
276
|
+
state: artists.state
|
|
277
|
+
},
|
|
278
|
+
options: {
|
|
279
|
+
rootOnly: false,
|
|
280
|
+
excludeChildren: false,
|
|
281
|
+
limit: 50
|
|
282
|
+
},
|
|
283
|
+
skeleton: {
|
|
284
|
+
hide: false,
|
|
285
|
+
horizontal: true,
|
|
286
|
+
class: "radius-small",
|
|
287
|
+
structure: [{
|
|
288
|
+
block: "text",
|
|
289
|
+
size: "large"
|
|
290
|
+
}]
|
|
291
|
+
},
|
|
292
|
+
states: {
|
|
293
|
+
empty: {
|
|
294
|
+
title: "No artists found",
|
|
295
|
+
description: "Try different search terms or create a new artist",
|
|
296
|
+
class: "radius-small"
|
|
297
|
+
}
|
|
298
|
+
},
|
|
299
|
+
key: "_id",
|
|
300
|
+
label: (item) => item.name,
|
|
301
|
+
classSearch: "bg-white radius-small",
|
|
302
|
+
classSelected: "bg-white pd-small radius-small",
|
|
303
|
+
classDropdown: "bg-white pd-small radius-medium bs-small",
|
|
304
|
+
classItem: "pd-small radius-small hover-bg-light cursor-pointer",
|
|
305
|
+
classFeed: "h-max-30r gap-thin flex-column flex o-scroll"
|
|
306
|
+
}, {
|
|
307
|
+
selected: vue.withCtx(({ item, clear }) => [
|
|
308
|
+
vue.createElementVNode("div", _hoisted_5, [
|
|
309
|
+
vue.createElementVNode("span", _hoisted_6, vue.toDisplayString((item == null ? void 0 : item.name) || item), 1),
|
|
310
|
+
vue.createElementVNode("button", {
|
|
311
|
+
onClick: vue.withModifiers(clear, ["stop"]),
|
|
312
|
+
class: "i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover-scale-1"
|
|
313
|
+
}, [
|
|
314
|
+
vue.createVNode(IconCross.default, { class: "i-micro fill-white" })
|
|
315
|
+
], 8, _hoisted_7)
|
|
316
|
+
])
|
|
317
|
+
]),
|
|
318
|
+
item: vue.withCtx(({ item }) => [
|
|
319
|
+
vue.createElementVNode("div", _hoisted_8, [
|
|
320
|
+
vue.createElementVNode("div", _hoisted_9, [
|
|
321
|
+
vue.createElementVNode("p", _hoisted_10, vue.toDisplayString(item.name), 1),
|
|
322
|
+
item.bio ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_11, vue.toDisplayString(item.bio), 1)) : vue.createCommentVNode("", true)
|
|
323
|
+
])
|
|
324
|
+
])
|
|
325
|
+
]),
|
|
326
|
+
_: 1
|
|
327
|
+
}, 8, ["modelValue", "transform", "store", "label"])
|
|
328
|
+
]),
|
|
329
|
+
_: 1
|
|
330
|
+
}),
|
|
331
|
+
vue.createVNode(Block.default, { title: "Genres" }, {
|
|
332
|
+
default: vue.withCtx(() => [
|
|
333
|
+
vue.createVNode(BlockMultiselect.default, {
|
|
334
|
+
modelValue: album.genres,
|
|
335
|
+
"onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => album.genres = $event),
|
|
336
|
+
placeholder: "Search genres...",
|
|
337
|
+
multiple: true,
|
|
338
|
+
transform: (item) => ({ _id: item._id, name: item.name }),
|
|
339
|
+
store: {
|
|
340
|
+
read: (options) => genres.actions.fetchGenres(options),
|
|
341
|
+
state: genres.state
|
|
342
|
+
},
|
|
343
|
+
options: {
|
|
344
|
+
rootOnly: false,
|
|
345
|
+
excludeChildren: false,
|
|
346
|
+
limit: 50
|
|
347
|
+
},
|
|
348
|
+
skeleton: {
|
|
349
|
+
hide: false,
|
|
350
|
+
horizontal: true,
|
|
351
|
+
class: "radius-small",
|
|
352
|
+
structure: [{
|
|
353
|
+
block: "text",
|
|
354
|
+
size: "large"
|
|
355
|
+
}]
|
|
356
|
+
},
|
|
357
|
+
states: {
|
|
358
|
+
empty: {
|
|
359
|
+
title: "No genres found",
|
|
360
|
+
description: "Try different search terms or create a new genre",
|
|
361
|
+
class: "radius-small"
|
|
362
|
+
}
|
|
363
|
+
},
|
|
364
|
+
key: "_id",
|
|
365
|
+
label: (item) => item.name,
|
|
366
|
+
classSearch: "bg-white radius-small",
|
|
367
|
+
classSelected: "bg-white pd-small radius-small",
|
|
368
|
+
classDropdown: "bg-white pd-small radius-medium bs-small",
|
|
369
|
+
classItem: "pd-small radius-small hover-bg-light cursor-pointer",
|
|
370
|
+
classFeed: "h-max-30r gap-thin flex-column flex o-scroll"
|
|
371
|
+
}, {
|
|
372
|
+
selected: vue.withCtx(({ item, clear }) => [
|
|
373
|
+
vue.createElementVNode("div", _hoisted_12, [
|
|
374
|
+
vue.createElementVNode("span", _hoisted_13, vue.toDisplayString((item == null ? void 0 : item.name) || item), 1),
|
|
375
|
+
vue.createElementVNode("button", {
|
|
376
|
+
onClick: vue.withModifiers(clear, ["stop"]),
|
|
377
|
+
class: "i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover-scale-1"
|
|
378
|
+
}, [
|
|
379
|
+
vue.createVNode(IconCross.default, { class: "i-micro fill-white" })
|
|
380
|
+
], 8, _hoisted_14)
|
|
381
|
+
])
|
|
382
|
+
]),
|
|
383
|
+
item: vue.withCtx(({ item }) => [
|
|
384
|
+
vue.createElementVNode("div", _hoisted_15, [
|
|
385
|
+
vue.createElementVNode("div", _hoisted_16, [
|
|
386
|
+
vue.createElementVNode("p", _hoisted_17, vue.toDisplayString(item.name), 1),
|
|
387
|
+
item.description ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_18, vue.toDisplayString(item.description), 1)) : vue.createCommentVNode("", true)
|
|
388
|
+
])
|
|
389
|
+
])
|
|
390
|
+
]),
|
|
391
|
+
_: 1
|
|
392
|
+
}, 8, ["modelValue", "transform", "store", "label"])
|
|
393
|
+
]),
|
|
394
|
+
_: 1
|
|
395
|
+
}),
|
|
396
|
+
vue.createElementVNode("div", _hoisted_19, [
|
|
397
|
+
_cache[12] || (_cache[12] = vue.createElementVNode("h3", { class: "h3 mn-b-medium" }, "Publishing Status", -1)),
|
|
398
|
+
vue.createVNode(Select.default, {
|
|
399
|
+
select: album.status,
|
|
400
|
+
"onUpdate:select": _cache[8] || (_cache[8] = ($event) => album.status = $event),
|
|
401
|
+
options: statusOptions,
|
|
402
|
+
label: "Status",
|
|
403
|
+
class: "bg-white radius-small pd-small mn-b-thin"
|
|
404
|
+
}, null, 8, ["select"])
|
|
405
|
+
]),
|
|
406
|
+
vue.createElementVNode("div", _hoisted_20, [
|
|
407
|
+
vue.createVNode(Button.default, {
|
|
408
|
+
onClick: _cache[9] || (_cache[9] = ($event) => _ctx.$router.go(-1)),
|
|
409
|
+
class: "bg-grey-nano t-black",
|
|
410
|
+
showSucces: false,
|
|
411
|
+
showLoader: false
|
|
412
|
+
}, {
|
|
413
|
+
default: vue.withCtx(() => _cache[13] || (_cache[13] = [
|
|
414
|
+
vue.createTextVNode(" Cancel ")
|
|
415
|
+
])),
|
|
416
|
+
_: 1
|
|
417
|
+
}),
|
|
418
|
+
vue.createVNode(Button.default, {
|
|
419
|
+
submit: submitForm,
|
|
420
|
+
class: "bg-main t-black",
|
|
421
|
+
text: {
|
|
422
|
+
success: __props.editMode ? "Updated!" : "Created!"
|
|
423
|
+
}
|
|
424
|
+
}, {
|
|
425
|
+
default: vue.withCtx(() => [
|
|
426
|
+
vue.createTextVNode(vue.toDisplayString(__props.editMode ? "Update Album" : "Create Album"), 1)
|
|
427
|
+
]),
|
|
428
|
+
_: 1
|
|
429
|
+
}, 8, ["text"])
|
|
430
|
+
])
|
|
431
|
+
], 32)
|
|
432
|
+
]);
|
|
433
|
+
};
|
|
434
|
+
}
|
|
435
|
+
};
|
|
436
|
+
exports.default = _sfc_main;
|
|
437
|
+
//# sourceMappingURL=AlbumForm.vue.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AlbumForm.vue.cjs","sources":["../../../../../../../src/modules/music/components/forms/AlbumForm.vue"],"sourcesContent":["<template>\n <div class=\"pd-medium\">\n <h2 class=\"h2 mn-b-medium\">{{ editMode ? 'Edit Album' : 'Create Album' }}</h2>\n \n <form @submit.prevent=\"submitForm\" class=\"cols-1 gap-medium\">\n <!-- Basic Info Section -->\n <div class=\"bg-light pd-medium radius-medium\">\n <h3 class=\"h3 mn-b-medium\">Basic Information</h3>\n \n <!-- Album Cover -->\n <div class=\"mn-b-medium\">\n <p class=\"p-semi mn-b-small\">Album Cover</p>\n <UploadImage\n v-model:photo=\"album.coverArt\"\n uploadPath=\"albums/covers\"\n class=\"w-100 h-15r radius-small o-hidden mn-b-small\"\n @error=\"handleUploadError\"\n />\n </div>\n \n <!-- Title -->\n <Field\n v-model:field=\"album.title\"\n label=\"Title\"\n placeholder=\"Enter album title\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n :validation=\"validation.title\"\n />\n \n <!-- URL -->\n <Field\n v-model:field=\"album.url\"\n label=\"URL\"\n placeholder=\"Leave blank for auto-generation based on the album title\"\n class=\"bg-white radius-small pd-small mn-b-small\"\n />\n \n <!-- Description -->\n <Field\n v-model:field=\"album.description\"\n label=\"Description\"\n type=\"textarea\"\n placeholder=\"Enter album description\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n :validation=\"validation.description\"\n />\n \n <!-- Release Date -->\n <Field\n v-model:field=\"album.releaseDate\"\n label=\"Release Date\"\n type=\"date\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n :validation=\"validation.releaseDate\"\n />\n \n <!-- Album Type -->\n <Select\n v-model:select=\"album.type\"\n :options=\"albumTypeOptions\"\n label=\"Album Type\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n />\n </div>\n \n <!-- Artists Section -->\n <Block title=\"Artists\">\n <BlockMultiselect\n v-model=\"album.artists\"\n placeholder=\"Search artists...\"\n :multiple=\"true\"\n :transform=\"(item) => ({ _id: item._id, name: item.name })\"\n :store=\"{\n read: (options) => artistsStore.actions.fetchArtists(options),\n state: artistsStore.state\n }\"\n :options=\"{\n rootOnly: false,\n excludeChildren: false,\n limit: 50\n }\"\n :skeleton=\"{\n hide: false,\n horizontal: true,\n class: 'radius-small',\n structure: [{ \n block: 'text', size: 'large'\n }]\n }\"\n :states=\"{\n empty: {\n title: 'No artists found',\n description: 'Try different search terms or create a new artist',\n class: 'radius-small'\n }\n }\"\n key=\"_id\"\n :label=\"item => item.name\"\n classSearch=\"bg-white radius-small\"\n classSelected=\"bg-white pd-small radius-small\"\n classDropdown=\"bg-white pd-small radius-medium bs-small\"\n classItem=\"pd-small radius-small hover-bg-light cursor-pointer\"\n classFeed=\"h-max-30r gap-thin flex-column flex o-scroll\"\n >\n <!-- Слот для выбранных артистов -->\n <template #selected=\"{ item, clear }\">\n <div class=\"flex-nowrap flex-v-center flex gap-thin\">\n <span class=\"t-medium\">{{ item?.name || item }}</span>\n <button \n @click.stop=\"clear\"\n class=\"i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover-scale-1\"\n >\n <IconCross class=\"i-micro fill-white\" />\n </button>\n </div>\n </template>\n \n <!-- Слот для элементов в списке -->\n <template #item=\"{ item }\">\n <div class=\"flex-nowrap flex-v-center flex\">\n <div class=\"w-100\">\n <p class=\"t-medium\">{{ item.name }}</p>\n <p v-if=\"item.bio\" class=\"t-small t-transp\">{{ item.bio }}</p>\n </div>\n </div>\n </template>\n </BlockMultiselect>\n </Block>\n \n <!-- Genres Section -->\n <Block title=\"Genres\">\n <BlockMultiselect\n v-model=\"album.genres\"\n placeholder=\"Search genres...\"\n :multiple=\"true\"\n :transform=\"(item) => ({ _id: item._id, name: item.name })\"\n :store=\"{\n read: (options) => genresStore.actions.fetchGenres(options),\n state: genresStore.state\n }\"\n :options=\"{\n rootOnly: false,\n excludeChildren: false,\n limit: 50\n }\"\n :skeleton=\"{\n hide: false,\n horizontal: true,\n class: 'radius-small',\n structure: [{ \n block: 'text', size: 'large'\n }]\n }\"\n :states=\"{\n empty: {\n title: 'No genres found',\n description: 'Try different search terms or create a new genre',\n class: 'radius-small'\n }\n }\"\n key=\"_id\"\n :label=\"item => item.name\"\n classSearch=\"bg-white radius-small\"\n classSelected=\"bg-white pd-small radius-small\"\n classDropdown=\"bg-white pd-small radius-medium bs-small\"\n classItem=\"pd-small radius-small hover-bg-light cursor-pointer\"\n classFeed=\"h-max-30r gap-thin flex-column flex o-scroll\"\n >\n <!-- Слот для выбранных жанров -->\n <template #selected=\"{ item, clear }\">\n <div class=\"flex-nowrap flex-v-center flex gap-thin\">\n <span class=\"t-medium\">{{ item?.name || item }}</span>\n <button \n @click.stop=\"clear\"\n class=\"i-small pd-micro bg-red radius-extra flex-center flex aspect-1x1 hover-scale-1\"\n >\n <IconCross class=\"i-micro fill-white\" />\n </button>\n </div>\n </template>\n \n <!-- Слот для элементов в списке -->\n <template #item=\"{ item }\">\n <div class=\"flex-nowrap flex-v-center flex\">\n <div class=\"w-100\">\n <p class=\"t-medium\">{{ item.name }}</p>\n <p v-if=\"item.description\" class=\"t-small t-transp\">{{ item.description }}</p>\n </div>\n </div>\n </template>\n </BlockMultiselect>\n </Block>\n \n <!-- Status Section -->\n <div class=\"bg-light pd-medium radius-medium\">\n <h3 class=\"h3 mn-b-medium\">Publishing Status</h3>\n \n <Select\n v-model:select=\"album.status\"\n :options=\"statusOptions\"\n label=\"Status\"\n class=\"bg-white radius-small pd-small mn-b-thin\"\n />\n </div>\n \n <!-- Submit Button -->\n <div class=\"flex flex-justify-between\">\n <Button\n @click=\"$router.go(-1)\"\n class=\"bg-grey-nano t-black\"\n :showSucces=\"false\"\n :showLoader=\"false\"\n >\n Cancel\n </Button>\n \n <Button\n :submit=\"submitForm\"\n class=\"bg-main t-black\"\n :text=\"{\n success: editMode ? 'Updated!' : 'Created!'\n }\"\n >\n {{ editMode ? 'Update Album' : 'Create Album' }}\n </Button>\n </div>\n </form>\n </div>\n</template>\n\n<script setup>\nimport { ref, reactive, onMounted, watch } from 'vue';\nimport { useRouter, useRoute } from 'vue-router';\n\n// Import Martyrs components\nimport Field from '@martyrs/src/components/Field/Field.vue';\nimport Block from '@martyrs/src/components/Block/Block.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Select from '@martyrs/src/components/Select/Select.vue';\nimport UploadImage from '@martyrs/src/components/UploadImage/UploadImage.vue';\nimport IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';\n\nimport BlockMultiselect from '@martyrs/src/modules/globals/views/components/blocks/BlockMultiselect.vue';\n\n// Import stores\nimport * as albumsStore from '../../store/albums';\nimport * as artistsStore from '../../store/artists';\nimport * as genresStore from '../../store/genres';\nimport * as globals from '@martyrs/src/modules/globals/views/store/globals.js';\nimport * as auth from '@martyrs/src/modules/auth/views/store/auth.js';\n\n// Props\nconst props = defineProps({\n editMode: {\n type: Boolean,\n default: false\n },\n url: {\n type: String,\n default: ''\n }\n});\n\n// Router and route\nconst router = useRouter();\nconst route = useRoute();\n\n// State\nconst album = reactive({\n title: '',\n description: '',\n releaseDate: new Date().toISOString().split('T')[0],\n coverArt: '',\n artists: [],\n type: 'album',\n genres: [],\n totalTracks: 0,\n url: '',\n status: 'draft'\n});\n\nconst validation = reactive({\n title: false,\n description: false,\n releaseDate: false\n});\n\n// Track if URL was manually entered\nconst urlManuallySet = ref(false);\n\n// Function to generate URL-friendly slug from text\nconst generateSlug = (text) => {\n if (!text) return '';\n return text\n .toLowerCase()\n .replace(/[^a-z0-9\\s-]/g, '') // Remove special characters\n .replace(/\\s+/g, '-') // Replace spaces with hyphens\n .replace(/-+/g, '-') // Replace multiple hyphens with single\n .trim('-'); // Remove leading/trailing hyphens\n};\n\n// Watch for changes in album title to auto-generate URL\nwatch(() => album.title, (newTitle) => {\n // Only auto-generate if URL hasn't been manually set and we're not in edit mode\n if (!urlManuallySet.value && !props.editMode) {\n album.url = generateSlug(newTitle);\n }\n});\n\n// Watch for manual changes to URL field\nwatch(() => album.url, (newUrl, oldUrl) => {\n // If user manually changes URL, mark as manually set\n if (newUrl !== generateSlug(album.title)) {\n urlManuallySet.value = true;\n }\n});\n\n// Options\nconst statusOptions = [\n 'draft',\n 'published',\n 'archived'\n];\n\nconst albumTypeOptions = [\n 'album',\n 'single',\n 'EP',\n 'compilation'\n];\n\nconst fetchAlbum = async () => {\n if (!props.url) return;\n \n try {\n const fetchedAlbum = await albumsStore.actions.fetchAlbumByUrl(props.url);\n \n if (!fetchedAlbum) {\n globals.actions.setError({\n message: 'Album not found'\n });\n return;\n }\n \n // Update local album data\n Object.assign(album, {\n title: fetchedAlbum.title || '',\n description: fetchedAlbum.description || '',\n releaseDate: fetchedAlbum.releaseDate ? new Date(fetchedAlbum.releaseDate).toISOString().split('T')[0] : '',\n coverArt: fetchedAlbum.coverArt || '',\n artists: fetchedAlbum.artists || [],\n type: fetchedAlbum.type || 'album',\n genres: fetchedAlbum.genres || [],\n totalTracks: fetchedAlbum.totalTracks || 0,\n url: fetchedAlbum.url || '',\n status: fetchedAlbum.status || 'draft',\n _id: fetchedAlbum._id\n });\n \n } catch (error) {\n console.error('Error fetching album:', error);\n globals.actions.setError({\n message: 'Failed to load album details'\n });\n }\n};\n\nconst validateForm = () => {\n let isValid = true;\n \n // Validate title\n if (!album.title.trim()) {\n validation.title = {\n message: 'Album title is required'\n };\n isValid = false;\n } else {\n validation.title = false;\n }\n \n // Validate release date\n if (!album.releaseDate) {\n validation.releaseDate = {\n message: 'Release date is required'\n };\n isValid = false;\n } else {\n validation.releaseDate = false;\n }\n \n // Validate description\n if (album.description && album.description.length > 2000) {\n validation.description = {\n message: 'Description is too long (max 2000 characters)'\n };\n isValid = false;\n } else {\n validation.description = false;\n }\n \n return isValid;\n};\n\nconst submitForm = async () => {\n if (!validateForm()) {\n return;\n }\n \n try {\n // Prepare data for submission\n const formData = {\n ...album,\n artists: album.artists.map(artist => artist._id || artist),\n genres: album.genres.map(genre => genre._id || genre)\n };\n \n // Add ownership data if creating new album\n if (!props.editMode) {\n formData.owner = {\n type: 'user',\n target: auth.state.user._id\n };\n }\n \n let result;\n if (props.editMode) {\n result = await albumsStore.actions.updateAlbum(formData);\n } else {\n result = await albumsStore.actions.createAlbum(formData);\n }\n \n // Navigate to album detail page\n setTimeout(() => {\n router.push({\n name: 'album',\n params: { url: result.url }\n });\n }, 1000);\n \n } catch (error) {\n console.error('Error saving album:', error);\n globals.actions.setError({\n message: 'Failed to save album'\n });\n }\n};\n\nconst handleUploadError = (error) => {\n console.error('Upload error:', error);\n globals.actions.setError({\n message: 'Error uploading image'\n });\n};\n\n// Lifecycle hooks\nonMounted(async () => {\n if (props.editMode) {\n await fetchAlbum();\n // Mark URL as manually set in edit mode to prevent auto-generation\n urlManuallySet.value = true;\n }\n});\n</script>"],"names":["useRouter","useRoute","reactive","ref","watch","albumsStore.actions","globals.actions","auth.state","onMounted"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4PA,UAAM,QAAQ;AAYd,UAAM,SAASA,UAAAA,UAAW;AACZC,cAAQ,SAAA;AAGtB,UAAM,QAAQC,IAAAA,SAAS;AAAA,MACrB,OAAO;AAAA,MACP,aAAa;AAAA,MACb,cAAa,oBAAI,QAAO,YAAa,EAAC,MAAM,GAAG,EAAE,CAAC;AAAA,MAClD,UAAU;AAAA,MACV,SAAS,CAAE;AAAA,MACX,MAAM;AAAA,MACN,QAAQ,CAAE;AAAA,MACV,aAAa;AAAA,MACb,KAAK;AAAA,MACL,QAAQ;AAAA,IACV,CAAC;AAED,UAAM,aAAaA,IAAAA,SAAS;AAAA,MAC1B,OAAO;AAAA,MACP,aAAa;AAAA,MACb,aAAa;AAAA,IACf,CAAC;AAGD,UAAM,iBAAiBC,IAAG,IAAC,KAAK;AAGhC,UAAM,eAAe,CAAC,SAAS;AAC7B,UAAI,CAAC,KAAM,QAAO;AAClB,aAAO,KACJ,YAAW,EACX,QAAQ,iBAAiB,EAAE,EAC3B,QAAQ,QAAQ,GAAG,EACnB,QAAQ,OAAO,GAAG,EAClB,KAAK,GAAG;AAAA,IACb;AAGAC,QAAK,MAAC,MAAM,MAAM,OAAO,CAAC,aAAa;AAErC,UAAI,CAAC,eAAe,SAAS,CAAC,MAAM,UAAU;AAC5C,cAAM,MAAM,aAAa,QAAQ;AAAA,MACrC;AAAA,IACA,CAAC;AAGDA,QAAK,MAAC,MAAM,MAAM,KAAK,CAAC,QAAQ,WAAW;AAEzC,UAAI,WAAW,aAAa,MAAM,KAAK,GAAG;AACxC,uBAAe,QAAQ;AAAA,MAC3B;AAAA,IACA,CAAC;AAGD,UAAM,gBAAgB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,mBAAmB;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,UAAM,aAAa,YAAY;AAC7B,UAAI,CAAC,MAAM,IAAK;AAEhB,UAAI;AACF,cAAM,eAAe,MAAMC,OAAAA,QAAoB,gBAAgB,MAAM,GAAG;AAExE,YAAI,CAAC,cAAc;AACjBC,kBAAAA,QAAgB,SAAS;AAAA,YACvB,SAAS;AAAA,UACjB,CAAO;AACD;AAAA,QACN;AAGI,eAAO,OAAO,OAAO;AAAA,UACnB,OAAO,aAAa,SAAS;AAAA,UAC7B,aAAa,aAAa,eAAe;AAAA,UACzC,aAAa,aAAa,cAAc,IAAI,KAAK,aAAa,WAAW,EAAE,YAAa,EAAC,MAAM,GAAG,EAAE,CAAC,IAAI;AAAA,UACzG,UAAU,aAAa,YAAY;AAAA,UACnC,SAAS,aAAa,WAAW,CAAE;AAAA,UACnC,MAAM,aAAa,QAAQ;AAAA,UAC3B,QAAQ,aAAa,UAAU,CAAE;AAAA,UACjC,aAAa,aAAa,eAAe;AAAA,UACzC,KAAK,aAAa,OAAO;AAAA,UACzB,QAAQ,aAAa,UAAU;AAAA,UAC/B,KAAK,aAAa;AAAA,QACxB,CAAK;AAAA,MAEF,SAAQ,OAAO;AACd,gBAAQ,MAAM,yBAAyB,KAAK;AAC5CA,gBAAAA,QAAgB,SAAS;AAAA,UACvB,SAAS;AAAA,QACf,CAAK;AAAA,MACL;AAAA,IACA;AAEA,UAAM,eAAe,MAAM;AACzB,UAAI,UAAU;AAGd,UAAI,CAAC,MAAM,MAAM,QAAQ;AACvB,mBAAW,QAAQ;AAAA,UACjB,SAAS;AAAA,QACV;AACD,kBAAU;AAAA,MACd,OAAS;AACL,mBAAW,QAAQ;AAAA,MACvB;AAGE,UAAI,CAAC,MAAM,aAAa;AACtB,mBAAW,cAAc;AAAA,UACvB,SAAS;AAAA,QACV;AACD,kBAAU;AAAA,MACd,OAAS;AACL,mBAAW,cAAc;AAAA,MAC7B;AAGE,UAAI,MAAM,eAAe,MAAM,YAAY,SAAS,KAAM;AACxD,mBAAW,cAAc;AAAA,UACvB,SAAS;AAAA,QACV;AACD,kBAAU;AAAA,MACd,OAAS;AACL,mBAAW,cAAc;AAAA,MAC7B;AAEE,aAAO;AAAA,IACT;AAEA,UAAM,aAAa,YAAY;AAC7B,UAAI,CAAC,aAAY,GAAI;AACnB;AAAA,MACJ;AAEE,UAAI;AAEF,cAAM,WAAW;AAAA,UACf,GAAG;AAAA,UACH,SAAS,MAAM,QAAQ,IAAI,YAAU,OAAO,OAAO,MAAM;AAAA,UACzD,QAAQ,MAAM,OAAO,IAAI,WAAS,MAAM,OAAO,KAAK;AAAA,QACrD;AAGD,YAAI,CAAC,MAAM,UAAU;AACnB,mBAAS,QAAQ;AAAA,YACf,MAAM;AAAA,YACN,QAAQC,KAAU,MAAC,KAAK;AAAA,UACzB;AAAA,QACP;AAEI,YAAI;AACJ,YAAI,MAAM,UAAU;AAClB,mBAAS,MAAMF,OAAAA,QAAoB,YAAY,QAAQ;AAAA,QAC7D,OAAW;AACL,mBAAS,MAAMA,OAAAA,QAAoB,YAAY,QAAQ;AAAA,QAC7D;AAGI,mBAAW,MAAM;AACf,iBAAO,KAAK;AAAA,YACV,MAAM;AAAA,YACN,QAAQ,EAAE,KAAK,OAAO,IAAG;AAAA,UACjC,CAAO;AAAA,QACF,GAAE,GAAI;AAAA,MAER,SAAQ,OAAO;AACd,gBAAQ,MAAM,uBAAuB,KAAK;AAC1CC,gBAAAA,QAAgB,SAAS;AAAA,UACvB,SAAS;AAAA,QACf,CAAK;AAAA,MACL;AAAA,IACA;AAEA,UAAM,oBAAoB,CAAC,UAAU;AACnC,cAAQ,MAAM,iBAAiB,KAAK;AACpCA,cAAAA,QAAgB,SAAS;AAAA,QACvB,SAAS;AAAA,MACb,CAAG;AAAA,IACH;AAGAE,QAAAA,UAAU,YAAY;AACpB,UAAI,MAAM,UAAU;AAClB,cAAM,WAAY;AAElB,uBAAe,QAAQ;AAAA,MAC3B;AAAA,IACA,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|