@ozdao/martyrs 0.2.470 → 0.2.472
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-CR0V1zvB.js → Media-DW8RLbfM.js} +1 -1
- package/dist/{Media-C4Ges_Sd.mjs → Media-y_TX6us_.mjs} +1 -1
- package/dist/_virtual/index.cjs +1 -1
- package/dist/_virtual/index.js +1 -1
- package/dist/auth.server.js +1 -1
- package/dist/auth.server.mjs +1 -1
- package/dist/chats.server.js +1 -1
- package/dist/chats.server.mjs +1 -1
- package/dist/community.server.js +1 -1
- package/dist/community.server.mjs +1 -1
- package/dist/events.server.js +1 -1
- package/dist/events.server.mjs +1 -1
- package/dist/files.server.js +1 -1
- package/dist/files.server.mjs +1 -1
- package/dist/gallery.server.js +1 -1
- package/dist/gallery.server.mjs +1 -1
- package/dist/{index-DQqZReAr.js → index-CVXl1rB5.js} +0 -1
- package/dist/{index-DICZTQ-1.mjs → index-Df8vtZx7.mjs} +0 -1
- package/dist/{main-CsZAG5Wz.js → main-CCfQH-Dd.js} +2 -2
- package/dist/{main-CTcal9qN.mjs → main-CgmHzhq5.mjs} +74 -74
- package/dist/{node_modules/.pnpm/@vue_server-renderer@3.5.13_vue@3.5.13_typescript@5.8.3_ → martyrs}/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.cjs +1 -1
- package/dist/martyrs/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.cjs.map +1 -0
- package/dist/{node_modules/.pnpm/@vue_server-renderer@3.5.13_vue@3.5.13_typescript@5.8.3_ → martyrs}/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.js +1 -1
- package/dist/martyrs/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.js.map +1 -0
- package/dist/martyrs/node_modules/@vue/shared/dist/shared.esm-bundler.cjs.map +1 -0
- package/dist/martyrs/node_modules/@vue/shared/dist/shared.esm-bundler.js.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/regex.cjs +5 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/regex.cjs.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/regex.js +5 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/regex.js.map +1 -0
- package/dist/{node_modules/.pnpm/uuid@11.1.0 → martyrs}/node_modules/uuid/dist/esm-browser/rng.cjs +4 -4
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/rng.cjs.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/rng.js +15 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/rng.js.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/stringify.cjs +17 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/stringify.cjs.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/stringify.js +17 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/stringify.js.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/v4.cjs +13 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/v4.cjs.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/v4.js +13 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/v4.js.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/validate.cjs +8 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/validate.cjs.map +1 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/validate.js +8 -0
- package/dist/martyrs/node_modules/uuid/dist/esm-browser/validate.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/Menu/{Menu.vue.cjs → Menu.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Menu/Menu.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Menu/{Menu.vue.js → Menu.vue2.js} +2 -2
- package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Skeleton/Skeleton.vue.cjs +5 -5
- package/dist/martyrs/src/components/Skeleton/Skeleton.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Skeleton/Skeleton.vue.js +5 -5
- package/dist/martyrs/src/components/Skeleton/Skeleton.vue.js.map +1 -1
- package/dist/martyrs/src/components/Tab/{Tab.vue2.cjs → Tab.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Tab/{Tab.vue2.js.map → Tab.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Tab/{Tab.vue2.js → Tab.vue.js} +2 -2
- package/dist/martyrs/src/components/Tab/Tab.vue.js.map +1 -0
- package/dist/martyrs/src/components/Tree/Tree.vue.cjs +3 -1
- package/dist/martyrs/src/components/Tree/Tree.vue.cjs.map +1 -1
- package/dist/martyrs/src/components/Tree/Tree.vue.js +3 -1
- package/dist/martyrs/src/components/Tree/Tree.vue.js.map +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/layouts/Auth.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/EnterPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Invite.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ProfileBlogposts.vue.js +1 -1
- 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/ResetPassword.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/ResetPassword.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignIn.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.cjs +1 -1
- package/dist/martyrs/src/modules/auth/views/components/pages/SignUp.vue.js +1 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.cjs +1 -0
- package/dist/martyrs/src/modules/auth/views/store/auth.cjs.map +1 -1
- package/dist/martyrs/src/modules/auth/views/store/auth.js +1 -0
- package/dist/martyrs/src/modules/auth/views/store/auth.js.map +1 -1
- package/dist/martyrs/src/modules/constructor/components/sections/Constructor.vue.cjs +1 -1
- package/dist/martyrs/src/modules/constructor/components/sections/Constructor.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/pages/EventsBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.store.cjs +107 -21
- package/dist/martyrs/src/modules/globals/views/classes/globals.store.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/classes/globals.store.js +107 -21
- package/dist/martyrs/src/modules/globals/views/classes/globals.store.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +10 -14
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +12 -16
- package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/components/sections/SectionPageTitle.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/views/utils/vue-app-renderer.cjs +7 -13
- package/dist/martyrs/src/modules/globals/views/utils/vue-app-renderer.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/utils/vue-app-renderer.js +7 -13
- package/dist/martyrs/src/modules/globals/views/utils/vue-app-renderer.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs +6 -7
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js +7 -8
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreate.vue.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderCreateBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/Orders.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/DepartmentEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organizations.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/products/components/blocks/CardCategory.vue.cjs +11 -5
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js +12 -6
- package/dist/martyrs/src/modules/products/components/blocks/CardCategory.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs +34 -13
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js +35 -14
- package/dist/martyrs/src/modules/products/components/pages/Categories.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +20 -9
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +21 -10
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Leftovers.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Product.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs +2 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js +2 -1
- package/dist/martyrs/src/modules/products/components/pages/ProductEdit.vue.js.map +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/Products.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/GanttChart.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/GanttChart.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Rents.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/pages/SpotEdit.vue.js +1 -1
- package/dist/martyrs.cjs.js +1 -1
- package/dist/martyrs.css +1 -1
- package/dist/martyrs.es.js +1 -1
- package/dist/notifications.server.js +35 -2
- package/dist/notifications.server.mjs +35 -2
- package/dist/orders.server.js +3 -3
- package/dist/orders.server.mjs +3 -3
- package/dist/organizations.server.js +1 -1
- package/dist/organizations.server.mjs +1 -1
- package/dist/products.server.js +78 -53
- package/dist/products.server.mjs +78 -53
- package/dist/rents.server.js +1 -1
- package/dist/rents.server.mjs +1 -1
- package/dist/style.css +37 -38
- package/dist/wallet.server.js +1 -1
- package/dist/wallet.server.mjs +1 -1
- package/package.json +2 -1
- package/src/components/Feed/Feed.vue +2 -7
- package/src/components/Skeleton/Skeleton.vue +4 -5
- package/src/components/Tree/Tree.vue +5 -2
- package/src/modules/auth/controllers/middlewares/authJwt.js +1 -1
- package/src/modules/auth/views/store/auth.js +2 -1
- package/src/modules/globals/controllers/classes/globals.crud.js +2 -2
- package/src/modules/globals/views/classes/globals.store.js +119 -31
- package/src/modules/globals/views/components/partials/Navigation.vue +11 -10
- package/src/modules/globals/views/utils/vue-app-renderer.js +7 -16
- package/src/modules/icons/entities/IconMusic.vue +14 -0
- package/src/modules/icons/navigation/IconCheck.vue +31 -0
- package/src/modules/icons/navigation/IconHeart.vue +26 -0
- package/src/modules/icons/navigation/IconPause.vue +31 -0
- package/src/modules/icons/navigation/IconPlay.vue +17 -0
- package/src/modules/icons/navigation/IconRefresh.vue +31 -0
- package/src/modules/icons/navigation/IconShuffle.vue +31 -0
- package/src/modules/icons/navigation/IconVolume.vue +31 -0
- package/src/modules/music/components/SidebarMusic.vue +156 -0
- package/src/modules/music/components/cards/AlbumCard.vue +107 -0
- package/src/modules/music/components/cards/ArtistCard.vue +37 -0
- package/src/modules/music/components/cards/PlaylistCard.vue +100 -0
- package/src/modules/music/components/cards/TrackCard.vue +86 -0
- package/src/modules/music/components/forms/PlaylistForm.vue +156 -0
- package/src/modules/music/components/forms/SearchForm.vue +82 -0
- package/src/modules/music/components/forms/UploadForm.vue +313 -0
- package/src/modules/music/components/layouts/MusicLayout.vue +137 -0
- package/src/modules/music/components/lists/AlbumList.vue +25 -0
- package/src/modules/music/components/lists/ArtistList.vue +25 -0
- package/src/modules/music/components/lists/PlaylistList.vue +25 -0
- package/src/modules/music/components/lists/TrackList.vue +175 -0
- package/src/modules/music/components/pages/AlbumDetail.vue +265 -0
- package/src/modules/music/components/pages/ArtistDetail.vue +247 -0
- package/src/modules/music/components/pages/MusicHome.vue +177 -0
- package/src/modules/music/components/pages/MusicLibrary.vue +192 -0
- package/src/modules/music/components/pages/MusicUpload.vue +44 -0
- package/src/modules/music/components/pages/PlaylistDetail.vue +504 -0
- package/src/modules/music/components/pages/SearchResults.vue +397 -0
- package/src/modules/music/components/pages/TrackDetail.vue +143 -0
- package/src/modules/music/components/player/MusicPlayer.vue +202 -0
- package/src/modules/music/components/player/TrackProgress.vue +110 -0
- package/src/modules/music/components/player/VolumeControl.vue +98 -0
- package/src/modules/music/controllers/album.controller.js +98 -0
- package/src/modules/music/controllers/artist.controller.js +111 -0
- package/src/modules/music/controllers/genre.controller.js +71 -0
- package/src/modules/music/controllers/music.controller.js +174 -0
- package/src/modules/music/controllers/playlist.controller.js +182 -0
- package/src/modules/music/controllers/search.controller.js +103 -0
- package/src/modules/music/controllers/stream.controller.js +106 -0
- package/src/modules/music/models/album.model.js +61 -0
- package/src/modules/music/models/artist.model.js +67 -0
- package/src/modules/music/models/genre.model.js +42 -0
- package/src/modules/music/models/play-history.model.js +51 -0
- package/src/modules/music/models/playlist.model.js +69 -0
- package/src/modules/music/models/track.model.js +94 -0
- package/src/modules/music/music.client.js +186 -0
- package/src/modules/music/music.server.js +114 -0
- package/src/modules/music/policies/music.policies.js +84 -0
- package/src/modules/music/router/music.js +77 -0
- package/src/modules/music/routes/album.routes.js +62 -0
- package/src/modules/music/routes/artist.routes.js +67 -0
- package/src/modules/music/routes/genre.routes.js +60 -0
- package/src/modules/music/routes/music.routes.js +145 -0
- package/src/modules/music/routes/playlist.routes.js +99 -0
- package/src/modules/music/routes/search.routes.js +10 -0
- package/src/modules/music/routes/stream.routes.js +38 -0
- package/src/modules/music/store/albums.js +200 -0
- package/src/modules/music/store/artists.js +180 -0
- package/src/modules/music/store/player.js +397 -0
- package/src/modules/music/store/playlists.js +211 -0
- package/src/modules/music/store/search.js +126 -0
- package/src/modules/music/store/tracks.js +230 -0
- package/src/modules/music/websocket/streaming.handler.js +151 -0
- package/src/modules/notifications/controllers/notifications.controller.js +44 -1
- package/src/modules/notifications/notifications.server.js +0 -1
- package/src/modules/notifications/routes/notifications.routes.js +3 -0
- package/src/modules/orders/components/pages/OrderCreate.vue +0 -2
- package/src/modules/products/components/blocks/CardCategory.vue +5 -4
- package/src/modules/products/components/pages/Categories.vue +38 -20
- package/src/modules/products/components/pages/CategoryEdit.vue +16 -7
- package/src/modules/products/components/pages/ProductEdit.vue +1 -0
- package/src/modules/products/controllers/categories.controller.js +155 -103
- package/dist/martyrs/src/components/Menu/Menu.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/Menu/Menu.vue.js.map +0 -1
- package/dist/martyrs/src/components/Tab/Tab.vue2.cjs.map +0 -1
- package/dist/node_modules/.pnpm/@vue_server-renderer@3.5.13_vue@3.5.13_typescript@5.8.3_/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.cjs.map +0 -1
- package/dist/node_modules/.pnpm/@vue_server-renderer@3.5.13_vue@3.5.13_typescript@5.8.3_/node_modules/@vue/server-renderer/dist/server-renderer.esm-bundler.js.map +0 -1
- package/dist/node_modules/.pnpm/@vue_shared@3.5.13/node_modules/@vue/shared/dist/shared.esm-bundler.cjs.map +0 -1
- package/dist/node_modules/.pnpm/@vue_shared@3.5.13/node_modules/@vue/shared/dist/shared.esm-bundler.js.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.cjs +0 -6
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.cjs.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.js +0 -6
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/native.js.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/rng.cjs.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/rng.js +0 -15
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/rng.js.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.cjs +0 -11
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.cjs.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.js +0 -11
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/stringify.js.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.cjs +0 -21
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.cjs.map +0 -1
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.js +0 -21
- package/dist/node_modules/.pnpm/uuid@11.1.0/node_modules/uuid/dist/esm-browser/v4.js.map +0 -1
- /package/dist/{node_modules/.pnpm/@vue_shared@3.5.13 → martyrs}/node_modules/@vue/shared/dist/shared.esm-bundler.cjs +0 -0
- /package/dist/{node_modules/.pnpm/@vue_shared@3.5.13 → martyrs}/node_modules/@vue/shared/dist/shared.esm-bundler.js +0 -0
- /package/dist/{node_modules → martyrs/node_modules}/fast-deep-equal/index.cjs +0 -0
- /package/dist/{node_modules → martyrs/node_modules}/fast-deep-equal/index.cjs.map +0 -0
- /package/dist/{node_modules → martyrs/node_modules}/fast-deep-equal/index.js +0 -0
- /package/dist/{node_modules → martyrs/node_modules}/fast-deep-equal/index.js.map +0 -0
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
<!-- components/cards/PlaylistCard.vue -->
|
|
2
|
+
<template>
|
|
3
|
+
<router-link
|
|
4
|
+
:to="{ name: 'playlist-detail', params: { url: playlist.url } }"
|
|
5
|
+
class="playlist-card d-block radius-small o-hidden"
|
|
6
|
+
>
|
|
7
|
+
<div class="playlist-cover pos-relative">
|
|
8
|
+
<Media
|
|
9
|
+
:url="playlist.coverUrl || '/assets/placeholder-playlist.jpg'"
|
|
10
|
+
class="w-100 aspect-1x1 object-fit-cover"
|
|
11
|
+
/>
|
|
12
|
+
<div class="playlist-overlay pos-absolute pos-t-0 pos-l-0 w-100 h-100 flex-center flex transition-cubic-in-out">
|
|
13
|
+
<Button
|
|
14
|
+
@click.stop="playPlaylist(playlist)"
|
|
15
|
+
class="play-button bg-main radius-round flex-center flex aspect-1x1"
|
|
16
|
+
:showLoader="false"
|
|
17
|
+
:showSucces="false"
|
|
18
|
+
>
|
|
19
|
+
<IconPlay class="i-small" fill="rgb(var(--black))" />
|
|
20
|
+
</Button>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
<div class="playlist-info pd-small bg-dark-transp-20">
|
|
24
|
+
<h3 class="t-white t-medium t-truncate">{{ playlist.title }}</h3>
|
|
25
|
+
<p class="t-grey t-small t-truncate">{{ playlistInfo }}</p>
|
|
26
|
+
</div>
|
|
27
|
+
</router-link>
|
|
28
|
+
</template>
|
|
29
|
+
|
|
30
|
+
<script setup>
|
|
31
|
+
import { computed } from 'vue';
|
|
32
|
+
import Media from '@martyrs/src/components/Media/Media.vue';
|
|
33
|
+
import Button from '@martyrs/src/components/Button/Button.vue';
|
|
34
|
+
import IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';
|
|
35
|
+
|
|
36
|
+
// Import player store
|
|
37
|
+
import { actions as playerActions } from '../../store/player.js';
|
|
38
|
+
|
|
39
|
+
const props = defineProps({
|
|
40
|
+
playlist: {
|
|
41
|
+
type: Object,
|
|
42
|
+
required: true
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// Computed properties
|
|
47
|
+
const playlistInfo = computed(() => {
|
|
48
|
+
const trackCount = props.playlist.tracks?.length || 0;
|
|
49
|
+
let creatorName = 'Unknown';
|
|
50
|
+
|
|
51
|
+
if (props.playlist.creator?.target?.profile?.name) {
|
|
52
|
+
creatorName = props.playlist.creator.target.profile.name;
|
|
53
|
+
} else if (props.playlist.creator?.target?.name) {
|
|
54
|
+
creatorName = props.playlist.creator.target.name;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return `${creatorName} • ${trackCount} ${trackCount === 1 ? 'track' : 'tracks'}`;
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// Methods
|
|
61
|
+
const playPlaylist = (playlist) => {
|
|
62
|
+
// Extract tracks from playlist
|
|
63
|
+
const tracks = playlist.tracks?.map(item => item.track).filter(track => track) || [];
|
|
64
|
+
|
|
65
|
+
if (tracks.length > 0) {
|
|
66
|
+
playerActions.setQueue(tracks);
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
</script>
|
|
70
|
+
|
|
71
|
+
<style scoped>
|
|
72
|
+
.playlist-card {
|
|
73
|
+
transition: transform 0.3s ease;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.playlist-card:hover {
|
|
77
|
+
transform: translateY(-5px);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.playlist-overlay {
|
|
81
|
+
background: rgba(0, 0, 0, 0.5);
|
|
82
|
+
opacity: 0;
|
|
83
|
+
transition: opacity 0.3s ease;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.playlist-card:hover .playlist-overlay {
|
|
87
|
+
opacity: 1;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.play-button {
|
|
91
|
+
width: 48px;
|
|
92
|
+
height: 48px;
|
|
93
|
+
transform: scale(0.8);
|
|
94
|
+
transition: transform 0.3s ease;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.playlist-card:hover .play-button {
|
|
98
|
+
transform: scale(1);
|
|
99
|
+
}
|
|
100
|
+
</style>
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
<!-- components/cards/TrackCard.vue -->
|
|
2
|
+
<template>
|
|
3
|
+
<div
|
|
4
|
+
class="track-card radius-small o-hidden pos-relative cursor-pointer transition-cubic-in-out bg-dark-transp-20"
|
|
5
|
+
@click="playTrack"
|
|
6
|
+
>
|
|
7
|
+
<div class="track-card-content pd-small flex-v-center flex">
|
|
8
|
+
<div class="track-cover mn-r-small">
|
|
9
|
+
<Media
|
|
10
|
+
:url="track.coverUrl || (track.album && track.album.coverUrl) || '/assets/placeholder-track.jpg'"
|
|
11
|
+
class="w-3r h-3r object-fit-cover radius-small"
|
|
12
|
+
/>
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<div class="track-info flex-1">
|
|
16
|
+
<div class="track-name t-white t-truncate">{{ track.title }}</div>
|
|
17
|
+
<div class="track-artist t-grey t-small t-truncate">{{ getArtistName(track) }}</div>
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<div class="track-play pos-absolute pos-r-0 pos-t-0 h-100 pd-small flex-center flex">
|
|
21
|
+
<div class="play-button bg-main radius-round flex-center flex aspect-1x1 i-medium">
|
|
22
|
+
<IconPlay class="i-small" fill="rgb(var(--black))"/>
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
</template>
|
|
28
|
+
|
|
29
|
+
<script setup>
|
|
30
|
+
import { computed } from 'vue';
|
|
31
|
+
import Media from '@martyrs/src/components/Media/Media.vue';
|
|
32
|
+
import IconPlay from '@martyrs/src/modules/icons/navigation/IconPlay.vue';
|
|
33
|
+
|
|
34
|
+
// Import player store
|
|
35
|
+
import { actions as playerActions } from '../../store/player.js';
|
|
36
|
+
|
|
37
|
+
const props = defineProps({
|
|
38
|
+
track: {
|
|
39
|
+
type: Object,
|
|
40
|
+
required: true
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
// Methods
|
|
45
|
+
const getArtistName = (track) => {
|
|
46
|
+
if (track.artist) {
|
|
47
|
+
if (typeof track.artist === 'object') {
|
|
48
|
+
return track.artist.name || 'Unknown Artist';
|
|
49
|
+
}
|
|
50
|
+
return track.artist;
|
|
51
|
+
}
|
|
52
|
+
return 'Unknown Artist';
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const playTrack = () => {
|
|
56
|
+
playerActions.playTrack(props.track);
|
|
57
|
+
};
|
|
58
|
+
</script>
|
|
59
|
+
|
|
60
|
+
<style scoped>
|
|
61
|
+
.track-card {
|
|
62
|
+
transition: background-color 0.3s ease;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.track-card:hover {
|
|
66
|
+
background-color: rgba(var(--dark), 0.4);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.track-play {
|
|
70
|
+
opacity: 0;
|
|
71
|
+
transition: opacity 0.3s ease;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.track-card:hover .track-play {
|
|
75
|
+
opacity: 1;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.play-button {
|
|
79
|
+
transform: scale(0.8);
|
|
80
|
+
transition: transform 0.3s ease;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
.track-card:hover .play-button {
|
|
84
|
+
transform: scale(1);
|
|
85
|
+
}
|
|
86
|
+
</style>
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
<!-- components/forms/PlaylistForm.vue -->
|
|
2
|
+
<template>
|
|
3
|
+
<div class="playlist-form">
|
|
4
|
+
<form @submit.prevent="submitForm">
|
|
5
|
+
<div class="form-group mn-b-medium">
|
|
6
|
+
<label for="title" class="t-white t-medium mn-b-thin d-block">Playlist Name</label>
|
|
7
|
+
<Field
|
|
8
|
+
v-model:field="form.title"
|
|
9
|
+
id="title"
|
|
10
|
+
type="text"
|
|
11
|
+
placeholder="New Playlist"
|
|
12
|
+
:validation="validationErrors.title"
|
|
13
|
+
class="w-100 pd-small bg-dark-transp-25 radius-small t-white"
|
|
14
|
+
/>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<div class="form-group mn-b-medium">
|
|
18
|
+
<label for="description" class="t-white t-medium mn-b-thin d-block">Description</label>
|
|
19
|
+
<Field
|
|
20
|
+
v-model:field="form.description"
|
|
21
|
+
id="description"
|
|
22
|
+
type="textarea"
|
|
23
|
+
placeholder="Add an optional description"
|
|
24
|
+
:validation="validationErrors.description"
|
|
25
|
+
class="w-100 pd-small bg-dark-transp-25 radius-small t-white"
|
|
26
|
+
/>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<div class="form-group mn-b-medium">
|
|
30
|
+
<label class="t-white t-medium mn-b-thin d-block">Privacy</label>
|
|
31
|
+
<div class="flex gap-small">
|
|
32
|
+
<Radio
|
|
33
|
+
v-model:radio="form.isPublic"
|
|
34
|
+
:value="true"
|
|
35
|
+
name="privacy"
|
|
36
|
+
label="Public"
|
|
37
|
+
class="t-white"
|
|
38
|
+
/>
|
|
39
|
+
<Radio
|
|
40
|
+
v-model:radio="form.isPublic"
|
|
41
|
+
:value="false"
|
|
42
|
+
name="privacy"
|
|
43
|
+
label="Private"
|
|
44
|
+
class="t-white"
|
|
45
|
+
/>
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
<div class="form-group mn-b-medium">
|
|
50
|
+
<label class="t-white t-medium mn-b-thin d-block">Cover Image</label>
|
|
51
|
+
<div class="playlist-cover-upload flex gap-medium">
|
|
52
|
+
<div class="playlist-cover-preview bg-dark-transp-25 radius-small o-hidden">
|
|
53
|
+
<Media
|
|
54
|
+
v-if="form.coverUrl"
|
|
55
|
+
:url="form.coverUrl"
|
|
56
|
+
class="w-10r h-10r object-fit-cover"
|
|
57
|
+
/>
|
|
58
|
+
<div v-else class="w-10r h-10r flex-center flex">
|
|
59
|
+
<IconMusic class="i-big" fill="rgb(var(--grey))"/>
|
|
60
|
+
</div>
|
|
61
|
+
</div>
|
|
62
|
+
|
|
63
|
+
<UploadImage
|
|
64
|
+
v-model:photo="form.coverUrl"
|
|
65
|
+
uploadPath="playlists"
|
|
66
|
+
class="flex-1 h-10r bg-dark-transp-25 radius-small"
|
|
67
|
+
/>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<div class="form-actions t-right">
|
|
72
|
+
<Button
|
|
73
|
+
@click="$emit('cancel')"
|
|
74
|
+
type="button"
|
|
75
|
+
class="bg-dark-transp-25 t-white pd-small radius-small mn-r-small hover-bg-dark"
|
|
76
|
+
:showLoader="false"
|
|
77
|
+
:showSucces="false"
|
|
78
|
+
>
|
|
79
|
+
Cancel
|
|
80
|
+
</Button>
|
|
81
|
+
|
|
82
|
+
<Button
|
|
83
|
+
type="submit"
|
|
84
|
+
class="bg-main t-white pd-small radius-small hover-scale-1"
|
|
85
|
+
:submit="submitForm"
|
|
86
|
+
:showLoader="true"
|
|
87
|
+
:showSucces="true"
|
|
88
|
+
:validation="!!Object.keys(validationErrors).length"
|
|
89
|
+
>
|
|
90
|
+
Create Playlist
|
|
91
|
+
</Button>
|
|
92
|
+
</div>
|
|
93
|
+
</form>
|
|
94
|
+
</div>
|
|
95
|
+
</template>
|
|
96
|
+
|
|
97
|
+
<script setup>
|
|
98
|
+
import { ref, reactive } from 'vue';
|
|
99
|
+
import Field from '@martyrs/src/components/Field/Field.vue';
|
|
100
|
+
import Radio from '@martyrs/src/components/Radio/Radio.vue';
|
|
101
|
+
import Button from '@martyrs/src/components/Button/Button.vue';
|
|
102
|
+
import UploadImage from '@martyrs/src/components/UploadImage/UploadImage.vue';
|
|
103
|
+
import Media from '@martyrs/src/components/Media/Media.vue';
|
|
104
|
+
import IconMusic from '@martyrs/src/modules/icons/entities/IconMusic.vue';
|
|
105
|
+
|
|
106
|
+
// Import auth store and playlists store
|
|
107
|
+
import { state as authState } from '@martyrs/src/modules/auth/views/store/auth.js';
|
|
108
|
+
import { actions as playlistsActions } from '../../store/playlists.js';
|
|
109
|
+
|
|
110
|
+
const emit = defineEmits(['created', 'cancel']);
|
|
111
|
+
|
|
112
|
+
// Form data
|
|
113
|
+
const form = reactive({
|
|
114
|
+
title: '',
|
|
115
|
+
description: '',
|
|
116
|
+
isPublic: true,
|
|
117
|
+
coverUrl: '',
|
|
118
|
+
isCollaborative: false,
|
|
119
|
+
tracks: []
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
// Validation
|
|
123
|
+
const validationErrors = reactive({});
|
|
124
|
+
|
|
125
|
+
// Form submission
|
|
126
|
+
const submitForm = async () => {
|
|
127
|
+
// Validate form
|
|
128
|
+
validationErrors.title = !form.title ? { message: 'Playlist name is required' } : null;
|
|
129
|
+
|
|
130
|
+
// If there are validation errors, don't submit
|
|
131
|
+
if (Object.values(validationErrors).some(error => error !== null)) {
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Prepare playlist data
|
|
136
|
+
const playlistData = {
|
|
137
|
+
...form,
|
|
138
|
+
creator: {
|
|
139
|
+
type: 'User',
|
|
140
|
+
target: authState.user._id
|
|
141
|
+
},
|
|
142
|
+
owner: {
|
|
143
|
+
type: 'User',
|
|
144
|
+
target: authState.user._id
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
try {
|
|
149
|
+
const playlist = await playlistsActions.createPlaylist(playlistData);
|
|
150
|
+
emit('created', playlist);
|
|
151
|
+
} catch (error) {
|
|
152
|
+
console.error('Error creating playlist:', error);
|
|
153
|
+
// Handle error (could add form-level error message)
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
</script>
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<!-- components/forms/SearchForm.vue -->
|
|
2
|
+
<template>
|
|
3
|
+
<div class="search-form flex-v-center flex bg-dark-transp-50 pd-thin radius-extra">
|
|
4
|
+
<IconSearch class="i-small mn-r-small" fill="rgb(var(--grey))"/>
|
|
5
|
+
<input
|
|
6
|
+
ref="searchInput"
|
|
7
|
+
v-model="searchQuery"
|
|
8
|
+
type="text"
|
|
9
|
+
:placeholder="placeholder"
|
|
10
|
+
class="bg-transparent border-none t-white flex-1"
|
|
11
|
+
@keydown.enter="handleSearch"
|
|
12
|
+
/>
|
|
13
|
+
<Button
|
|
14
|
+
v-if="searchQuery.length > 0"
|
|
15
|
+
@click="clearSearch"
|
|
16
|
+
class="bg-transparent border-none pd-zero"
|
|
17
|
+
:showLoader="false"
|
|
18
|
+
:showSucces="false"
|
|
19
|
+
>
|
|
20
|
+
<IconCross class="i-small" fill="rgb(var(--grey))"/>
|
|
21
|
+
</Button>
|
|
22
|
+
</div>
|
|
23
|
+
</template>
|
|
24
|
+
|
|
25
|
+
<script setup>
|
|
26
|
+
import { ref, watchEffect, defineEmits } from 'vue';
|
|
27
|
+
import Button from '@martyrs/src/components/Button/Button.vue';
|
|
28
|
+
import IconSearch from '@martyrs/src/modules/icons/navigation/IconSearch.vue';
|
|
29
|
+
import IconCross from '@martyrs/src/modules/icons/navigation/IconCross.vue';
|
|
30
|
+
|
|
31
|
+
const props = defineProps({
|
|
32
|
+
placeholder: {
|
|
33
|
+
type: String,
|
|
34
|
+
default: 'Search...'
|
|
35
|
+
},
|
|
36
|
+
initialQuery: {
|
|
37
|
+
type: String,
|
|
38
|
+
default: ''
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
const emit = defineEmits(['search']);
|
|
43
|
+
|
|
44
|
+
const searchInput = ref(null);
|
|
45
|
+
const searchQuery = ref(props.initialQuery);
|
|
46
|
+
|
|
47
|
+
const handleSearch = () => {
|
|
48
|
+
if (searchQuery.value.trim()) {
|
|
49
|
+
emit('search', searchQuery.value.trim());
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
const clearSearch = () => {
|
|
54
|
+
searchQuery.value = '';
|
|
55
|
+
searchInput.value.focus();
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
watchEffect(() => {
|
|
59
|
+
// Update search query when initialQuery prop changes
|
|
60
|
+
if (props.initialQuery !== searchQuery.value) {
|
|
61
|
+
searchQuery.value = props.initialQuery;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
</script>
|
|
65
|
+
|
|
66
|
+
<style scoped>
|
|
67
|
+
.search-form {
|
|
68
|
+
transition: background-color 0.2s ease;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.search-form:focus-within {
|
|
72
|
+
background-color: rgba(var(--dark), 0.8);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
input::placeholder {
|
|
76
|
+
color: rgba(var(--grey), 0.8);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
input:focus {
|
|
80
|
+
outline: none;
|
|
81
|
+
}
|
|
82
|
+
</style>
|