pcm-agents 0.3.2 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/LICENSE +21 -21
  2. package/dist/cjs/{index-BFPEnLbS.js → index-RmBfqEV7.js} +4 -3
  3. package/dist/cjs/index-RmBfqEV7.js.map +1 -0
  4. package/dist/cjs/index.cjs.js +1 -1
  5. package/dist/cjs/loader.cjs.js +1 -1
  6. package/dist/cjs/my-component.cjs.entry.js +2 -2
  7. package/dist/cjs/my-component.cjs.entry.js.map +1 -1
  8. package/dist/cjs/my-component.entry.cjs.js.map +1 -1
  9. package/dist/cjs/pcm-agents.cjs.js +1 -1
  10. package/dist/cjs/pcm-app-chat-modal.pcm-chat-message.pcm-hr-chat-modal.pcm-jlpp-modal.pcm-mnms-modal.pcm-video-chat-modal.pcm-zygh-modal.entry.cjs.js.map +1 -0
  11. package/dist/cjs/pcm-app-chat-modal_7.cjs.entry.js +68 -61
  12. package/dist/cjs/pcm-app-chat-modal_7.cjs.entry.js.map +1 -1
  13. package/dist/cjs/pcm-chat-modal.cjs.entry.js +1 -1
  14. package/dist/collection/collection-manifest.json +1 -1
  15. package/dist/collection/components/my-component/my-component.css +3 -3
  16. package/dist/collection/components/my-component/my-component.js +1 -1
  17. package/dist/collection/components/my-component/my-component.js.map +1 -1
  18. package/dist/collection/components/pcm-app-chat-modal/pcm-app-chat-modal.js +5 -6
  19. package/dist/collection/components/pcm-app-chat-modal/pcm-app-chat-modal.js.map +1 -1
  20. package/dist/collection/components/pcm-chat-message/pcm-chat-message.js +26 -2
  21. package/dist/collection/components/pcm-chat-message/pcm-chat-message.js.map +1 -1
  22. package/dist/collection/components/pcm-hr-chat-modal/pcm-hr-chat-modal.js +4 -4
  23. package/dist/collection/components/pcm-hr-chat-modal/pcm-hr-chat-modal.js.map +1 -1
  24. package/dist/collection/components/{pcm-jlpx-modal/pcm-jlpx-modal.js → pcm-jlpp-modal/pcm-jlpp-modal.js} +21 -21
  25. package/dist/collection/components/pcm-jlpp-modal/pcm-jlpp-modal.js.map +1 -0
  26. package/dist/collection/components/pcm-mnms-modal/pcm-mnms-modal.js +16 -16
  27. package/dist/collection/components/pcm-mnms-modal/pcm-mnms-modal.js.map +1 -1
  28. package/dist/collection/components/pcm-video-chat-modal/pcm-video-chat-modal.js +4 -4
  29. package/dist/collection/components/pcm-video-chat-modal/pcm-video-chat-modal.js.map +1 -1
  30. package/dist/collection/components/pcm-zygh-modal/pcm-zygh-modal.js +22 -18
  31. package/dist/collection/components/pcm-zygh-modal/pcm-zygh-modal.js.map +1 -1
  32. package/dist/collection/global/global.css +31 -0
  33. package/dist/collection/index.js.map +1 -1
  34. package/dist/collection/utils/utils.js +2 -1
  35. package/dist/collection/utils/utils.js.map +1 -1
  36. package/dist/components/index.js +2 -1
  37. package/dist/components/index.js.map +1 -1
  38. package/dist/components/my-component.js +1 -1
  39. package/dist/components/my-component.js.map +1 -1
  40. package/dist/components/{p-LkDC0SN2.js → p-CBMLAbWp.js} +10 -5
  41. package/dist/components/p-CBMLAbWp.js.map +1 -0
  42. package/dist/components/{p-BctfuDvG.js → p-VU0niiMk.js} +7 -8
  43. package/dist/components/p-VU0niiMk.js.map +1 -0
  44. package/dist/components/pcm-app-chat-modal.js +1 -1
  45. package/dist/components/pcm-chat-message.js +1 -1
  46. package/dist/components/pcm-chat-modal.js +1 -1
  47. package/dist/components/pcm-hr-chat-modal.js +4 -4
  48. package/dist/components/pcm-hr-chat-modal.js.map +1 -1
  49. package/dist/components/{pcm-jlpx-modal.d.ts → pcm-jlpp-modal.d.ts} +4 -4
  50. package/dist/components/{pcm-jlpx-modal.js → pcm-jlpp-modal.js} +27 -27
  51. package/dist/components/pcm-jlpp-modal.js.map +1 -0
  52. package/dist/components/pcm-mnms-modal.js +16 -16
  53. package/dist/components/pcm-mnms-modal.js.map +1 -1
  54. package/dist/components/pcm-video-chat-modal.js +4 -4
  55. package/dist/components/pcm-video-chat-modal.js.map +1 -1
  56. package/dist/components/pcm-zygh-modal.js +20 -16
  57. package/dist/components/pcm-zygh-modal.js.map +1 -1
  58. package/dist/esm/{index-nVjZGfA8.js → index-CDtyzi83.js} +4 -3
  59. package/dist/esm/index-CDtyzi83.js.map +1 -0
  60. package/dist/esm/index.js +1 -1
  61. package/dist/esm/loader.js +1 -1
  62. package/dist/esm/my-component.entry.js +2 -2
  63. package/dist/esm/my-component.entry.js.map +1 -1
  64. package/dist/esm/pcm-agents.js +1 -1
  65. package/dist/esm/pcm-app-chat-modal.pcm-chat-message.pcm-hr-chat-modal.pcm-jlpp-modal.pcm-mnms-modal.pcm-video-chat-modal.pcm-zygh-modal.entry.js.map +1 -0
  66. package/dist/esm/pcm-app-chat-modal_7.entry.js +68 -61
  67. package/dist/esm/pcm-app-chat-modal_7.entry.js.map +1 -1
  68. package/dist/esm/pcm-chat-modal.entry.js +1 -1
  69. package/dist/pcm-agents/index.esm.js +1 -1
  70. package/dist/pcm-agents/my-component.entry.esm.js.map +1 -1
  71. package/dist/pcm-agents/p-11c829b3.entry.js +2 -0
  72. package/dist/pcm-agents/p-11c829b3.entry.js.map +1 -0
  73. package/dist/pcm-agents/{p-f3ca99b4.entry.js → p-430f9a9f.entry.js} +2 -2
  74. package/dist/pcm-agents/p-CDtyzi83.js +2 -0
  75. package/dist/pcm-agents/p-CDtyzi83.js.map +1 -0
  76. package/dist/pcm-agents/p-a0826602.entry.js +2 -0
  77. package/dist/pcm-agents/p-a0826602.entry.js.map +1 -0
  78. package/dist/pcm-agents/pcm-agents.esm.js +1 -1
  79. package/dist/pcm-agents/pcm-app-chat-modal.pcm-chat-message.pcm-hr-chat-modal.pcm-jlpp-modal.pcm-mnms-modal.pcm-video-chat-modal.pcm-zygh-modal.entry.esm.js.map +1 -0
  80. package/dist/types/components/pcm-app-chat-modal/pcm-app-chat-modal.d.ts +1 -1
  81. package/dist/types/components/pcm-chat-message/pcm-chat-message.d.ts +4 -0
  82. package/dist/types/components/pcm-hr-chat-modal/pcm-hr-chat-modal.d.ts +1 -1
  83. package/dist/types/components/{pcm-jlpx-modal/pcm-jlpx-modal.d.ts → pcm-jlpp-modal/pcm-jlpp-modal.d.ts} +4 -4
  84. package/dist/types/components/pcm-mnms-modal/pcm-mnms-modal.d.ts +3 -3
  85. package/dist/types/components/pcm-video-chat-modal/pcm-video-chat-modal.d.ts +1 -1
  86. package/dist/types/components/pcm-zygh-modal/pcm-zygh-modal.d.ts +8 -4
  87. package/dist/types/components.d.ts +56 -48
  88. package/dist/types/utils/utils.d.ts +1 -1
  89. package/package.json +62 -61
  90. package/readme.md +307 -307
  91. package/dist/cjs/index-BFPEnLbS.js.map +0 -1
  92. package/dist/cjs/pcm-app-chat-modal.pcm-chat-message.pcm-hr-chat-modal.pcm-jlpx-modal.pcm-mnms-modal.pcm-video-chat-modal.pcm-zygh-modal.entry.cjs.js.map +0 -1
  93. package/dist/collection/components/pcm-jlpx-modal/pcm-jlpx-modal.js.map +0 -1
  94. package/dist/components/p-BctfuDvG.js.map +0 -1
  95. package/dist/components/p-LkDC0SN2.js.map +0 -1
  96. package/dist/components/pcm-jlpx-modal.js.map +0 -1
  97. package/dist/esm/index-nVjZGfA8.js.map +0 -1
  98. package/dist/esm/pcm-app-chat-modal.pcm-chat-message.pcm-hr-chat-modal.pcm-jlpx-modal.pcm-mnms-modal.pcm-video-chat-modal.pcm-zygh-modal.entry.js.map +0 -1
  99. package/dist/pcm-agents/p-55417392.entry.js +0 -2
  100. package/dist/pcm-agents/p-55417392.entry.js.map +0 -1
  101. package/dist/pcm-agents/p-a698b59f.entry.js +0 -2
  102. package/dist/pcm-agents/p-a698b59f.entry.js.map +0 -1
  103. package/dist/pcm-agents/p-nVjZGfA8.js +0 -2
  104. package/dist/pcm-agents/p-nVjZGfA8.js.map +0 -1
  105. package/dist/pcm-agents/pcm-app-chat-modal.pcm-chat-message.pcm-hr-chat-modal.pcm-jlpx-modal.pcm-mnms-modal.pcm-video-chat-modal.pcm-zygh-modal.entry.esm.js.map +0 -1
  106. /package/dist/collection/components/{pcm-jlpx-modal/pcm-jlpx-modal.css → pcm-jlpp-modal/pcm-jlpp-modal.css} +0 -0
  107. /package/dist/pcm-agents/{p-f3ca99b4.entry.js.map → p-430f9a9f.entry.js.map} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { r as registerInstance, c as createEvent, g as getElement, h } from './index-DaMwkrv5.js';
