@ozdao/martyrs 0.2.494 → 0.2.496
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/index.cjs +4 -4
- package/dist/_virtual/index.js +4 -4
- package/dist/_virtual/index2.cjs +4 -4
- package/dist/_virtual/index2.js +4 -4
- package/dist/builder.cjs +41 -42
- package/dist/builder.js +43 -44
- package/dist/globals.server.cjs +13 -2
- package/dist/globals.server.js +13 -2
- package/dist/martyrs/src/components/Block/Block.vue.cjs +1 -1
- package/dist/martyrs/src/components/Block/Block.vue.js +1 -1
- package/dist/martyrs/src/components/Chips/{Chips.vue.cjs → Chips.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Chips/Chips.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Chips/{Chips.vue.js → Chips.vue2.js} +2 -2
- package/dist/martyrs/src/components/Chips/Chips.vue2.js.map +1 -0
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.cjs → Dropdown.vue2.cjs} +2 -2
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.cjs.map +1 -0
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.js → Dropdown.vue2.js} +2 -2
- package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.cjs.map → Dropdown.vue2.js.map} +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.cjs +1 -1
- package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +1 -1
- package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +1 -1
- package/dist/martyrs/src/components/Menu/{Menu.vue2.cjs → Menu.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Menu/Menu.vue.cjs.map +1 -0
- package/dist/martyrs/src/components/Menu/{Menu.vue2.js → Menu.vue.js} +2 -2
- package/dist/martyrs/src/components/Menu/Menu.vue.js.map +1 -0
- package/dist/martyrs/src/components/Tooltip/{Tooltip.vue2.cjs → Tooltip.vue.cjs} +2 -2
- package/dist/martyrs/src/components/Tooltip/{Tooltip.vue2.js.map → Tooltip.vue.cjs.map} +1 -1
- package/dist/martyrs/src/components/Tooltip/{Tooltip.vue2.js → Tooltip.vue.js} +2 -2
- package/dist/martyrs/src/components/Tooltip/Tooltip.vue.js.map +1 -0
- 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/community/components/blocks/CardBlogpost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
- package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs +1 -1
- package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +1 -1
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +2 -2
- package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -2
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
- package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
- package/dist/martyrs/src/modules/globals/globals.client.cjs +1 -1
- package/dist/martyrs/src/modules/globals/globals.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/globals.client.js +1 -1
- 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/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/layouts/Client.vue.cjs +28 -13
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +28 -13
- package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js.map +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/router/scrollBehavior.cjs +1 -1
- package/dist/martyrs/src/modules/globals/views/router/scrollBehavior.cjs.map +1 -1
- package/dist/martyrs/src/modules/globals/views/router/scrollBehavior.js +1 -1
- package/dist/martyrs/src/modules/globals/views/router/scrollBehavior.js.map +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +2 -2
- package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.cjs +95 -0
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.cjs.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +95 -0
- package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js.map +1 -0
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
- package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +2 -2
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +2 -2
- package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +127 -175
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +136 -184
- package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +5 -5
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +5 -5
- package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +5 -5
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +5 -5
- package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +97 -144
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +113 -160
- package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +7 -7
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +7 -7
- package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +164 -170
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +185 -191
- package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -1
- package/dist/martyrs/src/modules/music/music.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/music/music.client.js.map +1 -1
- package/dist/martyrs/src/modules/music/router/music.cjs +2 -2
- package/dist/martyrs/src/modules/music/router/music.js +2 -2
- package/dist/martyrs/src/modules/notifications/notifications.client.cjs +1 -1
- package/dist/martyrs/src/modules/notifications/notifications.client.cjs.map +1 -1
- package/dist/martyrs/src/modules/notifications/notifications.client.js +1 -1
- package/dist/martyrs/src/modules/notifications/notifications.client.js.map +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +1 -1
- package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.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 +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs +2 -2
- package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.js +2 -2
- package/dist/martyrs/src/modules/organizations/router/organizations.cjs +1 -1
- package/dist/martyrs/src/modules/organizations/router/organizations.js +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.cjs +2 -2
- package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +2 -2
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +1 -1
- package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +1 -1
- package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
- package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
- 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.css +1 -1
- package/dist/style.css +18 -5
- package/package.json +1 -1
- package/src/builder/rspack/rspack.config.ssr.client.js +40 -40
- package/src/modules/globals/controllers/classes/globals.websocket.js +11 -2
- package/src/modules/globals/globals.client.js +1 -2
- package/src/modules/globals/views/components/layouts/Client.vue +13 -11
- package/src/modules/globals/views/router/scrollBehavior.js +1 -1
- package/src/modules/music/README.md +2 -0
- package/src/modules/music/components/SidebarMusic.vue +7 -7
- package/src/modules/music/components/cards/ArtistCardSmall.vue +92 -0
- package/src/modules/music/components/cards/TrackListCard.vue +1 -1
- package/src/modules/music/components/forms/SearchForm.vue +1 -1
- package/src/modules/music/components/pages/Album.vue +44 -83
- package/src/modules/music/components/pages/Artist.vue +5 -5
- package/src/modules/music/components/pages/MusicLibrary.vue +5 -5
- package/src/modules/music/components/pages/Playlist.vue +35 -53
- package/src/modules/music/components/pages/SearchResults.vue +6 -6
- package/src/modules/music/components/pages/Track.vue +66 -87
- package/src/modules/music/music.client.js +1 -1
- package/src/modules/notifications/notifications.client.js +1 -1
- package/src/styles/base/all.scss +1 -0
- package/dist/martyrs/src/components/Chips/Chips.vue.cjs.map +0 -1
- package/dist/martyrs/src/components/Chips/Chips.vue.js.map +0 -1
- package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +0 -1
- package/dist/martyrs/src/components/Menu/Menu.vue2.cjs.map +0 -1
- package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +0 -1
- package/dist/martyrs/src/components/Tooltip/Tooltip.vue2.cjs.map +0 -1
|
@@ -17,14 +17,11 @@
|
|
|
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
|
-
<
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
/>
|
|
26
|
-
</div>
|
|
27
|
-
|
|
20
|
+
<Media
|
|
21
|
+
:url="album.coverArt || '/logo/logo-placeholder.jpg'"
|
|
22
|
+
:alt="album.title"
|
|
23
|
+
class="aspect-1x1 w-100 w-max-30r mn-b-small radius-medium o-hidden"
|
|
24
|
+
/>
|
|
28
25
|
<!-- Quick Stats -->
|
|
29
26
|
<div class="stats-grid grid cols-2 gap-small">
|
|
30
27
|
<div class="stat-card bg-light pd-medium radius-medium t-center">
|
|
@@ -42,10 +39,10 @@
|
|
|
42
39
|
<div class="album-details-section">
|
|
43
40
|
<!-- Album Type Badge -->
|
|
44
41
|
<div class="flex items-center gap-small mn-b-small">
|
|
45
|
-
<span class="
|
|
42
|
+
<span class="bg-light t-medium pd-thin radius-thin uppercase t-small t-uppercase">
|
|
46
43
|
{{ album.type }}
|
|
47
44
|
</span>
|
|
48
|
-
<span v-if="album.status === 'published'" class="
|
|
45
|
+
<span v-if="album.status === 'published'" class="bg-light t-medium pd-thin radius-thin uppercase t-small t-uppercase">
|
|
49
46
|
Published
|
|
50
47
|
</span>
|
|
51
48
|
</div>
|
|
@@ -59,44 +56,49 @@
|
|
|
59
56
|
@click="playAlbum"
|
|
60
57
|
color="primary"
|
|
61
58
|
size="medium"
|
|
62
|
-
class="flex-1 flex-center gap-thin"
|
|
59
|
+
class="flex-1 t-white bg-black radius-thin flex-center gap-thin"
|
|
63
60
|
>
|
|
64
|
-
<IconPlay class="
|
|
61
|
+
<IconPlay fill="rgb(var(--white))" class="i-medium" />
|
|
65
62
|
Play All
|
|
66
63
|
</Button>
|
|
67
|
-
|
|
64
|
+
|
|
68
65
|
<Button
|
|
69
|
-
@click="
|
|
70
|
-
|
|
66
|
+
@click="shufflePlay"
|
|
67
|
+
color="primary"
|
|
71
68
|
size="medium"
|
|
72
|
-
class="
|
|
69
|
+
class="flex-1 bg-light radius-thin flex-center gap-thin"
|
|
73
70
|
>
|
|
74
|
-
<
|
|
71
|
+
<IconShuffle class="i-medium" />
|
|
72
|
+
Shuffle
|
|
75
73
|
</Button>
|
|
76
|
-
|
|
74
|
+
|
|
77
75
|
<Button
|
|
78
|
-
@click="
|
|
79
|
-
color="
|
|
76
|
+
@click="toggleFavorite"
|
|
77
|
+
color="primary"
|
|
80
78
|
size="medium"
|
|
81
|
-
class="
|
|
79
|
+
class="flex-1 bg-light radius-thin flex-center gap-thin"
|
|
82
80
|
>
|
|
83
|
-
<
|
|
81
|
+
<IconLike class="i-medium" :fill="isFavorite ? 'rgb(var(--main)':'rgb(var(--black)'" />
|
|
82
|
+
{{isFavorite ? 'Liked' : 'Like'}}
|
|
84
83
|
</Button>
|
|
85
|
-
|
|
86
|
-
<Dropdown v-model="showDropdown" class="relative">
|
|
84
|
+
|
|
85
|
+
<Dropdown :label="{component: IconEllipsis, class: 'bg-light radius-thin pd-thin i-big' }" v-model="showDropdown" class="relative">
|
|
87
86
|
<template #trigger>
|
|
88
87
|
<Button color="transp" size="medium" class="w-3r h-3r radius-full">
|
|
89
88
|
<IconEllipsis class="w-1-25r h-1-25r" />
|
|
90
89
|
</Button>
|
|
91
90
|
</template>
|
|
92
91
|
<template #default>
|
|
93
|
-
<div class="dropdown-menu bg-
|
|
92
|
+
<div class="dropdown-menu bg-white pd-small radius-medium shadow-big mn-t-thin">
|
|
94
93
|
<Button @click="addToQueue" color="transp" size="small" class="w-100 justify-start">
|
|
95
94
|
Add to Queue
|
|
96
95
|
</Button>
|
|
97
96
|
<Button @click="copyLink" color="transp" size="small" class="w-100 justify-start">
|
|
98
97
|
Copy Link
|
|
99
98
|
</Button>
|
|
99
|
+
<Button @click="addToPlaylist" color="transp" size="small" class="w-100 justify-start">
|
|
100
|
+
Add to Playlist
|
|
101
|
+
</Button>
|
|
100
102
|
<template v-if="isOwner">
|
|
101
103
|
<hr class="mn-v-thin border-dark-transp-10" />
|
|
102
104
|
<Button @click="editAlbum" color="transp" size="small" class="w-100 justify-start">
|
|
@@ -112,56 +114,26 @@
|
|
|
112
114
|
</div>
|
|
113
115
|
|
|
114
116
|
<!-- Artists Cards -->
|
|
115
|
-
<div class="artists-section mn-b-
|
|
116
|
-
<h3 class="t-medium mn-b-small" v-if="album.artists
|
|
117
|
+
<div class="artists-section mn-b-medium">
|
|
118
|
+
<h3 class="t-medium mn-b-small" v-if="album.artists">Artists</h3>
|
|
117
119
|
<div class="flex flex-col gap-small">
|
|
118
|
-
<
|
|
120
|
+
<ArtistCardSmall
|
|
119
121
|
v-for="artist in album.artists"
|
|
120
122
|
:key="artist._id"
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
>
|
|
127
|
-
<div class="artist-avatar">
|
|
128
|
-
<Media
|
|
129
|
-
v-if="artist.photoUrl"
|
|
130
|
-
:url="artist.photoUrl"
|
|
131
|
-
:alt="artist.name"
|
|
132
|
-
class="w-4r h-4r radius-full object-cover"
|
|
133
|
-
/>
|
|
134
|
-
<div v-else class="w-4r h-4r radius-full bg-primary flex-center ">
|
|
135
|
-
{{ artist.name.charAt(0) }}
|
|
136
|
-
</div>
|
|
137
|
-
</div>
|
|
138
|
-
<div>
|
|
139
|
-
<div class="flex items-center gap-thin">
|
|
140
|
-
<span class="t-large ">{{ artist.name }}</span>
|
|
141
|
-
<IconVerified v-if="artist.isVerified" class="w-1r h-1r t-primary" />
|
|
142
|
-
</div>
|
|
143
|
-
<span class="t-small t-transp">Artist</span>
|
|
144
|
-
</div>
|
|
145
|
-
</router-link>
|
|
146
|
-
<Button
|
|
147
|
-
v-if="!isOwner"
|
|
148
|
-
@click="() => toggleFollowArtist(artist._id)"
|
|
149
|
-
:color="followedArtists.includes(artist._id) ? 'primary' : 'transp'"
|
|
150
|
-
size="small"
|
|
151
|
-
>
|
|
152
|
-
{{ followedArtists.includes(artist._id) ? 'Following' : 'Follow' }}
|
|
153
|
-
</Button>
|
|
154
|
-
</div>
|
|
123
|
+
:artist="artist"
|
|
124
|
+
:is-following="followedArtists.includes(artist._id)"
|
|
125
|
+
:show-follow-button="!isOwner"
|
|
126
|
+
@toggle-follow="toggleFollowArtist"
|
|
127
|
+
/>
|
|
155
128
|
</div>
|
|
156
129
|
</div>
|
|
157
130
|
|
|
158
131
|
<!-- Metadata Cards -->
|
|
159
|
-
<
|
|
132
|
+
<h3 class="t-medium mn-b-small">Metadata</h3>
|
|
133
|
+
<div class="metadata-grid grid cols-2 gap-small mn-b-medium">
|
|
160
134
|
<!-- Release Date -->
|
|
161
135
|
<div class="metadata-card bg-light pd-medium radius-medium flex items-center gap-medium">
|
|
162
|
-
<
|
|
163
|
-
<IconCalendar class="w-1-5r h-1-5r t-primary" />
|
|
164
|
-
</div>
|
|
136
|
+
<IconCalendar class="i-regular t-primary" />
|
|
165
137
|
<div>
|
|
166
138
|
<div class="t-small t-transp t-uppercase">Released</div>
|
|
167
139
|
<div class="t-medium ">{{ formatDate(album.releaseDate) }}</div>
|
|
@@ -170,9 +142,7 @@
|
|
|
170
142
|
|
|
171
143
|
<!-- Total Duration -->
|
|
172
144
|
<div class="metadata-card bg-light pd-medium radius-medium flex items-center gap-medium">
|
|
173
|
-
<
|
|
174
|
-
<IconClock class="w-1-5r h-1-5r t-primary" />
|
|
175
|
-
</div>
|
|
145
|
+
<IconClock class="i-regular t-primary" />
|
|
176
146
|
<div>
|
|
177
147
|
<div class="t-small t-transp t-uppercase">Duration</div>
|
|
178
148
|
<div class="t-medium ">{{ totalDuration }}</div>
|
|
@@ -181,9 +151,7 @@
|
|
|
181
151
|
|
|
182
152
|
<!-- Label -->
|
|
183
153
|
<div v-if="album.label" class="metadata-card bg-light pd-medium radius-medium flex items-center gap-medium">
|
|
184
|
-
<
|
|
185
|
-
<IconDisc class="w-1-5r h-1-5r t-primary" />
|
|
186
|
-
</div>
|
|
154
|
+
<IconDisc class="i-regular t-primary" />
|
|
187
155
|
<div>
|
|
188
156
|
<div class="t-small t-transp t-uppercase">Label</div>
|
|
189
157
|
<div class="t-medium ">{{ album.label }}</div>
|
|
@@ -192,9 +160,7 @@
|
|
|
192
160
|
|
|
193
161
|
<!-- Visibility -->
|
|
194
162
|
<div class="metadata-card bg-light pd-medium radius-medium flex items-center gap-medium">
|
|
195
|
-
<
|
|
196
|
-
<IconEye class="w-1-5r h-1-5r t-primary" />
|
|
197
|
-
</div>
|
|
163
|
+
<IconEye class="i-regular t-primary" />
|
|
198
164
|
<div>
|
|
199
165
|
<div class="t-small t-transp t-uppercase">Visibility</div>
|
|
200
166
|
<div class="t-medium ">{{ album.isPublic ? 'Public' : 'Private' }}</div>
|
|
@@ -209,7 +175,7 @@
|
|
|
209
175
|
<span
|
|
210
176
|
v-for="genre in album.genres"
|
|
211
177
|
:key="genre"
|
|
212
|
-
class="tag bg-
|
|
178
|
+
class="tag bg-main t-medium pd-thin radius-thin t-small cursor-pointer"
|
|
213
179
|
>
|
|
214
180
|
{{ genre }}
|
|
215
181
|
</span>
|
|
@@ -222,12 +188,6 @@
|
|
|
222
188
|
</span>
|
|
223
189
|
</div>
|
|
224
190
|
</div>
|
|
225
|
-
|
|
226
|
-
<!-- Description -->
|
|
227
|
-
<div v-if="album.description" class="description-section bg-light pd-medium radius-medium mn-b-medium">
|
|
228
|
-
<h3 class="t-medium mn-b-small">About</h3>
|
|
229
|
-
<p class="t-transp">{{ album.description }}</p>
|
|
230
|
-
</div>
|
|
231
191
|
</div>
|
|
232
192
|
</div>
|
|
233
193
|
|
|
@@ -270,7 +230,7 @@
|
|
|
270
230
|
<h2 class="h2">More Albums</h2>
|
|
271
231
|
<router-link
|
|
272
232
|
v-if="album.artists && album.artists[0]"
|
|
273
|
-
:to="
|
|
233
|
+
:to="{ name: 'artist', params: { url: album.artists[0].url } }"
|
|
274
234
|
class="t-primary hover-opacity"
|
|
275
235
|
>
|
|
276
236
|
See all
|
|
@@ -309,6 +269,7 @@ import IconVerified from '@martyrs/src/modules/icons/navigation/IconCheckmark.vu
|
|
|
309
269
|
// Components
|
|
310
270
|
import TrackListCard from '../cards/TrackListCard.vue';
|
|
311
271
|
import AlbumCard from '../cards/AlbumCard.vue';
|
|
272
|
+
import ArtistCardSmall from '../cards/ArtistCardSmall.vue';
|
|
312
273
|
|
|
313
274
|
// Store
|
|
314
275
|
import { state as albumsState, actions as albumsActions } from '../../store/albums.js';
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
class="w-100 t-white h-50vh pos-relative"
|
|
23
23
|
:style="artist.coverUrl ? `background-image: url(${FILE_SERVER_URL + artist.coverUrl}); background-size: cover; background-position: center;` : ''"
|
|
24
24
|
>
|
|
25
|
-
<div class="pos-absolute pos-t-0 pos-l-0 w-100 h-100 bg-blur-small" :class="artist.coverUrl ? 'bg-black-transp-50' : 'bg-
|
|
25
|
+
<div class="pos-absolute pos-t-0 pos-l-0 w-100 h-100 bg-blur-small" :class="artist.coverUrl ? 'bg-black-transp-50' : 'bg-dark'"></div>
|
|
26
26
|
|
|
27
27
|
<!-- Artist actions for edit/manage -->
|
|
28
28
|
<div v-if="isOwner" class="pos-absolute pos-t-medium pos-r-medium z-index-1">
|
|
@@ -50,12 +50,12 @@
|
|
|
50
50
|
<div class="w-15r h-15r radius-medium o-hidden mn-r-medium bs-black mobile:mn-r-0 mobile:mn-b-medium">
|
|
51
51
|
<img
|
|
52
52
|
v-if="artist.photoUrl"
|
|
53
|
-
:src="FILE_SERVER_URL + artist.photoUrl"
|
|
53
|
+
:src="FILE_SERVER_URL + (artist.photoUrl || '/logo/logo-placeholder.jpg')"
|
|
54
54
|
alt="Artist photo"
|
|
55
55
|
class="w-100 h-100 object-fit-cover"
|
|
56
56
|
/>
|
|
57
|
-
<div v-else class="w-100 h-100 bg-
|
|
58
|
-
<span class="h1">{{ artist?.name?.[0] || 'A' }}</span>
|
|
57
|
+
<div v-else class="w-100 h-100 bg-black flex-center flex">
|
|
58
|
+
<span class="h1 t-white">{{ artist?.name?.[0] || 'A' }}</span>
|
|
59
59
|
</div>
|
|
60
60
|
</div>
|
|
61
61
|
|
|
@@ -190,7 +190,7 @@
|
|
|
190
190
|
</div>
|
|
191
191
|
|
|
192
192
|
<!-- Singles section -->
|
|
193
|
-
<div v-if="discography.singles.length > 0" class="bg-light pd-medium radius-medium">
|
|
193
|
+
<div v-if="discography.singles.length > 0" class="bg-light pd-medium mn-b-medium radius-medium">
|
|
194
194
|
<h2 class="h3 mn-b-medium">Singles & EPs</h2>
|
|
195
195
|
|
|
196
196
|
<div class="cols-1 gap-small">
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
:key="tab.id"
|
|
12
12
|
@click="activeTab = tab.id"
|
|
13
13
|
:class="[
|
|
14
|
-
activeTab === tab.id ? 'bg-white t-black' : 'bg-
|
|
14
|
+
activeTab === tab.id ? 'bg-white t-black' : 'bg-white-transp-50 hover-bg-white',
|
|
15
15
|
]"
|
|
16
16
|
class="radius-extra pd-small"
|
|
17
17
|
:showLoader="false"
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
empty: {
|
|
47
47
|
title: 'No playlists yet',
|
|
48
48
|
description: 'Create your first playlist to see it here',
|
|
49
|
-
class: 'pd-big bg-
|
|
49
|
+
class: 'pd-big bg-white-transp-10 radius-medium'
|
|
50
50
|
}
|
|
51
51
|
}"
|
|
52
52
|
class="gap-medium"
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
empty: {
|
|
87
87
|
title: 'No albums yet',
|
|
88
88
|
description: 'Upload your first album to see it here',
|
|
89
|
-
class: 'pd-big bg-
|
|
89
|
+
class: 'pd-big bg-white-transp-10 radius-medium'
|
|
90
90
|
}
|
|
91
91
|
}"
|
|
92
92
|
class="gap-medium"
|
|
@@ -126,7 +126,7 @@
|
|
|
126
126
|
empty: {
|
|
127
127
|
title: 'No artists yet',
|
|
128
128
|
description: 'Create your first artist profile to see it here',
|
|
129
|
-
class: 'pd-big bg-
|
|
129
|
+
class: 'pd-big bg-white-transp-10 radius-medium'
|
|
130
130
|
}
|
|
131
131
|
}"
|
|
132
132
|
class="gap-medium"
|
|
@@ -166,7 +166,7 @@
|
|
|
166
166
|
empty: {
|
|
167
167
|
title: 'No tracks yet',
|
|
168
168
|
description: 'Upload your first track to see it here',
|
|
169
|
-
class: 'pd-big bg-
|
|
169
|
+
class: 'pd-big bg-white-transp-10 radius-medium'
|
|
170
170
|
}
|
|
171
171
|
}"
|
|
172
172
|
class="gap-medium"
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<!-- Playlist Content -->
|
|
10
10
|
<div v-if="playlist" class="playlist-content cols-2-fit-content mobile:cols-1 gap-big">
|
|
11
11
|
<!-- Left Column - Cover & Stats -->
|
|
12
|
-
<div class="pos-sticky pos-t-0 mobile:pos-relative playlist-cover-section">
|
|
12
|
+
<div class="pos-sticky w-max-30r 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
|
|
@@ -36,13 +36,13 @@
|
|
|
36
36
|
<div class="playlist-details-section">
|
|
37
37
|
<!-- Playlist Type Badge -->
|
|
38
38
|
<div class="flex items-center gap-small mn-b-small">
|
|
39
|
-
<span class="
|
|
39
|
+
<span class="bg-light t-medium pd-thin radius-thin uppercase t-small t-uppercase">
|
|
40
40
|
Playlist
|
|
41
41
|
</span>
|
|
42
|
-
<span v-if="playlist.isCollaborative" class="
|
|
42
|
+
<span v-if="playlist.isCollaborative" class="bg-light t-medium pd-thin radius-thin uppercase t-small t-uppercase">
|
|
43
43
|
Collaborative
|
|
44
44
|
</span>
|
|
45
|
-
<span v-if="playlist.status === 'published'" class="
|
|
45
|
+
<span v-if="playlist.status === 'published'" class="bg-light t-medium pd-thin radius-thin uppercase t-small t-uppercase">
|
|
46
46
|
Published
|
|
47
47
|
</span>
|
|
48
48
|
</div>
|
|
@@ -56,9 +56,9 @@
|
|
|
56
56
|
@click="playPlaylist"
|
|
57
57
|
color="primary"
|
|
58
58
|
size="medium"
|
|
59
|
-
class="flex-1 flex-center gap-thin"
|
|
59
|
+
class="flex-1 t-white bg-black radius-thin flex-center gap-thin"
|
|
60
60
|
>
|
|
61
|
-
<IconPlay class="i-medium" />
|
|
61
|
+
<IconPlay fill="rgb(var(--white))" class="i-medium" />
|
|
62
62
|
Play All
|
|
63
63
|
</Button>
|
|
64
64
|
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
@click="shufflePlay"
|
|
67
67
|
color="primary"
|
|
68
68
|
size="medium"
|
|
69
|
-
class="flex-1 flex-center gap-thin"
|
|
69
|
+
class="flex-1 bg-light radius-thin flex-center gap-thin"
|
|
70
70
|
>
|
|
71
71
|
<IconShuffle class="i-medium" />
|
|
72
72
|
Shuffle
|
|
@@ -76,35 +76,35 @@
|
|
|
76
76
|
@click="toggleFollow"
|
|
77
77
|
color="primary"
|
|
78
78
|
size="medium"
|
|
79
|
-
class="flex-1 flex-center gap-thin"
|
|
79
|
+
class="flex-1 bg-light radius-thin flex-center gap-thin"
|
|
80
80
|
>
|
|
81
81
|
{{isFollowing ? 'Follow' : 'Unfollow'}}
|
|
82
82
|
</Button>
|
|
83
83
|
|
|
84
84
|
|
|
85
|
-
<Dropdown :label="{component: IconEllipsis, class: 'i-
|
|
85
|
+
<Dropdown :label="{component: IconEllipsis, class: 'bg-light radius-thin pd-thin i-big' }" v-model="showDropdown" class="relative">
|
|
86
86
|
<template #trigger>
|
|
87
87
|
<Button color="transp" size="medium" class="w-3r h-3r radius-full">
|
|
88
88
|
<IconEllipsis class="w-1-25r h-1-25r" />
|
|
89
89
|
</Button>
|
|
90
90
|
</template>
|
|
91
91
|
<template #default>
|
|
92
|
-
<div class="dropdown-menu bg-
|
|
93
|
-
<Button @click="addToQueue" color="transp" size="small" class="w-100 justify-start">
|
|
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
94
|
Add to Queue
|
|
95
95
|
</Button>
|
|
96
|
-
<Button @click="copyLink" color="transp" size="small" class="w-100 justify-start">
|
|
96
|
+
<Button @click="copyLink" color="transp" size="small" class="w-100 t-nowrap justify-start">
|
|
97
97
|
Copy Link
|
|
98
98
|
</Button>
|
|
99
99
|
<template v-if="isOwner || isCollaborator">
|
|
100
100
|
<hr class="mn-v-thin border-dark-transp-10" />
|
|
101
|
-
<Button @click="editPlaylist" color="transp" size="small" class="w-100 justify-start">
|
|
101
|
+
<Button @click="editPlaylist" color="transp" size="small" class="w-100 t-nowrap justify-start">
|
|
102
102
|
Edit Playlist
|
|
103
103
|
</Button>
|
|
104
|
-
<Button v-if="isOwner" @click="toggleCollaborative" color="transp" size="small" class="w-100 justify-start">
|
|
104
|
+
<Button v-if="isOwner" @click="toggleCollaborative" color="transp" size="small" class="t-nowrap w-100 justify-start">
|
|
105
105
|
{{ playlist.isCollaborative ? 'Make Private' : 'Make Collaborative' }}
|
|
106
106
|
</Button>
|
|
107
|
-
<Button v-if="isOwner" @click="deletePlaylist" color="danger" size="small" class="w-100 justify-start">
|
|
107
|
+
<Button v-if="isOwner" @click="deletePlaylist" color="danger" size="small" class="t-nowrap w-100 justify-start">
|
|
108
108
|
Delete Playlist
|
|
109
109
|
</Button>
|
|
110
110
|
</template>
|
|
@@ -113,41 +113,21 @@
|
|
|
113
113
|
</Dropdown>
|
|
114
114
|
</div>
|
|
115
115
|
|
|
116
|
-
|
|
117
|
-
<div class="owner-section mn-b-big">
|
|
116
|
+
<div class="artists-section mn-b-medium">
|
|
118
117
|
<h3 class="t-medium mn-b-small">Created by</h3>
|
|
119
|
-
<div class="
|
|
120
|
-
<
|
|
121
|
-
:
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
{{ getPlaylistOwnerName(playlist).charAt(0) }}
|
|
133
|
-
</div>
|
|
134
|
-
</div>
|
|
135
|
-
<div>
|
|
136
|
-
<div class="flex items-center gap-thin">
|
|
137
|
-
<span class="t-large ">{{ getPlaylistOwnerName(playlist) }}</span>
|
|
138
|
-
<IconVerified v-if="getOwnerData(playlist)?.isVerified" class="w-1r h-1r t-primary" />
|
|
139
|
-
</div>
|
|
140
|
-
<span class="t-small t-transp">{{ playlist.creator?.type || 'User' }}</span>
|
|
141
|
-
</div>
|
|
142
|
-
</router-link>
|
|
143
|
-
<Button
|
|
144
|
-
v-if="!isOwner && authState.user"
|
|
145
|
-
@click="() => toggleFollowUser(getOwnerId(playlist))"
|
|
146
|
-
:color="followedUsers.includes(getOwnerId(playlist)) ? 'primary' : 'transp'"
|
|
147
|
-
size="small"
|
|
148
|
-
>
|
|
149
|
-
{{ followedUsers.includes(getOwnerId(playlist)) ? 'Following' : 'Follow' }}
|
|
150
|
-
</Button>
|
|
118
|
+
<div class="flex flex-col gap-small">
|
|
119
|
+
<ArtistCardSmall
|
|
120
|
+
:artist="{
|
|
121
|
+
_id: playlist.creator.target,
|
|
122
|
+
to: { name: 'User Profile', params: { _id: playlist.creator.target } },
|
|
123
|
+
photoUrl: null,
|
|
124
|
+
name: playlist.creator.target,
|
|
125
|
+
isVerified: false
|
|
126
|
+
}"
|
|
127
|
+
:is-following="followedUsers.includes(playlist.creator.target)"
|
|
128
|
+
:show-follow-button="!isOwner"
|
|
129
|
+
@toggle-follow="toggleFollowUser(playlist.creator.target)"
|
|
130
|
+
/>
|
|
151
131
|
</div>
|
|
152
132
|
</div>
|
|
153
133
|
|
|
@@ -163,7 +143,7 @@
|
|
|
163
143
|
<Media
|
|
164
144
|
v-if="collaborator.photoUrl"
|
|
165
145
|
:url="collaborator.photoUrl"
|
|
166
|
-
class="
|
|
146
|
+
class="i-regular radius-full object-cover"
|
|
167
147
|
/>
|
|
168
148
|
<span class="t-small">{{ collaborator.name || collaborator.profile?.name || 'User' }}</span>
|
|
169
149
|
</div>
|
|
@@ -171,7 +151,8 @@
|
|
|
171
151
|
</div>
|
|
172
152
|
|
|
173
153
|
<!-- Metadata Cards -->
|
|
174
|
-
<
|
|
154
|
+
<h3 class="t-medium mn-b-small">Metadata</h3>
|
|
155
|
+
<div class="metadata-grid grid cols-2 gap-small mn-b-medium">
|
|
175
156
|
<!-- Created Date -->
|
|
176
157
|
<div class="metadata-card bg-light pd-medium radius-medium flex items-center gap-medium">
|
|
177
158
|
<IconCalendar class="i-medium t-primary" />
|
|
@@ -306,7 +287,7 @@
|
|
|
306
287
|
<Popup
|
|
307
288
|
:isPopupOpen="showEditModal && (isOwner || isCollaborator)"
|
|
308
289
|
@close-popup="showEditModal = false"
|
|
309
|
-
class="bg-
|
|
290
|
+
class="bg-white pd-medium w-m-30r radius-medium"
|
|
310
291
|
>
|
|
311
292
|
<PlaylistForm
|
|
312
293
|
:editMode="true"
|
|
@@ -320,7 +301,7 @@
|
|
|
320
301
|
<Popup
|
|
321
302
|
:isPopupOpen="showDeleteModal"
|
|
322
303
|
@close-popup="showDeleteModal = false"
|
|
323
|
-
class="bg-
|
|
304
|
+
class="bg-white pd-medium w-m-25r radius-medium"
|
|
324
305
|
>
|
|
325
306
|
<h3 class="mn-b-medium">Delete Playlist</h3>
|
|
326
307
|
<p class="t-transp mn-b-medium">Are you sure you want to delete "{{ playlist.title }}"? This action cannot be undone.</p>
|
|
@@ -371,6 +352,7 @@ import IconVerified from '@martyrs/src/modules/icons/navigation/IconCheckmark.vu
|
|
|
371
352
|
import TrackListCard from '../cards/TrackListCard.vue';
|
|
372
353
|
import PlaylistCard from '../cards/PlaylistCard.vue';
|
|
373
354
|
import PlaylistForm from '../forms/PlaylistForm.vue';
|
|
355
|
+
import ArtistCardSmall from '../cards/ArtistCardSmall.vue';
|
|
374
356
|
|
|
375
357
|
// Store
|
|
376
358
|
import { state as playlistsState, actions as playlistsActions } from '../../store/playlists.js';
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
:key="filter.id"
|
|
18
18
|
@click="setActiveFilter(filter.id)"
|
|
19
19
|
:class="[
|
|
20
|
-
filter.id === activeFilter ? 'bg-white t-black' : 'bg-
|
|
20
|
+
filter.id === activeFilter ? 'bg-white t-black' : 'bg-white-transp-50 hover-bg-white',
|
|
21
21
|
]"
|
|
22
22
|
class="radius-extra pd-small"
|
|
23
23
|
:showLoader="false"
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
<Button
|
|
55
55
|
v-if="trackResults.length > 5 && activeFilter === 'all'"
|
|
56
56
|
@click="setActiveFilter('tracks')"
|
|
57
|
-
class="t-main bg-transparent border-none hover-bg-
|
|
57
|
+
class="t-main bg-transparent border-none hover-bg-white-transp-10 pd-thin"
|
|
58
58
|
:showLoader="false"
|
|
59
59
|
:showSucces="false"
|
|
60
60
|
>
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
<Button
|
|
82
82
|
v-if="artistResults.length > 6 && activeFilter === 'all'"
|
|
83
83
|
@click="setActiveFilter('artists')"
|
|
84
|
-
class="t-main bg-transparent border-none hover-bg-
|
|
84
|
+
class="t-main bg-transparent border-none hover-bg-white-transp-10 pd-thin"
|
|
85
85
|
:showLoader="false"
|
|
86
86
|
:showSucces="false"
|
|
87
87
|
>
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
<Button
|
|
104
104
|
v-if="albumResults.length > 5 && activeFilter === 'all'"
|
|
105
105
|
@click="setActiveFilter('albums')"
|
|
106
|
-
class="t-main bg-transparent border-none hover-bg-
|
|
106
|
+
class="t-main bg-transparent border-none hover-bg-white-transp-10 pd-thin"
|
|
107
107
|
:showLoader="false"
|
|
108
108
|
:showSucces="false"
|
|
109
109
|
>
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
<Button
|
|
126
126
|
v-if="playlistResults.length > 5 && activeFilter === 'all'"
|
|
127
127
|
@click="setActiveFilter('playlists')"
|
|
128
|
-
class="t-main bg-transparent border-none hover-bg-
|
|
128
|
+
class="t-main bg-transparent border-none hover-bg-white-transp-10 pd-thin"
|
|
129
129
|
:showLoader="false"
|
|
130
130
|
:showSucces="false"
|
|
131
131
|
>
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
<Button
|
|
148
148
|
v-if="genreResults.length > 4 && activeFilter === 'all'"
|
|
149
149
|
@click="setActiveFilter('genres')"
|
|
150
|
-
class="t-main bg-transparent border-none hover-bg-
|
|
150
|
+
class="t-main bg-transparent border-none hover-bg-white-transp-10 pd-thin"
|
|
151
151
|
:showLoader="false"
|
|
152
152
|
:showSucces="false"
|
|
153
153
|
>
|