@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
package/dist/style.css CHANGED
@@ -3125,6 +3125,19 @@ to {
3125
3125
  transform: scale(1);
3126
3126
  }
3127
3127
 
3128
+ .artist-card[data-v-7fd022f7] {
3129
+ transition: all 0.2s ease;
3130
+ }
3131
+ .artist-card[data-v-7fd022f7]:hover {
3132
+ transform: translateY(-5px);
3133
+ }
3134
+ .artist-avatar img[data-v-7fd022f7] {
3135
+ transition: transform 0.2s ease;
3136
+ }
3137
+ .artist-card:hover .artist-avatar img[data-v-7fd022f7] {
3138
+ transform: scale(1.05);
3139
+ }
3140
+
3128
3141
  .playlist-card[data-v-be2a71af] {
3129
3142
  transition: transform 0.3s ease;
3130
3143
  }
@@ -3162,20 +3175,20 @@ to {
3162
3175
  background: linear-gradient(to bottom, rgba(var(--dark), 0.8), rgba(var(--black), 0.9));
3163
3176
  }
3164
3177
 
3165
- .bg-gradient-color[data-v-464383f0] {
3178
+ .bg-gradient-color[data-v-e47a0d68] {
3166
3179
  background: var(--gradient-color, linear-gradient(135deg, #1DB954, #1ED760));
3167
3180
  }
3168
3181
 
3169
- .search-form[data-v-405341b8] {
3182
+ .search-form[data-v-fa80a365] {
3170
3183
  transition: background-color 0.2s ease;
3171
3184
  }
3172
- .search-form[data-v-405341b8]:focus-within {
3185
+ .search-form[data-v-fa80a365]:focus-within {
3173
3186
  background-color: rgba(var(--dark), 0.8);
3174
3187
  }
3175
- input[data-v-405341b8]::placeholder {
3188
+ input[data-v-fa80a365]::placeholder {
3176
3189
  color: rgba(var(--grey), 0.8);
3177
3190
  }
3178
- input[data-v-405341b8]:focus {
3191
+ input[data-v-fa80a365]:focus {
3179
3192
  outline: none;
3180
3193
  }
3181
3194
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ozdao/martyrs",
3
- "version": "0.2.494",
3
+ "version": "0.2.496",
4
4
  "description": "Fullstack framework focused on user experience and ease of development.",
5
5
  "author": "OZ DAO <hello@ozdao.dev>",
6
6
  "license": "GPL-3.0-or-later",
@@ -67,47 +67,47 @@ export default (projectRoot) => {
67
67
  }),
68
68
  // PWA PWA PWA PWA PWA
69
69
  // PWA: инжектим манифест в существующий sw.js
70
- new InjectManifest({
71
- swSrc: path.resolve(projectRoot, '../public/sw.js'),
72
- swDest: 'sw.js',
73
- exclude: [/\.html$/, /\.map$/],
74
- manifestTransforms: [
75
- (manifestEntries) => {
76
- const manifest = manifestEntries.filter(entry => {
77
- return !entry.url.match(/\.(html|map)$/) && entry.size < 5 * 1024 * 1024;
78
- });
79
- return { manifest };
80
- }
81
- ]
82
- }),
70
+ // new InjectManifest({
71
+ // swSrc: path.resolve(projectRoot, '../public/sw.js'),
72
+ // swDest: 'sw.js',
73
+ // exclude: [/\.html$/, /\.map$/],
74
+ // manifestTransforms: [
75
+ // (manifestEntries) => {
76
+ // const manifest = manifestEntries.filter(entry => {
77
+ // return !entry.url.match(/\.(html|map)$/) && entry.size < 5 * 1024 * 1024;
78
+ // });
79
+ // return { manifest };
80
+ // }
81
+ // ]
82
+ // }),
83
83
  // // PWA Manifest
84
- new RspackManifestPlugin({
85
- fileName: 'manifest.json',
86
- seed: {
87
- name: process.env.APP_NAME || 'OZDAO App',
88
- short_name: process.env.APP_SHORT_NAME || 'OZDAO',
89
- description: process.env.APP_DESCRIPTION || 'OZDAO Progressive Web App',
90
- theme_color: '#000000',
91
- background_color: '#ffffff',
92
- display: 'standalone',
93
- orientation: 'portrait',
94
- scope: '/',
95
- start_url: '/',
96
- icons: [
97
- {
98
- src: '/favicon/android-chrome-192x192.png',
99
- sizes: '192x192',
100
- type: 'image/png'
101
- },
102
- {
103
- src: '/favicon/android-chrome-512x512.png',
104
- sizes: '512x512',
105
- type: 'image/png'
106
- }
107
- ]
108
- },
109
- generate: (seed) => seed
110
- }),
84
+ // new RspackManifestPlugin({
85
+ // fileName: 'manifest.json',
86
+ // seed: {
87
+ // name: process.env.APP_NAME || 'OZDAO App',
88
+ // short_name: process.env.APP_SHORT_NAME || 'OZDAO',
89
+ // description: process.env.APP_DESCRIPTION || 'OZDAO Progressive Web App',
90
+ // theme_color: '#000000',
91
+ // background_color: '#ffffff',
92
+ // display: 'standalone',
93
+ // orientation: 'portrait',
94
+ // scope: '/',
95
+ // start_url: '/',
96
+ // icons: [
97
+ // {
98
+ // src: '/favicon/android-chrome-192x192.png',
99
+ // sizes: '192x192',
100
+ // type: 'image/png'
101
+ // },
102
+ // {
103
+ // src: '/favicon/android-chrome-512x512.png',
104
+ // sizes: '512x512',
105
+ // type: 'image/png'
106
+ // }
107
+ // ]
108
+ // },
109
+ // generate: (seed) => seed
110
+ // }),
111
111
  ],
112
112
  optimization: {
113
113
  usedExports: true,
@@ -2,9 +2,18 @@ import * as cookie from 'cookie';
2
2
  import jwt from 'jsonwebtoken';
3
3
  import uWS from 'uWebSockets.js';
4
4
  class WebSocketManager {
5
- constructor() {
5
+ constructor(options = {}) {
6
6
  // Создаем uWebSockets.js приложение внутри класса
7
- this.app = uWS.App();
7
+ if (options.ssl) {
8
+ this.app = uWS.SSLApp({
9
+ key_file_name: options.ssl.key, // путь к private key
10
+ cert_file_name: options.ssl.cert, // путь к certificate
11
+ passphrase: options.ssl.passphrase // если ключ защищен паролем
12
+ });
13
+ } else {
14
+ // Fallback на обычный HTTP для разработки
15
+ this.app = uWS.App();
16
+ };
8
17
  this.modules = new Map();
9
18
  this.userConnections = new Map();
10
19
  // Добавляем контейнер для RPC методов
@@ -44,12 +44,11 @@ function initializeGlobals(app, store, router, config, options = {}) {
44
44
 
45
45
  i18nManager.register('globals', locales);
46
46
 
47
- console.log('mesages is', i18nManager.getAllMessages())
48
-
49
47
  const envVariables = ['NODE_ENV', 'PORT', 'APP_NAME', 'DOMAIN_URL', 'API_URL', 'WSS_URL', 'FILE_SERVER_URL', 'WDT_TOKEN', 'WDM_URL_PROD', 'GOOGLE_MAPS_API_KEY', 'MOBILE_APP'];
50
48
 
51
49
  app.config.globalProperties.DOMAIN_URL = process.env.DOMAIN_URL;
52
50
  app.config.globalProperties.API_URL = process.env.API_URL;
51
+ app.config.globalProperties.WSS_URL = process.env.WSS_URL;
53
52
  app.config.globalProperties.MOBILE_APP = process.env.MOBILE_APP;
54
53
  app.config.globalProperties.FILE_SERVER_URL = process.env.FILE_SERVER_URL;
55
54
  app.config.globalProperties.GOOGLE_MAPS_API_KEY = process.env.GOOGLE_MAPS_API_KEY;
@@ -106,7 +106,7 @@
106
106
  </component>
107
107
  <!-- rows-1-min0_max1 z-index-1 pos-relative w-100 h-100 -->
108
108
  <div class="rows-1-min0_max1 z-index-1 pos-relative w-100 h-100">
109
- <div class="o-y-scroll o-x-hidden h-100">
109
+ <div id="scrollview" ref="scrollview" class="o-y-scroll o-x-hidden h-100">
110
110
  <Status
111
111
  v-if="globals.state.error.show"
112
112
  :data="globals.state.error"
@@ -157,15 +157,16 @@
157
157
  class="z-index-2"
158
158
  :is="route.meta.player"
159
159
  />
160
-
161
- <component
162
- v-if="!MOBILE_APP && route.meta.footer && !route.meta.hideFooter"
163
- ref="footer"
164
- :is="route.meta.footer"
165
- :theme="headerTheme"
166
- :logotype="route.meta.logotype"
167
- :location="route.meta.location"
168
- />
160
+ <transition @before-enter="scrollTop" name="scaleTransition" mode="out-in" appear>
161
+ <component
162
+ v-if="!MOBILE_APP && route.meta.footer && !route.meta.hideFooter && page && !isPageLoading"
163
+ ref="footer"
164
+ :is="route.meta.footer"
165
+ :theme="headerTheme"
166
+ :logotype="route.meta.logotype"
167
+ :location="route.meta.location"
168
+ />
169
+ </transition>
169
170
  </div>
170
171
  </div>
171
172
  </section>
@@ -232,6 +233,7 @@
232
233
  let show = ref(false)
233
234
  // Preloader
234
235
  const page = ref(null)
236
+ const scrollview = ref(null)
235
237
 
236
238
  const isPageLoading = ref(true);
237
239
 
@@ -265,7 +267,7 @@
265
267
  globals.state.isOpenLocationPopup = false;
266
268
  }
267
269
  function scrollTop(){
268
- document.getElementById('app').scrollIntoView();
270
+ scrollview.value.scrollTop = 0;
269
271
  }
270
272
  // Scrolling header
271
273
  const scrollOffset = ref(0)
@@ -16,7 +16,7 @@ export default async function scrollBehavior(to, from, savedPosition) {
16
16
 
17
17
  if (to.hash) {
18
18
  let el = await findEl(to.hash);
19
- let screen = await findEl('#screen');
19
+ let screen = await findEl('#scrollview');
20
20
 
21
21
  if ('scrollBehavior' in document.documentElement.style) {
22
22
  return screen.scrollTo({ top: el.offsetTop, behavior: 'smooth' });
@@ -1,6 +1,8 @@
1
1
  # Music Module
2
2
 
3
3
  ## Задачи
4
+ 1. Отрефачить карточку ArtistCardSmall - декомпозировать пропс artist, заменить ArtistCard на ArtistCardSmall и оставить только ArtistCard.
5
+ 2. Кнопка проигрывания должна показывать паузу на треке только если это текущий трек!
4
6
 
5
7
  ### Оптимизация подсчета воспроизведений
6
8
  - [ ] Перенести увеличение playCount из HTTP stream controller в WebSocket handler
@@ -14,7 +14,7 @@
14
14
  <li>
15
15
  <router-link :to="{ name: 'music-home' }"
16
16
  class="flex-v-center flex gap-small pd-thin radius-small"
17
- :class="$route.name === 'music-home' ? 'bg-dark' : 'hover-bg-dark'"
17
+ :class="$route.name === 'music-home' ? 'bg-white' : 'hover-bg-white'"
18
18
  >
19
19
  <IconHome class="i-medium" :fill="$route.name === 'music-home' ? 'rgb(var(--main))' : 'rgb(var(--white))'"/>
20
20
  <span class="t-medium" :class="$route.name === 'music-home' ? 't-main' : ''">Home</span>
@@ -23,7 +23,7 @@
23
23
  <li>
24
24
  <router-link :to="{ name: 'music-search' }"
25
25
  class="flex-v-center flex gap-small pd-thin radius-small"
26
- :class="$route.name === 'music-search' ? 'bg-dark' : 'hover-bg-dark'"
26
+ :class="$route.name === 'music-search' ? 'bg-white' : 'hover-bg-white'"
27
27
  >
28
28
  <IconSearch class="i-medium" :fill="$route.name === 'music-search' ? 'rgb(var(--main))' : 'rgb(var(--white))'"/>
29
29
  <span class="t-medium" :class="$route.name === 'music-search' ? 't-main' : ''">Search</span>
@@ -32,7 +32,7 @@
32
32
  <li>
33
33
  <router-link :to="{ name: 'music-library' }"
34
34
  class="flex-v-center flex gap-small pd-thin radius-small"
35
- :class="$route.name === 'music-library' ? 'bg-dark' : 'hover-bg-dark'"
35
+ :class="$route.name === 'music-library' ? 'bg-white' : 'hover-bg-white'"
36
36
  >
37
37
  <IconLibrary class="i-medium" :fill="$route.name === 'music-library' ? 'rgb(var(--main))' : 'rgb(var(--white))'"/>
38
38
  <span class="t-medium" :class="$route.name === 'music-library' ? 't-main' : ''">Your Library</span>
@@ -46,7 +46,7 @@
46
46
  <h4 class="t-transp t-medium">YOUR PLAYLISTS</h4>
47
47
  <Button
48
48
  @click="showCreatePlaylistModal = true"
49
- class="bg-transparent cursor-pointer pd-micro radius-small hover-bg-dark"
49
+ class="bg-transparent cursor-pointer pd-micro radius-small hover-bg-white"
50
50
  :showLoader="false"
51
51
  :showSucces="false"
52
52
  >
@@ -72,8 +72,8 @@
72
72
  <li v-for="playlist in items" :key="playlist._id" class="mn-b-thin">
73
73
  <router-link
74
74
  :to="{ name: 'playlist', params: { url: playlist.url } }"
75
- class=" t-truncate d-block pd-thin radius-small hover-bg-dark"
76
- :class="$route.params.url === playlist.url ? 'bg-dark t-main' : ''"
75
+ class=" t-truncate d-block pd-thin radius-small hover-bg-white"
76
+ :class="$route.params.url === playlist.url ? 'bg-white t-main' : ''"
77
77
  >
78
78
  {{ playlist.title }}
79
79
  </router-link>
@@ -87,7 +87,7 @@
87
87
  <Popup
88
88
  v-if="showCreatePlaylistModal"
89
89
  @close-popup="showCreatePlaylistModal = false"
90
- class="bg-dark pd-small w-m-25r radius-medium "
90
+ class="bg-white pd-small w-m-25r radius-medium "
91
91
  >
92
92
  <h3 class="mn-b-medium">Create Playlist</h3>
93
93
  <PlaylistForm @created="onPlaylistCreated" />
@@ -0,0 +1,92 @@
1
+ <!-- components/cards/ArtistCard.vue -->
2
+ <template>
3
+ <div class="artist-card bg-light pd-medium radius-medium flex flex-center gap-big">
4
+ <router-link
5
+ :to="artist.url ? { name: 'artist', params: { url: artist.url } } : artist.to"
6
+ class="flex flex-v-center gap-thin flex-1 hover-opacity"
7
+ >
8
+ <div class="artist-avatar">
9
+ <Media
10
+ v-if="artist.photoUrl"
11
+ :url="artist.photoUrl"
12
+ :alt="artist.name"
13
+ class="w-4r h-4r radius-full object-fit-cover"
14
+ />
15
+ <div v-else class="w-4r h-4r flex flex center radius-extra radius-full bg-main flex-center">
16
+ {{ artist.name.charAt(0) }}
17
+ </div>
18
+ </div>
19
+
20
+ <div>
21
+ <div class="flex items-center gap-thin">
22
+ <span class="mn-b-thin">{{ artist.name }}</span>
23
+ <IconVerified v-if="artist.isVerified" class="w-1r h-1r t-primary" />
24
+ </div>
25
+ <span class="t-small t-transp">{{ artistType }}</span>
26
+ </div>
27
+ </router-link>
28
+
29
+ <Button
30
+ v-if="showFollowButton"
31
+ @click="handleFollowClick"
32
+ :color="isFollowing ? 'primary' : 'transp'"
33
+ size="small"
34
+ class="bg-main"
35
+ >
36
+ {{ isFollowing ? 'Following' : 'Follow' }}
37
+ </Button>
38
+ </div>
39
+ </template>
40
+
41
+ <script setup>
42
+ import { computed } from 'vue';
43
+ import Button from '@martyrs/src/components/Button/Button.vue';
44
+ import Media from '@martyrs/src/components/Media/Media.vue';
45
+ import IconVerified from '@martyrs/src/modules/icons/navigation/IconCheckmark.vue';
46
+
47
+ const props = defineProps({
48
+ artist: {
49
+ type: Object,
50
+ required: true,
51
+ validator: (value) => {
52
+ return value._id && value.name && value.url;
53
+ }
54
+ },
55
+ isFollowing: {
56
+ type: Boolean,
57
+ default: false
58
+ },
59
+ showFollowButton: {
60
+ type: Boolean,
61
+ default: true
62
+ },
63
+ artistType: {
64
+ type: String,
65
+ default: 'Artist'
66
+ }
67
+ });
68
+
69
+ const emit = defineEmits(['toggle-follow']);
70
+
71
+ const handleFollowClick = () => {
72
+ emit('toggle-follow', props.artist._id);
73
+ };
74
+ </script>
75
+
76
+ <style scoped>
77
+ .artist-card {
78
+ transition: all 0.2s ease;
79
+ }
80
+
81
+ .artist-card:hover {
82
+ transform: translateY(-5px);
83
+ }
84
+
85
+ .artist-avatar img {
86
+ transition: transform 0.2s ease;
87
+ }
88
+
89
+ .artist-card:hover .artist-avatar img {
90
+ transform: scale(1.05);
91
+ }
92
+ </style>
@@ -1,7 +1,7 @@
1
1
  <!-- components/cards/TrackListCard.vue -->
2
2
  <template>
3
3
  <div
4
- class="track-item pd-small hover-bg-dark-transp-25 flex-v-center flex cursor-pointer"
4
+ class="track-item pd-small hover-bg-white-transp-25 flex-v-center flex cursor-pointer"
5
5
  :class="{'bg-main-transp-10': isPlaying(track)}"
6
6
  @click="playTrack(track)"
7
7
  @dblclick="playTrack(track, true)"
@@ -1,6 +1,6 @@
1
1
  <!-- components/forms/SearchForm.vue -->
2
2
  <template>
3
- <div class="search-form flex-v-center flex bg-dark-transp-50 pd-thin radius-extra">
3
+ <div class="search-form flex-v-center flex bg-white-transp-50 pd-thin radius-extra">
4
4
  <IconSearch class="i-small mn-r-small" fill="rgb(var(--grey))"/>
5
5
  <input
6
6
  ref="searchInput"