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

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 (218) hide show
  1. package/dist/chunk-OElCookieNotice.cjs.js +1 -1
  2. package/dist/chunk-OElCookieNotice.es.js +89 -77
  3. package/dist/components/activity/index.d.ts +9 -9
  4. package/dist/components/banner/index.d.ts +6 -6
  5. package/dist/components/events/index.d.ts +20 -20
  6. package/dist/components/header/OHeaderMobile.vue.d.ts +22 -22
  7. package/dist/components/header/components/HeaderNavMobile.vue.d.ts +3 -3
  8. package/dist/components/header/index.d.ts +27 -27
  9. package/dist/components/header-search/index.d.ts +13 -13
  10. package/dist/components/meeting/OMeetingForm.vue.d.ts +2 -0
  11. package/dist/components/meeting/OMeetingPlayback.vue.d.ts +6 -6
  12. package/dist/components/meeting/components/OMeetingPlaybackVideo.vue.d.ts +1 -1
  13. package/dist/components/meeting/index.d.ts +37 -31
  14. package/dist/components/meeting/types.d.ts +3 -0
  15. package/dist/components/search/index.d.ts +11 -11
  16. package/dist/components.cjs.js +35 -35
  17. package/dist/components.css +1 -1
  18. package/dist/components.es.js +6822 -6755
  19. package/dist/treeshaking/components/activity/index.d.ts +9 -9
  20. package/dist/treeshaking/components/banner/index.d.ts +6 -6
  21. package/dist/treeshaking/components/events/index.d.ts +20 -20
  22. package/dist/treeshaking/components/header/OHeaderMobile.vue.d.ts +22 -22
  23. package/dist/treeshaking/components/header/components/HeaderNavMobile.vue.d.ts +3 -3
  24. package/dist/treeshaking/components/header/index.d.ts +27 -27
  25. package/dist/treeshaking/components/header-search/index.d.ts +13 -13
  26. package/dist/treeshaking/components/meeting/OMeetingForm.vue.d.ts +2 -0
  27. package/dist/treeshaking/components/meeting/OMeetingForm.vue.mjs +104 -47
  28. package/dist/treeshaking/components/meeting/OMeetingMyCalendar.css +4 -0
  29. package/dist/treeshaking/components/meeting/OMeetingMyCalendar.vue.mjs +28 -12
  30. package/dist/treeshaking/components/meeting/OMeetingPlayback.vue.d.ts +6 -6
  31. package/dist/treeshaking/components/meeting/components/OMeetingPlaybackVideo.vue.d.ts +1 -1
  32. package/dist/treeshaking/components/meeting/index.d.ts +37 -31
  33. package/dist/treeshaking/components/meeting/types.d.ts +3 -0
  34. package/dist/treeshaking/components/search/index.d.ts +11 -11
  35. package/dist/treeshaking/i18n/en.mjs +6 -0
  36. package/dist/treeshaking/i18n/zh.mjs +8 -2
  37. package/package.json +4 -1
  38. package/dist/components/meeting/components/OMeetingCalendarSelector.vue.d.ts +0 -664
  39. package/dist/treeshaking/components/meeting/components/OMeetingCalendarSelector.vue.d.ts +0 -664
  40. package/docs/design.md +0 -27
  41. package/docs/design_banner.md +0 -41
  42. package/docs/design_section.md +0 -27
  43. package/plugins/css-inject-plugin.ts +0 -37
  44. package/scripts/build.js +0 -17
  45. package/scripts/generate-components-index.js +0 -62
  46. package/src/assets/events/svg-icons/icon-checked.svg +0 -3
  47. package/src/assets/events/svg-icons/icon-competition.svg +0 -7
  48. package/src/assets/events/svg-icons/icon-events.svg +0 -4
  49. package/src/assets/events/svg-icons/icon-release.svg +0 -4
  50. package/src/assets/events/svg-icons/icon-summit.svg +0 -4
  51. package/src/assets/meeting/empty.png +0 -0
  52. package/src/assets/meeting/svg-icons/icon-all.svg +0 -4
  53. package/src/assets/meeting/svg-icons/icon-backward.svg +0 -4
  54. package/src/assets/meeting/svg-icons/icon-calendar.svg +0 -3
  55. package/src/assets/meeting/svg-icons/icon-cancel.svg +0 -4
  56. package/src/assets/meeting/svg-icons/icon-captions.svg +0 -4
  57. package/src/assets/meeting/svg-icons/icon-close-captions.svg +0 -6
  58. package/src/assets/meeting/svg-icons/icon-close-fullscreen.svg +0 -6
  59. package/src/assets/meeting/svg-icons/icon-copy.svg +0 -4
  60. package/src/assets/meeting/svg-icons/icon-create.svg +0 -5
  61. package/src/assets/meeting/svg-icons/icon-delete.svg +0 -7
  62. package/src/assets/meeting/svg-icons/icon-empty.svg +0 -65
  63. package/src/assets/meeting/svg-icons/icon-event.svg +0 -4
  64. package/src/assets/meeting/svg-icons/icon-export.svg +0 -3
  65. package/src/assets/meeting/svg-icons/icon-forward.svg +0 -4
  66. package/src/assets/meeting/svg-icons/icon-fullscreen.svg +0 -6
  67. package/src/assets/meeting/svg-icons/icon-help.svg +0 -3
  68. package/src/assets/meeting/svg-icons/icon-important.svg +0 -4
  69. package/src/assets/meeting/svg-icons/icon-info.svg +0 -3
  70. package/src/assets/meeting/svg-icons/icon-meet.svg +0 -4
  71. package/src/assets/meeting/svg-icons/icon-meeting-message.svg +0 -5
  72. package/src/assets/meeting/svg-icons/icon-meeting.svg +0 -4
  73. package/src/assets/meeting/svg-icons/icon-play.svg +0 -5
  74. package/src/assets/meeting/svg-icons/icon-playing-tip.svg +0 -7
  75. package/src/assets/meeting/svg-icons/icon-playing.svg +0 -5
  76. package/src/assets/meeting/svg-icons/icon-question.svg +0 -4
  77. package/src/assets/meeting/svg-icons/icon-sound.svg +0 -5
  78. package/src/assets/meeting/svg-icons/icon-speaker.svg +0 -3
  79. package/src/assets/meeting/svg-icons/icon-summit.svg +0 -4
  80. package/src/assets/meeting/svg-icons/icon-telligent.svg +0 -3
  81. package/src/assets/meeting/svg-icons/icon-tip.svg +0 -3
  82. package/src/assets/meeting/svg-icons/icon-todo.svg +0 -4
  83. package/src/assets/meeting/transparent.png +0 -0
  84. package/src/assets/styles/element-plus.scss +0 -283
  85. package/src/assets/svg-icons/icon-arrow-left.svg +0 -3
  86. package/src/assets/svg-icons/icon-avatar-line.svg +0 -3
  87. package/src/assets/svg-icons/icon-caret-left.svg +0 -3
  88. package/src/assets/svg-icons/icon-caret-right.svg +0 -3
  89. package/src/assets/svg-icons/icon-chevron-down.svg +0 -3
  90. package/src/assets/svg-icons/icon-chevron-right.svg +0 -3
  91. package/src/assets/svg-icons/icon-chevron-up.svg +0 -3
  92. package/src/assets/svg-icons/icon-close.svg +0 -3
  93. package/src/assets/svg-icons/icon-delete-hover.svg +0 -4
  94. package/src/assets/svg-icons/icon-delete.svg +0 -7
  95. package/src/assets/svg-icons/icon-filter.svg +0 -3
  96. package/src/assets/svg-icons/icon-header-back.svg +0 -3
  97. package/src/assets/svg-icons/icon-header-delete.svg +0 -3
  98. package/src/assets/svg-icons/icon-header-menu.svg +0 -3
  99. package/src/assets/svg-icons/icon-header-person.svg +0 -3
  100. package/src/assets/svg-icons/icon-header-search.svg +0 -4
  101. package/src/assets/svg-icons/icon-image-close.svg +0 -4
  102. package/src/assets/svg-icons/icon-image-upload.svg +0 -3
  103. package/src/assets/svg-icons/icon-image-zoomin.svg +0 -3
  104. package/src/assets/svg-icons/icon-loading.svg +0 -4
  105. package/src/assets/svg-icons/icon-locale.svg +0 -3
  106. package/src/assets/svg-icons/icon-log-off.svg +0 -3
  107. package/src/assets/svg-icons/icon-message.svg +0 -3
  108. package/src/assets/svg-icons/icon-moon.svg +0 -3
  109. package/src/assets/svg-icons/icon-outlink.svg +0 -3
  110. package/src/assets/svg-icons/icon-overview.svg +0 -3
  111. package/src/assets/svg-icons/icon-refresh.svg +0 -3
  112. package/src/assets/svg-icons/icon-search.svg +0 -3
  113. package/src/assets/svg-icons/icon-setting.svg +0 -3
  114. package/src/assets/svg-icons/icon-sun.svg +0 -3
  115. package/src/assets/svg-icons/icon-tips.svg +0 -3
  116. package/src/components/activity/OActivityApproval.vue +0 -868
  117. package/src/components/activity/OActivityForm.vue +0 -548
  118. package/src/components/activity/OActivityMyCalendar.vue +0 -1540
  119. package/src/components/activity/composables/useActivityConfig.ts +0 -141
  120. package/src/components/activity/config.ts +0 -1
  121. package/src/components/activity/index.ts +0 -24
  122. package/src/components/activity/types.ts +0 -95
  123. package/src/components/banner/OBanner.vue +0 -288
  124. package/src/components/banner/OBannerContent.vue +0 -175
  125. package/src/components/banner/index.ts +0 -18
  126. package/src/components/banner/types.ts +0 -39
  127. package/src/components/common/AppAvatar.vue +0 -83
  128. package/src/components/common/ClientOnly.vue +0 -13
  129. package/src/components/common/ContentWrapper.vue +0 -82
  130. package/src/components/common/MoreText.vue +0 -124
  131. package/src/components/common/ThFilter.vue +0 -330
  132. package/src/components/config-provider/OPlusConfigProvider.vue +0 -32
  133. package/src/components/config-provider/index.ts +0 -10
  134. package/src/components/cookie-notice/OCookieNotice.vue +0 -575
  135. package/src/components/cookie-notice/index.ts +0 -10
  136. package/src/components/element-plus/OElCookieNotice.vue +0 -603
  137. package/src/components/element-plus/index.ts +0 -3
  138. package/src/components/events/OEventsApply.vue +0 -509
  139. package/src/components/events/OEventsCalendar.vue +0 -600
  140. package/src/components/events/OEventsList.vue +0 -461
  141. package/src/components/events/config.ts +0 -35
  142. package/src/components/events/index.ts +0 -24
  143. package/src/components/events/types.ts +0 -84
  144. package/src/components/events/utils.ts +0 -9
  145. package/src/components/footer/OFooter.vue +0 -577
  146. package/src/components/footer/index.ts +0 -10
  147. package/src/components/header/OHeader.vue +0 -157
  148. package/src/components/header/OHeaderMobile.vue +0 -184
  149. package/src/components/header/components/HeaderContent.vue +0 -1125
  150. package/src/components/header/components/HeaderNav.vue +0 -278
  151. package/src/components/header/components/HeaderNavMobile.vue +0 -380
  152. package/src/components/header/index.ts +0 -18
  153. package/src/components/header/types.ts +0 -96
  154. package/src/components/header-language-switcher/OHeaderLanguageSwitcher.vue +0 -249
  155. package/src/components/header-language-switcher/index.ts +0 -10
  156. package/src/components/header-search/OHeaderSearch.vue +0 -628
  157. package/src/components/header-search/index.ts +0 -10
  158. package/src/components/header-source-code/OHeaderSourceCode.vue +0 -151
  159. package/src/components/header-source-code/index.ts +0 -10
  160. package/src/components/header-theme/OHeaderTheme.vue +0 -132
  161. package/src/components/header-theme/index.ts +0 -10
  162. package/src/components/header-user/OHeaderUser.vue +0 -249
  163. package/src/components/header-user/index.ts +0 -10
  164. package/src/components/meeting/OMeetingCalendar.vue +0 -943
  165. package/src/components/meeting/OMeetingForm.vue +0 -1131
  166. package/src/components/meeting/OMeetingMyCalendar.vue +0 -1628
  167. package/src/components/meeting/OMeetingPlayback.vue +0 -469
  168. package/src/components/meeting/OMeetingSigCalendar.vue +0 -500
  169. package/src/components/meeting/components/OMeetingCalendarList.vue +0 -626
  170. package/src/components/meeting/components/OMeetingCalendarSelector.vue +0 -213
  171. package/src/components/meeting/components/OMeetingDetail.vue +0 -285
  172. package/src/components/meeting/components/OMeetingPlaybackSubtitles.vue +0 -615
  173. package/src/components/meeting/components/OMeetingPlaybackVideo.vue +0 -741
  174. package/src/components/meeting/components/OMeetingSigAside.vue +0 -205
  175. package/src/components/meeting/composables/useMeetingConfig.ts +0 -108
  176. package/src/components/meeting/config.ts +0 -48
  177. package/src/components/meeting/index.ts +0 -45
  178. package/src/components/meeting/types.ts +0 -270
  179. package/src/components/meeting/utils.ts +0 -70
  180. package/src/components/search/OSearchInput.vue +0 -526
  181. package/src/components/search/composables/useImageSearch.ts +0 -157
  182. package/src/components/search/composables/useKeywordHighlight.ts +0 -30
  183. package/src/components/search/composables/useSearchHistory.ts +0 -75
  184. package/src/components/search/index.ts +0 -23
  185. package/src/components/search/internal/HighlightText.vue +0 -37
  186. package/src/components/search/internal/SearchImageInput.vue +0 -498
  187. package/src/components/search/internal/SearchPanel.vue +0 -431
  188. package/src/components/search/types.ts +0 -25
  189. package/src/components/section/OSection.vue +0 -178
  190. package/src/components/section/index.ts +0 -10
  191. package/src/draft/Banner.vue +0 -265
  192. package/src/draft/ButtonCards.vue +0 -106
  193. package/src/draft/Feature.vue +0 -134
  194. package/src/draft/Footer.vue +0 -519
  195. package/src/draft/HorizontalAnchor.vue +0 -165
  196. package/src/draft/ItemSwiper.vue +0 -133
  197. package/src/draft/Logo.vue +0 -141
  198. package/src/draft/LogoCard.vue +0 -75
  199. package/src/draft/LogoV2.vue +0 -19
  200. package/src/draft/MainCard.vue +0 -38
  201. package/src/draft/MultiCard.vue +0 -95
  202. package/src/draft/MultiIconCard.vue +0 -74
  203. package/src/draft/OInfoCard.vue +0 -176
  204. package/src/draft/Process.vue +0 -81
  205. package/src/draft/Section.vue +0 -167
  206. package/src/draft/SingleTabCard.vue +0 -85
  207. package/src/draft/SliderCard.vue +0 -111
  208. package/src/env.d.ts +0 -16
  209. package/src/i18n/en.ts +0 -278
  210. package/src/i18n/index.ts +0 -56
  211. package/src/i18n/zh.ts +0 -268
  212. package/src/index.ts +0 -18
  213. package/src/shared/provide.ts +0 -6
  214. package/src/shims-vue-dompurify-html.d.ts +0 -17
  215. package/src/vue.d.ts +0 -10
  216. package/tsconfig.json +0 -37
  217. package/vite.config.ts +0 -123
  218. package/vite.treeshaking.config.ts +0 -127
