@opendesign-plus-test/components 0.0.1-rc.82 → 0.0.1-rc.84

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 (210) hide show
  1. package/dist/chunk-OElCookieNotice.cjs.js +1 -1
  2. package/dist/chunk-OElCookieNotice.es.js +10 -10
  3. package/dist/components/config-provider/OPlusConfigProvider.vue.d.ts +2 -2
  4. package/dist/components/config-provider/index.d.ts +3 -3
  5. package/dist/components/meeting/composables/useMeetingConfig.d.ts +1 -1
  6. package/dist/components.cjs.js +33 -33
  7. package/dist/components.css +1 -1
  8. package/dist/components.es.js +1511 -1504
  9. package/dist/treeshaking/components/banner/OBanner.css +37 -37
  10. package/dist/treeshaking/components/banner/OBanner.vue.mjs +1 -1
  11. package/dist/treeshaking/components/banner/OBanner.vue2.mjs +2 -1
  12. package/dist/treeshaking/components/banner/OBanner2.css +10 -10
  13. package/dist/treeshaking/components/config-provider/OPlusConfigProvider.vue.d.ts +2 -2
  14. package/dist/treeshaking/components/config-provider/index.d.ts +3 -3
  15. package/dist/treeshaking/components/cookie-notice/OCookieNotice.vue.mjs +1 -1
  16. package/dist/treeshaking/components/cookie-notice/OCookieNotice.vue2.mjs +1 -1
  17. package/dist/treeshaking/components/cookie-notice/OCookieNotice2.css +62 -62
  18. package/dist/treeshaking/components/events/OEventsApply.vue.mjs +1 -1
  19. package/dist/treeshaking/components/header/OHeader.css +12 -12
  20. package/dist/treeshaking/components/header/OHeader.vue.mjs +1 -1
  21. package/dist/treeshaking/components/header/OHeader.vue2.mjs +1 -1
  22. package/dist/treeshaking/components/header/components/HeaderContent.css +235 -235
  23. package/dist/treeshaking/components/header/components/HeaderContent.vue.mjs +1 -1
  24. package/dist/treeshaking/components/header/components/HeaderContent.vue2.mjs +3 -2
  25. package/dist/treeshaking/components/header/components/HeaderNav.css +26 -26
  26. package/dist/treeshaking/components/header/components/HeaderNav.vue.mjs +1 -1
  27. package/dist/treeshaking/components/header/components/HeaderNav.vue2.mjs +1 -1
  28. package/dist/treeshaking/components/meeting/composables/useMeetingConfig.d.ts +1 -1
  29. package/dist/treeshaking/i18n/index.mjs +1 -1
  30. package/dist/treeshaking/shared/theme.mjs +13 -0
  31. package/package.json +4 -1
  32. package/docs/design.md +0 -27
  33. package/docs/design_banner.md +0 -41
  34. package/docs/design_section.md +0 -27
  35. package/plugins/css-inject-plugin.ts +0 -37
  36. package/scripts/build.js +0 -17
  37. package/scripts/generate-components-index.js +0 -62
  38. package/src/assets/events/svg-icons/icon-checked.svg +0 -3
  39. package/src/assets/events/svg-icons/icon-competition.svg +0 -7
  40. package/src/assets/events/svg-icons/icon-events.svg +0 -4
  41. package/src/assets/events/svg-icons/icon-release.svg +0 -4
  42. package/src/assets/events/svg-icons/icon-summit.svg +0 -4
  43. package/src/assets/meeting/empty.png +0 -0
  44. package/src/assets/meeting/svg-icons/icon-all.svg +0 -4
  45. package/src/assets/meeting/svg-icons/icon-backward.svg +0 -4
  46. package/src/assets/meeting/svg-icons/icon-calendar.svg +0 -3
  47. package/src/assets/meeting/svg-icons/icon-cancel.svg +0 -4
  48. package/src/assets/meeting/svg-icons/icon-captions.svg +0 -4
  49. package/src/assets/meeting/svg-icons/icon-close-captions.svg +0 -6
  50. package/src/assets/meeting/svg-icons/icon-close-fullscreen.svg +0 -6
  51. package/src/assets/meeting/svg-icons/icon-copy.svg +0 -4
  52. package/src/assets/meeting/svg-icons/icon-create.svg +0 -5
  53. package/src/assets/meeting/svg-icons/icon-delete.svg +0 -7
  54. package/src/assets/meeting/svg-icons/icon-empty.svg +0 -65
  55. package/src/assets/meeting/svg-icons/icon-event.svg +0 -4
  56. package/src/assets/meeting/svg-icons/icon-export.svg +0 -3
  57. package/src/assets/meeting/svg-icons/icon-forward.svg +0 -4
  58. package/src/assets/meeting/svg-icons/icon-fullscreen.svg +0 -6
  59. package/src/assets/meeting/svg-icons/icon-help.svg +0 -3
  60. package/src/assets/meeting/svg-icons/icon-important.svg +0 -4
  61. package/src/assets/meeting/svg-icons/icon-info.svg +0 -3
  62. package/src/assets/meeting/svg-icons/icon-meet.svg +0 -4
  63. package/src/assets/meeting/svg-icons/icon-meeting-message.svg +0 -5
  64. package/src/assets/meeting/svg-icons/icon-meeting.svg +0 -4
  65. package/src/assets/meeting/svg-icons/icon-play.svg +0 -5
  66. package/src/assets/meeting/svg-icons/icon-playing-tip.svg +0 -7
  67. package/src/assets/meeting/svg-icons/icon-playing.svg +0 -5
  68. package/src/assets/meeting/svg-icons/icon-question.svg +0 -4
  69. package/src/assets/meeting/svg-icons/icon-sound.svg +0 -5
  70. package/src/assets/meeting/svg-icons/icon-speaker.svg +0 -3
  71. package/src/assets/meeting/svg-icons/icon-summit.svg +0 -4
  72. package/src/assets/meeting/svg-icons/icon-telligent.svg +0 -3
  73. package/src/assets/meeting/svg-icons/icon-tip.svg +0 -3
  74. package/src/assets/meeting/svg-icons/icon-todo.svg +0 -4
  75. package/src/assets/meeting/transparent.png +0 -0
  76. package/src/assets/styles/element-plus.scss +0 -283
  77. package/src/assets/svg-icons/icon-arrow-left.svg +0 -3
  78. package/src/assets/svg-icons/icon-avatar-line.svg +0 -3
  79. package/src/assets/svg-icons/icon-caret-left.svg +0 -3
  80. package/src/assets/svg-icons/icon-caret-right.svg +0 -3
  81. package/src/assets/svg-icons/icon-chevron-down.svg +0 -3
  82. package/src/assets/svg-icons/icon-chevron-right.svg +0 -3
  83. package/src/assets/svg-icons/icon-chevron-up.svg +0 -3
  84. package/src/assets/svg-icons/icon-close.svg +0 -3
  85. package/src/assets/svg-icons/icon-delete-hover.svg +0 -4
  86. package/src/assets/svg-icons/icon-delete.svg +0 -7
  87. package/src/assets/svg-icons/icon-filter.svg +0 -3
  88. package/src/assets/svg-icons/icon-header-back.svg +0 -3
  89. package/src/assets/svg-icons/icon-header-delete.svg +0 -3
  90. package/src/assets/svg-icons/icon-header-menu.svg +0 -3
  91. package/src/assets/svg-icons/icon-header-person.svg +0 -3
  92. package/src/assets/svg-icons/icon-header-search.svg +0 -4
  93. package/src/assets/svg-icons/icon-image-close.svg +0 -4
  94. package/src/assets/svg-icons/icon-image-upload.svg +0 -3
  95. package/src/assets/svg-icons/icon-image-zoomin.svg +0 -3
  96. package/src/assets/svg-icons/icon-loading.svg +0 -4
  97. package/src/assets/svg-icons/icon-locale.svg +0 -3
  98. package/src/assets/svg-icons/icon-log-off.svg +0 -3
  99. package/src/assets/svg-icons/icon-message.svg +0 -3
  100. package/src/assets/svg-icons/icon-moon.svg +0 -3
  101. package/src/assets/svg-icons/icon-outlink.svg +0 -3
  102. package/src/assets/svg-icons/icon-overview.svg +0 -3
  103. package/src/assets/svg-icons/icon-refresh.svg +0 -3
  104. package/src/assets/svg-icons/icon-search.svg +0 -3
  105. package/src/assets/svg-icons/icon-setting.svg +0 -3
  106. package/src/assets/svg-icons/icon-sun.svg +0 -3
  107. package/src/assets/svg-icons/icon-tips.svg +0 -3
  108. package/src/components/activity/OActivityApproval.vue +0 -868
  109. package/src/components/activity/OActivityForm.vue +0 -548
  110. package/src/components/activity/OActivityMyCalendar.vue +0 -1540
  111. package/src/components/activity/composables/useActivityConfig.ts +0 -141
  112. package/src/components/activity/config.ts +0 -1
  113. package/src/components/activity/index.ts +0 -24
  114. package/src/components/activity/types.ts +0 -95
  115. package/src/components/banner/OBanner.vue +0 -288
  116. package/src/components/banner/OBannerContent.vue +0 -175
  117. package/src/components/banner/index.ts +0 -18
  118. package/src/components/banner/types.ts +0 -39
  119. package/src/components/common/AppAvatar.vue +0 -83
  120. package/src/components/common/ClientOnly.vue +0 -13
  121. package/src/components/common/ContentWrapper.vue +0 -82
  122. package/src/components/common/MoreText.vue +0 -124
  123. package/src/components/common/ThFilter.vue +0 -330
  124. package/src/components/config-provider/OPlusConfigProvider.vue +0 -32
  125. package/src/components/config-provider/index.ts +0 -10
  126. package/src/components/cookie-notice/OCookieNotice.vue +0 -575
  127. package/src/components/cookie-notice/index.ts +0 -10
  128. package/src/components/element-plus/OElCookieNotice.vue +0 -603
  129. package/src/components/element-plus/index.ts +0 -3
  130. package/src/components/events/OEventsApply.vue +0 -509
  131. package/src/components/events/OEventsCalendar.vue +0 -600
  132. package/src/components/events/OEventsList.vue +0 -461
  133. package/src/components/events/config.ts +0 -35
  134. package/src/components/events/index.ts +0 -24
  135. package/src/components/events/types.ts +0 -84
  136. package/src/components/events/utils.ts +0 -9
  137. package/src/components/footer/OFooter.vue +0 -577
  138. package/src/components/footer/index.ts +0 -10
  139. package/src/components/header/OHeader.vue +0 -157
  140. package/src/components/header/OHeaderMobile.vue +0 -184
  141. package/src/components/header/components/HeaderContent.vue +0 -1125
  142. package/src/components/header/components/HeaderNav.vue +0 -278
  143. package/src/components/header/components/HeaderNavMobile.vue +0 -380
  144. package/src/components/header/index.ts +0 -18
  145. package/src/components/header/types.ts +0 -96
  146. package/src/components/header-language-switcher/OHeaderLanguageSwitcher.vue +0 -249
  147. package/src/components/header-language-switcher/index.ts +0 -10
  148. package/src/components/header-search/OHeaderSearch.vue +0 -628
  149. package/src/components/header-search/index.ts +0 -10
  150. package/src/components/header-source-code/OHeaderSourceCode.vue +0 -151
  151. package/src/components/header-source-code/index.ts +0 -10
  152. package/src/components/header-theme/OHeaderTheme.vue +0 -132
  153. package/src/components/header-theme/index.ts +0 -10
  154. package/src/components/header-user/OHeaderUser.vue +0 -249
  155. package/src/components/header-user/index.ts +0 -10
  156. package/src/components/meeting/OMeetingCalendar.vue +0 -943
  157. package/src/components/meeting/OMeetingForm.vue +0 -1131
  158. package/src/components/meeting/OMeetingMyCalendar.vue +0 -1628
  159. package/src/components/meeting/OMeetingPlayback.vue +0 -469
  160. package/src/components/meeting/OMeetingSigCalendar.vue +0 -500
  161. package/src/components/meeting/components/OMeetingCalendarList.vue +0 -626
  162. package/src/components/meeting/components/OMeetingCalendarSelector.vue +0 -213
  163. package/src/components/meeting/components/OMeetingDetail.vue +0 -285
  164. package/src/components/meeting/components/OMeetingPlaybackSubtitles.vue +0 -615
  165. package/src/components/meeting/components/OMeetingPlaybackVideo.vue +0 -741
  166. package/src/components/meeting/components/OMeetingSigAside.vue +0 -205
  167. package/src/components/meeting/composables/useMeetingConfig.ts +0 -108
  168. package/src/components/meeting/config.ts +0 -48
  169. package/src/components/meeting/index.ts +0 -45
  170. package/src/components/meeting/types.ts +0 -270
  171. package/src/components/meeting/utils.ts +0 -70
  172. package/src/components/search/OSearchInput.vue +0 -526
  173. package/src/components/search/composables/useImageSearch.ts +0 -157
  174. package/src/components/search/composables/useKeywordHighlight.ts +0 -30
  175. package/src/components/search/composables/useSearchHistory.ts +0 -75
  176. package/src/components/search/index.ts +0 -23
  177. package/src/components/search/internal/HighlightText.vue +0 -37
  178. package/src/components/search/internal/SearchImageInput.vue +0 -498
  179. package/src/components/search/internal/SearchPanel.vue +0 -431
  180. package/src/components/search/types.ts +0 -25
  181. package/src/components/section/OSection.vue +0 -178
  182. package/src/components/section/index.ts +0 -10
  183. package/src/draft/Banner.vue +0 -265
  184. package/src/draft/ButtonCards.vue +0 -106
  185. package/src/draft/Feature.vue +0 -134
  186. package/src/draft/Footer.vue +0 -519
  187. package/src/draft/HorizontalAnchor.vue +0 -165
  188. package/src/draft/ItemSwiper.vue +0 -133
  189. package/src/draft/Logo.vue +0 -141
  190. package/src/draft/LogoCard.vue +0 -75
  191. package/src/draft/LogoV2.vue +0 -19
  192. package/src/draft/MainCard.vue +0 -38
  193. package/src/draft/MultiCard.vue +0 -95
  194. package/src/draft/MultiIconCard.vue +0 -74
  195. package/src/draft/OInfoCard.vue +0 -176
  196. package/src/draft/Process.vue +0 -81
  197. package/src/draft/Section.vue +0 -167
  198. package/src/draft/SingleTabCard.vue +0 -85
  199. package/src/draft/SliderCard.vue +0 -111
  200. package/src/env.d.ts +0 -16
  201. package/src/i18n/en.ts +0 -278
  202. package/src/i18n/index.ts +0 -56
  203. package/src/i18n/zh.ts +0 -268
  204. package/src/index.ts +0 -18
  205. package/src/shared/provide.ts +0 -6
  206. package/src/shims-vue-dompurify-html.d.ts +0 -17
  207. package/src/vue.d.ts +0 -10
  208. package/tsconfig.json +0 -37
  209. package/vite.config.ts +0 -123
  210. package/vite.treeshaking.config.ts +0 -127
