@webitel/ui-sdk 25.10.51 → 25.10.53
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/dist/errors-DCJKAXTz.js +70 -0
- package/dist/img/sprite/index.js +4 -0
- package/dist/img/sprite/player-enter-fullscreen.svg +3 -0
- package/dist/img/sprite/player-exit-fullscreen.svg +4 -0
- package/dist/install-By5bv5Ga.js +111259 -0
- package/dist/prod-DTLJXtPo.js +994 -0
- package/dist/srt-parser-CWqahKwO.js +27 -0
- package/dist/ssa-parser-BqjjKy4M.js +209 -0
- package/dist/ui-sdk.css +1 -1
- package/dist/ui-sdk.js +2 -100294
- package/dist/ui-sdk.umd.cjs +1633 -1605
- package/dist/vidstack-54Jpr2Lq-B2le6Uto.js +142 -0
- package/dist/vidstack-BP-l85ST-CTFw3KUN.js +21 -0
- package/dist/vidstack-BTBUzdbF-BuhaE3ef.js +29 -0
- package/dist/vidstack-Ccp8mxka-2ZiXmway.js +20 -0
- package/dist/vidstack-Dgd3Tj9x-BuTqiZFH.js +397 -0
- package/dist/vidstack-DscYSLiW-Dk1undJ-.js +33 -0
- package/dist/vidstack-HTyVv8Yq-DzaVyW2f.js +52 -0
- package/dist/vidstack-audio-BEcEzkeF.js +26 -0
- package/dist/vidstack-dash-D8SZVGUN.js +405 -0
- package/dist/vidstack-google-cast-Yhgv2Xji.js +405 -0
- package/dist/vidstack-hls-C5jjqF8L.js +328 -0
- package/dist/vidstack-video-1erl9Gbe.js +149 -0
- package/dist/vidstack-vimeo-BSb58vEP.js +434 -0
- package/dist/vidstack-youtube-BeeLfeYv.js +204 -0
- package/package.json +2 -1
- package/src/assets/icons/sprite/index.js +4 -0
- package/src/assets/icons/sprite/player-enter-fullscreen.svg +3 -0
- package/src/assets/icons/sprite/player-exit-fullscreen.svg +4 -0
- package/src/components/index.js +3 -0
- package/src/components/wt-image/wt-image.vue +4 -1
- package/src/components/wt-loader/wt-loader.vue +1 -0
- package/src/components/wt-popup/_mixins.scss +31 -0
- package/src/components/wt-popup/wt-popup.vue +7 -21
- package/src/components/wt-table/wt-table.vue +5 -0
- package/src/components/wt-vidstack-player/components/layouts/video-layout.vue +112 -0
- package/src/components/wt-vidstack-player/components/panels/media-control-panel/components/buttons/fullscreen-button.vue +37 -0
- package/src/components/wt-vidstack-player/components/panels/media-control-panel/components/buttons/play-button.vue +21 -0
- package/src/components/wt-vidstack-player/components/panels/media-control-panel/components/sliders/time-slider.vue +31 -0
- package/src/components/wt-vidstack-player/components/panels/media-control-panel/components/time-group.vue +19 -0
- package/src/components/wt-vidstack-player/components/panels/media-control-panel/media-control-panel.vue +34 -0
- package/src/components/wt-vidstack-player/components/panels/video-display-panel/video-display-panel.vue +95 -0
- package/src/components/wt-vidstack-player/components/toggle-button.vue +54 -0
- package/src/components/wt-vidstack-player/wt-vidstack-player.vue +156 -0
- package/src/install.ts +1 -0
- package/types/components/index.d.ts +3 -1
- package/types/components/wt-image/wt-image.vue.d.ts +12 -2
- package/types/components/wt-vidstack-player/components/layouts/video-layout.vue.d.ts +11 -0
- package/types/components/wt-vidstack-player/components/panels/media-control-panel/components/buttons/fullscreen-button.vue.d.ts +6 -0
- package/types/components/wt-vidstack-player/components/panels/media-control-panel/components/buttons/play-button.vue.d.ts +2 -0
- package/types/components/wt-vidstack-player/components/panels/media-control-panel/components/sliders/time-slider.vue.d.ts +2 -0
- package/types/components/wt-vidstack-player/components/panels/media-control-panel/components/time-group.vue.d.ts +2 -0
- package/types/components/wt-vidstack-player/components/panels/media-control-panel/media-control-panel.vue.d.ts +2 -0
- package/types/components/wt-vidstack-player/components/panels/video-display-panel/video-display-panel.vue.d.ts +11 -0
- package/types/components/wt-vidstack-player/components/toggle-button.vue.d.ts +12 -0
- package/types/components/wt-vidstack-player/wt-vidstack-player.vue.d.ts +25 -0
- package/types/install.d.ts +1 -0
package/src/components/index.js
CHANGED
|
@@ -70,6 +70,7 @@ import WtTimepicker from './wt-timepicker/wt-timepicker.vue';
|
|
|
70
70
|
import WtTooltip from './wt-tooltip/wt-tooltip.vue';
|
|
71
71
|
import WtTree from './wt-tree/wt-tree.vue';
|
|
72
72
|
import WtTreeTable from './wt-tree-table/wt-tree-table.vue';
|
|
73
|
+
import WtVidstackPlayer from './wt-vidstack-player/wt-vidstack-player.vue';
|
|
73
74
|
|
|
74
75
|
const Components = {
|
|
75
76
|
WtActionBar,
|
|
@@ -143,6 +144,7 @@ const Components = {
|
|
|
143
144
|
WtStartPage,
|
|
144
145
|
WtSelectionPopup,
|
|
145
146
|
WtDisplayChipItems,
|
|
147
|
+
WtVidstackPlayer,
|
|
146
148
|
};
|
|
147
149
|
|
|
148
150
|
export {
|
|
@@ -218,6 +220,7 @@ export {
|
|
|
218
220
|
WtTree,
|
|
219
221
|
WtTreeTable,
|
|
220
222
|
WtTypeExtensionValueInput,
|
|
223
|
+
WtVidstackPlayer,
|
|
221
224
|
};
|
|
222
225
|
|
|
223
226
|
export default Components;
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
maxHeight,
|
|
11
11
|
cursor: overlayIcon ? 'pointer' : 'auto'
|
|
12
12
|
}"
|
|
13
|
+
@click="emit('click', $event)"
|
|
13
14
|
>
|
|
14
15
|
<!-- @slot Replaces `<img>` tag
|
|
15
16
|
@scope `{ alt, src }`
|
|
@@ -32,7 +33,7 @@
|
|
|
32
33
|
</template>
|
|
33
34
|
|
|
34
35
|
<script setup lang="ts">
|
|
35
|
-
import { computed, defineProps } from 'vue';
|
|
36
|
+
import { computed, defineEmits, defineProps } from 'vue';
|
|
36
37
|
|
|
37
38
|
import { IconColor } from '../../enums';
|
|
38
39
|
|
|
@@ -62,6 +63,8 @@ const props = defineProps<{
|
|
|
62
63
|
overlayIconPrefix?: string;
|
|
63
64
|
}>();
|
|
64
65
|
|
|
66
|
+
const emit = defineEmits(['click']);
|
|
67
|
+
|
|
65
68
|
const width = computed(() => {
|
|
66
69
|
const width = props.size ? sizeToUnits[props.size] : props.width;
|
|
67
70
|
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/** @author @liza-pohranichna
|
|
2
|
+
* need to reuse popup styles for MD size in player https://webitel.atlassian.net/browse/WTEL-7723
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
@mixin popup-wrapper {
|
|
6
|
+
display: flex;
|
|
7
|
+
position: fixed;
|
|
8
|
+
top: 0;
|
|
9
|
+
right: 0;
|
|
10
|
+
bottom: 0;
|
|
11
|
+
left: 0;
|
|
12
|
+
justify-content: center;
|
|
13
|
+
align-items: center;
|
|
14
|
+
z-index: var(--popup-wrapper-z-index);
|
|
15
|
+
background: var(--wt-popup-shadow-color);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@mixin popup-container() {
|
|
19
|
+
display: flex;
|
|
20
|
+
flex-direction: column;
|
|
21
|
+
gap: var(--popup-sections-gap);
|
|
22
|
+
z-index: 1;
|
|
23
|
+
margin: var(--popup-padding);
|
|
24
|
+
box-shadow: var(--elevation-10);
|
|
25
|
+
border-radius: var(--border-radius);
|
|
26
|
+
background: var(--wt-popup-background-color);
|
|
27
|
+
padding: var(--popup-padding);
|
|
28
|
+
max-height: var(--popup-max-height);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
|
|
@@ -177,18 +177,12 @@ watch(wrapperShown, (value) => {
|
|
|
177
177
|
<style lang="scss" scoped>
|
|
178
178
|
@use '@webitel/styleguide/typography' as *;
|
|
179
179
|
@use '@webitel/styleguide/scroll' as *;
|
|
180
|
-
|
|
180
|
+
@use 'mixins' as *;
|
|
181
181
|
.wt-popup {
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
bottom: 0;
|
|
187
|
-
left: 0;
|
|
188
|
-
justify-content: center;
|
|
189
|
-
align-items: center;
|
|
190
|
-
z-index: var(--popup-wrapper-z-index);
|
|
191
|
-
background: var(--wt-popup-shadow-color);
|
|
182
|
+
/** @author liza-pohranichna
|
|
183
|
+
* need to reuse popup-wrapper styles in player component https://webitel.atlassian.net/browse/WTEL-7723
|
|
184
|
+
*/
|
|
185
|
+
@include popup-wrapper;
|
|
192
186
|
|
|
193
187
|
&--size {
|
|
194
188
|
&-xs {
|
|
@@ -218,16 +212,7 @@ watch(wrapperShown, (value) => {
|
|
|
218
212
|
}
|
|
219
213
|
|
|
220
214
|
.wt-popup__popup {
|
|
221
|
-
|
|
222
|
-
flex-direction: column;
|
|
223
|
-
gap: var(--popup-sections-gap);
|
|
224
|
-
z-index: 1;
|
|
225
|
-
margin: var(--popup-padding);
|
|
226
|
-
box-shadow: var(--elevation-10);
|
|
227
|
-
border-radius: var(--border-radius);
|
|
228
|
-
background: var(--wt-popup-background-color);
|
|
229
|
-
padding: var(--popup-padding);
|
|
230
|
-
max-height: var(--popup-max-height);
|
|
215
|
+
@include popup-container;
|
|
231
216
|
}
|
|
232
217
|
|
|
233
218
|
.wt-popup__header {
|
|
@@ -280,3 +265,4 @@ watch(wrapperShown, (value) => {
|
|
|
280
265
|
}
|
|
281
266
|
}
|
|
282
267
|
</style>
|
|
268
|
+
|
|
@@ -467,6 +467,11 @@ const virtualScroll = computed(() => {
|
|
|
467
467
|
@extend %wt-scrollbar;
|
|
468
468
|
}
|
|
469
469
|
|
|
470
|
+
//style for virtual scroller
|
|
471
|
+
.wt-table :deep(.p-virtualscroller) {
|
|
472
|
+
@extend %wt-scrollbar;
|
|
473
|
+
}
|
|
474
|
+
|
|
470
475
|
.wt-table__th__content {
|
|
471
476
|
@extend %typo-body-1-bold;
|
|
472
477
|
width: 0;
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<media-controls
|
|
3
|
+
class="video-layout controls"
|
|
4
|
+
:class="`video-layout--${size}`"
|
|
5
|
+
>
|
|
6
|
+
<video-display-panel
|
|
7
|
+
:title="props.title"
|
|
8
|
+
:username="props.username"
|
|
9
|
+
:closable="props.closable"
|
|
10
|
+
@close="emit('close-player')"
|
|
11
|
+
/>
|
|
12
|
+
|
|
13
|
+
<wt-loader size="sm" color="on-dark"/>
|
|
14
|
+
|
|
15
|
+
<media-control-panel />
|
|
16
|
+
</media-controls>
|
|
17
|
+
</template>
|
|
18
|
+
|
|
19
|
+
<script setup lang="ts">
|
|
20
|
+
import {defineEmits, inject} from "vue";
|
|
21
|
+
|
|
22
|
+
import WtLoader from "../../../wt-loader/wt-loader.vue";
|
|
23
|
+
import MediaControlPanel from "../panels/media-control-panel/media-control-panel.vue";
|
|
24
|
+
import VideoDisplayPanel from "../panels/video-display-panel/video-display-panel.vue";
|
|
25
|
+
|
|
26
|
+
const { size } = inject('size');
|
|
27
|
+
|
|
28
|
+
const props = defineProps<{
|
|
29
|
+
title?: string;
|
|
30
|
+
username?: string;
|
|
31
|
+
closable?: boolean;
|
|
32
|
+
}>();
|
|
33
|
+
|
|
34
|
+
const emit = defineEmits<{
|
|
35
|
+
'close-player': [],
|
|
36
|
+
}>();
|
|
37
|
+
|
|
38
|
+
</script>
|
|
39
|
+
|
|
40
|
+
<style scoped lang="scss">
|
|
41
|
+
.video-layout {
|
|
42
|
+
|
|
43
|
+
.video-display-panel {
|
|
44
|
+
opacity: 1;
|
|
45
|
+
|
|
46
|
+
:deep(.video-display-panel__controls) { // hide panel buttons
|
|
47
|
+
opacity: 0;
|
|
48
|
+
transition: all var(--transition) ease-out;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
&--sm {
|
|
53
|
+
border-radius: var(--p-player-wrapper-sm-border-radius);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
&--md {
|
|
57
|
+
//border-radius: var(--p-player-wrapper-md-border-radius);
|
|
58
|
+
|
|
59
|
+
.media-control-panel {
|
|
60
|
+
margin: var(--p-player-control-bar-md-padding);
|
|
61
|
+
width: calc(100% - (var(--p-player-control-bar-md-padding) * 2));
|
|
62
|
+
border-radius: var(--p-player-control-bar-md-border-radius);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.controls {
|
|
69
|
+
display: flex;
|
|
70
|
+
flex-direction: column;
|
|
71
|
+
position: absolute;
|
|
72
|
+
justify-content: space-between;
|
|
73
|
+
inset: 0;
|
|
74
|
+
width: 100%;
|
|
75
|
+
height: 100%;
|
|
76
|
+
z-index: 10;
|
|
77
|
+
transition: all var(--transition) ease-out;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.controls-group {
|
|
81
|
+
display: flex;
|
|
82
|
+
align-items: center;
|
|
83
|
+
width: 100%;
|
|
84
|
+
opacity: 0;
|
|
85
|
+
transition: all var(--transition) ease-in-out;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
media-player[data-hocus] { // hover or focus within https://vidstack.io/docs/wc/player/components/core/player/?styling=css#player.attrs
|
|
89
|
+
.controls-group {
|
|
90
|
+
opacity: 1;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.video-display-panel {
|
|
94
|
+
background: var(--p-player-head-line-hover-background);
|
|
95
|
+
|
|
96
|
+
:deep(.video-display-panel__controls) { // show panel buttons on hover
|
|
97
|
+
opacity: 1;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.wt-loader {
|
|
103
|
+
display: flex;
|
|
104
|
+
align-items: center;
|
|
105
|
+
width: 100%;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
.video-layout:not([data-buffering]) .wt-loader {
|
|
109
|
+
display: none;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
</style>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<media-fullscreen-button
|
|
3
|
+
class="fullscreen-button"
|
|
4
|
+
@media-enter-fullscreen-request="emit('toggle', true)"
|
|
5
|
+
@media-exit-fullscreen-request="emit('toggle', false)"
|
|
6
|
+
>
|
|
7
|
+
<wt-icon-btn
|
|
8
|
+
icon="player-enter-fullscreen"
|
|
9
|
+
color="on-dark"
|
|
10
|
+
class="fullscreen-button__enter"
|
|
11
|
+
/>
|
|
12
|
+
<wt-icon-btn
|
|
13
|
+
icon="player-exit-fullscreen"
|
|
14
|
+
color="on-dark"
|
|
15
|
+
class="fullscreen-button__exit"
|
|
16
|
+
/>
|
|
17
|
+
</media-fullscreen-button>
|
|
18
|
+
</template>
|
|
19
|
+
|
|
20
|
+
<script setup lang="ts">
|
|
21
|
+
import {defineEmits} from "vue";
|
|
22
|
+
|
|
23
|
+
import WtIconBtn from '../../../../../../wt-icon-btn/wt-icon-btn.vue';
|
|
24
|
+
|
|
25
|
+
const emit = defineEmits<{
|
|
26
|
+
'toggle': [value: boolean];
|
|
27
|
+
}>();
|
|
28
|
+
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
<style scoped>
|
|
32
|
+
.fullscreen-button[data-active] .fullscreen-button__enter,
|
|
33
|
+
.fullscreen-button:not([data-active]) .fullscreen-button__exit {
|
|
34
|
+
display: none;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
</style>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<media-play-button class="play-button">
|
|
3
|
+
<wt-icon-btn icon="play" type="play" class="play-button__play-icon" />
|
|
4
|
+
<wt-icon-btn icon="pause" type="pause" class="play-button__pause-icon" />
|
|
5
|
+
</media-play-button>
|
|
6
|
+
</template>
|
|
7
|
+
|
|
8
|
+
<script setup lang="ts">
|
|
9
|
+
import WtIconBtn from "../../../../../../wt-icon-btn/wt-icon-btn.vue";
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<style scoped>
|
|
13
|
+
.play-button {
|
|
14
|
+
cursor: pointer;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.play-button[data-paused] .play-button__pause-icon,
|
|
18
|
+
.play-button:not([data-paused]) .play-button__play-icon {
|
|
19
|
+
display: none;
|
|
20
|
+
}
|
|
21
|
+
</style>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<media-time-slider class="time-slider media-slider">
|
|
3
|
+
<wt-slider class="time-slider__slider" />
|
|
4
|
+
</media-time-slider>
|
|
5
|
+
</template>
|
|
6
|
+
|
|
7
|
+
<script setup lang="ts">
|
|
8
|
+
import WtSlider from "../../../../../../wt-slider/wt-slider.vue";
|
|
9
|
+
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<style scoped lang="scss">
|
|
13
|
+
.time-slider {
|
|
14
|
+
display: inline-flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
width: 100%;
|
|
17
|
+
|
|
18
|
+
&__slider {
|
|
19
|
+
width: 100%;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
&:deep(.p-slider-range) { /* set vidstach slider variable to primeview component @author liza-pohrsnichna */
|
|
23
|
+
width: var(--slider-fill, 0%) !important;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
&:deep(.p-slider-handle) { /*set vidstach slider variable to primeview component @author liza-pohrsnichna */
|
|
27
|
+
inset-inline-start: var(--slider-fill, 0%) !important;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
</style>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="time-group">
|
|
3
|
+
<media-time type="current" />
|
|
4
|
+
/
|
|
5
|
+
<media-time type="duration" />
|
|
6
|
+
</div>
|
|
7
|
+
</template>
|
|
8
|
+
|
|
9
|
+
<style lang="scss" scoped>
|
|
10
|
+
@use '@webitel/styleguide/typography' as *;
|
|
11
|
+
|
|
12
|
+
.time-group {
|
|
13
|
+
@extend %typo-body-2;
|
|
14
|
+
display: flex;
|
|
15
|
+
align-items: center;
|
|
16
|
+
gap: var(--spacing-2xs);
|
|
17
|
+
color: var(--wt-player-video-control-bar-color);
|
|
18
|
+
}
|
|
19
|
+
</style>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<media-controls-group
|
|
3
|
+
class="media-control-panel controls-group"
|
|
4
|
+
:class="`media-control-panel--${size}`"
|
|
5
|
+
>
|
|
6
|
+
<play-button />
|
|
7
|
+
<time-slider />
|
|
8
|
+
<time-group />
|
|
9
|
+
</media-controls-group>
|
|
10
|
+
</template>
|
|
11
|
+
|
|
12
|
+
<script setup lang="ts">
|
|
13
|
+
import {inject} from "vue";
|
|
14
|
+
|
|
15
|
+
import PlayButton from "./components/buttons/play-button.vue";
|
|
16
|
+
import TimeSlider from "./components/sliders/time-slider.vue";
|
|
17
|
+
import TimeGroup from "./components/time-group.vue";
|
|
18
|
+
|
|
19
|
+
const { size } = inject('size');
|
|
20
|
+
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<style scoped lang="scss">
|
|
24
|
+
.media-control-panel {
|
|
25
|
+
padding: var(--p-player-control-bar-sm-padding);
|
|
26
|
+
background-color: var(--p-player-control-bar-background);
|
|
27
|
+
gap: var(--p-player-control-bar-sm-gap);
|
|
28
|
+
|
|
29
|
+
&--md {
|
|
30
|
+
padding: var(--p-player-control-bar-md-padding);
|
|
31
|
+
gap: var(--p-player-control-bar-md-gap);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
</style>
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<media-controls-group
|
|
3
|
+
class="video-display-panel controls-group"
|
|
4
|
+
:class="`video-display-panel--${size}`"
|
|
5
|
+
>
|
|
6
|
+
<div class="video-display-panel__title">
|
|
7
|
+
<wt-avatar
|
|
8
|
+
v-if="props.username"
|
|
9
|
+
:username="props.username"
|
|
10
|
+
/>
|
|
11
|
+
{{ props.title || props.username }}
|
|
12
|
+
</div>
|
|
13
|
+
<div class="video-display-panel__controls">
|
|
14
|
+
<toggle-button
|
|
15
|
+
v-if="size !== ComponentSize.LG"
|
|
16
|
+
primary-icon="collapse"
|
|
17
|
+
secondary-icon="expand"
|
|
18
|
+
color="on-dark"
|
|
19
|
+
@toggle="handlePlayerSize"
|
|
20
|
+
/>
|
|
21
|
+
<fullscreen-button
|
|
22
|
+
@toggle="handleFullscreen"
|
|
23
|
+
/>
|
|
24
|
+
<wt-icon-btn
|
|
25
|
+
v-if="props.closable"
|
|
26
|
+
icon="close"
|
|
27
|
+
color="on-dark"
|
|
28
|
+
@click="emit('close')"
|
|
29
|
+
/>
|
|
30
|
+
</div>
|
|
31
|
+
</media-controls-group>
|
|
32
|
+
</template>
|
|
33
|
+
|
|
34
|
+
<script setup lang="ts">
|
|
35
|
+
import { defineEmits, defineProps, inject } from 'vue';
|
|
36
|
+
|
|
37
|
+
import {ComponentSize} from "../../../../../enums";
|
|
38
|
+
import WtAvatar from "../../../../wt-avatar/wt-avatar.vue";
|
|
39
|
+
import WtIconBtn from "../../../../wt-icon-btn/wt-icon-btn.vue";
|
|
40
|
+
import ToggleButton from "../../toggle-button.vue";
|
|
41
|
+
import FullscreenButton from "../media-control-panel/components/buttons/fullscreen-button.vue";
|
|
42
|
+
|
|
43
|
+
const { size, changeSize } = inject('size');
|
|
44
|
+
|
|
45
|
+
const props = defineProps<{
|
|
46
|
+
title?: string;
|
|
47
|
+
username?: string;
|
|
48
|
+
closable?: boolean;
|
|
49
|
+
}>();
|
|
50
|
+
|
|
51
|
+
const emit = defineEmits<{
|
|
52
|
+
'close': [],
|
|
53
|
+
}>();
|
|
54
|
+
|
|
55
|
+
const handleFullscreen = (value: boolean) => {
|
|
56
|
+
changeSize(value ? ComponentSize.LG : ComponentSize.SM);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const handlePlayerSize = (value: boolean) => {
|
|
60
|
+
changeSize(value ? ComponentSize.MD : ComponentSize.SM);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
</script>
|
|
64
|
+
|
|
65
|
+
<style lang="scss" scoped>
|
|
66
|
+
@use '@webitel/styleguide/typography' as *;
|
|
67
|
+
|
|
68
|
+
.video-display-panel {
|
|
69
|
+
display: flex;
|
|
70
|
+
justify-content: space-between;
|
|
71
|
+
padding: var(--p-player-headline-sm-padding);
|
|
72
|
+
background: var(--p-player-head-line-background);
|
|
73
|
+
color: var(--p-player-head-line-color);
|
|
74
|
+
transition: all var(--transition) ease-in-out;
|
|
75
|
+
|
|
76
|
+
&__title {
|
|
77
|
+
@extend %typo-body-1-bold;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
&__controls {
|
|
81
|
+
display: flex;
|
|
82
|
+
align-items: center;
|
|
83
|
+
gap: var(--p-player-headline-sm-gap);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
&--md {
|
|
87
|
+
padding: var(--p-player-headline-md-padding);
|
|
88
|
+
|
|
89
|
+
.video-display-panel__controls {
|
|
90
|
+
gap: var(--p-player-headline-md-gap);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
</style>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<media-toggle-button
|
|
3
|
+
ref="toggleButton"
|
|
4
|
+
class="toggle-button"
|
|
5
|
+
:disabled="props.disabled"
|
|
6
|
+
@click="setToggleState"
|
|
7
|
+
>
|
|
8
|
+
<wt-icon-btn
|
|
9
|
+
:icon="props.primaryIcon"
|
|
10
|
+
:color="props.color"
|
|
11
|
+
:disabled="props.disabled"
|
|
12
|
+
class="toggle-button__primary"
|
|
13
|
+
/>
|
|
14
|
+
<wt-icon-btn
|
|
15
|
+
:icon="props.secondaryIcon"
|
|
16
|
+
:color="props.color"
|
|
17
|
+
:disabled="props.disabled"
|
|
18
|
+
class="toggle-button__secondary"
|
|
19
|
+
/>
|
|
20
|
+
</media-toggle-button>
|
|
21
|
+
</template>
|
|
22
|
+
|
|
23
|
+
<script setup lang="ts">
|
|
24
|
+
import {defineEmits, defineProps, Ref, useTemplateRef} from 'vue';
|
|
25
|
+
|
|
26
|
+
import WtIconBtn from "../../wt-icon-btn/wt-icon-btn.vue";
|
|
27
|
+
|
|
28
|
+
const props = defineProps<{
|
|
29
|
+
primaryIcon: string;
|
|
30
|
+
secondaryIcon: string;
|
|
31
|
+
color?: string;
|
|
32
|
+
disabled?: boolean;
|
|
33
|
+
}>();
|
|
34
|
+
|
|
35
|
+
const toggleButton = useTemplateRef('toggleButton') as Ref<HTMLElement>;
|
|
36
|
+
|
|
37
|
+
const emit = defineEmits<{
|
|
38
|
+
'toggle': [value: boolean];
|
|
39
|
+
}>();
|
|
40
|
+
|
|
41
|
+
const setToggleState = () => {
|
|
42
|
+
if (props.disabled) return;
|
|
43
|
+
emit('toggle', toggleButton.value.pressed);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
</script>
|
|
47
|
+
|
|
48
|
+
<style lang="scss" scoped>
|
|
49
|
+
|
|
50
|
+
.toggle-button[data-pressed] .toggle-button__primary,
|
|
51
|
+
.toggle-button:not([data-pressed]) .toggle-button__secondary {
|
|
52
|
+
display: none;
|
|
53
|
+
}
|
|
54
|
+
</style>
|