@webitel/ui-sdk 1.0.23 → 1.0.26
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/ui-sdk.common.js +314 -63
- package/dist/ui-sdk.common.js.map +1 -1
- package/dist/ui-sdk.css +1 -1
- package/dist/ui-sdk.umd.js +314 -63
- package/dist/ui-sdk.umd.js.map +1 -1
- package/dist/ui-sdk.umd.min.js +2 -2
- package/dist/ui-sdk.umd.min.js.map +1 -1
- package/package.json +1 -1
- package/src/components/atoms/wt-avatar/__tests__/wt-avatar.spec.js +9 -0
- package/src/components/atoms/wt-avatar/wt-avatar.vue +64 -0
- package/src/components/atoms/wt-badge/__tests__/wt-badge.spec.js +9 -0
- package/src/components/atoms/wt-badge/wt-badge.vue +39 -0
- package/src/components/index.js +4 -0
- package/src/components/organisms/wt-player/wt-player.vue +35 -8
- package/src/css/components/_components.scss +2 -0
- package/src/css/components/atoms/wt-avatar/_variables.scss +9 -0
- package/src/css/components/atoms/wt-badge/_variables.scss +3 -0
- package/src/enums/AbstractUserStatus/AbstractUserStatus.enum.js +8 -0
package/package.json
CHANGED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div
|
|
3
|
+
class="wt-avatar"
|
|
4
|
+
:class="[`wt-avatar--size-${size}`]"
|
|
5
|
+
>
|
|
6
|
+
<wt-badge
|
|
7
|
+
v-if="badge"
|
|
8
|
+
:color-variable="badgeColorVar"
|
|
9
|
+
></wt-badge>
|
|
10
|
+
<img
|
|
11
|
+
class="wt-avatar__img"
|
|
12
|
+
src="../../../assets/components/atoms/wt-avatar/default-avatar.svg"
|
|
13
|
+
alt="avatar"
|
|
14
|
+
>
|
|
15
|
+
</div>
|
|
16
|
+
</template>
|
|
17
|
+
|
|
18
|
+
<script>
|
|
19
|
+
import AbstractUserStatus from '../../../enums/AbstractUserStatus/AbstractUserStatus.enum';
|
|
20
|
+
|
|
21
|
+
export default {
|
|
22
|
+
name: 'wt-avatar',
|
|
23
|
+
props: {
|
|
24
|
+
size: {
|
|
25
|
+
type: String,
|
|
26
|
+
default: 'md',
|
|
27
|
+
options: ['md'],
|
|
28
|
+
},
|
|
29
|
+
badge: {
|
|
30
|
+
type: Boolean,
|
|
31
|
+
default: false,
|
|
32
|
+
},
|
|
33
|
+
status: {
|
|
34
|
+
type: String,
|
|
35
|
+
options: AbstractUserStatus,
|
|
36
|
+
default: AbstractUserStatus.OFFLINE,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
computed: {
|
|
40
|
+
badgeColorVar() {
|
|
41
|
+
switch (this.status) {
|
|
42
|
+
case AbstractUserStatus.ACTIVE: return 'online-color';
|
|
43
|
+
case AbstractUserStatus.DND: return 'dnd-color';
|
|
44
|
+
case AbstractUserStatus.BUSY: return 'busy-color';
|
|
45
|
+
case AbstractUserStatus.OFFLINE: return 'offline-color';
|
|
46
|
+
default: return 'offline-color';
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
</script>
|
|
52
|
+
|
|
53
|
+
<style lang="scss" scoped>
|
|
54
|
+
.wt-avatar {
|
|
55
|
+
position: relative;
|
|
56
|
+
width: var(--avatar-size);
|
|
57
|
+
height: var(--avatar-size);
|
|
58
|
+
|
|
59
|
+
&__img {
|
|
60
|
+
width: 100%;
|
|
61
|
+
height: 100%;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
</style>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<aside
|
|
3
|
+
class="wt-badge"
|
|
4
|
+
:class="{ 'wt-badge--outside': outside }"
|
|
5
|
+
:style="{ background: `var(--${colorVariable})` }"
|
|
6
|
+
></aside>
|
|
7
|
+
</template>
|
|
8
|
+
|
|
9
|
+
<script>
|
|
10
|
+
export default {
|
|
11
|
+
name: 'wt-badge',
|
|
12
|
+
props: {
|
|
13
|
+
colorVariable: {
|
|
14
|
+
type: String,
|
|
15
|
+
default: 'false-color',
|
|
16
|
+
description: 'see all available colors in webitel-ui docs',
|
|
17
|
+
},
|
|
18
|
+
outside: {
|
|
19
|
+
type: Boolean,
|
|
20
|
+
default: false,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
</script>
|
|
25
|
+
|
|
26
|
+
<style lang="scss" scoped>
|
|
27
|
+
.wt-badge {
|
|
28
|
+
position: absolute;
|
|
29
|
+
top: 0;
|
|
30
|
+
right: 0;
|
|
31
|
+
width: var(--wt-badge-size);
|
|
32
|
+
height: var(--wt-badge-size);
|
|
33
|
+
border-radius: 50%;
|
|
34
|
+
|
|
35
|
+
&--outside {
|
|
36
|
+
transform: translate(-100%, -100%);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
</style>
|
package/src/components/index.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import Vue from 'vue';
|
|
2
|
+
import WtAvatar from './atoms/wt-avatar/wt-avatar.vue';
|
|
3
|
+
import WtBadge from './atoms/wt-badge/wt-badge.vue';
|
|
2
4
|
import WtIcon from './atoms/wt-icon/wt-icon.vue';
|
|
3
5
|
import WtIndicator from './atoms/wt-indicator/wt-indicator.vue';
|
|
4
6
|
import WtInputInfo from './atoms/wt-input-info/wt-input-info.vue';
|
|
@@ -48,6 +50,8 @@ import WtTableActions from './organisms/wt-table-actions/wt-table-actions.vue';
|
|
|
48
50
|
import WtTableColumnSelect from './organisms/wt-table-column-select/wt-table-column-select.vue';
|
|
49
51
|
|
|
50
52
|
const Components = {
|
|
53
|
+
WtAvatar,
|
|
54
|
+
WtBadge,
|
|
51
55
|
WtIcon,
|
|
52
56
|
WtIndicator,
|
|
53
57
|
WtInputInfo,
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<aside class="wt-player">
|
|
3
|
-
<
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
<component
|
|
4
|
+
:is="playerType"
|
|
5
|
+
class="wt-player__player"
|
|
6
|
+
ref="player"
|
|
6
7
|
:src="src"
|
|
7
8
|
:autoplay="autoplay"
|
|
8
9
|
controls
|
|
9
10
|
v-on="listeners"
|
|
10
|
-
></
|
|
11
|
+
></component>
|
|
11
12
|
|
|
12
13
|
<!-- The "wt-icon-btn" component is append in to "audio" element by "setCloseIcon" method-->
|
|
13
14
|
<wt-icon-btn
|
|
@@ -38,6 +39,19 @@ export default {
|
|
|
38
39
|
type: [String, Function, Boolean],
|
|
39
40
|
default: () => (url) => url.replace('/stream', '/download'),
|
|
40
41
|
},
|
|
42
|
+
mime: {
|
|
43
|
+
type: String,
|
|
44
|
+
default: 'audio',
|
|
45
|
+
},
|
|
46
|
+
// plyr-specific options
|
|
47
|
+
resetOnEnd: {
|
|
48
|
+
type: Boolean,
|
|
49
|
+
default: false,
|
|
50
|
+
},
|
|
51
|
+
invertTime: {
|
|
52
|
+
type: Boolean,
|
|
53
|
+
default: true,
|
|
54
|
+
},
|
|
41
55
|
},
|
|
42
56
|
data: () => ({
|
|
43
57
|
player: null,
|
|
@@ -62,19 +76,26 @@ export default {
|
|
|
62
76
|
...this.$listeners,
|
|
63
77
|
};
|
|
64
78
|
},
|
|
79
|
+
playerType() {
|
|
80
|
+
return this.mime.includes('video') ? 'video' : 'audio';
|
|
81
|
+
},
|
|
65
82
|
},
|
|
66
83
|
|
|
67
84
|
methods: {
|
|
68
|
-
setupPlayer() {
|
|
85
|
+
async setupPlayer() {
|
|
86
|
+
await this.$nextTick(); // test is failing to render component if element is passed to Plyr as Vue $ref
|
|
69
87
|
const baseURL = this.$baseURL || process.env.BASE_URL;
|
|
70
|
-
if (this.player) this.player.
|
|
88
|
+
if (this.player) this.player.destroy();
|
|
71
89
|
const controls = ['play-large', 'play', 'progress', 'current-time',
|
|
72
90
|
'mute', 'volume', 'captions', 'settings', 'pip',
|
|
73
91
|
'airplay', 'fullscreen'];
|
|
74
92
|
if (this.download) controls.push('download');
|
|
75
|
-
this.player = new Plyr(
|
|
93
|
+
this.player = new Plyr(this.$refs.player, {
|
|
94
|
+
// this.player = new Plyr('.wt-player__player', {
|
|
76
95
|
autoplay: this.autoplay,
|
|
77
96
|
loadSprite: false,
|
|
97
|
+
resetOnEnd: this.resetOnEnd,
|
|
98
|
+
invertTime: this.invertTime,
|
|
78
99
|
iconUrl: `${baseURL}img/plyr.svg`,
|
|
79
100
|
controls,
|
|
80
101
|
loop: {
|
|
@@ -82,6 +103,7 @@ export default {
|
|
|
82
103
|
},
|
|
83
104
|
});
|
|
84
105
|
this.appendCloseIcon();
|
|
106
|
+
this.$emit('initialized', this.player);
|
|
85
107
|
},
|
|
86
108
|
setupDownload() {
|
|
87
109
|
if (!this.download) this.setupPlayer();
|
|
@@ -92,7 +114,7 @@ export default {
|
|
|
92
114
|
}
|
|
93
115
|
},
|
|
94
116
|
appendCloseIcon() {
|
|
95
|
-
const plyrControls = this.$refs.
|
|
117
|
+
const plyrControls = this.$refs.player.plyr?.elements?.controls;
|
|
96
118
|
const closeIcon = this.$refs['close-icon'].$el;
|
|
97
119
|
if (plyrControls) {
|
|
98
120
|
plyrControls.append(closeIcon);
|
|
@@ -111,6 +133,7 @@ export default {
|
|
|
111
133
|
bottom: 60px;
|
|
112
134
|
|
|
113
135
|
.plyr {
|
|
136
|
+
max-width: 100%; // prevents <video> container overflow
|
|
114
137
|
border-radius: var(--border-radius);
|
|
115
138
|
box-shadow: var(--box-shadow);
|
|
116
139
|
}
|
|
@@ -125,6 +148,10 @@ export default {
|
|
|
125
148
|
color: var(--text-primary-color);
|
|
126
149
|
}
|
|
127
150
|
|
|
151
|
+
.plyr__control--overlaid svg {
|
|
152
|
+
left: 0; // reset plyr style for video "play" button icon
|
|
153
|
+
}
|
|
154
|
+
|
|
128
155
|
//.plyr__control[role='menuitemradio']::before,
|
|
129
156
|
//.plyr__control[role='menuitemradio']:hover::before {
|
|
130
157
|
// border: 2px solid var(--secondary-color);
|