@bidding-group/ai-chat 1.0.3 → 1.0.5

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.
@@ -1,2 +1,67 @@
1
- (function(_,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue"),require("@element-plus/icons-vue"),require("pinia"),require("element-plus")):typeof define=="function"&&define.amd?define(["exports","vue","@element-plus/icons-vue","pinia","element-plus"],e):(_=typeof globalThis<"u"?globalThis:_||self,e(_.AiChat={},_.Vue,_.ElementPlusIconsVue,_.Pinia,_.ElementPlus))})(this,(function(_,e,w,de,B){"use strict";let P=null;function me(s){P=s}function F(){if(!P)throw new Error("[@cgs/ai-chat] 插件未安装,请先调用 app.use(AiChat, options)");return P}function ge(s){try{const t=s.split(".");if(t.length!==3)return null;const r=t[1].replace(/-/g,"+").replace(/_/g,"/"),i=decodeURIComponent(atob(r).split("").map(a=>"%"+("00"+a.charCodeAt(0).toString(16)).slice(-2)).join(""));return JSON.parse(i,(a,l)=>typeof l=="number"&&!Number.isSafeInteger(l)?String(l):l)}catch{return null}}function Y(s){const t=F(),r={...s};if(t.getToken){const i=t.getToken();if(i){r["x-access-token"]=i;const a=ge(i);a&&(a.details_user_id&&(r.details_user_id=String(a.details_user_id)),a.details_username&&(r.details_username=String(a.details_username)),a.details_tenant_id&&(r.details_tenant_id=String(a.details_tenant_id)),a.details_app_id&&(r.details_app_id=String(a.details_app_id)))}}return r}async function $(s,t,r){const i=F(),a=Y({"Content-Type":"application/json"});let l=r;r&&typeof r=="object"?(l={...r},!l.tenantId&&i.getTenantId&&(l.tenantId=i.getTenantId()),!l.appId&&i.getAppId&&(l.appId=i.getAppId())):(s==="POST"||s==="PUT")&&!r&&(l={},i.getTenantId&&(l.tenantId=i.getTenantId()),i.getAppId&&(l.appId=i.getAppId()));const c=await fetch(`${i.baseUrl}${t}`,{method:s,headers:a,body:l!==void 0?JSON.stringify(l):void 0}),M=await c.text(),g=JSON.parse(M,(V,p)=>typeof p=="number"&&!Number.isSafeInteger(p)?String(p):p);if(!c.ok){const V=g?.msg||g?.message||g?.detail||"";throw new Error(`HTTP ${c.status}: ${t}${V?` — ${V}`:""}`)}if(g?.code===401)throw new Error(`AUTH_EXPIRED:${g.msg||"认证失败,请重新登录"}`);if(g?.code&&g.code!==200&&g.code!==0)throw new Error(`${g.msg||g.message||"请求失败"} (code: ${g.code})`);return g.data}const he=()=>$("POST","/session/create"),Z=s=>$("POST","/session/page",s).then(t=>({list:t?.records??[],total:t?.total??0})),pe=s=>$("GET",`/session/${s}/messages`),fe=s=>$("DELETE",`/session/${s}`),ke=()=>$("GET","/usage/today");async function ue(s){const t=F(),r=Y({"Content-Type":"application/json"}),i={...s};!i.tenantId&&t.getTenantId&&(i.tenantId=t.getTenantId()),!i.appId&&t.getAppId&&(i.appId=t.getAppId());const a=await fetch(`${t.baseUrl}/chat/stream`,{method:"POST",headers:r,body:JSON.stringify(i),signal:s.signal});if(!a.ok)throw new Error(`流式请求失败: HTTP ${a.status}`);const l=a.clone();try{const c=await l.json();if(c?.code===401)throw new Error(`AUTH_EXPIRED:${c.msg||"认证失败,请重新登录"}`);if(c?.code&&c.code!==200&&c.code!==0)throw new Error(`${c.msg||"请求失败"} (code: ${c.code})`)}catch(c){if(c instanceof Error&&c.message.startsWith("AUTH_EXPIRED:"))throw c}return a}const Q="cgs-ai-chat-state";function _e(){try{const s=localStorage.getItem(Q);return s?JSON.parse(s):{}}catch{return{}}}function we(s){try{localStorage.setItem(Q,JSON.stringify({currentSessionId:s.currentSessionId,panelWidth:s.panelWidth,isFullScreen:s.isFullScreen}))}catch{}}const v=15,D=_e(),L=de.defineStore("cgs-ai-chat",{state:()=>({visible:!1,currentSessionId:D.currentSessionId??null,sessions:[],sessionPage:1,sessionTotal:0,sessionLoadingMore:!1,messages:[],loading:!1,sending:!1,panelWidth:D.panelWidth??(typeof window<"u"?Math.max(320,Math.round(window.innerWidth*.25)):420),isFullScreen:D.isFullScreen??!1,tokenUsage:null}),actions:{toggleVisible(){this.visible=!this.visible},setVisible(s){this.visible=s},setCurrentSession(s,t=!0){this.currentSessionId=s,this._persist(),this.messages=[],s&&t&&this.loadMessages(s)},addMessage(s){this.messages.push(s)},updateLastAssistantMessage(s){for(let t=this.messages.length-1;t>=0;t--)if(this.messages[t].role==="assistant"){this.messages[t]={...this.messages[t],content:(this.messages[t].content||"")+s};break}},updateLastAssistantReasoning(s){for(let t=this.messages.length-1;t>=0;t--)if(this.messages[t].role==="assistant"){this.messages[t]={...this.messages[t],reasoningContent:(this.messages[t].reasoningContent||"")+s};break}},async loadSessions(){this.loading=!0,this.sessionPage=1;try{const s=await Z({pageNum:1,pageSize:v});this.sessions=s.list,this.sessionTotal=s.total}finally{this.loading=!1}},async loadMoreSessions(){if(!(this.sessionLoadingMore||this.sessions.length>=this.sessionTotal)){this.sessionLoadingMore=!0;try{const s=this.sessionPage+1,t=await Z({pageNum:s,pageSize:v});this.sessions=[...this.sessions,...t.list],this.sessionTotal=t.total,this.sessionPage=s}finally{this.sessionLoadingMore=!1}}},async loadMessages(s){this.loading=!0;try{const t=await pe(s);this.currentSessionId===s&&(this.messages=t)}finally{this.loading=!1}},async createSession(){try{const s=await he();return await this.loadSessions(),s}catch(s){return console.error("[@cgs/ai-chat] 创建会话失败",s),null}},async deleteSession(s){try{await fe(s),await this.loadSessions(),this.currentSessionId===s&&(this.currentSessionId=null,this.messages=[],this._persist())}catch(t){console.error("[@cgs/ai-chat] 删除会话失败",t)}},setSending(s){this.sending=s},clearMessages(){this.messages=[]},setPanelWidth(s){const r=Math.floor(window.innerWidth*.9);this.panelWidth=Math.max(320,Math.min(r,s)),this.isFullScreen=!1,this._persist()},toggleFullScreen(){this.isFullScreen=!this.isFullScreen,this._persist()},async loadTokenUsage(){try{this.tokenUsage=await ke()}catch(s){console.error("[@cgs/ai-chat] 加载 Token 用量失败",s)}},updateTokenUsage(s){this.tokenUsage&&(this.tokenUsage.usedTokens+=s,this.tokenUsage.limitTokens>0&&(this.tokenUsage.remainingTokens=Math.max(0,this.tokenUsage.limitTokens-this.tokenUsage.usedTokens),this.tokenUsage.limitReached=this.tokenUsage.remainingTokens<=0),this.tokenUsage.requestCount++)},_persist(){we(this.$state)}},getters:{isVisible:s=>s.visible,getCurrentSessionId:s=>s.currentSessionId,getSessions:s=>s.sessions,getMessages:s=>s.messages,isLoading:s=>s.loading,isSending:s=>s.sending,sessionHasMore:s=>s.sessions.length<s.sessionTotal}}),Se=e.defineComponent({__name:"AiChatFloat",setup(s){const t=L(),r=()=>t.toggleVisible(),i=e.ref(!1),a=()=>{i.value=window.innerWidth<768},l=e.computed(()=>i.value?{position:"fixed",right:"50%",bottom:"24px",transform:"translateX(50%)",zIndex:"999"}:{position:"fixed",right:"24px",bottom:"80px",zIndex:"999"});return e.onMounted(()=>{a(),window.addEventListener("resize",a)}),e.onUnmounted(()=>{window.removeEventListener("resize",a)}),(c,M)=>{const g=e.resolveComponent("el-icon"),V=e.resolveComponent("el-tooltip");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["ai-chat-float",{"is-mobile":i.value}]),style:e.normalizeStyle(l.value),onClick:r},[e.createVNode(V,{content:"AI助手",placement:"left","show-after":300},{default:e.withCtx(()=>[e.createElementVNode("div",{class:e.normalizeClass(["float-btn",{"is-active":e.unref(t).visible}])},[e.createVNode(g,{size:24},{default:e.withCtx(()=>[e.createVNode(e.unref(w.ChatDotRound))]),_:1})],2)]),_:1})],6)}}}),R=(s,t)=>{const r=s.__vccOpts||s;for(const[i,a]of t)r[i]=a;return r},H=R(Se,[["__scopeId","data-v-fc7be81c"]]),Ce={class:"avatar"},ye={class:"content"},Ee={key:0,class:"message-images"},Ne=["src"],Te=["innerHTML"],Ve={key:0,class:"reasoning-section"},xe=["innerHTML"],Be=["innerHTML"],Me={key:2,class:"loading-placeholder"},be={key:3,class:"loading-placeholder"},Ae={class:"time"},ee=R(e.defineComponent({__name:"AiChatMessage",props:{message:{}},setup(s){const t=s,r=L(),i=e.ref(!1),a=e.computed({get:()=>r.sending?!0:i.value,set:p=>{i.value=p}});function l(p){if(!p)return"";const f=[],C=E=>{const N=f.length;return f.push(E),`\0PH${N}\0`};let d=p;return d=d.replace(/```(\w*)\n([\s\S]*?)```/g,(E,N,I)=>C(`<pre class="code-block"><code>${g(I)}</code></pre>`)),d=d.replace(/`([^`]+)`/g,(E,N)=>C(`<code class="inline-code">${g(N)}</code>`)),d=d.replace(/\*\*(.+?)\*\*/g,(E,N)=>C(`<strong>${g(N)}</strong>`)),d=g(d),d=d.replace(/\n/g,"<br>"),d=d.replace(/\x00PH(\d+)\x00/g,(E,N)=>f[parseInt(N)]),d}const c=e.computed(()=>l(t.message.reasoningContent||"")),M=e.computed(()=>l(t.message.content||""));function g(p){return p.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}const V=p=>p?new Date(p).toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"}):"";return(p,f)=>{const C=e.resolveComponent("el-icon");return e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass(["message-item",[s.message.role]])},[e.createElementVNode("div",Ce,[s.message.role==="assistant"?(e.openBlock(),e.createBlock(C,{key:0,size:20},{default:e.withCtx(()=>[e.createVNode(e.unref(w.Monitor))]),_:1})):(e.openBlock(),e.createBlock(C,{key:1,size:20},{default:e.withCtx(()=>[e.createVNode(e.unref(w.User))]),_:1}))]),e.createElementVNode("div",ye,[s.message.role==="user"?(e.openBlock(),e.createElementBlock(e.Fragment,{key:0},[s.message.images&&s.message.images.length>0?(e.openBlock(),e.createElementBlock("div",Ee,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.message.images,(d,E)=>(e.openBlock(),e.createElementBlock("img",{key:E,src:d,class:"message-image",alt:"图片"},null,8,Ne))),128))])):e.createCommentVNode("",!0),s.message.content&&s.message.content!=="[图片]"?(e.openBlock(),e.createElementBlock("div",{key:1,class:"text",innerHTML:M.value},null,8,Te)):e.createCommentVNode("",!0)],64)):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[s.message.reasoningContent?(e.openBlock(),e.createElementBlock("div",Ve,[e.createElementVNode("div",{class:"reasoning-toggle",onClick:f[0]||(f[0]=d=>a.value=!a.value)},[e.createVNode(C,{size:14},{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(a.value?e.unref(w.ArrowDown):e.unref(w.ArrowRight))))]),_:1}),f[1]||(f[1]=e.createElementVNode("span",null,"AI 思考过程",-1))]),e.withDirectives(e.createElementVNode("div",{class:"reasoning-body",innerHTML:c.value},null,8,xe),[[e.vShow,a.value]])])):e.createCommentVNode("",!0),s.message.content?(e.openBlock(),e.createElementBlock("div",{key:1,class:"text",innerHTML:M.value},null,8,Be)):s.message.reasoningContent?(e.openBlock(),e.createElementBlock("div",Me,"正在组织回答...")):(e.openBlock(),e.createElementBlock("div",be,"正在思考..."))],64)),e.createElementVNode("div",Ae,e.toDisplayString(V(s.message.createTime)),1)])],2)}}}),[["__scopeId","data-v-ee95845e"]]),Ie={key:0,class:"width-tooltip"},$e={class:"panel-container"},Le={class:"panel-header"},Re={class:"header-left"},Ue={key:0,class:"token-usage"},ze={key:1,class:"preset-btns"},We={class:"header-right"},Pe={class:"chat-container"},Fe={key:0,class:"session-list"},De={class:"session-header"},He=["onClick"],Oe={class:"session-title"},Xe={class:"session-meta"},je={key:0,class:"session-load-more"},qe={key:1,class:"session-load-more session-no-more"},Je={class:"messages-area"},Ge={class:"messages-content"},Ke={key:0,class:"typing-indicator"},Ye={key:0,class:"pending-images"},Ze={class:"image-index"},Qe=["src"],ve={class:"input-area"},et=4,tt=.25,st=.38,O=R(e.defineComponent({__name:"AiChatDrawer",setup(s){const t=L();let r=new AbortController;const i=e.computed({get:()=>t.visible,set:n=>t.setVisible(n)}),a=e.computed(()=>t.panelWidth),l=e.computed(()=>t.isFullScreen),c=e.ref(!1),M=()=>{c.value=window.innerWidth<768},g=e.computed(()=>c.value?{width:"100%"}:l.value?{width:"100%"}:{width:`${a.value}px`}),V=e.computed(()=>{const n=t.tokenUsage;return n?n.limitTokens===0?`${n.usedTokens} tokens`:`${n.usedTokens}/${n.limitTokens}`:""}),p=e.computed(()=>{const n=t.tokenUsage;return n?n.limitTokens===0?`今日已使用 ${n.usedTokens} tokens(不限制)`:n.limitReached?"今日配额已用完,请明天再试":`今日已使用 ${n.usedTokens}/${n.limitTokens} tokens,剩余 ${n.remainingTokens}`:""}),f=e.ref(""),C=e.ref(!1),d=e.ref([]),E=e.ref(),N=e.ref(),I=e.ref(window.innerWidth),te=()=>{I.value=window.innerWidth,M()},se=e.computed(()=>c.value?window.innerWidth:Math.max(320,Math.round(I.value*tt))),ne=e.computed(()=>c.value?window.innerWidth:Math.max(420,Math.round(I.value*st))),X=e.computed(()=>a.value/I.value),it=e.computed(()=>!l.value&&X.value<=.3),rt=e.computed(()=>!l.value&&X.value>.3&&X.value<=.45),lt=e.computed(()=>`窄 (${se.value}px)`),ct=e.computed(()=>`宽 (${ne.value}px)`),A=e.ref(!1),U=e.ref(0),z=e.ref(0);let S=null;const dt=n=>{A.value=!0,U.value=n.clientX,z.value=a.value,document.addEventListener("mousemove",j),document.addEventListener("mouseup",J),document.body.style.cursor="ew-resize",document.body.style.userSelect="none"},mt=n=>{n.touches.length===1&&(A.value=!0,U.value=n.touches[0].clientX,z.value=a.value,document.addEventListener("touchmove",q),document.addEventListener("touchend",G))},j=n=>{A.value&&(S&&cancelAnimationFrame(S),S=requestAnimationFrame(()=>{const o=z.value+(U.value-n.clientX),m=Math.max(320,Math.min(window.innerWidth/2,o));t.setPanelWidth(m)}))},q=n=>{!A.value||n.touches.length!==1||(S&&cancelAnimationFrame(S),S=requestAnimationFrame(()=>{const o=z.value+(U.value-n.touches[0].clientX),m=Math.max(320,Math.min(window.innerWidth/2,o));t.setPanelWidth(m)}))},J=()=>{A.value=!1,S&&(cancelAnimationFrame(S),S=null),document.removeEventListener("mousemove",j),document.removeEventListener("mouseup",J),document.body.style.cursor="",document.body.style.userSelect=""},G=()=>{A.value=!1,S&&(cancelAnimationFrame(S),S=null),document.removeEventListener("touchmove",q),document.removeEventListener("touchend",G)},oe=n=>t.setPanelWidth(n),gt=()=>t.toggleFullScreen(),ae=()=>t.setVisible(!1),ht=async n=>{const o=n.clipboardData?.items;if(o)for(let m=0;m<o.length;m++){const k=o[m];if(k.type.startsWith("image/")){if(n.preventDefault(),d.value.length>=et){B.ElMessage.warning("最多只能上传4张图片");return}const u=k.getAsFile();if(u){const x=await pt(u);d.value.push(x)}}}},pt=n=>new Promise(o=>{const m=new FileReader;m.onload=k=>o(k.target.result),m.readAsDataURL(n)}),ft=n=>n?.length>30?n.substring(0,30)+"...":n,kt=({scrollTop:n})=>{const o=N.value?.wrapRef;o&&n+o.clientHeight>=o.scrollHeight-150&&t.loadMoreSessions()},K=()=>{E.value?.wrapRef&&(E.value.wrapRef.scrollTop=E.value.wrapRef.scrollHeight)};e.watch(()=>t.messages.length,()=>e.nextTick(K)),e.watch(i,n=>{n&&(t.currentSessionId||t.loadSessions(),t.loadTokenUsage())});const ut=async()=>{const n=await t.createSession();n?(t.setCurrentSession(n,!1),C.value=!1):B.ElMessage.error("创建对话失败,请检查网络或重新登录")},_t=n=>{t.setCurrentSession(n.id),C.value=!1},wt=async n=>{await t.deleteSession(n)},ie=async()=>{const n=f.value.trim(),o=[...d.value];if(!n&&o.length===0||t.sending)return;f.value="",d.value=[],t.setSending(!0),r=new AbortController;let m=t.currentSessionId;if(!m){if(m=await t.createSession(),!m){t.setSending(!1),f.value=n,d.value=o,B.ElMessage.error("创建对话失败,请检查网络或重新登录");return}t.setCurrentSession(m,!1)}const k={id:Date.now(),sessionId:m,role:"user",content:n||"[图片]",images:o.length>0?o:void 0,createTime:new Date().toISOString()};t.addMessage(k);const u={id:Date.now()+1,sessionId:m,role:"assistant",content:"",createTime:new Date().toISOString()};t.addMessage(u);try{const b=(await ue({sessionId:m,message:n||"[图片]",images:o.length>0?o:void 0,signal:r.signal})).body?.getReader(),h=new TextDecoder;if(b){let T="";for(;;){const{done:re,value:St}=await b.read();if(re)break;T+=h.decode(St,{stream:!0});const le=T.split(`
2
- `);T=le.pop()??"";let ce="";for(const W of le)if(W.startsWith("event:"))ce=W.slice(6).trim();else if(W.startsWith("data:"))try{const y=JSON.parse(W.slice(5).trim());if(ce==="error"||y.error){t.updateLastAssistantMessage(y.error||"服务异常,请重试。"),B.ElMessage.error(y.error||"服务异常,请重试");break}y.done||(y.reasoningContent&&(t.updateLastAssistantReasoning(y.reasoningContent),e.nextTick(K)),y.content&&(t.updateLastAssistantMessage(y.content),e.nextTick(K))),y.sessionId&&!t.currentSessionId&&t.setCurrentSession(y.sessionId),y.done&&y.usage&&t.updateTokenUsage(y.usage.totalTokens)}catch{}}}}catch(x){if(x.name==="AbortError")console.log("[@cgs/ai-chat] 请求已取消");else if(x.message?.startsWith("AUTH_EXPIRED:")){const b=x.message.replace("AUTH_EXPIRED:","");console.error("[@cgs/ai-chat] 认证过期",b),t.updateLastAssistantMessage(`认证失败:${b}`),B.ElMessage.error({message:b,duration:5e3,showClose:!0})}else console.error("[@cgs/ai-chat] 发送消息失败",x),t.updateLastAssistantMessage("抱歉,发生了错误,请重试。"),B.ElMessage.error({message:"消息发送失败,请检查网络连接",duration:3e3,showClose:!0})}finally{t.setSending(!1),t.loadSessions()}};return e.onMounted(()=>{window.addEventListener("resize",te),M()}),e.onUnmounted(()=>{r.abort(),window.removeEventListener("resize",te),document.removeEventListener("mousemove",j),document.removeEventListener("mouseup",J),document.removeEventListener("touchmove",q),document.removeEventListener("touchend",G),S&&cancelAnimationFrame(S)}),(n,o)=>{const m=e.resolveComponent("el-tooltip"),k=e.resolveComponent("el-icon"),u=e.resolveComponent("el-button"),x=e.resolveComponent("el-empty"),b=e.resolveComponent("el-input");return e.openBlock(),e.createElementBlock(e.Fragment,null,[e.createVNode(e.Transition,{name:"slide"},{default:e.withCtx(()=>[i.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:e.normalizeClass(["ai-chat-panel",{"full-screen":l.value,"is-mobile":c.value}]),style:e.normalizeStyle(g.value)},[c.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",{key:0,class:"resize-handle",onMousedown:dt,onTouchstart:e.withModifiers(mt,["prevent"])},[o[5]||(o[5]=e.createElementVNode("div",{class:"resize-bar"},null,-1)),e.createVNode(e.Transition,{name:"fade"},{default:e.withCtx(()=>[A.value?(e.openBlock(),e.createElementBlock("div",Ie,e.toDisplayString(Math.round(a.value))+"px ",1)):e.createCommentVNode("",!0)]),_:1})],32)),e.createElementVNode("div",$e,[e.createElementVNode("div",Le,[e.createElementVNode("div",Re,[o[6]||(o[6]=e.createElementVNode("span",{class:"title"},"AI助手",-1)),e.unref(t).tokenUsage?(e.openBlock(),e.createElementBlock("div",Ue,[e.createVNode(m,{content:p.value,placement:"bottom"},{default:e.withCtx(()=>[e.createElementVNode("span",{class:e.normalizeClass({"limit-warning":e.unref(t).tokenUsage.limitReached})},e.toDisplayString(V.value),3)]),_:1},8,["content"])])):e.createCommentVNode("",!0),c.value?e.createCommentVNode("",!0):(e.openBlock(),e.createElementBlock("div",ze,[e.createVNode(m,{content:lt.value,placement:"bottom"},{default:e.withCtx(()=>[e.createVNode(u,{size:"small",type:it.value?"primary":"default",link:"",onClick:o[0]||(o[0]=h=>oe(se.value))},{default:e.withCtx(()=>[e.createVNode(k,null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Grid))]),_:1})]),_:1},8,["type"])]),_:1},8,["content"]),e.createVNode(m,{content:ct.value,placement:"bottom"},{default:e.withCtx(()=>[e.createVNode(u,{size:"small",type:rt.value?"primary":"default",link:"",onClick:o[1]||(o[1]=h=>oe(ne.value))},{default:e.withCtx(()=>[e.createVNode(k,null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Menu))]),_:1})]),_:1},8,["type"])]),_:1},8,["content"]),e.createVNode(m,{content:l.value?"退出全屏":"全屏",placement:"bottom"},{default:e.withCtx(()=>[e.createVNode(u,{size:"small",type:l.value?"primary":"default",link:"",onClick:gt},{default:e.withCtx(()=>[e.createVNode(k,null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.FullScreen))]),_:1})]),_:1},8,["type"])]),_:1},8,["content"])]))]),e.createElementVNode("div",We,[e.createVNode(u,{type:"primary",link:"",onClick:ut},{default:e.withCtx(()=>[e.createVNode(k,null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Plus))]),_:1}),o[7]||(o[7]=e.createTextVNode("新对话 ",-1))]),_:1}),e.createVNode(u,{type:"default",link:"",onClick:ae},{default:e.withCtx(()=>[e.createVNode(k,null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Close))]),_:1})]),_:1})])]),e.createElementVNode("div",Pe,[C.value?(e.openBlock(),e.createElementBlock("div",Fe,[e.createElementVNode("div",De,[o[9]||(o[9]=e.createElementVNode("span",null,"历史对话",-1)),e.createVNode(u,{type:"primary",link:"",size:"small",onClick:o[2]||(o[2]=h=>C.value=!1)},{default:e.withCtx(()=>[...o[8]||(o[8]=[e.createTextVNode("返回聊天",-1)])]),_:1})]),e.createVNode(e.unref(B.ElScrollbar),{ref_key:"sessionScrollbarRef",ref:N,height:(c.value,"calc(100vh - 200px)"),onScroll:kt},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(t).sessions,h=>(e.openBlock(),e.createElementBlock("div",{key:h.id,class:e.normalizeClass(["session-item",{active:h.id===e.unref(t).currentSessionId}]),onClick:T=>_t(h)},[e.createVNode(m,{content:h.title,placement:"left","show-after":500},{default:e.withCtx(()=>[e.createElementVNode("div",Oe,e.toDisplayString(ft(h.title)),1)]),_:2},1032,["content"]),e.createElementVNode("div",Xe,[e.createElementVNode("span",null,e.toDisplayString(h.messageCount)+"条消息",1),e.createVNode(u,{type:"danger",link:"",size:"small",onClick:e.withModifiers(T=>wt(h.id),["stop"])},{default:e.withCtx(()=>[...o[10]||(o[10]=[e.createTextVNode("删除",-1)])]),_:1},8,["onClick"])])],10,He))),128)),e.unref(t).sessionLoadingMore?(e.openBlock(),e.createElementBlock("div",je,[e.createVNode(k,{class:"is-loading"},{default:e.withCtx(()=>[e.createVNode(e.unref(w.Loading))]),_:1}),o[11]||(o[11]=e.createElementVNode("span",null,"加载中...",-1))])):e.unref(t).sessions.length>0&&!e.unref(t).sessionHasMore?(e.openBlock(),e.createElementBlock("div",qe,""+e.toDisplayString(e.unref(t).sessionTotal)+" 条对话 ",1)):e.createCommentVNode("",!0),e.unref(t).sessions.length===0?(e.openBlock(),e.createBlock(x,{key:2,description:"暂无历史对话"})):e.createCommentVNode("",!0)]),_:1},8,["height"])])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createElementVNode("div",Je,[e.createVNode(e.unref(B.ElScrollbar),{ref_key:"scrollbarRef",ref:E,height:"100%"},{default:e.withCtx(()=>[e.createElementVNode("div",Ge,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(e.unref(t).messages,(h,T)=>(e.openBlock(),e.createBlock(ee,{key:T,message:h},null,8,["message"]))),128)),e.unref(t).sending?(e.openBlock(),e.createElementBlock("div",Ke,[...o[12]||(o[12]=[e.createElementVNode("span",null,null,-1),e.createElementVNode("span",null,null,-1),e.createElementVNode("span",null,null,-1)])])):e.createCommentVNode("",!0)])]),_:1},512)]),d.value.length>0?(e.openBlock(),e.createElementBlock("div",Ye,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(d.value,(h,T)=>(e.openBlock(),e.createElementBlock("div",{key:T,class:"pending-image-wrap"},[e.createElementVNode("div",Ze,e.toDisplayString(T+1)+"/"+e.toDisplayString(d.value.length),1),e.createElementVNode("img",{src:h,class:"pending-image",alt:"待发送图片"},null,8,Qe),e.createVNode(u,{type:"danger",circle:"",size:"small",class:"remove-img",onClick:re=>d.value.splice(T,1)},{default:e.withCtx(()=>[e.createVNode(k,null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.Close))]),_:1})]),_:1},8,["onClick"])]))),128))])):e.createCommentVNode("",!0),e.createElementVNode("div",ve,[e.createVNode(u,{type:"primary",link:"",onClick:o[3]||(o[3]=h=>C.value=!0)},{default:e.withCtx(()=>[e.createVNode(k,null,{default:e.withCtx(()=>[e.createVNode(e.unref(w.List))]),_:1})]),_:1}),e.createVNode(b,{modelValue:f.value,"onUpdate:modelValue":o[4]||(o[4]=h=>f.value=h),type:"textarea",rows:2,maxlength:"2000","show-word-limit":"",placeholder:"输入消息... (Enter 发送,Shift+Enter 换行,Ctrl+V 粘贴截图)",resize:"none",disabled:e.unref(t).sending||e.unref(t).tokenUsage?.limitReached,onKeydown:e.withKeys(e.withModifiers(ie,["exact","prevent"]),["enter"]),onPaste:ht},null,8,["modelValue","disabled","onKeydown"]),e.createVNode(u,{type:"primary",icon:e.unref(w.Promotion),circle:"",loading:e.unref(t).sending,disabled:!f.value.trim()&&d.value.length===0||e.unref(t).sending||e.unref(t).tokenUsage?.limitReached,onClick:ie},null,8,["icon","loading","disabled"])]),o[13]||(o[13]=e.createElementVNode("div",{class:"ai-disclaimer"},"内容由AI生成,请仔细甄别",-1))],64))])])],6)):e.createCommentVNode("",!0)]),_:1}),e.createVNode(e.Transition,{name:"fade"},{default:e.withCtx(()=>[i.value?(e.openBlock(),e.createElementBlock("div",{key:0,class:"ai-panel-overlay",onClick:ae})):e.createCommentVNode("",!0)]),_:1})],64)}}}),[["__scopeId","data-v-fde82f0b"]]),nt={class:"cgs-ai-chat-root"},ot=R(e.defineComponent({__name:"AiChat",setup(s){return(t,r)=>(e.openBlock(),e.createElementBlock("div",nt,[e.createVNode(H),e.createVNode(O)]))}}),[["__scopeId","data-v-4f2a75e5"]]),at={install(s,t){t?.baseUrl||console.warn("[@cgs/ai-chat] 警告:未提供 baseUrl,组件可能无法正常工作"),me(t),s.component("AiChat",ot),s.component("AiChatFloat",H),s.component("AiChatDrawer",O)}};_.AiChatDrawer=O,_.AiChatFloat=H,_.AiChatMessage=ee,_.default=at,_.useAiStore=L,Object.defineProperties(_,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
1
+ (function(Y,s){typeof exports=="object"&&typeof module<"u"?s(exports,require("vue"),require("@element-plus/icons-vue"),require("pinia"),require("element-plus")):typeof define=="function"&&define.amd?define(["exports","vue","@element-plus/icons-vue","pinia","element-plus"],s):(Y=typeof globalThis<"u"?globalThis:Y||self,s(Y.AiChat={},Y.Vue,Y.ElementPlusIconsVue,Y.Pinia,Y.ElementPlus))})(this,(function(Y,s,Q,ls,de){"use strict";let St=null;function cs(t){St=t}function yt(){if(!St)throw new Error("[@cgs/ai-chat] 插件未安装,请先调用 app.use(AiChat, options)");return St}function ps(t){try{const e=t.split(".");if(e.length!==3)return null;const n=e[1].replace(/-/g,"+").replace(/_/g,"/"),i=decodeURIComponent(atob(n).split("").map(r=>"%"+("00"+r.charCodeAt(0).toString(16)).slice(-2)).join(""));return JSON.parse(i,(r,o)=>typeof o=="number"&&!Number.isSafeInteger(o)?String(o):o)}catch{return null}}function ln(t){const e=yt(),n={...t};if(e.getToken){const i=e.getToken();if(i){n["x-access-token"]=i;const r=ps(i);r&&(r.details_user_id&&(n.details_user_id=String(r.details_user_id)),r.details_username&&(n.details_username=String(r.details_username)),r.details_tenant_id&&(n.details_tenant_id=String(r.details_tenant_id)),r.details_app_id&&(n.details_app_id=String(r.details_app_id)))}}return n}async function Ze(t,e,n){const i=yt(),r=ln({"Content-Type":"application/json"});let o=n;n&&typeof n=="object"?(o={...n},!o.tenantId&&i.getTenantId&&(o.tenantId=i.getTenantId()),!o.appId&&i.getAppId&&(o.appId=i.getAppId())):(t==="POST"||t==="PUT")&&!n&&(o={},i.getTenantId&&(o.tenantId=i.getTenantId()),i.getAppId&&(o.appId=i.getAppId()));const l=await fetch(`${i.baseUrl}${e}`,{method:t,headers:r,body:o!==void 0?JSON.stringify(o):void 0}),p=await l.text(),h=JSON.parse(p,(c,m)=>typeof m=="number"&&!Number.isSafeInteger(m)?String(m):m);if(!l.ok){const c=h?.msg||h?.message||h?.detail||"";throw new Error(`HTTP ${l.status}: ${e}${c?` — ${c}`:""}`)}if(h?.code===401)throw new Error(`AUTH_EXPIRED:${h.msg||"认证失败,请重新登录"}`);if(h?.code&&h.code!==200&&h.code!==0)throw new Error(`${h.msg||h.message||"请求失败"} (code: ${h.code})`);return h.data}const us=()=>Ze("POST","/session/create"),cn=t=>Ze("POST","/session/page",t).then(e=>({list:e?.records??[],total:e?.total??0})),hs=t=>Ze("GET",`/session/${t}/messages`),ds=t=>Ze("DELETE",`/session/${t}`),fs=()=>Ze("GET","/usage/today");async function gs(t){const e=yt(),n=ln({"Content-Type":"application/json"}),i={...t};!i.tenantId&&e.getTenantId&&(i.tenantId=e.getTenantId()),!i.appId&&e.getAppId&&(i.appId=e.getAppId());const r=await fetch(`${e.baseUrl}/chat/stream`,{method:"POST",headers:n,body:JSON.stringify(i),signal:t.signal});if(!r.ok)throw new Error(`流式请求失败: HTTP ${r.status}`);const o=r.clone();try{const l=await o.json();if(l?.code===401)throw new Error(`AUTH_EXPIRED:${l.msg||"认证失败,请重新登录"}`);if(l?.code&&l.code!==200&&l.code!==0)throw new Error(`${l.msg||"请求失败"} (code: ${l.code})`)}catch(l){if(l instanceof Error&&l.message.startsWith("AUTH_EXPIRED:"))throw l}return r}const pn="cgs-ai-chat-state";function ms(){try{const t=localStorage.getItem(pn);return t?JSON.parse(t):{}}catch{return{}}}function ks(t){try{localStorage.setItem(pn,JSON.stringify({currentSessionId:t.currentSessionId,panelWidth:t.panelWidth,isFullScreen:t.isFullScreen}))}catch{}}const un=15,Et=ms(),it=ls.defineStore("cgs-ai-chat",{state:()=>({visible:!1,currentSessionId:Et.currentSessionId??null,sessions:[],sessionPage:1,sessionTotal:0,sessionLoadingMore:!1,messages:[],loading:!1,sending:!1,panelWidth:Et.panelWidth??(typeof window<"u"?Math.max(320,Math.round(window.innerWidth*.25)):420),isFullScreen:Et.isFullScreen??!1,tokenUsage:null}),actions:{toggleVisible(){this.visible=!this.visible},setVisible(t){this.visible=t},setCurrentSession(t,e=!0){this.currentSessionId=t,this._persist(),this.messages=[],t&&e&&this.loadMessages(t)},addMessage(t){this.messages.push(t)},updateLastAssistantMessage(t){for(let e=this.messages.length-1;e>=0;e--)if(this.messages[e].role==="assistant"){this.messages[e]={...this.messages[e],content:(this.messages[e].content||"")+t};break}},updateLastAssistantReasoning(t){for(let e=this.messages.length-1;e>=0;e--)if(this.messages[e].role==="assistant"){this.messages[e]={...this.messages[e],reasoningContent:(this.messages[e].reasoningContent||"")+t};break}},async loadSessions(){this.loading=!0,this.sessionPage=1;try{const t=await cn({pageNum:1,pageSize:un});this.sessions=t.list,this.sessionTotal=t.total}finally{this.loading=!1}},async loadMoreSessions(){if(!(this.sessionLoadingMore||this.sessions.length>=this.sessionTotal)){this.sessionLoadingMore=!0;try{const t=this.sessionPage+1,e=await cn({pageNum:t,pageSize:un});this.sessions=[...this.sessions,...e.list],this.sessionTotal=e.total,this.sessionPage=t}finally{this.sessionLoadingMore=!1}}},async loadMessages(t){this.loading=!0;try{const e=await hs(t);this.currentSessionId===t&&(this.messages=e)}finally{this.loading=!1}},async createSession(){try{const t=await us();return await this.loadSessions(),t}catch(t){return console.error("[@cgs/ai-chat] 创建会话失败",t),null}},async deleteSession(t){try{await ds(t),await this.loadSessions(),this.currentSessionId===t&&(this.currentSessionId=null,this.messages=[],this._persist())}catch(e){console.error("[@cgs/ai-chat] 删除会话失败",e)}},setSending(t){this.sending=t},clearMessages(){this.messages=[]},setPanelWidth(t){const n=Math.floor(window.innerWidth*.9);this.panelWidth=Math.max(320,Math.min(n,t)),this.isFullScreen=!1,this._persist()},toggleFullScreen(){this.isFullScreen=!this.isFullScreen,this._persist()},async loadTokenUsage(){try{this.tokenUsage=await fs()}catch(t){console.error("[@cgs/ai-chat] 加载 Token 用量失败",t)}},updateTokenUsage(t){this.tokenUsage&&(this.tokenUsage.usedTokens+=t,this.tokenUsage.limitTokens>0&&(this.tokenUsage.remainingTokens=Math.max(0,this.tokenUsage.limitTokens-this.tokenUsage.usedTokens),this.tokenUsage.limitReached=this.tokenUsage.remainingTokens<=0),this.tokenUsage.requestCount++)},_persist(){ks(this.$state)}},getters:{isVisible:t=>t.visible,getCurrentSessionId:t=>t.currentSessionId,getSessions:t=>t.sessions,getMessages:t=>t.messages,isLoading:t=>t.loading,isSending:t=>t.sending,sessionHasMore:t=>t.sessions.length<t.sessionTotal}}),bs=s.defineComponent({__name:"AiChatFloat",setup(t){const e=it(),n=()=>e.toggleVisible(),i=s.ref(!1),r=()=>{i.value=window.innerWidth<768},o=s.computed(()=>i.value?{position:"fixed",right:"50%",bottom:"24px",transform:"translateX(50%)",zIndex:"999"}:{position:"fixed",right:"24px",bottom:"80px",zIndex:"999"});return s.onMounted(()=>{r(),window.addEventListener("resize",r)}),s.onUnmounted(()=>{window.removeEventListener("resize",r)}),(l,p)=>{const h=s.resolveComponent("el-icon"),c=s.resolveComponent("el-tooltip");return s.openBlock(),s.createElementBlock("div",{class:s.normalizeClass(["ai-chat-float",{"is-mobile":i.value}]),style:s.normalizeStyle(o.value),onClick:n},[s.createVNode(c,{content:"AI助手",placement:"left","show-after":300},{default:s.withCtx(()=>[s.createElementVNode("div",{class:s.normalizeClass(["float-btn",{"is-active":s.unref(e).visible}])},[s.createVNode(h,{size:24},{default:s.withCtx(()=>[s.createVNode(s.unref(Q.ChatDotRound))]),_:1})],2)]),_:1})],6)}}}),ot=(t,e)=>{const n=t.__vccOpts||t;for(const[i,r]of e)n[i]=r;return n},At=ot(bs,[["__scopeId","data-v-fc7be81c"]]);function Rt(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var we=Rt();function hn(t){we=t}var _e={exec:()=>null};function Pe(t){let e=[];return n=>{let i=Math.max(0,Math.min(3,n-1)),r=e[i];return r||(r=t(i),e[i]=r),r}}function _(t,e=""){let n=typeof t=="string"?t:t.source,i={replace:(r,o)=>{let l=typeof o=="string"?o:o.source;return l=l.replace(G.caret,"$1"),n=n.replace(r,l),i},getRegex:()=>new RegExp(n,e)};return i}var Ts=((t="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+t)}catch{return!1}})(),G={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:Pe(t=>new RegExp(`^ {0,${t}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:Pe(t=>new RegExp(`^ {0,${t}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`)),fencesBeginRegex:Pe(t=>new RegExp(`^ {0,${t}}(?:\`\`\`|~~~)`)),headingBeginRegex:Pe(t=>new RegExp(`^ {0,${t}}#`)),htmlBeginRegex:Pe(t=>new RegExp(`^ {0,${t}}<(?:[a-z].*>|!--)`,"i")),blockquoteBeginRegex:Pe(t=>new RegExp(`^ {0,${t}}>`))},xs=/^(?:[ \t]*(?:\n|$))+/,ws=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,_s=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Ye=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Ss=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Ct=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,dn=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,fn=_(dn).replace(/bull/g,Ct).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),ys=_(dn).replace(/bull/g,Ct).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Nt=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Es=/^[^\n]+/,It=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,As=_(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",It).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Rs=_(/^(bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Ct).getRegex(),at="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",Lt=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,Cs=_("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|<![A-Z][\\s\\S]*?(?:>\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",Lt).replace("tag",at).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),gn=_(Nt).replace("hr",Ye).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",at).getRegex(),Ns=_(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",gn).getRegex(),Dt={blockquote:Ns,code:ws,def:As,fences:_s,heading:Ss,hr:Ye,html:Cs,lheading:fn,list:Rs,newline:xs,paragraph:gn,table:_e,text:Es},mn=_("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Ye).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",at).getRegex(),Is={...Dt,lheading:ys,table:mn,paragraph:_(Nt).replace("hr",Ye).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",mn).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",at).getRegex()},Ls={...Dt,html:_(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",Lt).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:_e,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:_(Nt).replace("hr",Ye).replace("heading",` *#{1,6} *[^
2
+ ]`).replace("lheading",fn).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},Ds=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Os=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,kn=/^( {2,}|\\)\n(?!\s*$)/,Ms=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,$e=/[\p{P}\p{S}]/u,lt=/[\s\p{P}\p{S}]/u,Ot=/[^\s\p{P}\p{S}]/u,Ps=_(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,lt).getRegex(),bn=/(?!~)[\p{P}\p{S}]/u,$s=/(?!~)[\s\p{P}\p{S}]/u,zs=/(?:[^\s\p{P}\p{S}]|~)/u,Bs=_(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",Ts?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),Tn=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,Us=_(Tn,"u").replace(/punct/g,$e).getRegex(),Fs=_(Tn,"u").replace(/punct/g,bn).getRegex(),xn="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",Vs=_(xn,"gu").replace(/notPunctSpace/g,Ot).replace(/punctSpace/g,lt).replace(/punct/g,$e).getRegex(),Hs=_(xn,"gu").replace(/notPunctSpace/g,zs).replace(/punctSpace/g,$s).replace(/punct/g,bn).getRegex(),Ws=_("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,Ot).replace(/punctSpace/g,lt).replace(/punct/g,$e).getRegex(),Gs=_(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,$e).getRegex(),js="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",qs=_(js,"gu").replace(/notPunctSpace/g,Ot).replace(/punctSpace/g,lt).replace(/punct/g,$e).getRegex(),Xs=_(/\\(punct)/,"gu").replace(/punct/g,$e).getRegex(),vs=_(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Zs=_(Lt).replace("(?:-->|$)","-->").getRegex(),Ys=_("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",Zs).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),ct=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,Qs=_(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",ct).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),wn=_(/^!?\[(label)\]\[(ref)\]/).replace("label",ct).replace("ref",It).getRegex(),_n=_(/^!?\[(ref)\](?:\[\])?/).replace("ref",It).getRegex(),Ks=_("reflink|nolink(?!\\()","g").replace("reflink",wn).replace("nolink",_n).getRegex(),Sn=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,Mt={_backpedal:_e,anyPunctuation:Xs,autolink:vs,blockSkip:Bs,br:kn,code:Os,del:_e,delLDelim:_e,delRDelim:_e,emStrongLDelim:Us,emStrongRDelimAst:Vs,emStrongRDelimUnd:Ws,escape:Ds,link:Qs,nolink:_n,punctuation:Ps,reflink:wn,reflinkSearch:Ks,tag:Ys,text:Ms,url:_e},Js={...Mt,link:_(/^!?\[(label)\]\((.*?)\)/).replace("label",ct).getRegex(),reflink:_(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",ct).getRegex()},Pt={...Mt,emStrongRDelimAst:Hs,emStrongLDelim:Fs,delLDelim:Gs,delRDelim:qs,url:_(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",Sn).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:_(/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",Sn).getRegex()},er={...Pt,br:_(kn).replace("{2,}","*").getRegex(),text:_(Pt.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},pt={normal:Dt,gfm:Is,pedantic:Ls},Qe={normal:Mt,gfm:Pt,breaks:er,pedantic:Js},tr={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"},yn=t=>tr[t];function oe(t,e){if(e){if(G.escapeTest.test(t))return t.replace(G.escapeReplace,yn)}else if(G.escapeTestNoEncode.test(t))return t.replace(G.escapeReplaceNoEncode,yn);return t}function En(t){try{t=encodeURI(t).replace(G.percentDecode,"%")}catch{return null}return t}function An(t,e){let n=t.replace(G.findPipe,(o,l,p)=>{let h=!1,c=l;for(;--c>=0&&p[c]==="\\";)h=!h;return h?"|":" |"}),i=n.split(G.splitPipe),r=0;if(i[0].trim()||i.shift(),i.length>0&&!i.at(-1)?.trim()&&i.pop(),e)if(i.length>e)i.splice(e);else for(;i.length<e;)i.push("");for(;r<i.length;r++)i[r]=i[r].trim().replace(G.slashPipe,"|");return i}function fe(t,e,n){let i=t.length;if(i===0)return"";let r=0;for(;r<i&&t.charAt(i-r-1)===e;)r++;return t.slice(0,i-r)}function Rn(t){let e=t.split(`
3
+ `),n=e.length-1;for(;n>=0&&G.blankLine.test(e[n]);)n--;return e.length-n<=2?t:e.slice(0,n+1).join(`
4
+ `)}function nr(t,e){if(t.indexOf(e[1])===-1)return-1;let n=0;for(let i=0;i<t.length;i++)if(t[i]==="\\")i++;else if(t[i]===e[0])n++;else if(t[i]===e[1]&&(n--,n<0))return i;return n>0?-2:-1}function sr(t,e=0){let n=e,i="";for(let r of t)if(r===" "){let o=4-n%4;i+=" ".repeat(o),n+=o}else i+=r,n++;return i}function Cn(t,e,n,i,r){let o=e.href,l=e.title||null,p=t[1].replace(r.other.outputLinkReplace,"$1");i.state.inLink=!0;let h={type:t[0].charAt(0)==="!"?"image":"link",raw:n,href:o,title:l,text:p,tokens:i.inlineTokens(p)};return i.state.inLink=!1,h}function rr(t,e,n){let i=t.match(n.other.indentCodeCompensation);if(i===null)return e;let r=i[1];return e.split(`
5
+ `).map(o=>{let l=o.match(n.other.beginningSpace);if(l===null)return o;let[p]=l;return p.length>=r.length?o.slice(r.length):o}).join(`
6
+ `)}var ut=class{options;rules;lexer;constructor(t){this.options=t||we}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let n=this.options.pedantic?e[0]:Rn(e[0]),i=n.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:n,codeBlockStyle:"indented",text:i}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let n=e[0],i=rr(n,e[3]||"",this.rules);return{type:"code",raw:n,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:i}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let n=e[2].trim();if(this.rules.other.endingHash.test(n)){let i=fe(n,"#");(this.options.pedantic||!i||this.rules.other.endingSpaceChar.test(i))&&(n=i.trim())}return{type:"heading",raw:fe(e[0],`
7
+ `),depth:e[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:fe(e[0],`
8
+ `)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let n=fe(e[0],`
9
+ `).split(`
10
+ `),i="",r="",o=[];for(;n.length>0;){let l=!1,p=[],h;for(h=0;h<n.length;h++)if(this.rules.other.blockquoteStart.test(n[h]))p.push(n[h]),l=!0;else if(!l)p.push(n[h]);else break;n=n.slice(h);let c=p.join(`
11
+ `),m=c.replace(this.rules.other.blockquoteSetextReplace,`
12
+ $1`).replace(this.rules.other.blockquoteSetextReplace2,"");i=i?`${i}
13
+ ${c}`:c,r=r?`${r}
14
+ ${m}`:m;let d=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(m,o,!0),this.lexer.state.top=d,n.length===0)break;let T=o.at(-1);if(T?.type==="code")break;if(T?.type==="blockquote"){let S=T,y=S.raw+`
15
+ `+n.join(`
16
+ `),z=this.blockquote(y);o[o.length-1]=z,i=i.substring(0,i.length-S.raw.length)+z.raw,r=r.substring(0,r.length-S.text.length)+z.text;break}else if(T?.type==="list"){let S=T,y=S.raw+`
17
+ `+n.join(`
18
+ `),z=this.list(y);o[o.length-1]=z,i=i.substring(0,i.length-T.raw.length)+z.raw,r=r.substring(0,r.length-S.raw.length)+z.raw,n=y.substring(o.at(-1).raw.length).split(`
19
+ `);continue}}return{type:"blockquote",raw:i,tokens:o,text:r}}}list(t){let e=this.rules.block.list.exec(t);if(e){let n=e[1].trim(),i=n.length>1,r={type:"list",raw:"",ordered:i,start:i?+n.slice(0,-1):"",loose:!1,items:[]};n=i?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=i?n:"[*+-]");let o=this.rules.other.listItemRegex(n),l=!1;for(;t;){let h=!1,c="",m="";if(!(e=o.exec(t))||this.rules.block.hr.test(t))break;c=e[0],t=t.substring(c.length);let d=sr(e[2].split(`
20
+ `,1)[0],e[1].length),T=t.split(`
21
+ `,1)[0],S=!d.trim(),y=0;if(this.options.pedantic?(y=2,m=d.trimStart()):S?y=e[1].length+1:(y=d.search(this.rules.other.nonSpaceChar),y=y>4?1:y,m=d.slice(y),y+=e[1].length),S&&this.rules.other.blankLine.test(T)&&(c+=T+`
22
+ `,t=t.substring(T.length+1),h=!0),!h){let z=this.rules.other.nextBulletRegex(y),pe=this.rules.other.hrRegex(y),Ee=this.rules.other.fencesBeginRegex(y),Ae=this.rules.other.headingBeginRegex(y),He=this.rules.other.htmlBeginRegex(y),ae=this.rules.other.blockquoteBeginRegex(y);for(;t;){let ge=t.split(`
23
+ `,1)[0],C;if(T=ge,this.options.pedantic?(T=T.replace(this.rules.other.listReplaceNesting," "),C=T):C=T.replace(this.rules.other.tabCharGlobal," "),Ee.test(T)||Ae.test(T)||He.test(T)||ae.test(T)||z.test(T)||pe.test(T))break;if(C.search(this.rules.other.nonSpaceChar)>=y||!T.trim())m+=`
24
+ `+C.slice(y);else{if(S||d.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||Ee.test(d)||Ae.test(d)||pe.test(d))break;m+=`
25
+ `+T}S=!T.trim(),c+=ge+`
26
+ `,t=t.substring(ge.length+1),d=C.slice(y)}}r.loose||(l?r.loose=!0:this.rules.other.doubleBlankLine.test(c)&&(l=!0)),r.items.push({type:"list_item",raw:c,task:!!this.options.gfm&&this.rules.other.listIsTask.test(m),loose:!1,text:m,tokens:[]}),r.raw+=c}let p=r.items.at(-1);if(p)p.raw=p.raw.trimEnd(),p.text=p.text.trimEnd();else return;r.raw=r.raw.trimEnd();for(let h of r.items){this.lexer.state.top=!1,h.tokens=this.lexer.blockTokens(h.text,[]);let c=h.tokens[0];if(h.task&&(c?.type==="text"||c?.type==="paragraph")){h.text=h.text.replace(this.rules.other.listReplaceTask,""),c.raw=c.raw.replace(this.rules.other.listReplaceTask,""),c.text=c.text.replace(this.rules.other.listReplaceTask,"");for(let d=this.lexer.inlineQueue.length-1;d>=0;d--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[d].src)){this.lexer.inlineQueue[d].src=this.lexer.inlineQueue[d].src.replace(this.rules.other.listReplaceTask,"");break}let m=this.rules.other.listTaskCheckbox.exec(h.raw);if(m){let d={type:"checkbox",raw:m[0]+" ",checked:m[0]!=="[ ]"};h.checked=d.checked,r.loose?h.tokens[0]&&["paragraph","text"].includes(h.tokens[0].type)&&"tokens"in h.tokens[0]&&h.tokens[0].tokens?(h.tokens[0].raw=d.raw+h.tokens[0].raw,h.tokens[0].text=d.raw+h.tokens[0].text,h.tokens[0].tokens.unshift(d)):h.tokens.unshift({type:"paragraph",raw:d.raw,text:d.raw,tokens:[d]}):h.tokens.unshift(d)}}else h.task&&(h.task=!1);if(!r.loose){let m=h.tokens.filter(T=>T.type==="space"),d=m.length>0&&m.some(T=>this.rules.other.anyLine.test(T.raw));r.loose=d}}if(r.loose)for(let h of r.items){h.loose=!0;for(let c of h.tokens)c.type==="text"&&(c.type="paragraph")}return r}}html(t){let e=this.rules.block.html.exec(t);if(e){let n=Rn(e[0]);return{type:"html",block:!0,raw:n,pre:e[1]==="pre"||e[1]==="script"||e[1]==="style",text:n}}}def(t){let e=this.rules.block.def.exec(t);if(e){let n=e[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),i=e[2]?e[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",r=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):e[3];return{type:"def",tag:n,raw:fe(e[0],`
27
+ `),href:i,title:r}}}table(t){let e=this.rules.block.table.exec(t);if(!e||!this.rules.other.tableDelimiter.test(e[2]))return;let n=An(e[1]),i=e[2].replace(this.rules.other.tableAlignChars,"").split("|"),r=e[3]?.trim()?e[3].replace(this.rules.other.tableRowBlankLine,"").split(`
28
+ `):[],o={type:"table",raw:fe(e[0],`
29
+ `),header:[],align:[],rows:[]};if(n.length===i.length){for(let l of i)this.rules.other.tableAlignRight.test(l)?o.align.push("right"):this.rules.other.tableAlignCenter.test(l)?o.align.push("center"):this.rules.other.tableAlignLeft.test(l)?o.align.push("left"):o.align.push(null);for(let l=0;l<n.length;l++)o.header.push({text:n[l],tokens:this.lexer.inline(n[l]),header:!0,align:o.align[l]});for(let l of r)o.rows.push(An(l,o.header.length).map((p,h)=>({text:p,tokens:this.lexer.inline(p),header:!1,align:o.align[h]})));return o}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e){let n=e[1].trim();return{type:"heading",raw:fe(e[0],`
30
+ `),depth:e[2].charAt(0)==="="?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let n=e[1].charAt(e[1].length-1)===`
31
+ `?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:n,tokens:this.lexer.inline(n)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let n=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let o=fe(n.slice(0,-1),"\\");if((n.length-o.length)%2===0)return}else{let o=nr(e[2],"()");if(o===-2)return;if(o>-1){let l=(e[0].indexOf("!")===0?5:4)+e[1].length+o;e[2]=e[2].substring(0,o),e[0]=e[0].substring(0,l).trim(),e[3]=""}}let i=e[2],r="";if(this.options.pedantic){let o=this.rules.other.pedanticHrefTitle.exec(i);o&&(i=o[1],r=o[3])}else r=e[3]?e[3].slice(1,-1):"";return i=i.trim(),this.rules.other.startAngleBracket.test(i)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?i=i.slice(1):i=i.slice(1,-1)),Cn(e,{href:i&&i.replace(this.rules.inline.anyPunctuation,"$1"),title:r&&r.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let n;if((n=this.rules.inline.reflink.exec(t))||(n=this.rules.inline.nolink.exec(t))){let i=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal," "),r=e[i.toLowerCase()];if(!r){let o=n[0].charAt(0);return{type:"text",raw:o,text:o}}return Cn(n,r,n[0],this.lexer,this.rules)}}emStrong(t,e,n=""){let i=this.rules.inline.emStrongLDelim.exec(t);if(!(!i||!i[1]&&!i[2]&&!i[3]&&!i[4]||i[4]&&n.match(this.rules.other.unicodeAlphaNumeric))&&(!(i[1]||i[3])||!n||this.rules.inline.punctuation.exec(n))){let r=[...i[0]].length-1,o,l,p=r,h=0,c=i[0][0]==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,e=e.slice(-1*t.length+r);(i=c.exec(e))!==null;){if(o=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!o)continue;if(l=[...o].length,i[3]||i[4]){p+=l;continue}else if((i[5]||i[6])&&r%3&&!((r+l)%3)){h+=l;continue}if(p-=l,p>0)continue;l=Math.min(l,l+p+h);let m=[...i[0]][0].length,d=t.slice(0,r+i.index+m+l);if(Math.min(r,l)%2){let S=d.slice(1,-1);return{type:"em",raw:d,text:S,tokens:this.lexer.inlineTokens(S)}}let T=d.slice(2,-2);return{type:"strong",raw:d,text:T,tokens:this.lexer.inlineTokens(T)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let n=e[2].replace(this.rules.other.newLineCharGlobal," "),i=this.rules.other.nonSpaceChar.test(n),r=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return i&&r&&(n=n.substring(1,n.length-1)),{type:"codespan",raw:e[0],text:n}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t,e,n=""){let i=this.rules.inline.delLDelim.exec(t);if(i&&(!i[1]||!n||this.rules.inline.punctuation.exec(n))){let r=[...i[0]].length-1,o,l,p=r,h=this.rules.inline.delRDelim;for(h.lastIndex=0,e=e.slice(-1*t.length+r);(i=h.exec(e))!==null;){if(o=i[1]||i[2]||i[3]||i[4]||i[5]||i[6],!o||(l=[...o].length,l!==r))continue;if(i[3]||i[4]){p+=l;continue}if(p-=l,p>0)continue;l=Math.min(l,l+p);let c=[...i[0]][0].length,m=t.slice(0,r+i.index+c+l),d=m.slice(r,-r);return{type:"del",raw:m,text:d,tokens:this.lexer.inlineTokens(d)}}}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let n,i;return e[2]==="@"?(n=e[1],i="mailto:"+n):(n=e[1],i=n),{type:"link",raw:e[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let n,i;if(e[2]==="@")n=e[0],i="mailto:"+n;else{let r;do r=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(r!==e[0]);n=e[0],e[1]==="www."?i="http://"+e[0]:i=e[0]}return{type:"link",raw:e[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let n=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:n}}}},ne=class on{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||we,this.options.tokenizer=this.options.tokenizer||new ut,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let n={other:G,block:pt.normal,inline:Qe.normal};this.options.pedantic?(n.block=pt.pedantic,n.inline=Qe.pedantic):this.options.gfm&&(n.block=pt.gfm,this.options.breaks?n.inline=Qe.breaks:n.inline=Qe.gfm),this.tokenizer.rules=n}static get rules(){return{block:pt,inline:Qe}}static lex(e,n){return new on(n).lex(e)}static lexInline(e,n){return new on(n).inlineTokens(e)}lex(e){e=e.replace(G.carriageReturn,`
32
+ `),this.blockTokens(e,this.tokens);for(let n=0;n<this.inlineQueue.length;n++){let i=this.inlineQueue[n];this.inlineTokens(i.src,i.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,n=[],i=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(G.tabCharGlobal," ").replace(G.spaceLine,""));let r=1/0;for(;e;){if(e.length<r)r=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let o;if(this.options.extensions?.block?.some(p=>(o=p.call({lexer:this},e,n))?(e=e.substring(o.raw.length),n.push(o),!0):!1))continue;if(o=this.tokenizer.space(e)){e=e.substring(o.raw.length);let p=n.at(-1);o.raw.length===1&&p!==void 0?p.raw+=`
33
+ `:n.push(o);continue}if(o=this.tokenizer.code(e)){e=e.substring(o.raw.length);let p=n.at(-1);p?.type==="paragraph"||p?.type==="text"?(p.raw+=(p.raw.endsWith(`
34
+ `)?"":`
35
+ `)+o.raw,p.text+=`
36
+ `+o.text,this.inlineQueue.at(-1).src=p.text):n.push(o);continue}if(o=this.tokenizer.fences(e)){e=e.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.heading(e)){e=e.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.hr(e)){e=e.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.blockquote(e)){e=e.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.list(e)){e=e.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.html(e)){e=e.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.def(e)){e=e.substring(o.raw.length);let p=n.at(-1);p?.type==="paragraph"||p?.type==="text"?(p.raw+=(p.raw.endsWith(`
37
+ `)?"":`
38
+ `)+o.raw,p.text+=`
39
+ `+o.raw,this.inlineQueue.at(-1).src=p.text):this.tokens.links[o.tag]||(this.tokens.links[o.tag]={href:o.href,title:o.title},n.push(o));continue}if(o=this.tokenizer.table(e)){e=e.substring(o.raw.length),n.push(o);continue}if(o=this.tokenizer.lheading(e)){e=e.substring(o.raw.length),n.push(o);continue}let l=e;if(this.options.extensions?.startBlock){let p=1/0,h=e.slice(1),c;this.options.extensions.startBlock.forEach(m=>{c=m.call({lexer:this},h),typeof c=="number"&&c>=0&&(p=Math.min(p,c))}),p<1/0&&p>=0&&(l=e.substring(0,p+1))}if(this.state.top&&(o=this.tokenizer.paragraph(l))){let p=n.at(-1);i&&p?.type==="paragraph"?(p.raw+=(p.raw.endsWith(`
40
+ `)?"":`
41
+ `)+o.raw,p.text+=`
42
+ `+o.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=p.text):n.push(o),i=l.length!==e.length,e=e.substring(o.raw.length);continue}if(o=this.tokenizer.text(e)){e=e.substring(o.raw.length);let p=n.at(-1);p?.type==="text"?(p.raw+=(p.raw.endsWith(`
43
+ `)?"":`
44
+ `)+o.raw,p.text+=`
45
+ `+o.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=p.text):n.push(o);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,n}inline(e,n=[]){return this.inlineQueue.push({src:e,tokens:n}),n}inlineTokens(e,n=[]){this.tokenizer.lexer=this;let i=e,r=null;if(this.tokens.links){let c=Object.keys(this.tokens.links);if(c.length>0)for(;(r=this.tokenizer.rules.inline.reflinkSearch.exec(i))!==null;)c.includes(r[0].slice(r[0].lastIndexOf("[")+1,-1))&&(i=i.slice(0,r.index)+"["+"a".repeat(r[0].length-2)+"]"+i.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(r=this.tokenizer.rules.inline.anyPunctuation.exec(i))!==null;)i=i.slice(0,r.index)+"++"+i.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let o;for(;(r=this.tokenizer.rules.inline.blockSkip.exec(i))!==null;)o=r[2]?r[2].length:0,i=i.slice(0,r.index+o)+"["+"a".repeat(r[0].length-o-2)+"]"+i.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);i=this.options.hooks?.emStrongMask?.call({lexer:this},i)??i;let l=!1,p="",h=1/0;for(;e;){if(e.length<h)h=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}l||(p=""),l=!1;let c;if(this.options.extensions?.inline?.some(d=>(c=d.call({lexer:this},e,n))?(e=e.substring(c.raw.length),n.push(c),!0):!1))continue;if(c=this.tokenizer.escape(e)){e=e.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.tag(e)){e=e.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.link(e)){e=e.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(c.raw.length);let d=n.at(-1);c.type==="text"&&d?.type==="text"?(d.raw+=c.raw,d.text+=c.text):n.push(c);continue}if(c=this.tokenizer.emStrong(e,i,p)){e=e.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.codespan(e)){e=e.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.br(e)){e=e.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.del(e,i,p)){e=e.substring(c.raw.length),n.push(c);continue}if(c=this.tokenizer.autolink(e)){e=e.substring(c.raw.length),n.push(c);continue}if(!this.state.inLink&&(c=this.tokenizer.url(e))){e=e.substring(c.raw.length),n.push(c);continue}let m=e;if(this.options.extensions?.startInline){let d=1/0,T=e.slice(1),S;this.options.extensions.startInline.forEach(y=>{S=y.call({lexer:this},T),typeof S=="number"&&S>=0&&(d=Math.min(d,S))}),d<1/0&&d>=0&&(m=e.substring(0,d+1))}if(c=this.tokenizer.inlineText(m)){e=e.substring(c.raw.length),c.raw.slice(-1)!=="_"&&(p=c.raw.slice(-1)),l=!0;let d=n.at(-1);d?.type==="text"?(d.raw+=c.raw,d.text+=c.text):n.push(c);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return n}infiniteLoopError(e){let n="Infinite loop on byte: "+e;if(this.options.silent)console.error(n);else throw new Error(n)}},ht=class{options;parser;constructor(t){this.options=t||we}space(t){return""}code({text:t,lang:e,escaped:n}){let i=(e||"").match(G.notSpaceStart)?.[0],r=t.replace(G.endingNewline,"")+`
46
+ `;return i?'<pre><code class="language-'+oe(i)+'">'+(n?r:oe(r,!0))+`</code></pre>
47
+ `:"<pre><code>"+(n?r:oe(r,!0))+`</code></pre>
48
+ `}blockquote({tokens:t}){return`<blockquote>
49
+ ${this.parser.parse(t)}</blockquote>
50
+ `}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`<h${e}>${this.parser.parseInline(t)}</h${e}>
51
+ `}hr(t){return`<hr>
52
+ `}list(t){let e=t.ordered,n=t.start,i="";for(let l=0;l<t.items.length;l++){let p=t.items[l];i+=this.listitem(p)}let r=e?"ol":"ul",o=e&&n!==1?' start="'+n+'"':"";return"<"+r+o+`>
53
+ `+i+"</"+r+`>
54
+ `}listitem(t){return`<li>${this.parser.parse(t.tokens)}</li>
55
+ `}checkbox({checked:t}){return"<input "+(t?'checked="" ':"")+'disabled="" type="checkbox"> '}paragraph({tokens:t}){return`<p>${this.parser.parseInline(t)}</p>
56
+ `}table(t){let e="",n="";for(let r=0;r<t.header.length;r++)n+=this.tablecell(t.header[r]);e+=this.tablerow({text:n});let i="";for(let r=0;r<t.rows.length;r++){let o=t.rows[r];n="";for(let l=0;l<o.length;l++)n+=this.tablecell(o[l]);i+=this.tablerow({text:n})}return i&&(i=`<tbody>${i}</tbody>`),`<table>
57
+ <thead>
58
+ `+e+`</thead>
59
+ `+i+`</table>
60
+ `}tablerow({text:t}){return`<tr>
61
+ ${t}</tr>
62
+ `}tablecell(t){let e=this.parser.parseInline(t.tokens),n=t.header?"th":"td";return(t.align?`<${n} align="${t.align}">`:`<${n}>`)+e+`</${n}>
63
+ `}strong({tokens:t}){return`<strong>${this.parser.parseInline(t)}</strong>`}em({tokens:t}){return`<em>${this.parser.parseInline(t)}</em>`}codespan({text:t}){return`<code>${oe(t,!0)}</code>`}br(t){return"<br>"}del({tokens:t}){return`<del>${this.parser.parseInline(t)}</del>`}link({href:t,title:e,tokens:n}){let i=this.parser.parseInline(n),r=En(t);if(r===null)return i;t=r;let o='<a href="'+t+'"';return e&&(o+=' title="'+oe(e)+'"'),o+=">"+i+"</a>",o}image({href:t,title:e,text:n,tokens:i}){i&&(n=this.parser.parseInline(i,this.parser.textRenderer));let r=En(t);if(r===null)return oe(n);t=r;let o=`<img src="${t}" alt="${oe(n)}"`;return e&&(o+=` title="${oe(e)}"`),o+=">",o}text(t){return"tokens"in t&&t.tokens?this.parser.parseInline(t.tokens):"escaped"in t&&t.escaped?t.text:oe(t.text)}},$t=class{strong({text:t}){return t}em({text:t}){return t}codespan({text:t}){return t}del({text:t}){return t}html({text:t}){return t}text({text:t}){return t}link({text:t}){return""+t}image({text:t}){return""+t}br(){return""}checkbox({raw:t}){return t}},se=class an{options;renderer;textRenderer;constructor(e){this.options=e||we,this.options.renderer=this.options.renderer||new ht,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new $t}static parse(e,n){return new an(n).parse(e)}static parseInline(e,n){return new an(n).parseInline(e)}parse(e){this.renderer.parser=this;let n="";for(let i=0;i<e.length;i++){let r=e[i];if(this.options.extensions?.renderers?.[r.type]){let l=r,p=this.options.extensions.renderers[l.type].call({parser:this},l);if(p!==!1||!["space","hr","heading","code","table","blockquote","list","html","def","paragraph","text"].includes(l.type)){n+=p||"";continue}}let o=r;switch(o.type){case"space":{n+=this.renderer.space(o);break}case"hr":{n+=this.renderer.hr(o);break}case"heading":{n+=this.renderer.heading(o);break}case"code":{n+=this.renderer.code(o);break}case"table":{n+=this.renderer.table(o);break}case"blockquote":{n+=this.renderer.blockquote(o);break}case"list":{n+=this.renderer.list(o);break}case"checkbox":{n+=this.renderer.checkbox(o);break}case"html":{n+=this.renderer.html(o);break}case"def":{n+=this.renderer.def(o);break}case"paragraph":{n+=this.renderer.paragraph(o);break}case"text":{n+=this.renderer.text(o);break}default:{let l='Token with "'+o.type+'" type was not found.';if(this.options.silent)return console.error(l),"";throw new Error(l)}}}return n}parseInline(e,n=this.renderer){this.renderer.parser=this;let i="";for(let r=0;r<e.length;r++){let o=e[r];if(this.options.extensions?.renderers?.[o.type]){let p=this.options.extensions.renderers[o.type].call({parser:this},o);if(p!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(o.type)){i+=p||"";continue}}let l=o;switch(l.type){case"escape":{i+=n.text(l);break}case"html":{i+=n.html(l);break}case"link":{i+=n.link(l);break}case"image":{i+=n.image(l);break}case"checkbox":{i+=n.checkbox(l);break}case"strong":{i+=n.strong(l);break}case"em":{i+=n.em(l);break}case"codespan":{i+=n.codespan(l);break}case"br":{i+=n.br(l);break}case"del":{i+=n.del(l);break}case"text":{i+=n.text(l);break}default:{let p='Token with "'+l.type+'" type was not found.';if(this.options.silent)return console.error(p),"";throw new Error(p)}}}return i}},Ke=class{options;block;constructor(t){this.options=t||we}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(t){return t}postprocess(t){return t}processAllTokens(t){return t}emStrongMask(t){return t}provideLexer(t=this.block){return t?ne.lex:ne.lexInline}provideParser(t=this.block){return t?se.parse:se.parseInline}},ir=class{defaults=Rt();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=se;Renderer=ht;TextRenderer=$t;Lexer=ne;Tokenizer=ut;Hooks=Ke;constructor(...t){this.use(...t)}walkTokens(t,e){let n=[];for(let i of t)switch(n=n.concat(e.call(this,i)),i.type){case"table":{let r=i;for(let o of r.header)n=n.concat(this.walkTokens(o.tokens,e));for(let o of r.rows)for(let l of o)n=n.concat(this.walkTokens(l.tokens,e));break}case"list":{let r=i;n=n.concat(this.walkTokens(r.items,e));break}default:{let r=i;this.defaults.extensions?.childTokens?.[r.type]?this.defaults.extensions.childTokens[r.type].forEach(o=>{let l=r[o].flat(1/0);n=n.concat(this.walkTokens(l,e))}):r.tokens&&(n=n.concat(this.walkTokens(r.tokens,e)))}}return n}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(n=>{let i={...n};if(i.async=this.defaults.async||i.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error("extension name required");if("renderer"in r){let o=e.renderers[r.name];o?e.renderers[r.name]=function(...l){let p=r.renderer.apply(this,l);return p===!1&&(p=o.apply(this,l)),p}:e.renderers[r.name]=r.renderer}if("tokenizer"in r){if(!r.level||r.level!=="block"&&r.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let o=e[r.level];o?o.unshift(r.tokenizer):e[r.level]=[r.tokenizer],r.start&&(r.level==="block"?e.startBlock?e.startBlock.push(r.start):e.startBlock=[r.start]:r.level==="inline"&&(e.startInline?e.startInline.push(r.start):e.startInline=[r.start]))}"childTokens"in r&&r.childTokens&&(e.childTokens[r.name]=r.childTokens)}),i.extensions=e),n.renderer){let r=this.defaults.renderer||new ht(this.defaults);for(let o in n.renderer){if(!(o in r))throw new Error(`renderer '${o}' does not exist`);if(["options","parser"].includes(o))continue;let l=o,p=n.renderer[l],h=r[l];r[l]=(...c)=>{let m=p.apply(r,c);return m===!1&&(m=h.apply(r,c)),m||""}}i.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new ut(this.defaults);for(let o in n.tokenizer){if(!(o in r))throw new Error(`tokenizer '${o}' does not exist`);if(["options","rules","lexer"].includes(o))continue;let l=o,p=n.tokenizer[l],h=r[l];r[l]=(...c)=>{let m=p.apply(r,c);return m===!1&&(m=h.apply(r,c)),m}}i.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new Ke;for(let o in n.hooks){if(!(o in r))throw new Error(`hook '${o}' does not exist`);if(["options","block"].includes(o))continue;let l=o,p=n.hooks[l],h=r[l];Ke.passThroughHooks.has(o)?r[l]=c=>{if(this.defaults.async&&Ke.passThroughHooksRespectAsync.has(o))return(async()=>{let d=await p.call(r,c);return h.call(r,d)})();let m=p.call(r,c);return h.call(r,m)}:r[l]=(...c)=>{if(this.defaults.async)return(async()=>{let d=await p.apply(r,c);return d===!1&&(d=await h.apply(r,c)),d})();let m=p.apply(r,c);return m===!1&&(m=h.apply(r,c)),m}}i.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,o=n.walkTokens;i.walkTokens=function(l){let p=[];return p.push(o.call(this,l)),r&&(p=p.concat(r.call(this,l))),p}}this.defaults={...this.defaults,...i}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return ne.lex(t,e??this.defaults)}parser(t,e){return se.parse(t,e??this.defaults)}parseMarkdown(t){return(e,n)=>{let i={...n},r={...this.defaults,...i},o=this.onError(!!r.silent,!!r.async);if(this.defaults.async===!0&&i.async===!1)return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return o(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));if(r.hooks&&(r.hooks.options=r,r.hooks.block=t),r.async)return(async()=>{let l=r.hooks?await r.hooks.preprocess(e):e,p=await(r.hooks?await r.hooks.provideLexer(t):t?ne.lex:ne.lexInline)(l,r),h=r.hooks?await r.hooks.processAllTokens(p):p;r.walkTokens&&await Promise.all(this.walkTokens(h,r.walkTokens));let c=await(r.hooks?await r.hooks.provideParser(t):t?se.parse:se.parseInline)(h,r);return r.hooks?await r.hooks.postprocess(c):c})().catch(o);try{r.hooks&&(e=r.hooks.preprocess(e));let l=(r.hooks?r.hooks.provideLexer(t):t?ne.lex:ne.lexInline)(e,r);r.hooks&&(l=r.hooks.processAllTokens(l)),r.walkTokens&&this.walkTokens(l,r.walkTokens);let p=(r.hooks?r.hooks.provideParser(t):t?se.parse:se.parseInline)(l,r);return r.hooks&&(p=r.hooks.postprocess(p)),p}catch(l){return o(l)}}}onError(t,e){return n=>{if(n.message+=`
64
+ Please report this to https://github.com/markedjs/marked.`,t){let i="<p>An error occurred:</p><pre>"+oe(n.message+"",!0)+"</pre>";return e?Promise.resolve(i):i}if(e)return Promise.reject(n);throw n}}},Se=new ir;function E(t,e){return Se.parse(t,e)}E.options=E.setOptions=function(t){return Se.setOptions(t),E.defaults=Se.defaults,hn(E.defaults),E},E.getDefaults=Rt,E.defaults=we,E.use=function(...t){return Se.use(...t),E.defaults=Se.defaults,hn(E.defaults),E},E.walkTokens=function(t,e){return Se.walkTokens(t,e)},E.parseInline=Se.parseInline,E.Parser=se,E.parser=se.parse,E.Renderer=ht,E.TextRenderer=$t,E.Lexer=ne,E.lexer=ne.lex,E.Tokenizer=ut,E.Hooks=Ke,E.parse=E,E.options,E.setOptions,E.use,E.walkTokens,E.parseInline,se.parse,ne.lex;function Nn(t,e){(e==null||e>t.length)&&(e=t.length);for(var n=0,i=Array(e);n<e;n++)i[n]=t[n];return i}function or(t){if(Array.isArray(t))return t}function ar(t,e){var n=t==null?null:typeof Symbol<"u"&&t[Symbol.iterator]||t["@@iterator"];if(n!=null){var i,r,o,l,p=[],h=!0,c=!1;try{if(o=(n=n.call(t)).next,e!==0)for(;!(h=(i=o.call(n)).done)&&(p.push(i.value),p.length!==e);h=!0);}catch(m){c=!0,r=m}finally{try{if(!h&&n.return!=null&&(l=n.return(),Object(l)!==l))return}finally{if(c)throw r}}return p}}function lr(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
65
+ In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function cr(t,e){return or(t)||ar(t,e)||pr(t,e)||lr()}function pr(t,e){if(t){if(typeof t=="string")return Nn(t,e);var n={}.toString.call(t).slice(8,-1);return n==="Object"&&t.constructor&&(n=t.constructor.name),n==="Map"||n==="Set"?Array.from(t):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?Nn(t,e):void 0}}const In=Object.entries,Ln=Object.setPrototypeOf,ur=Object.isFrozen,hr=Object.getPrototypeOf,dr=Object.getOwnPropertyDescriptor;let X=Object.freeze,te=Object.seal,ze=Object.create,Dn=typeof Reflect<"u"&&Reflect,zt=Dn.apply,Bt=Dn.construct;X||(X=function(e){return e}),te||(te=function(e){return e}),zt||(zt=function(e,n){for(var i=arguments.length,r=new Array(i>2?i-2:0),o=2;o<i;o++)r[o-2]=arguments[o];return e.apply(n,r)}),Bt||(Bt=function(e){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];return new e(...i)});const Be=D(Array.prototype.forEach),fr=D(Array.prototype.lastIndexOf),On=D(Array.prototype.pop),Ue=D(Array.prototype.push),gr=D(Array.prototype.splice),v=Array.isArray,Je=D(String.prototype.toLowerCase),Ut=D(String.prototype.toString),Mn=D(String.prototype.match),Fe=D(String.prototype.replace),Pn=D(String.prototype.indexOf),mr=D(String.prototype.trim),kr=D(Number.prototype.toString),br=D(Boolean.prototype.toString),$n=typeof BigInt>"u"?null:D(BigInt.prototype.toString),zn=typeof Symbol>"u"?null:D(Symbol.prototype.toString),I=D(Object.prototype.hasOwnProperty),et=D(Object.prototype.toString),H=D(RegExp.prototype.test),dt=Tr(TypeError);function D(t){return function(e){e instanceof RegExp&&(e.lastIndex=0);for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r<n;r++)i[r-1]=arguments[r];return zt(t,e,i)}}function Tr(t){return function(){for(var e=arguments.length,n=new Array(e),i=0;i<e;i++)n[i]=arguments[i];return Bt(t,n)}}function x(t,e){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Je;if(Ln&&Ln(t,null),!v(e))return t;let i=e.length;for(;i--;){let r=e[i];if(typeof r=="string"){const o=n(r);o!==r&&(ur(e)||(e[i]=o),r=o)}t[r]=!0}return t}function xr(t){for(let e=0;e<t.length;e++)I(t,e)||(t[e]=null);return t}function K(t){const e=ze(null);for(const i of In(t)){var n=cr(i,2);const r=n[0],o=n[1];I(t,r)&&(v(o)?e[r]=xr(o):o&&typeof o=="object"&&o.constructor===Object?e[r]=K(o):e[r]=o)}return e}function wr(t){switch(typeof t){case"string":return t;case"number":return kr(t);case"boolean":return br(t);case"bigint":return $n?$n(t):"0";case"symbol":return zn?zn(t):"Symbol()";case"undefined":return et(t);case"function":case"object":{if(t===null)return et(t);const e=t,n=ye(e,"toString");if(typeof n=="function"){const i=n(e);return typeof i=="string"?i:et(i)}return et(t)}default:return et(t)}}function ye(t,e){for(;t!==null;){const i=dr(t,e);if(i){if(i.get)return D(i.get);if(typeof i.value=="function")return D(i.value)}t=hr(t)}function n(){return null}return n}function _r(t){try{return H(t,""),!0}catch{return!1}}const Bn=X(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),Ft=X(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),Vt=X(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),Sr=X(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),Ht=X(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),yr=X(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),Un=X(["#text"]),Fn=X(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","command","commandfor","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns"]),Wt=X(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),Vn=X(["accent","accentunder","align","bevelled","close","columnalign","columnlines","columnspacing","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lquote","lspace","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),ft=X(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),Er=te(/{{[\w\W]*|^[\w\W]*}}/g),Ar=te(/<%[\w\W]*|^[\w\W]*%>/g),Rr=te(/\${[\w\W]*/g),Cr=te(/^data-[\-\w.\u00B7-\uFFFF]+$/),Nr=te(/^aria-[\-\w]+$/),Hn=te(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Ir=te(/^(?:\w+script|data):/i),Lr=te(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Dr=te(/^html$/i),Or=te(/^[a-z][.\w]*(-[.\w]+)+$/i),Ve={element:1,text:3,progressingInstruction:7,comment:8,document:9},Mr=function(){return typeof window>"u"?null:window},Pr=function(e,n){if(typeof e!="object"||typeof e.createPolicy!="function")return null;let i=null;const r="data-tt-policy-suffix";n&&n.hasAttribute(r)&&(i=n.getAttribute(r));const o="dompurify"+(i?"#"+i:"");try{return e.createPolicy(o,{createHTML(l){return l},createScriptURL(l){return l}})}catch{return console.warn("TrustedTypes policy "+o+" could not be created."),null}},Wn=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function Gn(){let t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Mr();const e=k=>Gn(k);if(e.version="3.4.5",e.removed=[],!t||!t.document||t.document.nodeType!==Ve.document||!t.Element)return e.isSupported=!1,e;let n=t.document;const i=n,r=i.currentScript,o=t.DocumentFragment,l=t.HTMLTemplateElement,p=t.Node,h=t.Element,c=t.NodeFilter,m=t.NamedNodeMap,d=m===void 0?t.NamedNodeMap||t.MozNamedAttrMap:m,T=t.HTMLFormElement,S=t.DOMParser,y=t.trustedTypes,z=h.prototype,pe=ye(z,"cloneNode"),Ee=ye(z,"remove"),Ae=ye(z,"nextSibling"),He=ye(z,"childNodes"),ae=ye(z,"parentNode"),ge=p&&p.prototype?ye(p.prototype,"nodeType"):null;if(typeof l=="function"){const k=n.createElement("template");k.content&&k.content.ownerDocument&&(n=k.content.ownerDocument)}let C,Re="";const We=n,re=We.implementation,Ce=We.createNodeIterator,Ge=We.createDocumentFragment,j=We.getElementsByTagName,jt=i.importNode;let W=Wn();e.isSupported=typeof In=="function"&&typeof ae=="function"&&re&&re.createHTMLDocument!==void 0;const me=Er,ke=Ar,be=Rr,tt=Cr,gt=Nr,qt=Ir,nt=Lr,Xt=Or;let mt=Hn,O=null;const kt=x({},[...Bn,...Ft,...Vt,...Ht,...Un]);let L=null;const bt=x({},[...Fn,...Wt,...Vn,...ft]);let N=Object.seal(ze(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),Ne=null,Ie=null;const g=Object.seal(ze(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let b=!0,A=!0,B=!1,U=!0,F=!1,J=!0,R=!1,Z=!1,je=!1,Te=!1,Le=!1,De=!1,Oe=!0,q=!1;const qn="user-content-";let vt=!0,st=!1,qe={},le=null;const Zt=x({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Xn=null;const vn=x({},["audio","video","img","source","image","track"]);let Yt=null;const Zn=x({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),Tt="http://www.w3.org/1998/Math/MathML",xt="http://www.w3.org/2000/svg",ce="http://www.w3.org/1999/xhtml";let Xe=ce,Qt=!1,Kt=null;const _i=x({},[Tt,xt,ce],Ut);let Jt=x({},["mi","mo","mn","ms","mtext"]),en=x({},["annotation-xml"]);const Si=x({},["title","style","font","a","script"]);let rt=null;const yi=["application/xhtml+xml","text/html"],Ei="text/html";let $=null,ve=null;const Ai=n.createElement("form"),Yn=function(a){return a instanceof RegExp||a instanceof Function},tn=function(){let a=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(ve&&ve===a)return;(!a||typeof a!="object")&&(a={}),a=K(a),rt=yi.indexOf(a.PARSER_MEDIA_TYPE)===-1?Ei:a.PARSER_MEDIA_TYPE,$=rt==="application/xhtml+xml"?Ut:Je,O=I(a,"ALLOWED_TAGS")&&v(a.ALLOWED_TAGS)?x({},a.ALLOWED_TAGS,$):kt,L=I(a,"ALLOWED_ATTR")&&v(a.ALLOWED_ATTR)?x({},a.ALLOWED_ATTR,$):bt,Kt=I(a,"ALLOWED_NAMESPACES")&&v(a.ALLOWED_NAMESPACES)?x({},a.ALLOWED_NAMESPACES,Ut):_i,Yt=I(a,"ADD_URI_SAFE_ATTR")&&v(a.ADD_URI_SAFE_ATTR)?x(K(Zn),a.ADD_URI_SAFE_ATTR,$):Zn,Xn=I(a,"ADD_DATA_URI_TAGS")&&v(a.ADD_DATA_URI_TAGS)?x(K(vn),a.ADD_DATA_URI_TAGS,$):vn,le=I(a,"FORBID_CONTENTS")&&v(a.FORBID_CONTENTS)?x({},a.FORBID_CONTENTS,$):Zt,Ne=I(a,"FORBID_TAGS")&&v(a.FORBID_TAGS)?x({},a.FORBID_TAGS,$):K({}),Ie=I(a,"FORBID_ATTR")&&v(a.FORBID_ATTR)?x({},a.FORBID_ATTR,$):K({}),qe=I(a,"USE_PROFILES")?a.USE_PROFILES&&typeof a.USE_PROFILES=="object"?K(a.USE_PROFILES):a.USE_PROFILES:!1,b=a.ALLOW_ARIA_ATTR!==!1,A=a.ALLOW_DATA_ATTR!==!1,B=a.ALLOW_UNKNOWN_PROTOCOLS||!1,U=a.ALLOW_SELF_CLOSE_IN_ATTR!==!1,F=a.SAFE_FOR_TEMPLATES||!1,J=a.SAFE_FOR_XML!==!1,R=a.WHOLE_DOCUMENT||!1,Te=a.RETURN_DOM||!1,Le=a.RETURN_DOM_FRAGMENT||!1,De=a.RETURN_TRUSTED_TYPE||!1,je=a.FORCE_BODY||!1,Oe=a.SANITIZE_DOM!==!1,q=a.SANITIZE_NAMED_PROPS||!1,vt=a.KEEP_CONTENT!==!1,st=a.IN_PLACE||!1,mt=_r(a.ALLOWED_URI_REGEXP)?a.ALLOWED_URI_REGEXP:Hn,Xe=typeof a.NAMESPACE=="string"?a.NAMESPACE:ce,Jt=I(a,"MATHML_TEXT_INTEGRATION_POINTS")&&a.MATHML_TEXT_INTEGRATION_POINTS&&typeof a.MATHML_TEXT_INTEGRATION_POINTS=="object"?K(a.MATHML_TEXT_INTEGRATION_POINTS):x({},["mi","mo","mn","ms","mtext"]),en=I(a,"HTML_INTEGRATION_POINTS")&&a.HTML_INTEGRATION_POINTS&&typeof a.HTML_INTEGRATION_POINTS=="object"?K(a.HTML_INTEGRATION_POINTS):x({},["annotation-xml"]);const u=I(a,"CUSTOM_ELEMENT_HANDLING")&&a.CUSTOM_ELEMENT_HANDLING&&typeof a.CUSTOM_ELEMENT_HANDLING=="object"?K(a.CUSTOM_ELEMENT_HANDLING):ze(null);if(N=ze(null),I(u,"tagNameCheck")&&Yn(u.tagNameCheck)&&(N.tagNameCheck=u.tagNameCheck),I(u,"attributeNameCheck")&&Yn(u.attributeNameCheck)&&(N.attributeNameCheck=u.attributeNameCheck),I(u,"allowCustomizedBuiltInElements")&&typeof u.allowCustomizedBuiltInElements=="boolean"&&(N.allowCustomizedBuiltInElements=u.allowCustomizedBuiltInElements),F&&(A=!1),Le&&(Te=!0),qe&&(O=x({},Un),L=ze(null),qe.html===!0&&(x(O,Bn),x(L,Fn)),qe.svg===!0&&(x(O,Ft),x(L,Wt),x(L,ft)),qe.svgFilters===!0&&(x(O,Vt),x(L,Wt),x(L,ft)),qe.mathMl===!0&&(x(O,Ht),x(L,Vn),x(L,ft))),g.tagCheck=null,g.attributeCheck=null,I(a,"ADD_TAGS")&&(typeof a.ADD_TAGS=="function"?g.tagCheck=a.ADD_TAGS:v(a.ADD_TAGS)&&(O===kt&&(O=K(O)),x(O,a.ADD_TAGS,$))),I(a,"ADD_ATTR")&&(typeof a.ADD_ATTR=="function"?g.attributeCheck=a.ADD_ATTR:v(a.ADD_ATTR)&&(L===bt&&(L=K(L)),x(L,a.ADD_ATTR,$))),I(a,"ADD_URI_SAFE_ATTR")&&v(a.ADD_URI_SAFE_ATTR)&&x(Yt,a.ADD_URI_SAFE_ATTR,$),I(a,"FORBID_CONTENTS")&&v(a.FORBID_CONTENTS)&&(le===Zt&&(le=K(le)),x(le,a.FORBID_CONTENTS,$)),I(a,"ADD_FORBID_CONTENTS")&&v(a.ADD_FORBID_CONTENTS)&&(le===Zt&&(le=K(le)),x(le,a.ADD_FORBID_CONTENTS,$)),vt&&(O["#text"]=!0),R&&x(O,["html","head","body"]),O.table&&(x(O,["tbody"]),delete Ne.tbody),a.TRUSTED_TYPES_POLICY){if(typeof a.TRUSTED_TYPES_POLICY.createHTML!="function")throw dt('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof a.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw dt('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');C=a.TRUSTED_TYPES_POLICY,Re=C.createHTML("")}else C===void 0&&(C=Pr(y,r)),C!==null&&typeof Re=="string"&&(Re=C.createHTML(""));X&&X(a),ve=a},Qn=x({},[...Ft,...Vt,...Sr]),Kn=x({},[...Ht,...yr]),Ri=function(a){let u=ae(a);(!u||!u.tagName)&&(u={namespaceURI:Xe,tagName:"template"});const f=Je(a.tagName),w=Je(u.tagName);return Kt[a.namespaceURI]?a.namespaceURI===xt?u.namespaceURI===ce?f==="svg":u.namespaceURI===Tt?f==="svg"&&(w==="annotation-xml"||Jt[w]):!!Qn[f]:a.namespaceURI===Tt?u.namespaceURI===ce?f==="math":u.namespaceURI===xt?f==="math"&&en[w]:!!Kn[f]:a.namespaceURI===ce?u.namespaceURI===xt&&!en[w]||u.namespaceURI===Tt&&!Jt[w]?!1:!Kn[f]&&(Si[f]||!Qn[f]):!!(rt==="application/xhtml+xml"&&Kt[a.namespaceURI]):!1},ie=function(a){Ue(e.removed,{element:a});try{ae(a).removeChild(a)}catch{Ee(a)}},Me=function(a,u){try{Ue(e.removed,{attribute:u.getAttributeNode(a),from:u})}catch{Ue(e.removed,{attribute:null,from:u})}if(u.removeAttribute(a),a==="is")if(Te||Le)try{ie(u)}catch{}else try{u.setAttribute(a,"")}catch{}},Jn=function(a){let u=null,f=null;if(je)a="<remove></remove>"+a;else{const P=Mn(a,/^[\r\n\t ]+/);f=P&&P[0]}rt==="application/xhtml+xml"&&Xe===ce&&(a='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+a+"</body></html>");const w=C?C.createHTML(a):a;if(Xe===ce)try{u=new S().parseFromString(w,rt)}catch{}if(!u||!u.documentElement){u=re.createDocument(Xe,"template",null);try{u.documentElement.innerHTML=Qt?Re:w}catch{}}const M=u.body||u.documentElement;return a&&f&&M.insertBefore(n.createTextNode(f),M.childNodes[0]||null),Xe===ce?j.call(u,R?"html":"body")[0]:R?u.documentElement:M},es=function(a){return Ce.call(a.ownerDocument||a,a,c.SHOW_ELEMENT|c.SHOW_COMMENT|c.SHOW_TEXT|c.SHOW_PROCESSING_INSTRUCTION|c.SHOW_CDATA_SECTION,null)},ts=function(a){a.normalize();const u=Ce.call(a.ownerDocument||a,a,c.SHOW_TEXT|c.SHOW_COMMENT|c.SHOW_CDATA_SECTION|c.SHOW_PROCESSING_INSTRUCTION,null);let f=u.nextNode();for(;f;){let w=f.data;Be([me,ke,be],M=>{w=Fe(w,M," ")}),f.data=w,f=u.nextNode()}},nn=function(a){return a instanceof T&&(typeof a.nodeName!="string"||typeof a.textContent!="string"||typeof a.removeChild!="function"||!(a.attributes instanceof d)||typeof a.removeAttribute!="function"||typeof a.setAttribute!="function"||typeof a.namespaceURI!="string"||typeof a.insertBefore!="function"||typeof a.hasChildNodes!="function")},wt=function(a){if(!ge||typeof a!="object"||a===null)return!1;try{return typeof ge(a)=="number"}catch{return!1}};function ue(k,a,u){Be(k,f=>{f.call(e,a,u,ve)})}const ns=function(a){let u=null;if(ue(W.beforeSanitizeElements,a,null),nn(a))return ie(a),!0;const f=$(a.nodeName);if(ue(W.uponSanitizeElement,a,{tagName:f,allowedTags:O}),J&&a.hasChildNodes()&&!wt(a.firstElementChild)&&H(/<[/\w!]/g,a.innerHTML)&&H(/<[/\w!]/g,a.textContent)||J&&a.namespaceURI===ce&&f==="style"&&wt(a.firstElementChild)||a.nodeType===Ve.progressingInstruction||J&&a.nodeType===Ve.comment&&H(/<[/\w]/g,a.data))return ie(a),!0;if(Ne[f]||!(g.tagCheck instanceof Function&&g.tagCheck(f))&&!O[f]){if(!Ne[f]&&rs(f)&&(N.tagNameCheck instanceof RegExp&&H(N.tagNameCheck,f)||N.tagNameCheck instanceof Function&&N.tagNameCheck(f)))return!1;if(vt&&!le[f]){const w=ae(a)||a.parentNode,M=He(a)||a.childNodes;if(M&&w){const P=M.length;for(let ee=P-1;ee>=0;--ee){const xe=pe(M[ee],!0);w.insertBefore(xe,Ae(a))}}}return ie(a),!0}return a instanceof h&&!Ri(a)||(f==="noscript"||f==="noembed"||f==="noframes")&&H(/<\/no(script|embed|frames)/i,a.innerHTML)?(ie(a),!0):(F&&a.nodeType===Ve.text&&(u=a.textContent,Be([me,ke,be],w=>{u=Fe(u,w," ")}),a.textContent!==u&&(Ue(e.removed,{element:a.cloneNode()}),a.textContent=u)),ue(W.afterSanitizeElements,a,null),!1)},ss=function(a,u,f){if(Ie[u]||Oe&&(u==="id"||u==="name")&&(f in n||f in Ai))return!1;const w=L[u]||g.attributeCheck instanceof Function&&g.attributeCheck(u,a);if(!(A&&!Ie[u]&&H(tt,u))){if(!(b&&H(gt,u))){if(!w||Ie[u]){if(!(rs(a)&&(N.tagNameCheck instanceof RegExp&&H(N.tagNameCheck,a)||N.tagNameCheck instanceof Function&&N.tagNameCheck(a))&&(N.attributeNameCheck instanceof RegExp&&H(N.attributeNameCheck,u)||N.attributeNameCheck instanceof Function&&N.attributeNameCheck(u,a))||u==="is"&&N.allowCustomizedBuiltInElements&&(N.tagNameCheck instanceof RegExp&&H(N.tagNameCheck,f)||N.tagNameCheck instanceof Function&&N.tagNameCheck(f))))return!1}else if(!Yt[u]){if(!H(mt,Fe(f,nt,""))){if(!((u==="src"||u==="xlink:href"||u==="href")&&a!=="script"&&Pn(f,"data:")===0&&Xn[a])){if(!(B&&!H(qt,Fe(f,nt,"")))){if(f)return!1}}}}}}return!0},Ci=x({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),rs=function(a){return!Ci[Je(a)]&&H(Xt,a)},is=function(a){ue(W.beforeSanitizeAttributes,a,null);const u=a.attributes;if(!u||nn(a))return;const f={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:L,forceKeepAttr:void 0};let w=u.length;for(;w--;){const M=u[w],P=M.name,ee=M.namespaceURI,xe=M.value,he=$(P),rn=xe;let V=P==="value"?rn:mr(rn);if(f.attrName=he,f.attrValue=V,f.keepAttr=!0,f.forceKeepAttr=void 0,ue(W.uponSanitizeAttribute,a,f),V=f.attrValue,q&&(he==="id"||he==="name")&&Pn(V,qn)!==0&&(Me(P,a),V=qn+V),J&&H(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,V)){Me(P,a);continue}if(he==="attributename"&&Mn(V,"href")){Me(P,a);continue}if(f.forceKeepAttr)continue;if(!f.keepAttr){Me(P,a);continue}if(!U&&H(/\/>/i,V)){Me(P,a);continue}F&&Be([me,ke,be],as=>{V=Fe(V,as," ")});const os=$(a.nodeName);if(!ss(os,he,V)){Me(P,a);continue}if(C&&typeof y=="object"&&typeof y.getAttributeType=="function"&&!ee)switch(y.getAttributeType(os,he)){case"TrustedHTML":{V=C.createHTML(V);break}case"TrustedScriptURL":{V=C.createScriptURL(V);break}}if(V!==rn)try{ee?a.setAttributeNS(ee,P,V):a.setAttribute(P,V),nn(a)?ie(a):On(e.removed)}catch{Me(P,a)}}ue(W.afterSanitizeAttributes,a,null)},sn=function(a){let u=null;const f=es(a);for(ue(W.beforeSanitizeShadowDOM,a,null);u=f.nextNode();)ue(W.uponSanitizeShadowNode,u,null),ns(u),is(u),u.content instanceof o&&sn(u.content);ue(W.afterSanitizeShadowDOM,a,null)},_t=function(a){if(a.nodeType===Ve.element&&a.shadowRoot instanceof o){const w=a.shadowRoot;_t(w),sn(w)}const u=a.childNodes;if(!u)return;const f=[];Be(u,w=>{Ue(f,w)});for(const w of f)_t(w)};return e.sanitize=function(k){let a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},u=null,f=null,w=null,M=null;if(Qt=!k,Qt&&(k="<!-->"),typeof k!="string"&&!wt(k)&&(k=wr(k),typeof k!="string"))throw dt("dirty is not a string, aborting");if(!e.isSupported)return k;if(Z||tn(a),e.removed=[],typeof k=="string"&&(st=!1),st){const xe=k.nodeName;if(typeof xe=="string"){const he=$(xe);if(!O[he]||Ne[he])throw dt("root node is forbidden and cannot be sanitized in-place")}_t(k)}else if(wt(k))u=Jn("<!---->"),f=u.ownerDocument.importNode(k,!0),f.nodeType===Ve.element&&f.nodeName==="BODY"||f.nodeName==="HTML"?u=f:u.appendChild(f),_t(f);else{if(!Te&&!F&&!R&&k.indexOf("<")===-1)return C&&De?C.createHTML(k):k;if(u=Jn(k),!u)return Te?null:De?Re:""}u&&je&&ie(u.firstChild);const P=es(st?k:u);for(;w=P.nextNode();)ns(w),is(w),w.content instanceof o&&sn(w.content);if(st)return F&&ts(k),k;if(Te){if(F&&ts(u),Le)for(M=Ge.call(u.ownerDocument);u.firstChild;)M.appendChild(u.firstChild);else M=u;return(L.shadowroot||L.shadowrootmode)&&(M=jt.call(i,M,!0)),M}let ee=R?u.outerHTML:u.innerHTML;return R&&O["!doctype"]&&u.ownerDocument&&u.ownerDocument.doctype&&u.ownerDocument.doctype.name&&H(Dr,u.ownerDocument.doctype.name)&&(ee="<!DOCTYPE "+u.ownerDocument.doctype.name+`>
66
+ `+ee),F&&Be([me,ke,be],xe=>{ee=Fe(ee,xe," ")}),C&&De?C.createHTML(ee):ee},e.setConfig=function(){let k=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};tn(k),Z=!0},e.clearConfig=function(){ve=null,Z=!1},e.isValidAttribute=function(k,a,u){ve||tn({});const f=$(k),w=$(a);return ss(f,w,u)},e.addHook=function(k,a){typeof a=="function"&&Ue(W[k],a)},e.removeHook=function(k,a){if(a!==void 0){const u=fr(W[k],a);return u===-1?void 0:gr(W[k],u,1)[0]}return On(W[k])},e.removeHooks=function(k){W[k]=[]},e.removeAllHooks=function(){W=Wn()},e}var $r=Gn();const zr={class:"avatar"},Br={class:"content"},Ur={key:0,class:"message-images"},Fr=["src"],Vr=["innerHTML"],Hr={key:0,class:"reasoning-section"},Wr=["innerHTML"],Gr=["innerHTML"],jr={key:2,class:"loading-placeholder"},qr={key:3,class:"loading-placeholder"},Xr={class:"time"},jn=ot(s.defineComponent({__name:"AiChatMessage",props:{message:{}},setup(t){const e=t,n=it(),i=s.ref(!1),r=s.computed({get:()=>n.sending?!0:i.value,set:c=>{i.value=c}});function o(c){return c?$r.sanitize(E.parse(c)):""}const l=s.computed(()=>o(e.message.reasoningContent||"")),p=s.computed(()=>o(e.message.content||"")),h=c=>c?new Date(c).toLocaleTimeString("zh-CN",{hour:"2-digit",minute:"2-digit"}):"";return(c,m)=>{const d=s.resolveComponent("el-icon");return s.openBlock(),s.createElementBlock("div",{class:s.normalizeClass(["message-item",[t.message.role]])},[s.createElementVNode("div",zr,[t.message.role==="assistant"?(s.openBlock(),s.createBlock(d,{key:0,size:20},{default:s.withCtx(()=>[s.createVNode(s.unref(Q.Monitor))]),_:1})):(s.openBlock(),s.createBlock(d,{key:1,size:20},{default:s.withCtx(()=>[s.createVNode(s.unref(Q.User))]),_:1}))]),s.createElementVNode("div",Br,[t.message.role==="user"?(s.openBlock(),s.createElementBlock(s.Fragment,{key:0},[t.message.images&&t.message.images.length>0?(s.openBlock(),s.createElementBlock("div",Ur,[(s.openBlock(!0),s.createElementBlock(s.Fragment,null,s.renderList(t.message.images,(T,S)=>(s.openBlock(),s.createElementBlock("img",{key:S,src:T,class:"message-image",alt:"图片"},null,8,Fr))),128))])):s.createCommentVNode("",!0),t.message.content&&t.message.content!=="[图片]"?(s.openBlock(),s.createElementBlock("div",{key:1,class:"text",innerHTML:p.value},null,8,Vr)):s.createCommentVNode("",!0)],64)):(s.openBlock(),s.createElementBlock(s.Fragment,{key:1},[t.message.reasoningContent?(s.openBlock(),s.createElementBlock("div",Hr,[s.createElementVNode("div",{class:"reasoning-toggle",onClick:m[0]||(m[0]=T=>!s.unref(n).sending&&(r.value=!r.value))},[s.createVNode(d,{size:14},{default:s.withCtx(()=>[(s.openBlock(),s.createBlock(s.resolveDynamicComponent(r.value?s.unref(Q.ArrowDown):s.unref(Q.ArrowRight))))]),_:1}),m[1]||(m[1]=s.createElementVNode("span",null,"AI 思考过程",-1))]),s.withDirectives(s.createElementVNode("div",{class:"reasoning-body",innerHTML:l.value},null,8,Wr),[[s.vShow,r.value]])])):s.createCommentVNode("",!0),t.message.content?(s.openBlock(),s.createElementBlock("div",{key:1,class:"text",innerHTML:p.value},null,8,Gr)):t.message.reasoningContent?(s.openBlock(),s.createElementBlock("div",jr,"正在组织回答...")):(s.openBlock(),s.createElementBlock("div",qr,"正在思考..."))],64)),s.createElementVNode("div",Xr,s.toDisplayString(h(t.message.createTime)),1)])],2)}}}),[["__scopeId","data-v-a07a2732"]]),vr={key:0,class:"width-tooltip"},Zr={class:"panel-container"},Yr={class:"panel-header"},Qr={class:"header-left"},Kr={key:0,class:"token-usage"},Jr={key:1,class:"preset-btns"},ei={class:"header-right"},ti={class:"chat-container"},ni={key:0,class:"session-list"},si={class:"session-header"},ri=["onClick"],ii={class:"session-title"},oi={class:"session-meta"},ai={key:0,class:"session-load-more"},li={key:1,class:"session-load-more session-no-more"},ci={class:"messages-area"},pi={class:"messages-content"},ui={key:0,class:"typing-indicator"},hi={key:0,class:"pending-images"},di={class:"image-index"},fi=["src"],gi={class:"input-area"},mi=4,ki=.25,bi=.38,Gt=ot(s.defineComponent({__name:"AiChatDrawer",setup(t){const e=it();let n=new AbortController;const i=s.computed({get:()=>e.visible,set:g=>e.setVisible(g)}),r=s.computed(()=>e.panelWidth),o=s.computed(()=>e.isFullScreen),l=s.ref(!1),p=()=>{l.value=window.innerWidth<768},h=s.computed(()=>l.value?{width:"100%"}:o.value?{width:"100%"}:{width:`${r.value}px`}),c=s.computed(()=>{const g=e.tokenUsage;return g?g.limitTokens===0?`${g.usedTokens} tokens`:`${g.usedTokens}/${g.limitTokens}`:""}),m=s.computed(()=>{const g=e.tokenUsage;return g?g.limitTokens===0?`今日已使用 ${g.usedTokens} tokens(不限制)`:g.limitReached?"今日配额已用完,请明天再试":`今日已使用 ${g.usedTokens}/${g.limitTokens} tokens,剩余 ${g.remainingTokens}`:""}),d=s.ref(""),T=s.ref(!1),S=s.ref([]),y=s.ref(),z=s.ref(),pe=s.ref(window.innerWidth),Ee=()=>{pe.value=window.innerWidth,p()},Ae=s.computed(()=>l.value?window.innerWidth:Math.max(320,Math.round(pe.value*ki))),He=s.computed(()=>l.value?window.innerWidth:Math.max(420,Math.round(pe.value*bi))),ae=s.computed(()=>r.value/pe.value),ge=s.computed(()=>!o.value&&ae.value<=.3),C=s.computed(()=>!o.value&&ae.value>.3&&ae.value<=.45),Re=s.computed(()=>`窄 (${Ae.value}px)`),We=s.computed(()=>`宽 (${He.value}px)`),re=s.ref(!1),Ce=s.ref(0),Ge=s.ref(0);let j=null;const jt=g=>{re.value=!0,Ce.value=g.clientX,Ge.value=r.value,document.addEventListener("mousemove",me),document.addEventListener("mouseup",be),document.body.style.cursor="ew-resize",document.body.style.userSelect="none"},W=g=>{g.touches.length===1&&(re.value=!0,Ce.value=g.touches[0].clientX,Ge.value=r.value,document.addEventListener("touchmove",ke),document.addEventListener("touchend",tt))},me=g=>{re.value&&(j&&cancelAnimationFrame(j),j=requestAnimationFrame(()=>{const b=Ge.value+(Ce.value-g.clientX),A=Math.max(320,Math.min(window.innerWidth/2,b));e.setPanelWidth(A)}))},ke=g=>{!re.value||g.touches.length!==1||(j&&cancelAnimationFrame(j),j=requestAnimationFrame(()=>{const b=Ge.value+(Ce.value-g.touches[0].clientX),A=Math.max(320,Math.min(window.innerWidth/2,b));e.setPanelWidth(A)}))},be=()=>{re.value=!1,j&&(cancelAnimationFrame(j),j=null),document.removeEventListener("mousemove",me),document.removeEventListener("mouseup",be),document.body.style.cursor="",document.body.style.userSelect=""},tt=()=>{re.value=!1,j&&(cancelAnimationFrame(j),j=null),document.removeEventListener("touchmove",ke),document.removeEventListener("touchend",tt)},gt=g=>e.setPanelWidth(g),qt=()=>e.toggleFullScreen(),nt=()=>e.setVisible(!1),Xt=async g=>{const b=g.clipboardData?.items;if(b)for(let A=0;A<b.length;A++){const B=b[A];if(B.type.startsWith("image/")){if(g.preventDefault(),S.value.length>=mi){de.ElMessage.warning("最多只能上传4张图片");return}const U=B.getAsFile();if(U){const F=await mt(U);S.value.push(F)}}}},mt=g=>new Promise(b=>{const A=new FileReader;A.onload=B=>b(B.target.result),A.readAsDataURL(g)}),O=g=>g?.length>30?g.substring(0,30)+"...":g,kt=({scrollTop:g})=>{const b=z.value?.wrapRef;b&&g+b.clientHeight>=b.scrollHeight-150&&e.loadMoreSessions()},L=()=>{y.value?.wrapRef&&(y.value.wrapRef.scrollTop=y.value.wrapRef.scrollHeight)};s.watch(()=>e.messages.length,()=>s.nextTick(L)),s.watch(i,g=>{g&&(e.currentSessionId||e.loadSessions(),e.loadTokenUsage())});const bt=async()=>{const g=await e.createSession();g?(e.setCurrentSession(g,!1),T.value=!1):de.ElMessage.error("创建对话失败,请检查网络或重新登录")},N=g=>{e.setCurrentSession(g.id),T.value=!1},Ne=async g=>{await e.deleteSession(g)},Ie=async()=>{const g=d.value.trim(),b=[...S.value];if(!g&&b.length===0||e.sending)return;d.value="",S.value=[],e.setSending(!0),n=new AbortController;let A=e.currentSessionId;if(!A){if(A=await e.createSession(),!A){e.setSending(!1),d.value=g,S.value=b,de.ElMessage.error("创建对话失败,请检查网络或重新登录");return}e.setCurrentSession(A,!1)}const B={id:Date.now(),sessionId:A,role:"user",content:g||"[图片]",images:b.length>0?b:void 0,createTime:new Date().toISOString()};e.addMessage(B);const U={id:Date.now()+1,sessionId:A,role:"assistant",content:"",createTime:new Date().toISOString()};e.addMessage(U);try{const J=(await gs({sessionId:A,message:g||"[图片]",images:b.length>0?b:void 0,signal:n.signal})).body?.getReader(),R=new TextDecoder;if(J){let Z="";for(;;){const{done:je,value:Te}=await J.read();if(je)break;Z+=R.decode(Te,{stream:!0});const Le=Z.split(`
67
+ `);Z=Le.pop()??"";let De="";for(const Oe of Le)if(Oe.startsWith("event:"))De=Oe.slice(6).trim();else if(Oe.startsWith("data:"))try{const q=JSON.parse(Oe.slice(5).trim());if(De==="error"||q.error){e.updateLastAssistantMessage(q.error||"服务异常,请重试。"),de.ElMessage.error(q.error||"服务异常,请重试");break}q.done||(q.reasoningContent&&(e.updateLastAssistantReasoning(q.reasoningContent),s.nextTick(L)),q.content&&(e.updateLastAssistantMessage(q.content),s.nextTick(L))),q.sessionId&&!e.currentSessionId&&e.setCurrentSession(q.sessionId),q.done&&q.usage&&e.updateTokenUsage(q.usage.totalTokens)}catch{}}}}catch(F){if(F.name==="AbortError")console.log("[@cgs/ai-chat] 请求已取消");else if(F.message?.startsWith("AUTH_EXPIRED:")){const J=F.message.replace("AUTH_EXPIRED:","");console.error("[@cgs/ai-chat] 认证过期",J),e.updateLastAssistantMessage(`认证失败:${J}`),de.ElMessage.error({message:J,duration:5e3,showClose:!0})}else console.error("[@cgs/ai-chat] 发送消息失败",F),e.updateLastAssistantMessage("抱歉,发生了错误,请重试。"),de.ElMessage.error({message:"消息发送失败,请检查网络连接",duration:3e3,showClose:!0})}finally{e.setSending(!1),e.loadSessions()}};return s.onMounted(()=>{window.addEventListener("resize",Ee),p()}),s.onUnmounted(()=>{n.abort(),window.removeEventListener("resize",Ee),document.removeEventListener("mousemove",me),document.removeEventListener("mouseup",be),document.removeEventListener("touchmove",ke),document.removeEventListener("touchend",tt),j&&cancelAnimationFrame(j)}),(g,b)=>{const A=s.resolveComponent("el-tooltip"),B=s.resolveComponent("el-icon"),U=s.resolveComponent("el-button"),F=s.resolveComponent("el-empty"),J=s.resolveComponent("el-input");return s.openBlock(),s.createElementBlock(s.Fragment,null,[s.createVNode(s.Transition,{name:"slide"},{default:s.withCtx(()=>[i.value?(s.openBlock(),s.createElementBlock("div",{key:0,class:s.normalizeClass(["ai-chat-panel",{"full-screen":o.value,"is-mobile":l.value}]),style:s.normalizeStyle(h.value)},[l.value?s.createCommentVNode("",!0):(s.openBlock(),s.createElementBlock("div",{key:0,class:"resize-handle",onMousedown:jt,onTouchstart:s.withModifiers(W,["prevent"])},[b[5]||(b[5]=s.createElementVNode("div",{class:"resize-bar"},null,-1)),s.createVNode(s.Transition,{name:"fade"},{default:s.withCtx(()=>[re.value?(s.openBlock(),s.createElementBlock("div",vr,s.toDisplayString(Math.round(r.value))+"px ",1)):s.createCommentVNode("",!0)]),_:1})],32)),s.createElementVNode("div",Zr,[s.createElementVNode("div",Yr,[s.createElementVNode("div",Qr,[b[6]||(b[6]=s.createElementVNode("span",{class:"title"},"AI助手",-1)),s.unref(e).tokenUsage?(s.openBlock(),s.createElementBlock("div",Kr,[s.createVNode(A,{content:m.value,placement:"bottom"},{default:s.withCtx(()=>[s.createElementVNode("span",{class:s.normalizeClass({"limit-warning":s.unref(e).tokenUsage.limitReached})},s.toDisplayString(c.value),3)]),_:1},8,["content"])])):s.createCommentVNode("",!0),l.value?s.createCommentVNode("",!0):(s.openBlock(),s.createElementBlock("div",Jr,[s.createVNode(A,{content:Re.value,placement:"bottom"},{default:s.withCtx(()=>[s.createVNode(U,{size:"small",type:ge.value?"primary":"default",link:"",onClick:b[0]||(b[0]=R=>gt(Ae.value))},{default:s.withCtx(()=>[s.createVNode(B,null,{default:s.withCtx(()=>[s.createVNode(s.unref(Q.Grid))]),_:1})]),_:1},8,["type"])]),_:1},8,["content"]),s.createVNode(A,{content:We.value,placement:"bottom"},{default:s.withCtx(()=>[s.createVNode(U,{size:"small",type:C.value?"primary":"default",link:"",onClick:b[1]||(b[1]=R=>gt(He.value))},{default:s.withCtx(()=>[s.createVNode(B,null,{default:s.withCtx(()=>[s.createVNode(s.unref(Q.Menu))]),_:1})]),_:1},8,["type"])]),_:1},8,["content"]),s.createVNode(A,{content:o.value?"退出全屏":"全屏",placement:"bottom"},{default:s.withCtx(()=>[s.createVNode(U,{size:"small",type:o.value?"primary":"default",link:"",onClick:qt},{default:s.withCtx(()=>[s.createVNode(B,null,{default:s.withCtx(()=>[s.createVNode(s.unref(Q.FullScreen))]),_:1})]),_:1},8,["type"])]),_:1},8,["content"])]))]),s.createElementVNode("div",ei,[s.createVNode(U,{type:"primary",link:"",onClick:bt},{default:s.withCtx(()=>[s.createVNode(B,null,{default:s.withCtx(()=>[s.createVNode(s.unref(Q.Plus))]),_:1}),b[7]||(b[7]=s.createTextVNode("新对话 ",-1))]),_:1}),s.createVNode(U,{type:"default",link:"",onClick:nt},{default:s.withCtx(()=>[s.createVNode(B,null,{default:s.withCtx(()=>[s.createVNode(s.unref(Q.Close))]),_:1})]),_:1})])]),s.createElementVNode("div",ti,[T.value?(s.openBlock(),s.createElementBlock("div",ni,[s.createElementVNode("div",si,[b[9]||(b[9]=s.createElementVNode("span",null,"历史对话",-1)),s.createVNode(U,{type:"primary",link:"",size:"small",onClick:b[2]||(b[2]=R=>T.value=!1)},{default:s.withCtx(()=>[...b[8]||(b[8]=[s.createTextVNode("返回聊天",-1)])]),_:1})]),s.createVNode(s.unref(de.ElScrollbar),{ref_key:"sessionScrollbarRef",ref:z,height:(l.value,"calc(100vh - 200px)"),onScroll:kt},{default:s.withCtx(()=>[(s.openBlock(!0),s.createElementBlock(s.Fragment,null,s.renderList(s.unref(e).sessions,R=>(s.openBlock(),s.createElementBlock("div",{key:R.id,class:s.normalizeClass(["session-item",{active:R.id===s.unref(e).currentSessionId}]),onClick:Z=>N(R)},[s.createVNode(A,{content:R.title,placement:"left","show-after":500},{default:s.withCtx(()=>[s.createElementVNode("div",ii,s.toDisplayString(O(R.title)),1)]),_:2},1032,["content"]),s.createElementVNode("div",oi,[s.createElementVNode("span",null,s.toDisplayString(R.messageCount)+"条消息",1),s.createVNode(U,{type:"danger",link:"",size:"small",onClick:s.withModifiers(Z=>Ne(R.id),["stop"])},{default:s.withCtx(()=>[...b[10]||(b[10]=[s.createTextVNode("删除",-1)])]),_:1},8,["onClick"])])],10,ri))),128)),s.unref(e).sessionLoadingMore?(s.openBlock(),s.createElementBlock("div",ai,[s.createVNode(B,{class:"is-loading"},{default:s.withCtx(()=>[s.createVNode(s.unref(Q.Loading))]),_:1}),b[11]||(b[11]=s.createElementVNode("span",null,"加载中...",-1))])):s.unref(e).sessions.length>0&&!s.unref(e).sessionHasMore?(s.openBlock(),s.createElementBlock("div",li," 共 "+s.toDisplayString(s.unref(e).sessionTotal)+" 条对话 ",1)):s.createCommentVNode("",!0),s.unref(e).sessions.length===0?(s.openBlock(),s.createBlock(F,{key:2,description:"暂无历史对话"})):s.createCommentVNode("",!0)]),_:1},8,["height"])])):(s.openBlock(),s.createElementBlock(s.Fragment,{key:1},[s.createElementVNode("div",ci,[s.createVNode(s.unref(de.ElScrollbar),{ref_key:"scrollbarRef",ref:y,height:"100%"},{default:s.withCtx(()=>[s.createElementVNode("div",pi,[(s.openBlock(!0),s.createElementBlock(s.Fragment,null,s.renderList(s.unref(e).messages,(R,Z)=>(s.openBlock(),s.createBlock(jn,{key:Z,message:R},null,8,["message"]))),128)),s.unref(e).sending?(s.openBlock(),s.createElementBlock("div",ui,[...b[12]||(b[12]=[s.createElementVNode("span",null,null,-1),s.createElementVNode("span",null,null,-1),s.createElementVNode("span",null,null,-1)])])):s.createCommentVNode("",!0)])]),_:1},512)]),S.value.length>0?(s.openBlock(),s.createElementBlock("div",hi,[(s.openBlock(!0),s.createElementBlock(s.Fragment,null,s.renderList(S.value,(R,Z)=>(s.openBlock(),s.createElementBlock("div",{key:Z,class:"pending-image-wrap"},[s.createElementVNode("div",di,s.toDisplayString(Z+1)+"/"+s.toDisplayString(S.value.length),1),s.createElementVNode("img",{src:R,class:"pending-image",alt:"待发送图片"},null,8,fi),s.createVNode(U,{type:"danger",circle:"",size:"small",class:"remove-img",onClick:je=>S.value.splice(Z,1)},{default:s.withCtx(()=>[s.createVNode(B,null,{default:s.withCtx(()=>[s.createVNode(s.unref(Q.Close))]),_:1})]),_:1},8,["onClick"])]))),128))])):s.createCommentVNode("",!0),s.createElementVNode("div",gi,[s.createVNode(U,{type:"primary",link:"",onClick:b[3]||(b[3]=R=>T.value=!0)},{default:s.withCtx(()=>[s.createVNode(B,null,{default:s.withCtx(()=>[s.createVNode(s.unref(Q.List))]),_:1})]),_:1}),s.createVNode(J,{modelValue:d.value,"onUpdate:modelValue":b[4]||(b[4]=R=>d.value=R),type:"textarea",rows:2,maxlength:"2000","show-word-limit":"",placeholder:"输入消息... (Enter 发送,Shift+Enter 换行,Ctrl+V 粘贴截图)",resize:"none",disabled:s.unref(e).sending||s.unref(e).tokenUsage?.limitReached,onKeydown:s.withKeys(s.withModifiers(Ie,["exact","prevent"]),["enter"]),onPaste:Xt},null,8,["modelValue","disabled","onKeydown"]),s.createVNode(U,{type:"primary",icon:s.unref(Q.Promotion),circle:"",loading:s.unref(e).sending,disabled:!d.value.trim()&&S.value.length===0||s.unref(e).sending||s.unref(e).tokenUsage?.limitReached,onClick:Ie},null,8,["icon","loading","disabled"])]),b[13]||(b[13]=s.createElementVNode("div",{class:"ai-disclaimer"},"内容由AI生成,请仔细甄别",-1))],64))])])],6)):s.createCommentVNode("",!0)]),_:1}),s.createVNode(s.Transition,{name:"fade"},{default:s.withCtx(()=>[i.value?(s.openBlock(),s.createElementBlock("div",{key:0,class:"ai-panel-overlay",onClick:nt})):s.createCommentVNode("",!0)]),_:1})],64)}}}),[["__scopeId","data-v-fde82f0b"]]),Ti={class:"cgs-ai-chat-root"},xi=ot(s.defineComponent({__name:"AiChat",setup(t){return(e,n)=>(s.openBlock(),s.createElementBlock("div",Ti,[s.createVNode(At),s.createVNode(Gt)]))}}),[["__scopeId","data-v-4f2a75e5"]]),wi={install(t,e){e?.baseUrl||console.warn("[@cgs/ai-chat] 警告:未提供 baseUrl,组件可能无法正常工作"),cs(e),t.component("AiChat",xi),t.component("AiChatFloat",At),t.component("AiChatDrawer",Gt)}};Y.AiChatDrawer=Gt,Y.AiChatFloat=At,Y.AiChatMessage=jn,Y.default=wi,Y.useAiStore=it,Object.defineProperties(Y,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})}));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bidding-group/ai-chat",
3
- "version": "1.0.3",
3
+ "version": "1.0.5",
4
4
  "description": "CGS AI Chat — 可独立使用的 Vue 3 AI 聊天插件",
5
5
  "type": "module",
6
6
  "main": "./dist/ai-chat.umd.cjs",
@@ -16,7 +16,9 @@
16
16
  "./style.css": "./dist/ai-chat.css",
17
17
  "./dist/ai-chat.css": "./dist/ai-chat.css"
18
18
  },
19
- "files": ["dist"],
19
+ "files": [
20
+ "dist"
21
+ ],
20
22
  "scripts": {
21
23
  "dev": "vite build --watch",
22
24
  "build": "vue-tsc --noEmit && vite build",
@@ -24,19 +26,24 @@
24
26
  "prepare": "pnpm run build"
25
27
  },
26
28
  "peerDependencies": {
27
- "vue": "^3.5.0",
29
+ "element-plus": "^2.0.0",
28
30
  "pinia": "^2.0.0",
29
- "element-plus": "^2.0.0"
31
+ "vue": "^3.5.0"
30
32
  },
31
33
  "devDependencies": {
34
+ "@element-plus/icons-vue": "^2.3.0",
35
+ "@types/dompurify": "^3.2.0",
36
+ "@vitejs/plugin-vue": "^6.0.0",
37
+ "element-plus": "^2.7.0",
38
+ "pinia": "^2.0.0",
39
+ "sass": "^1.70.0",
32
40
  "typescript": "^5.4.0",
33
41
  "vite": "^7.0.0",
34
- "@vitejs/plugin-vue": "^6.0.0",
35
- "vue-tsc": "^2.0.0",
36
42
  "vue": "^3.5.0",
37
- "pinia": "^2.0.0",
38
- "element-plus": "^2.7.0",
39
- "@element-plus/icons-vue": "^2.3.0",
40
- "sass": "^1.70.0"
43
+ "vue-tsc": "^2.0.0"
44
+ },
45
+ "dependencies": {
46
+ "dompurify": "^3.4.5",
47
+ "marked": "^18.0.4"
41
48
  }
42
49
  }