@webitel/ui-sdk 26.4.86 → 26.4.88
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/{contacts-DaoMrXCH.js → contacts-CWWcfiCE.js} +2 -2
- package/dist/{index-Bskc5dAz.js → index-DoEanJ-O.js} +1 -1
- package/dist/{index-T8OHzT-M.js → index-O9e1CFXo.js} +1 -1
- package/dist/{install-DRmtBDPZ.js → install-Cbk4uI4d.js} +3785 -3755
- package/dist/{isObject-Ded7XstI.js → isObject-BpFBfdDM.js} +1 -1
- package/dist/ui-sdk.css +1 -1
- package/dist/ui-sdk.js +1 -1
- package/dist/ui-sdk.umd.cjs +490 -465
- package/dist/{useVidstackSrc-wxHifGCo.js → useVidstackSrc-BbDbGbdc.js} +1 -1
- package/dist/{vidstack-Bq6c3Bam-CAA9SbBT.js → vidstack-Bq6c3Bam-Bcd_Dqxm.js} +3 -3
- package/dist/{vidstack-D2pY00kU-BSATxysV.js → vidstack-D2pY00kU-DvjLYlfP.js} +3 -3
- package/dist/{vidstack-DDXt6fpN-D7sjYTht.js → vidstack-DDXt6fpN-Kvp8-Z71.js} +2 -2
- package/dist/{vidstack-D_-9AA6_-Bt9c3nq9.js → vidstack-D_-9AA6_-BDnms3zl.js} +2 -2
- package/dist/{vidstack-DqAw8m9J-I-N7rkjc.js → vidstack-DqAw8m9J-B-b1Zn2U.js} +1 -1
- package/dist/{vidstack-audio-tpKaCI-R.js → vidstack-audio-C07mh5HA.js} +2 -2
- package/dist/{vidstack-dash-R8I4VAOs.js → vidstack-dash-BTtUaGXq.js} +4 -4
- package/dist/{vidstack-google-cast-BcqPHeDY.js → vidstack-google-cast-C8HRnkji.js} +4 -4
- package/dist/{vidstack-hls-C_XtAf2h.js → vidstack-hls-BE2LBeBA.js} +4 -4
- package/dist/{vidstack-video-JJIOEHce.js → vidstack-video-DAamzQJo.js} +3 -3
- package/dist/{vidstack-vimeo-5c2uttJk.js → vidstack-vimeo-CwFB8n3j.js} +4 -4
- package/dist/{vidstack-youtube-B-AELVQR.js → vidstack-youtube-LnU8iAWB.js} +3 -3
- package/dist/{wt-action-bar-BNmBgARo.js → wt-action-bar-CAUwQ-CN.js} +1 -1
- package/dist/{wt-button-select-C2CjXkpL.js → wt-button-select-NmqrUMmT.js} +1 -1
- package/dist/{wt-call-media-action-CjG_tL-k.js → wt-call-media-action-C2biFUCi.js} +1 -1
- package/dist/{wt-chat-emoji-T-xI5PI0.js → wt-chat-emoji-G7W4o8aF.js} +2 -2
- package/dist/{wt-confirm-dialog-B_zetCWp.js → wt-confirm-dialog-BaIdNkOk.js} +1 -1
- package/dist/{wt-context-menu-ky-uMZ1-.js → wt-context-menu-BO0HssSf.js} +1 -1
- package/dist/{wt-copy-action-C8vNcw8q.js → wt-copy-action-c8uhf4eo.js} +1 -1
- package/dist/{wt-datepicker-BHOEBeW0.js → wt-datepicker-FLxT3c5r.js} +1 -1
- package/dist/{wt-display-chip-items-Cra60yCN.js → wt-display-chip-items-BpQweJWj.js} +1 -1
- package/dist/{wt-dual-panel-prIHoroh.js → wt-dual-panel-ORsyw0wt.js} +1 -1
- package/dist/{wt-dummy-f6SNJubN.js → wt-dummy-ClQKPnOX.js} +1 -1
- package/dist/{wt-error-page-Cen2rI3S.js → wt-error-page-CP3Eb2Ze.js} +1 -1
- package/dist/{wt-expansion-card-CBfq9SeM.js → wt-expansion-card-DUcAJzLW.js} +1 -1
- package/dist/{wt-expansion-panel-mSkCV-Bf.js → wt-expansion-panel-RGcKbweA.js} +1 -1
- package/dist/{wt-filters-panel-wrapper-DoTuK-7E.js → wt-filters-panel-wrapper-t20QKufp.js} +1 -1
- package/dist/{wt-galleria-SUAuJaJi.js → wt-galleria-DSR7VvEr.js} +1 -1
- package/dist/{wt-inline-add-panel-DVx2SBXY.js → wt-inline-add-panel-DSJTghWj.js} +1 -1
- package/dist/{wt-navigation-menu-CC_nClkF.js → wt-navigation-menu-DGT2Id2u.js} +1 -1
- package/dist/{wt-notifications-bar-yvx84URU.js → wt-notifications-bar-CYZ0EdvC.js} +2 -2
- package/dist/{wt-pagination-BNBAaYSc.js → wt-pagination-DZW-f2jt.js} +1 -1
- package/dist/wt-player-Bf5oXO4f.js +267 -0
- package/dist/wt-popover-BIpMrvmo.js +4 -0
- package/dist/{wt-popover-U7JE0uoX.js → wt-popover.vue_vue_type_style_index_0_lang-BxD5Zt_u.js} +1 -1
- package/dist/{wt-screen-recordings-action-CWxUqvy8.js → wt-screen-recordings-action-BJ1QZRpU.js} +1 -1
- package/dist/{wt-search-bar-CyGDHAHW.js → wt-search-bar-Bb_YHcUP.js} +1 -1
- package/dist/{wt-selection-popup-Bnunc1zw.js → wt-selection-popup-DXZdiQDh.js} +1 -1
- package/dist/{wt-send-message-popup-DUi2a0oC.js → wt-send-message-popup-DvNl_0Jx.js} +3 -3
- package/dist/{wt-start-page-Dc7SJ046.js → wt-start-page-FiEKb7n5.js} +8 -8
- package/dist/{wt-status-select-FdVixKcb.js → wt-status-select-B_fDSp8a.js} +1 -1
- package/dist/{wt-stepper-DfkBGYPA.js → wt-stepper-Dbq_S7k5.js} +1 -1
- package/dist/{wt-table-actions-7O5nvYa6.js → wt-table-actions-wxzzEC0B.js} +1 -1
- package/dist/{wt-table-column-select-Bx6xnTPb.js → wt-table-column-select-CrNmO1uD.js} +2 -2
- package/dist/{wt-table-BeHUeZQz.js → wt-table-gQ9RbWpz.js} +10 -10
- package/dist/{wt-tabs-DvjqNhtm.js → wt-tabs--A679Va_.js} +1 -1
- package/dist/{wt-tags-input-J1MeEqwd.js → wt-tags-input-BrwgY8Kt.js} +4 -4
- package/dist/{wt-timepicker-DO4l9JZy.js → wt-timepicker-DH7UCuNW.js} +1 -1
- package/dist/{wt-tree-CRqxdWqd.js → wt-tree-DS96366z.js} +2 -2
- package/dist/{wt-tree-table-BGTRl-0w.js → wt-tree-table-COuGP-Hf.js} +16 -16
- package/dist/{wt-type-extension-value-input-BylVxdpz.js → wt-type-extension-value-input-CoC9qSmV.js} +3 -3
- package/dist/{wt-vidstack-player-6rScqMhF.js → wt-vidstack-player-CguVTRe8.js} +10 -10
- package/package.json +1 -1
- package/src/assets/icons/sprite/index.ts +10 -0
- package/src/assets/icons/sprite/playback-0.50.svg +5 -0
- package/src/assets/icons/sprite/playback-0.75.svg +6 -0
- package/src/assets/icons/sprite/playback-1.00.svg +3 -0
- package/src/assets/icons/sprite/playback-1.50.svg +5 -0
- package/src/assets/icons/sprite/playback-1.75.svg +6 -0
- package/src/components/_shared/settings-panel/settings-panel.vue +71 -0
- package/src/components/wt-button/wt-button.vue +4 -4
- package/src/components/wt-player/src/components/buttons/play-button.vue +1 -1
- package/src/components/wt-player/src/components/speed-settings/speed-settings.vue +163 -0
- package/src/components/wt-player/wt-player.vue +48 -5
- package/src/components/wt-popover/wt-popover.vue +6 -0
- package/src/locale/es/es.js +9 -9
- package/src/locale/kz/kz.js +9 -9
- package/src/locale/pl/pl.js +9 -9
- package/src/locale/ro/ro.js +9 -9
- package/src/locale/ru/ru.js +9 -9
- package/src/locale/uk/uk.js +9 -9
- package/src/locale/uz/uz.js +9 -9
- package/src/locale/vi/vi.js +9 -9
- package/types/components/_shared/settings-panel/settings-panel.vue.d.ts +15 -0
- package/types/components/wt-player/src/components/speed-settings/speed-settings.vue.d.ts +12 -0
- package/types/components/wt-player/wt-player.vue.d.ts +7 -0
- package/types/locale/es/es.d.ts +9 -9
- package/types/locale/i18n.d.ts +72 -72
- package/types/locale/index.d.ts +72 -72
- package/types/locale/kz/kz.d.ts +9 -9
- package/types/locale/pl/pl.d.ts +9 -9
- package/types/locale/ro/ro.d.ts +9 -9
- package/types/locale/ru/ru.d.ts +9 -9
- package/types/locale/uk/uk.d.ts +9 -9
- package/types/locale/uz/uz.d.ts +9 -9
- package/types/locale/vi/vi.d.ts +9 -9
- package/dist/wt-player-BSqOMJ4Q.js +0 -132
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<wt-popover class="settings-panel">
|
|
3
|
+
<template #activator="{ toggle }">
|
|
4
|
+
<media-button class="settings-panel__button" @click="toggle">
|
|
5
|
+
<wt-icon-btn
|
|
6
|
+
icon="plyr-settings"
|
|
7
|
+
:size="ComponentSize.SM"
|
|
8
|
+
/>
|
|
9
|
+
</media-button>
|
|
10
|
+
</template>
|
|
11
|
+
|
|
12
|
+
<speed-settings
|
|
13
|
+
:model-value="modelValue.playbackRate"
|
|
14
|
+
@update:model-value="handlePlaybackRateUpdate"
|
|
15
|
+
/>
|
|
16
|
+
</wt-popover>
|
|
17
|
+
</template>
|
|
18
|
+
|
|
19
|
+
<script setup lang="ts">
|
|
20
|
+
import { ComponentSize } from '../../../enums';
|
|
21
|
+
import WtPopover from '../../wt-popover/wt-popover.vue';
|
|
22
|
+
import SpeedSettings from './components/speed-settings/speed-settings.vue';
|
|
23
|
+
|
|
24
|
+
export interface MediaSettings {
|
|
25
|
+
playbackRate: number;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface Props {
|
|
29
|
+
modelValue: MediaSettings;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
33
|
+
modelValue: () => ({
|
|
34
|
+
playbackRate: 1,
|
|
35
|
+
}),
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
const emit = defineEmits<{
|
|
39
|
+
'update:modelValue': [
|
|
40
|
+
value: MediaSettings,
|
|
41
|
+
];
|
|
42
|
+
}>();
|
|
43
|
+
|
|
44
|
+
function handlePlaybackRateUpdate(playbackRate: number) {
|
|
45
|
+
emit('update:modelValue', {
|
|
46
|
+
...props.modelValue,
|
|
47
|
+
playbackRate,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
</script>
|
|
51
|
+
|
|
52
|
+
<style scoped>
|
|
53
|
+
.settings-panel {
|
|
54
|
+
display: flex;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/*
|
|
58
|
+
* @author @Oleksandr Palonnyi
|
|
59
|
+
*
|
|
60
|
+
* [WTEL-9163](https://webitel.atlassian.net/browse/WTEL-9163)
|
|
61
|
+
*
|
|
62
|
+
* comment link - https://webitel.atlassian.net/browse/WTEL-9163?focusedCommentId=759364
|
|
63
|
+
*/
|
|
64
|
+
.settings-panel__button {
|
|
65
|
+
display: flex;
|
|
66
|
+
align-items: center;
|
|
67
|
+
cursor: pointer;
|
|
68
|
+
margin: 0 calc(var(--spacing-2xs) * -1);
|
|
69
|
+
padding: 0 var(--spacing-2xs);
|
|
70
|
+
}
|
|
71
|
+
</style>
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
|
|
43
43
|
<wt-icon
|
|
44
44
|
v-if="icon"
|
|
45
|
-
:class="{ 'wt-button__icon--hidden': showLoader }"
|
|
45
|
+
:class="{ 'wt-button__icon--hidden': showLoader }"
|
|
46
46
|
:icon="icon"
|
|
47
47
|
:icon-prefix="iconPrefix"
|
|
48
48
|
:size="iconButtonSizeMap[size]"
|
|
@@ -166,7 +166,7 @@ watch(
|
|
|
166
166
|
|
|
167
167
|
<style>
|
|
168
168
|
.wt-button {
|
|
169
|
-
|
|
169
|
+
position: relative;
|
|
170
170
|
}
|
|
171
171
|
|
|
172
172
|
.p-button--with-badge {
|
|
@@ -177,9 +177,9 @@ watch(
|
|
|
177
177
|
display: contents;
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
/*
|
|
180
|
+
/*
|
|
181
181
|
@author HlukhovYe
|
|
182
|
-
Hides the icon instantly when the loader is shown.
|
|
182
|
+
Hides the icon instantly when the loader is shown.
|
|
183
183
|
*/
|
|
184
184
|
.wt-button__icon--hidden {
|
|
185
185
|
opacity: 0;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<media-play-button class="play-button">
|
|
3
|
-
<wt-icon icon="plyr-play" type="play" class="play-icon" size="sm"/>
|
|
3
|
+
<wt-icon icon="plyr-play" type="play" class="play-icon" size="sm" />
|
|
4
4
|
<wt-icon icon="plyr-pause" type="pause" class="pause-icon" size="sm" />
|
|
5
5
|
</media-play-button>
|
|
6
6
|
</template>
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="speed-settings">
|
|
3
|
+
<div class="speed-settings__controls">
|
|
4
|
+
<wt-button
|
|
5
|
+
:size="ComponentSize.SM"
|
|
6
|
+
:disabled="modelValue <= minSpeed"
|
|
7
|
+
class="speed-settings__step-button"
|
|
8
|
+
variant="outlined"
|
|
9
|
+
color="secondary"
|
|
10
|
+
@click="handleDecrease"
|
|
11
|
+
>
|
|
12
|
+
<template #default>
|
|
13
|
+
<wt-icon icon="minus" :size="ComponentSize.SM" />
|
|
14
|
+
</template>
|
|
15
|
+
</wt-button>
|
|
16
|
+
|
|
17
|
+
<span class="speed-settings__label">{{ formattedSpeed }}</span>
|
|
18
|
+
|
|
19
|
+
<wt-button
|
|
20
|
+
:size="ComponentSize.SM"
|
|
21
|
+
:disabled="modelValue >= maxSpeed"
|
|
22
|
+
class="speed-settings__step-button"
|
|
23
|
+
variant="outlined"
|
|
24
|
+
color="secondary"
|
|
25
|
+
@click="handleIncrease"
|
|
26
|
+
>
|
|
27
|
+
<template #default>
|
|
28
|
+
<wt-icon icon="plus" :size="ComponentSize.SM" />
|
|
29
|
+
</template>
|
|
30
|
+
</wt-button>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<wt-slider
|
|
34
|
+
class="speed-settings__slider"
|
|
35
|
+
:model-value="modelValue"
|
|
36
|
+
:min="minSpeed"
|
|
37
|
+
:max="maxSpeed"
|
|
38
|
+
:step="speedStep"
|
|
39
|
+
@update:model-value="$emit('update:modelValue', $event)"
|
|
40
|
+
/>
|
|
41
|
+
|
|
42
|
+
<div class="speed-settings__presets">
|
|
43
|
+
<wt-button
|
|
44
|
+
v-for="speedPreset in speedPresets"
|
|
45
|
+
:key="speedPreset.speed"
|
|
46
|
+
:size="ComponentSize.SM"
|
|
47
|
+
variant="outlined"
|
|
48
|
+
class="speed-settings__preset-button"
|
|
49
|
+
color="secondary"
|
|
50
|
+
@click="$emit('update:modelValue', speedPreset.speed)"
|
|
51
|
+
>
|
|
52
|
+
<template #default>
|
|
53
|
+
<wt-icon :icon="speedPreset.icon" :size="ComponentSize.SM" />
|
|
54
|
+
</template>
|
|
55
|
+
</wt-button>
|
|
56
|
+
</div>
|
|
57
|
+
</div>
|
|
58
|
+
</template>
|
|
59
|
+
|
|
60
|
+
<script setup lang="ts">
|
|
61
|
+
import { computed } from 'vue';
|
|
62
|
+
|
|
63
|
+
import { ComponentSize } from '../../../../../enums';
|
|
64
|
+
import WtButton from '../../../../wt-button/wt-button.vue';
|
|
65
|
+
import WtIcon from '../../../../wt-icon/wt-icon.vue';
|
|
66
|
+
import WtSlider from '../../../../wt-slider/wt-slider.vue';
|
|
67
|
+
|
|
68
|
+
interface Props {
|
|
69
|
+
modelValue?: number;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
73
|
+
modelValue: 1,
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
const emit = defineEmits<{
|
|
77
|
+
'update:modelValue': [
|
|
78
|
+
value: number,
|
|
79
|
+
];
|
|
80
|
+
}>();
|
|
81
|
+
|
|
82
|
+
const minSpeed = 0.25;
|
|
83
|
+
const maxSpeed = 3;
|
|
84
|
+
const speedStep = 0.25;
|
|
85
|
+
const speedPresets = [
|
|
86
|
+
{
|
|
87
|
+
speed: 0.5,
|
|
88
|
+
icon: 'playback-0.50',
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
speed: 0.75,
|
|
92
|
+
icon: 'playback-0.75',
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
speed: 1,
|
|
96
|
+
icon: 'playback-1.00',
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
speed: 1.5,
|
|
100
|
+
icon: 'playback-1.50',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
speed: 1.75,
|
|
104
|
+
icon: 'playback-1.75',
|
|
105
|
+
},
|
|
106
|
+
];
|
|
107
|
+
|
|
108
|
+
const formattedSpeed = computed(() => `${props.modelValue.toFixed(2)}x`);
|
|
109
|
+
|
|
110
|
+
function handleDecrease() {
|
|
111
|
+
const decreasedSpeed = parseFloat((props.modelValue - speedStep).toFixed(2));
|
|
112
|
+
const clampedSpeed = Math.max(minSpeed, decreasedSpeed);
|
|
113
|
+
emit('update:modelValue', clampedSpeed);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function handleIncrease() {
|
|
117
|
+
const increasedSpeed = parseFloat((props.modelValue + speedStep).toFixed(2));
|
|
118
|
+
const clampedSpeed = Math.min(maxSpeed, increasedSpeed);
|
|
119
|
+
emit('update:modelValue', clampedSpeed);
|
|
120
|
+
}
|
|
121
|
+
</script>
|
|
122
|
+
|
|
123
|
+
<style scoped>
|
|
124
|
+
.speed-settings {
|
|
125
|
+
display: flex;
|
|
126
|
+
flex-direction: column;
|
|
127
|
+
gap: var(--spacing-sm);
|
|
128
|
+
min-width: 192px;
|
|
129
|
+
}
|
|
130
|
+
.speed-settings__step-button {
|
|
131
|
+
min-width: 0;
|
|
132
|
+
padding: var(--spacing-xs);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.speed-settings__controls {
|
|
136
|
+
display: flex;
|
|
137
|
+
align-items: center;
|
|
138
|
+
justify-content: space-between;
|
|
139
|
+
gap: var(--spacing-sm);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.speed-settings__label {
|
|
143
|
+
font-weight: 600;
|
|
144
|
+
font-size: var(--font-size-lg, 1rem);
|
|
145
|
+
text-align: center;
|
|
146
|
+
flex: 1;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.speed-settings__slider {
|
|
150
|
+
width: 100%;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.speed-settings__presets {
|
|
154
|
+
display: flex;
|
|
155
|
+
justify-content: space-between;
|
|
156
|
+
gap: var(--spacing-xs);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.speed-settings__preset-button {
|
|
160
|
+
min-width: 0;
|
|
161
|
+
padding: var(--spacing-xs);
|
|
162
|
+
}
|
|
163
|
+
</style>
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
:src="normalizedSrcObject"
|
|
6
6
|
:loop="props.loop"
|
|
7
7
|
:autoplay="autoplay"
|
|
8
|
+
:playback-rate="playbackRate"
|
|
8
9
|
@ended="handleEnded"
|
|
9
10
|
>
|
|
10
11
|
|
|
@@ -18,6 +19,21 @@
|
|
|
18
19
|
<mute-button v-if="!props.hideMuteButton" />
|
|
19
20
|
<volume-slider v-if="!props.hideVolumeSlider" />
|
|
20
21
|
|
|
22
|
+
<wt-popover v-if="!props.hideSettings" class="settings-popover">
|
|
23
|
+
<template #activator="{ toggle }">
|
|
24
|
+
<media-button class="settings-button" @click="toggle">
|
|
25
|
+
<wt-icon-btn
|
|
26
|
+
icon="plyr-settings"
|
|
27
|
+
:size="ComponentSize.SM"
|
|
28
|
+
/>
|
|
29
|
+
</media-button>
|
|
30
|
+
</template>
|
|
31
|
+
|
|
32
|
+
<speed-settings
|
|
33
|
+
v-model:model-value="playbackRate"
|
|
34
|
+
/>
|
|
35
|
+
</wt-popover>
|
|
36
|
+
|
|
21
37
|
<media-button
|
|
22
38
|
v-if="props.download"
|
|
23
39
|
class="download-button"
|
|
@@ -25,7 +41,7 @@
|
|
|
25
41
|
>
|
|
26
42
|
<wt-icon-btn
|
|
27
43
|
icon="plyr-download"
|
|
28
|
-
size="
|
|
44
|
+
:size="ComponentSize.SM"
|
|
29
45
|
/>
|
|
30
46
|
</media-button>
|
|
31
47
|
|
|
@@ -36,7 +52,7 @@
|
|
|
36
52
|
>
|
|
37
53
|
<wt-icon-btn
|
|
38
54
|
icon="close"
|
|
39
|
-
size="
|
|
55
|
+
:size="ComponentSize.SM"
|
|
40
56
|
/>
|
|
41
57
|
</media-button>
|
|
42
58
|
|
|
@@ -50,14 +66,16 @@
|
|
|
50
66
|
>
|
|
51
67
|
import 'vidstack/bundle';
|
|
52
68
|
import type { MediaSrc } from 'vidstack';
|
|
53
|
-
import {
|
|
54
|
-
|
|
69
|
+
import { ref, toRefs, watch } from 'vue';
|
|
70
|
+
import { ComponentSize } from '../../enums';
|
|
71
|
+
import WtPopover from '../wt-popover/wt-popover.vue';
|
|
55
72
|
import TimeGroup from '../wt-vidstack-player/components/panels/playback-controls-panel/components/time-group.vue';
|
|
56
73
|
import { useVidstackSrc } from '../wt-vidstack-player/composables/useVidstackSrc';
|
|
57
74
|
import MuteButton from './src/components/buttons/mute-button.vue';
|
|
58
75
|
import PlayButton from './src/components/buttons/play-button.vue';
|
|
59
76
|
import TimeSlider from './src/components/sliders/time-slider.vue';
|
|
60
77
|
import VolumeSlider from './src/components/sliders/volume-slider.vue';
|
|
78
|
+
import SpeedSettings from './src/components/speed-settings/speed-settings.vue';
|
|
61
79
|
|
|
62
80
|
interface Props {
|
|
63
81
|
/**
|
|
@@ -117,6 +135,12 @@ interface Props {
|
|
|
117
135
|
* @default false
|
|
118
136
|
*/
|
|
119
137
|
hideMuteButton?: boolean;
|
|
138
|
+
/**
|
|
139
|
+
* Hide settings button
|
|
140
|
+
* @type {boolean}
|
|
141
|
+
* @default false
|
|
142
|
+
*/
|
|
143
|
+
hideSettings?: boolean;
|
|
120
144
|
/**
|
|
121
145
|
* Shows close button
|
|
122
146
|
* @type {boolean}
|
|
@@ -141,6 +165,7 @@ const props = withDefaults(defineProps<Props>(), {
|
|
|
141
165
|
invertTime: true,
|
|
142
166
|
hideVolumeSlider: false,
|
|
143
167
|
hideMuteButton: false,
|
|
168
|
+
hideSettings: false,
|
|
144
169
|
resetVolume: false,
|
|
145
170
|
closable: true,
|
|
146
171
|
position: 'sticky',
|
|
@@ -151,6 +176,8 @@ const emit = defineEmits<{
|
|
|
151
176
|
close: [];
|
|
152
177
|
}>();
|
|
153
178
|
|
|
179
|
+
const playbackRate = ref(1);
|
|
180
|
+
|
|
154
181
|
const { src: srcRef } = toRefs(props);
|
|
155
182
|
|
|
156
183
|
const { normalizedSrcObject } = useVidstackSrc({
|
|
@@ -183,6 +210,17 @@ function handleEnded(event: Event) {
|
|
|
183
210
|
const player = event.target as HTMLMediaElement;
|
|
184
211
|
player.currentTime = 0;
|
|
185
212
|
}
|
|
213
|
+
|
|
214
|
+
function resetPlayerSettings() {
|
|
215
|
+
playerSettings.value.playbackRate = 1;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
watch(
|
|
219
|
+
() => props.src,
|
|
220
|
+
() => {
|
|
221
|
+
resetPlayerSettings();
|
|
222
|
+
},
|
|
223
|
+
);
|
|
186
224
|
</script>
|
|
187
225
|
|
|
188
226
|
<style scoped>
|
|
@@ -204,8 +242,13 @@ function handleEnded(event: Event) {
|
|
|
204
242
|
gap: var(--spacing-sm);
|
|
205
243
|
}
|
|
206
244
|
|
|
245
|
+
.settings-popover {
|
|
246
|
+
display: flex;
|
|
247
|
+
}
|
|
248
|
+
|
|
207
249
|
.close-button,
|
|
208
|
-
.download-button
|
|
250
|
+
.download-button,
|
|
251
|
+
.settings-button {
|
|
209
252
|
display: flex;
|
|
210
253
|
align-items: center;
|
|
211
254
|
cursor: pointer;
|
package/src/locale/es/es.js
CHANGED
|
@@ -255,15 +255,15 @@ export default {
|
|
|
255
255
|
[WebitelMediaExporterExportStatus.Failed]: 'Error',
|
|
256
256
|
},
|
|
257
257
|
},
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
258
|
+
importCSV: 'Importar CSV',
|
|
259
|
+
CSV: {
|
|
260
|
+
skipHeaders: 'Omitir encabezados',
|
|
261
|
+
charSet: 'Conjunto de caracteres',
|
|
262
|
+
separator: 'Separador',
|
|
263
|
+
CSVColumn: 'Columna CSV',
|
|
264
|
+
fieldName: 'Nombre del campo',
|
|
265
|
+
clearMember: 'Eliminar miembro',
|
|
266
|
+
},
|
|
267
267
|
},
|
|
268
268
|
channel: {
|
|
269
269
|
state: {
|
package/src/locale/kz/kz.js
CHANGED
|
@@ -260,15 +260,15 @@ export default {
|
|
|
260
260
|
[WebitelMediaExporterExportStatus.Failed]: 'Қате',
|
|
261
261
|
},
|
|
262
262
|
},
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
263
|
+
importCSV: 'CSV импорттау',
|
|
264
|
+
CSV: {
|
|
265
|
+
skipHeaders: 'Тақырыптарды өткізіп жіберу',
|
|
266
|
+
charSet: 'Таңбалар жиыны',
|
|
267
|
+
separator: 'Бөлгіш',
|
|
268
|
+
CSVColumn: 'CSV бағаны',
|
|
269
|
+
fieldName: 'Өріс атауы',
|
|
270
|
+
clearMember: 'Мүшені тазалау',
|
|
271
|
+
},
|
|
272
272
|
},
|
|
273
273
|
channel: {
|
|
274
274
|
state: {
|
package/src/locale/pl/pl.js
CHANGED
|
@@ -260,15 +260,15 @@ export default {
|
|
|
260
260
|
[WebitelMediaExporterExportStatus.Failed]: 'Błąd',
|
|
261
261
|
},
|
|
262
262
|
},
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
263
|
+
importCSV: 'Importuj CSV',
|
|
264
|
+
CSV: {
|
|
265
|
+
skipHeaders: 'Pomiń nagłówki',
|
|
266
|
+
charSet: 'Zestaw znaków',
|
|
267
|
+
separator: 'Separator',
|
|
268
|
+
CSVColumn: 'Kolumna CSV',
|
|
269
|
+
fieldName: 'Nazwa pola',
|
|
270
|
+
clearMember: 'Wyczyść członka',
|
|
271
|
+
},
|
|
272
272
|
},
|
|
273
273
|
channel: {
|
|
274
274
|
state: {
|
package/src/locale/ro/ro.js
CHANGED
|
@@ -260,15 +260,15 @@ export default {
|
|
|
260
260
|
[WebitelMediaExporterExportStatus.Failed]: 'Eroare',
|
|
261
261
|
},
|
|
262
262
|
},
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
263
|
+
importCSV: 'Importă CSV',
|
|
264
|
+
CSV: {
|
|
265
|
+
skipHeaders: 'Omite anteturile',
|
|
266
|
+
charSet: 'Set de caractere',
|
|
267
|
+
separator: 'Separator',
|
|
268
|
+
CSVColumn: 'Coloană CSV',
|
|
269
|
+
fieldName: 'Nume câmp',
|
|
270
|
+
clearMember: 'Șterge membrul',
|
|
271
|
+
},
|
|
272
272
|
},
|
|
273
273
|
channel: {
|
|
274
274
|
state: {
|
package/src/locale/ru/ru.js
CHANGED
|
@@ -256,15 +256,15 @@ export default {
|
|
|
256
256
|
[WebitelMediaExporterExportStatus.Failed]: 'Ошибка',
|
|
257
257
|
},
|
|
258
258
|
},
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
259
|
+
importCSV: 'Импорт CSV',
|
|
260
|
+
CSV: {
|
|
261
|
+
skipHeaders: 'Пропустить заголовки',
|
|
262
|
+
charSet: 'Кодировка',
|
|
263
|
+
separator: 'Разделитель',
|
|
264
|
+
CSVColumn: 'Столбец CSV',
|
|
265
|
+
fieldName: 'Имя поля',
|
|
266
|
+
clearMember: 'Очистить участника',
|
|
267
|
+
},
|
|
268
268
|
},
|
|
269
269
|
channel: {
|
|
270
270
|
state: {
|
package/src/locale/uk/uk.js
CHANGED
|
@@ -255,15 +255,15 @@ export default {
|
|
|
255
255
|
[WebitelMediaExporterExportStatus.Failed]: 'Помилка',
|
|
256
256
|
},
|
|
257
257
|
},
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
258
|
+
importCSV: 'Імпорт CSV',
|
|
259
|
+
CSV: {
|
|
260
|
+
skipHeaders: 'Пропустити заголовки',
|
|
261
|
+
charSet: 'Кодування',
|
|
262
|
+
separator: 'Розділювач',
|
|
263
|
+
CSVColumn: 'Стовпець CSV',
|
|
264
|
+
fieldName: 'Назва поля',
|
|
265
|
+
clearMember: 'Очистити учасника',
|
|
266
|
+
},
|
|
267
267
|
},
|
|
268
268
|
channel: {
|
|
269
269
|
state: {
|
package/src/locale/uz/uz.js
CHANGED
|
@@ -261,15 +261,15 @@ export default {
|
|
|
261
261
|
[WebitelMediaExporterExportStatus.Failed]: 'Xatolik',
|
|
262
262
|
},
|
|
263
263
|
},
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
264
|
+
importCSV: 'CSV import qilish',
|
|
265
|
+
CSV: {
|
|
266
|
+
skipHeaders: 'Sarlavhalarni o‘tkazib yuborish',
|
|
267
|
+
charSet: 'Belgilar to‘plami',
|
|
268
|
+
separator: 'Ajratgich',
|
|
269
|
+
CSVColumn: 'CSV ustuni',
|
|
270
|
+
fieldName: 'Maydon nomi',
|
|
271
|
+
clearMember: 'A’zoni tozalash',
|
|
272
|
+
},
|
|
273
273
|
},
|
|
274
274
|
channel: {
|
|
275
275
|
state: {
|
package/src/locale/vi/vi.js
CHANGED
|
@@ -260,15 +260,15 @@ export default {
|
|
|
260
260
|
[WebitelMediaExporterExportStatus.Failed]: 'Lỗi',
|
|
261
261
|
},
|
|
262
262
|
},
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
263
|
+
importCSV: 'Nhập CSV',
|
|
264
|
+
CSV: {
|
|
265
|
+
skipHeaders: 'Bỏ qua tiêu đề',
|
|
266
|
+
charSet: 'Bộ ký tự',
|
|
267
|
+
separator: 'Dấu phân cách',
|
|
268
|
+
CSVColumn: 'Cột CSV',
|
|
269
|
+
fieldName: 'Tên trường',
|
|
270
|
+
clearMember: 'Xóa thành viên',
|
|
271
|
+
},
|
|
272
272
|
},
|
|
273
273
|
channel: {
|
|
274
274
|
state: {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface MediaSettings {
|
|
2
|
+
playbackRate: number;
|
|
3
|
+
}
|
|
4
|
+
interface Props {
|
|
5
|
+
modelValue: MediaSettings;
|
|
6
|
+
}
|
|
7
|
+
declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
8
|
+
"update:modelValue": (value: MediaSettings) => any;
|
|
9
|
+
}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
|
|
10
|
+
"onUpdate:modelValue"?: (value: MediaSettings) => any;
|
|
11
|
+
}>, {
|
|
12
|
+
modelValue: MediaSettings;
|
|
13
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
14
|
+
declare const _default: typeof __VLS_export;
|
|
15
|
+
export default _default;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
modelValue?: number;
|
|
3
|
+
}
|
|
4
|
+
declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
5
|
+
"update:modelValue": (value: number) => any;
|
|
6
|
+
}, string, import("vue").PublicProps, Readonly<Props> & Readonly<{
|
|
7
|
+
"onUpdate:modelValue"?: (value: number) => any;
|
|
8
|
+
}>, {
|
|
9
|
+
modelValue: number;
|
|
10
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
11
|
+
declare const _default: typeof __VLS_export;
|
|
12
|
+
export default _default;
|
|
@@ -58,6 +58,12 @@ interface Props {
|
|
|
58
58
|
* @default false
|
|
59
59
|
*/
|
|
60
60
|
hideMuteButton?: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* Hide settings button
|
|
63
|
+
* @type {boolean}
|
|
64
|
+
* @default false
|
|
65
|
+
*/
|
|
66
|
+
hideSettings?: boolean;
|
|
61
67
|
/**
|
|
62
68
|
* Shows close button
|
|
63
69
|
* @type {boolean}
|
|
@@ -87,6 +93,7 @@ declare const __VLS_export: import("vue").DefineComponent<Props, {}, {}, {}, {},
|
|
|
87
93
|
resetOnEnd: boolean;
|
|
88
94
|
hideVolumeSlider: boolean;
|
|
89
95
|
hideMuteButton: boolean;
|
|
96
|
+
hideSettings: boolean;
|
|
90
97
|
position: string;
|
|
91
98
|
invertTime: boolean;
|
|
92
99
|
resetVolume: boolean;
|