2
- import { s as sendHttpRequest, u as uploadFileToBackend, a as sendSSERequest } from './index-nVjZGfA8.js';
2
+ import { s as sendHttpRequest, u as uploadFileToBackend, a as sendSSERequest } from './index-CDtyzi83.js';
3
3
 
4
4
  const pcmChatModalCss = ":host{display:block}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0, 0, 0, 0.5);display:flex;justify-content:center;align-items:center;overflow-y:auto;padding:20px;z-index:1000}.fullscreen-overlay{padding:0}.modal-container{background:white;border-radius:8px;width:100%;max-width:800px;height:80vh;min-height:600px;display:flex;flex-direction:column;position:relative;margin:auto}.modal-container.fullscreen{width:100vw;max-width:none;height:100vh;min-height:100vh;border-radius:0;margin:0}@media screen and (max-width: 768px){.modal-overlay{padding:0}.modal-container{width:95%;height:70vh;min-height:400px}.chat-history{min-height:200px;max-height:50vh}.modal-container.fullscreen{height:-webkit-fill-available;max-height:-webkit-fill-available;padding:env(safe-area-inset-top) 0 env(safe-area-inset-bottom)}.modal-container.fullscreen .chat-history{max-height:unset}.modal-container.fullscreen .modal-header{padding:0px 16px;padding-top:max(30px, env(safe-area-inset-top))}}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:4px 16px;height:50px;border-bottom:1px solid #e8e8e8}.header-left{display:flex;align-items:center;gap:8px}.header-icon{width:24px;height:24px}.close-button{background:transparent;border:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:4px}.close-button:hover{background-color:rgba(0, 0, 0, 0.04)}.close-button span{font-size:24px;line-height:1;color:#999}.close-button:hover span{color:#666}.chat-history{position:relative;flex:1;overflow-y:auto;padding:16px;scroll-behavior:smooth;min-height:400px;}@media screen and (max-width: 480px){.chat-history{min-height:200px;max-height:50vh}}.message-input{padding:16px;border-top:1px solid #eee;display:flex;gap:8px;align-items:center}.message-input input{flex:1;padding:8px 12px;border:1px solid #ddd;border-radius:4px;outline:none;transition:border-color 0.2s ease}.message-input input:focus{border-color:#bbb}.message{margin-bottom:16px;opacity:1;transition:opacity 0.3s ease}.message-content{max-width:70%;padding:8px 12px;border-radius:8px;word-break:break-word}.message-content p{margin:0;word-break:break-word}.user-message{display:flex;justify-content:flex-end}.agent-message{display:flex;justify-content:flex-start}.user-message .message-content{background-color:#007bff;color:white}.agent-message .message-content{background-color:#f1f1f1}.message-time{font-size:12px;color:#999;margin-top:4px;display:block}.send-button{background-color:#1890ff;color:white;border:none;border-radius:4px;padding:8px 16px;cursor:pointer;font-weight:500}.send-button:disabled{background-color:#ccc;cursor:not-allowed}.empty-state{display:flex;justify-content:center;align-items:center;height:100%;color:#999;text-align:center}.loading-container{position:absolute;top:0;left:0;right:0;bottom:0;display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:rgba(255, 255, 255, 0.98);z-index:1;opacity:1;transition:opacity 0.3s ease}.loading-container p{margin-top:16px;color:#666;font-size:14px}.loading-spinner{width:40px;height:40px;border:3px solid #f3f3f3;border-top:3px solid #1890ff;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.messages-wrapper{width:100%;min-height:100%;display:flex;flex-direction:column;justify-content:flex-end}.messages-wrapper.has-overflow{justify-content:flex-start}.suggested-questions{display:flex;flex-direction:column;gap:8px;padding:16px}.suggested-question{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background-color:#f3f4f6;border-radius:4px;cursor:pointer;font-size:14px;color:#374151;transition:background-color 0.2s}.suggested-question:hover{background-color:#e5e7eb}.arrow-right{margin-left:8px}.loading-suggestions{display:flex;justify-content:center;padding:16px}.loading-spinner-small{width:20px;height:20px;border:2px solid #e5e7eb;border-top-color:#6b7280;border-radius:50%;animation:spin 1s linear infinite}.upload-button{background:transparent;border:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;color:#666;border-radius:4px;transition:background-color 0.2s}.upload-button:hover{background-color:rgba(0, 0, 0, 0.04)}.upload-button svg{width:20px;height:20px}.file-input{display:none}.selected-file{font-size:12px;color:#666;margin-left:8px;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.input-wrapper{flex:1;display:flex;align-items:center;border:1px solid #ddd;border-radius:4px;padding:0 4px;background:white}.input-wrapper input{border:none;flex:1;padding:8px;outline:none}.input-wrapper:focus-within{border-color:#bbb}.file-preview{padding:8px 16px;border-top:1px solid #eee;background-color:#f9f9f9}.file-info{display:flex;align-items:center;justify-content:space-between;padding:8px;background:white;border:1px solid #e8e8e8;border-radius:4px}.file-name{font-size:13px;color:#333;margin-right:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:calc(100% - 30px)}.remove-file{background:transparent;border:none;color:#999;cursor:pointer;padding:4px 8px;font-size:16px;line-height:1;border-radius:4px;transition:all 0.2s}.remove-file:hover{background-color:#f0f0f0;color:#666}";
5
5
 
