itube-specs 0.0.820 → 0.0.822
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/components/player/core.vue +20 -24
- package/components/player/main.vue +0 -406
- package/components/player/menu.vue +406 -0
- package/package.json +2 -1
- package/public/icons/flags/ad.svg +1 -0
- package/public/icons/flags/af.svg +1 -0
- package/public/icons/flags/ag.svg +1 -0
- package/public/icons/flags/ai.svg +1 -0
- package/public/icons/flags/al.svg +1 -0
- package/public/icons/flags/am.svg +1 -0
- package/public/icons/flags/an.svg +1 -0
- package/public/icons/flags/ao.svg +1 -0
- package/public/icons/flags/aq.svg +1 -0
- package/public/icons/flags/ar.svg +1 -0
- package/public/icons/flags/ar1.svg +1 -0
- package/public/icons/flags/as.svg +1 -0
- package/public/icons/flags/at.svg +1 -0
- package/public/icons/flags/au.svg +1 -0
- package/public/icons/flags/aw.svg +1 -0
- package/public/icons/flags/ax.svg +1 -0
- package/public/icons/flags/az.svg +1 -0
- package/public/icons/flags/ba.svg +1 -0
- package/public/icons/flags/bb.svg +1 -0
- package/public/icons/flags/bd.svg +1 -0
- package/public/icons/flags/be.svg +1 -0
- package/public/icons/flags/bf.svg +1 -0
- package/public/icons/flags/bg.svg +1 -0
- package/public/icons/flags/bh.svg +1 -0
- package/public/icons/flags/bi.svg +1 -0
- package/public/icons/flags/bj.svg +1 -0
- package/public/icons/flags/bl.svg +1 -0
- package/public/icons/flags/bm.svg +1 -0
- package/public/icons/flags/bn.svg +1 -0
- package/public/icons/flags/bo.svg +1 -0
- package/public/icons/flags/bq.svg +1 -0
- package/public/icons/flags/br.svg +1 -0
- package/public/icons/flags/bs.svg +1 -0
- package/public/icons/flags/bt.svg +1 -0
- package/public/icons/flags/bv.svg +1 -0
- package/public/icons/flags/bw.svg +1 -0
- package/public/icons/flags/by.svg +1 -0
- package/public/icons/flags/bz.svg +1 -0
- package/public/icons/flags/ca.svg +1 -0
- package/public/icons/flags/cc.svg +1 -0
- package/public/icons/flags/cd.svg +1 -0
- package/public/icons/flags/cf.svg +1 -0
- package/public/icons/flags/cg.svg +1 -0
- package/public/icons/flags/ch.svg +1 -0
- package/public/icons/flags/ch1.svg +1 -0
- package/public/icons/flags/ci.svg +1 -0
- package/public/icons/flags/ck.svg +1 -0
- package/public/icons/flags/cl.svg +1 -0
- package/public/icons/flags/cm.svg +1 -0
- package/public/icons/flags/co.svg +1 -0
- package/public/icons/flags/cr.svg +1 -0
- package/public/icons/flags/cu.svg +1 -0
- package/public/icons/flags/cv.svg +1 -0
- package/public/icons/flags/cw.svg +1 -0
- package/public/icons/flags/cx.svg +1 -0
- package/public/icons/flags/cy.svg +1 -0
- package/public/icons/flags/cz.svg +1 -0
- package/public/icons/flags/de.svg +1 -0
- package/public/icons/flags/dj.svg +1 -0
- package/public/icons/flags/dk.svg +1 -0
- package/public/icons/flags/dm.svg +1 -0
- package/public/icons/flags/do.svg +1 -0
- package/public/icons/flags/dz.svg +1 -0
- package/public/icons/flags/ec.svg +1 -0
- package/public/icons/flags/ee.svg +1 -0
- package/public/icons/flags/eg.svg +1 -0
- package/public/icons/flags/eh.svg +1 -0
- package/public/icons/flags/en.svg +1 -0
- package/public/icons/flags/er.svg +1 -0
- package/public/icons/flags/es.svg +1 -0
- package/public/icons/flags/et.svg +1 -0
- package/public/icons/flags/eu.svg +1 -0
- package/public/icons/flags/fi.svg +1 -0
- package/public/icons/flags/fj.svg +1 -0
- package/public/icons/flags/fk.svg +1 -0
- package/public/icons/flags/fm.svg +1 -0
- package/public/icons/flags/fo.svg +1 -0
- package/public/icons/flags/fr.svg +1 -0
- package/public/icons/flags/ga.svg +1 -0
- package/public/icons/flags/gb-eng.svg +1 -0
- package/public/icons/flags/gb-sct.svg +1 -0
- package/public/icons/flags/gb-wls.svg +1 -0
- package/public/icons/flags/gb.svg +1 -0
- package/public/icons/flags/gd.svg +1 -0
- package/public/icons/flags/ge.svg +1 -0
- package/public/icons/flags/gf.svg +1 -0
- package/public/icons/flags/gg.svg +1 -0
- package/public/icons/flags/gh.svg +1 -0
- package/public/icons/flags/gi.svg +1 -0
- package/public/icons/flags/gl.svg +1 -0
- package/public/icons/flags/gm.svg +1 -0
- package/public/icons/flags/gn.svg +1 -0
- package/public/icons/flags/gp.svg +1 -0
- package/public/icons/flags/gq.svg +1 -0
- package/public/icons/flags/gr.svg +1 -0
- package/public/icons/flags/gs.svg +51 -0
- package/public/icons/flags/gt.svg +1 -0
- package/public/icons/flags/gu.svg +1 -0
- package/public/icons/flags/gw.svg +1 -0
- package/public/icons/flags/gy.svg +1 -0
- package/public/icons/flags/hk.svg +1 -0
- package/public/icons/flags/hm.svg +1 -0
- package/public/icons/flags/hn.svg +1 -0
- package/public/icons/flags/hr.svg +1 -0
- package/public/icons/flags/ht.svg +1 -0
- package/public/icons/flags/hu.svg +1 -0
- package/public/icons/flags/id.svg +1 -0
- package/public/icons/flags/ie.svg +1 -0
- package/public/icons/flags/il.svg +1 -0
- package/public/icons/flags/im.svg +1 -0
- package/public/icons/flags/in.svg +1 -0
- package/public/icons/flags/io.svg +1 -0
- package/public/icons/flags/iq.svg +1 -0
- package/public/icons/flags/ir.svg +1 -0
- package/public/icons/flags/is.svg +1 -0
- package/public/icons/flags/it.svg +1 -0
- package/public/icons/flags/ja.svg +1 -0
- package/public/icons/flags/je.svg +1 -0
- package/public/icons/flags/jm.svg +1 -0
- package/public/icons/flags/jo.svg +1 -0
- package/public/icons/flags/jp.svg +1 -0
- package/public/icons/flags/ke.svg +1 -0
- package/public/icons/flags/kg.svg +1 -0
- package/public/icons/flags/kh.svg +1 -0
- package/public/icons/flags/ki.svg +1 -0
- package/public/icons/flags/km.svg +1 -0
- package/public/icons/flags/kn.svg +1 -0
- package/public/icons/flags/ko.svg +1 -0
- package/public/icons/flags/kp.svg +1 -0
- package/public/icons/flags/kw.svg +1 -0
- package/public/icons/flags/ky.svg +1 -0
- package/public/icons/flags/kz.svg +1 -0
- package/public/icons/flags/la.svg +1 -0
- package/public/icons/flags/lb.svg +1 -0
- package/public/icons/flags/lc.svg +1 -0
- package/public/icons/flags/li.svg +1 -0
- package/public/icons/flags/lk.svg +1 -0
- package/public/icons/flags/lr.svg +1 -0
- package/public/icons/flags/ls.svg +1 -0
- package/public/icons/flags/lt.svg +1 -0
- package/public/icons/flags/lu.svg +1 -0
- package/public/icons/flags/lv.svg +1 -0
- package/public/icons/flags/ly.svg +1 -0
- package/public/icons/flags/ma.svg +1 -0
- package/public/icons/flags/mc.svg +1 -0
- package/public/icons/flags/md.svg +1 -0
- package/public/icons/flags/me.svg +1 -0
- package/public/icons/flags/mf.svg +1 -0
- package/public/icons/flags/mg.svg +1 -0
- package/public/icons/flags/mh.svg +1 -0
- package/public/icons/flags/mk.svg +1 -0
- package/public/icons/flags/ml.svg +1 -0
- package/public/icons/flags/mm.svg +1 -0
- package/public/icons/flags/mn.svg +1 -0
- package/public/icons/flags/mo.svg +1 -0
- package/public/icons/flags/mp.svg +1 -0
- package/public/icons/flags/mq.svg +1 -0
- package/public/icons/flags/mr.svg +1 -0
- package/public/icons/flags/ms.svg +1 -0
- package/public/icons/flags/mt.svg +1 -0
- package/public/icons/flags/mu.svg +1 -0
- package/public/icons/flags/mv.svg +1 -0
- package/public/icons/flags/mw.svg +1 -0
- package/public/icons/flags/mx.svg +1 -0
- package/public/icons/flags/my.svg +1 -0
- package/public/icons/flags/mz.svg +1 -0
- package/public/icons/flags/na.svg +1 -0
- package/public/icons/flags/nc.svg +1 -0
- package/public/icons/flags/ne.svg +1 -0
- package/public/icons/flags/nf.svg +1 -0
- package/public/icons/flags/ng.svg +1 -0
- package/public/icons/flags/ni.svg +1 -0
- package/public/icons/flags/nl.svg +1 -0
- package/public/icons/flags/no.svg +1 -0
- package/public/icons/flags/np.svg +1 -0
- package/public/icons/flags/nr.svg +1 -0
- package/public/icons/flags/nu.svg +1 -0
- package/public/icons/flags/nz.svg +1 -0
- package/public/icons/flags/om.svg +1 -0
- package/public/icons/flags/pa.svg +1 -0
- package/public/icons/flags/pe.svg +1 -0
- package/public/icons/flags/pf.svg +1 -0
- package/public/icons/flags/pg.svg +1 -0
- package/public/icons/flags/ph.svg +1 -0
- package/public/icons/flags/pk.svg +1 -0
- package/public/icons/flags/pl.svg +1 -0
- package/public/icons/flags/pm.svg +1 -0
- package/public/icons/flags/pn.svg +1 -0
- package/public/icons/flags/pr.svg +1 -0
- package/public/icons/flags/ps.svg +1 -0
- package/public/icons/flags/pt.svg +1 -0
- package/public/icons/flags/pw.svg +1 -0
- package/public/icons/flags/py.svg +1 -0
- package/public/icons/flags/qa.svg +1 -0
- package/public/icons/flags/re.svg +1 -0
- package/public/icons/flags/ro.svg +1 -0
- package/public/icons/flags/rs.svg +1 -0
- package/public/icons/flags/ru.svg +1 -0
- package/public/icons/flags/rw.svg +1 -0
- package/public/icons/flags/sa.svg +1 -0
- package/public/icons/flags/sb.svg +1 -0
- package/public/icons/flags/sc.svg +1 -0
- package/public/icons/flags/sd.svg +1 -0
- package/public/icons/flags/se.svg +1 -0
- package/public/icons/flags/sg.svg +1 -0
- package/public/icons/flags/sh.svg +1 -0
- package/public/icons/flags/si.svg +1 -0
- package/public/icons/flags/sj.svg +1 -0
- package/public/icons/flags/sk.svg +1 -0
- package/public/icons/flags/sl.svg +1 -0
- package/public/icons/flags/sm.svg +1 -0
- package/public/icons/flags/sn.svg +1 -0
- package/public/icons/flags/so.svg +1 -0
- package/public/icons/flags/sr.svg +1 -0
- package/public/icons/flags/ss.svg +1 -0
- package/public/icons/flags/st.svg +1 -0
- package/public/icons/flags/sv.svg +1 -0
- package/public/icons/flags/sx.svg +1 -0
- package/public/icons/flags/sy.svg +1 -0
- package/public/icons/flags/sz.svg +1 -0
- package/public/icons/flags/tc.svg +1 -0
- package/public/icons/flags/td.svg +1 -0
- package/public/icons/flags/tf.svg +1 -0
- package/public/icons/flags/tg.svg +1 -0
- package/public/icons/flags/th.svg +1 -0
- package/public/icons/flags/tj.svg +1 -0
- package/public/icons/flags/tk.svg +1 -0
- package/public/icons/flags/tl.svg +1 -0
- package/public/icons/flags/tm.svg +1 -0
- package/public/icons/flags/tn.svg +1 -0
- package/public/icons/flags/to.svg +1 -0
- package/public/icons/flags/tr.svg +1 -0
- package/public/icons/flags/tt.svg +1 -0
- package/public/icons/flags/tv.svg +1 -0
- package/public/icons/flags/tw.svg +1 -0
- package/public/icons/flags/tz.svg +1 -0
- package/public/icons/flags/ua.svg +1 -0
- package/public/icons/flags/ug.svg +1 -0
- package/public/icons/flags/uk.svg +1 -0
- package/public/icons/flags/um.svg +1 -0
- package/public/icons/flags/us.svg +1 -0
- package/public/icons/flags/uy.svg +1 -0
- package/public/icons/flags/uz.svg +1 -0
- package/public/icons/flags/va.svg +1 -0
- package/public/icons/flags/vc.svg +1 -0
- package/public/icons/flags/ve.svg +1 -0
- package/public/icons/flags/vg.svg +1 -0
- package/public/icons/flags/vi.svg +1 -0
- package/public/icons/flags/vn.svg +1 -0
- package/public/icons/flags/vu.svg +1 -0
- package/public/icons/flags/wf.svg +1 -0
- package/public/icons/flags/ws.svg +1 -0
- package/public/icons/flags/xk.svg +1 -0
- package/public/icons/flags/ye.svg +1 -0
- package/public/icons/flags/yt.svg +1 -0
- package/public/icons/flags/za.svg +1 -0
- package/public/icons/flags/zh.svg +1 -0
- package/public/icons/flags/zm.svg +1 -0
- package/public/icons/flags/zw.svg +1 -0
- package/public/icons/socials/facebook.svg +3 -0
- package/public/icons/socials/globe.svg +3 -0
- package/public/icons/socials/instagram.svg +1 -0
- package/public/icons/socials/snapchat.svg +1 -0
- package/public/icons/socials/telegram.svg +1 -0
- package/public/icons/socials/tiktok.svg +1 -0
- package/public/icons/socials/twitter.svg +1 -0
- package/public/icons/socials/whatsapp.svg +1 -0
- package/public/icons/socials/x.svg +3 -0
- package/public/icons/socials/youtube.svg +3 -0
|
@@ -14,12 +14,19 @@
|
|
|
14
14
|
@ended="emit('end')"
|
|
15
15
|
@advancerequest="onAdvanceRequest"
|
|
16
16
|
@sourcechange="onSourceChange"
|
|
17
|
+
@menurequest="onMenuRequest"
|
|
18
|
+
/>
|
|
19
|
+
|
|
20
|
+
<!-- Внешнее меню плеера в нашем ui-popup (только мобила — menus: 'external-mobile'). -->
|
|
21
|
+
<PlayerMenu
|
|
22
|
+
v-model:open="menuOpen"
|
|
23
|
+
:request="menuRequest"
|
|
17
24
|
/>
|
|
18
25
|
</template>
|
|
19
26
|
|
|
20
27
|
<script setup lang="ts">
|
|
21
28
|
import { ITubePlayer } from 'itube-modern-player/vue';
|
|
22
|
-
import type { Player, PlayerOptions, VideoSource, LocaleCode, AdsOptions, PreviewMetaItem, SceneGroup } from 'itube-modern-player';
|
|
29
|
+
import type { Player, PlayerOptions, VideoSource, LocaleCode, AdsOptions, PreviewMetaItem, SceneGroup, MenuRequestPayload } from 'itube-modern-player';
|
|
23
30
|
import { AdvertsHelper } from '../../utils/adverts-helper';
|
|
24
31
|
import { AdSpotType, ThumbSize } from '../../runtime';
|
|
25
32
|
import type { IVideoData, IVideoCard } from '../../types';
|
|
@@ -56,6 +63,16 @@ const { t, n, locale } = useI18n();
|
|
|
56
63
|
|
|
57
64
|
const playerRef = ref<InstanceType<typeof ITubePlayer> & { player: Player | null }>();
|
|
58
65
|
|
|
66
|
+
// Внешнее меню (menus: 'external-mobile'): по нажатию меню-кнопки плеер эмитит модель,
|
|
67
|
+
// а рисуем её мы (PlayerMenu → ui-popup). menurequest прилетает на каждое нажатие.
|
|
68
|
+
const menuRequest = shallowRef<MenuRequestPayload | null>(null);
|
|
69
|
+
const menuOpen = ref(false);
|
|
70
|
+
|
|
71
|
+
function onMenuRequest(request: MenuRequestPayload): void {
|
|
72
|
+
menuRequest.value = request;
|
|
73
|
+
menuOpen.value = true;
|
|
74
|
+
}
|
|
75
|
+
|
|
59
76
|
// Плеер эмитит advancerequest 'ended' только при включённом тумблере Autoplay, а на
|
|
60
77
|
// кнопку next — 'next'. Значит play после свапа нужен ТОЛЬКО когда переход инициировали
|
|
61
78
|
// мы (next / автопереход), а не когда source пересобрался по другой причине (сменилось
|
|
@@ -219,6 +236,8 @@ const options = computed<Omit<PlayerOptions, 'source'>>(() => ({
|
|
|
219
236
|
},
|
|
220
237
|
pauseScreen: false,
|
|
221
238
|
language: playerLanguage.value,
|
|
239
|
+
// Десктоп — нативные попапы плеера; мобила (≤767px) — эмитит menurequest, рисуем сами.
|
|
240
|
+
menus: 'external-mobile',
|
|
222
241
|
controls: {
|
|
223
242
|
seekButtons: { label: (seconds) => String(seconds) },
|
|
224
243
|
playlistButton: false,
|
|
@@ -263,27 +282,4 @@ async function loadAdConfig(): Promise<AdsOptions | undefined> {
|
|
|
263
282
|
border-radius: 0;
|
|
264
283
|
}
|
|
265
284
|
}
|
|
266
|
-
|
|
267
|
-
// Хост (.player-core) уже клипует по $radius-lg — снимаем собственный radius заглушки
|
|
268
|
-
// пакета (inline 8px), иначе двойное скругление даёт чёрные уголки на свопе.
|
|
269
|
-
.player-core .imp-player--lazy {
|
|
270
|
-
border-radius: 0 !important;
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
// Пиксель-парити SSR-заглушки с реальной центральной кнопкой. Пакет форсит
|
|
274
|
-
// inlineStyles:true (84px, --imp-accent-цвет), а прокинуть наши размеры/цвет через
|
|
275
|
-
// styling нельзя — styling.themeColor перебил бы наш --imp-accent на живом плеере.
|
|
276
|
-
// Поэтому бьём инлайн !important'ом (совпадает с .imp-center-btn--play в main.vue).
|
|
277
|
-
.player-core .imp-player--lazy .imp-poster__play {
|
|
278
|
-
width: 80px !important;
|
|
279
|
-
height: 80px !important;
|
|
280
|
-
padding: 22px !important;
|
|
281
|
-
color: $video-play-btn-icon !important;
|
|
282
|
-
background: $video-play-btn-bg !important;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
.player-core .imp-player--lazy .imp-poster__play svg {
|
|
286
|
-
width: 100%;
|
|
287
|
-
height: 100%;
|
|
288
|
-
}
|
|
289
285
|
</style>
|
|
@@ -131,410 +131,4 @@ const { nextVideo, goNext } = useNextVideo({
|
|
|
131
131
|
grid-row: 2;
|
|
132
132
|
}
|
|
133
133
|
}
|
|
134
|
-
|
|
135
|
-
// Оверрайды иконок/кнопок плеера (itube-modern-player). Держим здесь, а не в
|
|
136
|
-
// ленивом core.vue: CSS пакета грузится по интеракции, наши стили в бандле страницы
|
|
137
|
-
// присутствуют до неё и выигрывают в каскаде сразу (без вспышки дефолтного акцента).
|
|
138
|
-
.player-main__player .imp-player {
|
|
139
|
-
--imp-accent: #{$video-status-accent};
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
// Центральная и постерная play-кнопки — один в один (постерную показывает плеер
|
|
143
|
-
// во время load(), при свопе с центральной был скачок размера/паддинга).
|
|
144
|
-
// Локальный --imp-accent = наш цвет: пакет рисует фон через var(--imp-accent) и
|
|
145
|
-
// анимирует его (transition: background) — совпадение значений убирает вспышку.
|
|
146
|
-
.player-main__player .imp-center-btn.imp-center-btn--play,
|
|
147
|
-
.player-main__player .imp-poster .imp-poster__play {
|
|
148
|
-
$size: 80px;
|
|
149
|
-
|
|
150
|
-
--imp-accent: #{$video-play-btn-bg};
|
|
151
|
-
|
|
152
|
-
width: $size;
|
|
153
|
-
height: $size;
|
|
154
|
-
padding: 22px;
|
|
155
|
-
color: $video-play-btn-icon;
|
|
156
|
-
background: $video-play-btn-bg;
|
|
157
|
-
|
|
158
|
-
@include hover(background) {
|
|
159
|
-
background: $video-play-btn-bg--hover;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
.player-main__player .imp-btn.imp-btn--play {
|
|
164
|
-
@include hover(color) {
|
|
165
|
-
color: $video-play-console-play-btn-bg--hover;
|
|
166
|
-
background-color: transparent;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
.player-main__player button.imp-btn {
|
|
171
|
-
color: $video-play-console-btn-bg;
|
|
172
|
-
|
|
173
|
-
@include hover(color) {
|
|
174
|
-
background-color: transparent;
|
|
175
|
-
color: $video-play-console-btn-bg--hover;
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
.player-main__player .imp-btn.imp-btn--next {
|
|
180
|
-
padding: 8px;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
// Последний ролик последней страницы related — кнопки перехода на следующий скрыты.
|
|
184
|
-
.player-main__player.--playlist-end .imp-btn--next,
|
|
185
|
-
.player-main__player.--playlist-end .imp-center-btn--next {
|
|
186
|
-
display: none;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// Все кнопки нижнего бара (кроме play) — иконка 20px. Без этого svg тянется на 100%
|
|
190
|
-
// кнопки (правило пакета .imp-btn svg).
|
|
191
|
-
.player-main__player .imp-btn:not(.imp-btn--play, .imp-poster__play) svg {
|
|
192
|
-
width: 20px;
|
|
193
|
-
height: 20px;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// Шестерёнка настроек: когда открыто её меню (рядом появляется .imp-menu--wide) —
|
|
197
|
-
// поворачиваем иконку на 45°. transform у .imp-btn уже с transition в пакете.
|
|
198
|
-
.player-main__player .imp-btn--settings svg {
|
|
199
|
-
display: block;
|
|
200
|
-
transform-box: fill-box;
|
|
201
|
-
transform-origin: center;
|
|
202
|
-
transition: var(--transition) transform;
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
.player-main__player .imp-btn--settings:has(~ .imp-menu--wide) svg {
|
|
206
|
-
transform: rotate(45deg);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
// Перемотка назад — та же иконка, что и вперёд, отражённая по горизонтали.
|
|
210
|
-
// Зеркалим только svg, число .imp-seek-num (сосед svg) остаётся читаемым.
|
|
211
|
-
.player-main__player .imp-btn--seek-back svg,
|
|
212
|
-
.player-main__player .imp-center-btn--seek-back svg {
|
|
213
|
-
transform: scaleX(-1);
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
// Число шага (15) — внутрь круга иконки, по центру. Кнопки делаем relative,
|
|
217
|
-
// число позиционируем поверх svg абсолютно.
|
|
218
|
-
.player-main__player .imp-btn--seek-back,
|
|
219
|
-
.player-main__player .imp-btn--seek-forward,
|
|
220
|
-
.player-main__player .imp-center-btn--seek-back,
|
|
221
|
-
.player-main__player .imp-center-btn--seek-forward {
|
|
222
|
-
position: relative;
|
|
223
|
-
}
|
|
224
|
-
|
|
225
|
-
.player-main__player .imp-center-btn.imp-center-btn--seek-back,
|
|
226
|
-
.player-main__player .imp-center-btn.imp-center-btn--seek-forward {
|
|
227
|
-
width: 48px;
|
|
228
|
-
height: 48px;
|
|
229
|
-
background: $video-play-btn-bg;
|
|
230
|
-
border-radius: $radius-full;
|
|
231
|
-
|
|
232
|
-
@include hover(background) {
|
|
233
|
-
background: $video-play-btn-bg--hover;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
|
|
237
|
-
.player-main__player .imp-center-btn--seek-back svg,
|
|
238
|
-
.player-main__player .imp-center-btn--seek-forward svg {
|
|
239
|
-
width: 36px;
|
|
240
|
-
height: 36px;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
.player-main__player .imp-btn--seek-back .imp-seek-num,
|
|
244
|
-
.player-main__player .imp-btn--seek-forward .imp-seek-num,
|
|
245
|
-
.player-main__player .imp-center-btn--seek-back .imp-seek-num,
|
|
246
|
-
.player-main__player .imp-center-btn--seek-forward .imp-seek-num {
|
|
247
|
-
position: absolute;
|
|
248
|
-
top: 50%;
|
|
249
|
-
left: 50%;
|
|
250
|
-
font-size: 10px;
|
|
251
|
-
font-weight: 700;
|
|
252
|
-
transform: translate(-50%, -50%);
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
.player-main__player .imp-controls__group {
|
|
256
|
-
column-gap: 8px;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
.player-main__player .imp-next-preview {
|
|
260
|
-
width: 320px;
|
|
261
|
-
bottom: 64px;
|
|
262
|
-
left: 64px;
|
|
263
|
-
padding: 0;
|
|
264
|
-
overflow: hidden;
|
|
265
|
-
border: 1px solid $video-play-preview-border;
|
|
266
|
-
border-radius: $radius-xl;
|
|
267
|
-
background-color: $video-play-preview-bg;
|
|
268
|
-
backdrop-filter: blur($blur-md);
|
|
269
|
-
transform-origin: bottom left;
|
|
270
|
-
animation: next-preview-in 200ms ease;
|
|
271
|
-
|
|
272
|
-
// Скрим над «NEXT VIDEO» — читабельность поверх светлой обложки (kicker выше по DOM).
|
|
273
|
-
&::before {
|
|
274
|
-
content: '';
|
|
275
|
-
position: absolute;
|
|
276
|
-
top: 0;
|
|
277
|
-
left: 0;
|
|
278
|
-
right: 0;
|
|
279
|
-
height: 48px;
|
|
280
|
-
z-index: $z-index-plus;
|
|
281
|
-
background: linear-gradient(to bottom, $video-play-preview-scrim, transparent);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
.player-main__player .imp-next-preview__kicker {
|
|
286
|
-
@include font-3xs;
|
|
287
|
-
|
|
288
|
-
position: absolute;
|
|
289
|
-
top: 8px;
|
|
290
|
-
left: 12px;
|
|
291
|
-
color: $video-play-preview-title;
|
|
292
|
-
font-weight: 600;
|
|
293
|
-
letter-spacing: var(--tracking-widest);
|
|
294
|
-
z-index: $z-index-plus;
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
.player-main__player .imp-next-preview__duration {
|
|
298
|
-
@include font-3xs;
|
|
299
|
-
|
|
300
|
-
bottom: 8px;
|
|
301
|
-
right: 8px;
|
|
302
|
-
padding: 2px 6px;
|
|
303
|
-
color: $video-play-preview-title;
|
|
304
|
-
background: $video-play-preview-duration-bg;
|
|
305
|
-
border-radius: $radius-small;
|
|
306
|
-
font-weight: 500;
|
|
307
|
-
font-variant-numeric: tabular-nums;
|
|
308
|
-
}
|
|
309
|
-
|
|
310
|
-
.player-main__player .imp-next-preview__thumb {
|
|
311
|
-
border-radius: 0;
|
|
312
|
-
border-radius: $radius-xl $radius-xl 0 0;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
.player-main__player .imp-next-preview__title {
|
|
316
|
-
@include font-sm;
|
|
317
|
-
|
|
318
|
-
display: -webkit-box;
|
|
319
|
-
-webkit-box-orient: vertical;
|
|
320
|
-
-webkit-line-clamp: 2;
|
|
321
|
-
overflow: hidden;
|
|
322
|
-
font-weight: 600;
|
|
323
|
-
padding: 12px 12px 0;
|
|
324
|
-
margin-top: 0;
|
|
325
|
-
color: $video-play-preview-title;
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
.player-main__player .imp-next-preview__meta {
|
|
329
|
-
@include font-xs;
|
|
330
|
-
|
|
331
|
-
display: flex;
|
|
332
|
-
align-items: center;
|
|
333
|
-
gap: 6px;
|
|
334
|
-
opacity: 1;
|
|
335
|
-
padding: 0 12px 12px;
|
|
336
|
-
margin-top: 6px;
|
|
337
|
-
color: $video-play-preview-meta;
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
// Аватар канала — кружок 16px (svg-круг из previewMeta), цвет отдельным токеном.
|
|
341
|
-
.player-main__player .imp-next-preview__meta-icon {
|
|
342
|
-
width: 16px;
|
|
343
|
-
height: 16px;
|
|
344
|
-
margin-right: 6px;
|
|
345
|
-
vertical-align: middle;
|
|
346
|
-
color: $video-play-preview-avatar-bg;
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
.player-main__player .imp-next-preview__meta-icon svg {
|
|
350
|
-
width: 100%;
|
|
351
|
-
height: 100%;
|
|
352
|
-
}
|
|
353
|
-
|
|
354
|
-
// Разделитель чанков meta: пакет рисует «·», нам нужен «|». Рисуем прямоугольником,
|
|
355
|
-
// а не символом — глиф «|» позиционируется шрифтом и всегда чуть смещён. margin слева;
|
|
356
|
-
// справа отступ даёт flex-gap контейнера — так «|» ровно по центру между чанками.
|
|
357
|
-
.player-main__player .imp-next-preview__meta-chunk:not(:last-child)::after {
|
|
358
|
-
content: '';
|
|
359
|
-
display: inline-block;
|
|
360
|
-
width: 1px;
|
|
361
|
-
height: 0.85em;
|
|
362
|
-
margin-left: 6px;
|
|
363
|
-
vertical-align: middle;
|
|
364
|
-
background: $video-play-preview-separator;
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
@keyframes next-preview-in {
|
|
368
|
-
from {
|
|
369
|
-
opacity: 0;
|
|
370
|
-
transform: scale(0.95);
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
|
|
374
|
-
.player-main__player .imp-controls__time {
|
|
375
|
-
@include font-xs;
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
.player-main__player .imp-layer__bottom {
|
|
379
|
-
padding: 32px 16px 10px;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
.player-main__player .imp-controls {
|
|
383
|
-
gap: 0;
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
.player-main__player .imp-menu--wide .imp-menu__item:not(.imp-menu__back, .imp-menu__toggle) {
|
|
387
|
-
justify-content: center;
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
.player-main__player .imp-menu__back {
|
|
391
|
-
color: $video-play-menu-back-text;
|
|
392
|
-
margin-bottom: 0;
|
|
393
|
-
border: none;
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
.player-main__player .imp-btn.imp-btn--scene-types {
|
|
397
|
-
@include to-br(sm) {
|
|
398
|
-
width: auto;
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
|
|
402
|
-
.player-main__player .imp-menu {
|
|
403
|
-
min-width: 224px;
|
|
404
|
-
color: $video-play-menu-label;
|
|
405
|
-
padding: 0;
|
|
406
|
-
background-color: $video-play-menu-bg;
|
|
407
|
-
border: 1px solid $video-play-menu-border;
|
|
408
|
-
border-radius: $radius-xl;
|
|
409
|
-
backdrop-filter: blur($blur-md);
|
|
410
|
-
box-shadow: $video-play-menu-shadow;
|
|
411
|
-
|
|
412
|
-
@include to-br(sm) {
|
|
413
|
-
bottom: 4px;
|
|
414
|
-
max-height: unset;
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
@include from-br(sm) {
|
|
418
|
-
max-height: 400px;
|
|
419
|
-
}
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
.player-main__player .imp-menu__title {
|
|
423
|
-
display: none;
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
// Заголовок показываем только у меню типов сцен (единственное с иконками пунктов;
|
|
427
|
-
// у gear-меню строки без .imp-menu__icon). Стиль — под дизайн, а не дефолтный uppercase.
|
|
428
|
-
.player-main__player .imp-menu:has(.imp-menu__icon) .imp-menu__title {
|
|
429
|
-
@include font-sm;
|
|
430
|
-
|
|
431
|
-
display: block;
|
|
432
|
-
padding: 12px;
|
|
433
|
-
color: $video-play-menu-label;
|
|
434
|
-
font-weight: 500;
|
|
435
|
-
letter-spacing: normal;
|
|
436
|
-
text-transform: none;
|
|
437
|
-
opacity: 1;
|
|
438
|
-
}
|
|
439
|
-
|
|
440
|
-
// Иконка типа сцен в пункте меню — 16px (как иконки по проекту), цвет по currentColor.
|
|
441
|
-
.player-main__player .imp-menu__icon {
|
|
442
|
-
width: 16px;
|
|
443
|
-
height: 16px;
|
|
444
|
-
}
|
|
445
|
-
|
|
446
|
-
.player-main__player .imp-menu__label {
|
|
447
|
-
color: $video-play-menu-label;
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
.player-main__player .imp-menu__row.imp-menu__value {
|
|
451
|
-
color: $video-play-menu-value;
|
|
452
|
-
opacity: 1;
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
.player-main__player .imp-menu__row .imp-menu__chevron {
|
|
456
|
-
margin-left: 0;
|
|
457
|
-
color: $video-play-menu-chevron;
|
|
458
|
-
opacity: 1;
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
.player-main__player .imp-menu__row {
|
|
462
|
-
column-gap: 4px;
|
|
463
|
-
}
|
|
464
|
-
|
|
465
|
-
.player-main__player .imp-menu__item {
|
|
466
|
-
padding: 12px 16px;
|
|
467
|
-
border-radius: 0;
|
|
468
|
-
color: $video-play-item-text;
|
|
469
|
-
|
|
470
|
-
@include hover(background-color) {
|
|
471
|
-
background-color: $video-play-item--hover;
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
|
|
475
|
-
.player-main__player .imp-menu__item.imp-menu__item--active {
|
|
476
|
-
position: relative;
|
|
477
|
-
color: $video-play-item-text--active;
|
|
478
|
-
background-color: $video-play-item--active;
|
|
479
|
-
|
|
480
|
-
&::after {
|
|
481
|
-
content: '';
|
|
482
|
-
position: absolute;
|
|
483
|
-
top: 50%;
|
|
484
|
-
transform: translateY(-50%);
|
|
485
|
-
width: 2px;
|
|
486
|
-
height: 20px;
|
|
487
|
-
right: 0;
|
|
488
|
-
border-radius: $radius-md;
|
|
489
|
-
background-color: $video-play-item-active-decorate;
|
|
490
|
-
}
|
|
491
|
-
}
|
|
492
|
-
|
|
493
|
-
.player-main__player .imp-progress__tooltip {
|
|
494
|
-
display: grid;
|
|
495
|
-
grid-template-columns: 1fr auto;
|
|
496
|
-
padding: 0;
|
|
497
|
-
border-radius: $radius-xl;
|
|
498
|
-
overflow: hidden;
|
|
499
|
-
border: 1px solid $video-play-progress-tooltip-border;
|
|
500
|
-
background-color: $video-play-progress-tooltip-bg;
|
|
501
|
-
backdrop-filter: blur($blur-md);
|
|
502
|
-
}
|
|
503
|
-
|
|
504
|
-
// Размер тумбы задаёт пакет инлайном по тайлу VTT — фикс-ширину/aspect не навязываем
|
|
505
|
-
// (иначе тумба вылезает); только не даём выйти за тултип.
|
|
506
|
-
.player-main__player .imp-progress__thumb {
|
|
507
|
-
grid-column: 1/-1;
|
|
508
|
-
max-width: 100%;
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
// Полоса подписи (chapter/time) — пакет для --thumb даёт ей свой фон #26262d.
|
|
512
|
-
// Совмещаем с фоном карточки, чтобы поверхность была единой, как в дизайне.
|
|
513
|
-
.player-main__player .imp-progress__tooltip--thumb .imp-progress__caption {
|
|
514
|
-
background: $video-play-progress-tooltip-bg;
|
|
515
|
-
}
|
|
516
|
-
|
|
517
|
-
.player-main__player .imp-progress__tooltip-chapter {
|
|
518
|
-
@include font-3xs;
|
|
519
|
-
|
|
520
|
-
grid-column: 1;
|
|
521
|
-
min-width: 0;
|
|
522
|
-
padding: 6px 8px;
|
|
523
|
-
font-weight: 500;
|
|
524
|
-
letter-spacing: 0.025em;
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
.player-main__player .imp-progress__tooltip-time {
|
|
528
|
-
@include font-3xs;
|
|
529
|
-
|
|
530
|
-
grid-column: 2;
|
|
531
|
-
justify-self: end;
|
|
532
|
-
padding: 6px 8px;
|
|
533
|
-
font-weight: 600;
|
|
534
|
-
font-variant-numeric: tabular-nums;
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
.player-main__player .imp-progress__track {
|
|
538
|
-
column-gap: 4px;
|
|
539
|
-
}
|
|
540
134
|
</style>
|