itube-specs 0.0.1028 → 0.0.1029

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/SITE_UPDATES.md CHANGED
@@ -11,6 +11,13 @@
11
11
  коммиты до бампа); `npm run patch` сам проставит ей номер версии. Формат пункта: что сделать и где,
12
12
  кому именно (всем / сайтам с N), что будет, если не сделать.
13
13
 
14
+ ## 0.0.1029 — 2026-10-13
15
+
16
+ - **Сайтам с рекламными ссылками над контентом на мобиле (videosection-redesign):** новая вторая навигация —
17
+ `LayoutSecondNav` в `layouts/default.vue` (до 1024px, на всех страницах основного лэйаута). Пункты задаёт сайт в
18
+ `appConfig.secondNav`: `{ title, link, icon?, dot?, featureFlag? }`, `link` — строка или адреса по нишам. Пример —
19
+ `config/second-nav.config.ts` videosection-redesign. Остальным сайтам ничего не делать: без `secondNav` блока нет.
20
+
14
21
  ## 0.0.1023 — 2026-10-08
15
22
 
16
23
  - **Всем сайтам:** в `package.json` заменить скрипт `spec` на `"spec": "sh node_modules/itube-specs/scripts/spec.sh"`
@@ -1008,11 +1008,35 @@ $auth-register-link: $color-indigo-400;
1008
1008
  $auth-register-link--hover: $color-indigo-300;
1009
1009
  $auth-register-login: $color-zinc-500;
1010
1010
 
1011
+ // ─── Layout: second nav (рекламные ссылки над контентом на мобиле) ───
1012
+ $layout-second-nav-link-bg: $color-indigo-600;
1013
+ $layout-second-nav-link-text: $color-white;
1014
+ $layout-second-nav-dot-bg: $color-green-400;
1015
+
1011
1016
  // ─── Native card ───
1012
1017
  $native-card-bg: $color-black;
1013
1018
  $native-card-primary: $color-zinc-400;
1014
1019
  $native-card-secondary: $color-zinc-500;
1015
1020
 
1021
+ // ─── Adv: плашка «Реклама» поверх креатива ───
1022
+ $adv-label-text: $color-white;
1023
+ $adv-label-bg: $color-black-50;
1024
+
1025
+ // ─── Adv: партнёрская карусель FapHouse ───
1026
+ $faphouse-item-text: $video-card-text;
1027
+ $faphouse-item-text--hover: $video-card-text--hover;
1028
+ $faphouse-poster-bg: $native-card-bg;
1029
+ $faphouse-ad-text: $color-white;
1030
+ $faphouse-ad-bg: $color-indigo-600;
1031
+ $faphouse-duration-text: $color-white;
1032
+ $faphouse-duration-bg: $color-black-75;
1033
+ $faphouse-promo-bg-from: $color-amber-400;
1034
+ $faphouse-promo-bg-to: $color-amber-500;
1035
+ $faphouse-promo-text: $color-black;
1036
+ $faphouse-promo-shadow--hover: 0 10px 15px -3px #{$color-black-25};
1037
+ $faphouse-promo-action-text: $color-white;
1038
+ $faphouse-promo-action-bg: $color-red-700;
1039
+
1016
1040
  // ─── Page: grouped categories ───
1017
1041
  $grouped-highlight-border: $color-zinc-800;
1018
1042
  $grouped-category-icon: $color-zinc-500;
@@ -1035,11 +1035,35 @@ $auth-register-link: $color-indigo-soft;
1035
1035
  $auth-register-link--hover: $color-indigo-blue;
1036
1036
  $auth-register-login: $color-gray-400;
1037
1037
 
1038
+ // ─── Layout: second nav (рекламные ссылки над контентом на мобиле) ───
1039
+ $layout-second-nav-link-bg: $color-indigo-600;
1040
+ $layout-second-nav-link-text: $color-white;
1041
+ $layout-second-nav-dot-bg: $color-green-400;
1042
+
1038
1043
  // ─── Native card ───
1039
1044
  $native-card-bg: $color-slate-800;
1040
1045
  $native-card-primary: $color-gray-400;
1041
1046
  $native-card-secondary: $color-gray-500;
1042
1047
 
1048
+ // ─── Adv: плашка «Реклама» поверх креатива ───
1049
+ $adv-label-text: $color-white;
1050
+ $adv-label-bg: $color-black-50;
1051
+
1052
+ // ─── Adv: партнёрская карусель FapHouse ───
1053
+ $faphouse-item-text: $video-card-text;
1054
+ $faphouse-item-text--hover: $color-indigo-600;
1055
+ $faphouse-poster-bg: $color-gray-200;
1056
+ $faphouse-ad-text: $color-white;
1057
+ $faphouse-ad-bg: $color-indigo-600;
1058
+ $faphouse-duration-text: $color-white;
1059
+ $faphouse-duration-bg: $color-black-75;
1060
+ $faphouse-promo-bg-from: $color-amber-400;
1061
+ $faphouse-promo-bg-to: $color-amber-500;
1062
+ $faphouse-promo-text: $color-black;
1063
+ $faphouse-promo-shadow--hover: 0 10px 15px -3px #{$color-black-15};
1064
+ $faphouse-promo-action-text: $color-white;
1065
+ $faphouse-promo-action-bg: $color-red-700;
1066
+
1043
1067
  // ─── Page: grouped categories ───
