@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.
Files changed (170) hide show
  1. package/dist/_virtual/index.cjs +4 -4
  2. package/dist/_virtual/index.js +4 -4
  3. package/dist/_virtual/index2.cjs +4 -4
  4. package/dist/_virtual/index2.js +4 -4
  5. package/dist/builder.cjs +41 -42
  6. package/dist/builder.js +43 -44
  7. package/dist/globals.server.cjs +13 -2
  8. package/dist/globals.server.js +13 -2
  9. package/dist/martyrs/src/components/Block/Block.vue.cjs +1 -1
  10. package/dist/martyrs/src/components/Block/Block.vue.js +1 -1
  11. package/dist/martyrs/src/components/Chips/{Chips.vue.cjs → Chips.vue2.cjs} +2 -2
  12. package/dist/martyrs/src/components/Chips/Chips.vue2.cjs.map +1 -0
  13. package/dist/martyrs/src/components/Chips/{Chips.vue.js → Chips.vue2.js} +2 -2
  14. package/dist/martyrs/src/components/Chips/Chips.vue2.js.map +1 -0
  15. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.cjs → Dropdown.vue2.cjs} +2 -2
  16. package/dist/martyrs/src/components/Dropdown/Dropdown.vue2.cjs.map +1 -0
  17. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.js → Dropdown.vue2.js} +2 -2
  18. package/dist/martyrs/src/components/Dropdown/{Dropdown.vue.cjs.map → Dropdown.vue2.js.map} +1 -1
  19. package/dist/martyrs/src/components/Feed/Feed.vue.cjs +1 -1
  20. package/dist/martyrs/src/components/Feed/Feed.vue.js +1 -1
  21. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.cjs +1 -1
  22. package/dist/martyrs/src/components/FieldTags/FieldTags.vue.js +1 -1
  23. package/dist/martyrs/src/components/Menu/{Menu.vue2.cjs → Menu.vue.cjs} +2 -2
  24. package/dist/martyrs/src/components/Menu/Menu.vue.cjs.map +1 -0
  25. package/dist/martyrs/src/components/Menu/{Menu.vue2.js → Menu.vue.js} +2 -2
  26. package/dist/martyrs/src/components/Menu/Menu.vue.js.map +1 -0
  27. package/dist/martyrs/src/components/Tooltip/{Tooltip.vue2.cjs → Tooltip.vue.cjs} +2 -2
  28. package/dist/martyrs/src/components/Tooltip/{Tooltip.vue2.js.map → Tooltip.vue.cjs.map} +1 -1
  29. package/dist/martyrs/src/components/Tooltip/{Tooltip.vue2.js → Tooltip.vue.js} +2 -2
  30. package/dist/martyrs/src/components/Tooltip/Tooltip.vue.js.map +1 -0
  31. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.cjs +2 -2
  32. package/dist/martyrs/src/modules/auth/views/components/pages/Profile.vue.js +2 -2
  33. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.cjs +1 -1
  34. package/dist/martyrs/src/modules/community/components/blocks/CardBlogpost.vue.js +1 -1
  35. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.cjs +1 -1
  36. package/dist/martyrs/src/modules/community/components/pages/BlogPost.vue.js +1 -1
  37. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.cjs +1 -1
  38. package/dist/martyrs/src/modules/community/components/pages/CreateBlogPost.vue.js +1 -1
  39. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.cjs +1 -1
  40. package/dist/martyrs/src/modules/events/components/blocks/CardEvent.vue.js +1 -1
  41. package/dist/martyrs/src/modules/events/components/pages/Event.vue.cjs +2 -2
  42. package/dist/martyrs/src/modules/events/components/pages/Event.vue.js +2 -2
  43. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.cjs +1 -1
  44. package/dist/martyrs/src/modules/gallery/components/sections/BackofficeGallery.vue.js +1 -1
  45. package/dist/martyrs/src/modules/globals/globals.client.cjs +1 -1
  46. package/dist/martyrs/src/modules/globals/globals.client.cjs.map +1 -1
  47. package/dist/martyrs/src/modules/globals/globals.client.js +1 -1
  48. package/dist/martyrs/src/modules/globals/globals.client.js.map +1 -1
  49. package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.cjs +1 -1
  50. package/dist/martyrs/src/modules/globals/views/classes/globals.i18n.js +1 -1
  51. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.cjs +2 -2
  52. package/dist/martyrs/src/modules/globals/views/components/blocks/CardHeader.vue.js +2 -2
  53. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs +28 -13
  54. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.cjs.map +1 -1
  55. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js +28 -13
  56. package/dist/martyrs/src/modules/globals/views/components/layouts/Client.vue.js.map +1 -1
  57. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.cjs +1 -1
  58. package/dist/martyrs/src/modules/globals/views/components/partials/Navigation.vue.js +1 -1
  59. package/dist/martyrs/src/modules/globals/views/router/scrollBehavior.cjs +1 -1
  60. package/dist/martyrs/src/modules/globals/views/router/scrollBehavior.cjs.map +1 -1
  61. package/dist/martyrs/src/modules/globals/views/router/scrollBehavior.js +1 -1
  62. package/dist/martyrs/src/modules/globals/views/router/scrollBehavior.js.map +1 -1
  63. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.cjs +2 -2
  64. package/dist/martyrs/src/modules/inventory/components/pages/Inventory.vue.js +1 -1
  65. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.cjs +1 -1
  66. package/dist/martyrs/src/modules/inventory/components/pages/InventoryEdit.vue.js +1 -1
  67. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.cjs +95 -0
  68. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.cjs.map +1 -0
  69. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js +95 -0
  70. package/dist/martyrs/src/modules/music/components/cards/ArtistCardSmall.vue.js.map +1 -0
  71. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs +1 -1
  72. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.cjs.map +1 -1
  73. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js +1 -1
  74. package/dist/martyrs/src/modules/music/components/cards/TrackListCard.vue.js.map +1 -1
  75. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs +2 -2
  76. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.cjs.map +1 -1
  77. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js +2 -2
  78. package/dist/martyrs/src/modules/music/components/forms/SearchForm.vue.js.map +1 -1
  79. package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs +127 -175
  80. package/dist/martyrs/src/modules/music/components/pages/Album.vue.cjs.map +1 -1
  81. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js +136 -184
  82. package/dist/martyrs/src/modules/music/components/pages/Album.vue.js.map +1 -1
  83. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs +5 -5
  84. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.cjs.map +1 -1
  85. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js +5 -5
  86. package/dist/martyrs/src/modules/music/components/pages/Artist.vue.js.map +1 -1
  87. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs +5 -5
  88. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.cjs.map +1 -1
  89. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js +5 -5
  90. package/dist/martyrs/src/modules/music/components/pages/MusicLibrary.vue.js.map +1 -1
  91. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs +97 -144
  92. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.cjs.map +1 -1
  93. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js +113 -160
  94. package/dist/martyrs/src/modules/music/components/pages/Playlist.vue.js.map +1 -1
  95. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs +7 -7
  96. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.cjs.map +1 -1
  97. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js +7 -7
  98. package/dist/martyrs/src/modules/music/components/pages/SearchResults.vue.js.map +1 -1
  99. package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs +164 -170
  100. package/dist/martyrs/src/modules/music/components/pages/Track.vue.cjs.map +1 -1
  101. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js +185 -191
  102. package/dist/martyrs/src/modules/music/components/pages/Track.vue.js.map +1 -1
  103. package/dist/martyrs/src/modules/music/music.client.cjs.map +1 -1
  104. package/dist/martyrs/src/modules/music/music.client.js.map +1 -1
  105. package/dist/martyrs/src/modules/music/router/music.cjs +2 -2
  106. package/dist/martyrs/src/modules/music/router/music.js +2 -2
  107. package/dist/martyrs/src/modules/notifications/notifications.client.cjs +1 -1
  108. package/dist/martyrs/src/modules/notifications/notifications.client.cjs.map +1 -1
  109. package/dist/martyrs/src/modules/notifications/notifications.client.js +1 -1
  110. package/dist/martyrs/src/modules/notifications/notifications.client.js.map +1 -1
  111. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.cjs +1 -1
  112. package/dist/martyrs/src/modules/orders/components/blocks/CardOrderUser.vue.js +1 -1
  113. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.cjs +1 -1
  114. package/dist/martyrs/src/modules/orders/components/pages/OrderBackoffice.vue.js +1 -1
  115. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.cjs +1 -1
  116. package/dist/martyrs/src/modules/orders/components/sections/FormDelivery.vue.js +1 -1
  117. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.cjs +1 -1
  118. package/dist/martyrs/src/modules/organizations/components/blocks/CardOrganization.vue.js +1 -1
  119. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.cjs +2 -2
  120. package/dist/martyrs/src/modules/organizations/components/pages/Members.vue.js +2 -2
  121. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.cjs +1 -1
  122. package/dist/martyrs/src/modules/organizations/components/pages/Organization.vue.js +1 -1
  123. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.cjs +1 -1
  124. package/dist/martyrs/src/modules/organizations/components/pages/OrganizationBackoffice.vue.js +1 -1
  125. package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.cjs +2 -2
  126. package/dist/martyrs/src/modules/organizations/components/sections/DetailsTabSection.vue.js +2 -2
  127. package/dist/martyrs/src/modules/organizations/router/organizations.cjs +1 -1
  128. package/dist/martyrs/src/modules/organizations/router/organizations.js +1 -1
  129. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.cjs +1 -1
  130. package/dist/martyrs/src/modules/pages/views/components/pages/PageEdit.vue.js +1 -1
  131. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.cjs +2 -2
  132. package/dist/martyrs/src/modules/products/components/blocks/ProductDiscounts.vue.js +2 -2
  133. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.cjs +1 -1
  134. package/dist/martyrs/src/modules/products/components/pages/CategoryEdit.vue.js +1 -1
  135. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.cjs +1 -1
  136. package/dist/martyrs/src/modules/rents/views/components/pages/Gant/GanttToolbar.vue.js +1 -1
  137. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.cjs +1 -1
  138. package/dist/martyrs/src/modules/spots/components/blocks/CardSpot.vue.js +1 -1
  139. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.cjs +1 -1
  140. package/dist/martyrs/src/modules/spots/components/layouts/Spots.vue.js +1 -1
  141. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.cjs +3 -3
  142. package/dist/martyrs/src/modules/wallet/views/components/pages/Wallet.vue.js +3 -3
  143. package/dist/martyrs.css +1 -1
  144. package/dist/style.css +18 -5
  145. package/package.json +1 -1
  146. package/src/builder/rspack/rspack.config.ssr.client.js +40 -40
  147. package/src/modules/globals/controllers/classes/globals.websocket.js +11 -2
  148. package/src/modules/globals/globals.client.js +1 -2
  149. package/src/modules/globals/views/components/layouts/Client.vue +13 -11
  150. package/src/modules/globals/views/router/scrollBehavior.js +1 -1
  151. package/src/modules/music/README.md +2 -0
  152. package/src/modules/music/components/SidebarMusic.vue +7 -7
  153. package/src/modules/music/components/cards/ArtistCardSmall.vue +92 -0
  154. package/src/modules/music/components/cards/TrackListCard.vue +1 -1
  155. package/src/modules/music/components/forms/SearchForm.vue +1 -1
  156. package/src/modules/music/components/pages/Album.vue +44 -83
  157. package/src/modules/music/components/pages/Artist.vue +5 -5
  158. package/src/modules/music/components/pages/MusicLibrary.vue +5 -5
  159. package/src/modules/music/components/pages/Playlist.vue +35 -53
  160. package/src/modules/music/components/pages/SearchResults.vue +6 -6
  161. package/src/modules/music/components/pages/Track.vue +66 -87
  162. package/src/modules/music/music.client.js +1 -1
  163. package/src/modules/notifications/notifications.client.js +1 -1
  164. package/src/styles/base/all.scss +1 -0
  165. package/dist/martyrs/src/components/Chips/Chips.vue.cjs.map +0 -1
  166. package/dist/martyrs/src/components/Chips/Chips.vue.js.map +0 -1
  167. package/dist/martyrs/src/components/Dropdown/Dropdown.vue.js.map +0 -1
  168. package/dist/martyrs/src/components/Menu/Menu.vue2.cjs.map +0 -1
  169. package/dist/martyrs/src/components/Menu/Menu.vue2.js.map +0 -1
  170. 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
