pcm-agents 1.0.2 → 1.0.4

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 (165) hide show
  1. package/dist/cjs/{components-chat-message_33.cjs.entry.js → components-chat-message_34.cjs.entry.js} +5990 -4059
  2. package/dist/cjs/components-chat-message_34.cjs.entry.js.map +1 -0
  3. package/dist/cjs/{conversation-utils-B4jUfmtU.js → conversation-utils-DGL5uGhS.js} +4 -4
  4. package/dist/cjs/{conversation-utils-B4jUfmtU.js.map → conversation-utils-DGL5uGhS.js.map} +1 -1
  5. package/dist/cjs/{index-Dghp_NL6.js → index-CUDWXBQ4.js} +3 -3
  6. package/dist/cjs/{index-Dghp_NL6.js.map → index-CUDWXBQ4.js.map} +1 -1
  7. package/dist/cjs/index-C_qhED9Z.js +6 -6
  8. package/dist/cjs/index.cjs.js +1 -1
  9. package/dist/cjs/loader.cjs.js +1 -1
  10. package/dist/cjs/oem-htws-modal.cjs.entry.js +1 -1
  11. package/dist/cjs/oem-jd-modal.cjs.entry.js +2 -2
  12. package/dist/cjs/oem-jlpp-modal.cjs.entry.js +1 -1
  13. package/dist/cjs/oem-jlzz-modal.cjs.entry.js +1 -1
  14. package/dist/cjs/oem-mnct-modal.cjs.entry.js +1 -1
  15. package/dist/cjs/oem-qgqjl-modal.cjs.entry.js +3 -3
  16. package/dist/cjs/pcm-agents.cjs.js +1 -1
  17. package/dist/cjs/pcm-hr-chat-modal.cjs.entry.js +2 -2
  18. package/dist/cjs/pcm-jlsx-modal.cjs.entry.js +2 -2
  19. package/dist/cjs/{oem-mnms-modal.cjs.entry.js → pcm-mnms-modal.cjs.entry.js} +41 -156
  20. package/dist/cjs/pcm-mnms-modal.cjs.entry.js.map +1 -0
  21. package/dist/cjs/pcm-mnms-modal.entry.cjs.js.map +1 -0
  22. package/dist/cjs/{sentry-reporter-CgJowDyu.js → sentry-reporter-DsoYs8_e.js} +3 -3
  23. package/dist/cjs/{sentry-reporter-CgJowDyu.js.map → sentry-reporter-DsoYs8_e.js.map} +1 -1
  24. package/dist/collection/collection-manifest.json +1 -0
  25. package/dist/collection/components/components-oem-virtual-chat-modal/components-oem-virtual-chat-modal.css +1111 -0
  26. package/dist/collection/components/components-oem-virtual-chat-modal/components-oem-virtual-chat-modal.js +2334 -0
  27. package/dist/collection/components/components-oem-virtual-chat-modal/components-oem-virtual-chat-modal.js.map +1 -0
  28. package/dist/collection/components/oem-mnms-modal/oem-mnms-modal.js +2 -2
  29. package/dist/collection/components/oem-mnms-modal/oem-mnms-modal.js.map +1 -1
  30. package/dist/components/components-chat-message.js +1 -1
  31. package/dist/components/components-digital-human.js +1 -1
  32. package/dist/components/components-export-records-modal.js +1 -1
  33. package/dist/components/components-mobile-input-btn.js +1 -1
  34. package/dist/components/components-mobile-upload-btn.js +1 -1
  35. package/dist/components/components-oem-virtual-chat-modal.d.ts +11 -0
  36. package/dist/components/components-oem-virtual-chat-modal.js +9 -0
  37. package/dist/components/components-oem-virtual-chat-modal.js.map +1 -0
  38. package/dist/components/components-position-selector.js +1 -1
  39. package/dist/components/components-thousand-resume-wrapper.js +1 -1
  40. package/dist/components/components-upload.js +1 -1
  41. package/dist/components/components-voice-input-btn.js +1 -1
  42. package/dist/components/index.js +1 -1
  43. package/dist/components/oem-htws-modal.js +5 -5
  44. package/dist/components/oem-jd-modal.js +5 -5
  45. package/dist/components/oem-jlpp-modal.js +7 -7
  46. package/dist/components/oem-jlsx-modal.js +5 -5
  47. package/dist/components/oem-jlzz-modal.js +5 -5
  48. package/dist/components/oem-mnct-modal.js +7 -7
  49. package/dist/components/oem-mnms-modal.js +14 -14
  50. package/dist/components/oem-mnms-modal.js.map +1 -1
  51. package/dist/components/oem-qgqjl-modal.js +9 -9
  52. package/dist/components/oem-zygh-modal.js +5 -5
  53. package/dist/components/{p-BhdGTSLg.js → p-BCFZkcSd.js} +5 -5
  54. package/dist/components/{p-BhdGTSLg.js.map → p-BCFZkcSd.js.map} +1 -1
  55. package/dist/components/p-BG83hpwD.js +1910 -0
  56. package/dist/components/p-BG83hpwD.js.map +1 -0
  57. package/dist/components/{p-BDEiyYVl.js → p-BQcztM0Y.js} +3 -3
  58. package/dist/components/{p-BDEiyYVl.js.map → p-BQcztM0Y.js.map} +1 -1
  59. package/dist/components/{p-DJDJfWq9.js → p-BZPf0rl6.js} +3 -3
  60. package/dist/components/{p-DJDJfWq9.js.map → p-BZPf0rl6.js.map} +1 -1
  61. package/dist/components/{p-D4RnNrxx.js → p-BgwHiYHx.js} +3 -3
  62. package/dist/components/{p-D4RnNrxx.js.map → p-BgwHiYHx.js.map} +1 -1
  63. package/dist/components/{p-Bg0KKnpU.js → p-BqXnsrve.js} +3 -3
  64. package/dist/components/{p-Bg0KKnpU.js.map → p-BqXnsrve.js.map} +1 -1
  65. package/dist/components/{p-C7ubjB1x.js → p-CL_Guy01.js} +3 -3
  66. package/dist/components/{p-C7ubjB1x.js.map → p-CL_Guy01.js.map} +1 -1
  67. package/dist/components/{p-C-lvK9NX.js → p-CNFdfFMH.js} +3 -3
  68. package/dist/components/{p-C-lvK9NX.js.map → p-CNFdfFMH.js.map} +1 -1
  69. package/dist/components/{p-CzFKth7J.js → p-Cbaqx3Tt.js} +3 -3
  70. package/dist/components/{p-CzFKth7J.js.map → p-Cbaqx3Tt.js.map} +1 -1
  71. package/dist/components/{p-oVAdweom.js → p-DFDjQmKS.js} +3 -3
  72. package/dist/components/{p-oVAdweom.js.map → p-DFDjQmKS.js.map} +1 -1
  73. package/dist/components/{p-CB7myOe_.js → p-DNi0tT01.js} +3 -3
  74. package/dist/components/{p-CB7myOe_.js.map → p-DNi0tT01.js.map} +1 -1
  75. package/dist/components/{p-i4wY2JnB.js → p-Dc3NvH9p.js} +4 -4
  76. package/dist/components/{p-i4wY2JnB.js.map → p-Dc3NvH9p.js.map} +1 -1
  77. package/dist/components/{p-CPq5-i_-.js → p-DiLmXw24.js} +4 -4
  78. package/dist/components/{p-CPq5-i_-.js.map → p-DiLmXw24.js.map} +1 -1
  79. package/dist/components/{p-CEu-bFot.js → p-VwrhX6KG.js} +3 -3
  80. package/dist/components/{p-CEu-bFot.js.map → p-VwrhX6KG.js.map} +1 -1
  81. package/dist/components/pcm-1zhanshi-mnms-modal.js +5 -5
  82. package/dist/components/pcm-app-chat-modal.js +1 -1
  83. package/dist/components/pcm-ats-mnms-modal.js +5 -5
  84. package/dist/components/pcm-card.js +1 -1
  85. package/dist/components/pcm-hr-chat-modal.js +2 -2
  86. package/dist/components/pcm-htws-modal.js +8 -8
  87. package/dist/components/pcm-hyzj-modal.js +5 -5
  88. package/dist/components/pcm-jd-modal.js +6 -6
  89. package/dist/components/pcm-jlpp-modal.js +8 -8
  90. package/dist/components/pcm-jlsx-modal.js +5 -5
  91. package/dist/components/pcm-jlzz-modal.js +6 -6
  92. package/dist/components/pcm-mnct-modal.js +7 -7
  93. package/dist/components/pcm-mnms-modal.js +8 -8
  94. package/dist/components/pcm-mnms-zp-modal.js +8 -8
  95. package/dist/components/pcm-msbg-modal.js +5 -5
  96. package/dist/components/pcm-qgqjl-modal.js +9 -9
  97. package/dist/components/pcm-virtual-chat-modal.js +1 -1
  98. package/dist/components/pcm-zsk-chat-modal.js +2 -2
  99. package/dist/components/pcm-zygh-modal.js +7 -7
  100. package/dist/components/pcm-zygh-v2-modal.js +7 -7
  101. package/dist/esm/{components-chat-message_33.entry.js → components-chat-message_34.entry.js} +5989 -4059
  102. package/dist/esm/components-chat-message_34.entry.js.map +1 -0
  103. package/dist/esm/{conversation-utils-CLO35DHR.js → conversation-utils-DJr3w2Gu.js} +4 -4
  104. package/dist/esm/{conversation-utils-CLO35DHR.js.map → conversation-utils-DJr3w2Gu.js.map} +1 -1
  105. package/dist/esm/index-Bq0K-WqZ.js +6 -6
  106. package/dist/esm/{index-KVnu9w-h.js → index-DcQZ0v3S.js} +4 -4
  107. package/dist/esm/{index-KVnu9w-h.js.map → index-DcQZ0v3S.js.map} +1 -1
  108. package/dist/esm/index.js +1 -1
  109. package/dist/esm/loader.js +1 -1
  110. package/dist/esm/oem-htws-modal.entry.js +1 -1
  111. package/dist/esm/oem-jd-modal.entry.js +2 -2
  112. package/dist/esm/oem-jlpp-modal.entry.js +1 -1
  113. package/dist/esm/oem-jlzz-modal.entry.js +1 -1
  114. package/dist/esm/oem-mnct-modal.entry.js +1 -1
  115. package/dist/esm/oem-qgqjl-modal.entry.js +3 -3
  116. package/dist/esm/pcm-agents.js +1 -1
  117. package/dist/esm/pcm-hr-chat-modal.entry.js +2 -2
  118. package/dist/esm/pcm-jlsx-modal.entry.js +2 -2
  119. package/dist/esm/{oem-mnms-modal.entry.js → pcm-mnms-modal.entry.js} +41 -156
  120. package/dist/esm/pcm-mnms-modal.entry.js.map +1 -0
  121. package/dist/esm/{sentry-reporter-B4aHQq-A.js → sentry-reporter-N0y2nHh5.js} +3 -3
  122. package/dist/esm/{sentry-reporter-B4aHQq-A.js.map → sentry-reporter-N0y2nHh5.js.map} +1 -1
  123. package/dist/pcm-agents/index.esm.js +1 -1
  124. package/dist/pcm-agents/{p-eb9b355e.entry.js → p-317ec555.entry.js} +2 -2
  125. package/dist/pcm-agents/p-3f0d27cf.entry.js +8 -0
  126. package/dist/pcm-agents/p-3f0d27cf.entry.js.map +1 -0
  127. package/dist/pcm-agents/{p-aa606968.entry.js → p-57993edb.entry.js} +2 -2
  128. package/dist/pcm-agents/{p-e2b9a9f2.entry.js → p-7c1e7e5a.entry.js} +2 -2
  129. package/dist/pcm-agents/{p-Bktjt_YJ.js → p-C3qMuJRQ.js} +2 -2
  130. package/dist/pcm-agents/{p-Bktjt_YJ.js.map → p-C3qMuJRQ.js.map} +1 -1
  131. package/dist/pcm-agents/p-Ch9kExOi.js +2 -0
  132. package/dist/pcm-agents/{p-B4ClCdh9.js.map → p-Ch9kExOi.js.map} +1 -1
  133. package/dist/pcm-agents/{p-CMfzTNOk.js → p-b8oixHud.js} +2 -2
  134. package/dist/pcm-agents/{p-CMfzTNOk.js.map → p-b8oixHud.js.map} +1 -1
  135. package/dist/pcm-agents/{p-4d7511e0.entry.js → p-babf3d55.entry.js} +2 -2
  136. package/dist/pcm-agents/{p-efb4e819.entry.js → p-c2dc4dcd.entry.js} +2 -2
  137. package/dist/pcm-agents/p-ca1f514b.entry.js +2 -0
  138. package/dist/pcm-agents/p-ca1f514b.entry.js.map +1 -0
  139. package/dist/pcm-agents/{p-8256890d.entry.js → p-cdcdec03.entry.js} +2 -2
  140. package/dist/pcm-agents/{p-8144f0d4.entry.js → p-e13e3325.entry.js} +2 -2
  141. package/dist/pcm-agents/{p-dd6362f0.entry.js → p-f666e503.entry.js} +2 -2
  142. package/dist/pcm-agents/pcm-agents.esm.js +1 -1
  143. package/dist/pcm-agents/pcm-mnms-modal.entry.esm.js.map +1 -0
  144. package/dist/types/components/components-oem-virtual-chat-modal/components-oem-virtual-chat-modal.d.ts +290 -0
  145. package/dist/types/components.d.ts +186 -0
  146. package/package.json +1 -1
  147. package/dist/cjs/components-chat-message_33.cjs.entry.js.map +0 -1
  148. package/dist/cjs/oem-mnms-modal.cjs.entry.js.map +0 -1
  149. package/dist/cjs/oem-mnms-modal.entry.cjs.js.map +0 -1
  150. package/dist/esm/components-chat-message_33.entry.js.map +0 -1
  151. package/dist/esm/oem-mnms-modal.entry.js.map +0 -1
  152. package/dist/pcm-agents/oem-mnms-modal.entry.esm.js.map +0 -1
  153. package/dist/pcm-agents/p-7e8bdfa6.entry.js +0 -2
  154. package/dist/pcm-agents/p-7e8bdfa6.entry.js.map +0 -1
  155. package/dist/pcm-agents/p-B4ClCdh9.js +0 -2
  156. package/dist/pcm-agents/p-f6683f29.entry.js +0 -8
  157. package/dist/pcm-agents/p-f6683f29.entry.js.map +0 -1
  158. /package/dist/pcm-agents/{p-eb9b355e.entry.js.map → p-317ec555.entry.js.map} +0 -0
  159. /package/dist/pcm-agents/{p-aa606968.entry.js.map → p-57993edb.entry.js.map} +0 -0
  160. /package/dist/pcm-agents/{p-e2b9a9f2.entry.js.map → p-7c1e7e5a.entry.js.map} +0 -0
  161. /package/dist/pcm-agents/{p-4d7511e0.entry.js.map → p-babf3d55.entry.js.map} +0 -0
  162. /package/dist/pcm-agents/{p-efb4e819.entry.js.map → p-c2dc4dcd.entry.js.map} +0 -0
  163. /package/dist/pcm-agents/{p-8256890d.entry.js.map → p-cdcdec03.entry.js.map} +0 -0
  164. /package/dist/pcm-agents/{p-8144f0d4.entry.js.map → p-e13e3325.entry.js.map} +0 -0
  165. /package/dist/pcm-agents/{p-dd6362f0.entry.js.map → p-f666e503.entry.js.map} +0 -0
