itube-specs 0.0.866 → 0.0.869

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.
@@ -13,8 +13,8 @@ select:-webkit-autofill,
13
13
  select:-webkit-autofill:hover,
14
14
  select:-webkit-autofill:focus {
15
15
  box-shadow: 0 0 0 1000px transparent inset !important;
16
- -webkit-text-fill-color: $input-autofill-text !important;
17
- color: $input-autofill-text !important;
16
+ -webkit-text-fill-color: var(--input-autofill-text, #{$input-autofill-text}) !important;
17
+ color: var(--input-autofill-text, #{$input-autofill-text}) !important;
18
18
  border: none !important;
19
19
  transition: background-color 5000s ease-in-out 0s !important;
20
20
  font-size: inherit !important;
@@ -37,7 +37,8 @@ $surface-roles: (
37
37
  control-bg: (--input-bg, --select-bg),
38
38
  control-compact-bg: (--input-s-bg,),
39
39
  control-bg--disabled: (--input-bg--disabled,),
40
- control-text: (--input-text, --select-text),
40
+ control-text: (--input-text, --input-autofill-text, --select-text),
41
+ control-compact-text: (--input-s-text,),
41
42
  control-text--disabled: (--input-text--disabled,),
42
43
  control-placeholder: (--input-placeholder, --select-placeholder),
43
44
  control-label: (--input-label, --select-label),
@@ -77,10 +77,10 @@ $input-label: $color-zinc-400;
77
77
  $input-icon: inherit;
78
78
  $input-pre-icon: $color-zinc-500;
79
79
  $input-s-bg: $color-zinc-800;
80
+ $input-s-text: $color-white;
80
81
  $input-s-border: transparent;
81
82
  $input-s-border--focus: $color-zinc-600;
82
83
  $input-text--disabled: $color-zinc-400;
83
- $input-text--error: $color-red-500;
84
84
  $input-border--error: $color-red-500;
85
85
  $input-autofill-text: $color-white;
86
86
  $input-button-text: $color-zinc-500;
@@ -218,8 +218,6 @@ $video-info-description-text: $color-zinc-400;
218
218
  // ─── Video interface ───
219
219
  $video-interface-button-bg: $color-zinc-800;
220
220
  $video-interface-button-text: $color-zinc-400;
221
- $video-interface-button-bg--hover: $color-zinc-700;
222
- $video-interface-button-text--hover: $color-white;
223
221
 
224
222
  // ─── Video channel ───
225
223
  $video-channel-bg: $color-zinc-800-60;
@@ -338,6 +336,18 @@ $language-value-text: $color-white;
338
336
  $language-description: $color-zinc-500;
339
337
  $language-empty-text: $color-zinc-300;
340
338
 
339
+ // ─── Niche ───
340
+ $niche-trigger-text: $color-zinc-400;
341
+ $niche-angle--hover: $color-white;
342
+ $niche-title: $color-zinc-500;
343
+ $niche-value-text: $color-white;
344
+ $niche-menu-bg: $color-night;
345
+ $niche-menu-border: $color-zinc-800;
346
+ $niche-item-text: $color-zinc-300;
347
+ $niche-item-bg--hover: $color-zinc-800;
348
+ $niche-item-text--current: $color-white;
349
+ $niche-item-bg--current: $color-zinc-700;
350
+
341
351
  // ─── Footer language ───
342
352
  $footer-language-bg: $color-zinc-800-50;
343
353
  $footer-language-bg--hover: $color-zinc-700;
@@ -416,9 +426,7 @@ $dropdown-crest: $color-zinc-500;
416
426
  $dropdown-separator: $color-zinc-800-60;
417
427
 
418
428
  // ─── Snackbar ───
419
- $snackbar-bg: $color-zinc-800;
420
429
  $snackbar-text: $color-zinc-200;
421
- $snackbar-border: $color-zinc-700;
422
430
  $snackbar-close: $color-zinc-500;
423
431
  $snackbar-close--hover: $color-zinc-300;
424
432
  $snackbar-close-bg--hover: $color-zinc-700;
@@ -516,7 +524,6 @@ $radio-bg: $color-zinc-800;
516
524
  $radio-border--checked: $color-indigo-600;
517
525
  $radio-bg--checked: $color-indigo-600;
518
526
  $radio-label: $color-white;
519
- $radio-label--hover: $color-zinc-300;
520
527
  $radio-description: $color-zinc-500;
521
528
  $radio-border--disabled: $color-zinc-800;
522
529
  $radio-text--disabled: $color-zinc-400;
@@ -588,9 +595,6 @@ $expand-row-pre-text: $color-zinc-500;
588
595
  $full-description-text: $color-zinc-400;
589
596
  $full-description-bg: $color-zinc-800-50;
590
597
 
591
- // ─── Swiper items ───
592
- $swiper-items-all-text: $color-zinc-400;
593
-
594
598
  // ─── Report ───
595
599
  $report-category-border: $color-zinc-800;
596
600
  $report-category-bg--hover: $color-zinc-800-50;
@@ -600,9 +604,6 @@ $report-text: $color-zinc-400;
600
604
  $report-required: $color-red-500;
601
605
  $report-text--error: $color-red-500;
602
606
 
603
- // ─── Model filters ───
604
- $model-filters-border: $color-zinc-800;
605
-
606
607
  // ─── Share ───
607
608
  $share-cancel-border: $color-zinc-800;
608
609
  $share-button-copy-bg: $color-zinc-800;
@@ -677,10 +678,6 @@ $player-menu-scene-time: $color-zinc-500; // text-zinc-500
677
678
  $player-menu-scene-time--current: $color-zinc-200; // text-zinc-200
678
679
  $player-menu-section-title: $color-zinc-400;
679
680
 
680
- // ─── Filter page ───
681
- $filter-page-group-title: $color-white;
682
- $filter-page-group-border: $color-zinc-800;
683
-
684
681
  // ─── Search ───
685
682
  $search-close-bg: $color-zinc-700;
686
683
  $search-close-text: $color-zinc-300;
@@ -716,10 +713,8 @@ $filters-main-bg--hover: $color-zinc-700-70;
716
713
 
717
714
  // ─── Info grid ───
718
715
  $info-grid-group-title: $color-zinc-300;
719
- $info-grid-item-bg: $color-zinc-700-50;
720
716
  $info-grid-item-border: $color-zinc-700-50;
721
717
  $info-grid-item-bg--hover: $color-zinc-700-30;
722
- $info-grid-item-border--hover: $color-zinc-600;
723
718
  $info-grid-item-title: $color-zinc-500;
724
719
  $info-grid-item-title-bg: $color-zinc-900;
725
720
  $info-grid-item-value-bg: $color-zinc-900;
@@ -727,7 +722,6 @@ $info-grid-item-value-bg--link: $color-zinc-700-50;
727
722
  $info-grid-item-value-link-bg--hover: $color-zinc-700-50;
728
723
  $info-grid-item-value--link: $color-white;
729
724
  $info-grid-item-value-border: $color-zinc-700-50;
730
- $info-grid-item-values: $color-white;
731
725
  $info-grid-item-success: $color-green-400;
732
726
  $info-grid-item-warning: $color-red-400;
733
727
  $info-grid-item-icon: $color-zinc-400;
@@ -771,7 +765,6 @@ $shadow-color--active: $mono-black-42; // тень при drag
771
765
 
772
766
  // ─── Page models ───
773
767
  $page-models-popular-border: $color-zinc-800;
774
- $page-models-categories-border: $color-zinc-800-50;
775
768
 
776
769
  // ─── Page model videos ───
777
770
  $page-model-videos-section-border: $color-zinc-800-50;
@@ -797,7 +790,6 @@ $model-card-params-footer: $color-zinc-500;
797
790
  $model-card-name: $color-zinc-200;
798
791
  $model-card-name--hover: $color-indigo-400;
799
792
  $model-card-count: $color-zinc-500;
800
- $model-card-divider: $color-zinc-700;
801
793
 
802
794
  // ─── Playlist card ───
803
795
  $playlist-card-bg: $color-zinc-800-50;
@@ -884,7 +876,6 @@ $native-card-secondary: $color-zinc-500;
884
876
 
885
877
  // ─── Page: grouped categories ───
886
878
  $grouped-highlight-border: $color-zinc-800;
887
- $grouped-separator: $color-zinc-800;
888
879
  $grouped-category-icon: $color-zinc-500;
889
880
  $grouped-footer-text: $color-zinc-500;
890
881
  $grouped-section-border: $color-zinc-800;
@@ -932,16 +923,6 @@ $contacts-wrapper-bg: $color-zinc-900;
932
923
  $contacts-link: $color-indigo-400;
933
924
  $contacts-link--hover: $color-indigo-300;
934
925
 
935
- // ─── Page: playlist ───
936
- $page-playlist-edit: $color-zinc-500;
937
- $page-playlist-edit-border: $color-zinc-800;
938
- $page-playlist-header-border: $color-zinc-800;
939
- $page-playlist-avatar-bg: $color-indigo-600;
940
- $page-playlist-avatar-text: $color-white;
941
- $page-playlist-user-name: $color-zinc-400;
942
- $page-playlist-private-bg: $color-zinc-800-60;
943
- $page-playlist-like-bg: $color-zinc-900;
944
-
945
926
  // ─── Page: playlists ───
946
927
  $page-playlists-border: $color-zinc-800;
947
928
 
@@ -87,14 +87,14 @@ $input-label: $color-gray-700;
87
87
  $input-icon: $color-gray-500;
88
88
  $input-pre-icon: $color-gray-500;
89
89
  $input-s-bg: $color-slate-750;
90
+ $input-s-text: $color-white;
90
91
  $input-s-border: transparent;
91
92
  $input-s-border--focus: $color-indigo-soft;
92
93
  $input-text--disabled: $color-gray-400;
93
- $input-text--error: $color-red-500;
94
94
  $input-border--error: $color-red-500;
95
- $input-autofill-text: $color-white;
95
+ $input-autofill-text: $color-gray-900;
96
96
  $input-button-text: $color-gray-500;
97
- $input-button-text--hover: $color-white;
97
+ $input-button-text--hover: $color-gray-500;
98
98
 
99
99
  // ─── Surfaces ("островки") ───
100
100
  // Только отличия от базовых токенов. Подложки нет в карте — нет и оверрайда.
@@ -207,7 +207,7 @@ $popup-auth-icon-bg: $color-indigo-600;
207
207
  $popup-border: transparent;
208
208
  $popup-footer-border: $color-slate-750;
209
209
  $popup-text: $color-white;
210
- $popup-scrollbar: $color-gray-800;
210
+ $popup-scrollbar: $color-gray-400;
211
211
  $popup-close-icon: $color-gray-400;
212
212
  $popup-close-icon--hover: $color-white;
213
213
 
@@ -275,8 +275,6 @@ $video-info-description-text: $color-gray-700;
275
275
  // ─── Video interface ───
276
276
  $video-interface-button-bg: $color-slate-750;
277
277
  $video-interface-button-text: $color-gray-400;
278
- $video-interface-button-bg--hover: $color-slate-700;
279
- $video-interface-button-text--hover: $color-white;
280
278
 
281
279
  // ─── Video channel ───
282
280
  $video-channel-bg: $color-gray-200;
@@ -395,6 +393,18 @@ $language-value-text: $color-white;
395
393
  $language-description: $color-gray-500;
396
394
  $language-empty-text: $color-gray-400;
397
395
 
396
+ // ─── Niche ───
397
+ $niche-trigger-text: $color-gray-500;
398
+ $niche-angle--hover: $color-gray-300;
399
+ $niche-title: $color-gray-400;
400
+ $niche-value-text: $color-white;
401
+ $niche-menu-bg: $color-slate-850;
402
+ $niche-menu-border: $color-white-10;
403
+ $niche-item-text: $color-gray-300;
404
+ $niche-item-bg--hover: $color-slate-750;
405
+ $niche-item-text--current: $color-white;
406
+ $niche-item-bg--current: $color-indigo-soft;
407
+
398
408
  // ─── Footer language ───
399
409
  $footer-language-bg: $color-slate-750;
400
410
  $footer-language-bg--hover: $color-slate-700;
@@ -473,9 +483,7 @@ $dropdown-crest: $color-gray-400;
473
483
  $dropdown-separator: $color-slate-750;
474
484
 
475
485
  // ─── Snackbar ───
476
- $snackbar-bg: $color-slate-750;
477
486
  $snackbar-text: $color-gray-200;
478
- $snackbar-border: $color-slate-700;
479
487
  $snackbar-close: $color-gray-500;
480
488
  $snackbar-close--hover: $color-gray-300;
481
489
  $snackbar-close-bg--hover: $color-slate-700;
@@ -556,8 +564,8 @@ $checkbox-border: $color-gray-400;
556
564
  $checkbox-color: $color-white;
557
565
  $checkbox-bg--checked: $color-indigo-soft;
558
566
  $checkbox-border--checked: $color-indigo-600;
559
- $checkbox-label: $color-gray-400;
560
- $checkbox-label--hover: $color-gray-300;
567
+ $checkbox-label: $color-gray-700;
568
+ $checkbox-label--hover: $color-gray-500;
561
569
  $checkbox-description: $color-gray-500;
562
570
  $checkbox-border--disabled: transparent;
563
571
  $checkbox-text--disabled: $color-gray-400;
@@ -569,7 +577,6 @@ $radio-bg: transparent;
569
577
  $radio-border--checked: $color-indigo-soft;
570
578
  $radio-bg--checked: $color-indigo-soft;
571
579
  $radio-label: $color-gray-700;
572
- $radio-label--hover: $color-gray-300;
573
580
  $radio-description: $color-gray-500;
574
581
  $radio-border--disabled: $color-slate-700;
575
582
  $radio-text--disabled: $color-gray-400;
@@ -641,9 +648,6 @@ $expand-row-pre-text: $color-gray-500;
641
648
  $full-description-text: $color-gray-600;
642
649
  $full-description-bg: $color-gray-100;
643
650
 
644
- // ─── Swiper items ───
645
- $swiper-items-all-text: $color-gray-400;
646
-
647
651
  // ─── Report ───
648
652
  $report-category-border: $color-slate-700;
649
653
  $report-category-bg--hover: $color-slate-750;
@@ -653,9 +657,6 @@ $report-text: $color-gray-400;
653
657
  $report-required: $color-red-500;
654
658
  $report-text--error: $color-red-500;
655
659
 
656
- // ─── Model filters ───
657
- $model-filters-border: transparent;
658
-
659
660
  // ─── Share ───
660
661
  $share-cancel-border: transparent;
661
662
  $share-button-copy-bg: $color-slate-750;
@@ -730,10 +731,6 @@ $player-menu-scene-time: $color-gray-500; // text-zinc-500
730
731
  $player-menu-scene-time--current: $color-gray-200; // text-zinc-200
731
732
  $player-menu-section-title: $color-gray-400;
732
733
 
733
- // ─── Filter page ───
734
- $filter-page-group-title: $color-white;
735
- $filter-page-group-border: transparent;
736
-
737
734
  // ─── Filters main ───
738
735
  $filters-main-slider-bg: $color-night;
739
736
  $filters-main-slider-border: transparent;
@@ -746,10 +743,8 @@ $filters-main-bg--hover: $button-secondary-bg--hover;
746
743
 
747
744
  // ─── Info grid ───
748
745
  $info-grid-group-title: $color-gray-600;
749
- $info-grid-item-bg: $color-white;
750
746
  $info-grid-item-border: $color-gray-300;
751
747
  $info-grid-item-bg--hover: $color-slate-700;
752
- $info-grid-item-border--hover: $color-gray-600;
753
748
  $info-grid-item-title: $color-gray-500;
754
749
  $info-grid-item-title-bg: $color-white;
755
750
  $info-grid-item-value-bg: $color-gray-100;
@@ -757,7 +752,6 @@ $info-grid-item-value-bg--link: $color-slate-700;
757
752
  $info-grid-item-value-link-bg--hover: $color-slate-750;
758
753
  $info-grid-item-value--link: $color-white;
759
754
  $info-grid-item-value-border: $color-gray-300;
760
- $info-grid-item-values: $color-white;
761
755
  $info-grid-item-success: $color-green-400;
762
756
  $info-grid-item-warning: $color-red-400;
763
757
  $info-grid-item-icon: $color-gray-400;
@@ -801,7 +795,6 @@ $shadow-color--active: $mono-black-42; // тень при drag
801
795
 
802
796
  // ─── Page models ───
803
797
  $page-models-popular-border: transparent;
804
- $page-models-categories-border: transparent;
805
798
 
806
799
  // ─── Page model videos ───
807
800
  $page-model-videos-section-border: transparent;
@@ -827,7 +820,6 @@ $model-card-params-footer: $color-gray-600;
827
820
  $model-card-name: $color-gray-900;
828
821
  $model-card-name--hover: $model-card-name;
829
822
  $model-card-count: $color-gray-600;
830
- $model-card-divider: $color-gray-400;
831
823
 
832
824
  // ─── Playlist card ───
833
825
  $playlist-card-bg: $color-gray-100;
@@ -871,8 +863,8 @@ $channel-card-mini-name: $color-white;
871
863
  $channel-card-mini-info: $color-gray-400;
872
864
 
873
865
  // ─── Playlist card mini ───
874
- $playlist-card-mini-empty-gradient-from: $color-gray-700;
875
- $playlist-card-mini-empty-gradient-to: $color-gray-800;
866
+ $playlist-card-mini-empty-gradient-from: $color-slate-700;
867
+ $playlist-card-mini-empty-gradient-to: $color-slate-750;
876
868
  $playlist-card-mini-empty-text: $color-white;
877
869
  $playlist-card-mini-name: $color-white;
878
870
  $playlist-card-mini-user: $color-gray-500;
@@ -908,13 +900,12 @@ $auth-register-link--hover: $color-indigo-blue;
908
900
  $auth-register-login: $color-gray-400;
909
901
 
910
902
  // ─── Native card ───
911
- $native-card-bg: $color-black;
903
+ $native-card-bg: $color-slate-800;
912
904
  $native-card-primary: $color-gray-400;
913
905
  $native-card-secondary: $color-gray-500;
914
906
 
915
907
  // ─── Page: grouped categories ───
916
908
  $grouped-highlight-border: transparent;
917
- $grouped-separator: $color-gray-800;
918
909
  $grouped-category-icon: $color-gray-500;
919
910
  $grouped-footer-text: $color-gray-500;
920
911
  $grouped-section-border: $color-gray-200;
@@ -962,16 +953,6 @@ $contacts-wrapper-bg: $color-gray-200;
962
953
  $contacts-link: $color-indigo-400;
963
954
  $contacts-link--hover: $color-indigo-300;
964
955
 
965
- // ─── Page: playlist ───
966
- $page-playlist-edit: $color-gray-500;
967
- $page-playlist-edit-border: $color-slate-700;
968
- $page-playlist-header-border: $color-slate-700;
969
- $page-playlist-avatar-bg: $color-indigo-600;
970
- $page-playlist-avatar-text: $color-white;
971
- $page-playlist-user-name: $color-gray-400;
972
- $page-playlist-private-bg: $color-slate-750;
973
- $page-playlist-like-bg: $color-slate-800;
974
-
975
956
  // ─── Page: playlists ───
976
957
  $page-playlists-border: transparent;
977
958
 
@@ -68,6 +68,11 @@
68
68
  </div>
69
69
  </nav>
70
70
 
71
+ <LayoutNiche
72
+ class="layout-burger__niche"
73
+ icon-size="20"
74
+ />
75
+
71
76
  <LayoutLanguage
72
77
  class="layout-burger__language"
73
78
  icon-size="20"
@@ -257,6 +262,10 @@ router.afterEach(() => {
257
262
  padding-bottom: 12px;
258
263
  }
259
264
 
265
+ .layout-burger__niche {
266
+ margin-bottom: 12px;
267
+ }
268
+
260
269
  .layout-burger__close {
261
270
  position: fixed;
262
271
  top: 16px;
@@ -10,6 +10,11 @@
10
10
  glow
11
11
  class="layout-header__logo"
12
12
  />
13
+ <LayoutNiche
14
+ class="layout-header__niche _from-sm"
15
+ icon-size="20"
16
+ />
17
+
13
18
  <div
14
19
  ref="languageRef"
15
20
  class="layout-header__language _from-sm"
@@ -135,7 +140,7 @@ $breakpoint: sm;
135
140
  width: 100%;
136
141
 
137
142
  @include from-br(sm) {
138
- grid-template-columns: auto 1fr auto auto;
143
+ grid-template-columns: auto 1fr auto auto auto;
139
144
  }
140
145
  }
141
146
 
@@ -180,7 +185,14 @@ $breakpoint: sm;
180
185
  .layout-header__user,
181
186
  .layout-header__sign-up {
182
187
  @include from-br(sm) {
183
- grid-column: 4;
188
+ grid-column: 5;
189
+ grid-row: 1;
190
+ }
191
+ }
192
+
193
+ .layout-header__niche {
194
+ @include from-br(sm) {
195
+ grid-column: 3;
184
196
  grid-row: 1;
185
197
  }
186
198
  }
@@ -194,7 +206,7 @@ $breakpoint: sm;
194
206
  .layout-header__language {
195
207
  @include from-br(sm) {
196
208
  position: relative;
197
- grid-column: 3;
209
+ grid-column: 4;
198
210
  grid-row: 1;
199
211
  }
200
212
  }
@@ -0,0 +1,179 @@
1
+ <template>
2
+ <div
3
+ v-if="niches.length > 1"
4
+ ref="nicheRef"
5
+ class="layout-niche"
6
+ @keydown.esc="isOpen = false"
7
+ >
8
+ <button
9
+ :class="{'--open': isOpen}"
10
+ :aria-expanded="isOpen"
11
+ :aria-label="$t('niche')"
12
+ class="layout-niche__trigger"
13
+ type="button"
14
+ @click="isOpen = !isOpen"
15
+ >
16
+ <UiIcon
17
+ :name="currentNiche.icon"
18
+ :size="iconSize"
19
+ class="layout-niche__icon"
20
+ />
21
+ <span class="layout-niche__current _to-sm">
22
+ <span>{{ $t('niche') }}:&nbsp;</span>
23
+ <span class="layout-niche__text">{{ $t(currentNiche.label) }}</span>
24
+ </span>
25
+ <UiIcon
26
+ class="layout-niche__angle"
27
+ name="angle-down"
28
+ size="12"
29
+ />
30
+ </button>
31
+ <ul
32
+ v-if="isOpen"
33
+ class="layout-niche__list"
34
+ >
35
+ <li
36
+ v-for="item in niches"
37
+ :key="`niche-${item.name}`"
38
+ >
39
+ <button
40
+ :class="{'--current': item.name === currentNiche.name}"
41
+ :aria-current="item.name === currentNiche.name ? 'true' : undefined"
42
+ class="layout-niche__item"
43
+ type="button"
44
+ @click="select(item.name)"
45
+ >
46
+ <UiIcon
47
+ :name="item.icon"
48
+ class="layout-niche__item-icon"
49
+ size="20"
50
+ />
51
+ {{ $t(item.label) }}
52
+ </button>
53
+ </li>
54
+ </ul>
55
+ </div>
56
+ </template>
57
+
58
+ <script setup lang="ts">
59
+ import { onClickOutside } from '@vueuse/core';
60
+ import type { Niche } from '../../runtime';
61
+
62
+ withDefaults(defineProps<{
63
+ iconSize?: string
64
+ }>(), {
65
+ iconSize: '20'
66
+ }
67
+ );
68
+
69
+ const { niches, currentNiche, changeNiche } = useNiches();
70
+
71
+ const nicheRef = ref<HTMLElement>();
72
+ const isOpen = ref(false);
73
+
74
+ onClickOutside(nicheRef, () => {
75
+ isOpen.value = false;
76
+ });
77
+
78
+ function select(name: Niche) {
79
+ isOpen.value = false;
80
+ changeNiche(name);
81
+ }
82
+ </script>
83
+
84
+ <style lang="scss">
85
+ .layout-niche {
86
+ display: grid;
87
+
88
+ @include from-br(sm) {
89
+ position: relative;
90
+ }
91
+ }
92
+
93
+ .layout-niche__trigger {
94
+ display: grid;
95
+ grid-auto-flow: column;
96
+ align-items: center;
97
+ justify-content: start;
98
+ column-gap: 6px;
99
+ padding: 6px 8px;
100
+ color: $niche-trigger-text;
101
+
102
+ @include to-br(sm) {
103
+ grid-template-columns: auto 1fr auto;
104
+ width: 100%;
105
+ padding: 10px 16px;
106
+ column-gap: 16px;
107
+ }
108
+ }
109
+
110
+ .layout-niche__current {
111
+ @include font-sm;
112
+
113
+ display: grid;
114
+ grid-template-columns: auto 1fr;
115
+ color: $niche-title;
116
+ }
117
+
118
+ .layout-niche__text {
119
+ color: $niche-value-text;
120
+ font-weight: 500;
121
+ }
122
+
123
+ .layout-niche__angle {
124
+ pointer-events: none;
125
+ transition: transform var(--transition), color var(--transition);
126
+ }
127
+
128
+ .layout-niche__trigger:hover .layout-niche__angle {
129
+ color: $niche-angle--hover;
130
+ }
131
+
132
+ .layout-niche__trigger.--open .layout-niche__angle {
133
+ transform: rotate(180deg);
134
+ }
135
+
136
+ .layout-niche__list {
137
+ display: grid;
138
+
139
+ @include from-br(sm) {
140
+ position: absolute;
141
+ right: 0;
142
+ bottom: -8px;
143
+ z-index: $z-index-plus;
144
+ min-width: 180px;
145
+ padding: 8px;
146
+ background-color: $niche-menu-bg;
147
+ border: 1px solid $niche-menu-border;
148
+ border-radius: $radius-xl;
149
+ transform: translateY(100%);
150
+ }
151
+ }
152
+
153
+ .layout-niche__item {
154
+ @include font-sm;
155
+
156
+ display: grid;
157
+ grid-template-columns: 20px 1fr;
158
+ align-items: center;
159
+ column-gap: 12px;
160
+ width: 100%;
161
+ padding: 10px 16px;
162
+ color: $niche-item-text;
163
+ text-align: start;
164
+ border-radius: $radius-lg;
165
+
166
+ @include hover(background-color) {
167
+ background-color: $niche-item-bg--hover;
168
+ }
169
+
170
+ @include from-br(sm) {
171
+ padding: 8px 10px;
172
+ }
173
+ }
174
+
175
+ .layout-niche__item.--current {
176
+ color: $niche-item-text--current;
177
+ background-color: $niche-item-bg--current;
178
+ }
179
+ </style>
@@ -121,12 +121,16 @@ $icon-size: 16px;
121
121
  padding-block: 12px;
122
122
 
123
123
  @include to-br(sm) {
124
+ --input-autofill-text: #{$search-text--mobile};
125
+
124
126
  color: $search-text--mobile;
125
127
  }
126
128
 
127
129
  @include from-br(sm) {
128
130
  @include font-sm;
129
131
 
132
+ --input-autofill-text: #{$search-text};
133
+
130
134
  color: $search-text;
131
135
  }
132
136
  }
@@ -336,6 +336,11 @@ const normalizedValue = computed(() => {
336
336
  color: var(--input-pre-icon, #{$input-pre-icon});
337
337
  }
338
338
 
339
+ .ui-input.ui-input--s {
340
+ --input-text: var(--input-s-text, #{$input-s-text});
341
+ --input-autofill-text: var(--input-s-text, #{$input-s-text});
342
+ }
343
+
339
344
  .ui-input.ui-input--s .ui-input__input {
340
345
  padding: 8px 16px;
341
346
  background-color: var(--input-s-bg, #{$input-s-bg});
@@ -0,0 +1,47 @@
1
+ import type { Niche } from '../runtime';
2
+ import { NicheHelper } from '../utils/niche-helper';
3
+
4
+ /** Иконка из assets/icons/common под каждую нишу. */
5
+ const NICHE_ICONS: Record<Niche, string> = {
6
+ straight: 'hetero',
7
+ gay: 'gay',
8
+ shemale: 'shemale',
9
+ };
10
+
11
+ export interface INicheItem {
12
+ name: Niche,
13
+ icon: string,
14
+ /** Ключ i18n с названием ниши */
15
+ label: string,
16
+ }
17
+
18
+ /**
19
+ * Ниши сайта для переключателя: список из per-site конфига проекта (appConfig.niches),
20
+ * текущая — из useState('niche') с фолбэком на дефолтную нишу окружения.
21
+ */
22
+ export const useNiches = () => {
23
+ const defaultNiche = NicheHelper.getSiteDefaultNiche();
24
+ const current = useState<Niche>('niche', () => defaultNiche);
25
+ const localePath = useLocalePath();
26
+
27
+ const niches = computed<INicheItem[]>(() =>
28
+ ((useAppConfig().niches as Niche[]) || []).map(name => ({
29
+ name,
30
+ icon: NICHE_ICONS[name] || 'earth',
31
+ label: `niches.${name}`,
32
+ })));
33
+
34
+ const currentNiche = computed(() => niches.value.find(item => item.name === current.value) || niches.value[0]);
35
+
36
+ /**
37
+ * Ниша влияет и на роутинг (префикс пути), и на заголовок X-Niche в SSR-запросах,
38
+ * поэтому переключение — полной перезагрузкой на корень выбранной ниши.
39
+ */
40
+ function changeNiche(name: Niche) {
41
+ if (name === current.value) return;
42
+ current.value = name;
43
+ window.location.href = localePath(name === defaultNiche ? '/' : `/${name}`);
44
+ }
45
+
46
+ return { niches, currentNiche, changeNiche };
47
+ };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "itube-specs",
3
3
  "type": "module",
4
- "version": "0.0.866",
4
+ "version": "0.0.869",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "./types/index.d.ts",
7
7
  "scripts": {
@@ -117,17 +117,6 @@ const breadcrumbs = [
117
117
  }
118
118
  }
119
119
 
120
- .grouped__options-separate {
121
- display: block;
122
- width: 1px;
123
- height: 24px;
124
- background-color: $grouped-separator;
125
-
126
- @include from-br(sm) {
127
- height: 32px;
128
- }
129
- }
130
-
131
120
  .grouped__loading {
132
121
  --size: 24px;
133
122