itube-specs 0.0.911 → 0.0.913
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/_animations.scss +11 -10
- package/assets/scss/mixins/_font-sizes.scss +5 -2
- package/assets/scss/themes/dark/_theme.scss +22 -18
- package/assets/scss/themes/light/_theme.scss +17 -13
- package/assets/scss/vars/_tokens.scss +1 -1
- package/assets/scss/vars/_vars.scss +1 -0
- package/components/auth/register.vue +0 -4
- package/components/card/collections-more.vue +1 -1
- package/components/card/dropdown/index.vue +2 -2
- package/components/card/playlist.vue +7 -8
- package/components/card/video/actions.vue +2 -2
- package/components/card/video/index.vue +9 -9
- package/components/filter/popup.vue +1 -0
- package/components/library/feed.vue +1 -14
- package/components/playlist/add.vue +123 -113
- package/components/playlist/edit.vue +133 -199
- package/components/playlist/input.vue +23 -133
- package/components/playlist/main.vue +21 -40
- package/components/playlist/visibility.vue +149 -0
- package/components/section/collections.vue +2 -2
- package/components/section/swiper-cards.vue +3 -3
- package/components/ui/chips.vue +7 -2
- package/components/ui/confirm.vue +17 -5
- package/components/ui/dropdown.vue +17 -8
- package/components/ui/expand-row.vue +0 -4
- package/components/ui/popup.vue +33 -15
- package/components/ui/section-title.vue +6 -6
- package/components/ui/tooltip.vue +35 -14
- package/composables/__tests__/use-overlay-stack.test.ts +110 -0
- package/composables/__tests__/use-video-collections.test.ts +75 -0
- package/composables/use-overlay-stack.ts +58 -0
- package/composables/use-playlist-edit.ts +13 -3
- package/composables/use-snackbar.ts +15 -1
- package/composables/use-user.ts +0 -4
- package/composables/use-video-collections.ts +27 -5
- package/package.json +1 -1
- package/pages/following.vue +4 -4
- package/pages/history.vue +1 -1
- package/pages/library/index.vue +4 -4
- package/pages/playlists/index.vue +7 -76
- package/runtime/constants/playlist-type.ts +5 -0
- package/components/playlist/private-toggle.vue +0 -20
- package/composables/use-favorites.ts +0 -20
- package/pages/favorites.vue +0 -31
|
@@ -2,22 +2,23 @@
|
|
|
2
2
|
@use '../mixins' as *;
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
-
Анимация открытия попапов, для анимации открытия попапа обернуть
|
|
5
|
+
Анимация открытия попапов, для анимации открытия попапа обернуть попап в transition.
|
|
6
|
+
Гейты `--no-enter-anim` / `--no-leave-anim` вешает useOverlayStack: появление
|
|
7
|
+
анимируется только у первого оверлея в стеке, закрытие — только у последнего.
|
|
8
|
+
Негации завёрнуты в `:where()`, чтобы не поднимать вес селектора — иначе они начинают
|
|
9
|
+
спорить с правилами компонентов (`.ui-snackbar.v-enter-from` и Ко).
|
|
6
10
|
*/
|
|
7
|
-
.v-enter-active,
|
|
8
|
-
.v-leave-active {
|
|
9
|
-
transition:
|
|
11
|
+
.v-enter-active:where(:not(.--no-enter-anim)),
|
|
12
|
+
.v-leave-active:where(:not(.--no-leave-anim)) {
|
|
13
|
+
transition: 200ms linear opacity, 200ms linear transform;
|
|
10
14
|
|
|
11
15
|
@include from-br(sm) {
|
|
12
16
|
transition: 300ms linear opacity, 200ms linear transform;
|
|
13
17
|
}
|
|
14
18
|
}
|
|
15
19
|
|
|
16
|
-
.v-enter-from,
|
|
17
|
-
.v-leave-to {
|
|
20
|
+
.v-enter-from:where(:not(.--no-enter-anim)),
|
|
21
|
+
.v-leave-to:where(:not(.--no-leave-anim)) {
|
|
18
22
|
opacity: 0;
|
|
19
|
-
|
|
20
|
-
@include from-br(sm) {
|
|
21
|
-
transform: scale(0.99) translateY(8px);
|
|
22
|
-
}
|
|
23
|
+
transform: scale(0.99) translateY(8px);
|
|
23
24
|
}
|
|
@@ -59,8 +59,10 @@ $chips-bg--active: $color-zinc-700;
|
|
|
59
59
|
$chips-text: $color-zinc-400;
|
|
60
60
|
$chips-text--hover: $color-white;
|
|
61
61
|
$chips-text--active: $color-white;
|
|
62
|
-
$chips-micro-bg: $color-zinc-800;
|
|
63
|
-
$chips-micro-
|
|
62
|
+
$chips-micro-bg: $color-zinc-800-80;
|
|
63
|
+
$chips-micro-bg--hover: $color-zinc-700;
|
|
64
|
+
$chips-micro-text: $color-zinc-300;
|
|
65
|
+
$chips-micro-text--hover: $color-white;
|
|
64
66
|
$chips-small-bg: $color-zinc-800-50;
|
|
65
67
|
$chips-small-bg--hover: $color-zinc-700;
|
|
66
68
|
$chips-small-text: $color-zinc-400;
|
|
@@ -200,8 +202,8 @@ $video-card-dropdown-icon--hover: $color-white;
|
|
|
200
202
|
$video-card-secondary: $color-zinc-500;
|
|
201
203
|
$video-card-mini-title: $color-zinc-300;
|
|
202
204
|
$video-card-mini-weight: 400;
|
|
203
|
-
$video-card-user-text: $color-zinc-
|
|
204
|
-
$video-card-user-bg: $color-zinc-
|
|
205
|
+
$video-card-user-text: $color-zinc-500;
|
|
206
|
+
$video-card-user-bg: $color-zinc-800;
|
|
205
207
|
$video-card-progress-bg: $mono-white-50;
|
|
206
208
|
$video-card-progress-fill: $color-indigo-500;
|
|
207
209
|
$video-card-remaining: $color-indigo-400;
|
|
@@ -300,18 +302,18 @@ $like-bar-bg: $color-zinc-700;
|
|
|
300
302
|
$like-bar-likes: $color-zinc-500;
|
|
301
303
|
|
|
302
304
|
// ─── Playlist input ───
|
|
303
|
-
$playlist-input-
|
|
304
|
-
$playlist-input-toggle-icon: $color-zinc-500;
|
|
305
|
-
$playlist-input-toggle-icon--active: $color-zinc-400;
|
|
306
|
-
$playlist-input-hint-text: $color-zinc-900;
|
|
307
|
-
$playlist-input-hint-bg: $color-zinc-600;
|
|
308
|
-
$playlist-input-hint-bg--hover: $color-zinc-500;
|
|
305
|
+
$playlist-input-bg: $color-zinc-900;
|
|
309
306
|
$playlist-input-back: $color-zinc-500;
|
|
310
307
|
$playlist-input-back--hover: $color-white;
|
|
311
|
-
$playlist-input-
|
|
312
|
-
$playlist-input-
|
|
313
|
-
|
|
314
|
-
|
|
308
|
+
$playlist-input-back-bg: $color-zinc-800;
|
|
309
|
+
$playlist-input-back-bg--hover: $color-zinc-700;
|
|
310
|
+
|
|
311
|
+
// ─── Playlist visibility ───
|
|
312
|
+
$playlist-visibility-icon: $color-zinc-400;
|
|
313
|
+
$playlist-visibility-hint-text: $color-zinc-900;
|
|
314
|
+
$playlist-visibility-hint-bg: $color-zinc-600;
|
|
315
|
+
$playlist-visibility-hint-bg--hover: $color-zinc-500;
|
|
316
|
+
$playlist-visibility-tooltip-highlight: $color-white;
|
|
315
317
|
|
|
316
318
|
// ─── Playlist add ───
|
|
317
319
|
$playlist-add-item-bg--hover: $color-zinc-800-50;
|
|
@@ -324,8 +326,10 @@ $playlist-add-item-edit: $color-zinc-500;
|
|
|
324
326
|
$playlist-add-item-edit--hover: $color-white;
|
|
325
327
|
|
|
326
328
|
// ─── Playlist edit ───
|
|
327
|
-
$playlist-edit-
|
|
328
|
-
$playlist-edit-
|
|
329
|
+
$playlist-edit-delete-text: $color-red-400;
|
|
330
|
+
$playlist-edit-delete-text--hover: $color-red-300;
|
|
331
|
+
$playlist-edit-confirm-highlight: $color-white;
|
|
332
|
+
$playlist-edit-confirm-note: $color-zinc-500;
|
|
329
333
|
|
|
330
334
|
// ─── Playlist delete video ───
|
|
331
335
|
$playlist-delete-video-icon: $color-indigo-600;
|
|
@@ -554,7 +558,7 @@ $select-border--active: $color-indigo-500;
|
|
|
554
558
|
|
|
555
559
|
// ─── Toggle ───
|
|
556
560
|
$toggle-bg: $color-zinc-700;
|
|
557
|
-
$toggle-bg--active: $color-
|
|
561
|
+
$toggle-bg--active: $color-zinc-500;
|
|
558
562
|
$toggle-handle: $mono-white-50;
|
|
559
563
|
$toggle-handle--active: $mono-white-100;
|
|
560
564
|
$toggle-text--disabled: $mono-white-25;
|
|
@@ -696,6 +700,7 @@ $filter-popup--active: $color-zinc-400;
|
|
|
696
700
|
$filter-popup-active-bg: $color-zinc-800;
|
|
697
701
|
$filter-popup-quick-title: $color-zinc-400;
|
|
698
702
|
$filter-popup-group-border: $color-zinc-800;
|
|
703
|
+
$filter-popup-summary-arrow: $color-zinc-400;
|
|
699
704
|
$filter-popup-summary-description: $color-zinc-500;
|
|
700
705
|
$filter-popup-active-chip-bg: $color-indigo-600;
|
|
701
706
|
$filter-popup-active-chip-bg--hover: $color-indigo-500;
|
|
@@ -980,7 +985,6 @@ $contacts-link: $color-indigo-400;
|
|
|
980
985
|
$contacts-link--hover: $color-indigo-300;
|
|
981
986
|
|
|
982
987
|
// ─── Page: playlists ───
|
|
983
|
-
$page-playlists-border: $color-zinc-800;
|
|
984
988
|
|
|
985
989
|
// ─── Page: channels ───
|
|
986
990
|
$page-channels-border: $color-zinc-800;
|
|
@@ -72,7 +72,9 @@ $chips-text: $color-gray-700;
|
|
|
72
72
|
$chips-text--hover: $color-gray-900;
|
|
73
73
|
$chips-text--active: $color-white;
|
|
74
74
|
$chips-micro-bg: $color-gray-300;
|
|
75
|
+
$chips-micro-bg--hover: $color-gray-400;
|
|
75
76
|
$chips-micro-text: $color-gray-700;
|
|
77
|
+
$chips-micro-text--hover: $color-gray-900;
|
|
76
78
|
$chips-small-bg: $color-gray-300;
|
|
77
79
|
$chips-small-bg--hover: $color-gray-400;
|
|
78
80
|
$chips-small-text: $color-gray-700;
|
|
@@ -357,18 +359,18 @@ $like-bar-bg: $color-slate-700;
|
|
|
357
359
|
$like-bar-likes: $color-gray-500;
|
|
358
360
|
|
|
359
361
|
// ─── Playlist input ───
|
|
360
|
-
$playlist-input-
|
|
361
|
-
$playlist-input-toggle-icon: $color-gray-500;
|
|
362
|
-
$playlist-input-toggle-icon--active: $color-gray-400;
|
|
363
|
-
$playlist-input-hint-text: $color-gray-900;
|
|
364
|
-
$playlist-input-hint-bg: $color-gray-600;
|
|
365
|
-
$playlist-input-hint-bg--hover: $color-gray-500;
|
|
362
|
+
$playlist-input-bg: $color-slate-900;
|
|
366
363
|
$playlist-input-back: $color-gray-400;
|
|
367
364
|
$playlist-input-back--hover: $color-white;
|
|
368
|
-
$playlist-input-
|
|
369
|
-
$playlist-input-
|
|
370
|
-
|
|
371
|
-
|
|
365
|
+
$playlist-input-back-bg: $color-slate-750;
|
|
366
|
+
$playlist-input-back-bg--hover: $color-slate-700;
|
|
367
|
+
|
|
368
|
+
// ─── Playlist visibility ───
|
|
369
|
+
$playlist-visibility-icon: $color-gray-400;
|
|
370
|
+
$playlist-visibility-hint-text: $color-gray-900;
|
|
371
|
+
$playlist-visibility-hint-bg: $color-gray-600;
|
|
372
|
+
$playlist-visibility-hint-bg--hover: $color-gray-500;
|
|
373
|
+
$playlist-visibility-tooltip-highlight: $color-white;
|
|
372
374
|
|
|
373
375
|
// ─── Playlist add ───
|
|
374
376
|
$playlist-add-item-bg--hover: $color-slate-750;
|
|
@@ -381,8 +383,10 @@ $playlist-add-item-edit: $color-gray-400;
|
|
|
381
383
|
$playlist-add-item-edit--hover: $color-white;
|
|
382
384
|
|
|
383
385
|
// ─── Playlist edit ───
|
|
384
|
-
$playlist-edit-
|
|
385
|
-
$playlist-edit-
|
|
386
|
+
$playlist-edit-delete-text: $color-red-400;
|
|
387
|
+
$playlist-edit-delete-text--hover: $color-red-300;
|
|
388
|
+
$playlist-edit-confirm-highlight: $color-white;
|
|
389
|
+
$playlist-edit-confirm-note: $color-gray-500;
|
|
386
390
|
|
|
387
391
|
// ─── Playlist delete video ───
|
|
388
392
|
$playlist-delete-video-icon: $color-indigo-600;
|
|
@@ -747,6 +751,7 @@ $filter-popup--active: $color-gray-400;
|
|
|
747
751
|
$filter-popup-active-bg: transparent;
|
|
748
752
|
$filter-popup-quick-title: $color-gray-400;
|
|
749
753
|
$filter-popup-group-border: transparent;
|
|
754
|
+
$filter-popup-summary-arrow: $color-gray-400;
|
|
750
755
|
$filter-popup-summary-description: $color-gray-500;
|
|
751
756
|
$filter-popup-active-chip-bg: $color-indigo-600;
|
|
752
757
|
$filter-popup-active-chip-bg--hover: $color-indigo-500;
|
|
@@ -1008,7 +1013,6 @@ $contacts-link: $color-indigo-400;
|
|
|
1008
1013
|
$contacts-link--hover: $color-indigo-300;
|
|
1009
1014
|
|
|
1010
1015
|
// ─── Page: playlists ───
|
|
1011
|
-
$page-playlists-border: transparent;
|
|
1012
1016
|
|
|
1013
1017
|
// ─── Page: channels ───
|
|
1014
1018
|
$page-channels-border: transparent;
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
// ─── Project-specific ───
|
|
22
22
|
--chips-height: 32px;
|
|
23
23
|
--chips-height-small: 24px;
|
|
24
|
-
--chips-height-micro:
|
|
24
|
+
--chips-height-micro: 24px;
|
|
25
25
|
--transition: var(--default-transition-duration) var(--default-transition-timing-function);
|
|
26
26
|
--header-height: 64px;
|
|
27
27
|
--control-min-width: 126px;
|
|
@@ -171,10 +171,6 @@ async function submit() {
|
|
|
171
171
|
|
|
172
172
|
await useUser(AuthorizationApiService).register(form.value);
|
|
173
173
|
|
|
174
|
-
// Создаем сразу Favorites плейлист, возможно костыль убрать когда будет нормальная логика с беком
|
|
175
|
-
// const { FAVORITES_KEY } = useFavorites();
|
|
176
|
-
// await PlaylistsApiService.postPlaylist(FAVORITES_KEY, PlaylistType.Private);
|
|
177
|
-
|
|
178
174
|
useAuthPopup().closeAuthPopup();
|
|
179
175
|
show('Registration success');
|
|
180
176
|
} catch (err) {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
v-if="showWatchLater"
|
|
32
32
|
:class="className"
|
|
33
33
|
type="button"
|
|
34
|
-
@click="toggleWatchLater(card.guid)"
|
|
34
|
+
@click="toggleWatchLater(card.guid, card.title)"
|
|
35
35
|
>
|
|
36
36
|
<UiIcon
|
|
37
37
|
name="clock"
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
v-if="showFavorites"
|
|
44
44
|
:class="className"
|
|
45
45
|
type="button"
|
|
46
|
-
@click="toggleFavorite(card.guid)"
|
|
46
|
+
@click="toggleFavorite(card.guid, card.title)"
|
|
47
47
|
>
|
|
48
48
|
<UiIcon
|
|
49
49
|
name="heart-stroke"
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
>
|
|
56
56
|
<UiIcon
|
|
57
57
|
name="thumbs-up"
|
|
58
|
-
size="
|
|
58
|
+
size="14"
|
|
59
59
|
/>
|
|
60
60
|
{{ $n(card.likes, 'compact') }}
|
|
61
61
|
</span>
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
<p class="card-playlist__created">
|
|
74
74
|
<UiIcon
|
|
75
75
|
name="date"
|
|
76
|
-
size="
|
|
76
|
+
size="14"
|
|
77
77
|
/>
|
|
78
78
|
{{ formatDate(card.created) }}
|
|
79
79
|
</p>
|
|
@@ -83,7 +83,7 @@
|
|
|
83
83
|
v-if="avatar"
|
|
84
84
|
:src="avatar"
|
|
85
85
|
:alt="card.username"
|
|
86
|
-
class="card-
|
|
86
|
+
class="card-collections-more__count _from-xs"
|
|
87
87
|
width="36"
|
|
88
88
|
height="36"
|
|
89
89
|
sizes="36px"
|
|
@@ -292,7 +292,7 @@ const avatarPlaceholder = computed(() => props.card.username.charAt(0));
|
|
|
292
292
|
.card-playlist__wrapper {
|
|
293
293
|
display: grid;
|
|
294
294
|
align-items: center;
|
|
295
|
-
padding:
|
|
295
|
+
padding: 12px;
|
|
296
296
|
}
|
|
297
297
|
|
|
298
298
|
.card-playlist__wrapper-header {
|
|
@@ -300,7 +300,7 @@ const avatarPlaceholder = computed(() => props.card.username.charAt(0));
|
|
|
300
300
|
align-items: center;
|
|
301
301
|
justify-content: space-between;
|
|
302
302
|
column-gap: 24px;
|
|
303
|
-
margin-bottom:
|
|
303
|
+
margin-bottom: 8px;
|
|
304
304
|
}
|
|
305
305
|
|
|
306
306
|
.card-playlist__wrapper.--top {
|
|
@@ -407,8 +407,8 @@ const avatarPlaceholder = computed(() => props.card.username.charAt(0));
|
|
|
407
407
|
--line-clamp: 1;
|
|
408
408
|
|
|
409
409
|
color: $playlist-card-tags;
|
|
410
|
-
padding-top:
|
|
411
|
-
margin-top:
|
|
410
|
+
padding-top: 8px;
|
|
411
|
+
margin-top: 8px;
|
|
412
412
|
border-top: 1px solid $playlist-card-tags-border;
|
|
413
413
|
}
|
|
414
414
|
|
|
@@ -456,7 +456,6 @@ const avatarPlaceholder = computed(() => props.card.username.charAt(0));
|
|
|
456
456
|
grid-template-columns: auto 1fr;
|
|
457
457
|
column-gap: 12px;
|
|
458
458
|
align-items: start;
|
|
459
|
-
margin-bottom: 12px;
|
|
460
459
|
}
|
|
461
460
|
|
|
462
461
|
.card-playlist__content-wrapper {
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
class="card-video-actions__btn --active"
|
|
8
8
|
type="button"
|
|
9
9
|
aria-pressed="true"
|
|
10
|
-
@click="toggleFavorite(card.guid)"
|
|
10
|
+
@click="toggleFavorite(card.guid, card.title)"
|
|
11
11
|
>
|
|
12
12
|
<UiIcon
|
|
13
13
|
name="heart"
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
:aria-pressed="later"
|
|
23
23
|
:class="['card-video-actions__btn', '--watch-later', { '--active': later }]"
|
|
24
24
|
type="button"
|
|
25
|
-
@click="toggleWatchLater(card.guid)"
|
|
25
|
+
@click="toggleWatchLater(card.guid, card.title)"
|
|
26
26
|
>
|
|
27
27
|
<UiIcon
|
|
28
28
|
:name="later ? 'clock-filled' : 'clock'"
|
|
@@ -398,14 +398,14 @@ $dropdown-column: 18px;
|
|
|
398
398
|
}
|
|
399
399
|
|
|
400
400
|
@include from-cq($layout-breakpoint) {
|
|
401
|
-
column-gap:
|
|
402
|
-
grid-template-columns:
|
|
401
|
+
column-gap: 12px;
|
|
402
|
+
grid-template-columns: 36px 1fr $dropdown-column;
|
|
403
403
|
}
|
|
404
404
|
}
|
|
405
405
|
|
|
406
406
|
.--avatar .card-video__wrapper {
|
|
407
|
-
column-gap:
|
|
408
|
-
grid-template-columns:
|
|
407
|
+
column-gap: 12px;
|
|
408
|
+
grid-template-columns: 36px 1fr $dropdown-column;
|
|
409
409
|
}
|
|
410
410
|
|
|
411
411
|
.--avatar .card-video__title {
|
|
@@ -585,23 +585,23 @@ $dropdown-column: 18px;
|
|
|
585
585
|
|
|
586
586
|
@include from-cq($layout-breakpoint) {
|
|
587
587
|
grid-column: 2;
|
|
588
|
-
margin-top:
|
|
588
|
+
margin-top: 10px;
|
|
589
589
|
}
|
|
590
590
|
}
|
|
591
591
|
|
|
592
592
|
.card-video__tags-wrapper {
|
|
593
|
-
max-height: calc( var(--chips-height-micro) * 2 +
|
|
593
|
+
max-height: calc( var(--chips-height-micro) * 2 + 8px);
|
|
594
594
|
overflow: hidden;
|
|
595
595
|
display: flex;
|
|
596
596
|
flex-wrap: wrap;
|
|
597
|
-
gap:
|
|
597
|
+
gap: 8px;
|
|
598
598
|
}
|
|
599
599
|
|
|
600
600
|
.card-video__user {
|
|
601
601
|
@include font-xs;
|
|
602
602
|
|
|
603
|
-
width:
|
|
604
|
-
height:
|
|
603
|
+
width: 36px;
|
|
604
|
+
height: 36px;
|
|
605
605
|
display: grid;
|
|
606
606
|
place-content: center;
|
|
607
607
|
font-weight: 700;
|
|
@@ -141,19 +141,6 @@
|
|
|
141
141
|
compact
|
|
142
142
|
/>
|
|
143
143
|
</div>
|
|
144
|
-
|
|
145
|
-
<!-- <UiLink
|
|
146
|
-
:to="item.to"
|
|
147
|
-
theme="secondary"
|
|
148
|
-
class="library-feed__all _to-sm"
|
|
149
|
-
wide
|
|
150
|
-
>
|
|
151
|
-
{{ videosText }}
|
|
152
|
-
<UiIcon
|
|
153
|
-
name="arrow-right"
|
|
154
|
-
size="16"
|
|
155
|
-
/>
|
|
156
|
-
</UiLink> -->
|
|
157
144
|
</article>
|
|
158
145
|
</template>
|
|
159
146
|
|
|
@@ -212,7 +199,7 @@ const ageText = computed(() => {
|
|
|
212
199
|
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
213
200
|
column-gap: 16px;
|
|
214
201
|
row-gap: 12px;
|
|
215
|
-
align-items:
|
|
202
|
+
align-items: start;
|
|
216
203
|
margin-bottom: 20px;
|
|
217
204
|
}
|
|
218
205
|
|