itube-specs 0.0.1018 → 0.0.1021
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 +27 -0
- package/assets/scss/base/_normalize.scss +3 -6
- package/assets/scss/themes/dark/_theme.scss +18 -7
- package/assets/scss/themes/light/_theme.scss +14 -3
- package/components/card/video/index.vue +4 -0
- package/components/card/webcam/index.vue +2 -4
- package/components/info/grid.vue +19 -19
- package/components/info/model.vue +289 -180
- package/components/info/socials.vue +1 -17
- package/components/player/channel.vue +19 -8
- package/components/player/interface.vue +17 -13
- package/components/player/like.vue +2 -2
- package/components/player/tags.vue +224 -0
- package/components/view/model-videos.vue +1 -7
- package/components/view/video.vue +2 -2
- package/components/view/webcams.vue +1 -2
- package/i18n/locales/en-US.json +1 -0
- package/package.json +1 -1
- package/utils/info-grid/__tests__/model-filter-link.test.ts +16 -0
- package/utils/info-grid/model-filter-link.ts +17 -0
package/SITE_UPDATES.md
CHANGED
|
@@ -11,6 +11,33 @@
|
|
|
11
11
|
коммиты до бампа); `npm run patch` сам проставит ей номер версии. Формат пункта: что сделать и где,
|
|
12
12
|
кому именно (всем / сайтам с N), что будет, если не сделать.
|
|
13
13
|
|
|
14
|
+
## 0.0.1021 — 2026-10-08
|
|
15
|
+
|
|
16
|
+
- **Сайтам со своей темой** (`assets/scss/vars/_theme.scss` в сайте, как у hdsex-remaster): завести токены
|
|
17
|
+
нового инфо-блока модели — как в `themes/dark/_theme.scss` слоя: `$info-model-about-title`,
|
|
18
|
+
`$info-model-about-text`, `$info-model-summary-bg`, `$info-model-summary-bg--hover`, `$info-model-summary-text`,
|
|
19
|
+
`$info-model-summary-icon`, `$info-grid-item-value`. Удалены (можно убрать): `$info-model-border`,
|
|
20
|
+
`$info-model-bg`, `$info-model-footer-border`. По макету: `$info-model-description` → `$color-zinc-300`,
|
|
21
|
+
`$info-grid-item-title` → `$color-zinc-450`. Не завести — сборка падает на undefined variable.
|
|
22
|
+
- **Сайтам с форком `components/view/model-videos.vue`:** убрать `<LazyUiFullDescr>` с `fullDescription` внизу
|
|
23
|
+
страницы — длинное описание теперь показывает `InfoModel` в блоке «About». Не убрать — текст на странице
|
|
24
|
+
задублируется.
|
|
25
|
+
|
|
26
|
+
## 0.0.1019 — 2026-10-08
|
|
27
|
+
|
|
28
|
+
- **Сайтам со своей темой** (`assets/scss/vars/_theme.scss` в сайте, как у hdsex-remaster): завести токены
|
|
29
|
+
строки над плеером и описания — как в `themes/dark/_theme.scss` слоя:
|
|
30
|
+
`$player-tags-chip-bg`, `$player-tags-tag-bg`, `$player-tags-more-text`, `$player-tags-more-text--hover`,
|
|
31
|
+
`$video-info-handler-text--hover`. Плюс по макету изменились значения: `$video-channel-bg` → `$color-zinc-800`,
|
|
32
|
+
`$video-info-handler-text` → `$color-zinc-500`. Не завести — сборка падает на undefined variable. Образец —
|
|
33
|
+
коммит hdsex-remaster с переходом на эту версию.
|
|
34
|
+
- **Сайтам с форком `components/view/video.vue`:** строку над плеером `<UiExpandRow …>` заменить на
|
|
35
|
+
`<PlayerTags …>` (те же `items` и слот `prepend`) — новая раскладка по макету: «More +N» после влезших чипсов,
|
|
36
|
+
теги светлее категорий, на мобиле строка листается. Не заменить — у сайта останется старая строка.
|
|
37
|
+
- **Сайтам с хуком попандера на карточке видео** (`pu-trigger` на `<CardVideo>`): класс перенести в проп
|
|
38
|
+
`link-class="pu-trigger"` — он ляжет только на ссылки на ролик (превью и тайтл), меню и кнопки карточки
|
|
39
|
+
перестанут открывать попандер. Остальным — ничего.
|
|
40
|
+
|
|
14
41
|
## 0.0.1013 — 2026-10-07
|
|
15
42
|
|
|
16
43
|
- **Всем сайтам — чистка своих переводов (`i18n/locales/*.json`, во всех локалях):** образец —
|
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
box-sizing: border-box;
|
|
5
5
|
}
|
|
6
6
|
|
|
7
|
-
ul[class],
|
|
8
|
-
ol[class] {
|
|
7
|
+
:where(ul[class], ol[class]) {
|
|
9
8
|
padding: 0;
|
|
10
9
|
}
|
|
11
10
|
|
|
@@ -15,8 +14,7 @@ h2,
|
|
|
15
14
|
h3,
|
|
16
15
|
h4,
|
|
17
16
|
p,
|
|
18
|
-
ul[class],
|
|
19
|
-
ol[class],
|
|
17
|
+
:where(ul[class], ol[class]),
|
|
20
18
|
li,
|
|
21
19
|
figure,
|
|
22
20
|
figcaption,
|
|
@@ -33,8 +31,7 @@ body {
|
|
|
33
31
|
line-height: 1.5;
|
|
34
32
|
}
|
|
35
33
|
|
|
36
|
-
ul[class],
|
|
37
|
-
ol[class] {
|
|
34
|
+
:where(ul[class], ol[class]) {
|
|
38
35
|
list-style: none;
|
|
39
36
|
}
|
|
40
37
|
|
|
@@ -238,7 +238,8 @@ $video-menu-preview-border: $color-zinc-800;
|
|
|
238
238
|
|
|
239
239
|
// ─── Video info ───
|
|
240
240
|
$video-info-item-text: $color-zinc-500-70;
|
|
241
|
-
$video-info-handler-text: $color-zinc-
|
|
241
|
+
$video-info-handler-text: $color-zinc-500;
|
|
242
|
+
$video-info-handler-text--hover: $color-white;
|
|
242
243
|
$video-info-description-text: $color-zinc-400;
|
|
243
244
|
|
|
244
245
|
// ─── Video interface ───
|
|
@@ -253,7 +254,7 @@ $video-interface-mobile-label: $color-zinc-300;
|
|
|
253
254
|
$video-interface-mobile-border: $color-zinc-800;
|
|
254
255
|
|
|
255
256
|
// ─── Video channel ───
|
|
256
|
-
$video-channel-bg: $color-zinc-800
|
|
257
|
+
$video-channel-bg: $color-zinc-800;
|
|
257
258
|
$video-channel-initials-gradient-from: $color-indigo-500;
|
|
258
259
|
$video-channel-initials-gradient-to: $color-purple-600;
|
|
259
260
|
$video-channel-initials-text: $color-white;
|
|
@@ -813,8 +814,9 @@ $filters-main-bg--hover: $color-zinc-700-70;
|
|
|
813
814
|
$info-grid-group-title: $color-zinc-300;
|
|
814
815
|
$info-grid-item-border: $color-zinc-700-50;
|
|
815
816
|
$info-grid-item-bg--hover: $color-zinc-700-30;
|
|
816
|
-
$info-grid-item-title: $color-zinc-
|
|
817
|
+
$info-grid-item-title: $color-zinc-450;
|
|
817
818
|
$info-grid-item-title-bg: $color-zinc-900;
|
|
819
|
+
$info-grid-item-value: $color-zinc-300;
|
|
818
820
|
$info-grid-item-value-bg: $color-zinc-900;
|
|
819
821
|
$info-grid-item-value-bg--link: $color-zinc-700-50;
|
|
820
822
|
$info-grid-item-value-link-bg--hover: $color-zinc-700-50;
|
|
@@ -831,11 +833,14 @@ $info-img-border: $color-zinc-700;
|
|
|
831
833
|
$info-description: $color-zinc-400;
|
|
832
834
|
|
|
833
835
|
// ─── Info model ───
|
|
834
|
-
$info-model-border: $color-zinc-800-50;
|
|
835
|
-
$info-model-bg: $color-zinc-900-50;
|
|
836
836
|
$info-model-img-bg: $color-zinc-800;
|
|
837
|
-
$info-model-description: $color-zinc-
|
|
838
|
-
$info-model-
|
|
837
|
+
$info-model-description: $color-zinc-300;
|
|
838
|
+
$info-model-about-title: $color-zinc-300;
|
|
839
|
+
$info-model-about-text: $color-zinc-400;
|
|
840
|
+
$info-model-summary-bg: $color-zinc-700-50;
|
|
841
|
+
$info-model-summary-bg--hover: $color-zinc-700;
|
|
842
|
+
$info-model-summary-text: $color-white;
|
|
843
|
+
$info-model-summary-icon: $color-zinc-400;
|
|
839
844
|
$info-model-more-text: $color-zinc-500;
|
|
840
845
|
$info-model-more-text--hover: $color-zinc-300;
|
|
841
846
|
$info-model-also: $color-zinc-400;
|
|
@@ -1171,3 +1176,9 @@ $switcher-subtitle--active: $color-white-60;
|
|
|
1171
1176
|
$card-webcam-languages-border: $color-white-20;
|
|
1172
1177
|
$card-webcam-languages-fallback-bg: $color-zinc-800;
|
|
1173
1178
|
$card-webcam-languages-fallback-icon: $color-zinc-300;
|
|
1179
|
+
|
|
1180
|
+
// ─── Player tags (строка над плеером) ───
|
|
1181
|
+
$player-tags-chip-bg: $color-zinc-800;
|
|
1182
|
+
$player-tags-tag-bg: $color-zinc-800-50;
|
|
1183
|
+
$player-tags-more-text: $color-zinc-400;
|
|
1184
|
+
$player-tags-more-text--hover: $color-white;
|
|
@@ -295,6 +295,7 @@ $video-menu-preview-border: transparent;
|
|
|
295
295
|
// ─── Video info ───
|
|
296
296
|
$video-info-item-text: $color-gray-400;
|
|
297
297
|
$video-info-handler-text: $color-gray-400;
|
|
298
|
+
$video-info-handler-text--hover: $color-gray-900;
|
|
298
299
|
$video-info-description-text: $color-gray-700;
|
|
299
300
|
|
|
300
301
|
// ─── Video interface ───
|
|
@@ -842,6 +843,7 @@ $info-grid-item-border: $color-gray-300;
|
|
|
842
843
|
$info-grid-item-bg--hover: $color-slate-700;
|
|
843
844
|
$info-grid-item-title: $color-gray-500;
|
|
844
845
|
$info-grid-item-title-bg: $color-white;
|
|
846
|
+
$info-grid-item-value: $color-gray-900;
|
|
845
847
|
$info-grid-item-value-bg: $color-gray-100;
|
|
846
848
|
$info-grid-item-value-bg--link: $color-slate-700;
|
|
847
849
|
$info-grid-item-value-link-bg--hover: $color-slate-750;
|
|
@@ -858,11 +860,14 @@ $info-img-border: transparent;
|
|
|
858
860
|
$info-description: $color-gray-600;
|
|
859
861
|
|
|
860
862
|
// ─── Info model ───
|
|
861
|
-
$info-model-border: transparent;
|
|
862
|
-
$info-model-bg: $color-gray-200;
|
|
863
863
|
$info-model-img-bg: $color-gray-300;
|
|
864
864
|
$info-model-description: $color-gray-600;
|
|
865
|
-
$info-model-
|
|
865
|
+
$info-model-about-title: $color-gray-600;
|
|
866
|
+
$info-model-about-text: $color-gray-600;
|
|
867
|
+
$info-model-summary-bg: $color-slate-700;
|
|
868
|
+
$info-model-summary-bg--hover: $color-slate-750;
|
|
869
|
+
$info-model-summary-text: $color-white;
|
|
870
|
+
$info-model-summary-icon: $color-gray-400;
|
|
866
871
|
$info-model-more-text: $color-gray-600;
|
|
867
872
|
$info-model-more-text--hover: $color-gray-600;
|
|
868
873
|
$info-model-also: $color-gray-600;
|
|
@@ -1198,3 +1203,9 @@ $switcher-subtitle--active: $color-white-60;
|
|
|
1198
1203
|
$card-webcam-languages-border: $color-gray-300;
|
|
1199
1204
|
$card-webcam-languages-fallback-bg: $color-gray-200;
|
|
1200
1205
|
$card-webcam-languages-fallback-icon: $color-gray-600;
|
|
1206
|
+
|
|
1207
|
+
// ─── Player tags (строка над плеером) ───
|
|
1208
|
+
$player-tags-chip-bg: $color-gray-200;
|
|
1209
|
+
$player-tags-tag-bg: $color-gray-100;
|
|
1210
|
+
$player-tags-more-text: $color-gray-700;
|
|
1211
|
+
$player-tags-more-text--hover: $color-gray-900;
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
>
|
|
14
14
|
<NuxtLink
|
|
15
15
|
:to="link"
|
|
16
|
+
:class="linkClass"
|
|
16
17
|
class="card-video__poster-wrapper"
|
|
17
18
|
@mouseenter.passive="startPreviewByHover(previewId)"
|
|
18
19
|
@mouseleave.passive="stopPreviewByHover(previewId)"
|
|
@@ -91,6 +92,7 @@
|
|
|
91
92
|
<NuxtLink
|
|
92
93
|
:to="link"
|
|
93
94
|
:title="card.title"
|
|
95
|
+
:class="linkClass"
|
|
94
96
|
class="card-video__title _truncate"
|
|
95
97
|
>{{ card.title }}
|
|
96
98
|
</NuxtLink>
|
|
@@ -153,6 +155,8 @@ const props = defineProps<{
|
|
|
153
155
|
history?: boolean
|
|
154
156
|
/** Развилка мета-строки истории: вместо «когда смотрели» — сколько осталось до конца («Продолжить просмотр») */
|
|
155
157
|
remaining?: boolean
|
|
158
|
+
/** Класс на ссылки на ролик (превью и тайтл) — например хук попандера сайта, чтобы меню и кнопки карточки его не задевали */
|
|
159
|
+
linkClass?: string
|
|
156
160
|
}>();
|
|
157
161
|
|
|
158
162
|
const emit = defineEmits<{
|
|
@@ -677,9 +677,7 @@ onBeforeUnmount(() => {
|
|
|
677
677
|
}
|
|
678
678
|
}
|
|
679
679
|
|
|
680
|
-
|
|
681
|
-
// одиночного класса ему не хватает
|
|
682
|
-
.card-webcam > .card-webcam__tags {
|
|
680
|
+
.card-webcam__tags {
|
|
683
681
|
display: flex;
|
|
684
682
|
flex-wrap: wrap;
|
|
685
683
|
gap: 6px;
|
|
@@ -688,7 +686,7 @@ onBeforeUnmount(() => {
|
|
|
688
686
|
|
|
689
687
|
// на узких экранах теги в один ряд с горизонтальным скроллом: в две колонки они
|
|
690
688
|
// не влезают, а перенос делал карточки в сетке разной высоты
|
|
691
|
-
.card-
|
|
689
|
+
.card-webcam__tags {
|
|
692
690
|
@include to-br(xm) {
|
|
693
691
|
flex-wrap: nowrap;
|
|
694
692
|
overflow-x: auto;
|
package/components/info/grid.vue
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
:is="item.isFilter && value ? NuxtLink : 'div'"
|
|
27
27
|
:key="`s-info-grid-value-${gIndex}-${index}-${vIndex}`"
|
|
28
28
|
:class="{'--link': item.isFilter && value}"
|
|
29
|
-
:to="item.isFilter && value ? generateLink(
|
|
29
|
+
:to="item.isFilter && value ? generateLink(modelFilterLink(item, value.name)) : undefined"
|
|
30
30
|
class="info-grid__item"
|
|
31
31
|
>
|
|
32
32
|
<span
|
|
@@ -67,7 +67,8 @@
|
|
|
67
67
|
</template>
|
|
68
68
|
|
|
69
69
|
<script setup lang="ts">
|
|
70
|
-
import type { IGroupedParameter
|
|
70
|
+
import type { IGroupedParameter } from '../../types';
|
|
71
|
+
import { modelFilterLink } from '../../utils/info-grid/model-filter-link';
|
|
71
72
|
|
|
72
73
|
defineProps<{
|
|
73
74
|
groups: IGroupedParameter[]
|
|
@@ -84,16 +85,6 @@ const NuxtLink = resolveComponent('NuxtLink');
|
|
|
84
85
|
const { hiddenByUnits } = useUnits();
|
|
85
86
|
const { generateLink } = useGenerateLink();
|
|
86
87
|
|
|
87
|
-
function link(item: IGroupedParameterItem, value: string) {
|
|
88
|
-
const formattedValue = value.toLowerCase().replace(/\s+/g, '+');
|
|
89
|
-
|
|
90
|
-
if (item.kind === 'range') {
|
|
91
|
-
return `/models?filter_${item.name}_from=${formattedValue}&filter_${item.name}_to=${formattedValue}`;
|
|
92
|
-
} else {
|
|
93
|
-
return `/models?filter_${item.name}=${formattedValue}`;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
88
|
function isSuccess(value: string) {
|
|
98
89
|
const values = ['active'];
|
|
99
90
|
return values.includes(value);
|
|
@@ -108,7 +99,7 @@ function isWarning(value: string) {
|
|
|
108
99
|
<style lang="scss">
|
|
109
100
|
.info-grid {
|
|
110
101
|
display: grid;
|
|
111
|
-
row-gap:
|
|
102
|
+
row-gap: 20px;
|
|
112
103
|
}
|
|
113
104
|
|
|
114
105
|
.info-grid__group-title {
|
|
@@ -116,9 +107,9 @@ function isWarning(value: string) {
|
|
|
116
107
|
|
|
117
108
|
margin-bottom: 12px;
|
|
118
109
|
color: $info-grid-group-title;
|
|
119
|
-
|
|
110
|
+
font-weight: 600;
|
|
111
|
+
letter-spacing: var(--tracking-wide);
|
|
120
112
|
text-transform: uppercase;
|
|
121
|
-
font-weight: 500;
|
|
122
113
|
}
|
|
123
114
|
|
|
124
115
|
.info-grid__group-items {
|
|
@@ -133,14 +124,16 @@ function isWarning(value: string) {
|
|
|
133
124
|
|
|
134
125
|
display: flex;
|
|
135
126
|
flex-wrap: nowrap;
|
|
136
|
-
|
|
127
|
+
height: 36px;
|
|
137
128
|
border-radius: $radius-lg;
|
|
138
129
|
border: 1px solid $info-grid-item-border;
|
|
139
130
|
overflow: hidden;
|
|
140
131
|
}
|
|
141
132
|
|
|
142
133
|
.info-grid__item-title {
|
|
143
|
-
|
|
134
|
+
display: flex;
|
|
135
|
+
align-items: center;
|
|
136
|
+
padding-inline: 10px;
|
|
144
137
|
color: $info-grid-item-title;
|
|
145
138
|
background-color: $info-grid-item-title-bg;
|
|
146
139
|
}
|
|
@@ -150,7 +143,7 @@ function isWarning(value: string) {
|
|
|
150
143
|
flex-wrap: nowrap;
|
|
151
144
|
align-items: center;
|
|
152
145
|
column-gap: 4px;
|
|
153
|
-
padding:
|
|
146
|
+
padding-inline: 10px;
|
|
154
147
|
}
|
|
155
148
|
|
|
156
149
|
.info-grid__item.--link {
|
|
@@ -175,10 +168,14 @@ function isWarning(value: string) {
|
|
|
175
168
|
}
|
|
176
169
|
|
|
177
170
|
.info-grid__item:not(.--link) .info-grid__item-value {
|
|
178
|
-
|
|
171
|
+
color: $info-grid-item-value;
|
|
179
172
|
background-color: $info-grid-item-value-bg;
|
|
180
173
|
}
|
|
181
174
|
|
|
175
|
+
.info-grid__item:not(.--link) .info-grid__item-title + .info-grid__item-value {
|
|
176
|
+
border-left: 1px solid $info-grid-item-value-border;
|
|
177
|
+
}
|
|
178
|
+
|
|
182
179
|
.info-grid__item:not(.--link) .info-grid__item-title {
|
|
183
180
|
background-color: $info-grid-item-value-bg;
|
|
184
181
|
}
|
|
@@ -203,6 +200,9 @@ function isWarning(value: string) {
|
|
|
203
200
|
.info-grid__plain-text {
|
|
204
201
|
@include font-sm;
|
|
205
202
|
|
|
203
|
+
max-width: 740px;
|
|
204
|
+
margin-block: -6px;
|
|
206
205
|
color: $info-grid-plain-text;
|
|
206
|
+
line-height: 1.625;
|
|
207
207
|
}
|
|
208
208
|
</style>
|