pcm-agents 0.6.11 → 0.6.13

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 (292) hide show
  1. package/dist/cjs/error-event-J_ZWIqWF.js +33 -0
  2. package/dist/cjs/error-event-J_ZWIqWF.js.map +1 -0
  3. package/dist/cjs/{index-CvEfNyEj.js → index-CRlt8Nv6.js} +53 -3
  4. package/dist/cjs/index-CRlt8Nv6.js.map +1 -0
  5. package/dist/cjs/index-WNdOTXnX.js +11068 -0
  6. package/dist/cjs/index-WNdOTXnX.js.map +1 -0
  7. package/dist/cjs/index.cjs.js +2 -2
  8. package/dist/cjs/loader.cjs.js +3 -5
  9. package/dist/cjs/loader.cjs.js.map +1 -1
  10. package/dist/cjs/message.service-DGUsA-FY.js +135 -0
  11. package/dist/cjs/message.service-DGUsA-FY.js.map +1 -0
  12. package/dist/cjs/{pcm-1zhanshi-mnms-modal_17.cjs.entry.js → pcm-1zhanshi-mnms-modal_21.cjs.entry.js} +3276 -216
  13. package/dist/cjs/pcm-1zhanshi-mnms-modal_21.cjs.entry.js.map +1 -0
  14. package/dist/cjs/pcm-agents.cjs.js +4 -6
  15. package/dist/cjs/pcm-agents.cjs.js.map +1 -1
  16. package/dist/cjs/pcm-message.cjs.entry.js +3 -3
  17. package/dist/cjs/pcm-message.cjs.entry.js.map +1 -1
  18. package/dist/cjs/pcm-message.entry.cjs.js.map +1 -1
  19. package/dist/cjs/pcm-mnms-video-modal.cjs.entry.js +8 -8
  20. package/dist/cjs/pcm-mnms-video-modal.cjs.entry.js.map +1 -1
  21. package/dist/cjs/pcm-mnms-video-modal.entry.cjs.js.map +1 -1
  22. package/dist/cjs/pcm-mnms-zp-modal.cjs.entry.js +29 -86
  23. package/dist/cjs/pcm-mnms-zp-modal.cjs.entry.js.map +1 -1
  24. package/dist/cjs/pcm-mnms-zp-modal.entry.cjs.js.map +1 -1
  25. package/dist/cjs/{sentry-reporter-BWFtw_aT.js → sentry-reporter-tpI4WdkE.js} +12 -40
  26. package/dist/cjs/sentry-reporter-tpI4WdkE.js.map +1 -0
  27. package/dist/collection/collection-manifest.json +5 -1
  28. package/dist/collection/components/pcm-1zhanshi-mnms-modal/pcm-1zhanshi-mnms-modal.js.map +1 -1
  29. package/dist/collection/components/pcm-app-chat-modal/pcm-app-chat-modal.css +986 -986
  30. package/dist/collection/components/pcm-app-chat-modal/pcm-app-chat-modal.js +7 -9
  31. package/dist/collection/components/pcm-app-chat-modal/pcm-app-chat-modal.js.map +1 -1
  32. package/dist/collection/components/pcm-button/pcm-button.css +199 -199
  33. package/dist/collection/components/pcm-button/pcm-button.js +6 -6
  34. package/dist/collection/components/pcm-button/pcm-button.js.map +1 -1
  35. package/dist/collection/components/pcm-card/pcm-card.css +259 -259
  36. package/dist/collection/components/pcm-card/pcm-card.js +1 -1
  37. package/dist/collection/components/pcm-card/pcm-card.js.map +1 -1
  38. package/dist/collection/components/pcm-chat-message/pcm-chat-message.css +554 -554
  39. package/dist/collection/components/pcm-chat-message/pcm-chat-message.js +3 -3
  40. package/dist/collection/components/pcm-chat-message/pcm-chat-message.js.map +1 -1
  41. package/dist/collection/components/pcm-drawer/pcm-drawer.css +102 -102
  42. package/dist/collection/components/pcm-drawer/pcm-drawer.js +1 -1
  43. package/dist/collection/components/pcm-drawer/pcm-drawer.js.map +1 -1
  44. package/dist/collection/components/pcm-hr-chat-modal/pcm-hr-chat-modal.css +854 -854
  45. package/dist/collection/components/pcm-hr-chat-modal/pcm-hr-chat-modal.js +5 -7
  46. package/dist/collection/components/pcm-hr-chat-modal/pcm-hr-chat-modal.js.map +1 -1
  47. package/dist/collection/components/pcm-htws-modal/pcm-htws-modal.css +95 -95
  48. package/dist/collection/components/pcm-htws-modal/pcm-htws-modal.js +1 -1
  49. package/dist/collection/components/pcm-htws-modal/pcm-htws-modal.js.map +1 -1
  50. package/dist/collection/components/pcm-hyzj-modal/pcm-hyzj-modal.js +2 -2
  51. package/dist/collection/components/pcm-hyzj-modal/pcm-hyzj-modal.js.map +1 -1
  52. package/dist/collection/components/pcm-jd-modal/pcm-jd-modal.css +312 -312
  53. package/dist/collection/components/pcm-jd-modal/pcm-jd-modal.js +1 -1
  54. package/dist/collection/components/pcm-jd-modal/pcm-jd-modal.js.map +1 -1
  55. package/dist/collection/components/pcm-jlpp-modal/pcm-jlpp-modal.js +2 -2
  56. package/dist/collection/components/pcm-jlpp-modal/pcm-jlpp-modal.js.map +1 -1
  57. package/dist/collection/components/pcm-message/pcm-message.css +64 -64
  58. package/dist/collection/components/pcm-message/pcm-message.js +2 -2
  59. package/dist/collection/components/pcm-message/pcm-message.js.map +1 -1
  60. package/dist/collection/components/pcm-mnct-modal/pcm-mnct-modal.css +1 -1
  61. package/dist/collection/components/pcm-mnct-modal/pcm-mnct-modal.js +2 -2
  62. package/dist/collection/components/pcm-mnct-modal/pcm-mnct-modal.js.map +1 -1
  63. package/dist/collection/components/pcm-mnms-modal/pcm-mnms-modal.js +67 -84
  64. package/dist/collection/components/pcm-mnms-modal/pcm-mnms-modal.js.map +1 -1
  65. package/dist/collection/components/pcm-mnms-video-modal/pcm-mnms-video-modal.js +2 -2
  66. package/dist/collection/components/pcm-mnms-video-modal/pcm-mnms-video-modal.js.map +1 -1
  67. package/dist/collection/components/pcm-mnms-zp-modal/pcm-mnms-zp-modal.js +67 -84
  68. package/dist/collection/components/pcm-mnms-zp-modal/pcm-mnms-zp-modal.js.map +1 -1
  69. package/dist/collection/components/pcm-mobile-input-btn/pcm-mobile-input-btn.css +140 -0
  70. package/dist/collection/components/pcm-mobile-input-btn/pcm-mobile-input-btn.js +307 -0
  71. package/dist/collection/components/pcm-mobile-input-btn/pcm-mobile-input-btn.js.map +1 -0
  72. package/dist/collection/components/pcm-mobile-input-btn/uploadNumberSDK.js +25 -0
  73. package/dist/collection/components/pcm-mobile-input-btn/uploadNumberSDK.js.map +1 -0
  74. package/dist/collection/components/pcm-mobile-upload-btn/pcm-mobile-upload-btn.css +127 -0
  75. package/dist/collection/components/pcm-mobile-upload-btn/pcm-mobile-upload-btn.js +350 -0
  76. package/dist/collection/components/pcm-mobile-upload-btn/pcm-mobile-upload-btn.js.map +1 -0
  77. package/dist/collection/components/pcm-mobile-upload-btn/uploadNumberSDK.js +25 -0
  78. package/dist/collection/components/pcm-mobile-upload-btn/uploadNumberSDK.js.map +1 -0
  79. package/dist/collection/components/pcm-msbg-modal/pcm-msbg-modal.js +2 -2
  80. package/dist/collection/components/pcm-msbg-modal/pcm-msbg-modal.js.map +1 -1
  81. package/dist/collection/components/pcm-qgqjl-modal/pcm-qgqjl-modal.css +1 -1
  82. package/dist/collection/components/pcm-qgqjl-modal/pcm-qgqjl-modal.js +2 -2
  83. package/dist/collection/components/pcm-qgqjl-modal/pcm-qgqjl-modal.js.map +1 -1
  84. package/dist/collection/components/pcm-time-count-down/pcm-time-count-down.css +0 -0
  85. package/dist/collection/components/pcm-time-count-down/pcm-time-count-down.js +106 -0
  86. package/dist/collection/components/pcm-time-count-down/pcm-time-count-down.js.map +1 -0
  87. package/dist/collection/components/pcm-upload/pcm-upload.css +0 -0
  88. package/dist/collection/components/pcm-upload/pcm-upload.js +408 -0
  89. package/dist/collection/components/pcm-upload/pcm-upload.js.map +1 -0
  90. package/dist/collection/components/pcm-zsk-chat-modal/pcm-zsk-chat-modal.css +969 -969
  91. package/dist/collection/components/pcm-zsk-chat-modal/pcm-zsk-chat-modal.js +3 -5
  92. package/dist/collection/components/pcm-zsk-chat-modal/pcm-zsk-chat-modal.js.map +1 -1
  93. package/dist/collection/components/pcm-zygh-modal/pcm-zygh-modal.css +68 -68
  94. package/dist/collection/components/pcm-zygh-modal/pcm-zygh-modal.js +4 -4
  95. package/dist/collection/components/pcm-zygh-modal/pcm-zygh-modal.js.map +1 -1
  96. package/dist/collection/global/global.css +401 -398
  97. package/dist/collection/global/markdown.css +1233 -1233
  98. package/dist/collection/global/message.js.map +1 -1
  99. package/dist/collection/index.js.map +1 -1
  100. package/dist/collection/interfaces/chat.js.map +1 -1
  101. package/dist/collection/interfaces/events.js.map +1 -1
  102. package/dist/collection/services/message.service.js.map +1 -1
  103. package/dist/collection/utils/env.js +3 -0
  104. package/dist/collection/utils/env.js.map +1 -1
  105. package/dist/collection/utils/error-event.js.map +1 -1
  106. package/dist/collection/utils/init.js.map +1 -1
  107. package/dist/collection/utils/sentry-reporter.js.map +1 -1
  108. package/dist/collection/utils/utils.js +48 -24
  109. package/dist/collection/utils/utils.js.map +1 -1
  110. package/dist/components/index.js +3 -5482
  111. package/dist/components/index.js.map +1 -1
  112. package/dist/components/{p-AYWZDCn8.js → p-B0WOTw9J.js} +51 -4
  113. package/dist/components/p-B0WOTw9J.js.map +1 -0
  114. package/dist/components/{p-DUQ46MUh.js → p-BGXbWUJg.js} +3 -3
  115. package/dist/components/{p-DUQ46MUh.js.map → p-BGXbWUJg.js.map} +1 -1
  116. package/dist/{esm/sentry-reporter-BFBS363a.js → components/p-BW3r6Lrf.js} +5 -32
  117. package/dist/components/p-BW3r6Lrf.js.map +1 -0
  118. package/dist/{esm/app-globals-Chti62re.js → components/p-BdiUKin5.js} +9619 -4296
  119. package/dist/components/p-BdiUKin5.js.map +1 -0
  120. package/dist/components/{p-FjtoYPVY.js → p-BywzltXy.js} +10 -9
  121. package/dist/components/p-BywzltXy.js.map +1 -0
  122. package/dist/components/p-C2OsjtRx.js +208 -0
  123. package/dist/components/p-C2OsjtRx.js.map +1 -0
  124. package/dist/components/{p-D2Z8casl.js → p-CuIvbaWY.js} +5 -5
  125. package/dist/components/p-CuIvbaWY.js.map +1 -0
  126. package/dist/components/p-D0ZMoyH8.js +251 -0
  127. package/dist/components/p-D0ZMoyH8.js.map +1 -0
  128. package/dist/components/{p-CjbFHLT7.js → p-De3VHEUn.js} +7 -71
  129. package/dist/components/p-De3VHEUn.js.map +1 -0
  130. package/dist/components/p-Dv8qvK0w.js +2646 -0
  131. package/dist/components/p-Dv8qvK0w.js.map +1 -0
  132. package/dist/components/p-RD3mwuBX.js +226 -0
  133. package/dist/components/p-RD3mwuBX.js.map +1 -0
  134. package/dist/components/p-njngFX_n.js +80 -0
  135. package/dist/components/p-njngFX_n.js.map +1 -0
  136. package/dist/components/pcm-1zhanshi-mnms-modal.js +7 -7
  137. package/dist/components/pcm-1zhanshi-mnms-modal.js.map +1 -1
  138. package/dist/components/pcm-app-chat-modal.js +1 -1
  139. package/dist/components/pcm-button.js +2 -2
  140. package/dist/components/pcm-button.js.map +1 -1
  141. package/dist/components/pcm-card.js +3 -3
  142. package/dist/components/pcm-card.js.map +1 -1
  143. package/dist/components/pcm-chat-message.js +1 -1
  144. package/dist/components/pcm-drawer.js +1 -1
  145. package/dist/components/pcm-hr-chat-modal.js +5 -4
  146. package/dist/components/pcm-hr-chat-modal.js.map +1 -1
  147. package/dist/components/pcm-htws-modal.js +8 -7
  148. package/dist/components/pcm-htws-modal.js.map +1 -1
  149. package/dist/components/pcm-hyzj-modal.js +8 -7
  150. package/dist/components/pcm-hyzj-modal.js.map +1 -1
  151. package/dist/components/pcm-jd-modal.js +8 -7
  152. package/dist/components/pcm-jd-modal.js.map +1 -1
  153. package/dist/components/pcm-jlpp-modal.js +8 -7
  154. package/dist/components/pcm-jlpp-modal.js.map +1 -1
  155. package/dist/components/pcm-message.js +3 -3
  156. package/dist/components/pcm-message.js.map +1 -1
  157. package/dist/components/pcm-mnct-modal.js +8 -7
  158. package/dist/components/pcm-mnct-modal.js.map +1 -1
  159. package/dist/components/pcm-mnms-modal.js +60 -90
  160. package/dist/components/pcm-mnms-modal.js.map +1 -1
  161. package/dist/components/pcm-mnms-video-modal.js +8 -7
  162. package/dist/components/pcm-mnms-video-modal.js.map +1 -1
  163. package/dist/components/pcm-mnms-zp-modal.js +60 -90
  164. package/dist/components/pcm-mnms-zp-modal.js.map +1 -1
  165. package/dist/components/pcm-mobile-input-btn.d.ts +11 -0
  166. package/dist/components/pcm-mobile-input-btn.js +9 -0
  167. package/dist/components/pcm-mobile-input-btn.js.map +1 -0
  168. package/dist/components/pcm-mobile-upload-btn.d.ts +11 -0
  169. package/dist/components/pcm-mobile-upload-btn.js +9 -0
  170. package/dist/components/pcm-mobile-upload-btn.js.map +1 -0
  171. package/dist/components/pcm-msbg-modal.js +8 -7
  172. package/dist/components/pcm-msbg-modal.js.map +1 -1
  173. package/dist/components/pcm-qgqjl-modal.js +8 -7
  174. package/dist/components/pcm-qgqjl-modal.js.map +1 -1
  175. package/dist/components/pcm-time-count-down.d.ts +11 -0
  176. package/dist/components/pcm-time-count-down.js +9 -0
  177. package/dist/components/pcm-time-count-down.js.map +1 -0
  178. package/dist/components/pcm-upload.d.ts +11 -0
  179. package/dist/components/pcm-upload.js +9 -0
  180. package/dist/components/pcm-upload.js.map +1 -0
  181. package/dist/components/pcm-zsk-chat-modal.js +4 -4
  182. package/dist/components/pcm-zsk-chat-modal.js.map +1 -1
  183. package/dist/components/pcm-zygh-modal.js +8 -7
  184. package/dist/components/pcm-zygh-modal.js.map +1 -1
  185. package/dist/esm/error-event-C0FYX2-Z.js +31 -0
  186. package/dist/esm/error-event-C0FYX2-Z.js.map +1 -0
  187. package/dist/esm/{index-GyOE8SlD.js → index-BnNqOUZf.js} +51 -4
  188. package/dist/esm/index-BnNqOUZf.js.map +1 -0
  189. package/dist/esm/index-BuVfV0zo.js +11035 -0
  190. package/dist/esm/index-BuVfV0zo.js.map +1 -0
  191. package/dist/esm/index.js +2 -2
  192. package/dist/esm/loader.js +3 -5
  193. package/dist/esm/loader.js.map +1 -1
  194. package/dist/esm/message.service-DXVhHj6-.js +133 -0
  195. package/dist/esm/message.service-DXVhHj6-.js.map +1 -0
  196. package/dist/esm/{pcm-1zhanshi-mnms-modal_17.entry.js → pcm-1zhanshi-mnms-modal_21.entry.js} +3225 -169
  197. package/dist/esm/pcm-1zhanshi-mnms-modal_21.entry.js.map +1 -0
  198. package/dist/esm/pcm-agents.js +4 -6
  199. package/dist/esm/pcm-agents.js.map +1 -1
  200. package/dist/esm/pcm-message.entry.js +3 -3
  201. package/dist/esm/pcm-message.entry.js.map +1 -1
  202. package/dist/esm/pcm-mnms-video-modal.entry.js +5 -5
  203. package/dist/esm/pcm-mnms-video-modal.entry.js.map +1 -1
  204. package/dist/esm/pcm-mnms-zp-modal.entry.js +28 -85
  205. package/dist/esm/pcm-mnms-zp-modal.entry.js.map +1 -1
  206. package/dist/esm/sentry-reporter-CYzy4_8O.js +70 -0
  207. package/dist/esm/sentry-reporter-CYzy4_8O.js.map +1 -0
  208. package/dist/pcm-agents/index.esm.js +1 -1
  209. package/dist/pcm-agents/loader.esm.js.map +1 -1
  210. package/dist/pcm-agents/p-18a06873.entry.js +2 -0
  211. package/dist/pcm-agents/p-18a06873.entry.js.map +1 -0
  212. package/dist/pcm-agents/p-47e2e1d0.entry.js +2 -0
  213. package/dist/pcm-agents/p-47e2e1d0.entry.js.map +1 -0
  214. package/dist/pcm-agents/{p-3608c0c6.entry.js → p-7a582f00.entry.js} +2 -2
  215. package/dist/pcm-agents/p-7a582f00.entry.js.map +1 -0
  216. package/dist/pcm-agents/p-BhFnI70g.js +2 -0
  217. package/dist/pcm-agents/p-BhFnI70g.js.map +1 -0
  218. package/dist/pcm-agents/p-BuVfV0zo.js +3 -0
  219. package/dist/pcm-agents/p-BuVfV0zo.js.map +1 -0
  220. package/dist/pcm-agents/p-C0FYX2-Z.js +2 -0
  221. package/dist/pcm-agents/p-C0FYX2-Z.js.map +1 -0
  222. package/dist/pcm-agents/p-DXVhHj6-.js +2 -0
  223. package/dist/pcm-agents/p-DXVhHj6-.js.map +1 -0
  224. package/dist/pcm-agents/p-DkeaAFic.js +2 -0
  225. package/dist/pcm-agents/p-DkeaAFic.js.map +1 -0
  226. package/dist/pcm-agents/p-f5f96853.entry.js +245 -0
  227. package/dist/pcm-agents/p-f5f96853.entry.js.map +1 -0
  228. package/dist/pcm-agents/pcm-agents.esm.js +1 -1
  229. package/dist/pcm-agents/pcm-agents.esm.js.map +1 -1
  230. package/dist/pcm-agents/pcm-message.entry.esm.js.map +1 -1
  231. package/dist/pcm-agents/pcm-mnms-video-modal.entry.esm.js.map +1 -1
  232. package/dist/pcm-agents/pcm-mnms-zp-modal.entry.esm.js.map +1 -1
  233. package/dist/store/auth.store.js.map +1 -1
  234. package/dist/store/config.store.js.map +1 -1
  235. package/dist/types/components/pcm-mnms-modal/pcm-mnms-modal.d.ts +9 -4
  236. package/dist/types/components/pcm-mnms-zp-modal/pcm-mnms-zp-modal.d.ts +9 -4
  237. package/dist/types/components/pcm-mobile-input-btn/pcm-mobile-input-btn.d.ts +36 -0
  238. package/dist/types/components/pcm-mobile-input-btn/uploadNumberSDK.d.ts +9 -0
  239. package/dist/types/components/pcm-mobile-upload-btn/pcm-mobile-upload-btn.d.ts +44 -0
  240. package/dist/types/components/pcm-mobile-upload-btn/uploadNumberSDK.d.ts +9 -0
  241. package/dist/types/components/pcm-time-count-down/pcm-time-count-down.d.ts +15 -0
  242. package/dist/types/components/pcm-upload/pcm-upload.d.ts +54 -0
  243. package/dist/types/components/pcm-upload/type.d.ts +4 -0
  244. package/dist/types/components.d.ts +798 -30
  245. package/dist/types/stencil-public-runtime.d.ts +1 -1
  246. package/dist/types/utils/env.d.ts +2 -0
  247. package/dist/types/utils/utils.d.ts +30 -12
  248. package/package.json +70 -69
  249. package/dist/cjs/app-globals-BIO4q6tX.js +0 -5487
  250. package/dist/cjs/app-globals-BIO4q6tX.js.map +0 -1
  251. package/dist/cjs/exports-Dc-pQh4A.js +0 -4087
  252. package/dist/cjs/exports-Dc-pQh4A.js.map +0 -1
  253. package/dist/cjs/index-C_qhED9Z.js +0 -1538
  254. package/dist/cjs/index-C_qhED9Z.js.map +0 -1
  255. package/dist/cjs/index-CvEfNyEj.js.map +0 -1
  256. package/dist/cjs/pcm-1zhanshi-mnms-modal_17.cjs.entry.js.map +0 -1
  257. package/dist/cjs/sentry-reporter-BWFtw_aT.js.map +0 -1
  258. package/dist/components/p-75J0r72D.js +0 -4017
  259. package/dist/components/p-75J0r72D.js.map +0 -1
  260. package/dist/components/p-AYWZDCn8.js.map +0 -1
  261. package/dist/components/p-CR7WLzmM.js +0 -1303
  262. package/dist/components/p-CR7WLzmM.js.map +0 -1
  263. package/dist/components/p-CjbFHLT7.js.map +0 -1
  264. package/dist/components/p-D2Z8casl.js.map +0 -1
  265. package/dist/components/p-FjtoYPVY.js.map +0 -1
  266. package/dist/esm/app-globals-Chti62re.js.map +0 -1
  267. package/dist/esm/exports-Bs-zO1WZ.js +0 -4017
  268. package/dist/esm/exports-Bs-zO1WZ.js.map +0 -1
  269. package/dist/esm/index-Bq0K-WqZ.js +0 -1528
  270. package/dist/esm/index-Bq0K-WqZ.js.map +0 -1
  271. package/dist/esm/index-GyOE8SlD.js.map +0 -1
  272. package/dist/esm/pcm-1zhanshi-mnms-modal_17.entry.js.map +0 -1
  273. package/dist/esm/sentry-reporter-BFBS363a.js.map +0 -1
  274. package/dist/pcm-agents/p-2Gpw8rvH.js +0 -2
  275. package/dist/pcm-agents/p-2Gpw8rvH.js.map +0 -1
  276. package/dist/pcm-agents/p-3608c0c6.entry.js.map +0 -1
  277. package/dist/pcm-agents/p-60d7a0b0.entry.js +0 -2
  278. package/dist/pcm-agents/p-60d7a0b0.entry.js.map +0 -1
  279. package/dist/pcm-agents/p-9e6efc2d.entry.js +0 -2
  280. package/dist/pcm-agents/p-9e6efc2d.entry.js.map +0 -1
  281. package/dist/pcm-agents/p-BUV0S8Cc.js +0 -2
  282. package/dist/pcm-agents/p-BUV0S8Cc.js.map +0 -1
  283. package/dist/pcm-agents/p-Bq0K-WqZ.js +0 -3
  284. package/dist/pcm-agents/p-Bq0K-WqZ.js.map +0 -1
  285. package/dist/pcm-agents/p-Bs-zO1WZ.js +0 -2
  286. package/dist/pcm-agents/p-Bs-zO1WZ.js.map +0 -1
  287. package/dist/pcm-agents/p-CeRTfvY9.js +0 -2
  288. package/dist/pcm-agents/p-CeRTfvY9.js.map +0 -1
  289. package/dist/pcm-agents/p-e6c87a78.entry.js +0 -2
  290. package/dist/pcm-agents/p-e6c87a78.entry.js.map +0 -1
  291. /package/dist/types/{code/agents-sdk → Users/debugksir/Documents/pcm/sdk}/packages/pcm-agents/.stencil/store/auth.store.d.ts +0 -0
  292. /package/dist/types/{code/agents-sdk → Users/debugksir/Documents/pcm/sdk}/packages/pcm-agents/.stencil/store/config.store.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"file":"pcm-1zhanshi-mnms-modal.pcm-app-chat-modal.pcm-button.pcm-card.pcm-chat-message.pcm-drawer.pcm-hr-chat-modal.pcm-htws-modal.pcm-hyzj-modal.pcm-jd-modal.pcm-jlpp-modal.pcm-mnct-modal.pcm-mnms-modal.pcm-mobile-input-btn.pcm-mobile-upload-btn.pcm-msbg-modal.pcm-qgqjl-modal.pcm-time-count-down.pcm-upload.pcm-zsk-chat-modal.pcm-zygh-modal.entry.cjs.js","mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","names":["globalCss","authStore","configStore","ErrorEventBus","verifyApiKey","h","markdownCss","uploadFileToBackend","SentryReporter","sendHttpRequest","Message","encode","Encoder","encode$1","uploadNumberSDK","MobileUploadBtn","PCM_DOMAIN","isMobile","index","FileUploadState","formatFileSize"],"sources":["src/components/pcm-1zhanshi-mnms-modal/pcm-1zhanshi-mnms-modal.css?tag=pcm-1zhanshi-mnms-modal&encapsulation=shadow","src/global/global.css?tag=pcm-1zhanshi-mnms-modal&encapsulation=shadow","src/components/pcm-1zhanshi-mnms-modal/pcm-1zhanshi-mnms-modal.tsx","node_modules/.pnpm/marked@9.1.6/node_modules/marked/lib/marked.esm.js","src/components/pcm-app-chat-modal/pcm-app-chat-modal.css?tag=pcm-app-chat-modal&encapsulation=shadow","src/global/markdown.css?tag=pcm-app-chat-modal&encapsulation=shadow","src/components/pcm-button/pcm-button.css?tag=pcm-button&encapsulation=shadow","src/components/pcm-button/pcm-button.tsx","src/components/pcm-card/pcm-card.css?tag=pcm-card&encapsulation=shadow","node_modules/.pnpm/marked-extended-tables@2.0.1_marked@9.1.6/node_modules/marked-extended-tables/lib/index.cjs","src/global/markdown.css?tag=pcm-chat-message&encapsulation=shadow","src/components/pcm-chat-message/pcm-chat-message.css?tag=pcm-chat-message&encapsulation=shadow","src/components/pcm-drawer/pcm-drawer.css?tag=pcm-drawer&encapsulation=shadow","src/components/pcm-drawer/pcm-drawer.tsx","src/components/pcm-hr-chat-modal/pcm-hr-chat-modal.css?tag=pcm-hr-chat-modal&encapsulation=shadow","src/components/pcm-htws-modal/pcm-htws-modal.css?tag=pcm-htws-modal&encapsulation=shadow","src/global/global.css?tag=pcm-htws-modal&encapsulation=shadow","src/components/pcm-htws-modal/pcm-htws-modal.tsx","src/components/pcm-hyzj-modal/pcm-hyzj-modal.css?tag=pcm-hyzj-modal&encapsulation=shadow","src/global/global.css?tag=pcm-hyzj-modal&encapsulation=shadow","src/components/pcm-hyzj-modal/pcm-hyzj-modal.tsx","src/components/pcm-jd-modal/pcm-jd-modal.css?tag=pcm-jd-modal&encapsulation=shadow","src/global/global.css?tag=pcm-jd-modal&encapsulation=shadow","src/components/pcm-jd-modal/pcm-jd-modal.tsx","src/components/pcm-jlpp-modal/pcm-jlpp-modal.css?tag=pcm-jlpp-modal&encapsulation=shadow","src/global/global.css?tag=pcm-jlpp-modal&encapsulation=shadow","src/components/pcm-jlpp-modal/pcm-jlpp-modal.tsx","src/components/pcm-mnct-modal/pcm-mnct-modal.css?tag=pcm-mnct-modal&encapsulation=shadow","src/global/global.css?tag=pcm-mnct-modal&encapsulation=shadow","src/components/pcm-mnct-modal/pcm-mnct-modal.tsx","src/components/pcm-mnms-modal/pcm-mnms-modal.css?tag=pcm-mnms-modal&encapsulation=shadow","src/global/global.css?tag=pcm-mnms-modal&encapsulation=shadow","src/components/pcm-mnms-modal/pcm-mnms-modal.tsx","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/Charset.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/utils.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/Mode.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/mask.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/ECLevel.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/ECB.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/ECBlocks.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/Version.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/reedsolomon/Polynomial.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/reedsolomon/GaloisField.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/encoding/index.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/BitArray.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/ByteMatrix.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/encoder/utils/matrix.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/encoder/BlockPair.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/reedsolomon/Encoder.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/encoder/utils/encoder.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/image/utils/lzw/Dict.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/image/utils/lzw/DictStream.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/image/utils/lzw/index.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/image/utils/ByteStream.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/image/utils/Base64Stream.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/common/image/GIFImage.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/encoder/Encoded.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/encoder/utils/asserts.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/encoder/Encoder.js","node_modules/.pnpm/@nuintun+qrcode@5.0.2/node_modules/@nuintun/qrcode/esm/encoder/segments/Byte.js","src/components/pcm-mobile-input-btn/uploadNumberSDK.ts","src/components/pcm-mobile-input-btn/pcm-mobile-input-btn.css?tag=pcm-mobile-input-btn&encapsulation=shadow","src/global/global.css?tag=pcm-mobile-input-btn&encapsulation=shadow","src/components/pcm-mobile-input-btn/pcm-mobile-input-btn.tsx","src/components/pcm-mobile-upload-btn/uploadNumberSDK.ts","src/components/pcm-mobile-upload-btn/pcm-mobile-upload-btn.css?tag=pcm-mobile-upload-btn&encapsulation=shadow","src/global/global.css?tag=pcm-mobile-upload-btn&encapsulation=shadow","src/components/pcm-mobile-upload-btn/pcm-mobile-upload-btn.tsx","src/components/pcm-msbg-modal/pcm-msbg-modal.css?tag=pcm-msbg-modal&encapsulation=shadow","src/global/global.css?tag=pcm-msbg-modal&encapsulation=shadow","src/components/pcm-msbg-modal/pcm-msbg-modal.tsx","src/components/pcm-qgqjl-modal/pcm-qgqjl-modal.css?tag=pcm-qgqjl-modal&encapsulation=shadow","src/global/global.css?tag=pcm-qgqjl-modal&encapsulation=shadow","src/components/pcm-qgqjl-modal/pcm-qgqjl-modal.tsx","src/components/pcm-time-count-down/pcm-time-count-down.css?tag=pcm-time-count-down&encapsulation=shadow","src/global/global.css?tag=pcm-time-count-down&encapsulation=shadow","src/components/pcm-time-count-down/pcm-time-count-down.tsx","src/components/pcm-upload/pcm-upload.css?tag=pcm-upload&encapsulation=shadow","src/global/global.css?tag=pcm-upload&encapsulation=shadow","src/components/pcm-upload/pcm-upload.tsx","src/components/pcm-zsk-chat-modal/pcm-zsk-chat-modal.css?tag=pcm-zsk-chat-modal&encapsulation=shadow","src/global/global.css?tag=pcm-zygh-modal&encapsulation=shadow","src/components/pcm-zygh-modal/pcm-zygh-modal.css?tag=pcm-zygh-modal&encapsulation=shadow","src/components/pcm-zygh-modal/pcm-zygh-modal.tsx"],"sourcesContent":["",":host {\n font-size: 16px;\n}\n\n/* 模态框基础样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* 全屏模式下的overlay样式 - 改为基于父组件 */\n.fullscreen-overlay {\n padding: 0;\n background-color: rgba(0, 0, 0, 0.7);\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: calc(100% - 10px);\n}\n\n.modal-container {\n background-color: #fff;\n border-radius: 8px;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n transition: all 0.3s ease-out;\n overflow: hidden;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 600px;\n min-width: 320px;\n}\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 10px 0px 0px 0px;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n}\n\n/* 模态框头部样式 */\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n\n/* 文件上传区域通用样式 */\n.upload-area {\n cursor: pointer;\n width: 100%;\n}\n\n\n.upload-placeholder {\n transition: all 0.3s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: rgba(0, 0, 0, 0.02);\n border: 1px dashed #d9d9d9;\n border-radius: 8px;\n}\n\n.upload-placeholder:hover {\n border: 1px dashed #1890ff;\n}\n\n.upload-placeholder img {\n margin-top: 8px;\n width: 50px;\n height: 50px;\n}\n\n.upload-placeholder .upload-text {\n margin: 4px 0;\n color: #332F39;\n font-size: 14px;\n}\n\n.upload-placeholder .upload-hint {\n font-size: 14px;\n color: #949AA5;\n margin-top: 8px;\n padding: 0px 10px;\n text-align: center;\n}\n\n\n/* 文件项样式 */\n.file-item {\n position: relative;\n padding: 16px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n transition: border-color 0.3s;\n cursor: pointer;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.file-item:hover {\n border-color: #0D75FB;\n}\n\n.file-item-content {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.file-icon {\n color: #0D75FB;\n flex-shrink: 0;\n}\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n.remove-file {\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n margin-left: 8px;\n border-radius: 4px;\n transition: all 0.2s;\n min-width: 30px;\n min-height: 30px;\n}\n\n.remove-file:hover {\n background-color: #f1f5f9;\n color: #475569;\n}\n\n.file-input {\n display: none;\n}\n\n\n\n/* 输入容器样式 */\n.input-container {\n padding: 20px;\n display: flex;\n flex-direction: column;\n height: calc(100% - 50px);\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;\n /* 减去header高度 */\n overflow-y: auto;\n}\n\n.input-container h3 {\n margin-top: 0;\n margin-bottom: 20px;\n font-size: 18px;\n color: #333;\n text-align: center;\n}\n\n/* JD输入区域样式 */\n.jd-input-section {\n margin-bottom: 20px;\n}\n\n.jd-input-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.job-description-textarea {\n width: calc(100% - 16px);\n border: 1px solid #ddd;\n border-radius: 4px;\n resize: vertical;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n transition: border-color 0.3s;\n padding: 8px;\n}\n\n.job-description-textarea:focus {\n outline: none;\n border-color: #1890ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n/* 简历上传区域样式 */\n.resume-upload-section {\n margin-bottom: 20px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.resume-upload-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n align-self: flex-start;\n}\n\n\n/* 提交按钮通用样式 */\n.submit-button {\n margin-top: 10px;\n padding: 10px 30px;\n background: #0D75FB;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s ease;\n width: 100%;\n max-width: 400px;\n align-self: center;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n.submit-button:disabled {\n background-color: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.25);\n cursor: not-allowed;\n}\n\n\n\n/* AI免责声明和备案信息样式 */\n.ai-disclaimer {\n margin-top: 16px;\n text-align: center;\n font-size: 12px;\n color: #999;\n line-height: 1.5;\n}\n\n.ai-disclaimer p {\n margin: 4px 0;\n}\n\n.beian-info {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ai-disclaimer a {\n color: #666;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.ai-disclaimer a:hover {\n color: #1890ff;\n text-decoration: underline;\n}\n\n/* 添加加载状态的样式 */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n }\n \n .loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--pcm-primary-color, #1890ff);\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n }\n \n .loading-text {\n font-size: 16px;\n color: var(--pcm-text-color, #333);\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n ","import { Component, Prop, h, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\nimport {FileUploadResponse, verifyApiKey } from '../../utils/utils';\nimport { \n StreamCompleteEventData, \n ConversationStartEventData, \n InterviewCompleteEventData,\n RecordingErrorEventData,\n} from '../../interfaces/events';\nimport { ErrorEventBus, ErrorEventDetail } from '../../utils/error-event';\nimport { authStore } from '../../../store/auth.store';\nimport { configStore } from '../../../store/config.store';\n\n/**\n * 模拟面试\n */\n\n@Component({\n tag: 'pcm-1zhanshi-mnms-modal',\n styleUrls: ['pcm-1zhanshi-mnms-modal.css', '../../global/global.css'],\n shadow: true,\n})\nexport class ZhanshiMnmsModal {\n /**\n * 模态框标题\n */\n @Prop() modalTitle: string = '模拟面试';\n\n /**\n * SDK鉴权密钥\n */\n @Prop({ attribute: 'token' }) token!: string;\n\n /**\n * 是否显示聊天模态框\n */\n @Prop({ mutable: true }) isOpen: boolean = false;\n\n /**\n * 当点击模态框关闭时触发\n */\n @Event() modalClosed: EventEmitter<void>;\n\n /**\n * 应用图标URL\n */\n @Prop() icon?: string;\n\n /**\n * 聊天框的页面层级\n */\n @Prop() zIndex?: number = 1000;\n\n /**\n * 是否展示顶部标题栏\n */\n @Prop() isShowHeader: boolean = true;\n\n /**\n * 是否展示右上角的关闭按钮\n */\n @Prop() isNeedClose: boolean = true;\n\n /**\n * 会话ID,传入继续对话,否则创建新会话\n */\n @Prop({ mutable: true }) conversationId?: string;\n\n /**\n * 默认查询文本\n */\n @Prop() defaultQuery: string = '请开始模拟面试';\n\n /**\n * 视频录制最大时长(秒)默认120\n */\n @Prop() maxRecordingTime: number = 120;\n\n /**\n * 是否以全屏模式打开,移动端建议设置为true\n */\n @Prop() fullscreen: boolean = false;\n\n /**\n * 自定义输入参数,传入customInputs.job_info时,会隐藏JD输入区域<br>\n */\n @Prop() customInputs: Record<string, string> = {};\n\n /**\n * 上传成功事件\n */\n @Event() uploadSuccess: EventEmitter<FileUploadResponse>;\n\n /**\n * 流式输出完成事件\n */\n @Event() streamComplete: EventEmitter<StreamCompleteEventData>;\n\n /**\n * 新会话开始的回调,只会在一轮对话开始时触发一次\n */\n @Event() conversationStart: EventEmitter<ConversationStartEventData>;\n\n /**\n * 当聊天完成时触发\n */\n @Event() interviewComplete: EventEmitter<InterviewCompleteEventData>;\n\n /**\n * SDK密钥验证失败事件\n */\n @Event() tokenInvalid: EventEmitter<void>;\n\n /**\n * 错误事件\n */\n @Event() someErrorEvent: EventEmitter<ErrorEventDetail>;\n\n /**\n * 录制错误事件\n */\n @Event() recordingError: EventEmitter<RecordingErrorEventData>;\n\n @State() selectedFile: File | null = null;\n @State() isUploading: boolean = false;\n @State() uploadedFileInfo: FileUploadResponse | null = null;\n @State() showChatModal: boolean = false;\n\n // 使用 @Element 装饰器获取组件的 host 元素\n @Element() hostElement: HTMLElement;\n\n @State() jobDescription: string = '';\n @State() isSubmitting: boolean = false;\n\n private tokenInvalidListener: () => void;\n private removeErrorListener: () => void;\n\n @Watch('token')\n handleTokenChange(newToken: string) {\n // 当传入的 token 变化时,更新 authStore 中的 token\n if (newToken && newToken !== authStore.getToken()) {\n authStore.setToken(newToken);\n }\n }\n\n componentWillLoad() {\n\n // 将 zIndex 存入配置缓存\n if (this.zIndex) {\n configStore.setItem('modal-zIndex', this.zIndex);\n }\n\n if (this.token) {\n authStore.setToken(this.token);\n }\n \n // 添加全局token无效事件监听器\n this.tokenInvalidListener = () => {\n this.tokenInvalid.emit();\n };\n // 添加全局错误监听\n this.removeErrorListener = ErrorEventBus.addErrorListener((errorDetail) => {\n this.someErrorEvent.emit(errorDetail);\n });\n document.addEventListener('pcm-token-invalid', this.tokenInvalidListener);\n }\n\n disconnectedCallback() {\n // 组件销毁时移除事件监听器\n document.removeEventListener('pcm-token-invalid', this.tokenInvalidListener);\n // 移除错误监听器\n if (this.removeErrorListener) {\n this.removeErrorListener();\n }\n }\n\n private handleClose = () => {\n this.modalClosed.emit();\n };\n\n\n @Watch('isOpen')\n async handleIsOpenChange(newValue: boolean) {\n if (!newValue) {\n // 重置状态\n this.showChatModal = false;\n this.jobDescription = '';\n } else {\n await verifyApiKey(this.token);\n this.showChatModal = true;\n }\n }\n\n\n render() {\n if (!this.isOpen) return null;\n\n const modalStyle = {\n zIndex: String(this.zIndex)\n };\n\n const containerClass = {\n 'modal-container': true,\n 'fullscreen': this.fullscreen,\n 'pc-layout': true,\n };\n\n const overlayClass = {\n 'modal-overlay': true,\n 'fullscreen-overlay': this.fullscreen\n };\n\n // 显示加载状态\n const isLoading = this.conversationId && !this.showChatModal;\n\n\n return (\n <div class={overlayClass} style={modalStyle}>\n <div class={containerClass}>\n {this.isShowHeader && (\n <div class=\"modal-header\">\n <div class=\"header-left\">\n {this.icon && <img src={this.icon} class=\"header-icon\" alt=\"应用图标\" />}\n <div>{this.modalTitle}</div>\n </div>\n {this.isNeedClose && (\n <button class=\"close-button\" onClick={this.handleClose}>\n <span>×</span>\n </button>\n )}\n </div>\n )}\n\n {/* 加载状态 - 在有会话ID但聊天模态框尚未显示时展示 */}\n {isLoading && (\n <div class=\"loading-container\">\n <div class=\"loading-spinner\"></div>\n <p class=\"loading-text\">正在加载对话...</p>\n </div>\n )}\n\n {/* 聊天界面 - 在显示聊天模态框时显示 */}\n {this.showChatModal && (\n <div >\n <pcm-app-chat-modal\n isOpen={true}\n modalTitle={this.modalTitle}\n icon={this.icon}\n isShowHeader={this.isShowHeader}\n isNeedClose={this.isShowHeader}\n fullscreen={this.fullscreen}\n botId=\"3022316191018903\"\n conversationId={this.conversationId}\n defaultQuery={this.defaultQuery}\n maxRecordingTime={this.maxRecordingTime}\n enableTTS={false}\n customInputs={this.conversationId ? {} : {\n ...this.customInputs,\n file_url: this.uploadedFileInfo?.cos_key,\n file_name: this.uploadedFileInfo?.file_name,\n }}\n interviewMode='video'\n ></pcm-app-chat-modal>\n </div>\n )}\n </div>\n </div>\n );\n }\n} ","/**\n * marked v9.1.6 - a markdown parser\n * Copyright (c) 2011-2023, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n/**\n * Gets the original marked default options.\n */\nfunction _getDefaults() {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null\n };\n}\nlet _defaults = _getDefaults();\nfunction changeDefaults(newDefaults) {\n _defaults = newDefaults;\n}\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = new RegExp(escapeTest.source, 'g');\nconst escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\nconst escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\nconst escapeReplacements = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n }\n else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html;\n}\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon')\n return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n regex = typeof regex === 'string' ? regex : regex.source;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = typeof val === 'object' && 'source' in val ? val.source : val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\nfunction cleanUrl(href) {\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n }\n catch (e) {\n return null;\n }\n return href;\n}\nconst noopTest = { exec: () => null };\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\')\n escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n }\n else {\n // add space before unescaped |\n return ' |';\n }\n }), cells = row.split(/ \\|/);\n let i = 0;\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells[cells.length - 1].trim()) {\n cells.pop();\n }\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n }\n else {\n while (cells.length < count)\n cells.push('');\n }\n }\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n }\n else if (currChar !== c && invert) {\n suffLen++;\n }\n else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n }\n else if (str[i] === b[0]) {\n level++;\n }\n else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction outputLink(cap, link, raw, lexer) {\n const href = link.href;\n const title = link.title ? escape(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n if (cap[0].charAt(0) !== '!') {\n lexer.state.inLink = true;\n const token = {\n type: 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text)\n };\n lexer.state.inLink = false;\n return token;\n }\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape(text)\n };\n}\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n if (matchIndentToCode === null) {\n return text;\n }\n const indentToCode = matchIndentToCode[1];\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n const [indentInNode] = matchIndentInNode;\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n })\n .join('\\n');\n}\n/**\n * Tokenizer\n */\nclass _Tokenizer {\n options;\n // TODO: Fix this rules type\n rules;\n lexer;\n constructor(options) {\n this.options = options || _defaults;\n }\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n }\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text\n };\n }\n }\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline._escapes, '$1') : cap[2],\n text\n };\n }\n }\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n }\n else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = rtrim(cap[0].replace(/^ *>[ \\t]?/gm, ''), '\\n');\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n const tokens = this.lexer.blockTokens(text);\n this.lexer.state.top = top;\n return {\n type: 'blockquote',\n raw: cap[0],\n tokens,\n text\n };\n }\n }\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n const list = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n // Get next list item\n const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);\n let raw = '';\n let itemContents = '';\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n let line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, (t) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n }\n else {\n indent = cap[2].search(/[^ ]/); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n let blankLine = false;\n if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`);\n const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`);\n const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`);\n const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n nextLine = rawLine;\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');\n }\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n // Horizontal rule found\n if (hrRegex.test(src)) {\n break;\n }\n if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLine.slice(indent);\n }\n else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n // paragraph continuation unless last line was a different block level element\n if (line.search(/[^ ]/) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += '\\n' + nextLine;\n }\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLine.slice(indent);\n }\n }\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n }\n else if (/\\n *\\n *$/.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n let istask = null;\n let ischecked;\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: []\n });\n list.raw += raw;\n }\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n list.items[list.items.length - 1].raw = raw.trimEnd();\n list.items[list.items.length - 1].text = itemContents.trimEnd();\n list.raw = list.raw.trimEnd();\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (let i = 0; i < list.items.length; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n if (!list.loose) {\n // Check if list should be loose\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\\n.*\\n/.test(t.raw));\n list.loose = hasMultipleLineBreaks;\n }\n }\n // Set all items to loose if list is loose\n if (list.loose) {\n for (let i = 0; i < list.items.length; i++) {\n list.items[i].loose = true;\n }\n }\n return list;\n }\n }\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0]\n };\n return token;\n }\n }\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline._escapes, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline._escapes, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title\n };\n }\n }\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n if (!/[:|]/.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n const item = {\n type: 'table',\n raw: cap[0],\n header: splitCells(cap[1]).map(c => {\n return { text: c, tokens: [] };\n }),\n align: cap[2].replace(/^\\||\\| *$/g, '').split('|'),\n rows: cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : []\n };\n if (item.header.length === item.align.length) {\n let l = item.align.length;\n let i, j, k, row;\n for (i = 0; i < l; i++) {\n const align = item.align[i];\n if (align) {\n if (/^ *-+: *$/.test(align)) {\n item.align[i] = 'right';\n }\n else if (/^ *:-+: *$/.test(align)) {\n item.align[i] = 'center';\n }\n else if (/^ *:-+ *$/.test(align)) {\n item.align[i] = 'left';\n }\n else {\n item.align[i] = null;\n }\n }\n }\n l = item.rows.length;\n for (i = 0; i < l; i++) {\n item.rows[i] = splitCells(item.rows[i], item.header.length).map(c => {\n return { text: c, tokens: [] };\n });\n }\n // parse child tokens inside headers and cells\n // header child tokens\n l = item.header.length;\n for (j = 0; j < l; j++) {\n item.header[j].tokens = this.lexer.inline(item.header[j].text);\n }\n // cell child tokens\n l = item.rows.length;\n for (j = 0; j < l; j++) {\n row = item.rows[j];\n for (k = 0; k < row.length; k++) {\n row[k].tokens = this.lexer.inline(row[k].text);\n }\n }\n return item;\n }\n }\n }\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n }\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n }\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape(cap[1])\n };\n }\n }\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {\n this.lexer.state.inLink = true;\n }\n else if (this.lexer.state.inLink && /^<\\/a>/i.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n }\n else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0]\n };\n }\n }\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n }\n else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n if (link) {\n href = link[1];\n title = link[3];\n }\n }\n else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n }\n else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0], this.lexer);\n }\n }\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0], this.lexer);\n }\n }\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match)\n return;\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u))\n return;\n const nextChar = match[1] || match[2] || '';\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim)\n continue; // skip single * in __abc*abc__\n rLength = [...rDelim].length;\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n delimTotal -= rLength;\n if (delimTotal > 0)\n continue; // Haven't found enough closing delimiters\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n }\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n }\n autolink(src) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(cap[1]);\n href = 'mailto:' + text;\n }\n else {\n text = escape(cap[1]);\n href = text;\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n url(src) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(cap[0]);\n href = 'mailto:' + text;\n }\n else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n }\n else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n inlineText(src) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (this.lexer.state.inRawBlock) {\n text = cap[0];\n }\n else {\n text = escape(cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n}\n\n/**\n * Block-Level Grammar\n */\n// Not all rules are defined in the object literal\n// @ts-expect-error\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,\n hr: /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n + '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/,\n table: noopTest,\n lheading: /^(?!bull )((?:.|\\n(?!\\s*?\\n|bull ))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\nblock._label = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.listItemStart = edit(/^( *)(bull) */)\n .replace('bull', block.bullet)\n .getRegex();\nblock.list = edit(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\nblock.lheading = edit(block.lheading)\n .replace(/bull/g, block.bullet) // lists can interrupt\n .getRegex();\nblock.paragraph = edit(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\nblock.blockquote = edit(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n/**\n * Normal Block Grammar\n */\nblock.normal = { ...block };\n/**\n * GFM Block Grammar\n */\nblock.gfm = {\n ...block.normal,\n table: '^ *([^\\\\n ].*)\\\\n' // Header\n + ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n};\nblock.gfm.table = edit(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\nblock.gfm.paragraph = edit(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('table', block.gfm.table) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\nblock.pedantic = {\n ...block.normal,\n html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest,\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n};\n/**\n * Inline-Level Grammar\n */\n// Not all rules are defined in the object literal\n// @ts-expect-error\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest,\n tag: '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>',\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(ref)\\]/,\n nolink: /^!?\\[(ref)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:((?!\\*)[punct])|[^\\s*]))|^_+(?:((?!_)[punct])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // | Skip orphan inside strong | Consume to delim | (1) #*** | (2) a***#, a*** | (3) #***a, ***a | (4) ***# | (5) #***# | (6) a***a\n rDelimAst: /^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])/,\n rDelimUnd: /^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])/ // ^- Not allowed for _\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^((?![*_])[\\spunctuation])/\n};\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\ninline._punctuation = '\\\\p{P}$+<=>`^|~';\ninline.punctuation = edit(inline.punctuation, 'u').replace(/punctuation/g, inline._punctuation).getRegex();\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^[\\]]*?\\]\\([^\\(\\)]*?\\)|`[^`]*?`|<[^<>]*?>/g;\ninline.anyPunctuation = /\\\\[punct]/g;\ninline._escapes = /\\\\([punct])/g;\ninline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();\ninline.emStrong.lDelim = edit(inline.emStrong.lDelim, 'u')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\ninline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'gu')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\ninline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'gu')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\ninline.anyPunctuation = edit(inline.anyPunctuation, 'gu')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\ninline._escapes = edit(inline._escapes, 'gu')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\ninline.tag = edit(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\ninline.link = edit(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\ninline.reflink = edit(inline.reflink)\n .replace('label', inline._label)\n .replace('ref', block._label)\n .getRegex();\ninline.nolink = edit(inline.nolink)\n .replace('ref', block._label)\n .getRegex();\ninline.reflinkSearch = edit(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n/**\n * Normal Inline Grammar\n */\ninline.normal = { ...inline };\n/**\n * Pedantic Inline Grammar\n */\ninline.pedantic = {\n ...inline.normal,\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n};\n/**\n * GFM Inline Grammar\n */\ninline.gfm = {\n ...inline.normal,\n escape: edit(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/\n};\ninline.gfm.url = edit(inline.gfm.url, 'i')\n .replace('email', inline.gfm._extended_email)\n .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\ninline.breaks = {\n ...inline.gfm,\n br: edit(inline.br).replace('{2,}', '*').getRegex(),\n text: edit(inline.gfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n};\n\n/**\n * Block Lexer\n */\nclass _Lexer {\n tokens;\n options;\n state;\n tokenizer;\n inlineQueue;\n constructor(options) {\n // TokenList cannot be created in one go\n // @ts-expect-error\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true\n };\n const rules = {\n block: block.normal,\n inline: inline.normal\n };\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n }\n else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n }\n else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline\n };\n }\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new _Lexer(options);\n return lexer.lex(src);\n }\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new _Lexer(options);\n return lexer.inlineTokens(src);\n }\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n');\n this.blockTokens(src, this.tokens);\n let next;\n while (next = this.inlineQueue.shift()) {\n this.inlineTokens(next.src, next.tokens);\n }\n return this.tokens;\n }\n blockTokens(src, tokens = []) {\n if (this.options.pedantic) {\n src = src.replace(/\\t/g, ' ').replace(/^ +$/gm, '');\n }\n else {\n src = src.replace(/^( *)(\\t+)/gm, (_, leading, tabs) => {\n return leading + ' '.repeat(tabs.length);\n });\n }\n let token;\n let lastToken;\n let cutSrc;\n let lastParagraphClipped;\n while (src) {\n if (this.options.extensions\n && this.options.extensions.block\n && this.options.extensions.block.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.raw.length === 1 && tokens.length > 0) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n tokens[tokens.length - 1].raw += '\\n';\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n lastToken = tokens[tokens.length - 1];\n if (lastParagraphClipped && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n lastParagraphClipped = (cutSrc.length !== src.length);\n src = src.substring(token.raw.length);\n continue;\n }\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n }\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n let token, lastToken, cutSrc;\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n // extensions\n if (this.options.extensions\n && this.options.extensions.inline\n && this.options.extensions.inline.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n }\n}\n\n/**\n * Renderer\n */\nclass _Renderer {\n options;\n constructor(options) {\n this.options = options || _defaults;\n }\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/^\\S*/)?.[0];\n code = code.replace(/\\n$/, '') + '\\n';\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n';\n }\n return '<pre><code class=\"language-'\n + escape(lang)\n + '\">'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n';\n }\n blockquote(quote) {\n return `<blockquote>\\n${quote}</blockquote>\\n`;\n }\n html(html, block) {\n return html;\n }\n heading(text, level, raw) {\n // ignore IDs\n return `<h${level}>${text}</h${level}>\\n`;\n }\n hr() {\n return '<hr>\\n';\n }\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul';\n const startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n listitem(text, task, checked) {\n return `<li>${text}</li>\\n`;\n }\n checkbox(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\">';\n }\n paragraph(text) {\n return `<p>${text}</p>\\n`;\n }\n table(header, body) {\n if (body)\n body = `<tbody>${body}</tbody>`;\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n tablerow(content) {\n return `<tr>\\n${content}</tr>\\n`;\n }\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? `<${type} align=\"${flags.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n`;\n }\n /**\n * span level renderer\n */\n strong(text) {\n return `<strong>${text}</strong>`;\n }\n em(text) {\n return `<em>${text}</em>`;\n }\n codespan(text) {\n return `<code>${text}</code>`;\n }\n br() {\n return '<br>';\n }\n del(text) {\n return `<del>${text}</del>`;\n }\n link(href, title, text) {\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n image(href, title, text) {\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = `<img src=\"${href}\" alt=\"${text}\"`;\n if (title) {\n out += ` title=\"${title}\"`;\n }\n out += '>';\n return out;\n }\n text(text) {\n return text;\n }\n}\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nclass _TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n em(text) {\n return text;\n }\n codespan(text) {\n return text;\n }\n del(text) {\n return text;\n }\n html(text) {\n return text;\n }\n text(text) {\n return text;\n }\n link(href, title, text) {\n return '' + text;\n }\n image(href, title, text) {\n return '' + text;\n }\n br() {\n return '';\n }\n}\n\n/**\n * Parsing & Compiling\n */\nclass _Parser {\n options;\n renderer;\n textRenderer;\n constructor(options) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new _TextRenderer();\n }\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new _Parser(options);\n return parser.parse(tokens);\n }\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new _Parser(options);\n return parser.parseInline(tokens);\n }\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '';\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n const genericToken = token;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n const headingToken = token;\n out += this.renderer.heading(this.parseInline(headingToken.tokens), headingToken.depth, unescape(this.parseInline(headingToken.tokens, this.textRenderer)));\n continue;\n }\n case 'code': {\n const codeToken = token;\n out += this.renderer.code(codeToken.text, codeToken.lang, !!codeToken.escaped);\n continue;\n }\n case 'table': {\n const tableToken = token;\n let header = '';\n // header\n let cell = '';\n for (let j = 0; j < tableToken.header.length; j++) {\n cell += this.renderer.tablecell(this.parseInline(tableToken.header[j].tokens), { header: true, align: tableToken.align[j] });\n }\n header += this.renderer.tablerow(cell);\n let body = '';\n for (let j = 0; j < tableToken.rows.length; j++) {\n const row = tableToken.rows[j];\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.renderer.tablecell(this.parseInline(row[k].tokens), { header: false, align: tableToken.align[k] });\n }\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n const blockquoteToken = token;\n const body = this.parse(blockquoteToken.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n const listToken = token;\n const ordered = listToken.ordered;\n const start = listToken.start;\n const loose = listToken.loose;\n let body = '';\n for (let j = 0; j < listToken.items.length; j++) {\n const item = listToken.items[j];\n const checked = item.checked;\n const task = item.task;\n let itemBody = '';\n if (item.task) {\n const checkbox = this.renderer.checkbox(!!checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n }\n else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox + ' '\n });\n }\n }\n else {\n itemBody += checkbox + ' ';\n }\n }\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, !!checked);\n }\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n const htmlToken = token;\n out += this.renderer.html(htmlToken.text, htmlToken.block);\n continue;\n }\n case 'paragraph': {\n const paragraphToken = token;\n out += this.renderer.paragraph(this.parseInline(paragraphToken.tokens));\n continue;\n }\n case 'text': {\n let textToken = token;\n let body = textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text;\n while (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n textToken = tokens[++i];\n body += '\\n' + (textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '';\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n const ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n switch (token.type) {\n case 'escape': {\n const escapeToken = token;\n out += renderer.text(escapeToken.text);\n break;\n }\n case 'html': {\n const tagToken = token;\n out += renderer.html(tagToken.text);\n break;\n }\n case 'link': {\n const linkToken = token;\n out += renderer.link(linkToken.href, linkToken.title, this.parseInline(linkToken.tokens, renderer));\n break;\n }\n case 'image': {\n const imageToken = token;\n out += renderer.image(imageToken.href, imageToken.title, imageToken.text);\n break;\n }\n case 'strong': {\n const strongToken = token;\n out += renderer.strong(this.parseInline(strongToken.tokens, renderer));\n break;\n }\n case 'em': {\n const emToken = token;\n out += renderer.em(this.parseInline(emToken.tokens, renderer));\n break;\n }\n case 'codespan': {\n const codespanToken = token;\n out += renderer.codespan(codespanToken.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n const delToken = token;\n out += renderer.del(this.parseInline(delToken.tokens, renderer));\n break;\n }\n case 'text': {\n const textToken = token;\n out += renderer.text(textToken.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n}\n\nclass _Hooks {\n options;\n constructor(options) {\n this.options = options || _defaults;\n }\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess'\n ]);\n /**\n * Process markdown before marked\n */\n preprocess(markdown) {\n return markdown;\n }\n /**\n * Process HTML after marked is finished\n */\n postprocess(html) {\n return html;\n }\n}\n\nclass Marked {\n defaults = _getDefaults();\n options = this.setOptions;\n parse = this.#parseMarkdown(_Lexer.lex, _Parser.parse);\n parseInline = this.#parseMarkdown(_Lexer.lexInline, _Parser.parseInline);\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n constructor(...args) {\n this.use(...args);\n }\n /**\n * Run callback for every token\n */\n walkTokens(tokens, callback) {\n let values = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n values = values.concat(this.walkTokens(genericToken[childTokens], callback));\n });\n }\n else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n use(...args) {\n const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack };\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function (...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n }\n else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n }\n else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n }\n else {\n extensions.startBlock = [ext.start];\n }\n }\n else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n }\n else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n const rendererFunc = pack.renderer[prop];\n const rendererKey = prop;\n const prevRenderer = renderer[rendererKey];\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererKey] = (...args) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret || '';\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n const tokenizerFunc = pack.tokenizer[prop];\n const tokenizerKey = prop;\n const prevTokenizer = tokenizer[tokenizerKey];\n // Replace tokenizer with func to run extension, but fall back if false\n tokenizer[tokenizerKey] = (...args) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n const hooksFunc = pack.hooks[prop];\n const hooksKey = prop;\n const prevHook = hooks[hooksKey];\n if (_Hooks.passThroughHooks.has(prop)) {\n hooks[hooksKey] = (arg) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n return prevHook.call(hooks, ret);\n });\n }\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n }\n else {\n hooks[hooksKey] = (...args) => {\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function (token) {\n let values = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n this.defaults = { ...this.defaults, ...opts };\n });\n return this;\n }\n setOptions(opt) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n lexer(src, options) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n parser(tokens, options) {\n return _Parser.parse(tokens, options ?? this.defaults);\n }\n #parseMarkdown(lexer, parser) {\n return (src, options) => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n // Show warning if an extension set async to true but the parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n if (!opt.silent) {\n console.warn('marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.');\n }\n opt.async = true;\n }\n const throwError = this.#onError(!!opt.silent, !!opt.async);\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n if (opt.hooks) {\n opt.hooks.options = opt;\n }\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n .then(src => lexer(src, opt))\n .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n .then(tokens => parser(tokens, opt))\n .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n .catch(throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n const tokens = lexer(src, opt);\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n }\n catch (e) {\n return throwError(e);\n }\n };\n }\n #onError(silent, async) {\n return (e) => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escape(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n\nconst markedInstance = new Marked();\nfunction marked(src, opt) {\n return markedInstance.parse(src, opt);\n}\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function (options) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\n/**\n * Use Extension\n */\nmarked.use = function (...args) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n/**\n * Run callback for every token\n */\nmarked.walkTokens = function (tokens, callback) {\n return markedInstance.walkTokens(tokens, callback);\n};\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nconst options = marked.options;\nconst setOptions = marked.setOptions;\nconst use = marked.use;\nconst walkTokens = marked.walkTokens;\nconst parseInline = marked.parseInline;\nconst parse = marked;\nconst parser = _Parser.parse;\nconst lexer = _Lexer.lex;\n\nexport { _Hooks as Hooks, _Lexer as Lexer, Marked, _Parser as Parser, _Renderer as Renderer, _TextRenderer as TextRenderer, _Tokenizer as Tokenizer, _defaults as defaults, _getDefaults as getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };\n//# sourceMappingURL=marked.esm.js.map\n",":host {\n display: block;\n font-size: 16px;\n}\n\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n overflow-y: auto;\n padding: 20px;\n z-index: 1000;\n}\n\n/* 全屏模式下的overlay样式 */\n.fullscreen-overlay {\n padding: 0;\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: 100%;\n}\n\n.modal-container {\n background: white;\n border-radius: 8px;\n width: 100%;\n max-width: 900px;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* 确保内容区域也使用 flex 布局并占满剩余空间 */\n.modal-container.fullscreen>div:not(.modal-header):not(.initial-upload) {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden;\n /* 防止内容溢出 */\n height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 800px;\n /* height: 80vh; */\n /* max-height: 700px; */\n min-width: 320px;\n min-height: 400px;\n}\n\n.video-preview.placeholder {\n display: flex;\n justify-content: center;\n align-items: center;\n background: #EAEAEA;\n}\n\n.placeholder-status {\n color: #00000066;\n}\n\n.placeholder-status p{\n font-size: 16px;\n}\n\n.waiting-message p {\n margin: 0;\n font-size: 16px;\n color: white;\n font-weight: 500;\n}\n\n.recording-container {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.video-container {\n width: 100%;\n display: flex;\n flex-wrap: wrap;\n justify-content: center;\n margin-bottom: 20px;\n}\n\n.video-area {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.stop-recording-button {\n width: 100%;\n height: 100%;\n font-size: 16px;\n background: #f44336;\n border-radius: 6px;\n color: white;\n border: none;\n cursor: pointer;\n}\n\n.stop-recording-button:hover {\n background: #d32f2f;\n}\n\n.play-audio-container {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0;\n /* 防止头部被压缩 */\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.header-left div {\n font-size: 16px;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n.chat-container {\n background-image: url(https://pub.pincaimao.com/static/web/images/login/bg_login_m.png);\n background-size: 100%;\n height: 100%;\n border-radius: 0px 0px 8px 8px;\n}\n\n.chat-history {\n position: relative;\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n scroll-behavior: smooth;\n height: 400px;\n}\n\n/* 添加全屏模式下的样式 */\n.fullscreen .chat-history {\n height: auto;\n flex: 1 1 auto;\n}\n\n.message-input {\n padding: 16px;\n border-top: 1px solid #eee;\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.message-input input {\n flex: 1;\n padding: 8px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n outline: none;\n transition: border-color 0.2s ease;\n}\n\n.message-input input:focus {\n border-color: #bbb;\n}\n\n/* 消息样式 */\n.message {\n margin-bottom: 16px;\n opacity: 1;\n transition: opacity 0.3s ease;\n}\n\n.message-content {\n max-width: 70%;\n padding: 8px 12px;\n border-radius: 8px;\n word-break: break-word;\n}\n\n.message-content p {\n margin: 0;\n word-break: break-word;\n}\n\n.user-message {\n display: flex;\n justify-content: flex-end;\n}\n\n.agent-message {\n display: flex;\n justify-content: flex-start;\n}\n\n.user-message .message-content {\n background-color: #007bff;\n color: white;\n}\n\n.agent-message .message-content {\n background-color: #f1f1f1;\n}\n\n.message-time {\n font-size: 12px;\n color: #999;\n margin-top: 4px;\n display: block;\n}\n\n/* 发送按钮样式 */\n.send-button {\n width: 38px;\n height: 38px;\n border-radius: 16px;\n background: #0d75fb;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background-color 0.2s ease;\n}\n\n.send-button img {\n width: 24px;\n height: 24px;\n}\n\n.send-button:hover {\n background: #0a62d6;\n}\n\n.send-button.disabled {\n background: #d9d9d9;\n cursor: not-allowed;\n}\n\n.empty-state {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n color: #999;\n text-align: center;\n}\n\n.loading-container {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: rgba(255, 255, 255, 0.98);\n z-index: 1;\n opacity: 1;\n transition: opacity 0.3s ease;\n}\n\n.loading-container p {\n margin-top: 16px;\n color: #666;\n font-size: 14px;\n}\n\n.loading-spinner {\n width: 40px;\n height: 40px;\n border: 3px solid #f3f3f3;\n border-top: 3px solid #1890ff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n/* 修改 messages-wrapper 的样式 */\n.messages-wrapper {\n width: 100%;\n min-height: 100%;\n display: flex;\n flex-direction: column;\n /* 当内容少时,将内容放在底部 */\n justify-content: flex-end;\n}\n\n/* 当有很多消息时,取消固定在底部 */\n.messages-wrapper.has-overflow {\n justify-content: flex-start;\n}\n\n.suggested-questions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 16px;\n}\n\n.suggested-question {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background-color: #f3f4f6;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n color: #374151;\n transition: background-color 0.2s;\n}\n\n.suggested-question:hover {\n background-color: #e5e7eb;\n}\n\n.arrow-right {\n margin-left: 8px;\n}\n\n.loading-suggestions {\n display: flex;\n justify-content: center;\n padding: 16px;\n}\n\n.loading-spinner-small {\n width: 20px;\n height: 20px;\n border: 2px solid #e5e7eb;\n border-top-color: #6b7280;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n/* 添加上传按钮样式 */\n.upload-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #666;\n border-radius: 4px;\n transition: background-color 0.2s;\n}\n\n.upload-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.upload-button svg {\n width: 20px;\n height: 20px;\n}\n\n/* 隐藏原生文件输入框 */\n.file-input {\n display: none;\n}\n\n/* 添加文件名显示区域样式 */\n.selected-file {\n font-size: 12px;\n color: #666;\n margin-left: 8px;\n max-width: 150px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.input-wrapper {\n flex: 1;\n display: flex;\n align-items: center;\n border: 1px solid #ddd;\n border-radius: 4px;\n padding: 0 4px;\n background: white;\n}\n\n.input-wrapper input {\n border: none;\n flex: 1;\n padding: 8px;\n outline: none;\n}\n\n.input-wrapper:focus-within {\n border-color: #bbb;\n}\n\n/* 文件预览区域样式 */\n.file-preview {\n padding: 8px 16px;\n border-top: 1px solid #eee;\n background-color: #f9f9f9;\n}\n\n.recording-section {\n border-top: 1px solid #eee;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 10px 20px 0px 20px;\n border-radius: 14px 14px 0 0;\n flex: 0 0 auto;\n}\n\n.recording-section .video-preview {\n width: 100%;\n height: 200px;\n max-width: 400px;\n position: relative;\n margin-bottom: 10px;\n border: 1px solid #ddd;\n border-radius: 12px;\n overflow: hidden;\n}\n\n.recording-section video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n/* 修改 recording-status 样式 */\n.recording-status {\n position: absolute;\n top: 10px;\n left: 10px;\n background-color: rgba(0, 0, 0, 0.6);\n color: white;\n padding: 4px 8px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 14px;\n z-index: 2;\n}\n\n.recording-status .recording-dot {\n display: inline-block;\n width: 10px;\n height: 10px;\n background-color: red;\n border-radius: 50%;\n margin-right: 5px;\n animation: blink 1s infinite;\n}\n\n.recording-status.warning {\n color: #ff4d4f;\n animation: blink 1s infinite;\n}\n\n@keyframes blink {\n 0% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.5;\n }\n\n 100% {\n opacity: 1;\n }\n}\n\n.recording-section .stop-recording-button {\n background-color: #f44336;\n color: white;\n border: none;\n cursor: pointer;\n font-weight: bold;\n}\n\n.recording-section .stop-recording-button:hover {\n background-color: #d32f2f;\n}\n\n.fullscreen {\n width: 100vw;\n border-radius: 0;\n height: 100vh;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n\n.recording-controls {\n margin-top: 10px;\n height: 53px;\n width: 100%;\n max-width: 400px;\n display: flex;\n justify-content: center;\n}\n\n.recording-controls .waiting-message {\n text-align: center;\n color: white;\n font-size: 16px;\n background-color: #0D75FB;\n border-radius: 6px;\n width: 95%;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n}\n\n.recording-controls .waiting-message.loading {\n background: #faad14;\n}\n\n.recording-controls .waiting-message p {\n margin: 0;\n font-size: 16px;\n color: white;\n font-weight: 500;\n}\n\n.recording-controls .stop-recording-button {\n background-color: #dc3545;\n color: white;\n border: none;\n cursor: pointer;\n font-size: 16px;\n}\n\n.recording-controls .stop-recording-button:hover {\n background-color: #c82333;\n}\n\n/* 添加禁用状态的样式 */\n.recording-controls .stop-recording-button.disabled {\n background: #ccc;\n cursor: not-allowed;\n}\n\n.recording-controls .stop-recording-button.disabled:hover {\n background: #ccc;\n}\n\n/* 添加进度条和数字进度的样式 */\n.progress-container {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n max-width: 400px;\n margin-top: 10px;\n padding: 0 5px;\n}\n\n.progress-bar-container {\n height: 4px;\n background-color: #E5E5E5;\n border-radius: 2px;\n overflow: hidden;\n margin-right: 10px;\n width: 75px;\n}\n\n.progress-bar {\n height: 100%;\n background-image: linear-gradient(111deg, #4A9FFF 0%, #1058FF 100%);\n border-radius: 2px;\n transition: width 0.3s ease;\n}\n\n.progress-text {\n font-size: 14px;\n color: #666;\n white-space: nowrap;\n}\n\n/* 重新设计文本输入区域样式 */\n.text-input-area {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding: 0px 16px 16px 16px;\n border-radius: 8px;\n border: none;\n /* 确保容器本身没有边框 */\n}\n\n/* 修改文本输入框样式 */\n.text-answer-input {\n flex: 1;\n min-height: 80px;\n padding: 12px 12px 0px 12px;\n border: 1px solid #ddd;\n border-radius: 8px 8px 0 0;\n resize: none;\n font-size: 16px;\n background-color: #fff;\n border-bottom: none;\n outline: none;\n /* 移除默认的焦点轮廓 */\n}\n\n/* 修改工具栏样式 */\n.input-toolbar {\n display: flex;\n justify-content: end;\n align-items: center;\n padding: 8px 12px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-top: none;\n border-radius: 0 0 8px 8px;\n}\n\n/* 当输入框获得焦点时,修改边框颜色 */\n.text-answer-input:focus {\n border-color: rgb(74, 144, 226);\n border-bottom: none;\n}\n\n.text-answer-input:focus+.input-toolbar {\n border-color: rgb(74, 144, 226);\n border-top: none;\n}\n\n/* 左侧工具按钮区域 */\n.toolbar-actions {\n width: 32px;\n height: 32px;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-right: 10px;\n border: 1px solid #d9d9d9;\n border-radius: 6px;\n}\n\n.toolbar-actions:hover {\n background-color: #f0f0f0;\n}\n\n/* 修改工具按钮样式,确保居中 */\n.toolbar-button {\n background: transparent;\n border: none;\n color: #666;\n cursor: pointer;\n padding: 0;\n margin: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n/* 确保按钮内部的内容也居中 */\n.toolbar-button > div,\n.toolbar-button > svg {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n/* 发送按钮样式 */\n.submit-text-button {\n padding: 6px 16px;\n background-color: #4a90e2;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.submit-text-button:hover:not(.disabled) {\n background-color: #3a7bc8;\n}\n\n.submit-text-button.disabled {\n background-color: #b3b3b3;\n cursor: not-allowed;\n}\n\n/* 语音输入按钮样式 */\n.toolbar-button.recording {\n background-color: rgba(255, 0, 0, 0.1);\n color: #ff3b30;\n animation: pulse 1.5s infinite;\n}\n\n.toolbar-button.converting {\n background-color: rgba(0, 122, 255, 0.1);\n color: #007aff;\n}\n\n.toolbar-button .recording-time {\n font-size: 12px;\n margin-left: 4px;\n}\n\n.converting-indicator {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.converting-indicator svg {\n animation: spin 1.5s linear infinite;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@keyframes pulse {\n 0% {\n box-shadow: 0 0 0 0 rgba(255, 0, 0, 0.4);\n }\n\n 70% {\n box-shadow: 0 0 0 6px rgba(255, 0, 0, 0);\n }\n\n 100% {\n box-shadow: 0 0 0 0 rgba(255, 0, 0, 0);\n }\n}\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 0;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n}\n\n/* 工作区样式 */\n.workspace-section {\n width: 100%;\n padding: 0px 16px 16px;\n}\n\n.workspace-toolbar {\n display: flex;\n justify-content: end;\n align-items: center;\n gap: 12px;\n}\n\n.workspace-button {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 8px 16px;\n border: 1px solid #d9d9d9;\n border-radius: 6px;\n background: white;\n color: #666;\n font-size: 14px;\n cursor: pointer;\n transition: all 0.2s ease;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n\n.workspace-button:hover {\n border-color: #4096ff;\n color: #4096ff;\n box-shadow: 0 2px 4px rgba(64, 150, 255, 0.1);\n}\n\n.workspace-button svg {\n flex-shrink: 0;\n}\n\n\n/* 历史会话抽屉样式 */\n.history-drawer-content {\n height: 100%;\n display: flex;\n flex-direction: column;\n}\n\n\n.conversation-list {\n flex: 1;\n overflow-y: auto;\n padding: 8px 0;\n}\n\n.loading-conversations,\n.empty-conversations {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n color: #999;\n}\n\n.loading-conversations .loading-spinner-small {\n margin-bottom: 12px;\n}\n\n.conversation-item {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 12px 16px;\n margin: 0 8px 4px 8px;\n border-radius: 8px;\n cursor: pointer;\n transition: all 0.2s ease;\n border: 1px solid transparent;\n}\n\n.conversation-item:hover {\n background: #f5f5f5;\n}\n\n.conversation-item.active {\n background: #e6f7ff;\n border-color: #1890ff;\n}\n\n.conversation-info {\n flex: 1;\n min-width: 0;\n}\n\n.conversation-title {\n font-size: 14px;\n font-weight: 500;\n color: #262626;\n margin-bottom: 4px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.conversation-meta {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 12px;\n color: #8c8c8c;\n}\n\n.conversation-time {\n flex-shrink: 0;\n}\n\n.message-count {\n flex-shrink: 0;\n}\n\n.conversation-status {\n padding: 2px 6px;\n border-radius: 4px;\n font-size: 11px;\n font-weight: 500;\n}\n\n.conversation-status.completed {\n background: #f6ffed;\n color: #52c41a;\n}\n\n.conversation-status.running {\n background: #fff7e6;\n color: #fa8c16;\n}\n\n.current-indicator {\n flex-shrink: 0;\n color: #1890ff;\n margin-left: 8px;\n}","\n.markdown-body {\n --base-size-4: 4px;\n --base-size-8: 8px;\n --base-size-16: 16px;\n --base-size-24: 24px;\n --base-size-40: 40px;\n --base-text-weight-normal: 400;\n --base-text-weight-medium: 500;\n --base-text-weight-semibold: 600;\n --fontStack-monospace: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;\n --fgColor-accent: Highlight;\n }\n \n @media (prefers-color-scheme: dark) {\n \n .markdown-body,\n [data-theme=\"dark\"] {\n /* dark */\n color-scheme: dark;\n --focus-outlineColor: #0969da;\n --fgColor-default: #1f2328;\n --fgColor-muted: #59636e;\n --fgColor-accent: #0969da;\n --fgColor-success: #1a7f37;\n --fgColor-attention: #9a6700;\n --fgColor-danger: #d1242f;\n --fgColor-done: #8250df;\n --bgColor-default: #ffffff;\n --bgColor-muted: #f6f8fa;\n --bgColor-neutral-muted: #818b981f;\n --bgColor-attention-muted: #fff8c5;\n --borderColor-default: #d1d9e0;\n --borderColor-muted: #d1d9e0b3;\n --borderColor-neutral-muted: #d1d9e0b3;\n --borderColor-accent-emphasis: #0969da;\n --borderColor-success-emphasis: #1a7f37;\n --borderColor-attention-emphasis: #9a6700;\n --borderColor-danger-emphasis: #cf222e;\n --borderColor-done-emphasis: #8250df;\n --color-prettylights-syntax-comment: #59636e;\n --color-prettylights-syntax-constant: #0550ae;\n --color-prettylights-syntax-constant-other-reference-link: #0a3069;\n --color-prettylights-syntax-entity: #6639ba;\n --color-prettylights-syntax-storage-modifier-import: #1f2328;\n --color-prettylights-syntax-entity-tag: #0550ae;\n --color-prettylights-syntax-keyword: #cf222e;\n --color-prettylights-syntax-string: #0a3069;\n --color-prettylights-syntax-variable: #953800;\n --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;\n --color-prettylights-syntax-brackethighlighter-angle: #59636e;\n --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;\n --color-prettylights-syntax-invalid-illegal-bg: #82071e;\n --color-prettylights-syntax-carriage-return-text: #f6f8fa;\n --color-prettylights-syntax-carriage-return-bg: #cf222e;\n --color-prettylights-syntax-string-regexp: #116329;\n --color-prettylights-syntax-markup-list: #3b2300;\n --color-prettylights-syntax-markup-heading: #0550ae;\n --color-prettylights-syntax-markup-italic: #1f2328;\n --color-prettylights-syntax-markup-bold: #1f2328;\n --color-prettylights-syntax-markup-deleted-text: #82071e;\n --color-prettylights-syntax-markup-deleted-bg: #ffebe9;\n --color-prettylights-syntax-markup-inserted-text: #116329;\n --color-prettylights-syntax-markup-inserted-bg: #dafbe1;\n --color-prettylights-syntax-markup-changed-text: #953800;\n --color-prettylights-syntax-markup-changed-bg: #ffd8b5;\n --color-prettylights-syntax-markup-ignored-text: #d1d9e0;\n --color-prettylights-syntax-markup-ignored-bg: #0550ae;\n --color-prettylights-syntax-meta-diff-range: #8250df;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #818b98;\n }\n }\n \n @media (prefers-color-scheme: light) {\n \n .markdown-body,\n [data-theme=\"light\"] {\n /* light */\n color-scheme: light;\n --focus-outlineColor: #0969da;\n --fgColor-default: #1f2328;\n --fgColor-muted: #59636e;\n --fgColor-accent: #0969da;\n --fgColor-success: #1a7f37;\n --fgColor-attention: #9a6700;\n --fgColor-danger: #d1242f;\n --fgColor-done: #8250df;\n --bgColor-default: #ffffff;\n --bgColor-muted: #f6f8fa;\n --bgColor-neutral-muted: #818b981f;\n --bgColor-attention-muted: #fff8c5;\n --borderColor-default: #d1d9e0;\n --borderColor-muted: #d1d9e0b3;\n --borderColor-neutral-muted: #d1d9e0b3;\n --borderColor-accent-emphasis: #0969da;\n --borderColor-success-emphasis: #1a7f37;\n --borderColor-attention-emphasis: #9a6700;\n --borderColor-danger-emphasis: #cf222e;\n --borderColor-done-emphasis: #8250df;\n --color-prettylights-syntax-comment: #59636e;\n --color-prettylights-syntax-constant: #0550ae;\n --color-prettylights-syntax-constant-other-reference-link: #0a3069;\n --color-prettylights-syntax-entity: #6639ba;\n --color-prettylights-syntax-storage-modifier-import: #1f2328;\n --color-prettylights-syntax-entity-tag: #0550ae;\n --color-prettylights-syntax-keyword: #cf222e;\n --color-prettylights-syntax-string: #0a3069;\n --color-prettylights-syntax-variable: #953800;\n --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;\n --color-prettylights-syntax-brackethighlighter-angle: #59636e;\n --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;\n --color-prettylights-syntax-invalid-illegal-bg: #82071e;\n --color-prettylights-syntax-carriage-return-text: #f6f8fa;\n --color-prettylights-syntax-carriage-return-bg: #cf222e;\n --color-prettylights-syntax-string-regexp: #116329;\n --color-prettylights-syntax-markup-list: #3b2300;\n --color-prettylights-syntax-markup-heading: #0550ae;\n --color-prettylights-syntax-markup-italic: #1f2328;\n --color-prettylights-syntax-markup-bold: #1f2328;\n --color-prettylights-syntax-markup-deleted-text: #82071e;\n --color-prettylights-syntax-markup-deleted-bg: #ffebe9;\n --color-prettylights-syntax-markup-inserted-text: #116329;\n --color-prettylights-syntax-markup-inserted-bg: #dafbe1;\n --color-prettylights-syntax-markup-changed-text: #953800;\n --color-prettylights-syntax-markup-changed-bg: #ffd8b5;\n --color-prettylights-syntax-markup-ignored-text: #d1d9e0;\n --color-prettylights-syntax-markup-ignored-bg: #0550ae;\n --color-prettylights-syntax-meta-diff-range: #8250df;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #818b98;\n }\n }\n \n .markdown-body {\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Noto Sans\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\";\n font-size: 16px;\n line-height: 1.5;\n word-wrap: break-word;\n }\n \n .markdown-body .octicon {\n display: inline-block;\n fill: currentColor;\n vertical-align: text-bottom;\n }\n \n .markdown-body h1:hover .anchor .octicon-link:before,\n .markdown-body h2:hover .anchor .octicon-link:before,\n .markdown-body h3:hover .anchor .octicon-link:before,\n .markdown-body h4:hover .anchor .octicon-link:before,\n .markdown-body h5:hover .anchor .octicon-link:before,\n .markdown-body h6:hover .anchor .octicon-link:before {\n width: 16px;\n height: 16px;\n content: ' ';\n display: inline-block;\n background-color: currentColor;\n -webkit-mask-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg>\");\n mask-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg>\");\n }\n \n .markdown-body details,\n .markdown-body figcaption,\n .markdown-body figure {\n display: block;\n }\n \n .markdown-body summary {\n display: list-item;\n }\n \n .markdown-body [hidden] {\n display: none !important;\n }\n \n .markdown-body a {\n background-color: transparent;\n color: var(--fgColor-accent);\n text-decoration: none;\n }\n \n .markdown-body abbr[title] {\n border-bottom: none;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n \n .markdown-body b,\n .markdown-body strong {\n font-weight: var(--base-text-weight-semibold, 600);\n }\n \n .markdown-body dfn {\n font-style: italic;\n }\n \n .markdown-body h1 {\n margin: .67em 0;\n font-weight: var(--base-text-weight-semibold, 600);\n padding-bottom: .3em;\n font-size: 1.5em;\n border-bottom: 1px solid var(--borderColor-muted);\n }\n \n .markdown-body mark {\n background-color: var(--bgColor-attention-muted);\n color: var(--fgColor-default);\n }\n \n .markdown-body small {\n font-size: 90%;\n }\n \n .markdown-body sub,\n .markdown-body sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n \n .markdown-body sub {\n bottom: -0.25em;\n }\n \n .markdown-body sup {\n top: -0.5em;\n }\n \n .markdown-body img {\n border-style: none;\n max-width: 100%;\n box-sizing: content-box;\n }\n \n .markdown-body code,\n .markdown-body kbd,\n .markdown-body pre,\n .markdown-body samp {\n font-family: monospace;\n font-size: 1em;\n }\n \n .markdown-body figure {\n margin: 1em var(--base-size-40);\n }\n \n .markdown-body hr {\n box-sizing: content-box;\n overflow: hidden;\n background: transparent;\n border-bottom: 1px solid var(--borderColor-muted);\n height: .25em;\n padding: 0;\n margin: var(--base-size-24) 0;\n background-color: var(--borderColor-default);\n border: 0;\n }\n \n .markdown-body input {\n font: inherit;\n margin: 0;\n overflow: visible;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n }\n \n .markdown-body [type=button],\n .markdown-body [type=reset],\n .markdown-body [type=submit] {\n -webkit-appearance: button;\n appearance: button;\n }\n \n .markdown-body [type=checkbox],\n .markdown-body [type=radio] {\n box-sizing: border-box;\n padding: 0;\n }\n \n .markdown-body [type=number]::-webkit-inner-spin-button,\n .markdown-body [type=number]::-webkit-outer-spin-button {\n height: auto;\n }\n \n .markdown-body [type=search]::-webkit-search-cancel-button,\n .markdown-body [type=search]::-webkit-search-decoration {\n -webkit-appearance: none;\n appearance: none;\n }\n \n .markdown-body ::-webkit-input-placeholder {\n color: inherit;\n opacity: .54;\n }\n \n .markdown-body ::-webkit-file-upload-button {\n -webkit-appearance: button;\n appearance: button;\n font: inherit;\n }\n \n .markdown-body a:hover {\n text-decoration: underline;\n }\n \n .markdown-body ::placeholder {\n color: var(--fgColor-muted);\n opacity: 1;\n }\n \n .markdown-body hr::before {\n display: table;\n content: \"\";\n }\n \n .markdown-body hr::after {\n display: table;\n clear: both;\n content: \"\";\n }\n \n .markdown-body table {\n border-spacing: 0;\n border-collapse: collapse;\n display: block;\n width: max-content;\n max-width: 100%;\n overflow: auto;\n font-variant: tabular-nums;\n }\n \n .markdown-body td,\n .markdown-body th {\n padding: 0;\n }\n \n .markdown-body details summary {\n cursor: pointer;\n }\n \n .markdown-body a:focus,\n .markdown-body [role=button]:focus,\n .markdown-body input[type=radio]:focus,\n .markdown-body input[type=checkbox]:focus {\n outline: 2px solid var(--focus-outlineColor);\n outline-offset: -2px;\n box-shadow: none;\n }\n \n .markdown-body a:focus:not(:focus-visible),\n .markdown-body [role=button]:focus:not(:focus-visible),\n .markdown-body input[type=radio]:focus:not(:focus-visible),\n .markdown-body input[type=checkbox]:focus:not(:focus-visible) {\n outline: solid 1px transparent;\n }\n \n .markdown-body a:focus-visible,\n .markdown-body [role=button]:focus-visible,\n .markdown-body input[type=radio]:focus-visible,\n .markdown-body input[type=checkbox]:focus-visible {\n outline: 2px solid var(--focus-outlineColor);\n outline-offset: -2px;\n box-shadow: none;\n }\n \n .markdown-body a:not([class]):focus,\n .markdown-body a:not([class]):focus-visible,\n .markdown-body input[type=radio]:focus,\n .markdown-body input[type=radio]:focus-visible,\n .markdown-body input[type=checkbox]:focus,\n .markdown-body input[type=checkbox]:focus-visible {\n outline-offset: 0;\n }\n \n .markdown-body kbd {\n display: inline-block;\n padding: var(--base-size-4);\n font: 11px var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);\n line-height: 10px;\n color: var(--fgColor-default);\n vertical-align: middle;\n background-color: var(--bgColor-muted);\n border: solid 1px var(--borderColor-neutral-muted);\n border-bottom-color: var(--borderColor-neutral-muted);\n border-radius: 6px;\n box-shadow: inset 0 -1px 0 var(--borderColor-neutral-muted);\n }\n \n .markdown-body h1,\n .markdown-body h2,\n .markdown-body h3,\n .markdown-body h4,\n .markdown-body h5,\n .markdown-body h6 {\n margin-top: var(--base-size-24);\n margin-bottom: var(--base-size-16);\n font-weight: var(--base-text-weight-semibold, 600);\n line-height: 1.25;\n }\n \n .markdown-body h2 {\n font-weight: var(--base-text-weight-semibold, 600);\n padding-bottom: .3em;\n font-size: 1.2em;\n border-bottom: 1px solid var(--borderColor-muted);\n }\n \n .markdown-body h3 {\n font-weight: var(--base-text-weight-semibold, 600);\n font-size: 1.05em;\n }\n \n .markdown-body h4 {\n font-weight: var(--base-text-weight-semibold, 600);\n font-size: 0.875em;\n }\n \n .markdown-body h5 {\n font-weight: var(--base-text-weight-semibold, 600);\n font-size: .85em;\n }\n \n .markdown-body h6 {\n font-weight: var(--base-text-weight-semibold, 600);\n font-size: .80em;\n color: var(--fgColor-muted);\n }\n \n .markdown-body p {\n margin-top: 0;\n margin-bottom: 10px;\n }\n \n .markdown-body blockquote {\n margin: 0;\n padding: 0 1em;\n color: var(--fgColor-muted);\n border-left: .25em solid var(--borderColor-default);\n }\n \n .markdown-body ul,\n .markdown-body ol {\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 2em;\n }\n \n .markdown-body ol ol,\n .markdown-body ul ol {\n list-style-type: lower-roman;\n }\n \n .markdown-body ul ul ol,\n .markdown-body ul ol ol,\n .markdown-body ol ul ol,\n .markdown-body ol ol ol {\n list-style-type: lower-alpha;\n }\n \n .markdown-body dd {\n margin-left: 0;\n }\n \n .markdown-body tt,\n .markdown-body code,\n .markdown-body samp {\n font-family: var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);\n font-size: 12px;\n }\n \n .markdown-body pre {\n margin-top: 0;\n margin-bottom: 0;\n font-family: var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);\n font-size: 12px;\n word-wrap: normal;\n }\n \n .markdown-body .octicon {\n display: inline-block;\n overflow: visible !important;\n vertical-align: text-bottom;\n fill: currentColor;\n }\n \n .markdown-body input::-webkit-outer-spin-button,\n .markdown-body input::-webkit-inner-spin-button {\n margin: 0;\n appearance: none;\n }\n \n .markdown-body .mr-2 {\n margin-right: var(--base-size-8, 8px) !important;\n }\n \n .markdown-body::before {\n display: table;\n content: \"\";\n }\n \n .markdown-body::after {\n display: table;\n clear: both;\n content: \"\";\n }\n \n .markdown-body>*:first-child {\n margin-top: 0 !important;\n }\n \n .markdown-body>*:last-child {\n margin-bottom: 0 !important;\n }\n \n .markdown-body a:not([href]) {\n color: inherit;\n text-decoration: none;\n }\n \n .markdown-body .absent {\n color: var(--fgColor-danger);\n }\n \n .markdown-body .anchor {\n float: left;\n padding-right: var(--base-size-4);\n margin-left: -20px;\n line-height: 1;\n }\n \n .markdown-body .anchor:focus {\n outline: none;\n }\n \n .markdown-body p,\n .markdown-body blockquote,\n .markdown-body ul,\n .markdown-body ol,\n .markdown-body dl,\n .markdown-body table,\n .markdown-body pre,\n .markdown-body details {\n margin-top: 0;\n margin-bottom: var(--base-size-16);\n font-size: 16px;\n font-weight: 400;\n }\n \n .markdown-body blockquote>:first-child {\n margin-top: 0;\n }\n \n .markdown-body blockquote>:last-child {\n margin-bottom: 0;\n }\n \n .markdown-body h1 .octicon-link,\n .markdown-body h2 .octicon-link,\n .markdown-body h3 .octicon-link,\n .markdown-body h4 .octicon-link,\n .markdown-body h5 .octicon-link,\n .markdown-body h6 .octicon-link {\n color: var(--fgColor-default);\n vertical-align: middle;\n visibility: hidden;\n }\n \n .markdown-body h1:hover .anchor,\n .markdown-body h2:hover .anchor,\n .markdown-body h3:hover .anchor,\n .markdown-body h4:hover .anchor,\n .markdown-body h5:hover .anchor,\n .markdown-body h6:hover .anchor {\n text-decoration: none;\n }\n \n .markdown-body h1:hover .anchor .octicon-link,\n .markdown-body h2:hover .anchor .octicon-link,\n .markdown-body h3:hover .anchor .octicon-link,\n .markdown-body h4:hover .anchor .octicon-link,\n .markdown-body h5:hover .anchor .octicon-link,\n .markdown-body h6:hover .anchor .octicon-link {\n visibility: visible;\n }\n \n .markdown-body h1 tt,\n .markdown-body h1 code,\n .markdown-body h2 tt,\n .markdown-body h2 code,\n .markdown-body h3 tt,\n .markdown-body h3 code,\n .markdown-body h4 tt,\n .markdown-body h4 code,\n .markdown-body h5 tt,\n .markdown-body h5 code,\n .markdown-body h6 tt,\n .markdown-body h6 code {\n padding: 0 .2em;\n font-size: inherit;\n }\n \n .markdown-body summary h1,\n .markdown-body summary h2,\n .markdown-body summary h3,\n .markdown-body summary h4,\n .markdown-body summary h5,\n .markdown-body summary h6 {\n display: inline-block;\n }\n \n .markdown-body summary h1 .anchor,\n .markdown-body summary h2 .anchor,\n .markdown-body summary h3 .anchor,\n .markdown-body summary h4 .anchor,\n .markdown-body summary h5 .anchor,\n .markdown-body summary h6 .anchor {\n margin-left: -40px;\n }\n \n .markdown-body summary h1,\n .markdown-body summary h2 {\n padding-bottom: 0;\n border-bottom: 0;\n }\n \n .markdown-body ul.no-list,\n .markdown-body ol.no-list {\n padding: 0;\n list-style-type: none;\n }\n \n .markdown-body ol[type=\"a s\"] {\n list-style-type: lower-alpha;\n }\n \n .markdown-body ol[type=\"A s\"] {\n list-style-type: upper-alpha;\n }\n \n .markdown-body ol[type=\"i s\"] {\n list-style-type: lower-roman;\n }\n \n .markdown-body ol[type=\"I s\"] {\n list-style-type: upper-roman;\n }\n \n .markdown-body ol[type=\"1\"] {\n list-style-type: decimal;\n }\n \n .markdown-body div>ol:not([type]) {\n list-style-type: decimal;\n }\n \n .markdown-body ul ul,\n .markdown-body ul ol,\n .markdown-body ol ol,\n .markdown-body ol ul {\n margin-top: 0;\n margin-bottom: 0;\n }\n \n .markdown-body li>p {\n margin-top: var(--base-size-16);\n }\n \n .markdown-body li+li {\n margin-top: .25em;\n }\n \n .markdown-body dl {\n padding: 0;\n }\n \n .markdown-body dl dt {\n padding: 0;\n margin-top: var(--base-size-16);\n font-size: 1em;\n font-style: italic;\n font-weight: var(--base-text-weight-semibold, 600);\n }\n \n .markdown-body dl dd {\n padding: 0 var(--base-size-16);\n margin-bottom: var(--base-size-16);\n }\n \n .markdown-body table th {\n font-weight: var(--base-text-weight-semibold, 600);\n }\n \n .markdown-body table th,\n .markdown-body table td {\n padding: 6px 13px;\n border: 1px solid var(--borderColor-default);\n }\n \n .markdown-body table td>:last-child {\n margin-bottom: 0;\n }\n \n .markdown-body table tr {\n background-color: var(--bgColor-default);\n border-top: 1px solid var(--borderColor-muted);\n }\n \n .markdown-body table tr:nth-child(2n) {\n background-color: var(--bgColor-muted);\n }\n \n .markdown-body table img {\n background-color: transparent;\n }\n \n .markdown-body img[align=right] {\n padding-left: 20px;\n }\n \n .markdown-body img[align=left] {\n padding-right: 20px;\n }\n \n .markdown-body .emoji {\n max-width: none;\n vertical-align: text-top;\n background-color: transparent;\n }\n \n .markdown-body span.frame {\n display: block;\n overflow: hidden;\n }\n \n .markdown-body span.frame>span {\n display: block;\n float: left;\n width: auto;\n padding: 7px;\n margin: 13px 0 0;\n overflow: hidden;\n border: 1px solid var(--borderColor-default);\n }\n \n .markdown-body span.frame span img {\n display: block;\n float: left;\n }\n \n .markdown-body span.frame span span {\n display: block;\n padding: 5px 0 0;\n clear: both;\n color: var(--fgColor-default);\n }\n \n .markdown-body span.align-center {\n display: block;\n overflow: hidden;\n clear: both;\n }\n \n .markdown-body span.align-center>span {\n display: block;\n margin: 13px auto 0;\n overflow: hidden;\n text-align: center;\n }\n \n .markdown-body span.align-center span img {\n margin: 0 auto;\n text-align: center;\n }\n \n .markdown-body span.align-right {\n display: block;\n overflow: hidden;\n clear: both;\n }\n \n .markdown-body span.align-right>span {\n display: block;\n margin: 13px 0 0;\n overflow: hidden;\n text-align: right;\n }\n \n .markdown-body span.align-right span img {\n margin: 0;\n text-align: right;\n }\n \n .markdown-body span.float-left {\n display: block;\n float: left;\n margin-right: 13px;\n overflow: hidden;\n }\n \n .markdown-body span.float-left span {\n margin: 13px 0 0;\n }\n \n .markdown-body span.float-right {\n display: block;\n float: right;\n margin-left: 13px;\n overflow: hidden;\n }\n \n .markdown-body span.float-right>span {\n display: block;\n margin: 13px auto 0;\n overflow: hidden;\n text-align: right;\n }\n \n .markdown-body code,\n .markdown-body tt {\n padding: .2em .4em;\n margin: 0;\n font-size: 85%;\n white-space: break-spaces;\n background-color: var(--bgColor-neutral-muted);\n border-radius: 6px;\n }\n \n .markdown-body code br,\n .markdown-body tt br {\n display: none;\n }\n \n .markdown-body del code {\n text-decoration: inherit;\n }\n \n .markdown-body samp {\n font-size: 85%;\n }\n \n .markdown-body pre code {\n font-size: 100%;\n }\n \n .markdown-body pre>code {\n padding: 0;\n margin: 0;\n word-break: normal;\n white-space: pre;\n background: transparent;\n border: 0;\n }\n \n .markdown-body .highlight {\n margin-bottom: var(--base-size-16);\n }\n \n .markdown-body .highlight pre {\n margin-bottom: 0;\n word-break: normal;\n }\n \n .markdown-body .highlight pre,\n .markdown-body pre {\n padding: var(--base-size-16);\n overflow: auto;\n font-size: 85%;\n line-height: 1.45;\n color: var(--fgColor-default);\n background-color: var(--bgColor-muted);\n border-radius: 6px;\n }\n \n .markdown-body pre code,\n .markdown-body pre tt {\n display: inline;\n max-width: auto;\n padding: 0;\n margin: 0;\n overflow: visible;\n line-height: inherit;\n word-wrap: normal;\n background-color: transparent;\n border: 0;\n }\n \n .markdown-body .csv-data td,\n .markdown-body .csv-data th {\n padding: 5px;\n overflow: hidden;\n font-size: 12px;\n line-height: 1;\n text-align: left;\n white-space: nowrap;\n }\n \n .markdown-body .csv-data .blob-num {\n padding: 10px var(--base-size-8) 9px;\n text-align: right;\n background: var(--bgColor-default);\n border: 0;\n }\n \n .markdown-body .csv-data tr {\n border-top: 0;\n }\n \n .markdown-body .csv-data th {\n font-weight: var(--base-text-weight-semibold, 600);\n background: var(--bgColor-muted);\n border-top: 0;\n }\n \n .markdown-body [data-footnote-ref]::before {\n content: \"[\";\n }\n \n .markdown-body [data-footnote-ref]::after {\n content: \"]\";\n }\n \n .markdown-body .footnotes {\n font-size: 12px;\n color: var(--fgColor-muted);\n border-top: 1px solid var(--borderColor-default);\n }\n \n .markdown-body .footnotes ol {\n padding-left: var(--base-size-16);\n }\n \n .markdown-body .footnotes ol ul {\n display: inline-block;\n padding-left: var(--base-size-16);\n margin-top: var(--base-size-16);\n }\n \n .markdown-body .footnotes li {\n position: relative;\n }\n \n .markdown-body .footnotes li:target::before {\n position: absolute;\n top: calc(var(--base-size-8)*-1);\n right: calc(var(--base-size-8)*-1);\n bottom: calc(var(--base-size-8)*-1);\n left: calc(var(--base-size-24)*-1);\n pointer-events: none;\n content: \"\";\n border: 2px solid var(--borderColor-accent-emphasis);\n border-radius: 6px;\n }\n \n .markdown-body .footnotes li:target {\n color: var(--fgColor-default);\n }\n \n .markdown-body .footnotes .data-footnote-backref g-emoji {\n font-family: monospace;\n }\n \n .markdown-body body:has(:modal) {\n padding-right: var(--dialog-scrollgutter) !important;\n }\n \n .markdown-body .pl-c {\n color: var(--color-prettylights-syntax-comment);\n }\n \n .markdown-body .pl-c1,\n .markdown-body .pl-s .pl-v {\n color: var(--color-prettylights-syntax-constant);\n }\n \n .markdown-body .pl-e,\n .markdown-body .pl-en {\n color: var(--color-prettylights-syntax-entity);\n }\n \n .markdown-body .pl-smi,\n .markdown-body .pl-s .pl-s1 {\n color: var(--color-prettylights-syntax-storage-modifier-import);\n }\n \n .markdown-body .pl-ent {\n color: var(--color-prettylights-syntax-entity-tag);\n }\n \n .markdown-body .pl-k {\n color: var(--color-prettylights-syntax-keyword);\n }\n \n .markdown-body .pl-s,\n .markdown-body .pl-pds,\n .markdown-body .pl-s .pl-pse .pl-s1,\n .markdown-body .pl-sr,\n .markdown-body .pl-sr .pl-cce,\n .markdown-body .pl-sr .pl-sre,\n .markdown-body .pl-sr .pl-sra {\n color: var(--color-prettylights-syntax-string);\n }\n \n .markdown-body .pl-v,\n .markdown-body .pl-smw {\n color: var(--color-prettylights-syntax-variable);\n }\n \n .markdown-body .pl-bu {\n color: var(--color-prettylights-syntax-brackethighlighter-unmatched);\n }\n \n .markdown-body .pl-ii {\n color: var(--color-prettylights-syntax-invalid-illegal-text);\n background-color: var(--color-prettylights-syntax-invalid-illegal-bg);\n }\n \n .markdown-body .pl-c2 {\n color: var(--color-prettylights-syntax-carriage-return-text);\n background-color: var(--color-prettylights-syntax-carriage-return-bg);\n }\n \n .markdown-body .pl-sr .pl-cce {\n font-weight: bold;\n color: var(--color-prettylights-syntax-string-regexp);\n }\n \n .markdown-body .pl-ml {\n color: var(--color-prettylights-syntax-markup-list);\n }\n \n .markdown-body .pl-mh,\n .markdown-body .pl-mh .pl-en,\n .markdown-body .pl-ms {\n font-weight: bold;\n color: var(--color-prettylights-syntax-markup-heading);\n }\n \n .markdown-body .pl-mi {\n font-style: italic;\n color: var(--color-prettylights-syntax-markup-italic);\n }\n \n .markdown-body .pl-mb {\n font-weight: bold;\n color: var(--color-prettylights-syntax-markup-bold);\n }\n \n .markdown-body .pl-md {\n color: var(--color-prettylights-syntax-markup-deleted-text);\n background-color: var(--color-prettylights-syntax-markup-deleted-bg);\n }\n \n .markdown-body .pl-mi1 {\n color: var(--color-prettylights-syntax-markup-inserted-text);\n background-color: var(--color-prettylights-syntax-markup-inserted-bg);\n }\n \n .markdown-body .pl-mc {\n color: var(--color-prettylights-syntax-markup-changed-text);\n background-color: var(--color-prettylights-syntax-markup-changed-bg);\n }\n \n .markdown-body .pl-mi2 {\n color: var(--color-prettylights-syntax-markup-ignored-text);\n background-color: var(--color-prettylights-syntax-markup-ignored-bg);\n }\n \n .markdown-body .pl-mdr {\n font-weight: bold;\n color: var(--color-prettylights-syntax-meta-diff-range);\n }\n \n .markdown-body .pl-ba {\n color: var(--color-prettylights-syntax-brackethighlighter-angle);\n }\n \n .markdown-body .pl-sg {\n color: var(--color-prettylights-syntax-sublimelinter-gutter-mark);\n }\n \n .markdown-body .pl-corl {\n text-decoration: underline;\n color: var(--color-prettylights-syntax-constant-other-reference-link);\n }\n \n .markdown-body [role=button]:focus:not(:focus-visible),\n .markdown-body [role=tabpanel][tabindex=\"0\"]:focus:not(:focus-visible),\n .markdown-body button:focus:not(:focus-visible),\n .markdown-body summary:focus:not(:focus-visible),\n .markdown-body a:focus:not(:focus-visible) {\n outline: none;\n box-shadow: none;\n }\n \n .markdown-body [tabindex=\"0\"]:focus:not(:focus-visible),\n .markdown-body details-dialog:focus:not(:focus-visible) {\n outline: none;\n }\n \n .markdown-body g-emoji {\n display: inline-block;\n min-width: 1ch;\n font-family: \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-size: 1em;\n font-style: normal !important;\n font-weight: var(--base-text-weight-normal, 400);\n line-height: 1;\n vertical-align: -0.075em;\n }\n \n .markdown-body g-emoji img {\n width: 1em;\n height: 1em;\n }\n \n .markdown-body .task-list-item {\n list-style-type: none;\n }\n \n .markdown-body .task-list-item label {\n font-weight: var(--base-text-weight-normal, 400);\n }\n \n .markdown-body .task-list-item.enabled label {\n cursor: pointer;\n }\n \n .markdown-body .task-list-item+.task-list-item {\n margin-top: var(--base-size-4);\n }\n \n .markdown-body .task-list-item .handle {\n display: none;\n }\n \n .markdown-body .task-list-item-checkbox {\n margin: 0 .2em .25em -1.4em;\n vertical-align: middle;\n }\n \n .markdown-body ul:dir(rtl) .task-list-item-checkbox {\n margin: 0 -1.6em .25em .2em;\n }\n \n .markdown-body ol:dir(rtl) .task-list-item-checkbox {\n margin: 0 -1.6em .25em .2em;\n }\n \n .markdown-body .contains-task-list:hover .task-list-item-convert-container,\n .markdown-body .contains-task-list:focus-within .task-list-item-convert-container {\n display: block;\n width: auto;\n height: 24px;\n overflow: visible;\n clip: auto;\n }\n \n .markdown-body ::-webkit-calendar-picker-indicator {\n filter: invert(50%);\n }\n \n .markdown-body .markdown-alert {\n padding: var(--base-size-8) var(--base-size-16);\n margin-bottom: var(--base-size-16);\n color: inherit;\n border-left: .25em solid var(--borderColor-default);\n }\n \n .markdown-body .markdown-alert>:first-child {\n margin-top: 0;\n }\n \n .markdown-body .markdown-alert>:last-child {\n margin-bottom: 0;\n }\n \n .markdown-body .markdown-alert .markdown-alert-title {\n display: flex;\n font-weight: var(--base-text-weight-medium, 500);\n align-items: center;\n line-height: 1;\n }\n \n .markdown-body .markdown-alert.markdown-alert-note {\n border-left-color: var(--borderColor-accent-emphasis);\n }\n \n .markdown-body .markdown-alert.markdown-alert-note .markdown-alert-title {\n color: var(--fgColor-accent);\n }\n \n .markdown-body .markdown-alert.markdown-alert-important {\n border-left-color: var(--borderColor-done-emphasis);\n }\n \n .markdown-body .markdown-alert.markdown-alert-important .markdown-alert-title {\n color: var(--fgColor-done);\n }\n \n .markdown-body .markdown-alert.markdown-alert-warning {\n border-left-color: var(--borderColor-attention-emphasis);\n }\n \n .markdown-body .markdown-alert.markdown-alert-warning .markdown-alert-title {\n color: var(--fgColor-attention);\n }\n \n .markdown-body .markdown-alert.markdown-alert-tip {\n border-left-color: var(--borderColor-success-emphasis);\n }\n \n .markdown-body .markdown-alert.markdown-alert-tip .markdown-alert-title {\n color: var(--fgColor-success);\n }\n \n .markdown-body .markdown-alert.markdown-alert-caution {\n border-left-color: var(--borderColor-danger-emphasis);\n }\n \n .markdown-body .markdown-alert.markdown-alert-caution .markdown-alert-title {\n color: var(--fgColor-danger);\n }\n \n .markdown-body>*:first-child>.heading-element:first-child {\n margin-top: 0 !important;\n }\n \n .markdown-body .highlight pre:has(+.zeroclipboard-container) {\n min-height: 52px;\n }",":host {\n display: inline-block;\n}\n\n.pcm-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-weight: 400;\n white-space: nowrap;\n text-align: center;\n background-image: none;\n border: 1px solid transparent;\n cursor: pointer;\n transition: all 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);\n user-select: none;\n touch-action: manipulation;\n height: 32px;\n padding: 0 15px;\n font-size: 14px;\n border-radius: 4px;\n color: rgba(0, 0, 0, 0.85);\n background-color: white;\n border-color: #d9d9d9;\n outline: none;\n}\n\n.pcm-button:hover {\n border-color: #40a9ff;\n color: #40a9ff;\n}\n\n.pcm-button:active {\n border-color: #096dd9;\n color: #096dd9;\n}\n\n/* 按钮类型样式 */\n.pcm-button-default {\n background-color: white;\n border-color: #d9d9d9;\n color: rgba(0, 0, 0, 0.85);\n}\n\n.pcm-button-primary {\n background-color: #1677FF;\n border-color: #1677FF;\n color: white;\n}\n\n.pcm-button-primary:hover {\n background-color: #40a9ff;\n border-color: #40a9ff;\n color: white;\n}\n\n.pcm-button-primary:active {\n background-color: #096dd9;\n border-color: #096dd9;\n color: white;\n}\n\n.pcm-button-dashed {\n background-color: white;\n border-color: #d9d9d9;\n border-style: dashed;\n}\n\n.pcm-button-text {\n background-color: transparent;\n border-color: transparent;\n color: rgba(0, 0, 0, 0.85);\n box-shadow: none;\n}\n\n.pcm-button-text:hover {\n background-color: rgba(0, 0, 0, 0.05);\n border-color: transparent;\n color: rgba(0, 0, 0, 0.85);\n}\n\n.pcm-button-link {\n background-color: transparent;\n border-color: transparent;\n color: #1677FF;\n box-shadow: none;\n}\n\n.pcm-button-link:hover {\n color: #40a9ff;\n background-color: transparent;\n border-color: transparent;\n}\n\n/* 按钮尺寸样式 */\n.pcm-button-large {\n height: 40px;\n padding: 0 20px;\n font-size: 16px;\n}\n\n.pcm-button-small {\n height: 24px;\n padding: 0 7px;\n font-size: 12px;\n}\n\n/* 按钮形状样式 */\n.pcm-button-circle {\n min-width: 32px;\n padding: 0;\n border-radius: 50%;\n}\n\n.pcm-button-large.pcm-button-circle {\n min-width: 40px;\n}\n\n.pcm-button-small.pcm-button-circle {\n min-width: 24px;\n}\n\n.pcm-button-round {\n border-radius: 40px;\n}\n\n/* 按钮加载状态样式 */\n.pcm-button-loading {\n opacity: 0.65;\n cursor: default;\n}\n\n.loading-icon {\n width: 14px;\n height: 14px;\n margin-right: 8px;\n border: 2px solid currentColor;\n border-top-color: transparent;\n border-radius: 50%;\n animation: loading-spin 1s infinite linear;\n display: inline-block;\n}\n\n@keyframes loading-spin {\n 0% { \n transform: rotate(0deg); \n }\n 100% { \n transform: rotate(360deg); \n }\n}\n\n/* 按钮禁用状态样式 */\n.pcm-button-disabled {\n cursor: not-allowed;\n opacity: 0.65;\n}\n\n.pcm-button-disabled:hover,\n.pcm-button-disabled:active {\n color: rgba(0, 0, 0, 0.25);\n background-color: #f5f5f5;\n border-color: #d9d9d9;\n}\n\n.pcm-button-primary.pcm-button-disabled:hover,\n.pcm-button-primary.pcm-button-disabled:active {\n background-color: #1677FF;\n border-color: #1677FF;\n color: white;\n}\n\n/* 图标样式 */\n.button-icon {\n margin-right: 8px;\n display: inline-flex;\n align-items: center;\n}\n\n.button-icon img {\n width: 16px;\n height: 16px;\n}\n\n.pcm-button-small .button-icon img {\n width: 12px;\n height: 12px;\n}\n\n.pcm-button-large .button-icon img {\n width: 18px;\n height: 18px;\n}\n\n/* 块级按钮样式 */\n.pcm-button-block {\n width: 100%;\n display: flex;\n}\n","import { Component, Prop, h} from '@stencil/core';\n\n/**\n * 按钮组件\n * 一个简化版的类似于 ant-design 的按钮组件,支持自定义文字、颜色、圆角等属性\n */\n@Component({\n tag: 'pcm-button',\n styleUrl: 'pcm-button.css',\n shadow: true,\n})\nexport class PcmButton {\n /**\n * 按钮类型\n * 可选值: 'primary', 'default', 'dashed', 'text', 'link'\n */\n @Prop() type: 'primary' | 'default' | 'dashed' | 'text' | 'link' = 'default';\n\n /**\n * 按钮尺寸\n * 可选值: 'large', 'middle', 'small'\n */\n @Prop() size: 'large' | 'middle' | 'small' = 'middle';\n\n /**\n * 是否为加载状态\n */\n @Prop() loading: boolean = false;\n\n /**\n * 是否为禁用状态\n */\n @Prop() disabled: boolean = false;\n\n /**\n * 设置按钮的图标\n * 使用图标的URL或者base64字符串\n */\n @Prop() icon: string = 'https://pub.pincaimao.com/static/common/i_pcm_logo.png';\n\n\n /**\n * 自定义按钮形状\n * 可选值: 'default', 'circle', 'round'\n */\n @Prop() shape: 'default' | 'circle' | 'round' = 'default';\n\n /**\n * 自定义按钮背景色\n */\n @Prop() backgroundColor: string = '';\n\n /**\n * 自定义按钮文字颜色\n */\n @Prop() textColor: string = '';\n\n /**\n * 自定义按钮边框颜色\n */\n @Prop() borderColor: string = '';\n\n /**\n * 自定义按钮圆角大小(像素)\n */\n @Prop() borderRadius: number = null;\n\n /**\n * 按钮宽度(像素或百分比)\n */\n @Prop() width: string = '';\n\n /**\n * 是否为块级按钮(宽度撑满父元素)\n */\n @Prop() block: boolean = false;\n\n /**\n * 按钮边框样式\n * 可选值: 'solid', 'dashed', 'dotted', 'none'\n */\n @Prop() borderStyle: 'solid' | 'dashed' | 'dotted' | 'none' = 'solid';\n\n render() {\n // 计算样式类名\n const classes = {\n 'pcm-button': true,\n [`pcm-button-${this.type}`]: true,\n [`pcm-button-${this.size}`]: true,\n [`pcm-button-${this.shape}`]: true,\n 'pcm-button-loading': this.loading,\n 'pcm-button-disabled': this.disabled,\n 'pcm-button-block': this.block\n };\n\n // 计算自定义样式\n const customStyle = {};\n if (this.backgroundColor) {\n customStyle['backgroundColor'] = this.backgroundColor;\n }\n if (this.textColor) {\n customStyle['color'] = this.textColor;\n }\n if (this.borderColor) {\n customStyle['borderColor'] = this.borderColor;\n }\n if (this.borderRadius !== null) {\n customStyle['borderRadius'] = `${this.borderRadius}px`;\n }\n if (this.width) {\n customStyle['width'] = this.width;\n }\n if (this.borderStyle) {\n customStyle['borderStyle'] = this.borderStyle;\n }\n\n return (\n <button\n class={Object.keys(classes).filter(key => classes[key]).join(' ')}\n style={customStyle}\n disabled={this.disabled}\n type=\"button\"\n >\n {this.loading && (\n <span class=\"loading-icon\"></span>\n )}\n {this.icon && !this.loading && (\n <span class=\"button-icon\">\n <img src={this.icon} alt=\"\" />\n </span>\n )}\n <slot />\n </button>\n );\n }\n}\n",":host {\n display: block;\n}\n\n/* 加载和错误状态样式 */\n.loading-container,\n.error-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 200px;\n width: 100%;\n color: #86909C;\n font-size: 14px;\n text-align: center;\n}\n\n.loading-spinner {\n width: 32px;\n height: 32px;\n border: 3px solid #f3f3f3;\n border-top: 3px solid #1677FF;\n border-radius: 50%;\n margin-bottom: 12px;\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n.error-icon {\n width: 32px;\n height: 32px;\n background-color: #FFF0F0;\n color: #F53F3F;\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n font-weight: bold;\n margin-bottom: 12px;\n}\n\n.error-message {\n color: #86909C;\n max-width: 80%;\n}\n\n.card-container {\n border-radius: 8px;\n padding: 16px;\n cursor: pointer;\n transition: all 0.2s ease;\n display: flex;\n flex-direction: column;\n background-color: #ffffff;\n border: 1px solid #E5E6EB;\n position: relative;\n height: 100%;\n min-width: 300px;\n}\n\n.card-container:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 21, 41, 0.08);\n}\n\n.card-header {\n display: flex;\n width: 100%;\n padding-bottom: 16px;\n gap: 12px;\n}\n\n.card-icon {\n width: 64px;\n height: 64px;\n margin-right: 12px;\n flex-shrink: 0;\n overflow: hidden;\n border-radius: 2px;\n background-color: #f8f9fa;\n}\n\n.card-icon img {\n width: 100%;\n height: 100%;\n object-fit: contain;\n}\n\n.card-info {\n flex: 1;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n\n.title-row {\n display: flex;\n align-items: center;\n}\n\n.title-wrapper {\n flex: 1;\n margin-right: 8px;\n overflow: hidden;\n}\n\n.card-title {\n font-size: 18px;\n font-weight: 700;\n color: #1D2129;\n line-height: 24px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n display: block;\n width: 100%;\n}\n\n.chat-tag {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 24px;\n padding: 0 8px;\n background-color: #F2F7E8;\n color: #56961F;\n font-size: 12px;\n border-radius: 4px;\n font-weight: 500;\n flex-shrink: 0;\n}\n\n.author-row {\n display: flex;\n align-items: center;\n margin-top: 8px;\n}\n\n.author-avatar {\n width: 16px;\n height: 16px;\n border-radius: 50%;\n margin-right: 4px;\n background-color: #f8f9fa;\n overflow: hidden;\n}\n\n.author-name {\n font-size: 12px;\n color: #86909C;\n}\n\n.card-description {\n font-size: 12px;\n color: #86909C;\n margin-top: 8px;\n line-height: 18px;\n height: 54px;\n display: -webkit-box;\n -webkit-line-clamp: 3;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: pre-line;\n word-break: break-word;\n}\n\n.card-footer {\n padding-top: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n border-top: 1px solid #E5E6EB;\n}\n\n.stats-container {\n display: flex;\n align-items: center;\n flex: 1;\n}\n\n.stat-item {\n display: flex;\n align-items: center;\n margin-right: 8px;\n color: #86909C;\n}\n\n.stat-icon {\n width: 16px;\n height: 16px;\n margin-right: 4px;\n background-repeat: no-repeat;\n background-position: center;\n background-size: contain;\n}\n\n.user-icon {\n /* 为图标添加SVG背景 */\n background-image: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' focusable='false' aria-hidden='true'%3E%3Cpath d='M12 14c-3.3 0-6-2.7-6-6s2.7-6 6-6 6 2.7 6 6-2.7 6-6 6Zm0-10C9.8 4 8 5.8 8 8s1.8 4 4 4 4-1.8 4-4-1.8-4-4-4Z' fill='currentColor'%3E%3C/path%3E%3Cpath d='M21.9 20.6c-.1-.2-2.3-5.6-9.9-5.6-7.6 0-9.8 5.4-9.9 5.6-.2.5 0 1.1.6 1.3.5.2 1.1 0 1.3-.5 0-.2 1.8-4.4 8-4.4s8 4.2 8.1 4.4c.2.5.8.8 1.3.5.5-.2.7-.8.5-1.3Z' fill='currentColor'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n.star-icon {\n /* 为图标添加SVG背景 */\n background-image: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' focusable='false' aria-hidden='true'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M12 5.03 9.57 9.1c-.17.3-.46.5-.8.55l-4.3.79 3 3.46c.22.26.32.6.28.93l-.62 4.46 4.41-1.9c.3-.12.63-.12.92 0l4.4 1.9-.6-4.46c-.05-.34.05-.67.27-.93l3-3.46-4.3-.79a1.17 1.17 0 0 1-.8-.55L12 5.03Zm-1-2.46a1.16 1.16 0 0 1 2 0l3.03 5.07 5.51 1c.89.17 1.26 1.24.68 1.92l-3.8 4.4.77 5.71c.13.9-.78 1.6-1.61 1.23L12 19.5l-5.58 2.4a1.17 1.17 0 0 1-1.61-1.23l.78-5.7-3.8-4.4a1.17 1.17 0 0 1 .67-1.92l5.51-1L11 2.56Z' fill='currentColor'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n.video-icon {\n /* 为图标添加SVG背景 */\n background-image: url(\"data:image/svg+xml,%3Csvg viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' focusable='false' aria-hidden='true'%3E%3Cpath fill-rule='evenodd' clip-rule='evenodd' d='M4 2a2 2 0 0 0-2 2v16c0 1.1.9 2 2 2h16a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2H4Zm0 2h16v16H4V4Zm5.5 3.13A1 1 0 0 0 8 8v8a1 1 0 0 0 1.5.87l7-4a1 1 0 0 0 0-1.74l-7-4ZM13.98 12 10 14.28V9.72L13.98 12Z' fill='currentColor'%3E%3C/path%3E%3C/svg%3E\");\n}\n\n.stat-value {\n font-size: 12px;\n}\n\n.use-button {\n font-size: 12px;\n color: #86909C;\n cursor: pointer;\n white-space: nowrap;\n}\n\n.use-button:hover {\n color: #1677FF;\n}\n\n/* 响应式样式 */\n@media screen and (max-width: 768px) {\n .card-container {\n padding: 12px;\n }\n \n .card-header {\n gap: 8px;\n padding-bottom: 12px;\n }\n \n .card-icon {\n width: 48px;\n height: 48px;\n }\n \n .card-title {\n font-size: 16px;\n line-height: 20px;\n }\n \n .card-description {\n font-size: 12px;\n line-height: 16px;\n height: 48px;\n }\n} ","'use strict';\n\nfunction index({ interruptPatterns = [], skipEmptyRows = true } = {}) {\n return {\n extensions: [\n {\n name: 'spanTable',\n level: 'block', // Is this a block-level or inline-level tokenizer?\n start(src) { return src.match(/\\n *([^\\n ].*\\|.*)\\n/m)?.index; }, // Hint to Marked.js to stop and check for a match\n tokenizer(src, tokens) {\n // const regex = this.tokenizer.rules.block.table;\n let regexString = '^ *([^\\\\n ].*\\\\|.*\\\\n(?: *[^\\\\s].*\\\\n)*?)' // Header\n + ' {0,3}(?:\\\\| *)?(:?-+(?: *(?:100|[1-9][0-9]?%) *-+)?:? *(?:\\\\| *:?-+(?: *(?:100|[1-9][0-9]?%) *-+)?:? *)*)(?:\\\\| *)?' // Align\n + '(?:\\\\n((?:(?! *\\\\n| {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})' // Cells\n + '(?:\\\\n+|$)| {0,3}#{1,6}(?:\\\\s|$)| {0,3}>| {4}[^\\\\n]| {0,3}(?:`{3,}'\n + '(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n| {0,3}(?:[*+-]|1[.)]) |'\n + '<\\\\/?(?:address|article|aside|base|basefont|blockquote|body'\n + '|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt'\n + '|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]'\n + '|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem'\n + '|meta|nav|noframes|ol|optgroup|option|p|param|section|source'\n + '|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul)'\n + '(?: +|\\\\n|\\\\/?>)|<(?:script|pre|style|textarea|!--)endRegex).*(?:\\\\n|$))*)\\\\n*|$)'; // Cells\n\n regexString = regexString.replace('endRegex', interruptPatterns.map(str => `|(?:${str})`).join(''));\n const widthRegex = / *(?:100|[1-9][0-9]?%) */g;\n const regex = new RegExp(regexString);\n const cap = regex.exec(src);\n\n if (cap) {\n const item = {\n type: 'spanTable',\n header: cap[1].replace(/\\n$/, '').split('\\n'),\n align: cap[2].replace(widthRegex, '').replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n rows: cap[3]?.trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : [],\n width: cap[2].replace(/:/g, '').replace(/-+| /g, '').split('|')\n };\n\n // Get first header row to determine how many columns\n item.header[0] = splitCells(item.header[0]);\n\n const colCount = item.header[0].reduce((length, header) => {\n return length + header.colspan;\n }, 0);\n\n if (colCount === item.align.length) {\n item.raw = cap[0];\n\n let i, j, k, row;\n\n // Get alignment row (:---:)\n let l = item.align.length;\n\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n // Get any remaining header rows\n l = item.header.length;\n for (i = 1; i < l; i++) {\n item.header[i] = splitCells(item.header[i], colCount, item.header[i - 1], skipEmptyRows);\n }\n\n // Get main table cells\n l = item.rows.length;\n for (i = 0; i < l; i++) {\n item.rows[i] = splitCells(item.rows[i], colCount, item.rows[i - 1], skipEmptyRows);\n }\n\n // header child tokens\n l = item.header.length;\n for (j = 0; j < l; j++) {\n row = item.header[j];\n for (k = 0; k < row.length; k++) {\n row[k].tokens = [];\n this.lexer.inline(row[k].text, row[k].tokens);\n }\n }\n\n // cell child tokens\n l = item.rows.length;\n for (j = 0; j < l; j++) {\n row = item.rows[j];\n for (k = 0; k < row.length; k++) {\n row[k].tokens = [];\n this.lexer.inline(row[k].text, row[k].tokens);\n }\n }\n return item;\n }\n }\n },\n renderer(token) {\n let i, j, row, cell, col, text;\n let output = '<table>';\n output += '<thead>';\n for (i = 0; i < token.header.length; i++) {\n row = token.header[i];\n let col = 0;\n output += '<tr>';\n for (j = 0; j < row.length; j++) {\n cell = row[j];\n text = this.parser.parseInline(cell.tokens);\n output += getTableCell(text, cell, 'th', token.align[col], token.width[col]);\n col += cell.colspan;\n }\n output += '</tr>';\n }\n output += '</thead>';\n if (token.rows.length) {\n output += '<tbody>';\n for (i = 0; i < token.rows.length; i++) {\n row = token.rows[i];\n col = 0;\n if (!row[0].emptyRow) {\n output += '<tr>';\n for (j = 0; j < row.length; j++) {\n cell = row[j];\n text = this.parser.parseInline(cell.tokens);\n output += getTableCell(text, cell, 'td', token.align[col], token.width[col]);\n col += cell.colspan;\n }\n output += '</tr>';\n }\n }\n output += '</tbody>';\n }\n output += '</table>';\n return output;\n }\n }\n ]\n };\n}\n\nconst getTableCell = (text, cell, type, align, width) => {\n if (!cell.rowspan) {\n return '';\n }\n const tag = `<${type}`\n + `${cell.colspan > 1 ? ` colspan=${cell.colspan}` : ''}`\n + `${cell.rowspan > 1 ? ` rowspan=${cell.rowspan}` : ''}`\n + `${align ? ` align=${align}` : ''}`\n + `${width ? ` width=${width}` : ''}>`;\n return `${tag + text}</${type}>\\n`;\n};\n\nconst splitCells = (tableRow, count, prevRow = [], skipEmptyRows) => {\n const cells = [...tableRow.trim().matchAll(/(?:[^|\\\\]|\\\\.?)+(?:\\|+|$)/g)].map((x) => x[0]);\n\n // Remove first/last cell in a row if whitespace only and no leading/trailing pipe\n if (!cells[0]?.trim()) { cells.shift(); }\n if (!cells[cells.length - 1]?.trim()) { cells.pop(); }\n\n let numCols = 0;\n let i, j, trimmedCell, prevCell, prevCols;\n\n for (i = 0; i < cells.length; i++) {\n trimmedCell = cells[i].split(/\\|+$/)[0];\n cells[i] = {\n rowspan: 1,\n colspan: Math.max(cells[i].length - trimmedCell.length, 1),\n text: trimmedCell.trim().replace(/\\\\\\|/g, '|')\n // display escaped pipes as normal character\n };\n\n // Handle Rowspan\n if (trimmedCell.slice(-1) === '^' && prevRow.length) {\n // Find matching cell in previous row\n prevCols = 0;\n for (j = 0; j < prevRow.length; j++) {\n prevCell = prevRow[j];\n if ((prevCols === numCols) && (prevCell.colspan === cells[i].colspan)) {\n // merge into matching cell in previous row (the \"target\")\n cells[i].rowSpanTarget = prevCell.rowSpanTarget ?? prevCell;\n cells[i].rowSpanTarget.text += ` ${cells[i].text.slice(0, -1)}`;\n cells[i].rowSpanTarget.rowspan += 1;\n cells[i].rowspan = 0;\n break;\n }\n prevCols += prevCell.colspan;\n if (prevCols > numCols) { break; }\n }\n }\n\n numCols += cells[i].colspan;\n }\n\n // If all cells have been merged, flag as an empty row\n if (cells.length > 0 && skipEmptyRows && cells.length === cells.filter((cell) => { return cell.rowspan === 0; }).length) {\n cells[0].emptyRow = true;\n for (i = 0; i < cells.length; i++) {\n cells[i].rowSpanTarget.rowspan -= 1;\n }\n }\n\n // Force main cell rows to match header column count\n if (numCols > count) {\n cells.splice(count);\n } else {\n while (numCols < count) {\n cells.push({\n rowspan: 1,\n colspan: 1,\n text: ''\n });\n numCols += 1;\n }\n }\n return cells;\n};\n\nmodule.exports = index;\n","\n.markdown-body {\n --base-size-4: 4px;\n --base-size-8: 8px;\n --base-size-16: 16px;\n --base-size-24: 24px;\n --base-size-40: 40px;\n --base-text-weight-normal: 400;\n --base-text-weight-medium: 500;\n --base-text-weight-semibold: 600;\n --fontStack-monospace: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace;\n --fgColor-accent: Highlight;\n }\n \n @media (prefers-color-scheme: dark) {\n \n .markdown-body,\n [data-theme=\"dark\"] {\n /* dark */\n color-scheme: dark;\n --focus-outlineColor: #0969da;\n --fgColor-default: #1f2328;\n --fgColor-muted: #59636e;\n --fgColor-accent: #0969da;\n --fgColor-success: #1a7f37;\n --fgColor-attention: #9a6700;\n --fgColor-danger: #d1242f;\n --fgColor-done: #8250df;\n --bgColor-default: #ffffff;\n --bgColor-muted: #f6f8fa;\n --bgColor-neutral-muted: #818b981f;\n --bgColor-attention-muted: #fff8c5;\n --borderColor-default: #d1d9e0;\n --borderColor-muted: #d1d9e0b3;\n --borderColor-neutral-muted: #d1d9e0b3;\n --borderColor-accent-emphasis: #0969da;\n --borderColor-success-emphasis: #1a7f37;\n --borderColor-attention-emphasis: #9a6700;\n --borderColor-danger-emphasis: #cf222e;\n --borderColor-done-emphasis: #8250df;\n --color-prettylights-syntax-comment: #59636e;\n --color-prettylights-syntax-constant: #0550ae;\n --color-prettylights-syntax-constant-other-reference-link: #0a3069;\n --color-prettylights-syntax-entity: #6639ba;\n --color-prettylights-syntax-storage-modifier-import: #1f2328;\n --color-prettylights-syntax-entity-tag: #0550ae;\n --color-prettylights-syntax-keyword: #cf222e;\n --color-prettylights-syntax-string: #0a3069;\n --color-prettylights-syntax-variable: #953800;\n --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;\n --color-prettylights-syntax-brackethighlighter-angle: #59636e;\n --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;\n --color-prettylights-syntax-invalid-illegal-bg: #82071e;\n --color-prettylights-syntax-carriage-return-text: #f6f8fa;\n --color-prettylights-syntax-carriage-return-bg: #cf222e;\n --color-prettylights-syntax-string-regexp: #116329;\n --color-prettylights-syntax-markup-list: #3b2300;\n --color-prettylights-syntax-markup-heading: #0550ae;\n --color-prettylights-syntax-markup-italic: #1f2328;\n --color-prettylights-syntax-markup-bold: #1f2328;\n --color-prettylights-syntax-markup-deleted-text: #82071e;\n --color-prettylights-syntax-markup-deleted-bg: #ffebe9;\n --color-prettylights-syntax-markup-inserted-text: #116329;\n --color-prettylights-syntax-markup-inserted-bg: #dafbe1;\n --color-prettylights-syntax-markup-changed-text: #953800;\n --color-prettylights-syntax-markup-changed-bg: #ffd8b5;\n --color-prettylights-syntax-markup-ignored-text: #d1d9e0;\n --color-prettylights-syntax-markup-ignored-bg: #0550ae;\n --color-prettylights-syntax-meta-diff-range: #8250df;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #818b98;\n }\n }\n \n @media (prefers-color-scheme: light) {\n \n .markdown-body,\n [data-theme=\"light\"] {\n /* light */\n color-scheme: light;\n --focus-outlineColor: #0969da;\n --fgColor-default: #1f2328;\n --fgColor-muted: #59636e;\n --fgColor-accent: #0969da;\n --fgColor-success: #1a7f37;\n --fgColor-attention: #9a6700;\n --fgColor-danger: #d1242f;\n --fgColor-done: #8250df;\n --bgColor-default: #ffffff;\n --bgColor-muted: #f6f8fa;\n --bgColor-neutral-muted: #818b981f;\n --bgColor-attention-muted: #fff8c5;\n --borderColor-default: #d1d9e0;\n --borderColor-muted: #d1d9e0b3;\n --borderColor-neutral-muted: #d1d9e0b3;\n --borderColor-accent-emphasis: #0969da;\n --borderColor-success-emphasis: #1a7f37;\n --borderColor-attention-emphasis: #9a6700;\n --borderColor-danger-emphasis: #cf222e;\n --borderColor-done-emphasis: #8250df;\n --color-prettylights-syntax-comment: #59636e;\n --color-prettylights-syntax-constant: #0550ae;\n --color-prettylights-syntax-constant-other-reference-link: #0a3069;\n --color-prettylights-syntax-entity: #6639ba;\n --color-prettylights-syntax-storage-modifier-import: #1f2328;\n --color-prettylights-syntax-entity-tag: #0550ae;\n --color-prettylights-syntax-keyword: #cf222e;\n --color-prettylights-syntax-string: #0a3069;\n --color-prettylights-syntax-variable: #953800;\n --color-prettylights-syntax-brackethighlighter-unmatched: #82071e;\n --color-prettylights-syntax-brackethighlighter-angle: #59636e;\n --color-prettylights-syntax-invalid-illegal-text: #f6f8fa;\n --color-prettylights-syntax-invalid-illegal-bg: #82071e;\n --color-prettylights-syntax-carriage-return-text: #f6f8fa;\n --color-prettylights-syntax-carriage-return-bg: #cf222e;\n --color-prettylights-syntax-string-regexp: #116329;\n --color-prettylights-syntax-markup-list: #3b2300;\n --color-prettylights-syntax-markup-heading: #0550ae;\n --color-prettylights-syntax-markup-italic: #1f2328;\n --color-prettylights-syntax-markup-bold: #1f2328;\n --color-prettylights-syntax-markup-deleted-text: #82071e;\n --color-prettylights-syntax-markup-deleted-bg: #ffebe9;\n --color-prettylights-syntax-markup-inserted-text: #116329;\n --color-prettylights-syntax-markup-inserted-bg: #dafbe1;\n --color-prettylights-syntax-markup-changed-text: #953800;\n --color-prettylights-syntax-markup-changed-bg: #ffd8b5;\n --color-prettylights-syntax-markup-ignored-text: #d1d9e0;\n --color-prettylights-syntax-markup-ignored-bg: #0550ae;\n --color-prettylights-syntax-meta-diff-range: #8250df;\n --color-prettylights-syntax-sublimelinter-gutter-mark: #818b98;\n }\n }\n \n .markdown-body {\n -ms-text-size-adjust: 100%;\n -webkit-text-size-adjust: 100%;\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Noto Sans\", Helvetica, Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\";\n font-size: 16px;\n line-height: 1.5;\n word-wrap: break-word;\n }\n \n .markdown-body .octicon {\n display: inline-block;\n fill: currentColor;\n vertical-align: text-bottom;\n }\n \n .markdown-body h1:hover .anchor .octicon-link:before,\n .markdown-body h2:hover .anchor .octicon-link:before,\n .markdown-body h3:hover .anchor .octicon-link:before,\n .markdown-body h4:hover .anchor .octicon-link:before,\n .markdown-body h5:hover .anchor .octicon-link:before,\n .markdown-body h6:hover .anchor .octicon-link:before {\n width: 16px;\n height: 16px;\n content: ' ';\n display: inline-block;\n background-color: currentColor;\n -webkit-mask-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg>\");\n mask-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' version='1.1' aria-hidden='true'><path fill-rule='evenodd' d='M7.775 3.275a.75.75 0 001.06 1.06l1.25-1.25a2 2 0 112.83 2.83l-2.5 2.5a2 2 0 01-2.83 0 .75.75 0 00-1.06 1.06 3.5 3.5 0 004.95 0l2.5-2.5a3.5 3.5 0 00-4.95-4.95l-1.25 1.25zm-4.69 9.64a2 2 0 010-2.83l2.5-2.5a2 2 0 012.83 0 .75.75 0 001.06-1.06 3.5 3.5 0 00-4.95 0l-2.5 2.5a3.5 3.5 0 004.95 4.95l1.25-1.25a.75.75 0 00-1.06-1.06l-1.25 1.25a2 2 0 01-2.83 0z'></path></svg>\");\n }\n \n .markdown-body details,\n .markdown-body figcaption,\n .markdown-body figure {\n display: block;\n }\n \n .markdown-body summary {\n display: list-item;\n }\n \n .markdown-body [hidden] {\n display: none !important;\n }\n \n .markdown-body a {\n background-color: transparent;\n color: var(--fgColor-accent);\n text-decoration: none;\n }\n \n .markdown-body abbr[title] {\n border-bottom: none;\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n }\n \n .markdown-body b,\n .markdown-body strong {\n font-weight: var(--base-text-weight-semibold, 600);\n }\n \n .markdown-body dfn {\n font-style: italic;\n }\n \n .markdown-body h1 {\n margin: .67em 0;\n font-weight: var(--base-text-weight-semibold, 600);\n padding-bottom: .3em;\n font-size: 1.5em;\n border-bottom: 1px solid var(--borderColor-muted);\n }\n \n .markdown-body mark {\n background-color: var(--bgColor-attention-muted);\n color: var(--fgColor-default);\n }\n \n .markdown-body small {\n font-size: 90%;\n }\n \n .markdown-body sub,\n .markdown-body sup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n }\n \n .markdown-body sub {\n bottom: -0.25em;\n }\n \n .markdown-body sup {\n top: -0.5em;\n }\n \n .markdown-body img {\n border-style: none;\n max-width: 100%;\n box-sizing: content-box;\n }\n \n .markdown-body code,\n .markdown-body kbd,\n .markdown-body pre,\n .markdown-body samp {\n font-family: monospace;\n font-size: 1em;\n }\n \n .markdown-body figure {\n margin: 1em var(--base-size-40);\n }\n \n .markdown-body hr {\n box-sizing: content-box;\n overflow: hidden;\n background: transparent;\n border-bottom: 1px solid var(--borderColor-muted);\n height: .25em;\n padding: 0;\n margin: var(--base-size-24) 0;\n background-color: var(--borderColor-default);\n border: 0;\n }\n \n .markdown-body input {\n font: inherit;\n margin: 0;\n overflow: visible;\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n }\n \n .markdown-body [type=button],\n .markdown-body [type=reset],\n .markdown-body [type=submit] {\n -webkit-appearance: button;\n appearance: button;\n }\n \n .markdown-body [type=checkbox],\n .markdown-body [type=radio] {\n box-sizing: border-box;\n padding: 0;\n }\n \n .markdown-body [type=number]::-webkit-inner-spin-button,\n .markdown-body [type=number]::-webkit-outer-spin-button {\n height: auto;\n }\n \n .markdown-body [type=search]::-webkit-search-cancel-button,\n .markdown-body [type=search]::-webkit-search-decoration {\n -webkit-appearance: none;\n appearance: none;\n }\n \n .markdown-body ::-webkit-input-placeholder {\n color: inherit;\n opacity: .54;\n }\n \n .markdown-body ::-webkit-file-upload-button {\n -webkit-appearance: button;\n appearance: button;\n font: inherit;\n }\n \n .markdown-body a:hover {\n text-decoration: underline;\n }\n \n .markdown-body ::placeholder {\n color: var(--fgColor-muted);\n opacity: 1;\n }\n \n .markdown-body hr::before {\n display: table;\n content: \"\";\n }\n \n .markdown-body hr::after {\n display: table;\n clear: both;\n content: \"\";\n }\n \n .markdown-body table {\n border-spacing: 0;\n border-collapse: collapse;\n display: block;\n width: max-content;\n max-width: 100%;\n overflow: auto;\n font-variant: tabular-nums;\n }\n \n .markdown-body td,\n .markdown-body th {\n padding: 0;\n }\n \n .markdown-body details summary {\n cursor: pointer;\n }\n \n .markdown-body a:focus,\n .markdown-body [role=button]:focus,\n .markdown-body input[type=radio]:focus,\n .markdown-body input[type=checkbox]:focus {\n outline: 2px solid var(--focus-outlineColor);\n outline-offset: -2px;\n box-shadow: none;\n }\n \n .markdown-body a:focus:not(:focus-visible),\n .markdown-body [role=button]:focus:not(:focus-visible),\n .markdown-body input[type=radio]:focus:not(:focus-visible),\n .markdown-body input[type=checkbox]:focus:not(:focus-visible) {\n outline: solid 1px transparent;\n }\n \n .markdown-body a:focus-visible,\n .markdown-body [role=button]:focus-visible,\n .markdown-body input[type=radio]:focus-visible,\n .markdown-body input[type=checkbox]:focus-visible {\n outline: 2px solid var(--focus-outlineColor);\n outline-offset: -2px;\n box-shadow: none;\n }\n \n .markdown-body a:not([class]):focus,\n .markdown-body a:not([class]):focus-visible,\n .markdown-body input[type=radio]:focus,\n .markdown-body input[type=radio]:focus-visible,\n .markdown-body input[type=checkbox]:focus,\n .markdown-body input[type=checkbox]:focus-visible {\n outline-offset: 0;\n }\n \n .markdown-body kbd {\n display: inline-block;\n padding: var(--base-size-4);\n font: 11px var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);\n line-height: 10px;\n color: var(--fgColor-default);\n vertical-align: middle;\n background-color: var(--bgColor-muted);\n border: solid 1px var(--borderColor-neutral-muted);\n border-bottom-color: var(--borderColor-neutral-muted);\n border-radius: 6px;\n box-shadow: inset 0 -1px 0 var(--borderColor-neutral-muted);\n }\n \n .markdown-body h1,\n .markdown-body h2,\n .markdown-body h3,\n .markdown-body h4,\n .markdown-body h5,\n .markdown-body h6 {\n margin-top: var(--base-size-24);\n margin-bottom: var(--base-size-16);\n font-weight: var(--base-text-weight-semibold, 600);\n line-height: 1.25;\n }\n \n .markdown-body h2 {\n font-weight: var(--base-text-weight-semibold, 600);\n padding-bottom: .3em;\n font-size: 1.2em;\n border-bottom: 1px solid var(--borderColor-muted);\n }\n \n .markdown-body h3 {\n font-weight: var(--base-text-weight-semibold, 600);\n font-size: 1.05em;\n }\n \n .markdown-body h4 {\n font-weight: var(--base-text-weight-semibold, 600);\n font-size: 0.875em;\n }\n \n .markdown-body h5 {\n font-weight: var(--base-text-weight-semibold, 600);\n font-size: .85em;\n }\n \n .markdown-body h6 {\n font-weight: var(--base-text-weight-semibold, 600);\n font-size: .80em;\n color: var(--fgColor-muted);\n }\n \n .markdown-body p {\n margin-top: 0;\n margin-bottom: 10px;\n }\n \n .markdown-body blockquote {\n margin: 0;\n padding: 0 1em;\n color: var(--fgColor-muted);\n border-left: .25em solid var(--borderColor-default);\n }\n \n .markdown-body ul,\n .markdown-body ol {\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 2em;\n }\n \n .markdown-body ol ol,\n .markdown-body ul ol {\n list-style-type: lower-roman;\n }\n \n .markdown-body ul ul ol,\n .markdown-body ul ol ol,\n .markdown-body ol ul ol,\n .markdown-body ol ol ol {\n list-style-type: lower-alpha;\n }\n \n .markdown-body dd {\n margin-left: 0;\n }\n \n .markdown-body tt,\n .markdown-body code,\n .markdown-body samp {\n font-family: var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);\n font-size: 12px;\n }\n \n .markdown-body pre {\n margin-top: 0;\n margin-bottom: 0;\n font-family: var(--fontStack-monospace, ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace);\n font-size: 12px;\n word-wrap: normal;\n }\n \n .markdown-body .octicon {\n display: inline-block;\n overflow: visible !important;\n vertical-align: text-bottom;\n fill: currentColor;\n }\n \n .markdown-body input::-webkit-outer-spin-button,\n .markdown-body input::-webkit-inner-spin-button {\n margin: 0;\n appearance: none;\n }\n \n .markdown-body .mr-2 {\n margin-right: var(--base-size-8, 8px) !important;\n }\n \n .markdown-body::before {\n display: table;\n content: \"\";\n }\n \n .markdown-body::after {\n display: table;\n clear: both;\n content: \"\";\n }\n \n .markdown-body>*:first-child {\n margin-top: 0 !important;\n }\n \n .markdown-body>*:last-child {\n margin-bottom: 0 !important;\n }\n \n .markdown-body a:not([href]) {\n color: inherit;\n text-decoration: none;\n }\n \n .markdown-body .absent {\n color: var(--fgColor-danger);\n }\n \n .markdown-body .anchor {\n float: left;\n padding-right: var(--base-size-4);\n margin-left: -20px;\n line-height: 1;\n }\n \n .markdown-body .anchor:focus {\n outline: none;\n }\n \n .markdown-body p,\n .markdown-body blockquote,\n .markdown-body ul,\n .markdown-body ol,\n .markdown-body dl,\n .markdown-body table,\n .markdown-body pre,\n .markdown-body details {\n margin-top: 0;\n margin-bottom: var(--base-size-16);\n font-size: 16px;\n font-weight: 400;\n }\n \n .markdown-body blockquote>:first-child {\n margin-top: 0;\n }\n \n .markdown-body blockquote>:last-child {\n margin-bottom: 0;\n }\n \n .markdown-body h1 .octicon-link,\n .markdown-body h2 .octicon-link,\n .markdown-body h3 .octicon-link,\n .markdown-body h4 .octicon-link,\n .markdown-body h5 .octicon-link,\n .markdown-body h6 .octicon-link {\n color: var(--fgColor-default);\n vertical-align: middle;\n visibility: hidden;\n }\n \n .markdown-body h1:hover .anchor,\n .markdown-body h2:hover .anchor,\n .markdown-body h3:hover .anchor,\n .markdown-body h4:hover .anchor,\n .markdown-body h5:hover .anchor,\n .markdown-body h6:hover .anchor {\n text-decoration: none;\n }\n \n .markdown-body h1:hover .anchor .octicon-link,\n .markdown-body h2:hover .anchor .octicon-link,\n .markdown-body h3:hover .anchor .octicon-link,\n .markdown-body h4:hover .anchor .octicon-link,\n .markdown-body h5:hover .anchor .octicon-link,\n .markdown-body h6:hover .anchor .octicon-link {\n visibility: visible;\n }\n \n .markdown-body h1 tt,\n .markdown-body h1 code,\n .markdown-body h2 tt,\n .markdown-body h2 code,\n .markdown-body h3 tt,\n .markdown-body h3 code,\n .markdown-body h4 tt,\n .markdown-body h4 code,\n .markdown-body h5 tt,\n .markdown-body h5 code,\n .markdown-body h6 tt,\n .markdown-body h6 code {\n padding: 0 .2em;\n font-size: inherit;\n }\n \n .markdown-body summary h1,\n .markdown-body summary h2,\n .markdown-body summary h3,\n .markdown-body summary h4,\n .markdown-body summary h5,\n .markdown-body summary h6 {\n display: inline-block;\n }\n \n .markdown-body summary h1 .anchor,\n .markdown-body summary h2 .anchor,\n .markdown-body summary h3 .anchor,\n .markdown-body summary h4 .anchor,\n .markdown-body summary h5 .anchor,\n .markdown-body summary h6 .anchor {\n margin-left: -40px;\n }\n \n .markdown-body summary h1,\n .markdown-body summary h2 {\n padding-bottom: 0;\n border-bottom: 0;\n }\n \n .markdown-body ul.no-list,\n .markdown-body ol.no-list {\n padding: 0;\n list-style-type: none;\n }\n \n .markdown-body ol[type=\"a s\"] {\n list-style-type: lower-alpha;\n }\n \n .markdown-body ol[type=\"A s\"] {\n list-style-type: upper-alpha;\n }\n \n .markdown-body ol[type=\"i s\"] {\n list-style-type: lower-roman;\n }\n \n .markdown-body ol[type=\"I s\"] {\n list-style-type: upper-roman;\n }\n \n .markdown-body ol[type=\"1\"] {\n list-style-type: decimal;\n }\n \n .markdown-body div>ol:not([type]) {\n list-style-type: decimal;\n }\n \n .markdown-body ul ul,\n .markdown-body ul ol,\n .markdown-body ol ol,\n .markdown-body ol ul {\n margin-top: 0;\n margin-bottom: 0;\n }\n \n .markdown-body li>p {\n margin-top: var(--base-size-16);\n }\n \n .markdown-body li+li {\n margin-top: .25em;\n }\n \n .markdown-body dl {\n padding: 0;\n }\n \n .markdown-body dl dt {\n padding: 0;\n margin-top: var(--base-size-16);\n font-size: 1em;\n font-style: italic;\n font-weight: var(--base-text-weight-semibold, 600);\n }\n \n .markdown-body dl dd {\n padding: 0 var(--base-size-16);\n margin-bottom: var(--base-size-16);\n }\n \n .markdown-body table th {\n font-weight: var(--base-text-weight-semibold, 600);\n }\n \n .markdown-body table th,\n .markdown-body table td {\n padding: 6px 13px;\n border: 1px solid var(--borderColor-default);\n }\n \n .markdown-body table td>:last-child {\n margin-bottom: 0;\n }\n \n .markdown-body table tr {\n background-color: var(--bgColor-default);\n border-top: 1px solid var(--borderColor-muted);\n }\n \n .markdown-body table tr:nth-child(2n) {\n background-color: var(--bgColor-muted);\n }\n \n .markdown-body table img {\n background-color: transparent;\n }\n \n .markdown-body img[align=right] {\n padding-left: 20px;\n }\n \n .markdown-body img[align=left] {\n padding-right: 20px;\n }\n \n .markdown-body .emoji {\n max-width: none;\n vertical-align: text-top;\n background-color: transparent;\n }\n \n .markdown-body span.frame {\n display: block;\n overflow: hidden;\n }\n \n .markdown-body span.frame>span {\n display: block;\n float: left;\n width: auto;\n padding: 7px;\n margin: 13px 0 0;\n overflow: hidden;\n border: 1px solid var(--borderColor-default);\n }\n \n .markdown-body span.frame span img {\n display: block;\n float: left;\n }\n \n .markdown-body span.frame span span {\n display: block;\n padding: 5px 0 0;\n clear: both;\n color: var(--fgColor-default);\n }\n \n .markdown-body span.align-center {\n display: block;\n overflow: hidden;\n clear: both;\n }\n \n .markdown-body span.align-center>span {\n display: block;\n margin: 13px auto 0;\n overflow: hidden;\n text-align: center;\n }\n \n .markdown-body span.align-center span img {\n margin: 0 auto;\n text-align: center;\n }\n \n .markdown-body span.align-right {\n display: block;\n overflow: hidden;\n clear: both;\n }\n \n .markdown-body span.align-right>span {\n display: block;\n margin: 13px 0 0;\n overflow: hidden;\n text-align: right;\n }\n \n .markdown-body span.align-right span img {\n margin: 0;\n text-align: right;\n }\n \n .markdown-body span.float-left {\n display: block;\n float: left;\n margin-right: 13px;\n overflow: hidden;\n }\n \n .markdown-body span.float-left span {\n margin: 13px 0 0;\n }\n \n .markdown-body span.float-right {\n display: block;\n float: right;\n margin-left: 13px;\n overflow: hidden;\n }\n \n .markdown-body span.float-right>span {\n display: block;\n margin: 13px auto 0;\n overflow: hidden;\n text-align: right;\n }\n \n .markdown-body code,\n .markdown-body tt {\n padding: .2em .4em;\n margin: 0;\n font-size: 85%;\n white-space: break-spaces;\n background-color: var(--bgColor-neutral-muted);\n border-radius: 6px;\n }\n \n .markdown-body code br,\n .markdown-body tt br {\n display: none;\n }\n \n .markdown-body del code {\n text-decoration: inherit;\n }\n \n .markdown-body samp {\n font-size: 85%;\n }\n \n .markdown-body pre code {\n font-size: 100%;\n }\n \n .markdown-body pre>code {\n padding: 0;\n margin: 0;\n word-break: normal;\n white-space: pre;\n background: transparent;\n border: 0;\n }\n \n .markdown-body .highlight {\n margin-bottom: var(--base-size-16);\n }\n \n .markdown-body .highlight pre {\n margin-bottom: 0;\n word-break: normal;\n }\n \n .markdown-body .highlight pre,\n .markdown-body pre {\n padding: var(--base-size-16);\n overflow: auto;\n font-size: 85%;\n line-height: 1.45;\n color: var(--fgColor-default);\n background-color: var(--bgColor-muted);\n border-radius: 6px;\n }\n \n .markdown-body pre code,\n .markdown-body pre tt {\n display: inline;\n max-width: auto;\n padding: 0;\n margin: 0;\n overflow: visible;\n line-height: inherit;\n word-wrap: normal;\n background-color: transparent;\n border: 0;\n }\n \n .markdown-body .csv-data td,\n .markdown-body .csv-data th {\n padding: 5px;\n overflow: hidden;\n font-size: 12px;\n line-height: 1;\n text-align: left;\n white-space: nowrap;\n }\n \n .markdown-body .csv-data .blob-num {\n padding: 10px var(--base-size-8) 9px;\n text-align: right;\n background: var(--bgColor-default);\n border: 0;\n }\n \n .markdown-body .csv-data tr {\n border-top: 0;\n }\n \n .markdown-body .csv-data th {\n font-weight: var(--base-text-weight-semibold, 600);\n background: var(--bgColor-muted);\n border-top: 0;\n }\n \n .markdown-body [data-footnote-ref]::before {\n content: \"[\";\n }\n \n .markdown-body [data-footnote-ref]::after {\n content: \"]\";\n }\n \n .markdown-body .footnotes {\n font-size: 12px;\n color: var(--fgColor-muted);\n border-top: 1px solid var(--borderColor-default);\n }\n \n .markdown-body .footnotes ol {\n padding-left: var(--base-size-16);\n }\n \n .markdown-body .footnotes ol ul {\n display: inline-block;\n padding-left: var(--base-size-16);\n margin-top: var(--base-size-16);\n }\n \n .markdown-body .footnotes li {\n position: relative;\n }\n \n .markdown-body .footnotes li:target::before {\n position: absolute;\n top: calc(var(--base-size-8)*-1);\n right: calc(var(--base-size-8)*-1);\n bottom: calc(var(--base-size-8)*-1);\n left: calc(var(--base-size-24)*-1);\n pointer-events: none;\n content: \"\";\n border: 2px solid var(--borderColor-accent-emphasis);\n border-radius: 6px;\n }\n \n .markdown-body .footnotes li:target {\n color: var(--fgColor-default);\n }\n \n .markdown-body .footnotes .data-footnote-backref g-emoji {\n font-family: monospace;\n }\n \n .markdown-body body:has(:modal) {\n padding-right: var(--dialog-scrollgutter) !important;\n }\n \n .markdown-body .pl-c {\n color: var(--color-prettylights-syntax-comment);\n }\n \n .markdown-body .pl-c1,\n .markdown-body .pl-s .pl-v {\n color: var(--color-prettylights-syntax-constant);\n }\n \n .markdown-body .pl-e,\n .markdown-body .pl-en {\n color: var(--color-prettylights-syntax-entity);\n }\n \n .markdown-body .pl-smi,\n .markdown-body .pl-s .pl-s1 {\n color: var(--color-prettylights-syntax-storage-modifier-import);\n }\n \n .markdown-body .pl-ent {\n color: var(--color-prettylights-syntax-entity-tag);\n }\n \n .markdown-body .pl-k {\n color: var(--color-prettylights-syntax-keyword);\n }\n \n .markdown-body .pl-s,\n .markdown-body .pl-pds,\n .markdown-body .pl-s .pl-pse .pl-s1,\n .markdown-body .pl-sr,\n .markdown-body .pl-sr .pl-cce,\n .markdown-body .pl-sr .pl-sre,\n .markdown-body .pl-sr .pl-sra {\n color: var(--color-prettylights-syntax-string);\n }\n \n .markdown-body .pl-v,\n .markdown-body .pl-smw {\n color: var(--color-prettylights-syntax-variable);\n }\n \n .markdown-body .pl-bu {\n color: var(--color-prettylights-syntax-brackethighlighter-unmatched);\n }\n \n .markdown-body .pl-ii {\n color: var(--color-prettylights-syntax-invalid-illegal-text);\n background-color: var(--color-prettylights-syntax-invalid-illegal-bg);\n }\n \n .markdown-body .pl-c2 {\n color: var(--color-prettylights-syntax-carriage-return-text);\n background-color: var(--color-prettylights-syntax-carriage-return-bg);\n }\n \n .markdown-body .pl-sr .pl-cce {\n font-weight: bold;\n color: var(--color-prettylights-syntax-string-regexp);\n }\n \n .markdown-body .pl-ml {\n color: var(--color-prettylights-syntax-markup-list);\n }\n \n .markdown-body .pl-mh,\n .markdown-body .pl-mh .pl-en,\n .markdown-body .pl-ms {\n font-weight: bold;\n color: var(--color-prettylights-syntax-markup-heading);\n }\n \n .markdown-body .pl-mi {\n font-style: italic;\n color: var(--color-prettylights-syntax-markup-italic);\n }\n \n .markdown-body .pl-mb {\n font-weight: bold;\n color: var(--color-prettylights-syntax-markup-bold);\n }\n \n .markdown-body .pl-md {\n color: var(--color-prettylights-syntax-markup-deleted-text);\n background-color: var(--color-prettylights-syntax-markup-deleted-bg);\n }\n \n .markdown-body .pl-mi1 {\n color: var(--color-prettylights-syntax-markup-inserted-text);\n background-color: var(--color-prettylights-syntax-markup-inserted-bg);\n }\n \n .markdown-body .pl-mc {\n color: var(--color-prettylights-syntax-markup-changed-text);\n background-color: var(--color-prettylights-syntax-markup-changed-bg);\n }\n \n .markdown-body .pl-mi2 {\n color: var(--color-prettylights-syntax-markup-ignored-text);\n background-color: var(--color-prettylights-syntax-markup-ignored-bg);\n }\n \n .markdown-body .pl-mdr {\n font-weight: bold;\n color: var(--color-prettylights-syntax-meta-diff-range);\n }\n \n .markdown-body .pl-ba {\n color: var(--color-prettylights-syntax-brackethighlighter-angle);\n }\n \n .markdown-body .pl-sg {\n color: var(--color-prettylights-syntax-sublimelinter-gutter-mark);\n }\n \n .markdown-body .pl-corl {\n text-decoration: underline;\n color: var(--color-prettylights-syntax-constant-other-reference-link);\n }\n \n .markdown-body [role=button]:focus:not(:focus-visible),\n .markdown-body [role=tabpanel][tabindex=\"0\"]:focus:not(:focus-visible),\n .markdown-body button:focus:not(:focus-visible),\n .markdown-body summary:focus:not(:focus-visible),\n .markdown-body a:focus:not(:focus-visible) {\n outline: none;\n box-shadow: none;\n }\n \n .markdown-body [tabindex=\"0\"]:focus:not(:focus-visible),\n .markdown-body details-dialog:focus:not(:focus-visible) {\n outline: none;\n }\n \n .markdown-body g-emoji {\n display: inline-block;\n min-width: 1ch;\n font-family: \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n font-size: 1em;\n font-style: normal !important;\n font-weight: var(--base-text-weight-normal, 400);\n line-height: 1;\n vertical-align: -0.075em;\n }\n \n .markdown-body g-emoji img {\n width: 1em;\n height: 1em;\n }\n \n .markdown-body .task-list-item {\n list-style-type: none;\n }\n \n .markdown-body .task-list-item label {\n font-weight: var(--base-text-weight-normal, 400);\n }\n \n .markdown-body .task-list-item.enabled label {\n cursor: pointer;\n }\n \n .markdown-body .task-list-item+.task-list-item {\n margin-top: var(--base-size-4);\n }\n \n .markdown-body .task-list-item .handle {\n display: none;\n }\n \n .markdown-body .task-list-item-checkbox {\n margin: 0 .2em .25em -1.4em;\n vertical-align: middle;\n }\n \n .markdown-body ul:dir(rtl) .task-list-item-checkbox {\n margin: 0 -1.6em .25em .2em;\n }\n \n .markdown-body ol:dir(rtl) .task-list-item-checkbox {\n margin: 0 -1.6em .25em .2em;\n }\n \n .markdown-body .contains-task-list:hover .task-list-item-convert-container,\n .markdown-body .contains-task-list:focus-within .task-list-item-convert-container {\n display: block;\n width: auto;\n height: 24px;\n overflow: visible;\n clip: auto;\n }\n \n .markdown-body ::-webkit-calendar-picker-indicator {\n filter: invert(50%);\n }\n \n .markdown-body .markdown-alert {\n padding: var(--base-size-8) var(--base-size-16);\n margin-bottom: var(--base-size-16);\n color: inherit;\n border-left: .25em solid var(--borderColor-default);\n }\n \n .markdown-body .markdown-alert>:first-child {\n margin-top: 0;\n }\n \n .markdown-body .markdown-alert>:last-child {\n margin-bottom: 0;\n }\n \n .markdown-body .markdown-alert .markdown-alert-title {\n display: flex;\n font-weight: var(--base-text-weight-medium, 500);\n align-items: center;\n line-height: 1;\n }\n \n .markdown-body .markdown-alert.markdown-alert-note {\n border-left-color: var(--borderColor-accent-emphasis);\n }\n \n .markdown-body .markdown-alert.markdown-alert-note .markdown-alert-title {\n color: var(--fgColor-accent);\n }\n \n .markdown-body .markdown-alert.markdown-alert-important {\n border-left-color: var(--borderColor-done-emphasis);\n }\n \n .markdown-body .markdown-alert.markdown-alert-important .markdown-alert-title {\n color: var(--fgColor-done);\n }\n \n .markdown-body .markdown-alert.markdown-alert-warning {\n border-left-color: var(--borderColor-attention-emphasis);\n }\n \n .markdown-body .markdown-alert.markdown-alert-warning .markdown-alert-title {\n color: var(--fgColor-attention);\n }\n \n .markdown-body .markdown-alert.markdown-alert-tip {\n border-left-color: var(--borderColor-success-emphasis);\n }\n \n .markdown-body .markdown-alert.markdown-alert-tip .markdown-alert-title {\n color: var(--fgColor-success);\n }\n \n .markdown-body .markdown-alert.markdown-alert-caution {\n border-left-color: var(--borderColor-danger-emphasis);\n }\n \n .markdown-body .markdown-alert.markdown-alert-caution .markdown-alert-title {\n color: var(--fgColor-danger);\n }\n \n .markdown-body>*:first-child>.heading-element:first-child {\n margin-top: 0 !important;\n }\n \n .markdown-body .highlight pre:has(+.zeroclipboard-container) {\n min-height: 52px;\n }",":host {\n display: block;\n width: 100%;\n}\n\n.message-round {\n margin-bottom: 16px;\n width: 100%;\n}\n\n.user-message-container {\n display: flex;\n flex-direction: row-reverse;\n align-items: flex-start;\n margin-bottom: 15px;\n position: relative;\n}\n\n.assistant-message-container {\n display: flex;\n flex-direction: row;\n align-items: flex-start;\n margin-bottom: 15px;\n position: relative;\n}\n\n/* 添加消息气泡样式 */\n.message-bubble {\n max-width: 85%;\n position: relative;\n}\n\n/* 用户消息气泡样式 */\n.user-message {\n padding: 5px 10px;\n background: #f5f7ff;\n font-size: 14px;\n color: #1F2328;\n border-radius: 6px;\n box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.1);\n}\n\n/* 助手消息气泡样式 */\n.assistant-message {\n padding: 15px 10px;\n background-color: #fff;\n border-radius: 6px;\n font-size: 14px;\n color: #1F2328;\n box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);\n}\n\n.message-time {\n font-size: 12px;\n color: #999;\n margin-top: 4px;\n}\n\n/* 用户消息时间样式 */\n.user-message-container .message-time {\n color: rgba(255, 255, 255, 0.7);\n}\n\n.loading-dots {\n display: flex;\n align-items: center;\n padding: 12px 16px;\n background-color: #f0f0f0;\n border-radius: 18px;\n border-top-left-radius: 4px;\n}\n\n.loading-dots span {\n width: 8px;\n height: 8px;\n margin: 0 3px;\n background-color: #999;\n border-radius: 50%;\n display: inline-block;\n animation: dot-pulse 1.5s infinite ease-in-out;\n}\n\n.loading-dots span:nth-child(2) {\n animation-delay: 0.2s;\n}\n\n.loading-dots span:nth-child(3) {\n animation-delay: 0.4s;\n}\n\n@keyframes dot-pulse {\n\n 0%,\n 80%,\n 100% {\n transform: scale(0.8);\n opacity: 0.5;\n }\n\n 40% {\n transform: scale(1.2);\n opacity: 1;\n }\n}\n\n.file-view {\n margin-top: 8px;\n padding: 12px;\n background-color: #f8f9fa;\n border: 1px solid #e9ecef;\n border-radius: 6px;\n font-size: 14px;\n word-break: break-all;\n color: #2c3e50;\n line-height: 1.5;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n\n.input-view {\n margin-top: 8px;\n margin-bottom: 10px;\n padding-bottom: 10px;\n border: 1px solid #e9ecef;\n border-radius: 6px;\n overflow: hidden;\n background-color: #ffffff;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);\n}\n\n\n.input-label-container {\n display: flex;\n align-items: center;\n margin-bottom: 4px;\n background-color: #f8f9fa;\n border-bottom: 1px solid #e9ecef;\n padding: 8px 12px;\n}\n\n.copy-input-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 2px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #8c8c8c;\n opacity: 0.7;\n transition: opacity 0.2s ease;\n margin-left: 5px;\n}\n\n.copy-input-button:hover {\n opacity: 1;\n color: #1677ff;\n}\n\n.input-label {\n font-size: 13px;\n font-weight: 600;\n color: #495057;\n}\n\n.input-value {\n padding: 12px 12px 0px;\n font-size: 14px;\n line-height: 1.5;\n color: #2c3e50;\n background-color: #ffffff;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.input-metadata {\n font-size: 13px;\n margin-top: 8px;\n}\n\n/* 基本的消息操作按钮位置 */\n.message-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n transition: opacity 0.2s ease;\n margin-top: 15px;\n}\n\n\n.action-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n border: 1px solid #d9d9d9;\n border-radius: 6px;\n padding: 4px 15px;\n font-size: 14px;\n height: 32px;\n background-color: white;\n cursor: pointer;\n color: rgba(0, 0, 0, 0.88);\n transition: all 0.2s;\n}\n\n.action-button:hover {\n color: #1677ff;\n border-color: #1677ff;\n}\n\n.action-button.primary {\n color: #1677ff;\n border-color: #1677ff;\n}\n\n.action-button.primary:hover {\n color: #4096ff;\n border-color: #4096ff;\n}\n\n.action-button.icon-only {\n padding: 4px 8px;\n margin-right: 9px;\n}\n\n.button-icon {\n margin-right: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.icon-only .button-icon {\n margin-right: 0;\n}\n\n.file-list {\n display: flex;\n flex-wrap: wrap;\n gap: 12px;\n margin-top: 8px;\n}\n\n.file-item {\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 80px;\n cursor: pointer;\n padding: 8px;\n border-radius: 4px;\n transition: background-color 0.3s;\n margin: 5px 10px;\n}\n\n.file-item:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.file-icon {\n margin-bottom: 4px;\n}\n\n.file-name {\n font-size: 12px;\n text-align: center;\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: #8B4513;\n}\n\n.action-button.active {\n color: #1677ff;\n background-color: rgba(22, 119, 255, 0.1);\n}\n\n.action-button.active .button-icon svg {\n stroke: #1677ff;\n}\n\n.inputs-container {\n margin-top: 8px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n\n.file-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.file-item {\n display: flex;\n align-items: center;\n padding: 8px 12px;\n background-color: #f5f5f5;\n border-radius: 6px;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.file-item:hover {\n background-color: #e8e8e8;\n}\n\n.file-icon {\n margin-right: 8px;\n}\n\n.file-name {\n font-size: 14px;\n color: #333;\n word-break: break-word;\n}\n\n.input-view {\n background-color: #f9f9f9;\n border-radius: 8px;\n padding: 12px;\n border: 1px solid #e8e8e8;\n}\n\n.input-label-container {\n display: flex;\n justify-content: space-between;\n align-items: center;\n margin-bottom: 8px;\n}\n\n.input-label {\n font-weight: 500;\n color: #333;\n}\n\n.input-value {\n color: #666;\n line-height: 1.5;\n word-break: break-word;\n max-height: 200px;\n overflow-y: auto;\n}\n\n.copy-input-button {\n background: none;\n border: none;\n cursor: pointer;\n color: #1677ff;\n padding: 4px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.copy-input-button:hover {\n background-color: rgba(22, 119, 255, 0.1);\n}\n\n.input-metadata {\n font-size: 14px;\n color: #666;\n padding: 4px 0;\n}\n\n/* 文件卡片样式 */\n.file-card {\n display: flex;\n align-items: center;\n padding: 12px;\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 200px 100px no-repeat, #fff;\n border-radius: 8px;\n cursor: pointer;\n transition: background-color 0.2s;\n border: 1px solid #e8e8e8;\n margin-top: 8px;\n}\n\n.file-card:hover {\n background-color: #f0f0f0;\n}\n\n.file-card-icon {\n margin-right: 12px;\n flex-shrink: 0;\n border-radius: 12px;\n background: #0d75fb;\n width: 48px;\n height: 48px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.file-card-icon img {\n width: 40px;\n height: 40px;\n}\n\n.file-card-content {\n display: flex;\n flex-direction: column;\n flex: 1;\n min-width: 0;\n}\n\n.file-card-type {\n font-size: 14px;\n color: #8c8c8c;\n margin-bottom: 4px;\n}\n\n.file-card-name {\n font-size: 16px;\n font-weight: 500;\n color: #333;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%;\n}\n\n/* 复制按钮样式 */\n.copy-card-button {\n background: none;\n border: none;\n cursor: pointer;\n color: #8c8c8c;\n padding: 8px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n justify-content: center;\n margin-left: 8px;\n transition: color 0.2s;\n}\n\n.copy-card-button:hover {\n color: #1677ff;\n}\n\n.avatar {\n width: 32px;\n height: 32px;\n border-radius: 50%;\n overflow: hidden;\n flex-shrink: 0;\n}\n\n.avatar img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n\n.user-avatar {\n margin-left: 8px;\n}\n\n.assistant-avatar {\n margin-right: 8px;\n}\n\n.retry-button {\n background-color: #ff6b35 !important;\n color: white !important;\n border: none !important;\n}\n\n.retry-button:hover {\n background-color: #e55a2b !important;\n}\n\n.retry-button .button-icon {\n margin-right: 4px;\n}\n\n/* 视频容器样式 */\n.video-inputs-container {\n display: flex;\n flex-direction: column;\n align-items: end;\n}\n\n.video-container {\n margin-top: 0px;\n border-radius: 8px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n background-color: #000;\n width: 250px;\n height: auto;\n max-height: 250px;\n transition: transform 0.2s ease, box-shadow 0.2s ease;\n}\n\n.video-container:hover {\n transform: translateY(-2px);\n box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);\n}\n\n.video-container video {\n display: block;\n width: 100%;\n max-width: 500px;\n height: auto;\n border-radius: 8px;\n}\n\n.video-container video:focus {\n outline: none;\n}\n\n/* 视频加载状态样式 */\n.video-loading {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 20px;\n background-color: #f8f9fa;\n border-radius: 8px;\n color: #666;\n font-size: 14px;\n}\n\n.loading-spinner {\n width: 24px;\n height: 24px;\n border: 2px solid #e9ecef;\n border-top: 2px solid #1677ff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n margin-bottom: 12px;\n}\n\n@keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n}\n\n/* 响应式设计 */\n@media (max-width: 768px) {\n .video-container {\n width: 100%;\n max-width: 300px;\n }\n}",":host {\n display: block;\n}\n\n.drawer-container {\n position: fixed;\n top: 0;\n left: 0;\n width: 0;\n height: 0;\n overflow: visible;\n}\n\n.drawer-mask {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.45);\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.3s ease, visibility 0.3s ease;\n}\n\n.mask-visible {\n opacity: 1;\n visibility: visible;\n}\n\n.drawer-content {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n background-color: #fff;\n box-shadow: -2px 0 8px rgba(0, 0, 0, 0.15);\n transform: translateX(100%);\n transition: transform 0.3s cubic-bezier(0.23, 1, 0.32, 1);\n}\n\n.drawer-content-visible {\n transform: translateX(0);\n}\n\n.drawer-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 24px;\n color: rgba(0, 0, 0, 0.85);\n border-bottom: 1px solid #f0f0f0;\n}\n\n.drawer-title {\n flex: 1;\n margin: 0;\n font-size: 16px;\n line-height: 22px;\n font-weight: 500;\n color: rgba(0, 0, 0, 0.85);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.drawer-close {\n padding: 0;\n background: transparent;\n border: none;\n outline: none;\n cursor: pointer;\n font-size: 16px;\n color: rgba(0, 0, 0, 0.45);\n transition: color 0.3s;\n}\n\n.drawer-close:hover {\n color: rgba(0, 0, 0, 0.85);\n}\n\n.drawer-body {\n flex: 1;\n padding: 24px;\n overflow: auto;\n}\n\n/* 响应式样式 */\n@media (max-width: 768px) {\n .drawer-content {\n width: 100% !important;\n }\n \n .drawer-header {\n padding: 12px 16px;\n }\n \n .drawer-body {\n padding: 16px;\n }\n} ","import { Component, Prop, h, Event, EventEmitter, Watch, Method, Element, State } from '@stencil/core';\nimport { configStore } from '../../../store/config.store';\n\n/**\n * 抽屉组件\n * 从屏幕边缘滑出的浮层面板,类似 Ant Design 的 Drawer 组件\n */\n@Component({\n tag: 'pcm-drawer',\n styleUrl: 'pcm-drawer.css',\n shadow: true,\n})\nexport class PcmDrawer {\n /**\n * 抽屉是否可见\n */\n @Prop({ mutable: true, reflect: true }) isOpen: boolean = false;\n\n /**\n * 抽屉标题\n */\n @Prop() drawerTitle: string = '';\n\n /**\n * 宽度,可以是像素值或百分比\n */\n @Prop() width: string = '378px';\n\n /**\n * 高度,在 placement 为 top 或 bottom 时使用\n */\n @Prop() height: string = '378px';\n\n /**\n * 是否显示关闭按钮\n */\n @Prop() closable: boolean = true;\n\n /**\n * 点击蒙层是否允许关闭\n */\n @Prop() maskClosable: boolean = true;\n\n /**\n * 是否显示蒙层\n */\n @Prop() mask: boolean = true;\n\n /**\n * 抽屉关闭后的回调\n */\n @Event() closed: EventEmitter<void>;\n\n /**\n * 抽屉打开后的回调\n */\n @Event() afterOpen: EventEmitter<void>;\n\n /**\n * 抽屉关闭后的回调\n */\n @Event() afterClose: EventEmitter<void>;\n\n @Element() hostElement: HTMLElement;\n\n @State() zIndex: number = 1000;\n\n private bodyOverflowBeforeOpen: string = '';\n private transitionEndHandler: () => void;\n\n /**\n * 打开抽屉\n */\n @Method()\n async open() {\n this.isOpen = true;\n }\n\n /**\n * 关闭抽屉\n */\n @Method()\n async close() {\n this.isOpen = false;\n }\n\n @Watch('isOpen')\n visibleChanged(newValue: boolean) {\n if (newValue) {\n // 打开抽屉时,禁止背景滚动\n this.bodyOverflowBeforeOpen = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n \n // 添加过渡结束事件监听器\n const drawer = this.hostElement.shadowRoot.querySelector('.drawer-content') as HTMLElement;\n if (drawer) {\n this.transitionEndHandler = () => {\n this.afterOpen.emit();\n };\n drawer.addEventListener('transitionend', this.transitionEndHandler, { once: true });\n }\n } else {\n // 关闭抽屉时,恢复背景滚动\n document.body.style.overflow = this.bodyOverflowBeforeOpen;\n \n // 添加过渡结束事件监听器\n const drawer = this.hostElement.shadowRoot.querySelector('.drawer-content') as HTMLElement;\n if (drawer) {\n this.transitionEndHandler = () => {\n this.afterClose.emit();\n };\n drawer.addEventListener('transitionend', this.transitionEndHandler, { once: true });\n }\n }\n }\n\n componentWillLoad() {\n // 尝试从缓存中读取 zIndex\n const cachedZIndex = configStore.getItem<number>('modal-zIndex');\n if (cachedZIndex) {\n this.zIndex = cachedZIndex;\n }\n }\n\n disconnectedCallback() {\n // 组件卸载时恢复背景滚动\n if (this.isOpen) {\n document.body.style.overflow = this.bodyOverflowBeforeOpen;\n }\n \n // 移除事件监听器\n const drawer = this.hostElement.shadowRoot?.querySelector('.drawer-content') as HTMLElement;\n if (drawer && this.transitionEndHandler) {\n drawer.removeEventListener('transitionend', this.transitionEndHandler);\n }\n }\n\n private handleMaskClick = () => {\n if (this.maskClosable) {\n this.handleClose();\n }\n };\n\n private handleClose = () => {\n this.isOpen = false;\n this.closed.emit();\n };\n\n render() {\n const drawerStyle = {\n width: this.width,\n zIndex: `${this.zIndex + 1}`,\n };\n\n const maskStyle = {\n zIndex: `${this.zIndex}`,\n };\n\n return (\n <div class={{ 'drawer-container': true, 'drawer-open': this.isOpen }}>\n {this.mask && (\n <div \n class={{ 'drawer-mask': true, 'mask-visible': this.isOpen }} \n style={maskStyle}\n onClick={this.handleMaskClick}\n ></div>\n )}\n <div \n class={{ 'drawer-content': true, 'drawer-content-visible': this.isOpen }} \n style={drawerStyle}\n >\n <div class=\"drawer-header\">\n {this.drawerTitle && <div class=\"drawer-title\">{this.drawerTitle}</div>}\n {this.closable && (\n <button class=\"drawer-close\" onClick={this.handleClose}>\n <svg viewBox=\"64 64 896 896\" focusable=\"false\" data-icon=\"close\" width=\"1em\" height=\"1em\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M563.8 512l262.5-312.9c4.4-5.2.7-13.1-6.1-13.1h-79.8c-4.7 0-9.2 2.1-12.3 5.7L511.6 449.8 295.1 191.7c-3-3.6-7.5-5.7-12.3-5.7H203c-6.8 0-10.5 7.9-6.1 13.1L459.4 512 196.9 824.9A7.95 7.95 0 00203 838h79.8c4.7 0 9.2-2.1 12.3-5.7l216.5-258.1 216.5 258.1c3 3.6 7.5 5.7 12.3 5.7h79.8c6.8 0 10.5-7.9 6.1-13.1L563.8 512z\"></path>\n </svg>\n </button>\n )}\n </div>\n <div class=\"drawer-body\">\n <slot></slot>\n </div>\n </div>\n </div>\n );\n }\n} ",":host {\n display: block;\n}\n\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n overflow-y: auto;\n padding: 20px;\n z-index: 1000;\n}\n\n/* 全屏模式下取消 padding */\n.fullscreen-overlay {\n padding: 0;\n}\n\n.modal-container {\n background: white;\n border-radius: 8px;\n width: 100%;\n max-width: 800px;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n}\n\n/* 全屏模式样式 */\n.modal-container.fullscreen {\n width: 100vw;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n height: 100vh;\n max-height: 100vh;\n}\n\n/* 确保内容区域也使用 flex 布局并占满剩余空间 */\n.modal-container.fullscreen > div:not(.modal-header):not(.initial-upload) {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden; /* 防止内容溢出 */\n height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 800px;\n /* height: 80vh; */\n /* max-height: 700px; */\n min-width: 320px;\n min-height: 400px;\n}\n\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n /* height: 90vh; */\n }\n\n .modal-overlay {\n padding: 0;\n }\n\n .modal-container.fullscreen {\n /* 支持 iOS Safari */\n height: -webkit-fill-available;\n max-height: -webkit-fill-available;\n /* 确保内容不会被顶部状态栏和底部工具栏遮挡 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n\n}\n.video-preview.placeholder {\n display: flex;\n justify-content: center;\n align-items: center;\n background: #EAEAEA;\n}\n\n.placeholder-status {\n color: #00000066;\n}\n\n.placeholder-status p{\n font-size: 16px;\n}\n\n.waiting-message p {\n margin: 0;\n font-size: 16px;\n color: white;\n font-weight: 500;\n}\n\n.recording-container {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n\n\n.video-area {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.stop-recording-button {\n width: 100%;\n height: 100%;\n font-size: 16px;\n background: #f44336;\n border-radius: 6px;\n color: white;\n border: none;\n cursor: pointer;\n}\n\n.stop-recording-button:hover {\n background: #d32f2f;\n}\n\n.play-audio-container {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0; /* 防止头部被压缩 */\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.header-left div {\n font-size: 16px;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n.chat-history {\n position: relative;\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n scroll-behavior: smooth;\n min-height: 200px;\n background: url(https://pcm-resource-1312611446.cos.ap-guangzhou.myqcloud.com/web/sdk/chat_bg.png);\n background-size: 100%;\n}\n\n/* 添加全屏模式下的样式 */\n.fullscreen .chat-history {\n height: auto;\n flex: 1 1 auto;\n}\n\n\n.message-input {\n padding: 16px;\n border-top: 1px solid #eee;\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.message-input input {\n flex: 1;\n padding: 8px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n outline: none;\n transition: border-color 0.2s ease;\n}\n\n.message-input input:focus {\n border-color: #bbb;\n}\n\n/* 消息样式 */\n.message {\n margin-bottom: 16px;\n opacity: 1;\n transition: opacity 0.3s ease;\n}\n\n.message-content {\n max-width: 70%;\n padding: 8px 12px;\n border-radius: 8px;\n word-break: break-word;\n}\n\n.message-content p {\n margin: 0;\n word-break: break-word;\n}\n\n.user-message {\n display: flex;\n justify-content: flex-end;\n}\n\n.agent-message {\n display: flex;\n justify-content: flex-start;\n}\n\n.user-message .message-content {\n background-color: #007bff;\n color: white;\n}\n\n.agent-message .message-content {\n background-color: #f1f1f1;\n}\n\n.message-time {\n font-size: 12px;\n color: #999;\n margin-top: 4px;\n display: block;\n}\n\n.send-button {\n background-color: #1890ff;\n color: white;\n border: none;\n border-radius: 4px;\n padding: 8px 16px;\n cursor: pointer;\n font-weight: 500;\n}\n\n.send-button:disabled {\n background-color: #ccc;\n cursor: not-allowed;\n}\n\n.empty-state {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n color: #999;\n text-align: center;\n}\n\n.loading-container {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: rgba(255, 255, 255, 0.98);\n z-index: 1;\n opacity: 1;\n transition: opacity 0.3s ease;\n}\n\n.loading-container p {\n margin-top: 16px;\n color: #666;\n font-size: 14px;\n}\n\n.loading-spinner {\n width: 40px;\n height: 40px;\n border: 3px solid #f3f3f3;\n border-top: 3px solid #1890ff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n/* 修改 messages-wrapper 的样式 */\n.messages-wrapper {\n width: 100%;\n min-height: 100%;\n display: flex;\n flex-direction: column;\n /* 当内容少时,将内容放在底部 */\n justify-content: flex-end;\n}\n\n/* 当有很多消息时,取消固定在底部 */\n.messages-wrapper.has-overflow {\n justify-content: flex-start;\n}\n\n.suggested-questions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 16px;\n}\n\n.suggested-question {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background-color: #f3f4f6;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n color: #374151;\n transition: background-color 0.2s;\n}\n\n.suggested-question:hover {\n background-color: #e5e7eb;\n}\n\n.arrow-right {\n margin-left: 8px;\n}\n\n.loading-suggestions {\n display: flex;\n justify-content: center;\n padding: 16px;\n}\n\n.loading-spinner-small {\n width: 20px;\n height: 20px;\n border: 2px solid #e5e7eb;\n border-top-color: #6b7280;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n/* 添加上传按钮样式 */\n.upload-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #666;\n border-radius: 4px;\n transition: background-color 0.2s;\n}\n\n.upload-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.upload-button svg {\n width: 20px;\n height: 20px;\n}\n\n/* 隐藏原生文件输入框 */\n.file-input {\n display: none;\n}\n\n/* 添加文件名显示区域样式 */\n.selected-file {\n font-size: 12px;\n color: #666;\n margin-left: 8px;\n max-width: 150px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.input-wrapper {\n flex: 1;\n display: flex;\n align-items: center;\n border: 1px solid #ddd;\n border-radius: 4px;\n padding: 0 4px;\n background: white;\n}\n\n.input-wrapper input {\n border: none;\n flex: 1;\n padding: 8px;\n outline: none;\n}\n\n.input-wrapper:focus-within {\n border-color: #bbb;\n}\n\n/* 文件预览区域样式 */\n\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n.remove-file {\n background: transparent;\n border: none;\n color: #999;\n cursor: pointer;\n padding: 4px 8px;\n font-size: 16px;\n line-height: 1;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.remove-file:hover {\n background-color: #f0f0f0;\n color: #666;\n}\n\n.initial-upload {\n padding: 16px;\n display: flex;\n flex-direction: column;\n align-items: center;\n height: 100%;\n}\n\n.upload-section {\n max-width: 600px;\n width: 100%;\n text-align: center;\n}\n\n.upload-area {\n cursor: pointer;\n width: 100%;\n}\n\n.upload-placeholder {\n transition: all 0.3s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: rgba(0, 0, 0, 0.02);\n border: 1px dashed #d9d9d9;\n border-radius: 8px;\n}\n.upload-placeholder:hover {\n border: 1px dashed #1890ff;\n}\n\n.upload-placeholder img {\n margin-top: 8px;\n width: 50px;\n height: 50px;\n}\n\n.upload-placeholder .upload-text {\n margin: 4px 0;\n color: #332F39;\n font-size: 14px;\n}\n\n.upload-placeholder .upload-hint {\n font-size: 14px;\n color: #949AA5;\n margin-top: 8px;\n padding: 0px 10px;\n}\n\n\n/* 文件项样式 */\n.file-item {\n position: relative;\n padding: 16px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n transition: border-color 0.3s;\n cursor: pointer;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.file-item:hover {\n border-color: #0D75FB;\n}\n\n.file-item-content {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.file-icon {\n color: #0D75FB;\n flex-shrink: 0;\n}\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n\n.remove-file {\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n margin-left: 8px;\n border-radius: 4px;\n transition: all 0.2s;\n}\n\n.remove-file:hover {\n background-color: #f1f5f9;\n color: #475569;\n}\n\n.file-input {\n display: none;\n}\n\n.submit-button {\n margin-top: 10px;\n padding: 10px 30px;\n background: #0D75FB;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s ease;\n width: 100%;\n max-width: 400px;\n}\n\n.submit-button:disabled {\n background: #ccc;\n cursor: not-allowed;\n}\n\n.submit-button:hover:not(:disabled) {\n background: #40a9ff;\n}\n\n.category-select,\n.dimension-select {\n margin: 30px 0;\n}\n\n.category-options,\n.dimension-options {\n display: flex;\n flex-wrap: wrap;\n gap: 10px;\n margin-top: 10px;\n}\n\n.category-button,\n.dimension-button {\n padding: 12px 16px;\n border: 1px solid #E5E5E5;\n border-radius: 6px;\n background: white;\n cursor: pointer;\n transition: all 0.3s;\n}\n\n.category-button:hover,\n.dimension-button:hover {\n background: #f5f5f5;\n}\n\n.category-button.selected {\n background-image: linear-gradient(111deg, #4A9FFF 0%, #1058FF 100%);\n color: white;\n}\n\n.dimension-button.selected {\n background-image: linear-gradient(111deg, #4A9FFF 0%, #1058FF 100%);\n color: white;\n}\n\n.recording-section {\n border-top: 1px solid #eee;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 20px;\n border-radius: 14px 14px 0 0;\n flex: 0 0 auto;\n}\n\n.recording-section .video-preview {\n width: 100%;\n height: 200px;\n max-width: 400px;\n position: relative;\n margin-bottom: 10px;\n border: 1px solid #ddd;\n border-radius: 12px;\n overflow: hidden;\n}\n\n.recording-section video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n/* 修改 recording-status 样式 */\n.recording-status {\n position: absolute;\n top: 10px;\n left: 10px;\n background-color: rgba(0, 0, 0, 0.6);\n color: white;\n padding: 4px 8px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 14px;\n z-index: 2;\n}\n\n.recording-status .recording-dot {\n display: inline-block;\n width: 10px;\n height: 10px;\n background-color: red;\n border-radius: 50%;\n margin-right: 5px;\n animation: blink 1s infinite;\n}\n\n.recording-status.warning {\n color: #ff4d4f;\n animation: blink 1s infinite;\n}\n\n@keyframes blink {\n 0% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.5;\n }\n\n 100% {\n opacity: 1;\n }\n}\n\n.recording-section .stop-recording-button {\n background-color: #f44336;\n color: white;\n border: none;\n cursor: pointer;\n font-weight: bold;\n}\n\n.recording-section .stop-recording-button:hover {\n background-color: #d32f2f;\n}\n\n.fullscreen {\n width: 100vw;\n border-radius: 0;\n height: 100vh;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n\n.recording-controls {\n margin-top: 10px;\n height: 53px;\n width: 100%;\n max-width: 400px;\n display: flex;\n justify-content: center;\n}\n\n.recording-controls .waiting-message {\n text-align: center;\n color: white;\n font-size: 16px;\n background-image: linear-gradient(100deg, #4A9FFF 0%, #1058FF 100%);\n border-radius: 6px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n width: 95%;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n}\n\n.recording-controls .waiting-message.loading {\n background: #faad14;\n}\n\n.recording-controls .waiting-message p {\n margin: 0;\n font-size: 16px;\n color: white;\n font-weight: 500;\n}\n\n.recording-controls .stop-recording-button {\n background-color: #dc3545;\n color: white;\n border: none;\n cursor: pointer;\n font-size: 16px;\n}\n\n.recording-controls .stop-recording-button:hover {\n background-color: #c82333;\n}\n\n/* 添加禁用状态的样式 */\n.recording-controls .stop-recording-button.disabled {\n background: #ccc;\n cursor: not-allowed;\n}\n\n.recording-controls .stop-recording-button.disabled:hover {\n background: #ccc;\n}\n\n/* 添加进度条和数字进度的样式 */\n.progress-container {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n max-width: 400px;\n margin-top: 10px;\n padding: 0 5px;\n}\n\n.progress-bar-container {\n height: 4px;\n background-color: #E5E5E5;\n border-radius: 2px;\n overflow: hidden;\n margin-right: 10px;\n width: 75px;\n}\n\n.progress-bar {\n height: 100%;\n background-image: linear-gradient(111deg, #4A9FFF 0%, #1058FF 100%);\n border-radius: 2px;\n transition: width 0.3s ease;\n}\n\n.progress-text {\n font-size: 14px;\n color: #666;\n white-space: nowrap;\n}","/* 输入模式切换 */\n.input-mode-toggle {\n display: flex;\n align-items: center;\n margin-bottom: 16px;\n}\n \n.input-mode-toggle span {\n color: #333;\n margin-right: 12px;\n}\n \n.toggle-button {\n display: flex;\n align-items: center;\n background: none;\n border: none;\n color: #2E6EDF;\n cursor: pointer;\n font-size: 14px;\n padding: 4px 8px;\n}\n \n.toggle-button svg {\n margin-right: 4px;\n}\n\n/* 自由输入模式 */\n.free-input {\n width: 100%;\n}\n\n.textarea-container {\n margin-bottom: 16px;\n}\n\n.textarea-container label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.textarea-container textarea {\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 14px;\n resize: vertical;\n background-color: #f9f9f9;\n min-height: 150px;\n width: 100%;\n padding: 12px 16px;\n margin-bottom: 20px;\n max-width: 100%;\n box-sizing: border-box;\n word-wrap: break-word;\n}\n\n.textarea-container textarea:focus {\n outline: none;\n border-color: #2E6EDF;\n box-shadow: 0 0 0 2px rgba(46, 110, 223, 0.2);\n}\n\n.required {\n color: #f56c6c;\n}\n\n.input-guide {\n background-color: #f5f7fa;\n border-radius: 4px;\n padding: 12px 16px;\n margin-bottom: 20px;\n max-width: 100%;\n box-sizing: border-box;\n word-wrap: break-word;\n}\n\n.guide-title {\n font-weight: 500;\n color: #333;\n margin-bottom: 8px;\n}\n\n.guide-content {\n color: #666;\n font-size: 13px;\n max-width: 100%;\n word-wrap: break-word;\n}\n\n.guide-content div {\n margin-bottom: 4px;\n}\n\n",":host {\n font-size: 16px;\n}\n\n/* 模态框基础样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* 全屏模式下的overlay样式 - 改为基于父组件 */\n.fullscreen-overlay {\n padding: 0;\n background-color: rgba(0, 0, 0, 0.7);\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: calc(100% - 10px);\n}\n\n.modal-container {\n background-color: #fff;\n border-radius: 8px;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n transition: all 0.3s ease-out;\n overflow: hidden;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 600px;\n min-width: 320px;\n}\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 10px 0px 0px 0px;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n}\n\n/* 模态框头部样式 */\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n\n/* 文件上传区域通用样式 */\n.upload-area {\n cursor: pointer;\n width: 100%;\n}\n\n\n.upload-placeholder {\n transition: all 0.3s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: rgba(0, 0, 0, 0.02);\n border: 1px dashed #d9d9d9;\n border-radius: 8px;\n}\n\n.upload-placeholder:hover {\n border: 1px dashed #1890ff;\n}\n\n.upload-placeholder img {\n margin-top: 8px;\n width: 50px;\n height: 50px;\n}\n\n.upload-placeholder .upload-text {\n margin: 4px 0;\n color: #332F39;\n font-size: 14px;\n}\n\n.upload-placeholder .upload-hint {\n font-size: 14px;\n color: #949AA5;\n margin-top: 8px;\n padding: 0px 10px;\n text-align: center;\n}\n\n\n/* 文件项样式 */\n.file-item {\n position: relative;\n padding: 16px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n transition: border-color 0.3s;\n cursor: pointer;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.file-item:hover {\n border-color: #0D75FB;\n}\n\n.file-item-content {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.file-icon {\n color: #0D75FB;\n flex-shrink: 0;\n}\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n.remove-file {\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n margin-left: 8px;\n border-radius: 4px;\n transition: all 0.2s;\n min-width: 30px;\n min-height: 30px;\n}\n\n.remove-file:hover {\n background-color: #f1f5f9;\n color: #475569;\n}\n\n.file-input {\n display: none;\n}\n\n\n\n/* 输入容器样式 */\n.input-container {\n padding: 20px;\n display: flex;\n flex-direction: column;\n height: calc(100% - 50px);\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;\n /* 减去header高度 */\n overflow-y: auto;\n}\n\n.input-container h3 {\n margin-top: 0;\n margin-bottom: 20px;\n font-size: 18px;\n color: #333;\n text-align: center;\n}\n\n/* JD输入区域样式 */\n.jd-input-section {\n margin-bottom: 20px;\n}\n\n.jd-input-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.job-description-textarea {\n width: calc(100% - 16px);\n border: 1px solid #ddd;\n border-radius: 4px;\n resize: vertical;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n transition: border-color 0.3s;\n padding: 8px;\n}\n\n.job-description-textarea:focus {\n outline: none;\n border-color: #1890ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n/* 简历上传区域样式 */\n.resume-upload-section {\n margin-bottom: 20px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.resume-upload-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n align-self: flex-start;\n}\n\n\n/* 提交按钮通用样式 */\n.submit-button {\n margin-top: 10px;\n padding: 10px 30px;\n background: #0D75FB;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s ease;\n width: 100%;\n max-width: 400px;\n align-self: center;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n.submit-button:disabled {\n background-color: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.25);\n cursor: not-allowed;\n}\n\n\n\n/* AI免责声明和备案信息样式 */\n.ai-disclaimer {\n margin-top: 16px;\n text-align: center;\n font-size: 12px;\n color: #999;\n line-height: 1.5;\n}\n\n.ai-disclaimer p {\n margin: 4px 0;\n}\n\n.beian-info {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ai-disclaimer a {\n color: #666;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.ai-disclaimer a:hover {\n color: #1890ff;\n text-decoration: underline;\n}\n\n/* 添加加载状态的样式 */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n }\n \n .loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--pcm-primary-color, #1890ff);\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n }\n \n .loading-text {\n font-size: 16px;\n color: var(--pcm-text-color, #333);\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n ","import { Component, Prop, h, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\nimport { uploadFileToBackend, FileUploadResponse, verifyApiKey } from '../../utils/utils';\nimport { ConversationStartEventData, InterviewCompleteEventData, StreamCompleteEventData } from '../../components';\nimport { ErrorEventBus, ErrorEventDetail } from '../../utils/error-event';\nimport { authStore } from '../../../store/auth.store';\nimport { configStore } from '../../../store/config.store';\nimport { SentryReporter } from '../../utils/sentry-reporter';\n\n/**\n * 劳动合同卫士\n */\n\n@Component({\n tag: 'pcm-htws-modal',\n styleUrls: ['pcm-htws-modal.css', '../../global/global.css'],\n shadow: true,\n})\nexport class HtwsModal {\n /**\n * 模态框标题\n */\n @Prop() modalTitle: string = '劳动合同卫士';\n\n /**\n * SDK鉴权密钥\n */\n @Prop({ attribute: 'token' }) token!: string;\n\n /**\n * 是否显示聊天模态框\n */\n @Prop({ mutable: true }) isOpen: boolean = false;\n\n /**\n * 当点击模态框关闭时触发\n */\n @Event() modalClosed: EventEmitter<void>;\n\n /**\n * 应用图标URL\n */\n @Prop() icon?: string;\n\n /**\n * 聊天框的页面层级\n */\n @Prop() zIndex?: number = 1000;\n\n /**\n * 是否展示顶部标题栏\n */\n @Prop() isShowHeader: boolean = true;\n\n /**\n * 是否展示右上角的关闭按钮\n */\n @Prop() isNeedClose: boolean = true;\n\n /**\n * 会话ID,传入继续对话,否则创建新会话\n */\n @Prop({ mutable: true }) conversationId?: string;\n\n /**\n * 默认查询文本\n */\n @Prop() defaultQuery: string = '请开始分析';\n\n /**\n * 是否以全屏模式打开,移动端建议设置为true\n */\n @Prop() fullscreen: boolean = false;\n\n /**\n * 自定义输入参数,传入customInputs.input时,会自动切换到自由输入模式<br>\n */\n @Prop() customInputs: Record<string, string> = {};\n\n /**\n * 是否显示工作区历史会话按钮\n */\n @Prop() showWorkspaceHistory: boolean = false;\n\n /**\n * 上传成功事件\n */\n @Event() uploadSuccess: EventEmitter<FileUploadResponse>;\n\n /**\n * 流式输出完成事件\n */\n @Event() streamComplete: EventEmitter<StreamCompleteEventData>;\n\n /**\n * 新会话开始的回调,只会在一轮对话开始时触发一次\n */\n @Event() conversationStart: EventEmitter<ConversationStartEventData>;\n\n /**\n * 当聊天完成时触发\n */\n @Event() interviewComplete: EventEmitter<InterviewCompleteEventData>;\n\n /**\n * SDK密钥验证失败事件\n */\n @Event() tokenInvalid: EventEmitter<void>;\n\n /**\n * 错误事件\n */\n @Event() someErrorEvent: EventEmitter<ErrorEventDetail>;\n\n /**\n * 附件预览模式\n * 'drawer': 在右侧抽屉中预览\n * 'window': 在新窗口中打开\n */\n @Prop() filePreviewMode: 'drawer' | 'window' = 'window';\n\n @State() selectedFile: File | null = null;\n @State() isUploading: boolean = false;\n @State() uploadedFileInfo: FileUploadResponse | null = null;\n @State() showChatModal: boolean = false;\n\n // 使用 @Element 装饰器获取组件的 host 元素\n @Element() hostElement: HTMLElement;\n\n @State() isSubmitting: boolean = false;\n\n // 添加输入模式状态\n @State() inputMode: 'upload' | 'free' = 'upload';\n\n // 自由输入模式的文本\n @State() freeInputText: string = '';\n\n \n private tokenInvalidListener: () => void;\n private removeErrorListener: () => void;\n\n @Watch('token')\n handleTokenChange(newToken: string) {\n // 当传入的 token 变化时,更新 authStore 中的 token\n if (newToken && newToken !== authStore.getToken()) {\n authStore.setToken(newToken);\n }\n }\n\n componentWillLoad() {\n\n // 将 zIndex 存入配置缓存\n if (this.zIndex) {\n configStore.setItem('modal-zIndex', this.zIndex);\n }\n if (this.token) {\n authStore.setToken(this.token);\n }\n\n // 添加全局token无效事件监听器\n this.tokenInvalidListener = () => {\n this.tokenInvalid.emit();\n };\n\n // 添加全局错误监听\n this.removeErrorListener = ErrorEventBus.addErrorListener((errorDetail) => {\n this.someErrorEvent.emit(errorDetail);\n });\n \n document.addEventListener('pcm-token-invalid', this.tokenInvalidListener);\n }\n\n disconnectedCallback() {\n // 组件销毁时移除事件监听器\n document.removeEventListener('pcm-token-invalid', this.tokenInvalidListener);\n // 移除错误监听器\n if (this.removeErrorListener) {\n this.removeErrorListener();\n }\n }\n\n private handleClose = () => {\n this.modalClosed.emit();\n };\n\n private handleFileChange = (event: Event) => {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.selectedFile = input.files[0];\n }\n };\n\n private handleUploadClick = () => {\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\n fileInput?.click();\n };\n\n private clearSelectedFile = () => {\n this.selectedFile = null;\n this.uploadedFileInfo = null;\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\n if (fileInput) {\n fileInput.value = '';\n }\n };\n\n private async uploadFile() {\n if (!this.selectedFile) return;\n\n this.isUploading = true;\n\n try {\n // 使用 uploadFileToBackend 工具函数上传文件\n const result = await uploadFileToBackend(this.selectedFile, {\n }, {\n 'tags': ['other']\n });\n\n this.uploadedFileInfo = result;\n this.uploadSuccess.emit(result);\n } catch (error) {\n console.error('文件上传错误:', error);\n this.clearSelectedFile();\n SentryReporter.captureError(error, {\n action: 'uploadFile',\n component: 'pcm-htws-modal',\n title: '文件上传失败'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '文件上传失败,请重试'\n });\n } finally {\n this.isUploading = false;\n }\n }\n\n // 添加切换输入模式的方法\n private handleToggleInput = () => {\n this.inputMode = this.inputMode === 'upload' ? 'free' : 'upload';\n };\n\n // 添加自由输入文本变更处理方法\n private handleFreeInputChange = (event: Event) => {\n const textarea = event.target as HTMLTextAreaElement;\n this.freeInputText = textarea.value;\n };\n\n private handleStartInterview = async () => {\n if (this.inputMode === 'upload' && !this.selectedFile) {\n alert('请上传合同文件');\n return;\n }\n\n if (this.inputMode === 'free' && !this.freeInputText.trim()) {\n alert('请输入合同内容');\n return;\n }\n\n this.isSubmitting = true;\n\n try {\n if (this.inputMode === 'upload') {\n // 如果还没上传,先上传文件\n if (!this.uploadedFileInfo) {\n await this.uploadFile();\n if (!this.uploadedFileInfo) {\n this.isSubmitting = false;\n return; // 上传失败\n }\n }\n }\n\n // 直接显示聊天模态框\n this.showChatModal = true;\n } catch (error) {\n console.error('开始分析时出错:', error);\n SentryReporter.captureError(error, {\n action: 'handleStartInterview',\n component: 'pcm-htws-modal',\n title: '开始分析时出错'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '开始分析时出错,请重试'\n });\n } finally {\n this.isSubmitting = false;\n }\n };\n\n @Watch('isOpen')\n async handleIsOpenChange(newValue: boolean) {\n if (!newValue) {\n // 重置状态\n this.clearSelectedFile();\n this.showChatModal = false;\n this.freeInputText = '';\n this.inputMode = 'upload'; // 重置为默认上传模式\n } else {\n if (this.customInputs && this.customInputs.input) {\n // 如果有 input,直接切换到自由输入模式并填充内容\n this.inputMode = 'free';\n this.freeInputText = this.customInputs.input;\n }\n await verifyApiKey(this.token);\n\n if (this.conversationId) {\n // 如果有会话ID,直接显示聊天模态框\n this.showChatModal = true;\n }\n }\n }\n\n\n render() {\n if (!this.isOpen) return null;\n\n const modalStyle = {\n zIndex: String(this.zIndex)\n };\n\n const containerClass = {\n 'modal-container': true,\n 'fullscreen': this.fullscreen,\n 'pc-layout': true,\n };\n\n const overlayClass = {\n 'modal-overlay': true,\n 'fullscreen-overlay': this.fullscreen\n };\n\n // 显示加载状态\n const isLoading = this.conversationId && !this.showChatModal;\n\n return (\n <div class={overlayClass} style={modalStyle}>\n <div class={containerClass}>\n {this.isShowHeader && (\n <div class=\"modal-header\">\n <div class=\"header-left\">\n {this.icon && <img src={this.icon} class=\"header-icon\" alt=\"应用图标\" />}\n <div>{this.modalTitle}</div>\n </div>\n {this.isNeedClose && (\n <button class=\"close-button\" onClick={this.handleClose}>\n <span>×</span>\n </button>\n )}\n </div>\n )}\n\n {/* 输入界面 - 仅在不显示聊天模态框且没有会话ID时显示 */}\n {!this.showChatModal && !this.conversationId && (\n <div class=\"input-container\">\n {/* 输入模式切换 */}\n <div class=\"input-mode-toggle\">\n <span>合同内容</span>\n <button\n class=\"toggle-button\"\n onClick={this.handleToggleInput}\n >\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n 切换输入\n </button>\n </div>\n\n {/* 上传模式 */}\n {this.inputMode === 'upload' && (\n <div class=\"resume-upload-section\">\n <div class=\"upload-area\" onClick={this.handleUploadClick}>\n {this.selectedFile ? (\n <div class=\"file-item\">\n <div class=\"file-item-content\">\n <span class=\"file-icon\">📝</span>\n <span class=\"file-name\">{this.selectedFile.name}</span>\n </div>\n <button class=\"remove-file\" onClick={(e) => {\n e.stopPropagation();\n this.clearSelectedFile();\n }}>×</button>\n </div>\n ) : (\n <div class=\"upload-placeholder\">\n <img src='https://pub.pincaimao.com/static/web/images/home/i_upload.png'></img>\n <p class='upload-text'>点击上传合同</p>\n <p class=\"upload-hint\">支持markdown、pdf、docx、doc、md 格式</p>\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* 自由输入模式 */}\n {this.inputMode === 'free' && (\n <div class=\"free-input\">\n <div class=\"textarea-container\">\n <textarea\n id=\"free-input-text\"\n placeholder=\"请输入合同内容\"\n rows={8}\n value={this.freeInputText}\n onInput={this.handleFreeInputChange}\n ></textarea>\n </div>\n\n <div class=\"input-guide\">\n <div class=\"guide-title\">输入提示:</div>\n <div class=\"guide-content\">\n <div>• 请输入完整的劳动合同内容</div>\n <div>• 包括甲方(公司)、乙方(员工)信息</div>\n <div>• 合同期限、工作内容、工作地点</div>\n <div>• 工作时间、休息休假、劳动报酬</div>\n <div>• 社会保险、劳动保护、劳动条件</div>\n <div>• 合同变更、解除和终止条件等</div>\n </div>\n </div>\n </div>\n )}\n\n <button\n class=\"submit-button\"\n disabled={(this.inputMode === 'upload' && !this.selectedFile) ||\n (this.inputMode === 'free' && !this.freeInputText.trim()) ||\n this.isUploading ||\n this.isSubmitting}\n onClick={this.handleStartInterview}\n >\n {this.isUploading ? '上传中...' : this.isSubmitting ? '处理中...' : '开始分析'}\n </button>\n\n <div class=\"ai-disclaimer\">\n <p>所有内容均由AI生成仅供参考</p>\n <p class=\"beian-info\">\n <span>中央网信办生成式人工智能服务备案号</span>:\n <a href=\"https://www.pincaimao.com\" target=\"_blank\" rel=\"noopener noreferrer\">Hunan-PinCaiMao-202412310003</a>\n </p>\n </div>\n\n <input\n type=\"file\"\n class=\"file-input\"\n onChange={this.handleFileChange}\n />\n </div>\n )}\n\n {/* 加载状态 - 在有会话ID但聊天模态框尚未显示时展示 */}\n {isLoading && (\n <div class=\"loading-container\">\n <div class=\"loading-spinner\"></div>\n <p class=\"loading-text\">正在加载对话...</p>\n </div>\n )}\n\n {/* 聊天界面 - 在显示聊天模态框时显示 */}\n {this.showChatModal && (\n <div>\n <pcm-app-chat-modal\n isOpen={true}\n modalTitle={this.modalTitle}\n icon={this.icon}\n isShowHeader={this.isShowHeader}\n isNeedClose={this.isShowHeader}\n fullscreen={this.fullscreen}\n showWorkspaceHistory={this.showWorkspaceHistory}\n botId=\"3022316191018882\"\n conversationId={this.conversationId}\n defaultQuery={this.defaultQuery}\n enableVoice={false}\n filePreviewMode={this.filePreviewMode}\n customInputs={this.conversationId ? {} : {\n ...this.customInputs,\n file_url: this.inputMode === 'upload' ? this.uploadedFileInfo?.cos_key : undefined,\n file_name: this.customInputs?.file_name || this.uploadedFileInfo?.file_name,\n input: this.inputMode === 'free' ? this.freeInputText : undefined\n }}\n interviewMode=\"text\"\n ></pcm-app-chat-modal>\n </div>\n )}\n </div>\n </div>\n );\n }\n} ","",":host {\n font-size: 16px;\n}\n\n/* 模态框基础样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* 全屏模式下的overlay样式 - 改为基于父组件 */\n.fullscreen-overlay {\n padding: 0;\n background-color: rgba(0, 0, 0, 0.7);\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: calc(100% - 10px);\n}\n\n.modal-container {\n background-color: #fff;\n border-radius: 8px;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n transition: all 0.3s ease-out;\n overflow: hidden;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 600px;\n min-width: 320px;\n}\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 10px 0px 0px 0px;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n}\n\n/* 模态框头部样式 */\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n\n/* 文件上传区域通用样式 */\n.upload-area {\n cursor: pointer;\n width: 100%;\n}\n\n\n.upload-placeholder {\n transition: all 0.3s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: rgba(0, 0, 0, 0.02);\n border: 1px dashed #d9d9d9;\n border-radius: 8px;\n}\n\n.upload-placeholder:hover {\n border: 1px dashed #1890ff;\n}\n\n.upload-placeholder img {\n margin-top: 8px;\n width: 50px;\n height: 50px;\n}\n\n.upload-placeholder .upload-text {\n margin: 4px 0;\n color: #332F39;\n font-size: 14px;\n}\n\n.upload-placeholder .upload-hint {\n font-size: 14px;\n color: #949AA5;\n margin-top: 8px;\n padding: 0px 10px;\n text-align: center;\n}\n\n\n/* 文件项样式 */\n.file-item {\n position: relative;\n padding: 16px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n transition: border-color 0.3s;\n cursor: pointer;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.file-item:hover {\n border-color: #0D75FB;\n}\n\n.file-item-content {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.file-icon {\n color: #0D75FB;\n flex-shrink: 0;\n}\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n.remove-file {\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n margin-left: 8px;\n border-radius: 4px;\n transition: all 0.2s;\n min-width: 30px;\n min-height: 30px;\n}\n\n.remove-file:hover {\n background-color: #f1f5f9;\n color: #475569;\n}\n\n.file-input {\n display: none;\n}\n\n\n\n/* 输入容器样式 */\n.input-container {\n padding: 20px;\n display: flex;\n flex-direction: column;\n height: calc(100% - 50px);\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;\n /* 减去header高度 */\n overflow-y: auto;\n}\n\n.input-container h3 {\n margin-top: 0;\n margin-bottom: 20px;\n font-size: 18px;\n color: #333;\n text-align: center;\n}\n\n/* JD输入区域样式 */\n.jd-input-section {\n margin-bottom: 20px;\n}\n\n.jd-input-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.job-description-textarea {\n width: calc(100% - 16px);\n border: 1px solid #ddd;\n border-radius: 4px;\n resize: vertical;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n transition: border-color 0.3s;\n padding: 8px;\n}\n\n.job-description-textarea:focus {\n outline: none;\n border-color: #1890ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n/* 简历上传区域样式 */\n.resume-upload-section {\n margin-bottom: 20px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.resume-upload-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n align-self: flex-start;\n}\n\n\n/* 提交按钮通用样式 */\n.submit-button {\n margin-top: 10px;\n padding: 10px 30px;\n background: #0D75FB;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s ease;\n width: 100%;\n max-width: 400px;\n align-self: center;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n.submit-button:disabled {\n background-color: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.25);\n cursor: not-allowed;\n}\n\n\n\n/* AI免责声明和备案信息样式 */\n.ai-disclaimer {\n margin-top: 16px;\n text-align: center;\n font-size: 12px;\n color: #999;\n line-height: 1.5;\n}\n\n.ai-disclaimer p {\n margin: 4px 0;\n}\n\n.beian-info {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ai-disclaimer a {\n color: #666;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.ai-disclaimer a:hover {\n color: #1890ff;\n text-decoration: underline;\n}\n\n/* 添加加载状态的样式 */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n }\n \n .loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--pcm-primary-color, #1890ff);\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n }\n \n .loading-text {\n font-size: 16px;\n color: var(--pcm-text-color, #333);\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n ","import { Component, Prop, h, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\nimport { uploadFileToBackend, FileUploadResponse, verifyApiKey } from '../../utils/utils';\nimport { ConversationStartEventData, InterviewCompleteEventData, StreamCompleteEventData } from '../../components';\nimport { ErrorEventBus, ErrorEventDetail } from '../../utils/error-event';\nimport { authStore } from '../../../store/auth.store';\nimport { configStore } from '../../../store/config.store';\nimport { SentryReporter } from '../../utils/sentry-reporter';\n\n/**\n * 会议总结助手\n */\n\n@Component({\n tag: 'pcm-hyzj-modal',\n styleUrls: ['pcm-hyzj-modal.css', '../../global/global.css'],\n shadow: true,\n})\nexport class HyzjModal {\n /**\n * 模态框标题\n */\n @Prop() modalTitle: string = '会议总结助手';\n\n /**\n * SDK鉴权密钥\n */\n @Prop({ attribute: 'token' }) token!: string;\n\n /**\n * 是否显示聊天模态框\n */\n @Prop({ mutable: true }) isOpen: boolean = false;\n\n /**\n * 当点击模态框关闭时触发\n */\n @Event() modalClosed: EventEmitter<void>;\n\n /**\n * 应用图标URL\n */\n @Prop() icon?: string;\n\n /**\n * 聊天框的页面层级\n */\n @Prop() zIndex?: number = 1000;\n\n /**\n * 是否展示顶部标题栏\n */\n @Prop() isShowHeader: boolean = true;\n\n /**\n * 是否展示右上角的关闭按钮\n */\n @Prop() isNeedClose: boolean = true;\n\n /**\n * 会话ID,传入继续对话,否则创建新会话\n */\n @Prop({ mutable: true }) conversationId?: string;\n\n /**\n * 默认查询文本\n */\n @Prop() defaultQuery: string = '请开始总结';\n\n /**\n * 是否以全屏模式打开,移动端建议设置为true\n */\n @Prop() fullscreen: boolean = false;\n\n /**\n * 自定义输入参数<br>\n * 传入customInputs.file_url时,会直接开始聊天。<br>\n */\n @Prop() customInputs: Record<string, string> = {};\n\n /**\n * 是否显示工作区历史会话按钮\n */\n @Prop() showWorkspaceHistory: boolean = false;\n\n /**\n * 上传成功事件\n */\n @Event() uploadSuccess: EventEmitter<FileUploadResponse>;\n\n /**\n * 流式输出完成事件\n */\n @Event() streamComplete: EventEmitter<StreamCompleteEventData>;\n\n /**\n * 新会话开始的回调,只会在一轮对话开始时触发一次\n */\n @Event() conversationStart: EventEmitter<ConversationStartEventData>;\n\n /**\n * 当聊天完成时触发\n */\n @Event() interviewComplete: EventEmitter<InterviewCompleteEventData>;\n\n /**\n * SDK密钥验证失败事件\n */\n @Event() tokenInvalid: EventEmitter<void>;\n\n /**\n * 错误事件\n */\n @Event() someErrorEvent: EventEmitter<ErrorEventDetail>;\n\n /**\n * 附件预览模式\n * 'drawer': 在右侧抽屉中预览\n * 'window': 在新窗口中打开\n */\n @Prop() filePreviewMode: 'drawer' | 'window' = 'window';\n\n @State() selectedFile: File | null = null;\n @State() isUploading: boolean = false;\n @State() uploadedFileInfo: FileUploadResponse | null = null;\n @State() showChatModal: boolean = false;\n\n // 使用 @Element 装饰器获取组件的 host 元素\n @Element() hostElement: HTMLElement;\n\n @State() isSubmitting: boolean = false;\n\n\n private tokenInvalidListener: () => void;\n private removeErrorListener: () => void;\n\n @Watch('token')\n handleTokenChange(newToken: string) {\n // 当传入的 token 变化时,更新 authStore 中的 token\n if (newToken && newToken !== authStore.getToken()) {\n authStore.setToken(newToken);\n }\n }\n\n @Watch('isOpen')\n async handleIsOpenChange(newValue: boolean) {\n if (!newValue) {\n // 重置状态\n this.clearSelectedFile();\n this.showChatModal = false;\n } else {\n await verifyApiKey(this.token);\n \n // 如果有会话ID或者有file_url参数,直接显示聊天模态框\n if (this.conversationId || this.customInputs?.file_url) {\n this.showChatModal = true;\n }\n }\n }\n\n\n componentWillLoad() {\n\n // 将 zIndex 存入配置缓存\n if (this.zIndex) {\n configStore.setItem('modal-zIndex', this.zIndex);\n }\n if (this.token) {\n authStore.setToken(this.token);\n }\n\n // 添加全局token无效事件监听器\n this.tokenInvalidListener = () => {\n this.tokenInvalid.emit();\n };\n\n // 添加全局错误监听\n this.removeErrorListener = ErrorEventBus.addErrorListener((errorDetail) => {\n this.someErrorEvent.emit(errorDetail);\n });\n\n document.addEventListener('pcm-token-invalid', this.tokenInvalidListener);\n }\n\n disconnectedCallback() {\n // 组件销毁时移除事件监听器\n document.removeEventListener('pcm-token-invalid', this.tokenInvalidListener);\n\n // 移除错误监听器\n if (this.removeErrorListener) {\n this.removeErrorListener();\n }\n }\n\n\n private handleClose = () => {\n this.modalClosed.emit();\n };\n\n private handleFileChange = (event: Event) => {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.selectedFile = input.files[0];\n }\n };\n\n private handleUploadClick = () => {\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\n fileInput?.click();\n };\n\n private clearSelectedFile = () => {\n this.selectedFile = null;\n this.uploadedFileInfo = null;\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\n if (fileInput) {\n fileInput.value = '';\n }\n };\n\n private async uploadFile() {\n if (!this.selectedFile) return;\n\n this.isUploading = true;\n\n try {\n // 使用 uploadFileToBackend 工具函数上传文件\n const result = await uploadFileToBackend(this.selectedFile, {\n }, {\n 'tags': ['other']\n });\n\n this.uploadedFileInfo = result;\n this.uploadSuccess.emit(result);\n } catch (error) {\n console.error('文件上传错误:', error);\n this.clearSelectedFile();\n SentryReporter.captureError(error, {\n action: 'uploadFile',\n component: 'pcm-hyzj-modal',\n title: '文件上传失败'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '文件上传失败,请重试'\n });\n } finally {\n this.isUploading = false;\n }\n }\n\n private handleStartInterview = async () => {\n if (!this.selectedFile) {\n alert('请上传面试内容');\n return;\n }\n\n this.isSubmitting = true;\n\n try {\n // 如果还没上传,先上传文件\n if (!this.uploadedFileInfo) {\n await this.uploadFile();\n if (!this.uploadedFileInfo) {\n this.isSubmitting = false;\n return; // 上传失败\n }\n }\n\n // 直接显示聊天模态框\n this.showChatModal = true;\n } catch (error) {\n console.error('开始面试时出错:', error);\n SentryReporter.captureError(error, {\n action: 'handleStartInterview',\n component: 'pcm-hyzj-modal',\n title: '开始面试时出错'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '开始面试时出错,请重试'\n });\n } finally {\n this.isSubmitting = false;\n }\n };\n\n\n render() {\n if (!this.isOpen) return null;\n\n const modalStyle = {\n zIndex: String(this.zIndex)\n };\n\n\n const containerClass = {\n 'modal-container': true,\n 'fullscreen': this.fullscreen,\n 'pc-layout': true,\n };\n\n const overlayClass = {\n 'modal-overlay': true,\n 'fullscreen-overlay': this.fullscreen\n };\n\n // 显示加载状态\n const isLoading = this.conversationId && !this.showChatModal;\n\n // 判断是否隐藏文件上传区域\n const hideFileUpload = Boolean(this.customInputs && this.customInputs.file_url);\n\n return (\n <div class={overlayClass} style={modalStyle}>\n <div class={containerClass}>\n {this.isShowHeader && (\n <div class=\"modal-header\">\n <div class=\"header-left\">\n {this.icon && <img src={this.icon} class=\"header-icon\" alt=\"应用图标\" />}\n <div>{this.modalTitle}</div>\n </div>\n {this.isNeedClose && (\n <button class=\"close-button\" onClick={this.handleClose}>\n <span>×</span>\n </button>\n )}\n </div>\n )}\n\n {/* 上传界面 - 仅在不显示聊天模态框且没有会话ID且没有customInputs.file_url时显示 */}\n {!this.showChatModal && !this.conversationId && !hideFileUpload && (\n <div class=\"input-container\">\n {/* 上传会议纪要上传区域 */}\n <div class=\"resume-upload-section\">\n <label>上传会议纪要</label>\n <div class=\"upload-area\" onClick={this.handleUploadClick}>\n {this.selectedFile ? (\n <div class=\"file-item\">\n <div class=\"file-item-content\">\n <span class=\"file-icon\">📝</span>\n <span class=\"file-name\">{this.selectedFile.name}</span>\n </div>\n <button class=\"remove-file\" onClick={(e) => {\n e.stopPropagation();\n this.clearSelectedFile();\n }}>×</button>\n </div>\n ) : (\n <div class=\"upload-placeholder\">\n <img src='https://pub.pincaimao.com/static/web/images/home/i_upload.png'></img>\n <p class='upload-text'>点击上传会议纪要</p>\n <p class=\"upload-hint\">支持 mp3、markdown、pdf、docx、doc、md 格式</p>\n </div>\n )}\n </div>\n </div>\n\n <button\n class=\"submit-button\"\n disabled={!this.selectedFile || this.isUploading || this.isSubmitting}\n onClick={this.handleStartInterview}\n >\n {this.isUploading ? '上传中...' : this.isSubmitting ? '处理中...' : '开始分析'}\n </button>\n\n <div class=\"ai-disclaimer\">\n <p>所有内容均由AI生成仅供参考</p>\n <p class=\"beian-info\">\n <span>中央网信办生成式人工智能服务备案号</span>:\n <a href=\"https://www.pincaimao.com\" target=\"_blank\" rel=\"noopener noreferrer\">Hunan-PinCaiMao-202412310003</a>\n </p>\n </div>\n\n <input\n type=\"file\"\n class=\"file-input\"\n onChange={this.handleFileChange}\n />\n </div>\n )}\n\n {/* 加载状态 - 在有会话ID但聊天模态框尚未显示时展示 */}\n {isLoading && (\n <div class=\"loading-container\">\n <div class=\"loading-spinner\"></div>\n <p class=\"loading-text\">正在加载对话...</p>\n </div>\n )}\n\n {/* 聊天界面 - 在显示聊天模态框时显示 */}\n {this.showChatModal && (\n <div >\n <pcm-app-chat-modal\n isOpen={true}\n modalTitle={this.modalTitle}\n icon={this.icon}\n isShowHeader={this.isShowHeader}\n isNeedClose={this.isShowHeader}\n fullscreen={this.fullscreen}\n showWorkspaceHistory={this.showWorkspaceHistory}\n botId=\"3022316191018885\"\n conversationId={this.conversationId}\n defaultQuery={this.defaultQuery}\n enableVoice={false}\n filePreviewMode={this.filePreviewMode}\n customInputs={this.conversationId ? {} : {\n ...this.customInputs,\n file_url: this.customInputs?.file_url || this.uploadedFileInfo?.cos_key,\n file_name: this.customInputs?.file_name || this.uploadedFileInfo?.file_name\n }}\n interviewMode=\"text\"\n ></pcm-app-chat-modal>\n </div>\n )}\n </div>\n </div>\n );\n }\n} ","/* 输入模式切换 */\n.input-mode-toggle {\n display: flex;\n align-items: center;\n margin-bottom: 16px;\n}\n \n.input-mode-toggle span {\n color: #333;\n margin-right: 12px;\n}\n \n.toggle-button {\n display: flex;\n align-items: center;\n background: none;\n border: none;\n color: #2E6EDF;\n cursor: pointer;\n font-size: 14px;\n padding: 4px 8px;\n}\n \n.toggle-button svg {\n margin-right: 4px;\n}\n \n.toggle-button:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n \n/* 结构化输入模式 */\n.structured-input {\n width: 100%;\n}\n \n.job-name-input {\n margin-bottom: 20px;\n}\n \n.job-name-input label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n \n.job-name-input input {\n width: 95%;\n padding: 10px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 14px;\n background-color: #f9f9f9;\n}\n\n.job-name-input input:focus {\n outline: none;\n border-color: #2E6EDF;\n box-shadow: 0 0 0 2px rgba(46, 110, 223, 0.2);\n}\n\n.required {\n color: #f56c6c;\n}\n\n/* 按钮容器 */\n.button-container {\n display: flex;\n justify-content: center;\n margin-top: 24px;\n gap: 12px;\n max-width: 100%;\n box-sizing: border-box;\n flex-wrap: wrap;\n}\n\n\n.next-button {\n background-color: #2E6EDF;\n color: white;\n}\n\n.next-button:hover {\n background-color: #2457b8;\n}\n\n.next-button:disabled {\n background-color: #a0c0e8;\n cursor: not-allowed;\n}\n\n.prev-button {\n background-color: #f0f0f0 !important;\n color: #333 !important;\n}\n\n.prev-button:hover {\n background-color: #e0e0e0;\n}\n\n/* 标签选择 */\n.tag-selection {\n width: 100%;\n}\n\n.tag-selection-content {\n width: 100%;\n}\n\n.section-title {\n font-weight: 600;\n color: #333;\n margin-bottom: 12px;\n font-size: 16px;\n}\n\n.ai-tags-section, .basic-tags-section {\n margin-bottom: 24px;\n}\n\n.tag-group {\n margin-bottom: 16px;\n}\n\n.tag-title {\n color: #555;\n margin-bottom: 8px;\n font-weight: 500;\n}\n\n.tag-container {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n max-width: 100%;\n box-sizing: border-box;\n}\n\n.tag {\n display: inline-flex;\n align-items: center;\n padding: 6px 12px;\n border-radius: 4px;\n background-color: #f5f5f5;\n border: 1px solid #e0e0e0;\n color: #333;\n font-size: 13px;\n cursor: pointer;\n transition: all 0.2s;\n max-width: 100%;\n box-sizing: border-box;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.tag:hover {\n background-color: #e8e8e8;\n}\n\n.tag-selected {\n background-color: #e6f0ff;\n border-color: #2E6EDF;\n color: #2E6EDF;\n}\n\n/* 加载状态 */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 40px 0;\n background-color: #f9f9f9;\n border-radius: 8px;\n margin: 20px 0;\n max-width: 100%;\n box-sizing: border-box;\n}\n\n.loading-spinner {\n width: 40px;\n height: 40px;\n border: 3px solid rgba(46, 110, 223, 0.2);\n border-radius: 50%;\n border-top-color: #2E6EDF;\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n}\n\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n.loading-text {\n text-align: center;\n color: #333;\n font-weight: 500;\n}\n\n.loading-subtext {\n color: #888;\n font-size: 14px;\n margin-top: 4px;\n}\n\n/* 自由输入模式 */\n.free-input {\n width: 100%;\n}\n\n.textarea-container {\n margin-bottom: 16px;\n}\n\n.textarea-container label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.textarea-container textarea {\n border: 1px solid #ddd;\n border-radius: 4px;\n font-size: 14px;\n resize: vertical;\n background-color: #f9f9f9;\n min-height: 150px;\n width: 100%;\n padding: 12px 16px;\n margin-bottom: 20px;\n max-width: 100%;\n box-sizing: border-box;\n word-wrap: break-word;\n}\n\n.textarea-container textarea:focus {\n outline: none;\n border-color: #2E6EDF;\n box-shadow: 0 0 0 2px rgba(46, 110, 223, 0.2);\n}\n\n.input-guide {\n background-color: #f5f7fa;\n border-radius: 4px;\n padding: 12px 16px;\n margin-bottom: 20px;\n max-width: 100%;\n box-sizing: border-box;\n word-wrap: break-word;\n}\n\n.guide-title {\n font-weight: 500;\n color: #333;\n margin-bottom: 8px;\n}\n\n.guide-content {\n color: #666;\n font-size: 13px;\n max-width: 100%;\n word-wrap: break-word;\n}\n\n.guide-content div {\n margin-bottom: 4px;\n}\n\n\n/* 响应式调整 */\n@media (max-width: 768px) {\n \n .tag-container {\n gap: 7px;\n }\n \n .tag {\n padding: 4px 8px;\n font-size: 12px;\n }\n}\n\n@media (max-width: 480px) {\n .button-container {\n flex-direction: column;\n align-items: center;\n }\n \n .next-button, .prev-button, .submit-button {\n width: 100%;\n margin-bottom: 8px;\n }\n \n .tag {\n max-width: calc(50% - 8px);\n }\n}\n\n.tag-selection, \n.tag-selection-content,\n.ai-tags-section, \n.basic-tags-section,\n.structured-input,\n.free-input {\n max-width: 100%;\n box-sizing: border-box;\n}",":host {\n font-size: 16px;\n}\n\n/* 模态框基础样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* 全屏模式下的overlay样式 - 改为基于父组件 */\n.fullscreen-overlay {\n padding: 0;\n background-color: rgba(0, 0, 0, 0.7);\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: calc(100% - 10px);\n}\n\n.modal-container {\n background-color: #fff;\n border-radius: 8px;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n transition: all 0.3s ease-out;\n overflow: hidden;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 600px;\n min-width: 320px;\n}\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 10px 0px 0px 0px;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n}\n\n/* 模态框头部样式 */\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n\n/* 文件上传区域通用样式 */\n.upload-area {\n cursor: pointer;\n width: 100%;\n}\n\n\n.upload-placeholder {\n transition: all 0.3s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: rgba(0, 0, 0, 0.02);\n border: 1px dashed #d9d9d9;\n border-radius: 8px;\n}\n\n.upload-placeholder:hover {\n border: 1px dashed #1890ff;\n}\n\n.upload-placeholder img {\n margin-top: 8px;\n width: 50px;\n height: 50px;\n}\n\n.upload-placeholder .upload-text {\n margin: 4px 0;\n color: #332F39;\n font-size: 14px;\n}\n\n.upload-placeholder .upload-hint {\n font-size: 14px;\n color: #949AA5;\n margin-top: 8px;\n padding: 0px 10px;\n text-align: center;\n}\n\n\n/* 文件项样式 */\n.file-item {\n position: relative;\n padding: 16px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n transition: border-color 0.3s;\n cursor: pointer;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.file-item:hover {\n border-color: #0D75FB;\n}\n\n.file-item-content {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.file-icon {\n color: #0D75FB;\n flex-shrink: 0;\n}\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n.remove-file {\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n margin-left: 8px;\n border-radius: 4px;\n transition: all 0.2s;\n min-width: 30px;\n min-height: 30px;\n}\n\n.remove-file:hover {\n background-color: #f1f5f9;\n color: #475569;\n}\n\n.file-input {\n display: none;\n}\n\n\n\n/* 输入容器样式 */\n.input-container {\n padding: 20px;\n display: flex;\n flex-direction: column;\n height: calc(100% - 50px);\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;\n /* 减去header高度 */\n overflow-y: auto;\n}\n\n.input-container h3 {\n margin-top: 0;\n margin-bottom: 20px;\n font-size: 18px;\n color: #333;\n text-align: center;\n}\n\n/* JD输入区域样式 */\n.jd-input-section {\n margin-bottom: 20px;\n}\n\n.jd-input-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.job-description-textarea {\n width: calc(100% - 16px);\n border: 1px solid #ddd;\n border-radius: 4px;\n resize: vertical;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n transition: border-color 0.3s;\n padding: 8px;\n}\n\n.job-description-textarea:focus {\n outline: none;\n border-color: #1890ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n/* 简历上传区域样式 */\n.resume-upload-section {\n margin-bottom: 20px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.resume-upload-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n align-self: flex-start;\n}\n\n\n/* 提交按钮通用样式 */\n.submit-button {\n margin-top: 10px;\n padding: 10px 30px;\n background: #0D75FB;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s ease;\n width: 100%;\n max-width: 400px;\n align-self: center;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n.submit-button:disabled {\n background-color: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.25);\n cursor: not-allowed;\n}\n\n\n\n/* AI免责声明和备案信息样式 */\n.ai-disclaimer {\n margin-top: 16px;\n text-align: center;\n font-size: 12px;\n color: #999;\n line-height: 1.5;\n}\n\n.ai-disclaimer p {\n margin: 4px 0;\n}\n\n.beian-info {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ai-disclaimer a {\n color: #666;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.ai-disclaimer a:hover {\n color: #1890ff;\n text-decoration: underline;\n}\n\n/* 添加加载状态的样式 */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n }\n \n .loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--pcm-primary-color, #1890ff);\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n }\n \n .loading-text {\n font-size: 16px;\n color: var(--pcm-text-color, #333);\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n ","import { Component, Prop, h, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\nimport { sendHttpRequest, verifyApiKey } from '../../utils/utils';\nimport { ConversationStartEventData, InterviewCompleteEventData, StreamCompleteEventData } from '../../components';\nimport { ErrorEventBus, ErrorEventDetail } from '../../utils/error-event';\nimport { authStore } from '../../../store/auth.store';\nimport { configStore } from '../../../store/config.store';\nimport { SentryReporter } from '../../utils/sentry-reporter';\n\n/**\n * 职位生成组件\n */\n\n@Component({\n tag: 'pcm-jd-modal',\n styleUrls: ['pcm-jd-modal.css', '../../global/global.css'],\n shadow: true,\n})\nexport class PcmJdModal {\n /**\n * 模态框标题\n */\n @Prop() modalTitle: string = '职位生成';\n\n /**\n * SDK鉴权密钥\n */\n @Prop({ attribute: 'token' }) token!: string;\n\n /**\n * 是否显示聊天模态框\n */\n @Prop({ mutable: true }) isOpen: boolean = false;\n\n /**\n * 当点击模态框关闭时触发\n */\n @Event() modalClosed: EventEmitter<void>;\n\n /**\n * 应用图标URL\n */\n @Prop() icon?: string;\n\n /**\n * 聊天框的页面层级\n */\n @Prop() zIndex?: number = 1000;\n\n /**\n * 是否展示顶部标题栏\n */\n @Prop() isShowHeader: boolean = true;\n\n /**\n * 是否展示右上角的关闭按钮\n */\n @Prop() isNeedClose: boolean = true;\n\n /**\n * 会话ID,传入继续对话,否则创建新会话\n */\n @Prop({ mutable: true }) conversationId?: string;\n\n /**\n * 默认查询文本\n */\n @Prop() defaultQuery: string = '请帮我生成职位信息';\n\n /**\n * 是否以全屏模式打开,移动端建议设置为true\n */\n @Prop() fullscreen: boolean = false;\n\n /**\n * 自定义输入参数,传入customInputs.job_info时,会隐藏JD输入区域<br>\n */\n @Prop() customInputs: Record<string, string> = {};\n\n /**\n * 是否显示工作区历史会话按钮\n */\n @Prop() showWorkspaceHistory: boolean = false;\n\n /**\n * 流式输出完成事件\n */\n @Event() streamComplete: EventEmitter<StreamCompleteEventData>;\n\n /**\n * 新会话开始的回调,只会在一轮对话开始时触发一次\n */\n @Event() conversationStart: EventEmitter<ConversationStartEventData>;\n\n /**\n * 当聊天完成时触发\n */\n @Event() interviewComplete: EventEmitter<InterviewCompleteEventData>;\n\n /**\n * SDK密钥验证失败事件\n */\n @Event() tokenInvalid: EventEmitter<void>;\n\n /**\n * 错误事件\n */\n @Event() someErrorEvent: EventEmitter<ErrorEventDetail>;\n\n /**\n * 附件预览模式\n * 'drawer': 在右侧抽屉中预览\n * 'window': 在新窗口中打开\n */\n @Prop() filePreviewMode: 'drawer' | 'window' = 'window';\n\n @State() showChatModal: boolean = false;\n\n // 使用 @Element 装饰器获取组件的 host 元素\n @Element() hostElement: HTMLElement;\n\n // 输入模式:structured(点选模式) 或 free(表单模式)\n @State() inputMode: 'structured' | 'free' = 'structured';\n\n // 步骤:input(输入职位名称) 或 review(选择标签)\n @State() step: 'input' | 'review' = 'input';\n\n // 职位名称\n @State() jobName: string = '';\n\n // 自由输入模式的文本\n @State() freeInputText: string = '';\n\n // 是否正在加载标签\n @State() isLoading: boolean = false;\n\n // 是否正在提交\n @State() isSubmitting: boolean = false;\n\n // 标签组\n @State() tagGroups: { dimensionName: string; defaultTags: string[]; optionalTags: string[] }[] = [];\n\n // 洗牌后的标签组\n @State() shuffledTagGroups: { dimensionName: string; tags: string[] }[] = [];\n\n // 选中的AI标签\n @State() selectedAITags: { [key: string]: string[] } = {};\n\n // 选中的基础标签\n @State() selectedTags: {\n salary: string;\n benefits: string[];\n education: string;\n } = {\n salary: '',\n benefits: [],\n education: ''\n };\n\n\n private tokenInvalidListener: () => void;\n private removeErrorListener: () => void;\n\n @Watch('token')\n handleTokenChange(newToken: string) {\n // 当传入的 token 变化时,更新 authStore 中的 token\n if (newToken && newToken !== authStore.getToken()) {\n authStore.setToken(newToken);\n }\n }\n \n\n componentWillLoad() {\n // 将 zIndex 存入配置缓存\n if (this.zIndex) {\n configStore.setItem('modal-zIndex', this.zIndex);\n }\n if (this.token) {\n authStore.setToken(this.token);\n }\n\n // 添加全局token无效事件监听器\n this.tokenInvalidListener = () => {\n this.tokenInvalid.emit();\n };\n\n // 添加全局错误监听\n this.removeErrorListener = ErrorEventBus.addErrorListener((errorDetail) => {\n this.someErrorEvent.emit(errorDetail);\n });\n document.addEventListener('pcm-token-invalid', this.tokenInvalidListener);\n }\n\n disconnectedCallback() {\n // 组件销毁时移除事件监听器\n document.removeEventListener('pcm-token-invalid', this.tokenInvalidListener);\n\n // 移除错误监听器\n if (this.removeErrorListener) {\n this.removeErrorListener();\n }\n }\n\n\n // 薪资范围选项\n private salaryRanges = [\n { text: '3k-5k', value: '3k_5k' },\n { text: '5k-8k', value: '5k_8k' },\n { text: '8k-12k', value: '8k_12k' },\n { text: '12k-15k', value: '12k_15k' },\n { text: '15k-20k', value: '15k_20k' },\n { text: '20k以上', value: 'above_20k' },\n ];\n\n // 福利待遇选项\n private benefits = [\n { text: '五险一金', value: '五险一金' },\n { text: '年终奖', value: '年终奖' },\n { text: '带薪年假', value: '带薪年假' },\n { text: '加班补贴', value: '加班补贴' },\n { text: '餐补', value: '餐补' },\n { text: '交通补贴', value: '交通补贴' },\n { text: '节日福利', value: '节日福利' },\n { text: '团队建设', value: '团队建设' },\n ];\n\n // 学历要求选项\n private educationRequirements = [\n { text: '大专', value: '大专' },\n { text: '本科', value: '本科' },\n { text: '硕士', value: '硕士' },\n { text: '博士', value: '博士' },\n { text: '学历不限', value: '学历不限' },\n ];\n\n private handleClose = () => {\n this.modalClosed.emit();\n };\n\n private handleToggleInput = () => {\n this.inputMode = this.inputMode === 'structured' ? 'free' : 'structured';\n };\n\n private handleJobNameChange = (event: Event) => {\n const input = event.target as HTMLInputElement;\n this.jobName = input.value;\n };\n\n private handleFreeInputChange = (event: Event) => {\n const textarea = event.target as HTMLTextAreaElement;\n this.freeInputText = textarea.value;\n };\n\n private handleNextStep = async () => {\n if (!this.jobName.trim()) {\n alert('请输入职位名称');\n return;\n }\n\n this.step = 'review';\n await this.handlePositionAnalysis(this.jobName);\n };\n\n private handlePrevStep = () => {\n this.step = 'input';\n };\n\n private async handlePositionAnalysis(jobName: string) {\n if (!jobName.trim()) return;\n\n this.isLoading = true;\n\n try {\n const response = await sendHttpRequest({\n url: '/sdk/v1/chat/workflow/block-run',\n method: 'POST',\n data: {\n inputs: {\n input_info: jobName\n },\n workflow_code: \"generate_jd_tags\"\n }\n });\n\n if (response.success && response.data?.data.outputs?.text) {\n try {\n const parsedOutput = JSON.parse(response.data.data.outputs.text);\n this.tagGroups = parsedOutput.tagGroup || [];\n\n // 自动选中所有默认标签\n const initialSelectedTags: { [key: string]: string[] } = {};\n\n // 洗牌处理标签\n const shuffled = (parsedOutput.tagGroup || []).map(group => {\n // 将默认标签和可选标签合并\n const allTags = [...(group.defaultTags || []), ...(group.optionalTags || [])];\n\n // Fisher-Yates 洗牌算法打乱标签顺序\n for (let i = allTags.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [allTags[i], allTags[j]] = [allTags[j], allTags[i]];\n }\n\n // 设置默认选中的标签\n if (group.defaultTags && group.defaultTags.length > 0) {\n initialSelectedTags[group.dimensionName] = [...group.defaultTags];\n }\n\n return {\n dimensionName: group.dimensionName,\n tags: allTags\n };\n });\n\n this.shuffledTagGroups = shuffled;\n this.selectedAITags = initialSelectedTags;\n } catch (error) {\n SentryReporter.captureError(error, {\n action: 'handlePositionAnalysis',\n component: 'pcm-jd-modal',\n title: '解析前置标签时错误'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '解析前置标签时错误'\n });\n }\n }\n } catch (error) {\n console.error('工作流运行错误:', error);\n } finally {\n this.isLoading = false;\n }\n }\n\n private handleTagClick = (category: 'salary' | 'benefits' | 'education', value: string) => {\n if (category === 'benefits') {\n const currentTags = [...this.selectedTags.benefits];\n const newTags = currentTags.includes(value)\n ? currentTags.filter(t => t !== value)\n : [...currentTags, value];\n\n this.selectedTags = {\n ...this.selectedTags,\n benefits: newTags\n };\n } else {\n this.selectedTags = {\n ...this.selectedTags,\n [category]: this.selectedTags[category] === value ? '' : value\n };\n }\n };\n\n private handleAITagClick = (dimensionName: string, tag: string) => {\n const currentTags = this.selectedAITags[dimensionName] || [];\n const newTags = currentTags.includes(tag)\n ? currentTags.filter(t => t !== tag)\n : [...currentTags, tag];\n\n this.selectedAITags = {\n ...this.selectedAITags,\n [dimensionName]: newTags\n };\n };\n\n private handleSubmitStructured = async () => {\n this.isSubmitting = true;\n\n try {\n // 处理薪资范围标签\n let salaryRange = '';\n if (this.selectedTags.salary) {\n const range = this.salaryRanges.find(r => r.value === this.selectedTags.salary);\n if (range) {\n salaryRange = range.text;\n }\n }\n\n // 处理福利待遇标签\n const selectedBenefits = this.selectedTags.benefits.join('、');\n\n // 处理学历要求标签\n let education = '';\n if (this.selectedTags.education) {\n const edu = this.educationRequirements.find(e => e.value === this.selectedTags.education);\n if (edu) {\n education = edu.text;\n }\n }\n\n // 构建职位描述\n let jobInfo = `职位名称:${this.jobName}\\n`;\n\n if (salaryRange) {\n jobInfo += `薪资范围:${salaryRange}\\n`;\n }\n\n if (selectedBenefits) {\n jobInfo += `福利待遇:${selectedBenefits}\\n`;\n }\n\n if (education) {\n jobInfo += `学历要求:${education}\\n`;\n }\n\n // 添加AI标签\n Object.entries(this.selectedAITags).forEach(([dimension, tags]) => {\n if (tags.length > 0) {\n jobInfo += `${dimension}:${tags.join('、')}\\n`;\n }\n });\n\n // 显示聊天模态框\n this.showChatModal = true;\n this.jobDescription = jobInfo;\n } catch (error) {\n console.error('提交结构化数据时出错:', error);\n SentryReporter.captureError(error, {\n action: 'handleSubmitStructured',\n component: 'pcm-jd-modal',\n title: '提交数据时出错'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '提交数据时出错,请重试'\n });\n } finally {\n this.isSubmitting = false;\n }\n };\n\n private handleSubmitFree = async () => {\n if (!this.freeInputText.trim()) {\n alert('请输入职位需求信息');\n return;\n }\n\n this.isSubmitting = true;\n\n try {\n // 直接使用自由输入的文本作为职位描述\n this.jobDescription = this.freeInputText;\n\n // 显示聊天模态框\n this.showChatModal = true;\n } catch (error) {\n console.error('提交自由输入数据时出错:', error);\n SentryReporter.captureError(error, {\n action: 'handleSubmitFree',\n component: 'pcm-jd-modal',\n title: '提交数据时出错'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '提交数据时出错,请重试'\n });\n } finally {\n this.isSubmitting = false;\n }\n };\n\n @State() jobDescription: string = '';\n\n @Watch('isOpen')\n async handleIsOpenChange(newValue: boolean) {\n if (!newValue) {\n // 重置状态\n this.showChatModal = false;\n this.jobDescription = '';\n this.jobName = '';\n this.freeInputText = '';\n this.step = 'input';\n this.inputMode = 'structured';\n this.tagGroups = [];\n this.shuffledTagGroups = [];\n this.selectedAITags = {};\n this.selectedTags = {\n salary: '',\n benefits: [],\n education: ''\n };\n } else {\n if (this.customInputs && this.customInputs.job_info) {\n this.jobDescription = this.customInputs.job_info;\n // 如果有 job_info,直接切换到自由输入模式并填充内容\n this.inputMode = 'free';\n this.freeInputText = this.customInputs.job_info;\n }\n await verifyApiKey(this.token);\n if (this.conversationId) {\n // 如果有会话ID,直接显示聊天模态框\n this.showChatModal = true;\n }\n }\n }\n\n\n // 渲染标签组\n private renderTagGroup(title: string, options: { text: string, value: string }[], category: 'salary' | 'benefits' | 'education') {\n return (\n <div class=\"tag-group\">\n <div class=\"tag-title\">{title}</div>\n <div class=\"tag-container\">\n {options.map(option => {\n const isSelected = category === 'benefits'\n ? this.selectedTags.benefits.includes(option.value)\n : this.selectedTags[category] === option.value;\n\n return (\n <div\n class={{\n 'tag': true,\n 'tag-selected': isSelected\n }}\n onClick={() => this.handleTagClick(category, option.value)}\n >\n {option.text}\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n\n // 渲染AI标签组\n private renderAITagGroups() {\n return (\n <div class=\"ai-tag-groups\">\n {this.shuffledTagGroups.map(group => (\n <div class=\"tag-group\">\n <div class=\"tag-title\">{group.dimensionName}</div>\n <div class=\"tag-container\">\n {group.tags.map(tag => {\n const isSelected = (this.selectedAITags[group.dimensionName] || []).includes(tag);\n return (\n <div\n class={{\n 'tag': true,\n 'tag-selected': isSelected\n }}\n onClick={() => this.handleAITagClick(group.dimensionName, tag)}\n >\n {tag}\n </div>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n );\n }\n\n // 渲染加载状态\n private renderLoadingState() {\n return (\n <div class=\"loading-container\">\n <div class=\"loading-spinner\"></div>\n <div class=\"loading-text\">\n <div>AI 正在分析职位信息</div>\n <div class=\"loading-subtext\">请稍候...</div>\n </div>\n </div>\n );\n }\n\n render() {\n if (!this.isOpen) return null;\n\n const modalStyle = {\n zIndex: String(this.zIndex)\n };\n\n const containerClass = {\n 'modal-container': true,\n 'fullscreen': this.fullscreen,\n 'pc-layout': true,\n };\n\n const overlayClass = {\n 'modal-overlay': true,\n 'fullscreen-overlay': this.fullscreen\n };\n\n // 显示加载状态\n const isLoading = this.conversationId && !this.showChatModal;\n\n // 修正这里的逻辑,确保当 customInputs.job_info 存在时不隐藏输入区域,而是显示自由输入模式\n const hideJdInput = false;\n\n return (\n <div class={overlayClass} style={modalStyle}>\n <div class={containerClass}>\n {this.isShowHeader && (\n <div class=\"modal-header\">\n <div class=\"header-left\">\n {this.icon && <img src={this.icon} class=\"header-icon\" alt=\"应用图标\" />}\n <div>{this.modalTitle}</div>\n </div>\n {this.isNeedClose && (\n <button class=\"close-button\" onClick={this.handleClose}>\n <span>×</span>\n </button>\n )}\n </div>\n )}\n\n {/* 输入界面 - 仅在不显示聊天模态框且没有会话ID时显示 */}\n {!this.showChatModal && !this.conversationId && !hideJdInput && (\n <div class=\"input-container\">\n {/* 输入模式切换 */}\n <div class=\"input-mode-toggle\">\n <span>职位需求信息</span>\n <button\n class=\"toggle-button\"\n onClick={this.handleToggleInput}\n disabled={this.isLoading}\n >\n <svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"none\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 12h16M4 18h16\" />\n </svg>\n 切换输入\n </button>\n </div>\n\n {/* 结构化输入模式 */}\n {this.inputMode === 'structured' && (\n <div class=\"structured-input\">\n {/* 第一步:输入职位名称 */}\n {this.step === 'input' && (\n <div class=\"job-name-input\">\n <label htmlFor=\"job-name\">\n 职位名称 <span class=\"required\">*</span>\n </label>\n <input\n id=\"job-name\"\n type=\"text\"\n placeholder=\"请输入职位名称\"\n value={this.jobName}\n onInput={this.handleJobNameChange}\n disabled={this.isLoading}\n />\n <div class=\"button-container\">\n <button\n class=\"submit-button next-button\"\n onClick={this.handleNextStep}\n disabled={!this.jobName.trim() || this.isLoading}\n >\n 下一步\n </button>\n </div>\n </div>\n )}\n\n {/* 第二步:选择标签 */}\n {this.step === 'review' && (\n <div class=\"tag-selection\">\n {this.isLoading ? (\n this.renderLoadingState()\n ) : (\n <div class=\"tag-selection-content\">\n {/* AI推荐标签 */}\n {this.tagGroups.length > 0 && (\n <div class=\"ai-tags-section\">\n <div class=\"section-title\">AI 推荐标签</div>\n {this.renderAITagGroups()}\n </div>\n )}\n\n {/* 基础标签 */}\n {this.tagGroups.length > 0 && (\n <div class=\"basic-tags-section\">\n {this.renderTagGroup('月薪范围', this.salaryRanges, 'salary')}\n {this.renderTagGroup('福利待遇', this.benefits, 'benefits')}\n {this.renderTagGroup('学历要求', this.educationRequirements, 'education')}\n </div>\n )}\n\n <div class=\"button-container\">\n <button\n class=\"submit-button prev-button\"\n onClick={this.handlePrevStep}\n >\n 上一步\n </button>\n <button\n class=\"submit-button\"\n onClick={this.handleSubmitStructured}\n disabled={this.isSubmitting}\n >\n {this.isSubmitting ? '处理中...' : '生成JD'}\n </button>\n </div>\n </div>\n )}\n </div>\n )}\n </div>\n )}\n\n {/* 自由输入模式 */}\n {this.inputMode === 'free' && (\n <div class=\"free-input\">\n <div class=\"textarea-container\">\n <label htmlFor=\"free-input-text\">\n JD信息 <span class=\"required\">*</span>\n </label>\n <textarea\n id=\"free-input-text\"\n placeholder=\"请按照下方提示格式输入职位需求信息\"\n rows={8}\n value={this.freeInputText}\n onInput={this.handleFreeInputChange}\n ></textarea>\n </div>\n\n <div class=\"input-guide\">\n <div class=\"guide-title\">输入格式参考:</div>\n <div class=\"guide-content\">\n <div>• 职位名称 - 明确定义职位的名称</div>\n <div>• 薪资范围 - 明确该岗位的月薪或年薪</div>\n <div>• 福利待遇 - 该职位的福利待遇,如:五险一金、年休假、下午茶等</div>\n <div>• 工作职责 - 描述工作内容</div>\n <div>• 任职资格 - 包括学历、经验和技术要求</div>\n <div>• 工作地点与性质 - 全职/兼职、远程/办公室</div>\n </div>\n </div>\n\n <div class=\"button-container\">\n <button\n class=\"submit-button\"\n onClick={this.handleSubmitFree}\n disabled={!this.freeInputText.trim() || this.isSubmitting}\n >\n {this.isSubmitting ? '处理中...' : '生成JD'}\n </button>\n </div>\n </div>\n )}\n\n <div class=\"ai-disclaimer\">\n <p>所有内容均由AI生成仅供参考</p>\n <p class=\"beian-info\">\n <span>中央网信办生成式人工智能服务备案号</span>:\n <a href=\"https://www.pincaimao.com\" target=\"_blank\" rel=\"noopener noreferrer\">Hunan-PinCaiMao-202412310003</a>\n </p>\n </div>\n </div>\n )}\n\n {/* 加载状态 - 在有会话ID但聊天模态框尚未显示时展示 */}\n {isLoading && (\n <div class=\"loading-container\">\n <div class=\"loading-spinner\"></div>\n <p class=\"loading-text\">正在加载对话...</p>\n </div>\n )}\n\n {/* 聊天界面 - 在显示聊天模态框时显示 */}\n {this.showChatModal && (\n <div>\n <pcm-app-chat-modal\n isOpen={true}\n modalTitle={this.modalTitle}\n icon={this.icon}\n isShowHeader={this.isShowHeader}\n isNeedClose={this.isShowHeader}\n fullscreen={this.fullscreen}\n showWorkspaceHistory={this.showWorkspaceHistory}\n botId=\"3022316191018873\"\n conversationId={this.conversationId}\n defaultQuery={this.defaultQuery}\n enableVoice={false}\n filePreviewMode={this.filePreviewMode}\n customInputs={this.conversationId ? {} : {\n ...this.customInputs,\n job_info: this.customInputs?.job_info || this.jobDescription\n }}\n interviewMode=\"text\"\n ></pcm-app-chat-modal>\n </div>\n )}\n </div>\n </div>\n );\n }\n} ","",":host {\n font-size: 16px;\n}\n\n/* 模态框基础样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* 全屏模式下的overlay样式 - 改为基于父组件 */\n.fullscreen-overlay {\n padding: 0;\n background-color: rgba(0, 0, 0, 0.7);\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: calc(100% - 10px);\n}\n\n.modal-container {\n background-color: #fff;\n border-radius: 8px;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n transition: all 0.3s ease-out;\n overflow: hidden;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 600px;\n min-width: 320px;\n}\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 10px 0px 0px 0px;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n}\n\n/* 模态框头部样式 */\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n\n/* 文件上传区域通用样式 */\n.upload-area {\n cursor: pointer;\n width: 100%;\n}\n\n\n.upload-placeholder {\n transition: all 0.3s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: rgba(0, 0, 0, 0.02);\n border: 1px dashed #d9d9d9;\n border-radius: 8px;\n}\n\n.upload-placeholder:hover {\n border: 1px dashed #1890ff;\n}\n\n.upload-placeholder img {\n margin-top: 8px;\n width: 50px;\n height: 50px;\n}\n\n.upload-placeholder .upload-text {\n margin: 4px 0;\n color: #332F39;\n font-size: 14px;\n}\n\n.upload-placeholder .upload-hint {\n font-size: 14px;\n color: #949AA5;\n margin-top: 8px;\n padding: 0px 10px;\n text-align: center;\n}\n\n\n/* 文件项样式 */\n.file-item {\n position: relative;\n padding: 16px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n transition: border-color 0.3s;\n cursor: pointer;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.file-item:hover {\n border-color: #0D75FB;\n}\n\n.file-item-content {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.file-icon {\n color: #0D75FB;\n flex-shrink: 0;\n}\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n.remove-file {\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n margin-left: 8px;\n border-radius: 4px;\n transition: all 0.2s;\n min-width: 30px;\n min-height: 30px;\n}\n\n.remove-file:hover {\n background-color: #f1f5f9;\n color: #475569;\n}\n\n.file-input {\n display: none;\n}\n\n\n\n/* 输入容器样式 */\n.input-container {\n padding: 20px;\n display: flex;\n flex-direction: column;\n height: calc(100% - 50px);\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;\n /* 减去header高度 */\n overflow-y: auto;\n}\n\n.input-container h3 {\n margin-top: 0;\n margin-bottom: 20px;\n font-size: 18px;\n color: #333;\n text-align: center;\n}\n\n/* JD输入区域样式 */\n.jd-input-section {\n margin-bottom: 20px;\n}\n\n.jd-input-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.job-description-textarea {\n width: calc(100% - 16px);\n border: 1px solid #ddd;\n border-radius: 4px;\n resize: vertical;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n transition: border-color 0.3s;\n padding: 8px;\n}\n\n.job-description-textarea:focus {\n outline: none;\n border-color: #1890ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n/* 简历上传区域样式 */\n.resume-upload-section {\n margin-bottom: 20px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.resume-upload-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n align-self: flex-start;\n}\n\n\n/* 提交按钮通用样式 */\n.submit-button {\n margin-top: 10px;\n padding: 10px 30px;\n background: #0D75FB;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s ease;\n width: 100%;\n max-width: 400px;\n align-self: center;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n.submit-button:disabled {\n background-color: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.25);\n cursor: not-allowed;\n}\n\n\n\n/* AI免责声明和备案信息样式 */\n.ai-disclaimer {\n margin-top: 16px;\n text-align: center;\n font-size: 12px;\n color: #999;\n line-height: 1.5;\n}\n\n.ai-disclaimer p {\n margin: 4px 0;\n}\n\n.beian-info {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ai-disclaimer a {\n color: #666;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.ai-disclaimer a:hover {\n color: #1890ff;\n text-decoration: underline;\n}\n\n/* 添加加载状态的样式 */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n }\n \n .loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--pcm-primary-color, #1890ff);\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n }\n \n .loading-text {\n font-size: 16px;\n color: var(--pcm-text-color, #333);\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n ","import { Component, Prop, h, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\nimport { uploadFileToBackend, FileUploadResponse, verifyApiKey } from '../../utils/utils';\nimport { ConversationStartEventData, ErrorEventDetail, InterviewCompleteEventData, StreamCompleteEventData } from '../../components';\nimport { ErrorEventBus } from '../../utils/error-event';\nimport { authStore } from '../../../store/auth.store';\nimport { configStore } from '../../../store/config.store';\nimport { SentryReporter } from '../../utils/sentry-reporter';\n\n/**\n * 简历匹配\n */\n\n@Component({\n tag: 'pcm-jlpp-modal',\n styleUrls: ['pcm-jlpp-modal.css', '../../global/global.css'],\n shadow: true,\n})\nexport class JlppModal {\n /**\n * 模态框标题\n */\n @Prop() modalTitle: string = '简历剖析助手';\n\n /**\n * SDK鉴权密钥\n */\n @Prop({ attribute: 'token' }) token!: string;\n\n /**\n * 是否显示聊天模态框\n */\n @Prop({ mutable: true }) isOpen: boolean = false;\n\n /**\n * 当点击模态框关闭时触发\n */\n @Event() modalClosed: EventEmitter<void>;\n\n /**\n * 应用图标URL\n */\n @Prop() icon?: string;\n\n /**\n * 聊天框的页面层级\n */\n @Prop() zIndex?: number = 1000;\n\n /**\n * 是否展示顶部标题栏\n */\n @Prop() isShowHeader: boolean = true;\n\n /**\n * 是否展示右上角的关闭按钮\n */\n @Prop() isNeedClose: boolean = true;\n\n /**\n * 会话ID,传入继续对话,否则创建新会话\n */\n @Prop({ mutable: true }) conversationId?: string;\n\n /**\n * 默认查询文本\n */\n @Prop() defaultQuery: string = '请开始分析';\n\n /**\n * 是否以全屏模式打开,移动端建议设置为true\n */\n @Prop() fullscreen: boolean = false;\n\n\n /**\n * 自定义输入参数,传入customInputs.job_info时,会隐藏JD输入区域<br>\n * 传入customInputs.file_url时,会隐藏简历上传区域。<br>\n * 传入customInputs.file_url和customInputs.job_info时,会直接开始聊天。<br>\n */\n @Prop() customInputs: Record<string, string> = {};\n\n /**\n * 是否显示工作区历史会话按钮\n */\n @Prop() showWorkspaceHistory: boolean = false;\n\n /**\n * 上传成功事件\n */\n @Event() uploadSuccess: EventEmitter<FileUploadResponse>;\n\n /**\n * 流式输出完成事件\n */\n @Event() streamComplete: EventEmitter<StreamCompleteEventData>;\n\n /**\n * 新会话开始的回调,只会在一轮对话开始时触发一次\n */\n @Event() conversationStart: EventEmitter<ConversationStartEventData>;\n\n /**\n * 当聊天完成时触发\n */\n @Event() interviewComplete: EventEmitter<InterviewCompleteEventData>;\n\n /**\n * SDK密钥验证失败事件\n */\n @Event() tokenInvalid: EventEmitter<void>;\n\n /**\n * 错误事件\n */\n @Event() someErrorEvent: EventEmitter<ErrorEventDetail>;\n\n /**\n * 附件预览模式\n * 'drawer': 在右侧抽屉中预览\n * 'window': 在新窗口中打开\n */\n @Prop() filePreviewMode: 'drawer' | 'window' = 'window';\n\n @State() selectedFile: File | null = null;\n @State() isUploading: boolean = false;\n @State() uploadedFileInfo: FileUploadResponse | null = null;\n @State() showChatModal: boolean = false;\n @State() jobDescription: string = '';\n @State() isSubmitting: boolean = false;\n\n // 使用 @Element 装饰器获取组件的 host 元素\n @Element() hostElement: HTMLElement;\n\n private tokenInvalidListener: () => void;\n private removeErrorListener: () => void;\n\n @Watch('token')\n handleTokenChange(newToken: string) {\n // 当传入的 token 变化时,更新 authStore 中的 token\n if (newToken && newToken !== authStore.getToken()) {\n authStore.setToken(newToken);\n }\n }\n\n\n\n @Watch('isOpen')\n async handleIsOpenChange(newValue: boolean) {\n if (!newValue) {\n // 重置状态\n this.clearSelectedFile();\n this.showChatModal = false;\n this.jobDescription = '';\n\n } else {\n if (this.customInputs && this.customInputs.job_info) {\n this.jobDescription = this.customInputs.job_info;\n }\n await verifyApiKey(this.token);\n \n // 如果有会话ID或者同时有 file_url 和 job_info,直接显示聊天模态框\n if (this.conversationId || (this.customInputs?.file_url && this.customInputs?.job_info)) {\n this.showChatModal = true;\n }\n }\n }\n\n \n componentWillLoad() {\n\n // 将 zIndex 存入配置缓存\n if (this.zIndex) {\n configStore.setItem('modal-zIndex', this.zIndex);\n }\n if (this.token) {\n authStore.setToken(this.token);\n }\n \n // 添加全局token无效事件监听器\n this.tokenInvalidListener = () => {\n this.tokenInvalid.emit();\n };\n // 添加全局错误监听\n this.removeErrorListener = ErrorEventBus.addErrorListener((errorDetail) => {\n this.someErrorEvent.emit(errorDetail);\n });\n\n document.addEventListener('pcm-token-invalid', this.tokenInvalidListener);\n }\n\n disconnectedCallback() {\n // 组件销毁时移除事件监听器\n document.removeEventListener('pcm-token-invalid', this.tokenInvalidListener);\n\n // 移除错误监听器\n if (this.removeErrorListener) {\n this.removeErrorListener();\n }\n }\n\n\n private handleClose = () => {\n this.modalClosed.emit();\n };\n\n private handleFileChange = (event: Event) => {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.selectedFile = input.files[0];\n }\n };\n\n private handleUploadClick = () => {\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\n fileInput?.click();\n };\n\n private clearSelectedFile = () => {\n this.selectedFile = null;\n this.uploadedFileInfo = null;\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\n if (fileInput) {\n fileInput.value = '';\n }\n };\n\n private handleJobDescriptionChange = (event: Event) => {\n const textarea = event.target as HTMLTextAreaElement;\n this.jobDescription = textarea.value;\n };\n\n private async uploadFile() {\n if (!this.selectedFile) return;\n\n this.isUploading = true;\n\n try {\n const result = await uploadFileToBackend(this.selectedFile, {\n }, {\n 'tags': ['resume']\n });\n\n this.uploadedFileInfo = result;\n this.uploadSuccess.emit(result);\n } catch (error) {\n console.error('文件上传错误:', error);\n this.clearSelectedFile();\n SentryReporter.captureError(error, {\n action: 'uploadFile',\n component: 'pcm-jlpp-modal',\n title: '文件上传失败'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '文件上传失败,请重试'\n });\n } finally {\n this.isUploading = false;\n }\n }\n\n private handleStartAnalysis = async () => {\n if (!this.selectedFile) {\n alert('请上传简历');\n return;\n }\n\n // 如果没有预设的job_info,则需要检查用户输入\n if (!this.customInputs?.job_info && !this.jobDescription.trim()) {\n alert('请输入职位描述');\n return;\n }\n\n this.isSubmitting = true;\n\n try {\n // 如果还没上传,先上传文件\n if (!this.uploadedFileInfo) {\n await this.uploadFile();\n if (!this.uploadedFileInfo) {\n this.isSubmitting = false;\n return; // 上传失败\n }\n }\n\n // 直接显示聊天模态框\n this.showChatModal = true;\n } catch (error) {\n console.error('开始分析时出错:', error);\n SentryReporter.captureError(error, {\n action: 'handleStartAnalysis',\n component: 'pcm-jlpp-modal',\n title: '开始分析时出错'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '开始分析时出错,请重试'\n });\n } finally {\n this.isSubmitting = false;\n }\n };\n\n\n render() {\n if (!this.isOpen) return null;\n\n const modalStyle = {\n zIndex: String(this.zIndex)\n };\n\n const containerClass = {\n 'modal-container': true,\n 'fullscreen': this.fullscreen,\n 'pc-layout': true,\n };\n\n const overlayClass = {\n 'modal-overlay': true,\n 'fullscreen-overlay': this.fullscreen\n };\n\n // 显示加载状态\n const isLoading = this.conversationId && !this.showChatModal;\n\n // 确保当 customInputs.job_info 存在时,hideJdInput 为 true\n const hideJdInput = Boolean(this.customInputs && this.customInputs.job_info);\n \n // 判断是否隐藏简历上传区域\n const hideResumeUpload = Boolean(this.customInputs && this.customInputs.file_url);\n \n // 判断是否同时提供了file_url和job_info\n const hasFileAndJob = Boolean(this.customInputs?.file_url && this.customInputs?.job_info);\n\n return (\n <div class={overlayClass} style={modalStyle}>\n <div class={containerClass}>\n {this.isShowHeader && (\n <div class=\"modal-header\">\n <div class=\"header-left\">\n {this.icon && <img src={this.icon} class=\"header-icon\" alt=\"应用图标\" />}\n <div>{this.modalTitle}</div>\n </div>\n {this.isNeedClose && (\n <button class=\"close-button\" onClick={this.handleClose}>\n <span>×</span>\n </button>\n )}\n </div>\n )}\n\n {/* 输入界面 - 仅在不显示聊天模态框且没有会话ID且没有同时提供file_url和job_info时显示 */}\n {!this.showChatModal && !this.conversationId && !hasFileAndJob && (\n <div class=\"input-container\">\n {/* JD输入区域 - 仅在没有parsedCustomInputs.job_info时显示 */}\n {!hideJdInput && (\n <div class=\"jd-input-section\">\n <label htmlFor=\"job-description\">请输入职位描述 (JD)</label>\n <textarea\n id=\"job-description\"\n class=\"job-description-textarea\"\n placeholder=\"请输入职位描述,包括职责、要求等信息...\"\n rows={6}\n value={this.jobDescription}\n onInput={this.handleJobDescriptionChange}\n ></textarea>\n </div>\n )}\n\n {/* 简历上传区域 - 仅在没有customInputs.file_url时显示 */}\n {!hideResumeUpload && (\n <div class=\"resume-upload-section\">\n <label>上传简历</label>\n <div class=\"upload-area\" onClick={this.handleUploadClick}>\n {this.selectedFile ? (\n <div class=\"file-item\">\n <div class=\"file-item-content\">\n <span class=\"file-icon\">📝</span>\n <span class=\"file-name\">{this.selectedFile.name}</span>\n </div>\n <button class=\"remove-file\" onClick={(e) => {\n e.stopPropagation();\n this.clearSelectedFile();\n }}>×</button>\n </div>\n ) : (\n <div class=\"upload-placeholder\">\n <img src='https://pub.pincaimao.com/static/web/images/home/i_upload.png'></img>\n <p class='upload-text'>点击上传简历</p>\n <p class=\"upload-hint\">支持 txt、markdown、pdf、docx、doc、md 格式</p>\n </div>\n )}\n </div>\n </div>\n )}\n\n <button\n class=\"submit-button\"\n disabled={(!hideResumeUpload && !this.selectedFile) || (!hideJdInput && !this.jobDescription.trim()) || this.isUploading || this.isSubmitting}\n onClick={this.handleStartAnalysis}\n >\n {this.isUploading ? '上传中...' : this.isSubmitting ? '处理中...' : '开始分析'}\n </button>\n\n <div class=\"ai-disclaimer\">\n <p>所有内容均由AI生成仅供参考</p>\n <p class=\"beian-info\">\n <span>中央网信办生成式人工智能服务备案号</span>:\n <a href=\"https://www.pincaimao.com\" target=\"_blank\" rel=\"noopener noreferrer\">Hunan-PinCaiMao-202412310003</a>\n </p>\n </div>\n\n <input\n type=\"file\"\n class=\"file-input\"\n onChange={this.handleFileChange}\n />\n </div>\n )}\n\n {/* 加载状态 - 在有会话ID但聊天模态框尚未显示时展示 */}\n {isLoading && (\n <div class=\"loading-container\">\n <div class=\"loading-spinner\"></div>\n <p class=\"loading-text\">正在加载对话...</p>\n </div>\n )}\n\n {/* 聊天界面 - 在显示聊天模态框时显示 */}\n {this.showChatModal && (\n <div >\n <pcm-app-chat-modal\n isOpen={true}\n modalTitle={this.modalTitle}\n icon={this.icon}\n isShowHeader={this.isShowHeader}\n isNeedClose={this.isShowHeader}\n fullscreen={this.fullscreen}\n conversationId={this.conversationId}\n defaultQuery={this.defaultQuery}\n enableTTS={false}\n filePreviewMode={this.filePreviewMode}\n showWorkspaceHistory={this.showWorkspaceHistory}\n botId=\"3022316191018881\"\n customInputs={this.conversationId ? {} : {\n ...this.customInputs,\n file_url: this.customInputs?.file_url || this.uploadedFileInfo?.cos_key,\n file_name: this.customInputs?.file_name || this.uploadedFileInfo?.file_name,\n job_info: this.customInputs?.job_info || this.jobDescription\n }}\n interviewMode=\"text\"\n ></pcm-app-chat-modal>\n </div>\n )}\n </div>\n </div>\n );\n }\n} ","\n",":host {\n font-size: 16px;\n}\n\n/* 模态框基础样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* 全屏模式下的overlay样式 - 改为基于父组件 */\n.fullscreen-overlay {\n padding: 0;\n background-color: rgba(0, 0, 0, 0.7);\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: calc(100% - 10px);\n}\n\n.modal-container {\n background-color: #fff;\n border-radius: 8px;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n transition: all 0.3s ease-out;\n overflow: hidden;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 600px;\n min-width: 320px;\n}\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 10px 0px 0px 0px;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n}\n\n/* 模态框头部样式 */\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n\n/* 文件上传区域通用样式 */\n.upload-area {\n cursor: pointer;\n width: 100%;\n}\n\n\n.upload-placeholder {\n transition: all 0.3s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: rgba(0, 0, 0, 0.02);\n border: 1px dashed #d9d9d9;\n border-radius: 8px;\n}\n\n.upload-placeholder:hover {\n border: 1px dashed #1890ff;\n}\n\n.upload-placeholder img {\n margin-top: 8px;\n width: 50px;\n height: 50px;\n}\n\n.upload-placeholder .upload-text {\n margin: 4px 0;\n color: #332F39;\n font-size: 14px;\n}\n\n.upload-placeholder .upload-hint {\n font-size: 14px;\n color: #949AA5;\n margin-top: 8px;\n padding: 0px 10px;\n text-align: center;\n}\n\n\n/* 文件项样式 */\n.file-item {\n position: relative;\n padding: 16px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n transition: border-color 0.3s;\n cursor: pointer;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.file-item:hover {\n border-color: #0D75FB;\n}\n\n.file-item-content {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.file-icon {\n color: #0D75FB;\n flex-shrink: 0;\n}\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n.remove-file {\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n margin-left: 8px;\n border-radius: 4px;\n transition: all 0.2s;\n min-width: 30px;\n min-height: 30px;\n}\n\n.remove-file:hover {\n background-color: #f1f5f9;\n color: #475569;\n}\n\n.file-input {\n display: none;\n}\n\n\n\n/* 输入容器样式 */\n.input-container {\n padding: 20px;\n display: flex;\n flex-direction: column;\n height: calc(100% - 50px);\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;\n /* 减去header高度 */\n overflow-y: auto;\n}\n\n.input-container h3 {\n margin-top: 0;\n margin-bottom: 20px;\n font-size: 18px;\n color: #333;\n text-align: center;\n}\n\n/* JD输入区域样式 */\n.jd-input-section {\n margin-bottom: 20px;\n}\n\n.jd-input-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.job-description-textarea {\n width: calc(100% - 16px);\n border: 1px solid #ddd;\n border-radius: 4px;\n resize: vertical;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n transition: border-color 0.3s;\n padding: 8px;\n}\n\n.job-description-textarea:focus {\n outline: none;\n border-color: #1890ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n/* 简历上传区域样式 */\n.resume-upload-section {\n margin-bottom: 20px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.resume-upload-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n align-self: flex-start;\n}\n\n\n/* 提交按钮通用样式 */\n.submit-button {\n margin-top: 10px;\n padding: 10px 30px;\n background: #0D75FB;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s ease;\n width: 100%;\n max-width: 400px;\n align-self: center;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n.submit-button:disabled {\n background-color: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.25);\n cursor: not-allowed;\n}\n\n\n\n/* AI免责声明和备案信息样式 */\n.ai-disclaimer {\n margin-top: 16px;\n text-align: center;\n font-size: 12px;\n color: #999;\n line-height: 1.5;\n}\n\n.ai-disclaimer p {\n margin: 4px 0;\n}\n\n.beian-info {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ai-disclaimer a {\n color: #666;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.ai-disclaimer a:hover {\n color: #1890ff;\n text-decoration: underline;\n}\n\n/* 添加加载状态的样式 */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n }\n \n .loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--pcm-primary-color, #1890ff);\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n }\n \n .loading-text {\n font-size: 16px;\n color: var(--pcm-text-color, #333);\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n ","import { Component, Prop, h, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\nimport { uploadFileToBackend, FileUploadResponse, verifyApiKey } from '../../utils/utils';\nimport { ConversationStartEventData, InterviewCompleteEventData, StreamCompleteEventData } from '../../components';\nimport { ErrorEventBus, ErrorEventDetail } from '../../utils/error-event';\nimport { authStore } from '../../../store/auth.store';\nimport { configStore } from '../../../store/config.store';\nimport { SentryReporter } from '../../utils/sentry-reporter';\n\n/**\n * 模拟出题大师\n */\n\n@Component({\n tag: 'pcm-mnct-modal',\n styleUrls: ['pcm-mnct-modal.css', '../../global/global.css'],\n shadow: true,\n})\nexport class MnctModal {\n /**\n * 模态框标题\n */\n @Prop() modalTitle: string = '面试出题大师';\n\n /**\n * SDK鉴权密钥\n */\n @Prop({ attribute: 'token' }) token!: string;\n\n /**\n * 是否显示聊天模态框\n */\n @Prop({ mutable: true }) isOpen: boolean = false;\n\n /**\n * 当点击模态框关闭时触发\n */\n @Event() modalClosed: EventEmitter<void>;\n\n /**\n * 应用图标URL\n */\n @Prop() icon?: string;\n\n /**\n * 聊天框的页面层级\n */\n @Prop() zIndex?: number = 1000;\n\n /**\n * 是否展示顶部标题栏\n */\n @Prop() isShowHeader: boolean = true;\n\n /**\n * 是否展示右上角的关闭按钮\n */\n @Prop() isNeedClose: boolean = true;\n\n /**\n * 会话ID,传入继续对话,否则创建新会话\n */\n @Prop({ mutable: true }) conversationId?: string;\n\n /**\n * 默认查询文本\n */\n @Prop() defaultQuery: string = '请开始出题';\n\n /**\n * 是否以全屏模式打开,移动端建议设置为true\n */\n @Prop() fullscreen: boolean = false;\n\n /**\n * 自定义输入参数,传入customInputs.job_info时,会隐藏JD输入区域<br>\n * 传入customInputs.file_url时,会隐藏简历上传区域。<br>\n * 传入customInputs.file_url和customInputs.job_info时,会直接开始聊天。<br>\n */\n @Prop() customInputs: Record<string, string> = {};\n\n /**\n * 是否显示工作区历史会话按钮\n */\n @Prop() showWorkspaceHistory: boolean = false;\n\n\n /**\n * 上传成功事件\n */\n @Event() uploadSuccess: EventEmitter<FileUploadResponse>;\n\n /**\n * 流式输出完成事件\n */\n @Event() streamComplete: EventEmitter<StreamCompleteEventData>;\n\n /**\n * 新会话开始的回调,只会在一轮对话开始时触发一次\n */\n @Event() conversationStart: EventEmitter<ConversationStartEventData>;\n\n /**\n * 当聊天完成时触发\n */\n @Event() interviewComplete: EventEmitter<InterviewCompleteEventData>;\n\n /**\n * SDK密钥验证失败事件\n */\n @Event() tokenInvalid: EventEmitter<void>;\n\n /**\n * 错误事件\n */\n @Event() someErrorEvent: EventEmitter<ErrorEventDetail>;\n\n /**\n * 附件预览模式\n * 'drawer': 在右侧抽屉中预览\n * 'window': 在新窗口中打开\n */\n @Prop() filePreviewMode: 'drawer' | 'window' = 'window';\n\n @State() selectedFile: File | null = null;\n @State() isUploading: boolean = false;\n @State() uploadedFileInfo: FileUploadResponse | null = null;\n @State() showChatModal: boolean = false;\n\n // 使用 @Element 装饰器获取组件的 host 元素\n @Element() hostElement: HTMLElement;\n\n @State() jobDescription: string = '';\n @State() isSubmitting: boolean = false;\n\n\n private tokenInvalidListener: () => void;\n private removeErrorListener: () => void;\n\n @Watch('token')\n handleTokenChange(newToken: string) {\n // 当传入的 token 变化时,更新 authStore 中的 token\n if (newToken && newToken !== authStore.getToken()) {\n authStore.setToken(newToken);\n }\n }\n\n\n \n @Watch('isOpen')\n async handleIsOpenChange(newValue: boolean) {\n if (!newValue) {\n // 重置状态\n this.clearSelectedFile();\n this.showChatModal = false;\n this.jobDescription = '';\n\n } else {\n if (this.customInputs && this.customInputs.job_info) {\n this.jobDescription = this.customInputs.job_info;\n }\n\n await verifyApiKey(this.token);\n\n // 如果有会话ID或者同时有file_url和job_info,直接显示聊天模态框\n if (this.conversationId || (this.customInputs?.file_url && this.customInputs?.job_info)) {\n this.showChatModal = true;\n }\n }\n }\n\n\n\n componentWillLoad() {\n\n // 将 zIndex 存入配置缓存\n if (this.zIndex) {\n configStore.setItem('modal-zIndex', this.zIndex);\n }\n if (this.token) {\n authStore.setToken(this.token);\n }\n\n // 添加全局token无效事件监听器\n this.tokenInvalidListener = () => {\n this.tokenInvalid.emit();\n };\n // 添加全局错误监听\n this.removeErrorListener = ErrorEventBus.addErrorListener((errorDetail) => {\n this.someErrorEvent.emit(errorDetail);\n });\n document.addEventListener('pcm-token-invalid', this.tokenInvalidListener);\n }\n\n disconnectedCallback() {\n // 组件销毁时移除事件监听器\n document.removeEventListener('pcm-token-invalid', this.tokenInvalidListener);\n // 移除错误监听器\n if (this.removeErrorListener) {\n this.removeErrorListener();\n }\n }\n\n\n private handleClose = () => {\n this.modalClosed.emit();\n };\n\n private handleFileChange = (event: Event) => {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.selectedFile = input.files[0];\n }\n };\n\n private handleUploadClick = () => {\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\n fileInput?.click();\n };\n\n private clearSelectedFile = () => {\n this.selectedFile = null;\n this.uploadedFileInfo = null;\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\n if (fileInput) {\n fileInput.value = '';\n }\n };\n\n private async uploadFile() {\n if (!this.selectedFile) return;\n\n this.isUploading = true;\n\n try {\n // 使用 uploadFileToBackend 工具函数上传文件\n const result = await uploadFileToBackend(this.selectedFile, {\n }, {\n 'tags': ['resume']\n });\n\n this.uploadedFileInfo = result;\n this.uploadSuccess.emit(result);\n } catch (error) {\n console.error('文件上传错误:', error);\n this.clearSelectedFile();\n SentryReporter.captureError(error, {\n action: 'uploadFile',\n component: 'pcm-mnct-modal',\n title: '文件上传失败'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '文件上传失败,请重试'\n });\n } finally {\n this.isUploading = false;\n }\n }\n\n private handleJobDescriptionChange = (event: Event) => {\n const textarea = event.target as HTMLTextAreaElement;\n this.jobDescription = textarea.value;\n };\n\n private handleStartInterview = async () => {\n if (!this.selectedFile) {\n alert('请上传简历');\n return;\n }\n\n // 如果没有预设的job_info,则需要检查用户输入\n if (!this.customInputs?.job_info && !this.jobDescription.trim()) {\n alert('请输入职位描述');\n return;\n }\n\n this.isSubmitting = true;\n\n try {\n // 如果还没上传,先上传文件\n if (!this.uploadedFileInfo) {\n await this.uploadFile();\n if (!this.uploadedFileInfo) {\n this.isSubmitting = false;\n return; // 上传失败\n }\n }\n\n // 直接显示聊天模态框\n this.showChatModal = true;\n } catch (error) {\n console.error('开始面试时出错:', error);\n SentryReporter.captureError(error, {\n action: 'handleStartInterview',\n component: 'pcm-mnct-modal',\n title: '开始面试时出错'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '开始面试时出错,请重试'\n });\n } finally {\n this.isSubmitting = false;\n }\n };\n\n\n render() {\n if (!this.isOpen) return null;\n\n const modalStyle = {\n zIndex: String(this.zIndex)\n };\n\n\n const containerClass = {\n 'modal-container': true,\n 'fullscreen': this.fullscreen,\n 'pc-layout': true,\n };\n\n const overlayClass = {\n 'modal-overlay': true,\n 'fullscreen-overlay': this.fullscreen\n };\n\n // 显示加载状态\n const isLoading = this.conversationId && !this.showChatModal;\n\n // 判断是否隐藏JD输入区域\n const hideJdInput = Boolean(this.customInputs && this.customInputs.job_info);\n \n // 判断是否隐藏简历上传区域\n const hideResumeUpload = Boolean(this.customInputs && this.customInputs.file_url);\n \n // 判断是否同时提供了file_url和job_info\n const hasFileAndJob = Boolean(this.customInputs?.file_url && this.customInputs?.job_info);\n\n return (\n <div class={overlayClass} style={modalStyle}>\n <div class={containerClass}>\n {this.isShowHeader && (\n <div class=\"modal-header\">\n <div class=\"header-left\">\n {this.icon && <img src={this.icon} class=\"header-icon\" alt=\"应用图标\" />}\n <div>{this.modalTitle}</div>\n </div>\n {this.isNeedClose && (\n <button class=\"close-button\" onClick={this.handleClose}>\n <span>×</span>\n </button>\n )}\n </div>\n )}\n\n {/* 上传界面 - 仅在不显示聊天模态框且没有会话ID且没有同时提供file_url和job_info时显示 */}\n {!this.showChatModal && !this.conversationId && !hasFileAndJob && (\n <div class=\"input-container\">\n {/* JD输入区域 - 仅在没有customInputs.job_info时显示 */}\n {!hideJdInput && (\n <div class=\"jd-input-section\">\n <label htmlFor=\"job-description\">请输入职位描述 (JD)</label>\n <textarea\n id=\"job-description\"\n class=\"job-description-textarea\"\n placeholder=\"请输入职位描述,包括职责、要求等信息...\"\n rows={6}\n value={this.jobDescription}\n onInput={this.handleJobDescriptionChange}\n ></textarea>\n </div>\n )}\n\n {/* 简历上传区域 - 仅在没有customInputs.file_url时显示 */}\n {!hideResumeUpload && (\n <div class=\"resume-upload-section\">\n <label>上传简历</label>\n <div class=\"upload-area\" onClick={this.handleUploadClick}>\n {this.selectedFile ? (\n <div class=\"file-item\">\n <div class=\"file-item-content\">\n <span class=\"file-icon\">📝</span>\n <span class=\"file-name\">{this.selectedFile.name}</span>\n </div>\n <button class=\"remove-file\" onClick={(e) => {\n e.stopPropagation();\n this.clearSelectedFile();\n }}>×</button>\n </div>\n ) : (\n <div class=\"upload-placeholder\">\n <img src='https://pub.pincaimao.com/static/web/images/home/i_upload.png'></img>\n <p class='upload-text'>点击上传简历</p>\n <p class=\"upload-hint\">支持 txt、markdown、pdf、docx、doc、md 格式</p>\n </div>\n )}\n </div>\n </div>\n )}\n\n <button\n class=\"submit-button\"\n disabled={((!hideResumeUpload && !this.selectedFile) || \n (!hideJdInput && !this.jobDescription.trim())) || \n this.isUploading || this.isSubmitting}\n onClick={this.handleStartInterview}\n >\n {this.isUploading ? '上传中...' : this.isSubmitting ? '处理中...' : '开始分析'}\n </button>\n\n <div class=\"ai-disclaimer\">\n <p>所有内容均由AI生成仅供参考</p>\n <p class=\"beian-info\">\n <span>中央网信办生成式人工智能服务备案号</span>:\n <a href=\"https://www.pincaimao.com\" target=\"_blank\" rel=\"noopener noreferrer\">Hunan-PinCaiMao-202412310003</a>\n </p>\n </div>\n\n <input\n type=\"file\"\n class=\"file-input\"\n onChange={this.handleFileChange}\n />\n </div>\n )}\n\n {/* 加载状态 - 在有会话ID但聊天模态框尚未显示时展示 */}\n {isLoading && (\n <div class=\"loading-container\">\n <div class=\"loading-spinner\"></div>\n <p class=\"loading-text\">正在加载对话...</p>\n </div>\n )}\n\n {/* 聊天界面 - 在显示聊天模态框时显示 */}\n {this.showChatModal && (\n <div>\n <pcm-app-chat-modal\n isOpen={true}\n modalTitle={this.modalTitle}\n icon={this.icon}\n isShowHeader={this.isShowHeader}\n isNeedClose={this.isShowHeader}\n fullscreen={this.fullscreen}\n showWorkspaceHistory={this.showWorkspaceHistory}\n botId=\"3022316191018876\"\n conversationId={this.conversationId}\n defaultQuery={this.defaultQuery}\n filePreviewMode={this.filePreviewMode}\n enableVoice={false}\n customInputs={this.conversationId ? {} : {\n ...this.customInputs,\n file_url: this.customInputs?.file_url || this.uploadedFileInfo?.cos_key,\n file_name: this.customInputs?.file_name || this.uploadedFileInfo?.file_name,\n job_info: this.customInputs?.job_info || this.jobDescription\n }}\n interviewMode=\"text\"\n ></pcm-app-chat-modal>\n </div>\n )}\n </div>\n </div>\n );\n }\n} ","",":host {\n font-size: 16px;\n}\n\n/* 模态框基础样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* 全屏模式下的overlay样式 - 改为基于父组件 */\n.fullscreen-overlay {\n padding: 0;\n background-color: rgba(0, 0, 0, 0.7);\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: calc(100% - 10px);\n}\n\n.modal-container {\n background-color: #fff;\n border-radius: 8px;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n transition: all 0.3s ease-out;\n overflow: hidden;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 600px;\n min-width: 320px;\n}\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 10px 0px 0px 0px;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n}\n\n/* 模态框头部样式 */\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n\n/* 文件上传区域通用样式 */\n.upload-area {\n cursor: pointer;\n width: 100%;\n}\n\n\n.upload-placeholder {\n transition: all 0.3s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: rgba(0, 0, 0, 0.02);\n border: 1px dashed #d9d9d9;\n border-radius: 8px;\n}\n\n.upload-placeholder:hover {\n border: 1px dashed #1890ff;\n}\n\n.upload-placeholder img {\n margin-top: 8px;\n width: 50px;\n height: 50px;\n}\n\n.upload-placeholder .upload-text {\n margin: 4px 0;\n color: #332F39;\n font-size: 14px;\n}\n\n.upload-placeholder .upload-hint {\n font-size: 14px;\n color: #949AA5;\n margin-top: 8px;\n padding: 0px 10px;\n text-align: center;\n}\n\n\n/* 文件项样式 */\n.file-item {\n position: relative;\n padding: 16px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n transition: border-color 0.3s;\n cursor: pointer;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.file-item:hover {\n border-color: #0D75FB;\n}\n\n.file-item-content {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.file-icon {\n color: #0D75FB;\n flex-shrink: 0;\n}\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n.remove-file {\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n margin-left: 8px;\n border-radius: 4px;\n transition: all 0.2s;\n min-width: 30px;\n min-height: 30px;\n}\n\n.remove-file:hover {\n background-color: #f1f5f9;\n color: #475569;\n}\n\n.file-input {\n display: none;\n}\n\n\n\n/* 输入容器样式 */\n.input-container {\n padding: 20px;\n display: flex;\n flex-direction: column;\n height: calc(100% - 50px);\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;\n /* 减去header高度 */\n overflow-y: auto;\n}\n\n.input-container h3 {\n margin-top: 0;\n margin-bottom: 20px;\n font-size: 18px;\n color: #333;\n text-align: center;\n}\n\n/* JD输入区域样式 */\n.jd-input-section {\n margin-bottom: 20px;\n}\n\n.jd-input-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.job-description-textarea {\n width: calc(100% - 16px);\n border: 1px solid #ddd;\n border-radius: 4px;\n resize: vertical;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n transition: border-color 0.3s;\n padding: 8px;\n}\n\n.job-description-textarea:focus {\n outline: none;\n border-color: #1890ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n/* 简历上传区域样式 */\n.resume-upload-section {\n margin-bottom: 20px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.resume-upload-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n align-self: flex-start;\n}\n\n\n/* 提交按钮通用样式 */\n.submit-button {\n margin-top: 10px;\n padding: 10px 30px;\n background: #0D75FB;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s ease;\n width: 100%;\n max-width: 400px;\n align-self: center;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n.submit-button:disabled {\n background-color: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.25);\n cursor: not-allowed;\n}\n\n\n\n/* AI免责声明和备案信息样式 */\n.ai-disclaimer {\n margin-top: 16px;\n text-align: center;\n font-size: 12px;\n color: #999;\n line-height: 1.5;\n}\n\n.ai-disclaimer p {\n margin: 4px 0;\n}\n\n.beian-info {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ai-disclaimer a {\n color: #666;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.ai-disclaimer a:hover {\n color: #1890ff;\n text-decoration: underline;\n}\n\n/* 添加加载状态的样式 */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n }\n \n .loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--pcm-primary-color, #1890ff);\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n }\n \n .loading-text {\n font-size: 16px;\n color: var(--pcm-text-color, #333);\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n ","import { Component, Prop, h, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\nimport { FileUploadResponse, verifyApiKey } from '../../utils/utils';\nimport {\n StreamCompleteEventData,\n ConversationStartEventData,\n InterviewCompleteEventData,\n RecordingErrorEventData,\n} from '../../interfaces/events';\nimport { ErrorEventBus, ErrorEventDetail } from '../../utils/error-event';\nimport { authStore } from '../../../store/auth.store';\nimport { configStore } from '../../../store/config.store';\nimport { Message } from '../../services/message.service';\n\n/**\n * 模拟面试\n */\n\n@Component({\n tag: 'pcm-mnms-modal',\n styleUrls: ['pcm-mnms-modal.css', '../../global/global.css'],\n shadow: true,\n})\nexport class MnmsModal {\n /**\n * 模态框标题\n */\n @Prop() modalTitle: string = '模拟面试';\n\n /**\n * SDK鉴权密钥\n */\n @Prop({ attribute: 'token' }) token!: string;\n\n /**\n * 是否显示聊天模态框\n */\n @Prop({ mutable: true }) isOpen: boolean = false;\n\n /**\n * 当点击模态框关闭时触发\n */\n @Event() modalClosed: EventEmitter<void>;\n\n /**\n * 应用图标URL\n */\n @Prop() icon?: string;\n\n /**\n * 聊天框的页面层级\n */\n @Prop() zIndex?: number = 1000;\n\n /**\n * 是否展示顶部标题栏\n */\n @Prop() isShowHeader: boolean = true;\n\n /**\n * 是否展示右上角的关闭按钮\n */\n @Prop() isNeedClose: boolean = true;\n\n /**\n * 会话ID,传入继续对话,否则创建新会话\n */\n @Prop({ mutable: true }) conversationId?: string;\n\n /**\n * 默认查询文本\n */\n @Prop() defaultQuery: string = '请开始模拟面试';\n\n /**\n * 是否以全屏模式打开,移动端建议设置为true\n */\n @Prop() fullscreen: boolean = false;\n\n /**\n * 自定义输入参数,传入customInputs.job_info时,会隐藏JD输入区域。<br>\n * 传入customInputs.file_url或customInputs.resume_content时,会隐藏简历上传区域。<br>\n * 传入customInputs.file_url(或customInputs.resume_content)和customInputs.job_info时,会直接开始聊天。<br>\n * customInputs.resume_content:可传入json字符串,或纯文本字符串,字符串内容为简历内容。<br>\n * customInputs.url_callback:可传入url字符串,当报告生成后,会调用该url进行回调。该url请使用post请求,接收报告字段为report_content,会话id字段为conversation_id。\n */\n @Prop() customInputs: Record<string, string> = {};\n\n /**\n * 是否显示工作区历史会话按钮\n */\n @Prop() showWorkspaceHistory: boolean = false;\n\n /**\n * 是否开启移动端上传(仅PC端生效)\n */\n @Prop() mobileJdInputAble: boolean = false;\n\n /**\n * 是否开启移动端上传(仅PC端生效)\n */\n @Prop() mobileUploadAble: boolean = false;\n\n /**\n * 上传成功事件\n */\n @Event() uploadSuccess: EventEmitter<FileUploadResponse>;\n\n /**\n * 流式输出完成事件\n */\n @Event() streamComplete: EventEmitter<StreamCompleteEventData>;\n\n /**\n * 新会话开始的回调,只会在一轮对话开始时触发一次\n */\n @Event() conversationStart: EventEmitter<ConversationStartEventData>;\n\n /**\n * 当聊天完成时触发\n */\n @Event() interviewComplete: EventEmitter<InterviewCompleteEventData>;\n\n /**\n * SDK密钥验证失败事件\n */\n @Event() tokenInvalid: EventEmitter<void>;\n\n /**\n * 错误事件\n */\n @Event() someErrorEvent: EventEmitter<ErrorEventDetail>;\n\n /**\n * 附件预览模式\n * 'drawer': 在右侧抽屉中预览\n * 'window': 在新窗口中打开\n */\n @Prop() filePreviewMode: 'drawer' | 'window' = 'window';\n\n /**\n * 面试模式:text - 文本模式,video - 视频模式\n */\n @Prop() interviewMode: 'text' | 'video' = 'text';\n\n /**\n * 录制错误事件\n */\n @Event() recordingError: EventEmitter<RecordingErrorEventData>;\n\n /**\n * 是否显示复制按钮\n */\n @Prop() showCopyButton: boolean = true;\n\n /**\n * 是否显示点赞点踩按钮\n */\n @Prop() showFeedbackButtons: boolean = true;\n\n\n @State() selectedFile: File | null = null;\n @State() isUploading: boolean = false;\n @State() uploadedFileInfo: FileUploadResponse | null = null;\n @State() showChatModal: boolean = false;\n\n // 使用 @Element 装饰器获取组件的 host 元素\n @Element() hostElement: HTMLElement;\n\n @State() jobDescription: string = '';\n @State() isSubmitting: boolean = false;\n\n private tokenInvalidListener: () => void;\n private removeErrorListener: () => void;\n\n @Watch('token')\n handleTokenChange(newToken: string) {\n // 当传入的 token 变化时,更新 authStore 中的 token\n if (newToken && newToken !== authStore.getToken()) {\n authStore.setToken(newToken);\n }\n }\n\n\n @Watch('isOpen')\n async handleIsOpenChange(newValue: boolean) {\n if (!newValue) {\n // 重置状态\n this.showChatModal = false;\n this.jobDescription = '';\n\n } else {\n if (this.customInputs && this.customInputs.job_info) {\n this.jobDescription = this.customInputs.job_info;\n }\n\n await verifyApiKey(this.token);\n\n // 如果同时有 file_url 和 job_info,或者有会话ID,直接显示聊天模态框\n if (((this.customInputs?.file_url || this.customInputs?.resume_content) && this.customInputs?.job_info) || this.conversationId) {\n this.showChatModal = true;\n }\n }\n }\n\n\n\n componentWillLoad() {\n\n\n // 将 zIndex 存入配置缓存\n if (this.zIndex) {\n configStore.setItem('modal-zIndex', this.zIndex);\n }\n\n if (this.token) {\n authStore.setToken(this.token);\n }\n\n // 添加全局token无效事件监听器\n this.tokenInvalidListener = () => {\n this.tokenInvalid.emit();\n };\n\n // 添加全局错误监听\n this.removeErrorListener = ErrorEventBus.addErrorListener((errorDetail) => {\n this.someErrorEvent.emit(errorDetail);\n });\n\n document.addEventListener('pcm-token-invalid', this.tokenInvalidListener);\n }\n\n disconnectedCallback() {\n // 组件销毁时移除事件监听器\n document.removeEventListener('pcm-token-invalid', this.tokenInvalidListener);\n // 移除错误监听器\n if (this.removeErrorListener) {\n this.removeErrorListener();\n }\n }\n\n private handleClose = () => {\n this.modalClosed.emit();\n };\n\n private handleJobDescriptionChange = (event: Event) => {\n const textarea = event.target as HTMLTextAreaElement;\n this.jobDescription = textarea.value;\n };\n\n private handleStartInterview = async () => {\n // 如果没有预设的job_info,则需要检查用户输入\n if (!this.customInputs?.job_info && !this.jobDescription.trim()) {\n alert('请输入职位描述');\n return;\n }\n this.isSubmitting = true;\n // 判断文件是否正在上传\n if (await this.pcmUploadRef?.getIsUploading?.()) {\n Message.info('文件上传中,请稍后');\n return;\n }\n this.showChatModal = true;\n };\n\n private pcmUploadRef;\n\n render() {\n if (!this.isOpen) return null;\n\n const modalStyle = {\n zIndex: String(this.zIndex)\n };\n\n\n const containerClass = {\n 'modal-container': true,\n 'fullscreen': this.fullscreen,\n 'pc-layout': true,\n };\n\n const overlayClass = {\n 'modal-overlay': true,\n 'fullscreen-overlay': this.fullscreen\n };\n\n // 显示加载状态\n const isLoading = this.conversationId && !this.showChatModal;\n\n // 修正这里的逻辑,确保当 customInputs.job_info 存在时,hideJdInput 为 true\n const hideJdInput = Boolean(this.customInputs && this.customInputs.job_info);\n\n // 判断是否隐藏简历上传区域 - 当有file_url或resume_content时都隐藏\n const hideResumeUpload = Boolean(this.customInputs && (this.customInputs.file_url || this.customInputs.resume_content));\n\n // 判断是否同时提供了(file_url或resume_content)和job_info\n const hasFileAndJob = Boolean((this.customInputs?.file_url || this.customInputs?.resume_content) && this.customInputs?.job_info);\n\n return (\n <div class={overlayClass} style={modalStyle}>\n <div class={containerClass}>\n {this.isShowHeader && (\n <div class=\"modal-header\">\n <div class=\"header-left\">\n {this.icon && <img src={this.icon} class=\"header-icon\" alt=\"应用图标\" />}\n <div>{this.modalTitle}</div>\n </div>\n {this.isNeedClose && (\n <button class=\"close-button\" onClick={this.handleClose}>\n <span>×</span>\n </button>\n )}\n </div>\n )}\n\n {/* 上传界面 - 仅在不显示聊天模态框且没有会话ID且没有同时提供file_url和job_info时显示 */}\n {!this.showChatModal && !this.conversationId && !hasFileAndJob && (\n <div class=\"input-container\">\n {/* JD输入区域 - 仅在没有customInputs.job_info时显示 */}\n {!hideJdInput && (\n <div class=\"jd-input-section\">\n <label htmlFor=\"job-description\">请输入职位描述 (JD)</label>\n {\n !!this.mobileJdInputAble && (\n <pcm-mobile-input-btn\n name=\"职位描述\"\n onOk={(e) => {\n this.jobDescription = e.detail;\n }}\n />\n )\n }\n <textarea\n id=\"job-description\"\n class=\"job-description-textarea\"\n placeholder=\"请输入职位描述,包括职责、要求等信息...\"\n rows={6}\n value={this.jobDescription}\n onInput={this.handleJobDescriptionChange}\n ></textarea>\n </div>\n )}\n\n {/* 简历上传区域 - 仅在没有customInputs.file_url或customInputs.resume_content时显示 */}\n {\n !hideResumeUpload && (\n <pcm-upload\n ref={el => this.pcmUploadRef = el}\n maxFileSize={15 * 1024 * 1024}\n multiple={false}\n mobileUploadAble={this.mobileUploadAble}\n labelText=\"上传简历(选填)\"\n acceptFileSuffixList={['.txt', '.md', '.pdf', '.docx', '.doc']}\n uploadParams={{\n tags: ['resume'],\n }}\n onUploadChange={(e) => {\n const result: FileUploadResponse[] = e.detail ?? [];\n this.uploadedFileInfo = result[0];\n this.uploadSuccess.emit(this.uploadedFileInfo);\n }}\n />\n )\n }\n\n <button\n class=\"submit-button\"\n disabled={(!hideJdInput && !this.jobDescription.trim()) || this.isUploading || this.isSubmitting}\n onClick={this.handleStartInterview}\n >\n {this.isUploading ? '上传中...' : this.isSubmitting ? '处理中...' : '开始分析'}\n </button>\n\n <div class=\"ai-disclaimer\">\n <p>所有内容均由AI生成仅供参考</p>\n <p class=\"beian-info\">\n <span>中央网信办生成式人工智能服务备案号</span>:\n <a href=\"https://www.pincaimao.com\" target=\"_blank\" rel=\"noopener noreferrer\">Hunan-PinCaiMao-202412310003</a>\n </p>\n </div>\n </div>\n )}\n\n {/* 加载状态 - 在有会话ID但聊天模态框尚未显示时展示 */}\n {isLoading && (\n <div class=\"loading-container\">\n <div class=\"loading-spinner\"></div>\n <p class=\"loading-text\">正在加载对话...</p>\n </div>\n )}\n\n {/* 聊天界面 - 在显示聊天模态框时显示 */}\n {this.showChatModal && (\n <div >\n <pcm-app-chat-modal\n isOpen={true}\n modalTitle={this.modalTitle}\n icon={this.icon}\n isShowHeader={this.isShowHeader}\n isNeedClose={this.isShowHeader}\n fullscreen={this.fullscreen}\n showWorkspaceHistory={this.showWorkspaceHistory}\n botId=\"3022316191018884\"\n conversationId={this.conversationId}\n defaultQuery={this.defaultQuery}\n enableTTS={false}\n filePreviewMode={this.filePreviewMode}\n showCopyButton={this.showCopyButton}\n showFeedbackButtons={this.showFeedbackButtons}\n customInputs={this.conversationId ? {} : {\n ...this.customInputs,\n file_url: this.customInputs?.file_url || this.uploadedFileInfo?.cos_key,\n file_name: this.customInputs?.file_name || this.uploadedFileInfo?.file_name,\n job_info: this.customInputs?.job_info || this.jobDescription,\n resume_content: this.customInputs?.resume_content\n }}\n interviewMode={this.interviewMode}\n ></pcm-app-chat-modal>\n </div>\n )}\n </div>\n </div>\n );\n }\n} ","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\n/**\n * @module Charset\n */\nconst VALUES_TO_CHARSET = new Map();\nfunction fromCharsetValue(value) {\n const charset = VALUES_TO_CHARSET.get(value);\n if (charset != null) {\n return charset;\n }\n throw Error('illegal charset value');\n}\nclass Charset {\n #label;\n #values;\n // See: https://en.wikipedia.org/wiki/Extended_Channel_Interpretation\n static CP437 = new Charset('cp437', 2, 0);\n static ISO_8859_1 = new Charset('iso-8859-1', 3, 1);\n static ISO_8859_2 = new Charset('iso-8859-2', 4);\n static ISO_8859_3 = new Charset('iso-8859-3', 5);\n static ISO_8859_4 = new Charset('iso-8859-4', 6);\n static ISO_8859_5 = new Charset('iso-8859-5', 7);\n static ISO_8859_6 = new Charset('iso-8859-6', 8);\n static ISO_8859_7 = new Charset('iso-8859-7', 9);\n static ISO_8859_8 = new Charset('iso-8859-8', 10);\n static ISO_8859_9 = new Charset('iso-8859-9', 11);\n static ISO_8859_10 = new Charset('iso-8859-10', 12);\n static ISO_8859_11 = new Charset('iso-8859-11', 13);\n static ISO_8859_13 = new Charset('iso-8859-13', 15);\n static ISO_8859_14 = new Charset('iso-8859-14', 16);\n static ISO_8859_15 = new Charset('iso-8859-15', 17);\n static ISO_8859_16 = new Charset('iso-8859-16', 18);\n static SHIFT_JIS = new Charset('shift-jis', 20);\n static CP1250 = new Charset('cp1250', 21);\n static CP1251 = new Charset('cp1251', 22);\n static CP1252 = new Charset('cp1252', 23);\n static CP1256 = new Charset('cp1256', 24);\n static UTF_16BE = new Charset('utf-16be', 25);\n static UTF_8 = new Charset('utf-8', 26);\n static ASCII = new Charset('ascii', 27);\n static BIG5 = new Charset('big5', 28);\n static GB2312 = new Charset('gb2312', 29);\n static EUC_KR = new Charset('euc-kr', 30);\n static GBK = new Charset('gbk', 31);\n static GB18030 = new Charset('gb18030', 32);\n static UTF_16LE = new Charset('utf-16le', 33);\n static UTF_32BE = new Charset('utf-32be', 34);\n static UTF_32LE = new Charset('utf-32le', 35);\n static ISO_646_INV = new Charset('iso-646-inv', 170);\n static BINARY = new Charset('binary', 899);\n /**\n * @constructor\n * @param label The label of charset.\n * @param values The values of charset.\n */\n constructor(label, ...values) {\n this.#label = label;\n this.#values = Object.freeze(values);\n for (const value of values) {\n if (value >= 0 && value <= 999999 && Number.isInteger(value)) {\n VALUES_TO_CHARSET.set(value, this);\n } else {\n throw new Error('illegal extended channel interpretation value');\n }\n }\n }\n /**\n * @property label\n * @description Get the label of charset.\n */\n get label() {\n return this.#label;\n }\n /**\n * @property values\n * @description Get the values of charset.\n */\n get values() {\n return this.#values;\n }\n}\n\nexport { Charset, fromCharsetValue };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\n/**\n * @module utils\n */\nfunction toBit(value) {\n return value & 0x01;\n}\nfunction toInt32(value) {\n return value | 0;\n}\nfunction round(value) {\n return toInt32(value + (value < 0 ? -0.5 : 0.5));\n}\nfunction getBitMask(value) {\n return 1 << getBitOffset(value);\n}\nfunction getBitOffset(value) {\n return value & 0x1f;\n}\nfunction charAt(value, index) {\n const character = value.at(index);\n return character != null ? character : '';\n}\n// Get hamming weight of int32.\nfunction hammingWeight(value) {\n // HD, Figure 5-2.\n value = value - ((value >> 1) & 0x55555555);\n value = (value & 0x33333333) + ((value >> 2) & 0x33333333);\n return (((value + (value >> 4)) & 0xf0f0f0f) * 0x1010101) >> 24;\n}\n// Return the position of the most significant bit set (to one) in the \"value\". The most\n// significant bit is position 32. If there is no bit set, return 0. Examples:\n// - findMSBSet(0) => 0\n// - findMSBSet(1) => 1\n// - findMSBSet(255) => 8\nfunction findMSBSet(value) {\n return 32 - Math.clz32(value);\n}\n// Calculate BCH (Bose-Chaudhuri-Hocquenghem) code for \"value\" using polynomial \"poly\". The BCH\n// code is used for encoding type information and version information.\n// Example: Calculation of version information of 7.\n// f(x) is created from 7.\n// - 7 = 000111 in 6 bits\n// - f(x) = x^2 + x^1 + x^0\n// g(x) is given by the standard (p. 67)\n// - g(x) = x^12 + x^11 + x^10 + x^9 + x^8 + x^5 + x^2 + 1\n// Multiply f(x) by x^(18 - 6)\n// - f'(x) = f(x) * x^(18 - 6)\n// - f'(x) = x^14 + x^13 + x^12\n// Calculate the remainder of f'(x) / g(x)\n// x^2\n// __________________________________________________\n// g(x) )x^14 + x^13 + x^12\n// x^14 + x^13 + x^12 + x^11 + x^10 + x^7 + x^4 + x^2\n// --------------------------------------------------\n// x^11 + x^10 + x^7 + x^4 + x^2\n//\n// The remainder is x^11 + x^10 + x^7 + x^4 + x^2\n// Encode it in binary: 110010010100\n// The return value is 0xc94 (1100 1001 0100)\n//\n// Since all coefficients in the polynomials are 1 or 0, we can do the calculation by bit\n// operations. We don't care if coefficients are positive or negative.\nfunction calculateBCHCode(value, poly) {\n // If poly is \"1 1111 0010 0101\" (version info poly), msbSetInPoly is 13. We'll subtract 1\n // from 13 to make it 12.\n const msbSetInPoly = findMSBSet(poly);\n value <<= msbSetInPoly - 1;\n // Do the division business using exclusive-or operations.\n while (findMSBSet(value) >= msbSetInPoly) {\n value ^= poly << (findMSBSet(value) - msbSetInPoly);\n }\n // Now the \"value\" is the remainder (i.e. the BCH code).\n return value;\n}\nfunction accumulate(array, start = 0, end = array.length) {\n let total = 0;\n for (let i = start; i < end; i++) {\n total += array[i];\n }\n return total;\n}\n\nexport { accumulate, calculateBCHCode, charAt, findMSBSet, getBitMask, getBitOffset, hammingWeight, round, toBit, toInt32 };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\n/**\n * @module Mode\n */\nconst VALUES_TO_MODE = new Map();\nfunction fromModeBits(bits) {\n const mode = VALUES_TO_MODE.get(bits);\n if (mode != null) {\n return mode;\n }\n throw new Error('illegal mode bits');\n}\nclass Mode {\n #bits;\n #characterCountBitsSet;\n static TERMINATOR = new Mode([0, 0, 0], 0x00);\n static NUMERIC = new Mode([10, 12, 14], 0x01);\n static ALPHANUMERIC = new Mode([9, 11, 13], 0x02);\n static STRUCTURED_APPEND = new Mode([0, 0, 0], 0x03);\n static BYTE = new Mode([8, 16, 16], 0x04);\n static ECI = new Mode([0, 0, 0], 0x07);\n static KANJI = new Mode([8, 10, 12], 0x08);\n static FNC1_FIRST_POSITION = new Mode([0, 0, 0], 0x05);\n static FNC1_SECOND_POSITION = new Mode([0, 0, 0], 0x09);\n static HANZI = new Mode([8, 10, 12], 0x0d);\n constructor(characterCountBitsSet, bits) {\n this.#bits = bits;\n this.#characterCountBitsSet = new Int32Array(characterCountBitsSet);\n VALUES_TO_MODE.set(bits, this);\n }\n get bits() {\n return this.#bits;\n }\n getCharacterCountBits({ version }) {\n let offset;\n if (version <= 9) {\n offset = 0;\n } else if (version <= 26) {\n offset = 1;\n } else {\n offset = 2;\n }\n return this.#characterCountBitsSet[offset];\n }\n}\n\nexport { Mode, fromModeBits };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\nimport { toInt32 } from './utils.js';\n\n/**\n * @module mask\n */\n// Penalty weights.\nconst N1 = 3;\nconst N2 = 3;\nconst N3 = 40;\nconst N4 = 10;\n// Is dark point.\nfunction isDark(matrix, x, y) {\n return matrix.get(x, y) === 1;\n}\n// Helper function for applyMaskPenaltyRule1. We need this for doing this calculation in both\n// horizontal and vertical orders respectively.\nfunction applyMaskPenaltyRule1Internal(matrix, isVertical) {\n let penalty = 0;\n const { size } = matrix;\n for (let y = 0; y < size; y++) {\n let prevBit = -1;\n let numSameBitCells = 0;\n for (let x = 0; x < size; x++) {\n const bit = isVertical ? matrix.get(y, x) : matrix.get(x, y);\n if (bit === prevBit) {\n numSameBitCells++;\n } else {\n if (numSameBitCells >= 5) {\n penalty += N1 + (numSameBitCells - 5);\n }\n // set prev bit.\n prevBit = bit;\n // include the cell itself.\n numSameBitCells = 1;\n }\n }\n if (numSameBitCells >= 5) {\n penalty += N1 + (numSameBitCells - 5);\n }\n }\n return penalty;\n}\n// Apply mask penalty rule 1 and return the penalty. Find repetitive cells with the same color and\n// give penalty to them. Example: 00000 or 11111.\nfunction applyMaskPenaltyRule1(matrix) {\n return applyMaskPenaltyRule1Internal(matrix) + applyMaskPenaltyRule1Internal(matrix, true);\n}\n// Apply mask penalty rule 2 and return the penalty. Find 2x2 blocks with the same color and give\n// penalty to them. This is actually equivalent to the spec's rule, which is to find MxN blocks and give a\n// penalty proportional to (M-1)x(N-1), because this is the number of 2x2 blocks inside such a block.\nfunction applyMaskPenaltyRule2(matrix) {\n let penalty = 0;\n const size = matrix.size - 1;\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n const bit = matrix.get(x, y);\n if (\n // Find 2x2 blocks with the same color.\n bit === matrix.get(x + 1, y) &&\n bit === matrix.get(x, y + 1) &&\n bit === matrix.get(x + 1, y + 1)\n ) {\n penalty += N2;\n }\n }\n }\n return penalty;\n}\n// Is is four white, check on horizontal and vertical.\nfunction isFourWhite(matrix, offset, from, to, isVertical) {\n if (from < 0 || to > matrix.size) {\n return false;\n }\n for (let i = from; i < to; i++) {\n if (isVertical ? isDark(matrix, offset, i) : isDark(matrix, i, offset)) {\n return false;\n }\n }\n return true;\n}\n// Apply mask penalty rule 3 and return the penalty. Find consecutive runs of 1:1:3:1:1:4\n// starting with black, or 4:1:1:3:1:1 starting with white, and give penalty to them. If we\n// find patterns like 000010111010000, we give penalty once.\nfunction applyMaskPenaltyRule3(matrix) {\n let numPenalties = 0;\n const { size } = matrix;\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n if (\n // Find consecutive runs of 1:1:3:1:1:4 or 4:1:1:3:1:1, patterns like 000010111010000.\n x + 6 < size &&\n isDark(matrix, x, y) &&\n !isDark(matrix, x + 1, y) &&\n isDark(matrix, x + 2, y) &&\n isDark(matrix, x + 3, y) &&\n isDark(matrix, x + 4, y) &&\n !isDark(matrix, x + 5, y) &&\n isDark(matrix, x + 6, y) &&\n (isFourWhite(matrix, y, x - 4, x) || isFourWhite(matrix, y, x + 7, x + 11))\n ) {\n numPenalties++;\n }\n if (\n // Find consecutive runs of 1:1:3:1:1:4 or 4:1:1:3:1:1, patterns like 000010111010000.\n y + 6 < size &&\n isDark(matrix, x, y) &&\n !isDark(matrix, x, y + 1) &&\n isDark(matrix, x, y + 2) &&\n isDark(matrix, x, y + 3) &&\n isDark(matrix, x, y + 4) &&\n !isDark(matrix, x, y + 5) &&\n isDark(matrix, x, y + 6) &&\n (isFourWhite(matrix, x, y - 4, y, true) || isFourWhite(matrix, x, y + 7, y + 11, true))\n ) {\n numPenalties++;\n }\n }\n }\n return numPenalties * N3;\n}\n// Apply mask penalty rule 4 and return the penalty. Calculate the ratio of dark cells and give\n// penalty if the ratio is far from 50%. It gives 10 penalty for 5% distance.\nfunction applyMaskPenaltyRule4(matrix) {\n let numDarkCells = 0;\n const { size } = matrix;\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n if (isDark(matrix, x, y)) {\n numDarkCells++;\n }\n }\n }\n const numTotalCells = size * size;\n const fivePercentVariances = toInt32((Math.abs(numDarkCells * 2 - numTotalCells) * 10) / numTotalCells);\n return fivePercentVariances * N4;\n}\n// The mask penalty calculation is complicated. See Table 11 of ISO/IEC 18004:2015(E)(p.54) for details.\n// Basically it applies four rules and summate all penalties.\nfunction calculateMaskPenalty(matrix) {\n return (\n applyMaskPenaltyRule1(matrix) +\n applyMaskPenaltyRule2(matrix) +\n applyMaskPenaltyRule3(matrix) +\n applyMaskPenaltyRule4(matrix)\n );\n}\n// Return is apply mask at \"x\" and \"y\". See 7.8 of ISO/IEC 18004:2015(E)(p.50) for mask pattern conditions.\nfunction isApplyMask(mask, x, y) {\n let temporary;\n let intermediate;\n switch (mask) {\n case 0:\n intermediate = (y + x) & 0x01;\n break;\n case 1:\n intermediate = y & 0x01;\n break;\n case 2:\n intermediate = x % 3;\n break;\n case 3:\n intermediate = (y + x) % 3;\n break;\n case 4:\n intermediate = (toInt32(y / 2) + toInt32(x / 3)) & 0x01;\n break;\n case 5:\n temporary = y * x;\n intermediate = (temporary & 0x01) + (temporary % 3);\n break;\n case 6:\n temporary = y * x;\n intermediate = ((temporary & 0x01) + (temporary % 3)) & 0x01;\n break;\n case 7:\n intermediate = (((y * x) % 3) + ((y + x) & 0x01)) & 0x01;\n break;\n default:\n throw new Error(`illegal mask: ${mask}`);\n }\n return intermediate === 0;\n}\n\nexport { calculateMaskPenalty, isApplyMask };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\n/**\n * @module ECLevel\n */\nconst VALUES_TO_ECLEVEL = new Map();\nfunction fromECLevelBits(bits) {\n const ecLevel = VALUES_TO_ECLEVEL.get(bits);\n if (ecLevel != null) {\n return ecLevel;\n }\n throw new Error('illegal error correction bits');\n}\nclass ECLevel {\n #name;\n #bits;\n #level;\n // L = ~7% correction.\n static L = new ECLevel('L', 0, 0x01);\n // L = ~15% correction.\n static M = new ECLevel('M', 1, 0x00);\n // L = ~25% correction.\n static Q = new ECLevel('Q', 2, 0x03);\n // L = ~30% correction.\n static H = new ECLevel('H', 3, 0x02);\n constructor(name, level, bits) {\n this.#bits = bits;\n this.#name = name;\n this.#level = level;\n VALUES_TO_ECLEVEL.set(bits, this);\n }\n get bits() {\n return this.#bits;\n }\n get name() {\n return this.#name;\n }\n get level() {\n return this.#level;\n }\n}\n\nexport { ECLevel, fromECLevelBits };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\n/**\n * @module ECB\n */\nclass ECB {\n #count;\n #numDataCodewords;\n constructor(count, numDataCodewords) {\n this.#count = count;\n this.#numDataCodewords = numDataCodewords;\n }\n get count() {\n return this.#count;\n }\n get numDataCodewords() {\n return this.#numDataCodewords;\n }\n}\n\nexport { ECB };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\n/**\n * @module ECBlocks\n */\nclass ECBlocks {\n #ecBlocks;\n #numTotalCodewords;\n #numTotalECCodewords;\n #numTotalDataCodewords;\n #numECCodewordsPerBlock;\n constructor(numECCodewordsPerBlock, ...ecBlocks) {\n let numBlocks = 0;\n let numTotalDataCodewords = 0;\n for (const { count, numDataCodewords } of ecBlocks) {\n numBlocks += count;\n numTotalDataCodewords += numDataCodewords * count;\n }\n const numTotalECCodewords = numECCodewordsPerBlock * numBlocks;\n this.#ecBlocks = ecBlocks;\n this.#numTotalECCodewords = numTotalECCodewords;\n this.#numTotalDataCodewords = numTotalDataCodewords;\n this.#numECCodewordsPerBlock = numECCodewordsPerBlock;\n this.#numTotalCodewords = numTotalDataCodewords + numTotalECCodewords;\n }\n get ecBlocks() {\n return this.#ecBlocks;\n }\n get numTotalCodewords() {\n return this.#numTotalCodewords;\n }\n get numTotalECCodewords() {\n return this.#numTotalECCodewords;\n }\n get numTotalDataCodewords() {\n return this.#numTotalDataCodewords;\n }\n get numECCodewordsPerBlock() {\n return this.#numECCodewordsPerBlock;\n }\n}\n\nexport { ECBlocks };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\nimport { ECB } from './ECB.js';\nimport { ECBlocks } from './ECBlocks.js';\nimport { BitMatrix } from './BitMatrix.js';\nimport { hammingWeight } from './utils.js';\n\n/**\n * @module Version\n */\nconst MIN_VERSION_SIZE = 21;\nconst MAX_VERSION_SIZE = 177;\nconst VERSION_DECODE_TABLE = [\n // Version 7 - 11.\n 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6,\n // Version 12 - 16.\n 0x0c762, 0x0d847, 0x0e60d, 0x0f928, 0x10b78,\n // Version 17 - 21.\n 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683,\n // Version 22 - 26.\n 0x168c9, 0x177ec, 0x18ec4, 0x191e1, 0x1afab,\n // Version 27 - 31.\n 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75, 0x1f250,\n // Version 32 - 36.\n 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b,\n // Version 37 - 40.\n 0x2542e, 0x26a64, 0x27541, 0x28c69\n];\n// Version > 2 has alignment patterns.\nconst MIN_VERSION_SIZE_WITH_ALIGNMENTS = 25;\nclass Version {\n #size;\n #version;\n #ecBlocks;\n #alignmentPatterns;\n constructor(version, alignmentPatterns, ...ecBlocks) {\n this.#version = version;\n this.#ecBlocks = ecBlocks;\n this.#size = 17 + 4 * version;\n this.#alignmentPatterns = alignmentPatterns;\n }\n get size() {\n return this.#size;\n }\n get version() {\n return this.#version;\n }\n get alignmentPatterns() {\n return this.#alignmentPatterns;\n }\n getECBlocks({ level }) {\n return this.#ecBlocks[level];\n }\n}\nconst VERSIONS = [\n new Version(\n 1,\n [],\n new ECBlocks(7, new ECB(1, 19)),\n new ECBlocks(10, new ECB(1, 16)),\n new ECBlocks(13, new ECB(1, 13)),\n new ECBlocks(17, new ECB(1, 9))\n ),\n new Version(\n 2,\n [6, 18],\n new ECBlocks(10, new ECB(1, 34)),\n new ECBlocks(16, new ECB(1, 28)),\n new ECBlocks(22, new ECB(1, 22)),\n new ECBlocks(28, new ECB(1, 16))\n ),\n new Version(\n 3,\n [6, 22],\n new ECBlocks(15, new ECB(1, 55)),\n new ECBlocks(26, new ECB(1, 44)),\n new ECBlocks(18, new ECB(2, 17)),\n new ECBlocks(22, new ECB(2, 13))\n ),\n new Version(\n 4,\n [6, 26],\n new ECBlocks(20, new ECB(1, 80)),\n new ECBlocks(18, new ECB(2, 32)),\n new ECBlocks(26, new ECB(2, 24)),\n new ECBlocks(16, new ECB(4, 9))\n ),\n new Version(\n 5,\n [6, 30],\n new ECBlocks(26, new ECB(1, 108)),\n new ECBlocks(24, new ECB(2, 43)),\n new ECBlocks(18, new ECB(2, 15), new ECB(2, 16)),\n new ECBlocks(22, new ECB(2, 11), new ECB(2, 12))\n ),\n new Version(\n 6,\n [6, 34],\n new ECBlocks(18, new ECB(2, 68)),\n new ECBlocks(16, new ECB(4, 27)),\n new ECBlocks(24, new ECB(4, 19)),\n new ECBlocks(28, new ECB(4, 15))\n ),\n new Version(\n 7,\n [6, 22, 38],\n new ECBlocks(20, new ECB(2, 78)),\n new ECBlocks(18, new ECB(4, 31)),\n new ECBlocks(18, new ECB(2, 14), new ECB(4, 15)),\n new ECBlocks(26, new ECB(4, 13), new ECB(1, 14))\n ),\n new Version(\n 8,\n [6, 24, 42],\n new ECBlocks(24, new ECB(2, 97)),\n new ECBlocks(22, new ECB(2, 38), new ECB(2, 39)),\n new ECBlocks(22, new ECB(4, 18), new ECB(2, 19)),\n new ECBlocks(26, new ECB(4, 14), new ECB(2, 15))\n ),\n new Version(\n 9,\n [6, 26, 46],\n new ECBlocks(30, new ECB(2, 116)),\n new ECBlocks(22, new ECB(3, 36), new ECB(2, 37)),\n new ECBlocks(20, new ECB(4, 16), new ECB(4, 17)),\n new ECBlocks(24, new ECB(4, 12), new ECB(4, 13))\n ),\n new Version(\n 10,\n [6, 28, 50],\n new ECBlocks(18, new ECB(2, 68), new ECB(2, 69)),\n new ECBlocks(26, new ECB(4, 43), new ECB(1, 44)),\n new ECBlocks(24, new ECB(6, 19), new ECB(2, 20)),\n new ECBlocks(28, new ECB(6, 15), new ECB(2, 16))\n ),\n new Version(\n 11,\n [6, 30, 54],\n new ECBlocks(20, new ECB(4, 81)),\n new ECBlocks(30, new ECB(1, 50), new ECB(4, 51)),\n new ECBlocks(28, new ECB(4, 22), new ECB(4, 23)),\n new ECBlocks(24, new ECB(3, 12), new ECB(8, 13))\n ),\n new Version(\n 12,\n [6, 32, 58],\n new ECBlocks(24, new ECB(2, 92), new ECB(2, 93)),\n new ECBlocks(22, new ECB(6, 36), new ECB(2, 37)),\n new ECBlocks(26, new ECB(4, 20), new ECB(6, 21)),\n new ECBlocks(28, new ECB(7, 14), new ECB(4, 15))\n ),\n new Version(\n 13,\n [6, 34, 62],\n new ECBlocks(26, new ECB(4, 107)),\n new ECBlocks(22, new ECB(8, 37), new ECB(1, 38)),\n new ECBlocks(24, new ECB(8, 20), new ECB(4, 21)),\n new ECBlocks(22, new ECB(12, 11), new ECB(4, 12))\n ),\n new Version(\n 14,\n [6, 26, 46, 66],\n new ECBlocks(30, new ECB(3, 115), new ECB(1, 116)),\n new ECBlocks(24, new ECB(4, 40), new ECB(5, 41)),\n new ECBlocks(20, new ECB(11, 16), new ECB(5, 17)),\n new ECBlocks(24, new ECB(11, 12), new ECB(5, 13))\n ),\n new Version(\n 15,\n [6, 26, 48, 70],\n new ECBlocks(22, new ECB(5, 87), new ECB(1, 88)),\n new ECBlocks(24, new ECB(5, 41), new ECB(5, 42)),\n new ECBlocks(30, new ECB(5, 24), new ECB(7, 25)),\n new ECBlocks(24, new ECB(11, 12), new ECB(7, 13))\n ),\n new Version(\n 16,\n [6, 26, 50, 74],\n new ECBlocks(24, new ECB(5, 98), new ECB(1, 99)),\n new ECBlocks(28, new ECB(7, 45), new ECB(3, 46)),\n new ECBlocks(24, new ECB(15, 19), new ECB(2, 20)),\n new ECBlocks(30, new ECB(3, 15), new ECB(13, 16))\n ),\n new Version(\n 17,\n [6, 30, 54, 78],\n new ECBlocks(28, new ECB(1, 107), new ECB(5, 108)),\n new ECBlocks(28, new ECB(10, 46), new ECB(1, 47)),\n new ECBlocks(28, new ECB(1, 22), new ECB(15, 23)),\n new ECBlocks(28, new ECB(2, 14), new ECB(17, 15))\n ),\n new Version(\n 18,\n [6, 30, 56, 82],\n new ECBlocks(30, new ECB(5, 120), new ECB(1, 121)),\n new ECBlocks(26, new ECB(9, 43), new ECB(4, 44)),\n new ECBlocks(28, new ECB(17, 22), new ECB(1, 23)),\n new ECBlocks(28, new ECB(2, 14), new ECB(19, 15))\n ),\n new Version(\n 19,\n [6, 30, 58, 86],\n new ECBlocks(28, new ECB(3, 113), new ECB(4, 114)),\n new ECBlocks(26, new ECB(3, 44), new ECB(11, 45)),\n new ECBlocks(26, new ECB(17, 21), new ECB(4, 22)),\n new ECBlocks(26, new ECB(9, 13), new ECB(16, 14))\n ),\n new Version(\n 20,\n [6, 34, 62, 90],\n new ECBlocks(28, new ECB(3, 107), new ECB(5, 108)),\n new ECBlocks(26, new ECB(3, 41), new ECB(13, 42)),\n new ECBlocks(30, new ECB(15, 24), new ECB(5, 25)),\n new ECBlocks(28, new ECB(15, 15), new ECB(10, 16))\n ),\n new Version(\n 21,\n [6, 28, 50, 72, 94],\n new ECBlocks(28, new ECB(4, 116), new ECB(4, 117)),\n new ECBlocks(26, new ECB(17, 42)),\n new ECBlocks(28, new ECB(17, 22), new ECB(6, 23)),\n new ECBlocks(30, new ECB(19, 16), new ECB(6, 17))\n ),\n new Version(\n 22,\n [6, 26, 50, 74, 98],\n new ECBlocks(28, new ECB(2, 111), new ECB(7, 112)),\n new ECBlocks(28, new ECB(17, 46)),\n new ECBlocks(30, new ECB(7, 24), new ECB(16, 25)),\n new ECBlocks(24, new ECB(34, 13))\n ),\n new Version(\n 23,\n [6, 30, 54, 78, 102],\n new ECBlocks(30, new ECB(4, 121), new ECB(5, 122)),\n new ECBlocks(28, new ECB(4, 47), new ECB(14, 48)),\n new ECBlocks(30, new ECB(11, 24), new ECB(14, 25)),\n new ECBlocks(30, new ECB(16, 15), new ECB(14, 16))\n ),\n new Version(\n 24,\n [6, 28, 54, 80, 106],\n new ECBlocks(30, new ECB(6, 117), new ECB(4, 118)),\n new ECBlocks(28, new ECB(6, 45), new ECB(14, 46)),\n new ECBlocks(30, new ECB(11, 24), new ECB(16, 25)),\n new ECBlocks(30, new ECB(30, 16), new ECB(2, 17))\n ),\n new Version(\n 25,\n [6, 32, 58, 84, 110],\n new ECBlocks(26, new ECB(8, 106), new ECB(4, 107)),\n new ECBlocks(28, new ECB(8, 47), new ECB(13, 48)),\n new ECBlocks(30, new ECB(7, 24), new ECB(22, 25)),\n new ECBlocks(30, new ECB(22, 15), new ECB(13, 16))\n ),\n new Version(\n 26,\n [6, 30, 58, 86, 114],\n new ECBlocks(28, new ECB(10, 114), new ECB(2, 115)),\n new ECBlocks(28, new ECB(19, 46), new ECB(4, 47)),\n new ECBlocks(28, new ECB(28, 22), new ECB(6, 23)),\n new ECBlocks(30, new ECB(33, 16), new ECB(4, 17))\n ),\n new Version(\n 27,\n [6, 34, 62, 90, 118],\n new ECBlocks(30, new ECB(8, 122), new ECB(4, 123)),\n new ECBlocks(28, new ECB(22, 45), new ECB(3, 46)),\n new ECBlocks(30, new ECB(8, 23), new ECB(26, 24)),\n new ECBlocks(30, new ECB(12, 15), new ECB(28, 16))\n ),\n new Version(\n 28,\n [6, 26, 50, 74, 98, 122],\n new ECBlocks(30, new ECB(3, 117), new ECB(10, 118)),\n new ECBlocks(28, new ECB(3, 45), new ECB(23, 46)),\n new ECBlocks(30, new ECB(4, 24), new ECB(31, 25)),\n new ECBlocks(30, new ECB(11, 15), new ECB(31, 16))\n ),\n new Version(\n 29,\n [6, 30, 54, 78, 102, 126],\n new ECBlocks(30, new ECB(7, 116), new ECB(7, 117)),\n new ECBlocks(28, new ECB(21, 45), new ECB(7, 46)),\n new ECBlocks(30, new ECB(1, 23), new ECB(37, 24)),\n new ECBlocks(30, new ECB(19, 15), new ECB(26, 16))\n ),\n new Version(\n 30,\n [6, 26, 52, 78, 104, 130],\n new ECBlocks(30, new ECB(5, 115), new ECB(10, 116)),\n new ECBlocks(28, new ECB(19, 47), new ECB(10, 48)),\n new ECBlocks(30, new ECB(15, 24), new ECB(25, 25)),\n new ECBlocks(30, new ECB(23, 15), new ECB(25, 16))\n ),\n new Version(\n 31,\n [6, 30, 56, 82, 108, 134],\n new ECBlocks(30, new ECB(13, 115), new ECB(3, 116)),\n new ECBlocks(28, new ECB(2, 46), new ECB(29, 47)),\n new ECBlocks(30, new ECB(42, 24), new ECB(1, 25)),\n new ECBlocks(30, new ECB(23, 15), new ECB(28, 16))\n ),\n new Version(\n 32,\n [6, 34, 60, 86, 112, 138],\n new ECBlocks(30, new ECB(17, 115)),\n new ECBlocks(28, new ECB(10, 46), new ECB(23, 47)),\n new ECBlocks(30, new ECB(10, 24), new ECB(35, 25)),\n new ECBlocks(30, new ECB(19, 15), new ECB(35, 16))\n ),\n new Version(\n 33,\n [6, 30, 58, 86, 114, 142],\n new ECBlocks(30, new ECB(17, 115), new ECB(1, 116)),\n new ECBlocks(28, new ECB(14, 46), new ECB(21, 47)),\n new ECBlocks(30, new ECB(29, 24), new ECB(19, 25)),\n new ECBlocks(30, new ECB(11, 15), new ECB(46, 16))\n ),\n new Version(\n 34,\n [6, 34, 62, 90, 118, 146],\n new ECBlocks(30, new ECB(13, 115), new ECB(6, 116)),\n new ECBlocks(28, new ECB(14, 46), new ECB(23, 47)),\n new ECBlocks(30, new ECB(44, 24), new ECB(7, 25)),\n new ECBlocks(30, new ECB(59, 16), new ECB(1, 17))\n ),\n new Version(\n 35,\n [6, 30, 54, 78, 102, 126, 150],\n new ECBlocks(30, new ECB(12, 121), new ECB(7, 122)),\n new ECBlocks(28, new ECB(12, 47), new ECB(26, 48)),\n new ECBlocks(30, new ECB(39, 24), new ECB(14, 25)),\n new ECBlocks(30, new ECB(22, 15), new ECB(41, 16))\n ),\n new Version(\n 36,\n [6, 24, 50, 76, 102, 128, 154],\n new ECBlocks(30, new ECB(6, 121), new ECB(14, 122)),\n new ECBlocks(28, new ECB(6, 47), new ECB(34, 48)),\n new ECBlocks(30, new ECB(46, 24), new ECB(10, 25)),\n new ECBlocks(30, new ECB(2, 15), new ECB(64, 16))\n ),\n new Version(\n 37,\n [6, 28, 54, 80, 106, 132, 158],\n new ECBlocks(30, new ECB(17, 122), new ECB(4, 123)),\n new ECBlocks(28, new ECB(29, 46), new ECB(14, 47)),\n new ECBlocks(30, new ECB(49, 24), new ECB(10, 25)),\n new ECBlocks(30, new ECB(24, 15), new ECB(46, 16))\n ),\n new Version(\n 38,\n [6, 32, 58, 84, 110, 136, 162],\n new ECBlocks(30, new ECB(4, 122), new ECB(18, 123)),\n new ECBlocks(28, new ECB(13, 46), new ECB(32, 47)),\n new ECBlocks(30, new ECB(48, 24), new ECB(14, 25)),\n new ECBlocks(30, new ECB(42, 15), new ECB(32, 16))\n ),\n new Version(\n 39,\n [6, 26, 54, 82, 110, 138, 166],\n new ECBlocks(30, new ECB(20, 117), new ECB(4, 118)),\n new ECBlocks(28, new ECB(40, 47), new ECB(7, 48)),\n new ECBlocks(30, new ECB(43, 24), new ECB(22, 25)),\n new ECBlocks(30, new ECB(10, 15), new ECB(67, 16))\n ),\n new Version(\n 40,\n [6, 30, 58, 86, 114, 142, 170],\n new ECBlocks(30, new ECB(19, 118), new ECB(6, 119)),\n new ECBlocks(28, new ECB(18, 47), new ECB(31, 48)),\n new ECBlocks(30, new ECB(34, 24), new ECB(34, 25)),\n new ECBlocks(30, new ECB(20, 15), new ECB(61, 16))\n )\n];\nfunction decodeVersion(version1, version2) {\n let bestDiff = 32;\n let bestVersion = 0;\n const { length } = VERSION_DECODE_TABLE;\n for (let i = 0; i < length; i++) {\n const maskedVersion = VERSION_DECODE_TABLE[i];\n // Do the version info bits match exactly done?\n if (version1 === maskedVersion || version2 === maskedVersion) {\n return VERSIONS[i + 6];\n }\n // Otherwise see if this is the closest to a real version info bit string we have seen so far.\n let bitsDiff = hammingWeight(version1 ^ maskedVersion);\n if (bitsDiff < bestDiff) {\n bestDiff = bitsDiff;\n bestVersion = i + 7;\n }\n if (version1 !== version2) {\n // Also try the other option.\n bitsDiff = hammingWeight(version2 ^ maskedVersion);\n if (bitsDiff < bestDiff) {\n bestDiff = bitsDiff;\n bestVersion = i + 7;\n }\n }\n }\n // We can tolerate up to 3 bits of error since no two version info codewords will differ in less than 8 bits.\n if (bestDiff <= 3 && bestVersion >= 7) {\n return VERSIONS[bestVersion - 1];\n }\n // If we didn't find a close enough match, fail.\n throw new Error('unable to decode version');\n}\n// See ISO 18004:2006 Annex E\nfunction buildFunctionPattern({ size, version, alignmentPatterns }) {\n // Alignment patterns\n const { length } = alignmentPatterns;\n const matrix = new BitMatrix(size);\n const max = length - 1;\n // Top left finder pattern + separator + format.\n matrix.setRegion(0, 0, 9, 9);\n // Top right finder pattern + separator + format.\n matrix.setRegion(size - 8, 0, 8, 9);\n // Bottom left finder pattern + separator + format.\n matrix.setRegion(0, size - 8, 9, 8);\n for (let x = 0; x < length; x++) {\n const top = alignmentPatterns[x] - 2;\n for (let y = 0; y < length; y++) {\n if ((x !== 0 || (y !== 0 && y !== max)) && (x !== max || y !== 0)) {\n matrix.setRegion(alignmentPatterns[y] - 2, top, 5, 5);\n }\n // Else no o alignment patterns near the three finder patterns.\n }\n }\n // Vertical timing pattern.\n matrix.setRegion(6, 9, 1, size - 17);\n // Horizontal timing pattern.\n matrix.setRegion(9, 6, size - 17, 1);\n if (version > 6) {\n // Version info, top right.\n matrix.setRegion(size - 11, 0, 3, 6);\n // Version info, bottom left.\n matrix.setRegion(0, size - 11, 6, 3);\n }\n return matrix;\n}\n\nexport {\n MAX_VERSION_SIZE,\n MIN_VERSION_SIZE,\n MIN_VERSION_SIZE_WITH_ALIGNMENTS,\n VERSIONS,\n Version,\n buildFunctionPattern,\n decodeVersion\n};\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\n/**\n * @module Polynomial\n */\nclass Polynomial {\n #field;\n #coefficients;\n constructor(field, coefficients) {\n const { length } = coefficients;\n if (length <= 0) {\n throw new Error('polynomial coefficients cannot empty');\n }\n this.#field = field;\n if (length > 1 && coefficients[0] === 0) {\n // Leading term must be non-zero for anything except the constant polynomial \"0\".\n let firstNonZero = 1;\n while (firstNonZero < length && coefficients[firstNonZero] === 0) {\n firstNonZero++;\n }\n if (firstNonZero === length) {\n this.#coefficients = new Int32Array([0]);\n } else {\n const array = new Int32Array(length - firstNonZero);\n array.set(coefficients.subarray(firstNonZero));\n this.#coefficients = array;\n }\n } else {\n this.#coefficients = coefficients;\n }\n }\n get coefficients() {\n return this.#coefficients;\n }\n isZero() {\n return this.#coefficients[0] === 0;\n }\n getDegree() {\n return this.#coefficients.length - 1;\n }\n getCoefficient(degree) {\n const coefficients = this.#coefficients;\n return coefficients[coefficients.length - 1 - degree];\n }\n evaluate(a) {\n if (a === 0) {\n // Just return the x^0 coefficient.\n return this.getCoefficient(0);\n }\n let result;\n const coefficients = this.#coefficients;\n if (a === 1) {\n // Just the sum of the coefficients.\n result = 0;\n for (const coefficient of coefficients) {\n result ^= coefficient;\n }\n return result;\n }\n [result] = coefficients;\n const field = this.#field;\n const { length } = coefficients;\n for (let i = 1; i < length; i++) {\n result = field.multiply(a, result) ^ coefficients[i];\n }\n return result;\n }\n multiply(other) {\n const field = this.#field;\n const coefficients = this.#coefficients;\n const { length } = coefficients;\n if (other instanceof Polynomial) {\n if (this.isZero() || other.isZero()) {\n return field.zero;\n }\n const otherCoefficients = other.#coefficients;\n const otherLength = otherCoefficients.length;\n const product = new Int32Array(length + otherLength - 1);\n for (let i = 0; i < length; i++) {\n const coefficient = coefficients[i];\n for (let j = 0; j < otherLength; j++) {\n product[i + j] ^= field.multiply(coefficient, otherCoefficients[j]);\n }\n }\n return new Polynomial(field, product);\n }\n if (other === 0) {\n return field.zero;\n }\n if (other === 1) {\n return this;\n }\n const product = new Int32Array(length);\n for (let i = 0; i < length; i++) {\n product[i] = field.multiply(coefficients[i], other);\n }\n return new Polynomial(field, product);\n }\n multiplyByMonomial(degree, coefficient) {\n const field = this.#field;\n if (coefficient === 0) {\n return field.zero;\n }\n const coefficients = this.#coefficients;\n const { length } = coefficients;\n const product = new Int32Array(length + degree);\n for (let i = 0; i < length; i++) {\n product[i] = field.multiply(coefficients[i], coefficient);\n }\n return new Polynomial(field, product);\n }\n addOrSubtract(other) {\n if (this.isZero()) {\n return other;\n }\n if (other.isZero()) {\n return this;\n }\n let largerCoefficients = other.#coefficients;\n let largerLength = largerCoefficients.length;\n let smallerCoefficients = this.#coefficients;\n let smallerLength = smallerCoefficients.length;\n if (largerLength < smallerLength) {\n [largerLength, smallerLength] = [smallerLength, largerLength];\n [largerCoefficients, smallerCoefficients] = [smallerCoefficients, largerCoefficients];\n }\n // Diff index offset.\n const offset = largerLength - smallerLength;\n const coefficients = new Int32Array(largerLength);\n // Copy high-order terms only found in higher-degree polynomial's coefficients.\n coefficients.set(largerCoefficients.subarray(0, offset));\n for (let i = offset; i < largerLength; i++) {\n coefficients[i] = smallerCoefficients[i - offset] ^ largerCoefficients[i];\n }\n return new Polynomial(this.#field, coefficients);\n }\n divide(other) {\n const field = this.#field;\n let quotient = field.zero;\n let remainder = this;\n const denominatorLeadingTerm = other.getCoefficient(other.getDegree());\n const invertDenominatorLeadingTerm = field.invert(denominatorLeadingTerm);\n while (remainder.getDegree() >= other.getDegree() && !remainder.isZero()) {\n const remainderDegree = remainder.getDegree();\n const degreeDiff = remainderDegree - other.getDegree();\n const scale = field.multiply(remainder.getCoefficient(remainderDegree), invertDenominatorLeadingTerm);\n const term = other.multiplyByMonomial(degreeDiff, scale);\n const iterationQuotient = field.buildPolynomial(degreeDiff, scale);\n quotient = quotient.addOrSubtract(iterationQuotient);\n remainder = remainder.addOrSubtract(term);\n }\n return [quotient, remainder];\n }\n}\n\nexport { Polynomial };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\nimport { Polynomial } from './Polynomial.js';\n\n/**\n * @module GaloisField\n */\nclass GaloisField {\n #size;\n #one;\n #zero;\n #generator;\n #expTable;\n #logTable;\n constructor(primitive, size, generator) {\n let x = 1;\n const expTable = new Int32Array(size);\n for (let i = 0; i < size; i++) {\n expTable[i] = x;\n // We're assuming the generator alpha is 2.\n x *= 2;\n if (x >= size) {\n x ^= primitive;\n x &= size - 1;\n }\n }\n const logTable = new Int32Array(size);\n for (let i = 0, length = size - 1; i < length; i++) {\n logTable[expTable[i]] = i;\n }\n this.#size = size;\n this.#expTable = expTable;\n this.#logTable = logTable;\n this.#generator = generator;\n this.#one = new Polynomial(this, new Int32Array([1]));\n this.#zero = new Polynomial(this, new Int32Array([0]));\n }\n get size() {\n return this.#size;\n }\n get one() {\n return this.#one;\n }\n get zero() {\n return this.#zero;\n }\n get generator() {\n return this.#generator;\n }\n exp(a) {\n return this.#expTable[a];\n }\n log(a) {\n return this.#logTable[a];\n }\n invert(a) {\n return this.#expTable[this.#size - this.#logTable[a] - 1];\n }\n multiply(a, b) {\n if (a === 0 || b === 0) {\n return 0;\n }\n const logTable = this.#logTable;\n return this.#expTable[(logTable[a] + logTable[b]) % (this.#size - 1)];\n }\n buildPolynomial(degree, coefficient) {\n if (coefficient === 0) {\n return this.#zero;\n }\n const coefficients = new Int32Array(degree + 1);\n coefficients[0] = coefficient;\n return new Polynomial(this, coefficients);\n }\n}\nconst QR_CODE_FIELD_256 = new GaloisField(0x011d, 256, 0);\n\nexport { GaloisField, QR_CODE_FIELD_256 };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\nimport { Charset } from '../Charset.js';\n\n/**\n * @module index\n */\nfunction getUnicodeCodes(content, maxCode) {\n const bytes = [];\n for (const character of content) {\n const code = character.codePointAt(0);\n // If gt max code, push \"?\".\n bytes.push(code == null || code > maxCode ? 63 : code);\n }\n return new Uint8Array(bytes);\n}\nfunction encode(content, charset) {\n switch (charset) {\n case Charset.ASCII:\n return getUnicodeCodes(content, 0x7f);\n case Charset.ISO_8859_1:\n return getUnicodeCodes(content, 0xff);\n case Charset.UTF_8:\n return new TextEncoder().encode(content);\n default:\n throw Error(`built-in encode not support charset: ${charset.label}`);\n }\n}\nfunction decode(bytes, charset) {\n try {\n return new TextDecoder(charset.label).decode(bytes);\n } catch {\n throw Error(`built-in decode not support charset: ${charset.label}`);\n }\n}\n\nexport { decode, encode };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\nimport { getBitMask, toBit, getBitOffset, toInt32 } from './utils.js';\n\n/**\n * @module BitArray\n */\nconst LOAD_FACTOR = 0.75;\nfunction offset(index) {\n return toInt32(index / 32);\n}\nfunction makeArray(length) {\n return new Int32Array(Math.ceil(length / 32));\n}\nclass BitArray {\n #length;\n #bits;\n constructor(length = 0) {\n this.#length = length;\n this.#bits = makeArray(length);\n }\n #alloc(length) {\n const bits = this.#bits;\n if (length > bits.length * 32) {\n const array = makeArray(Math.ceil(length / LOAD_FACTOR));\n array.set(bits);\n this.#bits = array;\n }\n this.#length = length;\n }\n get length() {\n return this.#length;\n }\n get byteLength() {\n return Math.ceil(this.#length / 8);\n }\n set(index) {\n this.#bits[offset(index)] |= getBitMask(index);\n }\n get(index) {\n return toBit(this.#bits[offset(index)] >>> getBitOffset(index));\n }\n xor(mask) {\n const bits = this.#bits;\n const maskBits = mask.#bits;\n const length = Math.min(this.#length, mask.#length);\n for (let i = 0; i < length; i++) {\n // The last int could be incomplete (i.e. not have 32 bits in\n // it) but there is no problem since 0 XOR 0 == 0.\n bits[i] ^= maskBits[i];\n }\n }\n append(value, length = 1) {\n let index = this.#length;\n if (value instanceof BitArray) {\n length = value.#length;\n this.#alloc(index + length);\n for (let i = 0; i < length; i++) {\n if (value.get(i) !== 0) {\n this.set(index);\n }\n index++;\n }\n } else {\n this.#alloc(index + length);\n for (let i = length - 1; i >= 0; i--) {\n if (toBit(value >>> i) !== 0) {\n this.set(index);\n }\n index++;\n }\n }\n }\n writeToUint8Array(bitOffset, target, byteOffset, byteLength) {\n for (let i = 0; i < byteLength; i++) {\n let byte = 0;\n for (let j = 0; j < 8; j++) {\n if (this.get(bitOffset++) !== 0) {\n byte |= 1 << (7 - j);\n }\n }\n target[byteOffset + i] = byte;\n }\n }\n clear() {\n this.#bits.fill(0);\n }\n}\n\nexport { BitArray };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\n/**\n * @module ByteMatrix\n */\nclass ByteMatrix {\n #size;\n #bytes;\n constructor(size) {\n this.#size = size;\n this.#bytes = new Int8Array(size * size);\n }\n get size() {\n return this.#size;\n }\n set(x, y, value) {\n this.#bytes[y * this.#size + x] = value;\n }\n get(x, y) {\n return this.#bytes[y * this.#size + x];\n }\n clear(value) {\n this.#bytes.fill(value);\n }\n}\n\nexport { ByteMatrix };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\nimport { isApplyMask } from '../../common/mask.js';\nimport { BitArray } from '../../common/BitArray.js';\nimport { ByteMatrix } from '../../common/ByteMatrix.js';\nimport { calculateBCHCode } from '../../common/utils.js';\nimport { VERSIONS } from '../../common/Version.js';\n\n/**\n * @module matrix\n */\n// Format information poly: 101 0011 0111.\nconst FORMAT_INFO_POLY = 0x537;\n// Format information mask.\nconst FORMAT_INFO_MASK = 0x5412;\n// Version information poly: 1 1111 0010 0101.\nconst VERSION_INFO_POLY = 0x1f25;\n// Finder pattern shape.\nconst FINDER_PATTERN_SHAPE = [\n [1, 1, 1, 1, 1, 1, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 0, 1, 1, 1, 0, 1],\n [1, 0, 1, 1, 1, 0, 1],\n [1, 0, 1, 1, 1, 0, 1],\n [1, 0, 0, 0, 0, 0, 1],\n [1, 1, 1, 1, 1, 1, 1]\n];\n// Alignment pattern shape.\nconst ALIGNMENT_PATTERN_SHAPE = [\n [1, 1, 1, 1, 1],\n [1, 0, 0, 0, 1],\n [1, 0, 1, 0, 1],\n [1, 0, 0, 0, 1],\n [1, 1, 1, 1, 1]\n];\n// Format information coordinates.\nconst FORMAT_INFO_COORDINATES = [\n [8, 0],\n [8, 1],\n [8, 2],\n [8, 3],\n [8, 4],\n [8, 5],\n [8, 7],\n [8, 8],\n [7, 8],\n [5, 8],\n [4, 8],\n [3, 8],\n [2, 8],\n [1, 8],\n [0, 8]\n];\n// Is empty point.\nfunction isEmpty(matrix, x, y) {\n return matrix.get(x, y) === -1;\n}\nfunction embedFinderPattern(matrix, x, y) {\n for (let i = 0; i < 7; i++) {\n const pattern = FINDER_PATTERN_SHAPE[i];\n for (let j = 0; j < 7; j++) {\n matrix.set(x + j, y + i, pattern[j]);\n }\n }\n}\nfunction embedHorizontalSeparator(matrix, x, y) {\n for (let j = 0; j < 8; j++) {\n matrix.set(x + j, y, 0);\n }\n}\nfunction embedVerticalSeparator(matrix, x, y) {\n for (let i = 0; i < 7; i++) {\n matrix.set(x, y + i, 0);\n }\n}\n// Embed finder patterns and surrounding vertical/horizontal separators.\nfunction embedFinderPatternsAndSeparators(matrix) {\n // Embed three big squares at corners.\n const pdpWidth = 7;\n // Embed horizontal separation patterns around the squares.\n const hspWidth = 8;\n // Embed vertical separation patterns around the squares.\n const vspHeight = 7;\n // Matrix width\n const { size } = matrix;\n // Left top corner.\n embedFinderPattern(matrix, 0, 0);\n // Right top corner.\n embedFinderPattern(matrix, size - pdpWidth, 0);\n // Left bottom corner.\n embedFinderPattern(matrix, 0, size - pdpWidth);\n // Left top corner.\n embedHorizontalSeparator(matrix, 0, hspWidth - 1);\n // Right top corner.\n embedHorizontalSeparator(matrix, size - hspWidth, hspWidth - 1);\n // Left bottom corner.\n embedHorizontalSeparator(matrix, 0, size - hspWidth);\n // Left top corner.\n embedVerticalSeparator(matrix, vspHeight, 0);\n // Right top corner.\n embedVerticalSeparator(matrix, size - vspHeight - 1, 0);\n // Left bottom corner.\n embedVerticalSeparator(matrix, vspHeight, size - vspHeight);\n}\nfunction embedTimingPatterns(matrix) {\n const size = matrix.size - 8;\n // -8 is for skipping position detection patterns (7: size)\n // separation patterns (1: size). Thus, 8 = 7 + 1.\n for (let x = 8; x < size; x++) {\n const bit = (x + 1) & 0x01;\n // Horizontal line.\n if (isEmpty(matrix, x, 6)) {\n matrix.set(x, 6, bit);\n }\n }\n // -8 is for skipping position detection patterns (7: size)\n // separation patterns (1: size). Thus, 8 = 7 + 1.\n for (let y = 8; y < size; y++) {\n const bit = (y + 1) & 0x01;\n // Vertical line.\n if (isEmpty(matrix, 6, y)) {\n matrix.set(6, y, bit);\n }\n }\n}\nfunction embedAlignmentPattern(matrix, x, y) {\n for (let i = 0; i < 5; i++) {\n const pattern = ALIGNMENT_PATTERN_SHAPE[i];\n for (let j = 0; j < 5; j++) {\n matrix.set(x + j, y + i, pattern[j]);\n }\n }\n}\n// Embed position alignment patterns if need be.\nfunction embedAlignmentPatterns(matrix, { version }) {\n if (version >= 2) {\n const { alignmentPatterns } = VERSIONS[version - 1];\n const { length } = alignmentPatterns;\n for (let i = 0; i < length; i++) {\n const y = alignmentPatterns[i];\n for (let j = 0; j < length; j++) {\n const x = alignmentPatterns[j];\n if (isEmpty(matrix, x, y)) {\n // If the cell is unset, we embed the position alignment pattern here.\n // -2 is necessary since the x/y coordinates point to the center of the pattern, not the\n // left top corner.\n embedAlignmentPattern(matrix, x - 2, y - 2);\n }\n }\n }\n }\n}\n// Embed the lonely dark dot at left bottom corner. ISO/IEC 18004:2015(E)(p.56)\nfunction embedDarkModule(matrix) {\n matrix.set(8, matrix.size - 8, 1);\n}\n// Make bit vector of format information. On success, store the result in \"bits\".\n// Encode error correction level and mask pattern. See 8.9 of\n// ISO/IEC 18004:2015(E)(p.55) for details.\nfunction makeFormatInfoBits(bits, ecLevel, mask) {\n const formatInfo = (ecLevel.bits << 3) | mask;\n bits.append(formatInfo, 5);\n const bchCode = calculateBCHCode(formatInfo, FORMAT_INFO_POLY);\n bits.append(bchCode, 10);\n const maskBits = new BitArray();\n maskBits.append(FORMAT_INFO_MASK, 15);\n bits.xor(maskBits);\n}\n// Embed format information. On success, modify the matrix.\nfunction embedFormatInfo(matrix, ecLevel, mask) {\n const formatInfoBits = new BitArray();\n makeFormatInfoBits(formatInfoBits, ecLevel, mask);\n const { size } = matrix;\n const { length } = formatInfoBits;\n for (let i = 0; i < length; i++) {\n // Type info bits at the left top corner.\n const [x, y] = FORMAT_INFO_COORDINATES[i];\n // Place bits in LSB to MSB order. LSB (least significant bit) is the last value in formatInfoBits.\n const bit = formatInfoBits.get(length - 1 - i);\n matrix.set(x, y, bit);\n if (i < 8) {\n // Right top corner.\n matrix.set(size - i - 1, 8, bit);\n } else {\n // Left bottom corner.\n matrix.set(8, size - 7 + (i - 8), bit);\n }\n }\n // Then, embed the dark dot at the left bottom corner.\n embedDarkModule(matrix);\n}\n// Make bit vector of version information. On success, store the result in \"bits\".\n// See 7.10 of ISO/IEC 18004:2015(E)(p.58) for details.\nfunction makeVersionInfoBits(bits, version) {\n bits.append(version, 6);\n const bchCode = calculateBCHCode(version, VERSION_INFO_POLY);\n bits.append(bchCode, 12);\n}\n// Embed version information if need be. On success, modify the matrix.\n// See 7.10 of ISO/IEC 18004:2015(E)(p.58) for how to embed version information.\nfunction embedVersionInfo(matrix, { version }) {\n if (version >= 7) {\n const versionInfoBits = new BitArray();\n makeVersionInfoBits(versionInfoBits, version);\n // It will decrease from 17 to 0.\n let bitIndex = 6 * 3 - 1;\n const { size } = matrix;\n for (let i = 0; i < 6; i++) {\n for (let j = 0; j < 3; j++) {\n // Place bits in LSB (least significant bit) to MSB order.\n const bit = versionInfoBits.get(bitIndex--);\n // Left bottom corner.\n matrix.set(i, size - 11 + j, bit);\n // Right bottom corner.\n matrix.set(size - 11 + j, i, bit);\n }\n }\n }\n}\n// Embed \"codewords\". On success, modify the matrix.\n// See 7.7.3 of ISO/IEC 18004:2015(E)(p.46) for how to embed codewords.\nfunction embedCodewords(matrix, codewords, mask) {\n let bitIndex = 0;\n const { size } = matrix;\n const { length } = codewords;\n // Start from the right bottom cell.\n for (let x = size - 1; x >= 1; x -= 2) {\n // Skip the vertical timing pattern.\n if (x === 6) {\n x = 5;\n }\n for (let y = 0; y < size; y++) {\n for (let i = 0; i < 2; i++) {\n const offsetX = x - i;\n const upward = ((x + 1) & 2) === 0;\n const offsetY = upward ? size - 1 - y : y;\n // Skip the cell if it's not empty.\n if (isEmpty(matrix, offsetX, offsetY)) {\n // Padding bit. If there is no bit left, we'll fill the left cells with 0.\n let bit = 0;\n if (bitIndex < length) {\n bit = codewords.get(bitIndex++);\n }\n // Is apply mask.\n if (isApplyMask(mask, offsetX, offsetY)) {\n bit ^= 1;\n }\n matrix.set(offsetX, offsetY, bit);\n }\n }\n }\n }\n}\n// Embed function patterns. On success, modify the matrix.\n// The function patterns are:\n// - Finder patterns and separators\n// - Alignment patterns, if version >= 2\n// - Timing patterns\nfunction embedFunctionPatterns(matrix, version) {\n // Let's get started with embedding big squares at corners.\n embedFinderPatternsAndSeparators(matrix);\n // Alignment patterns appear if version >= 2.\n embedAlignmentPatterns(matrix, version);\n // Timing patterns should be embedded after position adj. patterns.\n embedTimingPatterns(matrix);\n}\n// Embed encoding region. On success, modify the matrix.\n// The encoding region are:\n// - Format Info\n// - Version Info, if version >= 7\n// - Data with correction\nfunction embedEncodingRegion(matrix, codewords, version, ecLevel, mask) {\n // Type information appear with any version.\n embedFormatInfo(matrix, ecLevel, mask);\n // Version info appear if version >= 7.\n embedVersionInfo(matrix, version);\n // Data should be embedded at end.\n embedCodewords(matrix, codewords, mask);\n}\n// Build 2D matrix of QR Code from \"codewords\" with \"ecLevel\", \"version\" and \"getMaskPattern\". On\n// success, store the result in \"matrix\".\nfunction buildMatrix(codewords, version, ecLevel, mask) {\n const matrix = new ByteMatrix(version.size);\n // Clear matrix.\n matrix.clear(-1);\n // Embed function patterns.\n embedFunctionPatterns(matrix, version);\n // Embed encoding region.\n embedEncodingRegion(matrix, codewords, version, ecLevel, mask);\n return matrix;\n}\n\nexport { buildMatrix };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\n/**\n * @module BlockPair\n */\nclass BlockPair {\n #ecCodewords;\n #dataCodewords;\n constructor(dataCodewords, ecCodewords) {\n this.#ecCodewords = ecCodewords;\n this.#dataCodewords = dataCodewords;\n }\n get ecCodewords() {\n return this.#ecCodewords;\n }\n get dataCodewords() {\n return this.#dataCodewords;\n }\n}\n\nexport { BlockPair };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\nimport { Polynomial } from './Polynomial.js';\nimport { QR_CODE_FIELD_256 } from './GaloisField.js';\n\n/**\n * @module Encoder\n */\nfunction buildGenerator(field, generators, degree) {\n const { length } = generators;\n if (degree >= length) {\n const { generator } = field;\n let lastGenerator = generators[length - 1];\n for (let i = length; i <= degree; i++) {\n const coefficients = new Int32Array([1, field.exp(i - 1 + generator)]);\n const nextGenerator = lastGenerator.multiply(new Polynomial(field, coefficients));\n generators.push(nextGenerator);\n lastGenerator = nextGenerator;\n }\n }\n return generators[degree];\n}\nclass Encoder {\n #field;\n #generators;\n constructor(field = QR_CODE_FIELD_256) {\n this.#field = field;\n this.#generators = [new Polynomial(field, new Int32Array([1]))];\n }\n encode(received, ecLength) {\n const dataBytes = received.length - ecLength;\n const infoCoefficients = new Int32Array(dataBytes);\n const generator = buildGenerator(this.#field, this.#generators, ecLength);\n infoCoefficients.set(received.subarray(0, dataBytes));\n const base = new Polynomial(this.#field, infoCoefficients);\n const info = base.multiplyByMonomial(ecLength, 1);\n const [, remainder] = info.divide(generator);\n const { coefficients } = remainder;\n const numZeroCoefficients = ecLength - coefficients.length;\n const zeroCoefficientsOffset = dataBytes + numZeroCoefficients;\n received.fill(0, dataBytes, zeroCoefficientsOffset);\n received.set(coefficients, zeroCoefficientsOffset);\n }\n}\n\nexport { Encoder };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\nimport { Mode } from '../../common/Mode.js';\nimport { buildMatrix } from './matrix.js';\nimport { BitArray } from '../../common/BitArray.js';\nimport { BlockPair } from '../BlockPair.js';\nimport { VERSIONS } from '../../common/Version.js';\nimport { calculateMaskPenalty } from '../../common/mask.js';\nimport { Encoder } from '../../common/reedsolomon/Encoder.js';\n\n/**\n * @module encoder\n */\nfunction generateECCodewords(codewords, numECCodewords) {\n const numDataCodewords = codewords.length;\n const buffer = new Int32Array(numDataCodewords + numECCodewords);\n // Copy data codewords.\n buffer.set(codewords);\n // Reed solomon encode.\n new Encoder().encode(buffer, numECCodewords);\n // Get ec codewords.\n return new Uint8Array(buffer.subarray(numDataCodewords));\n}\nfunction injectECCodewords(bits, { ecBlocks, numECCodewordsPerBlock }) {\n // Step 1. Divide data bytes into blocks and generate error correction bytes for them. We'll\n // store the divided data bytes blocks and error correction bytes blocks into \"blocks\".\n let maxNumECCodewords = 0;\n let maxNumDataCodewords = 0;\n let dataCodewordsOffset = 0;\n // Block pair.\n const blocks = [];\n for (const { count, numDataCodewords } of ecBlocks) {\n for (let i = 0; i < count; i++) {\n const dataCodewords = new Uint8Array(numDataCodewords);\n bits.writeToUint8Array(dataCodewordsOffset * 8, dataCodewords, 0, numDataCodewords);\n const ecCodewords = generateECCodewords(dataCodewords, numECCodewordsPerBlock);\n blocks.push(new BlockPair(dataCodewords, ecCodewords));\n dataCodewordsOffset += numDataCodewords;\n maxNumECCodewords = Math.max(maxNumECCodewords, ecCodewords.length);\n maxNumDataCodewords = Math.max(maxNumDataCodewords, numDataCodewords);\n }\n }\n const codewords = new BitArray();\n // First, place data blocks.\n for (let i = 0; i < maxNumDataCodewords; i++) {\n for (const { dataCodewords } of blocks) {\n if (i < dataCodewords.length) {\n codewords.append(dataCodewords[i], 8);\n }\n }\n }\n // Then, place error correction blocks.\n for (let i = 0; i < maxNumECCodewords; i++) {\n for (const { ecCodewords } of blocks) {\n if (i < ecCodewords.length) {\n codewords.append(ecCodewords[i], 8);\n }\n }\n }\n return codewords;\n}\nfunction appendTerminator(bits, numDataCodewords) {\n const capacity = numDataCodewords * 8;\n // Append terminator if there is enough space (value is 0000).\n for (let i = 0; i < 4 && bits.length < capacity; i++) {\n bits.append(0);\n }\n // Append terminator. See 7.4.9 of ISO/IEC 18004:2015(E)(p.32) for details.\n // If the last byte isn't 8-bit aligned, we'll add padding bits.\n const numBitsInLastByte = bits.length & 0x07;\n if (numBitsInLastByte > 0) {\n for (let i = numBitsInLastByte; i < 8; i++) {\n bits.append(0);\n }\n }\n // If we have more space, we'll fill the space with padding patterns defined in 8.4.9 (p.24).\n const numPaddingCodewords = numDataCodewords - bits.byteLength;\n for (let i = 0; i < numPaddingCodewords; i++) {\n bits.append(i & 0x01 ? 0x11 : 0xec, 8);\n }\n}\nfunction isByteMode(segment) {\n return segment.mode === Mode.BYTE;\n}\nfunction isHanziMode(segment) {\n return segment.mode === Mode.HANZI;\n}\nfunction appendModeInfo(bits, mode) {\n bits.append(mode.bits, 4);\n}\nfunction appendECI(bits, segment, currentECIValue) {\n if (isByteMode(segment)) {\n const [value] = segment.charset.values;\n if (value !== currentECIValue) {\n bits.append(Mode.ECI.bits, 4);\n // See 7.4.2.2 of ISO/IEC 18004:2015(E)(p.24) for details.\n if (value <= 127) {\n bits.append(value, 8);\n } else if (value <= 16383) {\n bits.append(0x8000 | value, 16);\n } else {\n bits.append(0xc00000 | value, 24);\n }\n return value;\n }\n }\n return currentECIValue;\n}\nfunction appendFNC1Info(bits, fnc1) {\n const [mode, indicator] = fnc1;\n // Append FNC1 if applicable.\n switch (mode) {\n case 'GS1':\n // GS1 formatted codes are prefixed with a FNC1 in first position mode header.\n appendModeInfo(bits, Mode.FNC1_FIRST_POSITION);\n break;\n case 'AIM':\n // AIM formatted codes are prefixed with a FNC1 in first position mode header.\n appendModeInfo(bits, Mode.FNC1_SECOND_POSITION);\n // Append AIM application indicator.\n bits.append(indicator, 8);\n break;\n }\n}\nfunction getSegmentLength(segment, bits) {\n // Byte segment use byte Length.\n if (isByteMode(segment)) {\n return bits.byteLength;\n }\n // Other segments use the real length of characters.\n // All rest segments content codePointAt at 0x0000 to 0xffff, so use length directly.\n return segment.content.length;\n}\nfunction appendLengthInfo(bits, mode, version, numLetters) {\n bits.append(numLetters, mode.getCharacterCountBits(version));\n}\nfunction willFit(numInputBits, version, ecLevel) {\n // In the following comments, we use numbers of Version 7-H.\n const ecBlocks = version.getECBlocks(ecLevel);\n const numInputCodewords = Math.ceil(numInputBits / 8);\n return ecBlocks.numTotalDataCodewords >= numInputCodewords;\n}\nfunction chooseVersion(numInputBits, ecLevel) {\n for (const version of VERSIONS) {\n if (willFit(numInputBits, version, ecLevel)) {\n return version;\n }\n }\n throw new Error('data too big for all versions');\n}\nfunction calculateBitsNeeded(segmentBlocks, version) {\n let bitsNeeded = 0;\n for (const { mode, head, body } of segmentBlocks) {\n bitsNeeded += head.length + mode.getCharacterCountBits(version) + body.length;\n }\n return bitsNeeded;\n}\nfunction chooseRecommendVersion(segmentBlocks, ecLevel) {\n // Hard part: need to know version to know how many bits length takes. But need to know how many\n // bits it takes to know version. First we take a guess at version by assuming version will be\n // the minimum, 1:\n const provisionalBitsNeeded = calculateBitsNeeded(segmentBlocks, VERSIONS[0]);\n const provisionalVersion = chooseVersion(provisionalBitsNeeded, ecLevel);\n // Use that guess to calculate the right version. I am still not sure this works in 100% of cases.\n const bitsNeeded = calculateBitsNeeded(segmentBlocks, provisionalVersion);\n return chooseVersion(bitsNeeded, ecLevel);\n}\nfunction chooseBestMaskAndMatrix(codewords, version, ecLevel) {\n let bestMask = 0;\n let bestMatrix = buildMatrix(codewords, version, ecLevel, bestMask);\n let minPenalty = calculateMaskPenalty(bestMatrix);\n // We try all rest mask patterns to choose the best one.\n for (let mask = 1; mask < 8; mask++) {\n const matrix = buildMatrix(codewords, version, ecLevel, mask);\n const penalty = calculateMaskPenalty(matrix);\n // Lower penalty is better.\n if (penalty < minPenalty) {\n bestMask = mask;\n bestMatrix = matrix;\n minPenalty = penalty;\n }\n }\n return [bestMask, bestMatrix];\n}\n\nexport {\n appendECI,\n appendFNC1Info,\n appendLengthInfo,\n appendModeInfo,\n appendTerminator,\n calculateBitsNeeded,\n chooseBestMaskAndMatrix,\n chooseRecommendVersion,\n getSegmentLength,\n injectECCodewords,\n isByteMode,\n isHanziMode,\n willFit\n};\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\n/**\n * @module Dict\n * @see https://github.com/google/dart-gif-encoder\n */\n// The highest code that can be defined in the CodeBook.\nconst MAX_CODE = (1 << 12) - 1;\n/**\n * A dict contains codes defined during LZW compression. It's a mapping from a string\n * of pixels to the code that represents it. The codes are stored in a trie which is\n * represented as a map. Codes may be up to 12 bits. The size of the codebook is always\n * the minimum power of 2 needed to represent all the codes and automatically increases\n * as new codes are defined.\n */\nclass Dict {\n #bof;\n #eof;\n #bits;\n #depth;\n #size;\n #unused;\n #codes;\n constructor(depth) {\n const bof = 1 << depth;\n const eof = bof + 1;\n this.#bof = bof;\n this.#eof = eof;\n this.#depth = depth;\n this.reset();\n }\n get bof() {\n return this.#bof;\n }\n get eof() {\n return this.#eof;\n }\n get bits() {\n return this.#bits;\n }\n get depth() {\n return this.#depth;\n }\n reset() {\n const bits = this.#depth + 1;\n this.#bits = bits;\n this.#size = 1 << bits;\n this.#codes = new Map();\n this.#unused = this.#eof + 1;\n }\n add(code, index) {\n let unused = this.#unused;\n if (unused > MAX_CODE) {\n return false;\n }\n this.#codes.set((code << 8) | index, unused++);\n let bits = this.#bits;\n let size = this.#size;\n if (unused > size) {\n size = 1 << ++bits;\n }\n this.#bits = bits;\n this.#size = size;\n this.#unused = unused;\n return true;\n }\n get(code, index) {\n return this.#codes.get((code << 8) | index);\n }\n}\n\nexport { Dict };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\n/**\n * @module DictStream\n * @see https://github.com/google/dart-gif-encoder\n */\nclass DictStream {\n #bits = 0;\n #dict;\n #buffer = 0;\n #bytes = [];\n constructor(dict) {\n this.#dict = dict;\n }\n write(code) {\n let bits = this.#bits;\n let buffer = this.#buffer | (code << bits);\n bits += this.#dict.bits;\n const bytes = this.#bytes;\n while (bits >= 8) {\n bytes.push(buffer & 0xff);\n buffer >>= 8;\n bits -= 8;\n }\n this.#bits = bits;\n this.#buffer = buffer;\n }\n pipe(stream) {\n const bytes = this.#bytes;\n // Add the remaining bits. (Unused bits are set to zero.)\n if (this.#bits > 0) {\n bytes.push(this.#buffer);\n }\n stream.writeByte(this.#dict.depth);\n // Divide it up into blocks with a size in front of each block.\n const { length } = bytes;\n for (let i = 0; i < length; ) {\n const remain = length - i;\n if (remain >= 255) {\n stream.writeByte(0xff);\n stream.writeBytes(bytes, i, 255);\n i += 255;\n } else {\n stream.writeByte(remain);\n stream.writeBytes(bytes, i, remain);\n i = length;\n }\n }\n stream.writeByte(0);\n }\n}\n\nexport { DictStream };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\nimport { Dict } from './Dict.js';\nimport { DictStream } from './DictStream.js';\n\n/**\n * @module index\n * @see https://github.com/google/dart-gif-encoder\n */\nfunction compress(pixels, depth, stream) {\n const dict = new Dict(depth);\n const buffer = new DictStream(dict);\n buffer.write(dict.bof);\n if (pixels.length > 0) {\n let code = pixels[0];\n const { length } = pixels;\n for (let i = 1; i < length; i++) {\n const pixelIndex = pixels[i];\n const nextCode = dict.get(code, pixelIndex);\n if (nextCode != null) {\n code = nextCode;\n } else {\n buffer.write(code);\n // Reset dict when full.\n if (!dict.add(code, pixelIndex)) {\n buffer.write(dict.bof);\n dict.reset();\n }\n code = pixelIndex;\n }\n }\n buffer.write(code);\n }\n buffer.write(dict.eof);\n buffer.pipe(stream);\n}\n\nexport { compress };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\n/**\n * @module ByteStream\n */\nclass ByteStream {\n #bytes = [];\n get bytes() {\n return this.#bytes;\n }\n writeByte(value) {\n this.#bytes.push(value & 0xff);\n }\n writeInt16(value) {\n this.#bytes.push(value & 0xff, (value >> 8) & 0xff);\n }\n writeBytes(bytes, offset = 0, length = bytes.length) {\n const buffer = this.#bytes;\n for (let i = 0; i < length; i++) {\n buffer.push(bytes[offset + i] & 0xff);\n }\n }\n}\n\nexport { ByteStream };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\nimport { ByteStream } from './ByteStream.js';\n\n/**\n * @module Base64Stream\n */\nconst { fromCharCode } = String;\nfunction encode(byte) {\n byte &= 0x3f;\n if (byte >= 0) {\n if (byte < 26) {\n // A.\n return 0x41 + byte;\n } else if (byte < 52) {\n // a.\n return 0x61 + (byte - 26);\n } else if (byte < 62) {\n // 0.\n return 0x30 + (byte - 52);\n } else if (byte === 62) {\n // +.\n return 0x2b;\n } else if (byte === 63) {\n // /.\n return 0x2f;\n }\n }\n throw new Error(`illegal char: ${fromCharCode(byte)}`);\n}\nclass Base64Stream {\n #bits = 0;\n #buffer = 0;\n #length = 0;\n #stream = new ByteStream();\n get bytes() {\n return this.#stream.bytes;\n }\n write(byte) {\n let bits = this.#bits + 8;\n const stream = this.#stream;\n const buffer = (this.#buffer << 8) | (byte & 0xff);\n while (bits >= 6) {\n stream.writeByte(encode(buffer >>> (bits - 6)));\n bits -= 6;\n }\n this.#length++;\n this.#bits = bits;\n this.#buffer = buffer;\n }\n close() {\n const bits = this.#bits;\n const stream = this.#stream;\n if (bits > 0) {\n stream.writeByte(encode(this.#buffer << (6 - bits)));\n this.#bits = 0;\n this.#buffer = 0;\n }\n const length = this.#length;\n if (length % 3 != 0) {\n // Padding.\n const pad = 3 - (length % 3);\n for (let i = 0; i < pad; i++) {\n // =.\n stream.writeByte(0x3d);\n }\n }\n }\n}\n\nexport { Base64Stream, fromCharCode };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\nimport { compress } from './utils/lzw/index.js';\nimport { ByteStream } from './utils/ByteStream.js';\nimport { Base64Stream, fromCharCode } from './utils/Base64Stream.js';\n\n/**\n * @module GIFImage\n */\nclass GIFImage {\n #width;\n #height;\n #foreground;\n #background;\n #pixels = [];\n constructor(width, height, { foreground = [0x00, 0x00, 0x00], background = [0xff, 0xff, 0xff] } = {}) {\n this.#width = width;\n this.#height = height;\n this.#foreground = foreground;\n this.#background = background;\n }\n #encode() {\n const width = this.#width;\n const height = this.#height;\n const stream = new ByteStream();\n const background = this.#background;\n const foreground = this.#foreground;\n // GIF signature: GIF89a.\n stream.writeBytes([0x47, 0x49, 0x46, 0x38, 0x39, 0x61]);\n // Logical screen descriptor.\n stream.writeInt16(width);\n stream.writeInt16(height);\n stream.writeBytes([0x80, 0, 0]);\n // Global background color palette.\n stream.writeBytes([background[0], background[1], background[2]]);\n // Global foreground color palette.\n stream.writeBytes([foreground[0], foreground[1], foreground[2]]);\n // Image descriptor.\n stream.writeByte(0x2c);\n stream.writeInt16(0);\n stream.writeInt16(0);\n stream.writeInt16(width);\n stream.writeInt16(height);\n stream.writeByte(0);\n // Compress pixels to stream.\n compress(this.#pixels, 2, stream);\n // GIF terminator.\n stream.writeByte(0x3b);\n return stream.bytes;\n }\n set(x, y, color) {\n this.#pixels[y * this.#width + x] = color;\n }\n toDataURL() {\n const bytes = this.#encode();\n const stream = new Base64Stream();\n for (const byte of bytes) {\n stream.write(byte);\n }\n stream.close();\n const base64 = stream.bytes;\n let url = 'data:image/gif;base64,';\n for (const byte of base64) {\n url += fromCharCode(byte);\n }\n return url;\n }\n}\n\nexport { GIFImage };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\nimport { toInt32 } from '../common/utils.js';\nimport { GIFImage } from '../common/image/GIFImage.js';\n\n/**\n * @module Encoded\n */\nclass Encoded {\n #mask;\n #level;\n #version;\n #matrix;\n constructor(matrix, version, level, mask) {\n this.#mask = mask;\n this.#level = level;\n this.#matrix = matrix;\n this.#version = version;\n }\n /**\n * @property matrix\n * @description Get the size of qrcode.\n */\n get size() {\n return this.#matrix.size;\n }\n /**\n * @property mask\n * @description Get the mask of qrcode.\n */\n get mask() {\n return this.#mask;\n }\n /**\n * @property level\n * @description Get the error correction level of qrcode.\n */\n get level() {\n return this.#level.name;\n }\n /**\n * @property version\n * @description Get the version of qrcode.\n */\n get version() {\n return this.#version.version;\n }\n /**\n * @method get\n * @description Get the bit value of the specified coordinate of qrcode.\n */\n get(x, y) {\n const { size } = this.#matrix;\n if (x < 0 || y < 0 || x >= size || y >= size) {\n throw new Error(`illegal coordinate: [${x}, ${y}]`);\n }\n return this.#matrix.get(x, y);\n }\n /**\n * @method toDataURL\n * @param moduleSize The size of one qrcode module\n * @param options Set rest options of gif, like margin, foreground and background.\n */\n toDataURL(moduleSize = 2, { margin = moduleSize * 4, ...colors } = {}) {\n moduleSize = Math.max(1, moduleSize >> 0);\n margin = Math.max(0, margin >> 0);\n const matrix = this.#matrix;\n const matrixSize = matrix.size;\n const size = moduleSize * matrixSize + margin * 2;\n const gif = new GIFImage(size, size, colors);\n const max = size - margin;\n for (let y = 0; y < size; y++) {\n for (let x = 0; x < size; x++) {\n if (x >= margin && x < max && y >= margin && y < max) {\n const offsetX = toInt32((x - margin) / moduleSize);\n const offsetY = toInt32((y - margin) / moduleSize);\n gif.set(x, y, matrix.get(offsetX, offsetY));\n } else {\n // Margin pixels.\n gif.set(x, y, 0);\n }\n }\n }\n return gif.toDataURL();\n }\n}\n\nexport { Encoded };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\nimport { Charset } from '../../common/Charset.js';\n\n/**\n * @module asserts\n */\nfunction assertContent(content) {\n if (content === '') {\n throw new Error('segment content should be at least 1 character');\n }\n}\nfunction assertCharset(charset) {\n if (!(charset instanceof Charset)) {\n throw new Error('illegal charset');\n }\n}\nfunction assertHints(hints) {\n const { fnc1 } = hints;\n // FNC1.\n if (fnc1 != null) {\n const [mode] = fnc1;\n if (mode !== 'GS1' && mode !== 'AIM') {\n throw new Error('illegal fn1 hint');\n }\n if (mode === 'AIM') {\n const [, indicator] = fnc1;\n if (indicator < 0 || indicator > 0xff || !Number.isInteger(indicator)) {\n throw new Error('illegal fn1 application indicator');\n }\n }\n }\n}\nfunction assertLevel(level) {\n if (['L', 'M', 'Q', 'H'].indexOf(level) < 0) {\n throw new Error('illegal error correction level');\n }\n}\nfunction assertVersion(version) {\n if (version !== 'Auto') {\n if (version < 1 || version > 40 || !Number.isInteger(version)) {\n throw new Error('illegal version');\n }\n }\n}\n\nexport { assertCharset, assertContent, assertHints, assertLevel, assertVersion };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\nimport {\n getSegmentLength,\n appendECI,\n appendFNC1Info,\n appendModeInfo,\n isHanziMode,\n chooseRecommendVersion,\n calculateBitsNeeded,\n willFit,\n appendLengthInfo,\n appendTerminator,\n injectECCodewords,\n chooseBestMaskAndMatrix\n} from './utils/encoder.js';\nimport { Encoded } from './Encoded.js';\nimport { Charset } from '../common/Charset.js';\nimport { ECLevel } from '../common/ECLevel.js';\nimport { BitArray } from '../common/BitArray.js';\nimport { VERSIONS } from '../common/Version.js';\nimport { encode } from '../common/encoding/index.js';\nimport { assertHints, assertLevel, assertVersion } from './utils/asserts.js';\n\n/**\n * @module Encoder\n */\nclass Encoder {\n #hints;\n #level;\n #encode;\n #version;\n /**\n * @constructor\n * @param options The options of encoder.\n */\n constructor({ hints = {}, level = 'L', version = 'Auto', encode: encode$1 = encode } = {}) {\n assertHints(hints);\n assertLevel(level);\n assertVersion(version);\n this.#hints = hints;\n this.#encode = encode$1;\n this.#version = version;\n this.#level = ECLevel[level];\n }\n /**\n * @method encode\n * @description Encode the segments.\n * @param segments The segments.\n */\n encode(...segments) {\n const ecLevel = this.#level;\n const encode = this.#encode;\n const { fnc1 } = this.#hints;\n const versionNumber = this.#version;\n const segmentBlocks = [];\n // Only append FNC1 once.\n let isFNC1Appended = false;\n // Current ECI value.\n let [currentECIValue] = Charset.ISO_8859_1.values;\n // Init segments.\n for (const segment of segments) {\n const { mode } = segment;\n const head = new BitArray();\n const body = segment.encode(encode);\n const length = getSegmentLength(segment, body);\n // Append ECI segment if applicable.\n currentECIValue = appendECI(head, segment, currentECIValue);\n // Append FNC1 if applicable.\n if (fnc1 != null && !isFNC1Appended) {\n isFNC1Appended = true;\n appendFNC1Info(head, fnc1);\n }\n // With ECI in place, Write the mode marker.\n appendModeInfo(head, mode);\n // If is Hanzi mode append GB2312 subset.\n if (isHanziMode(segment)) {\n head.append(1, 4);\n }\n // Push segment block.\n segmentBlocks.push({ mode, head, body, length });\n }\n let version;\n if (versionNumber === 'Auto') {\n version = chooseRecommendVersion(segmentBlocks, ecLevel);\n } else {\n version = VERSIONS[versionNumber - 1];\n const bitsNeeded = calculateBitsNeeded(segmentBlocks, version);\n if (!willFit(bitsNeeded, version, ecLevel)) {\n throw new Error('data too big for requested version');\n }\n }\n const buffer = new BitArray();\n for (const { mode, head, body, length } of segmentBlocks) {\n buffer.append(head);\n appendLengthInfo(buffer, mode, version, length);\n buffer.append(body);\n }\n const ecBlocks = version.getECBlocks(ecLevel);\n appendTerminator(buffer, ecBlocks.numTotalDataCodewords);\n const codewords = injectECCodewords(buffer, ecBlocks);\n const [mask, matrix] = chooseBestMaskAndMatrix(codewords, version, ecLevel);\n return new Encoded(matrix, version, ecLevel, mask);\n }\n}\n\nexport { Encoder };\n","/**\n * @module QRCode\n * @package @nuintun/qrcode\n * @license MIT\n * @version 5.0.2\n * @author nuintun <nuintun@qq.com>\n * @description A pure JavaScript QRCode encode and decode library.\n * @see https://github.com/nuintun/qrcode#readme\n */\n\nimport { Mode } from '../../common/Mode.js';\nimport { Charset } from '../../common/Charset.js';\nimport { BitArray } from '../../common/BitArray.js';\nimport { assertContent, assertCharset } from '../utils/asserts.js';\n\n/**\n * @module Byte\n */\nclass Byte {\n #content;\n #charset;\n /**\n * @constructor\n * @param content The content to encode.\n * @param charset The charset of the content.\n */\n constructor(content, charset = Charset.ISO_8859_1) {\n assertContent(content);\n assertCharset(charset);\n this.#content = content;\n this.#charset = charset;\n }\n /**\n * @property mode\n * @description The mode of the segment.\n */\n get mode() {\n return Mode.BYTE;\n }\n /**\n * @property content\n * @description The content of the segment.\n */\n get content() {\n return this.#content;\n }\n /**\n * @property charset\n * @description The charset of the content.\n */\n get charset() {\n return this.#charset;\n }\n /**\n * @method encode\n * @description Encode the segment.\n * @param encode The text encode function.\n */\n encode(encode) {\n const bits = new BitArray();\n const bytes = encode(this.#content, this.#charset);\n for (const byte of bytes) {\n bits.append(byte, 8);\n }\n return bits;\n }\n}\n\nexport { Byte };\n","import { sendHttpRequest } from \"../../utils/utils\";\n\n// 文件上传流水号SDK\nconst uploadNumberSDK = {\n number: '',\n isWorking: false,\n close: async function (params?: {\n onOk?: () => void;\n onError?: () => void;\n }) {\n const { onOk, onError } = params ?? {};\n const { number } = this;\n if (number) {\n const result = await sendHttpRequest({\n url: `/resource/update_id/${number}`,\n method: 'delete',\n });\n if (result.success) {\n this.number = '';\n onOk?.();\n } else {\n onError?.();\n }\n }\n }\n}\n\nexport default uploadNumberSDK;",".mobile-upload {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 4px;\n}\n\n.btn {\n position: relative;\n padding: 4px 8px;\n border-radius: 4px;\n cursor: pointer;\n overflow: hidden;\n display: flex;\n justify-content: center;\n align-items: center;\n white-space: nowrap;\n}\n\n.btn::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.btn:hover::after {\n background-color: rgba(0,0,0,0.04);\n}\n\n.btn-link {\n color: #0D75FB;\n}\n\n.btn-default {\n background-color: #ffffff;\n color: #0D75FB;\n border: 1px solid #0D75FB;\n}\n\n.btn-primary {\n background-color: #0D75FB;\n color: #ffffff;\n}\n\n\n.loading {\n font-size: 12px;\n color: #999999;\n}\n\n.mask {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0,0,0,0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 10000;\n}\n\n.mask .upload-wrapper {\n width: 540px;\n max-width: 80%;\n max-height: 80%;\n background-color: #ffffff;\n padding: 32px 24px;\n border-radius: 16px;\n overflow-y: auto;\n}\n\n.mask .upload-wrapper .upload-box {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.time-expire {\n margin: 8px 0;\n text-align: center;\n font-size: 12px;\n color: #555555;\n}\n\n.time-count-down {\n margin-left: 8px;\n color: #0D75FB;\n}\n\n.alert-tip {\n margin-top: 8px;\n text-align: center;\n font-size: 12px;\n color: #999999;\n}\n\n.qrcode-wrapper {\n width: 160px;\n height: 160px;\n display: flex;\n justify-content: center;\n align-items: center;\n border: 1px solid #e5e5e5;\n border-radius: 4px;\n padding: 1px;\n}\n\n.qrcode-wrapper .qrcode {\n width: 100%;\n height: 100%;\n}\n\n.modal-footer {\n margin-top: 32px;\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 8px;\n}\n\n.modal-footer .btn {\n min-width: 100px;\n}\n\n.qrcode-textarea {\n width: calc(100% - 16px);\n min-height: 120px;\n border: 1px solid #ddd;\n border-radius: 4px;\n resize: vertical;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n transition: border-color 0.3s;\n padding: 8px;\n}",":host {\n font-size: 16px;\n}\n\n/* 模态框基础样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* 全屏模式下的overlay样式 - 改为基于父组件 */\n.fullscreen-overlay {\n padding: 0;\n background-color: rgba(0, 0, 0, 0.7);\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: calc(100% - 10px);\n}\n\n.modal-container {\n background-color: #fff;\n border-radius: 8px;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n transition: all 0.3s ease-out;\n overflow: hidden;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 600px;\n min-width: 320px;\n}\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 10px 0px 0px 0px;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n}\n\n/* 模态框头部样式 */\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n\n/* 文件上传区域通用样式 */\n.upload-area {\n cursor: pointer;\n width: 100%;\n}\n\n\n.upload-placeholder {\n transition: all 0.3s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: rgba(0, 0, 0, 0.02);\n border: 1px dashed #d9d9d9;\n border-radius: 8px;\n}\n\n.upload-placeholder:hover {\n border: 1px dashed #1890ff;\n}\n\n.upload-placeholder img {\n margin-top: 8px;\n width: 50px;\n height: 50px;\n}\n\n.upload-placeholder .upload-text {\n margin: 4px 0;\n color: #332F39;\n font-size: 14px;\n}\n\n.upload-placeholder .upload-hint {\n font-size: 14px;\n color: #949AA5;\n margin-top: 8px;\n padding: 0px 10px;\n text-align: center;\n}\n\n\n/* 文件项样式 */\n.file-item {\n position: relative;\n padding: 16px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n transition: border-color 0.3s;\n cursor: pointer;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.file-item:hover {\n border-color: #0D75FB;\n}\n\n.file-item-content {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.file-icon {\n color: #0D75FB;\n flex-shrink: 0;\n}\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n.remove-file {\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n margin-left: 8px;\n border-radius: 4px;\n transition: all 0.2s;\n min-width: 30px;\n min-height: 30px;\n}\n\n.remove-file:hover {\n background-color: #f1f5f9;\n color: #475569;\n}\n\n.file-input {\n display: none;\n}\n\n\n\n/* 输入容器样式 */\n.input-container {\n padding: 20px;\n display: flex;\n flex-direction: column;\n height: calc(100% - 50px);\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;\n /* 减去header高度 */\n overflow-y: auto;\n}\n\n.input-container h3 {\n margin-top: 0;\n margin-bottom: 20px;\n font-size: 18px;\n color: #333;\n text-align: center;\n}\n\n/* JD输入区域样式 */\n.jd-input-section {\n margin-bottom: 20px;\n}\n\n.jd-input-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.job-description-textarea {\n width: calc(100% - 16px);\n border: 1px solid #ddd;\n border-radius: 4px;\n resize: vertical;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n transition: border-color 0.3s;\n padding: 8px;\n}\n\n.job-description-textarea:focus {\n outline: none;\n border-color: #1890ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n/* 简历上传区域样式 */\n.resume-upload-section {\n margin-bottom: 20px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.resume-upload-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n align-self: flex-start;\n}\n\n\n/* 提交按钮通用样式 */\n.submit-button {\n margin-top: 10px;\n padding: 10px 30px;\n background: #0D75FB;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s ease;\n width: 100%;\n max-width: 400px;\n align-self: center;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n.submit-button:disabled {\n background-color: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.25);\n cursor: not-allowed;\n}\n\n\n\n/* AI免责声明和备案信息样式 */\n.ai-disclaimer {\n margin-top: 16px;\n text-align: center;\n font-size: 12px;\n color: #999;\n line-height: 1.5;\n}\n\n.ai-disclaimer p {\n margin: 4px 0;\n}\n\n.beian-info {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ai-disclaimer a {\n color: #666;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.ai-disclaimer a:hover {\n color: #1890ff;\n text-decoration: underline;\n}\n\n/* 添加加载状态的样式 */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n }\n \n .loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--pcm-primary-color, #1890ff);\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n }\n \n .loading-text {\n font-size: 16px;\n color: var(--pcm-text-color, #333);\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n ","import { Component, Prop, State, Event, h, EventEmitter } from \"@stencil/core\";\nimport { Byte, Encoder } from '@nuintun/qrcode'\nimport { isMobile, sendHttpRequest, PCM_DOMAIN } from \"../../utils/utils\";\nimport { Message } from \"../../services/message.service\";\nimport uploadNumberSDK from \"./uploadNumberSDK\";\n\n@Component({\n tag: 'pcm-mobile-input-btn',\n styleUrls: ['pcm-mobile-input-btn.css', '../../global/global.css'],\n shadow: true,\n})\nexport class MobileUploadBtn {\n // 标题\n @Prop() name: string = '';\n /**\n * 最大文件数\n */\n @Prop() rows: number = 8;\n /**\n * 最大文件大小\n */\n @Prop() maxLength: number = undefined;\n /**\n * 填写请求头\n */\n @Prop() uploadHeaders?: Record<string, any>;\n /**\n * 填写请求参数\n */\n @Prop() uploadParams?: Record<string, any>;\n\n @State() QR_CODE_VALID_TIME: number = 0;\n @State() open: boolean = false;\n @State() mobileUrl: string = '';\n @State() setStartMobileUpload: boolean = false;\n @State() startMobileUploadLoading: boolean = false;\n @State() qrcodeStatus: 'active' | 'expired' | 'loading' | undefined = 'loading';\n @State() value: string = '';\n\n @Event() ok: EventEmitter<string>;\n\n private setStartMobileUploadWrapper = (e: boolean) => {\n uploadNumberSDK.isWorking = e;\n this.setStartMobileUpload = e;\n }\n\n @State() qrcodeUrl: string = '';\n private setMobileUrlWrapper = (e: string) => {\n this.mobileUrl = e;\n if (e) {\n const encoder = new Encoder();\n const qrcode = encoder.encode(new Byte(e));\n this.qrcodeUrl = qrcode.toDataURL();\n } else {\n this.qrcodeUrl = '';\n }\n }\n\n // 轮询流水号数据\n private pollingQueryNumberInfo = async (num: any) => {\n const res = await sendHttpRequest({\n url: `/sdk/v1/update_id/${num}/status`,\n method: 'get',\n });\n if (res?.success) {\n const resData: {\n update_id?: any;\n tags?: any;\n status?: any;\n file_list?: any;\n user_id?: any;\n cfg?: any;\n iat?: any;\n exp?: any;\n custom_data?: any;\n } = res.data ?? {};\n const { custom_data } = resData;\n this.value = custom_data ?? '';\n }\n if (uploadNumberSDK.isWorking) {\n setTimeout(() => {\n this.pollingQueryNumberInfo(num);\n }, 3000);\n }\n }\n\n private handleStartMobileUpload = async () => {\n const that = this;\n this.qrcodeStatus = 'loading';\n this.startMobileUploadLoading = true;\n const params = this.uploadParams ?? {};\n const reqData: {\n cfg?: Record<string, any>;\n } = {\n cfg: {\n fromUserName: '',\n fromUserId: '',\n upload: that.uploadParams,\n name: that.name,\n rows: that.rows,\n maxLength: that.maxLength,\n params,\n },\n }\n const res = await sendHttpRequest({\n url: `/sdk/v1/update_id`,\n method: 'post',\n data: reqData,\n });\n if (res?.success) {\n const resData: {\n update_id?: any;\n tags?: any;\n status?: any;\n file_list?: any;\n user_id?: any;\n cfg?: any;\n iat?: any;\n exp?: any;\n now?: any;\n } = res.data ?? {};\n uploadNumberSDK.number = resData.update_id;\n this.QR_CODE_VALID_TIME = Number(resData.exp) - Number(resData.now);\n const theMobileUrl = `${PCM_DOMAIN}/agents/inputByCode?num=${uploadNumberSDK.number}`;\n this.setMobileUrlWrapper(theMobileUrl)\n this.setStartMobileUploadWrapper(true);\n this.qrcodeStatus = 'active';\n // 开启轮询\n this.pollingQueryNumberInfo(uploadNumberSDK.number);\n }\n this.startMobileUploadLoading = false;\n }\n\n // 取消手机填写\n @State() cancelLoading = false;\n private cancelMobileUpload = async () => {\n this.cancelLoading = true;\n await uploadNumberSDK.close({\n onError() {\n Message.info('取消失败');\n }\n })\n this.cancelLoading = false;\n this.QR_CODE_VALID_TIME = 0;\n this.setStartMobileUploadWrapper(false);\n this.setMobileUrlWrapper('');\n this.qrcodeStatus = 'expired';\n this.value = '';\n this.open = false;\n }\n\n\n render() {\n const mobile = isMobile();\n if (mobile) {\n return null\n } else {\n return (\n <div>\n <div class=\"mobile-upload\">\n <div\n class=\"btn btn-link\"\n onClick={() => {\n this.open = true;\n this.handleStartMobileUpload();\n }}\n >扫码填写</div>\n </div>\n {\n this.open && <div class=\"mask\">\n <div class=\"upload-wrapper\">\n {\n this.setStartMobileUpload ? <div class=\"upload-box\">\n <div class=\"qrcode-wrapper\">\n {\n this.qrcodeStatus === 'active' && <img class=\"qrcode\" src={this.qrcodeUrl} />\n }\n {\n this.qrcodeStatus === 'loading' && <span class=\"loading\">加载中...</span>\n }\n {\n this.qrcodeStatus === 'expired' && <div\n class=\"btn btn-link\"\n onClick={this.handleStartMobileUpload}\n >重新获取</div>\n }\n </div>\n <div class=\"time-expire\">\n 二维码有效期\n <span class=\"time-count-down\">\n {\n !!this.QR_CODE_VALID_TIME && <pcm-time-count-down\n time={this.QR_CODE_VALID_TIME}\n onFinished={() => {\n this.qrcodeStatus = 'expired';\n }}\n />\n }\n </span>\n </div>\n <div class=\"alert-tip\">\n 填写过程中请不要关闭此弹窗\n </div>\n {\n this.qrcodeStatus === 'active' && <div\n style={{ marginTop: '12px', fontSize: '12px' }}\n class=\"btn btn-link\"\n onClick={() => {\n navigator.clipboard\n .writeText(this.mobileUrl)\n .then(() => {\n Message.success(\"已复制到剪贴板\");\n })\n .catch(() => {\n Message.error(\"复制失败\");\n });\n }}\n >复制二维码地址</div>\n }\n </div> : (this.startMobileUploadLoading && <span class=\"loading\">加载中...</span>)\n }\n {/* 填写文件列表 */}\n <div style={{ marginTop: '12px' }}>\n {\n !!this.value?.length && <textarea\n readOnly\n class=\"qrcode-textarea\"\n value={this.value}\n onChange={(e: any) => {\n this.value = e.target.value;\n }}\n />\n }\n </div>\n <div class=\"modal-footer\">\n <div class=\"btn btn-default\" onClick={this.cancelMobileUpload}>取消</div>\n <div class=\"btn btn-primary\" onClick={() => {\n if (!this.value) {\n Message.info(`请输入内容`);\n return;\n }\n if (this.value.length > this.maxLength) {\n Message.info(`输入内容不能超过${this.maxLength}个字符`);\n return;\n }\n this.ok.emit(this.value);\n this.cancelMobileUpload();\n }}>完成</div>\n </div>\n </div>\n </div>\n }\n </div>\n )\n }\n }\n}","import { sendHttpRequest } from \"../../utils/utils\";\n\n// 文件上传流水号SDK\nconst uploadNumberSDK = {\n number: '',\n isWorking: false,\n close: async function (params?: {\n onOk?: () => void;\n onError?: () => void;\n }) {\n const { onOk, onError } = params ?? {};\n const { number } = this;\n if (number) {\n const result = await sendHttpRequest({\n url: `/resource/update_id/${number}`,\n method: 'delete',\n });\n if (result.success) {\n this.number = '';\n onOk?.();\n } else {\n onError?.();\n }\n }\n }\n}\n\nexport default uploadNumberSDK;",".mobile-upload {\n display: flex;\n justify-content: flex-end;\n margin-bottom: 4px;\n}\n\n.btn {\n position: relative;\n padding: 4px 8px;\n border-radius: 4px;\n cursor: pointer;\n overflow: hidden;\n display: flex;\n justify-content: center;\n align-items: center;\n white-space: nowrap;\n}\n\n.btn::after {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n}\n\n.btn:hover::after {\n background-color: rgba(0,0,0,0.04);\n}\n\n.btn-link {\n color: #0D75FB;\n}\n\n.btn-default {\n background-color: #ffffff;\n color: #0D75FB;\n border: 1px solid #0D75FB;\n}\n\n.btn-primary {\n background-color: #0D75FB;\n color: #ffffff;\n}\n\n\n.loading {\n font-size: 12px;\n color: #999999;\n}\n\n.mask {\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0,0,0,0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 10000;\n}\n\n.mask .upload-wrapper {\n width: 540px;\n max-width: 80%;\n max-height: 80%;\n background-color: #ffffff;\n padding: 32px 24px;\n border-radius: 16px;\n overflow-y: auto;\n}\n\n.mask .upload-wrapper .upload-box {\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.time-expire {\n margin: 8px 0;\n text-align: center;\n font-size: 12px;\n color: #555555;\n}\n\n.time-count-down {\n margin-left: 8px;\n color: #0D75FB;\n}\n\n.alert-tip {\n margin-top: 8px;\n text-align: center;\n font-size: 12px;\n color: #999999;\n}\n\n.qrcode-wrapper {\n width: 160px;\n height: 160px;\n display: flex;\n justify-content: center;\n align-items: center;\n border: 1px solid #e5e5e5;\n border-radius: 4px;\n padding: 1px;\n}\n\n.qrcode-wrapper .qrcode {\n width: 100%;\n height: 100%;\n}\n\n.modal-footer {\n margin-top: 32px;\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 8px;\n}\n\n.modal-footer .btn {\n min-width: 100px;\n}",":host {\n font-size: 16px;\n}\n\n/* 模态框基础样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* 全屏模式下的overlay样式 - 改为基于父组件 */\n.fullscreen-overlay {\n padding: 0;\n background-color: rgba(0, 0, 0, 0.7);\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: calc(100% - 10px);\n}\n\n.modal-container {\n background-color: #fff;\n border-radius: 8px;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n transition: all 0.3s ease-out;\n overflow: hidden;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 600px;\n min-width: 320px;\n}\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 10px 0px 0px 0px;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n}\n\n/* 模态框头部样式 */\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n\n/* 文件上传区域通用样式 */\n.upload-area {\n cursor: pointer;\n width: 100%;\n}\n\n\n.upload-placeholder {\n transition: all 0.3s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: rgba(0, 0, 0, 0.02);\n border: 1px dashed #d9d9d9;\n border-radius: 8px;\n}\n\n.upload-placeholder:hover {\n border: 1px dashed #1890ff;\n}\n\n.upload-placeholder img {\n margin-top: 8px;\n width: 50px;\n height: 50px;\n}\n\n.upload-placeholder .upload-text {\n margin: 4px 0;\n color: #332F39;\n font-size: 14px;\n}\n\n.upload-placeholder .upload-hint {\n font-size: 14px;\n color: #949AA5;\n margin-top: 8px;\n padding: 0px 10px;\n text-align: center;\n}\n\n\n/* 文件项样式 */\n.file-item {\n position: relative;\n padding: 16px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n transition: border-color 0.3s;\n cursor: pointer;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.file-item:hover {\n border-color: #0D75FB;\n}\n\n.file-item-content {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.file-icon {\n color: #0D75FB;\n flex-shrink: 0;\n}\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n.remove-file {\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n margin-left: 8px;\n border-radius: 4px;\n transition: all 0.2s;\n min-width: 30px;\n min-height: 30px;\n}\n\n.remove-file:hover {\n background-color: #f1f5f9;\n color: #475569;\n}\n\n.file-input {\n display: none;\n}\n\n\n\n/* 输入容器样式 */\n.input-container {\n padding: 20px;\n display: flex;\n flex-direction: column;\n height: calc(100% - 50px);\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;\n /* 减去header高度 */\n overflow-y: auto;\n}\n\n.input-container h3 {\n margin-top: 0;\n margin-bottom: 20px;\n font-size: 18px;\n color: #333;\n text-align: center;\n}\n\n/* JD输入区域样式 */\n.jd-input-section {\n margin-bottom: 20px;\n}\n\n.jd-input-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.job-description-textarea {\n width: calc(100% - 16px);\n border: 1px solid #ddd;\n border-radius: 4px;\n resize: vertical;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n transition: border-color 0.3s;\n padding: 8px;\n}\n\n.job-description-textarea:focus {\n outline: none;\n border-color: #1890ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n/* 简历上传区域样式 */\n.resume-upload-section {\n margin-bottom: 20px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.resume-upload-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n align-self: flex-start;\n}\n\n\n/* 提交按钮通用样式 */\n.submit-button {\n margin-top: 10px;\n padding: 10px 30px;\n background: #0D75FB;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s ease;\n width: 100%;\n max-width: 400px;\n align-self: center;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n.submit-button:disabled {\n background-color: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.25);\n cursor: not-allowed;\n}\n\n\n\n/* AI免责声明和备案信息样式 */\n.ai-disclaimer {\n margin-top: 16px;\n text-align: center;\n font-size: 12px;\n color: #999;\n line-height: 1.5;\n}\n\n.ai-disclaimer p {\n margin: 4px 0;\n}\n\n.beian-info {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ai-disclaimer a {\n color: #666;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.ai-disclaimer a:hover {\n color: #1890ff;\n text-decoration: underline;\n}\n\n/* 添加加载状态的样式 */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n }\n \n .loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--pcm-primary-color, #1890ff);\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n }\n \n .loading-text {\n font-size: 16px;\n color: var(--pcm-text-color, #333);\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n ","import { Component, Prop, State, Event, h, EventEmitter } from \"@stencil/core\";\nimport { isMobile, sendHttpRequest, PCM_DOMAIN } from \"../../utils/utils\";\nimport uploadNumberSDK from \"./uploadNumberSDK\";\nimport { Message } from \"../../services/message.service\";\nimport { Byte, Encoder } from '@nuintun/qrcode'\n\n@Component({\n tag: 'pcm-mobile-upload-btn',\n styleUrls: ['pcm-mobile-upload-btn.css', '../../global/global.css'],\n shadow: true,\n})\nexport class MobileUploadBtn {\n /**\n * 是否支持多文件上传\n */\n @Prop() multiple: boolean = false;\n /**\n * 支持的文件后缀列表(需要带上小数点.)\n */\n @Prop() acceptFileSuffixList: string[] = [];\n /**\n * 最大文件数\n */\n @Prop() maxFileCount: number = Infinity;\n /**\n * 最大文件大小\n */\n @Prop() maxFileSize: number = Infinity;\n /**\n * 上传请求头\n */\n @Prop() uploadHeaders?: Record<string, any>;\n /**\n * 上传请求参数\n */\n @Prop() uploadParams?: Record<string, any>;\n @State() QR_CODE_VALID_TIME: number = 0;\n @State() open: boolean = false;\n @State() mobileUrl: string = '';\n @State() setStartMobileUpload: boolean = false;\n @State() startMobileUploadLoading: boolean = false;\n @State() qrcodeStatus: 'active' | 'expired' | 'loading' | undefined = 'loading';\n @State() value: any[] = [];\n\n @Event() ok: EventEmitter<any[]>;\n\n private setStartMobileUploadWrapper = (e: boolean) => {\n uploadNumberSDK.isWorking = e;\n this.setStartMobileUpload = e;\n }\n\n @State() qrcodeUrl: string = '';\n private setMobileUrlWrapper = (e: string) => {\n this.mobileUrl = e;\n if (e) {\n const encoder = new Encoder();\n const qrcode = encoder.encode(new Byte(e));\n this.qrcodeUrl = qrcode.toDataURL();\n } else {\n this.qrcodeUrl = '';\n }\n }\n\n // 轮询流水号数据\n private pollingQueryNumberInfo = async (num: any) => {\n const res = await sendHttpRequest({\n url: `/sdk/v1/update_id/${num}/status`,\n method: 'get',\n });\n if (res?.success) {\n const resData: {\n update_id?: any;\n tags?: any;\n status?: any;\n file_list?: any;\n user_id?: any;\n cfg?: any;\n iat?: any;\n exp?: any;\n } = res.data ?? {};\n const { file_list } = resData;\n this.value = file_list ?? [];\n }\n if (uploadNumberSDK.isWorking) {\n setTimeout(() => {\n this.pollingQueryNumberInfo(num);\n }, 3000);\n }\n }\n\n private handleStartMobileUpload = async () => {\n const that = this;\n this.qrcodeStatus = 'loading';\n this.startMobileUploadLoading = true;\n const params = this.uploadParams ?? {};\n const reqData: {\n tags?: string[];\n cfg?: Record<string, any>;\n is_knowledge_doc?: boolean,\n } = {\n is_knowledge_doc: false,\n tags: params.tags,\n cfg: {\n maxSize: that.maxFileSize,\n maxCount: that.multiple ? that.maxFileCount : 1,\n fromUserName: '',\n fromUserId: '',\n customAccept: that.acceptFileSuffixList.join(','),\n upload: that.uploadParams,\n },\n }\n const res = await sendHttpRequest({\n url: `/sdk/v1/update_id`,\n method: 'post',\n data: reqData,\n });\n if (res?.success) {\n const resData: {\n update_id?: any;\n tags?: any;\n status?: any;\n file_list?: any;\n user_id?: any;\n cfg?: any;\n iat?: any;\n exp?: any;\n now?: any;\n custom_data?: any;\n } = res.data ?? {};\n uploadNumberSDK.number = resData.update_id;\n this.QR_CODE_VALID_TIME = Number(resData.exp) - Number(resData.now);\n const theMobileUrl = `${PCM_DOMAIN}/agents/uploadFileByCode?num=${uploadNumberSDK.number}`;\n this.setMobileUrlWrapper(theMobileUrl)\n this.setStartMobileUploadWrapper(true);\n this.qrcodeStatus = 'active';\n // 开启轮询\n this.pollingQueryNumberInfo(uploadNumberSDK.number);\n }\n this.startMobileUploadLoading = false;\n }\n\n // 取消手机上传\n @State() cancelLoading = false;\n private cancelMobileUpload = async () => {\n this.cancelLoading = true;\n await uploadNumberSDK.close({\n onError() {\n Message.info('取消失败');\n }\n })\n this.cancelLoading = false;\n this.QR_CODE_VALID_TIME = 0;\n this.setStartMobileUploadWrapper(false);\n this.setMobileUrlWrapper('');\n this.qrcodeStatus = 'expired';\n this.value = [];\n this.open = false;\n }\n\n // 删除文件\n private handleDelete = async (cos_key: any) => {\n const res = await sendHttpRequest({\n url: `/sdk/v1/update_id/${uploadNumberSDK.number}/file`,\n method: 'delete',\n params: {\n update_id: uploadNumberSDK.number,\n cos_key,\n }\n });\n if (res?.success) {\n this.value = this.value.filter(it => it.cos_key !== cos_key);\n }\n }\n\n\n render() {\n const mobile = isMobile();\n if (mobile) {\n return null\n } else {\n return (\n <div>\n <div class=\"mobile-upload\">\n <div\n class=\"btn btn-link\"\n onClick={() => {\n if (this.maxFileCount < 1) {\n Message.info('文件数量已达到上限!');\n return;\n }\n this.open = true;\n this.handleStartMobileUpload();\n }}\n >扫码上传</div>\n </div>\n {\n this.open && <div class=\"mask\">\n <div class=\"upload-wrapper\">\n {\n this.setStartMobileUpload ? <div class=\"upload-box\">\n <div class=\"qrcode-wrapper\">\n {\n this.qrcodeStatus === 'active' && <img class=\"qrcode\" src={this.qrcodeUrl} />\n }\n {\n this.qrcodeStatus === 'loading' && <span class=\"loading\">加载中...</span>\n }\n {\n this.qrcodeStatus === 'expired' && <div\n class=\"btn btn-link\"\n onClick={this.handleStartMobileUpload}\n >重新获取</div>\n }\n </div>\n <div class=\"time-expire\">\n 二维码有效期\n <span class=\"time-count-down\">\n {\n !!this.QR_CODE_VALID_TIME && <pcm-time-count-down\n time={this.QR_CODE_VALID_TIME}\n onFinished={() => {\n this.qrcodeStatus = 'expired';\n }}\n />\n }\n </span>\n </div>\n <div class=\"alert-tip\">\n 上传过程中请不要关闭此弹窗\n </div>\n {\n this.qrcodeStatus === 'active' && <div\n style={{ marginTop: '12px', fontSize: '12px' }}\n class=\"btn btn-link\"\n onClick={() => {\n navigator.clipboard\n .writeText(this.mobileUrl)\n .then(() => {\n Message.success(\"已复制到剪贴板\");\n })\n .catch(() => {\n Message.error(\"复制失败\");\n });\n }}\n >复制二维码地址</div>\n }\n </div> : (this.startMobileUploadLoading && <span class=\"loading\">加载中...</span>)\n }\n {/* 上传文件列表 */}\n <div style={{ marginTop: '12px' }}>\n {\n this.value?.map?.((item, index) => {\n return <div class=\"file-item\" key={index}>\n <div class=\"file-item-content\">\n <span class=\"file-icon\">📝</span>\n <span class=\"file-name\">{item?.file_name}</span>\n </div>\n <button class=\"remove-file\" onClick={(e) => {\n e.stopPropagation();\n this.handleDelete(item.cos_key)\n }}>×</button>\n </div>\n })\n }\n </div>\n <div class=\"modal-footer\">\n <div class=\"btn btn-default\" onClick={this.cancelMobileUpload}>取消</div>\n <div class=\"btn btn-primary\" onClick={() => {\n if (this.value.length > this.maxFileCount) {\n Message.info(`最多只能选择${this.maxFileCount}个文件,请删除多余文件!`);\n return;\n }\n this.ok.emit(this.value);\n this.cancelMobileUpload();\n }}>完成</div>\n </div>\n </div>\n </div>\n }\n </div>\n )\n }\n }\n}","",":host {\n font-size: 16px;\n}\n\n/* 模态框基础样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* 全屏模式下的overlay样式 - 改为基于父组件 */\n.fullscreen-overlay {\n padding: 0;\n background-color: rgba(0, 0, 0, 0.7);\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: calc(100% - 10px);\n}\n\n.modal-container {\n background-color: #fff;\n border-radius: 8px;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n transition: all 0.3s ease-out;\n overflow: hidden;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 600px;\n min-width: 320px;\n}\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 10px 0px 0px 0px;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n}\n\n/* 模态框头部样式 */\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n\n/* 文件上传区域通用样式 */\n.upload-area {\n cursor: pointer;\n width: 100%;\n}\n\n\n.upload-placeholder {\n transition: all 0.3s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: rgba(0, 0, 0, 0.02);\n border: 1px dashed #d9d9d9;\n border-radius: 8px;\n}\n\n.upload-placeholder:hover {\n border: 1px dashed #1890ff;\n}\n\n.upload-placeholder img {\n margin-top: 8px;\n width: 50px;\n height: 50px;\n}\n\n.upload-placeholder .upload-text {\n margin: 4px 0;\n color: #332F39;\n font-size: 14px;\n}\n\n.upload-placeholder .upload-hint {\n font-size: 14px;\n color: #949AA5;\n margin-top: 8px;\n padding: 0px 10px;\n text-align: center;\n}\n\n\n/* 文件项样式 */\n.file-item {\n position: relative;\n padding: 16px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n transition: border-color 0.3s;\n cursor: pointer;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.file-item:hover {\n border-color: #0D75FB;\n}\n\n.file-item-content {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.file-icon {\n color: #0D75FB;\n flex-shrink: 0;\n}\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n.remove-file {\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n margin-left: 8px;\n border-radius: 4px;\n transition: all 0.2s;\n min-width: 30px;\n min-height: 30px;\n}\n\n.remove-file:hover {\n background-color: #f1f5f9;\n color: #475569;\n}\n\n.file-input {\n display: none;\n}\n\n\n\n/* 输入容器样式 */\n.input-container {\n padding: 20px;\n display: flex;\n flex-direction: column;\n height: calc(100% - 50px);\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;\n /* 减去header高度 */\n overflow-y: auto;\n}\n\n.input-container h3 {\n margin-top: 0;\n margin-bottom: 20px;\n font-size: 18px;\n color: #333;\n text-align: center;\n}\n\n/* JD输入区域样式 */\n.jd-input-section {\n margin-bottom: 20px;\n}\n\n.jd-input-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.job-description-textarea {\n width: calc(100% - 16px);\n border: 1px solid #ddd;\n border-radius: 4px;\n resize: vertical;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n transition: border-color 0.3s;\n padding: 8px;\n}\n\n.job-description-textarea:focus {\n outline: none;\n border-color: #1890ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n/* 简历上传区域样式 */\n.resume-upload-section {\n margin-bottom: 20px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.resume-upload-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n align-self: flex-start;\n}\n\n\n/* 提交按钮通用样式 */\n.submit-button {\n margin-top: 10px;\n padding: 10px 30px;\n background: #0D75FB;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s ease;\n width: 100%;\n max-width: 400px;\n align-self: center;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n.submit-button:disabled {\n background-color: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.25);\n cursor: not-allowed;\n}\n\n\n\n/* AI免责声明和备案信息样式 */\n.ai-disclaimer {\n margin-top: 16px;\n text-align: center;\n font-size: 12px;\n color: #999;\n line-height: 1.5;\n}\n\n.ai-disclaimer p {\n margin: 4px 0;\n}\n\n.beian-info {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ai-disclaimer a {\n color: #666;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.ai-disclaimer a:hover {\n color: #1890ff;\n text-decoration: underline;\n}\n\n/* 添加加载状态的样式 */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n }\n \n .loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--pcm-primary-color, #1890ff);\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n }\n \n .loading-text {\n font-size: 16px;\n color: var(--pcm-text-color, #333);\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n ","import { Component, Prop, h, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\nimport { uploadFileToBackend, FileUploadResponse, verifyApiKey } from '../../utils/utils';\nimport { ConversationStartEventData, ErrorEventDetail, InterviewCompleteEventData, StreamCompleteEventData } from '../../components';\nimport { ErrorEventBus } from '../../utils/error-event';\nimport { authStore } from '../../../store/auth.store';\nimport { configStore } from '../../../store/config.store';\nimport { SentryReporter } from '../../utils/sentry-reporter';\n\n/**\n * 面试报告\n */\n\n@Component({\n tag: 'pcm-msbg-modal',\n styleUrls: ['pcm-msbg-modal.css', '../../global/global.css'],\n shadow: true,\n})\nexport class MsbgModal {\n /**\n * 模态框标题\n */\n @Prop() modalTitle: string = '面试报告';\n\n /**\n * SDK鉴权密钥\n */\n @Prop({ attribute: 'token' }) token!: string;\n\n /**\n * 是否显示聊天模态框\n */\n @Prop({ mutable: true }) isOpen: boolean = false;\n\n /**\n * 当点击模态框关闭时触发\n */\n @Event() modalClosed: EventEmitter<void>;\n\n /**\n * 应用图标URL\n */\n @Prop() icon?: string;\n\n /**\n * 聊天框的页面层级\n */\n @Prop() zIndex?: number = 1000;\n\n /**\n * 是否展示顶部标题栏\n */\n @Prop() isShowHeader: boolean = true;\n\n /**\n * 是否展示右上角的关闭按钮\n */\n @Prop() isNeedClose: boolean = true;\n\n /**\n * 会话ID,传入继续对话,否则创建新会话\n */\n @Prop({ mutable: true }) conversationId?: string;\n\n /**\n * 默认查询文本\n */\n @Prop() defaultQuery: string = '请开始分析';\n\n /**\n * 是否以全屏模式打开,移动端建议设置为true\n */\n @Prop() fullscreen: boolean = false;\n\n /**\n * 自定义输入参数,传入customInputs.job_info时,会隐藏JD输入区域<br>\n * 传入customInputs.file_urls时,会隐藏简历上传区域。<br>\n * 传入customInputs.file_urls和customInputs.job_info时,会直接开始聊天。<br>\n */\n @Prop() customInputs: Record<string, string>= {};\n\n /**\n * 是否显示工作区历史会话按钮\n */\n @Prop() showWorkspaceHistory: boolean = false;\n\n /**\n * 上传成功事件\n */\n @Event() uploadSuccess: EventEmitter<FileUploadResponse>;\n\n /**\n * 流式输出完成事件\n */\n @Event() streamComplete: EventEmitter<StreamCompleteEventData>;\n\n /**\n * 新会话开始的回调,只会在一轮对话开始时触发一次\n */\n @Event() conversationStart: EventEmitter<ConversationStartEventData>;\n\n /**\n * 当聊天完成时触发\n */\n @Event() interviewComplete: EventEmitter<InterviewCompleteEventData>;\n\n /**\n * SDK密钥验证失败事件\n */\n @Event() tokenInvalid: EventEmitter<void>;\n\n /**\n * 错误事件\n */\n @Event() someErrorEvent: EventEmitter<ErrorEventDetail>;\n\n /**\n * 附件预览模式\n * 'drawer': 在右侧抽屉中预览\n * 'window': 在新窗口中打开\n */\n @Prop() filePreviewMode: 'drawer' | 'window' = 'window';\n\n @State() selectedFile: File | null = null;\n @State() isUploading: boolean = false;\n @State() uploadedFileInfo: FileUploadResponse | null = null;\n @State() showChatModal: boolean = false;\n\n // 使用 @Element 装饰器获取组件的 host 元素\n @Element() hostElement: HTMLElement;\n\n @State() jobDescription: string = '';\n @State() isSubmitting: boolean = false;\n\n private tokenInvalidListener: () => void;\n private removeErrorListener: () => void;\n\n @Watch('token')\n handleTokenChange(newToken: string) {\n // 当传入的 token 变化时,更新 authStore 中的 token\n if (newToken && newToken !== authStore.getToken()) {\n authStore.setToken(newToken);\n }\n }\n\n @Watch('isOpen')\n async handleIsOpenChange(newValue: boolean) {\n if (!newValue) {\n // 重置状态\n this.clearSelectedFile();\n this.showChatModal = false;\n this.jobDescription = '';\n } else {\n if (this.customInputs && this.customInputs.job_info) {\n this.jobDescription = this.customInputs.job_info;\n }\n\n await verifyApiKey(this.token);\n\n // 如果有会话ID或者同时有file_urls和job_info,直接显示聊天模态框\n if (this.conversationId || (this.customInputs?.file_urls && this.customInputs?.job_info)) {\n this.showChatModal = true;\n }\n }\n }\n\n\n componentWillLoad() {\n \n \n // 将 zIndex 存入配置缓存\n if (this.zIndex) {\n configStore.setItem('modal-zIndex', this.zIndex);\n }\n if (this.token) {\n authStore.setToken(this.token);\n }\n // 添加全局token无效事件监听器\n this.tokenInvalidListener = () => {\n this.tokenInvalid.emit();\n };\n // 添加全局错误监听\n this.removeErrorListener = ErrorEventBus.addErrorListener((errorDetail) => {\n this.someErrorEvent.emit(errorDetail);\n });\n document.addEventListener('pcm-token-invalid', this.tokenInvalidListener);\n }\n\n disconnectedCallback() {\n // 组件销毁时移除事件监听器\n document.removeEventListener('pcm-token-invalid', this.tokenInvalidListener);\n // 移除错误监听器\n if (this.removeErrorListener) {\n this.removeErrorListener();\n }\n }\n\n\n private handleClose = () => {\n this.modalClosed.emit();\n };\n\n private handleFileChange = (event: Event) => {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.selectedFile = input.files[0];\n }\n };\n\n private handleUploadClick = () => {\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\n fileInput?.click();\n };\n\n private clearSelectedFile = () => {\n this.selectedFile = null;\n this.uploadedFileInfo = null;\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\n if (fileInput) {\n fileInput.value = '';\n }\n };\n\n private async uploadFile() {\n if (!this.selectedFile) return;\n\n this.isUploading = true;\n\n try {\n // 使用 uploadFileToBackend 工具函数上传文件\n const result = await uploadFileToBackend(this.selectedFile, {\n }, {\n 'tags': ['other']\n });\n\n this.uploadedFileInfo = result;\n this.uploadSuccess.emit(result);\n } catch (error) {\n console.error('文件上传错误:', error);\n this.clearSelectedFile();\n SentryReporter.captureError(error, {\n action: 'uploadFile',\n component: 'pcm-msbg-modal',\n title: '文件上传失败'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '文件上传失败,请重试'\n });\n } finally {\n this.isUploading = false;\n }\n }\n\n private handleJobDescriptionChange = (event: Event) => {\n const textarea = event.target as HTMLTextAreaElement;\n this.jobDescription = textarea.value;\n };\n\n private handleStartInterview = async () => {\n if (!this.selectedFile) {\n alert('请上传面试内容');\n return;\n }\n\n // 如果没有预设的job_info,则需要检查用户输入\n if (!this.customInputs?.job_info && !this.jobDescription.trim()) {\n alert('请输入职位描述');\n return;\n }\n\n this.isSubmitting = true;\n\n try {\n // 如果还没上传,先上传文件\n if (!this.uploadedFileInfo) {\n await this.uploadFile();\n if (!this.uploadedFileInfo) {\n this.isSubmitting = false;\n return; // 上传失败\n }\n }\n\n // 直接显示聊天模态框\n this.showChatModal = true;\n } catch (error) {\n console.error('开始面试时出错:', error);\n SentryReporter.captureError(error, {\n action: 'handleStartInterview',\n component: 'pcm-msbg-modal',\n title: '开始面试时出错'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '开始面试时出错,请重试'\n });\n } finally {\n this.isSubmitting = false;\n }\n };\n\n render() {\n if (!this.isOpen) return null;\n\n const modalStyle = {\n zIndex: String(this.zIndex)\n };\n\n\n const containerClass = {\n 'modal-container': true,\n 'fullscreen': this.fullscreen,\n 'pc-layout': true,\n };\n\n const overlayClass = {\n 'modal-overlay': true,\n 'fullscreen-overlay': this.fullscreen\n };\n\n // 显示加载状态\n const isLoading = this.conversationId && !this.showChatModal;\n\n // 确保当 customInputs.job_info 存在时,hideJdInput 为 true\n const hideJdInput = Boolean(this.customInputs && this.customInputs.job_info);\n \n // 判断是否隐藏面试内容上传区域\n const hideFileUpload = Boolean(this.customInputs && this.customInputs.file_urls);\n \n // 判断是否同时提供了file_urls和job_info\n const hasFileAndJob = Boolean(this.customInputs?.file_urls && this.customInputs?.job_info);\n\n return (\n <div class={overlayClass} style={modalStyle}>\n <div class={containerClass}>\n {this.isShowHeader && (\n <div class=\"modal-header\">\n <div class=\"header-left\">\n {this.icon && <img src={this.icon} class=\"header-icon\" alt=\"应用图标\" />}\n <div>{this.modalTitle}</div>\n </div>\n {this.isNeedClose && (\n <button class=\"close-button\" onClick={this.handleClose}>\n <span>×</span>\n </button>\n )}\n </div>\n )}\n\n {/* 上传界面 - 仅在不显示聊天模态框且没有会话ID且没有同时提供file_urls和job_info时显示 */}\n {!this.showChatModal && !this.conversationId && !hasFileAndJob && (\n <div class=\"input-container\">\n {/* JD输入区域 - 仅在没有parsedCustomInputs.job_info时显示 */}\n {!hideJdInput && (\n <div class=\"jd-input-section\">\n <label htmlFor=\"job-description\">请输入职位描述 (JD)</label>\n <textarea\n id=\"job-description\"\n class=\"job-description-textarea\"\n placeholder=\"请输入职位描述,包括职责、要求等信息...\"\n rows={6}\n value={this.jobDescription}\n onInput={this.handleJobDescriptionChange}\n ></textarea>\n </div>\n )}\n\n {/* 上传面试内容上传区域 - 仅在没有customInputs.file_urls时显示 */}\n {!hideFileUpload && (\n <div class=\"resume-upload-section\">\n <label>上传面试内容</label>\n <div class=\"upload-area\" onClick={this.handleUploadClick}>\n {this.selectedFile ? (\n <div class=\"file-item\">\n <div class=\"file-item-content\">\n <span class=\"file-icon\">📝</span>\n <span class=\"file-name\">{this.selectedFile.name}</span>\n </div>\n <button class=\"remove-file\" onClick={(e) => {\n e.stopPropagation();\n this.clearSelectedFile();\n }}>×</button>\n </div>\n ) : (\n <div class=\"upload-placeholder\">\n <img src='https://pub.pincaimao.com/static/web/images/home/i_upload.png'></img>\n <p class='upload-text'>点击上传面试内容</p>\n <p class=\"upload-hint\">支持 mp3、markdown、pdf、docx、doc、md 格式</p>\n </div>\n )}\n </div>\n </div>\n )}\n\n <button\n class=\"submit-button\"\n disabled={(!hideFileUpload && !this.selectedFile) || (!hideJdInput && !this.jobDescription.trim()) || this.isUploading || this.isSubmitting}\n onClick={this.handleStartInterview}\n >\n {this.isUploading ? '上传中...' : this.isSubmitting ? '处理中...' : '开始分析'}\n </button>\n\n <div class=\"ai-disclaimer\">\n <p>所有内容均由AI生成仅供参考</p>\n <p class=\"beian-info\">\n <span>中央网信办生成式人工智能服务备案号</span>:\n <a href=\"https://www.pincaimao.com\" target=\"_blank\" rel=\"noopener noreferrer\">Hunan-PinCaiMao-202412310003</a>\n </p>\n </div>\n\n <input\n type=\"file\"\n class=\"file-input\"\n onChange={this.handleFileChange}\n />\n </div>\n )}\n\n {/* 加载状态 - 在有会话ID但聊天模态框尚未显示时展示 */}\n {isLoading && (\n <div class=\"loading-container\">\n <div class=\"loading-spinner\"></div>\n <p class=\"loading-text\">正在加载对话...</p>\n </div>\n )}\n\n {/* 聊天界面 - 在显示聊天模态框时显示 */}\n {this.showChatModal && (\n <div >\n <pcm-app-chat-modal\n isOpen={true}\n modalTitle={this.modalTitle}\n icon={this.icon}\n isShowHeader={this.isShowHeader}\n isNeedClose={this.isShowHeader}\n fullscreen={this.fullscreen}\n showWorkspaceHistory={this.showWorkspaceHistory}\n botId=\"3022316191018877\"\n conversationId={this.conversationId}\n defaultQuery={this.defaultQuery}\n filePreviewMode={this.filePreviewMode}\n enableVoice={false}\n customInputs={this.conversationId ? {} : {\n ...this.customInputs,\n file_urls: this.customInputs?.file_urls || this.uploadedFileInfo?.cos_key,\n file_names: this.customInputs?.file_names || this.uploadedFileInfo?.file_name,\n job_info: this.customInputs?.job_info || this.jobDescription\n }}\n interviewMode=\"text\"\n ></pcm-app-chat-modal>\n </div>\n )}\n </div>\n </div>\n );\n }\n} ","\n",":host {\n font-size: 16px;\n}\n\n/* 模态框基础样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* 全屏模式下的overlay样式 - 改为基于父组件 */\n.fullscreen-overlay {\n padding: 0;\n background-color: rgba(0, 0, 0, 0.7);\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: calc(100% - 10px);\n}\n\n.modal-container {\n background-color: #fff;\n border-radius: 8px;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n transition: all 0.3s ease-out;\n overflow: hidden;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 600px;\n min-width: 320px;\n}\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 10px 0px 0px 0px;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n}\n\n/* 模态框头部样式 */\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n\n/* 文件上传区域通用样式 */\n.upload-area {\n cursor: pointer;\n width: 100%;\n}\n\n\n.upload-placeholder {\n transition: all 0.3s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: rgba(0, 0, 0, 0.02);\n border: 1px dashed #d9d9d9;\n border-radius: 8px;\n}\n\n.upload-placeholder:hover {\n border: 1px dashed #1890ff;\n}\n\n.upload-placeholder img {\n margin-top: 8px;\n width: 50px;\n height: 50px;\n}\n\n.upload-placeholder .upload-text {\n margin: 4px 0;\n color: #332F39;\n font-size: 14px;\n}\n\n.upload-placeholder .upload-hint {\n font-size: 14px;\n color: #949AA5;\n margin-top: 8px;\n padding: 0px 10px;\n text-align: center;\n}\n\n\n/* 文件项样式 */\n.file-item {\n position: relative;\n padding: 16px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n transition: border-color 0.3s;\n cursor: pointer;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.file-item:hover {\n border-color: #0D75FB;\n}\n\n.file-item-content {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.file-icon {\n color: #0D75FB;\n flex-shrink: 0;\n}\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n.remove-file {\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n margin-left: 8px;\n border-radius: 4px;\n transition: all 0.2s;\n min-width: 30px;\n min-height: 30px;\n}\n\n.remove-file:hover {\n background-color: #f1f5f9;\n color: #475569;\n}\n\n.file-input {\n display: none;\n}\n\n\n\n/* 输入容器样式 */\n.input-container {\n padding: 20px;\n display: flex;\n flex-direction: column;\n height: calc(100% - 50px);\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;\n /* 减去header高度 */\n overflow-y: auto;\n}\n\n.input-container h3 {\n margin-top: 0;\n margin-bottom: 20px;\n font-size: 18px;\n color: #333;\n text-align: center;\n}\n\n/* JD输入区域样式 */\n.jd-input-section {\n margin-bottom: 20px;\n}\n\n.jd-input-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.job-description-textarea {\n width: calc(100% - 16px);\n border: 1px solid #ddd;\n border-radius: 4px;\n resize: vertical;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n transition: border-color 0.3s;\n padding: 8px;\n}\n\n.job-description-textarea:focus {\n outline: none;\n border-color: #1890ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n/* 简历上传区域样式 */\n.resume-upload-section {\n margin-bottom: 20px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.resume-upload-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n align-self: flex-start;\n}\n\n\n/* 提交按钮通用样式 */\n.submit-button {\n margin-top: 10px;\n padding: 10px 30px;\n background: #0D75FB;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s ease;\n width: 100%;\n max-width: 400px;\n align-self: center;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n.submit-button:disabled {\n background-color: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.25);\n cursor: not-allowed;\n}\n\n\n\n/* AI免责声明和备案信息样式 */\n.ai-disclaimer {\n margin-top: 16px;\n text-align: center;\n font-size: 12px;\n color: #999;\n line-height: 1.5;\n}\n\n.ai-disclaimer p {\n margin: 4px 0;\n}\n\n.beian-info {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ai-disclaimer a {\n color: #666;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.ai-disclaimer a:hover {\n color: #1890ff;\n text-decoration: underline;\n}\n\n/* 添加加载状态的样式 */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n }\n \n .loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--pcm-primary-color, #1890ff);\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n }\n \n .loading-text {\n font-size: 16px;\n color: var(--pcm-text-color, #333);\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n ","import { Component, Prop, h, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\nimport { uploadFileToBackend, FileUploadResponse, verifyApiKey } from '../../utils/utils';\nimport { ConversationStartEventData, InterviewCompleteEventData, StreamCompleteEventData } from '../../components';\nimport { ErrorEventBus, ErrorEventDetail } from '../../utils/error-event';\nimport { authStore } from '../../../store/auth.store';\nimport { configStore } from '../../../store/config.store';\nimport { SentryReporter } from '../../utils/sentry-reporter';\n\n/**\n * 千岗千简历\n */\n\n@Component({\n tag: 'pcm-qgqjl-modal',\n styleUrls: ['pcm-qgqjl-modal.css', '../../global/global.css'],\n shadow: true,\n})\nexport class QgqjlModal {\n /**\n * 模态框标题\n */\n @Prop() modalTitle: string = '千岗千简历';\n\n /**\n * SDK鉴权密钥\n */\n @Prop({ attribute: 'token' }) token!: string;\n\n /**\n * 是否显示聊天模态框\n */\n @Prop({ mutable: true }) isOpen: boolean = false;\n\n /**\n * 当点击模态框关闭时触发\n */\n @Event() modalClosed: EventEmitter<void>;\n\n /**\n * 应用图标URL\n */\n @Prop() icon?: string;\n\n /**\n * 聊天框的页面层级\n */\n @Prop() zIndex?: number = 1000;\n\n /**\n * 是否展示顶部标题栏\n */\n @Prop() isShowHeader: boolean = true;\n\n /**\n * 是否展示右上角的关闭按钮\n */\n @Prop() isNeedClose: boolean = true;\n\n /**\n * 会话ID,传入继续对话,否则创建新会话\n */\n @Prop({ mutable: true }) conversationId?: string;\n\n /**\n * 默认查询文本\n */\n @Prop() defaultQuery: string = '请开始出题';\n\n /**\n * 是否以全屏模式打开,移动端建议设置为true\n */\n @Prop() fullscreen: boolean = false;\n\n /**\n * 自定义输入参数,传入customInputs.job_info时,会隐藏JD输入区域<br>\n * 传入customInputs.file_url时,会隐藏简历上传区域。<br>\n * 传入customInputs.file_url和customInputs.job_info时,会直接开始聊天。<br>\n */\n @Prop() customInputs: Record<string, string> = {};\n\n /**\n * 是否显示工作区历史会话按钮\n */\n @Prop() showWorkspaceHistory: boolean = false;\n\n /**\n * 上传成功事件\n */\n @Event() uploadSuccess: EventEmitter<FileUploadResponse>;\n\n /**\n * 流式输出完成事件\n */\n @Event() streamComplete: EventEmitter<StreamCompleteEventData>;\n\n /**\n * 新会话开始的回调,只会在一轮对话开始时触发一次\n */\n @Event() conversationStart: EventEmitter<ConversationStartEventData>;\n\n /**\n * 当聊天完成时触发\n */\n @Event() interviewComplete: EventEmitter<InterviewCompleteEventData>;\n\n /**\n * SDK密钥验证失败事件\n */\n @Event() tokenInvalid: EventEmitter<void>;\n\n /**\n * 错误事件\n */\n @Event() someErrorEvent: EventEmitter<ErrorEventDetail>;\n\n /**\n * 附件预览模式\n * 'drawer': 在右侧抽屉中预览\n * 'window': 在新窗口中打开\n */\n @Prop() filePreviewMode: 'drawer' | 'window' = 'window';\n\n @State() selectedFile: File | null = null;\n @State() isUploading: boolean = false;\n @State() uploadedFileInfo: FileUploadResponse | null = null;\n @State() showChatModal: boolean = false;\n\n // 使用 @Element 装饰器获取组件的 host 元素\n @Element() hostElement: HTMLElement;\n\n @State() jobDescription: string = '';\n @State() isSubmitting: boolean = false;\n\n\n private tokenInvalidListener: () => void;\n private removeErrorListener: () => void;\n\n @Watch('token')\n handleTokenChange(newToken: string) {\n // 当传入的 token 变化时,更新 authStore 中的 token\n if (newToken && newToken !== authStore.getToken()) {\n authStore.setToken(newToken);\n }\n }\n\n\n @Watch('isOpen')\n async handleIsOpenChange(newValue: boolean) {\n if (!newValue) {\n // 重置状态\n this.clearSelectedFile();\n this.showChatModal = false;\n this.jobDescription = '';\n } else {\n if (this.customInputs && this.customInputs.job_info) {\n this.jobDescription = this.customInputs.job_info;\n }\n\n await verifyApiKey(this.token);\n\n // 如果有会话ID或者同时有file_url和job_info,直接显示聊天模态框\n if (this.conversationId || (this.customInputs?.file_url && this.customInputs?.job_info)) {\n this.showChatModal = true;\n }\n }\n }\n\n \n\n componentWillLoad() {\n \n\n // 将 zIndex 存入配置缓存\n if (this.zIndex) {\n configStore.setItem('modal-zIndex', this.zIndex);\n }\n if (this.token) {\n authStore.setToken(this.token);\n }\n\n // 添加全局token无效事件监听器\n this.tokenInvalidListener = () => {\n this.tokenInvalid.emit();\n };\n // 添加全局错误监听\n this.removeErrorListener = ErrorEventBus.addErrorListener((errorDetail) => {\n this.someErrorEvent.emit(errorDetail);\n });\n document.addEventListener('pcm-token-invalid', this.tokenInvalidListener);\n }\n\n disconnectedCallback() {\n // 组件销毁时移除事件监听器\n document.removeEventListener('pcm-token-invalid', this.tokenInvalidListener);\n // 移除错误监听器\n if (this.removeErrorListener) {\n this.removeErrorListener();\n }\n }\n\n\n private handleClose = () => {\n this.modalClosed.emit();\n };\n\n private handleFileChange = (event: Event) => {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.selectedFile = input.files[0];\n }\n };\n\n private handleUploadClick = () => {\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\n fileInput?.click();\n };\n\n private clearSelectedFile = () => {\n this.selectedFile = null;\n this.uploadedFileInfo = null;\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\n if (fileInput) {\n fileInput.value = '';\n }\n };\n\n private async uploadFile() {\n if (!this.selectedFile) return;\n\n this.isUploading = true;\n\n try {\n // 使用 uploadFileToBackend 工具函数上传文件\n const result = await uploadFileToBackend(this.selectedFile, {\n }, {\n 'tags': ['resume']\n });\n\n this.uploadedFileInfo = result;\n this.uploadSuccess.emit(result);\n } catch (error) {\n console.error('文件上传错误:', error);\n this.clearSelectedFile();\n SentryReporter.captureError(error, {\n action: 'uploadFile',\n component: 'pcm-qgqjl-modal',\n title: '文件上传失败'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '文件上传失败,请重试'\n });\n } finally {\n this.isUploading = false;\n }\n }\n\n private handleJobDescriptionChange = (event: Event) => {\n const textarea = event.target as HTMLTextAreaElement;\n this.jobDescription = textarea.value;\n };\n\n private handleStartInterview = async () => {\n if (!this.selectedFile) {\n alert('请上传简历');\n return;\n }\n\n // 如果没有预设的job_info,则需要检查用户输入\n if (!this.customInputs?.job_info && !this.jobDescription.trim()) {\n alert('请输入职位描述');\n return;\n }\n\n this.isSubmitting = true;\n\n try {\n // 如果还没上传,先上传文件\n if (!this.uploadedFileInfo) {\n await this.uploadFile();\n if (!this.uploadedFileInfo) {\n this.isSubmitting = false;\n return; // 上传失败\n }\n }\n\n // 直接显示聊天模态框\n this.showChatModal = true;\n } catch (error) {\n console.error('开始面试时出错:', error);\n SentryReporter.captureError(error, {\n action: 'handleStartInterview',\n component: 'pcm-qgqjl-modal',\n title: '开始面试时出错'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '开始面试时出错,请重试'\n });\n } finally {\n this.isSubmitting = false;\n }\n };\n\n render() {\n if (!this.isOpen) return null;\n\n const modalStyle = {\n zIndex: String(this.zIndex)\n };\n\n\n const containerClass = {\n 'modal-container': true,\n 'fullscreen': this.fullscreen,\n 'pc-layout': true,\n };\n\n const overlayClass = {\n 'modal-overlay': true,\n 'fullscreen-overlay': this.fullscreen\n };\n\n // 显示加载状态\n const isLoading = this.conversationId && !this.showChatModal;\n\n // 修正这里的逻辑,确保当 customInputs.job_info 存在时,hideJdInput 为 true\n const hideJdInput = Boolean(this.customInputs && this.customInputs.job_info);\n \n // 判断是否隐藏简历上传区域\n const hideResumeUpload = Boolean(this.customInputs && this.customInputs.file_url);\n \n // 判断是否同时提供了file_url和job_info\n const hasFileAndJob = Boolean(this.customInputs?.file_url && this.customInputs?.job_info);\n\n return (\n <div class={overlayClass} style={modalStyle}>\n <div class={containerClass}>\n {this.isShowHeader && (\n <div class=\"modal-header\">\n <div class=\"header-left\">\n {this.icon && <img src={this.icon} class=\"header-icon\" alt=\"应用图标\" />}\n <div>{this.modalTitle}</div>\n </div>\n {this.isNeedClose && (\n <button class=\"close-button\" onClick={this.handleClose}>\n <span>×</span>\n </button>\n )}\n </div>\n )}\n\n {/* 上传界面 - 仅在不显示聊天模态框且没有会话ID且没有同时提供file_url和job_info时显示 */}\n {!this.showChatModal && !this.conversationId && !hasFileAndJob && (\n <div class=\"input-container\">\n {/* JD输入区域 - 仅在没有customInputs.job_info时显示 */}\n {!hideJdInput && (\n <div class=\"jd-input-section\">\n <label htmlFor=\"job-description\">请输入职位描述 (JD)</label>\n <textarea\n id=\"job-description\"\n class=\"job-description-textarea\"\n placeholder=\"请输入职位描述,包括职责、要求等信息...\"\n rows={6}\n value={this.jobDescription}\n onInput={this.handleJobDescriptionChange}\n ></textarea>\n </div>\n )}\n\n {/* 简历上传区域 - 仅在没有customInputs.file_url时显示 */}\n {!hideResumeUpload && (\n <div class=\"resume-upload-section\">\n <label>上传简历</label>\n <div class=\"upload-area\" onClick={this.handleUploadClick}>\n {this.selectedFile ? (\n <div class=\"file-item\">\n <div class=\"file-item-content\">\n <span class=\"file-icon\">📝</span>\n <span class=\"file-name\">{this.selectedFile.name}</span>\n </div>\n <button class=\"remove-file\" onClick={(e) => {\n e.stopPropagation();\n this.clearSelectedFile();\n }}>×</button>\n </div>\n ) : (\n <div class=\"upload-placeholder\">\n <img src='https://pub.pincaimao.com/static/web/images/home/i_upload.png'></img>\n <p class='upload-text'>点击上传简历</p>\n <p class=\"upload-hint\">支持 txt、markdown、pdf、docx、doc、md 格式</p>\n </div>\n )}\n </div>\n </div>\n )}\n\n <button\n class=\"submit-button\"\n disabled={(!hideResumeUpload && !this.selectedFile) || (!hideJdInput && !this.jobDescription.trim()) || this.isUploading || this.isSubmitting}\n onClick={this.handleStartInterview}\n >\n {this.isUploading ? '上传中...' : this.isSubmitting ? '处理中...' : '开始分析'}\n </button>\n\n <div class=\"ai-disclaimer\">\n <p>所有内容均由AI生成仅供参考</p>\n <p class=\"beian-info\">\n <span>中央网信办生成式人工智能服务备案号</span>:\n <a href=\"https://www.pincaimao.com\" target=\"_blank\" rel=\"noopener noreferrer\">Hunan-PinCaiMao-202412310003</a>\n </p>\n </div>\n\n <input\n type=\"file\"\n class=\"file-input\"\n onChange={this.handleFileChange}\n />\n </div>\n )}\n\n {/* 加载状态 - 在有会话ID但聊天模态框尚未显示时展示 */}\n {isLoading && (\n <div class=\"loading-container\">\n <div class=\"loading-spinner\"></div>\n <p class=\"loading-text\">正在加载对话...</p>\n </div>\n )}\n\n {/* 聊天界面 - 在显示聊天模态框时显示 */}\n {this.showChatModal && (\n <div>\n <pcm-app-chat-modal\n isOpen={true}\n modalTitle={this.modalTitle}\n icon={this.icon}\n isShowHeader={this.isShowHeader}\n isNeedClose={this.isShowHeader}\n fullscreen={this.fullscreen}\n showWorkspaceHistory={this.showWorkspaceHistory}\n botId=\"45444431062634496\"\n conversationId={this.conversationId}\n defaultQuery={this.defaultQuery}\n filePreviewMode={this.filePreviewMode}\n enableVoice={false}\n customInputs={this.conversationId ? {} : {\n ...this.customInputs,\n file_url: this.customInputs?.file_url || this.uploadedFileInfo?.cos_key,\n file_name: this.customInputs?.file_name || this.uploadedFileInfo?.file_name,\n job_info: this.customInputs?.job_info || this.jobDescription\n }}\n interviewMode=\"text\"\n ></pcm-app-chat-modal>\n </div>\n )}\n </div>\n </div>\n );\n }\n} ","",":host {\n font-size: 16px;\n}\n\n/* 模态框基础样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* 全屏模式下的overlay样式 - 改为基于父组件 */\n.fullscreen-overlay {\n padding: 0;\n background-color: rgba(0, 0, 0, 0.7);\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: calc(100% - 10px);\n}\n\n.modal-container {\n background-color: #fff;\n border-radius: 8px;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n transition: all 0.3s ease-out;\n overflow: hidden;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 600px;\n min-width: 320px;\n}\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 10px 0px 0px 0px;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n}\n\n/* 模态框头部样式 */\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n\n/* 文件上传区域通用样式 */\n.upload-area {\n cursor: pointer;\n width: 100%;\n}\n\n\n.upload-placeholder {\n transition: all 0.3s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: rgba(0, 0, 0, 0.02);\n border: 1px dashed #d9d9d9;\n border-radius: 8px;\n}\n\n.upload-placeholder:hover {\n border: 1px dashed #1890ff;\n}\n\n.upload-placeholder img {\n margin-top: 8px;\n width: 50px;\n height: 50px;\n}\n\n.upload-placeholder .upload-text {\n margin: 4px 0;\n color: #332F39;\n font-size: 14px;\n}\n\n.upload-placeholder .upload-hint {\n font-size: 14px;\n color: #949AA5;\n margin-top: 8px;\n padding: 0px 10px;\n text-align: center;\n}\n\n\n/* 文件项样式 */\n.file-item {\n position: relative;\n padding: 16px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n transition: border-color 0.3s;\n cursor: pointer;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.file-item:hover {\n border-color: #0D75FB;\n}\n\n.file-item-content {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.file-icon {\n color: #0D75FB;\n flex-shrink: 0;\n}\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n.remove-file {\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n margin-left: 8px;\n border-radius: 4px;\n transition: all 0.2s;\n min-width: 30px;\n min-height: 30px;\n}\n\n.remove-file:hover {\n background-color: #f1f5f9;\n color: #475569;\n}\n\n.file-input {\n display: none;\n}\n\n\n\n/* 输入容器样式 */\n.input-container {\n padding: 20px;\n display: flex;\n flex-direction: column;\n height: calc(100% - 50px);\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;\n /* 减去header高度 */\n overflow-y: auto;\n}\n\n.input-container h3 {\n margin-top: 0;\n margin-bottom: 20px;\n font-size: 18px;\n color: #333;\n text-align: center;\n}\n\n/* JD输入区域样式 */\n.jd-input-section {\n margin-bottom: 20px;\n}\n\n.jd-input-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.job-description-textarea {\n width: calc(100% - 16px);\n border: 1px solid #ddd;\n border-radius: 4px;\n resize: vertical;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n transition: border-color 0.3s;\n padding: 8px;\n}\n\n.job-description-textarea:focus {\n outline: none;\n border-color: #1890ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n/* 简历上传区域样式 */\n.resume-upload-section {\n margin-bottom: 20px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.resume-upload-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n align-self: flex-start;\n}\n\n\n/* 提交按钮通用样式 */\n.submit-button {\n margin-top: 10px;\n padding: 10px 30px;\n background: #0D75FB;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s ease;\n width: 100%;\n max-width: 400px;\n align-self: center;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n.submit-button:disabled {\n background-color: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.25);\n cursor: not-allowed;\n}\n\n\n\n/* AI免责声明和备案信息样式 */\n.ai-disclaimer {\n margin-top: 16px;\n text-align: center;\n font-size: 12px;\n color: #999;\n line-height: 1.5;\n}\n\n.ai-disclaimer p {\n margin: 4px 0;\n}\n\n.beian-info {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ai-disclaimer a {\n color: #666;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.ai-disclaimer a:hover {\n color: #1890ff;\n text-decoration: underline;\n}\n\n/* 添加加载状态的样式 */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n }\n \n .loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--pcm-primary-color, #1890ff);\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n }\n \n .loading-text {\n font-size: 16px;\n color: var(--pcm-text-color, #333);\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n ","import { Component, EventEmitter, Prop, Event, h, State, Watch } from \"@stencil/core\";\n\nconst formatNumber = (n: number) => {\n const str = n.toString();\n return str[1] ? str : `0${str}`;\n}\n\n// 时间转时分秒\nconst timeToHMS = (time: number) => {\n const hour = Math.floor(time / 3600);\n const minute = Math.floor((time - hour * 3600) / 60);\n const second = time - hour * 3600 - minute * 60;\n return `${formatNumber(hour)}:${formatNumber(minute)}:${formatNumber(second)}`;\n}\n\n@Component({\n tag: 'pcm-time-count-down',\n styleUrls: ['pcm-time-count-down.css', '../../global/global.css'],\n shadow: true,\n})\nexport class TimeCountDown {\n /**\n * 倒计时总秒数\n */\n @Prop() time: number;\n /**\n * 倒计时结束事件\n */\n @Event() finished: EventEmitter;\n\n @State() currentTime: number;\n\n componentWillLoad() {\n this.currentTime = this.time;\n }\n\n @Watch('currentTime')\n watchStateHandler(currentTime) {\n let timer;\n if (currentTime > 0) {\n timer = setTimeout(() => {\n this.currentTime = currentTime - 1;\n clearTimeout(timer);\n }, 1000);\n } else {\n this.finished.emit();\n }\n }\n\n render() {\n return <span>{timeToHMS(this.currentTime)}</span>\n }\n}\n","",":host {\n font-size: 16px;\n}\n\n/* 模态框基础样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* 全屏模式下的overlay样式 - 改为基于父组件 */\n.fullscreen-overlay {\n padding: 0;\n background-color: rgba(0, 0, 0, 0.7);\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: calc(100% - 10px);\n}\n\n.modal-container {\n background-color: #fff;\n border-radius: 8px;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n transition: all 0.3s ease-out;\n overflow: hidden;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 600px;\n min-width: 320px;\n}\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 10px 0px 0px 0px;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n}\n\n/* 模态框头部样式 */\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n\n/* 文件上传区域通用样式 */\n.upload-area {\n cursor: pointer;\n width: 100%;\n}\n\n\n.upload-placeholder {\n transition: all 0.3s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: rgba(0, 0, 0, 0.02);\n border: 1px dashed #d9d9d9;\n border-radius: 8px;\n}\n\n.upload-placeholder:hover {\n border: 1px dashed #1890ff;\n}\n\n.upload-placeholder img {\n margin-top: 8px;\n width: 50px;\n height: 50px;\n}\n\n.upload-placeholder .upload-text {\n margin: 4px 0;\n color: #332F39;\n font-size: 14px;\n}\n\n.upload-placeholder .upload-hint {\n font-size: 14px;\n color: #949AA5;\n margin-top: 8px;\n padding: 0px 10px;\n text-align: center;\n}\n\n\n/* 文件项样式 */\n.file-item {\n position: relative;\n padding: 16px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n transition: border-color 0.3s;\n cursor: pointer;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.file-item:hover {\n border-color: #0D75FB;\n}\n\n.file-item-content {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.file-icon {\n color: #0D75FB;\n flex-shrink: 0;\n}\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n.remove-file {\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n margin-left: 8px;\n border-radius: 4px;\n transition: all 0.2s;\n min-width: 30px;\n min-height: 30px;\n}\n\n.remove-file:hover {\n background-color: #f1f5f9;\n color: #475569;\n}\n\n.file-input {\n display: none;\n}\n\n\n\n/* 输入容器样式 */\n.input-container {\n padding: 20px;\n display: flex;\n flex-direction: column;\n height: calc(100% - 50px);\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;\n /* 减去header高度 */\n overflow-y: auto;\n}\n\n.input-container h3 {\n margin-top: 0;\n margin-bottom: 20px;\n font-size: 18px;\n color: #333;\n text-align: center;\n}\n\n/* JD输入区域样式 */\n.jd-input-section {\n margin-bottom: 20px;\n}\n\n.jd-input-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.job-description-textarea {\n width: calc(100% - 16px);\n border: 1px solid #ddd;\n border-radius: 4px;\n resize: vertical;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n transition: border-color 0.3s;\n padding: 8px;\n}\n\n.job-description-textarea:focus {\n outline: none;\n border-color: #1890ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n/* 简历上传区域样式 */\n.resume-upload-section {\n margin-bottom: 20px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.resume-upload-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n align-self: flex-start;\n}\n\n\n/* 提交按钮通用样式 */\n.submit-button {\n margin-top: 10px;\n padding: 10px 30px;\n background: #0D75FB;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s ease;\n width: 100%;\n max-width: 400px;\n align-self: center;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n.submit-button:disabled {\n background-color: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.25);\n cursor: not-allowed;\n}\n\n\n\n/* AI免责声明和备案信息样式 */\n.ai-disclaimer {\n margin-top: 16px;\n text-align: center;\n font-size: 12px;\n color: #999;\n line-height: 1.5;\n}\n\n.ai-disclaimer p {\n margin: 4px 0;\n}\n\n.beian-info {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ai-disclaimer a {\n color: #666;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.ai-disclaimer a:hover {\n color: #1890ff;\n text-decoration: underline;\n}\n\n/* 添加加载状态的样式 */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n }\n \n .loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--pcm-primary-color, #1890ff);\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n }\n \n .loading-text {\n font-size: 16px;\n color: var(--pcm-text-color, #333);\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n ","import { Component, h, State, Element, Prop, Event, EventEmitter, Method } from \"@stencil/core\";\nimport { FileUploadResponse, FileUploadResponseWithState, FileUploadState, formatFileSize, uploadFileToBackend } from \"../../utils/utils\";\nimport { Message } from \"../../services/message.service\";\nimport { SentryReporter } from \"../../utils/sentry-reporter\";\n\n\n@Component({\n tag: 'pcm-upload',\n styleUrls: ['pcm-upload.css', '../../global/global.css'],\n shadow: true,\n})\nexport class PcmUpload {\n /**\n * 是否支持多文件上传\n */\n @Prop() multiple: boolean = false;\n /**\n * 是否开启移动端上传(仅PC端生效)\n */\n @Prop() mobileUploadAble: boolean = false;\n /**\n * label内容\n */\n @Prop() labelText: string = '上传文件'\n /**\n * 支持的文件后缀列表(需要带上小数点.)\n */\n @Prop() acceptFileSuffixList: string[] = [];\n /**\n * 最大文件数\n */\n @Prop() maxFileCount: number = Infinity;\n /**\n * 最大文件大小\n */\n @Prop() maxFileSize: number = Infinity;\n /**\n * 上传请求头\n */\n @Prop() uploadHeaders?: Record<string, any>;\n /**\n * 上传请求参数\n */\n @Prop() uploadParams?: Record<string, any>;\n /**\n * 上传失败监听\n */\n @Event() uploadFailed: EventEmitter<UploadFailedEvent>;\n /**\n * 上传文件变化监听\n */\n @Event() uploadChange: EventEmitter<FileUploadResponse[]>;\n\n\n @Element() hostElement: HTMLElement;\n @State() selectedFiles: FileUploadResponseWithState[] | null = null;\n\n @Method()\n async getIsUploading() {\n return !!this.selectedFiles?.some(item => item.state === FileUploadState.Uploading);\n }\n\n private handleUploadClick = () => {\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\n fileInput?.click();\n };\n\n private clearSelectedFile = () => {\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\n if (fileInput) {\n fileInput.value = '';\n }\n };\n\n private async uploadFile(file: File): Promise<FileUploadResponseWithState> {\n try {\n const result = await uploadFileToBackend(file, this.uploadHeaders || {}, this.uploadParams || {});\n return {\n ...result,\n file,\n file_name: file.name,\n file_size: file.size,\n state: FileUploadState.Success,\n }\n } catch (error) {\n this.clearSelectedFile();\n SentryReporter.captureError(error, {\n action: 'uploadFile',\n component: 'pcm-mnms-modal',\n title: '文件上传失败'\n });\n this.uploadFailed.emit({\n error: error,\n message: '文件上传失败,请重试'\n });\n return {\n file,\n error,\n state: FileUploadState.Failed,\n }\n }\n }\n\n private handleFileChange = async (event: Event) => {\n const input = event.target as HTMLInputElement;\n\n if (this.multiple) {\n // 多选\n } else {\n // 单选\n const file = input.files?.[0];\n if (!file) return;\n // 检测文件是否符合后缀名\n if (this.acceptFileSuffixList?.length) {\n const suffix = '.' + file.name.split('.').pop()?.toLowerCase();\n if (!this.acceptFileSuffixList.includes(suffix)) {\n Message.info(`请上传 ${this.acceptFileSuffixList.join('、')} 格式的文件`);\n return;\n }\n }\n // 检测文件大小是否超出限制\n if (this.maxFileSize < file.size) {\n Message.info(`文件大小不能超过 ${formatFileSize(this.maxFileSize) ?? '-'}`);\n return;\n }\n this.selectedFiles = [{\n file,\n file_name: file.name,\n file_size: file.size,\n state: FileUploadState.Uploading,\n cos_key: '',\n error: undefined,\n }];\n const uploadResult = await this.uploadFile(file);\n this.selectedFiles = [uploadResult];\n this.clearSelectedFile();\n this.emitUploadChange();\n }\n };\n\n private emitUploadChange = () => {\n this.uploadChange.emit(this.selectedFiles?.map?.(item => ({\n cos_key: item.cos_key,\n file_name: item.file_name,\n file_size: item.file_size,\n ext: item.ext,\n })));\n }\n\n private uploadBtn() {\n return <div>\n {\n !!this.mobileUploadAble && <pcm-mobile-upload-btn\n multiple={this.multiple}\n acceptFileSuffixList={this.acceptFileSuffixList}\n maxFileCount={this.maxFileCount}\n maxFileSize={this.maxFileSize}\n uploadHeaders={this.uploadHeaders}\n uploadParams={this.uploadParams}\n onOk={e => {\n this.selectedFiles = [\n ...(this.selectedFiles ?? []),\n ...(e.detail ?? []).map(item => ({\n ...item,\n state: FileUploadState.Success,\n }))\n ]\n this.emitUploadChange();\n }}\n />\n }\n <div class=\"upload-placeholder\" onClick={this.handleUploadClick}>\n <img src='https://pub.pincaimao.com/static/web/images/home/i_upload.png'></img>\n <p class='upload-text'>点击上传简历</p>\n <p class=\"upload-hint\">\n {\n !!this.acceptFileSuffixList?.length && <p>支持 {this.acceptFileSuffixList.join('、')} 格式。</p>\n }\n {\n !!this.maxFileSize && this.maxFileSize !== Infinity && <p>文件大小不能超过 {formatFileSize(this.maxFileSize) ?? ''}。</p>\n }\n {\n !!this.maxFileCount && this.maxFileCount !== Infinity && <p>最多上传 {this.maxFileCount} 个文件。</p>\n }\n </p>\n </div>\n </div>\n }\n\n render() {\n return (\n <div>\n <div class=\"resume-upload-section\">\n <label >{this.labelText}</label>\n <div class=\"upload-area\">\n <div>\n {\n this.selectedFiles?.map?.((item, index) => {\n return <div class=\"file-item\">\n <div class=\"file-item-content\">\n <span class=\"file-icon\">📝</span>\n <span class=\"file-name\" style={item.state === FileUploadState.Failed ? { color: 'red', textDecoration: 'line-through' } : undefined}>{item?.file_name}</span>\n {\n item.state === FileUploadState.Failed && <span style={{ color: 'red', marginLeft: '4px' }}>({item.error?.message ?? '上传失败'})</span>\n }\n </div>\n <button class=\"remove-file\" onClick={(e) => {\n e.stopPropagation();\n this.selectedFiles = this.selectedFiles?.filter((_, itemIndex) => index !== itemIndex);\n }}>×</button>\n </div>\n })\n }\n </div>\n {\n this.multiple ? <div>\n {\n (this.selectedFiles?.length ?? 0) < this.maxFileCount && this.uploadBtn()\n }\n </div> : <div>\n {\n !this.selectedFiles?.length && this.uploadBtn()\n }\n </div>\n }\n </div>\n </div>\n <input\n type=\"file\"\n class=\"file-input\"\n onChange={this.handleFileChange}\n />\n </div>\n )\n }\n}",":host {\n display: block;\n font-size: 16px;\n}\n\n \n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n overflow-y: auto;\n padding: 20px;\n z-index: 1000;\n -webkit-overflow-scrolling: touch; /* 增强iOS滚动体验 */\n}\n\n/* 全屏模式下的overlay样式 */\n.fullscreen-overlay {\n padding: 0;\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: calc(100% - 10px);\n}\n\n\n.modal-container {\n background: white;\n border-radius: 8px;\n width: 100%;\n max-width: 900px;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* 确保内容区域也使用 flex 布局并占满剩余空间 */\n.modal-container.fullscreen > div:not(.modal-header):not(.initial-upload) {\n display: flex;\n flex-direction: column;\n flex: 1;\n overflow: hidden; /* 防止内容溢出 */\n height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 800px;\n /* height: 80vh; */\n /* max-height: 700px; */\n min-width: 320px;\n min-height: 400px;\n}\n\n\n\n.video-preview.placeholder {\n display: flex;\n justify-content: center;\n align-items: center;\n background: #EAEAEA;\n}\n\n.placeholder-status {\n color: #00000066;\n}\n\n.waiting-message p {\n margin: 0;\n font-size: 16px;\n color: white;\n font-weight: 500;\n}\n\n.recording-container {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n\n\n.video-area {\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.stop-recording-button {\n width: 100%;\n height: 100%;\n font-size: 16px;\n background: #f44336;\n border-radius: 6px;\n color: white;\n border: none;\n cursor: pointer;\n}\n\n.stop-recording-button:hover {\n background: #d32f2f;\n}\n\n.play-audio-container {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0; /* 防止头部被压缩 */\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n.chat-container{\n background-image: url(https://pub.pincaimao.com/static/web/images/login/bg_login_m.png);\n background-size: 100%;\n height: 100%;\n border-radius:0px 0px 8px 8px;\n}\n\n.chat-history {\n position: relative;\n flex: 1;\n overflow-y: auto;\n padding: 20px;\n scroll-behavior: smooth;\n height: 400px;\n}\n\n/* 添加全屏模式下的样式 */\n.fullscreen .chat-history {\n height: auto;\n flex: 1 1 auto;\n}\n\n\n.message-input {\n padding: 16px;\n border-top: 1px solid #eee;\n display: flex;\n gap: 8px;\n align-items: center;\n}\n\n.message-input input {\n flex: 1;\n padding: 8px 12px;\n border: 1px solid #ddd;\n border-radius: 4px;\n outline: none;\n transition: border-color 0.2s ease;\n}\n\n.message-input input:focus {\n border-color: #bbb;\n}\n\n/* 消息样式 */\n.message {\n margin-bottom: 16px;\n opacity: 1;\n transition: opacity 0.3s ease;\n}\n\n.message-content {\n max-width: 70%;\n padding: 8px 12px;\n border-radius: 8px;\n word-break: break-word;\n}\n\n.message-content p {\n margin: 0;\n word-break: break-word;\n}\n\n.user-message {\n display: flex;\n justify-content: flex-end;\n}\n\n.agent-message {\n display: flex;\n justify-content: flex-start;\n}\n\n.user-message .message-content {\n background-color: #007bff;\n color: white;\n}\n\n.agent-message .message-content {\n background-color: #f1f1f1;\n}\n\n.message-time {\n font-size: 12px;\n color: #999;\n margin-top: 4px;\n display: block;\n}\n\n/* 发送按钮样式 */\n.send-button {\n width: 38px;\n height: 38px;\n border-radius: 16px;\n background: #0d75fb;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition: background-color 0.2s ease;\n}\n\n.send-button img {\n width: 24px;\n height: 24px;\n}\n\n.send-button:hover {\n background: #0a62d6;\n}\n\n.send-button.disabled {\n background: #d9d9d9;\n cursor: not-allowed;\n}\n\n.empty-state {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n color: #999;\n text-align: center;\n}\n\n.loading-container {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: rgba(255, 255, 255, 0.98);\n z-index: 1;\n opacity: 1;\n transition: opacity 0.3s ease;\n}\n\n.loading-container p {\n margin-top: 16px;\n color: #666;\n font-size: 14px;\n}\n\n.loading-spinner {\n width: 40px;\n height: 40px;\n border: 3px solid #f3f3f3;\n border-top: 3px solid #1890ff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n\n 100% {\n transform: rotate(360deg);\n }\n}\n\n/* 修改 messages-wrapper 的样式 */\n.messages-wrapper {\n width: 100%;\n min-height: 100%;\n display: flex;\n flex-direction: column;\n /* 当内容少时,将内容放在底部 */\n justify-content: flex-end;\n}\n\n/* 当有很多消息时,取消固定在底部 */\n.messages-wrapper.has-overflow {\n justify-content: flex-start;\n}\n\n.suggested-questions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 16px;\n}\n\n.suggested-question {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background-color: #f3f4f6;\n border-radius: 4px;\n cursor: pointer;\n font-size: 14px;\n color: #374151;\n transition: background-color 0.2s;\n}\n\n.suggested-question:hover {\n background-color: #e5e7eb;\n}\n\n.arrow-right {\n margin-left: 8px;\n}\n\n.loading-suggestions {\n display: flex;\n justify-content: center;\n padding: 16px;\n}\n\n.loading-spinner-small {\n width: 20px;\n height: 20px;\n border: 2px solid #e5e7eb;\n border-top-color: #6b7280;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n/* 添加上传按钮样式 */\n.upload-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n color: #666;\n border-radius: 4px;\n transition: background-color 0.2s;\n}\n\n.upload-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.upload-button svg {\n width: 20px;\n height: 20px;\n}\n\n/* 隐藏原生文件输入框 */\n.file-input {\n display: none;\n}\n\n/* 添加文件名显示区域样式 */\n.selected-file {\n font-size: 12px;\n color: #666;\n margin-left: 8px;\n max-width: 150px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.input-wrapper {\n flex: 1;\n display: flex;\n align-items: center;\n border: 1px solid #ddd;\n border-radius: 4px;\n padding: 0 4px;\n background: white;\n}\n\n.input-wrapper input {\n border: none;\n flex: 1;\n padding: 8px;\n outline: none;\n}\n\n.input-wrapper:focus-within {\n border-color: #bbb;\n}\n\n/* 文件预览区域样式 */\n.file-preview {\n padding: 8px 16px;\n border-top: 1px solid #eee;\n background-color: #f9f9f9;\n}\n\n\n.recording-section {\n border-top: 1px solid #eee;\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 10px 20px 0px 20px;\n border-radius: 14px 14px 0 0;\n flex: 0 0 auto;\n}\n\n.recording-section .video-preview {\n width: 100%;\n height: 200px;\n max-width: 400px;\n position: relative;\n margin-bottom: 10px;\n border: 1px solid #ddd;\n border-radius: 12px;\n overflow: hidden;\n}\n\n.recording-section video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n\n/* 修改 recording-status 样式 */\n.recording-status {\n position: absolute;\n top: 10px;\n left: 10px;\n background-color: rgba(0, 0, 0, 0.6);\n color: white;\n padding: 4px 8px;\n border-radius: 4px;\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 14px;\n z-index: 2;\n}\n\n.recording-status .recording-dot {\n display: inline-block;\n width: 10px;\n height: 10px;\n background-color: red;\n border-radius: 50%;\n margin-right: 5px;\n animation: blink 1s infinite;\n}\n\n.recording-status.warning {\n color: #ff4d4f;\n animation: blink 1s infinite;\n}\n\n@keyframes blink {\n 0% {\n opacity: 1;\n }\n\n 50% {\n opacity: 0.5;\n }\n\n 100% {\n opacity: 1;\n }\n}\n\n.recording-section .stop-recording-button {\n background-color: #f44336;\n color: white;\n border: none;\n cursor: pointer;\n font-weight: bold;\n}\n\n.recording-section .stop-recording-button:hover {\n background-color: #d32f2f;\n}\n\n.fullscreen {\n width: 100vw;\n border-radius: 0;\n height: 100vh;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n\n.recording-controls {\n margin-top: 10px;\n height: 53px;\n width: 100%;\n max-width: 400px;\n display: flex;\n justify-content: center;\n}\n\n.recording-controls .waiting-message {\n text-align: center;\n color: white;\n font-size: 16px;\n background-image: linear-gradient(100deg, #4A9FFF 0%, #1058FF 100%);\n border-radius: 6px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);\n width: 95%;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n}\n\n.recording-controls .waiting-message.loading {\n background: #faad14;\n}\n\n.recording-controls .waiting-message p {\n margin: 0;\n font-size: 16px;\n color: white;\n font-weight: 500;\n}\n\n.recording-controls .stop-recording-button {\n background-color: #dc3545;\n color: white;\n border: none;\n cursor: pointer;\n font-size: 16px;\n}\n\n.recording-controls .stop-recording-button:hover {\n background-color: #c82333;\n}\n\n/* 添加禁用状态的样式 */\n.recording-controls .stop-recording-button.disabled {\n background: #ccc;\n cursor: not-allowed;\n}\n\n.recording-controls .stop-recording-button.disabled:hover {\n background: #ccc;\n}\n\n/* 添加进度条和数字进度的样式 */\n.progress-container {\n display: flex;\n justify-content: space-between;\n align-items: center;\n width: 100%;\n max-width: 400px;\n margin-top: 10px;\n padding: 0 5px;\n}\n\n.progress-bar-container {\n height: 4px;\n background-color: #E5E5E5;\n border-radius: 2px;\n overflow: hidden;\n margin-right: 10px;\n width: 75px;\n}\n\n.progress-bar {\n height: 100%;\n background-image: linear-gradient(111deg, #4A9FFF 0%, #1058FF 100%);\n border-radius: 2px;\n transition: width 0.3s ease;\n}\n\n.progress-text {\n font-size: 14px;\n color: #666;\n white-space: nowrap;\n}\n\n/* 重新设计文本输入区域样式 */\n.text-input-area {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding: 0px 16px 16px 16px;\n border-radius: 8px;\n border: none; /* 确保容器本身没有边框 */\n}\n\n/* 修改文本输入框样式 */\n.text-answer-input {\n flex: 1;\n min-height: 80px;\n padding: 12px 12px 0px 12px;\n border: 1px solid #ddd;\n border-radius: 8px 8px 0 0;\n resize: none;\n font-size: 16px;\n background-color: #fff;\n border-bottom: none;\n outline: none; /* 移除默认的焦点轮廓 */\n}\n\n/* 修改工具栏样式 */\n.input-toolbar {\n display: flex;\n justify-content: end;\n align-items: center;\n padding: 8px 12px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-top: none;\n border-radius: 0 0 8px 8px;\n}\n\n/* 当输入框获得焦点时,修改边框颜色 */\n.text-answer-input:focus {\n border-color: rgb(74, 144, 226);\n border-bottom: none;\n}\n\n.text-answer-input:focus+.input-toolbar {\n border-color: rgb(74, 144, 226);\n border-top: none;\n}\n\n/* 左侧工具按钮区域 */\n.toolbar-actions {\n width: 32px;\n height: 32px;\n display: flex;\n justify-content: center;\n align-items: center;\n margin-right: 10px;\n border: 1px solid #d9d9d9;\n border-radius: 6px;\n}\n\n.toolbar-actions:hover {\n background-color: #f0f0f0;\n}\n\n\n.toolbar-button {\n background: transparent;\n border: none;\n color: #666;\n cursor: pointer;\n padding: 0;\n margin: 0;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n/* 确保按钮内部的内容也居中 */\n.toolbar-button > div,\n.toolbar-button > svg {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.toolbar-button img {\n width: 16px;\n height: 16px;\n}\n\n/* 发送按钮样式 */\n.submit-text-button {\n padding: 6px 16px;\n background-color: #4a90e2;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: background-color 0.2s;\n}\n\n.submit-text-button:hover:not(.disabled) {\n background-color: #3a7bc8;\n}\n\n.submit-text-button.disabled {\n background-color: #b3b3b3;\n cursor: not-allowed;\n}\n\n\n/* 语音输入按钮样式 */\n.toolbar-button.recording {\n background-color: rgba(255, 0, 0, 0.1);\n color: #ff3b30;\n animation: pulse 1.5s infinite;\n}\n\n.toolbar-button.converting {\n background-color: rgba(0, 122, 255, 0.1);\n color: #007aff;\n}\n\n.toolbar-button .recording-time {\n font-size: 12px;\n margin-left: 4px;\n}\n\n.converting-indicator {\n display: flex;\n justify-content: center;\n align-items: center;\n}\n\n.converting-indicator svg {\n animation: spin 1.5s linear infinite;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n@keyframes pulse {\n 0% {\n box-shadow: 0 0 0 0 rgba(255, 0, 0, 0.4);\n }\n 70% {\n box-shadow: 0 0 0 6px rgba(255, 0, 0, 0);\n }\n 100% {\n box-shadow: 0 0 0 0 rgba(255, 0, 0, 0);\n }\n}\n\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 10px 0px 0px 0px;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n\n\n}\n\n/* 修改引用文档样式 */\n.references-section {\n margin-top: 30px;\n padding: 12px;\n background-color: #f9f9f9;\n border-radius: 8px;\n border: 1px solid #e8e8e8;\n}\n\n.references-title {\n font-size: 14px;\n color: #666;\n margin: 0 0 8px 0;\n font-weight: 500;\n}\n\n.references-list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.reference-item {\n background-color: #fff;\n border: 1px solid #e8e8e8;\n border-radius: 6px;\n padding: 10px;\n cursor: pointer;\n transition: background-color 0.2s, box-shadow 0.2s;\n}\n\n.reference-item:hover {\n background-color: #f5f5f5;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n}\n\n.reference-header {\n display: flex;\n align-items: center;\n gap: 6px;\n position: relative;\n}\n\n.reference-icon {\n color: #1890ff;\n display: flex;\n align-items: center;\n}\n\n.reference-name {\n font-size: 13px;\n font-weight: 500;\n color: #333;\n flex: 1;\n}\n\n.download-icon {\n color: #1890ff;\n display: flex;\n align-items: center;\n}\n\n/* 移除不再需要的引用内容样式 */\n.reference-content {\n display: none;\n}\n\n/* 推荐问题样式 */\n.suggested-questions {\n margin-top: 20px;\n padding: 12px;\n background-color: #f0f7ff;\n border-radius: 8px;\n border: 1px solid #d6e8ff;\n}\n\n.suggested-title {\n font-size: 14px;\n color: #1890ff;\n margin: 0 0 8px 0;\n font-weight: 500;\n}\n\n.suggested-question {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 8px 12px;\n background-color: #fff;\n border: 1px solid #e6f7ff;\n border-radius: 6px;\n cursor: pointer;\n font-size: 14px;\n color: #1890ff;\n transition: all 0.3s;\n margin-bottom: 8px;\n}\n\n.suggested-question:last-child {\n margin-bottom: 0;\n}\n\n.suggested-question:hover {\n background-color: #e6f7ff;\n border-color: #91d5ff;\n}\n\n.arrow-right {\n color: #1890ff;\n display: flex;\n align-items: center;\n}\n\n.loading-suggestions {\n display: flex;\n justify-content: center;\n padding: 16px;\n}\n\n.loading-spinner-small {\n width: 20px;\n height: 20px;\n border: 2px solid #e6f7ff;\n border-top-color: #1890ff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n}\n\n",":host {\n font-size: 16px;\n}\n\n/* 模态框基础样式 */\n.modal-overlay {\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 1000;\n overflow-y: auto;\n padding: 20px;\n}\n\n/* 全屏模式下的overlay样式 - 改为基于父组件 */\n.fullscreen-overlay {\n padding: 0;\n background-color: rgba(0, 0, 0, 0.7);\n /* 改为基于父组件的全屏 */\n position: absolute;\n width: 100%;\n height: calc(100% - 10px);\n}\n\n.modal-container {\n background-color: #fff;\n border-radius: 8px;\n width: 100%;\n display: flex;\n flex-direction: column;\n position: relative;\n margin: auto;\n transition: all 0.3s ease-out;\n overflow: hidden;\n}\n\n/* 全屏模式样式 - 改为基于父组件 */\n.modal-container.fullscreen {\n width: 100%;\n max-width: none;\n height: 100%;\n border-radius: 0;\n margin: 0;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n}\n\n/* PC端布局 */\n.pc-layout {\n width: 80%;\n max-width: 600px;\n min-width: 320px;\n}\n\n/* 响应式布局 */\n@media screen and (max-width: 768px) {\n .pc-layout {\n width: 95%;\n }\n\n .modal-overlay {\n padding: 10px 0px 0px 0px;\n }\n\n .modal-container.fullscreen {\n /* 移动端也基于父组件尺寸 */\n width: 100%;\n height: 100%;\n max-height: 100%;\n border-radius: 16px 16px 0 0;\n /* 保留安全区域支持 */\n padding: env(safe-area-inset-top) 0 env(safe-area-inset-bottom);\n }\n}\n\n/* 模态框头部样式 */\n.modal-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 4px 16px;\n height: 50px;\n border-bottom: 1px solid #e8e8e8;\n flex-shrink: 0;\n}\n\n.header-left {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 16px;\n font-weight: 600;\n color: #333;\n}\n\n.header-icon {\n width: 24px;\n height: 24px;\n}\n\n.close-button {\n background: transparent;\n border: none;\n cursor: pointer;\n padding: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 32px;\n height: 32px;\n border-radius: 4px;\n}\n\n.close-button:hover {\n background-color: rgba(0, 0, 0, 0.04);\n}\n\n.close-button span {\n font-size: 24px;\n line-height: 1;\n color: #999;\n}\n\n.close-button:hover span {\n color: #666;\n}\n\n\n/* 文件上传区域通用样式 */\n.upload-area {\n cursor: pointer;\n width: 100%;\n}\n\n\n.upload-placeholder {\n transition: all 0.3s ease;\n display: flex;\n flex-direction: column;\n align-items: center;\n background: rgba(0, 0, 0, 0.02);\n border: 1px dashed #d9d9d9;\n border-radius: 8px;\n}\n\n.upload-placeholder:hover {\n border: 1px dashed #1890ff;\n}\n\n.upload-placeholder img {\n margin-top: 8px;\n width: 50px;\n height: 50px;\n}\n\n.upload-placeholder .upload-text {\n margin: 4px 0;\n color: #332F39;\n font-size: 14px;\n}\n\n.upload-placeholder .upload-hint {\n font-size: 14px;\n color: #949AA5;\n margin-top: 8px;\n padding: 0px 10px;\n text-align: center;\n}\n\n\n/* 文件项样式 */\n.file-item {\n position: relative;\n padding: 16px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n transition: border-color 0.3s;\n cursor: pointer;\n margin-bottom: 16px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.file-item:hover {\n border-color: #0D75FB;\n}\n\n.file-item-content {\n display: flex;\n align-items: center;\n gap: 8px;\n flex: 1;\n min-width: 0;\n overflow: hidden;\n}\n\n.file-icon {\n color: #0D75FB;\n flex-shrink: 0;\n}\n\n.file-name {\n font-weight: 500;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: calc(100% - 50px);\n}\n\n.remove-file {\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 18px;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 4px;\n margin-left: 8px;\n border-radius: 4px;\n transition: all 0.2s;\n min-width: 30px;\n min-height: 30px;\n}\n\n.remove-file:hover {\n background-color: #f1f5f9;\n color: #475569;\n}\n\n.file-input {\n display: none;\n}\n\n\n\n/* 输入容器样式 */\n.input-container {\n padding: 20px;\n display: flex;\n flex-direction: column;\n height: calc(100% - 50px);\n background: linear-gradient(150deg, #2a6ee933, #0000 50%) 0 0 / 400px 200px no-repeat, #fff;\n /* 减去header高度 */\n overflow-y: auto;\n}\n\n.input-container h3 {\n margin-top: 0;\n margin-bottom: 20px;\n font-size: 18px;\n color: #333;\n text-align: center;\n}\n\n/* JD输入区域样式 */\n.jd-input-section {\n margin-bottom: 20px;\n}\n\n.jd-input-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n}\n\n.job-description-textarea {\n width: calc(100% - 16px);\n border: 1px solid #ddd;\n border-radius: 4px;\n resize: vertical;\n font-family: inherit;\n font-size: 14px;\n line-height: 1.5;\n transition: border-color 0.3s;\n padding: 8px;\n}\n\n.job-description-textarea:focus {\n outline: none;\n border-color: #1890ff;\n box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);\n}\n\n/* 简历上传区域样式 */\n.resume-upload-section {\n margin-bottom: 20px;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.resume-upload-section label {\n display: block;\n margin-bottom: 8px;\n font-weight: 500;\n color: #333;\n align-self: flex-start;\n}\n\n\n/* 提交按钮通用样式 */\n.submit-button {\n margin-top: 10px;\n padding: 10px 30px;\n background: #0D75FB;\n color: white;\n border: none;\n border-radius: 4px;\n font-size: 16px;\n cursor: pointer;\n transition: all 0.3s ease;\n width: 100%;\n max-width: 400px;\n align-self: center;\n}\n\n.submit-button:hover {\n background-color: #40a9ff;\n}\n\n.submit-button:disabled {\n background-color: rgba(0,0,0,0.04);\n color: rgba(0,0,0,0.25);\n cursor: not-allowed;\n}\n\n\n\n/* AI免责声明和备案信息样式 */\n.ai-disclaimer {\n margin-top: 16px;\n text-align: center;\n font-size: 12px;\n color: #999;\n line-height: 1.5;\n}\n\n.ai-disclaimer p {\n margin: 4px 0;\n}\n\n.beian-info {\n display: flex;\n justify-content: center;\n flex-wrap: wrap;\n gap: 4px;\n}\n\n.ai-disclaimer a {\n color: #666;\n text-decoration: none;\n transition: color 0.2s ease;\n}\n\n.ai-disclaimer a:hover {\n color: #1890ff;\n text-decoration: underline;\n}\n\n/* 添加加载状态的样式 */\n.loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 24px;\n }\n \n .loading-spinner {\n width: 40px;\n height: 40px;\n border: 4px solid rgba(0, 0, 0, 0.1);\n border-radius: 50%;\n border-top-color: var(--pcm-primary-color, #1890ff);\n animation: spin 1s linear infinite;\n margin-bottom: 16px;\n }\n \n .loading-text {\n font-size: 16px;\n color: var(--pcm-text-color, #333);\n }\n \n @keyframes spin {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n \n ",".plan-type-section {\n display: flex;\n flex-direction: column;\n gap: 10px;\n margin-bottom: 20px;\n}\n\n.plan-type-section label {\n font-weight: 600;\n color: #333;\n margin-bottom: 8px;\n}\n\n.plan-type-options {\n display: flex;\n gap: 15px;\n flex-wrap: wrap;\n}\n\n.plan-type-option {\n flex: 1;\n min-width: 120px;\n border: 1px solid #e8e8e8;\n border-radius: 8px;\n padding: 15px;\n cursor: pointer;\n display: flex;\n flex-direction: column;\n align-items: center;\n transition: all 0.3s;\n}\n\n.plan-type-option:hover {\n border-color: #1890ff;\n background-color: #f0f7ff;\n}\n\n.plan-type-option.selected {\n border-color: #1890ff;\n background-color: #e6f7ff;\n box-shadow: 0 2px 8px rgba(24, 144, 255, 0.2);\n}\n\n.option-icon {\n font-size: 24px;\n margin-bottom: 8px;\n}\n\n.option-label {\n font-size: 14px;\n font-weight: 500;\n color: #333;\n}\n\n.resume-upload-section {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.resume-upload-section label {\n font-weight: 600;\n color: #333;\n margin-bottom: 8px;\n}\n\n\n\n","import { Component, Prop, h, State, Element, Event, EventEmitter, Watch } from '@stencil/core';\nimport { uploadFileToBackend, FileUploadResponse, verifyApiKey } from '../../utils/utils';\nimport { ConversationStartEventData, StreamCompleteEventData } from '../../components';\nimport { ErrorEventBus, ErrorEventDetail } from '../../utils/error-event';\nimport { authStore } from '../../../store/auth.store'; // 导入 authStore\nimport { configStore } from '../../../store/config.store';\nimport { SentryReporter } from '../../utils/sentry-reporter';\n\n/**\n * 职业规划助手\n */\n\nexport type CareerPlanType = '长期规划' | '转行建议' | '晋升路径';\n\n@Component({\n tag: 'pcm-zygh-modal',\n styleUrls: ['../../global/global.css', 'pcm-zygh-modal.css'],\n shadow: true,\n})\nexport class ZyghModal {\n /**\n * 模态框标题\n */\n @Prop() modalTitle: string = '职业规划助手';\n\n /**\n * SDK鉴权密钥\n */\n @Prop({ attribute: 'token' }) token!: string;\n\n /**\n * 是否显示聊天模态框\n */\n @Prop({ mutable: true }) isOpen: boolean = false;\n\n /**\n * 当点击模态框关闭时触发\n */\n @Event() modalClosed: EventEmitter<void>;\n\n /**\n * 应用图标URL\n */\n @Prop() icon?: string;\n\n /**\n * 聊天框的页面层级\n */\n @Prop() zIndex?: number = 1000;\n\n /**\n * 是否展示顶部标题栏\n */\n @Prop() isShowHeader: boolean = true;\n\n /**\n * 是否展示右上角的关闭按钮\n */\n @Prop() isNeedClose: boolean = true;\n\n /**\n * 会话ID,传入继续对话,否则创建新会话\n */\n @Prop({ mutable: true }) conversationId?: string;\n\n /**\n * 默认查询文本\n */\n @Prop() defaultQuery: string = '请开始规划';\n\n /**\n * 是否以全屏模式打开,移动端建议设置为true\n */\n @Prop() fullscreen: boolean = false;\n\n\n /**\n * 自定义输入参数,传入customInputs.type则可以指定规划类型,可传入\"长期规划\"、\"转行建议\"、\"晋升路径\"<br>\n * 传入customInputs.file_url时,会隐藏简历上传区域。<br>\n * 传入customInputs.file_url和customInputs.job_info时,会直接开始聊天。<br>\n */\n @Prop() customInputs: Record<string, string> = {};\n\n /**\n * 是否显示工作区历史会话按钮\n */\n @Prop() showWorkspaceHistory: boolean = false;\n\n\n /**\n * 上传成功事件\n */\n @Event() uploadSuccess: EventEmitter<FileUploadResponse>;\n\n /**\n * 流式输出完成事件\n */\n @Event() streamComplete: EventEmitter<StreamCompleteEventData>;\n\n /**\n * 新会话开始的回调,只会在一轮对话开始时触发一次\n */\n @Event() conversationStart: EventEmitter<ConversationStartEventData>;\n\n /**\n * 当聊天完成时触发\n */\n @Event() planningComplete: EventEmitter<{\n conversation_id: string;\n type: CareerPlanType;\n }>;\n\n /**\n * SDK密钥验证失败事件\n */\n @Event() tokenInvalid: EventEmitter<void>;\n\n /**\n * 错误事件\n */\n @Event() someErrorEvent: EventEmitter<ErrorEventDetail>;\n\n /**\n * 附件预览模式\n * 'drawer': 在右侧抽屉中预览\n * 'window': 在新窗口中打开\n */\n @Prop() filePreviewMode: 'drawer' | 'window' = 'window';\n\n @State() selectedFile: File | null = null;\n @State() isUploading: boolean = false;\n @State() uploadedFileInfo: FileUploadResponse | null = null;\n @State() showChatModal: boolean = false;\n @State() isSubmitting: boolean = false;\n @State() selectedPlanType: CareerPlanType = '长期规划';\n\n // 使用 @Element 装饰器获取组件的 host 元素\n @Element() hostElement: HTMLElement;\n\n private tokenInvalidListener: () => void;\n private removeErrorListener: () => void;\n\n @Watch('token')\n handleTokenChange(newToken: string) {\n // 当传入的 token 变化时,更新 authStore 中的 token\n if (newToken && newToken !== authStore.getToken()) {\n authStore.setToken(newToken);\n }\n }\n\n \n @Watch('isOpen')\n async handleIsOpenChange(newValue: boolean) {\n if (!newValue) {\n // 重置状态\n this.clearSelectedFile();\n this.showChatModal = false;\n\n } else {\n if (this.customInputs && this.customInputs.type) {\n // 检查是否是有效的 CareerPlanType 值\n const type = this.customInputs.type;\n if (type === '长期规划' || type === '转行建议' || type === '晋升路径') {\n this.selectedPlanType = type;\n }\n }\n\n await verifyApiKey(this.token);\n\n // 如果有会话ID或者有file_url参数,直接显示聊天模态框\n if (this.conversationId || this.customInputs?.file_url) {\n this.showChatModal = true;\n }\n }\n }\n\n \n\n componentWillLoad() {\n \n\n // 将 zIndex 存入配置缓存\n if (this.zIndex) {\n configStore.setItem('modal-zIndex', this.zIndex);\n }\n if (this.token) {\n authStore.setToken(this.token);\n }\n\n // 添加全局token无效事件监听器\n this.tokenInvalidListener = () => {\n this.tokenInvalid.emit();\n };\n // 添加全局错误监听\n this.removeErrorListener = ErrorEventBus.addErrorListener((errorDetail) => {\n this.someErrorEvent.emit(errorDetail);\n });\n document.addEventListener('pcm-token-invalid', this.tokenInvalidListener);\n }\n\n disconnectedCallback() {\n // 组件销毁时移除事件监听器\n document.removeEventListener('pcm-token-invalid', this.tokenInvalidListener);\n // 移除错误监听器\n if (this.removeErrorListener) {\n this.removeErrorListener();\n }\n }\n\n private handleClose = () => {\n this.modalClosed.emit();\n };\n\n private handleFileChange = (event: Event) => {\n const input = event.target as HTMLInputElement;\n if (input.files && input.files.length > 0) {\n this.selectedFile = input.files[0];\n }\n };\n\n private handleUploadClick = () => {\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\n fileInput?.click();\n };\n\n private clearSelectedFile = () => {\n this.selectedFile = null;\n this.uploadedFileInfo = null;\n const fileInput = this.hostElement.shadowRoot?.querySelector('.file-input') as HTMLInputElement;\n if (fileInput) {\n fileInput.value = '';\n }\n };\n\n private handlePlanTypeChange = (type: CareerPlanType) => {\n this.selectedPlanType = type;\n };\n\n private async uploadFile() {\n if (!this.selectedFile) return;\n\n this.isUploading = true;\n\n try {\n const result = await uploadFileToBackend(this.selectedFile, {\n }, {\n 'tags': ['resume']\n });\n\n this.uploadedFileInfo = result;\n this.uploadSuccess.emit(result);\n } catch (error) {\n console.error('文件上传错误:', error);\n this.clearSelectedFile();\n SentryReporter.captureError(error, {\n action: 'uploadFile',\n component: 'pcm-zygh-modal',\n title: '文件上传失败'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '文件上传失败,请重试'\n });\n } finally {\n this.isUploading = false;\n }\n }\n\n private handleStartPlanning = async () => {\n if (!this.selectedFile) {\n alert('请上传简历');\n return;\n }\n\n this.isSubmitting = true;\n\n try {\n // 如果还没上传,先上传文件\n if (!this.uploadedFileInfo) {\n await this.uploadFile();\n if (!this.uploadedFileInfo) {\n this.isSubmitting = false;\n return; // 上传失败\n }\n }\n\n // 直接显示聊天模态框\n this.showChatModal = true;\n } catch (error) {\n console.error('开始规划时出错:', error);\n SentryReporter.captureError(error, {\n action: 'handleStartPlanning',\n component: 'pcm-zygh-modal',\n title: '开始规划时出错'\n });\n ErrorEventBus.emitError({\n error: error,\n message: '开始规划时出错,请重试'\n });\n } finally {\n this.isSubmitting = false;\n }\n };\n\n\n // 处理规划完成事件\n private handlePlanningComplete = (event: CustomEvent) => {\n this.planningComplete.emit({\n ...event.detail,\n type: this.selectedPlanType\n });\n };\n\n\n render() {\n if (!this.isOpen) return null;\n\n const modalStyle = {\n zIndex: String(this.zIndex)\n };\n\n const containerClass = {\n 'modal-container': true,\n 'fullscreen': this.fullscreen,\n 'pc-layout': true,\n };\n\n const overlayClass = {\n 'modal-overlay': true,\n 'fullscreen-overlay': this.fullscreen\n };\n\n // 显示加载状态\n const isLoading = this.conversationId && !this.showChatModal;\n\n // 判断是否隐藏简历上传区域\n const hideResumeUpload = Boolean(this.customInputs && this.customInputs.file_url);\n\n return (\n <div class={overlayClass} style={modalStyle}>\n <div class={containerClass}>\n {this.isShowHeader && (\n <div class=\"modal-header\">\n <div class=\"header-left\">\n {this.icon && <img src={this.icon} class=\"header-icon\" alt=\"应用图标\" />}\n <div>{this.modalTitle}</div>\n </div>\n {this.isNeedClose && (\n <button class=\"close-button\" onClick={this.handleClose}>\n <span>×</span>\n </button>\n )}\n </div>\n )}\n\n\n {/* 输入界面 - 仅在不显示聊天模态框且没有会话ID且没有file_url时显示 */}\n {!this.showChatModal && !this.conversationId && !hideResumeUpload && (\n <div class=\"input-container\">\n\n {/* 规划类型选择 */}\n <div class=\"plan-type-section\">\n <label>选择规划类型</label>\n <div class=\"plan-type-options\">\n <div\n class={`plan-type-option ${this.selectedPlanType === '长期规划' ? 'selected' : ''}`}\n onClick={() => this.handlePlanTypeChange('长期规划')}\n >\n <div class=\"option-icon\">📈</div>\n <div class=\"option-label\">长期规划</div>\n </div>\n <div\n class={`plan-type-option ${this.selectedPlanType === '转行建议' ? 'selected' : ''}`}\n onClick={() => this.handlePlanTypeChange('转行建议')}\n >\n <div class=\"option-icon\">🔄</div>\n <div class=\"option-label\">转行建议</div>\n </div>\n <div\n class={`plan-type-option ${this.selectedPlanType === '晋升路径' ? 'selected' : ''}`}\n onClick={() => this.handlePlanTypeChange('晋升路径')}\n >\n <div class=\"option-icon\">🚀</div>\n <div class=\"option-label\">晋升路径</div>\n </div>\n </div>\n </div>\n\n {/* 简历上传区域 */}\n <div class=\"resume-upload-section\">\n <label>上传简历</label>\n <div class=\"upload-area\" onClick={this.handleUploadClick}>\n {this.selectedFile ? (\n <div class=\"file-item\">\n <div class=\"file-item-content\">\n <span class=\"file-icon\">📝</span>\n <span class=\"file-name\">{this.selectedFile.name}</span>\n </div>\n <button class=\"remove-file\" onClick={(e) => {\n e.stopPropagation();\n this.clearSelectedFile();\n }}>×</button>\n </div>\n ) : (\n <div class=\"upload-placeholder\">\n <img src='https://pub.pincaimao.com/static/web/images/home/i_upload.png'></img>\n <p class='upload-text'>点击上传简历</p>\n <p class=\"upload-hint\">支持 txt、markdown、pdf、docx、doc、md 格式</p>\n </div>\n )}\n </div>\n </div>\n\n <button\n class=\"submit-button\"\n disabled={!this.selectedFile || this.isUploading || this.isSubmitting}\n onClick={this.handleStartPlanning}\n >\n {this.isUploading ? '上传中...' : this.isSubmitting ? '处理中...' : '开始规划'}\n </button>\n\n <div class=\"ai-disclaimer\">\n <p>所有内容均由AI生成仅供参考</p>\n <p class=\"beian-info\">\n <span>中央网信办生成式人工智能服务备案号</span>:\n <a href=\"https://www.pincaimao.com\" target=\"_blank\" rel=\"noopener noreferrer\">Hunan-PinCaiMao-202412310003</a>\n </p>\n </div>\n\n <input\n type=\"file\"\n class=\"file-input\"\n onChange={this.handleFileChange}\n />\n </div>\n )}\n\n {/* 加载状态 - 在有会话ID但聊天模态框尚未显示时展示 */}\n {isLoading && (\n <div class=\"loading-container\">\n <div class=\"loading-spinner\"></div>\n <p class=\"loading-text\">正在加载对话...</p>\n </div>\n )}\n\n {/* 聊天界面 - 在显示聊天模态框时显示 */}\n {this.showChatModal && (\n <div>\n <pcm-app-chat-modal\n isOpen={true}\n modalTitle={this.modalTitle}\n icon={this.icon}\n isShowHeader={this.isShowHeader}\n isNeedClose={this.isShowHeader}\n showWorkspaceHistory={this.showWorkspaceHistory}\n botId=\"3022316191018898\"\n fullscreen={this.fullscreen}\n conversationId={this.conversationId}\n defaultQuery={this.defaultQuery}\n enableVoice={false}\n filePreviewMode={this.filePreviewMode}\n customInputs={this.conversationId ? {} : {\n ...this.customInputs,\n file_url: this.customInputs?.file_url || this.uploadedFileInfo?.cos_key,\n file_name: this.customInputs?.file_name || this.uploadedFileInfo?.file_name,\n type: this.selectedPlanType\n }}\n interviewMode=\"text\"\n onInterviewComplete={this.handlePlanningComplete}\n ></pcm-app-chat-modal>\n </div>\n )}\n </div>\n </div>\n );\n }\n} "],"version":3}