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.
@@ -4,11 +4,34 @@
4
4
 
5
5
  @mixin video-card {
6
6
  display: grid;
7
- row-gap: 12px;
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
- position: relative;
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
- @include from-br(md) {
89
- grid-template-columns: repeat(4, 1fr);
90
- }
77
+ position: relative;
91
78
  }
92
79
 
93
80
  .grid-videos__idle,
@@ -260,6 +260,7 @@ router.afterEach(() => {
260
260
 
261
261
  .layout-burger__menu:last-child {
262
262
  padding-bottom: 12px;
263
+ margin-bottom: 4px;
263
264
  }
264
265
 
265
266
  .layout-burger__niche {
@@ -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: start;
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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "itube-specs",
3
3
  "type": "module",
4
- "version": "0.0.913",
4
+ "version": "0.0.914",
5
5
  "main": "./nuxt.config.ts",
6
6
  "types": "./types/index.d.ts",
7
7
  "scripts": {
package/pages/history.vue CHANGED
@@ -238,19 +238,9 @@ const breadcrumbs = [
238
238
  }
239
239
 
240
240
  .history__grid {
241
- position: relative;
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
- @include from-br(md) {
252
- grid-template-columns: repeat(4, 1fr);
253
- }
243
+ position: relative;
254
244
  }
255
245
 
256
246
  .ui-pagination.history__pagination {
@@ -30,7 +30,7 @@
30
30
 
31
31
  <UiLink
32
32
  :to="generateLink('/history')"
33
- theme="secondary"
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="secondary"
94
+ theme="simple"
95
95
  >
96
96
  {{ t('library.whats_new', { count: newTotal }) }}
97
97
  <UiIcon