@webitel/ui-sdk 25.10.50 → 25.10.52

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.
Files changed (58) hide show
  1. package/dist/errors-DCJKAXTz.js +70 -0
  2. package/dist/img/sprite/index.js +4 -0
  3. package/dist/img/sprite/player-enter-fullscreen.svg +3 -0
  4. package/dist/img/sprite/player-exit-fullscreen.svg +4 -0
  5. package/dist/install-hlMLq0U3.js +111257 -0
  6. package/dist/prod-DTLJXtPo.js +994 -0
  7. package/dist/srt-parser-CWqahKwO.js +27 -0
  8. package/dist/ssa-parser-BqjjKy4M.js +209 -0
  9. package/dist/ui-sdk.css +1 -1
  10. package/dist/ui-sdk.js +2 -100294
  11. package/dist/ui-sdk.umd.cjs +1633 -1605
  12. package/dist/vidstack-54Jpr2Lq-B-3uagaf.js +142 -0
  13. package/dist/vidstack-BP-l85ST-cd089zs4.js +21 -0
  14. package/dist/vidstack-BTBUzdbF-BuhaE3ef.js +29 -0
  15. package/dist/vidstack-Ccp8mxka-Cyoe3N05.js +20 -0
  16. package/dist/vidstack-Dgd3Tj9x-D_ifpfX9.js +397 -0
  17. package/dist/vidstack-DscYSLiW-Dk1undJ-.js +33 -0
  18. package/dist/vidstack-HTyVv8Yq-DRdwbVZd.js +52 -0
  19. package/dist/vidstack-audio-CFFRqrJ3.js +26 -0
  20. package/dist/vidstack-dash-BDtu3f4j.js +405 -0
  21. package/dist/vidstack-google-cast-hKSzmdiF.js +405 -0
  22. package/dist/vidstack-hls-BLyFYePL.js +328 -0
  23. package/dist/vidstack-video-BlmYiw-x.js +149 -0
  24. package/dist/vidstack-vimeo-DhWdWK51.js +434 -0
  25. package/dist/vidstack-youtube-l9Si5Vl-.js +204 -0
  26. package/package.json +2 -1
  27. package/src/assets/icons/sprite/index.js +4 -0
  28. package/src/assets/icons/sprite/player-enter-fullscreen.svg +3 -0
  29. package/src/assets/icons/sprite/player-exit-fullscreen.svg +4 -0
  30. package/src/components/index.js +3 -0
  31. package/src/components/wt-dual-panel/wt-dual-panel.vue +2 -2
  32. package/src/components/wt-loader/wt-loader.vue +1 -0
  33. package/src/components/wt-popup/_mixins.scss +31 -0
  34. package/src/components/wt-popup/wt-popup.vue +7 -21
  35. package/src/components/wt-table/wt-table.vue +5 -0
  36. package/src/components/wt-vidstack-player/components/layouts/video-layout.vue +112 -0
  37. package/src/components/wt-vidstack-player/components/panels/media-control-panel/components/buttons/fullscreen-button.vue +37 -0
  38. package/src/components/wt-vidstack-player/components/panels/media-control-panel/components/buttons/play-button.vue +21 -0
  39. package/src/components/wt-vidstack-player/components/panels/media-control-panel/components/sliders/time-slider.vue +31 -0
  40. package/src/components/wt-vidstack-player/components/panels/media-control-panel/components/time-group.vue +19 -0
  41. package/src/components/wt-vidstack-player/components/panels/media-control-panel/media-control-panel.vue +34 -0
  42. package/src/components/wt-vidstack-player/components/panels/video-display-panel/video-display-panel.vue +95 -0
  43. package/src/components/wt-vidstack-player/components/toggle-button.vue +54 -0
  44. package/src/components/wt-vidstack-player/wt-vidstack-player.vue +156 -0
  45. package/src/install.ts +1 -0
  46. package/src/store/new/modules/tableStoreModule/tableStoreModule.js +1 -1
  47. package/types/components/index.d.ts +3 -1
  48. package/types/components/wt-table/wt-table.vue.d.ts +1 -1
  49. package/types/components/wt-vidstack-player/components/layouts/video-layout.vue.d.ts +11 -0
  50. package/types/components/wt-vidstack-player/components/panels/media-control-panel/components/buttons/fullscreen-button.vue.d.ts +6 -0
  51. package/types/components/wt-vidstack-player/components/panels/media-control-panel/components/buttons/play-button.vue.d.ts +2 -0
  52. package/types/components/wt-vidstack-player/components/panels/media-control-panel/components/sliders/time-slider.vue.d.ts +2 -0
  53. package/types/components/wt-vidstack-player/components/panels/media-control-panel/components/time-group.vue.d.ts +2 -0
  54. package/types/components/wt-vidstack-player/components/panels/media-control-panel/media-control-panel.vue.d.ts +2 -0
  55. package/types/components/wt-vidstack-player/components/panels/video-display-panel/video-display-panel.vue.d.ts +11 -0
  56. package/types/components/wt-vidstack-player/components/toggle-button.vue.d.ts +12 -0
  57. package/types/components/wt-vidstack-player/wt-vidstack-player.vue.d.ts +25 -0
  58. package/types/install.d.ts +1 -0
@@ -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;
@@ -97,7 +97,7 @@ $side-panel-md-width: 320px;
97
97
  &__main {
98
98
  @extend %wt-scrollbar;
99
99
  flex: 1 1 auto;
100
- overflow: auto;
100
+ overflow-x: auto;
101
101
  }
102
102
 
103
103
  &__header,
@@ -122,7 +122,7 @@ $side-panel-md-width: 320px;
122
122
  background: var(--wt-dual-panel-content-wrapper-color);
123
123
  padding: var(--wt-dual-panel-section-padding);
124
124
  min-width: 0;
125
- overflow: auto;
125
+ // overflow: auto;
126
126
 
127
127
  &--md {
128
128
  flex: 0 0 $side-panel-md-width;
@@ -7,6 +7,7 @@
7
7
  <wt-spinner-loader
8
8
  v-else
9
9
  class="wt-loader"
10
+ :color="color"
10
11
  :size="size"
11
12
  />
12
13
  </template>
@@ -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
- display: flex;
183
- position: fixed;
184
- top: 0;
185
- right: 0;
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
- display: flex;
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>