@ozdao/martyrs 0.2.564 → 0.2.566
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/abac-BPl9Bmf9.js +1527 -0
- package/dist/builder.js +51 -39
- package/dist/{common.schema-GFSlNJo7.js → common.schema-DswiUXKB.js} +1 -1
- package/dist/community.server.js +48 -9
- package/dist/core.server.js +6 -4
- package/dist/{crud-C7FSTUes.js → crud-q1ye5IhV.js} +7 -7
- package/dist/events.server.js +3 -3
- package/dist/gallery.server.js +2 -2
- package/dist/inventory.server.js +4 -6
- package/dist/{main-CmjWiDVF.js → main-B9o1iBAZ.js} +1279 -1287
- package/dist/marketplace.server.js +1 -1
- package/dist/martyrs/dist/main-B9o1iBAZ.js +943 -0
- package/dist/martyrs/dist/main-B9o1iBAZ.js.map +1 -0
- package/dist/martyrs/dist/web-BF3ijvEr.js +55 -0
- package/dist/martyrs/dist/web-BF3ijvEr.js.map +1 -0
- package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js +96 -0
- package/dist/martyrs/src/components/BottomSheet/BottomSheet.vue.js.map +1 -0
- package/dist/martyrs/src/components/Button/{Button.vue.js → Button.vue2.js} +36 -45
- package/dist/martyrs/src/components/Button/Button.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Feed/Carousel.vue.js +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
- package/dist/martyrs/src/components/Field/{Field.vue2.js → Field.vue.js} +2 -2
- package/dist/martyrs/src/components/Field/Field.vue.js.map +1 -0
- package/dist/martyrs/src/components/FieldBig/FieldBig.vue.js +2 -2
- 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/Loader/{Loader.vue2.js → Loader.vue.js} +3 -4
- package/dist/martyrs/src/components/Loader/Loader.vue.js.map +1 -0
- package/dist/martyrs/src/components/LocationMarker/LocationMarker.vue.js +1 -1
- package/dist/martyrs/src/components/Media/Media.vue.js +1 -1
- package/dist/martyrs/src/components/Menu/{Menu.vue.js → Menu.vue2.js} +2 -2
- package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Select/{Select.vue2.js → Select.vue.js} +2 -2
- package/dist/martyrs/src/components/Select/Select.vue.js.map +1 -0
- package/dist/martyrs/src/components/SelectMulti/{SelectMulti.vue.js → SelectMulti.vue2.js} +2 -2
- package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Tree/Tree.vue.js +6 -3
- package/dist/martyrs/src/components/Tree/Tree.vue.js.map +1 -1
- package/dist/martyrs/src/components/UploadImage/UploadImage.vue.js +1 -1
- package/dist/martyrs/src/components/UploadImageMultiple/UploadImageMultiple.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/auth.client.js +10 -7
- package/dist/martyrs/src/modules/auth/auth.client.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterCode.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +3 -3
- 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.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileEditProfile.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +13 -13
- 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.js +2 -2
- package/dist/martyrs/src/modules/auth/views/components/sections/ProfileEditCredentials.vue.js +2 -2
- package/dist/martyrs/src/modules/auth/views/router/auth.router.js +116 -0
- package/dist/martyrs/src/modules/auth/views/router/auth.router.js.map +1 -0
- package/dist/martyrs/src/modules/auth/views/router/users.router.js +180 -0
- package/dist/martyrs/src/modules/auth/views/router/users.router.js.map +1 -0
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js +4 -4
- package/dist/martyrs/src/modules/backoffice/components/partials/Sidebar.vue.js.map +1 -1
- package/dist/martyrs/src/modules/community/components/layouts/Community.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +2 -2
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +2 -2
- package/dist/martyrs/src/modules/constructor/components/elements/Card.vue.js +1 -1
- package/dist/martyrs/src/modules/constructor/components/elements/Embed.vue.js +1 -1
- package/dist/martyrs/src/modules/core/locales/en.js +45 -0
- package/dist/martyrs/src/modules/core/locales/en.js.map +1 -1
- package/dist/martyrs/src/modules/core/locales/ru.js +45 -0
- package/dist/martyrs/src/modules/core/locales/ru.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/classes/i18n.manager.js +9 -0
- package/dist/martyrs/src/modules/core/views/classes/i18n.manager.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/BlockSearch.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/CardHeader.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/PopupAuth.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/blocks/PopupDateSelector.vue.js +2 -2
- package/dist/martyrs/src/modules/core/views/components/layouts/App.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js +3 -2
- package/dist/martyrs/src/modules/core/views/components/layouts/Client.vue.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/components/partials/Header.vue.js +2 -2
- package/dist/martyrs/src/modules/core/views/components/partials/NavigationBar.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/sections/Walkthrough.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/components/sections/filters/FilterRange.vue.js +1 -1
- package/dist/martyrs/src/modules/core/views/mixins/mixins.js +1 -2
- package/dist/martyrs/src/modules/core/views/mixins/mixins.js.map +1 -1
- package/dist/martyrs/src/modules/core/views/router/addRoutes.js +6 -1
- package/dist/martyrs/src/modules/core/views/router/addRoutes.js.map +1 -1
- package/dist/martyrs/src/modules/events/components/elements/ButtonCheck.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/elements/ButtonJoin.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EditEvent.vue.js +4 -4
- package/dist/martyrs/src/modules/events/components/pages/EditEventTickets.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/sections/EditTickets.vue.js +2 -2
- package/dist/martyrs/src/modules/events/components/sections/Feed.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/sections/List.vue.js +1 -1
- package/dist/martyrs/src/modules/events/events.client.js +15 -12
- package/dist/martyrs/src/modules/events/events.client.js.map +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +4 -4
- package/dist/martyrs/src/modules/inventory/components/forms/AdjustmentForm.vue.js +3 -3
- package/dist/martyrs/src/modules/inventory/components/forms/ColumnSettingsMenu.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/HistoryView.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/forms/StockAlertsForm.vue.js +3 -3
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +5 -5
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/pages/Marketplace.vue.js +1 -1
- package/dist/martyrs/src/modules/marketplace/views/components/sections/SectionMenu.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js +95 -0
- package/dist/martyrs/src/modules/music/components/blocks/ActionButtons.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js +6 -3
- package/dist/martyrs/src/modules/music/components/cards/AlbumCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +25 -25
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/PlaylistCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/AlbumForm.vue.js +3 -3
- package/dist/martyrs/src/modules/music/components/forms/ArtistForm.vue.js +4 -4
- package/dist/martyrs/src/modules/music/components/forms/PlaylistForm.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/forms/TrackForm.vue.js +3 -3
- package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js +31 -6
- package/dist/martyrs/src/modules/music/components/layouts/MusicBottomPlayer.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +121 -206
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js +9 -13
- package/dist/martyrs/src/modules/music/components/pages/MusicHome.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +167 -246
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +136 -221
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/TrackCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js +171 -0
- package/dist/martyrs/src/modules/music/components/player/FullscreenPlayer.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js +32 -154
- package/dist/martyrs/src/modules/music/components/player/MusicPlayer.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js +96 -0
- package/dist/martyrs/src/modules/music/components/player/PlayerControls.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js +55 -27
- package/dist/martyrs/src/modules/music/components/player/VolumeControl.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/player/tonar.png.js +5 -0
- package/dist/martyrs/src/modules/music/components/player/tonar.png.js.map +1 -0
- package/dist/martyrs/src/modules/music/store/albums.js +8 -2
- package/dist/martyrs/src/modules/music/store/albums.js.map +1 -1
- package/dist/martyrs/src/modules/music/store/player.js +83 -65
- package/dist/martyrs/src/modules/music/store/player.js.map +1 -1
- package/dist/martyrs/src/modules/music/store/tracks.js +4 -13
- package/dist/martyrs/src/modules/music/store/tracks.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js +4 -4
- package/dist/martyrs/src/modules/notifications/components/elements/NotificationBadge.vue.js.map +1 -1
- package/dist/martyrs/src/modules/notifications/notifications.client.js +2 -2
- package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js +3 -0
- package/dist/martyrs/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/forms/FormApplicationDetails.vue.js +3 -3
- package/dist/martyrs/src/modules/orders/components/forms/FormCustomerDetails.vue.js +3 -3
- package/dist/martyrs/src/modules/orders/components/forms/FormSelectCustomer.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/sections/ApplicationDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/CustomerDetails.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +2 -2
- package/dist/martyrs/src/modules/orders/components/sections/FormPayment.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/elements/ButtonToggleMembership.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/AddExistingMembersForm.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/forms/DepartmentForm.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/forms/InviteForm.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +5 -5
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/Documents.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/sections/MembersAdd.vue.js +3 -3
- package/dist/martyrs/src/modules/organizations/components/sections/Organizations.vue.js +3 -3
- package/dist/martyrs/src/modules/pages/views/components/blocks/CardPage.vue.js +2 -2
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +2 -2
- package/dist/martyrs/src/modules/pages/views/components/partials/SidebarPages.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js +15 -2
- package/dist/martyrs/src/modules/products/components/blocks/CardProduct.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/elements/Image360.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +10 -7
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +7 -6
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +11 -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.js +4 -4
- package/dist/martyrs/src/modules/products/components/pages/ProductRecommmendation.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/sections/EditAttributes.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/sections/EditDiscounts.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/sections/EditVariants.vue.js +3 -3
- package/dist/martyrs/src/modules/products/components/sections/ProductConfigurator.vue.js +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.js +11 -8
- package/dist/martyrs/src/modules/products/components/sections/SectionProduct.vue.js.map +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js +211 -61
- package/dist/martyrs/src/modules/rents/views/components/pages/RentsEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/reports/components/sections/FormReport.vue.js +2 -2
- package/dist/martyrs/src/modules/spots/components/blocks/SpotMemberModify.vue.js +2 -2
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js +4 -4
- package/dist/martyrs/src/modules/spots/components/pages/Map.vue.js.map +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/spots/components/sections/WorktimeEdit.vue.js +3 -3
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CardDeposit.vue.js +1 -1
- package/dist/martyrs/src/modules/wallet/views/components/blocks/CryptoDeposit.vue.js +2 -2
- package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +2 -2
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/music.server.js +44 -18
- package/dist/node_modules/.pnpm/{@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1 → @capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4}/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/definitions.js +1 -0
- package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/definitions.js.map +1 -0
- package/dist/node_modules/.pnpm/{@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1 → @capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4}/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/index.js +1 -1
- package/dist/node_modules/.pnpm/{@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1 → @capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4}/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/index.js.map +1 -1
- package/dist/node_modules/.pnpm/{@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1 → @capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4}/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/web.js +16 -1
- package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.3.0_@capacitor_core@7.4.4/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/web.js.map +1 -0
- package/dist/node_modules/.pnpm/{@capacitor_core@7.0.1 → @capacitor_core@7.4.4}/node_modules/@capacitor/core/dist/index.js +2 -1
- package/dist/node_modules/.pnpm/@capacitor_core@7.4.4/node_modules/@capacitor/core/dist/index.js.map +1 -0
- package/dist/node_modules/.pnpm/{@capacitor_device@7.0.0_@capacitor_core@7.0.1 → @capacitor_device@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/device/dist/esm/index.js +1 -1
- package/dist/node_modules/.pnpm/{@capacitor_device@7.0.0_@capacitor_core@7.0.1 → @capacitor_device@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/device/dist/esm/index.js.map +1 -1
- package/dist/node_modules/.pnpm/{@capacitor_device@7.0.0_@capacitor_core@7.0.1 → @capacitor_device@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/device/dist/esm/web.js +1 -1
- package/dist/node_modules/.pnpm/{@capacitor_device@7.0.0_@capacitor_core@7.0.1 → @capacitor_device@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/device/dist/esm/web.js.map +1 -1
- package/dist/node_modules/.pnpm/{@capacitor_keyboard@7.0.0_@capacitor_core@7.0.1 → @capacitor_keyboard@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/keyboard/dist/esm/definitions.js.map +1 -1
- package/dist/node_modules/.pnpm/{@capacitor_keyboard@7.0.0_@capacitor_core@7.0.1 → @capacitor_keyboard@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/keyboard/dist/esm/index.js +1 -1
- package/dist/node_modules/.pnpm/{@capacitor_keyboard@7.0.0_@capacitor_core@7.0.1 → @capacitor_keyboard@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/keyboard/dist/esm/index.js.map +1 -1
- package/dist/node_modules/.pnpm/{@capacitor_push-notifications@7.0.0_@capacitor_core@7.0.1 → @capacitor_push-notifications@7.0.3_@capacitor_core@7.4.4}/node_modules/@capacitor/push-notifications/dist/esm/index.js +1 -1
- package/dist/node_modules/.pnpm/{@capacitor_push-notifications@7.0.0_@capacitor_core@7.0.1 → @capacitor_push-notifications@7.0.3_@capacitor_core@7.4.4}/node_modules/@capacitor/push-notifications/dist/esm/index.js.map +1 -1
- package/dist/node_modules/.pnpm/{capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.0.1 → capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4}/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/index.js +1 -1
- package/dist/node_modules/.pnpm/{capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.0.1 → capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4}/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/index.js.map +1 -1
- package/dist/node_modules/.pnpm/{capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.0.1 → capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4}/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/web.js +1 -1
- package/dist/node_modules/.pnpm/{capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.0.1 → capacitor-plugin-app-tracking-transparency@2.0.5_@capacitor_core@7.4.4}/node_modules/capacitor-plugin-app-tracking-transparency/dist/esm/web.js.map +1 -1
- package/dist/notifications.server.js +0 -3
- package/dist/orders.server.js +5 -6
- package/dist/organizations.server.js +9 -10
- package/dist/products.server.js +27 -26
- package/dist/{queryProcessor-CBQgZycY.js → queryProcessor-C_5Iipam.js} +4 -1
- package/dist/rents.server.js +2 -3
- package/dist/spots.server.js +1 -1
- package/dist/style.css +252 -161
- package/dist/{web-cNKIl_cL.js → web-BF3ijvEr.js} +1 -1
- package/package.json +1 -1
- package/src/builder/modes/ssr.rspack.dev.js +4 -3
- package/src/builder/rspack/rspack.config.api.js +15 -4
- package/src/builder/rspack/rspack.config.base.js +3 -3
- package/src/builder/rspack/rspack.config.ssr.client.js +28 -28
- package/src/builder/templates/page.js +2 -2
- package/src/components/BottomSheet/BottomSheet.vue +4 -4
- package/src/components/Button/Button.vue +50 -37
- package/src/components/FieldPhone/FieldPhone.vue +1 -1
- package/src/components/Loader/Loader.vue +1 -1
- package/src/components/Tree/Tree.vue +6 -3
- package/src/modules/LAYOUT.MD +767 -0
- package/src/modules/PROCESS.md +0 -0
- package/src/modules/TASKS.MD +17 -0
- package/src/modules/auth/auth.client.js +11 -7
- package/src/modules/auth/views/components/pages/SignIn.vue +1 -1
- package/src/modules/auth/views/router/auth.router.js +94 -0
- package/src/modules/auth/views/router/users.router.js +153 -0
- package/src/modules/backoffice/components/partials/Sidebar.vue +7 -7
- package/src/modules/community/community.server.js +8 -0
- package/src/modules/community/policies/blog.policies.js +55 -0
- package/src/modules/community/routes/blog.routes.js +1 -1
- package/src/modules/community/routes/comments.routes.js +1 -1
- package/src/modules/community/routes/reactions.routes.js +1 -4
- package/src/modules/core/controllers/classes/abac/abac.adapter.express.js +206 -124
- package/src/modules/core/controllers/classes/abac/abac.adapter.ws.js +203 -50
- package/src/modules/core/controllers/classes/abac/abac.core.js +127 -36
- package/src/modules/core/controllers/classes/abac/abac.fields.js +144 -179
- package/src/modules/core/controllers/classes/abac/abac.js +201 -10
- package/src/modules/core/controllers/classes/abac/abac.policies.js +147 -57
- package/src/modules/core/controllers/classes/crud/crud.policies.js +5 -5
- package/src/modules/core/controllers/policies/core.policies.js +5 -2
- package/src/modules/core/controllers/utils/queryProcessor.js +4 -1
- package/src/modules/core/core.server.js +1 -0
- package/src/modules/core/locales/en.js +45 -0
- package/src/modules/core/locales/ru.js +45 -0
- package/src/modules/core/models/schemas/common.schema.js +1 -1
- package/src/modules/core/views/classes/i18n.manager.js +13 -0
- package/src/modules/core/views/components/layouts/Client.vue +1 -1
- package/src/modules/core/views/components/sections/filters/FilterPrice.vue +81 -0
- package/src/modules/core/views/mixins/mixins.js +1 -2
- package/src/modules/core/views/router/addRoutes.js +6 -1
- package/src/modules/events/events.client.js +3 -0
- package/src/modules/events/routes/events.routes.js +1 -1
- package/src/modules/inventory/components/pages/InventoryEdit.vue +3 -3
- package/src/modules/inventory/policies/inventory.policies.js +1 -1
- package/src/modules/inventory/routes/inventory.routes.js +1 -1
- package/src/modules/marketplace/marketplace.router.js +66 -0
- package/src/modules/marketplace/views/components/layouts/Marketplace.vue +363 -0
- package/src/modules/marketplace/views/components/pages/Catalog.vue +73 -0
- package/src/modules/music/components/blocks/ActionButtons.vue +74 -0
- package/src/modules/music/components/cards/AlbumCard.vue +1 -1
- package/src/modules/music/components/cards/ArtistCardSmall.vue +8 -6
- package/src/modules/music/components/layouts/MusicBottomPlayer.vue +94 -4
- package/src/modules/music/components/pages/Album.vue +55 -67
- package/src/modules/music/components/pages/MusicHome.vue +4 -6
- package/src/modules/music/components/pages/Playlist.vue +61 -70
- package/src/modules/music/components/pages/Track.vue +54 -71
- package/src/modules/music/components/player/FullscreenPlayer.vue +248 -0
- package/src/modules/music/components/player/MusicPlayer.vue +21 -216
- package/src/modules/music/components/player/PlayerControls.vue +112 -0
- package/src/modules/music/components/player/Visualizer.vue +151 -0
- package/src/modules/music/components/player/VolumeControl.vue +75 -23
- package/src/modules/music/components/player/tonar.png +0 -0
- package/src/modules/music/controllers/stream.controller.js +1 -1
- package/src/modules/music/music.server.js +1 -1
- package/src/modules/music/policies/music.policies.js +3 -2
- package/src/modules/music/router/library.router.js +26 -0
- package/src/modules/music/router/music.router.js +176 -0
- package/src/modules/music/routes/albums.routes.js +13 -12
- package/src/modules/music/routes/tracks.routes.js +39 -0
- package/src/modules/music/store/albums.js +10 -2
- package/src/modules/music/store/player.js +101 -89
- package/src/modules/music/store/tracks.js +5 -21
- package/src/modules/notifications/components/elements/NotificationBadge.vue +5 -6
- package/src/modules/notifications/notifications.server.js +1 -3
- package/src/modules/orders/components/elements/FieldSubscribeNewsletter.vue +5 -0
- package/src/modules/orders/orders.server.js +0 -1
- package/src/modules/organizations/components/blocks/CardOrganization.vue +2 -2
- package/src/modules/organizations/components/pages/DepartmentEdit.vue +2 -2
- package/src/modules/organizations/components/pages/OrganizationEdit.vue +2 -2
- package/src/modules/organizations/policies/organizations.policies.js +12 -6
- package/src/modules/organizations/routes/organizations.routes.js +1 -3
- package/src/modules/products/components/blocks/CardCategory.vue +1 -1
- package/src/modules/products/components/blocks/CardProduct.vue +16 -2
- package/src/modules/products/components/pages/Categories.vue +9 -6
- package/src/modules/products/components/pages/CategoryEdit.vue +8 -4
- package/src/modules/products/components/pages/Product.vue +11 -5
- package/src/modules/products/components/sections/SectionProduct.vue +11 -7
- package/src/modules/products/controllers/categories.controller.js +32 -27
- package/src/modules/products/routes/categories.routes.js +1 -1
- package/src/modules/rents/controllers/routes/rents.routes.js +1 -1
- package/src/modules/rents/views/components/pages/RentsEdit.vue +208 -49
- package/src/modules/spots/components/pages/Map.vue +2 -2
- package/src/styles/config.scss +6 -6
- package/dist/abac-DYoheWuc.js +0 -1031
- package/dist/core.abac-DUPBnlk6.js +0 -298
- package/dist/core.logger-C3q8A9dl.js +0 -51
- package/dist/martyrs/src/components/Button/Button.vue.js.map +0 -1
- package/dist/martyrs/src/components/Field/Field.vue2.js.map +0 -1
- package/dist/martyrs/src/components/Loader/Loader.vue2.js.map +0 -1
- package/dist/martyrs/src/components/Menu/Menu.vue.js.map +0 -1
- package/dist/martyrs/src/components/Select/Select.vue2.js.map +0 -1
- package/dist/martyrs/src/components/SelectMulti/SelectMulti.vue.js.map +0 -1
- package/dist/martyrs/src/modules/auth/auth.router.js +0 -342
- package/dist/martyrs/src/modules/auth/auth.router.js.map +0 -1
- package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/definitions.js.map +0 -1
- package/dist/node_modules/.pnpm/@capacitor-mlkit_barcode-scanning@7.1.0_@capacitor_core@7.0.1/node_modules/@capacitor-mlkit/barcode-scanning/dist/esm/web.js.map +0 -1
- package/dist/node_modules/.pnpm/@capacitor_core@7.0.1/node_modules/@capacitor/core/dist/index.js.map +0 -1
- package/src/modules/auth/auth.router.js +0 -262
- package/src/modules/core/controllers/classes/abac/v2/abac-core-fixed.js +0 -313
- package/src/modules/core/controllers/classes/abac/v2/abac-express-fixed.js +0 -276
- package/src/modules/core/controllers/classes/abac/v2/abac-fields-fixed.js +0 -425
- package/src/modules/core/controllers/classes/abac/v2/abac-main-fixed.js +0 -295
- package/src/modules/core/controllers/classes/abac/v2/abac-policies-fixed.js +0 -316
- package/src/modules/core/controllers/classes/abac/v2/abac-ws-fixed.js +0 -237
- package/src/modules/core/controllers/classes/core.abac.js +0 -310
- package/src/modules/core/controllers/classes/core.crud.js +0 -89
- package/src/modules/governance/reactcode/eslint.config.js +0 -28
- /package/dist/node_modules/.pnpm/{@capacitor_keyboard@7.0.0_@capacitor_core@7.0.1 → @capacitor_keyboard@7.0.1_@capacitor_core@7.4.4}/node_modules/@capacitor/keyboard/dist/esm/definitions.js +0 -0
|
@@ -13,14 +13,14 @@
|
|
|
13
13
|
</div>
|
|
14
14
|
|
|
15
15
|
<!-- Album Content -->
|
|
16
|
-
<div v-if="album" class="album-content cols-2
|
|
16
|
+
<div v-if="album" class="album-content cols-2 mobile:cols-1 gap-big">
|
|
17
17
|
<!-- Left Column - Cover & Stats -->
|
|
18
18
|
<div class="pos-sticky pos-t-0 mobile:pos-relative album-cover-section">
|
|
19
19
|
<!-- Cover -->
|
|
20
20
|
<Media
|
|
21
21
|
:url="album.coverArt || '/logo/logo-placeholder.jpg'"
|
|
22
22
|
:alt="album.title"
|
|
23
|
-
class="aspect-1x1 w-100
|
|
23
|
+
class="aspect-1x1 w-100 mn-b-small radius-medium o-hidden"
|
|
24
24
|
/>
|
|
25
25
|
<!-- Quick Stats -->
|
|
26
26
|
<div class="stats-grid grid cols-2 gap-small">
|
|
@@ -51,67 +51,7 @@
|
|
|
51
51
|
<h1 class="h1 mn-b-medium">{{ album.title }}</h1>
|
|
52
52
|
|
|
53
53
|
<!-- Action Buttons -->
|
|
54
|
-
<
|
|
55
|
-
<Button
|
|
56
|
-
@click="playAlbum"
|
|
57
|
-
color="primary"
|
|
58
|
-
size="medium"
|
|
59
|
-
class="flex-1 t-white bg-black radius-thin flex-center gap-thin"
|
|
60
|
-
>
|
|
61
|
-
<IconPlay fill="rgb(var(--white))" class="i-medium" />
|
|
62
|
-
Play All
|
|
63
|
-
</Button>
|
|
64
|
-
|
|
65
|
-
<Button
|
|
66
|
-
@click="shufflePlay"
|
|
67
|
-
color="primary"
|
|
68
|
-
size="medium"
|
|
69
|
-
class="flex-1 bg-light radius-thin flex-center gap-thin"
|
|
70
|
-
>
|
|
71
|
-
<IconShuffle class="i-medium" />
|
|
72
|
-
Shuffle
|
|
73
|
-
</Button>
|
|
74
|
-
|
|
75
|
-
<Button
|
|
76
|
-
@click="toggleFavorite"
|
|
77
|
-
color="primary"
|
|
78
|
-
size="medium"
|
|
79
|
-
class="flex-1 bg-light radius-thin flex-center gap-thin"
|
|
80
|
-
>
|
|
81
|
-
<IconLike class="i-medium" :fill="isFavorite ? 'rgb(var(--main)':'rgb(var(--black)'" />
|
|
82
|
-
{{isFavorite ? 'Liked' : 'Like'}}
|
|
83
|
-
</Button>
|
|
84
|
-
|
|
85
|
-
<Dropdown :label="{component: IconEllipsis, class: 'bg-light radius-thin pd-thin i-big' }" v-model="showDropdown" class="relative">
|
|
86
|
-
<template #trigger>
|
|
87
|
-
<Button color="transp" size="medium" class="w-3r h-3r radius-full">
|
|
88
|
-
<IconEllipsis class="w-1-25r h-1-25r" />
|
|
89
|
-
</Button>
|
|
90
|
-
</template>
|
|
91
|
-
<template #default>
|
|
92
|
-
<div class="dropdown-menu bg-white pd-small radius-medium shadow-big mn-t-thin">
|
|
93
|
-
<Button @click="addToQueue" color="transp" size="small" class="w-100 justify-start">
|
|
94
|
-
Add to Queue
|
|
95
|
-
</Button>
|
|
96
|
-
<Button @click="copyLink" color="transp" size="small" class="w-100 justify-start">
|
|
97
|
-
Copy Link
|
|
98
|
-
</Button>
|
|
99
|
-
<Button @click="addToPlaylist" color="transp" size="small" class="w-100 justify-start">
|
|
100
|
-
Add to Playlist
|
|
101
|
-
</Button>
|
|
102
|
-
<template v-if="isOwner">
|
|
103
|
-
<hr class="mn-v-thin border-dark-transp-10" />
|
|
104
|
-
<Button @click="editAlbum" color="transp" size="small" class="w-100 justify-start">
|
|
105
|
-
Edit Album
|
|
106
|
-
</Button>
|
|
107
|
-
<Button @click="deleteAlbum" color="danger" size="small" class="w-100 justify-start">
|
|
108
|
-
Delete Album
|
|
109
|
-
</Button>
|
|
110
|
-
</template>
|
|
111
|
-
</div>
|
|
112
|
-
</template>
|
|
113
|
-
</Dropdown>
|
|
114
|
-
</div>
|
|
54
|
+
<ActionButtons :buttons="actionButtons" />
|
|
115
55
|
|
|
116
56
|
<!-- Artists Cards -->
|
|
117
57
|
<div class="artists-section mn-b-medium">
|
|
@@ -239,7 +179,7 @@
|
|
|
239
179
|
<div class="flex flex-nowrap gap-small o-x-scroll overscroll-behavior-x-contain scroll-behavior-smooth scroll-snap-type-x-mandatory scroll-hide"
|
|
240
180
|
>
|
|
241
181
|
<li v-for="relatedAlbum in moreAlbums" :key="album._id" class="flex-none scroll-snap-align-start">
|
|
242
|
-
<AlbumCard :album="relatedAlbum" class="w-
|
|
182
|
+
<AlbumCard :album="relatedAlbum" class="w-15r transition-cubic-in-out" />
|
|
243
183
|
</li>
|
|
244
184
|
</div>
|
|
245
185
|
</section>
|
|
@@ -267,6 +207,7 @@ import IconDisc from '@martyrs/src/modules/icons/entities/IconMusic.vue';
|
|
|
267
207
|
import IconVerified from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue';
|
|
268
208
|
|
|
269
209
|
// Components
|
|
210
|
+
import ActionButtons from '../blocks/ActionButtons.vue';
|
|
270
211
|
import TrackListCard from '../cards/TrackListCard.vue';
|
|
271
212
|
import AlbumCard from '../cards/AlbumCard.vue';
|
|
272
213
|
import ArtistCardSmall from '../cards/ArtistCardSmall.vue';
|
|
@@ -285,7 +226,6 @@ const emits = defineEmits(['page-loading', 'page-loaded']);
|
|
|
285
226
|
// State
|
|
286
227
|
const hasLoaded = ref(false);
|
|
287
228
|
const isFavorite = ref(false);
|
|
288
|
-
const showDropdown = ref(false);
|
|
289
229
|
const followedArtists = ref([]);
|
|
290
230
|
const moreAlbums = ref([]);
|
|
291
231
|
|
|
@@ -307,6 +247,51 @@ const totalDuration = computed(() => {
|
|
|
307
247
|
return formatDuration(totalSeconds);
|
|
308
248
|
});
|
|
309
249
|
|
|
250
|
+
const actionButtons = computed(() => {
|
|
251
|
+
const buttons = [
|
|
252
|
+
{
|
|
253
|
+
type: 'button',
|
|
254
|
+
class: 't-white bg-black',
|
|
255
|
+
icon: IconPlay,
|
|
256
|
+
iconFill: 'rgb(var(--white))',
|
|
257
|
+
text: 'Play All',
|
|
258
|
+
action: playAlbum
|
|
259
|
+
},
|
|
260
|
+
{
|
|
261
|
+
type: 'button',
|
|
262
|
+
class: 'bg-light',
|
|
263
|
+
icon: IconShuffle,
|
|
264
|
+
text: 'Shuffle',
|
|
265
|
+
action: shufflePlay
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
type: 'button',
|
|
269
|
+
class: 'bg-light',
|
|
270
|
+
icon: IconLike,
|
|
271
|
+
iconFill: isFavorite.value ? 'rgb(var(--main))' : 'rgb(var(--black))',
|
|
272
|
+
text: isFavorite.value ? 'Liked' : 'Like',
|
|
273
|
+
action: toggleFavorite
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
type: 'dropdown',
|
|
277
|
+
items: [
|
|
278
|
+
{ text: 'Add to Queue', action: addToQueue },
|
|
279
|
+
{ text: 'Copy Link', action: copyLink },
|
|
280
|
+
{ text: 'Add to Playlist', action: addToPlaylist }
|
|
281
|
+
]
|
|
282
|
+
}
|
|
283
|
+
];
|
|
284
|
+
|
|
285
|
+
if (isOwner.value) {
|
|
286
|
+
const items = buttons[3].items;
|
|
287
|
+
items.push({ separator: true });
|
|
288
|
+
items.push({ text: 'Edit Album', action: editAlbum });
|
|
289
|
+
items.push({ text: 'Delete Album', action: deleteAlbum, color: 'danger' });
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
return buttons;
|
|
293
|
+
});
|
|
294
|
+
|
|
310
295
|
// Format helpers
|
|
311
296
|
const formatDate = (dateString) => {
|
|
312
297
|
if (!dateString) return 'Unknown';
|
|
@@ -373,10 +358,14 @@ const addToQueue = () => {
|
|
|
373
358
|
albumTracks.value.forEach(track => {
|
|
374
359
|
playerActions.addToQueue(track);
|
|
375
360
|
});
|
|
376
|
-
showDropdown.value = false;
|
|
377
361
|
}
|
|
378
362
|
};
|
|
379
363
|
|
|
364
|
+
const addToPlaylist = () => {
|
|
365
|
+
// TODO: Implement add to playlist
|
|
366
|
+
console.log('Add album to playlist');
|
|
367
|
+
};
|
|
368
|
+
|
|
380
369
|
const editAlbum = () => {
|
|
381
370
|
router.push({ name: 'album-edit', params: { url: album.value.url } });
|
|
382
371
|
};
|
|
@@ -394,7 +383,6 @@ const deleteAlbum = async () => {
|
|
|
394
383
|
|
|
395
384
|
const copyLink = () => {
|
|
396
385
|
navigator.clipboard.writeText(window.location.href);
|
|
397
|
-
showDropdown.value = false;
|
|
398
386
|
};
|
|
399
387
|
|
|
400
388
|
// Data fetching
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
class="flex flex-nowrap gap-small o-x-scroll overscroll-behavior-x-contain scroll-behavior-smooth scroll-snap-type-x-mandatory scroll-hide"
|
|
42
42
|
>
|
|
43
43
|
<li v-for="album in items" :key="album._id" class="flex-none scroll-snap-align-start">
|
|
44
|
-
<AlbumCard :album="album" class="w-
|
|
44
|
+
<AlbumCard :album="album" class="w-15r transition-cubic-in-out" />
|
|
45
45
|
</li>
|
|
46
46
|
|
|
47
47
|
</Feed>
|
|
@@ -79,9 +79,9 @@
|
|
|
79
79
|
horizontal: true
|
|
80
80
|
}"
|
|
81
81
|
v-slot="{ items }"
|
|
82
|
-
class="gap-zero"
|
|
82
|
+
class="gap-zero bg-light radius-medium o-hidden"
|
|
83
83
|
>
|
|
84
|
-
<div class="
|
|
84
|
+
<div class="">
|
|
85
85
|
<TrackListCard
|
|
86
86
|
v-for="(track, index) in items"
|
|
87
87
|
:key="track._id"
|
|
@@ -169,9 +169,7 @@
|
|
|
169
169
|
v-slot="{ items }"
|
|
170
170
|
class="cols-6 mobile:cols-3 gap-small"
|
|
171
171
|
>
|
|
172
|
-
<
|
|
173
|
-
<ArtistCard :artist="artist" class="hover-scale-1 flex-child-default transition-cubic-in-out" />
|
|
174
|
-
</li>
|
|
172
|
+
<ArtistCard v-for="artist in items" :key="artist._id" :artist="artist" class="hover-scale-1 transition-cubic-in-out" />
|
|
175
173
|
</Feed>
|
|
176
174
|
</section>
|
|
177
175
|
</div>
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
</div>
|
|
8
8
|
|
|
9
9
|
<!-- Playlist Content -->
|
|
10
|
-
<div v-if="playlist" class="playlist-content cols-2
|
|
10
|
+
<div v-if="playlist" class="playlist-content cols-2 mobile:cols-1 gap-big">
|
|
11
11
|
<!-- Left Column - Cover & Stats -->
|
|
12
|
-
<div class="pos-sticky
|
|
12
|
+
<div class="pos-sticky pos-t-0 mobile:pos-relative playlist-cover-section">
|
|
13
13
|
<!-- Cover -->
|
|
14
14
|
<div class="cover-container relative mn-b-medium radius-big overflow-hidden shadow-big">
|
|
15
15
|
<Media
|
|
@@ -51,67 +51,7 @@
|
|
|
51
51
|
<h1 class="h1 mn-b-medium">{{ playlist.title }}</h1>
|
|
52
52
|
|
|
53
53
|
<!-- Action Buttons -->
|
|
54
|
-
<
|
|
55
|
-
<Button
|
|
56
|
-
@click="playPlaylist"
|
|
57
|
-
color="primary"
|
|
58
|
-
size="medium"
|
|
59
|
-
class="flex-1 t-white bg-black radius-thin flex-center gap-thin"
|
|
60
|
-
>
|
|
61
|
-
<IconPlay fill="rgb(var(--white))" class="i-medium" />
|
|
62
|
-
Play All
|
|
63
|
-
</Button>
|
|
64
|
-
|
|
65
|
-
<Button
|
|
66
|
-
@click="shufflePlay"
|
|
67
|
-
color="primary"
|
|
68
|
-
size="medium"
|
|
69
|
-
class="flex-1 bg-light radius-thin flex-center gap-thin"
|
|
70
|
-
>
|
|
71
|
-
<IconShuffle class="i-medium" />
|
|
72
|
-
Shuffle
|
|
73
|
-
</Button>
|
|
74
|
-
|
|
75
|
-
<Button
|
|
76
|
-
@click="toggleFollow"
|
|
77
|
-
color="primary"
|
|
78
|
-
size="medium"
|
|
79
|
-
class="flex-1 bg-light radius-thin flex-center gap-thin"
|
|
80
|
-
>
|
|
81
|
-
{{isFollowing ? 'Follow' : 'Unfollow'}}
|
|
82
|
-
</Button>
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
<Dropdown :label="{component: IconEllipsis, class: 'bg-light radius-thin pd-thin i-big' }" v-model="showDropdown" class="relative">
|
|
86
|
-
<template #trigger>
|
|
87
|
-
<Button color="transp" size="medium" class="w-3r h-3r radius-full">
|
|
88
|
-
<IconEllipsis class="w-1-25r h-1-25r" />
|
|
89
|
-
</Button>
|
|
90
|
-
</template>
|
|
91
|
-
<template #default>
|
|
92
|
-
<div class="dropdown-menu bg-white pd-small radius-medium shadow-big mn-t-thin">
|
|
93
|
-
<Button @click="addToQueue" color="transp" size="small" class="w-100 t-nowrap justify-start">
|
|
94
|
-
Add to Queue
|
|
95
|
-
</Button>
|
|
96
|
-
<Button @click="copyLink" color="transp" size="small" class="w-100 t-nowrap justify-start">
|
|
97
|
-
Copy Link
|
|
98
|
-
</Button>
|
|
99
|
-
<template v-if="isOwner || isCollaborator">
|
|
100
|
-
<hr class="mn-v-thin border-dark-transp-10" />
|
|
101
|
-
<Button @click="editPlaylist" color="transp" size="small" class="w-100 t-nowrap justify-start">
|
|
102
|
-
Edit Playlist
|
|
103
|
-
</Button>
|
|
104
|
-
<Button v-if="isOwner" @click="toggleCollaborative" color="transp" size="small" class="t-nowrap w-100 justify-start">
|
|
105
|
-
{{ playlist.isCollaborative ? 'Make Private' : 'Make Collaborative' }}
|
|
106
|
-
</Button>
|
|
107
|
-
<Button v-if="isOwner" @click="deletePlaylist" color="danger" size="small" class="t-nowrap w-100 justify-start">
|
|
108
|
-
Delete Playlist
|
|
109
|
-
</Button>
|
|
110
|
-
</template>
|
|
111
|
-
</div>
|
|
112
|
-
</template>
|
|
113
|
-
</Dropdown>
|
|
114
|
-
</div>
|
|
54
|
+
<ActionButtons :buttons="actionButtons" />
|
|
115
55
|
|
|
116
56
|
<div class="artists-section mn-b-medium">
|
|
117
57
|
<h3 class="t-medium mn-b-small">Created by</h3>
|
|
@@ -349,6 +289,7 @@ import IconRefresh from '@martyrs/src/modules/icons/navigation/IconRefresh.vue';
|
|
|
349
289
|
import IconVerified from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue';
|
|
350
290
|
|
|
351
291
|
// Components
|
|
292
|
+
import ActionButtons from '../blocks/ActionButtons.vue';
|
|
352
293
|
import TrackListCard from '../cards/TrackListCard.vue';
|
|
353
294
|
import PlaylistCard from '../cards/PlaylistCard.vue';
|
|
354
295
|
import PlaylistForm from '../forms/PlaylistForm.vue';
|
|
@@ -372,7 +313,6 @@ const emits = defineEmits(['page-loading', 'page-loaded']);
|
|
|
372
313
|
// State
|
|
373
314
|
const hasLoaded = ref(false);
|
|
374
315
|
const isFollowing = ref(false);
|
|
375
|
-
const showDropdown = ref(false);
|
|
376
316
|
const showEditModal = ref(false);
|
|
377
317
|
const showDeleteModal = ref(false);
|
|
378
318
|
const followedUsers = ref([]);
|
|
@@ -407,6 +347,62 @@ const totalDuration = computed(() => {
|
|
|
407
347
|
return formatDuration(totalSeconds);
|
|
408
348
|
});
|
|
409
349
|
|
|
350
|
+
const actionButtons = computed(() => {
|
|
351
|
+
const buttons = [
|
|
352
|
+
{
|
|
353
|
+
type: 'button',
|
|
354
|
+
class: 't-white bg-black',
|
|
355
|
+
icon: IconPlay,
|
|
356
|
+
iconFill: 'rgb(var(--white))',
|
|
357
|
+
text: 'Play All',
|
|
358
|
+
action: playPlaylist
|
|
359
|
+
},
|
|
360
|
+
{
|
|
361
|
+
type: 'button',
|
|
362
|
+
class: 'bg-light',
|
|
363
|
+
icon: IconShuffle,
|
|
364
|
+
text: 'Shuffle',
|
|
365
|
+
action: shufflePlay
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
type: 'button',
|
|
369
|
+
class: 'bg-light',
|
|
370
|
+
icon: null,
|
|
371
|
+
text: isFollowing.value ? 'Unfollow' : 'Follow',
|
|
372
|
+
action: toggleFollow
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
type: 'dropdown',
|
|
376
|
+
items: [
|
|
377
|
+
{ text: 'Add to Queue', action: addToQueue, class: 't-nowrap' },
|
|
378
|
+
{ text: 'Copy Link', action: copyLink, class: 't-nowrap' }
|
|
379
|
+
]
|
|
380
|
+
}
|
|
381
|
+
];
|
|
382
|
+
|
|
383
|
+
if (isOwner.value || isCollaborator.value) {
|
|
384
|
+
const items = buttons[3].items;
|
|
385
|
+
items.push({ separator: true });
|
|
386
|
+
items.push({ text: 'Edit Playlist', action: editPlaylist, class: 't-nowrap' });
|
|
387
|
+
|
|
388
|
+
if (isOwner.value) {
|
|
389
|
+
items.push({
|
|
390
|
+
text: playlist.value?.isCollaborative ? 'Make Private' : 'Make Collaborative',
|
|
391
|
+
action: toggleCollaborative,
|
|
392
|
+
class: 't-nowrap'
|
|
393
|
+
});
|
|
394
|
+
items.push({
|
|
395
|
+
text: 'Delete Playlist',
|
|
396
|
+
action: deletePlaylist,
|
|
397
|
+
color: 'danger',
|
|
398
|
+
class: 't-nowrap'
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
return buttons;
|
|
404
|
+
});
|
|
405
|
+
|
|
410
406
|
// Helper functions
|
|
411
407
|
const getOwnerData = (playlist) => {
|
|
412
408
|
if (!playlist) return null;
|
|
@@ -521,13 +517,11 @@ const addToQueue = () => {
|
|
|
521
517
|
playlistTracks.value.forEach(track => {
|
|
522
518
|
playerActions.addToQueue(track);
|
|
523
519
|
});
|
|
524
|
-
showDropdown.value = false;
|
|
525
520
|
}
|
|
526
521
|
};
|
|
527
522
|
|
|
528
523
|
const editPlaylist = () => {
|
|
529
524
|
showEditModal.value = true;
|
|
530
|
-
showDropdown.value = false;
|
|
531
525
|
};
|
|
532
526
|
|
|
533
527
|
const toggleCollaborative = async () => {
|
|
@@ -536,9 +530,8 @@ const toggleCollaborative = async () => {
|
|
|
536
530
|
_id: playlist.value._id,
|
|
537
531
|
isCollaborative: !playlist.value.isCollaborative
|
|
538
532
|
};
|
|
539
|
-
|
|
533
|
+
|
|
540
534
|
await playlistsActions.updatePlaylist(updatedData);
|
|
541
|
-
showDropdown.value = false;
|
|
542
535
|
} catch (error) {
|
|
543
536
|
console.error('Error updating playlist:', error);
|
|
544
537
|
}
|
|
@@ -546,7 +539,6 @@ const toggleCollaborative = async () => {
|
|
|
546
539
|
|
|
547
540
|
const deletePlaylist = () => {
|
|
548
541
|
showDeleteModal.value = true;
|
|
549
|
-
showDropdown.value = false;
|
|
550
542
|
};
|
|
551
543
|
|
|
552
544
|
const confirmDelete = async () => {
|
|
@@ -576,7 +568,6 @@ const removeTrack = async (trackId) => {
|
|
|
576
568
|
|
|
577
569
|
const copyLink = () => {
|
|
578
570
|
navigator.clipboard.writeText(window.location.href);
|
|
579
|
-
showDropdown.value = false;
|
|
580
571
|
};
|
|
581
572
|
|
|
582
573
|
const handlePlaylistUpdated = () => {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
</div>
|
|
14
14
|
|
|
15
15
|
<!-- Track Content -->
|
|
16
|
-
<div v-if="track" class="track-content cols-2
|
|
16
|
+
<div v-if="track" class="track-content cols-2 mobile:cols-1 gap-big">
|
|
17
17
|
<!-- Left Column - Cover & Stats -->
|
|
18
18
|
<div class="pos-sticky pos-t-0 mobile:pos-relative track-cover-section">
|
|
19
19
|
<!-- Cover with Play Overlay -->
|
|
@@ -62,78 +62,18 @@
|
|
|
62
62
|
<!-- Track Title -->
|
|
63
63
|
<h1 class="h1 mn-b-medium">{{ track.title }}</h1>
|
|
64
64
|
<!-- Action Buttons -->
|
|
65
|
-
<
|
|
66
|
-
<Button
|
|
67
|
-
@click="playTrack"
|
|
68
|
-
color="primary"
|
|
69
|
-
size="medium"
|
|
70
|
-
class="flex-1 t-white bg-black radius-thin flex-center gap-thin"
|
|
71
|
-
>
|
|
72
|
-
<IconPlay v-if="!isPlaying" fill="rgb(var(--white))" class="i-medium" />
|
|
73
|
-
<IconPause v-else fill="rgb(var(--white))" class="i-medium" />
|
|
74
|
-
{{ !isPlaying ? 'Play' : 'Pause'}}
|
|
75
|
-
</Button>
|
|
76
|
-
|
|
77
|
-
<Button
|
|
78
|
-
@click="addToQueue"
|
|
79
|
-
color="primary"
|
|
80
|
-
size="medium"
|
|
81
|
-
class="flex-1 bg-light radius-thin flex-center gap-thin"
|
|
82
|
-
>
|
|
83
|
-
<IconAdd class="i-medium" />
|
|
84
|
-
Add to Queue
|
|
85
|
-
</Button>
|
|
86
|
-
|
|
87
|
-
<Button
|
|
88
|
-
@click="toggleFavorite"
|
|
89
|
-
color="primary"
|
|
90
|
-
size="medium"
|
|
91
|
-
class="flex-1 bg-light radius-thin flex-center gap-thin"
|
|
92
|
-
>
|
|
93
|
-
<IconLike class="i-medium" :fill="isFavorite ? 'rgb(var(--main)':'rgb(var(--black)'" />
|
|
94
|
-
{{isFavorite ? 'Liked' : 'Like'}}
|
|
95
|
-
</Button>
|
|
96
|
-
|
|
97
|
-
<Dropdown :label="{component: IconEllipsis, class: 'bg-light radius-thin pd-thin i-big' }" v-model="showDropdown" class="relative">
|
|
98
|
-
<template #trigger>
|
|
99
|
-
<Button color="transp" size="medium" class="w-3r h-3r radius-full">
|
|
100
|
-
<IconEllipsis class="w-1-25r h-1-25r" />
|
|
101
|
-
</Button>
|
|
102
|
-
</template>
|
|
103
|
-
<template #default>
|
|
104
|
-
<div class="dropdown-menu bg-dark pd-small radius-medium shadow-big mn-t-thin">
|
|
105
|
-
<Button @click="showAddToPlaylistModal = true" color="transp" size="small" class="w-100 justify-start">
|
|
106
|
-
Add to Playlist
|
|
107
|
-
</Button>
|
|
108
|
-
<Button @click="copyLink" color="transp" size="small" class="w-100 justify-start">
|
|
109
|
-
Copy Link
|
|
110
|
-
</Button>
|
|
111
|
-
<template v-if="isOwner">
|
|
112
|
-
<hr class="mn-v-thin border-dark-transp-10" />
|
|
113
|
-
<Button @click="editTrack" color="transp" size="small" class="w-100 justify-start">
|
|
114
|
-
Edit Track
|
|
115
|
-
</Button>
|
|
116
|
-
<Button @click="deleteTrack" color="danger" size="small" class="w-100 justify-start">
|
|
117
|
-
Delete Track
|
|
118
|
-
</Button>
|
|
119
|
-
</template>
|
|
120
|
-
</div>
|
|
121
|
-
</template>
|
|
122
|
-
</Dropdown>
|
|
123
|
-
</div>
|
|
65
|
+
<ActionButtons :buttons="actionButtons" />
|
|
124
66
|
|
|
125
67
|
<!-- Artist Card -->
|
|
126
68
|
<div class="artists-section mn-b-medium">
|
|
127
69
|
<h3 class="t-medium mn-b-small" v-if="track.artist">Artist</h3>
|
|
128
|
-
<
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
/>
|
|
136
|
-
</div>
|
|
70
|
+
<ArtistCardSmall
|
|
71
|
+
:key="track.artist._id"
|
|
72
|
+
:artist="track.artist"
|
|
73
|
+
:is-following="isFollowingArtist"
|
|
74
|
+
:show-follow-button="!isOwner"
|
|
75
|
+
@toggle-follow="toggleFollowArtist"
|
|
76
|
+
/>
|
|
137
77
|
</div>
|
|
138
78
|
|
|
139
79
|
<!-- Metadata Cards -->
|
|
@@ -302,6 +242,7 @@ import IconEye from '@martyrs/src/modules/icons/actions/IconShow.vue';
|
|
|
302
242
|
import IconVerified from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue';
|
|
303
243
|
|
|
304
244
|
// Components
|
|
245
|
+
import ActionButtons from '../blocks/ActionButtons.vue';
|
|
305
246
|
import TrackListCard from '../cards/TrackListCard.vue';
|
|
306
247
|
import ArtistCardSmall from '../cards/ArtistCardSmall.vue';
|
|
307
248
|
// import PlaylistSelector from '../forms/PlaylistSelector.vue';
|
|
@@ -321,7 +262,6 @@ const emits = defineEmits(['page-loading', 'page-loaded']);
|
|
|
321
262
|
|
|
322
263
|
// State
|
|
323
264
|
const hasLoaded = ref(false);
|
|
324
|
-
const showDropdown = ref(false);
|
|
325
265
|
const showAddToPlaylistModal = ref(false);
|
|
326
266
|
const isFavorite = ref(false);
|
|
327
267
|
const isFollowingArtist = ref(false);
|
|
@@ -338,6 +278,50 @@ const isOwner = computed(() => {
|
|
|
338
278
|
return track.value?.owner?.target === authState.user?._id;
|
|
339
279
|
});
|
|
340
280
|
|
|
281
|
+
const actionButtons = computed(() => {
|
|
282
|
+
const buttons = [
|
|
283
|
+
{
|
|
284
|
+
type: 'button',
|
|
285
|
+
class: 't-white bg-black',
|
|
286
|
+
icon: isPlaying.value ? IconPause : IconPlay,
|
|
287
|
+
iconFill: 'rgb(var(--white))',
|
|
288
|
+
text: isPlaying.value ? 'Pause' : 'Play',
|
|
289
|
+
action: playTrack
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
type: 'button',
|
|
293
|
+
class: 'bg-light',
|
|
294
|
+
icon: IconAdd,
|
|
295
|
+
text: 'Add to Queue',
|
|
296
|
+
action: addToQueue
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
type: 'button',
|
|
300
|
+
class: 'bg-light',
|
|
301
|
+
icon: IconLike,
|
|
302
|
+
iconFill: isFavorite.value ? 'rgb(var(--main))' : 'rgb(var(--black))',
|
|
303
|
+
text: isFavorite.value ? 'Liked' : 'Like',
|
|
304
|
+
action: toggleFavorite
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
type: 'dropdown',
|
|
308
|
+
items: [
|
|
309
|
+
{ text: 'Add to Playlist', action: () => showAddToPlaylistModal.value = true },
|
|
310
|
+
{ text: 'Copy Link', action: copyLink }
|
|
311
|
+
]
|
|
312
|
+
}
|
|
313
|
+
];
|
|
314
|
+
|
|
315
|
+
if (isOwner.value) {
|
|
316
|
+
const items = buttons[3].items;
|
|
317
|
+
items.push({ separator: true });
|
|
318
|
+
items.push({ text: 'Edit Track', action: editTrack });
|
|
319
|
+
items.push({ text: 'Delete Track', action: deleteTrack, color: 'danger' });
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
return buttons;
|
|
323
|
+
});
|
|
324
|
+
|
|
341
325
|
// Format helpers
|
|
342
326
|
const formatDuration = (seconds) => {
|
|
343
327
|
if (!seconds) return '0:00';
|
|
@@ -410,7 +394,6 @@ const deleteTrack = async () => {
|
|
|
410
394
|
|
|
411
395
|
const copyLink = () => {
|
|
412
396
|
navigator.clipboard.writeText(window.location.href);
|
|
413
|
-
showDropdown.value = false;
|
|
414
397
|
};
|
|
415
398
|
|
|
416
399
|
// Data fetching
|