@szjy/ai-coms 0.1.3 → 0.1.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.
package/dist/index.mjs CHANGED
@@ -366,14 +366,14 @@ const ae = (t, n) => {
366
366
  }, null, 14, Oe)
367
367
  ], 4));
368
368
  }
369
- }, W = /* @__PURE__ */ ae(ze, [["__scopeId", "data-v-490b11c1"]]), je = async (t) => {
369
+ }, W = /* @__PURE__ */ ae(ze, [["__scopeId", "data-v-490b11c1"]]), Ee = async (t) => {
370
370
  if (navigator.clipboard && navigator.permissions)
371
371
  await navigator.clipboard.writeText(t);
372
372
  else {
373
373
  const n = document.createElement("textArea");
374
374
  n.value = t, n.style.width = 0, n.style.position = "fixed", n.style.left = "-999px", n.style.top = "10px", n.setAttribute("readonly", "readonly"), document.body.appendChild(n), n.select(), document.execCommand("copy"), document.body.removeChild(n);
375
375
  }
376
- }, Ee = ["innerHTML"], Ie = {
376
+ }, je = ["innerHTML"], Ie = {
377
377
  __name: "Previewer",
378
378
  props: {
379
379
  reader: null,
@@ -393,9 +393,9 @@ const ae = (t, n) => {
393
393
  setup(t, { expose: n, emit: o }) {
394
394
  const { appContext: a } = ne(), { $message: r } = a.config.globalProperties, e = t, i = C(e.displayText || ""), v = C(""), h = C(!0), y = C(!1), L = C(!!e.displayText), N = o, A = C(null);
395
395
  let _ = null;
396
- const j = q(() => B ? B.render(i.value) : i.value), E = () => {
396
+ const E = q(() => B ? B.render(i.value) : i.value), j = () => {
397
397
  e.reader && e.reader.cancel(), y.value = !0, l.value = !1, d(), L.value = !0, N("completed", i.value), h.value = !1, _ && (cancelAnimationFrame(_), _ = null);
398
- }, M = q(() => `${j.value}`), f = C(!1), u = () => {
398
+ }, M = q(() => `${E.value}`), f = C(!1), u = () => {
399
399
  f.value = !0;
400
400
  }, d = () => {
401
401
  f.value = !1;
@@ -427,7 +427,7 @@ const ae = (t, n) => {
427
427
  }
428
428
  v.value += T.content, _ === null && S();
429
429
  } catch (c) {
430
- l.value = !0, console.log(3333, c), N("failed", c), E();
430
+ l.value = !0, console.log(3333, c), N("failed", c), j();
431
431
  break;
432
432
  } finally {
433
433
  d();
@@ -473,16 +473,16 @@ const ae = (t, n) => {
473
473
  deep: !0
474
474
  }
475
475
  ), ce(() => {
476
- E();
476
+ j();
477
477
  }), n({
478
- abortReader: E,
478
+ abortReader: j,
479
479
  initializeStart: u,
480
480
  initializeEnd: d
481
481
  }), q(() => f.value ? !0 : (!e.reader || !h || i.value, !1));
482
482
  const x = async () => {
483
483
  try {
484
484
  const b = i.value;
485
- await je(b), r.success("复制成功");
485
+ await Ee(b), r.success("复制成功");
486
486
  } catch (b) {
487
487
  console.error("复制失败:", b), r.error("复制失败");
488
488
  }
@@ -500,7 +500,7 @@ const ae = (t, n) => {
500
500
  k("div", {
501
501
  class: "markdown-wrapper",
502
502
  innerHTML: M.value
503
- }, null, 8, Ee),
503
+ }, null, 8, je),
504
504
  L.value ? (P(), O("div", {
505
505
  key: 0,
506
506
  class: "ai-copy-btn-wrapper",
@@ -564,23 +564,23 @@ const ae = (t, n) => {
564
564
  "当前项目的进度情况?",
565
565
  "当前项目的参建方有哪些?",
566
566
  "数智建管平台有哪些功能?能做什么?"
567
- ]), _ = C([]), j = C(!1), E = C(null), M = () => {
567
+ ]), _ = C([]), E = C(!1), j = C(null), M = () => {
568
568
  oe(() => {
569
- if (E.value) {
570
- const m = E.value, w = m.scrollHeight, T = m.scrollTop, I = m.clientHeight;
569
+ if (j.value) {
570
+ const m = j.value, w = m.scrollHeight, T = m.scrollTop, I = m.clientHeight;
571
571
  w - T - I < 100 ? m.scrollTop = w : m.scrollTo({
572
572
  top: w
573
573
  });
574
574
  }
575
575
  });
576
576
  }, f = C(!1), u = q(() => f.value ? "/images/ai-stop.png" : "/images/ai-send.png"), d = (m, w) => {
577
- console.log("onFailedReader", m, w), j.value = !1;
577
+ console.log("onFailedReader", m, w), E.value = !1;
578
578
  const T = b();
579
579
  T && T.initializeEnd(), a.error("转换失败,请重试"), f.value = !1, setTimeout(() => {
580
580
  y.value && y.value.focus();
581
581
  });
582
582
  }, l = (m, w) => {
583
- j.value = !1, f.value = !1, M(), w && N.value[m] && (N.value[m].displayText = w), setTimeout(() => {
583
+ E.value = !1, f.value = !1, M(), w && N.value[m] && (N.value[m].displayText = w), setTimeout(() => {
584
584
  y.value && y.value.focus();
585
585
  });
586
586
  }, s = (m) => {
@@ -597,7 +597,7 @@ const ae = (t, n) => {
597
597
  return _.value[m];
598
598
  return null;
599
599
  }, c = async () => {
600
- if (console.log("stylizingLoading:", j.value), j.value) {
600
+ if (console.log("stylizingLoading:", E.value), E.value) {
601
601
  const R = b();
602
602
  console.log("lastPreviewer:", R), R && (console.log("abortReader"), R.abortReader());
603
603
  return;
@@ -613,7 +613,7 @@ const ae = (t, n) => {
613
613
  const m = h.value;
614
614
  h.value = "";
615
615
  const w = N.value.length;
616
- _.value[w] && _.value[w].initializeStart(), j.value = !0, N.value.push({
616
+ _.value[w] && _.value[w].initializeStart(), E.value = !0, N.value.push({
617
617
  type: "ai"
618
618
  });
619
619
  const { error: T, reader: I } = await Le(e.value, {
@@ -672,7 +672,7 @@ const ae = (t, n) => {
672
672
  key: 1,
673
673
  class: "chat-messages",
674
674
  ref_key: "messageContainerRef",
675
- ref: E
675
+ ref: j
676
676
  }, [
677
677
  (P(!0), O(G, null, Y(N.value, (R, U) => (P(), O("div", {
678
678
  key: U,
@@ -830,9 +830,9 @@ var se = { exports: {} };
830
830
  }), r.d(a, "loadScripts", function() {
831
831
  return _;
832
832
  }), r.d(a, "dynamicLoadScripts", function() {
833
- return j;
834
- }), r.d(a, "createScriptsLoadIterator", function() {
835
833
  return E;
834
+ }), r.d(a, "createScriptsLoadIterator", function() {
835
+ return j;
836
836
  }), r.d(a, "loadScriptsQueue", function() {
837
837
  return M;
838
838
  }), r.d(a, "getMaxDepsChain", function() {
@@ -985,7 +985,7 @@ var se = { exports: {} };
985
985
  }
986
986
  });
987
987
  });
988
- }, j = function(f, u) {
988
+ }, E = function(f, u) {
989
989
  return u === void 0 && (u = {}), function() {
990
990
  var d = [].concat(v(f));
991
991
  return { next: function() {
@@ -998,16 +998,16 @@ var se = { exports: {} };
998
998
  return Promise.resolve({ done: !0 });
999
999
  } };
1000
1000
  };
1001
- }, E = function(f, u) {
1001
+ }, j = function(f, u) {
1002
1002
  var d;
1003
- return u === void 0 && (u = {}), (d = {})[Symbol.asyncIterator] = j(f, u), d;
1003
+ return u === void 0 && (u = {}), (d = {})[Symbol.asyncIterator] = E(f, u), d;
1004
1004
  }, M = function(f, u) {
1005
1005
  return u === void 0 && (u = {}), y(void 0, void 0, void 0, function() {
1006
1006
  var d, l, s, g, p, S;
1007
1007
  return L(this, function(x) {
1008
1008
  switch (x.label) {
1009
1009
  case 0:
1010
- x.trys.push([0, 5, 6, 11]), d = N(E(f, u)), x.label = 1;
1010
+ x.trys.push([0, 5, 6, 11]), d = N(j(f, u)), x.label = 1;
1011
1011
  case 1:
1012
1012
  return [4, d.next()];
1013
1013
  case 2:
@@ -1196,7 +1196,8 @@ const Ze = {
1196
1196
  }
1197
1197
  return o;
1198
1198
  }, dt = (t, n, o = {}) => {
1199
- lt(t).forEach(({ node: r, replacements: e }) => {
1199
+ const a = lt(t);
1200
+ a.forEach(({ node: r, replacements: e }) => {
1200
1201
  var v;
1201
1202
  const i = document.createDocumentFragment();
1202
1203
  e.forEach(({ text: h, routeName: y }) => {
@@ -1206,8 +1207,11 @@ const Ze = {
1206
1207
  } else
1207
1208
  i.appendChild(document.createTextNode(h));
1208
1209
  }), (v = r.parentNode) == null || v.replaceChild(i, r);
1210
+ }), o != null && o.nodeCallback && a.forEach(({ node: r, replacements: e }) => {
1211
+ var i;
1212
+ (i = o.nodeCallback) == null || i.call(o, r, e);
1209
1213
  });
1210
- }, it = "0.1.3", ct = "Sz";
1214
+ }, it = "0.1.4", ct = "Sz";
1211
1215
  function ft({
1212
1216
  componentPrefix: t = ct,
1213
1217
  components: n = []
package/dist/index.umd.js CHANGED
@@ -1,2 +1,2 @@
1
1
  (function(R,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(R=typeof globalThis<"u"?globalThis:R||self,e(R["szjy-ai-coms"]={},R.Vue))})(this,function(R,e){"use strict";const K="/images/ai-round.png",X="/images/ai-sqrt.png",G="/images/bars-loading.svg";function Y(n,r=location.href){return new URLSearchParams(new URL(r).search).get(n)}function Z(n){return n.startsWith("http://")||n.startsWith("https://")?n:`${location.protocol}//${location.host}${n}`}async function ee(n){const r=new URL("http://localhost:11434/api/chat"),a={};Object.keys(a).forEach(o=>{r.searchParams.append(o,a[o])});const s=new Request(r,{mode:"cors",method:"post",headers:{"Content-Type":"application/json"},body:JSON.stringify({model:"llama3",stream:!0,messages:[{role:"system",content:"全程使用中文回答问题。"},{role:"user",content:n}]})});return fetch(s)}async function te(n,r){const a=new URL(`${location.origin}/spark/v1/chat/completions`),s={};Object.keys(s).forEach(t=>{a.searchParams.append(t,s[t])});const o=new Request(a,{method:"post",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify({model:"generalv4.0Ultra",stream:!0,messages:[{role:"user",content:n}]})});return fetch(o)}async function ne(n,r){const a=new URL(`${location.origin}/siliconflow/v1/chat/completions`),s={};Object.keys(s).forEach(t=>{a.searchParams.append(t,s[t])});const o=new Request(a,{method:"post",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify({model:"Qwen/Qwen1.5-110B-Chat",stream:!0,messages:[{role:"user",content:n}]})});return fetch(o)}async function re(n,r){const a=new URL(`${location.origin}/moonshot/v1/chat/completions`),s={};Object.keys(s).forEach(t=>{a.searchParams.append(t,s[t])});const o=new Request(a,{method:"post",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify({model:"moonshot-v1-8k",stream:!0,messages:[{role:"system",content:"你是 Kimi,由 Moonshot AI 提供的人工智能助手,你更擅长中文和英文的对话。你会为用户提供安全,有帮助,准确的回答。同时,你会拒绝一切涉及恐怖主义,种族歧视,黄色暴力等问题的回答。Moonshot AI 为专有名词,不可翻译成其他语言。"},{role:"user",content:n}]})});return fetch(o)}async function oe(n,r){const a=new URL(`${location.origin}/dashscope/compatible-mode/v1/chat/completions`),s={};Object.keys(s).forEach(t=>{a.searchParams.append(t,s[t])});const o=new Request(a,{method:"post",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify({model:"qwq-32b-preview",stream:!0,messages:[{role:"system",content:"全程使用中文回答问题"},{role:"user",content:n}]})});return fetch(o)}async function ae(n,r,a,s=""){const o=Z(s),t=new URL(`${o}/support/${a}/a`),c={};Object.keys(c).forEach(g=>{t.searchParams.append(g,c[g])});const y=new Request(t,{method:"post",headers:{"Content-Type":"application/json",Authorization:`Bearer ${r}`},body:JSON.stringify({content:n})});return fetch(y)}const se=n=>{if(n.startsWith("data:")){const r=n.substring(5).trim();if(r==="[DONE]")return{done:!0};try{return JSON.parse(r)}catch(a){console.error("JSON parsing error:",a)}}return null},le=[{label:"模拟数据模型",modelName:"standard",api:null},{label:"Spark 星火大模型",modelName:"spark",api:te},{label:"Ollama 3 大模型",modelName:"ollama3",api:ee},{label:"SiliconFlow 硅基流动大模型",modelName:"siliconflow",api:ne},{label:"Kimi Moonshot 月之暗面大模型",modelName:"moonshot",api:re},{label:"通义千问大模型",modelName:"dashscope",api:oe},{label:"数智建管大模型",modelName:"szjy",api:ae}],A={standard(n,r){let a="";return n instanceof Uint8Array?a=r.decode(n,{stream:!0}):a=n,{content:a}},spark(n){const r=se(n);return r.done?{done:!0}:{content:r.choices[0].delta.content||""}},siliconflow(n){return this.spark(n)},moonshot(n){return this.spark(n)},dashscope(n){return this.spark(n)},szjy(n){return this.spark(n)},ollama3(n){return{content:JSON.parse(n).message.content}}},M=(n,r,a)=>{const s=n.split(a);return s.slice(0,-1).forEach(o=>{o.trim()!==""&&r.enqueue(o)}),s[s.length-1]},ie=n=>{let r="";return new TransformStream({transform(a,s){if(r+=a,r.trim().startsWith("data:"))r=M(r,s,n);else try{JSON.parse(r),r=M(r,s,n)}catch{s.enqueue(a),r=""}},flush(a){r.trim()!==""&&a.enqueue(r)}})};async function ce(n,r){const a=n.api;return a?new Promise(s=>{a(r.text,r.token,r.identifier,r.baseUrl).then(o=>{if(o.body){const t=o.body.pipeThrough(new TextDecoderStream).pipeThrough(ie(`
2
- `)).getReader();console.log("reader from response:",t),s({error:0,reader:t})}else s({error:1,reader:null})}).catch(o=>{s({error:1,reader:null})})}):{error:1,reader:null}}let I=null;function de(){return I||(window.markdownit?I=new window.markdownit({html:!0,linkify:!0,typographer:!0}):console.log("markdownit is not loaded"),I)}const q=(n,r)=>{const a=n.__vccOpts||n;for(const[s,o]of r)a[s]=o;return a},ue=["src","alt"],$=q({__name:"SvgIcon",props:{name:{type:String,required:!0},size:{type:[Number,String],default:16},color:{type:String,default:""},className:{type:String,default:""},basePath:{type:String,default:"/icons/"}},setup(n){const r=n,a=e.computed(()=>{if(r.name.startsWith("http://")||r.name.startsWith("https://")||r.name.startsWith("/"))return r.name;const t=r.name.endsWith(".svg")?r.name:`${r.name}.svg`;return`${r.basePath}${t}`}),s=e.computed(()=>{const t=typeof r.size=="number"?`${r.size}px`:r.size;return{width:t,height:t,display:"inline-flex",justifyContent:"center",alignItems:"center"}}),o=e.computed(()=>{const t={width:"100%",height:"100%"};return r.color&&(t.filter=`drop-shadow(0 0 0 ${r.color})`),t});return(t,c)=>(e.openBlock(),e.createElementBlock("div",{class:"svg-icon-wrapper",style:e.normalizeStyle(s.value)},[e.createElementVNode("img",{src:a.value,alt:n.name,class:e.normalizeClass(["svg-icon",n.className]),style:e.normalizeStyle(o.value)},null,14,ue)],4))}},[["__scopeId","data-v-490b11c1"]]),fe=async n=>{if(navigator.clipboard&&navigator.permissions)await navigator.clipboard.writeText(n);else{const r=document.createElement("textArea");r.value=n,r.style.width=0,r.style.position="fixed",r.style.left="-999px",r.style.top="10px",r.setAttribute("readonly","readonly"),document.body.appendChild(r),r.select(),document.execCommand("copy"),document.body.removeChild(r)}},me=["innerHTML"],pe={__name:"Previewer",props:{reader:null,model:"szjy",scrollToBottomFn:null,displayText:"",messagePostRender:{type:Function,default:null}},emits:["failed","completed","updating"],setup(n,{expose:r,emit:a}){const{appContext:s}=e.getCurrentInstance(),{$message:o}=s.config.globalProperties,t=n,c=e.ref(t.displayText||""),y=e.ref(""),g=e.ref(!0),b=e.ref(!1),E=e.ref(!!t.displayText),T=a,z=e.ref(null);let _=null;const V=e.computed(()=>I?I.render(c.value):c.value),B=()=>{t.reader&&t.reader.cancel(),b.value=!0,i.value=!1,f(),E.value=!0,T("completed",c.value),g.value=!1,_&&(cancelAnimationFrame(_),_=null)},j=e.computed(()=>`${V.value}`),m=e.ref(!1),u=()=>{m.value=!0},f=()=>{m.value=!1},i=e.ref(!1),l=async()=>{if(!t.reader)return;const k=new TextDecoder("utf-8");for(g.value=!0;!b.value;)try{if(!t.reader){i.value=!0;break}const{value:d,done:h}=await t.reader.read();if(!t.reader){i.value=!0;break}if(h){i.value=!0;break}const v=A[t.model];if(!v)break;const N=v.call(A,d,k);if(N.done){i.value=!0;break}y.value+=N.content,_===null&&S()}catch(d){i.value=!0,console.log(3333,d),T("failed",d),B();break}finally{f()}},w=async()=>{t.scrollToBottomFn&&t.scrollToBottomFn()},p=(k=()=>{},d=()=>{})=>{if(y.value.length>0){const h=y.value.substring(0,10);c.value+=h,y.value=y.value.substring(10),k()}else d()},S=()=>{if(b.value&&_){cancelAnimationFrame(_),_=null,g.value=!1;return}i.value?p(()=>{_=requestAnimationFrame(S),T("updating",null)},()=>{T("completed",c.value),g.value=!1,E.value=!0,e.nextTick(()=>{if(i.value=!1,t.messagePostRender&&z.value)try{t.messagePostRender(z.value,c.value)}catch(k){console.error("messagePostRender 执行失败:",k)}}),_=null}):(p(),_=requestAnimationFrame(S)),w()};e.watch(()=>t.reader,()=>{t.reader&&l()},{immediate:!0,deep:!0}),e.onUnmounted(()=>{B()}),r({abortReader:B,initializeStart:u,initializeEnd:f}),e.computed(()=>m.value?!0:(!t.reader||!g||c.value,!1));const x=async()=>{try{const k=c.value;await fe(k),o.success("复制成功")}catch(k){console.error("复制失败:",k),o.error("复制失败")}};return(k,d)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[j.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"refWrapperContent",ref:z,"text-16":"",class:"w-full h-full overflow-y-auto relative","p-24px":""},[e.createElementVNode("div",{class:"markdown-wrapper",innerHTML:j.value},null,8,me),E.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"ai-copy-btn-wrapper",onClick:x},[e.createVNode($,{name:"/images/svg/copy.svg",color:"#666666"}),d[0]||(d[0]=e.createElementVNode("span",{class:"copy-text"},"复制",-1))])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0)]),_:1}))}},he={class:"panel-header"},ge={class:"header-actions"},ye={class:"header-title"},we={class:"action-icons"},be={class:"body-content"},ke={key:0,class:"welcome-content"},ve={class:"subtitle"},xe={class:"highlight"},Se={class:"quick-questions"},_e=["onClick"],Ne={key:1,class:"message-content user-content"},Ce={class:"panel-footer"},Ee={key:0,src:G,alt:"加载中",class:"loading-icon"},Te={class:"input-box"},Re=["src"],Pe={__name:"ChatPanel",props:{modelValue:{type:Boolean,default:!1},token:{type:String,default:""},identifier:{type:String,default:""},baseUrl:{type:String,default:""},title:{type:String,default:"数智AI助理"},messagePostRender:{type:Function,default:null}},emits:["update:modelValue","submit"],setup(n,{emit:r}){const{appContext:a}=e.getCurrentInstance(),{$message:s}=a.config.globalProperties,o=Y("llmName")||"szjy",t=e.computed(()=>le.find(h=>h.modelName===o)),c=n,y=r,g=e.ref(""),b=e.ref(null),E=e.ref(!1),T=e.ref([]),z=e.ref(["什么是AI助理,能做什么?","当前项目的基本情况?","当前项目的进度情况?","当前项目的参建方有哪些?","数智建管平台有哪些功能?能做什么?"]),_=e.ref([]),V=e.ref(!1),B=e.ref(null),j=()=>{e.nextTick(()=>{if(B.value){const h=B.value,v=h.scrollHeight,N=h.scrollTop,L=h.clientHeight;v-N-L<100?h.scrollTop=v:h.scrollTo({top:v})}})},m=e.ref(!1),u=e.computed(()=>m.value?"/images/ai-stop.png":"/images/ai-send.png"),f=(h,v)=>{console.log("onFailedReader",h,v),V.value=!1;const N=k();N&&N.initializeEnd(),s.error("转换失败,请重试"),m.value=!1,setTimeout(()=>{b.value&&b.value.focus()})},i=(h,v)=>{V.value=!1,m.value=!1,j(),v&&T.value[h]&&(T.value[h].displayText=v),setTimeout(()=>{b.value&&b.value.focus()})},l=h=>{m.value=!0},w=()=>{m.value=!1,y("update:modelValue",!1),E.value=!1,T.value=[]},p=e.ref(!1),S=()=>{p.value=!p.value},x=h=>{g.value=h,d()},k=()=>{for(let h=_.value.length-1;h>=0;h--)if(_.value[h])return _.value[h];return null},d=async()=>{if(console.log("stylizingLoading:",V.value),V.value){const C=k();console.log("lastPreviewer:",C),C&&(console.log("abortReader"),C.abortReader());return}if(!g.value.trim()){console.log("no input, return"),b.value.focus();return}T.value.push({type:"user",content:g.value}),m.value=!0,E.value=!0,y("submit",g.value),j();const h=g.value;g.value="";const v=T.value.length;_.value[v]&&_.value[v].initializeStart(),V.value=!0,T.value.push({type:"ai"});const{error:N,reader:L}=await ce(t.value,{text:h,token:c.token,identifier:c.identifier,baseUrl:c.baseUrl});if(N){console.log(45455,N),f(v,N);return}L&&(T.value[v].reader=L)};return(h,v)=>{const N=e.resolveComponent("el-icon"),L=e.resolveComponent("el-input");return e.openBlock(),e.createBlock(e.Transition,{name:"slide"},{default:e.withCtx(()=>[n.modelValue?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["ai-panel",{"drawer-mode":p.value}])},[e.createElementVNode("div",he,[e.createElementVNode("div",ge,[e.createElementVNode("div",ye,e.toDisplayString(n.title),1),e.createElementVNode("div",we,[e.createVNode(N,{class:"action-icon",onClick:S},{default:e.withCtx(()=>[e.createVNode($,{name:"/images/svg/drawer-layout.svg",color:"#999999"})]),_:1}),e.createVNode(N,{class:"action-icon",onClick:w},{default:e.withCtx(()=>[e.createVNode($,{name:"/images/svg/close.svg",color:"#999999"})]),_:1})])])]),e.createElementVNode("div",be,[E.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:"chat-messages",ref_key:"messageContainerRef",ref:B},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.value,(C,O)=>(e.openBlock(),e.createElementBlock("div",{key:O,class:e.normalizeClass(["message-item",C.type==="user"?"user-message":"ai-message"])},[C.type==="ai"?(e.openBlock(),e.createBlock(pe,{key:0,ref_for:!0,ref:P=>_.value[O]=P,reader:C.reader,"onUpdate:reader":P=>C.reader=P,model:e.unref(o),displayText:C.displayText,scrollToBottomFn:j,messagePostRender:n.messagePostRender,onFailed:P=>f(O,P),onCompleted:P=>i(O,P),onUpdating:()=>l()},null,8,["reader","onUpdate:reader","model","displayText","messagePostRender","onFailed","onCompleted","onUpdating"])):(e.openBlock(),e.createElementBlock("div",Ne,e.toDisplayString(C.content),1))],2))),128))],512)):(e.openBlock(),e.createElementBlock("div",ke,[v[2]||(v[2]=e.createElementVNode("div",{class:"title"},[e.createElementVNode("img",{src:X,alt:"AI助手",class:"panel-icon"}),e.createElementVNode("h3",{class:"title-text"},"Hi, 您好")],-1)),e.createElementVNode("div",ve,[v[1]||(v[1]=e.createTextVNode(" 我是",-1)),e.createElementVNode("span",xe,e.toDisplayString(n.title),1)]),e.createElementVNode("div",Se,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(z.value,(C,O)=>(e.openBlock(),e.createElementBlock("div",{key:O,class:"question-item",onClick:P=>x(C)},[e.createElementVNode("span",null,e.toDisplayString(C),1),e.createVNode(N,null,{default:e.withCtx(()=>[e.createVNode($,{name:"/images/svg/arrow-right.svg",color:"#999999"})]),_:1})],8,_e))),128))])]))]),e.createElementVNode("div",Ce,[m.value?(e.openBlock(),e.createElementBlock("img",Ee)):e.createCommentVNode("",!0),e.createElementVNode("div",Te,[e.createVNode(L,{modelValue:g.value,"onUpdate:modelValue":v[0]||(v[0]=C=>g.value=C),ref_key:"refInputTextString",ref:b,placeholder:"请输入您的问题",autofocus:"",onKeyup:e.withKeys(d,["enter"])},{append:e.withCtx(()=>[e.createElementVNode("div",{class:"send-icon-box",onClick:d},[e.createElementVNode("img",{src:u.value,alt:"发送",class:"send-icon"},null,8,Re)])]),_:1},8,["modelValue"])])])],2)):e.createCommentVNode("",!0)]),_:1})}}};var F={exports:{}};(function(n,r){(function(a,s){n.exports=s()})(window,function(){return function(a){var s={};function o(t){if(s[t])return s[t].exports;var c=s[t]={i:t,l:!1,exports:{}};return a[t].call(c.exports,c,c.exports,o),c.l=!0,c.exports}return o.m=a,o.c=s,o.d=function(t,c,y){o.o(t,c)||Object.defineProperty(t,c,{enumerable:!0,get:y})},o.r=function(t){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(t,c){if(1&c&&(t=o(t)),8&c||4&c&&typeof t=="object"&&t&&t.__esModule)return t;var y=Object.create(null);if(o.r(y),Object.defineProperty(y,"default",{enumerable:!0,value:t}),2&c&&typeof t!="string")for(var g in t)o.d(y,g,(function(b){return t[b]}).bind(null,g));return y},o.n=function(t){var c=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(c,"a",c),c},o.o=function(t,c){return Object.prototype.hasOwnProperty.call(t,c)},o.p="",o(o.s=0)}([function(a,s,o){function t(m,u,f,i){f.push(m),i.push([].concat(u[m]||[]))}function c(m,u){if(!m)throw new Error("[getMaxDepsChain] dep 参数不能为空");var f=[],i=[],l=[];for(t(m,u,i,l);i.length;){var w=l.pop();if(w&&w.length){var p=w.shift();if(l.push(w),~i.indexOf(p))throw new Error("[getMaxDepsChain][loop] 存在循环依赖,请检查依赖关系; nextName: "+p+", mainStack: "+i);t(p,u,i,l)}else f.push([].concat(i)),i.pop()}return f.reduce(function(S,x){return x.length>S.length?x:S},[])}function y(m){if(!m)throw new Error("[depsParser] 入参不能为空");var u={};m.forEach(function(i){u[i.name]=i.deps||[]});var f=[];return m.forEach(function(i){var l=c(i.name,u).length-1;i.priority=l,f[l]=(f[l]||[]).concat(i)}),f}o.r(s),o.d(s,"loadScript",function(){return z}),o.d(s,"loadScripts",function(){return _}),o.d(s,"dynamicLoadScripts",function(){return V}),o.d(s,"createScriptsLoadIterator",function(){return B}),o.d(s,"loadScriptsQueue",function(){return j}),o.d(s,"getMaxDepsChain",function(){return c}),o.d(s,"depsParser",function(){return y});var g=function(){return(g=Object.assign||function(m){for(var u,f=1,i=arguments.length;f<i;f++)for(var l in u=arguments[f])Object.prototype.hasOwnProperty.call(u,l)&&(m[l]=u[l]);return m}).apply(this,arguments)},b=function(m,u,f,i){return new(f||(f=Promise))(function(l,w){function p(k){try{x(i.next(k))}catch(d){w(d)}}function S(k){try{x(i.throw(k))}catch(d){w(d)}}function x(k){var d;k.done?l(k.value):(d=k.value,d instanceof f?d:new f(function(h){h(d)})).then(p,S)}x((i=i.apply(m,[])).next())})},E=function(m,u){var f,i,l,w,p={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return w={next:S(0),throw:S(1),return:S(2)},typeof Symbol=="function"&&(w[Symbol.iterator]=function(){return this}),w;function S(x){return function(k){return function(d){if(f)throw new TypeError("Generator is already executing.");for(;p;)try{if(f=1,i&&(l=2&d[0]?i.return:d[0]?i.throw||((l=i.return)&&l.call(i),0):i.next)&&!(l=l.call(i,d[1])).done)return l;switch(i=0,l&&(d=[2&d[0],l.value]),d[0]){case 0:case 1:l=d;break;case 4:return p.label++,{value:d[1],done:!1};case 5:p.label++,i=d[1],d=[0];continue;case 7:d=p.ops.pop(),p.trys.pop();continue;default:if(l=p.trys,!((l=l.length>0&&l[l.length-1])||d[0]!==6&&d[0]!==2)){p=0;continue}if(d[0]===3&&(!l||d[1]>l[0]&&d[1]<l[3])){p.label=d[1];break}if(d[0]===6&&p.label<l[1]){p.label=l[1],l=d;break}if(l&&p.label<l[2]){p.label=l[2],p.ops.push(d);break}l[2]&&p.ops.pop(),p.trys.pop();continue}d=u.call(m,p)}catch(h){d=[6,h],i=0}finally{f=l=0}if(5&d[0])throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}([x,k])}}},T=function(m){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var u,f=m[Symbol.asyncIterator];return f?f.call(m):(m=typeof __values=="function"?__values(m):m[Symbol.iterator](),u={},i("next"),i("throw"),i("return"),u[Symbol.asyncIterator]=function(){return this},u);function i(l){u[l]=m[l]&&function(w){return new Promise(function(p,S){(function(x,k,d,h){Promise.resolve(h).then(function(v){x({value:v,done:d})},k)})(p,S,(w=m[l](w)).done,w.value)})}}};function z(m,u){return u===void 0&&(u=!1),new Promise(function(f,i){var l=u?document.head:document.body,w=document.createElement("script");w.type="text/javascript",w.src=m,w.crossOrigin="anonymous",w.onreadystatechange=f,w.onload=f,w.onerror=i,l.appendChild(w)})}var _=function(m,u){return u===void 0&&(u={}),b(void 0,void 0,void 0,function(){var f,i,l,w,p;return E(this,function(S){switch(S.label){case 0:return f=u.baseUrl,i=f===void 0?"":f,l=u.lastLoadResult,w=u.inHead,p=w!==void 0&&w,[4,Promise.all(m.map(function(x){return b(void 0,void 0,void 0,function(){var k,d,h,v,N,L,C,O;return E(this,function(P){switch(P.label){case 0:return k=x.name,d=x.path,h=x.deps,(C={})[k]=!0,v=C,(O={})[k]=!1,N=O,window[k]?[2,v]:[3,1];case 1:return L=!0,h&&l&&[].concat(h).forEach(function(qe){l[qe]!==!1&&(L=!0)}),L?[4,z(d.indexOf("http")===0||d.indexOf("//:")===0?d:i+d,p).then(function(){return v}).catch(function(){return N})]:[3,3];case 2:return[2,P.sent()];case 3:return[2,N]}})})}))];case 1:return[2,S.sent()]}})})},V=function(m,u){return u===void 0&&(u={}),function(){var f=[].concat(y(m));return{next:function(){if(f.length){var i=f.shift();return _(i,u).then(function(l){return{value:l,done:!1}})}return Promise.resolve({done:!0})}}}},B=function(m,u){var f;return u===void 0&&(u={}),(f={})[Symbol.asyncIterator]=V(m,u),f},j=function(m,u){return u===void 0&&(u={}),b(void 0,void 0,void 0,function(){var f,i,l,w,p,S;return E(this,function(x){switch(x.label){case 0:x.trys.push([0,5,6,11]),f=T(B(m,u)),x.label=1;case 1:return[4,f.next()];case 2:if((i=x.sent()).done)return[3,4];l=i.value,u.lastLoadResult=u.lastLoadResult||{},console.log("current load: ",l),l.forEach(function(k){u.lastLoadResult=g(g({},u.lastLoadResult),k)}),x.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return w=x.sent(),p={error:w},[3,11];case 6:return x.trys.push([6,,9,10]),i&&!i.done&&(S=f.return)?[4,S.call(f)]:[3,8];case 7:x.sent(),x.label=8;case 8:return[3,10];case 9:if(p)throw p.error;return[7];case 10:return[7];case 11:return[2,u.lastLoadResult]}})})}}])})})(F);var Ve=F.exports;const Be={key:0,class:"ai-assistant"},Le={name:"AiChat"},Oe=e.defineComponent({...Le,props:{token:{type:String,default:""},identifier:{type:String,default:""},baseUrl:{type:String,default:""},title:{type:String,default:"数智AI助理"},messagePostRender:{type:Function,default:null}},setup(n){const r=e.ref(!1),a=e.ref(!1),s=()=>{r.value=!r.value},o=()=>{a.value=!0,r.value=!1},t=g=>{console.log("用户输入:",g)},c=[{name:"markdownit",path:"markdown-it.min.js"},{name:"hljs",path:"highlight.11.11.1.min.js"}];let y={};return Ve.loadScriptsQueue(c,{baseUrl:"/scripts/ai/",lastLoadResult:y,inHead:!1}).then(g=>{if(console.log("load ai deps: ",g),window.markdownit){const b=window.markdownit();console.log("markdownit: ",b),de()}}),(g,b)=>a.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Be,[e.createVNode(Pe,{modelValue:r.value,"onUpdate:modelValue":b[0]||(b[0]=E=>r.value=E),onSubmit:t,token:n.token,identifier:n.identifier,baseUrl:n.baseUrl,title:n.title,messagePostRender:n.messagePostRender},null,8,["modelValue","token","identifier","baseUrl","title","messagePostRender"]),e.createElementVNode("div",{class:"ai-icon",onClick:s},[e.createElementVNode("div",{class:"close-icon",onClick:e.withModifiers(o,["stop"])},[...b[1]||(b[1]=[e.createElementVNode("svg",{viewBox:"0 0 1024 1024",width:"8",height:"8"},[e.createElementVNode("path",{d:"M512 456.310154L94.247385 38.557538a39.384615 39.384615 0 0 0-55.689847 55.689847L456.310154 512 38.557538 929.752615a39.384615 39.384615 0 0 0 55.689847 55.689847L512 567.689846l417.752615 417.752616c15.163077 15.163077 40.526769 15.163077 55.689847 0s15.163077-40.526769 0-55.689847L567.689846 512l417.752616-417.752615a39.384615 39.384615 0 0 0-55.689847-55.689847L512 456.310154z",fill:"currentColor"})],-1)])]),b[2]||(b[2]=e.createElementVNode("img",{src:K,alt:"AI助手"},null,-1)),b[3]||(b[3]=e.createElementVNode("span",{class:"ai-icon-text"},"AI助手",-1))])]))}}),D=q(Oe,[["__scopeId","data-v-a4639f2d"]]),W=Object.freeze(Object.defineProperty({__proto__:null,SzAiChat:D},Symbol.toStringTag,{value:"Module"})),U=function(n){if(!U.installed){U.installed=!0;for(let r in W){const a=Reflect.get(W,r);n.component(a.name,a)}}},ze=n=>{console.log(`点击了路由链接: ${n}`)},je={color:"#536fec",fontWeight:"bold",textDecoration:"underline",cursor:"pointer",padding:"0 3px"},H=n=>{const r=/#router:([^#]+)#/g,a=[];let s=0,o;for(;(o=r.exec(n))!==null;){o.index>s&&a.push({text:n.substring(s,o.index)});const t=o[1];a.push({text:t,routeName:t}),s=r.lastIndex}return s<n.length&&a.push({text:n.substring(s)}),a},J=(n,r,a={})=>{const{onRouteClick:s=ze,linkStyle:o={}}=a,t=document.createElement("a");t.href="#",t.textContent=n;const c={...je,...o};return Object.assign(t.style,c),t.addEventListener("click",y=>{y.preventDefault(),s(r)}),t},Q=n=>{const r=/#router:([^#]+)#/g,a=[],s=document.createTreeWalker(n,NodeFilter.SHOW_TEXT,null);let o=s.nextNode();for(;o;){const t=o,c=t.textContent||"";if(r.test(c)){r.lastIndex=0;const y=H(c);y.length>0&&a.push({node:t,replacements:y})}o=s.nextNode()}return a},Ie=(n,r,a={})=>{Q(n).forEach(({node:o,replacements:t})=>{var y;const c=document.createDocumentFragment();t.forEach(({text:g,routeName:b})=>{if(b){const E=J(g,b,a);c.appendChild(E)}else c.appendChild(document.createTextNode(g))}),(y=o.parentNode)==null||y.replaceChild(c,o)})},$e="0.1.3",Ue="Sz";function Ae({componentPrefix:n=Ue,components:r=[]}={}){const a=[];function s(t,c,y){t.component(n+c)||t.component(n+c,y)}function o(t){a.includes(t)||(a.push(t),r.forEach(c=>{const{name:y,alias:g}=c;s(t,y,c),g&&g.forEach(b=>{s(t,b,c)})}))}return{version:$e,componentPrefix:n,install:o}}const Me={install(n){U(n)}};R.SzAiChat=D,R.create=Ae,R.createRouteLink=J,R.default=Me,R.findRouteTextNodes=Q,R.parseRouteMarkers=H,R.routeLinkRender=Ie,Object.defineProperties(R,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
2
+ `)).getReader();console.log("reader from response:",t),s({error:0,reader:t})}else s({error:1,reader:null})}).catch(o=>{s({error:1,reader:null})})}):{error:1,reader:null}}let I=null;function de(){return I||(window.markdownit?I=new window.markdownit({html:!0,linkify:!0,typographer:!0}):console.log("markdownit is not loaded"),I)}const q=(n,r)=>{const a=n.__vccOpts||n;for(const[s,o]of r)a[s]=o;return a},ue=["src","alt"],$=q({__name:"SvgIcon",props:{name:{type:String,required:!0},size:{type:[Number,String],default:16},color:{type:String,default:""},className:{type:String,default:""},basePath:{type:String,default:"/icons/"}},setup(n){const r=n,a=e.computed(()=>{if(r.name.startsWith("http://")||r.name.startsWith("https://")||r.name.startsWith("/"))return r.name;const t=r.name.endsWith(".svg")?r.name:`${r.name}.svg`;return`${r.basePath}${t}`}),s=e.computed(()=>{const t=typeof r.size=="number"?`${r.size}px`:r.size;return{width:t,height:t,display:"inline-flex",justifyContent:"center",alignItems:"center"}}),o=e.computed(()=>{const t={width:"100%",height:"100%"};return r.color&&(t.filter=`drop-shadow(0 0 0 ${r.color})`),t});return(t,c)=>(e.openBlock(),e.createElementBlock("div",{class:"svg-icon-wrapper",style:e.normalizeStyle(s.value)},[e.createElementVNode("img",{src:a.value,alt:n.name,class:e.normalizeClass(["svg-icon",n.className]),style:e.normalizeStyle(o.value)},null,14,ue)],4))}},[["__scopeId","data-v-490b11c1"]]),fe=async n=>{if(navigator.clipboard&&navigator.permissions)await navigator.clipboard.writeText(n);else{const r=document.createElement("textArea");r.value=n,r.style.width=0,r.style.position="fixed",r.style.left="-999px",r.style.top="10px",r.setAttribute("readonly","readonly"),document.body.appendChild(r),r.select(),document.execCommand("copy"),document.body.removeChild(r)}},me=["innerHTML"],pe={__name:"Previewer",props:{reader:null,model:"szjy",scrollToBottomFn:null,displayText:"",messagePostRender:{type:Function,default:null}},emits:["failed","completed","updating"],setup(n,{expose:r,emit:a}){const{appContext:s}=e.getCurrentInstance(),{$message:o}=s.config.globalProperties,t=n,c=e.ref(t.displayText||""),y=e.ref(""),g=e.ref(!0),w=e.ref(!1),E=e.ref(!!t.displayText),T=a,z=e.ref(null);let _=null;const V=e.computed(()=>I?I.render(c.value):c.value),B=()=>{t.reader&&t.reader.cancel(),w.value=!0,i.value=!1,f(),E.value=!0,T("completed",c.value),g.value=!1,_&&(cancelAnimationFrame(_),_=null)},j=e.computed(()=>`${V.value}`),m=e.ref(!1),u=()=>{m.value=!0},f=()=>{m.value=!1},i=e.ref(!1),l=async()=>{if(!t.reader)return;const k=new TextDecoder("utf-8");for(g.value=!0;!w.value;)try{if(!t.reader){i.value=!0;break}const{value:d,done:h}=await t.reader.read();if(!t.reader){i.value=!0;break}if(h){i.value=!0;break}const v=A[t.model];if(!v)break;const N=v.call(A,d,k);if(N.done){i.value=!0;break}y.value+=N.content,_===null&&S()}catch(d){i.value=!0,console.log(3333,d),T("failed",d),B();break}finally{f()}},b=async()=>{t.scrollToBottomFn&&t.scrollToBottomFn()},p=(k=()=>{},d=()=>{})=>{if(y.value.length>0){const h=y.value.substring(0,10);c.value+=h,y.value=y.value.substring(10),k()}else d()},S=()=>{if(w.value&&_){cancelAnimationFrame(_),_=null,g.value=!1;return}i.value?p(()=>{_=requestAnimationFrame(S),T("updating",null)},()=>{T("completed",c.value),g.value=!1,E.value=!0,e.nextTick(()=>{if(i.value=!1,t.messagePostRender&&z.value)try{t.messagePostRender(z.value,c.value)}catch(k){console.error("messagePostRender 执行失败:",k)}}),_=null}):(p(),_=requestAnimationFrame(S)),b()};e.watch(()=>t.reader,()=>{t.reader&&l()},{immediate:!0,deep:!0}),e.onUnmounted(()=>{B()}),r({abortReader:B,initializeStart:u,initializeEnd:f}),e.computed(()=>m.value?!0:(!t.reader||!g||c.value,!1));const x=async()=>{try{const k=c.value;await fe(k),o.success("复制成功")}catch(k){console.error("复制失败:",k),o.error("复制失败")}};return(k,d)=>(e.openBlock(),e.createBlock(e.Transition,{name:"fade"},{default:e.withCtx(()=>[j.value?(e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"refWrapperContent",ref:z,"text-16":"",class:"w-full h-full overflow-y-auto relative","p-24px":""},[e.createElementVNode("div",{class:"markdown-wrapper",innerHTML:j.value},null,8,me),E.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"ai-copy-btn-wrapper",onClick:x},[e.createVNode($,{name:"/images/svg/copy.svg",color:"#666666"}),d[0]||(d[0]=e.createElementVNode("span",{class:"copy-text"},"复制",-1))])):e.createCommentVNode("",!0)],512)):e.createCommentVNode("",!0)]),_:1}))}},he={class:"panel-header"},ge={class:"header-actions"},ye={class:"header-title"},be={class:"action-icons"},we={class:"body-content"},ke={key:0,class:"welcome-content"},ve={class:"subtitle"},xe={class:"highlight"},Se={class:"quick-questions"},_e=["onClick"],Ne={key:1,class:"message-content user-content"},Ce={class:"panel-footer"},Ee={key:0,src:G,alt:"加载中",class:"loading-icon"},Te={class:"input-box"},Re=["src"],Pe={__name:"ChatPanel",props:{modelValue:{type:Boolean,default:!1},token:{type:String,default:""},identifier:{type:String,default:""},baseUrl:{type:String,default:""},title:{type:String,default:"数智AI助理"},messagePostRender:{type:Function,default:null}},emits:["update:modelValue","submit"],setup(n,{emit:r}){const{appContext:a}=e.getCurrentInstance(),{$message:s}=a.config.globalProperties,o=Y("llmName")||"szjy",t=e.computed(()=>le.find(h=>h.modelName===o)),c=n,y=r,g=e.ref(""),w=e.ref(null),E=e.ref(!1),T=e.ref([]),z=e.ref(["什么是AI助理,能做什么?","当前项目的基本情况?","当前项目的进度情况?","当前项目的参建方有哪些?","数智建管平台有哪些功能?能做什么?"]),_=e.ref([]),V=e.ref(!1),B=e.ref(null),j=()=>{e.nextTick(()=>{if(B.value){const h=B.value,v=h.scrollHeight,N=h.scrollTop,L=h.clientHeight;v-N-L<100?h.scrollTop=v:h.scrollTo({top:v})}})},m=e.ref(!1),u=e.computed(()=>m.value?"/images/ai-stop.png":"/images/ai-send.png"),f=(h,v)=>{console.log("onFailedReader",h,v),V.value=!1;const N=k();N&&N.initializeEnd(),s.error("转换失败,请重试"),m.value=!1,setTimeout(()=>{w.value&&w.value.focus()})},i=(h,v)=>{V.value=!1,m.value=!1,j(),v&&T.value[h]&&(T.value[h].displayText=v),setTimeout(()=>{w.value&&w.value.focus()})},l=h=>{m.value=!0},b=()=>{m.value=!1,y("update:modelValue",!1),E.value=!1,T.value=[]},p=e.ref(!1),S=()=>{p.value=!p.value},x=h=>{g.value=h,d()},k=()=>{for(let h=_.value.length-1;h>=0;h--)if(_.value[h])return _.value[h];return null},d=async()=>{if(console.log("stylizingLoading:",V.value),V.value){const C=k();console.log("lastPreviewer:",C),C&&(console.log("abortReader"),C.abortReader());return}if(!g.value.trim()){console.log("no input, return"),w.value.focus();return}T.value.push({type:"user",content:g.value}),m.value=!0,E.value=!0,y("submit",g.value),j();const h=g.value;g.value="";const v=T.value.length;_.value[v]&&_.value[v].initializeStart(),V.value=!0,T.value.push({type:"ai"});const{error:N,reader:L}=await ce(t.value,{text:h,token:c.token,identifier:c.identifier,baseUrl:c.baseUrl});if(N){console.log(45455,N),f(v,N);return}L&&(T.value[v].reader=L)};return(h,v)=>{const N=e.resolveComponent("el-icon"),L=e.resolveComponent("el-input");return e.openBlock(),e.createBlock(e.Transition,{name:"slide"},{default:e.withCtx(()=>[n.modelValue?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["ai-panel",{"drawer-mode":p.value}])},[e.createElementVNode("div",he,[e.createElementVNode("div",ge,[e.createElementVNode("div",ye,e.toDisplayString(n.title),1),e.createElementVNode("div",be,[e.createVNode(N,{class:"action-icon",onClick:S},{default:e.withCtx(()=>[e.createVNode($,{name:"/images/svg/drawer-layout.svg",color:"#999999"})]),_:1}),e.createVNode(N,{class:"action-icon",onClick:b},{default:e.withCtx(()=>[e.createVNode($,{name:"/images/svg/close.svg",color:"#999999"})]),_:1})])])]),e.createElementVNode("div",we,[E.value?(e.openBlock(),e.createElementBlock("div",{key:1,class:"chat-messages",ref_key:"messageContainerRef",ref:B},[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(T.value,(C,O)=>(e.openBlock(),e.createElementBlock("div",{key:O,class:e.normalizeClass(["message-item",C.type==="user"?"user-message":"ai-message"])},[C.type==="ai"?(e.openBlock(),e.createBlock(pe,{key:0,ref_for:!0,ref:P=>_.value[O]=P,reader:C.reader,"onUpdate:reader":P=>C.reader=P,model:e.unref(o),displayText:C.displayText,scrollToBottomFn:j,messagePostRender:n.messagePostRender,onFailed:P=>f(O,P),onCompleted:P=>i(O,P),onUpdating:()=>l()},null,8,["reader","onUpdate:reader","model","displayText","messagePostRender","onFailed","onCompleted","onUpdating"])):(e.openBlock(),e.createElementBlock("div",Ne,e.toDisplayString(C.content),1))],2))),128))],512)):(e.openBlock(),e.createElementBlock("div",ke,[v[2]||(v[2]=e.createElementVNode("div",{class:"title"},[e.createElementVNode("img",{src:X,alt:"AI助手",class:"panel-icon"}),e.createElementVNode("h3",{class:"title-text"},"Hi, 您好")],-1)),e.createElementVNode("div",ve,[v[1]||(v[1]=e.createTextVNode(" 我是",-1)),e.createElementVNode("span",xe,e.toDisplayString(n.title),1)]),e.createElementVNode("div",Se,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(z.value,(C,O)=>(e.openBlock(),e.createElementBlock("div",{key:O,class:"question-item",onClick:P=>x(C)},[e.createElementVNode("span",null,e.toDisplayString(C),1),e.createVNode(N,null,{default:e.withCtx(()=>[e.createVNode($,{name:"/images/svg/arrow-right.svg",color:"#999999"})]),_:1})],8,_e))),128))])]))]),e.createElementVNode("div",Ce,[m.value?(e.openBlock(),e.createElementBlock("img",Ee)):e.createCommentVNode("",!0),e.createElementVNode("div",Te,[e.createVNode(L,{modelValue:g.value,"onUpdate:modelValue":v[0]||(v[0]=C=>g.value=C),ref_key:"refInputTextString",ref:w,placeholder:"请输入您的问题",autofocus:"",onKeyup:e.withKeys(d,["enter"])},{append:e.withCtx(()=>[e.createElementVNode("div",{class:"send-icon-box",onClick:d},[e.createElementVNode("img",{src:u.value,alt:"发送",class:"send-icon"},null,8,Re)])]),_:1},8,["modelValue"])])])],2)):e.createCommentVNode("",!0)]),_:1})}}};var F={exports:{}};(function(n,r){(function(a,s){n.exports=s()})(window,function(){return function(a){var s={};function o(t){if(s[t])return s[t].exports;var c=s[t]={i:t,l:!1,exports:{}};return a[t].call(c.exports,c,c.exports,o),c.l=!0,c.exports}return o.m=a,o.c=s,o.d=function(t,c,y){o.o(t,c)||Object.defineProperty(t,c,{enumerable:!0,get:y})},o.r=function(t){typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},o.t=function(t,c){if(1&c&&(t=o(t)),8&c||4&c&&typeof t=="object"&&t&&t.__esModule)return t;var y=Object.create(null);if(o.r(y),Object.defineProperty(y,"default",{enumerable:!0,value:t}),2&c&&typeof t!="string")for(var g in t)o.d(y,g,(function(w){return t[w]}).bind(null,g));return y},o.n=function(t){var c=t&&t.__esModule?function(){return t.default}:function(){return t};return o.d(c,"a",c),c},o.o=function(t,c){return Object.prototype.hasOwnProperty.call(t,c)},o.p="",o(o.s=0)}([function(a,s,o){function t(m,u,f,i){f.push(m),i.push([].concat(u[m]||[]))}function c(m,u){if(!m)throw new Error("[getMaxDepsChain] dep 参数不能为空");var f=[],i=[],l=[];for(t(m,u,i,l);i.length;){var b=l.pop();if(b&&b.length){var p=b.shift();if(l.push(b),~i.indexOf(p))throw new Error("[getMaxDepsChain][loop] 存在循环依赖,请检查依赖关系; nextName: "+p+", mainStack: "+i);t(p,u,i,l)}else f.push([].concat(i)),i.pop()}return f.reduce(function(S,x){return x.length>S.length?x:S},[])}function y(m){if(!m)throw new Error("[depsParser] 入参不能为空");var u={};m.forEach(function(i){u[i.name]=i.deps||[]});var f=[];return m.forEach(function(i){var l=c(i.name,u).length-1;i.priority=l,f[l]=(f[l]||[]).concat(i)}),f}o.r(s),o.d(s,"loadScript",function(){return z}),o.d(s,"loadScripts",function(){return _}),o.d(s,"dynamicLoadScripts",function(){return V}),o.d(s,"createScriptsLoadIterator",function(){return B}),o.d(s,"loadScriptsQueue",function(){return j}),o.d(s,"getMaxDepsChain",function(){return c}),o.d(s,"depsParser",function(){return y});var g=function(){return(g=Object.assign||function(m){for(var u,f=1,i=arguments.length;f<i;f++)for(var l in u=arguments[f])Object.prototype.hasOwnProperty.call(u,l)&&(m[l]=u[l]);return m}).apply(this,arguments)},w=function(m,u,f,i){return new(f||(f=Promise))(function(l,b){function p(k){try{x(i.next(k))}catch(d){b(d)}}function S(k){try{x(i.throw(k))}catch(d){b(d)}}function x(k){var d;k.done?l(k.value):(d=k.value,d instanceof f?d:new f(function(h){h(d)})).then(p,S)}x((i=i.apply(m,[])).next())})},E=function(m,u){var f,i,l,b,p={label:0,sent:function(){if(1&l[0])throw l[1];return l[1]},trys:[],ops:[]};return b={next:S(0),throw:S(1),return:S(2)},typeof Symbol=="function"&&(b[Symbol.iterator]=function(){return this}),b;function S(x){return function(k){return function(d){if(f)throw new TypeError("Generator is already executing.");for(;p;)try{if(f=1,i&&(l=2&d[0]?i.return:d[0]?i.throw||((l=i.return)&&l.call(i),0):i.next)&&!(l=l.call(i,d[1])).done)return l;switch(i=0,l&&(d=[2&d[0],l.value]),d[0]){case 0:case 1:l=d;break;case 4:return p.label++,{value:d[1],done:!1};case 5:p.label++,i=d[1],d=[0];continue;case 7:d=p.ops.pop(),p.trys.pop();continue;default:if(l=p.trys,!((l=l.length>0&&l[l.length-1])||d[0]!==6&&d[0]!==2)){p=0;continue}if(d[0]===3&&(!l||d[1]>l[0]&&d[1]<l[3])){p.label=d[1];break}if(d[0]===6&&p.label<l[1]){p.label=l[1],l=d;break}if(l&&p.label<l[2]){p.label=l[2],p.ops.push(d);break}l[2]&&p.ops.pop(),p.trys.pop();continue}d=u.call(m,p)}catch(h){d=[6,h],i=0}finally{f=l=0}if(5&d[0])throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}([x,k])}}},T=function(m){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var u,f=m[Symbol.asyncIterator];return f?f.call(m):(m=typeof __values=="function"?__values(m):m[Symbol.iterator](),u={},i("next"),i("throw"),i("return"),u[Symbol.asyncIterator]=function(){return this},u);function i(l){u[l]=m[l]&&function(b){return new Promise(function(p,S){(function(x,k,d,h){Promise.resolve(h).then(function(v){x({value:v,done:d})},k)})(p,S,(b=m[l](b)).done,b.value)})}}};function z(m,u){return u===void 0&&(u=!1),new Promise(function(f,i){var l=u?document.head:document.body,b=document.createElement("script");b.type="text/javascript",b.src=m,b.crossOrigin="anonymous",b.onreadystatechange=f,b.onload=f,b.onerror=i,l.appendChild(b)})}var _=function(m,u){return u===void 0&&(u={}),w(void 0,void 0,void 0,function(){var f,i,l,b,p;return E(this,function(S){switch(S.label){case 0:return f=u.baseUrl,i=f===void 0?"":f,l=u.lastLoadResult,b=u.inHead,p=b!==void 0&&b,[4,Promise.all(m.map(function(x){return w(void 0,void 0,void 0,function(){var k,d,h,v,N,L,C,O;return E(this,function(P){switch(P.label){case 0:return k=x.name,d=x.path,h=x.deps,(C={})[k]=!0,v=C,(O={})[k]=!1,N=O,window[k]?[2,v]:[3,1];case 1:return L=!0,h&&l&&[].concat(h).forEach(function(qe){l[qe]!==!1&&(L=!0)}),L?[4,z(d.indexOf("http")===0||d.indexOf("//:")===0?d:i+d,p).then(function(){return v}).catch(function(){return N})]:[3,3];case 2:return[2,P.sent()];case 3:return[2,N]}})})}))];case 1:return[2,S.sent()]}})})},V=function(m,u){return u===void 0&&(u={}),function(){var f=[].concat(y(m));return{next:function(){if(f.length){var i=f.shift();return _(i,u).then(function(l){return{value:l,done:!1}})}return Promise.resolve({done:!0})}}}},B=function(m,u){var f;return u===void 0&&(u={}),(f={})[Symbol.asyncIterator]=V(m,u),f},j=function(m,u){return u===void 0&&(u={}),w(void 0,void 0,void 0,function(){var f,i,l,b,p,S;return E(this,function(x){switch(x.label){case 0:x.trys.push([0,5,6,11]),f=T(B(m,u)),x.label=1;case 1:return[4,f.next()];case 2:if((i=x.sent()).done)return[3,4];l=i.value,u.lastLoadResult=u.lastLoadResult||{},console.log("current load: ",l),l.forEach(function(k){u.lastLoadResult=g(g({},u.lastLoadResult),k)}),x.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return b=x.sent(),p={error:b},[3,11];case 6:return x.trys.push([6,,9,10]),i&&!i.done&&(S=f.return)?[4,S.call(f)]:[3,8];case 7:x.sent(),x.label=8;case 8:return[3,10];case 9:if(p)throw p.error;return[7];case 10:return[7];case 11:return[2,u.lastLoadResult]}})})}}])})})(F);var Ve=F.exports;const Be={key:0,class:"ai-assistant"},Le={name:"AiChat"},Oe=e.defineComponent({...Le,props:{token:{type:String,default:""},identifier:{type:String,default:""},baseUrl:{type:String,default:""},title:{type:String,default:"数智AI助理"},messagePostRender:{type:Function,default:null}},setup(n){const r=e.ref(!1),a=e.ref(!1),s=()=>{r.value=!r.value},o=()=>{a.value=!0,r.value=!1},t=g=>{console.log("用户输入:",g)},c=[{name:"markdownit",path:"markdown-it.min.js"},{name:"hljs",path:"highlight.11.11.1.min.js"}];let y={};return Ve.loadScriptsQueue(c,{baseUrl:"/scripts/ai/",lastLoadResult:y,inHead:!1}).then(g=>{if(console.log("load ai deps: ",g),window.markdownit){const w=window.markdownit();console.log("markdownit: ",w),de()}}),(g,w)=>a.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",Be,[e.createVNode(Pe,{modelValue:r.value,"onUpdate:modelValue":w[0]||(w[0]=E=>r.value=E),onSubmit:t,token:n.token,identifier:n.identifier,baseUrl:n.baseUrl,title:n.title,messagePostRender:n.messagePostRender},null,8,["modelValue","token","identifier","baseUrl","title","messagePostRender"]),e.createElementVNode("div",{class:"ai-icon",onClick:s},[e.createElementVNode("div",{class:"close-icon",onClick:e.withModifiers(o,["stop"])},[...w[1]||(w[1]=[e.createElementVNode("svg",{viewBox:"0 0 1024 1024",width:"8",height:"8"},[e.createElementVNode("path",{d:"M512 456.310154L94.247385 38.557538a39.384615 39.384615 0 0 0-55.689847 55.689847L456.310154 512 38.557538 929.752615a39.384615 39.384615 0 0 0 55.689847 55.689847L512 567.689846l417.752615 417.752616c15.163077 15.163077 40.526769 15.163077 55.689847 0s15.163077-40.526769 0-55.689847L567.689846 512l417.752616-417.752615a39.384615 39.384615 0 0 0-55.689847-55.689847L512 456.310154z",fill:"currentColor"})],-1)])]),w[2]||(w[2]=e.createElementVNode("img",{src:K,alt:"AI助手"},null,-1)),w[3]||(w[3]=e.createElementVNode("span",{class:"ai-icon-text"},"AI助手",-1))])]))}}),D=q(Oe,[["__scopeId","data-v-a4639f2d"]]),W=Object.freeze(Object.defineProperty({__proto__:null,SzAiChat:D},Symbol.toStringTag,{value:"Module"})),U=function(n){if(!U.installed){U.installed=!0;for(let r in W){const a=Reflect.get(W,r);n.component(a.name,a)}}},ze=n=>{console.log(`点击了路由链接: ${n}`)},je={color:"#536fec",fontWeight:"bold",textDecoration:"underline",cursor:"pointer",padding:"0 3px"},H=n=>{const r=/#router:([^#]+)#/g,a=[];let s=0,o;for(;(o=r.exec(n))!==null;){o.index>s&&a.push({text:n.substring(s,o.index)});const t=o[1];a.push({text:t,routeName:t}),s=r.lastIndex}return s<n.length&&a.push({text:n.substring(s)}),a},J=(n,r,a={})=>{const{onRouteClick:s=ze,linkStyle:o={}}=a,t=document.createElement("a");t.href="#",t.textContent=n;const c={...je,...o};return Object.assign(t.style,c),t.addEventListener("click",y=>{y.preventDefault(),s(r)}),t},Q=n=>{const r=/#router:([^#]+)#/g,a=[],s=document.createTreeWalker(n,NodeFilter.SHOW_TEXT,null);let o=s.nextNode();for(;o;){const t=o,c=t.textContent||"";if(r.test(c)){r.lastIndex=0;const y=H(c);y.length>0&&a.push({node:t,replacements:y})}o=s.nextNode()}return a},Ie=(n,r,a={})=>{const s=Q(n);s.forEach(({node:o,replacements:t})=>{var y;const c=document.createDocumentFragment();t.forEach(({text:g,routeName:w})=>{if(w){const E=J(g,w,a);c.appendChild(E)}else c.appendChild(document.createTextNode(g))}),(y=o.parentNode)==null||y.replaceChild(c,o)}),a!=null&&a.nodeCallback&&s.forEach(({node:o,replacements:t})=>{var c;(c=a.nodeCallback)==null||c.call(a,o,t)})},$e="0.1.4",Ue="Sz";function Ae({componentPrefix:n=Ue,components:r=[]}={}){const a=[];function s(t,c,y){t.component(n+c)||t.component(n+c,y)}function o(t){a.includes(t)||(a.push(t),r.forEach(c=>{const{name:y,alias:g}=c;s(t,y,c),g&&g.forEach(w=>{s(t,w,c)})}))}return{version:$e,componentPrefix:n,install:o}}const Me={install(n){U(n)}};R.SzAiChat=D,R.create=Ae,R.createRouteLink=J,R.default=Me,R.findRouteTextNodes=Q,R.parseRouteMarkers=H,R.routeLinkRender=Ie,Object.defineProperties(R,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});
@@ -5,6 +5,8 @@
5
5
  export interface RouteLinkOptions {
6
6
  /** 路由跳转处理函数,接收路由名称作为参数 */
7
7
  onRouteClick?: (routeName: string) => void;
8
+ /** 节点遍历回调函数,接收节点和替换数组作为参数 */
9
+ nodeCallback?: (node: Node, replacements: RouteReplacement[]) => void;
8
10
  /** 链接样式配置 */
9
11
  linkStyle?: Partial<CSSStyleDeclaration>;
10
12
  }
package/dist/style.css CHANGED
@@ -1,4 +1,4 @@
1
- .svg-icon-wrapper[data-v-490b11c1]{position:relative;overflow:hidden;vertical-align:middle}.svg-icon[data-v-490b11c1]{width:1em;height:1em;fill:currentColor;vertical-align:middle;display:inline-block}.ai-copy-btn-wrapper{cursor:pointer;width:74px;height:24px;border-radius:12px;box-sizing:border-box;padding:10px 14px;border:1px solid #D9D9D9;display:flex;align-items:center;justify-content:center;font-size:12px;color:#666;line-height:20px;text-align:justify;margin-top:6px}.ai-copy-btn-wrapper .copy-text{margin-left:4px}.markdown-wrapper{line-height:1.2}.markdown-wrapper h1{font-size:2em}.markdown-wrapper h2{font-size:1.5em}.markdown-wrapper h3{font-size:1.25em}.markdown-wrapper h4{font-size:1em}.markdown-wrapper h5{font-size:.875em}.markdown-wrapper h6{font-size:.85em}.markdown-wrapper h1,.markdown-wrapper h2,.markdown-wrapper h3,.markdown-wrapper h4,.markdown-wrapper h5,.markdown-wrapper h6{margin:0 auto;line-height:1.25}.markdown-wrapper ul,.markdown-wrapper ol{padding-left:1.5em;line-height:.8}.markdown-wrapper ul,.markdown-wrapper li,.markdown-wrapper ol{list-style-position:outside;white-space:normal}.markdown-wrapper ul{list-style-type:disc}.markdown-wrapper ol{list-style-type:decimal}.markdown-wrapper li{line-height:1.5}.markdown-wrapper ol ol,.markdown-wrapper ul ul{padding-left:20px}.markdown-wrapper hr{margin:16px 0}.markdown-wrapper a{color:#536fec;font-weight:bolder;text-decoration:underline;padding:0 3px}.markdown-wrapper p{line-height:1.4}.markdown-wrapper p>code{--at-apply: "bg-#e5e5e5";--at-apply: whitespace-pre mx-4px px-6px py-3px rounded-5px}.markdown-wrapper p img{display:inline-block}.markdown-wrapper li>p{line-height:2}.markdown-wrapper strong{font-weight:700}.markdown-wrapper blockquote{padding:10px;margin:20px 0;border-left:5px solid #ccc;background-color:#f9f9f9;color:#555}.markdown-wrapper blockquote>p{margin:0}.ai-panel{margin-right:20px;width:400px;height:804px;background:#fff;border-radius:8px;box-shadow:0 8px 24px #00000026;display:flex;flex-direction:column;overflow:hidden;background-image:url(/images/ai-panel-bg.png);background-size:100% auto;background-position:top;background-repeat:no-repeat;position:relative;transition:all .3s ease}.ai-panel :deep(.el-input-group__append){box-sizing:border-box}.ai-panel.drawer-mode{position:fixed;right:0;top:0;bottom:0;height:100vh;margin:0;border-radius:0;z-index:2000}.ai-panel .panel-header{padding:20px;background:transparent}.ai-panel .panel-header .header-actions{display:flex;justify-content:space-between;gap:12px;align-items:center}.ai-panel .panel-header .header-actions .header-title{font-family:PingFangSC,PingFang SC;font-weight:700;font-size:16px;color:#333;line-height:24px;text-align:left;font-style:normal}.ai-panel .panel-header .header-actions .action-icons{display:flex;gap:12px}.ai-panel .panel-header .header-actions .action-icon{font-size:20px;color:#666;cursor:pointer}.ai-panel .panel-header .header-actions .action-icon:hover{color:#333}.ai-panel .body-content{flex:1;overflow:hidden;padding:20px;display:flex;flex-direction:column}.ai-panel .body-content .welcome-content .title{display:flex;flex-direction:column;align-items:center;margin-bottom:8px}.ai-panel .body-content .welcome-content .title .panel-icon{width:64px;height:64px;margin-bottom:16px}.ai-panel .body-content .welcome-content .title .title-text{margin:0;font-size:24px;color:#333;font-weight:500}.ai-panel .body-content .welcome-content .subtitle{text-align:center;font-size:28px;color:#333;line-height:36px;letter-spacing:2px;margin-bottom:20px}.ai-panel .body-content .welcome-content .subtitle .highlight{margin-left:2px;background:linear-gradient(270deg,#e236ffcc,#0a84ff);-webkit-background-clip:text;color:transparent;font-weight:bolder}.ai-panel .body-content .quick-questions .question-item{padding:12px 16px;background:#f5f7fa;border-radius:8px;margin-bottom:12px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;transition:all .3s}.ai-panel .body-content .quick-questions .question-item:hover{background:#e8f4ff;transform:translate(4px)}.ai-panel .body-content .quick-questions .question-item span{font-size:14px;color:#333}.ai-panel .body-content .quick-questions .question-item .el-icon{color:#666}.ai-panel .body-content .chat-messages{flex:1;overflow-y:auto;overflow-x:hidden;height:100%;display:flex;flex-direction:column}.ai-panel .body-content .chat-messages::-webkit-scrollbar{width:0;background:transparent}.ai-panel .body-content .chat-messages{scrollbar-width:none;-ms-overflow-style:none}.ai-panel .body-content .chat-messages .message-item{display:flex;align-items:flex-start;margin-bottom:20px;gap:12px}.ai-panel .body-content .chat-messages .message-item .message-avatar{width:40px;height:40px;border-radius:20px;flex-shrink:0}.ai-panel .body-content .chat-messages .message-item .user-avatar{background:#0a84ff;color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px}.ai-panel .body-content .chat-messages .message-item .message-content{padding:12px 16px;border-radius:2px;max-width:70%;word-break:break-word}.ai-panel .body-content .chat-messages .message-item.ai-message .message-content{background:#f5f7fa}.ai-panel .body-content .chat-messages .message-item.user-message{flex-direction:row-reverse}.ai-panel .body-content .chat-messages .message-item.user-message .message-content{background:#f1f2f3;border-radius:4px 4px 0;color:#333;font-size:14px}.ai-panel .panel-footer{padding:24px;background:#fff;position:relative}.ai-panel .panel-footer .loading-icon{position:absolute;top:-13px}.ai-panel .panel-footer .input-box .el-input-group{height:40px;border-radius:4px}.ai-panel .panel-footer .input-box :deep(.el-input__wrapper){box-shadow:none}.ai-panel .panel-footer .input-box :deep(.el-input-group__append){box-shadow:none;background:transparent;padding:8px 12px}.ai-panel .panel-footer .input-box .send-icon-box{display:flex;align-items:center;justify-content:center;cursor:pointer}/*!
1
+ .svg-icon-wrapper[data-v-490b11c1]{position:relative;overflow:hidden;vertical-align:middle}.svg-icon[data-v-490b11c1]{width:1em;height:1em;fill:currentColor;vertical-align:middle;display:inline-block}.ai-copy-btn-wrapper{cursor:pointer;width:74px;height:24px;border-radius:12px;box-sizing:border-box;padding:10px 14px;border:1px solid #D9D9D9;display:flex;align-items:center;justify-content:center;font-size:12px;color:#666;line-height:20px;text-align:justify;margin-top:6px}.ai-copy-btn-wrapper .copy-text{margin-left:4px}.markdown-wrapper{line-height:1.2}.markdown-wrapper h1{font-size:2em}.markdown-wrapper h2{font-size:1.5em}.markdown-wrapper h3{font-size:1.25em}.markdown-wrapper h4{font-size:1em}.markdown-wrapper h5{font-size:.875em}.markdown-wrapper h6{font-size:.85em}.markdown-wrapper h1,.markdown-wrapper h2,.markdown-wrapper h3,.markdown-wrapper h4,.markdown-wrapper h5,.markdown-wrapper h6{margin:0 auto;line-height:1.25}.markdown-wrapper ul,.markdown-wrapper ol{padding-left:1.5em;line-height:.8}.markdown-wrapper ul,.markdown-wrapper li,.markdown-wrapper ol{list-style-position:outside;white-space:normal}.markdown-wrapper ul{list-style-type:disc}.markdown-wrapper ol{list-style-type:decimal}.markdown-wrapper li{line-height:1.5}.markdown-wrapper ol ol,.markdown-wrapper ul ul{padding-left:20px}.markdown-wrapper hr{margin:16px 0}.markdown-wrapper a{color:#536fec;font-weight:bolder;text-decoration:underline;padding:0 3px}.markdown-wrapper p{line-height:1.4}.markdown-wrapper p>code{--at-apply: "bg-#e5e5e5";--at-apply: whitespace-pre mx-4px px-6px py-3px rounded-5px}.markdown-wrapper p img{display:inline-block}.markdown-wrapper li>p{line-height:2}.markdown-wrapper strong{font-weight:700}.markdown-wrapper blockquote{padding:10px;margin:20px 0;border-left:5px solid #ccc;background-color:#f9f9f9;color:#555}.markdown-wrapper blockquote>p{margin:0}.ai-panel{margin-right:20px;width:400px;height:804px;background:#fff;border-radius:8px;box-shadow:0 8px 24px #00000026;display:flex;flex-direction:column;overflow:hidden;background-image:url(/images/ai-panel-bg.png);background-size:100% auto;background-position:top;background-repeat:no-repeat;position:relative;transition:all .3s ease}.ai-panel :deep(.el-input-group__append){box-sizing:border-box}.ai-panel.drawer-mode{position:fixed;right:0;top:0;bottom:0;height:100vh;margin:0;border-radius:0;z-index:2000}.ai-panel .panel-header{padding:20px;background:transparent}.ai-panel .panel-header .header-actions{display:flex;justify-content:space-between;gap:12px;align-items:center}.ai-panel .panel-header .header-actions .header-title{font-family:PingFangSC,PingFang SC;font-weight:700;font-size:16px;color:#333;line-height:24px;text-align:left;font-style:normal}.ai-panel .panel-header .header-actions .action-icons{display:flex;gap:12px}.ai-panel .panel-header .header-actions .action-icon{font-size:20px;color:#666;cursor:pointer}.ai-panel .panel-header .header-actions .action-icon:hover{color:#333}.ai-panel .body-content{flex:1;overflow:hidden;padding:20px;display:flex;flex-direction:column}.ai-panel .body-content .welcome-content .title{display:flex;flex-direction:column;align-items:center;margin-bottom:8px}.ai-panel .body-content .welcome-content .title .panel-icon{width:64px;height:64px;margin-bottom:16px}.ai-panel .body-content .welcome-content .title .title-text{margin:0;font-size:24px;color:#333;font-weight:500}.ai-panel .body-content .welcome-content .subtitle{text-align:center;font-size:28px;color:#333;line-height:36px;letter-spacing:2px;margin-bottom:20px}.ai-panel .body-content .welcome-content .subtitle .highlight{margin-left:2px;background:linear-gradient(270deg,#e236ffcc,#0a84ff);-webkit-background-clip:text;color:transparent;font-weight:bolder}.ai-panel .body-content .quick-questions .question-item{padding:12px 16px;background:#f5f7fa;border-radius:8px;margin-bottom:12px;cursor:pointer;display:flex;justify-content:space-between;align-items:center;transition:all .3s}.ai-panel .body-content .quick-questions .question-item:hover{background:#e8f4ff;transform:translate(4px)}.ai-panel .body-content .quick-questions .question-item span{font-size:14px;color:#333}.ai-panel .body-content .quick-questions .question-item .el-icon{color:#666}.ai-panel .body-content .chat-messages{flex:1;overflow-y:auto;overflow-x:hidden;height:100%;display:flex;flex-direction:column}.ai-panel .body-content .chat-messages::-webkit-scrollbar{width:0;background:transparent}.ai-panel .body-content .chat-messages{scrollbar-width:none;-ms-overflow-style:none}.ai-panel .body-content .chat-messages .message-item{display:flex;align-items:flex-start;margin-bottom:20px;gap:12px}.ai-panel .body-content .chat-messages .message-item .message-avatar{width:40px;height:40px;border-radius:20px;flex-shrink:0}.ai-panel .body-content .chat-messages .message-item .user-avatar{background:#0a84ff;color:#fff;display:flex;align-items:center;justify-content:center;font-size:14px}.ai-panel .body-content .chat-messages .message-item .message-content{padding:12px 16px;border-radius:2px;max-width:70%;word-break:break-word}.ai-panel .body-content .chat-messages .message-item.ai-message .message-content{background:#f5f7fa}.ai-panel .body-content .chat-messages .message-item.user-message{flex-direction:row-reverse}.ai-panel .body-content .chat-messages .message-item.user-message .message-content{background:#f1f2f3;border-radius:4px 4px 0;color:#333;font-size:14px}.ai-panel .panel-footer{padding:24px;background:#fff;position:relative}.ai-panel .panel-footer .loading-icon{position:absolute;top:-13px}.ai-panel .panel-footer .input-box .el-input-group{height:40px;border-radius:4px}.ai-panel .panel-footer .input-box :deep(.el-input__wrapper){box-shadow:none}.ai-panel .panel-footer .input-box :deep(.el-input-group__append){box-shadow:none;background:transparent;padding:8px 12px}.ai-panel .panel-footer .input-box .send-icon-box{display:flex;align-items:center;justify-content:center;cursor:pointer}.ai-panel .panel-footer .input-box .el-input-group__append{background-color:transparent}/*!
2
2
  Theme: Default
3
3
  Description: Original highlight.js style
4
4
  Author: (c) Ivan Sagalaev <maniac@softwaremaniacs.org>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@szjy/ai-coms",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "vue3 ai component",
5
5
  "main": "dist/index.umd.js",
6
6
  "module": "dist/index.mjs",