@@ -0,0 +1,1111 @@
1
+ :host {
2
+ display: block;
3
+ font-size: 16px;
4
+ }
5
+
6
+ .modal-overlay {
7
+ position: fixed;
8
+ top: 0;
9
+ left: 0;
10
+ right: 0;
11
+ bottom: 0;
12
+ background-color: rgba(0, 0, 0, 0.5);
13
+ display: flex;
14
+ justify-content: center;
15
+ align-items: center;
16
+ overflow: hidden;
17
+ padding: 0;
18
+ z-index: 1000;
19
+ }
20
+
21
+ /* 全屏模式下的overlay样式 */
22
+ .fullscreen-overlay {
23
+ padding: 0;
24
+ position: absolute;
25
+ width: 100%;
26
+ height: 100%;
27
+ }
28
+
29
+ .modal-container {
30
+ background: #fff;
31
+ border-radius: 0;
32
+ width: 100%;
33
+ height: 100%;
34
+ display: flex;
35
+ flex-direction: column;
36
+ position: relative;
37
+ margin: 0;
38
+ overflow: hidden;
39
+ }
40
+
41
+ /* 全屏模式样式 */
42
+ .modal-container.fullscreen {
43
+ width: 100%;
44
+ max-width: none;
45
+ height: 100%;
46
+ border-radius: 0;
47
+ margin: 0;
48
+ display: flex;
49
+ flex-direction: column;
50
+ max-height: 100%;
51
+ }
52
+
53
+ /* 数字人视频背景层 */
54
+ .digital-human-background {
55
+ position: absolute;
56
+ top: 0;
57
+ left: 0;
58
+ right: 0;
59
+ bottom: 0;
60
+ z-index: 1;
61
+ overflow: hidden;
62
+ display: flex;
63
+ justify-content: center;
64
+ }
65
+
66
+ .digital-human-background-video {
67
+ width: 100%;
68
+ height: 100%;
69
+ object-fit: cover;
70
+ object-position: center;
71
+ max-width: 1200px;
72
+ }
73
+
74
+ /* 当没有数字人时的默认背景 */
75
+ .modal-container:not(.digital-human-mode) {
76
+ background: white;
77
+ border-radius: 8px;
78
+ width: 100%;
79
+ max-width: 900px;
80
+ height: 90vh;
81
+ max-height: 800px;
82
+ }
83
+
84
+ /* 内容层 */
85
+ .modal-content-layer {
86
+ position: relative;
87
+ z-index: 10;
88
+ height: 100%;
89
+ display: flex;
90
+ flex-direction: column;
91
+ background: linear-gradient(
92
+ 180deg,
93
+ rgba(0, 0, 0, 0.3) 0%,
94
+ rgba(0, 0, 0, 0.1) 20%,
95
+ rgba(0, 0, 0, 0.1) 80%,
96
+ rgba(0, 0, 0, 0.4) 100%
97
+ );
98
+ }
99
+
100
+ .main-content {
101
+ display: flex;
102
+ flex-direction: column;
103
+ align-items: center; /* 水平居中 */
104
+ overflow: hidden;
105
+ padding: 24px 24px 40px 24px; /* 增加底部间距 */
106
+ position: absolute;
107
+ bottom: 0px;
108
+ width: -webkit-fill-available;
109
+ }
110
+
111
+ .chat-history-section {
112
+ width: 100%;
113
+ max-width: 1240px;
114
+ text-align: center;
115
+ color: white;
116
+ }
117
+
118
+ .ai-message-item {
119
+ padding: 12px 20px;
120
+ border-radius: 12px;
121
+ margin-bottom: 12px;
122
+ animation: fadeIn 0.5s ease-in-out;
123
+ }
124
+
125
+ .recording-preview-top-right {
126
+ position: absolute;
127
+ top: 20px;
128
+ right: 20px;
129
+ width: 180px;
130
+ height: 120px;
131
+ border-radius: 12px;
132
+ overflow: hidden;
133
+ border: 2px solid rgba(255, 255, 255, 0.5);
134
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.3);
135
+ background-color: #000;
136
+ z-index: 10;
137
+ }
138
+
139
+ .user-video-preview {
140
+ width: 100%;
141
+ height: 100%;
142
+ object-fit: cover;
143
+ }
144
+
145
+ .recording-status-bar {
146
+ display: flex;
147
+ align-items: center;
148
+ justify-content: space-between;
149
+ background-color: white;
150
+ padding: 8px 12px;
151
+ border-radius: 999px;
152
+ margin-top: 4px;
153
+ width: 100%;
154
+ max-width: 400px;
155
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
156
+ animation: slideInUp 0.5s ease-out;
157
+ line-height: 40px;
158
+ }
159
+
160
+ .audio-waveform {
161
+ display: flex;
162
+ align-items: center;
163
+ height: 24px;
164
+ }
165
+
166
+ .waveform-bar {
167
+ width: 4px;
168
+ margin: 0 2px;
169
+ background-color: #16a34a; /* A vibrant green */
170
+ border-radius: 2px;
171
+ height: 6px;
172
+ animation: waveform-animation 1.2s infinite ease-in-out;
173
+ }
174
+
175
+ .waveform-bar:nth-child(1) {
176
+ animation-delay: 0.1s;
177
+ }
178
+ .waveform-bar:nth-child(2) {
179
+ animation-delay: 0.3s;
180
+ }
181
+ .waveform-bar:nth-child(3) {
182
+ animation-delay: 0.5s;
183
+ }
184
+ .waveform-bar:nth-child(4) {
185
+ animation-delay: 0.2s;
186
+ }
187
+ .waveform-bar:nth-child(5) {
188
+ animation-delay: 0.4s;
189
+ }
190
+ .waveform-bar:nth-child(6) {
191
+ animation-delay: 0.1s;
192
+ }
193
+ .waveform-bar:nth-child(7) {
194
+ animation-delay: 0.3s;
195
+ }
196
+ .waveform-bar:nth-child(8) {
197
+ animation-delay: 0.5s;
198
+ }
199
+
200
+ @keyframes waveform-animation {
201
+ 0%,
202
+ 100% {
203
+ height: 6px;
204
+ }
205
+ 50% {
206
+ height: 35px;
207
+ }
208
+ }
209
+
210
+ .recording-timer {
211
+ font-size: 14px;
212
+ color: #595959;
213
+ font-family: 'Courier New', Courier, monospace;
214
+ }
215
+
216
+ .finish-recording-btn {
217
+ background-color: #16a34a; /* A vibrant green */
218
+ border: none;
219
+ border-radius: 50%;
220
+ width: 32px;
221
+ height: 32px;
222
+ display: flex;
223
+ align-items: center;
224
+ justify-content: center;
225
+ cursor: pointer;
226
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
227
+ transition:
228
+ background-color 0.3s,
229
+ transform 0.2s;
230
+ }
231
+
232
+ .finish-recording-btn:hover {
233
+ background-color: #148a3f;
234
+ }
235
+
236
+ .finish-recording-btn:active {
237
+ transform: scale(0.95);
238
+ }
239
+
240
+ @keyframes fadeIn {
241
+ from {
242
+ opacity: 0;
243
+ }
244
+ to {
245
+ opacity: 1;
246
+ }
247
+ }
248
+
249
+ @keyframes slideInUp {
250
+ from {
251
+ transform: translateY(20px);
252
+ opacity: 0;
253
+ }
254
+ to {
255
+ transform: translateY(0);
256
+ opacity: 1;
257
+ }
258
+ }
259
+
260
+ .status-indicator-text {
261
+ display: flex;
262
+ align-items: center;
263
+ gap: 8px;
264
+ font-size: 14px;
265
+ color: #595959;
266
+ width: 100%;
267
+ justify-content: center;
268
+ }
269
+
270
+ .status-indicator-text.loading .loading-spinner-small {
271
+ width: 16px;
272
+ height: 16px;
273
+ border: 2px solid rgba(0, 0, 0, 0.1);
274
+ border-top-color: #595959;
275
+ border-radius: 50%;
276
+ animation: spin 0.8s linear infinite;
277
+ }
278
+
279
+ .status-indicator-text.error {
280
+ color: #ff4d4f;
281
+ }
282
+
283
+ .status-indicator-text.ready {
284
+ color: #16a34a;
285
+ }
286
+
287
+ @keyframes spin {
288
+ from {
289
+ transform: rotate(0deg);
290
+ }
291
+ to {
292
+ transform: rotate(360deg);
293
+ }
294
+ }
295
+
296
+ .loading-spinner-small {
297
+ width: 20px;
298
+ height: 20px;
299
+ border: 2px solid #e5e7eb;
300
+ border-top-color: #6b7280;
301
+ border-radius: 50%;
302
+ animation: spin 0.8s linear infinite;
303
+ }
304
+
305
+ /* 添加上传按钮样式 */
306
+ .upload-button {
307
+ background: transparent;
308
+ border: none;
309
+ cursor: pointer;
310
+ padding: 8px;
311
+ display: flex;
312
+ align-items: center;
313
+ justify-content: center;
314
+ color: #666;
315
+ border-radius: 4px;
316
+ transition: background-color 0.2s;
317
+ }
318
+
319
+ .upload-button:hover {
320
+ background-color: rgba(0, 0, 0, 0.04);
321
+ }
322
+
323
+ .upload-button svg {
324
+ width: 20px;
325
+ height: 20px;
326
+ }
327
+
328
+ /* 隐藏原生文件输入框 */
329
+ .file-input {
330
+ display: none;
331
+ }
332
+
333
+ /* 添加文件名显示区域样式 */
334
+ .selected-file {
335
+ font-size: 12px;
336
+ color: #666;
337
+ margin-left: 8px;
338
+ max-width: 150px;
339
+ overflow: hidden;
340
+ text-overflow: ellipsis;
341
+ white-space: nowrap;
342
+ }
343
+
344
+ .input-wrapper {
345
+ flex: 1;
346
+ display: flex;
347
+ align-items: center;
348
+ border: 1px solid #ddd;
349
+ border-radius: 4px;
350
+ padding: 0 4px;
351
+ background: white;
352
+ }
353
+
354
+ .input-wrapper input {
355
+ border: none;
356
+ flex: 1;
357
+ padding: 8px;
358
+ outline: none;
359
+ }
360
+
361
+ .input-wrapper:focus-within {
362
+ border-color: #bbb;
363
+ }
364
+
365
+ /* 文件预览区域样式 */
366
+ .file-preview {
367
+ padding: 8px 16px;
368
+ border-top: 1px solid #eee;
369
+ background-color: #f9f9f9;
370
+ }
371
+
372
+ .recording-section {
373
+ border-top: 1px solid #eee;
374
+ display: flex;
375
+ flex-direction: column;
376
+ align-items: center;
377
+ padding: 10px 20px 0px 20px;
378
+ border-radius: 14px 14px 0 0;
379
+ flex: 0 0 auto;
380
+ }
381
+
382
+ .recording-section .video-preview {
383
+ width: 100%;
384
+ height: 200px;
385
+ max-width: 400px;
386
+ position: relative;
387
+ margin-bottom: 10px;
388
+ border: 1px solid #ddd;
389
+ border-radius: 12px;
390
+ overflow: hidden;
391
+ }
392
+
393
+ .recording-section video {
394
+ width: 100%;
395
+ height: 100%;
396
+ object-fit: cover;
397
+ }
398
+
399
+ /* 修改 recording-status 样式 */
400
+ .recording-status {
401
+ position: absolute;
402
+ top: 10px;
403
+ left: 10px;
404
+ background-color: rgba(0, 0, 0, 0.6);
405
+ color: white;
406
+ padding: 4px 8px;
407
+ border-radius: 4px;
408
+ display: flex;
409
+ align-items: center;
410
+ gap: 5px;
411
+ font-size: 14px;
412
+ z-index: 0;
413
+ }
414
+
415
+ .recording-status .recording-dot {
416
+ display: inline-block;
417
+ width: 10px;
418
+ height: 10px;
419
+ background-color: red;
420
+ border-radius: 50%;
421
+ margin-right: 5px;
422
+ animation: blink 1s infinite;
423
+ }
424
+
425
+ .recording-status.warning {
426
+ color: #ff4d4f;
427
+ animation: blink 1s infinite;
428
+ }
429
+
430
+ @keyframes blink {
431
+ 0% {
432
+ opacity: 1;
433
+ }
434
+
435
+ 50% {
436
+ opacity: 0.5;
437
+ }
438
+
439
+ 100% {
440
+ opacity: 1;
441
+ }
442
+ }
443
+
444
+ .recording-section .stop-recording-button {
445
+ background-color: #f44336;
446
+ color: white;
447
+ border: none;
448
+ cursor: pointer;
449
+ font-weight: bold;
450
+ }
451
+
452
+ .recording-section .stop-recording-button:hover {
453
+ background-color: #d32f2f;
454
+ }
455
+
456
+ .fullscreen {
457
+ width: 100vw;
458
+ border-radius: 0;
459
+ height: 100vh;
460
+ display: flex;
461
+ flex-direction: column;
462
+ overflow-y: auto;
463
+ }
464
+
465
+ .recording-controls {
466
+ margin-top: 10px;
467
+ height: 53px;
468
+ width: 100%;
469
+ max-width: 400px;
470
+ display: flex;
471
+ justify-content: center;
472
+ }
473
+
474
+ .recording-controls .waiting-message {
475
+ text-align: center;
476
+ color: white;
477
+ font-size: 16px;
478
+ background-color: #0d75fb;
479
+ border-radius: 6px;
480
+ width: 95%;
481
+ display: flex;
482
+ justify-content: center;
483
+ align-items: center;
484
+ cursor: pointer;
485
+ }
486
+
487
+ .recording-controls .waiting-message.loading {
488
+ background: #faad14;
489
+ }
490
+
491
+ .recording-controls .waiting-message p {
492
+ margin: 0;
493
+ font-size: 16px;
494
+ color: white;
495
+ font-weight: 500;
496
+ }
497
+
498
+ .recording-controls .stop-recording-button {
499
+ background-color: #dc3545;
500
+ color: white;
501
+ border: none;
502
+ cursor: pointer;
503
+ font-size: 16px;
504
+ }
505
+
506
+ .recording-controls .stop-recording-button:hover {
507
+ background-color: #c82333;
508
+ }
509
+
510
+ /* 添加禁用状态的样式 */
511
+ .recording-controls .stop-recording-button.disabled {
512
+ background: #ccc;
513
+ cursor: not-allowed;
514
+ }
515
+
516
+ .recording-controls .stop-recording-button.disabled:hover {
517
+ background: #ccc;
518
+ }
519
+
520
+ /* 添加进度条和数字进度的样式 */
521
+ .progress-container {
522
+ display: flex;
523
+ justify-content: space-between;
524
+ align-items: center;
525
+ width: 100%;
526
+ max-width: 400px;
527
+ margin-top: 10px;
528
+ padding: 0 5px;
529
+ }
530
+
531
+ .progress-bar-container {
532
+ height: 4px;
533
+ background-color: #e5e5e5;
534
+ border-radius: 2px;
535
+ overflow: hidden;
536
+ margin-right: 10px;
537
+ width: 75px;
538
+ }
539
+
540
+ .progress-bar {
541
+ height: 100%;
542
+ background-image: linear-gradient(111deg, #4a9fff 0%, #1058ff 100%);
543
+ border-radius: 2px;
544
+ transition: width 0.3s ease;
545
+ }
546
+
547
+ .progress-text {
548
+ font-size: 14px;
549
+ color: #666;
550
+ white-space: nowrap;
551
+ }
552
+
553
+ /* 重新设计文本输入区域样式 */
554
+ .text-input-area {
555
+ display: flex;
556
+ flex-direction: column;
557
+ width: 100%;
558
+ height: 100%;
559
+ padding: 0px 16px 16px 16px;
560
+ border-radius: 8px;
561
+ border: none;
562
+ /* 确保容器本身没有边框 */
563
+ }
564
+
565
+ /* 修改文本输入框样式 */
566
+ .text-answer-input {
567
+ flex: 1;
568
+ min-height: 80px;
569
+ padding: 12px 12px 0px 12px;
570
+ border: 1px solid #ddd;
571
+ border-radius: 8px 8px 0 0;
572
+ resize: none;
573
+ font-size: 16px;
574
+ background-color: #fff;
575
+ border-bottom: none;
576
+ outline: none;
577
+ /* 移除默认的焦点轮廓 */
578
+ }
579
+
580
+ /* 修改工具栏样式 */
581
+ .input-toolbar {
582
+ display: flex;
583
+ justify-content: flex-end;
584
+ align-items: center;
585
+ padding: 8px 12px;
586
+ background-color: #fff;
587
+ border: 1px solid #ddd;
588
+ border-top: none;
589
+ border-radius: 0 0 8px 8px;
590
+ }
591
+
592
+ /* 当输入框获得焦点时,修改边框颜色 */
593
+ .text-answer-input:focus {
594
+ border-color: rgb(74, 144, 226);
595
+ border-bottom: none;
596
+ }
597
+
598
+ .text-answer-input:focus + .input-toolbar {
599
+ border-color: rgb(74, 144, 226);
600
+ border-top: none;
601
+ }
602
+
603
+ /* 左侧工具按钮区域 */
604
+ .toolbar-actions {
605
+ width: 32px;
606
+ height: 32px;
607
+ display: flex;
608
+ justify-content: center;
609
+ align-items: center;
610
+ margin-right: 10px;
611
+ border: 1px solid #d9d9d9;
612
+ border-radius: 6px;
613
+ }
614
+
615
+ .toolbar-actions:hover {
616
+ background-color: #f0f0f0;
617
+ }
618
+
619
+ /* 修改工具按钮样式,确保居中 */
620
+ .toolbar-button {
621
+ background: transparent;
622
+ border: none;
623
+ color: #666;
624
+ cursor: pointer;
625
+ padding: 0;
626
+ margin: 0;
627
+ width: 100%;
628
+ height: 100%;
629
+ display: flex;
630
+ justify-content: center;
631
+ align-items: center;
632
+ }
633
+
634
+ /* 确保按钮内部的内容也居中 */
635
+ .toolbar-button > div,
636
+ .toolbar-button > svg {
637
+ display: flex;
638
+ justify-content: center;
639
+ align-items: center;
640
+ }
641
+
642
+ /* 发送按钮样式 */
643
+ .submit-text-button {
644
+ padding: 6px 16px;
645
+ background-color: #4a90e2;
646
+ color: white;
647
+ border: none;
648
+ border-radius: 4px;
649
+ font-size: 14px;
650
+ font-weight: 500;
651
+ cursor: pointer;
652
+ transition: background-color 0.2s;
653
+ }
654
+
655
+ .submit-text-button:hover:not(.disabled) {
656
+ background-color: #3a7bc8;
657
+ }
658
+
659
+ .submit-text-button.disabled {
660
+ background-color: #b3b3b3;
661
+ cursor: not-allowed;
662
+ }
663
+
664
+ /* 语音输入按钮样式 */
665
+ .toolbar-button.recording {
666
+ background-color: rgba(255, 0, 0, 0.1);
667
+ color: #ff3b30;
668
+ animation: pulse 1.5s infinite;
669
+ }
670
+
671
+ .toolbar-button.converting {
672
+ background-color: rgba(0, 122, 255, 0.1);
673
+ color: #007aff;
674
+ }
675
+
676
+ .toolbar-button .recording-time {
677
+ font-size: 12px;
678
+ margin-left: 4px;
679
+ }
680
+
681
+ .converting-indicator {
682
+ display: flex;
683
+ justify-content: center;
684
+ align-items: center;
685
+ }
686
+
687
+ .converting-indicator svg {
688
+ animation: spin 1.5s linear infinite;
689
+ }
690
+
691
+ @keyframes spin {
692
+ 0% {
693
+ transform: rotate(0deg);
694
+ }
695
+
696
+ 100% {
697
+ transform: rotate(360deg);
698
+ }
699
+ }
700
+
701
+ @keyframes pulse {
702
+ 0% {
703
+ box-shadow: 0 0 0 0 rgba(255, 0, 0, 0.4);
704
+ }
705
+
706
+ 70% {
707
+ box-shadow: 0 0 0 6px rgba(255, 0, 0, 0);
708
+ }
709
+
710
+ 100% {
711
+ box-shadow: 0 0 0 0 rgba(255, 0, 0, 0);
712
+ }
713
+ }
714
+
715
+ /* 响应式布局 */
716
+ @media screen and (max-width: 768px) {
717
+ .pc-layout {
718
+ width: 95%;
719
+ }
720
+
721
+ .modal-overlay {
722
+ padding: 0;
723
+ }
724
+
725
+ .modal-container.fullscreen {
726
+ /* 移动端也基于父组件尺寸 */
727
+ width: 100%;
728
+ height: 100%;
729
+ max-height: 100%;
730
+ border-radius: 16px 16px 0 0;
731
+ /* 保留安全区域支持 */
732
+ padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);
733
+ }
734
+ }
735
+
736
+ /* 工作区样式 */
737
+ .workspace-section {
738
+ width: 100%;
739
+ padding: 0px 16px 16px;
740
+ }
741
+
742
+ .workspace-toolbar {
743
+ display: flex;
744
+ justify-content: space-between;
745
+ align-items: end;
746
+ gap: 12px;
747
+ position: relative;
748
+ }
749
+
750
+ .workspace-button {
751
+ display: flex;
752
+ align-items: center;
753
+ gap: 6px;
754
+ padding: 8px 16px;
755
+ border: 1px solid #d9d9d9;
756
+ border-radius: 6px;
757
+ background: white;
758
+ color: #666;
759
+ font-size: 14px;
760
+ cursor: pointer;
761
+ transition: all 0.2s ease;
762
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
763
+ }
764
+
765
+ .workspace-button:hover {
766
+ border-color: #4096ff;
767
+ color: #4096ff;
768
+ box-shadow: 0 2px 4px rgba(64, 150, 255, 0.1);
769
+ }
770
+
771
+ .workspace-button svg {
772
+ flex-shrink: 0;
773
+ }
774
+
775
+ /* 数字人容器样式 */
776
+ .digital-human-wrapper {
777
+ display: flex;
778
+ align-items: center;
779
+ justify-content: center;
780
+ width: 120px;
781
+ height: 80px;
782
+ border: 1px solid #d9d9d9;
783
+ border-radius: 8px;
784
+ background: #fafafa;
785
+ overflow: hidden;
786
+ position: absolute;
787
+ right: 0px;
788
+ }
789
+
790
+
791
+ /* 历史会话抽屉样式 */
792
+ .history-drawer-content {
793
+ height: 100%;
794
+ display: flex;
795
+ flex-direction: column;
796
+ }
797
+
798
+ .conversation-list {
799
+ flex: 1;
800
+ overflow-y: auto;
801
+ padding: 8px 0;
802
+ }
803
+
804
+ .loading-conversations,
805
+ .empty-conversations {
806
+ display: flex;
807
+ flex-direction: column;
808
+ align-items: center;
809
+ justify-content: center;
810
+ padding: 40px 20px;
811
+ color: #999;
812
+ }
813
+
814
+ .loading-conversations .loading-spinner-small {
815
+ margin-bottom: 12px;
816
+ }
817
+
818
+ .conversation-item {
819
+ display: flex;
820
+ align-items: center;
821
+ justify-content: space-between;
822
+ padding: 12px 16px;
823
+ margin: 0 8px 4px 8px;
824
+ border-radius: 8px;
825
+ cursor: pointer;
826
+ transition: all 0.2s ease;
827
+ border: 1px solid transparent;
828
+ }
829
+
830
+ .conversation-item:hover {
831
+ background: #f5f5f5;
832
+ }
833
+
834
+ .conversation-item.active {
835
+ background: #e6f7ff;
836
+ border-color: #1890ff;
837
+ }
838
+
839
+ .conversation-info {
840
+ flex: 1;
841
+ min-width: 0;
842
+ }
843
+
844
+ .conversation-title {
845
+ font-size: 14px;
846
+ font-weight: 500;
847
+ color: #262626;
848
+ margin-bottom: 4px;
849
+ overflow: hidden;
850
+ text-overflow: ellipsis;
851
+ white-space: nowrap;
852
+ }
853
+
854
+ .conversation-meta {
855
+ display: flex;
856
+ align-items: center;
857
+ gap: 8px;
858
+ font-size: 12px;
859
+ color: #8c8c8c;
860
+ }
861
+
862
+ .conversation-time {
863
+ flex-shrink: 0;
864
+ }
865
+
866
+ .message-count {
867
+ flex-shrink: 0;
868
+ }
869
+
870
+ .conversation-status {
871
+ padding: 2px 6px;
872
+ border-radius: 4px;
873
+ font-size: 11px;
874
+ font-weight: 500;
875
+ }
876
+
877
+ .conversation-status.completed {
878
+ background: #f6ffed;
879
+ color: #52c41a;
880
+ }
881
+
882
+ .conversation-status.running {
883
+ background: #fff7e6;
884
+ color: #fa8c16;
885
+ }
886
+
887
+ .current-indicator {
888
+ flex-shrink: 0;
889
+ color: #1890ff;
890
+ margin-left: 8px;
891
+ }
892
+
893
+ /* AI消息显示样式 */
894
+ .ai-message-item {
895
+ box-sizing: border-box;
896
+ margin: 0 auto;
897
+ animation: messageSlideIn 0.3s ease-out;
898
+ width: 100%;
899
+ padding: 40px;
900
+ }
901
+
902
+ .ai-message-item.streaming {
903
+ position: relative;
904
+ }
905
+
906
+ @keyframes messageSlideIn {
907
+ from {
908
+ opacity: 0;
909
+ transform: translateY(10px);
910
+ }
911
+ to {
912
+ opacity: 1;
913
+ transform: translateY(0);
914
+ }
915
+ }
916
+
917
+ .ai-message-content {
918
+ box-sizing: border-box;
919
+ color: #fff;
920
+ padding: 40px 48px;
921
+ border-radius: 32px;
922
+ font-family: "Microsoft YaHei", "PingFang SC", sans-serif;
923
+ font-size: 32px;
924
+ font-weight: 500;
925
+ line-height: 1.6;
926
+ word-wrap: break-word;
927
+ backdrop-filter: blur(100px);
928
+ border: 1px solid rgba(255, 255, 255, 0.2);
929
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.2);
930
+ margin-bottom: 16px;
931
+ max-width: 100%;
932
+ text-align: left;
933
+ }
934
+
935
+ /* 打字指示器 */
936
+ .typing-indicator {
937
+ display: flex;
938
+ align-items: center;
939
+ gap: 8px;
940
+ padding: 16px 48px;
941
+ margin-top: -16px;
942
+ }
943
+
944
+ .typing-indicator span {
945
+ width: 16px;
946
+ height: 16px;
947
+ border-radius: 50%;
948
+ background: #4facfe;
949
+ animation: typingPulse 1.4s ease-in-out infinite;
950
+ opacity: 0.6;
951
+ }
952
+
953
+ .typing-indicator span:nth-child(1) { animation-delay: 0s; }
954
+ .typing-indicator span:nth-child(2) { animation-delay: 0.2s; }
955
+ .typing-indicator span:nth-child(3) { animation-delay: 0.4s; }
956
+
957
+ @keyframes typingPulse {
958
+ 0%, 60%, 100% {
959
+ transform: scale(1);
960
+ opacity: 0.4;
961
+ }
962
+ 30% {
963
+ transform: scale(1.3);
964
+ opacity: 1;
965
+ }
966
+ }
967
+
968
+ /* 字幕区域响应式适配 */
969
+ @media screen and (max-width: 768px) {
970
+ .ai-message-item {
971
+ padding: 30px;
972
+ }
973
+
974
+ .ai-message-content {
975
+ padding: 32px 40px;
976
+ font-size: 30px;
977
+ }
978
+
979
+ .typing-indicator {
980
+ padding: 12px 40px;
981
+ }
982
+ }
983
+
984
+ @media screen and (max-width: 480px) {
985
+ .ai-message-item {
986
+ padding: 0;
987
+ }
988
+
989
+ .ai-message-content {
990
+ padding: 28px 36px;
991
+ font-size: 28px;
992
+ line-height: 1.5;
993
+ }
994
+
995
+ .typing-indicator {
996
+ padding: 10px 36px;
997
+ }
998
+
999
+ .typing-indicator span {
1000
+ width: 12px;
1001
+ height: 12px;
1002
+ }
1003
+ }
1004
+
1005
+
1006
+ .waveform-bar {
1007
+ width: 3px;
1008
+ background: #4facfe;
1009
+ border-radius: 2px;
1010
+ min-height: 2px;
1011
+ animation: waveformAnimation 1.2s ease-in-out infinite alternate;
1012
+ transform-origin: bottom;
1013
+ }
1014
+
1015
+ @keyframes waveformAnimation {
1016
+ 0% { transform: scaleY(0.2); }
1017
+ 100% { transform: scaleY(1); }
1018
+ }
1019
+
1020
+ .recording-timer {
1021
+ font-size: 14px;
1022
+ color: #666;
1023
+ white-space: nowrap;
1024
+ }
1025
+
1026
+ .close-button{
1027
+ position: absolute;
1028
+ top: 16px;
1029
+ left: 16px;
1030
+ z-index: 20;
1031
+ background: rgba(255, 255, 255, 0.9);
1032
+ backdrop-filter: blur(4px);
1033
+ border: 1px solid rgba(0, 0, 0, 0.1);
1034
+ border-radius: 8px;
1035
+ width: 40px;
1036
+ height: 40px;
1037
+ display: flex;
1038
+ align-items: center;
1039
+ justify-content: center;
1040
+ cursor: pointer;
1041
+ transition: all 0.2s ease;
1042
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
1043
+ }
1044
+
1045
+ .close-button:hover {
1046
+ background: rgba(255, 255, 255, 1);
1047
+ border-color: rgba(0, 0, 0, 0.15);
1048
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
1049
+ transform: translateY(-1px);
1050
+ }
1051
+
1052
+ .close-button:active {
1053
+ transform: translateY(0);
1054
+ box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1);
1055
+ }
1056
+
1057
+ .close-button svg {
1058
+ color: #666;
1059
+ transition: color 0.2s ease;
1060
+ }
1061
+
1062
+ .close-button:hover svg {
1063
+ color: #333;
1064
+ }
1065
+
1066
+ /* 结束面试按钮容器 */
1067
+ .end-interview-button-container {
1068
+ display: flex;
1069
+ align-items: center;
1070
+ justify-content: flex-start;
1071
+ width: 100%;
1072
+ max-width: 400px;
1073
+ margin-bottom: 4px;
1074
+ padding-left: 0;
1075
+ }
1076
+
1077
+ /* 结束面试按钮 */
1078
+ .end-interview-button {
1079
+ padding: 5px 10px;
1080
+ background-color: #ff4d4f;
1081
+ color: white;
1082
+ border: none;
1083
+ border-radius: 20px;
1084
+ font-size: 14px;
1085
+ font-weight: 500;
1086
+ cursor: pointer;
1087
+ transition: all 0.3s ease;
1088
+ box-shadow: 0 2px 8px rgba(255, 77, 79, 0.3);
1089
+ white-space: nowrap;
1090
+ }
1091
+
1092
+ .end-interview-button:hover {
1093
+ background-color: #ff7875;
1094
+ box-shadow: 0 4px 12px rgba(255, 77, 79, 0.4);
1095
+ transform: translateY(-1px);
1096
+ }
1097
+
1098
+ .end-interview-button:active {
1099
+ transform: translateY(0);
1100
+ box-shadow: 0 2px 8px rgba(255, 77, 79, 0.3);
1101
+ }
1102
+
1103
+ .end-interview-button:disabled {
1104
+ background-color: #f0f0f0;
1105
+ color: #bfbfbf;
1106
+ cursor: not-allowed;
1107
+ box-shadow: none;
1108
+ transform: none;
1109
+ }
1110
+
1111
+