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.
Files changed (66) hide show
  1. package/assets/icons/common/bell.svg +1 -0
  2. package/assets/scss/mixins/_font-sizes.scss +5 -0
  3. package/assets/scss/themes/dark/_theme.scss +38 -23
  4. package/assets/scss/themes/light/_theme.scss +34 -21
  5. package/assets/scss/vars/_palette.scss +1 -0
  6. package/assets/scss/vars/_tokens.scss +2 -0
  7. package/components/card/category.vue +22 -1
  8. package/components/card/playlist.vue +32 -4
  9. package/components/card/round.vue +48 -4
  10. package/components/filter/main.vue +2 -6
  11. package/components/filter/model.vue +2 -6
  12. package/components/grid/playlists.vue +2 -0
  13. package/components/layout/burger-item.vue +8 -8
  14. package/components/layout/extra-links.vue +2 -0
  15. package/components/layout/header.vue +29 -3
  16. package/components/layout/logo.vue +11 -2
  17. package/components/layout/notifications.vue +79 -0
  18. package/components/section/swiper-cards.vue +65 -34
  19. package/components/ui/btn.vue +15 -0
  20. package/components/ui/popup.vue +0 -4
  21. package/components/ui/swiper.vue +19 -4
  22. package/components/ui/view-all.vue +113 -0
  23. package/composables/use-meta.ts +67 -28
  24. package/package.json +1 -1
  25. package/pages/2257.vue +1 -1
  26. package/pages/categories/all.vue +1 -1
  27. package/pages/categories/index.vue +1 -1
  28. package/pages/categories/letter/[slug].vue +7 -1
  29. package/pages/channels/[channel].vue +8 -1
  30. package/pages/channels/index.vue +6 -1
  31. package/pages/confirm/registration/[token].vue +1 -1
  32. package/pages/contacts.vue +1 -1
  33. package/pages/dmca.vue +1 -1
  34. package/pages/following.vue +201 -0
  35. package/pages/index.vue +8 -10
  36. package/pages/library/index.vue +5 -2
  37. package/pages/models/[slug]/channel/[channel].vue +9 -1
  38. package/pages/models/[slug]/index.vue +9 -1
  39. package/pages/models/[slug]/tag/[tag].vue +10 -1
  40. package/pages/models/index.vue +7 -1
  41. package/pages/models/letter/[slug].vue +8 -1
  42. package/pages/playlists/[playlistId]/[slug].vue +9 -1
  43. package/pages/playlists/index.vue +6 -1
  44. package/pages/policy.vue +1 -1
  45. package/pages/search/[slug]/index.vue +26 -38
  46. package/pages/search/[slug]/models.vue +7 -1
  47. package/pages/search/[slug]/videos.vue +7 -1
  48. package/pages/tag/[tag].vue +8 -1
  49. package/pages/terms.vue +1 -1
  50. package/pages/user/profile.vue +1 -1
  51. package/pages/user/recovery-password.vue +1 -1
  52. package/pages/user/settings.vue +1 -1
  53. package/pages/videos/[slug].vue +8 -1
  54. package/runtime/utils/cleaners/__tests__/clean-model-info.test.ts +13 -0
  55. package/runtime/utils/cleaners/clean-model-info.ts +1 -0
  56. package/server/api/models/list-by-niche.post.ts +3 -1
  57. package/stubs/library-follows.ts +75 -2
  58. package/types/button-themes.d.ts +1 -1
  59. package/types/card-info.d.ts +2 -0
  60. package/types/category-card.d.ts +2 -0
  61. package/types/index.d.ts +1 -0
  62. package/types/page-seo.d.ts +6 -0
  63. package/types/paginated-response.d.ts +3 -0
  64. package/types/playlist-card.d.ts +2 -0
  65. package/types/raw/raw-model-info.d.ts +2 -1
  66. 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>
@@ -1,3 +1,8 @@
1
+ @mixin font-4xs {
2
+ font-size: 10px;
3
+ line-height: 1;
4
+ }
5
+
1
6
  @mixin font-3xs {
2
7
  font-size: 11px;
3
8
  line-height: 1;
@@ -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: transparent;
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
- $card-round-all-bg: $color-night;
337
- $card-round-all-bg--hover: $color-night;
338
- $card-round-all-text: $color-zinc-400;
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-menu-item-text: $color-zinc-300;
390
- $burger-menu-item-icon: $color-zinc-400;
391
- $burger-menu-item-bg--active: $color-indigo-600-20;
392
- $burger-menu-item-text--active: $color-white;
393
- $burger-menu-item-icon--active: $color-indigo-400;
394
- $burger-menu-item-accent-icon: $nav-icon-accent;
395
- $burger-menu-item-child-text: $color-zinc-400;
396
- $burger-menu-item-child-icon: $color-zinc-500;
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-zinc-400;
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
- $card-round-all-bg: $color-gray-300;
394
- $card-round-all-bg--hover: $color-gray-400;
395
- $card-round-all-text: $color-gray-700;
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-menu-item-text: $color-white;
447
- $burger-menu-item-icon: $color-gray-400;
448
- $burger-menu-item-bg--active: $color-slate-750;
449
- $burger-menu-item-text--active: $color-white;
450
- $burger-menu-item-icon--active: $color-gray-400;
451
- $burger-menu-item-accent-icon: $color-red-400;
452
- $burger-menu-item-child-text: $color-gray-400;
453
- $burger-menu-item-child-icon: $color-gray-400;
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 class="card-category__count">
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
- overflow: hidden;
310
- white-space: nowrap;
311
- text-overflow: ellipsis;
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 class="card-round__count">
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: $card-round-size;
71
- height: $card-round-size;
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: grid;
307
- grid-template-columns: repeat(2, 1fr);
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: grid;
238
- grid-template-columns: repeat(2, 1fr);
233
+ display: flex;
234
+ justify-content: space-between;
239
235
  column-gap: 8px;
240
236
  }
241
237
 
@@ -10,6 +10,8 @@
10
10
  @share="onShare"
11
11
  />
12
12
 
13
+ <slot/>
14
+
13
15
  <ShareMain
14
16
  v-model="isShareOpen"
15
17
  :url="shareUrl"
@@ -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-menu-item-text;
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-menu-item-bg--active;
103
+ background-color: $burger-item-bg--active;
104
104
  border-radius: $radius;
105
- color: $burger-menu-item-text--active;
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-menu-item-icon--active;
109
+ color: $burger-item-icon--active;
110
110
  }
111
111
 
112
112
  .layout-burger-item__icon {
113
- color: $burger-menu-item-icon;
113
+ color: $burger-item-icon;
114
114
  flex-shrink: 0;
115
115
  }
116
116
 
117
117
  .layout-burger-item__icon.--accent {
118
- color: $burger-menu-item-accent-icon;
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-menu-item-child-text;
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-menu-item-child-icon;
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: 5;
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: 4;
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="144"
12
- height="24"
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>