itube-specs 0.0.896 → 0.0.898
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/assets/icons/common/bell.svg +1 -0
- package/assets/scss/mixins/_font-sizes.scss +5 -0
- package/assets/scss/themes/dark/_theme.scss +38 -23
- package/assets/scss/themes/light/_theme.scss +34 -21
- package/assets/scss/vars/_palette.scss +1 -0
- package/assets/scss/vars/_tokens.scss +2 -0
- package/components/card/category.vue +22 -1
- package/components/card/playlist.vue +32 -4
- package/components/card/round.vue +48 -4
- package/components/filter/main.vue +2 -6
- package/components/filter/model.vue +2 -6
- package/components/grid/playlists.vue +2 -0
- package/components/layout/burger-item.vue +8 -8
- package/components/layout/extra-links.vue +2 -0
- package/components/layout/header.vue +29 -3
- package/components/layout/logo.vue +11 -2
- package/components/layout/notifications.vue +79 -0
- package/components/section/swiper-cards.vue +65 -34
- package/components/ui/btn.vue +15 -0
- package/components/ui/popup.vue +0 -4
- package/components/ui/swiper.vue +19 -4
- package/components/ui/view-all.vue +113 -0
- package/composables/use-meta.ts +67 -28
- package/package.json +1 -1
- package/pages/2257.vue +1 -1
- package/pages/categories/all.vue +1 -1
- package/pages/categories/index.vue +1 -1
- package/pages/categories/letter/[slug].vue +7 -1
- package/pages/channels/[channel].vue +8 -1
- package/pages/channels/index.vue +6 -1
- package/pages/confirm/registration/[token].vue +1 -1
- package/pages/contacts.vue +1 -1
- package/pages/dmca.vue +1 -1
- package/pages/following.vue +201 -0
- package/pages/index.vue +8 -10
- package/pages/library/index.vue +5 -2
- package/pages/models/[slug]/channel/[channel].vue +9 -1
- package/pages/models/[slug]/index.vue +9 -1
- package/pages/models/[slug]/tag/[tag].vue +10 -1
- package/pages/models/index.vue +7 -1
- package/pages/models/letter/[slug].vue +8 -1
- package/pages/playlists/[playlistId]/[slug].vue +9 -1
- package/pages/playlists/index.vue +6 -1
- package/pages/policy.vue +1 -1
- package/pages/search/[slug]/index.vue +26 -38
- package/pages/search/[slug]/models.vue +7 -1
- package/pages/search/[slug]/videos.vue +7 -1
- package/pages/tag/[tag].vue +8 -1
- package/pages/terms.vue +1 -1
- package/pages/user/profile.vue +1 -1
- package/pages/user/recovery-password.vue +1 -1
- package/pages/user/settings.vue +1 -1
- package/pages/videos/[slug].vue +8 -1
- package/runtime/utils/cleaners/__tests__/clean-model-info.test.ts +13 -0
- package/runtime/utils/cleaners/clean-model-info.ts +1 -0
- package/server/api/models/list-by-niche.post.ts +3 -1
- package/stubs/library-follows.ts +75 -2
- package/types/button-themes.d.ts +1 -1
- package/types/card-info.d.ts +2 -0
- package/types/category-card.d.ts +2 -0
- package/types/index.d.ts +1 -0
- package/types/page-seo.d.ts +6 -0
- package/types/paginated-response.d.ts +3 -0
- package/types/playlist-card.d.ts +2 -0
- package/types/raw/raw-model-info.d.ts +2 -1
- package/types/round-card.d.ts +2 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-bell" aria-hidden="true"><path d="M10.268 21a2 2 0 0 0 3.464 0"></path><path d="M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326"></path></svg>
|
|
@@ -148,7 +148,7 @@ $popup-auth-size: 32px;
|
|
|
148
148
|
$popup-auth-icon: $color-indigo-900;
|
|
149
149
|
$popup-auth-icon-bg: $color-indigo-600;
|
|
150
150
|
$popup-border: $color-zinc-800;
|
|
151
|
-
$popup-footer-border:
|
|
151
|
+
$popup-footer-border: $color-zinc-800;
|
|
152
152
|
$popup-text: $color-white;
|
|
153
153
|
$popup-scrollbar: $color-zinc-800;
|
|
154
154
|
$popup-close-icon: $color-zinc-400;
|
|
@@ -327,15 +327,29 @@ $playlist-edit-icon: $color-indigo-600;
|
|
|
327
327
|
$playlist-delete-video-icon: $color-indigo-600;
|
|
328
328
|
|
|
329
329
|
// ─── Popular card ───
|
|
330
|
-
$card-round-size: 96px;
|
|
331
330
|
$card-round-text: $color-zinc-200;
|
|
332
331
|
$card-round-text--hover: $color-indigo-400;
|
|
333
332
|
$card-round-subtext: $color-zinc-500;
|
|
334
333
|
$card-round-border: $color-zinc-700;
|
|
335
334
|
$card-round-border--hover: $color-zinc-500;
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
$
|
|
335
|
+
|
|
336
|
+
// ─── View all (плитка «смотреть все» в конце ленты) ───
|
|
337
|
+
$view-all-gradient-from: $color-indigo-500-10;
|
|
338
|
+
$view-all-gradient-via: $color-zinc-800-50;
|
|
339
|
+
$view-all-gradient-to: $color-zinc-800-50;
|
|
340
|
+
$view-all-dots: $color-indigo-400-10;
|
|
341
|
+
$view-all-border: $color-zinc-700-70;
|
|
342
|
+
$view-all-border--hover: $color-zinc-600;
|
|
343
|
+
$view-all-icon: $color-indigo-300;
|
|
344
|
+
$view-all-icon-bg: $color-indigo-500-20;
|
|
345
|
+
$view-all-icon-border: $color-indigo-500-40;
|
|
346
|
+
$view-all-text: $color-white;
|
|
347
|
+
$view-all-note: $color-zinc-400;
|
|
348
|
+
|
|
349
|
+
// ─── New-badge (карточки на странице подписок) ───
|
|
350
|
+
$card-new-badge-bg: $color-indigo-600;
|
|
351
|
+
$card-new-badge-text: $color-white;
|
|
352
|
+
$card-new-badge-ring: $main-bg;
|
|
339
353
|
|
|
340
354
|
// ─── Language ───
|
|
341
355
|
$language-text: $color-zinc-300;
|
|
@@ -386,14 +400,14 @@ $burger-close-bg: $color-zinc-700;
|
|
|
386
400
|
$burger-close-text: $color-zinc-300;
|
|
387
401
|
|
|
388
402
|
// ─── Burger menu item ───
|
|
389
|
-
$burger-
|
|
390
|
-
$burger-
|
|
391
|
-
$burger-
|
|
392
|
-
$burger-
|
|
393
|
-
$burger-
|
|
394
|
-
$burger-
|
|
395
|
-
$burger-
|
|
396
|
-
$burger-
|
|
403
|
+
$burger-item-text: $color-zinc-300;
|
|
404
|
+
$burger-item-icon: $color-zinc-400;
|
|
405
|
+
$burger-item-bg--active: $color-indigo-600-20;
|
|
406
|
+
$burger-item-text--active: $color-white;
|
|
407
|
+
$burger-item-icon--active: $color-indigo-400;
|
|
408
|
+
$burger-item-accent-icon: $nav-icon-accent;
|
|
409
|
+
$burger-item-child-text: $color-zinc-400;
|
|
410
|
+
$burger-item-child-icon: $color-zinc-500;
|
|
397
411
|
|
|
398
412
|
// ─── Header ───
|
|
399
413
|
$header-bg: $color-black;
|
|
@@ -405,6 +419,14 @@ $header-language-menu-bg: $color-night;
|
|
|
405
419
|
$header-language-menu-border: $color-zinc-800;
|
|
406
420
|
$header-language-menu-item--hover: $color-zinc-800-50;
|
|
407
421
|
|
|
422
|
+
// ─── notifications ───
|
|
423
|
+
$notifications-icon: $color-zinc-300;
|
|
424
|
+
$notifications-icon--mobile: $color-zinc-200;
|
|
425
|
+
$notifications-icon--hover: $color-white;
|
|
426
|
+
$notifications-badge-bg: $color-indigo-600;
|
|
427
|
+
$notifications-badge-text: $color-white;
|
|
428
|
+
$notifications-badge-ring: $color-black;
|
|
429
|
+
|
|
408
430
|
// ─── Header user ───
|
|
409
431
|
$header-user-trigger-icon: $color-zinc-400;
|
|
410
432
|
$header-user-dropdown-bg: $color-night;
|
|
@@ -469,6 +491,8 @@ $button-secondary-text: $color-zinc-400;
|
|
|
469
491
|
$button-secondary-text--active: $color-white;
|
|
470
492
|
$button-secondary-border: $color-zinc-700-50;
|
|
471
493
|
$button-secondary-border--active: $color-indigo-500;
|
|
494
|
+
$button-simple-text: $color-white;
|
|
495
|
+
$button-simple-text--hover: $color-zinc-300;
|
|
472
496
|
$button-muted-bg: $color-zinc-800;
|
|
473
497
|
$button-muted-text: $color-zinc-300;
|
|
474
498
|
$button-muted-bg--hover: $color-zinc-700;
|
|
@@ -707,7 +731,7 @@ $search-item-highlight: $color-white;
|
|
|
707
731
|
$search-item-count: $color-zinc-600;
|
|
708
732
|
|
|
709
733
|
// ─── Search input ───
|
|
710
|
-
$search-input-icon: $color-
|
|
734
|
+
$search-input-icon: $color-white;
|
|
711
735
|
$search-input-clear: $color-zinc-500;
|
|
712
736
|
$search-input-clear--hover: $color-zinc-300;
|
|
713
737
|
|
|
@@ -894,15 +918,6 @@ $grouped-category-icon: $color-zinc-500;
|
|
|
894
918
|
$grouped-footer-text: $color-zinc-500;
|
|
895
919
|
$grouped-section-border: $color-zinc-800;
|
|
896
920
|
|
|
897
|
-
// ─── Page: search ───
|
|
898
|
-
$search-show-all-bg: $color-zinc-800-50;
|
|
899
|
-
$search-show-all-border: $color-zinc-700;
|
|
900
|
-
$search-show-all-text: $color-zinc-500;
|
|
901
|
-
$search-show-all-border--hover: $color-indigo-500;
|
|
902
|
-
$search-show-all-text--hover: $color-indigo-400;
|
|
903
|
-
$search-show-all-number: $color-zinc-400;
|
|
904
|
-
$search-show-all-number--hover: $color-indigo-400;
|
|
905
|
-
|
|
906
921
|
// ─── Page: profile ───
|
|
907
922
|
$profile-bg: $color-zinc-900-50;
|
|
908
923
|
$profile-text: $color-white;
|
|
@@ -384,15 +384,29 @@ $playlist-edit-icon: $color-indigo-600;
|
|
|
384
384
|
$playlist-delete-video-icon: $color-indigo-600;
|
|
385
385
|
|
|
386
386
|
// ─── Popular card ───
|
|
387
|
-
$card-round-size: 96px;
|
|
388
387
|
$card-round-text: $color-gray-700;
|
|
389
388
|
$card-round-text--hover: $color-gray-700;
|
|
390
389
|
$card-round-subtext: $color-gray-600;
|
|
391
390
|
$card-round-border: $color-white;
|
|
392
391
|
$card-round-border--hover: $color-white;
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
$
|
|
392
|
+
|
|
393
|
+
// ─── View all (плитка «смотреть все» в конце ленты) ───
|
|
394
|
+
$view-all-gradient-from: $color-indigo-500-10;
|
|
395
|
+
$view-all-gradient-via: $color-gray-200-50;
|
|
396
|
+
$view-all-gradient-to: $color-gray-300-50;
|
|
397
|
+
$view-all-dots: $color-indigo-400-10;
|
|
398
|
+
$view-all-border: $color-gray-300;
|
|
399
|
+
$view-all-border--hover: $color-gray-400;
|
|
400
|
+
$view-all-icon: $color-indigo-600;
|
|
401
|
+
$view-all-icon-bg: $color-indigo-500-10;
|
|
402
|
+
$view-all-icon-border: $color-indigo-500-20;
|
|
403
|
+
$view-all-text: $color-gray-900;
|
|
404
|
+
$view-all-note: $color-gray-600;
|
|
405
|
+
|
|
406
|
+
// ─── New-badge (карточки на странице подписок) ───
|
|
407
|
+
$card-new-badge-bg: $color-indigo-600;
|
|
408
|
+
$card-new-badge-text: $color-white;
|
|
409
|
+
$card-new-badge-ring: $main-bg;
|
|
396
410
|
|
|
397
411
|
// ─── Language ───
|
|
398
412
|
$language-text: $color-white;
|
|
@@ -443,14 +457,14 @@ $burger-close-bg: $color-slate-750;
|
|
|
443
457
|
$burger-close-text: $color-white;
|
|
444
458
|
|
|
445
459
|
// ─── Burger menu item ───
|
|
446
|
-
$burger-
|
|
447
|
-
$burger-
|
|
448
|
-
$burger-
|
|
449
|
-
$burger-
|
|
450
|
-
$burger-
|
|
451
|
-
$burger-
|
|
452
|
-
$burger-
|
|
453
|
-
$burger-
|
|
460
|
+
$burger-item-text: $color-white;
|
|
461
|
+
$burger-item-icon: $color-gray-400;
|
|
462
|
+
$burger-item-bg--active: $color-slate-750;
|
|
463
|
+
$burger-item-text--active: $color-white;
|
|
464
|
+
$burger-item-icon--active: $color-gray-400;
|
|
465
|
+
$burger-item-accent-icon: $color-red-400;
|
|
466
|
+
$burger-item-child-text: $color-gray-400;
|
|
467
|
+
$burger-item-child-icon: $color-gray-400;
|
|
454
468
|
|
|
455
469
|
// ─── Header ───
|
|
456
470
|
$header-bg: $color-slate-800;
|
|
@@ -461,6 +475,12 @@ $header-language-angle--hover: $color-gray-300;
|
|
|
461
475
|
$header-language-menu-bg: $color-slate-850;
|
|
462
476
|
$header-language-menu-border: $color-white-10;
|
|
463
477
|
$header-language-menu-item--hover: $color-white-5;
|
|
478
|
+
$notifications-icon: $color-gray-300;
|
|
479
|
+
$notifications-icon--mobile: $color-gray-200;
|
|
480
|
+
$notifications-icon--hover: $color-white;
|
|
481
|
+
$notifications-badge-bg: $color-indigo-600;
|
|
482
|
+
$notifications-badge-text: $color-white;
|
|
483
|
+
$notifications-badge-ring: $color-slate-800;
|
|
464
484
|
|
|
465
485
|
// ─── Header user ───
|
|
466
486
|
$header-user-trigger-icon: $color-gray-500;
|
|
@@ -526,6 +546,8 @@ $button-secondary-text: $color-gray-700;
|
|
|
526
546
|
$button-secondary-text--active: $color-white;
|
|
527
547
|
$button-secondary-border: transparent;
|
|
528
548
|
$button-secondary-border--active: $color-indigo-soft;
|
|
549
|
+
$button-simple-text: $color-gray-900;
|
|
550
|
+
$button-simple-text--hover: $color-indigo-600;
|
|
529
551
|
$button-muted-bg: transparent;
|
|
530
552
|
$button-muted-text: $color-gray-300;
|
|
531
553
|
$button-muted-bg--hover: $color-slate-750;
|
|
@@ -924,15 +946,6 @@ $grouped-category-icon: $color-gray-500;
|
|
|
924
946
|
$grouped-footer-text: $color-gray-500;
|
|
925
947
|
$grouped-section-border: $color-gray-200;
|
|
926
948
|
|
|
927
|
-
// ─── Page: search ───
|
|
928
|
-
$search-show-all-bg: $color-gray-300;
|
|
929
|
-
$search-show-all-border: $color-gray-300;
|
|
930
|
-
$search-show-all-text: $color-gray-500;
|
|
931
|
-
$search-show-all-border--hover: $color-gray-100;
|
|
932
|
-
$search-show-all-text--hover: $color-gray-500;
|
|
933
|
-
$search-show-all-number: $color-gray-700;
|
|
934
|
-
$search-show-all-number--hover: $color-gray-700;
|
|
935
|
-
|
|
936
949
|
// ─── Page: profile ───
|
|
937
950
|
$profile-bg: $color-gray-200;
|
|
938
951
|
$profile-text: $color-gray-900;
|
|
@@ -50,6 +50,7 @@ $color-indigo-100: lab(91.7827% 2.2585 -12.3844); // #e0e7ff
|
|
|
50
50
|
$color-indigo-200: lab(84.6841% 5.3654 -22.7191); // #c7d2fe
|
|
51
51
|
$color-indigo-300: lab(74.0235% 8.54138 -41.6075); // #a4b3ff
|
|
52
52
|
$color-indigo-400: lab(59.866% 22.4834 -64.4485); // #7d87ff
|
|
53
|
+
$color-indigo-400-10: lab(59.866% 22.4834 -64.4485 / 10%);
|
|
53
54
|
$color-indigo-500: lab(48.295% 38.3129 -81.9673); // #625fff
|
|
54
55
|
$color-indigo-500-10: lab(48.295% 38.3129 -81.9673 / 10%);
|
|
55
56
|
$color-indigo-500-20: lab(48.295% 38.3129 -81.9673 / 20%);
|
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
--container-padding-inline: 8px;
|
|
29
29
|
--aside-videos-aspect-ratio: 403/593;
|
|
30
30
|
--popup-padding-bottom-mobile: 32px;
|
|
31
|
+
--card-round-size: 80px;
|
|
31
32
|
|
|
32
33
|
@include from-br(xs) {
|
|
33
34
|
--container-padding-inline: 16px;
|
|
@@ -40,5 +41,6 @@
|
|
|
40
41
|
--header-height: 71px;
|
|
41
42
|
--control-min-width: 296px;
|
|
42
43
|
--max-width-container: 1600px;
|
|
44
|
+
--card-round-size: 96px;
|
|
43
45
|
}
|
|
44
46
|
}
|
|
@@ -31,7 +31,14 @@
|
|
|
31
31
|
loading="lazy"
|
|
32
32
|
>
|
|
33
33
|
</span>
|
|
34
|
-
<span
|
|
34
|
+
<span
|
|
35
|
+
v-if="card.newCount"
|
|
36
|
+
class="card-category__badge"
|
|
37
|
+
>{{ $t('library.new_count', { count: card.newCount }) }}</span>
|
|
38
|
+
<span
|
|
39
|
+
v-else
|
|
40
|
+
class="card-category__count"
|
|
41
|
+
>
|
|
35
42
|
<UiIcon
|
|
36
43
|
name="video-camera"
|
|
37
44
|
size="14"
|
|
@@ -155,4 +162,18 @@ const slug = computed(() => {
|
|
|
155
162
|
grid-template-columns: 1fr auto;
|
|
156
163
|
align-items: center;
|
|
157
164
|
}
|
|
165
|
+
|
|
166
|
+
.card-category__badge {
|
|
167
|
+
@include font-3xs;
|
|
168
|
+
|
|
169
|
+
display: grid;
|
|
170
|
+
place-content: center;
|
|
171
|
+
height: 20px;
|
|
172
|
+
padding-inline: 6px;
|
|
173
|
+
font-weight: 700;
|
|
174
|
+
white-space: nowrap;
|
|
175
|
+
color: $card-new-badge-text;
|
|
176
|
+
background-color: $card-new-badge-bg;
|
|
177
|
+
border-radius: $radius-full;
|
|
178
|
+
}
|
|
158
179
|
</style>
|
|
@@ -98,7 +98,11 @@
|
|
|
98
98
|
:to="generateLink(`/playlists/${card.id}/${card.firstVideoId}`)"
|
|
99
99
|
class="card-playlist__title"
|
|
100
100
|
>
|
|
101
|
-
{{ card.name }}
|
|
101
|
+
<span class="card-playlist__name">{{ card.name }}</span>
|
|
102
|
+
<span
|
|
103
|
+
v-if="card.newCount"
|
|
104
|
+
class="card-playlist__badge"
|
|
105
|
+
>{{ t('library.new_count', { count: card.newCount }) }}</span>
|
|
102
106
|
</NuxtLink>
|
|
103
107
|
<p class="card-playlist__user">
|
|
104
108
|
{{ card.username }}
|
|
@@ -306,18 +310,27 @@ const avatarPlaceholder = computed(() => props.card.username.charAt(0));
|
|
|
306
310
|
.card-playlist__title {
|
|
307
311
|
@include font-sm;
|
|
308
312
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
313
|
+
display: flex;
|
|
314
|
+
align-items: center;
|
|
315
|
+
column-gap: 6px;
|
|
312
316
|
max-width: 100%;
|
|
313
317
|
color: $playlist-card-title;
|
|
314
318
|
font-weight: 500;
|
|
319
|
+
min-width: 0;
|
|
315
320
|
|
|
316
321
|
@include hover(color) {
|
|
317
322
|
color: $playlist-card-title--hover;
|
|
318
323
|
}
|
|
319
324
|
}
|
|
320
325
|
|
|
326
|
+
/* Обрезается название, а бейдж рядом остаётся целым */
|
|
327
|
+
.card-playlist__name {
|
|
328
|
+
min-width: 0;
|
|
329
|
+
overflow: hidden;
|
|
330
|
+
white-space: nowrap;
|
|
331
|
+
text-overflow: ellipsis;
|
|
332
|
+
}
|
|
333
|
+
|
|
321
334
|
.card-playlist__user {
|
|
322
335
|
@include font-xs;
|
|
323
336
|
|
|
@@ -451,6 +464,21 @@ const avatarPlaceholder = computed(() => props.card.username.charAt(0));
|
|
|
451
464
|
column-gap: 4px;
|
|
452
465
|
}
|
|
453
466
|
|
|
467
|
+
.card-playlist__badge {
|
|
468
|
+
@include font-3xs;
|
|
469
|
+
|
|
470
|
+
display: grid;
|
|
471
|
+
place-content: center;
|
|
472
|
+
flex-shrink: 0;
|
|
473
|
+
height: 20px;
|
|
474
|
+
padding-inline: 6px;
|
|
475
|
+
font-weight: 700;
|
|
476
|
+
white-space: nowrap;
|
|
477
|
+
color: $card-new-badge-text;
|
|
478
|
+
background-color: $card-new-badge-bg;
|
|
479
|
+
border-radius: $radius-full;
|
|
480
|
+
}
|
|
481
|
+
|
|
454
482
|
.card-playlist__dropdown {
|
|
455
483
|
color: $playlist-card-dropdown-icon;
|
|
456
484
|
|
|
@@ -15,13 +15,21 @@
|
|
|
15
15
|
sizes="96px"
|
|
16
16
|
@error="onImageError"
|
|
17
17
|
/>
|
|
18
|
+
<span
|
|
19
|
+
v-if="card.newCount"
|
|
20
|
+
:title="t('library.new_count', { count: card.newCount })"
|
|
21
|
+
class="card-round__badge"
|
|
22
|
+
>{{ card.newCount }}</span>
|
|
18
23
|
<p class="card-round__title">
|
|
19
24
|
{{ card.title }}
|
|
20
25
|
<!-- <ClientOnly>-->
|
|
21
26
|
<!-- <SCountry class="card-round__info-country"/>-->
|
|
22
27
|
<!-- </ClientOnly>-->
|
|
23
28
|
</p>
|
|
24
|
-
<p
|
|
29
|
+
<p
|
|
30
|
+
v-if="!withoutCount"
|
|
31
|
+
class="card-round__count"
|
|
32
|
+
>
|
|
25
33
|
<UiIcon
|
|
26
34
|
name="cam"
|
|
27
35
|
size="12"
|
|
@@ -39,10 +47,13 @@ const props = withDefaults(defineProps<{
|
|
|
39
47
|
loading?: 'eager' | 'lazy'
|
|
40
48
|
priority?: boolean
|
|
41
49
|
placeholderAvatar?: string
|
|
50
|
+
/** Только аватар и название — без счётчика роликов (страница подписок) */
|
|
51
|
+
withoutCount?: boolean
|
|
42
52
|
}>(), {
|
|
43
53
|
loading: 'lazy'
|
|
44
54
|
});
|
|
45
55
|
|
|
56
|
+
const { t } = useI18n();
|
|
46
57
|
const { generateLink } = useGenerateLink();
|
|
47
58
|
|
|
48
59
|
const fallbackImage = props.placeholderAvatar;
|
|
@@ -59,16 +70,49 @@ function onImageError() {
|
|
|
59
70
|
</script>
|
|
60
71
|
|
|
61
72
|
<style lang="scss">
|
|
73
|
+
/* Заход бейджа внутрь круга. На мобиле меньше: аватар там 80px против 96px, а сам
|
|
74
|
+
бейдж не уменьшается — при одинаковом отступе он садится заметно глубже. */
|
|
75
|
+
$badge-inset: 8px;
|
|
76
|
+
$badge-inset--mobile: 4px;
|
|
77
|
+
|
|
62
78
|
.card-round {
|
|
79
|
+
position: relative;
|
|
63
80
|
display: grid;
|
|
64
81
|
justify-content: center;
|
|
65
82
|
justify-items: center;
|
|
66
|
-
padding: 2px;
|
|
67
83
|
}
|
|
68
84
|
|
|
85
|
+
.card-round__badge {
|
|
86
|
+
@include font-3xs;
|
|
87
|
+
|
|
88
|
+
/* Аватар занимает всю ширину карточки, поэтому отступ от её края = заход в круг */
|
|
89
|
+
position: absolute;
|
|
90
|
+
top: $badge-inset;
|
|
91
|
+
right: $badge-inset;
|
|
92
|
+
z-index: $z-index-plus;
|
|
93
|
+
display: grid;
|
|
94
|
+
place-content: center;
|
|
95
|
+
min-width: 22px;
|
|
96
|
+
height: 22px;
|
|
97
|
+
padding-inline: 6px;
|
|
98
|
+
font-weight: 700;
|
|
99
|
+
color: $card-new-badge-text;
|
|
100
|
+
background-color: $card-new-badge-bg;
|
|
101
|
+
border-radius: $radius-full;
|
|
102
|
+
box-shadow: 0 0 0 2px $card-new-badge-ring;
|
|
103
|
+
|
|
104
|
+
@include to-br(sm) {
|
|
105
|
+
top: $badge-inset--mobile;
|
|
106
|
+
right: $badge-inset--mobile;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/* Размер задаёт ширина, высоту считает aspect-ratio: с жёсткими width/height
|
|
111
|
+
глобальный `img { max-width: 100% }` срезал только ширину и круг выходил овалом. */
|
|
69
112
|
.card-round__img {
|
|
70
|
-
width:
|
|
71
|
-
|
|
113
|
+
width: 100%;
|
|
114
|
+
max-width: var(--card-round-size);
|
|
115
|
+
height: auto;
|
|
72
116
|
margin-bottom: 8px;
|
|
73
117
|
aspect-ratio: 1/1;
|
|
74
118
|
border-radius: $radius-full;
|
|
@@ -27,14 +27,10 @@
|
|
|
27
27
|
:disabled="!isFiltered"
|
|
28
28
|
theme="secondary"
|
|
29
29
|
class="filter-main__reset"
|
|
30
|
-
wide
|
|
31
|
-
size="l"
|
|
32
30
|
@click="reset"
|
|
33
31
|
>{{ $t('reset_all') }}
|
|
34
32
|
</UiBtn>
|
|
35
33
|
<UiBtn
|
|
36
|
-
wide
|
|
37
|
-
size="l"
|
|
38
34
|
theme="primary"
|
|
39
35
|
@click="saveResult"
|
|
40
36
|
>{{ $t('apply') }}{{ activeCount ? ` (${activeCount})` : '' }}
|
|
@@ -303,8 +299,8 @@ function reset() {
|
|
|
303
299
|
|
|
304
300
|
<style lang="scss">
|
|
305
301
|
.filter-main__footer-buttons {
|
|
306
|
-
display:
|
|
307
|
-
|
|
302
|
+
display: flex;
|
|
303
|
+
justify-content: space-between;
|
|
308
304
|
column-gap: 8px;
|
|
309
305
|
}
|
|
310
306
|
|
|
@@ -33,17 +33,13 @@
|
|
|
33
33
|
<template #footer>
|
|
34
34
|
<div class="filter-model__footer-buttons">
|
|
35
35
|
<UiBtn
|
|
36
|
-
wide
|
|
37
36
|
:disabled="!isPendingFiltered"
|
|
38
|
-
size="l"
|
|
39
37
|
class="filter-model__reset"
|
|
40
38
|
theme="secondary"
|
|
41
39
|
@click="onResetClick"
|
|
42
40
|
>{{ t('reset_all') }}
|
|
43
41
|
</UiBtn>
|
|
44
42
|
<UiBtn
|
|
45
|
-
wide
|
|
46
|
-
size="l"
|
|
47
43
|
theme="primary"
|
|
48
44
|
@click="onApplyClick"
|
|
49
45
|
>{{ t('apply') }}{{ pendingChipsItems.length ? ` (${pendingChipsItems.length})` : '' }}
|
|
@@ -234,8 +230,8 @@ function onApplyClick() {
|
|
|
234
230
|
}
|
|
235
231
|
|
|
236
232
|
.filter-model__footer-buttons {
|
|
237
|
-
display:
|
|
238
|
-
|
|
233
|
+
display: flex;
|
|
234
|
+
justify-content: space-between;
|
|
239
235
|
column-gap: 8px;
|
|
240
236
|
}
|
|
241
237
|
|
|
@@ -92,7 +92,7 @@ function isCurrent(link: string) {
|
|
|
92
92
|
column-gap: 16px;
|
|
93
93
|
place-items: center start;
|
|
94
94
|
padding: 10px 16px;
|
|
95
|
-
color: $burger-
|
|
95
|
+
color: $burger-item-text;
|
|
96
96
|
min-width: 0;
|
|
97
97
|
overflow: hidden;
|
|
98
98
|
white-space: nowrap;
|
|
@@ -100,29 +100,29 @@ function isCurrent(link: string) {
|
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
.layout-burger-item__link.router-link-active {
|
|
103
|
-
background-color: $burger-
|
|
103
|
+
background-color: $burger-item-bg--active;
|
|
104
104
|
border-radius: $radius;
|
|
105
|
-
color: $burger-
|
|
105
|
+
color: $burger-item-text--active;
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
.layout-burger-item__link.router-link-active .layout-burger-item__icon {
|
|
109
|
-
color: $burger-
|
|
109
|
+
color: $burger-item-icon--active;
|
|
110
110
|
}
|
|
111
111
|
|
|
112
112
|
.layout-burger-item__icon {
|
|
113
|
-
color: $burger-
|
|
113
|
+
color: $burger-item-icon;
|
|
114
114
|
flex-shrink: 0;
|
|
115
115
|
}
|
|
116
116
|
|
|
117
117
|
.layout-burger-item__icon.--accent {
|
|
118
|
-
color: $burger-
|
|
118
|
+
color: $burger-item-accent-icon;
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
.layout-burger-item__link.--child {
|
|
122
122
|
@include font-sm;
|
|
123
123
|
|
|
124
124
|
padding-left: 48px;
|
|
125
|
-
color: $burger-
|
|
125
|
+
color: $burger-item-child-text;
|
|
126
126
|
}
|
|
127
127
|
|
|
128
128
|
.layout-burger-item__angle {
|
|
@@ -135,6 +135,6 @@ function isCurrent(link: string) {
|
|
|
135
135
|
}
|
|
136
136
|
|
|
137
137
|
.layout-burger-item__link.--child .layout-burger-item__icon {
|
|
138
|
-
color: $burger-
|
|
138
|
+
color: $burger-item-child-icon;
|
|
139
139
|
}
|
|
140
140
|
</style>
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
v-for="(item, index) in additionalLinksItems"
|
|
5
5
|
:key="`s-additional-link-${index}`"
|
|
6
6
|
:to="generateLink(item.name)"
|
|
7
|
+
active-class=""
|
|
8
|
+
exact-active-class=""
|
|
7
9
|
class="layout-extra-links__link"
|
|
8
10
|
@click="emit('close')"
|
|
9
11
|
>{{ $t(`additional_link.${item.title}`) }}</NuxtLink>
|
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
icon-size="20"
|
|
16
16
|
/>
|
|
17
17
|
|
|
18
|
+
<LayoutNotifications class="layout-header__notifications"/>
|
|
19
|
+
|
|
18
20
|
<div
|
|
19
21
|
ref="languageRef"
|
|
20
22
|
class="layout-header__language _from-sm"
|
|
@@ -134,7 +136,13 @@ $breakpoint: sm;
|
|
|
134
136
|
width: 100%;
|
|
135
137
|
|
|
136
138
|
@include from-br(sm) {
|
|
137
|
-
grid-template-columns: auto 1fr auto auto auto;
|
|
139
|
+
grid-template-columns: auto 1fr auto auto auto auto;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/* поиск | лого | колокольчик | бургер — 1fr держит лого по центру */
|
|
143
|
+
@include to-br(sm) {
|
|
144
|
+
grid-template-columns: auto 1fr auto auto;
|
|
145
|
+
column-gap: 4px;
|
|
138
146
|
}
|
|
139
147
|
}
|
|
140
148
|
|
|
@@ -143,6 +151,10 @@ $breakpoint: sm;
|
|
|
143
151
|
grid-column: 1;
|
|
144
152
|
grid-row: 1;
|
|
145
153
|
}
|
|
154
|
+
|
|
155
|
+
@include to-br(sm) {
|
|
156
|
+
justify-self: center;
|
|
157
|
+
}
|
|
146
158
|
}
|
|
147
159
|
|
|
148
160
|
.layout-header__burger {
|
|
@@ -151,6 +163,13 @@ $breakpoint: sm;
|
|
|
151
163
|
place-content: center;
|
|
152
164
|
color: $header-burger-icon;
|
|
153
165
|
|
|
166
|
+
/* Такой же внутренний отступ, как у колокольчика рядом — чтобы бейдж не прилипал
|
|
167
|
+
к бургеру; отрицательный margin возвращает иконку на край контейнера */
|
|
168
|
+
@include to-br(sm) {
|
|
169
|
+
padding: 8px;
|
|
170
|
+
margin-right: -8px;
|
|
171
|
+
}
|
|
172
|
+
|
|
154
173
|
&::after {
|
|
155
174
|
@include area-point;
|
|
156
175
|
}
|
|
@@ -179,7 +198,7 @@ $breakpoint: sm;
|
|
|
179
198
|
.layout-header__user,
|
|
180
199
|
.layout-header__sign-up {
|
|
181
200
|
@include from-br(sm) {
|
|
182
|
-
grid-column:
|
|
201
|
+
grid-column: 6;
|
|
183
202
|
grid-row: 1;
|
|
184
203
|
}
|
|
185
204
|
}
|
|
@@ -197,10 +216,17 @@ $breakpoint: sm;
|
|
|
197
216
|
margin: 0 16px;
|
|
198
217
|
}
|
|
199
218
|
|
|
219
|
+
.layout-header__notifications {
|
|
220
|
+
@include from-br(sm) {
|
|
221
|
+
grid-column: 4;
|
|
222
|
+
grid-row: 1;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
200
226
|
.layout-header__language {
|
|
201
227
|
@include from-br(sm) {
|
|
202
228
|
position: relative;
|
|
203
|
-
grid-column:
|
|
229
|
+
grid-column: 5;
|
|
204
230
|
grid-row: 1;
|
|
205
231
|
}
|
|
206
232
|
}
|
|
@@ -2,14 +2,16 @@
|
|
|
2
2
|
<NuxtLink
|
|
3
3
|
:class="{'layout-logo--glow': glow}"
|
|
4
4
|
:to="generateLink('/')"
|
|
5
|
+
active-class=""
|
|
6
|
+
exact-active-class=""
|
|
5
7
|
class="layout-logo"
|
|
6
8
|
@click="onLogoClick"
|
|
7
9
|
>
|
|
8
10
|
<img
|
|
9
11
|
class="layout-logo__image"
|
|
10
12
|
src="/img/logo.svg"
|
|
11
|
-
width="
|
|
12
|
-
height="
|
|
13
|
+
width="120"
|
|
14
|
+
height="20"
|
|
13
15
|
alt="gay.cool"
|
|
14
16
|
>
|
|
15
17
|
</NuxtLink>
|
|
@@ -38,4 +40,11 @@ function onLogoClick() {
|
|
|
38
40
|
opacity: 0.9;
|
|
39
41
|
}
|
|
40
42
|
}
|
|
43
|
+
|
|
44
|
+
.layout-logo__image {
|
|
45
|
+
@include from-br(sm) {
|
|
46
|
+
width: 144px;
|
|
47
|
+
height: 24px;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
41
50
|
</style>
|