@@ -1,469 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed, onMounted, onUnmounted, ref, watchEffect } from 'vue';
3
- import { speakerNum, transformSeconds, transformTime } from './utils';
4
- import { OOption, OScroller, OSelect, OTab, OTabPane, type SelectValueT } from '@opensig/opendesign';
5
- import OMeetingPlaybackSubtitles from './components/OMeetingPlaybackSubtitles.vue';
6
- import OMeetingPlaybackVideo from './components/OMeetingPlaybackVideo.vue';
7
- import { useI18n } from '@/i18n';
8
- import { PROGRESS_COLORS } from './config';
9
- import type { CaptionItemT, MeetingPlaybackPropsT, SubjectItemT } from './types';
10
-
11
- const props = withDefaults(defineProps<MeetingPlaybackPropsT>(), {
12
- dates: () => [],
13
- data: () => ({}) as any,
14
- detail: () => ({}) as any,
15
- });
16
- const emits = defineEmits(['change-date']);
17
- const { t } = useI18n();
18
- const playbackInstance = ref(null);
19
- const getInstance = (instance: any) => {
20
- playbackInstance.value = instance;
21
- };
22
- const trackIdx = ref(0);
23
- const setTrackIdx = (idx: number) => {
24
- trackIdx.value = idx;
25
- };
26
- // -------------------- 字幕列表 --------------------
27
- const captionsList = ref<CaptionItemT[]>([]);
28
- const getCaptions = async (url: string) => {
29
- const res = await fetch(url);
30
- const json = await res.json();
31
- captionsList.value = (json.segments || []).map((v: CaptionItemT) => {
32
- const speakerIdx = speakerNum(v.speaker);
33
- return {
34
- ...v,
35
- contentHtml: v.content,
36
- speakerIdx,
37
- speakerLabel: `${ t('meeting.speaker') }${ speakerIdx }`,
38
- };
39
- });
40
- };
41
-
42
-
43
- // -------------------- 处理议题分段 --------------------
44
- const subjectList = ref<SubjectItemT[]>([]);
45
- const getProgressColor = (idx: number) => {
46
- return PROGRESS_COLORS[idx % 3];
47
- };
48
- const playerDuration = ref(0);
49
- const getPlayerDuration = (seconds: number) => {
50
- playerDuration.value = seconds;
51
- };
52
- const playerRef = ref();
53
- const mouseTime = ref('');
54
- const mousePosition = ref<[number | string, number | string]>([0, 0]);
55
-
56
- // 计算鼠标在柱子上的相对位置百分比
57
- function calculateCurrentTime(e: any, bar: any) {
58
- const rect = bar.getBoundingClientRect();
59
- const x = e.clientX - rect.left;
60
- const ratio = x / rect.width;
61
- mousePosition.value[1] = `${ bar.offsetTop + bar.parentElement.offsetTop }px`;
62
- mousePosition.value[0] = `${ ratio * 100 }%`;
63
- return ratio * playerDuration.value;
64
- }
65
-
66
- const getParentProgress = (el: HTMLElement) => {
67
- let ele: HTMLElement | null = el;
68
- while (ele && ele.className !== 'subject-progress') {
69
- ele = ele.parentElement;
70
- }
71
- return ele;
72
- };
73
-
74
- const mouseOverItem = (e: any) => {
75
- let ele = getParentProgress(e.target);
76
- if (ele) {
77
- mouseTime.value = transformSeconds(calculateCurrentTime(e, ele));
78
- }
79
- };
80
- const mouseLeaveItem = () => {
81
- mouseTime.value = '';
82
- };
83
- const changeTime = (e: any) => {
84
- let ele = getParentProgress(e.target);
85
- if (ele) {
86
- playerRef.value?.changeTime(calculateCurrentTime(e, ele));
87
- }
88
- };
89
-
90
- const getSubjectList = async (url: string) => {
91
- const res = await fetch(url);
92
- const json = await res.json();
93
- subjectList.value = (json || []).map((z: SubjectItemT) => {
94
- return {
95
- ...z,
96
- startTimeNumber: transformTime(z.startTime),
97
- endTimeNumber: transformTime(z.endTime),
98
- };
99
- });
100
- };
101
-
102
- // -------------------- tab切换 --------------------
103
- const tab = ref('info');
104
- const tabOptions = computed(() => {
105
- const items = [
106
- {
107
- label: t('meeting.baseInfo'),
108
- value: 'info',
109
- },
110
- ];
111
- if (subjectList.value.length) {
112
- items.push({
113
- label: t('meeting.subject'),
114
- value: 'subject',
115
- });
116
- }
117
- return items;
118
- });
119
- const getData = () => {
120
- if (!props.data) {
121
- return;
122
- }
123
- if (props.data.textJson) {
124
- getCaptions(props.data.textJson);
125
- }
126
- if (props.data.topicJson) {
127
- getSubjectList(props.data.topicJson);
128
- }
129
- };
130
-
131
- watchEffect(() => {
132
- getData();
133
- });
134
-
135
- const changeDate = (val: SelectValueT) => {
136
- emits('change-date', val);
137
- };
138
-
139
- // -------------------- 同步高度 --------------------
140
- const leftRef = ref<HTMLElement | null>(null);
141
- const rightHeight = ref('auto');
142
-
143
-
144
- let observer: any = null;
145
- let raf: any = null;
146
-
147
- const updateHeight = () => {
148
- if (leftRef.value) {
149
- rightHeight.value = `${ leftRef.value!.offsetHeight }px`;
150
- }
151
- };
152
-
153
- const debouncedUpdate = () => {
154
- cancelAnimationFrame(raf);
155
- raf = requestAnimationFrame(updateHeight);
156
- };
157
-
158
- onMounted(() => {
159
- if (leftRef.value) {
160
- observer = new ResizeObserver(debouncedUpdate);
161
- observer.observe(leftRef.value);
162
- updateHeight();
163
- }
164
- });
165
-
166
- onUnmounted(() => {
167
- cancelAnimationFrame(raf);
168
- observer?.disconnect();
169
- });
170
- </script>
171
-
172
- <template>
173
- <div class="o-meeting-playback">
174
- <div class="left-card card-wrapper" ref="leftRef">
175
- <div class="video-header">
176
- <div class="video-title">{{ detail?.topic }}({{ detail?.date }})</div>
177
- <OSelect
178
- v-if="dates?.length"
179
- size="large"
180
- :clearable="false"
181
- :model-value="detail?.date"
182
- :placeholder="t('meeting.selectDate')"
183
- @change="changeDate">
184
- <OOption v-for="t in dates" :key="t" :value="t" :label="t" />
185
- </OSelect>
186
- </div>
187
- <div class="video-content">
188
- <OMeetingPlaybackVideo
189
- v-if="data"
190
- ref="playerRef"
191
- :src="data.video"
192
- :vtt="data.textVtt"
193
- :poster="data.poster"
194
- :captions="captionsList"
195
- @getDuration="getPlayerDuration"
196
- :instance="playbackInstance"
197
- @getInstance="getInstance"
198
- :trackIdx="trackIdx"
199
- @setTrackIdx="setTrackIdx"
200
- />
201
- </div>
202
- <div class="info-wrapper">
203
- <OTab v-model="tab" :max-show="9999">
204
- <OTabPane v-for="t in tabOptions" :key="t.value" :value="t.value" :label="t.label" />
205
- </OTab>
206
- <OScroller :class="['tab-content', `tab-content-${tab}`]" show-type="hover">
207
- <div class="base-info" v-if="tab === tabOptions[0].value">
208
- <div class="info-item">
209
- <span>{{ t('meeting.item1') }}</span>
210
- <span>{{ detail.sponsor }}</span>
211
- </div>
212
- <div class="info-item">
213
- <span>{{ t('meeting.item2') }}</span>
214
- <span>{{ detail.groupName }}</span>
215
- </div>
216
- <div class="info-item">
217
- <span>{{ t('meeting.item3') }}</span>
218
- <span>{{ detail.date }}&nbsp;&nbsp;{{ detail.start }}~{{ detail.end }}</span>
219
- </div>
220
- <div class="info-item">
221
- <span>{{ t('meeting.item4') }}</span>
222
- <span>{{ detail.agenda || '-' }}</span>
223
- </div>
224
- </div>
225
- <div class="subject-list" v-if="tab === tabOptions[1]?.value">
226
- <div
227
- v-if="mouseTime"
228
- class="mouse-current-time"
229
- :style="{
230
- top: mousePosition[1],
231
- left: mousePosition[0],
232
- }"
233
- >
234
- {{ mouseTime }}
235
- </div>
236
- <div class="subject-item" v-for="(sub, idx) in subjectList" :key="sub.title">
237
- <div class="subject-title">{{ sub.title }}</div>
238
- <div class="subject-progress" v-if="playerDuration">
239
- <div
240
- class="subject-progress-item"
241
- @click="changeTime"
242
- @mousemove="mouseOverItem"
243
- @mouseleave="mouseLeaveItem"
244
- :data-start="sub.startTime"
245
- :data-end="sub.endTime"
246
- :style="{
247
- '--start': (sub.startTimeNumber < 0 ? 0 : sub.startTimeNumber) / playerDuration,
248
- '--end': (sub.endTimeNumber > playerDuration ? playerDuration : sub.endTimeNumber) / playerDuration,
249
- background: getProgressColor(idx),
250
- }"
251
- ></div>
252
- </div>
253
- </div>
254
- </div>
255
- </OScroller>
256
- </div>
257
- </div>
258
- <div class="right-card card-wrapper" :style="{
259
- height: rightHeight
260
- }">
261
- <OMeetingPlaybackSubtitles
262
- :captions="captionsList"
263
- :trackIdx="trackIdx"
264
- :instance="playbackInstance"
265
- >
266
- <template #empty>
267
- <slot name="empty"></slot>
268
- </template>
269
- </OMeetingPlaybackSubtitles>
270
- </div>
271
- </div>
272
- </template>
273
-
274
- <style lang="scss">
275
- .o-meeting-playback {
276
- display: flex;
277
- gap: var(--grid-column-gutter);
278
- align-items: flex-start;
279
- --meeting-card-radius: var(--o-radius-xs);
280
- --meeting-input-radius: var(--o-radius-xs);
281
- --meeting-cell-radius: var(--o-radius-xs);
282
-
283
- @include respond('<=pad_v') {
284
- flex-wrap: wrap;
285
- }
286
-
287
- .card-wrapper {
288
- border-radius: var(--meeting-card-radius);
289
- background-color: var(--o-color-fill2);
290
- padding: var(--o-gap-5);
291
-
292
- &.left-card {
293
- padding-bottom: 0;
294
- }
295
- }
296
-
297
- .left-card {
298
- width: 60%;
299
- @include respond('<=pad_v') {
300
- width: 100%;
301
- }
302
-
303
- .video-header {
304
- display: flex;
305
- align-items: center;
306
- justify-content: space-between;
307
-
308
- .video-title {
309
- font-weight: 500;
310
- @include h2;
311
- }
312
-
313
- .o-select {
314
- width: 150px;
315
- }
316
- }
317
-
318
- .video-content {
319
- margin-top: var(--o-gap-5);
320
- }
321
-
322
- .info-wrapper {
323
- margin-top: var(--o-gap-5);
324
-
325
- .o-tab {
326
- --tab-nav-justify: flex-start;
327
-
328
- .o-tab-nav-list {
329
- width: 100%;
330
- }
331
-
332
- .o-tab-nav {
333
- padding-bottom: var(--o-gap-4);
334
- @include respond('<=pad_v') {
335
- padding-bottom: var(--o-gap-2);
336
- }
337
- }
338
- }
339
-
340
- .tab-content {
341
- padding-top: var(--o-gap-4);
342
- height: 280px;
343
- padding-bottom: 0;
344
- position: relative;
345
-
346
- &::after {
347
- height: 24px;
348
- content: '';
349
- position: absolute;
350
- bottom: 0;
351
- left: 0;
352
- right: 0;
353
- background: linear-gradient(180deg, rgba(var(--o-grey-1), 0), rgba(var(--o-grey-1), 1) 100%);
354
- }
355
-
356
- .base-info {
357
- padding-bottom: var(--o-gap-5);
358
- @include text1;
359
-
360
- .info-item {
361
- display: flex;
362
- align-items: center;
363
-
364
- &:last-child {
365
- align-items: flex-start;
366
- }
367
-
368
- span:first-child {
369
- width: 6em;
370
- flex-shrink: 0;
371
- color: var(--o-color-info3);
372
- }
373
-
374
- span:last-child {
375
- color: var(--o-color-info2);
376
- }
377
- }
378
-
379
- .info-item + .info-item {
380
- margin-top: var(--o-gap-2);
381
- }
382
- }
383
-
384
- .subject-list {
385
- counter-reset: itemIndex;
386
- position: relative;
387
- padding-bottom: var(--o-gap-5);
388
-
389
- .mouse-current-time {
390
- position: absolute;
391
- background-color: var(--o-color-fill2);
392
- padding: var(--o-gap-1);
393
- box-shadow: var(--o-shadow-1);
394
- z-index: 10;
395
- border-radius: var(--meeting-cell-radius);
396
- transform: translateY(calc(0px - 100% - 4px));
397
- color: var(--o-color-info2);
398
- @include tip1;
399
- }
400
-
401
- .subject-item {
402
- position: relative;
403
- padding: 4px 0 8px 32px;
404
-
405
- &::before {
406
- counter-increment: itemIndex;
407
- position: absolute;
408
- content: counter(itemIndex);
409
- width: 18px;
410
- height: 18px;
411
- text-align: center;
412
- left: 4px;
413
- top: 11px;
414
- color: #fff;
415
- background-color: var(--o-color-primary1);
416
- border-radius: 50%;
417
- font-size: 12px;
418
- line-height: 18px;
419
- }
420
-
421
- .subject-title {
422
- color: var(--o-color-info2);
423
- font-size: 14px;
424
- line-height: 32px;
425
- }
426
-
427
- &::after {
428
- content: '';
429
- position: absolute;
430
- bottom: 4px;
431
- left: 32px;
432
- right: 0;
433
- height: 4px;
434
- border-radius: 2px;
435
- background-color: var(--o-color-fill3);
436
- }
437
-
438
- .subject-progress {
439
- position: absolute;
440
- bottom: 4px;
441
- left: 30px;
442
- right: 0;
443
- height: 4px;
444
-
445
- .subject-progress-item {
446
- cursor: pointer;
447
- position: absolute;
448
- top: 0;
449
- bottom: 0;
450
- border-radius: var(--meeting-cell-radius);
451
- left: calc(var(--start) * 100%);
452
- right: calc((1 - var(--end)) * 100%);
453
- z-index: 9;
454
- }
455
- }
456
- }
457
- }
458
- }
459
- }
460
- }
461
-
462
- .right-card {
463
- width: 40%;
464
- @include respond('<=pad_v') {
465
- width: 100%;
466
- }
467
- }
468
- }
469
- </style>