@@ -1,2 +1,2 @@
1
- export{f as format}from"./p-nVjZGfA8.js";
1
+ export{f as format}from"./p-CDtyzi83.js";
2
2
  //# sourceMappingURL=index.esm.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"my-component.entry.esm.js","sources":["src/components/my-component/my-component.css?tag=my-component&encapsulation=shadow","src/components/my-component/my-component.tsx"],"sourcesContent":[":host {\r\n display: block;\r\n}\r\n","import { Component, Prop, h } from '@stencil/core';\r\nimport { format } from '../../utils/utils';\r\n\r\n@Component({\r\n tag: 'my-component',\r\n styleUrl: 'my-component.css',\r\n shadow: true,\r\n})\r\nexport class MyComponent {\r\n /**\r\n * The first name\r\n */\r\n @Prop() first: string;\r\n\r\n /**\r\n * The middle name\r\n */\r\n @Prop() middle: string;\r\n\r\n /**\r\n * The last name\r\n */\r\n @Prop() last: string;\r\n\r\n private getText(): string {\r\n return format(this.first, this.middle, this.last);\r\n }\r\n\r\n render() {\r\n return <div>Hello, World! I'm {this.getText()}</div>;\r\n }\r\n}\r\n"],"names":[],"mappings":";;;AAAA,MAAM,cAAc,GAAG,sBAAsB;;MCQhC,WAAW,GAAA,MAAA;;;;AACtB;;AAEG;AACK,IAAA,KAAK;AAEb;;AAEG;AACK,IAAA,MAAM;AAEd;;AAEG;AACK,IAAA,IAAI;IAEJ,OAAO,GAAA;AACb,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;;IAGnD,MAAM,GAAA;AACJ,QAAA,OAAO,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,wBAAwB,IAAI,CAAC,OAAO,EAAE,CAAO;;;;;;;"}
