@ozdao/martyrs 0.2.484 → 0.2.486
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-2NvSR0vE.js → Media-CXQSPHt2.js} +1 -1
- package/dist/{Media-EYG9WPI4.cjs → Media-DhpD64nT.cjs} +1 -1
- 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/auth.server.cjs +2 -23
- package/dist/auth.server.js +1 -22
- package/dist/globals.crud-BQG1Lm0A.js +90 -0
- package/dist/globals.crud-Dv7UXbRM.cjs +89 -0
- package/dist/globals.server.cjs +3 -322
- package/dist/globals.server.js +1 -303
- package/dist/globals.websocket-DzvdIBf6.js +306 -0
- package/dist/globals.websocket-k6_B1T7k.cjs +322 -0
- package/dist/{main-BT1yoKH2.js → main-Cfh5138F.js} +2102 -1993
- package/dist/main-DKJqboZy.cjs +11 -0
- package/dist/martyrs/src/components/Button/{Button.vue2.cjs → Button.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Button/{Button.vue2.js.map → Button.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Button/{Button.vue2.js → Button.vue.js} +2 -2
- package/dist/martyrs/src/components/Button/Button.vue.js.map +1 -0
- package/dist/martyrs/src/components/{DatePicker → Calendar}/Calendar.vue.cjs +1 -1
- package/dist/martyrs/src/components/Calendar/Calendar.vue.cjs.map +1 -0
- package/dist/martyrs/src/components/{DatePicker → Calendar}/Calendar.vue.js +1 -1
- package/dist/martyrs/src/components/Calendar/Calendar.vue.js.map +1 -0
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.cjs → Dropdown.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.js.map → Dropdown.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue2.js → Dropdown.vue.js} +2 -2
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +1 -0
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs +2 -2
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +2 -2
- package/dist/martyrs/src/components/Feed/Feed.vue.js.map +1 -1
- package/dist/martyrs/src/components/Field/Field.vue.cjs +13 -7
- package/dist/martyrs/src/components/Field/Field.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Field/Field.vue.js +14 -8
- package/dist/martyrs/src/components/Field/Field.vue.js.map +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/Popup/{Popup.vue2.cjs → Popup.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Popup/{Popup.vue2.js.map → Popup.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Popup/{Popup.vue2.js → Popup.vue.js} +2 -2
- package/dist/martyrs/src/components/Popup/Popup.vue.js.map +1 -0
- package/dist/martyrs/src/modules/auth/auth.client.cjs +3 -0
- package/dist/martyrs/src/modules/auth/auth.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/auth.client.js +3 -0
- package/dist/martyrs/src/modules/auth/auth.client.js.map +1 -1
- package/dist/martyrs/src/modules/auth/locales/en.cjs +79 -0
- package/dist/martyrs/src/modules/auth/locales/en.cjs.map +1 -0
- package/dist/martyrs/src/modules/auth/locales/en.js +79 -0
- package/dist/martyrs/src/modules/auth/locales/en.js.map +1 -0
- package/dist/martyrs/src/modules/auth/locales/index.cjs +10 -0
- package/dist/martyrs/src/modules/auth/locales/index.cjs.map +1 -0
- package/dist/martyrs/src/modules/auth/locales/index.js +10 -0
- package/dist/martyrs/src/modules/auth/locales/index.js.map +1 -0
- package/dist/martyrs/src/modules/auth/locales/ru.cjs +79 -0
- package/dist/martyrs/src/modules/auth/locales/ru.cjs.map +1 -0
- package/dist/martyrs/src/modules/auth/locales/ru.js +79 -0
- package/dist/martyrs/src/modules/auth/locales/ru.js.map +1 -0
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs +0 -9
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js +2 -11
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.cjs +4 -6
- 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 +4 -6
- 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 +7 -9
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +7 -9
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js.map +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/ProfileEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditAccount.vue.js +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 +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs +11 -13
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +11 -13
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +12 -14
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +12 -14
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +11 -13
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +11 -13
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js.map +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/auth/views/components/sections/SliderFeatures.vue.cjs +5 -47
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js +5 -47
- package/dist/martyrs/src/modules/auth/views/components/sections/SliderFeatures.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +2 -2
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +2 -2
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +3 -3
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +3 -3
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs +2 -2
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.cjs +2 -2
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Events.vue.js +1 -1
- package/dist/martyrs/src/modules/gallery/components/pages/Gallery.vue.cjs +1 -1
- package/dist/martyrs/src/modules/gallery/components/pages/Gallery.vue.js +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +2 -2
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/globals.client.cjs +1 -0
- package/dist/martyrs/src/modules/globals/globals.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/globals.client.js +1 -0
- package/dist/martyrs/src/modules/globals/globals.client.js.map +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/AlertDialog.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/AlertDialog.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupAuth.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs +3 -3
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js +3 -3
- package/dist/martyrs/src/modules/globals/views/components/blocks/PopupDateSelector.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +2 -2
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +2 -2
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Header.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/NavigationBar.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/Filters.vue2.js +1 -1
- package/dist/martyrs/src/modules/globals/views/utils/axios-instance.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/utils/axios-instance.js.map +1 -1
- package/dist/martyrs/src/modules/icons/actions/IconShow.vue.cjs +49 -0
- package/dist/martyrs/src/modules/icons/actions/IconShow.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/icons/actions/IconShow.vue.js +49 -0
- package/dist/martyrs/src/modules/icons/actions/IconShow.vue.js.map +1 -0
- package/dist/martyrs/src/modules/icons/navigation/IconHeart.vue.cjs +34 -0
- package/dist/martyrs/src/modules/icons/navigation/IconHeart.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/icons/navigation/IconHeart.vue.js +34 -0
- package/dist/martyrs/src/modules/icons/navigation/IconHeart.vue.js.map +1 -0
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs +115 -122
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js +163 -170
- package/dist/martyrs/src/modules/icons/pages/IconsPage.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs +87 -0
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +87 -0
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.cjs +83 -0
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js +83 -0
- package/dist/martyrs/src/modules/music/components/cards/ArtistCard.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs +83 -0
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +83 -0
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.cjs +68 -0
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.js +68 -0
- package/dist/martyrs/src/modules/music/components/cards/TrackCard.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs +174 -0
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +174 -0
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +80 -0
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +80 -0
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/forms/UploadForm.vue.cjs +328 -0
- package/dist/martyrs/src/modules/music/components/forms/UploadForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/forms/UploadForm.vue.js +328 -0
- package/dist/martyrs/src/modules/music/components/forms/UploadForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs +115 -0
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js +115 -0
- package/dist/martyrs/src/modules/music/components/layouts/MusicLayout.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/lists/AlbumList.vue.cjs +44 -0
- package/dist/martyrs/src/modules/music/components/lists/AlbumList.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/lists/AlbumList.vue.js +44 -0
- package/dist/martyrs/src/modules/music/components/lists/AlbumList.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/lists/ArtistList.vue.cjs +305 -0
- package/dist/martyrs/src/modules/music/components/lists/ArtistList.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/lists/ArtistList.vue.js +305 -0
- package/dist/martyrs/src/modules/music/components/lists/ArtistList.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/lists/PlaylistList.vue.cjs +44 -0
- package/dist/martyrs/src/modules/music/components/lists/PlaylistList.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/lists/PlaylistList.vue.js +44 -0
- package/dist/martyrs/src/modules/music/components/lists/PlaylistList.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/lists/TrackList.vue.cjs +199 -0
- package/dist/martyrs/src/modules/music/components/lists/TrackList.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/lists/TrackList.vue.js +199 -0
- package/dist/martyrs/src/modules/music/components/lists/TrackList.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/AlbumDetail.vue.cjs +290 -0
- package/dist/martyrs/src/modules/music/components/pages/AlbumDetail.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/AlbumDetail.vue.js +290 -0
- package/dist/martyrs/src/modules/music/components/pages/AlbumDetail.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistDetail.vue.cjs +467 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistDetail.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistDetail.vue.js +467 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistDetail.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistForm.vue.cjs +382 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistForm.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistForm.vue.js +382 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistForm.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistManager.vue.cjs +303 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistManager.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistManager.vue.js +303 -0
- package/dist/martyrs/src/modules/music/components/pages/ArtistManager.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.cjs +221 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js +221 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +200 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +200 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicUpload.vue.cjs +50 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicUpload.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicUpload.vue.js +50 -0
- package/dist/martyrs/src/modules/music/components/pages/MusicUpload.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/PlaylistDetail.vue.cjs +556 -0
- package/dist/martyrs/src/modules/music/components/pages/PlaylistDetail.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/PlaylistDetail.vue.js +556 -0
- package/dist/martyrs/src/modules/music/components/pages/PlaylistDetail.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +449 -0
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +449 -0
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/TrackDetail.vue.cjs +87 -0
- package/dist/martyrs/src/modules/music/components/pages/TrackDetail.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/pages/TrackDetail.vue.js +87 -0
- package/dist/martyrs/src/modules/music/components/pages/TrackDetail.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs +227 -0
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +227 -0
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.cjs +85 -0
- package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.js +85 -0
- package/dist/martyrs/src/modules/music/components/player/TrackProgress.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.cjs +71 -0
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +71 -0
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/music.client.cjs +137 -0
- package/dist/martyrs/src/modules/music/music.client.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/music.client.js +137 -0
- package/dist/martyrs/src/modules/music/music.client.js.map +1 -0
- package/dist/martyrs/src/modules/music/router/music.cjs +99 -0
- package/dist/martyrs/src/modules/music/router/music.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/router/music.js +99 -0
- package/dist/martyrs/src/modules/music/router/music.js.map +1 -0
- package/dist/martyrs/src/modules/music/store/albums.cjs +167 -0
- package/dist/martyrs/src/modules/music/store/albums.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/store/albums.js +167 -0
- package/dist/martyrs/src/modules/music/store/albums.js.map +1 -0
- package/dist/martyrs/src/modules/music/store/artists.cjs +154 -0
- package/dist/martyrs/src/modules/music/store/artists.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/store/artists.js +154 -0
- package/dist/martyrs/src/modules/music/store/artists.js.map +1 -0
- package/dist/martyrs/src/modules/music/store/player.cjs +297 -0
- package/dist/martyrs/src/modules/music/store/player.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/store/player.js +297 -0
- package/dist/martyrs/src/modules/music/store/player.js.map +1 -0
- package/dist/martyrs/src/modules/music/store/playlists.cjs +174 -0
- package/dist/martyrs/src/modules/music/store/playlists.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/store/playlists.js +174 -0
- package/dist/martyrs/src/modules/music/store/playlists.js.map +1 -0
- package/dist/martyrs/src/modules/music/store/search.cjs +109 -0
- package/dist/martyrs/src/modules/music/store/search.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/store/search.js +109 -0
- package/dist/martyrs/src/modules/music/store/search.js.map +1 -0
- package/dist/martyrs/src/modules/music/store/tracks.cjs +180 -0
- package/dist/martyrs/src/modules/music/store/tracks.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/store/tracks.js +180 -0
- package/dist/martyrs/src/modules/music/store/tracks.js.map +1 -0
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.cjs +1 -1
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +2 -2
- 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/FormDelivery.vue.cjs +2 -2
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +2 -2
- 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/OrganizationEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +2 -2
- 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 +2 -2
- 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 +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/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/pages/views/components/partials/SidebarPages.vue.cjs +2 -2
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductImages.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +3 -3
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/pages/LeftoverEdit.vue.cjs +3 -3
- package/dist/martyrs/src/modules/products/components/pages/LeftoverEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js.map +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 +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditIngredients.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditIngredients.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditRecommended.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/ProductsRecommended.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js +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/reports/components/sections/FormReport.vue.cjs +2 -2
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +2 -2
- 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/Map.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.cjs +2 -2
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +3 -3
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +3 -3
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +38 -36
- package/dist/music.server.cjs +1407 -0
- package/dist/music.server.js +1407 -0
- package/dist/orders.server.cjs +3 -88
- package/dist/orders.server.js +2 -87
- package/dist/socials.schema-BOZV82Mp.js +25 -0
- package/dist/socials.schema-CtpSF9dE.cjs +24 -0
- package/dist/style.css +250 -97
- package/package.json +1 -1
- package/src/.martyrs/filemap.json +2 -2
- package/src/components/Feed/Feed.vue +1 -1
- package/src/components/Field/Field.vue +42 -27
- package/src/components/index.js +2 -0
- package/src/main.js +6 -0
- package/src/modules/auth/auth.client.js +7 -0
- package/src/modules/auth/locales/en.js +76 -0
- package/src/modules/auth/locales/index.js +7 -0
- package/src/modules/auth/locales/ru.js +76 -0
- package/src/modules/auth/views/components/layouts/Auth.vue +2 -44
- package/src/modules/auth/views/components/pages/EnterCode.vue +5 -7
- package/src/modules/auth/views/components/pages/EnterPassword.vue +7 -10
- package/src/modules/auth/views/components/pages/ResetPassword.vue +9 -12
- package/src/modules/auth/views/components/pages/SignIn.vue +12 -15
- package/src/modules/auth/views/components/pages/SignUp.vue +9 -12
- package/src/modules/auth/views/components/sections/SliderFeatures.vue +11 -48
- package/src/modules/events/components/pages/EditEvent.vue +1 -1
- package/src/modules/globals/globals.client.js +1 -0
- package/src/modules/globals/views/components/blocks/PopupDateSelector.vue +1 -1
- package/src/modules/globals/views/utils/axios-instance.js +15 -1
- package/src/modules/icons/actions/IconShow.vue +23 -0
- package/src/modules/icons/pages/IconsPage.vue +114 -120
- package/src/modules/products/components/pages/Product.vue +1 -1
- package/dist/main-rF15sgss.cjs +0 -11
- package/dist/martyrs/src/components/Button/Button.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/DatePicker/Calendar.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/DatePicker/Calendar.vue.js.map +0 -1
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Popup/Popup.vue2.cjs.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/EnterCode.json.cjs +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/EnterCode.json.cjs.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/EnterCode.json.js +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/EnterCode.json.js.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/EnterPassword.json.cjs +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/EnterPassword.json.cjs.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/EnterPassword.json.js +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/EnterPassword.json.js.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/ResetPassword.json.cjs +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/ResetPassword.json.cjs.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/ResetPassword.json.js +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/ResetPassword.json.js.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/SignIn.json.cjs +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/SignIn.json.cjs.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/SignIn.json.js +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/SignIn.json.js.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/SignUp.json.cjs +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/SignUp.json.cjs.map +0 -1
- package/dist/martyrs/src/modules/auth/views/localization/SignUp.json.js +0 -9
- package/dist/martyrs/src/modules/auth/views/localization/SignUp.json.js.map +0 -1
- package/src/modules/auth/views/localization/EnterCode.json +0 -16
- package/src/modules/auth/views/localization/EnterPassword.json +0 -22
- package/src/modules/auth/views/localization/ResetPassword.json +0 -26
- package/src/modules/auth/views/localization/SignIn.json +0 -34
- package/src/modules/auth/views/localization/SignUp.json +0 -28
- /package/src/components/{DatePicker → Calendar}/Calendar.vue +0 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { ref, computed, onMounted, watch, createElementBlock, openBlock, createVNode, createElementVNode, createCommentVNode, toDisplayString } from "vue";
|
|
2
|
+
import { useRoute, useRouter } from "vue-router";
|
|
3
|
+
import Loader from "../../../../components/Loader/Loader.vue2.js";
|
|
4
|
+
/* empty css */
|
|
5
|
+
/* empty css */
|
|
6
|
+
/* empty css */
|
|
7
|
+
import TrackList from "../lists/TrackList.vue.js";
|
|
8
|
+
import { state, actions } from "../../store/tracks.js";
|
|
9
|
+
import "../../store/player.js";
|
|
10
|
+
import { state as state$1 } from "../../../auth/views/store/auth.js";
|
|
11
|
+
const _hoisted_1 = { class: "track-detail-page" };
|
|
12
|
+
const _hoisted_2 = {
|
|
13
|
+
key: 0,
|
|
14
|
+
class: "w-100 h-25r flex-center flex"
|
|
15
|
+
};
|
|
16
|
+
const _hoisted_3 = {
|
|
17
|
+
key: 1,
|
|
18
|
+
class: "t-center pd-big"
|
|
19
|
+
};
|
|
20
|
+
const _hoisted_4 = { key: 2 };
|
|
21
|
+
const _hoisted_5 = {
|
|
22
|
+
key: 0,
|
|
23
|
+
class: "track-lyrics mn-b-medium pd-medium bg-dark-transp-10 radius-medium"
|
|
24
|
+
};
|
|
25
|
+
const _hoisted_6 = { class: "t-grey" };
|
|
26
|
+
const _hoisted_7 = {
|
|
27
|
+
key: 1,
|
|
28
|
+
class: "related-tracks mn-b-medium"
|
|
29
|
+
};
|
|
30
|
+
const _sfc_main = {
|
|
31
|
+
__name: "TrackDetail",
|
|
32
|
+
setup(__props) {
|
|
33
|
+
const route = useRoute();
|
|
34
|
+
useRouter();
|
|
35
|
+
const isLoading = ref(true);
|
|
36
|
+
ref(false);
|
|
37
|
+
ref(false);
|
|
38
|
+
ref(false);
|
|
39
|
+
const track = computed(() => state.currentTrack);
|
|
40
|
+
const relatedTracks = computed(() => state.relatedTracks);
|
|
41
|
+
computed(() => {
|
|
42
|
+
var _a, _b, _c;
|
|
43
|
+
return ((_b = (_a = track.value) == null ? void 0 : _a.owner) == null ? void 0 : _b.target) === ((_c = state$1.user) == null ? void 0 : _c._id);
|
|
44
|
+
});
|
|
45
|
+
const fetchTrackData = async () => {
|
|
46
|
+
isLoading.value = true;
|
|
47
|
+
try {
|
|
48
|
+
await actions.fetchTrackByUrl(route.params.url);
|
|
49
|
+
await actions.fetchRelatedTracks(route.params.url);
|
|
50
|
+
} catch (error) {
|
|
51
|
+
console.error("Error loading track:", error);
|
|
52
|
+
} finally {
|
|
53
|
+
isLoading.value = false;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
onMounted(fetchTrackData);
|
|
57
|
+
watch(() => route.params.url, fetchTrackData);
|
|
58
|
+
return (_ctx, _cache) => {
|
|
59
|
+
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
60
|
+
isLoading.value ? (openBlock(), createElementBlock("div", _hoisted_2, [
|
|
61
|
+
createVNode(Loader)
|
|
62
|
+
])) : !track.value ? (openBlock(), createElementBlock("div", _hoisted_3, _cache[0] || (_cache[0] = [
|
|
63
|
+
createElementVNode("h2", { class: "t-white" }, "Track not found", -1),
|
|
64
|
+
createElementVNode("p", { class: "t-grey t-medium" }, "The track you're looking for doesn't exist or has been removed.", -1)
|
|
65
|
+
]))) : (openBlock(), createElementBlock("div", _hoisted_4, [
|
|
66
|
+
track.value.lyrics ? (openBlock(), createElementBlock("div", _hoisted_5, [
|
|
67
|
+
_cache[1] || (_cache[1] = createElementVNode("h2", { class: "t-white mn-b-small" }, "Lyrics", -1)),
|
|
68
|
+
createElementVNode("pre", _hoisted_6, toDisplayString(track.value.lyrics), 1)
|
|
69
|
+
])) : createCommentVNode("", true),
|
|
70
|
+
relatedTracks.value.length ? (openBlock(), createElementBlock("section", _hoisted_7, [
|
|
71
|
+
_cache[2] || (_cache[2] = createElementVNode("h2", { class: "t-white mn-b-small" }, "Related Tracks", -1)),
|
|
72
|
+
createVNode(TrackList, {
|
|
73
|
+
tracks: relatedTracks.value,
|
|
74
|
+
showAlbum: true,
|
|
75
|
+
showCover: true,
|
|
76
|
+
class: "bg-dark-transp-10 radius-medium o-hidden"
|
|
77
|
+
}, null, 8, ["tracks"])
|
|
78
|
+
])) : createCommentVNode("", true)
|
|
79
|
+
]))
|
|
80
|
+
]);
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
export {
|
|
85
|
+
_sfc_main as default
|
|
86
|
+
};
|
|
87
|
+
//# sourceMappingURL=TrackDetail.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TrackDetail.vue.js","sources":["../../../../../../../src/modules/music/components/pages/TrackDetail.vue"],"sourcesContent":["<!-- components/pages/TrackDetail.vue -->\n<template>\n <div class=\"track-detail-page\">\n <!-- Loading -->\n <div v-if=\"isLoading\" class=\"w-100 h-25r flex-center flex\">\n <Loader />\n </div>\n\n <!-- Not Found -->\n <div v-else-if=\"!track\" class=\"t-center pd-big\">\n <h2 class=\"t-white\">Track not found</h2>\n <p class=\"t-grey t-medium\">The track you're looking for doesn't exist or has been removed.</p>\n </div>\n\n <!-- Track Content -->\n <div v-else>\n <!-- ... [HEADER + ACTIONS as you posted] -->\n\n <!-- Track Lyrics -->\n <div v-if=\"track.lyrics\" class=\"track-lyrics mn-b-medium pd-medium bg-dark-transp-10 radius-medium\">\n <h2 class=\"t-white mn-b-small\">Lyrics</h2>\n <pre class=\"t-grey\">{{ track.lyrics }}</pre>\n </div>\n\n <!-- Related Tracks -->\n <section v-if=\"relatedTracks.length\" class=\"related-tracks mn-b-medium\">\n <h2 class=\"t-white mn-b-small\">Related Tracks</h2>\n <TrackList \n :tracks=\"relatedTracks\"\n :showAlbum=\"true\"\n :showCover=\"true\"\n class=\"bg-dark-transp-10 radius-medium o-hidden\"\n />\n </section>\n\n <!-- Add to Playlist Modal -->\n <!-- <Popup \n v-if=\"showAddToPlaylistModal\" \n @close-popup=\"showAddToPlaylistModal = false\" \n class=\"bg-dark pd-small w-m-25r radius-medium t-white\"\n >\n <h3 class=\"mn-b-medium\">Add to Playlist</h3>\n <PlaylistSelector \n :trackId=\"track._id\" \n @added=\"showAddToPlaylistModal = false\"\n />\n </Popup> -->\n </div>\n </div>\n</template>\n\n<script setup>\nimport { ref, computed, onMounted, watch } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport Loader from '@martyrs/src/components/Loader/Loader.vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport Dropdown from '@martyrs/src/components/Dropdown/Dropdown.vue';\nimport Popup from '@martyrs/src/components/Popup/Popup.vue';\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\nimport IconLike from '@martyrs/src/modules/icons/navigation/IconLike.vue';\nimport IconEllipsis from '@martyrs/src/modules/icons/navigation/IconEllipsis.vue';\nimport TrackList from '../lists/TrackList.vue';\n// import PlaylistSelector from '../forms/PlaylistSelector.vue';\n\nimport { state as tracksState, actions as tracksActions } from '../../store/tracks.js';\nimport { actions as playerActions } from '../../store/player.js';\nimport { state as authState } from '@martyrs/src/modules/auth/views/store/auth.js';\n\nconst route = useRoute();\nconst router = useRouter();\n\nconst isLoading = ref(true);\nconst showDropdown = ref(false);\nconst showAddToPlaylistModal = ref(false);\nconst isFavorite = ref(false);\n\nconst track = computed(() => tracksState.currentTrack);\nconst relatedTracks = computed(() => tracksState.relatedTracks);\n\nconst isOwner = computed(() => {\n return track.value?.owner?.target === authState.user?._id;\n});\n\nconst getArtistName = (track) => {\n if (!track || !track.artist) return 'Unknown';\n return typeof track.artist === 'object' ? track.artist.name : 'Unknown';\n};\n\nconst formatReleaseYear = (date) => {\n return date ? new Date(date).getFullYear() : 'Unknown';\n};\n\nconst playTrack = () => {\n if (track.value) {\n playerActions.setQueue([track.value]);\n }\n};\n\nconst toggleFavorite = () => {\n isFavorite.value = !isFavorite.value;\n // You can implement actual saving here\n};\n\nconst addToQueue = () => {\n if (track.value) {\n playerActions.addToQueue(track.value);\n }\n};\n\nconst editTrack = () => {\n router.push({ name: 'music-upload', query: { edit: track.value._id } });\n};\n\nconst deleteTrack = async () => {\n try {\n await tracksActions.deleteTrack(track.value._id);\n router.push({ name: 'music-library' });\n } catch (error) {\n console.error('Failed to delete track:', error);\n }\n};\n\nconst copyLink = () => {\n navigator.clipboard.writeText(window.location.href);\n showDropdown.value = false;\n};\n\nconst fetchTrackData = async () => {\n isLoading.value = true;\n try {\n await tracksActions.fetchTrackByUrl(route.params.url);\n await tracksActions.fetchRelatedTracks(route.params.url);\n } catch (error) {\n console.error('Error loading track:', error);\n } finally {\n isLoading.value = false;\n }\n};\n\nonMounted(fetchTrackData);\nwatch(() => route.params.url, fetchTrackData);\n</script>\n"],"names":["tracksState","authState","tracksActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqEA,UAAM,QAAQ,SAAU;AACT,cAAS;AAExB,UAAM,YAAY,IAAI,IAAI;AACL,QAAI,KAAK;AACC,QAAI,KAAK;AACrB,QAAI,KAAK;AAE5B,UAAM,QAAQ,SAAS,MAAMA,MAAY,YAAY;AACrD,UAAM,gBAAgB,SAAS,MAAMA,MAAY,aAAa;AAE9C,aAAS,MAAM;;AAC7B,eAAO,iBAAM,UAAN,mBAAa,UAAb,mBAAoB,cAAWC,aAAU,SAAVA,mBAAgB;AAAA,IACxD,CAAC;AA8CD,UAAM,iBAAiB,YAAY;AACjC,gBAAU,QAAQ;AAClB,UAAI;AACF,cAAMC,QAAc,gBAAgB,MAAM,OAAO,GAAG;AACpD,cAAMA,QAAc,mBAAmB,MAAM,OAAO,GAAG;AAAA,MACxD,SAAQ,OAAO;AACd,gBAAQ,MAAM,wBAAwB,KAAK;AAAA,MAC/C,UAAY;AACR,kBAAU,QAAQ;AAAA,MACtB;AAAA,IACA;AAEA,cAAU,cAAc;AACxB,UAAM,MAAM,MAAM,OAAO,KAAK,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const vue = require("vue");
|
|
4
|
+
const Media = require("../../../../components/Media/Media.vue.cjs");
|
|
5
|
+
const Button = require("../../../../components/Button/Button.vue.cjs");
|
|
6
|
+
const TrackProgress = require("./TrackProgress.vue.cjs");
|
|
7
|
+
const VolumeControl = require("./VolumeControl.vue.cjs");
|
|
8
|
+
const IconPlay = require("../../../icons/navigation/IconPlay.vue.cjs");
|
|
9
|
+
const IconPause = require("../../../icons/navigation/IconPause.vue.cjs");
|
|
10
|
+
const IconChevronRight = require("../../../icons/navigation/IconChevronRight.vue.cjs");
|
|
11
|
+
const IconChevronLeft = require("../../../icons/navigation/IconChevronLeft.vue.cjs");
|
|
12
|
+
const IconShuffle = require("../../../icons/navigation/IconShuffle.vue.cjs");
|
|
13
|
+
const IconRefresh = require("../../../icons/navigation/IconRefresh.vue.cjs");
|
|
14
|
+
const IconLike = require("../../../icons/navigation/IconLike.vue.cjs");
|
|
15
|
+
const IconVolume = require("../../../icons/navigation/IconVolume.vue.cjs");
|
|
16
|
+
const IconMute = require("../../../icons/navigation/IconMute.vue.cjs");
|
|
17
|
+
const player = require("../../store/player.cjs");
|
|
18
|
+
const _pluginVue_exportHelper = require("../../../../../../_virtual/_plugin-vue_export-helper.cjs");
|
|
19
|
+
const _hoisted_1 = { class: "music-player pd-small flex-between flex-v-center flex bg-dark br-t br-solid br-dark-transp-20 t-white" };
|
|
20
|
+
const _hoisted_2 = { class: "player-track-info flex-v-center flex w-25r" };
|
|
21
|
+
const _hoisted_3 = {
|
|
22
|
+
key: 0,
|
|
23
|
+
class: "player-track-cover mn-r-small"
|
|
24
|
+
};
|
|
25
|
+
const _hoisted_4 = { class: "player-track-details t-truncate" };
|
|
26
|
+
const _hoisted_5 = { class: "player-track-title t-white t-medium t-truncate" };
|
|
27
|
+
const _hoisted_6 = { class: "player-track-artist t-grey t-small t-truncate" };
|
|
28
|
+
const _hoisted_7 = { class: "player-favorite mn-l-small" };
|
|
29
|
+
const _hoisted_8 = { class: "player-controls flex-1 flex flex-column items-center" };
|
|
30
|
+
const _hoisted_9 = { class: "player-buttons flex-v-center flex gap-small" };
|
|
31
|
+
const _hoisted_10 = { class: "player-volume flex-v-center flex w-15r" };
|
|
32
|
+
const _sfc_main = {
|
|
33
|
+
__name: "MusicPlayer",
|
|
34
|
+
setup(__props) {
|
|
35
|
+
const isFavorite = vue.ref(false);
|
|
36
|
+
const currentTrack = vue.computed(() => player.state.currentTrack);
|
|
37
|
+
const isPlaying = vue.computed(() => player.state.isPlaying);
|
|
38
|
+
const volume = vue.computed(() => player.state.volume);
|
|
39
|
+
const muted = vue.computed(() => player.state.muted);
|
|
40
|
+
const shuffle = vue.computed(() => player.state.shuffle);
|
|
41
|
+
const repeat = vue.computed(() => player.state.repeat);
|
|
42
|
+
const repeatIcon = vue.computed(() => {
|
|
43
|
+
switch (repeat.value) {
|
|
44
|
+
case "one":
|
|
45
|
+
return "rgb(var(--main))";
|
|
46
|
+
case "all":
|
|
47
|
+
return "rgb(var(--main))";
|
|
48
|
+
default:
|
|
49
|
+
return "rgb(var(--grey))";
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
const togglePlay = () => {
|
|
53
|
+
player.actions.togglePlay();
|
|
54
|
+
};
|
|
55
|
+
const playNext = () => {
|
|
56
|
+
player.actions.playNext();
|
|
57
|
+
};
|
|
58
|
+
const playPrevious = () => {
|
|
59
|
+
player.actions.playPrevious();
|
|
60
|
+
};
|
|
61
|
+
const toggleShuffle = () => {
|
|
62
|
+
player.actions.toggleShuffle();
|
|
63
|
+
};
|
|
64
|
+
const toggleRepeat = () => {
|
|
65
|
+
player.actions.toggleRepeat();
|
|
66
|
+
};
|
|
67
|
+
const toggleMute = () => {
|
|
68
|
+
player.actions.toggleMute();
|
|
69
|
+
};
|
|
70
|
+
const toggleFavorite = () => {
|
|
71
|
+
isFavorite.value = !isFavorite.value;
|
|
72
|
+
};
|
|
73
|
+
const getArtistName = (track) => {
|
|
74
|
+
if (!track) return "Unknown Artist";
|
|
75
|
+
if (track.artist) {
|
|
76
|
+
if (typeof track.artist === "object") {
|
|
77
|
+
return track.artist.name || "Unknown Artist";
|
|
78
|
+
}
|
|
79
|
+
return track.artist;
|
|
80
|
+
}
|
|
81
|
+
return "Unknown Artist";
|
|
82
|
+
};
|
|
83
|
+
return (_ctx, _cache) => {
|
|
84
|
+
var _a;
|
|
85
|
+
const _component_IconVolumeHalf = vue.resolveComponent("IconVolumeHalf");
|
|
86
|
+
return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
|
|
87
|
+
vue.createElementVNode("div", _hoisted_2, [
|
|
88
|
+
currentTrack.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3, [
|
|
89
|
+
vue.createVNode(Media.default, {
|
|
90
|
+
url: currentTrack.value.coverUrl || currentTrack.value.album && currentTrack.value.album.coverUrl || "/assets/placeholder-track.jpg",
|
|
91
|
+
class: "w-3r h-3r object-fit-cover radius-small"
|
|
92
|
+
}, null, 8, ["url"])
|
|
93
|
+
])) : vue.createCommentVNode("", true),
|
|
94
|
+
vue.createElementVNode("div", _hoisted_4, [
|
|
95
|
+
vue.createElementVNode("div", _hoisted_5, vue.toDisplayString(((_a = currentTrack.value) == null ? void 0 : _a.title) || "No track playing"), 1),
|
|
96
|
+
vue.createElementVNode("div", _hoisted_6, vue.toDisplayString(getArtistName(currentTrack.value)), 1)
|
|
97
|
+
]),
|
|
98
|
+
vue.createElementVNode("div", _hoisted_7, [
|
|
99
|
+
vue.createVNode(Button.default, {
|
|
100
|
+
onClick: toggleFavorite,
|
|
101
|
+
class: "bg-transparent border-none pd-zero",
|
|
102
|
+
showLoader: false,
|
|
103
|
+
showSucces: false
|
|
104
|
+
}, {
|
|
105
|
+
default: vue.withCtx(() => [
|
|
106
|
+
vue.createVNode(IconLike.default, {
|
|
107
|
+
class: "i-small",
|
|
108
|
+
fill: isFavorite.value ? "rgb(var(--main))" : "rgb(var(--grey))"
|
|
109
|
+
}, null, 8, ["fill"])
|
|
110
|
+
]),
|
|
111
|
+
_: 1
|
|
112
|
+
})
|
|
113
|
+
])
|
|
114
|
+
]),
|
|
115
|
+
vue.createElementVNode("div", _hoisted_8, [
|
|
116
|
+
vue.createElementVNode("div", _hoisted_9, [
|
|
117
|
+
vue.createVNode(Button.default, {
|
|
118
|
+
onClick: toggleShuffle,
|
|
119
|
+
class: "bg-transparent border-none pd-zero",
|
|
120
|
+
showLoader: false,
|
|
121
|
+
showSucces: false
|
|
122
|
+
}, {
|
|
123
|
+
default: vue.withCtx(() => [
|
|
124
|
+
vue.createVNode(IconShuffle.default, {
|
|
125
|
+
class: "i-small",
|
|
126
|
+
fill: shuffle.value ? "rgb(var(--main))" : "rgb(var(--grey))"
|
|
127
|
+
}, null, 8, ["fill"])
|
|
128
|
+
]),
|
|
129
|
+
_: 1
|
|
130
|
+
}),
|
|
131
|
+
vue.createVNode(Button.default, {
|
|
132
|
+
onClick: playPrevious,
|
|
133
|
+
class: "bg-transparent border-none pd-zero",
|
|
134
|
+
showLoader: false,
|
|
135
|
+
showSucces: false
|
|
136
|
+
}, {
|
|
137
|
+
default: vue.withCtx(() => [
|
|
138
|
+
vue.createVNode(IconChevronLeft.default, {
|
|
139
|
+
class: "i-small",
|
|
140
|
+
fill: "rgb(var(--white))"
|
|
141
|
+
})
|
|
142
|
+
]),
|
|
143
|
+
_: 1
|
|
144
|
+
}),
|
|
145
|
+
vue.createVNode(Button.default, {
|
|
146
|
+
onClick: togglePlay,
|
|
147
|
+
class: "play-pause-btn bg-white radius-round pd-micro flex-center flex",
|
|
148
|
+
showLoader: false,
|
|
149
|
+
showSucces: false
|
|
150
|
+
}, {
|
|
151
|
+
default: vue.withCtx(() => [
|
|
152
|
+
isPlaying.value ? (vue.openBlock(), vue.createBlock(IconPause.default, {
|
|
153
|
+
key: 0,
|
|
154
|
+
class: "i-medium",
|
|
155
|
+
fill: "rgb(var(--black))"
|
|
156
|
+
})) : (vue.openBlock(), vue.createBlock(IconPlay.default, {
|
|
157
|
+
key: 1,
|
|
158
|
+
class: "i-medium",
|
|
159
|
+
fill: "rgb(var(--black))"
|
|
160
|
+
}))
|
|
161
|
+
]),
|
|
162
|
+
_: 1
|
|
163
|
+
}),
|
|
164
|
+
vue.createVNode(Button.default, {
|
|
165
|
+
onClick: playNext,
|
|
166
|
+
class: "bg-transparent border-none pd-zero",
|
|
167
|
+
showLoader: false,
|
|
168
|
+
showSucces: false
|
|
169
|
+
}, {
|
|
170
|
+
default: vue.withCtx(() => [
|
|
171
|
+
vue.createVNode(IconChevronRight.default, {
|
|
172
|
+
class: "i-small",
|
|
173
|
+
fill: "rgb(var(--white))"
|
|
174
|
+
})
|
|
175
|
+
]),
|
|
176
|
+
_: 1
|
|
177
|
+
}),
|
|
178
|
+
vue.createVNode(Button.default, {
|
|
179
|
+
onClick: toggleRepeat,
|
|
180
|
+
class: "bg-transparent border-none pd-zero",
|
|
181
|
+
showLoader: false,
|
|
182
|
+
showSucces: false
|
|
183
|
+
}, {
|
|
184
|
+
default: vue.withCtx(() => [
|
|
185
|
+
vue.createVNode(IconRefresh.default, {
|
|
186
|
+
class: "i-small",
|
|
187
|
+
fill: repeatIcon.value
|
|
188
|
+
}, null, 8, ["fill"])
|
|
189
|
+
]),
|
|
190
|
+
_: 1
|
|
191
|
+
})
|
|
192
|
+
]),
|
|
193
|
+
vue.createVNode(TrackProgress.default, { class: "w-100 mn-t-thin" })
|
|
194
|
+
]),
|
|
195
|
+
vue.createElementVNode("div", _hoisted_10, [
|
|
196
|
+
vue.createVNode(Button.default, {
|
|
197
|
+
onClick: toggleMute,
|
|
198
|
+
class: "bg-transparent border-none pd-zero mn-r-small",
|
|
199
|
+
showLoader: false,
|
|
200
|
+
showSucces: false
|
|
201
|
+
}, {
|
|
202
|
+
default: vue.withCtx(() => [
|
|
203
|
+
!muted.value && volume.value > 0.5 ? (vue.openBlock(), vue.createBlock(IconVolume.default, {
|
|
204
|
+
key: 0,
|
|
205
|
+
class: "i-small",
|
|
206
|
+
fill: "rgb(var(--white))"
|
|
207
|
+
})) : !muted.value && volume.value > 0 ? (vue.openBlock(), vue.createBlock(_component_IconVolumeHalf, {
|
|
208
|
+
key: 1,
|
|
209
|
+
class: "i-small",
|
|
210
|
+
fill: "rgb(var(--white))"
|
|
211
|
+
})) : (vue.openBlock(), vue.createBlock(IconMute.default, {
|
|
212
|
+
key: 2,
|
|
213
|
+
class: "i-small",
|
|
214
|
+
fill: "rgb(var(--white))"
|
|
215
|
+
}))
|
|
216
|
+
]),
|
|
217
|
+
_: 1
|
|
218
|
+
}),
|
|
219
|
+
vue.createVNode(VolumeControl.default)
|
|
220
|
+
])
|
|
221
|
+
]);
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
const MusicPlayer = /* @__PURE__ */ _pluginVue_exportHelper.default(_sfc_main, [["__scopeId", "data-v-d7b1cef7"]]);
|
|
226
|
+
exports.default = MusicPlayer;
|
|
227
|
+
//# sourceMappingURL=MusicPlayer.vue.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MusicPlayer.vue.cjs","sources":["../../../../../../../src/modules/music/components/player/MusicPlayer.vue"],"sourcesContent":["<!-- components/player/MusicPlayer.vue -->\n<template>\n <div class=\"music-player pd-small flex-between flex-v-center flex bg-dark br-t br-solid br-dark-transp-20 t-white\">\n <!-- Current Track Info -->\n <div class=\"player-track-info flex-v-center flex w-25r\">\n <div v-if=\"currentTrack\" class=\"player-track-cover mn-r-small\">\n <Media \n :url=\"currentTrack.coverUrl || (currentTrack.album && currentTrack.album.coverUrl) || '/assets/placeholder-track.jpg'\" \n class=\"w-3r h-3r object-fit-cover radius-small\"\n />\n </div>\n \n <div class=\"player-track-details t-truncate\">\n <div class=\"player-track-title t-white t-medium t-truncate\">\n {{ currentTrack?.title || 'No track playing' }}\n </div>\n <div class=\"player-track-artist t-grey t-small t-truncate\">\n {{ getArtistName(currentTrack) }}\n </div>\n </div>\n \n <div class=\"player-favorite mn-l-small\">\n <Button \n @click=\"toggleFavorite\" \n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconLike class=\"i-small\" :fill=\"isFavorite ? 'rgb(var(--main))' : 'rgb(var(--grey))'\"/>\n </Button>\n </div>\n </div>\n \n <!-- Player Controls -->\n <div class=\"player-controls flex-1 flex flex-column items-center\">\n <div class=\"player-buttons flex-v-center flex gap-small\">\n <Button \n @click=\"toggleShuffle\" \n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconShuffle class=\"i-small\" :fill=\"shuffle ? 'rgb(var(--main))' : 'rgb(var(--grey))'\"/>\n </Button>\n \n <Button \n @click=\"playPrevious\" \n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconPrevious class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n \n <Button \n @click=\"togglePlay\" \n class=\"play-pause-btn bg-white radius-round pd-micro flex-center flex\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconPause v-if=\"isPlaying\" class=\"i-medium\" fill=\"rgb(var(--black))\"/>\n <IconPlay v-else class=\"i-medium\" fill=\"rgb(var(--black))\"/>\n </Button>\n \n <Button \n @click=\"playNext\" \n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconNext class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n \n <Button \n @click=\"toggleRepeat\" \n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconRepeat class=\"i-small\" :fill=\"repeatIcon\"/>\n </Button>\n </div>\n \n <TrackProgress class=\"w-100 mn-t-thin\" />\n </div>\n \n <!-- Volume Control -->\n <div class=\"player-volume flex-v-center flex w-15r\">\n <Button \n @click=\"toggleMute\" \n class=\"bg-transparent border-none pd-zero mn-r-small\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconVolume v-if=\"!muted && volume > 0.5\" class=\"i-small\" fill=\"rgb(var(--white))\"/>\n <IconVolumeHalf v-else-if=\"!muted && volume > 0\" class=\"i-small\" fill=\"rgb(var(--white))\"/>\n <IconVolumeMute v-else class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n \n <VolumeControl />\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref } from 'vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport TrackProgress from './TrackProgress.vue';\nimport VolumeControl from './VolumeControl.vue';\n\n// Import icons\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\nimport IconPause from '@martyrs/src/modules/icons/navigation/IconPause.vue';\nimport IconNext from '@martyrs/src/modules/icons/navigation/IconChevronRight.vue';\nimport IconPrevious from '@martyrs/src/modules/icons/navigation/IconChevronLeft.vue';\nimport IconShuffle from '@martyrs/src/modules/icons/navigation/IconShuffle.vue';\nimport IconRepeat from '@martyrs/src/modules/icons/navigation/IconRefresh.vue';\nimport IconLike from '@martyrs/src/modules/icons/navigation/IconLike.vue';\nimport IconVolume from '@martyrs/src/modules/icons/navigation/IconVolume.vue';\n// import IconVolumeHalf from '@martyrs/src/modules/icons/navigation/IconVolume.vue'; // Using same icon but we'd style it differently\nimport IconVolumeMute from '@martyrs/src/modules/icons/navigation/IconMute.vue';\n\n// Import player store\nimport { state as playerState, actions as playerActions } from '../../store/player.js';\n\n// State\nconst isFavorite = ref(false);\n\n// Computed properties\nconst currentTrack = computed(() => playerState.currentTrack);\nconst isPlaying = computed(() => playerState.isPlaying);\nconst volume = computed(() => playerState.volume);\nconst muted = computed(() => playerState.muted);\nconst shuffle = computed(() => playerState.shuffle);\nconst repeat = computed(() => playerState.repeat);\n\nconst repeatIcon = computed(() => {\n switch(repeat.value) {\n case 'one':\n return 'rgb(var(--main))';\n case 'all':\n return 'rgb(var(--main))';\n default:\n return 'rgb(var(--grey))';\n }\n});\n\n// Methods\nconst togglePlay = () => {\n playerActions.togglePlay();\n};\n\nconst playNext = () => {\n playerActions.playNext();\n};\n\nconst playPrevious = () => {\n playerActions.playPrevious();\n};\n\nconst toggleShuffle = () => {\n playerActions.toggleShuffle();\n};\n\nconst toggleRepeat = () => {\n playerActions.toggleRepeat();\n};\n\nconst toggleMute = () => {\n playerActions.toggleMute();\n};\n\nconst toggleFavorite = () => {\n isFavorite.value = !isFavorite.value;\n // Implement favorite track logic here\n};\n\nconst getArtistName = (track) => {\n if (!track) return 'Unknown Artist';\n \n if (track.artist) {\n if (typeof track.artist === 'object') {\n return track.artist.name || 'Unknown Artist';\n }\n return track.artist;\n }\n return 'Unknown Artist';\n};\n</script>\n\n<style scoped>\n.play-pause-btn {\n width: 32px;\n height: 32px;\n transition: transform 0.2s ease;\n}\n\n.play-pause-btn:hover {\n transform: scale(1.1);\n}\n</style>"],"names":["ref","computed","playerState","playerActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+HA,UAAM,aAAaA,IAAG,IAAC,KAAK;AAG5B,UAAM,eAAeC,IAAQ,SAAC,MAAMC,OAAW,MAAC,YAAY;AAC5D,UAAM,YAAYD,IAAQ,SAAC,MAAMC,OAAW,MAAC,SAAS;AACtD,UAAM,SAASD,IAAQ,SAAC,MAAMC,OAAW,MAAC,MAAM;AAChD,UAAM,QAAQD,IAAQ,SAAC,MAAMC,OAAW,MAAC,KAAK;AAC9C,UAAM,UAAUD,IAAQ,SAAC,MAAMC,OAAW,MAAC,OAAO;AAClD,UAAM,SAASD,IAAQ,SAAC,MAAMC,OAAW,MAAC,MAAM;AAEhD,UAAM,aAAaD,IAAQ,SAAC,MAAM;AAChC,cAAO,OAAO,OAAK;AAAA,QACjB,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACb;AAAA,IACA,CAAC;AAGD,UAAM,aAAa,MAAM;AACvBE,aAAAA,QAAc,WAAY;AAAA,IAC5B;AAEA,UAAM,WAAW,MAAM;AACrBA,aAAAA,QAAc,SAAU;AAAA,IAC1B;AAEA,UAAM,eAAe,MAAM;AACzBA,aAAAA,QAAc,aAAc;AAAA,IAC9B;AAEA,UAAM,gBAAgB,MAAM;AAC1BA,aAAAA,QAAc,cAAe;AAAA,IAC/B;AAEA,UAAM,eAAe,MAAM;AACzBA,aAAAA,QAAc,aAAc;AAAA,IAC9B;AAEA,UAAM,aAAa,MAAM;AACvBA,aAAAA,QAAc,WAAY;AAAA,IAC5B;AAEA,UAAM,iBAAiB,MAAM;AAC3B,iBAAW,QAAQ,CAAC,WAAW;AAAA,IAEjC;AAEA,UAAM,gBAAgB,CAAC,UAAU;AAC/B,UAAI,CAAC,MAAO,QAAO;AAEnB,UAAI,MAAM,QAAQ;AAChB,YAAI,OAAO,MAAM,WAAW,UAAU;AACpC,iBAAO,MAAM,OAAO,QAAQ;AAAA,QAClC;AACI,eAAO,MAAM;AAAA,MACjB;AACE,aAAO;AAAA,IACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import { ref, computed, resolveComponent, createElementBlock, openBlock, createElementVNode, createCommentVNode, createVNode, toDisplayString, withCtx, createBlock } from "vue";
|
|
2
|
+
import Media from "../../../../components/Media/Media.vue.js";
|
|
3
|
+
import _sfc_main$1 from "../../../../components/Button/Button.vue.js";
|
|
4
|
+
import TrackProgress from "./TrackProgress.vue.js";
|
|
5
|
+
import VolumeControl from "./VolumeControl.vue.js";
|
|
6
|
+
import _sfc_main$5 from "../../../icons/navigation/IconPlay.vue.js";
|
|
7
|
+
import _sfc_main$4 from "../../../icons/navigation/IconPause.vue.js";
|
|
8
|
+
import IconChevronRight from "../../../icons/navigation/IconChevronRight.vue.js";
|
|
9
|
+
import IconChevronLeft from "../../../icons/navigation/IconChevronLeft.vue.js";
|
|
10
|
+
import _sfc_main$3 from "../../../icons/navigation/IconShuffle.vue.js";
|
|
11
|
+
import _sfc_main$6 from "../../../icons/navigation/IconRefresh.vue.js";
|
|
12
|
+
import _sfc_main$2 from "../../../icons/navigation/IconLike.vue.js";
|
|
13
|
+
import _sfc_main$7 from "../../../icons/navigation/IconVolume.vue.js";
|
|
14
|
+
import _sfc_main$8 from "../../../icons/navigation/IconMute.vue.js";
|
|
15
|
+
import { state, actions } from "../../store/player.js";
|
|
16
|
+
import _export_sfc from "../../../../../../_virtual/_plugin-vue_export-helper.js";
|
|
17
|
+
const _hoisted_1 = { class: "music-player pd-small flex-between flex-v-center flex bg-dark br-t br-solid br-dark-transp-20 t-white" };
|
|
18
|
+
const _hoisted_2 = { class: "player-track-info flex-v-center flex w-25r" };
|
|
19
|
+
const _hoisted_3 = {
|
|
20
|
+
key: 0,
|
|
21
|
+
class: "player-track-cover mn-r-small"
|
|
22
|
+
};
|
|
23
|
+
const _hoisted_4 = { class: "player-track-details t-truncate" };
|
|
24
|
+
const _hoisted_5 = { class: "player-track-title t-white t-medium t-truncate" };
|
|
25
|
+
const _hoisted_6 = { class: "player-track-artist t-grey t-small t-truncate" };
|
|
26
|
+
const _hoisted_7 = { class: "player-favorite mn-l-small" };
|
|
27
|
+
const _hoisted_8 = { class: "player-controls flex-1 flex flex-column items-center" };
|
|
28
|
+
const _hoisted_9 = { class: "player-buttons flex-v-center flex gap-small" };
|
|
29
|
+
const _hoisted_10 = { class: "player-volume flex-v-center flex w-15r" };
|
|
30
|
+
const _sfc_main = {
|
|
31
|
+
__name: "MusicPlayer",
|
|
32
|
+
setup(__props) {
|
|
33
|
+
const isFavorite = ref(false);
|
|
34
|
+
const currentTrack = computed(() => state.currentTrack);
|
|
35
|
+
const isPlaying = computed(() => state.isPlaying);
|
|
36
|
+
const volume = computed(() => state.volume);
|
|
37
|
+
const muted = computed(() => state.muted);
|
|
38
|
+
const shuffle = computed(() => state.shuffle);
|
|
39
|
+
const repeat = computed(() => state.repeat);
|
|
40
|
+
const repeatIcon = computed(() => {
|
|
41
|
+
switch (repeat.value) {
|
|
42
|
+
case "one":
|
|
43
|
+
return "rgb(var(--main))";
|
|
44
|
+
case "all":
|
|
45
|
+
return "rgb(var(--main))";
|
|
46
|
+
default:
|
|
47
|
+
return "rgb(var(--grey))";
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
const togglePlay = () => {
|
|
51
|
+
actions.togglePlay();
|
|
52
|
+
};
|
|
53
|
+
const playNext = () => {
|
|
54
|
+
actions.playNext();
|
|
55
|
+
};
|
|
56
|
+
const playPrevious = () => {
|
|
57
|
+
actions.playPrevious();
|
|
58
|
+
};
|
|
59
|
+
const toggleShuffle = () => {
|
|
60
|
+
actions.toggleShuffle();
|
|
61
|
+
};
|
|
62
|
+
const toggleRepeat = () => {
|
|
63
|
+
actions.toggleRepeat();
|
|
64
|
+
};
|
|
65
|
+
const toggleMute = () => {
|
|
66
|
+
actions.toggleMute();
|
|
67
|
+
};
|
|
68
|
+
const toggleFavorite = () => {
|
|
69
|
+
isFavorite.value = !isFavorite.value;
|
|
70
|
+
};
|
|
71
|
+
const getArtistName = (track) => {
|
|
72
|
+
if (!track) return "Unknown Artist";
|
|
73
|
+
if (track.artist) {
|
|
74
|
+
if (typeof track.artist === "object") {
|
|
75
|
+
return track.artist.name || "Unknown Artist";
|
|
76
|
+
}
|
|
77
|
+
return track.artist;
|
|
78
|
+
}
|
|
79
|
+
return "Unknown Artist";
|
|
80
|
+
};
|
|
81
|
+
return (_ctx, _cache) => {
|
|
82
|
+
var _a;
|
|
83
|
+
const _component_IconVolumeHalf = resolveComponent("IconVolumeHalf");
|
|
84
|
+
return openBlock(), createElementBlock("div", _hoisted_1, [
|
|
85
|
+
createElementVNode("div", _hoisted_2, [
|
|
86
|
+
currentTrack.value ? (openBlock(), createElementBlock("div", _hoisted_3, [
|
|
87
|
+
createVNode(Media, {
|
|
88
|
+
url: currentTrack.value.coverUrl || currentTrack.value.album && currentTrack.value.album.coverUrl || "/assets/placeholder-track.jpg",
|
|
89
|
+
class: "w-3r h-3r object-fit-cover radius-small"
|
|
90
|
+
}, null, 8, ["url"])
|
|
91
|
+
])) : createCommentVNode("", true),
|
|
92
|
+
createElementVNode("div", _hoisted_4, [
|
|
93
|
+
createElementVNode("div", _hoisted_5, toDisplayString(((_a = currentTrack.value) == null ? void 0 : _a.title) || "No track playing"), 1),
|
|
94
|
+
createElementVNode("div", _hoisted_6, toDisplayString(getArtistName(currentTrack.value)), 1)
|
|
95
|
+
]),
|
|
96
|
+
createElementVNode("div", _hoisted_7, [
|
|
97
|
+
createVNode(_sfc_main$1, {
|
|
98
|
+
onClick: toggleFavorite,
|
|
99
|
+
class: "bg-transparent border-none pd-zero",
|
|
100
|
+
showLoader: false,
|
|
101
|
+
showSucces: false
|
|
102
|
+
}, {
|
|
103
|
+
default: withCtx(() => [
|
|
104
|
+
createVNode(_sfc_main$2, {
|
|
105
|
+
class: "i-small",
|
|
106
|
+
fill: isFavorite.value ? "rgb(var(--main))" : "rgb(var(--grey))"
|
|
107
|
+
}, null, 8, ["fill"])
|
|
108
|
+
]),
|
|
109
|
+
_: 1
|
|
110
|
+
})
|
|
111
|
+
])
|
|
112
|
+
]),
|
|
113
|
+
createElementVNode("div", _hoisted_8, [
|
|
114
|
+
createElementVNode("div", _hoisted_9, [
|
|
115
|
+
createVNode(_sfc_main$1, {
|
|
116
|
+
onClick: toggleShuffle,
|
|
117
|
+
class: "bg-transparent border-none pd-zero",
|
|
118
|
+
showLoader: false,
|
|
119
|
+
showSucces: false
|
|
120
|
+
}, {
|
|
121
|
+
default: withCtx(() => [
|
|
122
|
+
createVNode(_sfc_main$3, {
|
|
123
|
+
class: "i-small",
|
|
124
|
+
fill: shuffle.value ? "rgb(var(--main))" : "rgb(var(--grey))"
|
|
125
|
+
}, null, 8, ["fill"])
|
|
126
|
+
]),
|
|
127
|
+
_: 1
|
|
128
|
+
}),
|
|
129
|
+
createVNode(_sfc_main$1, {
|
|
130
|
+
onClick: playPrevious,
|
|
131
|
+
class: "bg-transparent border-none pd-zero",
|
|
132
|
+
showLoader: false,
|
|
133
|
+
showSucces: false
|
|
134
|
+
}, {
|
|
135
|
+
default: withCtx(() => [
|
|
136
|
+
createVNode(IconChevronLeft, {
|
|
137
|
+
class: "i-small",
|
|
138
|
+
fill: "rgb(var(--white))"
|
|
139
|
+
})
|
|
140
|
+
]),
|
|
141
|
+
_: 1
|
|
142
|
+
}),
|
|
143
|
+
createVNode(_sfc_main$1, {
|
|
144
|
+
onClick: togglePlay,
|
|
145
|
+
class: "play-pause-btn bg-white radius-round pd-micro flex-center flex",
|
|
146
|
+
showLoader: false,
|
|
147
|
+
showSucces: false
|
|
148
|
+
}, {
|
|
149
|
+
default: withCtx(() => [
|
|
150
|
+
isPlaying.value ? (openBlock(), createBlock(_sfc_main$4, {
|
|
151
|
+
key: 0,
|
|
152
|
+
class: "i-medium",
|
|
153
|
+
fill: "rgb(var(--black))"
|
|
154
|
+
})) : (openBlock(), createBlock(_sfc_main$5, {
|
|
155
|
+
key: 1,
|
|
156
|
+
class: "i-medium",
|
|
157
|
+
fill: "rgb(var(--black))"
|
|
158
|
+
}))
|
|
159
|
+
]),
|
|
160
|
+
_: 1
|
|
161
|
+
}),
|
|
162
|
+
createVNode(_sfc_main$1, {
|
|
163
|
+
onClick: playNext,
|
|
164
|
+
class: "bg-transparent border-none pd-zero",
|
|
165
|
+
showLoader: false,
|
|
166
|
+
showSucces: false
|
|
167
|
+
}, {
|
|
168
|
+
default: withCtx(() => [
|
|
169
|
+
createVNode(IconChevronRight, {
|
|
170
|
+
class: "i-small",
|
|
171
|
+
fill: "rgb(var(--white))"
|
|
172
|
+
})
|
|
173
|
+
]),
|
|
174
|
+
_: 1
|
|
175
|
+
}),
|
|
176
|
+
createVNode(_sfc_main$1, {
|
|
177
|
+
onClick: toggleRepeat,
|
|
178
|
+
class: "bg-transparent border-none pd-zero",
|
|
179
|
+
showLoader: false,
|
|
180
|
+
showSucces: false
|
|
181
|
+
}, {
|
|
182
|
+
default: withCtx(() => [
|
|
183
|
+
createVNode(_sfc_main$6, {
|
|
184
|
+
class: "i-small",
|
|
185
|
+
fill: repeatIcon.value
|
|
186
|
+
}, null, 8, ["fill"])
|
|
187
|
+
]),
|
|
188
|
+
_: 1
|
|
189
|
+
})
|
|
190
|
+
]),
|
|
191
|
+
createVNode(TrackProgress, { class: "w-100 mn-t-thin" })
|
|
192
|
+
]),
|
|
193
|
+
createElementVNode("div", _hoisted_10, [
|
|
194
|
+
createVNode(_sfc_main$1, {
|
|
195
|
+
onClick: toggleMute,
|
|
196
|
+
class: "bg-transparent border-none pd-zero mn-r-small",
|
|
197
|
+
showLoader: false,
|
|
198
|
+
showSucces: false
|
|
199
|
+
}, {
|
|
200
|
+
default: withCtx(() => [
|
|
201
|
+
!muted.value && volume.value > 0.5 ? (openBlock(), createBlock(_sfc_main$7, {
|
|
202
|
+
key: 0,
|
|
203
|
+
class: "i-small",
|
|
204
|
+
fill: "rgb(var(--white))"
|
|
205
|
+
})) : !muted.value && volume.value > 0 ? (openBlock(), createBlock(_component_IconVolumeHalf, {
|
|
206
|
+
key: 1,
|
|
207
|
+
class: "i-small",
|
|
208
|
+
fill: "rgb(var(--white))"
|
|
209
|
+
})) : (openBlock(), createBlock(_sfc_main$8, {
|
|
210
|
+
key: 2,
|
|
211
|
+
class: "i-small",
|
|
212
|
+
fill: "rgb(var(--white))"
|
|
213
|
+
}))
|
|
214
|
+
]),
|
|
215
|
+
_: 1
|
|
216
|
+
}),
|
|
217
|
+
createVNode(VolumeControl)
|
|
218
|
+
])
|
|
219
|
+
]);
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
const MusicPlayer = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-d7b1cef7"]]);
|
|
224
|
+
export {
|
|
225
|
+
MusicPlayer as default
|
|
226
|
+
};
|
|
227
|
+
//# sourceMappingURL=MusicPlayer.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MusicPlayer.vue.js","sources":["../../../../../../../src/modules/music/components/player/MusicPlayer.vue"],"sourcesContent":["<!-- components/player/MusicPlayer.vue -->\n<template>\n <div class=\"music-player pd-small flex-between flex-v-center flex bg-dark br-t br-solid br-dark-transp-20 t-white\">\n <!-- Current Track Info -->\n <div class=\"player-track-info flex-v-center flex w-25r\">\n <div v-if=\"currentTrack\" class=\"player-track-cover mn-r-small\">\n <Media \n :url=\"currentTrack.coverUrl || (currentTrack.album && currentTrack.album.coverUrl) || '/assets/placeholder-track.jpg'\" \n class=\"w-3r h-3r object-fit-cover radius-small\"\n />\n </div>\n \n <div class=\"player-track-details t-truncate\">\n <div class=\"player-track-title t-white t-medium t-truncate\">\n {{ currentTrack?.title || 'No track playing' }}\n </div>\n <div class=\"player-track-artist t-grey t-small t-truncate\">\n {{ getArtistName(currentTrack) }}\n </div>\n </div>\n \n <div class=\"player-favorite mn-l-small\">\n <Button \n @click=\"toggleFavorite\" \n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconLike class=\"i-small\" :fill=\"isFavorite ? 'rgb(var(--main))' : 'rgb(var(--grey))'\"/>\n </Button>\n </div>\n </div>\n \n <!-- Player Controls -->\n <div class=\"player-controls flex-1 flex flex-column items-center\">\n <div class=\"player-buttons flex-v-center flex gap-small\">\n <Button \n @click=\"toggleShuffle\" \n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconShuffle class=\"i-small\" :fill=\"shuffle ? 'rgb(var(--main))' : 'rgb(var(--grey))'\"/>\n </Button>\n \n <Button \n @click=\"playPrevious\" \n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconPrevious class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n \n <Button \n @click=\"togglePlay\" \n class=\"play-pause-btn bg-white radius-round pd-micro flex-center flex\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconPause v-if=\"isPlaying\" class=\"i-medium\" fill=\"rgb(var(--black))\"/>\n <IconPlay v-else class=\"i-medium\" fill=\"rgb(var(--black))\"/>\n </Button>\n \n <Button \n @click=\"playNext\" \n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconNext class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n \n <Button \n @click=\"toggleRepeat\" \n class=\"bg-transparent border-none pd-zero\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconRepeat class=\"i-small\" :fill=\"repeatIcon\"/>\n </Button>\n </div>\n \n <TrackProgress class=\"w-100 mn-t-thin\" />\n </div>\n \n <!-- Volume Control -->\n <div class=\"player-volume flex-v-center flex w-15r\">\n <Button \n @click=\"toggleMute\" \n class=\"bg-transparent border-none pd-zero mn-r-small\"\n :showLoader=\"false\" \n :showSucces=\"false\"\n >\n <IconVolume v-if=\"!muted && volume > 0.5\" class=\"i-small\" fill=\"rgb(var(--white))\"/>\n <IconVolumeHalf v-else-if=\"!muted && volume > 0\" class=\"i-small\" fill=\"rgb(var(--white))\"/>\n <IconVolumeMute v-else class=\"i-small\" fill=\"rgb(var(--white))\"/>\n </Button>\n \n <VolumeControl />\n </div>\n </div>\n</template>\n\n<script setup>\nimport { computed, ref } from 'vue';\nimport Media from '@martyrs/src/components/Media/Media.vue';\nimport Button from '@martyrs/src/components/Button/Button.vue';\nimport TrackProgress from './TrackProgress.vue';\nimport VolumeControl from './VolumeControl.vue';\n\n// Import icons\nimport IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';\nimport IconPause from '@martyrs/src/modules/icons/navigation/IconPause.vue';\nimport IconNext from '@martyrs/src/modules/icons/navigation/IconChevronRight.vue';\nimport IconPrevious from '@martyrs/src/modules/icons/navigation/IconChevronLeft.vue';\nimport IconShuffle from '@martyrs/src/modules/icons/navigation/IconShuffle.vue';\nimport IconRepeat from '@martyrs/src/modules/icons/navigation/IconRefresh.vue';\nimport IconLike from '@martyrs/src/modules/icons/navigation/IconLike.vue';\nimport IconVolume from '@martyrs/src/modules/icons/navigation/IconVolume.vue';\n// import IconVolumeHalf from '@martyrs/src/modules/icons/navigation/IconVolume.vue'; // Using same icon but we'd style it differently\nimport IconVolumeMute from '@martyrs/src/modules/icons/navigation/IconMute.vue';\n\n// Import player store\nimport { state as playerState, actions as playerActions } from '../../store/player.js';\n\n// State\nconst isFavorite = ref(false);\n\n// Computed properties\nconst currentTrack = computed(() => playerState.currentTrack);\nconst isPlaying = computed(() => playerState.isPlaying);\nconst volume = computed(() => playerState.volume);\nconst muted = computed(() => playerState.muted);\nconst shuffle = computed(() => playerState.shuffle);\nconst repeat = computed(() => playerState.repeat);\n\nconst repeatIcon = computed(() => {\n switch(repeat.value) {\n case 'one':\n return 'rgb(var(--main))';\n case 'all':\n return 'rgb(var(--main))';\n default:\n return 'rgb(var(--grey))';\n }\n});\n\n// Methods\nconst togglePlay = () => {\n playerActions.togglePlay();\n};\n\nconst playNext = () => {\n playerActions.playNext();\n};\n\nconst playPrevious = () => {\n playerActions.playPrevious();\n};\n\nconst toggleShuffle = () => {\n playerActions.toggleShuffle();\n};\n\nconst toggleRepeat = () => {\n playerActions.toggleRepeat();\n};\n\nconst toggleMute = () => {\n playerActions.toggleMute();\n};\n\nconst toggleFavorite = () => {\n isFavorite.value = !isFavorite.value;\n // Implement favorite track logic here\n};\n\nconst getArtistName = (track) => {\n if (!track) return 'Unknown Artist';\n \n if (track.artist) {\n if (typeof track.artist === 'object') {\n return track.artist.name || 'Unknown Artist';\n }\n return track.artist;\n }\n return 'Unknown Artist';\n};\n</script>\n\n<style scoped>\n.play-pause-btn {\n width: 32px;\n height: 32px;\n transition: transform 0.2s ease;\n}\n\n.play-pause-btn:hover {\n transform: scale(1.1);\n}\n</style>"],"names":["playerState","playerActions"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+HA,UAAM,aAAa,IAAI,KAAK;AAG5B,UAAM,eAAe,SAAS,MAAMA,MAAY,YAAY;AAC5D,UAAM,YAAY,SAAS,MAAMA,MAAY,SAAS;AACtD,UAAM,SAAS,SAAS,MAAMA,MAAY,MAAM;AAChD,UAAM,QAAQ,SAAS,MAAMA,MAAY,KAAK;AAC9C,UAAM,UAAU,SAAS,MAAMA,MAAY,OAAO;AAClD,UAAM,SAAS,SAAS,MAAMA,MAAY,MAAM;AAEhD,UAAM,aAAa,SAAS,MAAM;AAChC,cAAO,OAAO,OAAK;AAAA,QACjB,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MACb;AAAA,IACA,CAAC;AAGD,UAAM,aAAa,MAAM;AACvBC,cAAc,WAAY;AAAA,IAC5B;AAEA,UAAM,WAAW,MAAM;AACrBA,cAAc,SAAU;AAAA,IAC1B;AAEA,UAAM,eAAe,MAAM;AACzBA,cAAc,aAAc;AAAA,IAC9B;AAEA,UAAM,gBAAgB,MAAM;AAC1BA,cAAc,cAAe;AAAA,IAC/B;AAEA,UAAM,eAAe,MAAM;AACzBA,cAAc,aAAc;AAAA,IAC9B;AAEA,UAAM,aAAa,MAAM;AACvBA,cAAc,WAAY;AAAA,IAC5B;AAEA,UAAM,iBAAiB,MAAM;AAC3B,iBAAW,QAAQ,CAAC,WAAW;AAAA,IAEjC;AAEA,UAAM,gBAAgB,CAAC,UAAU;AAC/B,UAAI,CAAC,MAAO,QAAO;AAEnB,UAAI,MAAM,QAAQ;AAChB,YAAI,OAAO,MAAM,WAAW,UAAU;AACpC,iBAAO,MAAM,OAAO,QAAQ;AAAA,QAClC;AACI,eAAO,MAAM;AAAA,MACjB;AACE,aAAO;AAAA,IACT;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|