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.
- package/assets/scss/base/_hacks.scss +2 -2
- package/assets/scss/mixins/_surface.scss +2 -1
- package/assets/scss/themes/dark/_theme.scss +13 -32
- package/assets/scss/themes/light/_theme.scss +21 -40
- package/components/layout/burger.vue +9 -0
- package/components/layout/header.vue +15 -3
- package/components/layout/niche.vue +179 -0
- package/components/search/input.vue +4 -0
- package/components/ui/input.vue +5 -0
- package/composables/use-niches.ts +47 -0
- package/package.json +1 -1
- package/pages/categories/index.vue +0 -11
|
@@ -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-
|
|
95
|
+
$input-autofill-text: $color-gray-900;
|
|
96
96
|
$input-button-text: $color-gray-500;
|
|
97
|
-
$input-button-text--hover: $color-
|
|
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-
|
|
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-
|
|
560
|
-
$checkbox-label--hover: $color-gray-
|
|
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-
|
|
875
|
-
$playlist-card-mini-empty-gradient-to: $color-
|
|
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-
|
|
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:
|
|
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:
|
|
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') }}: </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
|
}
|
package/components/ui/input.vue
CHANGED
|
@@ -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
|
@@ -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
|
|