- <div class="cover-container relative mn-b-medium radius-big overflow-hidden shadow-big">
21
- <Media
22
- :url="album.coverArt || '/logo/logo-placeholder.jpg'"
23
- :alt="album.title"
24
- class="aspect-1x1 w-100 radius-medium o-hidden"
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="badge bg-primary-transp-20 t-primary pd-thin-big radius-small t-small t-uppercase">
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="badge bg-success-transp-20 t-success pd-thin-big radius-small t-small">
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="w-1r h-1r" />
61
+ <IconPlay fill="rgb(var(--white))" class="i-medium" />
65
62
  Play All
66
63
  </Button>
67
-
64
+
68
65
  <Button
69
- @click="toggleFavorite"
70
- :color="isFavorite ? 'danger' : 'transp'"
66
+ @click="shufflePlay"
67
+ color="primary"
71
68
  size="medium"
72
- class="w-3r h-3r radius-full"
69
+ class="flex-1 bg-light radius-thin flex-center gap-thin"
73
70
  >
74
- <IconLike class="w-1-25r h-1-25r" :fill="isFavorite" />
71
+ <IconShuffle class="i-medium" />
72
+ Shuffle
75
73
  </Button>
76
-
74
+
77
75
  <Button
78
- @click="shufflePlay"
79
- color="transp"
76
+ @click="toggleFavorite"
77
+ color="primary"
80
78
  size="medium"
