@smart-cloud/ai-kit-ui 1.1.41 → 1.1.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +5 -5
- package/dist/index.js +3 -3
- package/package.json +1 -1
- package/src/ai-feature/AiFeature.tsx +0 -6
- package/src/doc-search/DocSearch.tsx +3 -1
package/dist/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import{Alert as ln,Button as gt,Collapse as Ar,Divider as vr,Group as Xe,Input a
|
|
|
5
5
|
initial-value: 0deg;
|
|
6
6
|
}
|
|
7
7
|
`,(n.head??n.documentElement).appendChild(i)}function na({stylesheets:n,children:i,rootElementId:d,mode:l="local",overlayRootId:a="ai-kit-overlay-root",setHost:c}){let A=Qa(null),[M,$]=Xn(null),[Q,x]=Xn(null),X=Qn(()=>[...n].join("|"),[n]);$a(()=>{if(!A.current)return;let Y=l==="overlay"?er():A.current.ownerDocument,y;if(l==="overlay"){let O=Y.getElementById(a);O||(O=Y.createElement("div"),O.id=a,O.style.position="fixed",O.style.inset="0",O.style.width="0",O.style.height="0",O.style.zIndex="2147483647",O.style.pointerEvents="none",Y.body.appendChild(O)),y=O}else y=A.current;c(y);let o=y.shadowRoot??y.attachShadow({mode:"open"}),S=o.querySelector(`#${CSS.escape(d)}`);S||(S=Y.createElement("div"),S.id=d,S.style.margin="0",l==="overlay"&&(S.style.pointerEvents="auto"),o.appendChild(S));let ke=()=>S.getAttribute("data-mantine-color-scheme"),ee=()=>S.getAttribute("data-ai-kit-variation"),B=()=>{y.setAttribute("data-ai-kit-variation",ee()||"default"),y.setAttribute("data-mantine-color-scheme",ke()||"auto")};B();let h=new MutationObserver(B);h.observe(S,{attributes:!0,attributeFilter:["data-mantine-color-scheme"]});let b=window.matchMedia?.("(prefers-color-scheme: dark)"),J=()=>B();return b?.addEventListener?.("change",J),nr(Y),tr(Y,S,o,X?X.split("|"):[]),$(o),x(S),()=>{h.disconnect(),b?.removeEventListener?.("change",J)}},[l,a,d,X]);let fe=Qn(()=>Q?_a({key:l==="overlay"?"ai-kit-ov":"ai-kit-local",container:Q}):null,[Q,l]);return ta("div",{ref:A,style:{outline:"none",boxShadow:"none",backgroundColor:"transparent"},children:Q&&M&&fe?Xa(ta(Za,{value:fe,children:i({rootElement:Q,shadowRoot:M})}),Q):null})}import{jsx as jt}from"react/jsx-runtime";var ur=n=>{let i=5381;for(let d=0;d<n.length;d++)i=(i<<5)+i^n.charCodeAt(d);return(i>>>0).toString(36)},aa=n=>n.replace(/<\/?(?:style|script)\b[^>]*>/gi,"").replace(/@import\s+['"]?javascript:[^;]+;?/gi,"").replace(/url\(\s*(['"]?)javascript:[^)]+\)/gi,"").replace(/\bexpression\s*\([^)]*\)/gi,""),ra="ai-kit-style-text";function dt(n,i){let d=l=>{let{store:a,variation:c,showOpenButton:A,colors:M,colorMode:$,primaryColor:Q,primaryShade:x,themeOverrides:X,language:fe,direction:Y}={...l,...i},[y,o]=rn(null),S=nn(()=>tn(a).getLanguage()),ke=nn(()=>tn(a).getDirection()),ee=nn(()=>tn(a).getCustomTranslations()),[B]=rn(new URLSearchParams(window.location.search).get("language")??""),[h]=rn(new URLSearchParams(window.location.search).get("direction")??""),b=Gt(()=>{an.putVocabularies(ee||{});let z=S||B||fe;if(!z||z==="system"){an.setLanguage("");return}return an.setLanguage(z),z},[fe,B,S,ee]),J=Gt(()=>{let z=ke||h||Y;return!z||z==="auto"?b==="ar"||b==="he"?"rtl":"ltr":z},[b,Y,ke,h]),O=Gt(()=>[WpSuite?.constants?.aiKit?.mantineCssHref,WpSuite?.constants?.aiKit?.aiKitUiCssHref],[WpSuite]),te;M&&(te={},Object.keys(M).forEach(z=>{try{te[z]=ar(M[z])}catch{te[z]=rr(M[z])}}));let D=ir({respectReducedMotion:!0,...te&&{colors:te},...Q&&[...Object.keys(ct.colors),...Object.keys(te||{})].includes(Q)&&{primaryColor:Q},...x&&Object.keys(x).length>0&&{primaryShade:{light:x.light??(typeof ct.primaryShade=="object"?ct.primaryShade.light:ct.primaryShade??6),dark:x.dark??(typeof ct.primaryShade=="object"?ct.primaryShade.dark:ct.primaryShade??6)}},components:{Button:{styles:{root:{borderRadius:"inherit"}}},Tooltip:{defaultProps:{withinPortal:!1,zIndex:100002}},Modal:{defaultProps:{withinPortal:!1,zIndex:100002}},Select:{defaultProps:{comboboxProps:{withinPortal:!1,floatingStrategy:"fixed",positionDependencies:[],position:"bottom",middlewares:{flip:!1,shift:{padding:10,boundary:"clippingAncestors"}}}}}}}),V=Gt(()=>X?ur(X):"",[X]);return lr(()=>{if(!y)return;let z=y.shadowRoot.getElementById(ra);if(X)if(z)(z.getAttribute("data-hash")||"")!==V&&(z.textContent=aa(X));else{let G=y.shadowRoot.ownerDocument.createElement("style");G.id=ra,G.setAttribute("data-hash",V),G.textContent=aa(X),y.shadowRoot.appendChild(G)}else z&&z.remove()},[y,X,V]),jt(na,{mode:c==="modal"&&!A?"overlay":"local",variation:c,overlayRootId:"ai-kit-overlay-root",stylesheets:O,setHost:o,rootElementId:c==="modal"&&!A?"ai-kit-portal-root":"ai-kit-inline-root",children:({rootElement:z})=>{z.setAttribute("data-ai-kit-variation",c||"default"),z.setAttribute("dir",J),b&&z.setAttribute("lang",b);let G=$==="auto"?window.matchMedia?.("(prefers-color-scheme: dark)")?.matches?"dark":"light":$;return jt(or,{initialDirection:J,children:jt(sr,{forceColorScheme:G,theme:D,getRootElement:()=>z,children:jt(n,{...l,colorMode:G,language:b,rootElement:z})})})}})};return d.displayName=`withAiKitShell(${n.displayName??n.name??"Component"})`,d}import{jsx as ia}from"react/jsx-runtime";function vt({enabled:n=!0,working:i=!1,variation:d="default",children:l}){return ia("div",{className:"ai-kit-feature-border","data-ai-kit-active":!!(n&&i)?"true":"false","data-ai-kit-variation":d,children:ia("div",{className:"ai-kit-feature-border__content",children:l})})}import{Tooltip as cr}from"@mantine/core";import{useMemo as dr}from"react";import{I18n as xt}from"aws-amplify/utils";import{jsx as Wt}from"react/jsx-runtime";function gr(n){let i=[...n].sort((a,c)=>a.startIndex-c.startIndex),d=[],l=-1;for(let a of i)typeof a.startIndex!="number"||typeof a.endIndex!="number"||a.startIndex<0||a.endIndex<=a.startIndex||a.startIndex<l||(d.push(a),l=a.endIndex);return d}function oa({original:n,corrections:i}){let d=dr(()=>{let l=gr(i||[]),a=[],c=0;for(let A of l){A.startIndex>c&&a.push({kind:"plain",text:n.slice(c,A.startIndex)});let M=n.slice(A.startIndex,A.endIndex);a.push({kind:"corr",original:M,corr:A}),c=A.endIndex}return c<n.length&&a.push({kind:"plain",text:n.slice(c)}),a},[n,i]);return Wt("div",{style:{padding:12,border:"1px solid rgba(0,0,0,0.1)",borderRadius:6,background:"rgba(0,0,0,0.02)",whiteSpace:"pre-wrap",lineHeight:1.5},children:d.map((l,a)=>{if(l.kind==="plain")return Wt("span",{children:l.text},a);let c=(l.corr.replacement??l.corr.correction??"").trim(),A=(l.corr.explanation??"").trim(),M=(l.corr.type??"").trim(),$=[M?xt.get("Type")+": - "+xt.get(M):"",c?xt.get("Replace with")+": "+c:"",A?xt.get("Why")+": "+A:""].filter(Boolean).join(`
|
|
8
|
-
`);return Wt(cr,{label:$||xt.get("Suggested change"),multiline:!0,children:Wt("span",{style:{textDecoration:"underline",textDecorationStyle:"wavy",cursor:"help",padding:"0 1px"},children:l.original})},a)})})}import mr,{defaultSchema as pr}from"rehype-sanitize";import hr from"rehype-stringify";import fr from"remark-gfm";import kr from"remark-parse";import br from"remark-rehype";import{unified as yr}from"unified";var on=async n=>String(await yr().use(kr).use(fr).use(br,{allowDangerousHtml:!1}).use(mr,pr).use(hr).process(n));import{Fragment as Pt,jsx as g,jsxs as ie}from"react/jsx-runtime";t.putVocabularies(lt);var da=Ir(),Or={type:"object",properties:{title:{type:"string",minLength:1,maxLength:60},excerpt:{type:"string",minLength:1,maxLength:155}},required:["title","excerpt"],additionalProperties:!1},Nr={type:"object",properties:{alt:{type:"string",minLength:1,maxLength:125},title:{type:"string",minLength:1,maxLength:80},caption:{type:"string",minLength:1,maxLength:150},description:{type:"string",minLength:1,maxLength:300}},required:["alt","title","caption","description"],additionalProperties:!1};function Hr(n){let i=(n??"").trim();return i&&i.toLowerCase().split("-")[0]||null}async function sn(n,i){let d=await ma({text:n},i);return Hr(d.result?.candidates?.[0]?.detectedLanguage)??"en"}async function Gr(n,i,d){let l=Ct(n||"").trim();if(!l)return{};try{let a=JSON.parse(l);return{alt_text:typeof a.alt=="string"?i&&i!=="en"?(await Fe({text:a.alt,sourceLanguage:"en",targetLanguage:i},d)).result:a.alt:"",title:typeof a.title=="string"?i&&i!=="en"?(await Fe({text:a.title,sourceLanguage:"en",targetLanguage:i},d)).result:a.title:"",caption:typeof a.caption=="string"?i&&i!=="en"?(await Fe({text:a.caption,sourceLanguage:"en",targetLanguage:i},d)).result:a.caption:"",description:typeof a.description=="string"?i&&i!=="en"?(await Fe({text:a.description,sourceLanguage:"en",targetLanguage:i},d)).result:a.description:""}}catch(a){return console.warn("AI Kit: failed to parse JSON metadata output",a),{}}}async function jr(n,i,d){let l=Ct(n||"").trim();if(!l)return{};try{let a=JSON.parse(l);return{title:typeof a.title=="string"?i&&i!=="en"?(await Fe({text:a.title,sourceLanguage:"en",targetLanguage:i},d)).result:a.title:"",excerpt:typeof a.excerpt=="string"?i&&i!=="en"?(await Fe({text:a.excerpt,sourceLanguage:"en",targetLanguage:i},d)).result:a.excerpt:""}}catch(a){return console.warn("AI Kit: failed to parse JSON metadata output",a),{}}}var Wr=n=>{let{allowOverride:i,autoRun:d=!0,editable:l=!0,onDeviceTimeout:a,variation:c=n.variation||"default",title:A,showOpenButton:M=!1,showOpenButtonTitle:$=!0,showOpenButtonIcon:Q=!0,openButtonTitle:x,openButtonIcon:X,showRegenerateOnBackendButton:fe=!0,acceptButtonTitle:Y=n.acceptButtonTitle||"Accept",optionsDisplay:y=n.optionsDisplay||"collapse",mode:o,context:S,modeOverride:ke,colorMode:ee,default:B,onClose:h,onAccept:b,onOptionsChanged:J,language:O,rootElement:te}=n,D={text:i?.text??!0,instructions:i?.instructions??!0,tone:i?.tone??!0,length:i?.length??!0,type:i?.type??!0,outputLanguage:i?.outputLanguage??!0,outputFormat:i?.outputFormat??!0},V=Lt(()=>!!(o==="write"&&D?.text||(o==="write"||o==="rewrite"||o==="generateImageMetadata"||o==="generatePostMetadata")&&D?.instructions||(o==="write"||o==="rewrite")&&D?.tone||(o==="write"||o==="rewrite"||o==="summarize")&&D?.length||o==="summarize"&&D?.type||D?.outputLanguage),[D]),[z,G]=pe(),[se,Le]=pe(!M),[Je,ce]=pe(!1),[it,ve]=pe(!1),[ye,_]=pe(null),[P,W]=pe(null),[we,Ge]=pe(B?.text),[je]=pe(B?.image),[le,Ve]=pe(B?.instructions),[
|
|
8
|
+
`);return Wt(cr,{label:$||xt.get("Suggested change"),multiline:!0,children:Wt("span",{style:{textDecoration:"underline",textDecorationStyle:"wavy",cursor:"help",padding:"0 1px"},children:l.original})},a)})})}import mr,{defaultSchema as pr}from"rehype-sanitize";import hr from"rehype-stringify";import fr from"remark-gfm";import kr from"remark-parse";import br from"remark-rehype";import{unified as yr}from"unified";var on=async n=>String(await yr().use(kr).use(fr).use(br,{allowDangerousHtml:!1}).use(mr,pr).use(hr).process(n));import{Fragment as Pt,jsx as g,jsxs as ie}from"react/jsx-runtime";t.putVocabularies(lt);var da=Ir(),Or={type:"object",properties:{title:{type:"string",minLength:1,maxLength:60},excerpt:{type:"string",minLength:1,maxLength:155}},required:["title","excerpt"],additionalProperties:!1},Nr={type:"object",properties:{alt:{type:"string",minLength:1,maxLength:125},title:{type:"string",minLength:1,maxLength:80},caption:{type:"string",minLength:1,maxLength:150},description:{type:"string",minLength:1,maxLength:300}},required:["alt","title","caption","description"],additionalProperties:!1};function Hr(n){let i=(n??"").trim();return i&&i.toLowerCase().split("-")[0]||null}async function sn(n,i){let d=await ma({text:n},i);return Hr(d.result?.candidates?.[0]?.detectedLanguage)??"en"}async function Gr(n,i,d){let l=Ct(n||"").trim();if(!l)return{};try{let a=JSON.parse(l);return{alt_text:typeof a.alt=="string"?i&&i!=="en"?(await Fe({text:a.alt,sourceLanguage:"en",targetLanguage:i},d)).result:a.alt:"",title:typeof a.title=="string"?i&&i!=="en"?(await Fe({text:a.title,sourceLanguage:"en",targetLanguage:i},d)).result:a.title:"",caption:typeof a.caption=="string"?i&&i!=="en"?(await Fe({text:a.caption,sourceLanguage:"en",targetLanguage:i},d)).result:a.caption:"",description:typeof a.description=="string"?i&&i!=="en"?(await Fe({text:a.description,sourceLanguage:"en",targetLanguage:i},d)).result:a.description:""}}catch(a){return console.warn("AI Kit: failed to parse JSON metadata output",a),{}}}async function jr(n,i,d){let l=Ct(n||"").trim();if(!l)return{};try{let a=JSON.parse(l);return{title:typeof a.title=="string"?i&&i!=="en"?(await Fe({text:a.title,sourceLanguage:"en",targetLanguage:i},d)).result:a.title:"",excerpt:typeof a.excerpt=="string"?i&&i!=="en"?(await Fe({text:a.excerpt,sourceLanguage:"en",targetLanguage:i},d)).result:a.excerpt:""}}catch(a){return console.warn("AI Kit: failed to parse JSON metadata output",a),{}}}var Wr=n=>{let{allowOverride:i,autoRun:d=!0,editable:l=!0,onDeviceTimeout:a,variation:c=n.variation||"default",title:A,showOpenButton:M=!1,showOpenButtonTitle:$=!0,showOpenButtonIcon:Q=!0,openButtonTitle:x,openButtonIcon:X,showRegenerateOnBackendButton:fe=!0,acceptButtonTitle:Y=n.acceptButtonTitle||"Accept",optionsDisplay:y=n.optionsDisplay||"collapse",mode:o,context:S,modeOverride:ke,colorMode:ee,default:B,onClose:h,onAccept:b,onOptionsChanged:J,language:O,rootElement:te}=n,D={text:i?.text??!0,instructions:i?.instructions??!0,tone:i?.tone??!0,length:i?.length??!0,type:i?.type??!0,outputLanguage:i?.outputLanguage??!0,outputFormat:i?.outputFormat??!0},V=Lt(()=>!!(o==="write"&&D?.text||(o==="write"||o==="rewrite"||o==="generateImageMetadata"||o==="generatePostMetadata")&&D?.instructions||(o==="write"||o==="rewrite")&&D?.tone||(o==="write"||o==="rewrite"||o==="summarize")&&D?.length||o==="summarize"&&D?.type||D?.outputLanguage),[D]),[z,G]=pe(),[se,Le]=pe(!M),[Je,ce]=pe(!1),[it,ve]=pe(!1),[ye,_]=pe(null),[P,W]=pe(null),[we,Ge]=pe(B?.text),[je]=pe(B?.image),[le,Ve]=pe(B?.instructions),[Oe,v]=pe(),[R,be]=pe(B?.inputLanguage),[de,Pe]=pe(B?.outputFormat),[T,Te]=pe(B?.outputLanguage||da.settings.defaultOutputLanguage||(o==="rewrite"?"auto":void 0)),[ae,Ne]=pe(B?.length),[Se,_t]=pe(B?.tone),[We,_e]=pe(B?.type),Be=Mr(!1),Re=Lt(()=>{if(O&&t.setLanguage(O||"en"),A)return A;let r;switch(o){default:case"summarize":r="Summarize";break;case"proofread":r="Proofread";break;case"write":r="Write";break;case"rewrite":r="Rewrite";break;case"translate":r="Translate";break;case"generatePostMetadata":r="Generate Post Metadata";break;case"generateImageMetadata":r="Generate Image Metadata";break}return r},[A,o,O]),Dt=nt(r=>{if(!r||r.silent)return null;let m=r.step,K=t.get((r.message??"").trim()),N=typeof r.progress=="number"?r.progress:null,re=N==null?null:Math.round(N*100);switch(m){case"decide":return K||t.get("Checking capabilities...");case"on-device:init":return K||t.get("Initializing on-device AI...");case"on-device:download":return K||(re==null?t.get("Downloading model..."):t.get("Downloading model...")+" "+re+"%");case"on-device:ready":return K||t.get("On-device model ready.");case"on-device:run":return K||t.get("Generating...");case"backend:request":case"backend:waiting":case"backend:response":switch(o){case"translate":return t.get("Translating text");case"rewrite":return t.get("Rewriting text");case"summarize":return t.get("Summarizing");case"proofread":return t.get("Proofreading");default:return t.get("Generating text")}case"done":return K||t.get("Done.");case"error":return K||t.get("Something went wrong.");default:return K||t.get("Working...")}},[O,o]),Ae=Lt(()=>we??B?.getText,[we,B]),ge=Lt(()=>{let r=typeof Ae=="function"?Ae():Ae;switch(o){case"generateImageMetadata":return!!je;case"translate":return!!(r&&r.trim().length>0)&&(!T||Oe!==T);case"summarize":case"proofread":case"rewrite":case"write":case"generatePostMetadata":return!!(r&&r.trim().length>0);default:return!1}},[Ae,o,je,Oe,T,se]),w=At(),ot=Dt(w.statusEvent)??(z?t.get(z):null),Ze=nt(async r=>{if(ge){V&&o!=="proofread"&&ge&&ce(!1),_(null),W(null);try{let m=typeof Ae=="function"?Ae():Ae;switch(o){case"summarize":{let K=await w.run(async({signal:N,onStatus:re})=>{let H=(T&&T!=="auto"?T:null)||ut(),U={text:m.trim(),format:de==="plain-text"?"plain-text":"markdown",length:ae,type:We,outputLanguage:H};return(await xr(U,{signal:N,onStatus:re,context:S,modeOverride:r,onDeviceTimeoutOverride:a})).result});W(K??"");break}case"proofread":{let K=await w.run(async({signal:N,onStatus:re})=>{let H=[];try{G("Detecting input language...");let Ot=(await ma({text:m.trim()},{signal:N,context:S,modeOverride:r,onDeviceTimeoutOverride:a,silent:!0})).result?.candidates?.filter(Ie=>Ie.confidence&&Ie.confidence>.1).map(Ie=>Ie.detectedLanguage);H.push(...Ot)}catch{H.push("en")}let U={text:m.trim(),expectedInputLanguages:H};return(await zr(U,{signal:N,onStatus:re,context:S,modeOverride:r,onDeviceTimeoutOverride:a})).result});W(K??"");break}case"translate":{let K=await w.run(async({signal:N,onStatus:re})=>{let H=R??"auto";H==="auto"&&(G("Detecting input language..."),H=await sn(m.trim(),{signal:N,context:S,modeOverride:r,onDeviceTimeoutOverride:a,silent:!0})),v(H);let U=(T&&T!=="auto"?T:null)||ut();if(U===H)throw console.warn("AI Kit: input and output languages are the same",{inputLang:H,outLang:U}),_(t.get("Input and output languages cannot be the same.")),new Error(t.get("Input and output languages cannot be the same."));let ne={text:m.trim(),sourceLanguage:H,targetLanguage:U};return(await Fe(ne,{signal:N,onStatus:re,context:S,modeOverride:r,onDeviceTimeoutOverride:a})).result});W(K??"");break}case"rewrite":{let K=await w.run(async({signal:N,onStatus:re})=>{let H=(T&&T!=="auto"?T:null)||ut();T==="auto"&&(G("Detecting input language..."),H=await sn(m.trim(),{signal:N,context:S,modeOverride:r,onDeviceTimeoutOverride:a,silent:!0}),Te(H));let U={text:m.trim(),context:le?.trim()||void 0,format:de==="plain-text"?"plain-text":"markdown",tone:Se,length:ae,outputLanguage:H};return(await Cr(U,{signal:N,onStatus:re,context:S,modeOverride:r,onDeviceTimeoutOverride:a})).result});W(K??"");break}case"write":{let K=(T&&T!=="auto"?T:null)||ut(),N={prompt:m.trim(),context:le?.trim()||void 0,format:de==="plain-text"?"plain-text":"markdown",tone:Se,length:ae,outputLanguage:K},re=await w.run(async({signal:H,onStatus:U})=>{let ne={signal:H,context:S,modeOverride:r,onDeviceTimeoutOverride:a,silent:!0};G("Detecting input language...");let He=await sn(m.trim()+`
|
|
9
9
|
`+(le?.trim()||""),ne);return He!==K&&He!=="en"&&(G("Translating instructions..."),N.prompt=(await Fe({text:N.prompt,sourceLanguage:He,targetLanguage:"en"},ne)).result,le&&(N.context=(await Fe({text:le,sourceLanguage:He,targetLanguage:"en"},ne)).result)),(await Pr(N,{signal:H,onStatus:U,context:S,modeOverride:r,onDeviceTimeoutOverride:a})).result});W(re??"");break}case"generatePostMetadata":{let K=[{role:"system",content:`You generate SEO metadata for a WordPress post.
|
|
10
10
|
Return ONLY a minified JSON object with keys: title, excerpt.
|
|
11
11
|
Constraints: title <= 60 chars, excerpt <= 155 chars.
|
|
@@ -14,7 +14,7 @@ Do not add extra keys, no markdown, no explanations.
|
|
|
14
14
|
Follow the response constraint strictly.
|
|
15
15
|
`+(le?`
|
|
16
16
|
Follow these additional instructions: ${le}`:"")},{role:"user",content:`Post content:
|
|
17
|
-
${m.trim()}`}],N=await
|
|
17
|
+
${m.trim()}`}],N=await w.run(async({signal:U,onStatus:ne})=>(await la({messages:K,outputLanguage:"en",responseConstraint:Or},{signal:U,onStatus:ne,context:S,modeOverride:r,onDeviceTimeoutOverride:a})).result);if(!N){W("");return}let re=Ct(N).trim(),H=(T&&T!=="auto"?T:null)||ut();try{G("Translating result...");let U=await w.run(async({signal:ne})=>await jr(re,H,{signal:ne,context:S,modeOverride:r,onDeviceTimeoutOverride:a,silent:!0}));W(U)}catch(U){W(re),console.warn("AI Kit: failed to parse SEO JSON",U)}break}case"generateImageMetadata":{let K=[{role:"system",content:`You write WordPress media metadata for accessibility and SEO.
|
|
18
18
|
Return ONLY a minified JSON object with keys: alt, title, caption, description.
|
|
19
19
|
No extra keys. No markdown. No explanations.
|
|
20
20
|
Follow the response constraint strictly.
|
|
@@ -28,4 +28,4 @@ Guidelines:
|
|
|
28
28
|
- caption: optional context users might see below the image; keep short.
|
|
29
29
|
- description: 1\u20132 short sentences; can include context/usage if known.
|
|
30
30
|
`+(le?`
|
|
31
|
-
Follow these additional instructions: ${le}`:"")},{role:"user",content:"What can you see on this image according to the optional knowledge base and shared context?"}].filter(Boolean),N=await T.run(async({signal:U,onStatus:ne})=>(await la({messages:K,images:[je],outputLanguage:"en",responseConstraint:Nr},{signal:U,onStatus:ne,context:S,modeOverride:r,onDeviceTimeoutOverride:a})).result);if(!N){W("");return}let re=(w&&w!=="auto"?w:null)||ut(),H=Ct(N).trim();try{G("Translating result...");let U=await T.run(async({signal:ne})=>await Gr(H,re,{signal:ne,context:S,modeOverride:r,onDeviceTimeoutOverride:a,silent:!0}));W(U)}catch(U){W(H),console.warn("AI Kit: failed to parse SEO JSON",U)}break}}}catch(m){_(m instanceof Error?m.message:t.get("An unknown error occurred."))}G(void 0)}},[O,T,le,ae,w,we,Se,S,o,We,R,ge,V]),Et=nt(async()=>{await Ze("backend-only")},[Ze]),It=nt(r=>{switch(o){case"proofread":return g(Dr,{className:r});case"translate":return g(Er,{className:r});case"summarize":return g(Ur,{className:r});case"rewrite":case"write":return g(Kr,{className:r});case"generateImageMetadata":case"generatePostMetadata":return g(Br,{className:r});default:return g(Rr,{mode:o,className:r})}},[o]),st=nt(()=>{switch(o){case"proofread":return T.lastSource?t.get("Proofread again"):t.get("Proofread");case"translate":return T.lastSource?t.get("Translate again"):t.get("Translate");case"rewrite":return T.lastSource?t.get("Rewrite again"):t.get("Rewrite");case"summarize":return T.lastSource?t.get("Summarize again"):t.get("Summarize");default:return T.lastSource?t.get("Regenerate"):t.get("Generate")}},[O,T.lastSource,o]),Kt=nt(()=>{switch(o){case"proofread":return t.get("Proofread on Backend");case"translate":return t.get("Translate on Backend");case"rewrite":return t.get("Rewrite on Backend");case"summarize":return t.get("Summarize on Backend");default:return t.get("Regenerate on Backend")}},[O,o]),Me=nt(async()=>{Le(!1),W(null),_(null),Ue.current=!1,T.reset(),M||h()},[h,Ue,T,M]),Bt=nt(async()=>{T.busy&&T.cancel()},[T.busy]);qt(()=>{!se||!d||!ge||T.busy||P||Ue.current||(Ue.current=!0,queueMicrotask(()=>{Ze(ke)}))},[T.busy,Ue,se,ge,d,P,Ze,ke]),qt(()=>{V&&o!=="proofread"&&(ge||(ce(!0),Ue.current=!0))},[V,ge,o]),qt(()=>{let r=!0;return(async()=>{try{await Lr();let m=await $n();r&&ve(m)}catch(m){console.error(m),r&&ve(!1)}})(),()=>{r=!1}},[]);let $e=Lt(()=>{let r=[];if(o==="translate"){let m=Ft.find(K=>K.value===R)?.label;r.push(t.get("Input language")+": "+(m?t.get(m):"auto"))}if(w&&D?.outputLanguage){let m=Ft.find(K=>K.value===w)?.label;r.push(t.get("Output language")+": "+(m?t.get(m):w))}return o==="summarize"&&We&&D?.type&&r.push(t.get("Type")+": "+t.get(We)),(o==="write"||o==="rewrite")&&Se&&D?.tone&&r.push(t.get("Tone")+": "+t.get(Se)),(o==="write"||o==="rewrite"||o==="summarize")&&ae&&D?.length&&r.push(t.get("Length")+": "+t.get(ae)),le?.trim()&&D?.instructions&&r.push(t.get("Instructions")+": \u2713"),r.length?r.join(" \u2022 "):t.get("No overrides")},[O,o,R,w,We,Se,ae,le]),F={label:{fontSize:11,opacity:.85},description:{fontSize:11,opacity:.65,marginTop:2},input:{fontSize:12}},zt=c==="modal"?mt.Root:Xe,Qe=c==="modal"?mt.Content:Xe,Zt=c==="modal"?mt.Body:Xe,$t=y==="collapse"?Ar:at,Ut=y==="horizontal"?Xe:at;return qt(()=>{if(!(c!=="modal"||!se))return document.body.style.overflow="hidden",document.body.onkeydown=r=>{r.key==="Escape"&&(r.preventDefault(),Me())},()=>{document.body.style.overflow="",document.body.onkeydown=null}},[Me,c]),ie(Pt,{children:[M&&g(gt,{leftSection:Q&&(X?g("span",{dangerouslySetInnerHTML:{__html:X}}):It()),className:$?"ai-feature-open-button":"ai-feature-open-button-no-title",variant:"filled",disabled:se,onClick:()=>Le(!0),"data-ai-kit-open-button":!0,children:$&&t.get(x||Re)}),se&&ie(zt,{opened:!0,className:"ai-feature-root",onClose:Me,padding:"md",gap:"md",size:"md",portalProps:c==="modal"?{target:te,reuseTargetNode:!0}:void 0,"data-ai-kit-theme":ee,"data-ai-kit-variation":c,children:[c==="modal"&&g(mt.Overlay,{}),ie(Qe,{w:"100%",style:{left:0},children:[c==="modal"&&ie(mt.Header,{style:{zIndex:1e3},children:[It("ai-feature-title-icon"),g(mt.Title,{children:t.get(Re)}),g(mt.CloseButton,{})]}),g(Zt,{w:"100%",style:{zIndex:1001},children:ie(vt,{enabled:c!=="modal",working:T.busy,variation:c,children:[ie(at,{gap:"sm",mb:"sm",p:"sm",children:[ye&&g(ln,{color:"red",children:t.get(ye)}),V&&o!=="proofread"&&ie(Tr,{withBorder:!0,p:"sm",mt:"md",className:"ai-feature-options","data-options-display":y,children:[ie(Xe,{justify:"space-between",align:"center",className:"ai-feature-options-summary",onClick:y==="collapse"?()=>ce(r=>!r):void 0,children:[y==="collapse"&&ie(at,{gap:0,children:[g(sa,{size:"sm",fw:600,style:{lineHeight:1.1},children:t.get("Options")}),g(sa,{size:"xs",c:"dimmed",style:{marginTop:2},children:$e})]}),y==="collapse"&&g(gt,{variant:"subtle",size:"xs",style:{minWidth:"fit-content"},onClick:r=>{r.stopPropagation(),ce(m=>!m)},children:Je?t.get("Hide"):t.get("Show")})]}),ie($t,{in:Je,children:[y==="collapse"&&g(vr,{my:"sm"}),ie(Ut,{gap:"xs",justify:"space-between",children:[o==="write"&&D?.text&&g(tt,{label:t.get("The topic or subject for the AI to write about."),disabled:y!=="horizontal",position:"top",children:g(et,{size:"xs",className:"ai-feature-option",styles:F,disabled:T.busy,label:t.get("Topic"),description:y!=="horizontal"?t.get("The topic or subject for the AI to write about."):void 0,value:we||"",onChange:r=>{let m=r.target.value;Ge(m),J?.({text:m})}})}),(o==="write"||o==="rewrite"||o==="generateImageMetadata"||o==="generatePostMetadata")&&D?.instructions&&g(tt,{label:t.get("Additional instructions to guide the AI."),disabled:y!=="horizontal",position:"top",children:g(et,{disabled:T.busy,size:"xs",className:"ai-feature-option",styles:F,label:t.get("Instructions"),description:y!=="horizontal"?t.get("Additional instructions to guide the AI."):void 0,value:le||"",onChange:r=>{let m=r.target.value;Ve(m),J?.({instructions:m})}})}),o==="translate"&&g(tt,{label:t.get("The language of the input text."),disabled:y!=="horizontal",position:"top",children:g(wt,{disabled:T.busy,size:"xs",styles:F,className:"ai-feature-option",label:t.get("Input language"),description:y!=="horizontal"?t.get("The language of the input text."):void 0,data:[{value:"auto",label:t.get("Auto-detect")},...Ft.map(r=>({value:r.value,label:t.get(r.label)})).sort((r,m)=>r.label.localeCompare(m.label))],value:R||"auto",onChange:r=>{let m=r;be(m),v(void 0),J?.({inputLanguage:m})}})}),D?.outputLanguage&&g(tt,{label:t.get("The language AI-Kit should use for generated text by default (when applicable)."),disabled:y!=="horizontal",position:"top",children:g(wt,{disabled:T.busy,size:"xs",styles:F,className:"ai-feature-option",label:t.get("Output language"),description:y!=="horizontal"?t.get("The language AI-Kit should use for generated text by default (when applicable)."):void 0,data:[...[o==="rewrite"?{value:"auto",label:t.get("Auto-detect")}:void 0].filter(Boolean),...Ft.map(r=>({value:r.value,label:t.get(r.label)})).sort((r,m)=>r.label.localeCompare(m.label))],value:w||da.settings.defaultOutputLanguage||(o==="rewrite"?"auto":""),onChange:r=>{let m=r;Te(m),v(void 0),J?.({outputLanguage:m})}})}),o==="summarize"&&D?.type&&g(tt,{label:t.get("The summary style to generate."),disabled:y!=="horizontal",position:"top",children:g(wt,{disabled:T.busy,size:"xs",className:"ai-feature-option",styles:F,label:t.get("Type"),description:y!=="horizontal"?t.get("The summary style to generate."):void 0,data:[{value:"headline",label:t.get("Headline")},{value:"key-points",label:t.get("Key Points")},{value:"teaser",label:t.get("Teaser")},{value:"tldr",label:t.get("TL;DR")}],value:We||"key-points",onChange:r=>{let m=r;_e(m),J?.({type:m})}})}),(o==="write"||o==="rewrite")&&D?.tone&&g(tt,{label:t.get("The tone or style for the AI to use."),disabled:y!=="horizontal",position:"top",children:g(wt,{disabled:T.busy,size:"xs",className:"ai-feature-option",styles:F,label:t.get("Tone"),description:y!=="horizontal"?t.get("The tone or style for the AI to use."):void 0,data:o==="write"?[{value:"neutral",label:t.get("Neutral")},{value:"formal",label:t.get("Formal")},{value:"casual",label:t.get("Casual")}]:[{value:"as-is",label:t.get("As-Is")},{value:"more-formal",label:t.get("More formal")},{value:"more-casual",label:t.get("More casual")}],value:Se||(o==="write"?"neutral":"as-is"),onChange:r=>{let m=r;_t(m),J?.({tone:m})}})}),(o==="write"||o==="rewrite"||o==="summarize")&&D?.length&&g(tt,{label:t.get("The target output length."),disabled:y!=="horizontal",position:"top",children:g(wt,{disabled:T.busy,size:"xs",className:"ai-feature-option",styles:F,label:t.get("Length"),description:y!=="horizontal"?t.get("The target output length."):void 0,data:o==="write"||o==="summarize"?[{value:"short",label:t.get("Short")},{value:"medium",label:t.get("Medium")},{value:"long",label:t.get("Long")}]:[{value:"as-is",label:t.get("As-Is")},{value:"shorter",label:t.get("Shorter")},{value:"longer",label:t.get("Longer")}],value:ae||(o==="rewrite"?"as-is":"short"),onChange:r=>{let m=r;Ne(m),J?.({length:m})}})}),o==="summarize"||o==="write"||o==="rewrite"&&D?.outputFormat&&g(tt,{label:t.get("The format for the generated output."),disabled:y!=="horizontal",position:"top",children:g(wt,{disabled:T.busy,size:"xs",className:"ai-feature-option",styles:F,label:t.get("Output format"),description:y!=="horizontal"?t.get("The format for the generated output."):void 0,data:[{value:"plain-text",label:t.get("Plain Text")},{value:"markdown",label:t.get("Markdown")},{value:"html",label:t.get("HTML")}],value:de||"markdown",onChange:r=>{let m=r;Pe(m),J?.({outputFormat:m})}})})]})]})]}),T.busy&&ot&&g(vt,{enabled:c==="modal",working:!0,variation:c,children:ie(Xe,{justify:"center",align:"center",gap:"sm",m:"sm",pr:"lg",children:[g(wr,{size:"sm"}),g(un.Label,{className:"ai-feature-status-text",children:ot})]})}),P&&ie(at,{mt:"md",children:[o==="proofread"&&(P.corrections.length===0?g(ln,{color:"green",children:t.get("No issues found. Your text looks great!")}):ie(Pt,{children:[g("p",{style:{marginTop:0,opacity:.85},children:t.get("Hover highlights to see explanations.")}),g(oa,{original:we,corrections:P.corrections}),P.correctedInput?ie(Pt,{children:[g("h4",{style:{marginTop:16,marginBottom:8},children:t.get("Corrected")}),g(Xe,{c:"pre",className:"ai-feature-generated-content",children:P.correctedInput})]}):null]})),o==="generateImageMetadata"&&ie(Pt,{children:[g(et,{readOnly:!l,label:t.get("Alt Text"),description:t.get("The alt text for the image."),value:P.alt_text||"",onChange:r=>W({...P,alt_text:r.target.value})}),g(et,{readOnly:!l,label:t.get("Title"),description:t.get("The title for the image."),value:P.title||"",onChange:r=>W({...P,title:r.target.value})}),g(et,{readOnly:!l,label:t.get("Caption"),description:t.get("The caption for the image."),value:P.caption||"",onChange:r=>W({...P,caption:r.target.value})}),g(et,{readOnly:!l,label:t.get("Description"),description:t.get("The description for the image."),value:P.description||"",onChange:r=>W({...P,description:r.target.value})})]}),o==="generatePostMetadata"&&ie(Pt,{children:[g(et,{readOnly:!l,label:t.get("Title"),description:t.get("The title for the post."),value:P.title||"",onChange:r=>W({...P,title:r.target.value})}),g(et,{readOnly:!l,label:t.get("Excerpt"),description:t.get("The excerpt for the post."),value:P.excerpt||"",onChange:r=>W({...P,excerpt:r.target.value})})]}),o!=="proofread"&&o!=="generateImageMetadata"&&o!=="generatePostMetadata"&&typeof P=="string"&&g(ga,{value:P,editable:!!l,onChange:r=>{W(r)}})]}),P===""&&g(ga,{value:P,editable:!1})]}),ie(Xe,{className:"ai-kit-actions",gap:"sm",mb:"sm",p:"sm",children:[T.busy&&g(gt,{variant:"outline",size:"sm",onClick:Bt,"data-ai-kit-cancel-button":!0,children:t.get("Cancel")}),!T.busy&&g(gt,{variant:"filled",size:"sm",disabled:!ge,onClick:()=>Ze(),"data-ai-kit-generate-button":!0,children:st()}),!T.busy&&T.lastSource==="on-device"&&it&&fe&&g(gt,{variant:"filled",size:"sm",disabled:!ge,onClick:Et,"data-ai-kit-regenerate-on-backend-button":!0,children:Kt()}),!T.busy&&b&&g(gt,{variant:"outline",size:"sm",disabled:!P||o==="proofread"&&P.corrections.length===0,onClick:async()=>{b(de==="html"?await on(P):P),Me()},"data-ai-kit-accept-button":!0,children:t.get(Y)}),g(gt,{variant:"default",size:"sm",onClick:Me,"data-ai-kit-close-button":!0,children:t.get("Close")})]}),g(Ht,{variation:c})]})})]})]})]})};function ga(n){let{value:i,editable:d,onChange:l}=n;return d?ie(at,{p:0,gap:"sm",children:[g(un.Label,{children:t.get("Generated content")}),g(Sr,{value:i,onChange:a=>l?.(a.currentTarget.value),autosize:!0,minRows:2,maxRows:12,p:0,className:"ai-feature-generated-content ai-feature-editor"}),g(un.Label,{children:t.get("Preview")}),g(at,{className:"ai-feature-generated-content ai-feature-preview",children:g(ua,{remarkPlugins:[ca],children:i})})]}):g(at,{className:"ai-feature-generated-content",children:i?g(ua,{remarkPlugins:[ca],children:i}):g(ln,{color:"yellow",children:t.get("No content generated.")})})}var Fr=dt(Wr);import{ActionIcon as fa,Anchor as Jr,Button as qe,Group as he,Input as Vr,List as ka,Modal as pt,Stack as ht,Text as Ce,Textarea as _r}from"@mantine/core";import{IconMaximize as Zr,IconMessage as $r,IconMinimize as Qr,IconPaperclip as Xr,IconPencil as ei,IconPlayerStop as ti,IconSend as ni,IconTrash as ai}from"@tabler/icons-react";import{getStoreSelect as ri,sendChatMessage as ii,sendFeedbackMessage as oi}from"@smart-cloud/ai-kit-core";import{useSelect as si}from"@wordpress/data";import{I18n as k}from"aws-amplify/utils";import{useCallback as j,useEffect as ue,useMemo as oe,useRef as Ee,useState as me}from"react";import li from"react-markdown";import ui from"remark-gfm";var qr="ai-kit-chatbot-attachments",rt="attachments";var cn=null;function Yr(){return typeof window<"u"&&typeof window.indexedDB<"u"}async function dn(){if(!Yr())return null;cn||(cn=new Promise(n=>{try{let i=window.indexedDB.open(qr,1);i.onerror=()=>n(null),i.onblocked=()=>n(null),i.onupgradeneeded=()=>{let d=i.result;d.objectStoreNames.contains(rt)||d.createObjectStore(rt,{keyPath:"id"})},i.onsuccess=()=>n(i.result)}catch(i){console.warn("[AiChatbot] IndexedDB is not available",i),n(null)}}));try{return await cn}catch(n){return console.warn("[AiChatbot] Failed to open attachment store",n),null}}async function pa(n,i){let d=await dn();return d?new Promise((l,a)=>{try{let c=d.transaction(rt,n),A=c.objectStore(rt),M=i(A);c.oncomplete=()=>l(M),c.onerror=()=>a(c.error),c.onabort=()=>a(c.error)}catch(c){a(c)}}).catch(l=>(console.warn("[AiChatbot] Attachment store transaction failed",l),null)):null}async function ha(n,i,d){let l={id:n,blob:i,name:d.name,type:d.type,size:d.size,createdAt:Date.now()};return await pa("readwrite",c=>(c.put(l),n))}async function gn(n){let i=await dn();return i?new Promise((d,l)=>{try{let a=i.transaction(rt,"readonly"),c=a.objectStore(rt).get(n);c.onsuccess=()=>{let A=c.result;d(A??null)},c.onerror=()=>l(c.error),a.onabort=()=>l(a.error)}catch(a){l(a)}}).catch(d=>(console.warn("[AiChatbot] Failed to load attachment",d),null)):null}async function Yt(){await pa("readwrite",n=>{n.clear()})}async function mn(n){let i=await dn();i&&await new Promise((d,l)=>{try{let a=i.transaction(rt,"readwrite"),c=a.objectStore(rt),A=c.getAllKeys();A.onsuccess=()=>{let M=A.result;for(let $ of M){let Q=String($);n.has(Q)||c.delete($)}},A.onerror=()=>l(A.error),a.oncomplete=()=>d(),a.onerror=()=>l(a.error),a.onabort=()=>l(a.error)}catch(a){l(a)}}).catch(d=>{console.warn("[AiChatbot] Failed to cleanup attachments",d)})}import{Fragment as bi,jsx as f,jsxs as Z}from"react/jsx-runtime";k.putVocabularies(lt);var Jt=1440*60*1e3,ci=1,di="localstorage",Tt=`ai-kit-chatbot-history-v1:${typeof window<"u"?window.location.hostname:"unknown"}`,fn={modalTitle:"AI Assistant",userLabel:"User",assistantLabel:"Assistant",assistantThinkingLabel:"Assistant is thinking...",askMeLabel:"Ask me",sendLabel:"Send",cancelLabel:"Cancel",resetLabel:"Reset",confirmLabel:"Confirm",clickAgainToConfirmLabel:"Click again to confirm",notSentLabel:"Not sent",editLabel:"Edit",readyLabel:"Ready.",readyEmptyLabel:"I'm ready to assist you.",addLabel:"Add",addImageLabel:"Add image",removeImageLabel:"Remove image",closeChatLabel:"Close chat",maximizeLabel:"Maximize",restoreSizeLabel:"Restore size",referencesLabel:"References",referenceLabel:"Reference",acceptResponseLabel:"Accept response",rejectResponseLabel:"Reject response",placeholder:"Ask anything\u2026",emptyResponseLabel:"Empty response",unexpectedErrorLabel:"Unexpected error"};function St(n){return`${n}-${Math.random().toString(36).slice(2)}-${Date.now().toString(36)}`}var gi=4,mi=5*1024*1024,pi=n=>{let i=(n?.name||"").toString(),d=(n?.code||"").toString(),l=(n?.message||"").toString();return i==="AbortError"||d==="ABORT_ERR"||/abort|aborted|cancel/i.test(l)},hi=(n,i)=>{if(!n)return null;let d=n.step,l=k.get((n.message??"").trim()),a=typeof n.progress=="number"?n.progress:null,c=a==null?null:Math.round(a*100);switch(d){case"decide":return l||k.get("Checking capabilities...");case"on-device:init":return l||k.get("Initializing on-device AI...");case"on-device:download":return c==null?l||k.get("Downloading model..."):l||`${k.get("Downloading model...")} ${c}%`;case"on-device:ready":return l||k.get("On-device model ready...");case"on-device:run":return l||k.get("Running on-device...");case"backend:request":case"backend:waiting":case"backend:response":return k.get(i.assistantThinkingLabel??fn.assistantThinkingLabel);case"done":return l||k.get("Done.");case"error":return l||k.get("An error occurred.");default:return l||null}};function pn(n){if(typeof window>"u")return null;try{return n==="localstorage"?window.localStorage:n==="sessionstorage"?window.sessionStorage:null}catch{return null}}var Vt=n=>{if(typeof window>"u"||typeof URL>"u"||typeof URL.createObjectURL!="function")return null;try{return URL.createObjectURL(n)}catch{return null}},hn=n=>{if(n&&!(typeof window>"u")&&!(typeof URL>"u"||typeof URL.revokeObjectURL!="function"))try{URL.revokeObjectURL(n)}catch{}},ya=n=>{!n||n.length===0||n.forEach(i=>hn(i.objectUrl))},ba=n=>{n.forEach(i=>ya(i.attachments))},fi=n=>{let{rootElement:i,store:d,previewMode:l,title:a,openButtonTitle:c,openButtonIcon:A,showOpenButtonTitle:M=!0,showOpenButtonIcon:$=!0,colorMode:Q,language:x,onClose:X,placeholder:fe,maxImages:Y,maxImageBytes:y,historyStorage:o=di,emptyHistoryAfterDays:S=ci,labels:ke,openButtonIconLayout:ee="top",openButtonPosition:B="bottom-right"}=n,h=oe(()=>({...fn,...ke||{}}),[ke]),b=At(),[J,O]=me(""),[te,D]=me([]),[V,z]=me([]),[G,se]=me(null),[Le,Je]=me(!1),[ce,it]=me(!1),[ve,ye]=me(!1),[_,P]=me(!1),[W,we]=me(!0),[Ge,je]=me(null),[le,Ve]=me(!1),[Be,v]=me(null),[R,be]=me(null),[de,Pe]=me(!1),[w,Te]=me(null),ae=Ee(w);ue(()=>{ae.current=w},[w]);let Ne=Ee(null),Se=Ee(!1),[_t,We]=me(null),_e=Ee(null),Ue=Ee(null),Re=Ee(null),Dt=Ee(null),Ae=j(e=>{e.forEach(u=>hn(u.objectUrl))},[]),ge=j(()=>{Ae(st.current),D([]),_e.current&&(_e.current.value="")},[Ae]),[T,ot]=me(null),Ze=Ee(J),Et=Ee(V),It=Ee(T),st=Ee(te);ue(()=>{Ze.current=J},[J]),ue(()=>{st.current=te},[te]),ue(()=>{Et.current=V},[V]),ue(()=>{It.current=T},[T]),ue(()=>{x&&k.setLanguage(x||"en")},[x]);let Kt=si(()=>ri(d).isShowChatbotPreview()),Me=oe(()=>Math.max(0,Y??gi),[Y]),Bt=oe(()=>Math.max(0,y??mi),[y]),$e=V.length>0,F=oe(()=>b.busy&&w==="chat",[b.busy,w]),zt=oe(()=>F?!1:J.trim().length>0,[J,F]),Qe=oe(()=>{let e=c||h.askMeLabel;return k.get(e)},[c,h.askMeLabel,x]),Zt=oe(()=>{let e=a||h.modalTitle;return k.get(e)},[a,h.modalTitle,x]),$t=oe(()=>{let e=fe||h.placeholder;return k.get(e)},[fe,h.placeholder,x]),Ut=oe(()=>{let e="ai-docs-ask",u=`ai-open-btn--${B}`;return`${e} ${u}`},[B]),r=j(()=>{let e=Dt.current;if(e)try{let u=window.innerHeight||document.documentElement.clientHeight,p=360,s=1e3,C=Math.floor(u*.8),I=Math.max(p,Math.min(C,s));e.style.height=`${I}px`}catch{}},[]),m=j(()=>{let e=R;e&&window.setTimeout(()=>{try{e.scrollTop=e.scrollHeight}catch{}},50)},[R]),K=j(()=>{P(!1),ce&&it(!1),ye(!1),X?.()},[ce,X]);ue(()=>{if(_)return r(),window.addEventListener("resize",r),()=>window.removeEventListener("resize",r)},[_,r]),ue(()=>{if(!(!_||!ce))return document.body.style.overflow="hidden",()=>{document.body.style.overflow=""}},[_,ce,K]);let N=oe(()=>te.map(e=>({id:e.id,url:e.objectUrl,title:e.file.name})),[te]);ue(()=>{$e||we(!0)},[$e]),ue(()=>()=>{Ae(st.current)},[Ae]),ue(()=>{let e=R;if(!e)return;let u=()=>{let p=e.scrollHeight-(e.scrollTop+e.clientHeight);we(p<20)};return e.addEventListener("scroll",u),()=>{e.removeEventListener("scroll",u)}},[_,R]),ue(()=>{if(!W)return;let e=R;e&&e.scrollHeight>e.clientHeight&&(e.scrollTop=e.scrollHeight)},[V,b.busy,W,R]),ue(()=>{_||je(null)},[_]);let re=oe(()=>b.busy?hi(b.statusEvent,h)||k.get("Working\u2026"):null,[b.busy,b.statusEvent,x,h]),H=oe(()=>{for(let e=V.length-1;e>=0;e--){let u=V[e];if(u.role==="user"&&u.clientStatus==="canceled")return u.id}return null},[V]),U=j(e=>{z(u=>{let p=[...u].map((I,L)=>({m:I,i:L})).reverse().find(I=>I.m.role==="user"&&I.m.clientStatus==="pending")?.i;if(p==null)return u;let s=u.slice(),C=s[p];return s[p]={...C,clientStatus:e??void 0},s})},[z]),ne=j(()=>{if(!(!b.busy||ae.current!=="chat")){Se.current=!0;try{b.cancel()}catch{}U("canceled"),Te(null),se(null),m()}},[b,U,m]),He=j(e=>{let u=st.current,p=Array.from(e.target.files||[]),s=Math.max(0,Me-u.length);if(s===0){e.currentTarget.value="";return}let C=[];for(let I of p){if(C.length>=s)break;let L=/image\/(jpeg|png|gif|webp)/i.test(I.type),q=I.size<=Bt,ze=[...u,...C].some(De=>De.file.name===I.name&&De.file.size===I.size&&De.file.lastModified===I.lastModified);if(!L||!q||ze)continue;let Oe=Vt(I);Oe&&C.push({id:St("composer-image"),file:I,objectUrl:Oe})}C.length&&D(I=>[...I,...C]),e.currentTarget.value=""},[Me,Bt]),Ot=j(e=>{D(u=>{if(e<0||e>=u.length)return u;let p=u[e];return p&&hn(p.objectUrl),u.filter((s,C)=>C!==e)})},[]),Ie=Ee(null);ue(()=>{if(G)return Ie.current&&(window.clearTimeout(Ie.current),Ie.current=null),Ie.current=window.setTimeout(()=>{se(null),Ie.current=null},6e3),()=>{Ie.current&&(window.clearTimeout(Ie.current),Ie.current=null)}},[G]);let bn=j(async e=>{if(!e.length)return[];let u=o!=="nostorage";return(await Promise.all(e.map(async s=>{let C=St("attachment"),I;if(u)try{I=await ha(C,s.file,{name:s.file.name,type:s.file.type,size:s.file.size})??void 0}catch(q){console.warn("[AiChatbot] Failed to persist attachment",q)}let L=Vt(s.file);return{id:C,name:s.file.name,type:s.file.type||"application/octet-stream",size:s.file.size,blobId:I,objectUrl:L??void 0,blob:s.file}}))).filter(Boolean)},[o]),yn=j(async e=>{let u=[];for(let p of e){let s;if(p.attachments&&p.attachments.length>0){s=[];for(let C of p.attachments){let I;if(C.blobId)try{I=(await gn(C.blobId))?.blob??void 0}catch(q){console.warn("[AiChatbot] Failed to hydrate attachment",q)}if(!I)continue;let L=I?Vt(I):null;s.push({...C,objectUrl:L??void 0,blob:I??void 0})}}u.push({...p,attachments:s})}return u},[]),An=j(async e=>{if(!e||e.length===0){ge();return}let u=[];for(let p of e){let s=p.blob;if(!s&&p.blobId)try{s=(await gn(p.blobId))?.blob??void 0}catch(L){console.warn("[AiChatbot] Failed to reload attachment",L)}if(!s)continue;let C=s instanceof File?s:new File([s],p.name||"attachment",{type:p.type||s.type||"application/octet-stream"}),I=Vt(C);if(I&&(u.push({id:St("composer-image"),file:C,objectUrl:I}),u.length>=Me))break}if(u.length===0){ge();return}D(p=>(Ae(p),u)),_e.current&&(_e.current.value="")},[ge,Ae,Me]),Qt=j((e,u)=>{e&&je({url:e,title:u})},[]),Ia=j(()=>{je(null)},[]),vn=j(()=>{ba(Et.current),ge(),z([]),se(null),Re.current=null,ot(null),we(!0),Je(!1);let e=pn(o);if(e)try{e.removeItem(Tt)}catch{}Yt()},[ge,o]),za=j(()=>{Je(!0)},[]),Ca=j(()=>{b.busy&&ae.current==="chat"&&ne(),vn()},[b.busy,ne,vn]),wn=j(()=>{Je(!1)},[]),Tn=j(async(e,u)=>{if(!b.busy)try{let p=Re.current&&Date.now()-Re.current.storedAt<S*Jt?Re.current.id:void 0;if(!p)return;Te("feedback"),se(null),await b.run(async({signal:s,onStatus:C})=>(await oi({sessionId:p,feedbackMessageId:e,feedbackType:u},{signal:s,onStatus:C}),null)),se(null)}catch(p){let s=p?.message?.trim()||k.get("An error occurred.");se(s),console.error("Failed to send feedback",p)}finally{Te(p=>p==="feedback"?null:p)}},[b,x]),Sn=j((e,u)=>{z(p=>p.map(s=>s.id!==e||s.role!=="assistant"?s:s.feedback===u?{...s,feedback:void 0}:{...s,feedback:u})),Tn(e,u)},[Tn]),Nt=j(async()=>{let e=Ze.current.trim();if(!e||b.busy)return;Se.current=!1,se(null),Te("chat");let u=[...st.current],p=await bn(u),s=St("user"),C=Date.now(),I={id:s,role:"user",content:e,createdAt:C,clientStatus:"pending",attachments:p.length?p:void 0};O(""),ge(),z(L=>[...L,I]),_||P(!0),m();try{let L=Re.current&&Date.now()-Re.current.storedAt<S*Jt?Re.current.id:void 0,q=await b.run(async({signal:Oe,onStatus:De})=>await ii({sessionId:L,message:e,images:u.map(Ha=>Ha.file)},{signal:Oe,onStatus:De}));if(Se.current){U("canceled");return}if(!q)throw new Error(k.get(b.error??h.emptyResponseLabel));q.sessionId&&(Re.current={id:q.sessionId,storedAt:Date.now()});let ze={id:q.metadata?.messageId||St("assistant"),role:"assistant",content:q.result||"",citations:q.citations,createdAt:Date.now()};z(Oe=>[...Oe.map(bt=>bt.id===s?{...bt,clientStatus:void 0}:bt),ze]),ot(C)}catch(L){if(console.error("Error during ask()",L),Se.current||pi(L)){U("canceled");return}let q=L?.message?.trim()||k.get(h.unexpectedErrorLabel);z(ze=>[...ze.map(De=>De.id===s?{...De,clientStatus:void 0}:De),{id:St("assistant-error"),role:"assistant",content:`\u26A0\uFE0F ${q}`,createdAt:Date.now()}]),ot(C)}finally{Te(L=>L==="chat"?null:L),Se.current=!1,Ue.current&&Ue.current.focus(),m()}},[b,bn,ge,_,m,U,h.emptyResponseLabel,h.unexpectedErrorLabel,x]),xa=j(e=>{e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),zt&&Nt())},[Nt,zt]),La=j(()=>{P(!0)},[]);ue(()=>()=>{Ne.current!=null&&(cancelAnimationFrame(Ne.current),Ne.current=null)},[]);let Pa=j(()=>{it(e=>{let u=!e;return Ne.current!=null&&(cancelAnimationFrame(Ne.current),Ne.current=null),u?(ye(!0),requestAnimationFrame(()=>{Ne.current=requestAnimationFrame(()=>{ye(!1),Ne.current=null})})):ye(!1),u})},[]),Ma=j(e=>{O(e.content),(async()=>(await An(e.attachments),z(u=>u.filter(p=>p.id!==e.id)),ya(e.attachments),queueMicrotask(()=>Ue.current?.focus())))()},[An]),Rn=oe(()=>$?A?f("img",{src:A,className:"ai-open-btn-icon",alt:k.get(h.askMeLabel||Qe)}):f($r,{size:18}):null,[$,A,h,Qe,x]),Da=oe(()=>{let e=Rn,u=M?f(Ce,{inherit:!0,children:Qe}):null;if(!$&&!u)return null;if(!$)return u;if(!M)return e;switch(ee){case"top":return Z(ht,{gap:4,align:"center",children:[e,u]});case"bottom":return Z(ht,{gap:4,align:"center",children:[u,e]});case"right":return Z(he,{gap:6,align:"center",children:[u,e]});default:return Z(he,{gap:6,align:"center",children:[e,u]})}},[Rn,$,M,Qe,ee]),Ea=oe(()=>F,[F]),Ka=oe(()=>!F,[F]),Ba=oe(()=>G||($e?k.get(h.readyLabel):k.get(h.readyEmptyLabel)),[G,$e,h.readyLabel,h.readyEmptyLabel,x]),Ua=oe(()=>F?k.get(h.cancelLabel):k.get(h.sendLabel),[F,h.cancelLabel,h.sendLabel,x]),Oa=oe(()=>F?f(ti,{size:18}):f(ni,{size:18}),[F]),Na=j(()=>{if(F){ne();return}Nt()},[F,ne,Nt]);return ue(()=>{if(!_||!Be||!R)return;let e=()=>{let q=window.getComputedStyle(R).overflowY,ze=q==="auto"||q==="scroll",Oe=Math.ceil(R.scrollHeight),De=Math.floor(R.clientHeight),bt=Oe>De;return ze&&bt},u=!1,p=L=>{if(!e())return;L.preventDefault();let q=R.scrollHeight-R.clientHeight;R.scrollTop=Math.max(0,Math.min(q,R.scrollTop+L.deltaY))},s=()=>{let L=e();Pe(L),L!==u&&(u=L,u?Be.addEventListener("wheel",p,{passive:!1}):Be.removeEventListener("wheel",p))};s();let C=new ResizeObserver(s);C.observe(R);let I=new MutationObserver(s);return I.observe(R,{childList:!0,subtree:!0,characterData:!0}),window.addEventListener("resize",s),()=>{u&&Be.removeEventListener("wheel",p),C.disconnect(),I.disconnect(),window.removeEventListener("resize",s)}},[_,Be,R]),ue(()=>{let e=!1,u=pn(o);if(!u){o==="nostorage"&&Yt(),Ve(!0);return}return(async()=>{try{let p=u.getItem(Tt);if(!p){Ve(!0);return}let s=JSON.parse(p),C=typeof s?.lastUserSentAt=="number"?s.lastUserSentAt:null;if(!C||Date.now()-C>S*Jt){u.removeItem(Tt),await Yt(),Ve(!0);return}let L=(Array.isArray(s.messages)?s.messages:[]).map(ze=>ze?.role==="user"&&ze.clientStatus==="pending"?{...ze,clientStatus:"canceled"}:ze),q=await yn(L);if(e){ba(q);return}z(q),ot(C),s.session&&s.session.id&&(Re.current=s.session)}catch(p){console.warn("[AiChatbot] Failed to load history",p);try{u.removeItem(Tt)}catch{}}finally{e||Ve(!0)}})(),()=>{e=!0}},[o,S,yn]),ue(()=>{if(!le)return;let e=pn(o);if(!e)return;let u=It.current;if(!u)return;if(Date.now()-u>S*Jt){try{e.removeItem(Tt)}catch{}mn(new Set);return}let p=V.map(({attachments:I,...L})=>({...L,attachments:I?.map(({objectUrl:q,blob:ze,...Oe})=>Oe)})),s={version:1,lastUserSentAt:u,session:Re.current,messages:p};try{e.setItem(Tt,JSON.stringify(s))}catch{}let C=new Set;p.forEach(I=>{I.attachments?.forEach(L=>{L.blobId&&C.add(L.blobId)})}),mn(C)},[le,V,T,o,S]),l&&!Kt||!l&&Kt?null:Z(he,{className:Ut,children:[!_&&f(qe,{variant:"filled",className:M?"ai-launcher-button ai-launcher-text":"ai-launcher-button",onClick:La,"aria-label":Qe,title:Qe,"data-ai-kit-open-button":!0,children:Da}),_&&f(pt.Root,{ref:Dt,opened:_,lockScroll:!1,trapFocus:!1,closeOnEscape:!0,onClose:K,className:Ut+" ai-chat-container"+(ce?" maximized":"")+(ce&&ve?" ai-max-enter":""),portalProps:{target:i,reuseTargetNode:!0},"data-ai-kit-theme":Q,"data-ai-kit-variation":"modal",children:Z("div",{className:"ai-chat-container-internal",ref:v,children:[Z(pt.Header,{className:"ai-chat-header-bar",children:[f(pt.Title,{className:"ai-chat-title",children:Zt}),Z(he,{gap:"4px",align:"center",justify:"center",children:[typeof window<"u"&&window.innerWidth>600&&f(fa,{variant:"subtle",c:"var(--ai-kit-chat-icon-color, var(--ai-kit-color-text))",onClick:Pa,title:ce?k.get(h.restoreSizeLabel):k.get(h.maximizeLabel),"aria-label":ce?k.get(h.restoreSizeLabel):k.get(h.maximizeLabel),"data-ai-kit-maximize-button":!0,children:ce?f(Qr,{size:16}):f(Zr,{size:16})}),f(pt.CloseButton,{"aria-label":k.get(h.closeChatLabel)})]})]}),Z(pt.Body,{className:"ai-chat-scroll",ref:be,"data-scrollable":de?"true":"false",children:[V.map(e=>{let u=e.role==="user",p=u&&e.clientStatus==="canceled"&&e.id===H;return f(he,{justify:u?"flex-end":"flex-start",className:"ai-chat-row "+e.role,onMouseEnter:()=>We(e.id),onMouseLeave:()=>We(s=>s===e.id?null:s),children:Z(ht,{gap:4,w:"100%",style:{alignItems:u?"flex-end":"flex-start"},children:[Z(ht,{className:"ai-chat-bubble",children:[Z(Ce,{className:"ai-chat-header",children:[f(Ce,{fw:"bolder",size:"xs",style:{whiteSpace:"nowrap"},children:u?k.get(h.userLabel):k.get(h.assistantLabel)}),"\xA0",f(Ce,{size:"xs",style:{whiteSpace:"nowrap"},children:new Date(e.createdAt).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})})]}),e.role==="assistant"?f(li,{remarkPlugins:[ui],children:e.content}):f(Ce,{size:"sm",miw:"100px",children:e.content})]}),e.attachments&&e.attachments.length>0&&f(he,{className:"ai-thumbs ai-message-thumbs",gap:"xs",children:e.attachments.map(s=>f("button",{type:"button",className:"thumb",style:{backgroundImage:s.objectUrl?`url(${s.objectUrl})`:void 0,backgroundSize:"cover",backgroundPosition:"center",backgroundRepeat:"no-repeat"},onClick:()=>Qt(s.objectUrl,s.name),disabled:!s.objectUrl,title:s.name||k.get("View image"),"aria-label":s.name||k.get("View image"),children:!s.objectUrl&&f(Ce,{size:"xs",c:"dimmed",children:k.get("Loading image...")})},s.id))}),p&&Z(he,{justify:"flex-end",gap:"xs",children:[f(Ce,{size:"xs",c:"dimmed",children:f("em",{children:k.get(h.notSentLabel)})}),_t===e.id&&f(fa,{size:"sm",variant:"subtle",onClick:()=>Ma(e),title:k.get(h.editLabel),"aria-label":k.get(h.editLabel),"data-ai-kit-edit-button":!0,children:f(ei,{size:14})})]}),e.citations&&e.citations.length>0&&Z(ht,{className:"ai-citations",children:[f(Ce,{fw:"bold",size:"sm",mb:"xs",children:k.get(h.referencesLabel)}),f(ka,{spacing:"xs",size:"sm",children:e.citations.map((s,C)=>{let I=s.sourceUrl||s.url,L=s.title||I||`${k.get(h.referenceLabel)} #${C+1}`;return Z(ka.Item,{children:[I?f(Jr,{href:I,target:"_blank",rel:"noreferrer",children:L}):f(Ce,{children:L}),s.snippet?f(Ce,{size:"xs",c:"dimmed",mt:4,children:s.snippet}):null]},C)})})]}),e.role==="assistant"&&Z(he,{className:"ai-feedback",gap:"xs",children:[f(qe,{className:e.feedback==="accepted"?"active":void 0,onClick:()=>Sn(e.id,"accepted"),"aria-label":k.get(h.acceptResponseLabel),disabled:b.busy,"data-ai-kit-feedback-accept-button":!0,children:"\u{1F44D}"}),f(qe,{type:"button",className:e.feedback==="rejected"?"active":void 0,onClick:()=>Sn(e.id,"rejected"),"aria-label":k.get(h.rejectResponseLabel),disabled:b.busy,"data-ai-kit-feedback-reject-button":!0,children:"\u{1F44E}"})]})]})},e.id)}),Ea&&f(he,{justify:"flex-start",className:"ai-chat-row assistant status",children:Z(ht,{className:"ai-chat-bubble typing",children:[re?f(Ce,{size:"sm",c:"dimmed",children:f("em",{children:re})}):null,Z("div",{className:"typing-indicator",children:[f("span",{}),f("span",{}),f("span",{})]})]})})]}),Ka&&f(he,{className:"ai-status-line",children:f(Ce,{className:"ai-status-text",children:f("em",{children:Ba})})}),Z(ht,{className:"ai-box ai-box-open",children:[Z(pt,{opened:Le,onClose:wn,centered:!0,title:k.get("Reset conversation"),style:{position:"fixed"},left:0,children:[f(Ce,{size:"sm",children:k.get("Are you sure you want to reset the conversation?")}),Z(he,{justify:"flex-end",mt:"md",children:[f(qe,{variant:"default",onClick:wn,"data-ai-kit-no-button":!0,children:k.get("No")}),f(qe,{color:"var(--ai-kit-color-danger, red)",onClick:Ca,disabled:!$e&&!F,"data-ai-kit-yes-button":!0,children:k.get("Yes")})]})]}),f(he,{children:f(_r,{className:"ai-message",ref:Ue,placeholder:$t,value:J,onChange:e=>{O(e.target.value)},onKeyDown:xa,rows:3})}),Z(he,{className:"ai-actions",justify:"space-between",w:"100%",children:[f(he,{justify:"flex-start",children:f(qe,{variant:"light",leftSection:f(ai,{size:18}),onClick:za,disabled:!$e&&!F,"data-ai-kit-reset-button":!0,children:k.get(h.resetLabel)})}),Z(he,{justify:"flex-end",children:[Me>0&&Z(bi,{children:[f(qe,{variant:"outline",leftSection:f(Xr,{size:18}),onClick:()=>_e.current?.click(),disabled:te.length>=Me||F,title:k.get(h.addImageLabel),"data-ai-kit-add-image-button":!0,children:k.get(h.addLabel)}),f(Vr,{ref:_e,type:"file",accept:"image/png,image/jpeg,image/gif,image/webp",style:{display:"none"},multiple:!0,onChange:He})]}),f(qe,{leftSection:Oa,variant:"filled",onClick:Na,disabled:!F&&!zt,"data-ai-kit-send-button":!0,children:Ua})]})]}),N.length>0&&f(he,{className:"ai-thumbs",mt:"xs",gap:"xs",children:N.map(({url:e,title:u},p)=>f("div",{role:"button",tabIndex:0,className:"thumb",style:{backgroundImage:e?`url(${e})`:void 0,backgroundSize:"cover",backgroundPosition:"center",backgroundRepeat:"no-repeat",overflow:"visible"},"aria-label":u||k.get("View image"),onClick:()=>Qt(e,u),onKeyDown:s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),Qt(e,u))},children:f(qe,{variant:"white",onClick:s=>{s.stopPropagation(),Ot(p)},"aria-label":k.get(h.removeImageLabel),mt:"-xs",mr:"-xs",size:"xs",p:0,className:"remove-image-button",title:k.get(h.removeImageLabel),"data-ai-kit-remove-image-button":!0,children:"X"})},te[p]?.id??p))})]})]})}),f(pt,{opened:!!Ge,onClose:Ia,centered:!0,size:"auto",title:Ge?.title||k.get("Image preview"),children:Ge&&f("img",{src:Ge.url,alt:Ge.title||k.get("Image preview"),style:{maxWidth:"100%",maxHeight:"70vh"}})})]})},ki=dt(fi,{showOpenButton:!0,variation:"modal"});import{Alert as yi,Anchor as Aa,Button as va,Divider as wa,Group as Rt,Loader as Ai,Modal as ft,Paper as Ta,Stack as Mt,Text as kt,TextInput as vi,Title as wi}from"@mantine/core";import{AiKitDocSearchIcon as Ti,sendSearchMessage as Si}from"@smart-cloud/ai-kit-core";import{I18n as xe}from"aws-amplify/utils";import{useCallback as Sa,useEffect as kn,useMemo as Ye,useRef as Ri,useState as Ii}from"react";import zi from"react-markdown";import Ci from"rehype-raw";import xi from"remark-gfm";import{IconSearch as Li}from"@tabler/icons-react";import{Fragment as Ra,jsx as E,jsxs as Ke}from"react/jsx-runtime";xe.putVocabularies(lt);function Pi(n){let i=n?.citations?.docs??[],d=n?.citations?.chunks??[],l=new Map;for(let a of i)l.set(a.docId,{doc:a,chunks:[]});for(let a of d){let c=l.get(a.docId);c?c.chunks.push(a):l.set(a.docId,{doc:{docId:a.docId},chunks:[a]})}return Array.from(l.values())}var Mi=n=>{let{autoRun:i=!0,context:d,title:l,searchButtonIcon:a,showSearchButtonTitle:c=!0,showSearchButtonIcon:A=!0,showSources:M=!0,topK:$=10,getSearchText:Q,variation:x,rootElement:X,colorMode:fe,language:Y,onClose:y,onClickDoc:o}=n,[S,ke]=Ii(""),{busy:ee,error:B,statusEvent:h,result:b,run:J,cancel:O,reset:te}=At(),D=Ri(!1),V=b?.sessionId,z=b?.citations?.docs??[],G=b?.citations?.chunks??[],se=b?.citations?.anchors??[],Le=b?.result??"",Je=Ye(()=>{if(A)return a?.trim()?E("img",{src:a,alt:"",style:{width:18,height:18,objectFit:"contain"}}):E(Li,{size:18})},[a,A]),ce=Ye(()=>(Y&&xe.setLanguage(Y||"en"),xe.get(l||"Search with AI-Kit")),[Y]),it=Ye(()=>h?xe.get("Searching\u2026"):null,[Y,h]),ve=Ye(()=>S||Q,[S,Q]),ye=Ye(()=>{if(ee)return!1;let v=typeof ve=="function"?ve():ve;return!!(v&&v.trim().length>0)},[ve,ee]),_=Sa(async()=>{let v=typeof ve=="function"?ve():ve;v&&(ke(v),te(),await J(async({signal:R,onStatus:be})=>await Si({sessionId:V,query:v,topK:$},{signal:R,onStatus:be,context:d})))},[d,ve,J,te,$,V]),P=Sa(async()=>{te(),y(),D.current=!1},[y,te,D]);kn(()=>{!i||!ye||ee||D.current||(D.current=!0,queueMicrotask(()=>{_()}))},[ee,D,ye,i,_]),kn(()=>{ye||(D.current=!0)},[ye]);let W=Ye(()=>Pi(b),[b]),we=Ye(()=>{let v=new Map;return z.forEach((R,be)=>{R?.docId&&v.set(R.docId,be+1)}),v},[z]),Ge=Ye(()=>{let v=new Map;return G.forEach(R=>{R?.chunkId&&R?.docId&&v.set(R.chunkId,R.docId)}),v},[G]),je=Ye(()=>{if(!Le)return"";if(!se.length||we.size===0)return Le;let v=[...se].filter(de=>Array.isArray(de?.chunkIds)&&de?.span?.end!==void 0).sort((de,Pe)=>{let w=de.span?.end??0,Te=Pe.span?.end??0;return w-Te}),R=0,be=[];for(let de of v){let Pe=de.span?.end;if(typeof Pe!="number"||Pe<R)continue;let w=Array.from(new Set((de.chunkIds??[]).map(ae=>ae?Ge.get(ae):void 0).map(ae=>ae?we.get(ae):void 0).filter(ae=>typeof ae=="number")));if(!w.length)continue;let Te=Math.min(Pe,Le.length);be.push(Le.slice(R,Te)),be.push(`<sup>${w.join(",")}</sup>`),R=Te}return be.push(Le.slice(R)),be.join("")},[se,Le]),le=x==="modal"?ft.Root:Rt,Ve=x==="modal"?ft.Content:Rt,Be=x==="modal"?ft.Body:Rt;return kn(()=>{if(x==="modal")return document.body.style.overflow="hidden",document.body.onkeydown=v=>{v.key==="Escape"&&(v.preventDefault(),P())},()=>{document.body.style.overflow="",document.body.onkeydown=null}},[P,x]),Ke(le,{opened:!0,className:"doc-search-root",onClose:P,padding:"md",gap:"md",size:"md",portalProps:x==="modal"?{target:X,reuseTargetNode:!0}:void 0,"data-ai-kit-theme":fe,"data-ai-kit-variation":x,children:[x==="modal"&&E(ft.Overlay,{}),Ke(Ve,{w:"100%",style:{left:0},children:[x==="modal"&&Ke(ft.Header,{style:{zIndex:1e3},children:[E(Ti,{className:"doc-search-title-icon"}),E(ft.Title,{children:xe.get(ce)}),E(ft.CloseButton,{})]}),E(Be,{w:"100%",style:{zIndex:1001},children:E(vt,{enabled:x!=="modal",working:ee,variation:x,children:E(Ta,{shadow:"sm",radius:"md",p:"md",children:Ke(Mt,{gap:"sm",children:[x!=="modal"&&E(wi,{order:4,style:{margin:0},children:xe.get(ce)}),Ke(Rt,{gap:"sm",align:"flex-end",wrap:"nowrap",children:[E(vi,{style:{flex:1},value:S,onChange:v=>ke(v.currentTarget.value),placeholder:xe.get("Search the documentation\u2026"),disabled:ee,onKeyDown:v=>{v.key==="Enter"&&ye&&(v.preventDefault(),_())}}),E(va,{leftSection:Je,onClick:()=>{_()},disabled:!ye,className:c?"doc-search-button":"doc-search-button-no-title",children:c?xe.get("Search"):null}),ee?E(va,{variant:"light",color:"red",onClick:O,children:xe.get("Stop")}):null]}),B?E(yi,{color:"red",title:xe.get("Error"),children:B}):null,ee&&it&&E(vt,{enabled:x==="modal",working:!0,variation:x,children:Ke(Rt,{justify:"center",align:"center",gap:"sm",m:"sm",pr:"lg",children:[E(Ai,{size:"sm"}),E(kt,{size:"sm",c:"dimmed",children:it})]})}),b?.result?Ke(Ra,{children:[E(wa,{}),Ke(Mt,{gap:"xs","data-doc-search-result":!0,children:[E(kt,{size:"sm",c:"dimmed","data-doc-search-result-title":!0,children:xe.get("AI Summary")}),E(zi,{remarkPlugins:[xi],rehypePlugins:[Ci],"data-doc-search-result-content":!0,children:je||Le})]})]}):null,M&&(b?.citations?.docs?.length||b?.citations?.chunks?.length)?Ke(Ra,{children:[E(wa,{}),Ke(Mt,{gap:"sm","data-doc-search-sources":!0,children:[E(kt,{size:"sm",c:"dimmed","data-doc-search-sources-title":!0,children:xe.get("Sources")}),W.map(({doc:v})=>{let R=v.sourceUrl?.trim()||void 0,be=v.docId?we.get(v.docId):void 0,de=v.title?.trim()||v.docId,Pe=Ke(kt,{fw:600,style:{display:"inline"},children:[be?`${be}. `:"",de]});return E(Ta,{withBorder:!0,radius:"md",p:"sm",children:E(Mt,{gap:"xs",children:E(Rt,{justify:"space-between",align:"flex-start",children:Ke(Mt,{gap:2,style:{flex:1},"data-doc-search-source":!0,children:[R?E(Aa,{href:R,target:"_blank",rel:"noreferrer",style:{textDecoration:"none"},onClick:w=>{o&&(w.preventDefault(),o?.(v))},"data-doc-search-source-title":!0,children:Pe}):Pe,E(Aa,{href:R,target:"_blank",rel:"noreferrer",style:{textDecoration:"none"},onClick:w=>{o&&(w.preventDefault(),o?.(v))},"data-doc-search-source-url":!0,children:v.sourceUrl}),v.author?E(kt,{size:"xs",c:"dimmed","data-doc-search-source-author":!0,children:v.author}):null,v.description?E(kt,{size:"sm",c:"dimmed",fs:"italic","data-doc-search-source-description":!0,children:v.description}):null]})})})},v.docId)})]})]}):null,!ee&&!B&&!b?.result?E(kt,{size:"sm",c:"dimmed","data-doc-search-no-results":!0,children:xe.get("Enter a search query to start.")}):null,E(Ht,{variation:x})]})})})})]})]})},Di=dt(Mi);export{ki as AiChatbot,Fr as AiFeature,fn as DEFAULT_CHATBOT_LABELS,Di as DocSearch,$n as isBackendConfigured,on as markdownToHtml,ut as readDefaultOutputLanguage,Ct as stripCodeFence,lt as translations,At as useAiRun,dt as withAiKitShell};
|
|
31
|
+
Follow these additional instructions: ${le}`:"")},{role:"user",content:"What can you see on this image according to the optional knowledge base and shared context?"}].filter(Boolean),N=await w.run(async({signal:U,onStatus:ne})=>(await la({messages:K,images:[je],outputLanguage:"en",responseConstraint:Nr},{signal:U,onStatus:ne,context:S,modeOverride:r,onDeviceTimeoutOverride:a})).result);if(!N){W("");return}let re=(T&&T!=="auto"?T:null)||ut(),H=Ct(N).trim();try{G("Translating result...");let U=await w.run(async({signal:ne})=>await Gr(H,re,{signal:ne,context:S,modeOverride:r,onDeviceTimeoutOverride:a,silent:!0}));W(U)}catch(U){W(H),console.warn("AI Kit: failed to parse SEO JSON",U)}break}}}catch(m){_(m instanceof Error?m.message:t.get("An unknown error occurred."))}G(void 0)}},[O,w,le,ae,T,we,Se,S,o,We,R,ge,V]),Et=nt(async()=>{await Ze("backend-only")},[Ze]),It=nt(r=>{switch(o){case"proofread":return g(Dr,{className:r});case"translate":return g(Er,{className:r});case"summarize":return g(Ur,{className:r});case"rewrite":case"write":return g(Kr,{className:r});case"generateImageMetadata":case"generatePostMetadata":return g(Br,{className:r});default:return g(Rr,{mode:o,className:r})}},[o]),st=nt(()=>{switch(o){case"proofread":return w.lastSource?t.get("Proofread again"):t.get("Proofread");case"translate":return w.lastSource?t.get("Translate again"):t.get("Translate");case"rewrite":return w.lastSource?t.get("Rewrite again"):t.get("Rewrite");case"summarize":return w.lastSource?t.get("Summarize again"):t.get("Summarize");default:return w.lastSource?t.get("Regenerate"):t.get("Generate")}},[O,w.lastSource,o]),Kt=nt(()=>{switch(o){case"proofread":return t.get("Proofread on Backend");case"translate":return t.get("Translate on Backend");case"rewrite":return t.get("Rewrite on Backend");case"summarize":return t.get("Summarize on Backend");default:return t.get("Regenerate on Backend")}},[O,o]),Me=nt(async()=>{Le(!1),W(null),_(null),Be.current=!1,w.reset(),M||h()},[h,Be,w,M]),Bt=nt(async()=>{w.busy&&w.cancel()},[w.busy]);qt(()=>{!se||!d||!ge||w.busy||P||Be.current||(Be.current=!0,queueMicrotask(()=>{Ze(ke)}))},[w.busy,Be,se,ge,d,P,Ze,ke]),qt(()=>{V&&o!=="proofread"&&(ge||(ce(!0),Be.current=!0))},[V,ge,o]),qt(()=>{let r=!0;return(async()=>{try{await Lr();let m=await $n();r&&ve(m)}catch(m){console.error(m),r&&ve(!1)}})(),()=>{r=!1}},[]);let $e=Lt(()=>{let r=[];if(o==="translate"){let m=Ft.find(K=>K.value===R)?.label;r.push(t.get("Input language")+": "+(m?t.get(m):"auto"))}if(T&&D?.outputLanguage){let m=Ft.find(K=>K.value===T)?.label;r.push(t.get("Output language")+": "+(m?t.get(m):T))}return o==="summarize"&&We&&D?.type&&r.push(t.get("Type")+": "+t.get(We)),(o==="write"||o==="rewrite")&&Se&&D?.tone&&r.push(t.get("Tone")+": "+t.get(Se)),(o==="write"||o==="rewrite"||o==="summarize")&&ae&&D?.length&&r.push(t.get("Length")+": "+t.get(ae)),le?.trim()&&D?.instructions&&r.push(t.get("Instructions")+": \u2713"),r.length?r.join(" \u2022 "):t.get("No overrides")},[O,o,R,T,We,Se,ae,le]),F={label:{fontSize:11,opacity:.85},description:{fontSize:11,opacity:.65,marginTop:2},input:{fontSize:12}},zt=c==="modal"?mt.Root:Xe,Qe=c==="modal"?mt.Content:Xe,Zt=c==="modal"?mt.Body:Xe,$t=y==="collapse"?Ar:at,Ut=y==="horizontal"?Xe:at;return qt(()=>{if(!(c!=="modal"||!se))return document.body.style.overflow="hidden",document.body.onkeydown=r=>{r.key==="Escape"&&(r.preventDefault(),Me())},()=>{document.body.style.overflow="",document.body.onkeydown=null}},[Me,c]),ie(Pt,{children:[M&&g(gt,{leftSection:Q&&(X?g("span",{dangerouslySetInnerHTML:{__html:X}}):It()),className:$?"ai-feature-open-button":"ai-feature-open-button-no-title",variant:"filled",disabled:se,onClick:()=>Le(!0),"data-ai-kit-open-button":!0,children:$&&t.get(x||Re)}),se&&ie(zt,{opened:!0,className:"ai-feature-root",onClose:Me,padding:"md",gap:"md",size:"md",portalProps:c==="modal"?{target:te,reuseTargetNode:!0}:void 0,"data-ai-kit-theme":ee,"data-ai-kit-variation":c,children:[c==="modal"&&g(mt.Overlay,{}),ie(Qe,{w:"100%",style:{left:0},children:[c==="modal"&&ie(mt.Header,{style:{zIndex:1e3},children:[It("ai-feature-title-icon"),g(mt.Title,{children:t.get(Re)}),g(mt.CloseButton,{})]}),g(Zt,{w:"100%",style:{zIndex:1001},children:ie(vt,{enabled:c!=="modal",working:w.busy,variation:c,children:[ie(at,{gap:"sm",mb:"sm",p:"sm",children:[ye&&g(ln,{color:"red",children:t.get(ye)}),V&&o!=="proofread"&&ie(Tr,{withBorder:!0,p:"sm",mt:"md",className:"ai-feature-options","data-options-display":y,children:[ie(Xe,{justify:"space-between",align:"center",className:"ai-feature-options-summary",onClick:y==="collapse"?()=>ce(r=>!r):void 0,children:[y==="collapse"&&ie(at,{gap:0,children:[g(sa,{size:"sm",fw:600,style:{lineHeight:1.1},children:t.get("Options")}),g(sa,{size:"xs",c:"dimmed",style:{marginTop:2},children:$e})]}),y==="collapse"&&g(gt,{variant:"subtle",size:"xs",style:{minWidth:"fit-content"},onClick:r=>{r.stopPropagation(),ce(m=>!m)},children:Je?t.get("Hide"):t.get("Show")})]}),ie($t,{in:Je,children:[y==="collapse"&&g(vr,{my:"sm"}),ie(Ut,{gap:"xs",justify:"space-between",children:[o==="write"&&D?.text&&g(tt,{label:t.get("The topic or subject for the AI to write about."),disabled:y!=="horizontal",position:"top",children:g(et,{size:"xs",className:"ai-feature-option",styles:F,disabled:w.busy,label:t.get("Topic"),description:y!=="horizontal"?t.get("The topic or subject for the AI to write about."):void 0,value:we||"",onChange:r=>{let m=r.target.value;Ge(m),J?.({text:m})}})}),(o==="write"||o==="rewrite"||o==="generateImageMetadata"||o==="generatePostMetadata")&&D?.instructions&&g(tt,{label:t.get("Additional instructions to guide the AI."),disabled:y!=="horizontal",position:"top",children:g(et,{disabled:w.busy,size:"xs",className:"ai-feature-option",styles:F,label:t.get("Instructions"),description:y!=="horizontal"?t.get("Additional instructions to guide the AI."):void 0,value:le||"",onChange:r=>{let m=r.target.value;Ve(m),J?.({instructions:m})}})}),o==="translate"&&g(tt,{label:t.get("The language of the input text."),disabled:y!=="horizontal",position:"top",children:g(wt,{disabled:w.busy,size:"xs",styles:F,className:"ai-feature-option",label:t.get("Input language"),description:y!=="horizontal"?t.get("The language of the input text."):void 0,data:[{value:"auto",label:t.get("Auto-detect")},...Ft.map(r=>({value:r.value,label:t.get(r.label)})).sort((r,m)=>r.label.localeCompare(m.label))],value:R||"auto",onChange:r=>{let m=r;be(m),v(void 0),J?.({inputLanguage:m})}})}),D?.outputLanguage&&g(tt,{label:t.get("The language AI-Kit should use for generated text by default (when applicable)."),disabled:y!=="horizontal",position:"top",children:g(wt,{disabled:w.busy,size:"xs",styles:F,className:"ai-feature-option",label:t.get("Output language"),description:y!=="horizontal"?t.get("The language AI-Kit should use for generated text by default (when applicable)."):void 0,data:[...[o==="rewrite"?{value:"auto",label:t.get("Auto-detect")}:void 0].filter(Boolean),...Ft.map(r=>({value:r.value,label:t.get(r.label)})).sort((r,m)=>r.label.localeCompare(m.label))],value:T||da.settings.defaultOutputLanguage||(o==="rewrite"?"auto":""),onChange:r=>{let m=r;Te(m),v(void 0),J?.({outputLanguage:m})}})}),o==="summarize"&&D?.type&&g(tt,{label:t.get("The summary style to generate."),disabled:y!=="horizontal",position:"top",children:g(wt,{disabled:w.busy,size:"xs",className:"ai-feature-option",styles:F,label:t.get("Type"),description:y!=="horizontal"?t.get("The summary style to generate."):void 0,data:[{value:"headline",label:t.get("Headline")},{value:"key-points",label:t.get("Key Points")},{value:"teaser",label:t.get("Teaser")},{value:"tldr",label:t.get("TL;DR")}],value:We||"key-points",onChange:r=>{let m=r;_e(m),J?.({type:m})}})}),(o==="write"||o==="rewrite")&&D?.tone&&g(tt,{label:t.get("The tone or style for the AI to use."),disabled:y!=="horizontal",position:"top",children:g(wt,{disabled:w.busy,size:"xs",className:"ai-feature-option",styles:F,label:t.get("Tone"),description:y!=="horizontal"?t.get("The tone or style for the AI to use."):void 0,data:o==="write"?[{value:"neutral",label:t.get("Neutral")},{value:"formal",label:t.get("Formal")},{value:"casual",label:t.get("Casual")}]:[{value:"as-is",label:t.get("As-Is")},{value:"more-formal",label:t.get("More formal")},{value:"more-casual",label:t.get("More casual")}],value:Se||(o==="write"?"neutral":"as-is"),onChange:r=>{let m=r;_t(m),J?.({tone:m})}})}),(o==="write"||o==="rewrite"||o==="summarize")&&D?.length&&g(tt,{label:t.get("The target output length."),disabled:y!=="horizontal",position:"top",children:g(wt,{disabled:w.busy,size:"xs",className:"ai-feature-option",styles:F,label:t.get("Length"),description:y!=="horizontal"?t.get("The target output length."):void 0,data:o==="write"||o==="summarize"?[{value:"short",label:t.get("Short")},{value:"medium",label:t.get("Medium")},{value:"long",label:t.get("Long")}]:[{value:"as-is",label:t.get("As-Is")},{value:"shorter",label:t.get("Shorter")},{value:"longer",label:t.get("Longer")}],value:ae||(o==="rewrite"?"as-is":"short"),onChange:r=>{let m=r;Ne(m),J?.({length:m})}})}),o==="summarize"||o==="write"||o==="rewrite"&&D?.outputFormat&&g(tt,{label:t.get("The format for the generated output."),disabled:y!=="horizontal",position:"top",children:g(wt,{disabled:w.busy,size:"xs",className:"ai-feature-option",styles:F,label:t.get("Output format"),description:y!=="horizontal"?t.get("The format for the generated output."):void 0,data:[{value:"plain-text",label:t.get("Plain Text")},{value:"markdown",label:t.get("Markdown")},{value:"html",label:t.get("HTML")}],value:de||"markdown",onChange:r=>{let m=r;Pe(m),J?.({outputFormat:m})}})})]})]})]}),w.busy&&ot&&g(vt,{enabled:c==="modal",working:!0,variation:c,children:ie(Xe,{justify:"center",align:"center",gap:"sm",m:"sm",pr:"lg",children:[g(wr,{size:"sm"}),g(un.Label,{className:"ai-feature-status-text",children:ot})]})}),P&&ie(at,{mt:"md",children:[o==="proofread"&&(P.corrections.length===0?g(ln,{color:"green",children:t.get("No issues found. Your text looks great!")}):ie(Pt,{children:[g("p",{style:{marginTop:0,opacity:.85},children:t.get("Hover highlights to see explanations.")}),g(oa,{original:we,corrections:P.corrections}),P.correctedInput?ie(Pt,{children:[g("h4",{style:{marginTop:16,marginBottom:8},children:t.get("Corrected")}),g(Xe,{c:"pre",className:"ai-feature-generated-content",children:P.correctedInput})]}):null]})),o==="generateImageMetadata"&&ie(Pt,{children:[g(et,{readOnly:!l,label:t.get("Alt Text"),description:t.get("The alt text for the image."),value:P.alt_text||"",onChange:r=>W({...P,alt_text:r.target.value})}),g(et,{readOnly:!l,label:t.get("Title"),description:t.get("The title for the image."),value:P.title||"",onChange:r=>W({...P,title:r.target.value})}),g(et,{readOnly:!l,label:t.get("Caption"),description:t.get("The caption for the image."),value:P.caption||"",onChange:r=>W({...P,caption:r.target.value})}),g(et,{readOnly:!l,label:t.get("Description"),description:t.get("The description for the image."),value:P.description||"",onChange:r=>W({...P,description:r.target.value})})]}),o==="generatePostMetadata"&&ie(Pt,{children:[g(et,{readOnly:!l,label:t.get("Title"),description:t.get("The title for the post."),value:P.title||"",onChange:r=>W({...P,title:r.target.value})}),g(et,{readOnly:!l,label:t.get("Excerpt"),description:t.get("The excerpt for the post."),value:P.excerpt||"",onChange:r=>W({...P,excerpt:r.target.value})})]}),o!=="proofread"&&o!=="generateImageMetadata"&&o!=="generatePostMetadata"&&typeof P=="string"&&g(ga,{value:P,editable:!!l,onChange:r=>{W(r)}})]}),P===""&&g(ga,{value:P,editable:!1})]}),ie(Xe,{className:"ai-kit-actions",gap:"sm",mb:"sm",p:"sm",children:[w.busy&&g(gt,{variant:"outline",size:"sm",onClick:Bt,"data-ai-kit-cancel-button":!0,children:t.get("Cancel")}),!w.busy&&g(gt,{variant:"filled",size:"sm",disabled:!ge,onClick:()=>Ze(),"data-ai-kit-generate-button":!0,children:st()}),!w.busy&&w.lastSource==="on-device"&&it&&fe&&g(gt,{variant:"filled",size:"sm",disabled:!ge,onClick:Et,"data-ai-kit-regenerate-on-backend-button":!0,children:Kt()}),!w.busy&&b&&g(gt,{variant:"outline",size:"sm",disabled:!P||o==="proofread"&&P.corrections.length===0,onClick:async()=>{b(de==="html"?await on(P):P),Me()},"data-ai-kit-accept-button":!0,children:t.get(Y)}),g(gt,{variant:"default",size:"sm",onClick:Me,"data-ai-kit-close-button":!0,children:t.get("Close")})]}),g(Ht,{variation:c})]})})]})]})]})};function ga(n){let{value:i,editable:d,onChange:l}=n;return d?ie(at,{p:0,gap:"sm",children:[g(un.Label,{children:t.get("Generated content")}),g(Sr,{value:i,onChange:a=>l?.(a.currentTarget.value),autosize:!0,minRows:2,maxRows:12,p:0,className:"ai-feature-generated-content ai-feature-editor"}),g(un.Label,{children:t.get("Preview")}),g(at,{className:"ai-feature-generated-content ai-feature-preview",children:g(ua,{remarkPlugins:[ca],children:i})})]}):g(at,{className:"ai-feature-generated-content",children:i?g(ua,{remarkPlugins:[ca],children:i}):g(ln,{color:"yellow",children:t.get("No content generated.")})})}var Fr=dt(Wr);import{ActionIcon as fa,Anchor as Jr,Button as qe,Group as he,Input as Vr,List as ka,Modal as pt,Stack as ht,Text as Ce,Textarea as _r}from"@mantine/core";import{IconMaximize as Zr,IconMessage as $r,IconMinimize as Qr,IconPaperclip as Xr,IconPencil as ei,IconPlayerStop as ti,IconSend as ni,IconTrash as ai}from"@tabler/icons-react";import{getStoreSelect as ri,sendChatMessage as ii,sendFeedbackMessage as oi}from"@smart-cloud/ai-kit-core";import{useSelect as si}from"@wordpress/data";import{I18n as k}from"aws-amplify/utils";import{useCallback as j,useEffect as ue,useMemo as oe,useRef as Ee,useState as me}from"react";import li from"react-markdown";import ui from"remark-gfm";var qr="ai-kit-chatbot-attachments",rt="attachments";var cn=null;function Yr(){return typeof window<"u"&&typeof window.indexedDB<"u"}async function dn(){if(!Yr())return null;cn||(cn=new Promise(n=>{try{let i=window.indexedDB.open(qr,1);i.onerror=()=>n(null),i.onblocked=()=>n(null),i.onupgradeneeded=()=>{let d=i.result;d.objectStoreNames.contains(rt)||d.createObjectStore(rt,{keyPath:"id"})},i.onsuccess=()=>n(i.result)}catch(i){console.warn("[AiChatbot] IndexedDB is not available",i),n(null)}}));try{return await cn}catch(n){return console.warn("[AiChatbot] Failed to open attachment store",n),null}}async function pa(n,i){let d=await dn();return d?new Promise((l,a)=>{try{let c=d.transaction(rt,n),A=c.objectStore(rt),M=i(A);c.oncomplete=()=>l(M),c.onerror=()=>a(c.error),c.onabort=()=>a(c.error)}catch(c){a(c)}}).catch(l=>(console.warn("[AiChatbot] Attachment store transaction failed",l),null)):null}async function ha(n,i,d){let l={id:n,blob:i,name:d.name,type:d.type,size:d.size,createdAt:Date.now()};return await pa("readwrite",c=>(c.put(l),n))}async function gn(n){let i=await dn();return i?new Promise((d,l)=>{try{let a=i.transaction(rt,"readonly"),c=a.objectStore(rt).get(n);c.onsuccess=()=>{let A=c.result;d(A??null)},c.onerror=()=>l(c.error),a.onabort=()=>l(a.error)}catch(a){l(a)}}).catch(d=>(console.warn("[AiChatbot] Failed to load attachment",d),null)):null}async function Yt(){await pa("readwrite",n=>{n.clear()})}async function mn(n){let i=await dn();i&&await new Promise((d,l)=>{try{let a=i.transaction(rt,"readwrite"),c=a.objectStore(rt),A=c.getAllKeys();A.onsuccess=()=>{let M=A.result;for(let $ of M){let Q=String($);n.has(Q)||c.delete($)}},A.onerror=()=>l(A.error),a.oncomplete=()=>d(),a.onerror=()=>l(a.error),a.onabort=()=>l(a.error)}catch(a){l(a)}}).catch(d=>{console.warn("[AiChatbot] Failed to cleanup attachments",d)})}import{Fragment as bi,jsx as f,jsxs as Z}from"react/jsx-runtime";k.putVocabularies(lt);var Jt=1440*60*1e3,ci=1,di="localstorage",Tt=`ai-kit-chatbot-history-v1:${typeof window<"u"?window.location.hostname:"unknown"}`,fn={modalTitle:"AI Assistant",userLabel:"User",assistantLabel:"Assistant",assistantThinkingLabel:"Assistant is thinking...",askMeLabel:"Ask me",sendLabel:"Send",cancelLabel:"Cancel",resetLabel:"Reset",confirmLabel:"Confirm",clickAgainToConfirmLabel:"Click again to confirm",notSentLabel:"Not sent",editLabel:"Edit",readyLabel:"Ready.",readyEmptyLabel:"I'm ready to assist you.",addLabel:"Add",addImageLabel:"Add image",removeImageLabel:"Remove image",closeChatLabel:"Close chat",maximizeLabel:"Maximize",restoreSizeLabel:"Restore size",referencesLabel:"References",referenceLabel:"Reference",acceptResponseLabel:"Accept response",rejectResponseLabel:"Reject response",placeholder:"Ask anything\u2026",emptyResponseLabel:"Empty response",unexpectedErrorLabel:"Unexpected error"};function St(n){return`${n}-${Math.random().toString(36).slice(2)}-${Date.now().toString(36)}`}var gi=4,mi=5*1024*1024,pi=n=>{let i=(n?.name||"").toString(),d=(n?.code||"").toString(),l=(n?.message||"").toString();return i==="AbortError"||d==="ABORT_ERR"||/abort|aborted|cancel/i.test(l)},hi=(n,i)=>{if(!n)return null;let d=n.step,l=k.get((n.message??"").trim()),a=typeof n.progress=="number"?n.progress:null,c=a==null?null:Math.round(a*100);switch(d){case"decide":return l||k.get("Checking capabilities...");case"on-device:init":return l||k.get("Initializing on-device AI...");case"on-device:download":return c==null?l||k.get("Downloading model..."):l||`${k.get("Downloading model...")} ${c}%`;case"on-device:ready":return l||k.get("On-device model ready...");case"on-device:run":return l||k.get("Running on-device...");case"backend:request":case"backend:waiting":case"backend:response":return k.get(i.assistantThinkingLabel??fn.assistantThinkingLabel);case"done":return l||k.get("Done.");case"error":return l||k.get("An error occurred.");default:return l||null}};function pn(n){if(typeof window>"u")return null;try{return n==="localstorage"?window.localStorage:n==="sessionstorage"?window.sessionStorage:null}catch{return null}}var Vt=n=>{if(typeof window>"u"||typeof URL>"u"||typeof URL.createObjectURL!="function")return null;try{return URL.createObjectURL(n)}catch{return null}},hn=n=>{if(n&&!(typeof window>"u")&&!(typeof URL>"u"||typeof URL.revokeObjectURL!="function"))try{URL.revokeObjectURL(n)}catch{}},ya=n=>{!n||n.length===0||n.forEach(i=>hn(i.objectUrl))},ba=n=>{n.forEach(i=>ya(i.attachments))},fi=n=>{let{rootElement:i,store:d,previewMode:l,title:a,openButtonTitle:c,openButtonIcon:A,showOpenButtonTitle:M=!0,showOpenButtonIcon:$=!0,colorMode:Q,language:x,onClose:X,placeholder:fe,maxImages:Y,maxImageBytes:y,historyStorage:o=di,emptyHistoryAfterDays:S=ci,labels:ke,openButtonIconLayout:ee="top",openButtonPosition:B="bottom-right"}=n,h=oe(()=>({...fn,...ke||{}}),[ke]),b=At(),[J,O]=me(""),[te,D]=me([]),[V,z]=me([]),[G,se]=me(null),[Le,Je]=me(!1),[ce,it]=me(!1),[ve,ye]=me(!1),[_,P]=me(!1),[W,we]=me(!0),[Ge,je]=me(null),[le,Ve]=me(!1),[Oe,v]=me(null),[R,be]=me(null),[de,Pe]=me(!1),[T,Te]=me(null),ae=Ee(T);ue(()=>{ae.current=T},[T]);let Ne=Ee(null),Se=Ee(!1),[_t,We]=me(null),_e=Ee(null),Be=Ee(null),Re=Ee(null),Dt=Ee(null),Ae=j(e=>{e.forEach(u=>hn(u.objectUrl))},[]),ge=j(()=>{Ae(st.current),D([]),_e.current&&(_e.current.value="")},[Ae]),[w,ot]=me(null),Ze=Ee(J),Et=Ee(V),It=Ee(w),st=Ee(te);ue(()=>{Ze.current=J},[J]),ue(()=>{st.current=te},[te]),ue(()=>{Et.current=V},[V]),ue(()=>{It.current=w},[w]),ue(()=>{x&&k.setLanguage(x||"en")},[x]);let Kt=si(()=>ri(d).isShowChatbotPreview()),Me=oe(()=>Math.max(0,Y??gi),[Y]),Bt=oe(()=>Math.max(0,y??mi),[y]),$e=V.length>0,F=oe(()=>b.busy&&T==="chat",[b.busy,T]),zt=oe(()=>F?!1:J.trim().length>0,[J,F]),Qe=oe(()=>{let e=c||h.askMeLabel;return k.get(e)},[c,h.askMeLabel,x]),Zt=oe(()=>{let e=a||h.modalTitle;return k.get(e)},[a,h.modalTitle,x]),$t=oe(()=>{let e=fe||h.placeholder;return k.get(e)},[fe,h.placeholder,x]),Ut=oe(()=>{let e="ai-docs-ask",u=`ai-open-btn--${B}`;return`${e} ${u}`},[B]),r=j(()=>{let e=Dt.current;if(e)try{let u=window.innerHeight||document.documentElement.clientHeight,p=360,s=1e3,C=Math.floor(u*.8),I=Math.max(p,Math.min(C,s));e.style.height=`${I}px`}catch{}},[]),m=j(()=>{let e=R;e&&window.setTimeout(()=>{try{e.scrollTop=e.scrollHeight}catch{}},50)},[R]),K=j(()=>{P(!1),ce&&it(!1),ye(!1),X?.()},[ce,X]);ue(()=>{if(_)return r(),window.addEventListener("resize",r),()=>window.removeEventListener("resize",r)},[_,r]),ue(()=>{if(!(!_||!ce))return document.body.style.overflow="hidden",()=>{document.body.style.overflow=""}},[_,ce,K]);let N=oe(()=>te.map(e=>({id:e.id,url:e.objectUrl,title:e.file.name})),[te]);ue(()=>{$e||we(!0)},[$e]),ue(()=>()=>{Ae(st.current)},[Ae]),ue(()=>{let e=R;if(!e)return;let u=()=>{let p=e.scrollHeight-(e.scrollTop+e.clientHeight);we(p<20)};return e.addEventListener("scroll",u),()=>{e.removeEventListener("scroll",u)}},[_,R]),ue(()=>{if(!W)return;let e=R;e&&e.scrollHeight>e.clientHeight&&(e.scrollTop=e.scrollHeight)},[V,b.busy,W,R]),ue(()=>{_||je(null)},[_]);let re=oe(()=>b.busy?hi(b.statusEvent,h)||k.get("Working\u2026"):null,[b.busy,b.statusEvent,x,h]),H=oe(()=>{for(let e=V.length-1;e>=0;e--){let u=V[e];if(u.role==="user"&&u.clientStatus==="canceled")return u.id}return null},[V]),U=j(e=>{z(u=>{let p=[...u].map((I,L)=>({m:I,i:L})).reverse().find(I=>I.m.role==="user"&&I.m.clientStatus==="pending")?.i;if(p==null)return u;let s=u.slice(),C=s[p];return s[p]={...C,clientStatus:e??void 0},s})},[z]),ne=j(()=>{if(!(!b.busy||ae.current!=="chat")){Se.current=!0;try{b.cancel()}catch{}U("canceled"),Te(null),se(null),m()}},[b,U,m]),He=j(e=>{let u=st.current,p=Array.from(e.target.files||[]),s=Math.max(0,Me-u.length);if(s===0){e.currentTarget.value="";return}let C=[];for(let I of p){if(C.length>=s)break;let L=/image\/(jpeg|png|gif|webp)/i.test(I.type),q=I.size<=Bt,ze=[...u,...C].some(De=>De.file.name===I.name&&De.file.size===I.size&&De.file.lastModified===I.lastModified);if(!L||!q||ze)continue;let Ue=Vt(I);Ue&&C.push({id:St("composer-image"),file:I,objectUrl:Ue})}C.length&&D(I=>[...I,...C]),e.currentTarget.value=""},[Me,Bt]),Ot=j(e=>{D(u=>{if(e<0||e>=u.length)return u;let p=u[e];return p&&hn(p.objectUrl),u.filter((s,C)=>C!==e)})},[]),Ie=Ee(null);ue(()=>{if(G)return Ie.current&&(window.clearTimeout(Ie.current),Ie.current=null),Ie.current=window.setTimeout(()=>{se(null),Ie.current=null},6e3),()=>{Ie.current&&(window.clearTimeout(Ie.current),Ie.current=null)}},[G]);let bn=j(async e=>{if(!e.length)return[];let u=o!=="nostorage";return(await Promise.all(e.map(async s=>{let C=St("attachment"),I;if(u)try{I=await ha(C,s.file,{name:s.file.name,type:s.file.type,size:s.file.size})??void 0}catch(q){console.warn("[AiChatbot] Failed to persist attachment",q)}let L=Vt(s.file);return{id:C,name:s.file.name,type:s.file.type||"application/octet-stream",size:s.file.size,blobId:I,objectUrl:L??void 0,blob:s.file}}))).filter(Boolean)},[o]),yn=j(async e=>{let u=[];for(let p of e){let s;if(p.attachments&&p.attachments.length>0){s=[];for(let C of p.attachments){let I;if(C.blobId)try{I=(await gn(C.blobId))?.blob??void 0}catch(q){console.warn("[AiChatbot] Failed to hydrate attachment",q)}if(!I)continue;let L=I?Vt(I):null;s.push({...C,objectUrl:L??void 0,blob:I??void 0})}}u.push({...p,attachments:s})}return u},[]),An=j(async e=>{if(!e||e.length===0){ge();return}let u=[];for(let p of e){let s=p.blob;if(!s&&p.blobId)try{s=(await gn(p.blobId))?.blob??void 0}catch(L){console.warn("[AiChatbot] Failed to reload attachment",L)}if(!s)continue;let C=s instanceof File?s:new File([s],p.name||"attachment",{type:p.type||s.type||"application/octet-stream"}),I=Vt(C);if(I&&(u.push({id:St("composer-image"),file:C,objectUrl:I}),u.length>=Me))break}if(u.length===0){ge();return}D(p=>(Ae(p),u)),_e.current&&(_e.current.value="")},[ge,Ae,Me]),Qt=j((e,u)=>{e&&je({url:e,title:u})},[]),Ia=j(()=>{je(null)},[]),vn=j(()=>{ba(Et.current),ge(),z([]),se(null),Re.current=null,ot(null),we(!0),Je(!1);let e=pn(o);if(e)try{e.removeItem(Tt)}catch{}Yt()},[ge,o]),za=j(()=>{Je(!0)},[]),Ca=j(()=>{b.busy&&ae.current==="chat"&&ne(),vn()},[b.busy,ne,vn]),wn=j(()=>{Je(!1)},[]),Tn=j(async(e,u)=>{if(!b.busy)try{let p=Re.current&&Date.now()-Re.current.storedAt<S*Jt?Re.current.id:void 0;if(!p)return;Te("feedback"),se(null),await b.run(async({signal:s,onStatus:C})=>(await oi({sessionId:p,feedbackMessageId:e,feedbackType:u},{signal:s,onStatus:C}),null)),se(null)}catch(p){let s=p?.message?.trim()||k.get("An error occurred.");se(s),console.error("Failed to send feedback",p)}finally{Te(p=>p==="feedback"?null:p)}},[b,x]),Sn=j((e,u)=>{z(p=>p.map(s=>s.id!==e||s.role!=="assistant"?s:s.feedback===u?{...s,feedback:void 0}:{...s,feedback:u})),Tn(e,u)},[Tn]),Nt=j(async()=>{let e=Ze.current.trim();if(!e||b.busy)return;Se.current=!1,se(null),Te("chat");let u=[...st.current],p=await bn(u),s=St("user"),C=Date.now(),I={id:s,role:"user",content:e,createdAt:C,clientStatus:"pending",attachments:p.length?p:void 0};O(""),ge(),z(L=>[...L,I]),_||P(!0),m();try{let L=Re.current&&Date.now()-Re.current.storedAt<S*Jt?Re.current.id:void 0,q=await b.run(async({signal:Ue,onStatus:De})=>await ii({sessionId:L,message:e,images:u.map(Ha=>Ha.file)},{signal:Ue,onStatus:De}));if(Se.current){U("canceled");return}if(!q)throw new Error(k.get(b.error??h.emptyResponseLabel));q.sessionId&&(Re.current={id:q.sessionId,storedAt:Date.now()});let ze={id:q.metadata?.messageId||St("assistant"),role:"assistant",content:q.result||"",citations:q.citations,createdAt:Date.now()};z(Ue=>[...Ue.map(bt=>bt.id===s?{...bt,clientStatus:void 0}:bt),ze]),ot(C)}catch(L){if(console.error("Error during ask()",L),Se.current||pi(L)){U("canceled");return}let q=L?.message?.trim()||k.get(h.unexpectedErrorLabel);z(ze=>[...ze.map(De=>De.id===s?{...De,clientStatus:void 0}:De),{id:St("assistant-error"),role:"assistant",content:`\u26A0\uFE0F ${q}`,createdAt:Date.now()}]),ot(C)}finally{Te(L=>L==="chat"?null:L),Se.current=!1,Be.current&&Be.current.focus(),m()}},[b,bn,ge,_,m,U,h.emptyResponseLabel,h.unexpectedErrorLabel,x]),xa=j(e=>{e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),zt&&Nt())},[Nt,zt]),La=j(()=>{P(!0)},[]);ue(()=>()=>{Ne.current!=null&&(cancelAnimationFrame(Ne.current),Ne.current=null)},[]);let Pa=j(()=>{it(e=>{let u=!e;return Ne.current!=null&&(cancelAnimationFrame(Ne.current),Ne.current=null),u?(ye(!0),requestAnimationFrame(()=>{Ne.current=requestAnimationFrame(()=>{ye(!1),Ne.current=null})})):ye(!1),u})},[]),Ma=j(e=>{O(e.content),(async()=>(await An(e.attachments),z(u=>u.filter(p=>p.id!==e.id)),ya(e.attachments),queueMicrotask(()=>Be.current?.focus())))()},[An]),Rn=oe(()=>$?A?f("img",{src:A,className:"ai-open-btn-icon",alt:k.get(h.askMeLabel||Qe)}):f($r,{size:18}):null,[$,A,h,Qe,x]),Da=oe(()=>{let e=Rn,u=M?f(Ce,{inherit:!0,children:Qe}):null;if(!$&&!u)return null;if(!$)return u;if(!M)return e;switch(ee){case"top":return Z(ht,{gap:4,align:"center",children:[e,u]});case"bottom":return Z(ht,{gap:4,align:"center",children:[u,e]});case"right":return Z(he,{gap:6,align:"center",children:[u,e]});default:return Z(he,{gap:6,align:"center",children:[e,u]})}},[Rn,$,M,Qe,ee]),Ea=oe(()=>F,[F]),Ka=oe(()=>!F,[F]),Ba=oe(()=>G||($e?k.get(h.readyLabel):k.get(h.readyEmptyLabel)),[G,$e,h.readyLabel,h.readyEmptyLabel,x]),Ua=oe(()=>F?k.get(h.cancelLabel):k.get(h.sendLabel),[F,h.cancelLabel,h.sendLabel,x]),Oa=oe(()=>F?f(ti,{size:18}):f(ni,{size:18}),[F]),Na=j(()=>{if(F){ne();return}Nt()},[F,ne,Nt]);return ue(()=>{if(!_||!Oe||!R)return;let e=()=>{let q=window.getComputedStyle(R).overflowY,ze=q==="auto"||q==="scroll",Ue=Math.ceil(R.scrollHeight),De=Math.floor(R.clientHeight),bt=Ue>De;return ze&&bt},u=!1,p=L=>{if(!e())return;L.preventDefault();let q=R.scrollHeight-R.clientHeight;R.scrollTop=Math.max(0,Math.min(q,R.scrollTop+L.deltaY))},s=()=>{let L=e();Pe(L),L!==u&&(u=L,u?Oe.addEventListener("wheel",p,{passive:!1}):Oe.removeEventListener("wheel",p))};s();let C=new ResizeObserver(s);C.observe(R);let I=new MutationObserver(s);return I.observe(R,{childList:!0,subtree:!0,characterData:!0}),window.addEventListener("resize",s),()=>{u&&Oe.removeEventListener("wheel",p),C.disconnect(),I.disconnect(),window.removeEventListener("resize",s)}},[_,Oe,R]),ue(()=>{let e=!1,u=pn(o);if(!u){o==="nostorage"&&Yt(),Ve(!0);return}return(async()=>{try{let p=u.getItem(Tt);if(!p){Ve(!0);return}let s=JSON.parse(p),C=typeof s?.lastUserSentAt=="number"?s.lastUserSentAt:null;if(!C||Date.now()-C>S*Jt){u.removeItem(Tt),await Yt(),Ve(!0);return}let L=(Array.isArray(s.messages)?s.messages:[]).map(ze=>ze?.role==="user"&&ze.clientStatus==="pending"?{...ze,clientStatus:"canceled"}:ze),q=await yn(L);if(e){ba(q);return}z(q),ot(C),s.session&&s.session.id&&(Re.current=s.session)}catch(p){console.warn("[AiChatbot] Failed to load history",p);try{u.removeItem(Tt)}catch{}}finally{e||Ve(!0)}})(),()=>{e=!0}},[o,S,yn]),ue(()=>{if(!le)return;let e=pn(o);if(!e)return;let u=It.current;if(!u)return;if(Date.now()-u>S*Jt){try{e.removeItem(Tt)}catch{}mn(new Set);return}let p=V.map(({attachments:I,...L})=>({...L,attachments:I?.map(({objectUrl:q,blob:ze,...Ue})=>Ue)})),s={version:1,lastUserSentAt:u,session:Re.current,messages:p};try{e.setItem(Tt,JSON.stringify(s))}catch{}let C=new Set;p.forEach(I=>{I.attachments?.forEach(L=>{L.blobId&&C.add(L.blobId)})}),mn(C)},[le,V,w,o,S]),l&&!Kt||!l&&Kt?null:Z(he,{className:Ut,children:[!_&&f(qe,{variant:"filled",className:M?"ai-launcher-button ai-launcher-text":"ai-launcher-button",onClick:La,"aria-label":Qe,title:Qe,"data-ai-kit-open-button":!0,children:Da}),_&&f(pt.Root,{ref:Dt,opened:_,lockScroll:!1,trapFocus:!1,closeOnEscape:!0,onClose:K,className:Ut+" ai-chat-container"+(ce?" maximized":"")+(ce&&ve?" ai-max-enter":""),portalProps:{target:i,reuseTargetNode:!0},"data-ai-kit-theme":Q,"data-ai-kit-variation":"modal",children:Z("div",{className:"ai-chat-container-internal",ref:v,children:[Z(pt.Header,{className:"ai-chat-header-bar",children:[f(pt.Title,{className:"ai-chat-title",children:Zt}),Z(he,{gap:"4px",align:"center",justify:"center",children:[typeof window<"u"&&window.innerWidth>600&&f(fa,{variant:"subtle",c:"var(--ai-kit-chat-icon-color, var(--ai-kit-color-text))",onClick:Pa,title:ce?k.get(h.restoreSizeLabel):k.get(h.maximizeLabel),"aria-label":ce?k.get(h.restoreSizeLabel):k.get(h.maximizeLabel),"data-ai-kit-maximize-button":!0,children:ce?f(Qr,{size:16}):f(Zr,{size:16})}),f(pt.CloseButton,{"aria-label":k.get(h.closeChatLabel)})]})]}),Z(pt.Body,{className:"ai-chat-scroll",ref:be,"data-scrollable":de?"true":"false",children:[V.map(e=>{let u=e.role==="user",p=u&&e.clientStatus==="canceled"&&e.id===H;return f(he,{justify:u?"flex-end":"flex-start",className:"ai-chat-row "+e.role,onMouseEnter:()=>We(e.id),onMouseLeave:()=>We(s=>s===e.id?null:s),children:Z(ht,{gap:4,w:"100%",style:{alignItems:u?"flex-end":"flex-start"},children:[Z(ht,{className:"ai-chat-bubble",children:[Z(Ce,{className:"ai-chat-header",children:[f(Ce,{fw:"bolder",size:"xs",style:{whiteSpace:"nowrap"},children:u?k.get(h.userLabel):k.get(h.assistantLabel)}),"\xA0",f(Ce,{size:"xs",style:{whiteSpace:"nowrap"},children:new Date(e.createdAt).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})})]}),e.role==="assistant"?f(li,{remarkPlugins:[ui],children:e.content}):f(Ce,{size:"sm",miw:"100px",children:e.content})]}),e.attachments&&e.attachments.length>0&&f(he,{className:"ai-thumbs ai-message-thumbs",gap:"xs",children:e.attachments.map(s=>f("button",{type:"button",className:"thumb",style:{backgroundImage:s.objectUrl?`url(${s.objectUrl})`:void 0,backgroundSize:"cover",backgroundPosition:"center",backgroundRepeat:"no-repeat"},onClick:()=>Qt(s.objectUrl,s.name),disabled:!s.objectUrl,title:s.name||k.get("View image"),"aria-label":s.name||k.get("View image"),children:!s.objectUrl&&f(Ce,{size:"xs",c:"dimmed",children:k.get("Loading image...")})},s.id))}),p&&Z(he,{justify:"flex-end",gap:"xs",children:[f(Ce,{size:"xs",c:"dimmed",children:f("em",{children:k.get(h.notSentLabel)})}),_t===e.id&&f(fa,{size:"sm",variant:"subtle",onClick:()=>Ma(e),title:k.get(h.editLabel),"aria-label":k.get(h.editLabel),"data-ai-kit-edit-button":!0,children:f(ei,{size:14})})]}),e.citations&&e.citations.length>0&&Z(ht,{className:"ai-citations",children:[f(Ce,{fw:"bold",size:"sm",mb:"xs",children:k.get(h.referencesLabel)}),f(ka,{spacing:"xs",size:"sm",children:e.citations.map((s,C)=>{let I=s.sourceUrl||s.url,L=s.title||I||`${k.get(h.referenceLabel)} #${C+1}`;return Z(ka.Item,{children:[I?f(Jr,{href:I,target:"_blank",rel:"noreferrer",children:L}):f(Ce,{children:L}),s.snippet?f(Ce,{size:"xs",c:"dimmed",mt:4,children:s.snippet}):null]},C)})})]}),e.role==="assistant"&&Z(he,{className:"ai-feedback",gap:"xs",children:[f(qe,{className:e.feedback==="accepted"?"active":void 0,onClick:()=>Sn(e.id,"accepted"),"aria-label":k.get(h.acceptResponseLabel),disabled:b.busy,"data-ai-kit-feedback-accept-button":!0,children:"\u{1F44D}"}),f(qe,{type:"button",className:e.feedback==="rejected"?"active":void 0,onClick:()=>Sn(e.id,"rejected"),"aria-label":k.get(h.rejectResponseLabel),disabled:b.busy,"data-ai-kit-feedback-reject-button":!0,children:"\u{1F44E}"})]})]})},e.id)}),Ea&&f(he,{justify:"flex-start",className:"ai-chat-row assistant status",children:Z(ht,{className:"ai-chat-bubble typing",children:[re?f(Ce,{size:"sm",c:"dimmed",children:f("em",{children:re})}):null,Z("div",{className:"typing-indicator",children:[f("span",{}),f("span",{}),f("span",{})]})]})})]}),Ka&&f(he,{className:"ai-status-line",children:f(Ce,{className:"ai-status-text",children:f("em",{children:Ba})})}),Z(ht,{className:"ai-box ai-box-open",children:[Z(pt,{opened:Le,onClose:wn,centered:!0,title:k.get("Reset conversation"),style:{position:"fixed"},left:0,children:[f(Ce,{size:"sm",children:k.get("Are you sure you want to reset the conversation?")}),Z(he,{justify:"flex-end",mt:"md",children:[f(qe,{variant:"default",onClick:wn,"data-ai-kit-no-button":!0,children:k.get("No")}),f(qe,{color:"var(--ai-kit-color-danger, red)",onClick:Ca,disabled:!$e&&!F,"data-ai-kit-yes-button":!0,children:k.get("Yes")})]})]}),f(he,{children:f(_r,{className:"ai-message",ref:Be,placeholder:$t,value:J,onChange:e=>{O(e.target.value)},onKeyDown:xa,rows:3})}),Z(he,{className:"ai-actions",justify:"space-between",w:"100%",children:[f(he,{justify:"flex-start",children:f(qe,{variant:"light",leftSection:f(ai,{size:18}),onClick:za,disabled:!$e&&!F,"data-ai-kit-reset-button":!0,children:k.get(h.resetLabel)})}),Z(he,{justify:"flex-end",children:[Me>0&&Z(bi,{children:[f(qe,{variant:"outline",leftSection:f(Xr,{size:18}),onClick:()=>_e.current?.click(),disabled:te.length>=Me||F,title:k.get(h.addImageLabel),"data-ai-kit-add-image-button":!0,children:k.get(h.addLabel)}),f(Vr,{ref:_e,type:"file",accept:"image/png,image/jpeg,image/gif,image/webp",style:{display:"none"},multiple:!0,onChange:He})]}),f(qe,{leftSection:Oa,variant:"filled",onClick:Na,disabled:!F&&!zt,"data-ai-kit-send-button":!0,children:Ua})]})]}),N.length>0&&f(he,{className:"ai-thumbs",mt:"xs",gap:"xs",children:N.map(({url:e,title:u},p)=>f("div",{role:"button",tabIndex:0,className:"thumb",style:{backgroundImage:e?`url(${e})`:void 0,backgroundSize:"cover",backgroundPosition:"center",backgroundRepeat:"no-repeat",overflow:"visible"},"aria-label":u||k.get("View image"),onClick:()=>Qt(e,u),onKeyDown:s=>{(s.key==="Enter"||s.key===" ")&&(s.preventDefault(),Qt(e,u))},children:f(qe,{variant:"white",onClick:s=>{s.stopPropagation(),Ot(p)},"aria-label":k.get(h.removeImageLabel),mt:"-xs",mr:"-xs",size:"xs",p:0,className:"remove-image-button",title:k.get(h.removeImageLabel),"data-ai-kit-remove-image-button":!0,children:"X"})},te[p]?.id??p))})]})]})}),f(pt,{opened:!!Ge,onClose:Ia,centered:!0,size:"auto",title:Ge?.title||k.get("Image preview"),children:Ge&&f("img",{src:Ge.url,alt:Ge.title||k.get("Image preview"),style:{maxWidth:"100%",maxHeight:"70vh"}})})]})},ki=dt(fi,{showOpenButton:!0,variation:"modal"});import{Alert as yi,Anchor as Aa,Button as va,Divider as wa,Group as Rt,Loader as Ai,Modal as ft,Paper as Ta,Stack as Mt,Text as kt,TextInput as vi,Title as wi}from"@mantine/core";import{AiKitDocSearchIcon as Ti,sendSearchMessage as Si}from"@smart-cloud/ai-kit-core";import{I18n as xe}from"aws-amplify/utils";import{useCallback as Sa,useEffect as kn,useMemo as Ye,useRef as Ri,useState as Ii}from"react";import zi from"react-markdown";import Ci from"rehype-raw";import xi from"remark-gfm";import{IconSearch as Li}from"@tabler/icons-react";import{Fragment as Ra,jsx as E,jsxs as Ke}from"react/jsx-runtime";xe.putVocabularies(lt);function Pi(n){let i=n?.citations?.docs??[],d=n?.citations?.chunks??[],l=new Map;for(let a of i)l.set(a.docId,{doc:a,chunks:[]});for(let a of d){let c=l.get(a.docId);c?c.chunks.push(a):l.set(a.docId,{doc:{docId:a.docId},chunks:[a]})}return Array.from(l.values())}var Mi=n=>{let{autoRun:i=!0,context:d,title:l,searchButtonIcon:a,showSearchButtonTitle:c=!0,showSearchButtonIcon:A=!0,showSources:M=!0,topK:$=10,getSearchText:Q,variation:x,rootElement:X,colorMode:fe,language:Y,onClose:y,onClickDoc:o}=n,[S,ke]=Ii(""),{busy:ee,error:B,statusEvent:h,result:b,run:J,cancel:O,reset:te}=At(),D=Ri(!1),V=b?.sessionId,z=b?.citations?.docs??[],G=b?.citations?.chunks??[],se=b?.citations?.anchors??[],Le=b?.result??"",Je=Ye(()=>{if(A)return a?.trim()?E("img",{src:a,alt:"",style:{width:18,height:18,objectFit:"contain"}}):E(Li,{size:18})},[a,A]),ce=Ye(()=>(Y&&xe.setLanguage(Y||"en"),xe.get(l||"Search with AI-Kit")),[Y]),it=Ye(()=>h?xe.get("Searching\u2026"):null,[Y,h]),ve=Ye(()=>S||Q,[S,Q]),ye=Ye(()=>{if(ee)return!1;let v=typeof ve=="function"?ve():ve;return!!(v&&v.trim().length>0)},[ve,ee]),_=Sa(async()=>{let v=typeof ve=="function"?ve():ve;v&&(ke(v),te(),await J(async({signal:R,onStatus:be})=>await Si({sessionId:V,query:v,topK:$},{signal:R,onStatus:be,context:d})))},[d,ve,J,te,$,V]),P=Sa(async()=>{te(),y(),D.current=!1},[y,te,D]);kn(()=>{!i||!ye||ee||D.current||(D.current=!0,queueMicrotask(()=>{_()}))},[ee,D,ye,i,_]),kn(()=>{ye||(D.current=!0)},[ye]);let W=Ye(()=>Pi(b),[b]),we=Ye(()=>{let v=new Map;return z.forEach((R,be)=>{R?.docId&&v.set(R.docId,be+1)}),v},[z]),Ge=Ye(()=>{let v=new Map;return G.forEach(R=>{R?.chunkId&&R?.docId&&v.set(R.chunkId,R.docId)}),v},[G]),je=Ye(()=>{if(!Le)return"";if(!se.length||we.size===0)return Le;let v=[...se].filter(de=>Array.isArray(de?.chunkIds)&&de?.span?.end!==void 0).sort((de,Pe)=>{let T=de.span?.end??0,Te=Pe.span?.end??0;return T-Te}),R=0,be=[];for(let de of v){let Pe=de.span?.end;if(typeof Pe!="number"||Pe<R)continue;let T=Array.from(new Set((de.chunkIds??[]).map(ae=>ae?Ge.get(ae):void 0).map(ae=>ae?we.get(ae):void 0).filter(ae=>typeof ae=="number")));if(!T.length)continue;let Te=Math.min(Pe,Le.length);be.push(Le.slice(R,Te)),be.push(`<sup>${T.join(",")}</sup>`),R=Te}return be.push(Le.slice(R)),be.join("")},[se,Le]),le=x==="modal"?ft.Root:Rt,Ve=x==="modal"?ft.Content:Rt,Oe=x==="modal"?ft.Body:Rt;return kn(()=>{if(x==="modal")return document.body.style.overflow="hidden",document.body.onkeydown=v=>{v.key==="Escape"&&(v.preventDefault(),P())},()=>{document.body.style.overflow="",document.body.onkeydown=null}},[P,x]),Ke(le,{opened:!0,className:"doc-search-root",onClose:P,padding:"md",gap:"md",size:"md",portalProps:x==="modal"?{target:X,reuseTargetNode:!0}:void 0,"data-ai-kit-theme":fe,"data-ai-kit-variation":x,children:[x==="modal"&&E(ft.Overlay,{}),Ke(Ve,{w:"100%",style:{left:0},children:[x==="modal"&&Ke(ft.Header,{style:{zIndex:1e3},children:[E(Ti,{className:"doc-search-title-icon"}),E(ft.Title,{children:xe.get(ce)}),E(ft.CloseButton,{})]}),E(Oe,{w:"100%",style:{zIndex:1001},children:E(vt,{enabled:x!=="modal",working:ee,variation:x,children:E(Ta,{shadow:"sm",radius:"md",p:"md",children:Ke(Mt,{gap:"sm",children:[x!=="modal"&&E(wi,{order:4,style:{margin:0},children:xe.get(ce)}),Ke(Rt,{gap:"sm",align:"flex-end",wrap:"nowrap",children:[E(vi,{style:{flex:1},value:S,onChange:v=>ke(v.currentTarget.value),placeholder:xe.get("Search the documentation\u2026"),disabled:ee,onKeyDown:v=>{v.key==="Enter"&&ye&&(v.preventDefault(),_())}}),E(va,{variant:"filled",size:"sm",leftSection:Je,onClick:()=>{_()},disabled:!ye,className:c?"doc-search-button":"doc-search-button-no-title",children:c?xe.get("Search"):null}),ee?E(va,{variant:"outline",size:"sm",onClick:O,children:xe.get("Stop")}):null]}),B?E(yi,{color:"red",title:xe.get("Error"),children:B}):null,ee&&it&&E(vt,{enabled:x==="modal",working:!0,variation:x,children:Ke(Rt,{justify:"center",align:"center",gap:"sm",m:"sm",pr:"lg",children:[E(Ai,{size:"sm"}),E(kt,{size:"sm",c:"dimmed",children:it})]})}),b?.result?Ke(Ra,{children:[E(wa,{}),Ke(Mt,{gap:"xs","data-doc-search-result":!0,children:[E(kt,{size:"sm",c:"dimmed","data-doc-search-result-title":!0,children:xe.get("AI Summary")}),E(zi,{remarkPlugins:[xi],rehypePlugins:[Ci],"data-doc-search-result-content":!0,children:je||Le})]})]}):null,M&&(b?.citations?.docs?.length||b?.citations?.chunks?.length)?Ke(Ra,{children:[E(wa,{}),Ke(Mt,{gap:"sm","data-doc-search-sources":!0,children:[E(kt,{size:"sm",c:"dimmed","data-doc-search-sources-title":!0,children:xe.get("Sources")}),W.map(({doc:v})=>{let R=v.sourceUrl?.trim()||void 0,be=v.docId?we.get(v.docId):void 0,de=v.title?.trim()||v.docId,Pe=Ke(kt,{fw:600,style:{display:"inline"},children:[be?`${be}. `:"",de]});return E(Ta,{withBorder:!0,radius:"md",p:"sm",children:E(Mt,{gap:"xs",children:E(Rt,{justify:"space-between",align:"flex-start",children:Ke(Mt,{gap:2,style:{flex:1},"data-doc-search-source":!0,children:[R?E(Aa,{href:R,target:"_blank",rel:"noreferrer",style:{textDecoration:"none"},onClick:T=>{o&&(T.preventDefault(),o?.(v))},"data-doc-search-source-title":!0,children:Pe}):Pe,E(Aa,{href:R,target:"_blank",rel:"noreferrer",style:{textDecoration:"none"},onClick:T=>{o&&(T.preventDefault(),o?.(v))},"data-doc-search-source-url":!0,children:v.sourceUrl}),v.author?E(kt,{size:"xs",c:"dimmed","data-doc-search-source-author":!0,children:v.author}):null,v.description?E(kt,{size:"sm",c:"dimmed",fs:"italic","data-doc-search-source-description":!0,children:v.description}):null]})})})},v.docId)})]})]}):null,!ee&&!B&&!b?.result?E(kt,{size:"sm",c:"dimmed","data-doc-search-no-results":!0,children:xe.get("Enter a search query to start.")}):null,E(Ht,{variation:x})]})})})})]})]})},Di=dt(Mi);export{ki as AiChatbot,Fr as AiFeature,fn as DEFAULT_CHATBOT_LABELS,Di as DocSearch,$n as isBackendConfigured,on as markdownToHtml,ut as readDefaultOutputLanguage,Ct as stripCodeFence,lt as translations,At as useAiRun,dt as withAiKitShell};
|
package/package.json
CHANGED
|
@@ -477,12 +477,6 @@ const AiFeatureBase: FC<AiFeatureProps & AiKitShellInjectedProps> = (props) => {
|
|
|
477
477
|
case "generateImageMetadata":
|
|
478
478
|
return Boolean(image);
|
|
479
479
|
case "translate":
|
|
480
|
-
console.log(
|
|
481
|
-
"detectedLanguage",
|
|
482
|
-
detectedLanguage,
|
|
483
|
-
"outputLanguage",
|
|
484
|
-
outputLanguage,
|
|
485
|
-
);
|
|
486
480
|
return (
|
|
487
481
|
Boolean(text && text.trim().length > 0) &&
|
|
488
482
|
(!outputLanguage || detectedLanguage !== outputLanguage)
|
|
@@ -325,6 +325,8 @@ const DocSearchBase: FC<Props> = (props) => {
|
|
|
325
325
|
/>
|
|
326
326
|
|
|
327
327
|
<Button
|
|
328
|
+
variant="filled"
|
|
329
|
+
size="sm"
|
|
328
330
|
leftSection={buttonLeftIcon}
|
|
329
331
|
onClick={() => void onSearch()}
|
|
330
332
|
disabled={!canSearch}
|
|
@@ -338,7 +340,7 @@ const DocSearchBase: FC<Props> = (props) => {
|
|
|
338
340
|
</Button>
|
|
339
341
|
|
|
340
342
|
{busy ? (
|
|
341
|
-
<Button variant="
|
|
343
|
+
<Button variant="outline" size="sm" onClick={cancel}>
|
|
342
344
|
{I18n.get("Stop")}
|
|
343
345
|
</Button>
|
|
344
346
|
) : null}
|