1044
1068
  $grouped-highlight-border: transparent;
1045
1069
  $grouped-category-icon: $color-gray-500;
@@ -0,0 +1,80 @@
1
+ <!-- Вторая навигация: ряд рекламных ссылок над контентом, только на мобиле (до бургера), на всех страницах
2
+ основного лэйаута. Пункты — `appConfig.secondNav` сайта; пусто — блока нет. -->
3
+ <template>
4
+ <nav
5
+ v-if="items.length"
6
+ class="layout-second-nav"
7
+ >
8
+ <a
9
+ v-for="item in items"
10
+ :key="item.title"
11
+ :href="item.href"
12
+ :class="{'--dot': item.dot}"
13
+ class="layout-second-nav__link"
14
+ target="_blank"
15
+ rel="nofollow noopener sponsored"
16
+ >
17
+ {{ t(`navigation.${item.title}`) }}
18
+ <UiIcon
19
+ v-if="item.icon"
20
+ :name="item.icon"
21
+ size="14"
22
+ />
23
+ </a>
24
+ </nav>
25
+ </template>
26
+
27
+ <script setup lang="ts">
28
+ import type { ISecondNavItem } from '../../types';
29
+
30
+ const { t } = useI18n();
31
+ const { featureFlags } = useRuntimeConfig().public;
32
+ const secondNav = (useAppConfig().secondNav || []) as ISecondNavItem[];
33
+ const nicheState = useState<string>('niche');
34
+ const defaultNiche = NicheHelper.getSiteDefaultNiche();
35
+
36
+ const items = computed(() => {
37
+ const niche = nicheState.value || defaultNiche;
38
+
39
+ return secondNav
40
+ .filter(item => !item.featureFlag || featureFlags[item.featureFlag])
41
+ .map(item => ({ ...item, href: typeof item.link === 'string' ? item.link : item.link[niche] }))
42
+ .filter(item => !!item.href);
43
+ });
44
+ </script>
45
+
46
+ <style lang="scss">
47
+ .layout-second-nav {
48
+ display: flex;
49
+ justify-content: center;
50
+ gap: 12px;
51
+ padding: 8px var(--container-padding-inline);
52
+ }
53
+
54
+ .layout-second-nav__link {
55
+ @include font-sm;
56
+
57
+ position: relative;
58
+ display: inline-flex;
59
+ align-items: center;
60
+ gap: 4px;
61
+ padding: 4px 12px;
62
+ font-weight: 600;
63
+ white-space: nowrap;
64
+ color: $layout-second-nav-link-text;
65
+ background-color: $layout-second-nav-link-bg;
66
+ border-radius: $radius-md;
67
+ }
68
+
69
+ .layout-second-nav__link.--dot::after {
70
+ content: '';
71
+ position: absolute;
72
+ top: 0;
73
+ right: 0;
74
+ width: 10px;
75
+ height: 10px;
76
+ background-color: $layout-second-nav-dot-bg;
77
+ border-radius: $radius-full;
78
+ transform: translate(40%, -40%);
79
+ }
80
+ </style>
@@ -10,6 +10,8 @@
10
10
  hydrate-on-idle
11
11
  />
12
12
 
13
+ <LayoutSecondNav class="_to-sd"/>
14
+
13
15
  <main
14
16
  id="main"
15
17
  class="main"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "itube-specs",
3
3
  "type": "module",
4
- "version": "0.0.1028",
4
+ "version": "0.0.1029",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "./types/index.d.ts",
7
7
  "scripts": {
package/types/index.d.ts CHANGED
@@ -47,6 +47,7 @@ export * from './model-filter.d.ts';
47
47
  export * from './model-filter-payload.d.ts';
48
48
  export * from './multi-suggest.d.ts';
49
49
  export * from './navigation-items.d.ts';
50
+ export * from './second-nav-item.d.ts';
50
51
  export * from './link-item.d.ts';
51
52
  export * from './fluid-player.d.ts';
52
53
  export * from './chips-item.d.ts';
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Пункт второй навигации — ряд рекламных ссылок над контентом на мобиле (`appConfig.secondNav`).
3
+ * `link` — один адрес или адреса по нишам (`{ straight, gay, shemale }`); нет адреса для ниши — пункт
4
+ * не показывается. `title` — ключ `navigation.<title>`.
5
+ */
6
+ export interface ISecondNavItem {
7
+ title: string
8
+ link: string | Record<string, string>
9
+ icon?: string
10
+ /** Зелёная точка «онлайн» в углу пункта. */
11
+ dot?: boolean
12
+ /** Имя фича-флага сайта: флаг выключен — пункта нет. */
13
+ featureFlag?: string
14
+ }