itube-specs 0.0.913 → 0.0.914
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/mixins/_video-card.scss +24 -1
- package/components/card/video/index.vue +17 -5
- package/components/grid/videos.vue +2 -15
- package/components/layout/burger.vue +1 -0
- package/components/layout/extra-links.vue +5 -2
- package/components/layout/logo.vue +5 -2
- package/components/library/feed.vue +5 -1
- package/package.json +1 -1
- package/pages/history.vue +2 -12
- package/pages/library/index.vue +2 -2
|
@@ -4,11 +4,34 @@
|
|
|
4
4
|
|
|
5
5
|
@mixin video-card {
|
|
6
6
|
display: grid;
|
|
7
|
-
row-gap:
|
|
7
|
+
row-gap: 16px;
|
|
8
8
|
width: 100%;
|
|
9
9
|
align-content: start;
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
Сетка карточек видео: 2 колонки, 3 с xs, 4 с md.
|
|
14
|
+
minmax(0, 1fr) обязателен, не `1fr`: мета-строка карточки истории нешринкуема и задаёт
|
|
15
|
+
колонке min-content, из-за которого грид вылезает за контейнер на телефоне.
|
|
16
|
+
*/
|
|
17
|
+
@mixin video-card-grid {
|
|
18
|
+
display: grid;
|
|
19
|
+
gap: 12px;
|
|
20
|
+
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
21
|
+
|
|
22
|
+
@include from-br(xs) {
|
|
23
|
+
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
@include from-br(sm) {
|
|
27
|
+
gap: 24px;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@include from-br(md) {
|
|
31
|
+
grid-template-columns: repeat(4, minmax(0, 1fr));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
12
35
|
@mixin video-card-poster {
|
|
13
36
|
position: relative;
|
|
14
37
|
aspect-ratio: 16/9;
|
|
@@ -388,7 +388,7 @@ $dropdown-column: 18px;
|
|
|
388
388
|
|
|
389
389
|
.card-video__wrapper {
|
|
390
390
|
display: grid;
|
|
391
|
-
grid-template-columns: 1fr $dropdown-column;
|
|
391
|
+
grid-template-columns: minmax(0, 1fr) $dropdown-column;
|
|
392
392
|
align-items: start;
|
|
393
393
|
align-content: center;
|
|
394
394
|
color: $video-card-secondary;
|
|
@@ -399,13 +399,13 @@ $dropdown-column: 18px;
|
|
|
399
399
|
|
|
400
400
|
@include from-cq($layout-breakpoint) {
|
|
401
401
|
column-gap: 12px;
|
|
402
|
-
grid-template-columns: 36px 1fr $dropdown-column;
|
|
402
|
+
grid-template-columns: 36px minmax(0, 1fr) $dropdown-column;
|
|
403
403
|
}
|
|
404
404
|
}
|
|
405
405
|
|
|
406
406
|
.--avatar .card-video__wrapper {
|
|
407
407
|
column-gap: 12px;
|
|
408
|
-
grid-template-columns: 36px 1fr $dropdown-column;
|
|
408
|
+
grid-template-columns: 36px minmax(0, 1fr) $dropdown-column;
|
|
409
409
|
}
|
|
410
410
|
|
|
411
411
|
.--avatar .card-video__title {
|
|
@@ -434,7 +434,7 @@ $dropdown-column: 18px;
|
|
|
434
434
|
}
|
|
435
435
|
|
|
436
436
|
.--no-channel .card-video__wrapper {
|
|
437
|
-
grid-template-columns: 1fr $dropdown-column;
|
|
437
|
+
grid-template-columns: minmax(0, 1fr) $dropdown-column;
|
|
438
438
|
}
|
|
439
439
|
|
|
440
440
|
.--no-channel .card-video__title {
|
|
@@ -452,7 +452,7 @@ $dropdown-column: 18px;
|
|
|
452
452
|
}
|
|
453
453
|
|
|
454
454
|
.--mini .card-video__wrapper {
|
|
455
|
-
grid-template-columns: 1fr $dropdown-column;
|
|
455
|
+
grid-template-columns: minmax(0, 1fr) $dropdown-column;
|
|
456
456
|
}
|
|
457
457
|
|
|
458
458
|
/* Без строки канала и тегов вторая строка грида не нужна — иначе аватар и «троеточие» растягиваются. */
|
|
@@ -511,6 +511,7 @@ $dropdown-column: 18px;
|
|
|
511
511
|
display: flex;
|
|
512
512
|
align-items: center;
|
|
513
513
|
grid-row: 2;
|
|
514
|
+
min-width: 0;
|
|
514
515
|
margin: 6px 0 0;
|
|
515
516
|
font-weight: 400;
|
|
516
517
|
color: $video-card-secondary;
|
|
@@ -520,6 +521,14 @@ $dropdown-column: 18px;
|
|
|
520
521
|
}
|
|
521
522
|
}
|
|
522
523
|
|
|
524
|
+
/* На узкой карточке (две колонки на телефоне) «канал · время» в строку не встают, а нешрикуемое
|
|
525
|
+
время задаёт колонке min-content и разносит грид — оставляем только время просмотра */
|
|
526
|
+
@include to-cq($layout-breakpoint) {
|
|
527
|
+
.card-video__meta .card-video__channel-title {
|
|
528
|
+
display: none;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
523
532
|
.card-video__meta .card-video__channel-title + .card-video__watched::before {
|
|
524
533
|
content: '·';
|
|
525
534
|
margin-inline: 6px;
|
|
@@ -530,6 +539,9 @@ $dropdown-column: 18px;
|
|
|
530
539
|
align-items: center;
|
|
531
540
|
column-gap: 4px;
|
|
532
541
|
flex-shrink: 0;
|
|
542
|
+
min-width: 0;
|
|
543
|
+
white-space: nowrap;
|
|
544
|
+
overflow: hidden;
|
|
533
545
|
}
|
|
534
546
|
|
|
535
547
|
.card-video__watched.--remaining {
|
|
@@ -72,22 +72,9 @@ const lazyItems = computed(() => props.items.slice(eagerCount.value + IDLE_COUNT
|
|
|
72
72
|
|
|
73
73
|
<style lang="scss">
|
|
74
74
|
.grid-videos {
|
|
75
|
-
|
|
76
|
-
display: grid;
|
|
77
|
-
gap: 12px;
|
|
78
|
-
grid-template-columns: repeat(2, 1fr);
|
|
79
|
-
|
|
80
|
-
@include from-br(xs) {
|
|
81
|
-
grid-template-columns: repeat(3, 1fr);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
@include from-br(sm) {
|
|
85
|
-
gap: 24px;
|
|
86
|
-
}
|
|
75
|
+
@include video-card-grid;
|
|
87
76
|
|
|
88
|
-
|
|
89
|
-
grid-template-columns: repeat(4, 1fr);
|
|
90
|
-
}
|
|
77
|
+
position: relative;
|
|
91
78
|
}
|
|
92
79
|
|
|
93
80
|
.grid-videos__idle,
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<nav class="layout-extra-links">
|
|
3
|
+
<!-- active-class указывает на базовый класс, а не на '': пустую строку NuxtLink считает
|
|
4
|
+
falsy и подставляет дефолты router-link-active, а они зависят от текущего роута и
|
|
5
|
+
ломают гидрацию лениво гидрируемого футера. Дубль класса Vue схлопывает. -->
|
|
3
6
|
<NuxtLink
|
|
4
7
|
v-for="(item, index) in additionalLinksItems"
|
|
5
8
|
:key="`s-additional-link-${index}`"
|
|
6
9
|
:to="generateLink(item.name)"
|
|
7
|
-
active-class=""
|
|
8
|
-
exact-active-class=""
|
|
10
|
+
active-class="layout-extra-links__link"
|
|
11
|
+
exact-active-class="layout-extra-links__link"
|
|
9
12
|
class="layout-extra-links__link"
|
|
10
13
|
@click="emit('close')"
|
|
11
14
|
>{{ $t(`additional_link.${item.title}`) }}</NuxtLink>
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
<template>
|
|
2
|
+
<!-- active-class указывает на базовый класс, а не на '': пустую строку NuxtLink считает
|
|
3
|
+
falsy и подставляет дефолты router-link-active, а они зависят от текущего роута и
|
|
4
|
+
ломают гидрацию лениво гидрируемого футера. Дубль класса Vue схлопывает. -->
|
|
2
5
|
<NuxtLink
|
|
3
6
|
:class="{'layout-logo--glow': glow}"
|
|
4
7
|
:to="generateLink('/')"
|
|
5
|
-
active-class=""
|
|
6
|
-
exact-active-class=""
|
|
8
|
+
active-class="layout-logo"
|
|
9
|
+
exact-active-class="layout-logo"
|
|
7
10
|
class="layout-logo"
|
|
8
11
|
@click="onLogoClick"
|
|
9
12
|
>
|
|
@@ -199,8 +199,12 @@ const ageText = computed(() => {
|
|
|
199
199
|
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
200
200
|
column-gap: 16px;
|
|
201
201
|
row-gap: 12px;
|
|
202
|
-
align-items:
|
|
202
|
+
align-items: center;
|
|
203
203
|
margin-bottom: 20px;
|
|
204
|
+
|
|
205
|
+
@include from-br(sm) {
|
|
206
|
+
align-items: start;
|
|
207
|
+
}
|
|
204
208
|
}
|
|
205
209
|
|
|
206
210
|
.library-feed__header.--without-avatar {
|
package/package.json
CHANGED
package/pages/history.vue
CHANGED
|
@@ -238,19 +238,9 @@ const breadcrumbs = [
|
|
|
238
238
|
}
|
|
239
239
|
|
|
240
240
|
.history__grid {
|
|
241
|
-
|
|
242
|
-
display: grid;
|
|
243
|
-
gap: 12px;
|
|
244
|
-
grid-template-columns: repeat(2, 1fr);
|
|
245
|
-
|
|
246
|
-
@include from-br(sm) {
|
|
247
|
-
gap: 24px;
|
|
248
|
-
grid-template-columns: repeat(3, 1fr);
|
|
249
|
-
}
|
|
241
|
+
@include video-card-grid;
|
|
250
242
|
|
|
251
|
-
|
|
252
|
-
grid-template-columns: repeat(4, 1fr);
|
|
253
|
-
}
|
|
243
|
+
position: relative;
|
|
254
244
|
}
|
|
255
245
|
|
|
256
246
|
.ui-pagination.history__pagination {
|
package/pages/library/index.vue
CHANGED
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
|
|
31
31
|
<UiLink
|
|
32
32
|
:to="generateLink('/history')"
|
|
33
|
-
theme="
|
|
33
|
+
theme="simple"
|
|
34
34
|
>
|
|
35
35
|
{{ t('library.history') }}
|
|
36
36
|
<UiIcon
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
|
|
92
92
|
<UiLink
|
|
93
93
|
:to="generateLink('/following')"
|
|
94
|
-
theme="
|
|
94
|
+
theme="simple"
|
|
95
95
|
>
|
|
96
96
|
{{ t('library.whats_new', { count: newTotal }) }}
|
|
97
97
|
<UiIcon
|