@@ -1,741 +0,0 @@
1
- <script setup lang="ts">
2
- import videojs from 'video.js';
3
- import 'video.js/dist/video-js.css';
4
- import { transformTime } from '../utils.ts';
5
- import defaultPoster from '@/assets/meeting/transparent.png';
6
- import { nextTick, onMounted, onUnmounted, ref, watch } from 'vue';
7
- import type { MeetingPlaybackVideoPropsT } from '@/components/meeting';
8
-
9
- const props = withDefaults(
10
- defineProps<MeetingPlaybackVideoPropsT>(),
11
- {
12
- src: '',
13
- vtt: '',
14
- captions: () => [],
15
- },
16
- );
17
- const timer = ref();
18
- const colHeight = ref();
19
- const playerRef = ref();
20
-
21
- const emits = defineEmits(['getDuration', 'getInstance', 'setTrackIdx']);
22
-
23
- const speakerMenuVisible = ref(false);
24
-
25
- const closeSpeakerMenu = () => {
26
- speakerMenuVisible.value = false;
27
- };
28
-
29
- const handleCue = (textTrack: any, init = false) => {
30
- const player = props.instance;
31
- if (!player) return;
32
- // 修改字幕
33
- const activeCue = textTrack.activeCues?.[0];
34
- timer.value && clearInterval(timer.value);
35
- if (activeCue) {
36
- activeCue.text = activeCue?.text?.replace(/\[(SPEAKER_)\d+]: /g, '') || '';
37
- const arr = activeCue.text.split('\n');
38
- const captionLength = arr.length;
39
-
40
- const timeL = activeCue.endTime - activeCue.startTime;
41
- const interval = parseFloat((timeL / captionLength).toFixed(3));
42
-
43
- let index = 0;
44
- if (init) {
45
- const ratio = (player.currentTime() - activeCue.startTime) / (activeCue.endTime - activeCue.startTime);
46
- while ((index + 1) / captionLength < ratio) {
47
- index++;
48
- }
49
- }
50
- if (index < captionLength) {
51
- activeCue.text = arr.length ? arr[index] : activeCue?.text;
52
- } else {
53
- activeCue.text = arr.length ? arr[0] : activeCue?.text;
54
- }
55
-
56
- let timeInterval = interval * 1000;
57
-
58
- const startInterval = () => {
59
- timer.value = setInterval(() => {
60
- textTrack.mode = 'hidden';
61
- index++;
62
- if (index > arr.length - 1) {
63
- clearInterval(timer.value);
64
- } else if (index === arr.length - 1) {
65
- activeCue.text = arr[index];
66
- clearInterval(timer.value);
67
- timeInterval = interval * (captionLength - index) * 1000;
68
- startInterval();
69
- } else {
70
- activeCue.text = arr[index];
71
- }
72
- textTrack.mode = 'showing';
73
- }, timeInterval);
74
- };
75
- startInterval();
76
- }
77
- };
78
-
79
- const checkedSpeakers = ref([]);
80
- watch(
81
- () => checkedSpeakers.value,
82
- (val) => {
83
- const player = props.instance;
84
- if (player) {
85
- const tracks = player.textTracks();
86
- for (let i = 0; i < tracks.length; i++) {
87
- if (tracks[i].kind === 'subtitles') {
88
- // 修改按钮的状态和样式
89
- handleCue(tracks[i], true);
90
- tracks[i].mode = !val.length ? 'hidden' : 'showing';
91
- }
92
- }
93
- }
94
- },
95
- {
96
- deep: true,
97
- },
98
- );
99
- const loaded = ref(false);
100
- const playStatus = ref('init');
101
- // -------------------- 视频播放 --------------------
102
- const videoInit = async () => {
103
- if (!props.src) return;
104
- const player = videojs('playerId', {
105
- controls: true,
106
- autoplay: false,
107
- preload: 'auto',
108
- fluid: true,
109
- poster: props.poster || defaultPoster,
110
- // 控制栏
111
- playbackRates: [0.5, 0.75, 1, 1.25, 1.5, 2],
112
- controlBar: {
113
- skipButtons: {
114
- backward: 5,
115
- forward: 5,
116
- },
117
- children: {
118
- playToggle: true,
119
- SkipBackward: {
120
- backward: 5,
121
- },
122
- skipForward: {
123
- forward: 5,
124
- },
125
- currentTimeDisplay: true,
126
- timeDivider: true,
127
- durationDisplay: true,
128
- progressControl: true,
129
- PlaybackRateMenuButton: true,
130
- volumePanel: {
131
- inline: false,
132
- },
133
- FullscreenToggle: true,
134
- },
135
- },
136
- }) as unknown as any;
137
- emits('getInstance', player);
138
- // 加载视频
139
- player.src(props.src);
140
- // 加载字幕
141
- player.addRemoteTextTrack({
142
- kind: 'subtitles',
143
- src: props.vtt,
144
- srclang: 'zh',
145
- label: '中文',
146
- default: false,
147
- });
148
-
149
- loaded.value = true;
150
-
151
- // 添加自定义控制字幕的按钮
152
- class CustomSubsCapsButton extends videojs.getComponent('Button') {
153
- constructor(player: any, options: object) {
154
- super(player, options);
155
- this.addClass('vjs-subtitle-toggle-button', 'vjs-subtitle-hidden');
156
- (this as any).controlText('Toggle Subtitles');
157
- }
158
-
159
- buildCSSClass() {
160
- return `vjs-subtitle-toggle-button ${ super.buildCSSClass() }`;
161
- }
162
-
163
- handleClick() {
164
- const tracks = this.player().textTracks() as unknown as any[];
165
- for (let i = 0; i < tracks.length; i++) {
166
- if (tracks[i].kind === 'subtitles') {
167
- handleCue(tracks[i], true);
168
- // 修改按钮的状态和样式
169
- tracks[i].mode = tracks[i].mode === 'showing' ? 'hidden' : 'showing';
170
- if (tracks[i].mode === 'showing') {
171
- this.removeClass('vjs-subtitle-hidden');
172
- this.addClass('vjs-subtitle-showing');
173
- } else {
174
- this.removeClass('vjs-subtitle-showing');
175
- this.addClass('vjs-subtitle-hidden');
176
- }
177
- }
178
- }
179
- }
180
- }
181
-
182
- if (props.vtt) {
183
- videojs.registerComponent('SubtitleToggleButton', CustomSubsCapsButton);
184
- if (!player.controlBar.children_.some((v: any) => v.name_ === 'SubtitleToggleButton')) {
185
- player.controlBar.addChild('SubtitleToggleButton', {}, 8);
186
- }
187
- }
188
-
189
- // 动态修改字幕
190
- const textTracks = player?.textTracks().tracks_;
191
- textTracks.forEach((textTrack: any) => {
192
- textTrack?.addEventListener('cuechange', () => {
193
- handleCue(textTrack);
194
- });
195
- });
196
-
197
- player.on('play', () => {
198
- playStatus.value = 'playing';
199
- });
200
-
201
- // 当前播放时间
202
- player.on('timeupdate', () => {
203
- const currentTime = player.currentTime() || 0;
204
- const idx = props.captions.findIndex((item) => {
205
- const startTime = transformTime(item.start_time);
206
-
207
- return startTime > currentTime;
208
- });
209
- emits('setTrackIdx', idx);
210
- });
211
- player.one('loadedmetadata', () => {
212
- emits('getDuration', player.duration());
213
- });
214
-
215
- nextTick(() => {
216
- const container = document.getElementsByClassName('o-meeting-playback-video')[0] as HTMLDivElement;
217
- colHeight.value = container.offsetHeight;
218
- });
219
- playerRef.value = player;
220
- };
221
-
222
- onMounted(() => {
223
- videoInit();
224
- document.addEventListener('click', closeSpeakerMenu);
225
- });
226
- watch(
227
- () => props.src,
228
- () => {
229
- videoInit();
230
- },
231
- );
232
- onUnmounted(() => {
233
- props?.instance?.dispose();
234
- document.removeEventListener('click', closeSpeakerMenu);
235
- });
236
-
237
- defineExpose({
238
- changeTime: (time: number) => {
239
- playerRef.value?.currentTime(time);
240
- },
241
- });
242
- </script>
243
-
244
- <template>
245
- <div class="o-meeting-playback-video">
246
- <div
247
- class="video-placeholder"
248
- :class="{
249
- loaded: loaded,
250
- 'no-poster': !poster,
251
- [playStatus]: true,
252
- }"
253
- >
254
- <video class="video-js" id="playerId"></video>
255
- <div class="poster-title" v-if="posterTitle">{{ posterTitle }}</div>
256
- </div>
257
- </div>
258
- </template>
259
-
260
- <style lang="scss">
261
- .o-meeting-playback-video {
262
- width: 100%;
263
- height: 100%;
264
- min-height: calc(var(--layout-content-min-height) - 104px);
265
- background-color: var(--o-color-fill2);
266
- position: relative;
267
- border-radius: var(--meeting-card-radius);
268
- overflow: hidden;
269
-
270
- .video-placeholder {
271
- content: '';
272
- width: 100%;
273
- padding-top: 56.25%;
274
-
275
- &.loaded {
276
- padding-top: 0;
277
- }
278
-
279
- &.no-poster {
280
- .video-js {
281
- img {
282
- display: none;
283
- }
284
- }
285
- }
286
-
287
- .poster-title {
288
- display: none;
289
- }
290
-
291
- &.init {
292
- .poster-title {
293
- display: block;
294
- position: absolute;
295
- top: 25%;
296
- left: 10%;
297
- @include text-truncate(3);
298
- @include display2;
299
- }
300
- }
301
- }
302
-
303
- video {
304
- width: 100%;
305
- height: 100%;
306
- position: absolute;
307
- top: 0;
308
- left: 0;
309
- }
310
- }
311
-
312
- .video-js {
313
- --right-size: 32px;
314
- --right-icon-size: 24px;
315
- --right-gap: 24px;
316
-
317
- div.vjs-poster {
318
- position: absolute;
319
-
320
- img {
321
- object-fit: cover;
322
- }
323
-
324
- &::after {
325
- content: '';
326
- position: absolute;
327
- top: 0;
328
- bottom: 0;
329
- left: 0;
330
- right: 0;
331
- background-color: var(--o-color-mask1);
332
- z-index: 2;
333
- }
334
- }
335
-
336
- .vjs-control-bar {
337
- flex-wrap: wrap;
338
- height: 64px;
339
- z-index: 2;
340
-
341
- & > button,
342
- & > div {
343
- order: 2;
344
- }
345
-
346
- .vjs-control {
347
- height: 32px;
348
- }
349
-
350
- // 播放暂停
351
- .vjs-play-control {
352
- width: 32px;
353
- height: 32px;
354
- margin-left: var(--o-gap-5);
355
-
356
- .vjs-icon-placeholder {
357
- &::before {
358
- font-size: 24px;
359
- line-height: 32px;
360
- }
361
- }
362
- }
363
-
364
- // 后退5s
365
- .vjs-skip-backward-5 {
366
- width: 16px;
367
- margin-left: var(--o-gap-2);
368
-
369
- .vjs-icon-placeholder {
370
- height: 16px;
371
- width: 16px;
372
- background-image: url('@/assets/meeting/svg-icons/icon-backward.svg');
373
- background-repeat: no-repeat;
374
- background-size: 16px;
375
- background-position: center;
376
-
377
- &::before {
378
- content: none;
379
- }
380
- }
381
- }
382
-
383
- // 前进5s
384
- .vjs-skip-forward-5 {
385
- width: 16px;
386
- margin-left: var(--o-gap-2);
387
-
388
- .vjs-icon-placeholder {
389
- height: 16px;
390
- width: 16px;
391
- background-image: url('@/assets/meeting/svg-icons/icon-forward.svg');
392
- background-repeat: no-repeat;
393
- background-size: 16px;
394
- background-position: center;
395
-
396
- &::before {
397
- content: none;
398
- }
399
- }
400
- }
401
-
402
- // 时间显示
403
- .vjs-time-control {
404
- min-width: auto;
405
- display: flex;
406
- align-items: center;
407
- padding: 0;
408
- font-size: 16px;
409
- font-weight: 400;
410
- // 当前时间
411
- &.vjs-current-time {
412
- margin-left: var(--o-gap-4);
413
- }
414
-
415
- // 分隔符
416
- &.vjs-time-divider {
417
- margin-left: var(--o-gap-1);
418
- height: 32px;
419
- }
420
-
421
- // 总时间
422
- &.vjs-duration {
423
- margin-left: var(--o-gap-1);
424
- }
425
- }
426
-
427
- // 倍速播放
428
- .vjs-playback-rate {
429
- opacity: 0.8;
430
- margin-left: auto;
431
- min-width: var(--right-size);
432
-
433
- &:hover {
434
- opacity: 1;
435
- }
436
-
437
- .vjs-playback-rate-value {
438
- font-size: calc(var(--right-size) / 2);
439
- }
440
-
441
- .vjs-menu {
442
- .vjs-menu-content {
443
- width: calc(100% + 5em);
444
- max-height: 22em;
445
- padding: 8px 16px;
446
- border-radius: var(--meeting-cell-radius);
447
- margin-left: -2.5em;
448
- background-color: var(--o-color-info2);
449
- box-shadow: 0 3px 9px 0 rgba(var(--o-kleinblue-10), 0.08);
450
- backdrop-filter: blur(13.59);
451
- }
452
-
453
- li {
454
- background-color: transparent;
455
- justify-content: flex-start;
456
- padding: 0;
457
- font-size: 1.4em;
458
- line-height: 1.7em;
459
-
460
- &.vjs-selected {
461
- color: #497af8;
462
- }
463
- }
464
-
465
- li + li {
466
- margin-top: 8px;
467
- }
468
- }
469
- }
470
-
471
- // 字幕
472
- .vjs-subtitle-toggle-button {
473
- cursor: pointer;
474
- width: var(--right-size);
475
- margin-left: var(--o-gap-5);
476
- display: flex;
477
- justify-content: center;
478
- align-items: center;
479
- opacity: 0.8;
480
-
481
- &:hover {
482
- opacity: 1;
483
- }
484
-
485
- .vjs-icon-placeholder {
486
- width: var(--right-icon-size);
487
- height: var(--right-icon-size);
488
- background-position: center;
489
- background-size: var(--right-icon-size);
490
- background-repeat: no-repeat;
491
- }
492
-
493
- .vjs-menu-content {
494
- padding: 8px 16px;
495
- }
496
-
497
- .vjs-menu-item {
498
- display: flex;
499
- align-items: center;
500
- justify-content: flex-start;
501
- background-color: transparent;
502
- height: 32px;
503
-
504
- span {
505
- order: 2;
506
- @include text-truncate(1);
507
- }
508
-
509
- input {
510
- order: 1;
511
- margin-right: 12px;
512
- border-radius: var(--meeting-input-radius);
513
- cursor: inherit;
514
- position: relative;
515
- top: -1px;
516
- }
517
-
518
- &.vjs-selected {
519
- color: var(--o-color-primary1);
520
-
521
- input:checked {
522
- background: var(--o-color-primary1);
523
- }
524
- }
525
-
526
- &:hover {
527
- color: var(--o-color-primary1);
528
- }
529
- }
530
- }
531
-
532
- .vjs-subtitle-hidden {
533
- .vjs-icon-placeholder {
534
- background-image: url('@/assets/meeting/svg-icons/icon-close-captions.svg');
535
- }
536
- }
537
-
538
- .vjs-subtitle-showing {
539
- .vjs-icon-placeholder {
540
- background-image: url('@/assets/meeting/svg-icons/icon-captions.svg');
541
- }
542
- }
543
-
544
- // 替换音量icon
545
- .vjs-volume-panel {
546
- opacity: 0.8;
547
- margin-left: var(--o-gap-5);
548
- width: var(--right-size);
549
- position: relative;
550
-
551
- &:hover {
552
- opacity: 1;
553
- }
554
-
555
- .vjs-mute-control {
556
- width: var(--right-size);
557
- }
558
-
559
- .vjs-volume-control {
560
- height: fit-content;
561
- transform: translateX(4px);
562
- }
563
-
564
- .vjs-icon-placeholder {
565
- &::before {
566
- height: var(--right-size);
567
- display: block;
568
- font-size: calc(var(--right-size) / 2);
569
- }
570
- }
571
- }
572
-
573
- .vjs-mute-control {
574
- display: flex;
575
- justify-content: center;
576
- align-items: center;
577
-
578
- .vjs-icon-placeholder {
579
- width: var(--right-icon-size);
580
- height: var(--right-icon-size);
581
- background-position: center;
582
- background-size: var(--right-icon-size);
583
- background-repeat: no-repeat;
584
- background-image: url('@/assets/meeting/svg-icons/icon-sound.svg');
585
-
586
- &::before {
587
- content: none;
588
- }
589
- }
590
-
591
- &.vjs-vol-0,
592
- &.vjs-vol-1,
593
- &.vjs-vol-2 {
594
- .vjs-icon-placeholder::before {
595
- line-height: 1.67;
596
- }
597
- }
598
- }
599
-
600
- .vjs-volume-control {
601
- border-radius: var(--meeting-cell-radius);
602
- background-color: var(--o-color-info2);
603
- box-shadow: 0 3px 9px 0 rgba(var(--o-kleinblue-10), 0.08);
604
- backdrop-filter: blur(13.59);
605
- }
606
-
607
- // 替换全屏icon
608
- .vjs-fullscreen-control {
609
- opacity: 0.8;
610
- width: var(--right-size);
611
- margin-left: var(--o-gap-5);
612
- margin-right: var(--o-gap-5);
613
- display: flex;
614
- justify-content: center;
615
- align-items: center;
616
-
617
- &:hover {
618
- opacity: 1;
619
- }
620
-
621
- .vjs-icon-placeholder {
622
- width: var(--right-icon-size);
623
- height: var(--right-icon-size);
624
- background-position: center;
625
- background-size: var(--right-icon-size);
626
- background-repeat: no-repeat;
627
- background-image: url('@/assets/meeting/svg-icons/icon-fullscreen.svg');
628
-
629
- &::before {
630
- content: none;
631
- }
632
- }
633
- }
634
-
635
- .vjs-icon-fullscreen-enter {
636
- &::before {
637
- line-height: 1.67;
638
- }
639
- }
640
-
641
- // 调整进度条位置
642
- .vjs-progress-control {
643
- height: 16px;
644
- order: 1;
645
- padding: 0 8px;
646
- width: 100%;
647
- left: 0;
648
-
649
- div {
650
- border-radius: var(--meeting-cell-radius);
651
- }
652
-
653
- .vjs-progress-holder {
654
- margin: 0;
655
- background: rgba(var(--o-grey-1), 0.3);
656
- }
657
-
658
- .vjs-load-progress {
659
- div {
660
- background: rgba(var(--o-grey-1), 0.5);
661
- }
662
- }
663
-
664
- .vjs-slider-bar {
665
- &::before {
666
- cursor: pointer;
667
- }
668
- }
669
- }
670
- }
671
-
672
- &.vjs-fullscreen {
673
- .vjs-fullscreen-control {
674
- .vjs-icon-placeholder {
675
- background-image: url('@/assets/meeting/svg-icons/icon-close-fullscreen.svg');
676
- }
677
- }
678
- }
679
-
680
- // 字幕文字
681
- .vjs-text-track-display {
682
- bottom: 64px !important;
683
-
684
- .vjs-text-track-cue {
685
- height: fit-content !important;
686
- display: flex;
687
- align-items: center;
688
- justify-content: center;
689
- inset: auto 0 0 0 !important;
690
-
691
- div {
692
- width: fit-content !important;
693
- color: var(--o-color-info1-inverse) !important;
694
- background-color: rgba(0, 0, 0, 0.4) !important;
695
- border-radius: var(--meeting-cell-radius);
696
- display: block !important;
697
- padding: var(--o-gap-1) var(--o-gap-4);
698
- @include tip1;
699
- }
700
- }
701
- }
702
-
703
- // 中间播放暂停按钮
704
- .vjs-paused .vjs-big-play-button {
705
- display: block;
706
- }
707
-
708
- .vjs-error .vjs-big-play-button {
709
- display: none;
710
- }
711
-
712
- .vjs-big-play-button {
713
- width: 64px;
714
- height: 64px;
715
- top: 50%;
716
- left: 50%;
717
- transform: translateX(-50%) translateY(-50%);
718
- margin-left: 0;
719
- margin-top: 0;
720
- border-radius: 50%;
721
- z-index: 2;
722
- background-image: url('@/assets/meeting/svg-icons/icon-play.svg');
723
- background-position: center center;
724
- background-repeat: no-repeat;
725
- background-size: cover;
726
- border: 0.5px solid rgba(var(--o-white), 0.6);
727
- background-color: rgba(var(--o-grey-1), 0.2);
728
-
729
- .vjs-icon-placeholder::before {
730
- content: none;
731
- }
732
- }
733
-
734
- @include hover {
735
- .vjs-big-play-button {
736
- border: 0.5px solid rgba(var(--o-grey-1), 0.6);
737
- background-color: rgba(var(--o-grey-1), 0.2);
738
- }
739
- }
740
- }
741
- </style>