1
+ {"version":3,"file":"my-component.entry.esm.js","sources":["src/components/my-component/my-component.css?tag=my-component&encapsulation=shadow","src/components/my-component/my-component.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Prop, h } from '@stencil/core';\nimport { format } from '../../utils/utils';\n\n@Component({\n tag: 'my-component',\n styleUrl: 'my-component.css',\n shadow: true,\n})\nexport class MyComponent {\n /**\n * The first name\n */\n @Prop() first: string;\n\n /**\n * The middle name\n */\n @Prop() middle: string;\n\n /**\n * The last name\n */\n @Prop() last: string;\n\n private getText(): string {\n return format(this.first, this.middle, this.last);\n }\n\n render() {\n return <div>Hello, World! I'm {this.getText()}</div>;\n }\n}\n"],"names":[],"mappings":";;;AAAA,MAAM,cAAc,GAAG,sBAAsB;;MCQhC,WAAW,GAAA,MAAA;;;;AACtB;;AAEG;AACK,IAAA,KAAK;AAEb;;AAEG;AACK,IAAA,MAAM;AAEd;;AAEG;AACK,IAAA,IAAI;IAEJ,OAAO,GAAA;AACb,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC;;IAGnD,MAAM,GAAA;AACJ,QAAA,OAAO,CAAA,CAAA,KAAA,EAAA,EAAA,GAAA,EAAA,0CAAA,EAAA,wBAAwB,IAAI,CAAC,OAAO,EAAE,CAAO;;;;;;;"}
@@ -0,0 +1,2 @@
1
+ import{r as t,h as s}from"./p-DaMwkrv5.js";import{f as r}from"./p-CDtyzi83.js";const e=":host{display:block}";const o=class{constructor(s){t(this,s)}first;middle;last;getText(){return r(this.first,this.middle,this.last)}render(){return s("div",{key:"70654fc83039b5f659efe99cc990e9b86d20dbe0"},"Hello, World! I'm ",this.getText())}};o.style=e;export{o as my_component};
2
+ //# sourceMappingURL=p-11c829b3.entry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["myComponentCss","MyComponent","first","middle","last","getText","format","this","render","h","key"],"sources":["src/components/my-component/my-component.css?tag=my-component&encapsulation=shadow","src/components/my-component/my-component.tsx"],"sourcesContent":[":host {\n display: block;\n}\n","import { Component, Prop, h } from '@stencil/core';\nimport { format } from '../../utils/utils';\n\n@Component({\n tag: 'my-component',\n styleUrl: 'my-component.css',\n shadow: true,\n})\nexport class MyComponent {\n /**\n * The first name\n */\n @Prop() first: string;\n\n /**\n * The middle name\n */\n @Prop() middle: string;\n\n /**\n * The last name\n */\n @Prop() last: string;\n\n private getText(): string {\n return format(this.first, this.middle, this.last);\n }\n\n render() {\n return <div>Hello, World! I'm {this.getText()}</div>;\n }\n}\n"],"mappings":"+EAAA,MAAMA,EAAiB,uB,MCQVC,EAAW,M,yBAIdC,MAKAC,OAKAC,KAEA,OAAAC,GACN,OAAOC,EAAOC,KAAKL,MAAOK,KAAKJ,OAAQI,KAAKH,K,CAG9C,MAAAI,GACE,OAAOC,EAAA,OAAAC,IAAA,iEAAwBH,KAAKF,U","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- import{r as e,c as t,g as s,h as i}from"./p-DaMwkrv5.js";import{s as n,u as o,a}from"./p-nVjZGfA8.js";const r=":host{display:block}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0, 0, 0, 0.5);display:flex;justify-content:center;align-items:center;overflow-y:auto;padding:20px;z-index:1000}.fullscreen-overlay{padding:0}.modal-container{background:white;border-radius:8px;width:100%;max-width:800px;height:80vh;min-height:600px;display:flex;flex-direction:column;position:relative;margin:auto}.modal-container.fullscreen{width:100vw;max-width:none;height:100vh;min-height:100vh;border-radius:0;margin:0}@media screen and (max-width: 768px){.modal-overlay{padding:0}.modal-container{width:95%;height:70vh;min-height:400px}.chat-history{min-height:200px;max-height:50vh}.modal-container.fullscreen{height:-webkit-fill-available;max-height:-webkit-fill-available;padding:env(safe-area-inset-top) 0 env(safe-area-inset-bottom)}.modal-container.fullscreen .chat-history{max-height:unset}.modal-container.fullscreen .modal-header{padding:0px 16px;padding-top:max(30px, env(safe-area-inset-top))}}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:4px 16px;height:50px;border-bottom:1px solid #e8e8e8}.header-left{display:flex;align-items:center;gap:8px}.header-icon{width:24px;height:24px}.close-button{background:transparent;border:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:4px}.close-button:hover{background-color:rgba(0, 0, 0, 0.04)}.close-button span{font-size:24px;line-height:1;color:#999}.close-button:hover span{color:#666}.chat-history{position:relative;flex:1;overflow-y:auto;padding:16px;scroll-behavior:smooth;min-height:400px;}@media screen and (max-width: 480px){.chat-history{min-height:200px;max-height:50vh}}.message-input{padding:16px;border-top:1px solid #eee;display:flex;gap:8px;align-items:center}.message-input input{flex:1;padding:8px 12px;border:1px solid #ddd;border-radius:4px;outline:none;transition:border-color 0.2s ease}.message-input input:focus{border-color:#bbb}.message{margin-bottom:16px;opacity:1;transition:opacity 0.3s ease}.message-content{max-width:70%;padding:8px 12px;border-radius:8px;word-break:break-word}.message-content p{margin:0;word-break:break-word}.user-message{display:flex;justify-content:flex-end}.agent-message{display:flex;justify-content:flex-start}.user-message .message-content{background-color:#007bff;color:white}.agent-message .message-content{background-color:#f1f1f1}.message-time{font-size:12px;color:#999;margin-top:4px;display:block}.send-button{background-color:#1890ff;color:white;border:none;border-radius:4px;padding:8px 16px;cursor:pointer;font-weight:500}.send-button:disabled{background-color:#ccc;cursor:not-allowed}.empty-state{display:flex;justify-content:center;align-items:center;height:100%;color:#999;text-align:center}.loading-container{position:absolute;top:0;left:0;right:0;bottom:0;display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:rgba(255, 255, 255, 0.98);z-index:1;opacity:1;transition:opacity 0.3s ease}.loading-container p{margin-top:16px;color:#666;font-size:14px}.loading-spinner{width:40px;height:40px;border:3px solid #f3f3f3;border-top:3px solid #1890ff;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.messages-wrapper{width:100%;min-height:100%;display:flex;flex-direction:column;justify-content:flex-end}.messages-wrapper.has-overflow{justify-content:flex-start}.suggested-questions{display:flex;flex-direction:column;gap:8px;padding:16px}.suggested-question{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background-color:#f3f4f6;border-radius:4px;cursor:pointer;font-size:14px;color:#374151;transition:background-color 0.2s}.suggested-question:hover{background-color:#e5e7eb}.arrow-right{margin-left:8px}.loading-suggestions{display:flex;justify-content:center;padding:16px}.loading-spinner-small{width:20px;height:20px;border:2px solid #e5e7eb;border-top-color:#6b7280;border-radius:50%;animation:spin 1s linear infinite}.upload-button{background:transparent;border:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;color:#666;border-radius:4px;transition:background-color 0.2s}.upload-button:hover{background-color:rgba(0, 0, 0, 0.04)}.upload-button svg{width:20px;height:20px}.file-input{display:none}.selected-file{font-size:12px;color:#666;margin-left:8px;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.input-wrapper{flex:1;display:flex;align-items:center;border:1px solid #ddd;border-radius:4px;padding:0 4px;background:white}.input-wrapper input{border:none;flex:1;padding:8px;outline:none}.input-wrapper:focus-within{border-color:#bbb}.file-preview{padding:8px 16px;border-top:1px solid #eee;background-color:#f9f9f9}.file-info{display:flex;align-items:center;justify-content:space-between;padding:8px;background:white;border:1px solid #e8e8e8;border-radius:4px}.file-name{font-size:13px;color:#333;margin-right:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:calc(100% - 30px)}.remove-file{background:transparent;border:none;color:#999;cursor:pointer;padding:4px 8px;font-size:16px;line-height:1;border-radius:4px;transition:all 0.2s}.remove-file:hover{background-color:#f0f0f0;color:#666}";const l=class{constructor(s){e(this,s);this.messageSent=t(this,"messageSent");this.modalClosed=t(this,"modalClosed");this.streamComplete=t(this,"streamComplete")}modalTitle="在线客服";apiKey="";isOpen=false;messages=[];currentMessage="";messageSent;modalClosed;icon;zIndex=1e3;isShowHeader=true;isNeedClose=true;botId;conversationId;currentAssistantMessage="";isLoading=false;currentStreamingMessage=null;shouldAutoScroll=true;SCROLL_THRESHOLD=30;isLoadingHistory=false;get hostElement(){return s(this)}streamComplete;suggestedQuestions=[];suggestedQuestionsLoading=false;stopSuggestedQuestionsRef={current:false};selectedFile=null;isUploading=false;uploadedFileInfo=[];defaultQuery="";fullscreen=false;handleClose=()=>{this.modalClosed.emit()};handleInputChange=e=>{const t=e.target;this.currentMessage=t.value};async getSuggestedQuestions(e){this.stopSuggestedQuestionsRef.current=false;this.suggestedQuestionsLoading=true;try{const t=await n({url:`/share/messages/${e}/suggested`});if(this.stopSuggestedQuestionsRef.current)return;if(t.success&&t.data){this.suggestedQuestions=t.data||[]}}catch(e){console.error("获取问题建议失败:",e)}finally{this.suggestedQuestionsLoading=false}}handleStopSuggestedQuestions=()=>{this.suggestedQuestions=[];this.stopSuggestedQuestionsRef.current=true};handleFileChange=async e=>{const t=e.target;if(t.files&&t.files.length>0){this.selectedFile=t.files[0];await this.uploadFile()}};async uploadFile(){if(!this.selectedFile)return;this.isUploading=true;try{const e=await o(this.selectedFile,{authorization:"Bearer "+this.apiKey});this.uploadedFileInfo.push(e)}catch(e){console.error("文件上传错误:",e);this.clearSelectedFile();alert("文件上传失败,请重试")}finally{this.isUploading=false}}handleUploadClick=()=>{const e=this.hostElement.shadowRoot?.querySelector(".file-input");e?.click()};clearSelectedFile=()=>{this.selectedFile=null;this.uploadedFileInfo=[];const e=this.hostElement.shadowRoot?.querySelector(".file-input");if(e){e.value=""}};async sendMessageToAPI(e){this.handleStopSuggestedQuestions();console.log("开始发送消息:",e);this.isLoading=true;let t="";const s=new Date;const i=`${s.getHours()}:${s.getMinutes().toString().padStart(2,"0")}`;const n=e.trim()||(this.uploadedFileInfo.length>0?"请分析这个文件":"");const o={id:`temp-${Date.now()}`,time:i,query:n,answer:"",isStreaming:true,conversation_id:this.conversationId,inputs:{},status:"normal",error:null};this.currentStreamingMessage=o;this.shouldAutoScroll=true;this.scrollToBottom();const r={response_mode:"streaming",conversation_id:this.conversationId,query:n,user:"1234567890"};if(this.uploadedFileInfo.length>0){const e=this.uploadedFileInfo.map((e=>e.cos_key)).join(",");r.inputs={...r.inputs,input:e}}await a({url:`/sdk/v1/chat/chat-messages`,method:"POST",data:r,onMessage:e=>{console.log("收到Stream数据:",e);if(e.conversation_id&&!this.conversationId){this.conversationId=e.conversation_id;this.updateUrlWithConversationId(e.conversation_id)}if(e.event==="message"){if(e.event==="agent_message"||e.event==="message"){if(e.answer){t+=e.answer;const s={...this.currentStreamingMessage,answer:t,isStreaming:true};this.currentStreamingMessage=s;this.scrollToBottom()}}}if(e.event==="message_end"){this.streamComplete.emit({conversation_id:e.conversation_id||"",event:e.event,message_id:e.message_id,id:e.id})}},onError:e=>{console.error("发生错误:",e);this.messages=[...this.messages,{...o,answer:"抱歉,发生了错误,请稍后再试。",error:e,isStreaming:false}];this.currentStreamingMessage=null;this.isLoading=false},onComplete:()=>{console.log("请求完成");this.isLoading=false;this.messages=[...this.messages,this.currentStreamingMessage];if(this.currentStreamingMessage){this.getSuggestedQuestions(this.currentStreamingMessage.conversation_id)}this.currentStreamingMessage=null}})}handleScroll=()=>{const e=this.hostElement.shadowRoot?.querySelector(".chat-history");if(!e)return;const{scrollTop:t,scrollHeight:s,clientHeight:i}=e;const n=s-t-i;this.shouldAutoScroll=n<=this.SCROLL_THRESHOLD};scrollToBottom(){if(!this.shouldAutoScroll)return;const e=this.hostElement.shadowRoot?.querySelector(".chat-history");console.log("chatHistory",e);if(e&&this.isOpen){e.scrollTop=e.scrollHeight}}componentDidRender(){if(this.isLoadingHistory||this.shouldAutoScroll&&this.isOpen){const e=this.hostElement.shadowRoot?.querySelector(".chat-history");if(e){e.scrollTop=e.scrollHeight}}}updateUrlWithConversationId(e){const t=new URLSearchParams(window.location.search);if(!t.get("conversation_id")){const t=new URL(window.location.href);t.searchParams.set("conversation_id",e);window.history.replaceState({},"",t)}}handleSendMessage=()=>{if(!this.currentMessage.trim()&&this.uploadedFileInfo.length===0||this.isLoading)return;this.messageSent.emit(this.currentMessage);this.sendMessageToAPI(this.currentMessage);this.currentMessage="";this.clearSelectedFile();const e=this.hostElement.shadowRoot?.querySelector("input");e?.focus()};handleKeyDown=e=>{if(e.key==="Enter"&&!e.shiftKey){e.preventDefault();this.handleSendMessage()}};async loadHistoryMessages(){if(!this.conversationId)return;this.isLoadingHistory=true;try{const e=await n({url:`/share/messages`,params:{conversation_id:this.conversationId,user:"1234567890",limit:20}});if(!e.success||!e.data){throw new Error("加载历史消息失败")}const t=e.data||[];this.currentStreamingMessage=null;this.messages=[];const s=t.map((e=>{const t=new Date(e.created_at*1e3);const s=`${t.getHours()}:${t.getMinutes().toString().padStart(2,"0")}`;return{...e,time:s,isStreaming:false,status:e.status==="error"?"error":"normal"}}));this.messages=s;requestAnimationFrame((()=>{this.shouldAutoScroll=true;this.scrollToBottom()}))}catch(e){console.error("加载历史消息失败:",e)}finally{this.isLoadingHistory=false}}async handleIsOpenChange(e){if(e&&this.conversationId){await this.loadHistoryMessages()}}handleDefaultQueryChange(e){if(e&&!this.currentMessage){this.currentMessage=e}}componentWillLoad(){if(this.defaultQuery){this.currentMessage=this.defaultQuery}}render(){if(!this.isOpen)return null;const e={zIndex:String(this.zIndex)};const t={"modal-container":true,fullscreen:this.fullscreen};const s={"modal-overlay":true,"fullscreen-overlay":this.fullscreen};return i("div",{class:s,style:e},i("div",{class:t},this.isShowHeader&&i("div",{class:"modal-header"},i("div",{class:"header-left"},this.icon&&i("img",{src:this.icon,class:"header-icon",alt:"应用图标"}),i("h3",null,this.modalTitle)),this.isNeedClose&&i("button",{class:"close-button",onClick:this.handleClose},i("span",null,"×"))),i("div",{class:"chat-history",onScroll:this.handleScroll},this.isLoadingHistory?i("div",{class:"loading-container"},i("div",{class:"loading-spinner"}),i("p",null,"加载历史消息中...")):i(i.Fragment,null,this.messages.map((e=>i("div",{id:`message_${e.id}`,key:e.id},i("pcm-chat-message",{message:e,onMessageChange:t=>{const s=this.messages.map((s=>s.id===e.id?{...s,...t.detail}:s));this.messages=s}})))),this.currentStreamingMessage&&i("div",{id:`message_${this.currentStreamingMessage.id}`},i("pcm-chat-message",{message:this.currentStreamingMessage})),this.messages.length===0&&!this.currentStreamingMessage&&i("div",{class:"empty-state"},i("p",null,"请输入消息"))),this.suggestedQuestionsLoading?i("div",{class:"loading-suggestions"},i("div",{class:"loading-spinner-small"})):this.suggestedQuestions.length>0&&i("div",{class:"suggested-questions"},this.suggestedQuestions.map(((e,t)=>i("div",{key:t,class:"suggested-question",onClick:()=>{this.currentMessage=e;this.handleSendMessage()}},e,i("span",{class:"arrow-right"},"→")))))),this.selectedFile&&i("div",{class:"file-preview"},i("div",{class:"file-info"},i("span",{class:"file-name",title:this.selectedFile.name},this.selectedFile.name,this.isUploading&&i("span",{class:"uploading-indicator"}," (上传中...)"),this.uploadedFileInfo.length>0&&i("span",{class:"upload-success"}," (已上传)")),i("button",{class:"remove-file",onClick:this.clearSelectedFile},"×"))),i("div",{class:"message-input"},i("input",{type:"file",class:"file-input",onChange:this.handleFileChange,accept:"image/*,.pdf,.doc,.docx,.txt"}),i("button",{class:"upload-button",onClick:this.handleUploadClick,title:"上传文件",disabled:this.isUploading},i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor"},i("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m0-16l-4 4m4-4l4 4"}))),i("div",{class:"input-wrapper"},i("input",{type:"text",placeholder:"请输入消息...",value:this.currentMessage,onInput:this.handleInputChange,onKeyDown:this.handleKeyDown,disabled:this.isLoading})),i("button",{class:"send-button",onClick:()=>this.handleSendMessage(),disabled:!this.currentMessage.trim()&&this.uploadedFileInfo.length===0||this.isLoading||this.isUploading},this.isLoading?"发送中...":"发送"))))}static get watchers(){return{isOpen:["handleIsOpenChange"],defaultQuery:["handleDefaultQueryChange"]}}};l.style=r;export{l as pcm_chat_modal};
2
- //# sourceMappingURL=p-f3ca99b4.entry.js.map
1
+ import{r as e,c as t,g as s,h as i}from"./p-DaMwkrv5.js";import{s as n,u as o,a}from"./p-CDtyzi83.js";const r=":host{display:block}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0, 0, 0, 0.5);display:flex;justify-content:center;align-items:center;overflow-y:auto;padding:20px;z-index:1000}.fullscreen-overlay{padding:0}.modal-container{background:white;border-radius:8px;width:100%;max-width:800px;height:80vh;min-height:600px;display:flex;flex-direction:column;position:relative;margin:auto}.modal-container.fullscreen{width:100vw;max-width:none;height:100vh;min-height:100vh;border-radius:0;margin:0}@media screen and (max-width: 768px){.modal-overlay{padding:0}.modal-container{width:95%;height:70vh;min-height:400px}.chat-history{min-height:200px;max-height:50vh}.modal-container.fullscreen{height:-webkit-fill-available;max-height:-webkit-fill-available;padding:env(safe-area-inset-top) 0 env(safe-area-inset-bottom)}.modal-container.fullscreen .chat-history{max-height:unset}.modal-container.fullscreen .modal-header{padding:0px 16px;padding-top:max(30px, env(safe-area-inset-top))}}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:4px 16px;height:50px;border-bottom:1px solid #e8e8e8}.header-left{display:flex;align-items:center;gap:8px}.header-icon{width:24px;height:24px}.close-button{background:transparent;border:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:4px}.close-button:hover{background-color:rgba(0, 0, 0, 0.04)}.close-button span{font-size:24px;line-height:1;color:#999}.close-button:hover span{color:#666}.chat-history{position:relative;flex:1;overflow-y:auto;padding:16px;scroll-behavior:smooth;min-height:400px;}@media screen and (max-width: 480px){.chat-history{min-height:200px;max-height:50vh}}.message-input{padding:16px;border-top:1px solid #eee;display:flex;gap:8px;align-items:center}.message-input input{flex:1;padding:8px 12px;border:1px solid #ddd;border-radius:4px;outline:none;transition:border-color 0.2s ease}.message-input input:focus{border-color:#bbb}.message{margin-bottom:16px;opacity:1;transition:opacity 0.3s ease}.message-content{max-width:70%;padding:8px 12px;border-radius:8px;word-break:break-word}.message-content p{margin:0;word-break:break-word}.user-message{display:flex;justify-content:flex-end}.agent-message{display:flex;justify-content:flex-start}.user-message .message-content{background-color:#007bff;color:white}.agent-message .message-content{background-color:#f1f1f1}.message-time{font-size:12px;color:#999;margin-top:4px;display:block}.send-button{background-color:#1890ff;color:white;border:none;border-radius:4px;padding:8px 16px;cursor:pointer;font-weight:500}.send-button:disabled{background-color:#ccc;cursor:not-allowed}.empty-state{display:flex;justify-content:center;align-items:center;height:100%;color:#999;text-align:center}.loading-container{position:absolute;top:0;left:0;right:0;bottom:0;display:flex;flex-direction:column;justify-content:center;align-items:center;background-color:rgba(255, 255, 255, 0.98);z-index:1;opacity:1;transition:opacity 0.3s ease}.loading-container p{margin-top:16px;color:#666;font-size:14px}.loading-spinner{width:40px;height:40px;border:3px solid #f3f3f3;border-top:3px solid #1890ff;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.messages-wrapper{width:100%;min-height:100%;display:flex;flex-direction:column;justify-content:flex-end}.messages-wrapper.has-overflow{justify-content:flex-start}.suggested-questions{display:flex;flex-direction:column;gap:8px;padding:16px}.suggested-question{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background-color:#f3f4f6;border-radius:4px;cursor:pointer;font-size:14px;color:#374151;transition:background-color 0.2s}.suggested-question:hover{background-color:#e5e7eb}.arrow-right{margin-left:8px}.loading-suggestions{display:flex;justify-content:center;padding:16px}.loading-spinner-small{width:20px;height:20px;border:2px solid #e5e7eb;border-top-color:#6b7280;border-radius:50%;animation:spin 1s linear infinite}.upload-button{background:transparent;border:none;cursor:pointer;padding:8px;display:flex;align-items:center;justify-content:center;color:#666;border-radius:4px;transition:background-color 0.2s}.upload-button:hover{background-color:rgba(0, 0, 0, 0.04)}.upload-button svg{width:20px;height:20px}.file-input{display:none}.selected-file{font-size:12px;color:#666;margin-left:8px;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.input-wrapper{flex:1;display:flex;align-items:center;border:1px solid #ddd;border-radius:4px;padding:0 4px;background:white}.input-wrapper input{border:none;flex:1;padding:8px;outline:none}.input-wrapper:focus-within{border-color:#bbb}.file-preview{padding:8px 16px;border-top:1px solid #eee;background-color:#f9f9f9}.file-info{display:flex;align-items:center;justify-content:space-between;padding:8px;background:white;border:1px solid #e8e8e8;border-radius:4px}.file-name{font-size:13px;color:#333;margin-right:8px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:calc(100% - 30px)}.remove-file{background:transparent;border:none;color:#999;cursor:pointer;padding:4px 8px;font-size:16px;line-height:1;border-radius:4px;transition:all 0.2s}.remove-file:hover{background-color:#f0f0f0;color:#666}";const l=class{constructor(s){e(this,s);this.messageSent=t(this,"messageSent");this.modalClosed=t(this,"modalClosed");this.streamComplete=t(this,"streamComplete")}modalTitle="在线客服";apiKey="";isOpen=false;messages=[];currentMessage="";messageSent;modalClosed;icon;zIndex=1e3;isShowHeader=true;isNeedClose=true;botId;conversationId;currentAssistantMessage="";isLoading=false;currentStreamingMessage=null;shouldAutoScroll=true;SCROLL_THRESHOLD=30;isLoadingHistory=false;get hostElement(){return s(this)}streamComplete;suggestedQuestions=[];suggestedQuestionsLoading=false;stopSuggestedQuestionsRef={current:false};selectedFile=null;isUploading=false;uploadedFileInfo=[];defaultQuery="";fullscreen=false;handleClose=()=>{this.modalClosed.emit()};handleInputChange=e=>{const t=e.target;this.currentMessage=t.value};async getSuggestedQuestions(e){this.stopSuggestedQuestionsRef.current=false;this.suggestedQuestionsLoading=true;try{const t=await n({url:`/share/messages/${e}/suggested`});if(this.stopSuggestedQuestionsRef.current)return;if(t.success&&t.data){this.suggestedQuestions=t.data||[]}}catch(e){console.error("获取问题建议失败:",e)}finally{this.suggestedQuestionsLoading=false}}handleStopSuggestedQuestions=()=>{this.suggestedQuestions=[];this.stopSuggestedQuestionsRef.current=true};handleFileChange=async e=>{const t=e.target;if(t.files&&t.files.length>0){this.selectedFile=t.files[0];await this.uploadFile()}};async uploadFile(){if(!this.selectedFile)return;this.isUploading=true;try{const e=await o(this.selectedFile,{authorization:"Bearer "+this.apiKey});this.uploadedFileInfo.push(e)}catch(e){console.error("文件上传错误:",e);this.clearSelectedFile();alert("文件上传失败,请重试")}finally{this.isUploading=false}}handleUploadClick=()=>{const e=this.hostElement.shadowRoot?.querySelector(".file-input");e?.click()};clearSelectedFile=()=>{this.selectedFile=null;this.uploadedFileInfo=[];const e=this.hostElement.shadowRoot?.querySelector(".file-input");if(e){e.value=""}};async sendMessageToAPI(e){this.handleStopSuggestedQuestions();console.log("开始发送消息:",e);this.isLoading=true;let t="";const s=new Date;const i=`${s.getHours()}:${s.getMinutes().toString().padStart(2,"0")}`;const n=e.trim()||(this.uploadedFileInfo.length>0?"请分析这个文件":"");const o={id:`temp-${Date.now()}`,time:i,query:n,answer:"",isStreaming:true,conversation_id:this.conversationId,inputs:{},status:"normal",error:null};this.currentStreamingMessage=o;this.shouldAutoScroll=true;this.scrollToBottom();const r={response_mode:"streaming",conversation_id:this.conversationId,query:n,user:"1234567890"};if(this.uploadedFileInfo.length>0){const e=this.uploadedFileInfo.map((e=>e.cos_key)).join(",");r.inputs={...r.inputs,input:e}}await a({url:`/sdk/v1/chat/chat-messages`,method:"POST",data:r,onMessage:e=>{console.log("收到Stream数据:",e);if(e.conversation_id&&!this.conversationId){this.conversationId=e.conversation_id;this.updateUrlWithConversationId(e.conversation_id)}if(e.event==="message"){if(e.event==="agent_message"||e.event==="message"){if(e.answer){t+=e.answer;const s={...this.currentStreamingMessage,answer:t,isStreaming:true};this.currentStreamingMessage=s;this.scrollToBottom()}}}if(e.event==="message_end"){this.streamComplete.emit({conversation_id:e.conversation_id||"",event:e.event,message_id:e.message_id,id:e.id})}},onError:e=>{console.error("发生错误:",e);this.messages=[...this.messages,{...o,answer:"抱歉,发生了错误,请稍后再试。",error:e,isStreaming:false}];this.currentStreamingMessage=null;this.isLoading=false},onComplete:()=>{console.log("请求完成");this.isLoading=false;this.messages=[...this.messages,this.currentStreamingMessage];if(this.currentStreamingMessage){this.getSuggestedQuestions(this.currentStreamingMessage.conversation_id)}this.currentStreamingMessage=null}})}handleScroll=()=>{const e=this.hostElement.shadowRoot?.querySelector(".chat-history");if(!e)return;const{scrollTop:t,scrollHeight:s,clientHeight:i}=e;const n=s-t-i;this.shouldAutoScroll=n<=this.SCROLL_THRESHOLD};scrollToBottom(){if(!this.shouldAutoScroll)return;const e=this.hostElement.shadowRoot?.querySelector(".chat-history");console.log("chatHistory",e);if(e&&this.isOpen){e.scrollTop=e.scrollHeight}}componentDidRender(){if(this.isLoadingHistory||this.shouldAutoScroll&&this.isOpen){const e=this.hostElement.shadowRoot?.querySelector(".chat-history");if(e){e.scrollTop=e.scrollHeight}}}updateUrlWithConversationId(e){const t=new URLSearchParams(window.location.search);if(!t.get("conversation_id")){const t=new URL(window.location.href);t.searchParams.set("conversation_id",e);window.history.replaceState({},"",t)}}handleSendMessage=()=>{if(!this.currentMessage.trim()&&this.uploadedFileInfo.length===0||this.isLoading)return;this.messageSent.emit(this.currentMessage);this.sendMessageToAPI(this.currentMessage);this.currentMessage="";this.clearSelectedFile();const e=this.hostElement.shadowRoot?.querySelector("input");e?.focus()};handleKeyDown=e=>{if(e.key==="Enter"&&!e.shiftKey){e.preventDefault();this.handleSendMessage()}};async loadHistoryMessages(){if(!this.conversationId)return;this.isLoadingHistory=true;try{const e=await n({url:`/share/messages`,params:{conversation_id:this.conversationId,user:"1234567890",limit:20}});if(!e.success||!e.data){throw new Error("加载历史消息失败")}const t=e.data||[];this.currentStreamingMessage=null;this.messages=[];const s=t.map((e=>{const t=new Date(e.created_at*1e3);const s=`${t.getHours()}:${t.getMinutes().toString().padStart(2,"0")}`;return{...e,time:s,isStreaming:false,status:e.status==="error"?"error":"normal"}}));this.messages=s;requestAnimationFrame((()=>{this.shouldAutoScroll=true;this.scrollToBottom()}))}catch(e){console.error("加载历史消息失败:",e)}finally{this.isLoadingHistory=false}}async handleIsOpenChange(e){if(e&&this.conversationId){await this.loadHistoryMessages()}}handleDefaultQueryChange(e){if(e&&!this.currentMessage){this.currentMessage=e}}componentWillLoad(){if(this.defaultQuery){this.currentMessage=this.defaultQuery}}render(){if(!this.isOpen)return null;const e={zIndex:String(this.zIndex)};const t={"modal-container":true,fullscreen:this.fullscreen};const s={"modal-overlay":true,"fullscreen-overlay":this.fullscreen};return i("div",{class:s,style:e},i("div",{class:t},this.isShowHeader&&i("div",{class:"modal-header"},i("div",{class:"header-left"},this.icon&&i("img",{src:this.icon,class:"header-icon",alt:"应用图标"}),i("h3",null,this.modalTitle)),this.isNeedClose&&i("button",{class:"close-button",onClick:this.handleClose},i("span",null,"×"))),i("div",{class:"chat-history",onScroll:this.handleScroll},this.isLoadingHistory?i("div",{class:"loading-container"},i("div",{class:"loading-spinner"}),i("p",null,"加载历史消息中...")):i(i.Fragment,null,this.messages.map((e=>i("div",{id:`message_${e.id}`,key:e.id},i("pcm-chat-message",{message:e,onMessageChange:t=>{const s=this.messages.map((s=>s.id===e.id?{...s,...t.detail}:s));this.messages=s}})))),this.currentStreamingMessage&&i("div",{id:`message_${this.currentStreamingMessage.id}`},i("pcm-chat-message",{message:this.currentStreamingMessage})),this.messages.length===0&&!this.currentStreamingMessage&&i("div",{class:"empty-state"},i("p",null,"请输入消息"))),this.suggestedQuestionsLoading?i("div",{class:"loading-suggestions"},i("div",{class:"loading-spinner-small"})):this.suggestedQuestions.length>0&&i("div",{class:"suggested-questions"},this.suggestedQuestions.map(((e,t)=>i("div",{key:t,class:"suggested-question",onClick:()=>{this.currentMessage=e;this.handleSendMessage()}},e,i("span",{class:"arrow-right"},"→")))))),this.selectedFile&&i("div",{class:"file-preview"},i("div",{class:"file-info"},i("span",{class:"file-name",title:this.selectedFile.name},this.selectedFile.name,this.isUploading&&i("span",{class:"uploading-indicator"}," (上传中...)"),this.uploadedFileInfo.length>0&&i("span",{class:"upload-success"}," (已上传)")),i("button",{class:"remove-file",onClick:this.clearSelectedFile},"×"))),i("div",{class:"message-input"},i("input",{type:"file",class:"file-input",onChange:this.handleFileChange,accept:"image/*,.pdf,.doc,.docx,.txt"}),i("button",{class:"upload-button",onClick:this.handleUploadClick,title:"上传文件",disabled:this.isUploading},i("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor"},i("path",{"stroke-linecap":"round","stroke-linejoin":"round","stroke-width":"2",d:"M12 4v16m0-16l-4 4m4-4l4 4"}))),i("div",{class:"input-wrapper"},i("input",{type:"text",placeholder:"请输入消息...",value:this.currentMessage,onInput:this.handleInputChange,onKeyDown:this.handleKeyDown,disabled:this.isLoading})),i("button",{class:"send-button",onClick:()=>this.handleSendMessage(),disabled:!this.currentMessage.trim()&&this.uploadedFileInfo.length===0||this.isLoading||this.isUploading},this.isLoading?"发送中...":"发送"))))}static get watchers(){return{isOpen:["handleIsOpenChange"],defaultQuery:["handleDefaultQueryChange"]}}};l.style=r;export{l as pcm_chat_modal};
2
+ //# sourceMappingURL=p-430f9a9f.entry.js.map
@@ -0,0 +1,2 @@
1
+ const e="https://www.pincaimao.com/agents/api";function t(e,t,s){return(e||"")+(t?` ${t}`:"")+(s?` ${s}`:"")}const s=async t=>{const{url:s,method:o,headers:a={},data:n,onMessage:r,onError:c,onComplete:i}=t;try{const t=`${e}${s}`;const c=await fetch(t,{method:o,headers:{Accept:"text/event-stream","Content-Type":"application/json",...a},body:n?JSON.stringify(n):undefined});if(!c.ok){throw new Error(`HTTP error! status: ${c.status}`)}const f=c.body?.getReader();if(!f)throw new Error("No reader available");const l=new TextDecoder;let u="";while(true){const{value:e,done:t}=await f.read();if(t)break;u+=l.decode(e,{stream:true});const s=u.split("\n");u=s.pop()||"";for(const e of s){if(e.startsWith("data:")){try{const t=e.substring(5).trim();if(!t)continue;const s=JSON.parse(t);r?.(s)}catch(t){console.error("解析 SSE 数据错误:",t,"原始数据:",e)}}}}i?.()}catch(e){console.error("SSE 请求错误:",e);c?.(e)}};const o=async t=>{const{url:s,method:o="GET",headers:a={},params:n={},data:r,formData:c,onMessage:i}=t;try{const t=new URLSearchParams;Object.entries(n).forEach((([e,s])=>{if(s!==undefined&&s!==null){t.append(e,String(s))}}));let f=`${e}${s}${t.toString()?`?${t.toString()}`:""}`;const l={method:o,headers:c?{...a}:{"Content-Type":"application/json",...a}};if(c){l.body=c}else if(o!=="GET"&&o!=="HEAD"&&r){l.body=JSON.stringify(r)}if(o==="GET"&&r){const e=new URLSearchParams;Object.entries(r).forEach((([t,s])=>{if(s!==undefined&&s!==null){e.append(t,String(s))}}));f+=(t.toString()?"&":"?")+e.toString()}const u=await fetch(f,l);const d=await u.json();if(i){i(d)}if(!u.ok){console.error(`HTTP错误: ${u.status} ${u.statusText}`);return{success:false,message:d.message||`HTTP错误: ${u.status}`,error:d}}if(d.code!==0){console.error(`API错误: ${d.message}`);return{success:false,message:d.message,error:d}}return{success:true,data:d.data}}catch(e){console.error("HTTP请求错误:",e);if(t.onError){t.onError(e)}return{success:false,error:e,message:e instanceof Error?e.message:"未知错误"}}finally{if(t.onComplete){t.onComplete()}}};const a=async(e,t)=>{const s=new FormData;s.append("file",e);try{const e=await o({url:"/sdk/v1/files/upload",method:"POST",headers:{...t},formData:s});if(!e.success||!e.data){throw new Error(e.message||"文件上传失败")}return e.data}catch(e){console.error("文件上传错误:",e);throw e}};export{e as A,s as a,t as f,o as s,a as u};
2
+ //# sourceMappingURL=p-CDtyzi83.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"p-CDtyzi83.js","sources":["src/utils/utils.ts"],"sourcesContent":["/**\r\n * API域名配置\r\n */\r\n// export const API_DOMAIN = 'http://192.168.17.194:8000';\r\n// export const API_DOMAIN = 'https://tagents.ylzhaopin.com/agents/api';\r\nexport const API_DOMAIN = 'https://www.pincaimao.com/agents/api';\r\n\r\n\r\nexport function format(first?: string, middle?: string, last?: string): string {\r\n return (first || '') + (middle ? ` ${middle}` : '') + (last ? ` ${last}` : '');\r\n}\r\n\r\n// 添加类型定义\r\nexport interface UserInputMessageType {\r\n message: string;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface WorkFlowNode {\r\n message_id?: string;\r\n conversation_id?: string;\r\n created_at?: string;\r\n event?: string;\r\n answer?: string;\r\n data?: {\r\n outputs?: {\r\n answer?: string;\r\n };\r\n status?: string;\r\n error?: any;\r\n };\r\n}\r\n\r\nexport interface MessageRound extends UserInputMessageType {\r\n id?: string;\r\n conversation_id?: string;\r\n created_at?: string;\r\n answer?: string;\r\n status?: string;\r\n error?: any;\r\n}\r\n\r\n/**\r\n * 将工作流节点转换为消息轮次\r\n * @param message_event 消息事件类型\r\n * @param inputMessage 用户输入消息\r\n * @param streamNode 工作流节点\r\n * @returns 消息轮次\r\n */\r\nexport const convertWorkflowStreamNodeToMessageRound = (\r\n message_event: string,\r\n inputMessage: UserInputMessageType,\r\n streamNode: WorkFlowNode,\r\n): MessageRound => {\r\n const messageRound: MessageRound = {\r\n ...inputMessage,\r\n };\r\n if (message_event === 'workflow_finished') messageRound.answer = streamNode.data?.outputs?.answer;\r\n if (message_event === 'agent_message' || message_event === 'message') messageRound.answer = streamNode?.answer;\r\n messageRound.id = streamNode.message_id;\r\n messageRound.conversation_id = streamNode.conversation_id;\r\n messageRound.created_at = streamNode.created_at;\r\n messageRound.status = streamNode.data?.status;\r\n messageRound.error = streamNode.data?.error;\r\n return messageRound;\r\n};\r\n\r\n/**\r\n * SSE 流式请求配置接口\r\n */\r\nexport interface SSERequestConfig {\r\n url: string;\r\n method: string;\r\n headers?: Record<string, string>;\r\n data?: any;\r\n onMessage?: (data: any) => void;\r\n onError?: (error: any) => void;\r\n onComplete?: () => void;\r\n}\r\n\r\n/**\r\n * 发送 SSE 流式请求\r\n * @param config 请求配置\r\n * @returns Promise<void>\r\n */\r\nexport const sendSSERequest = async (config: SSERequestConfig): Promise<void> => {\r\n const { url, method, headers = {}, data, onMessage, onError, onComplete } = config;\r\n \r\n try {\r\n // 使用 API_DOMAIN 拼接完整的请求URL\r\n const requestUrl = `${API_DOMAIN}${url}`;\r\n \r\n const response = await fetch(requestUrl, {\r\n method,\r\n headers: {\r\n 'Accept': 'text/event-stream',\r\n 'Content-Type': 'application/json',\r\n ...headers\r\n },\r\n body: data ? JSON.stringify(data) : undefined\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n\r\n const reader = response.body?.getReader();\r\n if (!reader) throw new Error('No reader available');\r\n \r\n const decoder = new TextDecoder();\r\n let buffer = '';\r\n\r\n while (true) {\r\n const { value, done } = await reader.read();\r\n if (done) break;\r\n\r\n buffer += decoder.decode(value, { stream: true });\r\n\r\n // 处理缓冲区中的完整消息\r\n const lines = buffer.split('\\n');\r\n buffer = lines.pop() || ''; // 保留最后一个不完整的行\r\n\r\n for (const line of lines) {\r\n if (line.startsWith('data:')) {\r\n try {\r\n const jsonStr = line.substring(5).trim();\r\n if (!jsonStr) continue;\r\n \r\n const data = JSON.parse(jsonStr);\r\n onMessage?.(data);\r\n } catch (e) {\r\n console.error('解析 SSE 数据错误:', e, '原始数据:', line);\r\n }\r\n }\r\n }\r\n }\r\n \r\n onComplete?.();\r\n } catch (error) {\r\n console.error('SSE 请求错误:', error);\r\n onError?.(error);\r\n }\r\n};\r\n\r\n/**\r\n * HTTP请求配置接口\r\n */\r\nexport interface HttpRequestConfig {\r\n url: string;\r\n method?: string;\r\n headers?: Record<string, string>;\r\n params?: Record<string, any>;\r\n data?: any;\r\n formData?: FormData; // 添加FormData支持\r\n onMessage?: (data: any) => void;\r\n onError?: (error: any) => void;\r\n onComplete?: () => void;\r\n}\r\n\r\n/**\r\n * 统一的API响应接口\r\n */\r\nexport interface ApiResponse<T = any> {\r\n code: number;\r\n message: string;\r\n data?: T;\r\n}\r\n\r\n/**\r\n * HTTP响应接口\r\n */\r\nexport interface HttpResponse<T = any> {\r\n success: boolean;\r\n data?: T;\r\n error?: any;\r\n message?: string;\r\n}\r\n\r\n/**\r\n * 发送HTTP请求\r\n * @param config 请求配置\r\n * @returns Promise<HttpResponse>\r\n */\r\nexport const sendHttpRequest = async <T = any>(config: HttpRequestConfig): Promise<HttpResponse<T>> => {\r\n const { url, method = 'GET', headers = {}, params = {}, data, formData, onMessage } = config;\r\n \r\n try {\r\n // 构建URL和查询参数\r\n const queryParams = new URLSearchParams();\r\n Object.entries(params).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n queryParams.append(key, String(value));\r\n }\r\n });\r\n \r\n // 使用 API_DOMAIN 拼接完整的请求URL\r\n let requestUrl = `${API_DOMAIN}${url}${queryParams.toString() ? `?${queryParams.toString()}` : ''}`;\r\n \r\n // 创建请求配置对象\r\n const requestConfig: RequestInit = {\r\n method,\r\n headers: formData ? { ...headers } : {\r\n 'Content-Type': 'application/json',\r\n ...headers\r\n }\r\n };\r\n\r\n // 处理请求体\r\n if (formData) {\r\n // 如果提供了FormData,直接使用\r\n requestConfig.body = formData;\r\n } else if (method !== 'GET' && method !== 'HEAD' && data) {\r\n // 否则,如果是非GET/HEAD请求且有data,将其JSON序列化\r\n requestConfig.body = JSON.stringify(data);\r\n }\r\n\r\n // 如果是 GET 方法且有 data,将其作为查询参数添加到 URL\r\n if (method === 'GET' && data) {\r\n const dataParams = new URLSearchParams();\r\n Object.entries(data).forEach(([key, value]) => {\r\n if (value !== undefined && value !== null) {\r\n dataParams.append(key, String(value));\r\n }\r\n });\r\n requestUrl += (queryParams.toString() ? '&' : '?') + dataParams.toString();\r\n }\r\n\r\n const response = await fetch(requestUrl, requestConfig);\r\n const responseData: ApiResponse<T> = await response.json();\r\n \r\n // 调用 onMessage 回调\r\n if (onMessage) {\r\n onMessage(responseData);\r\n }\r\n \r\n // 检查响应状态\r\n if (!response.ok) {\r\n console.error(`HTTP错误: ${response.status} ${response.statusText}`);\r\n return {\r\n success: false,\r\n message: responseData.message || `HTTP错误: ${response.status}`,\r\n error: responseData\r\n };\r\n }\r\n \r\n // 检查业务状态码\r\n if (responseData.code !== 0) {\r\n console.error(`API错误: ${responseData.message}`);\r\n return {\r\n success: false,\r\n message: responseData.message,\r\n error: responseData\r\n };\r\n }\r\n \r\n // 直接返回data\r\n return {\r\n success: true,\r\n data: responseData.data\r\n };\r\n } catch (error) {\r\n console.error('HTTP请求错误:', error);\r\n if (config.onError) {\r\n config.onError(error);\r\n }\r\n return {\r\n success: false,\r\n error,\r\n message: error instanceof Error ? error.message : '未知错误'\r\n };\r\n } finally {\r\n if (config.onComplete) {\r\n config.onComplete();\r\n }\r\n }\r\n};\r\n\r\n\r\n\r\n/**\r\n * 文件上传响应数据接口\r\n */\r\nexport interface FileUploadResponse {\r\n /** 文件在对象存储中的唯一标识符 */\r\n cos_key: string;\r\n /** 文件名称 */\r\n file_name: string;\r\n /** 文件大小(带单位的字符串,如 \"1.5MB\") */\r\n file_size: string;\r\n /** 文件的预签名URL */\r\n presigned_url: string;\r\n /** 文件扩展名 */\r\n ext: string;\r\n}\r\n\r\n/**\r\n * 通过后端API上传文件\r\n * @param file 要上传的文件\r\n * @param headers 可选的请求头\r\n * @returns Promise 包含上传结果\r\n */\r\nexport const uploadFileToBackend = async (\r\n file: File,\r\n headers?: Record<string, string>\r\n): Promise<FileUploadResponse> => {\r\n const formData = new FormData();\r\n formData.append('file', file);\r\n \r\n try {\r\n const response = await sendHttpRequest<{cos_key: string, file_name: string, file_size: string,presigned_url: string, ext: string}>({\r\n url: '/sdk/v1/files/upload',\r\n method: 'POST',\r\n headers: {\r\n ...headers\r\n },\r\n formData\r\n });\r\n \r\n if (!response.success || !response.data) {\r\n throw new Error(response.message || '文件上传失败');\r\n }\r\n \r\n return response.data;\r\n } catch (error) {\r\n console.error('文件上传错误:', error);\r\n throw error;\r\n }\r\n};\r\n"],"names":[],"mappings":"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"}