81
- class="w-3r h-3r radius-full"
79
+ class="flex-1 bg-light radius-thin flex-center gap-thin"
82
80
  >
83
- <IconShuffle class="w-1-25r h-1-25r" />
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-dark pd-small radius-medium shadow-big mn-t-thin">
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-big">
116
- <h3 class="t-medium mn-b-small" v-if="album.artists && album.artists.length > 1">Artists</h3>
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
- <div
120
+ <ArtistCardSmall
119
121
  v-for="artist in album.artists"
120
122
  :key="artist._id"
121
- class="artist-card bg-light pd-medium radius-medium flex items-center gap-medium"
122
- >
123
- <router-link
124
- :to="`/artist/${artist.url}`"
125
- class="flex items-center gap-medium flex-1 hover-opacity"
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
- <div class="metadata-grid grid cols-2 gap-small mn-b-big">
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
- <div class="icon-wrapper bg-primary-transp-20 w-3r h-3r radius-small flex-center">
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
- <div class="icon-wrapper bg-primary-transp-20 w-3r h-3r radius-small flex-center">
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
- <div class="icon-wrapper bg-primary-transp-20 w-3r h-3r radius-small flex-center">
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
- <div class="icon-wrapper bg-primary-transp-20 w-3r h-3r radius-small flex-center">
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-primary-transp-20 t-primary pd-thin-big radius-small t-small hover-bg-primary-transp-30 cursor-pointer"
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="`/artist/${album.artists[0].url}`"
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-black'"></div>
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-white flex-center flex">
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-dark-transp-50 hover-bg-dark',
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-dark-transp-10 radius-medium'
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-dark-transp-10 radius-medium'
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-dark-transp-10 radius-medium'
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-dark-transp-10 radius-medium'
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="badge bg-primary-transp-20 t-primary pd-thin-big radius-small t-small t-uppercase">
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="badge bg-secondary-transp-20 t-secondary pd-thin-big radius-small t-small">
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="badge bg-success-transp-20 t-success pd-thin-big radius-small t-small">
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-medium' }" v-model="showDropdown" class="relative">
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-dark pd-small radius-medium shadow-big mn-t-thin">
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
- <!-- Owner/Creator Card -->
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="owner-card bg-light pd-medium radius-medium flex items-center gap-medium">
120
- <router-link
121
- :to="getOwnerProfileLink(playlist.creator || playlist.owner)"
122
- class="flex items-center gap-medium flex-1 hover-opacity"
123
- >
124
- <div class="owner-avatar">
125
- <Media
126
- v-if="getOwnerData(playlist)?.photoUrl"
127
- :url="getOwnerData(playlist).photoUrl"
128
- :alt="getOwnerData(playlist)?.name"
129
- class="w-4r h-4r radius-full object-cover"
130
- />
131
- <div v-else class="w-4r h-4r radius-full bg-primary flex-center ">
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="w-1-5r h-1-5r radius-full object-cover"
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
- <div class="metadata-grid grid cols-2 gap-small mn-b-big">
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-dark pd-medium w-m-30r radius-medium"
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-dark pd-medium w-m-25r radius-medium"
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-dark-transp-50 hover-bg-dark',
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-dark-transp-10 pd-thin"
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-dark-transp-10 pd-thin"
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-dark-transp-10 pd-thin"
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-dark-transp-10 pd-thin"
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-dark-transp-10 pd-thin"
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
  >