@smart-cloud/ai-kit-ui 1.1.38 → 1.1.39
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 +5 -5
- package/package.json +1 -1
- package/src/ai-feature/AiFeature.tsx +1 -0
package/dist/index.cjs
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
inherits: true;
|
|
5
5
|
initial-value: 0deg;
|
|
6
6
|
}
|
|
7
|
-
`,(n.head??n.documentElement).appendChild(a)}function Pn({stylesheets:n,children:a,rootElementId:p,mode:g="local",overlayRootId:i="ai-kit-overlay-root",setHost:f}){let S=(0,Ce.useRef)(null),[D,Q]=(0,Ce.useState)(null),[X,F]=(0,Ce.useState)(null),V=(0,Ce.useMemo)(()=>[...n].join("|"),[n]);(0,Ce.useLayoutEffect)(()=>{if(!S.current)return;let te=g==="overlay"?wa():S.current.ownerDocument,A;if(g==="overlay"){let K=te.getElementById(i);K||(K=te.createElement("div"),K.id=i,K.style.position="fixed",K.style.inset="0",K.style.width="0",K.style.height="0",K.style.zIndex="2147483647",K.style.pointerEvents="none",te.body.appendChild(K)),A=K}else A=S.current;f(A);let u=A.shadowRoot??A.attachShadow({mode:"open"}),x=u.querySelector(`#${CSS.escape(p)}`);x||(x=te.createElement("div"),x.id=p,x.style.margin="0",g==="overlay"&&(x.style.pointerEvents="auto"),u.appendChild(x));let ke=()=>x.getAttribute("data-mantine-color-scheme"),Te=()=>x.getAttribute("data-ai-kit-variation"),G=()=>{A.setAttribute("data-ai-kit-variation",Te()||"default"),A.setAttribute("data-mantine-color-scheme",ke()||"auto")};G();let y=new MutationObserver(G);y.observe(x,{attributes:!0,attributeFilter:["data-mantine-color-scheme"]});let R=window.matchMedia?.("(prefers-color-scheme: dark)"),_=()=>G();return R?.addEventListener?.("change",_),za(te),Ra(te,x,u,V?V.split("|"):[]),Q(u),F(x),()=>{y.disconnect(),R?.removeEventListener?.("change",_)}},[g,i,p,V]);let ge=(0,Ce.useMemo)(()=>X?(0,xn.default)({key:g==="overlay"?"ai-kit-ov":"ai-kit-local",container:X}):null,[X,g]);return(0,Ot.jsx)("div",{ref:S,style:{outline:"none",boxShadow:"none",backgroundColor:"transparent"},children:X&&D&&ge?(0,Mn.createPortal)((0,Ot.jsx)(Ln.CacheProvider,{value:ge,children:a({rootElement:X,shadowRoot:D})}),X):null})}var it=require("react/jsx-runtime"),Sa=n=>{let a=5381;for(let p=0;p<n.length;p++)a=(a<<5)+a^n.charCodeAt(p);return(a>>>0).toString(36)},Dn=n=>n.replace(/<\/?(?:style|script)\b[^>]*>/gi,"").replace(/@import\s+['"]?javascript:[^;]+;?/gi,"").replace(/url\(\s*(['"]?)javascript:[^)]+\)/gi,"").replace(/\bexpression\s*\([^)]*\)/gi,""),En="ai-kit-style-text";function Ze(n,a){let p=g=>{let{store:i,variation:f,showOpenButton:S,colors:D,colorMode:Q,primaryColor:X,primaryShade:F,themeOverrides:V,language:ge,direction:te}={...g,...a},[A,u]=(0,Re.useState)(null),x=(0,Tt.useSelect)(()=>(0,vt.getStoreSelect)(i).getLanguage()),ke=(0,Tt.useSelect)(()=>(0,vt.getStoreSelect)(i).getDirection()),Te=(0,Tt.useSelect)(()=>(0,vt.getStoreSelect)(i).getCustomTranslations()),[G]=(0,Re.useState)(new URLSearchParams(window.location.search).get("language")??""),[y]=(0,Re.useState)(new URLSearchParams(window.location.search).get("direction")??""),R=(0,Re.useMemo)(()=>{At.I18n.putVocabularies(Te||{});let L=x||G||ge;if(!L||L==="system"){At.I18n.setLanguage("");return}return At.I18n.setLanguage(L),L},[ge,G,x,Te]),_=(0,Re.useMemo)(()=>{let L=ke||y||te;return!L||L==="auto"?R==="ar"||R==="he"?"rtl":"ltr":L},[R,te,ke,y]),K=(0,Re.useMemo)(()=>[WpSuite?.constants?.aiKit?.mantineCssHref,WpSuite?.constants?.aiKit?.aiKitUiCssHref],[WpSuite]),re;D&&(re={},Object.keys(D).forEach(L=>{try{re[L]=(0,Un.generateColors)(D[L])}catch{re[L]=(0,oe.colorsTuple)(D[L])}}));let N=(0,oe.createTheme)({respectReducedMotion:!0,...re&&{colors:re},...X&&[...Object.keys(oe.DEFAULT_THEME.colors),...Object.keys(re||{})].includes(X)&&{primaryColor:X},...F&&Object.keys(F).length>0&&{primaryShade:{light:F.light??(typeof oe.DEFAULT_THEME.primaryShade=="object"?oe.DEFAULT_THEME.primaryShade.light:oe.DEFAULT_THEME.primaryShade??6),dark:F.dark??(typeof oe.DEFAULT_THEME.primaryShade=="object"?oe.DEFAULT_THEME.primaryShade.dark:oe.DEFAULT_THEME.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"}}}}}}}),$=(0,Re.useMemo)(()=>V?Sa(V):"",[V]);return(0,Re.useEffect)(()=>{if(!A)return;let L=A.shadowRoot.getElementById(En);if(V)if(L)(L.getAttribute("data-hash")||"")!==$&&(L.textContent=Dn(V));else{let
|
|
8
|
-
`);return(0,ot.jsx)(Bn.Tooltip,{label:Q||Qe.I18n.get("Suggested change"),multiline:!0,children:(0,ot.jsx)("span",{style:{textDecoration:"underline",textDecorationStyle:"wavy",cursor:"help",padding:"0 1px"},children:g.original})},i)})})}var wt=Ie(require("rehype-sanitize"),1),Nn=Ie(require("rehype-stringify"),1),Hn=Ie(require("remark-gfm"),1),Gn=Ie(require("remark-parse"),1),jn=Ie(require("remark-rehype"),1),Wn=require("unified"),Rt=async n=>String(await(0,Wn.unified)().use(Gn.default).use(Hn.default).use(jn.default,{allowDangerousHtml:!1}).use(wt.default,wt.defaultSchema).use(Nn.default).process(n));var s=require("react/jsx-runtime");t.I18n.putVocabularies(_e);var zt=(0,M.getAiKitPlugin)(),Ca={type:"object",properties:{title:{type:"string",minLength:1,maxLength:60},excerpt:{type:"string",minLength:1,maxLength:155}},required:["title","excerpt"],additionalProperties:!1},xa={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 La(n){let a=(n??"").trim();return a&&a.toLowerCase().split("-")[0]||null}async function Ht(n,a){let p=await(0,M.detectLanguage)({text:n},a);return La(p.result?.candidates?.[0]?.detectedLanguage)??"en"}async function Ma(n,a,p){let g=$e(n||"").trim();if(!g)return{};try{let i=JSON.parse(g);return{alt_text:typeof i.alt=="string"?a&&a!=="en"?(await(0,M.translate)({text:i.alt,sourceLanguage:"en",targetLanguage:a},p)).result:i.alt:"",title:typeof i.title=="string"?a&&a!=="en"?(await(0,M.translate)({text:i.title,sourceLanguage:"en",targetLanguage:a})).result:i.title:"",caption:typeof i.caption=="string"?a&&a!=="en"?(await(0,M.translate)({text:i.caption,sourceLanguage:"en",targetLanguage:a})).result:i.caption:"",description:typeof i.description=="string"?a&&a!=="en"?(await(0,M.translate)({text:i.description,sourceLanguage:"en",targetLanguage:a})).result:i.description:""}}catch(i){return console.warn("AI Kit: failed to parse JSON metadata output",i),{}}}async function Pa(n,a,p){let g=$e(n||"").trim();if(!g)return{};try{let i=JSON.parse(g);return{title:typeof i.title=="string"?a&&a!=="en"?(await(0,M.translate)({text:i.title,sourceLanguage:"en",targetLanguage:a},p)).result:i.title:"",excerpt:typeof i.excerpt=="string"?a&&a!=="en"?(await(0,M.translate)({text:i.excerpt,sourceLanguage:"en",targetLanguage:a},p)).result:i.excerpt:""}}catch(i){return console.warn("AI Kit: failed to parse JSON metadata output",i),{}}}var Da=n=>{let{allowOverride:a,autoRun:p=!0,editable:g=!0,onDeviceTimeout:i,variation:f=n.variation||"default",title:S,showOpenButton:D=!1,showOpenButtonTitle:Q=!0,showOpenButtonIcon:X=!0,openButtonTitle:F,openButtonIcon:V,showRegenerateOnBackendButton:ge=!0,acceptButtonTitle:te=n.acceptButtonTitle||"Accept",optionsDisplay:A=n.optionsDisplay||"collapse",mode:u,context:x,modeOverride:ke,colorMode:Te,default:G,onClose:y,onAccept:R,onOptionsChanged:_,language:K,rootElement:re}=n,N={text:a?.text??!0,instructions:a?.instructions??!0,tone:a?.tone??!0,length:a?.length??!0,type:a?.type??!0,outputLanguage:a?.outputLanguage??!0,outputFormat:a?.outputFormat??!0},$=(0,C.useMemo)(()=>!!(u==="write"&&N?.text||(u==="write"||u==="rewrite"||u==="generateImageMetadata"||u==="generatePostMetadata")&&N?.instructions||(u==="write"||u==="rewrite")&&N?.tone||(u==="write"||u==="rewrite"||u==="summarize")&&N?.length||u==="summarize"&&N?.type||N?.outputLanguage),[N]),[L,
|
|
9
|
-
`+(ie?.trim()||""),Z);return Se!==U&&Se!=="en"&&(
|
|
7
|
+
`,(n.head??n.documentElement).appendChild(a)}function Pn({stylesheets:n,children:a,rootElementId:p,mode:g="local",overlayRootId:i="ai-kit-overlay-root",setHost:f}){let S=(0,Ce.useRef)(null),[D,Q]=(0,Ce.useState)(null),[X,F]=(0,Ce.useState)(null),V=(0,Ce.useMemo)(()=>[...n].join("|"),[n]);(0,Ce.useLayoutEffect)(()=>{if(!S.current)return;let te=g==="overlay"?wa():S.current.ownerDocument,A;if(g==="overlay"){let K=te.getElementById(i);K||(K=te.createElement("div"),K.id=i,K.style.position="fixed",K.style.inset="0",K.style.width="0",K.style.height="0",K.style.zIndex="2147483647",K.style.pointerEvents="none",te.body.appendChild(K)),A=K}else A=S.current;f(A);let u=A.shadowRoot??A.attachShadow({mode:"open"}),x=u.querySelector(`#${CSS.escape(p)}`);x||(x=te.createElement("div"),x.id=p,x.style.margin="0",g==="overlay"&&(x.style.pointerEvents="auto"),u.appendChild(x));let ke=()=>x.getAttribute("data-mantine-color-scheme"),Te=()=>x.getAttribute("data-ai-kit-variation"),G=()=>{A.setAttribute("data-ai-kit-variation",Te()||"default"),A.setAttribute("data-mantine-color-scheme",ke()||"auto")};G();let y=new MutationObserver(G);y.observe(x,{attributes:!0,attributeFilter:["data-mantine-color-scheme"]});let R=window.matchMedia?.("(prefers-color-scheme: dark)"),_=()=>G();return R?.addEventListener?.("change",_),za(te),Ra(te,x,u,V?V.split("|"):[]),Q(u),F(x),()=>{y.disconnect(),R?.removeEventListener?.("change",_)}},[g,i,p,V]);let ge=(0,Ce.useMemo)(()=>X?(0,xn.default)({key:g==="overlay"?"ai-kit-ov":"ai-kit-local",container:X}):null,[X,g]);return(0,Ot.jsx)("div",{ref:S,style:{outline:"none",boxShadow:"none",backgroundColor:"transparent"},children:X&&D&&ge?(0,Mn.createPortal)((0,Ot.jsx)(Ln.CacheProvider,{value:ge,children:a({rootElement:X,shadowRoot:D})}),X):null})}var it=require("react/jsx-runtime"),Sa=n=>{let a=5381;for(let p=0;p<n.length;p++)a=(a<<5)+a^n.charCodeAt(p);return(a>>>0).toString(36)},Dn=n=>n.replace(/<\/?(?:style|script)\b[^>]*>/gi,"").replace(/@import\s+['"]?javascript:[^;]+;?/gi,"").replace(/url\(\s*(['"]?)javascript:[^)]+\)/gi,"").replace(/\bexpression\s*\([^)]*\)/gi,""),En="ai-kit-style-text";function Ze(n,a){let p=g=>{let{store:i,variation:f,showOpenButton:S,colors:D,colorMode:Q,primaryColor:X,primaryShade:F,themeOverrides:V,language:ge,direction:te}={...g,...a},[A,u]=(0,Re.useState)(null),x=(0,Tt.useSelect)(()=>(0,vt.getStoreSelect)(i).getLanguage()),ke=(0,Tt.useSelect)(()=>(0,vt.getStoreSelect)(i).getDirection()),Te=(0,Tt.useSelect)(()=>(0,vt.getStoreSelect)(i).getCustomTranslations()),[G]=(0,Re.useState)(new URLSearchParams(window.location.search).get("language")??""),[y]=(0,Re.useState)(new URLSearchParams(window.location.search).get("direction")??""),R=(0,Re.useMemo)(()=>{At.I18n.putVocabularies(Te||{});let L=x||G||ge;if(!L||L==="system"){At.I18n.setLanguage("");return}return At.I18n.setLanguage(L),L},[ge,G,x,Te]),_=(0,Re.useMemo)(()=>{let L=ke||y||te;return!L||L==="auto"?R==="ar"||R==="he"?"rtl":"ltr":L},[R,te,ke,y]),K=(0,Re.useMemo)(()=>[WpSuite?.constants?.aiKit?.mantineCssHref,WpSuite?.constants?.aiKit?.aiKitUiCssHref],[WpSuite]),re;D&&(re={},Object.keys(D).forEach(L=>{try{re[L]=(0,Un.generateColors)(D[L])}catch{re[L]=(0,oe.colorsTuple)(D[L])}}));let N=(0,oe.createTheme)({respectReducedMotion:!0,...re&&{colors:re},...X&&[...Object.keys(oe.DEFAULT_THEME.colors),...Object.keys(re||{})].includes(X)&&{primaryColor:X},...F&&Object.keys(F).length>0&&{primaryShade:{light:F.light??(typeof oe.DEFAULT_THEME.primaryShade=="object"?oe.DEFAULT_THEME.primaryShade.light:oe.DEFAULT_THEME.primaryShade??6),dark:F.dark??(typeof oe.DEFAULT_THEME.primaryShade=="object"?oe.DEFAULT_THEME.primaryShade.dark:oe.DEFAULT_THEME.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"}}}}}}}),$=(0,Re.useMemo)(()=>V?Sa(V):"",[V]);return(0,Re.useEffect)(()=>{if(!A)return;let L=A.shadowRoot.getElementById(En);if(V)if(L)(L.getAttribute("data-hash")||"")!==$&&(L.textContent=Dn(V));else{let q=A.shadowRoot.ownerDocument.createElement("style");q.id=En,q.setAttribute("data-hash",$),q.textContent=Dn(V),A.shadowRoot.appendChild(q)}else L&&L.remove()},[A,V,$]),(0,it.jsx)(Pn,{mode:f==="modal"&&!S?"overlay":"local",variation:f,overlayRootId:"ai-kit-overlay-root",stylesheets:K,setHost:u,rootElementId:f==="modal"&&!S?"ai-kit-portal-root":"ai-kit-inline-root",children:({rootElement:L})=>{L.setAttribute("data-ai-kit-variation",f||"default"),L.setAttribute("dir",_),R&&L.setAttribute("lang",R);let q=Q==="auto"?window.matchMedia?.("(prefers-color-scheme: dark)")?.matches?"dark":"light":Q;return(0,it.jsx)(oe.DirectionProvider,{initialDirection:_,children:(0,it.jsx)(oe.MantineProvider,{forceColorScheme:q,theme:N,getRootElement:()=>L,children:(0,it.jsx)(n,{...g,colorMode:q,language:R,rootElement:L})})})}})};return p.displayName=`withAiKitShell(${n.displayName??n.name??"Component"})`,p}var Kt=require("react/jsx-runtime");function Nt({enabled:n=!0,working:a=!1,variation:p="default",children:g}){return(0,Kt.jsx)("div",{className:"ai-kit-feature-border","data-ai-kit-active":!!(n&&a)?"true":"false","data-ai-kit-variation":p,children:(0,Kt.jsx)("div",{className:"ai-kit-feature-border__content",children:g})})}var Bn=require("@mantine/core"),On=require("react"),Qe=require("aws-amplify/utils"),ot=require("react/jsx-runtime");function Ia(n){let a=[...n].sort((i,f)=>i.startIndex-f.startIndex),p=[],g=-1;for(let i of a)typeof i.startIndex!="number"||typeof i.endIndex!="number"||i.startIndex<0||i.endIndex<=i.startIndex||i.startIndex<g||(p.push(i),g=i.endIndex);return p}function Kn({original:n,corrections:a}){let p=(0,On.useMemo)(()=>{let g=Ia(a||[]),i=[],f=0;for(let S of g){S.startIndex>f&&i.push({kind:"plain",text:n.slice(f,S.startIndex)});let D=n.slice(S.startIndex,S.endIndex);i.push({kind:"corr",original:D,corr:S}),f=S.endIndex}return f<n.length&&i.push({kind:"plain",text:n.slice(f)}),i},[n,a]);return(0,ot.jsx)("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:p.map((g,i)=>{if(g.kind==="plain")return(0,ot.jsx)("span",{children:g.text},i);let f=(g.corr.replacement??g.corr.correction??"").trim(),S=(g.corr.explanation??"").trim(),D=(g.corr.type??"").trim(),Q=[D?Qe.I18n.get("Type")+": - "+Qe.I18n.get(D):"",f?Qe.I18n.get("Replace with")+": "+f:"",S?Qe.I18n.get("Why")+": "+S:""].filter(Boolean).join(`
|
|
8
|
+
`);return(0,ot.jsx)(Bn.Tooltip,{label:Q||Qe.I18n.get("Suggested change"),multiline:!0,children:(0,ot.jsx)("span",{style:{textDecoration:"underline",textDecorationStyle:"wavy",cursor:"help",padding:"0 1px"},children:g.original})},i)})})}var wt=Ie(require("rehype-sanitize"),1),Nn=Ie(require("rehype-stringify"),1),Hn=Ie(require("remark-gfm"),1),Gn=Ie(require("remark-parse"),1),jn=Ie(require("remark-rehype"),1),Wn=require("unified"),Rt=async n=>String(await(0,Wn.unified)().use(Gn.default).use(Hn.default).use(jn.default,{allowDangerousHtml:!1}).use(wt.default,wt.defaultSchema).use(Nn.default).process(n));var s=require("react/jsx-runtime");t.I18n.putVocabularies(_e);var zt=(0,M.getAiKitPlugin)(),Ca={type:"object",properties:{title:{type:"string",minLength:1,maxLength:60},excerpt:{type:"string",minLength:1,maxLength:155}},required:["title","excerpt"],additionalProperties:!1},xa={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 La(n){let a=(n??"").trim();return a&&a.toLowerCase().split("-")[0]||null}async function Ht(n,a){let p=await(0,M.detectLanguage)({text:n},a);return La(p.result?.candidates?.[0]?.detectedLanguage)??"en"}async function Ma(n,a,p){let g=$e(n||"").trim();if(!g)return{};try{let i=JSON.parse(g);return{alt_text:typeof i.alt=="string"?a&&a!=="en"?(await(0,M.translate)({text:i.alt,sourceLanguage:"en",targetLanguage:a},p)).result:i.alt:"",title:typeof i.title=="string"?a&&a!=="en"?(await(0,M.translate)({text:i.title,sourceLanguage:"en",targetLanguage:a})).result:i.title:"",caption:typeof i.caption=="string"?a&&a!=="en"?(await(0,M.translate)({text:i.caption,sourceLanguage:"en",targetLanguage:a})).result:i.caption:"",description:typeof i.description=="string"?a&&a!=="en"?(await(0,M.translate)({text:i.description,sourceLanguage:"en",targetLanguage:a})).result:i.description:""}}catch(i){return console.warn("AI Kit: failed to parse JSON metadata output",i),{}}}async function Pa(n,a,p){let g=$e(n||"").trim();if(!g)return{};try{let i=JSON.parse(g);return{title:typeof i.title=="string"?a&&a!=="en"?(await(0,M.translate)({text:i.title,sourceLanguage:"en",targetLanguage:a},p)).result:i.title:"",excerpt:typeof i.excerpt=="string"?a&&a!=="en"?(await(0,M.translate)({text:i.excerpt,sourceLanguage:"en",targetLanguage:a},p)).result:i.excerpt:""}}catch(i){return console.warn("AI Kit: failed to parse JSON metadata output",i),{}}}var Da=n=>{let{allowOverride:a,autoRun:p=!0,editable:g=!0,onDeviceTimeout:i,variation:f=n.variation||"default",title:S,showOpenButton:D=!1,showOpenButtonTitle:Q=!0,showOpenButtonIcon:X=!0,openButtonTitle:F,openButtonIcon:V,showRegenerateOnBackendButton:ge=!0,acceptButtonTitle:te=n.acceptButtonTitle||"Accept",optionsDisplay:A=n.optionsDisplay||"collapse",mode:u,context:x,modeOverride:ke,colorMode:Te,default:G,onClose:y,onAccept:R,onOptionsChanged:_,language:K,rootElement:re}=n,N={text:a?.text??!0,instructions:a?.instructions??!0,tone:a?.tone??!0,length:a?.length??!0,type:a?.type??!0,outputLanguage:a?.outputLanguage??!0,outputFormat:a?.outputFormat??!0},$=(0,C.useMemo)(()=>!!(u==="write"&&N?.text||(u==="write"||u==="rewrite"||u==="generateImageMetadata"||u==="generatePostMetadata")&&N?.instructions||(u==="write"||u==="rewrite")&&N?.tone||(u==="write"||u==="rewrite"||u==="summarize")&&N?.length||u==="summarize"&&N?.type||N?.outputLanguage),[N]),[L,q]=(0,C.useState)(),[le,st]=(0,C.useState)(!D),[Ye,ue]=(0,C.useState)(!1),[lt,ut]=(0,C.useState)(!1),[He,ne]=(0,C.useState)(null),[E,Y]=(0,C.useState)(null),[Le,Ge]=(0,C.useState)(G?.text),[je]=(0,C.useState)(G?.image),[ie,Je]=(0,C.useState)(G?.instructions),[Pe,dt]=(0,C.useState)(),[J,Lt]=(0,C.useState)(G?.inputLanguage),[We,Mt]=(0,C.useState)(G?.outputFormat),[P,De]=(0,C.useState)(G?.outputLanguage),[be,ze]=(0,C.useState)(G?.length),[me,Pt]=(0,C.useState)(G?.tone),[Me,Ee]=(0,C.useState)(G?.type),Ae=(0,C.useRef)(!1),pe=(0,C.useMemo)(()=>{K&&t.I18n.setLanguage(K||"en");let r;switch(u){default:case"summarize":r=t.I18n.get("Summarize");break;case"proofread":r=t.I18n.get("Proofread");break;case"write":r=t.I18n.get("Write");break;case"rewrite":r=t.I18n.get("Rewrite");break;case"translate":r=t.I18n.get("Translate");break;case"generatePostMetadata":r=t.I18n.get("Generate Post Metadata");break;case"generateImageMetadata":r=t.I18n.get("Generate Image Metadata");break}return r},[u,K]),ct=(0,C.useCallback)(r=>{if(!r||r.silent)return null;let k=r.step,U=t.I18n.get((r.message??"").trim()),O=typeof r.progress=="number"?r.progress:null,ee=O==null?null:Math.round(O*100);switch(k){case"decide":return U||t.I18n.get("Checking capabilities...");case"on-device:init":return U||t.I18n.get("Initializing on-device AI...");case"on-device:download":return U||(ee==null?t.I18n.get("Downloading model..."):t.I18n.get("Downloading model...")+" "+ee+"%");case"on-device:ready":return U||t.I18n.get("On-device model ready.");case"on-device:run":return U||t.I18n.get("Generating...");case"backend:request":case"backend:waiting":case"backend:response":switch(u){case"translate":return t.I18n.get("Translating text");case"rewrite":return t.I18n.get("Rewriting text");case"summarize":return t.I18n.get("Summarizing");case"proofread":return t.I18n.get("Proofreading");default:return t.I18n.get("Generating text")}case"done":return U||t.I18n.get("Done.");case"error":return U||t.I18n.get("Something went wrong.");default:return U||t.I18n.get("Working...")}},[K,u]),de=(0,C.useMemo)(()=>Le??G?.getText,[Le,G]),ae=(0,C.useMemo)(()=>{let r=typeof de=="function"?de():de;switch(u){case"generateImageMetadata":return!!je;case"translate":return!!(r&&r.trim().length>0)&&P&&Pe!==P;case"summarize":case"proofread":case"rewrite":case"write":case"generatePostMetadata":return!!(r&&r.trim().length>0);default:return!1}},[de,u,je,Pe,P,le]),T=rt(),Fe=ct(T.statusEvent)??(L?t.I18n.get(L):null),Ue=(0,C.useCallback)(async r=>{if(ae){$&&u!=="proofread"&&ae&&ue(!1),ne(null),Y(null);try{let k=typeof de=="function"?de():de;switch(u){case"summarize":{let U=await T.run(async({signal:O,onStatus:ee})=>{let H=(P&&P!=="auto"?P:null)||Ke(),B={text:k.trim(),format:We==="plain-text"?"plain-text":"markdown",length:be,type:Me,outputLanguage:H};return(await(0,M.summarize)(B,{signal:O,onStatus:ee,context:x,modeOverride:r,onDeviceTimeoutOverride:i})).result});Y(U??"");break}case"proofread":{let U=await T.run(async({signal:O,onStatus:ee})=>{let H=[];try{q("Detecting input language...");let ft=(await(0,M.detectLanguage)({text:k.trim()},{signal:O,context:x,modeOverride:r,onDeviceTimeoutOverride:i,silent:!0})).result?.candidates?.filter(he=>he.confidence&&he.confidence>.1).map(he=>he.detectedLanguage);H.push(...ft)}catch{H.push("en")}let B={text:k.trim(),expectedInputLanguages:H};return(await(0,M.proofread)(B,{signal:O,onStatus:ee,context:x,modeOverride:r,onDeviceTimeoutOverride:i})).result});Y(U??"");break}case"translate":{let U=await T.run(async({signal:O,onStatus:ee})=>{let H=J??"auto";H==="auto"&&(q("Detecting input language..."),H=await Ht(k.trim(),{signal:O,context:x,modeOverride:r,onDeviceTimeoutOverride:i,silent:!0})),dt(H);let B=(P&&P!=="auto"?P:null)||Ke();if(B===H)throw ne(t.I18n.get("Input and output languages cannot be the same.")),new Error(t.I18n.get("Input and output languages cannot be the same."));let Z={text:k.trim(),sourceLanguage:H,targetLanguage:B};return(await(0,M.translate)(Z,{signal:O,onStatus:ee,context:x,modeOverride:r,onDeviceTimeoutOverride:i})).result});Y(U??"");break}case"rewrite":{let U=await T.run(async({signal:O,onStatus:ee})=>{let H=(P&&P!=="auto"?P:null)||Ke();P==="auto"&&(q("Detecting input language..."),H=await Ht(k.trim(),{signal:O,context:x,modeOverride:r,onDeviceTimeoutOverride:i,silent:!0}),De(H));let B={text:k.trim(),context:ie?.trim()||void 0,format:We==="plain-text"?"plain-text":"markdown",tone:me,length:be,outputLanguage:H};return(await(0,M.rewrite)(B,{signal:O,onStatus:ee,context:x,modeOverride:r,onDeviceTimeoutOverride:i})).result});Y(U??"");break}case"write":{let U=(P&&P!=="auto"?P:null)||Ke(),O={prompt:k.trim(),context:ie?.trim()||void 0,format:We==="plain-text"?"plain-text":"markdown",tone:me,length:be,outputLanguage:U},ee=await T.run(async({signal:H,onStatus:B})=>{let Z={signal:H,context:x,modeOverride:r,onDeviceTimeoutOverride:i,silent:!0};q("Detecting input language...");let Se=await Ht(k.trim()+`
|
|
9
|
+
`+(ie?.trim()||""),Z);return Se!==U&&Se!=="en"&&(q("Translating instructions..."),O.prompt=(await(0,M.translate)({text:O.prompt,sourceLanguage:Se,targetLanguage:"en"},Z)).result,ie&&(O.context=(await(0,M.translate)({text:ie,sourceLanguage:Se,targetLanguage:"en"},Z)).result)),(await(0,M.write)(O,{signal:H,onStatus:B,context:x,modeOverride:r,onDeviceTimeoutOverride:i})).result});Y(ee??"");break}case"generatePostMetadata":{let U=[{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.
|
|
12
12
|
Be accurate: do not invent facts; if unsure, use neutral wording.
|
|
@@ -14,7 +14,7 @@ Do not add extra keys, no markdown, no explanations.
|
|
|
14
14
|
Follow the response constraint strictly.
|
|
15
15
|
`+(ie?`
|
|
16
16
|
Follow these additional instructions: ${ie}`:"")},{role:"user",content:`Post content:
|
|
17
|
-
${k.trim()}`}],O=await T.run(async({signal:B,onStatus:Z})=>(await(0,M.prompt)({messages:U,outputLanguage:"en",responseConstraint:Ca},{signal:B,onStatus:Z,context:x,modeOverride:r,onDeviceTimeoutOverride:i})).result);if(!O){
|
|
17
|
+
${k.trim()}`}],O=await T.run(async({signal:B,onStatus:Z})=>(await(0,M.prompt)({messages:U,outputLanguage:"en",responseConstraint:Ca},{signal:B,onStatus:Z,context:x,modeOverride:r,onDeviceTimeoutOverride:i})).result);if(!O){Y("");return}let ee=$e(O).trim(),H=(P&&P!=="auto"?P:null)||Ke();try{q("Translating result...");let B=await T.run(async({signal:Z})=>await Pa(ee,H,{signal:Z,context:x,modeOverride:r,onDeviceTimeoutOverride:i,silent:!0}));Y(B)}catch(B){Y(ee),console.warn("AI Kit: failed to parse SEO JSON",B)}break}case"generateImageMetadata":{let U=[{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
|
`+(ie?`
|
|
31
|
-
Follow these additional instructions: ${ie}`:"")},{role:"user",content:"What can you see on this image according to the optional knowledge base and shared context?"}].filter(Boolean),O=await T.run(async({signal:B,onStatus:Z})=>(await(0,M.prompt)({messages:U,images:[je],outputLanguage:"en",responseConstraint:xa},{signal:B,onStatus:Z,context:x,modeOverride:r,onDeviceTimeoutOverride:i})).result);if(!O){q("");return}let ee=(P&&P!=="auto"?P:null)||Ke(),H=$e(O).trim();try{J("Translating result...");let B=await T.run(async({signal:Z})=>await Ma(H,ee,{signal:Z,context:x,modeOverride:r,onDeviceTimeoutOverride:i,silent:!0}));q(B)}catch(B){q(H),console.warn("AI Kit: failed to parse SEO JSON",B)}break}}}catch(k){ne(k instanceof Error?k.message:t.I18n.get("An unknown error occurred."))}J(void 0)}},[K,T,ie,be,P,Le,me,x,u,Me,Y,ae,$]),gt=(0,C.useCallback)(async()=>{await Ue("backend-only")},[Ue]),nt=(0,C.useCallback)(r=>{switch(u){case"proofread":return(0,s.jsx)(xe.IconCircleDashedCheck,{className:r});case"translate":return(0,s.jsx)(xe.IconLanguage,{className:r});case"summarize":return(0,s.jsx)(xe.IconSum,{className:r});case"rewrite":case"write":return(0,s.jsx)(xe.IconPencilCode,{className:r});case"generateImageMetadata":case"generatePostMetadata":return(0,s.jsx)(xe.IconSeo,{className:r});default:return(0,s.jsx)(M.AiKitFeatureIcon,{mode:u,className:r})}},[u]),qe=(0,C.useCallback)(()=>{switch(u){case"proofread":return T.lastSource?t.I18n.get("Proofread again"):t.I18n.get("Proofread");case"translate":return T.lastSource?t.I18n.get("Translate again"):t.I18n.get("Translate");case"rewrite":return T.lastSource?t.I18n.get("Rewrite again"):t.I18n.get("Rewrite");case"summarize":return T.lastSource?t.I18n.get("Summarize again"):t.I18n.get("Summarize");default:return T.lastSource?t.I18n.get("Regenerate"):t.I18n.get("Generate")}},[K,T.lastSource,u]),mt=(0,C.useCallback)(()=>{switch(u){case"proofread":return t.I18n.get("Proofread on Backend");case"translate":return t.I18n.get("Translate on Backend");case"rewrite":return t.I18n.get("Rewrite on Backend");case"summarize":return t.I18n.get("Summarize on Backend");default:return t.I18n.get("Regenerate on Backend")}},[K,u]),ye=(0,C.useCallback)(async()=>{st(!1),q(null),ne(null),Ae.current=!1,T.reset(),D||y()},[y,Ae,T,D]),pt=(0,C.useCallback)(async()=>{T.busy&&T.cancel()},[T.busy]);(0,C.useEffect)(()=>{!le||!p||!ae||T.busy||E||Ae.current||(Ae.current=!0,queueMicrotask(()=>{Ue(ke)}))},[T.busy,Ae,le,ae,p,E,Ue,ke]),(0,C.useEffect)(()=>{$&&u!=="proofread"&&(ae||(ue(!0),Ae.current=!0))},[$,ae,u]),(0,C.useEffect)(()=>{let r=!0;return(async()=>{try{await(0,M.waitForAiKitReady)();let k=await Bt();r&&ut(k)}catch(k){console.error(k),r&&ut(!1)}})(),()=>{r=!1}},[]);let Be=(0,C.useMemo)(()=>{let r=[];if(u==="translate"){let k=M.LANGUAGE_OPTIONS.find(U=>U.value===Y)?.label;r.push(t.I18n.get("Input language")+": "+(k?t.I18n.get(k):"auto"))}if(P&&N?.outputLanguage){let k=M.LANGUAGE_OPTIONS.find(U=>U.value===P)?.label;r.push(t.I18n.get("Output language")+": "+(k?t.I18n.get(k):P))}return u==="summarize"&&Me&&N?.type&&r.push(t.I18n.get("Type")+": "+t.I18n.get(Me)),(u==="write"||u==="rewrite")&&me&&N?.tone&&r.push(t.I18n.get("Tone")+": "+t.I18n.get(me)),(u==="write"||u==="rewrite"||u==="summarize")&&be&&N?.length&&r.push(t.I18n.get("Length")+": "+t.I18n.get(be)),ie?.trim()&&N?.instructions&&r.push(t.I18n.get("Instructions")+": \u2713"),r.length?r.join(" \u2022 "):t.I18n.get("No overrides")},[K,u,Y,P,Me,me,be,ie]),j={label:{fontSize:11,opacity:.85},description:{fontSize:11,opacity:.65,marginTop:2},input:{fontSize:12}},at=f==="modal"?c.Modal.Root:c.Group,Oe=f==="modal"?c.Modal.Content:c.Group,Dt=f==="modal"?c.Modal.Body:c.Group,Et=A==="collapse"?c.Collapse:c.Stack,ht=A==="horizontal"?c.Group:c.Stack;return(0,C.useEffect)(()=>{if(!(f!=="modal"||!le))return document.body.style.overflow="hidden",document.body.onkeydown=r=>{r.key==="Escape"&&(r.preventDefault(),ye())},()=>{document.body.style.overflow="",document.body.onkeydown=null}},[ye,f]),(0,s.jsxs)(s.Fragment,{children:[D&&(0,s.jsx)(c.Button,{leftSection:X&&(V?(0,s.jsx)("span",{dangerouslySetInnerHTML:{__html:V}}):nt()),className:Q?"ai-feature-open-button":"ai-feature-open-button-no-title",variant:"filled",disabled:le,onClick:()=>st(!0),"data-ai-kit-open-button":!0,children:Q&&t.I18n.get(F||pe)}),le&&(0,s.jsxs)(at,{opened:!0,className:"ai-feature-root",onClose:ye,padding:"md",gap:"md",size:"md",portalProps:f==="modal"?{target:re,reuseTargetNode:!0}:void 0,"data-ai-kit-theme":Te,"data-ai-kit-variation":f,children:[f==="modal"&&(0,s.jsx)(c.Modal.Overlay,{}),(0,s.jsxs)(Oe,{w:"100%",style:{left:0},children:[f==="modal"&&(0,s.jsxs)(c.Modal.Header,{style:{zIndex:1e3},children:[nt("ai-feature-title-icon"),(0,s.jsx)(c.Modal.Title,{children:t.I18n.get(S||pe)}),(0,s.jsx)(c.Modal.CloseButton,{})]}),(0,s.jsx)(Dt,{w:"100%",style:{zIndex:1001},children:(0,s.jsxs)(Nt,{enabled:f!=="modal",working:T.busy,variation:f,children:[(0,s.jsxs)(c.Stack,{gap:"sm",mb:"sm",p:"sm",children:[He&&(0,s.jsx)(c.Alert,{color:"red",children:t.I18n.get(He)}),$&&u!=="proofread"&&(0,s.jsxs)(c.Paper,{withBorder:!0,p:"sm",mt:"md",className:"ai-feature-options","data-options-display":A,children:[(0,s.jsxs)(c.Group,{justify:"space-between",align:"center",className:"ai-feature-options-summary",onClick:A==="collapse"?()=>ue(r=>!r):void 0,children:[A==="collapse"&&(0,s.jsxs)(c.Stack,{gap:0,children:[(0,s.jsx)(c.Text,{size:"sm",fw:600,style:{lineHeight:1.1},children:t.I18n.get("Options")}),(0,s.jsx)(c.Text,{size:"xs",c:"dimmed",style:{marginTop:2},children:Be})]}),A==="collapse"&&(0,s.jsx)(c.Button,{variant:"subtle",size:"xs",style:{minWidth:"fit-content"},onClick:r=>{r.stopPropagation(),ue(k=>!k)},children:Ye?t.I18n.get("Hide"):t.I18n.get("Show")})]}),(0,s.jsxs)(Et,{in:Ye,children:[A==="collapse"&&(0,s.jsx)(c.Divider,{my:"sm"}),(0,s.jsxs)(ht,{gap:"xs",justify:"space-between",children:[u==="write"&&N?.text&&(0,s.jsx)(c.Tooltip,{label:t.I18n.get("The topic or subject for the AI to write about."),disabled:A!=="horizontal",position:"top",children:(0,s.jsx)(c.TextInput,{size:"xs",className:"ai-feature-option",styles:j,disabled:T.busy,label:t.I18n.get("Topic"),description:A!=="horizontal"?t.I18n.get("The topic or subject for the AI to write about."):void 0,value:Le||"",onChange:r=>{let k=r.target.value;Ge(k),_?.({text:k})}})}),(u==="write"||u==="rewrite"||u==="generateImageMetadata"||u==="generatePostMetadata")&&N?.instructions&&(0,s.jsx)(c.Tooltip,{label:t.I18n.get("Additional instructions to guide the AI."),disabled:A!=="horizontal",position:"top",children:(0,s.jsx)(c.TextInput,{disabled:T.busy,size:"xs",className:"ai-feature-option",styles:j,label:t.I18n.get("Instructions"),description:A!=="horizontal"?t.I18n.get("Additional instructions to guide the AI."):void 0,value:ie||"",onChange:r=>{let k=r.target.value;Je(k),_?.({instructions:k})}})}),u==="translate"&&(0,s.jsx)(c.Tooltip,{label:t.I18n.get("The language of the input text."),disabled:A!=="horizontal",position:"top",children:(0,s.jsx)(c.Select,{disabled:T.busy,size:"xs",styles:j,className:"ai-feature-option",label:t.I18n.get("Input language"),description:A!=="horizontal"?t.I18n.get("The language of the input text."):void 0,data:[{value:"auto",label:t.I18n.get("Auto-detect")},...M.LANGUAGE_OPTIONS.map(r=>({value:r.value,label:t.I18n.get(r.label)})).sort((r,k)=>r.label.localeCompare(k.label))],value:Y||"auto",onChange:r=>{let k=r;Lt(k),_?.({inputLanguage:k})}})}),N?.outputLanguage&&(0,s.jsx)(c.Tooltip,{label:t.I18n.get("The language AI-Kit should use for generated text by default (when applicable)."),disabled:A!=="horizontal",position:"top",children:(0,s.jsx)(c.Select,{disabled:T.busy,size:"xs",styles:j,className:"ai-feature-option",label:t.I18n.get("Output language"),description:A!=="horizontal"?t.I18n.get("The language AI-Kit should use for generated text by default (when applicable)."):void 0,data:[...[u==="rewrite"?{value:"auto",label:t.I18n.get("Auto-detect")}:void 0].filter(Boolean),...M.LANGUAGE_OPTIONS.map(r=>({value:r.value,label:t.I18n.get(r.label)})).sort((r,k)=>r.label.localeCompare(k.label))],value:P||zt.settings.defaultOutputLanguage||(u==="rewrite"?"auto":""),onChange:r=>{let k=r;De(k),_?.({outputLanguage:k})}})}),u==="summarize"&&N?.type&&(0,s.jsx)(c.Tooltip,{label:t.I18n.get("The summary style to generate."),disabled:A!=="horizontal",position:"top",children:(0,s.jsx)(c.Select,{disabled:T.busy,size:"xs",className:"ai-feature-option",styles:j,label:t.I18n.get("Type"),description:A!=="horizontal"?t.I18n.get("The summary style to generate."):void 0,data:[{value:"headline",label:t.I18n.get("Headline")},{value:"key-points",label:t.I18n.get("Key Points")},{value:"teaser",label:t.I18n.get("Teaser")},{value:"tldr",label:t.I18n.get("TL;DR")}],value:Me||"key-points",onChange:r=>{let k=r;Ee(k),_?.({type:k})}})}),(u==="write"||u==="rewrite")&&N?.tone&&(0,s.jsx)(c.Tooltip,{label:t.I18n.get("The tone or style for the AI to use."),disabled:A!=="horizontal",position:"top",children:(0,s.jsx)(c.Select,{disabled:T.busy,size:"xs",className:"ai-feature-option",styles:j,label:t.I18n.get("Tone"),description:A!=="horizontal"?t.I18n.get("The tone or style for the AI to use."):void 0,data:u==="write"?[{value:"neutral",label:t.I18n.get("Neutral")},{value:"formal",label:t.I18n.get("Formal")},{value:"casual",label:t.I18n.get("Casual")}]:[{value:"as-is",label:t.I18n.get("As-Is")},{value:"more-formal",label:t.I18n.get("More formal")},{value:"more-casual",label:t.I18n.get("More casual")}],value:me||(u==="write"?"neutral":"as-is"),onChange:r=>{let k=r;Pt(k),_?.({tone:k})}})}),(u==="write"||u==="rewrite"||u==="summarize")&&N?.length&&(0,s.jsx)(c.Tooltip,{label:t.I18n.get("The target output length."),disabled:A!=="horizontal",position:"top",children:(0,s.jsx)(c.Select,{disabled:T.busy,size:"xs",className:"ai-feature-option",styles:j,label:t.I18n.get("Length"),description:A!=="horizontal"?t.I18n.get("The target output length."):void 0,data:u==="write"||u==="summarize"?[{value:"short",label:t.I18n.get("Short")},{value:"medium",label:t.I18n.get("Medium")},{value:"long",label:t.I18n.get("Long")}]:[{value:"as-is",label:t.I18n.get("As-Is")},{value:"shorter",label:t.I18n.get("Shorter")},{value:"longer",label:t.I18n.get("Longer")}],value:be||(u==="rewrite"?"as-is":"short"),onChange:r=>{let k=r;ze(k),_?.({length:k})}})}),u==="summarize"||u==="write"||u==="rewrite"&&N?.outputFormat&&(0,s.jsx)(c.Tooltip,{label:t.I18n.get("The format for the generated output."),disabled:A!=="horizontal",position:"top",children:(0,s.jsx)(c.Select,{disabled:T.busy,size:"xs",className:"ai-feature-option",styles:j,label:t.I18n.get("Output format"),description:A!=="horizontal"?t.I18n.get("The format for the generated output."):void 0,data:[{value:"plain-text",label:t.I18n.get("Plain Text")},{value:"markdown",label:t.I18n.get("Markdown")},{value:"html",label:t.I18n.get("HTML")}],value:We||"markdown",onChange:r=>{let k=r;Mt(k),_?.({outputFormat:k})}})})]})]})]}),T.busy&&Fe&&(0,s.jsx)(Nt,{enabled:f==="modal",working:T.busy,variation:f,children:(0,s.jsxs)(c.Group,{justify:"center",align:"center",gap:"sm",m:"sm",pr:"lg",children:[(0,s.jsx)(c.Loader,{size:"sm"}),(0,s.jsx)(c.Input.Label,{className:"ai-feature-status-text",children:Fe??"VALAMILYEN SZ\xD6VEG"})]})}),E&&(0,s.jsxs)(c.Stack,{mt:"md",children:[u==="proofread"&&(E.corrections.length===0?(0,s.jsx)(c.Alert,{color:"green",children:t.I18n.get("No issues found. Your text looks great!")}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("p",{style:{marginTop:0,opacity:.85},children:t.I18n.get("Hover highlights to see explanations.")}),(0,s.jsx)(Kn,{original:Le,corrections:E.corrections}),E.correctedInput?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("h4",{style:{marginTop:16,marginBottom:8},children:t.I18n.get("Corrected")}),(0,s.jsx)(c.Group,{c:"pre",className:"ai-feature-generated-content",children:E.correctedInput})]}):null]})),u==="generateImageMetadata"&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.TextInput,{readOnly:!g,label:t.I18n.get("Alt Text"),description:t.I18n.get("The alt text for the image."),value:E.alt_text||"",onChange:r=>q({...E,alt_text:r.target.value})}),(0,s.jsx)(c.TextInput,{readOnly:!g,label:t.I18n.get("Title"),description:t.I18n.get("The title for the image."),value:E.title||"",onChange:r=>q({...E,title:r.target.value})}),(0,s.jsx)(c.TextInput,{readOnly:!g,label:t.I18n.get("Caption"),description:t.I18n.get("The caption for the image."),value:E.caption||"",onChange:r=>q({...E,caption:r.target.value})}),(0,s.jsx)(c.TextInput,{readOnly:!g,label:t.I18n.get("Description"),description:t.I18n.get("The description for the image."),value:E.description||"",onChange:r=>q({...E,description:r.target.value})})]}),u==="generatePostMetadata"&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.TextInput,{readOnly:!g,label:t.I18n.get("Title"),description:t.I18n.get("The title for the post."),value:E.title||"",onChange:r=>q({...E,title:r.target.value})}),(0,s.jsx)(c.TextInput,{readOnly:!g,label:t.I18n.get("Excerpt"),description:t.I18n.get("The excerpt for the post."),value:E.excerpt||"",onChange:r=>q({...E,excerpt:r.target.value})})]}),u!=="proofread"&&u!=="generateImageMetadata"&&u!=="generatePostMetadata"&&typeof E=="string"&&(0,s.jsx)(Fn,{value:E,editable:!!g,onChange:r=>{q(r)}})]}),E===""&&(0,s.jsx)(Fn,{value:E,editable:!1})]}),(0,s.jsxs)(c.Group,{className:"ai-kit-actions",gap:"sm",mb:"sm",p:"sm",children:[T.busy&&(0,s.jsx)(c.Button,{variant:"outline",size:"sm",onClick:pt,"data-ai-kit-cancel-button":!0,children:t.I18n.get("Cancel")}),!T.busy&&(0,s.jsx)(c.Button,{variant:"filled",size:"sm",disabled:!ae,onClick:()=>Ue(),"data-ai-kit-generate-button":!0,children:qe()}),!T.busy&&T.lastSource==="on-device"&<&&ge&&(0,s.jsx)(c.Button,{variant:"filled",size:"sm",disabled:!ae,onClick:gt,"data-ai-kit-regenerate-on-backend-button":!0,children:mt()}),!T.busy&&R&&(0,s.jsx)(c.Button,{variant:"outline",size:"sm",disabled:!E||u==="proofread"&&E.corrections.length===0,onClick:async()=>{R(We==="html"?await Rt(E):E),ye()},"data-ai-kit-accept-button":!0,children:t.I18n.get(te)}),(0,s.jsx)(c.Button,{variant:"default",size:"sm",onClick:ye,"data-ai-kit-close-button":!0,children:t.I18n.get("Close")})]}),(0,s.jsx)("div",{style:{display:zt.settings?.enablePoweredBy?"flex":"none",justifyContent:zt.settings?.enablePoweredBy?"flex-end":void 0,padding:0,marginRight:"var(--ai-kit-spacing-sm)",marginBottom:f==="default"?"var(--ai-kit-spacing-sm)":void 0},className:zt.settings?.enablePoweredBy?void 0:"sr-only",children:(0,s.jsxs)(c.Text,{c:"p",ta:"right",fs:"italic",fz:"xs",children:["Powered by"," ",(0,s.jsx)(c.Anchor,{href:"https://wpsuite.io/ai-kit/",target:"_blank",td:"none",fz:"xs",fw:400,children:"WPSuite AI-Kit"})]})})]})})]})]})]})};function Fn(n){let{value:a,editable:p,onChange:g}=n;return p?(0,s.jsxs)(c.Stack,{p:0,gap:"sm",children:[(0,s.jsx)(c.Input.Label,{children:t.I18n.get("Generated content")}),(0,s.jsx)(c.Textarea,{value:a,onChange:i=>g?.(i.currentTarget.value),autosize:!0,minRows:2,maxRows:12,p:0,className:"ai-feature-generated-content ai-feature-editor"}),(0,s.jsx)(c.Input.Label,{children:t.I18n.get("Preview")}),(0,s.jsx)(c.Stack,{className:"ai-feature-generated-content ai-feature-preview",children:(0,s.jsx)(Gt.default,{remarkPlugins:[jt.default],children:a})})]}):(0,s.jsx)(c.Stack,{className:"ai-feature-generated-content",children:a?(0,s.jsx)(Gt.default,{remarkPlugins:[jt.default],children:a}):(0,s.jsx)(c.Alert,{color:"yellow",children:t.I18n.get("No content generated.")})})}var qn=Ze(Da);var h=require("@mantine/core"),se=require("@tabler/icons-react"),tt=require("@smart-cloud/ai-kit-core"),_n=require("@wordpress/data"),v=require("aws-amplify/utils"),o=require("react"),$n=Ie(require("react-markdown"),1),Zn=Ie(require("remark-gfm"),1);var Ea="ai-kit-chatbot-attachments",Ne="attachments";var Wt=null;function Ua(){return typeof window<"u"&&typeof window.indexedDB<"u"}async function Ft(){if(!Ua())return null;Wt||(Wt=new Promise(n=>{try{let a=window.indexedDB.open(Ea,1);a.onerror=()=>n(null),a.onblocked=()=>n(null),a.onupgradeneeded=()=>{let p=a.result;p.objectStoreNames.contains(Ne)||p.createObjectStore(Ne,{keyPath:"id"})},a.onsuccess=()=>n(a.result)}catch(a){console.warn("[AiChatbot] IndexedDB is not available",a),n(null)}}));try{return await Wt}catch(n){return console.warn("[AiChatbot] Failed to open attachment store",n),null}}async function Yn(n,a){let p=await Ft();return p?new Promise((g,i)=>{try{let f=p.transaction(Ne,n),S=f.objectStore(Ne),D=a(S);f.oncomplete=()=>g(D),f.onerror=()=>i(f.error),f.onabort=()=>i(f.error)}catch(f){i(f)}}).catch(g=>(console.warn("[AiChatbot] Attachment store transaction failed",g),null)):null}async function Jn(n,a,p){let g={id:n,blob:a,name:p.name,type:p.type,size:p.size,createdAt:Date.now()};return await Yn("readwrite",f=>(f.put(g),n))}async function qt(n){let a=await Ft();return a?new Promise((p,g)=>{try{let i=a.transaction(Ne,"readonly"),f=i.objectStore(Ne).get(n);f.onsuccess=()=>{let S=f.result;p(S??null)},f.onerror=()=>g(f.error),i.onabort=()=>g(i.error)}catch(i){g(i)}}).catch(p=>(console.warn("[AiChatbot] Failed to load attachment",p),null)):null}async function St(){await Yn("readwrite",n=>{n.clear()})}async function Yt(n){let a=await Ft();a&&await new Promise((p,g)=>{try{let i=a.transaction(Ne,"readwrite"),f=i.objectStore(Ne),S=f.getAllKeys();S.onsuccess=()=>{let D=S.result;for(let Q of D){let X=String(Q);n.has(X)||f.delete(Q)}},S.onerror=()=>g(S.error),i.oncomplete=()=>p(),i.onerror=()=>g(i.error),i.onabort=()=>g(i.error)}catch(i){g(i)}}).catch(p=>{console.warn("[AiChatbot] Failed to cleanup attachments",p)})}var d=require("react/jsx-runtime");v.I18n.putVocabularies(_e);var It=1440*60*1e3,Ba=1,Oa="localstorage",Xe=`ai-kit-chatbot-history-v1:${typeof window<"u"?window.location.hostname:"unknown"}`,xt={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 et(n){return`${n}-${Math.random().toString(36).slice(2)}-${Date.now().toString(36)}`}var Ka=4,Na=5*1024*1024,Ha=n=>{let a=(n?.name||"").toString(),p=(n?.code||"").toString(),g=(n?.message||"").toString();return a==="AbortError"||p==="ABORT_ERR"||/abort|aborted|cancel/i.test(g)},Ga=(n,a)=>{if(!n)return null;let p=n.step,g=v.I18n.get((n.message??"").trim()),i=typeof n.progress=="number"?n.progress:null,f=i==null?null:Math.round(i*100);switch(p){case"decide":return g||v.I18n.get("Checking capabilities...");case"on-device:init":return g||v.I18n.get("Initializing on-device AI...");case"on-device:download":return f==null?g||v.I18n.get("Downloading model..."):g||`${v.I18n.get("Downloading model...")} ${f}%`;case"on-device:ready":return g||v.I18n.get("On-device model ready...");case"on-device:run":return g||v.I18n.get("Running on-device...");case"backend:request":case"backend:waiting":case"backend:response":return v.I18n.get(a.assistantThinkingLabel??xt.assistantThinkingLabel);case"done":return g||v.I18n.get("Done.");case"error":return g||v.I18n.get("An error occurred.");default:return g||null}};function Jt(n){if(typeof window>"u")return null;try{return n==="localstorage"?window.localStorage:n==="sessionstorage"?window.sessionStorage:null}catch{return null}}var Ct=n=>{if(typeof window>"u"||typeof URL>"u"||typeof URL.createObjectURL!="function")return null;try{return URL.createObjectURL(n)}catch{return null}},Vt=n=>{if(n&&!(typeof window>"u")&&!(typeof URL>"u"||typeof URL.revokeObjectURL!="function"))try{URL.revokeObjectURL(n)}catch{}},Qn=n=>{!n||n.length===0||n.forEach(a=>Vt(a.objectUrl))},Vn=n=>{n.forEach(a=>Qn(a.attachments))},ja=n=>{let{rootElement:a,store:p,previewMode:g,title:i,openButtonTitle:f,openButtonIcon:S,showOpenButtonTitle:D=!0,showOpenButtonIcon:Q=!0,colorMode:X,language:F,onClose:V,placeholder:ge,maxImages:te,maxImageBytes:A,historyStorage:u=Oa,emptyHistoryAfterDays:x=Ba,labels:ke,openButtonIconLayout:Te="top",openButtonPosition:G="bottom-right"}=n,y=(0,o.useMemo)(()=>({...xt,...ke||{}}),[ke]),R=rt(),[_,K]=(0,o.useState)(""),[re,N]=(0,o.useState)([]),[$,L]=(0,o.useState)([]),[J,le]=(0,o.useState)(null),[st,Ye]=(0,o.useState)(!1),[ue,lt]=(0,o.useState)(!1),[ut,He]=(0,o.useState)(!1),[ne,E]=(0,o.useState)(!1),[q,Le]=(0,o.useState)(!0),[Ge,je]=(0,o.useState)(null),[ie,Je]=(0,o.useState)(!1),[Pe,dt]=(0,o.useState)(null),[Y,Lt]=(0,o.useState)(null),[We,Mt]=(0,o.useState)(!1),[P,De]=(0,o.useState)(null),be=(0,o.useRef)(P);(0,o.useEffect)(()=>{be.current=P},[P]);let ze=(0,o.useRef)(null),me=(0,o.useRef)(!1),[Pt,Me]=(0,o.useState)(null),Ee=(0,o.useRef)(null),Ae=(0,o.useRef)(null),pe=(0,o.useRef)(null),ct=(0,o.useRef)(null),de=(0,o.useCallback)(e=>{e.forEach(m=>Vt(m.objectUrl))},[]),ae=(0,o.useCallback)(()=>{de(qe.current),N([]),Ee.current&&(Ee.current.value="")},[de]),[T,Fe]=(0,o.useState)(null),Ue=(0,o.useRef)(_),gt=(0,o.useRef)($),nt=(0,o.useRef)(T),qe=(0,o.useRef)(re);(0,o.useEffect)(()=>{Ue.current=_},[_]),(0,o.useEffect)(()=>{qe.current=re},[re]),(0,o.useEffect)(()=>{gt.current=$},[$]),(0,o.useEffect)(()=>{nt.current=T},[T]),(0,o.useEffect)(()=>{F&&v.I18n.setLanguage(F||"en")},[F]);let mt=(0,_n.useSelect)(()=>(0,tt.getStoreSelect)(p).isShowChatbotPreview()),ye=(0,o.useMemo)(()=>Math.max(0,te??Ka),[te]),pt=(0,o.useMemo)(()=>Math.max(0,A??Na),[A]),Be=$.length>0,j=(0,o.useMemo)(()=>R.busy&&P==="chat",[R.busy,P]),at=(0,o.useMemo)(()=>j?!1:_.trim().length>0,[_,j]),Oe=(0,o.useMemo)(()=>{let e=f||y.askMeLabel;return v.I18n.get(e)},[f,y.askMeLabel,F]),Dt=(0,o.useMemo)(()=>{let e=i||y.modalTitle;return v.I18n.get(e)},[i,y.modalTitle,F]),Et=(0,o.useMemo)(()=>{let e=ge||y.placeholder;return v.I18n.get(e)},[ge,y.placeholder,F]),ht=(0,o.useMemo)(()=>{let e="ai-docs-ask",m=`ai-open-btn--${G}`;return`${e} ${m}`},[G]),r=(0,o.useCallback)(()=>{let e=ct.current;if(e)try{let m=window.innerHeight||document.documentElement.clientHeight,b=360,l=1e3,z=Math.floor(m*.8),w=Math.max(b,Math.min(z,l));e.style.height=`${w}px`}catch{}},[]),k=(0,o.useCallback)(()=>{let e=Y;e&&window.setTimeout(()=>{try{e.scrollTop=e.scrollHeight}catch{}},50)},[Y]),U=(0,o.useCallback)(()=>{E(!1),ue&<(!1),He(!1),V?.()},[ue,V]);(0,o.useEffect)(()=>{if(ne)return r(),window.addEventListener("resize",r),()=>window.removeEventListener("resize",r)},[ne,r]),(0,o.useEffect)(()=>{if(!(!ne||!ue))return document.body.style.overflow="hidden",()=>{document.body.style.overflow=""}},[ne,ue,U]);let O=(0,o.useMemo)(()=>re.map(e=>({id:e.id,url:e.objectUrl,title:e.file.name})),[re]);(0,o.useEffect)(()=>{Be||Le(!0)},[Be]),(0,o.useEffect)(()=>()=>{de(qe.current)},[de]),(0,o.useEffect)(()=>{let e=Y;if(!e)return;let m=()=>{let b=e.scrollHeight-(e.scrollTop+e.clientHeight);Le(b<20)};return e.addEventListener("scroll",m),()=>{e.removeEventListener("scroll",m)}},[ne,Y]),(0,o.useEffect)(()=>{if(!q)return;let e=Y;e&&e.scrollHeight>e.clientHeight&&(e.scrollTop=e.scrollHeight)},[$,R.busy,q,Y]),(0,o.useEffect)(()=>{ne||je(null)},[ne]);let ee=(0,o.useMemo)(()=>R.busy?Ga(R.statusEvent,y)||v.I18n.get("Working\u2026"):null,[R.busy,R.statusEvent,F,y]),H=(0,o.useMemo)(()=>{for(let e=$.length-1;e>=0;e--){let m=$[e];if(m.role==="user"&&m.clientStatus==="canceled")return m.id}return null},[$]),B=(0,o.useCallback)(e=>{L(m=>{let b=[...m].map((w,I)=>({m:w,i:I})).reverse().find(w=>w.m.role==="user"&&w.m.clientStatus==="pending")?.i;if(b==null)return m;let l=m.slice(),z=l[b];return l[b]={...z,clientStatus:e??void 0},l})},[L]),Z=(0,o.useCallback)(()=>{if(!(!R.busy||be.current!=="chat")){me.current=!0;try{R.cancel()}catch{}B("canceled"),De(null),le(null),k()}},[R,B,k]),Se=(0,o.useCallback)(e=>{let m=qe.current,b=Array.from(e.target.files||[]),l=Math.max(0,ye-m.length);if(l===0){e.currentTarget.value="";return}let z=[];for(let w of b){if(z.length>=l)break;let I=/image\/(jpeg|png|gif|webp)/i.test(w.type),W=w.size<=pt,fe=[...m,...z].some(ve=>ve.file.name===w.name&&ve.file.size===w.size&&ve.file.lastModified===w.lastModified);if(!I||!W||fe)continue;let we=Ct(w);we&&z.push({id:et("composer-image"),file:w,objectUrl:we})}z.length&&N(w=>[...w,...z]),e.currentTarget.value=""},[ye,pt]),ft=(0,o.useCallback)(e=>{N(m=>{if(e<0||e>=m.length)return m;let b=m[e];return b&&Vt(b.objectUrl),m.filter((l,z)=>z!==e)})},[]),he=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(J)return he.current&&(window.clearTimeout(he.current),he.current=null),he.current=window.setTimeout(()=>{le(null),he.current=null},6e3),()=>{he.current&&(window.clearTimeout(he.current),he.current=null)}},[J]);let _t=(0,o.useCallback)(async e=>{if(!e.length)return[];let m=u!=="nostorage";return(await Promise.all(e.map(async l=>{let z=et("attachment"),w;if(m)try{w=await Jn(z,l.file,{name:l.file.name,type:l.file.type,size:l.file.size})??void 0}catch(W){console.warn("[AiChatbot] Failed to persist attachment",W)}let I=Ct(l.file);return{id:z,name:l.file.name,type:l.file.type||"application/octet-stream",size:l.file.size,blobId:w,objectUrl:I??void 0,blob:l.file}}))).filter(Boolean)},[u]),$t=(0,o.useCallback)(async e=>{let m=[];for(let b of e){let l;if(b.attachments&&b.attachments.length>0){l=[];for(let z of b.attachments){let w;if(z.blobId)try{w=(await qt(z.blobId))?.blob??void 0}catch(W){console.warn("[AiChatbot] Failed to hydrate attachment",W)}if(!w)continue;let I=w?Ct(w):null;l.push({...z,objectUrl:I??void 0,blob:w??void 0})}}m.push({...b,attachments:l})}return m},[]),Zt=(0,o.useCallback)(async e=>{if(!e||e.length===0){ae();return}let m=[];for(let b of e){let l=b.blob;if(!l&&b.blobId)try{l=(await qt(b.blobId))?.blob??void 0}catch(I){console.warn("[AiChatbot] Failed to reload attachment",I)}if(!l)continue;let z=l instanceof File?l:new File([l],b.name||"attachment",{type:b.type||l.type||"application/octet-stream"}),w=Ct(z);if(w&&(m.push({id:et("composer-image"),file:z,objectUrl:w}),m.length>=ye))break}if(m.length===0){ae();return}N(b=>(de(b),m)),Ee.current&&(Ee.current.value="")},[ae,de,ye]),Ut=(0,o.useCallback)((e,m)=>{e&&je({url:e,title:m})},[]),ea=(0,o.useCallback)(()=>{je(null)},[]),Qt=(0,o.useCallback)(()=>{Vn(gt.current),ae(),L([]),le(null),pe.current=null,Fe(null),Le(!0),Ye(!1);let e=Jt(u);if(e)try{e.removeItem(Xe)}catch{}St()},[ae,u]),ta=(0,o.useCallback)(()=>{Ye(!0)},[]),na=(0,o.useCallback)(()=>{R.busy&&be.current==="chat"&&Z(),Qt()},[R.busy,Z,Qt]),Xt=(0,o.useCallback)(()=>{Ye(!1)},[]),en=(0,o.useCallback)(async(e,m)=>{if(!R.busy)try{let b=pe.current&&Date.now()-pe.current.storedAt<x*It?pe.current.id:void 0;if(!b)return;De("feedback"),le(null),await R.run(async({signal:l,onStatus:z})=>(await(0,tt.sendFeedbackMessage)({sessionId:b,feedbackMessageId:e,feedbackType:m},{signal:l,onStatus:z}),null)),le(null)}catch(b){let l=b?.message?.trim()||v.I18n.get("An error occurred.");le(l),console.error("Failed to send feedback",b)}finally{De(b=>b==="feedback"?null:b)}},[R,F]),tn=(0,o.useCallback)((e,m)=>{L(b=>b.map(l=>l.id!==e||l.role!=="assistant"?l:l.feedback===m?{...l,feedback:void 0}:{...l,feedback:m})),en(e,m)},[en]),kt=(0,o.useCallback)(async()=>{let e=Ue.current.trim();if(!e||R.busy)return;me.current=!1,le(null),De("chat");let m=[...qe.current],b=await _t(m),l=et("user"),z=Date.now(),w={id:l,role:"user",content:e,createdAt:z,clientStatus:"pending",attachments:b.length?b:void 0};K(""),ae(),L(I=>[...I,w]),ne||E(!0),k();try{let I=pe.current&&Date.now()-pe.current.storedAt<x*It?pe.current.id:void 0,W=await R.run(async({signal:we,onStatus:ve})=>await(0,tt.sendChatMessage)({sessionId:I,message:e,images:m.map(pa=>pa.file)},{signal:we,onStatus:ve}));if(me.current){B("canceled");return}if(!W)throw new Error(v.I18n.get(R.error??y.emptyResponseLabel));W.sessionId&&(pe.current={id:W.sessionId,storedAt:Date.now()});let fe={id:W.metadata?.messageId||et("assistant"),role:"assistant",content:W.result||"",citations:W.citations,createdAt:Date.now()};L(we=>[...we.map(Ve=>Ve.id===l?{...Ve,clientStatus:void 0}:Ve),fe]),Fe(z)}catch(I){if(console.error("Error during ask()",I),me.current||Ha(I)){B("canceled");return}let W=I?.message?.trim()||v.I18n.get(y.unexpectedErrorLabel);L(fe=>[...fe.map(ve=>ve.id===l?{...ve,clientStatus:void 0}:ve),{id:et("assistant-error"),role:"assistant",content:`\u26A0\uFE0F ${W}`,createdAt:Date.now()}]),Fe(z)}finally{De(I=>I==="chat"?null:I),me.current=!1,Ae.current&&Ae.current.focus(),k()}},[R,_t,ae,ne,k,B,y.emptyResponseLabel,y.unexpectedErrorLabel,F]),aa=(0,o.useCallback)(e=>{e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),at&&kt())},[kt,at]),ra=(0,o.useCallback)(()=>{E(!0)},[]);(0,o.useEffect)(()=>()=>{ze.current!=null&&(cancelAnimationFrame(ze.current),ze.current=null)},[]);let ia=(0,o.useCallback)(()=>{lt(e=>{let m=!e;return ze.current!=null&&(cancelAnimationFrame(ze.current),ze.current=null),m?(He(!0),requestAnimationFrame(()=>{ze.current=requestAnimationFrame(()=>{He(!1),ze.current=null})})):He(!1),m})},[]),oa=(0,o.useCallback)(e=>{K(e.content),(async()=>(await Zt(e.attachments),L(m=>m.filter(b=>b.id!==e.id)),Qn(e.attachments),queueMicrotask(()=>Ae.current?.focus())))()},[Zt]),nn=(0,o.useMemo)(()=>Q?S?(0,d.jsx)("img",{src:S,className:"ai-open-btn-icon",alt:v.I18n.get(y.askMeLabel||Oe)}):(0,d.jsx)(se.IconMessage,{size:18}):null,[Q,S,y,Oe,F]),sa=(0,o.useMemo)(()=>{let e=nn,m=D?(0,d.jsx)(h.Text,{inherit:!0,children:Oe}):null;if(!Q&&!m)return null;if(!Q)return m;if(!D)return e;switch(Te){case"top":return(0,d.jsxs)(h.Stack,{gap:4,align:"center",children:[e,m]});case"bottom":return(0,d.jsxs)(h.Stack,{gap:4,align:"center",children:[m,e]});case"right":return(0,d.jsxs)(h.Group,{gap:6,align:"center",children:[m,e]});default:return(0,d.jsxs)(h.Group,{gap:6,align:"center",children:[e,m]})}},[nn,Q,D,Oe,Te]),la=(0,o.useMemo)(()=>j,[j]),ua=(0,o.useMemo)(()=>!j,[j]),da=(0,o.useMemo)(()=>J||(Be?v.I18n.get(y.readyLabel):v.I18n.get(y.readyEmptyLabel)),[J,Be,y.readyLabel,y.readyEmptyLabel,F]),ca=(0,o.useMemo)(()=>j?v.I18n.get(y.cancelLabel):v.I18n.get(y.sendLabel),[j,y.cancelLabel,y.sendLabel,F]),ga=(0,o.useMemo)(()=>j?(0,d.jsx)(se.IconPlayerStop,{size:18}):(0,d.jsx)(se.IconSend,{size:18}),[j]),ma=(0,o.useCallback)(()=>{if(j){Z();return}kt()},[j,Z,kt]);return(0,o.useEffect)(()=>{if(!ne||!Pe||!Y)return;let e=()=>{let W=window.getComputedStyle(Y).overflowY,fe=W==="auto"||W==="scroll",we=Math.ceil(Y.scrollHeight),ve=Math.floor(Y.clientHeight),Ve=we>ve;return fe&&Ve},m=!1,b=I=>{if(!e())return;I.preventDefault();let W=Y.scrollHeight-Y.clientHeight;Y.scrollTop=Math.max(0,Math.min(W,Y.scrollTop+I.deltaY))},l=()=>{let I=e();Mt(I),I!==m&&(m=I,m?Pe.addEventListener("wheel",b,{passive:!1}):Pe.removeEventListener("wheel",b))};l();let z=new ResizeObserver(l);z.observe(Y);let w=new MutationObserver(l);return w.observe(Y,{childList:!0,subtree:!0,characterData:!0}),window.addEventListener("resize",l),()=>{m&&Pe.removeEventListener("wheel",b),z.disconnect(),w.disconnect(),window.removeEventListener("resize",l)}},[ne,Pe,Y]),(0,o.useEffect)(()=>{let e=!1,m=Jt(u);if(!m){u==="nostorage"&&St(),Je(!0);return}return(async()=>{try{let b=m.getItem(Xe);if(!b){Je(!0);return}let l=JSON.parse(b),z=typeof l?.lastUserSentAt=="number"?l.lastUserSentAt:null;if(!z||Date.now()-z>x*It){m.removeItem(Xe),await St(),Je(!0);return}let I=(Array.isArray(l.messages)?l.messages:[]).map(fe=>fe?.role==="user"&&fe.clientStatus==="pending"?{...fe,clientStatus:"canceled"}:fe),W=await $t(I);if(e){Vn(W);return}L(W),Fe(z),l.session&&l.session.id&&(pe.current=l.session)}catch(b){console.warn("[AiChatbot] Failed to load history",b);try{m.removeItem(Xe)}catch{}}finally{e||Je(!0)}})(),()=>{e=!0}},[u,x,$t]),(0,o.useEffect)(()=>{if(!ie)return;let e=Jt(u);if(!e)return;let m=nt.current;if(!m)return;if(Date.now()-m>x*It){try{e.removeItem(Xe)}catch{}Yt(new Set);return}let b=$.map(({attachments:w,...I})=>({...I,attachments:w?.map(({objectUrl:W,blob:fe,...we})=>we)})),l={version:1,lastUserSentAt:m,session:pe.current,messages:b};try{e.setItem(Xe,JSON.stringify(l))}catch{}let z=new Set;b.forEach(w=>{w.attachments?.forEach(I=>{I.blobId&&z.add(I.blobId)})}),Yt(z)},[ie,$,T,u,x]),g&&!mt||!g&&mt?null:(0,d.jsxs)(h.Group,{className:ht,children:[!ne&&(0,d.jsx)(h.Button,{variant:"filled",className:D?"ai-launcher-button ai-launcher-text":"ai-launcher-button",onClick:ra,"aria-label":Oe,title:Oe,"data-ai-kit-open-button":!0,children:sa}),ne&&(0,d.jsx)(h.Modal.Root,{ref:ct,opened:ne,lockScroll:!1,trapFocus:!1,closeOnEscape:!0,onClose:U,className:ht+" ai-chat-container"+(ue?" maximized":"")+(ue&&ut?" ai-max-enter":""),portalProps:{target:a,reuseTargetNode:!0},"data-ai-kit-theme":X,"data-ai-kit-variation":"modal",children:(0,d.jsxs)("div",{className:"ai-chat-container-internal",ref:dt,children:[(0,d.jsxs)(h.Modal.Header,{className:"ai-chat-header-bar",children:[(0,d.jsx)(h.Modal.Title,{className:"ai-chat-title",children:Dt}),(0,d.jsxs)(h.Group,{gap:"4px",align:"center",justify:"center",children:[typeof window<"u"&&window.innerWidth>600&&(0,d.jsx)(h.ActionIcon,{variant:"subtle",c:"var(--ai-kit-chat-icon-color, var(--ai-kit-color-text))",onClick:ia,title:ue?v.I18n.get(y.restoreSizeLabel):v.I18n.get(y.maximizeLabel),"aria-label":ue?v.I18n.get(y.restoreSizeLabel):v.I18n.get(y.maximizeLabel),"data-ai-kit-maximize-button":!0,children:ue?(0,d.jsx)(se.IconMinimize,{size:16}):(0,d.jsx)(se.IconMaximize,{size:16})}),(0,d.jsx)(h.Modal.CloseButton,{"aria-label":v.I18n.get(y.closeChatLabel)})]})]}),(0,d.jsxs)(h.Modal.Body,{className:"ai-chat-scroll",ref:Lt,"data-scrollable":We?"true":"false",children:[$.map(e=>{let m=e.role==="user",b=m&&e.clientStatus==="canceled"&&e.id===H;return(0,d.jsx)(h.Group,{justify:m?"flex-end":"flex-start",className:"ai-chat-row "+e.role,onMouseEnter:()=>Me(e.id),onMouseLeave:()=>Me(l=>l===e.id?null:l),children:(0,d.jsxs)(h.Stack,{gap:4,w:"100%",style:{alignItems:m?"flex-end":"flex-start"},children:[(0,d.jsxs)(h.Stack,{className:"ai-chat-bubble",children:[(0,d.jsxs)(h.Text,{className:"ai-chat-header",children:[(0,d.jsx)(h.Text,{fw:"bolder",size:"xs",style:{whiteSpace:"nowrap"},children:m?v.I18n.get(y.userLabel):v.I18n.get(y.assistantLabel)}),"\xA0",(0,d.jsx)(h.Text,{size:"xs",style:{whiteSpace:"nowrap"},children:new Date(e.createdAt).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})})]}),e.role==="assistant"?(0,d.jsx)($n.default,{remarkPlugins:[Zn.default],children:e.content}):(0,d.jsx)(h.Text,{size:"sm",miw:"100px",children:e.content})]}),e.attachments&&e.attachments.length>0&&(0,d.jsx)(h.Group,{className:"ai-thumbs ai-message-thumbs",gap:"xs",children:e.attachments.map(l=>(0,d.jsx)("button",{type:"button",className:"thumb",style:{backgroundImage:l.objectUrl?`url(${l.objectUrl})`:void 0,backgroundSize:"cover",backgroundPosition:"center",backgroundRepeat:"no-repeat"},onClick:()=>Ut(l.objectUrl,l.name),disabled:!l.objectUrl,title:l.name||v.I18n.get("View image"),"aria-label":l.name||v.I18n.get("View image"),children:!l.objectUrl&&(0,d.jsx)(h.Text,{size:"xs",c:"dimmed",children:v.I18n.get("Loading image...")})},l.id))}),b&&(0,d.jsxs)(h.Group,{justify:"flex-end",gap:"xs",children:[(0,d.jsx)(h.Text,{size:"xs",c:"dimmed",children:(0,d.jsx)("em",{children:v.I18n.get(y.notSentLabel)})}),Pt===e.id&&(0,d.jsx)(h.ActionIcon,{size:"sm",variant:"subtle",onClick:()=>oa(e),title:v.I18n.get(y.editLabel),"aria-label":v.I18n.get(y.editLabel),"data-ai-kit-edit-button":!0,children:(0,d.jsx)(se.IconPencil,{size:14})})]}),e.citations&&e.citations.length>0&&(0,d.jsxs)(h.Stack,{className:"ai-citations",children:[(0,d.jsx)(h.Text,{fw:"bold",size:"sm",mb:"xs",children:v.I18n.get(y.referencesLabel)}),(0,d.jsx)(h.List,{spacing:"xs",size:"sm",children:e.citations.map((l,z)=>{let w=l.sourceUrl||l.url,I=l.title||w||`${v.I18n.get(y.referenceLabel)} #${z+1}`;return(0,d.jsxs)(h.List.Item,{children:[w?(0,d.jsx)(h.Anchor,{href:w,target:"_blank",rel:"noreferrer",children:I}):(0,d.jsx)(h.Text,{children:I}),l.snippet?(0,d.jsx)(h.Text,{size:"xs",c:"dimmed",mt:4,children:l.snippet}):null]},z)})})]}),e.role==="assistant"&&(0,d.jsxs)(h.Group,{className:"ai-feedback",gap:"xs",children:[(0,d.jsx)(h.Button,{className:e.feedback==="accepted"?"active":void 0,onClick:()=>tn(e.id,"accepted"),"aria-label":v.I18n.get(y.acceptResponseLabel),disabled:R.busy,"data-ai-kit-feedback-accept-button":!0,children:"\u{1F44D}"}),(0,d.jsx)(h.Button,{type:"button",className:e.feedback==="rejected"?"active":void 0,onClick:()=>tn(e.id,"rejected"),"aria-label":v.I18n.get(y.rejectResponseLabel),disabled:R.busy,"data-ai-kit-feedback-reject-button":!0,children:"\u{1F44E}"})]})]})},e.id)}),la&&(0,d.jsx)(h.Group,{justify:"flex-start",className:"ai-chat-row assistant status",children:(0,d.jsxs)(h.Stack,{className:"ai-chat-bubble typing",children:[ee?(0,d.jsx)(h.Text,{size:"sm",c:"dimmed",children:(0,d.jsx)("em",{children:ee})}):null,(0,d.jsxs)("div",{className:"typing-indicator",children:[(0,d.jsx)("span",{}),(0,d.jsx)("span",{}),(0,d.jsx)("span",{})]})]})})]}),ua&&(0,d.jsx)(h.Group,{className:"ai-status-line",children:(0,d.jsx)(h.Text,{className:"ai-status-text",children:(0,d.jsx)("em",{children:da})})}),(0,d.jsxs)(h.Stack,{className:"ai-box ai-box-open",children:[(0,d.jsxs)(h.Modal,{opened:st,onClose:Xt,centered:!0,title:v.I18n.get("Reset conversation"),style:{position:"fixed"},left:0,children:[(0,d.jsx)(h.Text,{size:"sm",children:v.I18n.get("Are you sure you want to reset the conversation?")}),(0,d.jsxs)(h.Group,{justify:"flex-end",mt:"md",children:[(0,d.jsx)(h.Button,{variant:"default",onClick:Xt,"data-ai-kit-no-button":!0,children:v.I18n.get("No")}),(0,d.jsx)(h.Button,{color:"var(--ai-kit-color-danger, red)",onClick:na,disabled:!Be&&!j,"data-ai-kit-yes-button":!0,children:v.I18n.get("Yes")})]})]}),(0,d.jsx)(h.Group,{children:(0,d.jsx)(h.Textarea,{className:"ai-message",ref:Ae,placeholder:Et,value:_,onChange:e=>{K(e.target.value)},onKeyDown:aa,rows:3})}),(0,d.jsxs)(h.Group,{className:"ai-actions",justify:"space-between",w:"100%",children:[(0,d.jsx)(h.Group,{justify:"flex-start",children:(0,d.jsx)(h.Button,{variant:"light",leftSection:(0,d.jsx)(se.IconTrash,{size:18}),onClick:ta,disabled:!Be&&!j,"data-ai-kit-reset-button":!0,children:v.I18n.get(y.resetLabel)})}),(0,d.jsxs)(h.Group,{justify:"flex-end",children:[ye>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(h.Button,{variant:"outline",leftSection:(0,d.jsx)(se.IconPaperclip,{size:18}),onClick:()=>Ee.current?.click(),disabled:re.length>=ye||j,title:v.I18n.get(y.addImageLabel),"data-ai-kit-add-image-button":!0,children:v.I18n.get(y.addLabel)}),(0,d.jsx)(h.Input,{ref:Ee,type:"file",accept:"image/png,image/jpeg,image/gif,image/webp",style:{display:"none"},multiple:!0,onChange:Se})]}),(0,d.jsx)(h.Button,{leftSection:ga,variant:"filled",onClick:ma,disabled:!j&&!at,"data-ai-kit-send-button":!0,children:ca})]})]}),O.length>0&&(0,d.jsx)(h.Group,{className:"ai-thumbs",mt:"xs",gap:"xs",children:O.map(({url:e,title:m},b)=>(0,d.jsx)("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":m||v.I18n.get("View image"),onClick:()=>Ut(e,m),onKeyDown:l=>{(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),Ut(e,m))},children:(0,d.jsx)(h.Button,{variant:"white",onClick:l=>{l.stopPropagation(),ft(b)},"aria-label":v.I18n.get(y.removeImageLabel),mt:"-xs",mr:"-xs",size:"xs",p:0,className:"remove-image-button",title:v.I18n.get(y.removeImageLabel),"data-ai-kit-remove-image-button":!0,children:"X"})},re[b]?.id??b))})]})]})}),(0,d.jsx)(h.Modal,{opened:!!Ge,onClose:ea,centered:!0,size:"auto",title:Ge?.title||v.I18n.get("Image preview"),children:Ge&&(0,d.jsx)("img",{src:Ge.url,alt:Ge.title||v.I18n.get("Image preview"),style:{maxWidth:"100%",maxHeight:"70vh"}})})]})},Xn=Ze(ja,{showOpenButton:!0,variation:"modal"});0&&(module.exports={AiChatbot,AiFeature,DEFAULT_CHATBOT_LABELS,isBackendConfigured,markdownToHtml,readDefaultOutputLanguage,stripCodeFence,translations,useAiRun,withAiKitShell});
|
|
31
|
+
Follow these additional instructions: ${ie}`:"")},{role:"user",content:"What can you see on this image according to the optional knowledge base and shared context?"}].filter(Boolean),O=await T.run(async({signal:B,onStatus:Z})=>(await(0,M.prompt)({messages:U,images:[je],outputLanguage:"en",responseConstraint:xa},{signal:B,onStatus:Z,context:x,modeOverride:r,onDeviceTimeoutOverride:i})).result);if(!O){Y("");return}let ee=(P&&P!=="auto"?P:null)||Ke(),H=$e(O).trim();try{q("Translating result...");let B=await T.run(async({signal:Z})=>await Ma(H,ee,{signal:Z,context:x,modeOverride:r,onDeviceTimeoutOverride:i,silent:!0}));Y(B)}catch(B){Y(H),console.warn("AI Kit: failed to parse SEO JSON",B)}break}}}catch(k){ne(k instanceof Error?k.message:t.I18n.get("An unknown error occurred."))}q(void 0)}},[K,T,ie,be,P,Le,me,x,u,Me,J,ae,$]),gt=(0,C.useCallback)(async()=>{await Ue("backend-only")},[Ue]),nt=(0,C.useCallback)(r=>{switch(u){case"proofread":return(0,s.jsx)(xe.IconCircleDashedCheck,{className:r});case"translate":return(0,s.jsx)(xe.IconLanguage,{className:r});case"summarize":return(0,s.jsx)(xe.IconSum,{className:r});case"rewrite":case"write":return(0,s.jsx)(xe.IconPencilCode,{className:r});case"generateImageMetadata":case"generatePostMetadata":return(0,s.jsx)(xe.IconSeo,{className:r});default:return(0,s.jsx)(M.AiKitFeatureIcon,{mode:u,className:r})}},[u]),qe=(0,C.useCallback)(()=>{switch(u){case"proofread":return T.lastSource?t.I18n.get("Proofread again"):t.I18n.get("Proofread");case"translate":return T.lastSource?t.I18n.get("Translate again"):t.I18n.get("Translate");case"rewrite":return T.lastSource?t.I18n.get("Rewrite again"):t.I18n.get("Rewrite");case"summarize":return T.lastSource?t.I18n.get("Summarize again"):t.I18n.get("Summarize");default:return T.lastSource?t.I18n.get("Regenerate"):t.I18n.get("Generate")}},[K,T.lastSource,u]),mt=(0,C.useCallback)(()=>{switch(u){case"proofread":return t.I18n.get("Proofread on Backend");case"translate":return t.I18n.get("Translate on Backend");case"rewrite":return t.I18n.get("Rewrite on Backend");case"summarize":return t.I18n.get("Summarize on Backend");default:return t.I18n.get("Regenerate on Backend")}},[K,u]),ye=(0,C.useCallback)(async()=>{st(!1),Y(null),ne(null),Ae.current=!1,T.reset(),D||y()},[y,Ae,T,D]),pt=(0,C.useCallback)(async()=>{T.busy&&T.cancel()},[T.busy]);(0,C.useEffect)(()=>{!le||!p||!ae||T.busy||E||Ae.current||(Ae.current=!0,queueMicrotask(()=>{Ue(ke)}))},[T.busy,Ae,le,ae,p,E,Ue,ke]),(0,C.useEffect)(()=>{$&&u!=="proofread"&&(ae||(ue(!0),Ae.current=!0))},[$,ae,u]),(0,C.useEffect)(()=>{let r=!0;return(async()=>{try{await(0,M.waitForAiKitReady)();let k=await Bt();r&&ut(k)}catch(k){console.error(k),r&&ut(!1)}})(),()=>{r=!1}},[]);let Be=(0,C.useMemo)(()=>{let r=[];if(u==="translate"){let k=M.LANGUAGE_OPTIONS.find(U=>U.value===J)?.label;r.push(t.I18n.get("Input language")+": "+(k?t.I18n.get(k):"auto"))}if(P&&N?.outputLanguage){let k=M.LANGUAGE_OPTIONS.find(U=>U.value===P)?.label;r.push(t.I18n.get("Output language")+": "+(k?t.I18n.get(k):P))}return u==="summarize"&&Me&&N?.type&&r.push(t.I18n.get("Type")+": "+t.I18n.get(Me)),(u==="write"||u==="rewrite")&&me&&N?.tone&&r.push(t.I18n.get("Tone")+": "+t.I18n.get(me)),(u==="write"||u==="rewrite"||u==="summarize")&&be&&N?.length&&r.push(t.I18n.get("Length")+": "+t.I18n.get(be)),ie?.trim()&&N?.instructions&&r.push(t.I18n.get("Instructions")+": \u2713"),r.length?r.join(" \u2022 "):t.I18n.get("No overrides")},[K,u,J,P,Me,me,be,ie]),j={label:{fontSize:11,opacity:.85},description:{fontSize:11,opacity:.65,marginTop:2},input:{fontSize:12}},at=f==="modal"?c.Modal.Root:c.Group,Oe=f==="modal"?c.Modal.Content:c.Group,Dt=f==="modal"?c.Modal.Body:c.Group,Et=A==="collapse"?c.Collapse:c.Stack,ht=A==="horizontal"?c.Group:c.Stack;return(0,C.useEffect)(()=>{if(!(f!=="modal"||!le))return document.body.style.overflow="hidden",document.body.onkeydown=r=>{r.key==="Escape"&&(r.preventDefault(),ye())},()=>{document.body.style.overflow="",document.body.onkeydown=null}},[ye,f]),(0,s.jsxs)(s.Fragment,{children:[D&&(0,s.jsx)(c.Button,{leftSection:X&&(V?(0,s.jsx)("span",{dangerouslySetInnerHTML:{__html:V}}):nt()),className:Q?"ai-feature-open-button":"ai-feature-open-button-no-title",variant:"filled",disabled:le,onClick:()=>st(!0),"data-ai-kit-open-button":!0,children:Q&&t.I18n.get(F||pe)}),le&&(0,s.jsxs)(at,{opened:!0,className:"ai-feature-root",onClose:ye,padding:"md",gap:"md",size:"md",portalProps:f==="modal"?{target:re,reuseTargetNode:!0}:void 0,"data-ai-kit-theme":Te,"data-ai-kit-variation":f,children:[f==="modal"&&(0,s.jsx)(c.Modal.Overlay,{}),(0,s.jsxs)(Oe,{w:"100%",style:{left:0},children:[f==="modal"&&(0,s.jsxs)(c.Modal.Header,{style:{zIndex:1e3},children:[nt("ai-feature-title-icon"),(0,s.jsx)(c.Modal.Title,{children:t.I18n.get(S||pe)}),(0,s.jsx)(c.Modal.CloseButton,{})]}),(0,s.jsx)(Dt,{w:"100%",style:{zIndex:1001},children:(0,s.jsxs)(Nt,{enabled:f!=="modal",working:T.busy,variation:f,children:[(0,s.jsxs)(c.Stack,{gap:"sm",mb:"sm",p:"sm",children:[He&&(0,s.jsx)(c.Alert,{color:"red",children:t.I18n.get(He)}),$&&u!=="proofread"&&(0,s.jsxs)(c.Paper,{withBorder:!0,p:"sm",mt:"md",className:"ai-feature-options","data-options-display":A,children:[(0,s.jsxs)(c.Group,{justify:"space-between",align:"center",className:"ai-feature-options-summary",onClick:A==="collapse"?()=>ue(r=>!r):void 0,children:[A==="collapse"&&(0,s.jsxs)(c.Stack,{gap:0,children:[(0,s.jsx)(c.Text,{size:"sm",fw:600,style:{lineHeight:1.1},children:t.I18n.get("Options")}),(0,s.jsx)(c.Text,{size:"xs",c:"dimmed",style:{marginTop:2},children:Be})]}),A==="collapse"&&(0,s.jsx)(c.Button,{variant:"subtle",size:"xs",style:{minWidth:"fit-content"},onClick:r=>{r.stopPropagation(),ue(k=>!k)},children:Ye?t.I18n.get("Hide"):t.I18n.get("Show")})]}),(0,s.jsxs)(Et,{in:Ye,children:[A==="collapse"&&(0,s.jsx)(c.Divider,{my:"sm"}),(0,s.jsxs)(ht,{gap:"xs",justify:"space-between",children:[u==="write"&&N?.text&&(0,s.jsx)(c.Tooltip,{label:t.I18n.get("The topic or subject for the AI to write about."),disabled:A!=="horizontal",position:"top",children:(0,s.jsx)(c.TextInput,{size:"xs",className:"ai-feature-option",styles:j,disabled:T.busy,label:t.I18n.get("Topic"),description:A!=="horizontal"?t.I18n.get("The topic or subject for the AI to write about."):void 0,value:Le||"",onChange:r=>{let k=r.target.value;Ge(k),_?.({text:k})}})}),(u==="write"||u==="rewrite"||u==="generateImageMetadata"||u==="generatePostMetadata")&&N?.instructions&&(0,s.jsx)(c.Tooltip,{label:t.I18n.get("Additional instructions to guide the AI."),disabled:A!=="horizontal",position:"top",children:(0,s.jsx)(c.TextInput,{disabled:T.busy,size:"xs",className:"ai-feature-option",styles:j,label:t.I18n.get("Instructions"),description:A!=="horizontal"?t.I18n.get("Additional instructions to guide the AI."):void 0,value:ie||"",onChange:r=>{let k=r.target.value;Je(k),_?.({instructions:k})}})}),u==="translate"&&(0,s.jsx)(c.Tooltip,{label:t.I18n.get("The language of the input text."),disabled:A!=="horizontal",position:"top",children:(0,s.jsx)(c.Select,{disabled:T.busy,size:"xs",styles:j,className:"ai-feature-option",label:t.I18n.get("Input language"),description:A!=="horizontal"?t.I18n.get("The language of the input text."):void 0,data:[{value:"auto",label:t.I18n.get("Auto-detect")},...M.LANGUAGE_OPTIONS.map(r=>({value:r.value,label:t.I18n.get(r.label)})).sort((r,k)=>r.label.localeCompare(k.label))],value:J||"auto",onChange:r=>{let k=r;Lt(k),_?.({inputLanguage:k})}})}),N?.outputLanguage&&(0,s.jsx)(c.Tooltip,{label:t.I18n.get("The language AI-Kit should use for generated text by default (when applicable)."),disabled:A!=="horizontal",position:"top",children:(0,s.jsx)(c.Select,{disabled:T.busy,size:"xs",styles:j,className:"ai-feature-option",label:t.I18n.get("Output language"),description:A!=="horizontal"?t.I18n.get("The language AI-Kit should use for generated text by default (when applicable)."):void 0,data:[...[u==="rewrite"?{value:"auto",label:t.I18n.get("Auto-detect")}:void 0].filter(Boolean),...M.LANGUAGE_OPTIONS.map(r=>({value:r.value,label:t.I18n.get(r.label)})).sort((r,k)=>r.label.localeCompare(k.label))],value:P||zt.settings.defaultOutputLanguage||(u==="rewrite"?"auto":""),onChange:r=>{let k=r;De(k),_?.({outputLanguage:k})}})}),u==="summarize"&&N?.type&&(0,s.jsx)(c.Tooltip,{label:t.I18n.get("The summary style to generate."),disabled:A!=="horizontal",position:"top",children:(0,s.jsx)(c.Select,{disabled:T.busy,size:"xs",className:"ai-feature-option",styles:j,label:t.I18n.get("Type"),description:A!=="horizontal"?t.I18n.get("The summary style to generate."):void 0,data:[{value:"headline",label:t.I18n.get("Headline")},{value:"key-points",label:t.I18n.get("Key Points")},{value:"teaser",label:t.I18n.get("Teaser")},{value:"tldr",label:t.I18n.get("TL;DR")}],value:Me||"key-points",onChange:r=>{let k=r;Ee(k),_?.({type:k})}})}),(u==="write"||u==="rewrite")&&N?.tone&&(0,s.jsx)(c.Tooltip,{label:t.I18n.get("The tone or style for the AI to use."),disabled:A!=="horizontal",position:"top",children:(0,s.jsx)(c.Select,{disabled:T.busy,size:"xs",className:"ai-feature-option",styles:j,label:t.I18n.get("Tone"),description:A!=="horizontal"?t.I18n.get("The tone or style for the AI to use."):void 0,data:u==="write"?[{value:"neutral",label:t.I18n.get("Neutral")},{value:"formal",label:t.I18n.get("Formal")},{value:"casual",label:t.I18n.get("Casual")}]:[{value:"as-is",label:t.I18n.get("As-Is")},{value:"more-formal",label:t.I18n.get("More formal")},{value:"more-casual",label:t.I18n.get("More casual")}],value:me||(u==="write"?"neutral":"as-is"),onChange:r=>{let k=r;Pt(k),_?.({tone:k})}})}),(u==="write"||u==="rewrite"||u==="summarize")&&N?.length&&(0,s.jsx)(c.Tooltip,{label:t.I18n.get("The target output length."),disabled:A!=="horizontal",position:"top",children:(0,s.jsx)(c.Select,{disabled:T.busy,size:"xs",className:"ai-feature-option",styles:j,label:t.I18n.get("Length"),description:A!=="horizontal"?t.I18n.get("The target output length."):void 0,data:u==="write"||u==="summarize"?[{value:"short",label:t.I18n.get("Short")},{value:"medium",label:t.I18n.get("Medium")},{value:"long",label:t.I18n.get("Long")}]:[{value:"as-is",label:t.I18n.get("As-Is")},{value:"shorter",label:t.I18n.get("Shorter")},{value:"longer",label:t.I18n.get("Longer")}],value:be||(u==="rewrite"?"as-is":"short"),onChange:r=>{let k=r;ze(k),_?.({length:k})}})}),u==="summarize"||u==="write"||u==="rewrite"&&N?.outputFormat&&(0,s.jsx)(c.Tooltip,{label:t.I18n.get("The format for the generated output."),disabled:A!=="horizontal",position:"top",children:(0,s.jsx)(c.Select,{disabled:T.busy,size:"xs",className:"ai-feature-option",styles:j,label:t.I18n.get("Output format"),description:A!=="horizontal"?t.I18n.get("The format for the generated output."):void 0,data:[{value:"plain-text",label:t.I18n.get("Plain Text")},{value:"markdown",label:t.I18n.get("Markdown")},{value:"html",label:t.I18n.get("HTML")}],value:We||"markdown",onChange:r=>{let k=r;Mt(k),_?.({outputFormat:k})}})})]})]})]}),T.busy&&Fe&&(0,s.jsx)(Nt,{enabled:f==="modal",working:T.busy,variation:f,children:(0,s.jsxs)(c.Group,{justify:"center",align:"center",gap:"sm",m:"sm",pr:"lg",children:[(0,s.jsx)(c.Loader,{size:"sm"}),(0,s.jsx)(c.Input.Label,{className:"ai-feature-status-text",children:Fe??"VALAMILYEN SZ\xD6VEG"})]})}),E&&(0,s.jsxs)(c.Stack,{mt:"md",children:[u==="proofread"&&(E.corrections.length===0?(0,s.jsx)(c.Alert,{color:"green",children:t.I18n.get("No issues found. Your text looks great!")}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("p",{style:{marginTop:0,opacity:.85},children:t.I18n.get("Hover highlights to see explanations.")}),(0,s.jsx)(Kn,{original:Le,corrections:E.corrections}),E.correctedInput?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("h4",{style:{marginTop:16,marginBottom:8},children:t.I18n.get("Corrected")}),(0,s.jsx)(c.Group,{c:"pre",className:"ai-feature-generated-content",children:E.correctedInput})]}):null]})),u==="generateImageMetadata"&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.TextInput,{readOnly:!g,label:t.I18n.get("Alt Text"),description:t.I18n.get("The alt text for the image."),value:E.alt_text||"",onChange:r=>Y({...E,alt_text:r.target.value})}),(0,s.jsx)(c.TextInput,{readOnly:!g,label:t.I18n.get("Title"),description:t.I18n.get("The title for the image."),value:E.title||"",onChange:r=>Y({...E,title:r.target.value})}),(0,s.jsx)(c.TextInput,{readOnly:!g,label:t.I18n.get("Caption"),description:t.I18n.get("The caption for the image."),value:E.caption||"",onChange:r=>Y({...E,caption:r.target.value})}),(0,s.jsx)(c.TextInput,{readOnly:!g,label:t.I18n.get("Description"),description:t.I18n.get("The description for the image."),value:E.description||"",onChange:r=>Y({...E,description:r.target.value})})]}),u==="generatePostMetadata"&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.TextInput,{readOnly:!g,label:t.I18n.get("Title"),description:t.I18n.get("The title for the post."),value:E.title||"",onChange:r=>Y({...E,title:r.target.value})}),(0,s.jsx)(c.TextInput,{readOnly:!g,label:t.I18n.get("Excerpt"),description:t.I18n.get("The excerpt for the post."),value:E.excerpt||"",onChange:r=>Y({...E,excerpt:r.target.value})})]}),u!=="proofread"&&u!=="generateImageMetadata"&&u!=="generatePostMetadata"&&typeof E=="string"&&(0,s.jsx)(Fn,{value:E,editable:!!g,onChange:r=>{Y(r)}})]}),E===""&&(0,s.jsx)(Fn,{value:E,editable:!1})]}),(0,s.jsxs)(c.Group,{className:"ai-kit-actions",gap:"sm",mb:"sm",p:"sm",children:[T.busy&&(0,s.jsx)(c.Button,{variant:"outline",size:"sm",onClick:pt,"data-ai-kit-cancel-button":!0,children:t.I18n.get("Cancel")}),!T.busy&&(0,s.jsx)(c.Button,{variant:"filled",size:"sm",disabled:!ae,onClick:()=>Ue(),"data-ai-kit-generate-button":!0,children:qe()}),!T.busy&&T.lastSource==="on-device"&<&&ge&&(0,s.jsx)(c.Button,{variant:"filled",size:"sm",disabled:!ae,onClick:gt,"data-ai-kit-regenerate-on-backend-button":!0,children:mt()}),!T.busy&&R&&(0,s.jsx)(c.Button,{variant:"outline",size:"sm",disabled:!E||u==="proofread"&&E.corrections.length===0,onClick:async()=>{R(We==="html"?await Rt(E):E),ye()},"data-ai-kit-accept-button":!0,children:t.I18n.get(te)}),(0,s.jsx)(c.Button,{variant:"default",size:"sm",onClick:ye,"data-ai-kit-close-button":!0,children:t.I18n.get("Close")})]}),(0,s.jsx)("div",{style:{display:zt.settings?.enablePoweredBy?"flex":"none",justifyContent:zt.settings?.enablePoweredBy?"flex-end":void 0,padding:0,marginRight:"var(--ai-kit-spacing-sm)",marginBottom:f==="default"?"var(--ai-kit-spacing-sm)":void 0},className:zt.settings?.enablePoweredBy?void 0:"sr-only",children:(0,s.jsxs)(c.Text,{c:"p",ta:"right",fs:"italic",fz:"xs",children:["Powered by"," ",(0,s.jsx)(c.Anchor,{href:"https://wpsuite.io/ai-kit/",target:"_blank",td:"none",fz:"xs",fw:400,children:"WPSuite AI-Kit"})]})})]})})]})]})]})};function Fn(n){let{value:a,editable:p,onChange:g}=n;return p?(0,s.jsxs)(c.Stack,{p:0,gap:"sm",children:[(0,s.jsx)(c.Input.Label,{children:t.I18n.get("Generated content")}),(0,s.jsx)(c.Textarea,{value:a,onChange:i=>g?.(i.currentTarget.value),autosize:!0,minRows:2,maxRows:12,p:0,className:"ai-feature-generated-content ai-feature-editor"}),(0,s.jsx)(c.Input.Label,{children:t.I18n.get("Preview")}),(0,s.jsx)(c.Stack,{className:"ai-feature-generated-content ai-feature-preview",children:(0,s.jsx)(Gt.default,{remarkPlugins:[jt.default],children:a})})]}):(0,s.jsx)(c.Stack,{className:"ai-feature-generated-content",children:a?(0,s.jsx)(Gt.default,{remarkPlugins:[jt.default],children:a}):(0,s.jsx)(c.Alert,{color:"yellow",children:t.I18n.get("No content generated.")})})}var qn=Ze(Da);var h=require("@mantine/core"),se=require("@tabler/icons-react"),tt=require("@smart-cloud/ai-kit-core"),_n=require("@wordpress/data"),v=require("aws-amplify/utils"),o=require("react"),$n=Ie(require("react-markdown"),1),Zn=Ie(require("remark-gfm"),1);var Ea="ai-kit-chatbot-attachments",Ne="attachments";var Wt=null;function Ua(){return typeof window<"u"&&typeof window.indexedDB<"u"}async function Ft(){if(!Ua())return null;Wt||(Wt=new Promise(n=>{try{let a=window.indexedDB.open(Ea,1);a.onerror=()=>n(null),a.onblocked=()=>n(null),a.onupgradeneeded=()=>{let p=a.result;p.objectStoreNames.contains(Ne)||p.createObjectStore(Ne,{keyPath:"id"})},a.onsuccess=()=>n(a.result)}catch(a){console.warn("[AiChatbot] IndexedDB is not available",a),n(null)}}));try{return await Wt}catch(n){return console.warn("[AiChatbot] Failed to open attachment store",n),null}}async function Yn(n,a){let p=await Ft();return p?new Promise((g,i)=>{try{let f=p.transaction(Ne,n),S=f.objectStore(Ne),D=a(S);f.oncomplete=()=>g(D),f.onerror=()=>i(f.error),f.onabort=()=>i(f.error)}catch(f){i(f)}}).catch(g=>(console.warn("[AiChatbot] Attachment store transaction failed",g),null)):null}async function Jn(n,a,p){let g={id:n,blob:a,name:p.name,type:p.type,size:p.size,createdAt:Date.now()};return await Yn("readwrite",f=>(f.put(g),n))}async function qt(n){let a=await Ft();return a?new Promise((p,g)=>{try{let i=a.transaction(Ne,"readonly"),f=i.objectStore(Ne).get(n);f.onsuccess=()=>{let S=f.result;p(S??null)},f.onerror=()=>g(f.error),i.onabort=()=>g(i.error)}catch(i){g(i)}}).catch(p=>(console.warn("[AiChatbot] Failed to load attachment",p),null)):null}async function St(){await Yn("readwrite",n=>{n.clear()})}async function Yt(n){let a=await Ft();a&&await new Promise((p,g)=>{try{let i=a.transaction(Ne,"readwrite"),f=i.objectStore(Ne),S=f.getAllKeys();S.onsuccess=()=>{let D=S.result;for(let Q of D){let X=String(Q);n.has(X)||f.delete(Q)}},S.onerror=()=>g(S.error),i.oncomplete=()=>p(),i.onerror=()=>g(i.error),i.onabort=()=>g(i.error)}catch(i){g(i)}}).catch(p=>{console.warn("[AiChatbot] Failed to cleanup attachments",p)})}var d=require("react/jsx-runtime");v.I18n.putVocabularies(_e);var It=1440*60*1e3,Ba=1,Oa="localstorage",Xe=`ai-kit-chatbot-history-v1:${typeof window<"u"?window.location.hostname:"unknown"}`,xt={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 et(n){return`${n}-${Math.random().toString(36).slice(2)}-${Date.now().toString(36)}`}var Ka=4,Na=5*1024*1024,Ha=n=>{let a=(n?.name||"").toString(),p=(n?.code||"").toString(),g=(n?.message||"").toString();return a==="AbortError"||p==="ABORT_ERR"||/abort|aborted|cancel/i.test(g)},Ga=(n,a)=>{if(!n)return null;let p=n.step,g=v.I18n.get((n.message??"").trim()),i=typeof n.progress=="number"?n.progress:null,f=i==null?null:Math.round(i*100);switch(p){case"decide":return g||v.I18n.get("Checking capabilities...");case"on-device:init":return g||v.I18n.get("Initializing on-device AI...");case"on-device:download":return f==null?g||v.I18n.get("Downloading model..."):g||`${v.I18n.get("Downloading model...")} ${f}%`;case"on-device:ready":return g||v.I18n.get("On-device model ready...");case"on-device:run":return g||v.I18n.get("Running on-device...");case"backend:request":case"backend:waiting":case"backend:response":return v.I18n.get(a.assistantThinkingLabel??xt.assistantThinkingLabel);case"done":return g||v.I18n.get("Done.");case"error":return g||v.I18n.get("An error occurred.");default:return g||null}};function Jt(n){if(typeof window>"u")return null;try{return n==="localstorage"?window.localStorage:n==="sessionstorage"?window.sessionStorage:null}catch{return null}}var Ct=n=>{if(typeof window>"u"||typeof URL>"u"||typeof URL.createObjectURL!="function")return null;try{return URL.createObjectURL(n)}catch{return null}},Vt=n=>{if(n&&!(typeof window>"u")&&!(typeof URL>"u"||typeof URL.revokeObjectURL!="function"))try{URL.revokeObjectURL(n)}catch{}},Qn=n=>{!n||n.length===0||n.forEach(a=>Vt(a.objectUrl))},Vn=n=>{n.forEach(a=>Qn(a.attachments))},ja=n=>{let{rootElement:a,store:p,previewMode:g,title:i,openButtonTitle:f,openButtonIcon:S,showOpenButtonTitle:D=!0,showOpenButtonIcon:Q=!0,colorMode:X,language:F,onClose:V,placeholder:ge,maxImages:te,maxImageBytes:A,historyStorage:u=Oa,emptyHistoryAfterDays:x=Ba,labels:ke,openButtonIconLayout:Te="top",openButtonPosition:G="bottom-right"}=n,y=(0,o.useMemo)(()=>({...xt,...ke||{}}),[ke]),R=rt(),[_,K]=(0,o.useState)(""),[re,N]=(0,o.useState)([]),[$,L]=(0,o.useState)([]),[q,le]=(0,o.useState)(null),[st,Ye]=(0,o.useState)(!1),[ue,lt]=(0,o.useState)(!1),[ut,He]=(0,o.useState)(!1),[ne,E]=(0,o.useState)(!1),[Y,Le]=(0,o.useState)(!0),[Ge,je]=(0,o.useState)(null),[ie,Je]=(0,o.useState)(!1),[Pe,dt]=(0,o.useState)(null),[J,Lt]=(0,o.useState)(null),[We,Mt]=(0,o.useState)(!1),[P,De]=(0,o.useState)(null),be=(0,o.useRef)(P);(0,o.useEffect)(()=>{be.current=P},[P]);let ze=(0,o.useRef)(null),me=(0,o.useRef)(!1),[Pt,Me]=(0,o.useState)(null),Ee=(0,o.useRef)(null),Ae=(0,o.useRef)(null),pe=(0,o.useRef)(null),ct=(0,o.useRef)(null),de=(0,o.useCallback)(e=>{e.forEach(m=>Vt(m.objectUrl))},[]),ae=(0,o.useCallback)(()=>{de(qe.current),N([]),Ee.current&&(Ee.current.value="")},[de]),[T,Fe]=(0,o.useState)(null),Ue=(0,o.useRef)(_),gt=(0,o.useRef)($),nt=(0,o.useRef)(T),qe=(0,o.useRef)(re);(0,o.useEffect)(()=>{Ue.current=_},[_]),(0,o.useEffect)(()=>{qe.current=re},[re]),(0,o.useEffect)(()=>{gt.current=$},[$]),(0,o.useEffect)(()=>{nt.current=T},[T]),(0,o.useEffect)(()=>{F&&v.I18n.setLanguage(F||"en")},[F]);let mt=(0,_n.useSelect)(()=>(0,tt.getStoreSelect)(p).isShowChatbotPreview()),ye=(0,o.useMemo)(()=>Math.max(0,te??Ka),[te]),pt=(0,o.useMemo)(()=>Math.max(0,A??Na),[A]),Be=$.length>0,j=(0,o.useMemo)(()=>R.busy&&P==="chat",[R.busy,P]),at=(0,o.useMemo)(()=>j?!1:_.trim().length>0,[_,j]),Oe=(0,o.useMemo)(()=>{let e=f||y.askMeLabel;return v.I18n.get(e)},[f,y.askMeLabel,F]),Dt=(0,o.useMemo)(()=>{let e=i||y.modalTitle;return v.I18n.get(e)},[i,y.modalTitle,F]),Et=(0,o.useMemo)(()=>{let e=ge||y.placeholder;return v.I18n.get(e)},[ge,y.placeholder,F]),ht=(0,o.useMemo)(()=>{let e="ai-docs-ask",m=`ai-open-btn--${G}`;return`${e} ${m}`},[G]),r=(0,o.useCallback)(()=>{let e=ct.current;if(e)try{let m=window.innerHeight||document.documentElement.clientHeight,b=360,l=1e3,z=Math.floor(m*.8),w=Math.max(b,Math.min(z,l));e.style.height=`${w}px`}catch{}},[]),k=(0,o.useCallback)(()=>{let e=J;e&&window.setTimeout(()=>{try{e.scrollTop=e.scrollHeight}catch{}},50)},[J]),U=(0,o.useCallback)(()=>{E(!1),ue&<(!1),He(!1),V?.()},[ue,V]);(0,o.useEffect)(()=>{if(ne)return r(),window.addEventListener("resize",r),()=>window.removeEventListener("resize",r)},[ne,r]),(0,o.useEffect)(()=>{if(!(!ne||!ue))return document.body.style.overflow="hidden",()=>{document.body.style.overflow=""}},[ne,ue,U]);let O=(0,o.useMemo)(()=>re.map(e=>({id:e.id,url:e.objectUrl,title:e.file.name})),[re]);(0,o.useEffect)(()=>{Be||Le(!0)},[Be]),(0,o.useEffect)(()=>()=>{de(qe.current)},[de]),(0,o.useEffect)(()=>{let e=J;if(!e)return;let m=()=>{let b=e.scrollHeight-(e.scrollTop+e.clientHeight);Le(b<20)};return e.addEventListener("scroll",m),()=>{e.removeEventListener("scroll",m)}},[ne,J]),(0,o.useEffect)(()=>{if(!Y)return;let e=J;e&&e.scrollHeight>e.clientHeight&&(e.scrollTop=e.scrollHeight)},[$,R.busy,Y,J]),(0,o.useEffect)(()=>{ne||je(null)},[ne]);let ee=(0,o.useMemo)(()=>R.busy?Ga(R.statusEvent,y)||v.I18n.get("Working\u2026"):null,[R.busy,R.statusEvent,F,y]),H=(0,o.useMemo)(()=>{for(let e=$.length-1;e>=0;e--){let m=$[e];if(m.role==="user"&&m.clientStatus==="canceled")return m.id}return null},[$]),B=(0,o.useCallback)(e=>{L(m=>{let b=[...m].map((w,I)=>({m:w,i:I})).reverse().find(w=>w.m.role==="user"&&w.m.clientStatus==="pending")?.i;if(b==null)return m;let l=m.slice(),z=l[b];return l[b]={...z,clientStatus:e??void 0},l})},[L]),Z=(0,o.useCallback)(()=>{if(!(!R.busy||be.current!=="chat")){me.current=!0;try{R.cancel()}catch{}B("canceled"),De(null),le(null),k()}},[R,B,k]),Se=(0,o.useCallback)(e=>{let m=qe.current,b=Array.from(e.target.files||[]),l=Math.max(0,ye-m.length);if(l===0){e.currentTarget.value="";return}let z=[];for(let w of b){if(z.length>=l)break;let I=/image\/(jpeg|png|gif|webp)/i.test(w.type),W=w.size<=pt,fe=[...m,...z].some(ve=>ve.file.name===w.name&&ve.file.size===w.size&&ve.file.lastModified===w.lastModified);if(!I||!W||fe)continue;let we=Ct(w);we&&z.push({id:et("composer-image"),file:w,objectUrl:we})}z.length&&N(w=>[...w,...z]),e.currentTarget.value=""},[ye,pt]),ft=(0,o.useCallback)(e=>{N(m=>{if(e<0||e>=m.length)return m;let b=m[e];return b&&Vt(b.objectUrl),m.filter((l,z)=>z!==e)})},[]),he=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(q)return he.current&&(window.clearTimeout(he.current),he.current=null),he.current=window.setTimeout(()=>{le(null),he.current=null},6e3),()=>{he.current&&(window.clearTimeout(he.current),he.current=null)}},[q]);let _t=(0,o.useCallback)(async e=>{if(!e.length)return[];let m=u!=="nostorage";return(await Promise.all(e.map(async l=>{let z=et("attachment"),w;if(m)try{w=await Jn(z,l.file,{name:l.file.name,type:l.file.type,size:l.file.size})??void 0}catch(W){console.warn("[AiChatbot] Failed to persist attachment",W)}let I=Ct(l.file);return{id:z,name:l.file.name,type:l.file.type||"application/octet-stream",size:l.file.size,blobId:w,objectUrl:I??void 0,blob:l.file}}))).filter(Boolean)},[u]),$t=(0,o.useCallback)(async e=>{let m=[];for(let b of e){let l;if(b.attachments&&b.attachments.length>0){l=[];for(let z of b.attachments){let w;if(z.blobId)try{w=(await qt(z.blobId))?.blob??void 0}catch(W){console.warn("[AiChatbot] Failed to hydrate attachment",W)}if(!w)continue;let I=w?Ct(w):null;l.push({...z,objectUrl:I??void 0,blob:w??void 0})}}m.push({...b,attachments:l})}return m},[]),Zt=(0,o.useCallback)(async e=>{if(!e||e.length===0){ae();return}let m=[];for(let b of e){let l=b.blob;if(!l&&b.blobId)try{l=(await qt(b.blobId))?.blob??void 0}catch(I){console.warn("[AiChatbot] Failed to reload attachment",I)}if(!l)continue;let z=l instanceof File?l:new File([l],b.name||"attachment",{type:b.type||l.type||"application/octet-stream"}),w=Ct(z);if(w&&(m.push({id:et("composer-image"),file:z,objectUrl:w}),m.length>=ye))break}if(m.length===0){ae();return}N(b=>(de(b),m)),Ee.current&&(Ee.current.value="")},[ae,de,ye]),Ut=(0,o.useCallback)((e,m)=>{e&&je({url:e,title:m})},[]),ea=(0,o.useCallback)(()=>{je(null)},[]),Qt=(0,o.useCallback)(()=>{Vn(gt.current),ae(),L([]),le(null),pe.current=null,Fe(null),Le(!0),Ye(!1);let e=Jt(u);if(e)try{e.removeItem(Xe)}catch{}St()},[ae,u]),ta=(0,o.useCallback)(()=>{Ye(!0)},[]),na=(0,o.useCallback)(()=>{R.busy&&be.current==="chat"&&Z(),Qt()},[R.busy,Z,Qt]),Xt=(0,o.useCallback)(()=>{Ye(!1)},[]),en=(0,o.useCallback)(async(e,m)=>{if(!R.busy)try{let b=pe.current&&Date.now()-pe.current.storedAt<x*It?pe.current.id:void 0;if(!b)return;De("feedback"),le(null),await R.run(async({signal:l,onStatus:z})=>(await(0,tt.sendFeedbackMessage)({sessionId:b,feedbackMessageId:e,feedbackType:m},{signal:l,onStatus:z}),null)),le(null)}catch(b){let l=b?.message?.trim()||v.I18n.get("An error occurred.");le(l),console.error("Failed to send feedback",b)}finally{De(b=>b==="feedback"?null:b)}},[R,F]),tn=(0,o.useCallback)((e,m)=>{L(b=>b.map(l=>l.id!==e||l.role!=="assistant"?l:l.feedback===m?{...l,feedback:void 0}:{...l,feedback:m})),en(e,m)},[en]),kt=(0,o.useCallback)(async()=>{let e=Ue.current.trim();if(!e||R.busy)return;me.current=!1,le(null),De("chat");let m=[...qe.current],b=await _t(m),l=et("user"),z=Date.now(),w={id:l,role:"user",content:e,createdAt:z,clientStatus:"pending",attachments:b.length?b:void 0};K(""),ae(),L(I=>[...I,w]),ne||E(!0),k();try{let I=pe.current&&Date.now()-pe.current.storedAt<x*It?pe.current.id:void 0,W=await R.run(async({signal:we,onStatus:ve})=>await(0,tt.sendChatMessage)({sessionId:I,message:e,images:m.map(pa=>pa.file)},{signal:we,onStatus:ve}));if(me.current){B("canceled");return}if(!W)throw new Error(v.I18n.get(R.error??y.emptyResponseLabel));W.sessionId&&(pe.current={id:W.sessionId,storedAt:Date.now()});let fe={id:W.metadata?.messageId||et("assistant"),role:"assistant",content:W.result||"",citations:W.citations,createdAt:Date.now()};L(we=>[...we.map(Ve=>Ve.id===l?{...Ve,clientStatus:void 0}:Ve),fe]),Fe(z)}catch(I){if(console.error("Error during ask()",I),me.current||Ha(I)){B("canceled");return}let W=I?.message?.trim()||v.I18n.get(y.unexpectedErrorLabel);L(fe=>[...fe.map(ve=>ve.id===l?{...ve,clientStatus:void 0}:ve),{id:et("assistant-error"),role:"assistant",content:`\u26A0\uFE0F ${W}`,createdAt:Date.now()}]),Fe(z)}finally{De(I=>I==="chat"?null:I),me.current=!1,Ae.current&&Ae.current.focus(),k()}},[R,_t,ae,ne,k,B,y.emptyResponseLabel,y.unexpectedErrorLabel,F]),aa=(0,o.useCallback)(e=>{e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),at&&kt())},[kt,at]),ra=(0,o.useCallback)(()=>{E(!0)},[]);(0,o.useEffect)(()=>()=>{ze.current!=null&&(cancelAnimationFrame(ze.current),ze.current=null)},[]);let ia=(0,o.useCallback)(()=>{lt(e=>{let m=!e;return ze.current!=null&&(cancelAnimationFrame(ze.current),ze.current=null),m?(He(!0),requestAnimationFrame(()=>{ze.current=requestAnimationFrame(()=>{He(!1),ze.current=null})})):He(!1),m})},[]),oa=(0,o.useCallback)(e=>{K(e.content),(async()=>(await Zt(e.attachments),L(m=>m.filter(b=>b.id!==e.id)),Qn(e.attachments),queueMicrotask(()=>Ae.current?.focus())))()},[Zt]),nn=(0,o.useMemo)(()=>Q?S?(0,d.jsx)("img",{src:S,className:"ai-open-btn-icon",alt:v.I18n.get(y.askMeLabel||Oe)}):(0,d.jsx)(se.IconMessage,{size:18}):null,[Q,S,y,Oe,F]),sa=(0,o.useMemo)(()=>{let e=nn,m=D?(0,d.jsx)(h.Text,{inherit:!0,children:Oe}):null;if(!Q&&!m)return null;if(!Q)return m;if(!D)return e;switch(Te){case"top":return(0,d.jsxs)(h.Stack,{gap:4,align:"center",children:[e,m]});case"bottom":return(0,d.jsxs)(h.Stack,{gap:4,align:"center",children:[m,e]});case"right":return(0,d.jsxs)(h.Group,{gap:6,align:"center",children:[m,e]});default:return(0,d.jsxs)(h.Group,{gap:6,align:"center",children:[e,m]})}},[nn,Q,D,Oe,Te]),la=(0,o.useMemo)(()=>j,[j]),ua=(0,o.useMemo)(()=>!j,[j]),da=(0,o.useMemo)(()=>q||(Be?v.I18n.get(y.readyLabel):v.I18n.get(y.readyEmptyLabel)),[q,Be,y.readyLabel,y.readyEmptyLabel,F]),ca=(0,o.useMemo)(()=>j?v.I18n.get(y.cancelLabel):v.I18n.get(y.sendLabel),[j,y.cancelLabel,y.sendLabel,F]),ga=(0,o.useMemo)(()=>j?(0,d.jsx)(se.IconPlayerStop,{size:18}):(0,d.jsx)(se.IconSend,{size:18}),[j]),ma=(0,o.useCallback)(()=>{if(j){Z();return}kt()},[j,Z,kt]);return(0,o.useEffect)(()=>{if(!ne||!Pe||!J)return;let e=()=>{let W=window.getComputedStyle(J).overflowY,fe=W==="auto"||W==="scroll",we=Math.ceil(J.scrollHeight),ve=Math.floor(J.clientHeight),Ve=we>ve;return fe&&Ve},m=!1,b=I=>{if(!e())return;I.preventDefault();let W=J.scrollHeight-J.clientHeight;J.scrollTop=Math.max(0,Math.min(W,J.scrollTop+I.deltaY))},l=()=>{let I=e();Mt(I),I!==m&&(m=I,m?Pe.addEventListener("wheel",b,{passive:!1}):Pe.removeEventListener("wheel",b))};l();let z=new ResizeObserver(l);z.observe(J);let w=new MutationObserver(l);return w.observe(J,{childList:!0,subtree:!0,characterData:!0}),window.addEventListener("resize",l),()=>{m&&Pe.removeEventListener("wheel",b),z.disconnect(),w.disconnect(),window.removeEventListener("resize",l)}},[ne,Pe,J]),(0,o.useEffect)(()=>{let e=!1,m=Jt(u);if(!m){u==="nostorage"&&St(),Je(!0);return}return(async()=>{try{let b=m.getItem(Xe);if(!b){Je(!0);return}let l=JSON.parse(b),z=typeof l?.lastUserSentAt=="number"?l.lastUserSentAt:null;if(!z||Date.now()-z>x*It){m.removeItem(Xe),await St(),Je(!0);return}let I=(Array.isArray(l.messages)?l.messages:[]).map(fe=>fe?.role==="user"&&fe.clientStatus==="pending"?{...fe,clientStatus:"canceled"}:fe),W=await $t(I);if(e){Vn(W);return}L(W),Fe(z),l.session&&l.session.id&&(pe.current=l.session)}catch(b){console.warn("[AiChatbot] Failed to load history",b);try{m.removeItem(Xe)}catch{}}finally{e||Je(!0)}})(),()=>{e=!0}},[u,x,$t]),(0,o.useEffect)(()=>{if(!ie)return;let e=Jt(u);if(!e)return;let m=nt.current;if(!m)return;if(Date.now()-m>x*It){try{e.removeItem(Xe)}catch{}Yt(new Set);return}let b=$.map(({attachments:w,...I})=>({...I,attachments:w?.map(({objectUrl:W,blob:fe,...we})=>we)})),l={version:1,lastUserSentAt:m,session:pe.current,messages:b};try{e.setItem(Xe,JSON.stringify(l))}catch{}let z=new Set;b.forEach(w=>{w.attachments?.forEach(I=>{I.blobId&&z.add(I.blobId)})}),Yt(z)},[ie,$,T,u,x]),g&&!mt||!g&&mt?null:(0,d.jsxs)(h.Group,{className:ht,children:[!ne&&(0,d.jsx)(h.Button,{variant:"filled",className:D?"ai-launcher-button ai-launcher-text":"ai-launcher-button",onClick:ra,"aria-label":Oe,title:Oe,"data-ai-kit-open-button":!0,children:sa}),ne&&(0,d.jsx)(h.Modal.Root,{ref:ct,opened:ne,lockScroll:!1,trapFocus:!1,closeOnEscape:!0,onClose:U,className:ht+" ai-chat-container"+(ue?" maximized":"")+(ue&&ut?" ai-max-enter":""),portalProps:{target:a,reuseTargetNode:!0},"data-ai-kit-theme":X,"data-ai-kit-variation":"modal",children:(0,d.jsxs)("div",{className:"ai-chat-container-internal",ref:dt,children:[(0,d.jsxs)(h.Modal.Header,{className:"ai-chat-header-bar",children:[(0,d.jsx)(h.Modal.Title,{className:"ai-chat-title",children:Dt}),(0,d.jsxs)(h.Group,{gap:"4px",align:"center",justify:"center",children:[typeof window<"u"&&window.innerWidth>600&&(0,d.jsx)(h.ActionIcon,{variant:"subtle",c:"var(--ai-kit-chat-icon-color, var(--ai-kit-color-text))",onClick:ia,title:ue?v.I18n.get(y.restoreSizeLabel):v.I18n.get(y.maximizeLabel),"aria-label":ue?v.I18n.get(y.restoreSizeLabel):v.I18n.get(y.maximizeLabel),"data-ai-kit-maximize-button":!0,children:ue?(0,d.jsx)(se.IconMinimize,{size:16}):(0,d.jsx)(se.IconMaximize,{size:16})}),(0,d.jsx)(h.Modal.CloseButton,{"aria-label":v.I18n.get(y.closeChatLabel)})]})]}),(0,d.jsxs)(h.Modal.Body,{className:"ai-chat-scroll",ref:Lt,"data-scrollable":We?"true":"false",children:[$.map(e=>{let m=e.role==="user",b=m&&e.clientStatus==="canceled"&&e.id===H;return(0,d.jsx)(h.Group,{justify:m?"flex-end":"flex-start",className:"ai-chat-row "+e.role,onMouseEnter:()=>Me(e.id),onMouseLeave:()=>Me(l=>l===e.id?null:l),children:(0,d.jsxs)(h.Stack,{gap:4,w:"100%",style:{alignItems:m?"flex-end":"flex-start"},children:[(0,d.jsxs)(h.Stack,{className:"ai-chat-bubble",children:[(0,d.jsxs)(h.Text,{className:"ai-chat-header",children:[(0,d.jsx)(h.Text,{fw:"bolder",size:"xs",style:{whiteSpace:"nowrap"},children:m?v.I18n.get(y.userLabel):v.I18n.get(y.assistantLabel)}),"\xA0",(0,d.jsx)(h.Text,{size:"xs",style:{whiteSpace:"nowrap"},children:new Date(e.createdAt).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})})]}),e.role==="assistant"?(0,d.jsx)($n.default,{remarkPlugins:[Zn.default],children:e.content}):(0,d.jsx)(h.Text,{size:"sm",miw:"100px",children:e.content})]}),e.attachments&&e.attachments.length>0&&(0,d.jsx)(h.Group,{className:"ai-thumbs ai-message-thumbs",gap:"xs",children:e.attachments.map(l=>(0,d.jsx)("button",{type:"button",className:"thumb",style:{backgroundImage:l.objectUrl?`url(${l.objectUrl})`:void 0,backgroundSize:"cover",backgroundPosition:"center",backgroundRepeat:"no-repeat"},onClick:()=>Ut(l.objectUrl,l.name),disabled:!l.objectUrl,title:l.name||v.I18n.get("View image"),"aria-label":l.name||v.I18n.get("View image"),children:!l.objectUrl&&(0,d.jsx)(h.Text,{size:"xs",c:"dimmed",children:v.I18n.get("Loading image...")})},l.id))}),b&&(0,d.jsxs)(h.Group,{justify:"flex-end",gap:"xs",children:[(0,d.jsx)(h.Text,{size:"xs",c:"dimmed",children:(0,d.jsx)("em",{children:v.I18n.get(y.notSentLabel)})}),Pt===e.id&&(0,d.jsx)(h.ActionIcon,{size:"sm",variant:"subtle",onClick:()=>oa(e),title:v.I18n.get(y.editLabel),"aria-label":v.I18n.get(y.editLabel),"data-ai-kit-edit-button":!0,children:(0,d.jsx)(se.IconPencil,{size:14})})]}),e.citations&&e.citations.length>0&&(0,d.jsxs)(h.Stack,{className:"ai-citations",children:[(0,d.jsx)(h.Text,{fw:"bold",size:"sm",mb:"xs",children:v.I18n.get(y.referencesLabel)}),(0,d.jsx)(h.List,{spacing:"xs",size:"sm",children:e.citations.map((l,z)=>{let w=l.sourceUrl||l.url,I=l.title||w||`${v.I18n.get(y.referenceLabel)} #${z+1}`;return(0,d.jsxs)(h.List.Item,{children:[w?(0,d.jsx)(h.Anchor,{href:w,target:"_blank",rel:"noreferrer",children:I}):(0,d.jsx)(h.Text,{children:I}),l.snippet?(0,d.jsx)(h.Text,{size:"xs",c:"dimmed",mt:4,children:l.snippet}):null]},z)})})]}),e.role==="assistant"&&(0,d.jsxs)(h.Group,{className:"ai-feedback",gap:"xs",children:[(0,d.jsx)(h.Button,{className:e.feedback==="accepted"?"active":void 0,onClick:()=>tn(e.id,"accepted"),"aria-label":v.I18n.get(y.acceptResponseLabel),disabled:R.busy,"data-ai-kit-feedback-accept-button":!0,children:"\u{1F44D}"}),(0,d.jsx)(h.Button,{type:"button",className:e.feedback==="rejected"?"active":void 0,onClick:()=>tn(e.id,"rejected"),"aria-label":v.I18n.get(y.rejectResponseLabel),disabled:R.busy,"data-ai-kit-feedback-reject-button":!0,children:"\u{1F44E}"})]})]})},e.id)}),la&&(0,d.jsx)(h.Group,{justify:"flex-start",className:"ai-chat-row assistant status",children:(0,d.jsxs)(h.Stack,{className:"ai-chat-bubble typing",children:[ee?(0,d.jsx)(h.Text,{size:"sm",c:"dimmed",children:(0,d.jsx)("em",{children:ee})}):null,(0,d.jsxs)("div",{className:"typing-indicator",children:[(0,d.jsx)("span",{}),(0,d.jsx)("span",{}),(0,d.jsx)("span",{})]})]})})]}),ua&&(0,d.jsx)(h.Group,{className:"ai-status-line",children:(0,d.jsx)(h.Text,{className:"ai-status-text",children:(0,d.jsx)("em",{children:da})})}),(0,d.jsxs)(h.Stack,{className:"ai-box ai-box-open",children:[(0,d.jsxs)(h.Modal,{opened:st,onClose:Xt,centered:!0,title:v.I18n.get("Reset conversation"),style:{position:"fixed"},left:0,children:[(0,d.jsx)(h.Text,{size:"sm",children:v.I18n.get("Are you sure you want to reset the conversation?")}),(0,d.jsxs)(h.Group,{justify:"flex-end",mt:"md",children:[(0,d.jsx)(h.Button,{variant:"default",onClick:Xt,"data-ai-kit-no-button":!0,children:v.I18n.get("No")}),(0,d.jsx)(h.Button,{color:"var(--ai-kit-color-danger, red)",onClick:na,disabled:!Be&&!j,"data-ai-kit-yes-button":!0,children:v.I18n.get("Yes")})]})]}),(0,d.jsx)(h.Group,{children:(0,d.jsx)(h.Textarea,{className:"ai-message",ref:Ae,placeholder:Et,value:_,onChange:e=>{K(e.target.value)},onKeyDown:aa,rows:3})}),(0,d.jsxs)(h.Group,{className:"ai-actions",justify:"space-between",w:"100%",children:[(0,d.jsx)(h.Group,{justify:"flex-start",children:(0,d.jsx)(h.Button,{variant:"light",leftSection:(0,d.jsx)(se.IconTrash,{size:18}),onClick:ta,disabled:!Be&&!j,"data-ai-kit-reset-button":!0,children:v.I18n.get(y.resetLabel)})}),(0,d.jsxs)(h.Group,{justify:"flex-end",children:[ye>0&&(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(h.Button,{variant:"outline",leftSection:(0,d.jsx)(se.IconPaperclip,{size:18}),onClick:()=>Ee.current?.click(),disabled:re.length>=ye||j,title:v.I18n.get(y.addImageLabel),"data-ai-kit-add-image-button":!0,children:v.I18n.get(y.addLabel)}),(0,d.jsx)(h.Input,{ref:Ee,type:"file",accept:"image/png,image/jpeg,image/gif,image/webp",style:{display:"none"},multiple:!0,onChange:Se})]}),(0,d.jsx)(h.Button,{leftSection:ga,variant:"filled",onClick:ma,disabled:!j&&!at,"data-ai-kit-send-button":!0,children:ca})]})]}),O.length>0&&(0,d.jsx)(h.Group,{className:"ai-thumbs",mt:"xs",gap:"xs",children:O.map(({url:e,title:m},b)=>(0,d.jsx)("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":m||v.I18n.get("View image"),onClick:()=>Ut(e,m),onKeyDown:l=>{(l.key==="Enter"||l.key===" ")&&(l.preventDefault(),Ut(e,m))},children:(0,d.jsx)(h.Button,{variant:"white",onClick:l=>{l.stopPropagation(),ft(b)},"aria-label":v.I18n.get(y.removeImageLabel),mt:"-xs",mr:"-xs",size:"xs",p:0,className:"remove-image-button",title:v.I18n.get(y.removeImageLabel),"data-ai-kit-remove-image-button":!0,children:"X"})},re[b]?.id??b))})]})]})}),(0,d.jsx)(h.Modal,{opened:!!Ge,onClose:ea,centered:!0,size:"auto",title:Ge?.title||v.I18n.get("Image preview"),children:Ge&&(0,d.jsx)("img",{src:Ge.url,alt:Ge.title||v.I18n.get("Image preview"),style:{maxWidth:"100%",maxHeight:"70vh"}})})]})},Xn=Ze(ja,{showOpenButton:!0,variation:"modal"});0&&(module.exports={AiChatbot,AiFeature,DEFAULT_CHATBOT_LABELS,isBackendConfigured,markdownToHtml,readDefaultOutputLanguage,stripCodeFence,translations,useAiRun,withAiKitShell});
|
package/dist/index.js
CHANGED
|
@@ -4,9 +4,9 @@ import{Alert as Xt,Anchor as Za,Button as Qe,Collapse as Qa,Divider as Xa,Group
|
|
|
4
4
|
inherits: true;
|
|
5
5
|
initial-value: 0deg;
|
|
6
6
|
}
|
|
7
|
-
`,(n.head??n.documentElement).appendChild(r)}function qn({stylesheets:n,children:r,rootElementId:m,mode:u="local",overlayRootId:i="ai-kit-overlay-root",setHost:d}){let w=xa(null),[C,_]=jn(null),[$,G]=jn(null),q=Gn(()=>[...n].join("|"),[n]);Ca(()=>{if(!w.current)return;let X=u==="overlay"?Ma():w.current.ownerDocument,y;if(u==="overlay"){let D=X.getElementById(i);D||(D=X.createElement("div"),D.id=i,D.style.position="fixed",D.style.inset="0",D.style.width="0",D.style.height="0",D.style.zIndex="2147483647",D.style.pointerEvents="none",X.body.appendChild(D)),y=D}else y=w.current;d(y);let s=y.shadowRoot??y.attachShadow({mode:"open"}),z=s.querySelector(`#${CSS.escape(m)}`);z||(z=X.createElement("div"),z.id=m,z.style.margin="0",u==="overlay"&&(z.style.pointerEvents="auto"),s.appendChild(z));let be=()=>z.getAttribute("data-mantine-color-scheme"),we=()=>z.getAttribute("data-ai-kit-variation"),O=()=>{y.setAttribute("data-ai-kit-variation",we()||"default"),y.setAttribute("data-mantine-color-scheme",be()||"auto")};O();let f=new MutationObserver(O);f.observe(z,{attributes:!0,attributeFilter:["data-mantine-color-scheme"]});let T=window.matchMedia?.("(prefers-color-scheme: dark)"),Y=()=>O();return T?.addEventListener?.("change",Y),Da(X),Pa(X,z,s,q?q.split("|"):[]),_(s),G(z),()=>{f.disconnect(),T?.removeEventListener?.("change",Y)}},[u,i,m,q]);let ge=Gn(()=>$?Sa({key:u==="overlay"?"ai-kit-ov":"ai-kit-local",container:$}):null,[$,u]);return Fn("div",{ref:w,style:{outline:"none",boxShadow:"none",backgroundColor:"transparent"},children:$&&C&&ge?La(Fn(Ia,{value:ge,children:r({rootElement:$,shadowRoot:C})}),$):null})}import{jsx as Lt}from"react/jsx-runtime";var Ha=n=>{let r=5381;for(let m=0;m<n.length;m++)r=(r<<5)+r^n.charCodeAt(m);return(r>>>0).toString(36)},Yn=n=>n.replace(/<\/?(?:style|script)\b[^>]*>/gi,"").replace(/@import\s+['"]?javascript:[^;]+;?/gi,"").replace(/url\(\s*(['"]?)javascript:[^)]+\)/gi,"").replace(/\bexpression\s*\([^)]*\)/gi,""),Jn="ai-kit-style-text";function mt(n,r){let m=u=>{let{store:i,variation:d,showOpenButton:w,colors:C,colorMode:_,primaryColor:$,primaryShade:G,themeOverrides:q,language:ge,direction:X}={...u,...r},[y,s]=Vt(null),z=Yt(()=>qt(i).getLanguage()),be=Yt(()=>qt(i).getDirection()),we=Yt(()=>qt(i).getCustomTranslations()),[O]=Vt(new URLSearchParams(window.location.search).get("language")??""),[f]=Vt(new URLSearchParams(window.location.search).get("direction")??""),T=xt(()=>{Jt.putVocabularies(we||{});let S=z||O||ge;if(!S||S==="system"){Jt.setLanguage("");return}return Jt.setLanguage(S),S},[ge,O,z,we]),Y=xt(()=>{let S=be||f||X;return!S||S==="auto"?T==="ar"||T==="he"?"rtl":"ltr":S},[T,X,be,f]),D=xt(()=>[WpSuite?.constants?.aiKit?.mantineCssHref,WpSuite?.constants?.aiKit?.aiKitUiCssHref],[WpSuite]),ie;C&&(ie={},Object.keys(C).forEach(S=>{try{ie[S]=Ea(C[S])}catch{ie[S]=Ua(C[S])}}));let E=Ba({respectReducedMotion:!0,...ie&&{colors:ie},...$&&[...Object.keys(Ze.colors),...Object.keys(ie||{})].includes($)&&{primaryColor:$},...G&&Object.keys(G).length>0&&{primaryShade:{light:G.light??(typeof Ze.primaryShade=="object"?Ze.primaryShade.light:Ze.primaryShade??6),dark:G.dark??(typeof Ze.primaryShade=="object"?Ze.primaryShade.dark:Ze.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"}}}}}}}),J=xt(()=>q?Ha(q):"",[q]);return Na(()=>{if(!y)return;let S=y.shadowRoot.getElementById(Jn);if(q)if(S)(S.getAttribute("data-hash")||"")!==J&&(S.textContent=Yn(q));else{let
|
|
8
|
-
`);return Mt(Ga,{label:_||pt.get("Suggested change"),multiline:!0,children:Mt("span",{style:{textDecoration:"underline",textDecorationStyle:"wavy",cursor:"help",padding:"0 1px"},children:u.original})},i)})})}import Fa,{defaultSchema as qa}from"rehype-sanitize";import Ya from"rehype-stringify";import Ja from"remark-gfm";import Va from"remark-parse";import _a from"remark-rehype";import{unified as $a}from"unified";var $t=async n=>String(await $a().use(Va).use(Ja).use(_a,{allowDangerousHtml:!1}).use(Fa,qa).use(Ya).process(n));import{Fragment as ft,jsx as c,jsxs as Q}from"react/jsx-runtime";t.putVocabularies(ct);var Et=rr(),fr={type:"object",properties:{title:{type:"string",minLength:1,maxLength:60},excerpt:{type:"string",minLength:1,maxLength:155}},required:["title","excerpt"],additionalProperties:!1},kr={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 br(n){let r=(n??"").trim();return r&&r.toLowerCase().split("-")[0]||null}async function Qt(n,r){let m=await ea({text:n},r);return br(m.result?.candidates?.[0]?.detectedLanguage)??"en"}async function yr(n,r,m){let u=gt(n||"").trim();if(!u)return{};try{let i=JSON.parse(u);return{alt_text:typeof i.alt=="string"?r&&r!=="en"?(await Le({text:i.alt,sourceLanguage:"en",targetLanguage:r},m)).result:i.alt:"",title:typeof i.title=="string"?r&&r!=="en"?(await Le({text:i.title,sourceLanguage:"en",targetLanguage:r})).result:i.title:"",caption:typeof i.caption=="string"?r&&r!=="en"?(await Le({text:i.caption,sourceLanguage:"en",targetLanguage:r})).result:i.caption:"",description:typeof i.description=="string"?r&&r!=="en"?(await Le({text:i.description,sourceLanguage:"en",targetLanguage:r})).result:i.description:""}}catch(i){return console.warn("AI Kit: failed to parse JSON metadata output",i),{}}}async function vr(n,r,m){let u=gt(n||"").trim();if(!u)return{};try{let i=JSON.parse(u);return{title:typeof i.title=="string"?r&&r!=="en"?(await Le({text:i.title,sourceLanguage:"en",targetLanguage:r},m)).result:i.title:"",excerpt:typeof i.excerpt=="string"?r&&r!=="en"?(await Le({text:i.excerpt,sourceLanguage:"en",targetLanguage:r},m)).result:i.excerpt:""}}catch(i){return console.warn("AI Kit: failed to parse JSON metadata output",i),{}}}var Tr=n=>{let{allowOverride:r,autoRun:m=!0,editable:u=!0,onDeviceTimeout:i,variation:d=n.variation||"default",title:w,showOpenButton:C=!1,showOpenButtonTitle:_=!0,showOpenButtonIcon:$=!0,openButtonTitle:G,openButtonIcon:q,showRegenerateOnBackendButton:ge=!0,acceptButtonTitle:X=n.acceptButtonTitle||"Accept",optionsDisplay:y=n.optionsDisplay||"collapse",mode:s,context:z,modeOverride:be,colorMode:we,default:O,onClose:f,onAccept:T,onOptionsChanged:Y,language:D,rootElement:ie}=n,E={text:r?.text??!0,instructions:r?.instructions??!0,tone:r?.tone??!0,length:r?.length??!0,type:r?.type??!0,outputLanguage:r?.outputLanguage??!0,outputFormat:r?.outputFormat??!0},J=ht(()=>!!(s==="write"&&E?.text||(s==="write"||s==="rewrite"||s==="generateImageMetadata"||s==="generatePostMetadata")&&E?.instructions||(s==="write"||s==="rewrite")&&E?.tone||(s==="write"||s==="rewrite"||s==="summarize")&&E?.length||s==="summarize"&&E?.type||E?.outputLanguage),[E]),[S,
|
|
9
|
-
`+(oe?.trim()||""),V);return Ie!==L&&Ie!=="en"&&(
|
|
7
|
+
`,(n.head??n.documentElement).appendChild(r)}function qn({stylesheets:n,children:r,rootElementId:m,mode:u="local",overlayRootId:i="ai-kit-overlay-root",setHost:d}){let w=xa(null),[C,_]=jn(null),[$,G]=jn(null),q=Gn(()=>[...n].join("|"),[n]);Ca(()=>{if(!w.current)return;let X=u==="overlay"?Ma():w.current.ownerDocument,y;if(u==="overlay"){let D=X.getElementById(i);D||(D=X.createElement("div"),D.id=i,D.style.position="fixed",D.style.inset="0",D.style.width="0",D.style.height="0",D.style.zIndex="2147483647",D.style.pointerEvents="none",X.body.appendChild(D)),y=D}else y=w.current;d(y);let s=y.shadowRoot??y.attachShadow({mode:"open"}),z=s.querySelector(`#${CSS.escape(m)}`);z||(z=X.createElement("div"),z.id=m,z.style.margin="0",u==="overlay"&&(z.style.pointerEvents="auto"),s.appendChild(z));let be=()=>z.getAttribute("data-mantine-color-scheme"),we=()=>z.getAttribute("data-ai-kit-variation"),O=()=>{y.setAttribute("data-ai-kit-variation",we()||"default"),y.setAttribute("data-mantine-color-scheme",be()||"auto")};O();let f=new MutationObserver(O);f.observe(z,{attributes:!0,attributeFilter:["data-mantine-color-scheme"]});let T=window.matchMedia?.("(prefers-color-scheme: dark)"),Y=()=>O();return T?.addEventListener?.("change",Y),Da(X),Pa(X,z,s,q?q.split("|"):[]),_(s),G(z),()=>{f.disconnect(),T?.removeEventListener?.("change",Y)}},[u,i,m,q]);let ge=Gn(()=>$?Sa({key:u==="overlay"?"ai-kit-ov":"ai-kit-local",container:$}):null,[$,u]);return Fn("div",{ref:w,style:{outline:"none",boxShadow:"none",backgroundColor:"transparent"},children:$&&C&&ge?La(Fn(Ia,{value:ge,children:r({rootElement:$,shadowRoot:C})}),$):null})}import{jsx as Lt}from"react/jsx-runtime";var Ha=n=>{let r=5381;for(let m=0;m<n.length;m++)r=(r<<5)+r^n.charCodeAt(m);return(r>>>0).toString(36)},Yn=n=>n.replace(/<\/?(?:style|script)\b[^>]*>/gi,"").replace(/@import\s+['"]?javascript:[^;]+;?/gi,"").replace(/url\(\s*(['"]?)javascript:[^)]+\)/gi,"").replace(/\bexpression\s*\([^)]*\)/gi,""),Jn="ai-kit-style-text";function mt(n,r){let m=u=>{let{store:i,variation:d,showOpenButton:w,colors:C,colorMode:_,primaryColor:$,primaryShade:G,themeOverrides:q,language:ge,direction:X}={...u,...r},[y,s]=Vt(null),z=Yt(()=>qt(i).getLanguage()),be=Yt(()=>qt(i).getDirection()),we=Yt(()=>qt(i).getCustomTranslations()),[O]=Vt(new URLSearchParams(window.location.search).get("language")??""),[f]=Vt(new URLSearchParams(window.location.search).get("direction")??""),T=xt(()=>{Jt.putVocabularies(we||{});let S=z||O||ge;if(!S||S==="system"){Jt.setLanguage("");return}return Jt.setLanguage(S),S},[ge,O,z,we]),Y=xt(()=>{let S=be||f||X;return!S||S==="auto"?T==="ar"||T==="he"?"rtl":"ltr":S},[T,X,be,f]),D=xt(()=>[WpSuite?.constants?.aiKit?.mantineCssHref,WpSuite?.constants?.aiKit?.aiKitUiCssHref],[WpSuite]),ie;C&&(ie={},Object.keys(C).forEach(S=>{try{ie[S]=Ea(C[S])}catch{ie[S]=Ua(C[S])}}));let E=Ba({respectReducedMotion:!0,...ie&&{colors:ie},...$&&[...Object.keys(Ze.colors),...Object.keys(ie||{})].includes($)&&{primaryColor:$},...G&&Object.keys(G).length>0&&{primaryShade:{light:G.light??(typeof Ze.primaryShade=="object"?Ze.primaryShade.light:Ze.primaryShade??6),dark:G.dark??(typeof Ze.primaryShade=="object"?Ze.primaryShade.dark:Ze.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"}}}}}}}),J=xt(()=>q?Ha(q):"",[q]);return Na(()=>{if(!y)return;let S=y.shadowRoot.getElementById(Jn);if(q)if(S)(S.getAttribute("data-hash")||"")!==J&&(S.textContent=Yn(q));else{let j=y.shadowRoot.ownerDocument.createElement("style");j.id=Jn,j.setAttribute("data-hash",J),j.textContent=Yn(q),y.shadowRoot.appendChild(j)}else S&&S.remove()},[y,q,J]),Lt(qn,{mode:d==="modal"&&!w?"overlay":"local",variation:d,overlayRootId:"ai-kit-overlay-root",stylesheets:D,setHost:s,rootElementId:d==="modal"&&!w?"ai-kit-portal-root":"ai-kit-inline-root",children:({rootElement:S})=>{S.setAttribute("data-ai-kit-variation",d||"default"),S.setAttribute("dir",Y),T&&S.setAttribute("lang",T);let j=_==="auto"?window.matchMedia?.("(prefers-color-scheme: dark)")?.matches?"dark":"light":_;return Lt(Oa,{initialDirection:Y,children:Lt(Ka,{forceColorScheme:j,theme:E,getRootElement:()=>S,children:Lt(n,{...u,colorMode:j,language:T,rootElement:S})})})}})};return m.displayName=`withAiKitShell(${n.displayName??n.name??"Component"})`,m}import{jsx as Vn}from"react/jsx-runtime";function _t({enabled:n=!0,working:r=!1,variation:m="default",children:u}){return Vn("div",{className:"ai-kit-feature-border","data-ai-kit-active":!!(n&&r)?"true":"false","data-ai-kit-variation":m,children:Vn("div",{className:"ai-kit-feature-border__content",children:u})})}import{Tooltip as Ga}from"@mantine/core";import{useMemo as ja}from"react";import{I18n as pt}from"aws-amplify/utils";import{jsx as Mt}from"react/jsx-runtime";function Wa(n){let r=[...n].sort((i,d)=>i.startIndex-d.startIndex),m=[],u=-1;for(let i of r)typeof i.startIndex!="number"||typeof i.endIndex!="number"||i.startIndex<0||i.endIndex<=i.startIndex||i.startIndex<u||(m.push(i),u=i.endIndex);return m}function _n({original:n,corrections:r}){let m=ja(()=>{let u=Wa(r||[]),i=[],d=0;for(let w of u){w.startIndex>d&&i.push({kind:"plain",text:n.slice(d,w.startIndex)});let C=n.slice(w.startIndex,w.endIndex);i.push({kind:"corr",original:C,corr:w}),d=w.endIndex}return d<n.length&&i.push({kind:"plain",text:n.slice(d)}),i},[n,r]);return Mt("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:m.map((u,i)=>{if(u.kind==="plain")return Mt("span",{children:u.text},i);let d=(u.corr.replacement??u.corr.correction??"").trim(),w=(u.corr.explanation??"").trim(),C=(u.corr.type??"").trim(),_=[C?pt.get("Type")+": - "+pt.get(C):"",d?pt.get("Replace with")+": "+d:"",w?pt.get("Why")+": "+w:""].filter(Boolean).join(`
|
|
8
|
+
`);return Mt(Ga,{label:_||pt.get("Suggested change"),multiline:!0,children:Mt("span",{style:{textDecoration:"underline",textDecorationStyle:"wavy",cursor:"help",padding:"0 1px"},children:u.original})},i)})})}import Fa,{defaultSchema as qa}from"rehype-sanitize";import Ya from"rehype-stringify";import Ja from"remark-gfm";import Va from"remark-parse";import _a from"remark-rehype";import{unified as $a}from"unified";var $t=async n=>String(await $a().use(Va).use(Ja).use(_a,{allowDangerousHtml:!1}).use(Fa,qa).use(Ya).process(n));import{Fragment as ft,jsx as c,jsxs as Q}from"react/jsx-runtime";t.putVocabularies(ct);var Et=rr(),fr={type:"object",properties:{title:{type:"string",minLength:1,maxLength:60},excerpt:{type:"string",minLength:1,maxLength:155}},required:["title","excerpt"],additionalProperties:!1},kr={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 br(n){let r=(n??"").trim();return r&&r.toLowerCase().split("-")[0]||null}async function Qt(n,r){let m=await ea({text:n},r);return br(m.result?.candidates?.[0]?.detectedLanguage)??"en"}async function yr(n,r,m){let u=gt(n||"").trim();if(!u)return{};try{let i=JSON.parse(u);return{alt_text:typeof i.alt=="string"?r&&r!=="en"?(await Le({text:i.alt,sourceLanguage:"en",targetLanguage:r},m)).result:i.alt:"",title:typeof i.title=="string"?r&&r!=="en"?(await Le({text:i.title,sourceLanguage:"en",targetLanguage:r})).result:i.title:"",caption:typeof i.caption=="string"?r&&r!=="en"?(await Le({text:i.caption,sourceLanguage:"en",targetLanguage:r})).result:i.caption:"",description:typeof i.description=="string"?r&&r!=="en"?(await Le({text:i.description,sourceLanguage:"en",targetLanguage:r})).result:i.description:""}}catch(i){return console.warn("AI Kit: failed to parse JSON metadata output",i),{}}}async function vr(n,r,m){let u=gt(n||"").trim();if(!u)return{};try{let i=JSON.parse(u);return{title:typeof i.title=="string"?r&&r!=="en"?(await Le({text:i.title,sourceLanguage:"en",targetLanguage:r},m)).result:i.title:"",excerpt:typeof i.excerpt=="string"?r&&r!=="en"?(await Le({text:i.excerpt,sourceLanguage:"en",targetLanguage:r},m)).result:i.excerpt:""}}catch(i){return console.warn("AI Kit: failed to parse JSON metadata output",i),{}}}var Tr=n=>{let{allowOverride:r,autoRun:m=!0,editable:u=!0,onDeviceTimeout:i,variation:d=n.variation||"default",title:w,showOpenButton:C=!1,showOpenButtonTitle:_=!0,showOpenButtonIcon:$=!0,openButtonTitle:G,openButtonIcon:q,showRegenerateOnBackendButton:ge=!0,acceptButtonTitle:X=n.acceptButtonTitle||"Accept",optionsDisplay:y=n.optionsDisplay||"collapse",mode:s,context:z,modeOverride:be,colorMode:we,default:O,onClose:f,onAccept:T,onOptionsChanged:Y,language:D,rootElement:ie}=n,E={text:r?.text??!0,instructions:r?.instructions??!0,tone:r?.tone??!0,length:r?.length??!0,type:r?.type??!0,outputLanguage:r?.outputLanguage??!0,outputFormat:r?.outputFormat??!0},J=ht(()=>!!(s==="write"&&E?.text||(s==="write"||s==="rewrite"||s==="generateImageMetadata"||s==="generatePostMetadata")&&E?.instructions||(s==="write"||s==="rewrite")&&E?.tone||(s==="write"||s==="rewrite"||s==="summarize")&&E?.length||s==="summarize"&&E?.type||E?.outputLanguage),[E]),[S,j]=se(),[ue,kt]=se(!C),[nt,de]=se(!1),[bt,yt]=se(!1),[Fe,ee]=se(null),[x,W]=se(null),[Ce,qe]=se(O?.text),[Ye]=se(O?.image),[oe,at]=se(O?.instructions),[Pe,vt]=se(),[F,Kt]=se(O?.inputLanguage),[Je,Nt]=se(O?.outputFormat),[I,De]=se(O?.outputLanguage),[ye,Se]=se(O?.length),[me,Ht]=se(O?.tone),[xe,Ee]=se(O?.type),Re=dr(!1),pe=ht(()=>{D&&t.setLanguage(D||"en");let a;switch(s){default:case"summarize":a=t.get("Summarize");break;case"proofread":a=t.get("Proofread");break;case"write":a=t.get("Write");break;case"rewrite":a=t.get("Rewrite");break;case"translate":a=t.get("Translate");break;case"generatePostMetadata":a=t.get("Generate Post Metadata");break;case"generateImageMetadata":a=t.get("Generate Image Metadata");break}return a},[s,D]),Tt=Ge(a=>{if(!a||a.silent)return null;let g=a.step,L=t.get((a.message??"").trim()),P=typeof a.progress=="number"?a.progress:null,Z=P==null?null:Math.round(P*100);switch(g){case"decide":return L||t.get("Checking capabilities...");case"on-device:init":return L||t.get("Initializing on-device AI...");case"on-device:download":return L||(Z==null?t.get("Downloading model..."):t.get("Downloading model...")+" "+Z+"%");case"on-device:ready":return L||t.get("On-device model ready.");case"on-device:run":return L||t.get("Generating...");case"backend:request":case"backend:waiting":case"backend:response":switch(s){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 L||t.get("Done.");case"error":return L||t.get("Something went wrong.");default:return L||t.get("Working...")}},[D,s]),ce=ht(()=>Ce??O?.getText,[Ce,O]),ae=ht(()=>{let a=typeof ce=="function"?ce():ce;switch(s){case"generateImageMetadata":return!!Ye;case"translate":return!!(a&&a.trim().length>0)&&I&&Pe!==I;case"summarize":case"proofread":case"rewrite":case"write":case"generatePostMetadata":return!!(a&&a.trim().length>0);default:return!1}},[ce,s,Ye,Pe,I,ue]),b=Ct(),Ve=Tt(b.statusEvent)??(S?t.get(S):null),Ue=Ge(async a=>{if(ae){J&&s!=="proofread"&&ae&&de(!1),ee(null),W(null);try{let g=typeof ce=="function"?ce():ce;switch(s){case"summarize":{let L=await b.run(async({signal:P,onStatus:Z})=>{let U=(I&&I!=="auto"?I:null)||$e(),M={text:g.trim(),format:Je==="plain-text"?"plain-text":"markdown",length:ye,type:xe,outputLanguage:U};return(await sr(M,{signal:P,onStatus:Z,context:z,modeOverride:a,onDeviceTimeoutOverride:i})).result});W(L??"");break}case"proofread":{let L=await b.run(async({signal:P,onStatus:Z})=>{let U=[];try{j("Detecting input language...");let St=(await ea({text:g.trim()},{signal:P,context:z,modeOverride:a,onDeviceTimeoutOverride:i,silent:!0})).result?.candidates?.filter(he=>he.confidence&&he.confidence>.1).map(he=>he.detectedLanguage);U.push(...St)}catch{U.push("en")}let M={text:g.trim(),expectedInputLanguages:U};return(await ir(M,{signal:P,onStatus:Z,context:z,modeOverride:a,onDeviceTimeoutOverride:i})).result});W(L??"");break}case"translate":{let L=await b.run(async({signal:P,onStatus:Z})=>{let U=F??"auto";U==="auto"&&(j("Detecting input language..."),U=await Qt(g.trim(),{signal:P,context:z,modeOverride:a,onDeviceTimeoutOverride:i,silent:!0})),vt(U);let M=(I&&I!=="auto"?I:null)||$e();if(M===U)throw ee(t.get("Input and output languages cannot be the same.")),new Error(t.get("Input and output languages cannot be the same."));let V={text:g.trim(),sourceLanguage:U,targetLanguage:M};return(await Le(V,{signal:P,onStatus:Z,context:z,modeOverride:a,onDeviceTimeoutOverride:i})).result});W(L??"");break}case"rewrite":{let L=await b.run(async({signal:P,onStatus:Z})=>{let U=(I&&I!=="auto"?I:null)||$e();I==="auto"&&(j("Detecting input language..."),U=await Qt(g.trim(),{signal:P,context:z,modeOverride:a,onDeviceTimeoutOverride:i,silent:!0}),De(U));let M={text:g.trim(),context:oe?.trim()||void 0,format:Je==="plain-text"?"plain-text":"markdown",tone:me,length:ye,outputLanguage:U};return(await or(M,{signal:P,onStatus:Z,context:z,modeOverride:a,onDeviceTimeoutOverride:i})).result});W(L??"");break}case"write":{let L=(I&&I!=="auto"?I:null)||$e(),P={prompt:g.trim(),context:oe?.trim()||void 0,format:Je==="plain-text"?"plain-text":"markdown",tone:me,length:ye,outputLanguage:L},Z=await b.run(async({signal:U,onStatus:M})=>{let V={signal:U,context:z,modeOverride:a,onDeviceTimeoutOverride:i,silent:!0};j("Detecting input language...");let Ie=await Qt(g.trim()+`
|
|
9
|
+
`+(oe?.trim()||""),V);return Ie!==L&&Ie!=="en"&&(j("Translating instructions..."),P.prompt=(await Le({text:P.prompt,sourceLanguage:Ie,targetLanguage:"en"},V)).result,oe&&(P.context=(await Le({text:oe,sourceLanguage:Ie,targetLanguage:"en"},V)).result)),(await ur(P,{signal:U,onStatus:M,context:z,modeOverride:a,onDeviceTimeoutOverride:i})).result});W(Z??"");break}case"generatePostMetadata":{let L=[{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.
|
|
12
12
|
Be accurate: do not invent facts; if unsure, use neutral wording.
|
|
@@ -14,7 +14,7 @@ Do not add extra keys, no markdown, no explanations.
|
|
|
14
14
|
Follow the response constraint strictly.
|
|
15
15
|
`+(oe?`
|
|
16
16
|
Follow these additional instructions: ${oe}`:"")},{role:"user",content:`Post content:
|
|
17
|
-
${g.trim()}`}],P=await b.run(async({signal:M,onStatus:V})=>(await $n({messages:L,outputLanguage:"en",responseConstraint:fr},{signal:M,onStatus:V,context:z,modeOverride:a,onDeviceTimeoutOverride:i})).result);if(!P){
|
|
17
|
+
${g.trim()}`}],P=await b.run(async({signal:M,onStatus:V})=>(await $n({messages:L,outputLanguage:"en",responseConstraint:fr},{signal:M,onStatus:V,context:z,modeOverride:a,onDeviceTimeoutOverride:i})).result);if(!P){W("");return}let Z=gt(P).trim(),U=(I&&I!=="auto"?I:null)||$e();try{j("Translating result...");let M=await b.run(async({signal:V})=>await vr(Z,U,{signal:V,context:z,modeOverride:a,onDeviceTimeoutOverride:i,silent:!0}));W(M)}catch(M){W(Z),console.warn("AI Kit: failed to parse SEO JSON",M)}break}case"generateImageMetadata":{let L=[{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
|
`+(oe?`
|
|
31
|
-
Follow these additional instructions: ${oe}`:"")},{role:"user",content:"What can you see on this image according to the optional knowledge base and shared context?"}].filter(Boolean),P=await b.run(async({signal:M,onStatus:V})=>(await $n({messages:L,images:[Ye],outputLanguage:"en",responseConstraint:kr},{signal:M,onStatus:V,context:z,modeOverride:a,onDeviceTimeoutOverride:i})).result);if(!P){j("");return}let Z=(I&&I!=="auto"?I:null)||$e(),U=gt(P).trim();try{F("Translating result...");let M=await b.run(async({signal:V})=>await yr(U,Z,{signal:V,context:z,modeOverride:a,onDeviceTimeoutOverride:i,silent:!0}));j(M)}catch(M){j(U),console.warn("AI Kit: failed to parse SEO JSON",M)}break}}}catch(g){ee(g instanceof Error?g.message:t.get("An unknown error occurred."))}F(void 0)}},[D,b,oe,ye,I,Ce,me,z,s,xe,W,ae,J]),At=Ge(async()=>{await Ue("backend-only")},[Ue]),ut=Ge(a=>{switch(s){case"proofread":return c(cr,{className:a});case"translate":return c(gr,{className:a});case"summarize":return c(hr,{className:a});case"rewrite":case"write":return c(mr,{className:a});case"generateImageMetadata":case"generatePostMetadata":return c(pr,{className:a});default:return c(ar,{mode:s,className:a})}},[s]),_e=Ge(()=>{switch(s){case"proofread":return b.lastSource?t.get("Proofread again"):t.get("Proofread");case"translate":return b.lastSource?t.get("Translate again"):t.get("Translate");case"rewrite":return b.lastSource?t.get("Rewrite again"):t.get("Rewrite");case"summarize":return b.lastSource?t.get("Summarize again"):t.get("Summarize");default:return b.lastSource?t.get("Regenerate"):t.get("Generate")}},[D,b.lastSource,s]),wt=Ge(()=>{switch(s){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")}},[D,s]),ve=Ge(async()=>{kt(!1),j(null),ee(null),Re.current=!1,b.reset(),C||f()},[f,Re,b,C]),Rt=Ge(async()=>{b.busy&&b.cancel()},[b.busy]);Dt(()=>{!ue||!m||!ae||b.busy||x||Re.current||(Re.current=!0,queueMicrotask(()=>{Ue(be)}))},[b.busy,Re,ue,ae,m,x,Ue,be]),Dt(()=>{J&&s!=="proofread"&&(ae||(de(!0),Re.current=!0))},[J,ae,s]),Dt(()=>{let a=!0;return(async()=>{try{await lr();let g=await Hn();a&&yt(g)}catch(g){console.error(g),a&&yt(!1)}})(),()=>{a=!1}},[]);let Be=ht(()=>{let a=[];if(s==="translate"){let g=Pt.find(L=>L.value===W)?.label;a.push(t.get("Input language")+": "+(g?t.get(g):"auto"))}if(I&&E?.outputLanguage){let g=Pt.find(L=>L.value===I)?.label;a.push(t.get("Output language")+": "+(g?t.get(g):I))}return s==="summarize"&&xe&&E?.type&&a.push(t.get("Type")+": "+t.get(xe)),(s==="write"||s==="rewrite")&&me&&E?.tone&&a.push(t.get("Tone")+": "+t.get(me)),(s==="write"||s==="rewrite"||s==="summarize")&&ye&&E?.length&&a.push(t.get("Length")+": "+t.get(ye)),oe?.trim()&&E?.instructions&&a.push(t.get("Instructions")+": \u2713"),a.length?a.join(" \u2022 "):t.get("No overrides")},[D,s,W,I,xe,me,ye,oe]),K={label:{fontSize:11,opacity:.85},description:{fontSize:11,opacity:.65,marginTop:2},input:{fontSize:12}},dt=d==="modal"?Xe.Root:Ke,Oe=d==="modal"?Xe.Content:Ke,Gt=d==="modal"?Xe.Body:Ke,jt=y==="collapse"?Qa:je,zt=y==="horizontal"?Ke:je;return Dt(()=>{if(!(d!=="modal"||!ue))return document.body.style.overflow="hidden",document.body.onkeydown=a=>{a.key==="Escape"&&(a.preventDefault(),ve())},()=>{document.body.style.overflow="",document.body.onkeydown=null}},[ve,d]),Q(ft,{children:[C&&c(Qe,{leftSection:$&&(q?c("span",{dangerouslySetInnerHTML:{__html:q}}):ut()),className:_?"ai-feature-open-button":"ai-feature-open-button-no-title",variant:"filled",disabled:ue,onClick:()=>kt(!0),"data-ai-kit-open-button":!0,children:_&&t.get(G||pe)}),ue&&Q(dt,{opened:!0,className:"ai-feature-root",onClose:ve,padding:"md",gap:"md",size:"md",portalProps:d==="modal"?{target:ie,reuseTargetNode:!0}:void 0,"data-ai-kit-theme":we,"data-ai-kit-variation":d,children:[d==="modal"&&c(Xe.Overlay,{}),Q(Oe,{w:"100%",style:{left:0},children:[d==="modal"&&Q(Xe.Header,{style:{zIndex:1e3},children:[ut("ai-feature-title-icon"),c(Xe.Title,{children:t.get(w||pe)}),c(Xe.CloseButton,{})]}),c(Gt,{w:"100%",style:{zIndex:1001},children:Q(_t,{enabled:d!=="modal",working:b.busy,variation:d,children:[Q(je,{gap:"sm",mb:"sm",p:"sm",children:[Fe&&c(Xt,{color:"red",children:t.get(Fe)}),J&&s!=="proofread"&&Q(tr,{withBorder:!0,p:"sm",mt:"md",className:"ai-feature-options","data-options-display":y,children:[Q(Ke,{justify:"space-between",align:"center",className:"ai-feature-options-summary",onClick:y==="collapse"?()=>de(a=>!a):void 0,children:[y==="collapse"&&Q(je,{gap:0,children:[c(Zt,{size:"sm",fw:600,style:{lineHeight:1.1},children:t.get("Options")}),c(Zt,{size:"xs",c:"dimmed",style:{marginTop:2},children:Be})]}),y==="collapse"&&c(Qe,{variant:"subtle",size:"xs",style:{minWidth:"fit-content"},onClick:a=>{a.stopPropagation(),de(g=>!g)},children:nt?t.get("Hide"):t.get("Show")})]}),Q(jt,{in:nt,children:[y==="collapse"&&c(Xa,{my:"sm"}),Q(zt,{gap:"xs",justify:"space-between",children:[s==="write"&&E?.text&&c(He,{label:t.get("The topic or subject for the AI to write about."),disabled:y!=="horizontal",position:"top",children:c(Ne,{size:"xs",className:"ai-feature-option",styles:K,disabled:b.busy,label:t.get("Topic"),description:y!=="horizontal"?t.get("The topic or subject for the AI to write about."):void 0,value:Ce||"",onChange:a=>{let g=a.target.value;qe(g),Y?.({text:g})}})}),(s==="write"||s==="rewrite"||s==="generateImageMetadata"||s==="generatePostMetadata")&&E?.instructions&&c(He,{label:t.get("Additional instructions to guide the AI."),disabled:y!=="horizontal",position:"top",children:c(Ne,{disabled:b.busy,size:"xs",className:"ai-feature-option",styles:K,label:t.get("Instructions"),description:y!=="horizontal"?t.get("Additional instructions to guide the AI."):void 0,value:oe||"",onChange:a=>{let g=a.target.value;at(g),Y?.({instructions:g})}})}),s==="translate"&&c(He,{label:t.get("The language of the input text."),disabled:y!=="horizontal",position:"top",children:c(ot,{disabled:b.busy,size:"xs",styles:K,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")},...Pt.map(a=>({value:a.value,label:t.get(a.label)})).sort((a,g)=>a.label.localeCompare(g.label))],value:W||"auto",onChange:a=>{let g=a;Kt(g),Y?.({inputLanguage:g})}})}),E?.outputLanguage&&c(He,{label:t.get("The language AI-Kit should use for generated text by default (when applicable)."),disabled:y!=="horizontal",position:"top",children:c(ot,{disabled:b.busy,size:"xs",styles:K,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:[...[s==="rewrite"?{value:"auto",label:t.get("Auto-detect")}:void 0].filter(Boolean),...Pt.map(a=>({value:a.value,label:t.get(a.label)})).sort((a,g)=>a.label.localeCompare(g.label))],value:I||Et.settings.defaultOutputLanguage||(s==="rewrite"?"auto":""),onChange:a=>{let g=a;De(g),Y?.({outputLanguage:g})}})}),s==="summarize"&&E?.type&&c(He,{label:t.get("The summary style to generate."),disabled:y!=="horizontal",position:"top",children:c(ot,{disabled:b.busy,size:"xs",className:"ai-feature-option",styles:K,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:xe||"key-points",onChange:a=>{let g=a;Ee(g),Y?.({type:g})}})}),(s==="write"||s==="rewrite")&&E?.tone&&c(He,{label:t.get("The tone or style for the AI to use."),disabled:y!=="horizontal",position:"top",children:c(ot,{disabled:b.busy,size:"xs",className:"ai-feature-option",styles:K,label:t.get("Tone"),description:y!=="horizontal"?t.get("The tone or style for the AI to use."):void 0,data:s==="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:me||(s==="write"?"neutral":"as-is"),onChange:a=>{let g=a;Ht(g),Y?.({tone:g})}})}),(s==="write"||s==="rewrite"||s==="summarize")&&E?.length&&c(He,{label:t.get("The target output length."),disabled:y!=="horizontal",position:"top",children:c(ot,{disabled:b.busy,size:"xs",className:"ai-feature-option",styles:K,label:t.get("Length"),description:y!=="horizontal"?t.get("The target output length."):void 0,data:s==="write"||s==="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:ye||(s==="rewrite"?"as-is":"short"),onChange:a=>{let g=a;Se(g),Y?.({length:g})}})}),s==="summarize"||s==="write"||s==="rewrite"&&E?.outputFormat&&c(He,{label:t.get("The format for the generated output."),disabled:y!=="horizontal",position:"top",children:c(ot,{disabled:b.busy,size:"xs",className:"ai-feature-option",styles:K,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:Je||"markdown",onChange:a=>{let g=a;Nt(g),Y?.({outputFormat:g})}})})]})]})]}),b.busy&&Ve&&c(_t,{enabled:d==="modal",working:b.busy,variation:d,children:Q(Ke,{justify:"center",align:"center",gap:"sm",m:"sm",pr:"lg",children:[c(er,{size:"sm"}),c(en.Label,{className:"ai-feature-status-text",children:Ve??"VALAMILYEN SZ\xD6VEG"})]})}),x&&Q(je,{mt:"md",children:[s==="proofread"&&(x.corrections.length===0?c(Xt,{color:"green",children:t.get("No issues found. Your text looks great!")}):Q(ft,{children:[c("p",{style:{marginTop:0,opacity:.85},children:t.get("Hover highlights to see explanations.")}),c(_n,{original:Ce,corrections:x.corrections}),x.correctedInput?Q(ft,{children:[c("h4",{style:{marginTop:16,marginBottom:8},children:t.get("Corrected")}),c(Ke,{c:"pre",className:"ai-feature-generated-content",children:x.correctedInput})]}):null]})),s==="generateImageMetadata"&&Q(ft,{children:[c(Ne,{readOnly:!u,label:t.get("Alt Text"),description:t.get("The alt text for the image."),value:x.alt_text||"",onChange:a=>j({...x,alt_text:a.target.value})}),c(Ne,{readOnly:!u,label:t.get("Title"),description:t.get("The title for the image."),value:x.title||"",onChange:a=>j({...x,title:a.target.value})}),c(Ne,{readOnly:!u,label:t.get("Caption"),description:t.get("The caption for the image."),value:x.caption||"",onChange:a=>j({...x,caption:a.target.value})}),c(Ne,{readOnly:!u,label:t.get("Description"),description:t.get("The description for the image."),value:x.description||"",onChange:a=>j({...x,description:a.target.value})})]}),s==="generatePostMetadata"&&Q(ft,{children:[c(Ne,{readOnly:!u,label:t.get("Title"),description:t.get("The title for the post."),value:x.title||"",onChange:a=>j({...x,title:a.target.value})}),c(Ne,{readOnly:!u,label:t.get("Excerpt"),description:t.get("The excerpt for the post."),value:x.excerpt||"",onChange:a=>j({...x,excerpt:a.target.value})})]}),s!=="proofread"&&s!=="generateImageMetadata"&&s!=="generatePostMetadata"&&typeof x=="string"&&c(Xn,{value:x,editable:!!u,onChange:a=>{j(a)}})]}),x===""&&c(Xn,{value:x,editable:!1})]}),Q(Ke,{className:"ai-kit-actions",gap:"sm",mb:"sm",p:"sm",children:[b.busy&&c(Qe,{variant:"outline",size:"sm",onClick:Rt,"data-ai-kit-cancel-button":!0,children:t.get("Cancel")}),!b.busy&&c(Qe,{variant:"filled",size:"sm",disabled:!ae,onClick:()=>Ue(),"data-ai-kit-generate-button":!0,children:_e()}),!b.busy&&b.lastSource==="on-device"&&bt&&ge&&c(Qe,{variant:"filled",size:"sm",disabled:!ae,onClick:At,"data-ai-kit-regenerate-on-backend-button":!0,children:wt()}),!b.busy&&T&&c(Qe,{variant:"outline",size:"sm",disabled:!x||s==="proofread"&&x.corrections.length===0,onClick:async()=>{T(Je==="html"?await $t(x):x),ve()},"data-ai-kit-accept-button":!0,children:t.get(X)}),c(Qe,{variant:"default",size:"sm",onClick:ve,"data-ai-kit-close-button":!0,children:t.get("Close")})]}),c("div",{style:{display:Et.settings?.enablePoweredBy?"flex":"none",justifyContent:Et.settings?.enablePoweredBy?"flex-end":void 0,padding:0,marginRight:"var(--ai-kit-spacing-sm)",marginBottom:d==="default"?"var(--ai-kit-spacing-sm)":void 0},className:Et.settings?.enablePoweredBy?void 0:"sr-only",children:Q(Zt,{c:"p",ta:"right",fs:"italic",fz:"xs",children:["Powered by"," ",c(Za,{href:"https://wpsuite.io/ai-kit/",target:"_blank",td:"none",fz:"xs",fw:400,children:"WPSuite AI-Kit"})]})})]})})]})]})]})};function Xn(n){let{value:r,editable:m,onChange:u}=n;return m?Q(je,{p:0,gap:"sm",children:[c(en.Label,{children:t.get("Generated content")}),c(nr,{value:r,onChange:i=>u?.(i.currentTarget.value),autosize:!0,minRows:2,maxRows:12,p:0,className:"ai-feature-generated-content ai-feature-editor"}),c(en.Label,{children:t.get("Preview")}),c(je,{className:"ai-feature-generated-content ai-feature-preview",children:c(Zn,{remarkPlugins:[Qn],children:r})})]}):c(je,{className:"ai-feature-generated-content",children:r?c(Zn,{remarkPlugins:[Qn],children:r}):c(Xt,{color:"yellow",children:t.get("No content generated.")})})}var Ar=mt(Tr);import{ActionIcon as aa,Anchor as zr,Button as Me,Group as le,Input as Sr,List as ra,Modal as et,Stack as tt,Text as ke,Textarea as Ir}from"@mantine/core";import{IconMaximize as Cr,IconMessage as xr,IconMinimize as Lr,IconPaperclip as Mr,IconPencil as Pr,IconPlayerStop as Dr,IconSend as Er,IconTrash as Ur}from"@tabler/icons-react";import{getStoreSelect as Br,sendChatMessage as Or,sendFeedbackMessage as Kr}from"@smart-cloud/ai-kit-core";import{useSelect as Nr}from"@wordpress/data";import{I18n as k}from"aws-amplify/utils";import{useCallback as B,useEffect as ne,useMemo as te,useRef as Ae,useState as re}from"react";import Hr from"react-markdown";import Gr from"remark-gfm";var wr="ai-kit-chatbot-attachments",We="attachments";var tn=null;function Rr(){return typeof window<"u"&&typeof window.indexedDB<"u"}async function nn(){if(!Rr())return null;tn||(tn=new Promise(n=>{try{let r=window.indexedDB.open(wr,1);r.onerror=()=>n(null),r.onblocked=()=>n(null),r.onupgradeneeded=()=>{let m=r.result;m.objectStoreNames.contains(We)||m.createObjectStore(We,{keyPath:"id"})},r.onsuccess=()=>n(r.result)}catch(r){console.warn("[AiChatbot] IndexedDB is not available",r),n(null)}}));try{return await tn}catch(n){return console.warn("[AiChatbot] Failed to open attachment store",n),null}}async function ta(n,r){let m=await nn();return m?new Promise((u,i)=>{try{let d=m.transaction(We,n),w=d.objectStore(We),C=r(w);d.oncomplete=()=>u(C),d.onerror=()=>i(d.error),d.onabort=()=>i(d.error)}catch(d){i(d)}}).catch(u=>(console.warn("[AiChatbot] Attachment store transaction failed",u),null)):null}async function na(n,r,m){let u={id:n,blob:r,name:m.name,type:m.type,size:m.size,createdAt:Date.now()};return await ta("readwrite",d=>(d.put(u),n))}async function an(n){let r=await nn();return r?new Promise((m,u)=>{try{let i=r.transaction(We,"readonly"),d=i.objectStore(We).get(n);d.onsuccess=()=>{let w=d.result;m(w??null)},d.onerror=()=>u(d.error),i.onabort=()=>u(i.error)}catch(i){u(i)}}).catch(m=>(console.warn("[AiChatbot] Failed to load attachment",m),null)):null}async function Ut(){await ta("readwrite",n=>{n.clear()})}async function rn(n){let r=await nn();r&&await new Promise((m,u)=>{try{let i=r.transaction(We,"readwrite"),d=i.objectStore(We),w=d.getAllKeys();w.onsuccess=()=>{let C=w.result;for(let _ of C){let $=String(_);n.has($)||d.delete(_)}},w.onerror=()=>u(w.error),i.oncomplete=()=>m(),i.onerror=()=>u(i.error),i.onabort=()=>u(i.error)}catch(i){u(i)}}).catch(m=>{console.warn("[AiChatbot] Failed to cleanup attachments",m)})}import{Fragment as $r,jsx as h,jsxs as H}from"react/jsx-runtime";k.putVocabularies(ct);var Bt=1440*60*1e3,jr=1,Wr="localstorage",st=`ai-kit-chatbot-history-v1:${typeof window<"u"?window.location.hostname:"unknown"}`,ln={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 lt(n){return`${n}-${Math.random().toString(36).slice(2)}-${Date.now().toString(36)}`}var Fr=4,qr=5*1024*1024,Yr=n=>{let r=(n?.name||"").toString(),m=(n?.code||"").toString(),u=(n?.message||"").toString();return r==="AbortError"||m==="ABORT_ERR"||/abort|aborted|cancel/i.test(u)},Jr=(n,r)=>{if(!n)return null;let m=n.step,u=k.get((n.message??"").trim()),i=typeof n.progress=="number"?n.progress:null,d=i==null?null:Math.round(i*100);switch(m){case"decide":return u||k.get("Checking capabilities...");case"on-device:init":return u||k.get("Initializing on-device AI...");case"on-device:download":return d==null?u||k.get("Downloading model..."):u||`${k.get("Downloading model...")} ${d}%`;case"on-device:ready":return u||k.get("On-device model ready...");case"on-device:run":return u||k.get("Running on-device...");case"backend:request":case"backend:waiting":case"backend:response":return k.get(r.assistantThinkingLabel??ln.assistantThinkingLabel);case"done":return u||k.get("Done.");case"error":return u||k.get("An error occurred.");default:return u||null}};function on(n){if(typeof window>"u")return null;try{return n==="localstorage"?window.localStorage:n==="sessionstorage"?window.sessionStorage:null}catch{return null}}var Ot=n=>{if(typeof window>"u"||typeof URL>"u"||typeof URL.createObjectURL!="function")return null;try{return URL.createObjectURL(n)}catch{return null}},sn=n=>{if(n&&!(typeof window>"u")&&!(typeof URL>"u"||typeof URL.revokeObjectURL!="function"))try{URL.revokeObjectURL(n)}catch{}},oa=n=>{!n||n.length===0||n.forEach(r=>sn(r.objectUrl))},ia=n=>{n.forEach(r=>oa(r.attachments))},Vr=n=>{let{rootElement:r,store:m,previewMode:u,title:i,openButtonTitle:d,openButtonIcon:w,showOpenButtonTitle:C=!0,showOpenButtonIcon:_=!0,colorMode:$,language:G,onClose:q,placeholder:ge,maxImages:X,maxImageBytes:y,historyStorage:s=Wr,emptyHistoryAfterDays:z=jr,labels:be,openButtonIconLayout:we="top",openButtonPosition:O="bottom-right"}=n,f=te(()=>({...ln,...be||{}}),[be]),T=Ct(),[Y,D]=re(""),[ie,E]=re([]),[J,S]=re([]),[F,ue]=re(null),[kt,nt]=re(!1),[de,bt]=re(!1),[yt,Fe]=re(!1),[ee,x]=re(!1),[j,Ce]=re(!0),[qe,Ye]=re(null),[oe,at]=re(!1),[Pe,vt]=re(null),[W,Kt]=re(null),[Je,Nt]=re(!1),[I,De]=re(null),ye=Ae(I);ne(()=>{ye.current=I},[I]);let Se=Ae(null),me=Ae(!1),[Ht,xe]=re(null),Ee=Ae(null),Re=Ae(null),pe=Ae(null),Tt=Ae(null),ce=B(e=>{e.forEach(l=>sn(l.objectUrl))},[]),ae=B(()=>{ce(_e.current),E([]),Ee.current&&(Ee.current.value="")},[ce]),[b,Ve]=re(null),Ue=Ae(Y),At=Ae(J),ut=Ae(b),_e=Ae(ie);ne(()=>{Ue.current=Y},[Y]),ne(()=>{_e.current=ie},[ie]),ne(()=>{At.current=J},[J]),ne(()=>{ut.current=b},[b]),ne(()=>{G&&k.setLanguage(G||"en")},[G]);let wt=Nr(()=>Br(m).isShowChatbotPreview()),ve=te(()=>Math.max(0,X??Fr),[X]),Rt=te(()=>Math.max(0,y??qr),[y]),Be=J.length>0,K=te(()=>T.busy&&I==="chat",[T.busy,I]),dt=te(()=>K?!1:Y.trim().length>0,[Y,K]),Oe=te(()=>{let e=d||f.askMeLabel;return k.get(e)},[d,f.askMeLabel,G]),Gt=te(()=>{let e=i||f.modalTitle;return k.get(e)},[i,f.modalTitle,G]),jt=te(()=>{let e=ge||f.placeholder;return k.get(e)},[ge,f.placeholder,G]),zt=te(()=>{let e="ai-docs-ask",l=`ai-open-btn--${O}`;return`${e} ${l}`},[O]),a=B(()=>{let e=Tt.current;if(e)try{let l=window.innerHeight||document.documentElement.clientHeight,p=360,o=1e3,A=Math.floor(l*.8),v=Math.max(p,Math.min(A,o));e.style.height=`${v}px`}catch{}},[]),g=B(()=>{let e=W;e&&window.setTimeout(()=>{try{e.scrollTop=e.scrollHeight}catch{}},50)},[W]),L=B(()=>{x(!1),de&&bt(!1),Fe(!1),q?.()},[de,q]);ne(()=>{if(ee)return a(),window.addEventListener("resize",a),()=>window.removeEventListener("resize",a)},[ee,a]),ne(()=>{if(!(!ee||!de))return document.body.style.overflow="hidden",()=>{document.body.style.overflow=""}},[ee,de,L]);let P=te(()=>ie.map(e=>({id:e.id,url:e.objectUrl,title:e.file.name})),[ie]);ne(()=>{Be||Ce(!0)},[Be]),ne(()=>()=>{ce(_e.current)},[ce]),ne(()=>{let e=W;if(!e)return;let l=()=>{let p=e.scrollHeight-(e.scrollTop+e.clientHeight);Ce(p<20)};return e.addEventListener("scroll",l),()=>{e.removeEventListener("scroll",l)}},[ee,W]),ne(()=>{if(!j)return;let e=W;e&&e.scrollHeight>e.clientHeight&&(e.scrollTop=e.scrollHeight)},[J,T.busy,j,W]),ne(()=>{ee||Ye(null)},[ee]);let Z=te(()=>T.busy?Jr(T.statusEvent,f)||k.get("Working\u2026"):null,[T.busy,T.statusEvent,G,f]),U=te(()=>{for(let e=J.length-1;e>=0;e--){let l=J[e];if(l.role==="user"&&l.clientStatus==="canceled")return l.id}return null},[J]),M=B(e=>{S(l=>{let p=[...l].map((v,R)=>({m:v,i:R})).reverse().find(v=>v.m.role==="user"&&v.m.clientStatus==="pending")?.i;if(p==null)return l;let o=l.slice(),A=o[p];return o[p]={...A,clientStatus:e??void 0},o})},[S]),V=B(()=>{if(!(!T.busy||ye.current!=="chat")){me.current=!0;try{T.cancel()}catch{}M("canceled"),De(null),ue(null),g()}},[T,M,g]),Ie=B(e=>{let l=_e.current,p=Array.from(e.target.files||[]),o=Math.max(0,ve-l.length);if(o===0){e.currentTarget.value="";return}let A=[];for(let v of p){if(A.length>=o)break;let R=/image\/(jpeg|png|gif|webp)/i.test(v.type),N=v.size<=Rt,fe=[...l,...A].some(Te=>Te.file.name===v.name&&Te.file.size===v.size&&Te.file.lastModified===v.lastModified);if(!R||!N||fe)continue;let ze=Ot(v);ze&&A.push({id:lt("composer-image"),file:v,objectUrl:ze})}A.length&&E(v=>[...v,...A]),e.currentTarget.value=""},[ve,Rt]),St=B(e=>{E(l=>{if(e<0||e>=l.length)return l;let p=l[e];return p&&sn(p.objectUrl),l.filter((o,A)=>A!==e)})},[]),he=Ae(null);ne(()=>{if(F)return he.current&&(window.clearTimeout(he.current),he.current=null),he.current=window.setTimeout(()=>{ue(null),he.current=null},6e3),()=>{he.current&&(window.clearTimeout(he.current),he.current=null)}},[F]);let un=B(async e=>{if(!e.length)return[];let l=s!=="nostorage";return(await Promise.all(e.map(async o=>{let A=lt("attachment"),v;if(l)try{v=await na(A,o.file,{name:o.file.name,type:o.file.type,size:o.file.size})??void 0}catch(N){console.warn("[AiChatbot] Failed to persist attachment",N)}let R=Ot(o.file);return{id:A,name:o.file.name,type:o.file.type||"application/octet-stream",size:o.file.size,blobId:v,objectUrl:R??void 0,blob:o.file}}))).filter(Boolean)},[s]),dn=B(async e=>{let l=[];for(let p of e){let o;if(p.attachments&&p.attachments.length>0){o=[];for(let A of p.attachments){let v;if(A.blobId)try{v=(await an(A.blobId))?.blob??void 0}catch(N){console.warn("[AiChatbot] Failed to hydrate attachment",N)}if(!v)continue;let R=v?Ot(v):null;o.push({...A,objectUrl:R??void 0,blob:v??void 0})}}l.push({...p,attachments:o})}return l},[]),cn=B(async e=>{if(!e||e.length===0){ae();return}let l=[];for(let p of e){let o=p.blob;if(!o&&p.blobId)try{o=(await an(p.blobId))?.blob??void 0}catch(R){console.warn("[AiChatbot] Failed to reload attachment",R)}if(!o)continue;let A=o instanceof File?o:new File([o],p.name||"attachment",{type:p.type||o.type||"application/octet-stream"}),v=Ot(A);if(v&&(l.push({id:lt("composer-image"),file:A,objectUrl:v}),l.length>=ve))break}if(l.length===0){ae();return}E(p=>(ce(p),l)),Ee.current&&(Ee.current.value="")},[ae,ce,ve]),Wt=B((e,l)=>{e&&Ye({url:e,title:l})},[]),sa=B(()=>{Ye(null)},[]),gn=B(()=>{ia(At.current),ae(),S([]),ue(null),pe.current=null,Ve(null),Ce(!0),nt(!1);let e=on(s);if(e)try{e.removeItem(st)}catch{}Ut()},[ae,s]),la=B(()=>{nt(!0)},[]),ua=B(()=>{T.busy&&ye.current==="chat"&&V(),gn()},[T.busy,V,gn]),mn=B(()=>{nt(!1)},[]),pn=B(async(e,l)=>{if(!T.busy)try{let p=pe.current&&Date.now()-pe.current.storedAt<z*Bt?pe.current.id:void 0;if(!p)return;De("feedback"),ue(null),await T.run(async({signal:o,onStatus:A})=>(await Kr({sessionId:p,feedbackMessageId:e,feedbackType:l},{signal:o,onStatus:A}),null)),ue(null)}catch(p){let o=p?.message?.trim()||k.get("An error occurred.");ue(o),console.error("Failed to send feedback",p)}finally{De(p=>p==="feedback"?null:p)}},[T,G]),hn=B((e,l)=>{S(p=>p.map(o=>o.id!==e||o.role!=="assistant"?o:o.feedback===l?{...o,feedback:void 0}:{...o,feedback:l})),pn(e,l)},[pn]),It=B(async()=>{let e=Ue.current.trim();if(!e||T.busy)return;me.current=!1,ue(null),De("chat");let l=[..._e.current],p=await un(l),o=lt("user"),A=Date.now(),v={id:o,role:"user",content:e,createdAt:A,clientStatus:"pending",attachments:p.length?p:void 0};D(""),ae(),S(R=>[...R,v]),ee||x(!0),g();try{let R=pe.current&&Date.now()-pe.current.storedAt<z*Bt?pe.current.id:void 0,N=await T.run(async({signal:ze,onStatus:Te})=>await Or({sessionId:R,message:e,images:l.map(Ta=>Ta.file)},{signal:ze,onStatus:Te}));if(me.current){M("canceled");return}if(!N)throw new Error(k.get(T.error??f.emptyResponseLabel));N.sessionId&&(pe.current={id:N.sessionId,storedAt:Date.now()});let fe={id:N.metadata?.messageId||lt("assistant"),role:"assistant",content:N.result||"",citations:N.citations,createdAt:Date.now()};S(ze=>[...ze.map(rt=>rt.id===o?{...rt,clientStatus:void 0}:rt),fe]),Ve(A)}catch(R){if(console.error("Error during ask()",R),me.current||Yr(R)){M("canceled");return}let N=R?.message?.trim()||k.get(f.unexpectedErrorLabel);S(fe=>[...fe.map(Te=>Te.id===o?{...Te,clientStatus:void 0}:Te),{id:lt("assistant-error"),role:"assistant",content:`\u26A0\uFE0F ${N}`,createdAt:Date.now()}]),Ve(A)}finally{De(R=>R==="chat"?null:R),me.current=!1,Re.current&&Re.current.focus(),g()}},[T,un,ae,ee,g,M,f.emptyResponseLabel,f.unexpectedErrorLabel,G]),da=B(e=>{e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),dt&&It())},[It,dt]),ca=B(()=>{x(!0)},[]);ne(()=>()=>{Se.current!=null&&(cancelAnimationFrame(Se.current),Se.current=null)},[]);let ga=B(()=>{bt(e=>{let l=!e;return Se.current!=null&&(cancelAnimationFrame(Se.current),Se.current=null),l?(Fe(!0),requestAnimationFrame(()=>{Se.current=requestAnimationFrame(()=>{Fe(!1),Se.current=null})})):Fe(!1),l})},[]),ma=B(e=>{D(e.content),(async()=>(await cn(e.attachments),S(l=>l.filter(p=>p.id!==e.id)),oa(e.attachments),queueMicrotask(()=>Re.current?.focus())))()},[cn]),fn=te(()=>_?w?h("img",{src:w,className:"ai-open-btn-icon",alt:k.get(f.askMeLabel||Oe)}):h(xr,{size:18}):null,[_,w,f,Oe,G]),pa=te(()=>{let e=fn,l=C?h(ke,{inherit:!0,children:Oe}):null;if(!_&&!l)return null;if(!_)return l;if(!C)return e;switch(we){case"top":return H(tt,{gap:4,align:"center",children:[e,l]});case"bottom":return H(tt,{gap:4,align:"center",children:[l,e]});case"right":return H(le,{gap:6,align:"center",children:[l,e]});default:return H(le,{gap:6,align:"center",children:[e,l]})}},[fn,_,C,Oe,we]),ha=te(()=>K,[K]),fa=te(()=>!K,[K]),ka=te(()=>F||(Be?k.get(f.readyLabel):k.get(f.readyEmptyLabel)),[F,Be,f.readyLabel,f.readyEmptyLabel,G]),ba=te(()=>K?k.get(f.cancelLabel):k.get(f.sendLabel),[K,f.cancelLabel,f.sendLabel,G]),ya=te(()=>K?h(Dr,{size:18}):h(Er,{size:18}),[K]),va=B(()=>{if(K){V();return}It()},[K,V,It]);return ne(()=>{if(!ee||!Pe||!W)return;let e=()=>{let N=window.getComputedStyle(W).overflowY,fe=N==="auto"||N==="scroll",ze=Math.ceil(W.scrollHeight),Te=Math.floor(W.clientHeight),rt=ze>Te;return fe&&rt},l=!1,p=R=>{if(!e())return;R.preventDefault();let N=W.scrollHeight-W.clientHeight;W.scrollTop=Math.max(0,Math.min(N,W.scrollTop+R.deltaY))},o=()=>{let R=e();Nt(R),R!==l&&(l=R,l?Pe.addEventListener("wheel",p,{passive:!1}):Pe.removeEventListener("wheel",p))};o();let A=new ResizeObserver(o);A.observe(W);let v=new MutationObserver(o);return v.observe(W,{childList:!0,subtree:!0,characterData:!0}),window.addEventListener("resize",o),()=>{l&&Pe.removeEventListener("wheel",p),A.disconnect(),v.disconnect(),window.removeEventListener("resize",o)}},[ee,Pe,W]),ne(()=>{let e=!1,l=on(s);if(!l){s==="nostorage"&&Ut(),at(!0);return}return(async()=>{try{let p=l.getItem(st);if(!p){at(!0);return}let o=JSON.parse(p),A=typeof o?.lastUserSentAt=="number"?o.lastUserSentAt:null;if(!A||Date.now()-A>z*Bt){l.removeItem(st),await Ut(),at(!0);return}let R=(Array.isArray(o.messages)?o.messages:[]).map(fe=>fe?.role==="user"&&fe.clientStatus==="pending"?{...fe,clientStatus:"canceled"}:fe),N=await dn(R);if(e){ia(N);return}S(N),Ve(A),o.session&&o.session.id&&(pe.current=o.session)}catch(p){console.warn("[AiChatbot] Failed to load history",p);try{l.removeItem(st)}catch{}}finally{e||at(!0)}})(),()=>{e=!0}},[s,z,dn]),ne(()=>{if(!oe)return;let e=on(s);if(!e)return;let l=ut.current;if(!l)return;if(Date.now()-l>z*Bt){try{e.removeItem(st)}catch{}rn(new Set);return}let p=J.map(({attachments:v,...R})=>({...R,attachments:v?.map(({objectUrl:N,blob:fe,...ze})=>ze)})),o={version:1,lastUserSentAt:l,session:pe.current,messages:p};try{e.setItem(st,JSON.stringify(o))}catch{}let A=new Set;p.forEach(v=>{v.attachments?.forEach(R=>{R.blobId&&A.add(R.blobId)})}),rn(A)},[oe,J,b,s,z]),u&&!wt||!u&&wt?null:H(le,{className:zt,children:[!ee&&h(Me,{variant:"filled",className:C?"ai-launcher-button ai-launcher-text":"ai-launcher-button",onClick:ca,"aria-label":Oe,title:Oe,"data-ai-kit-open-button":!0,children:pa}),ee&&h(et.Root,{ref:Tt,opened:ee,lockScroll:!1,trapFocus:!1,closeOnEscape:!0,onClose:L,className:zt+" ai-chat-container"+(de?" maximized":"")+(de&&yt?" ai-max-enter":""),portalProps:{target:r,reuseTargetNode:!0},"data-ai-kit-theme":$,"data-ai-kit-variation":"modal",children:H("div",{className:"ai-chat-container-internal",ref:vt,children:[H(et.Header,{className:"ai-chat-header-bar",children:[h(et.Title,{className:"ai-chat-title",children:Gt}),H(le,{gap:"4px",align:"center",justify:"center",children:[typeof window<"u"&&window.innerWidth>600&&h(aa,{variant:"subtle",c:"var(--ai-kit-chat-icon-color, var(--ai-kit-color-text))",onClick:ga,title:de?k.get(f.restoreSizeLabel):k.get(f.maximizeLabel),"aria-label":de?k.get(f.restoreSizeLabel):k.get(f.maximizeLabel),"data-ai-kit-maximize-button":!0,children:de?h(Lr,{size:16}):h(Cr,{size:16})}),h(et.CloseButton,{"aria-label":k.get(f.closeChatLabel)})]})]}),H(et.Body,{className:"ai-chat-scroll",ref:Kt,"data-scrollable":Je?"true":"false",children:[J.map(e=>{let l=e.role==="user",p=l&&e.clientStatus==="canceled"&&e.id===U;return h(le,{justify:l?"flex-end":"flex-start",className:"ai-chat-row "+e.role,onMouseEnter:()=>xe(e.id),onMouseLeave:()=>xe(o=>o===e.id?null:o),children:H(tt,{gap:4,w:"100%",style:{alignItems:l?"flex-end":"flex-start"},children:[H(tt,{className:"ai-chat-bubble",children:[H(ke,{className:"ai-chat-header",children:[h(ke,{fw:"bolder",size:"xs",style:{whiteSpace:"nowrap"},children:l?k.get(f.userLabel):k.get(f.assistantLabel)}),"\xA0",h(ke,{size:"xs",style:{whiteSpace:"nowrap"},children:new Date(e.createdAt).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})})]}),e.role==="assistant"?h(Hr,{remarkPlugins:[Gr],children:e.content}):h(ke,{size:"sm",miw:"100px",children:e.content})]}),e.attachments&&e.attachments.length>0&&h(le,{className:"ai-thumbs ai-message-thumbs",gap:"xs",children:e.attachments.map(o=>h("button",{type:"button",className:"thumb",style:{backgroundImage:o.objectUrl?`url(${o.objectUrl})`:void 0,backgroundSize:"cover",backgroundPosition:"center",backgroundRepeat:"no-repeat"},onClick:()=>Wt(o.objectUrl,o.name),disabled:!o.objectUrl,title:o.name||k.get("View image"),"aria-label":o.name||k.get("View image"),children:!o.objectUrl&&h(ke,{size:"xs",c:"dimmed",children:k.get("Loading image...")})},o.id))}),p&&H(le,{justify:"flex-end",gap:"xs",children:[h(ke,{size:"xs",c:"dimmed",children:h("em",{children:k.get(f.notSentLabel)})}),Ht===e.id&&h(aa,{size:"sm",variant:"subtle",onClick:()=>ma(e),title:k.get(f.editLabel),"aria-label":k.get(f.editLabel),"data-ai-kit-edit-button":!0,children:h(Pr,{size:14})})]}),e.citations&&e.citations.length>0&&H(tt,{className:"ai-citations",children:[h(ke,{fw:"bold",size:"sm",mb:"xs",children:k.get(f.referencesLabel)}),h(ra,{spacing:"xs",size:"sm",children:e.citations.map((o,A)=>{let v=o.sourceUrl||o.url,R=o.title||v||`${k.get(f.referenceLabel)} #${A+1}`;return H(ra.Item,{children:[v?h(zr,{href:v,target:"_blank",rel:"noreferrer",children:R}):h(ke,{children:R}),o.snippet?h(ke,{size:"xs",c:"dimmed",mt:4,children:o.snippet}):null]},A)})})]}),e.role==="assistant"&&H(le,{className:"ai-feedback",gap:"xs",children:[h(Me,{className:e.feedback==="accepted"?"active":void 0,onClick:()=>hn(e.id,"accepted"),"aria-label":k.get(f.acceptResponseLabel),disabled:T.busy,"data-ai-kit-feedback-accept-button":!0,children:"\u{1F44D}"}),h(Me,{type:"button",className:e.feedback==="rejected"?"active":void 0,onClick:()=>hn(e.id,"rejected"),"aria-label":k.get(f.rejectResponseLabel),disabled:T.busy,"data-ai-kit-feedback-reject-button":!0,children:"\u{1F44E}"})]})]})},e.id)}),ha&&h(le,{justify:"flex-start",className:"ai-chat-row assistant status",children:H(tt,{className:"ai-chat-bubble typing",children:[Z?h(ke,{size:"sm",c:"dimmed",children:h("em",{children:Z})}):null,H("div",{className:"typing-indicator",children:[h("span",{}),h("span",{}),h("span",{})]})]})})]}),fa&&h(le,{className:"ai-status-line",children:h(ke,{className:"ai-status-text",children:h("em",{children:ka})})}),H(tt,{className:"ai-box ai-box-open",children:[H(et,{opened:kt,onClose:mn,centered:!0,title:k.get("Reset conversation"),style:{position:"fixed"},left:0,children:[h(ke,{size:"sm",children:k.get("Are you sure you want to reset the conversation?")}),H(le,{justify:"flex-end",mt:"md",children:[h(Me,{variant:"default",onClick:mn,"data-ai-kit-no-button":!0,children:k.get("No")}),h(Me,{color:"var(--ai-kit-color-danger, red)",onClick:ua,disabled:!Be&&!K,"data-ai-kit-yes-button":!0,children:k.get("Yes")})]})]}),h(le,{children:h(Ir,{className:"ai-message",ref:Re,placeholder:jt,value:Y,onChange:e=>{D(e.target.value)},onKeyDown:da,rows:3})}),H(le,{className:"ai-actions",justify:"space-between",w:"100%",children:[h(le,{justify:"flex-start",children:h(Me,{variant:"light",leftSection:h(Ur,{size:18}),onClick:la,disabled:!Be&&!K,"data-ai-kit-reset-button":!0,children:k.get(f.resetLabel)})}),H(le,{justify:"flex-end",children:[ve>0&&H($r,{children:[h(Me,{variant:"outline",leftSection:h(Mr,{size:18}),onClick:()=>Ee.current?.click(),disabled:ie.length>=ve||K,title:k.get(f.addImageLabel),"data-ai-kit-add-image-button":!0,children:k.get(f.addLabel)}),h(Sr,{ref:Ee,type:"file",accept:"image/png,image/jpeg,image/gif,image/webp",style:{display:"none"},multiple:!0,onChange:Ie})]}),h(Me,{leftSection:ya,variant:"filled",onClick:va,disabled:!K&&!dt,"data-ai-kit-send-button":!0,children:ba})]})]}),P.length>0&&h(le,{className:"ai-thumbs",mt:"xs",gap:"xs",children:P.map(({url:e,title:l},p)=>h("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":l||k.get("View image"),onClick:()=>Wt(e,l),onKeyDown:o=>{(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),Wt(e,l))},children:h(Me,{variant:"white",onClick:o=>{o.stopPropagation(),St(p)},"aria-label":k.get(f.removeImageLabel),mt:"-xs",mr:"-xs",size:"xs",p:0,className:"remove-image-button",title:k.get(f.removeImageLabel),"data-ai-kit-remove-image-button":!0,children:"X"})},ie[p]?.id??p))})]})]})}),h(et,{opened:!!qe,onClose:sa,centered:!0,size:"auto",title:qe?.title||k.get("Image preview"),children:qe&&h("img",{src:qe.url,alt:qe.title||k.get("Image preview"),style:{maxWidth:"100%",maxHeight:"70vh"}})})]})},_r=mt(Vr,{showOpenButton:!0,variation:"modal"});export{_r as AiChatbot,Ar as AiFeature,ln as DEFAULT_CHATBOT_LABELS,Hn as isBackendConfigured,$t as markdownToHtml,$e as readDefaultOutputLanguage,gt as stripCodeFence,ct as translations,Ct as useAiRun,mt as withAiKitShell};
|
|
31
|
+
Follow these additional instructions: ${oe}`:"")},{role:"user",content:"What can you see on this image according to the optional knowledge base and shared context?"}].filter(Boolean),P=await b.run(async({signal:M,onStatus:V})=>(await $n({messages:L,images:[Ye],outputLanguage:"en",responseConstraint:kr},{signal:M,onStatus:V,context:z,modeOverride:a,onDeviceTimeoutOverride:i})).result);if(!P){W("");return}let Z=(I&&I!=="auto"?I:null)||$e(),U=gt(P).trim();try{j("Translating result...");let M=await b.run(async({signal:V})=>await yr(U,Z,{signal:V,context:z,modeOverride:a,onDeviceTimeoutOverride:i,silent:!0}));W(M)}catch(M){W(U),console.warn("AI Kit: failed to parse SEO JSON",M)}break}}}catch(g){ee(g instanceof Error?g.message:t.get("An unknown error occurred."))}j(void 0)}},[D,b,oe,ye,I,Ce,me,z,s,xe,F,ae,J]),At=Ge(async()=>{await Ue("backend-only")},[Ue]),ut=Ge(a=>{switch(s){case"proofread":return c(cr,{className:a});case"translate":return c(gr,{className:a});case"summarize":return c(hr,{className:a});case"rewrite":case"write":return c(mr,{className:a});case"generateImageMetadata":case"generatePostMetadata":return c(pr,{className:a});default:return c(ar,{mode:s,className:a})}},[s]),_e=Ge(()=>{switch(s){case"proofread":return b.lastSource?t.get("Proofread again"):t.get("Proofread");case"translate":return b.lastSource?t.get("Translate again"):t.get("Translate");case"rewrite":return b.lastSource?t.get("Rewrite again"):t.get("Rewrite");case"summarize":return b.lastSource?t.get("Summarize again"):t.get("Summarize");default:return b.lastSource?t.get("Regenerate"):t.get("Generate")}},[D,b.lastSource,s]),wt=Ge(()=>{switch(s){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")}},[D,s]),ve=Ge(async()=>{kt(!1),W(null),ee(null),Re.current=!1,b.reset(),C||f()},[f,Re,b,C]),Rt=Ge(async()=>{b.busy&&b.cancel()},[b.busy]);Dt(()=>{!ue||!m||!ae||b.busy||x||Re.current||(Re.current=!0,queueMicrotask(()=>{Ue(be)}))},[b.busy,Re,ue,ae,m,x,Ue,be]),Dt(()=>{J&&s!=="proofread"&&(ae||(de(!0),Re.current=!0))},[J,ae,s]),Dt(()=>{let a=!0;return(async()=>{try{await lr();let g=await Hn();a&&yt(g)}catch(g){console.error(g),a&&yt(!1)}})(),()=>{a=!1}},[]);let Be=ht(()=>{let a=[];if(s==="translate"){let g=Pt.find(L=>L.value===F)?.label;a.push(t.get("Input language")+": "+(g?t.get(g):"auto"))}if(I&&E?.outputLanguage){let g=Pt.find(L=>L.value===I)?.label;a.push(t.get("Output language")+": "+(g?t.get(g):I))}return s==="summarize"&&xe&&E?.type&&a.push(t.get("Type")+": "+t.get(xe)),(s==="write"||s==="rewrite")&&me&&E?.tone&&a.push(t.get("Tone")+": "+t.get(me)),(s==="write"||s==="rewrite"||s==="summarize")&&ye&&E?.length&&a.push(t.get("Length")+": "+t.get(ye)),oe?.trim()&&E?.instructions&&a.push(t.get("Instructions")+": \u2713"),a.length?a.join(" \u2022 "):t.get("No overrides")},[D,s,F,I,xe,me,ye,oe]),K={label:{fontSize:11,opacity:.85},description:{fontSize:11,opacity:.65,marginTop:2},input:{fontSize:12}},dt=d==="modal"?Xe.Root:Ke,Oe=d==="modal"?Xe.Content:Ke,Gt=d==="modal"?Xe.Body:Ke,jt=y==="collapse"?Qa:je,zt=y==="horizontal"?Ke:je;return Dt(()=>{if(!(d!=="modal"||!ue))return document.body.style.overflow="hidden",document.body.onkeydown=a=>{a.key==="Escape"&&(a.preventDefault(),ve())},()=>{document.body.style.overflow="",document.body.onkeydown=null}},[ve,d]),Q(ft,{children:[C&&c(Qe,{leftSection:$&&(q?c("span",{dangerouslySetInnerHTML:{__html:q}}):ut()),className:_?"ai-feature-open-button":"ai-feature-open-button-no-title",variant:"filled",disabled:ue,onClick:()=>kt(!0),"data-ai-kit-open-button":!0,children:_&&t.get(G||pe)}),ue&&Q(dt,{opened:!0,className:"ai-feature-root",onClose:ve,padding:"md",gap:"md",size:"md",portalProps:d==="modal"?{target:ie,reuseTargetNode:!0}:void 0,"data-ai-kit-theme":we,"data-ai-kit-variation":d,children:[d==="modal"&&c(Xe.Overlay,{}),Q(Oe,{w:"100%",style:{left:0},children:[d==="modal"&&Q(Xe.Header,{style:{zIndex:1e3},children:[ut("ai-feature-title-icon"),c(Xe.Title,{children:t.get(w||pe)}),c(Xe.CloseButton,{})]}),c(Gt,{w:"100%",style:{zIndex:1001},children:Q(_t,{enabled:d!=="modal",working:b.busy,variation:d,children:[Q(je,{gap:"sm",mb:"sm",p:"sm",children:[Fe&&c(Xt,{color:"red",children:t.get(Fe)}),J&&s!=="proofread"&&Q(tr,{withBorder:!0,p:"sm",mt:"md",className:"ai-feature-options","data-options-display":y,children:[Q(Ke,{justify:"space-between",align:"center",className:"ai-feature-options-summary",onClick:y==="collapse"?()=>de(a=>!a):void 0,children:[y==="collapse"&&Q(je,{gap:0,children:[c(Zt,{size:"sm",fw:600,style:{lineHeight:1.1},children:t.get("Options")}),c(Zt,{size:"xs",c:"dimmed",style:{marginTop:2},children:Be})]}),y==="collapse"&&c(Qe,{variant:"subtle",size:"xs",style:{minWidth:"fit-content"},onClick:a=>{a.stopPropagation(),de(g=>!g)},children:nt?t.get("Hide"):t.get("Show")})]}),Q(jt,{in:nt,children:[y==="collapse"&&c(Xa,{my:"sm"}),Q(zt,{gap:"xs",justify:"space-between",children:[s==="write"&&E?.text&&c(He,{label:t.get("The topic or subject for the AI to write about."),disabled:y!=="horizontal",position:"top",children:c(Ne,{size:"xs",className:"ai-feature-option",styles:K,disabled:b.busy,label:t.get("Topic"),description:y!=="horizontal"?t.get("The topic or subject for the AI to write about."):void 0,value:Ce||"",onChange:a=>{let g=a.target.value;qe(g),Y?.({text:g})}})}),(s==="write"||s==="rewrite"||s==="generateImageMetadata"||s==="generatePostMetadata")&&E?.instructions&&c(He,{label:t.get("Additional instructions to guide the AI."),disabled:y!=="horizontal",position:"top",children:c(Ne,{disabled:b.busy,size:"xs",className:"ai-feature-option",styles:K,label:t.get("Instructions"),description:y!=="horizontal"?t.get("Additional instructions to guide the AI."):void 0,value:oe||"",onChange:a=>{let g=a.target.value;at(g),Y?.({instructions:g})}})}),s==="translate"&&c(He,{label:t.get("The language of the input text."),disabled:y!=="horizontal",position:"top",children:c(ot,{disabled:b.busy,size:"xs",styles:K,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")},...Pt.map(a=>({value:a.value,label:t.get(a.label)})).sort((a,g)=>a.label.localeCompare(g.label))],value:F||"auto",onChange:a=>{let g=a;Kt(g),Y?.({inputLanguage:g})}})}),E?.outputLanguage&&c(He,{label:t.get("The language AI-Kit should use for generated text by default (when applicable)."),disabled:y!=="horizontal",position:"top",children:c(ot,{disabled:b.busy,size:"xs",styles:K,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:[...[s==="rewrite"?{value:"auto",label:t.get("Auto-detect")}:void 0].filter(Boolean),...Pt.map(a=>({value:a.value,label:t.get(a.label)})).sort((a,g)=>a.label.localeCompare(g.label))],value:I||Et.settings.defaultOutputLanguage||(s==="rewrite"?"auto":""),onChange:a=>{let g=a;De(g),Y?.({outputLanguage:g})}})}),s==="summarize"&&E?.type&&c(He,{label:t.get("The summary style to generate."),disabled:y!=="horizontal",position:"top",children:c(ot,{disabled:b.busy,size:"xs",className:"ai-feature-option",styles:K,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:xe||"key-points",onChange:a=>{let g=a;Ee(g),Y?.({type:g})}})}),(s==="write"||s==="rewrite")&&E?.tone&&c(He,{label:t.get("The tone or style for the AI to use."),disabled:y!=="horizontal",position:"top",children:c(ot,{disabled:b.busy,size:"xs",className:"ai-feature-option",styles:K,label:t.get("Tone"),description:y!=="horizontal"?t.get("The tone or style for the AI to use."):void 0,data:s==="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:me||(s==="write"?"neutral":"as-is"),onChange:a=>{let g=a;Ht(g),Y?.({tone:g})}})}),(s==="write"||s==="rewrite"||s==="summarize")&&E?.length&&c(He,{label:t.get("The target output length."),disabled:y!=="horizontal",position:"top",children:c(ot,{disabled:b.busy,size:"xs",className:"ai-feature-option",styles:K,label:t.get("Length"),description:y!=="horizontal"?t.get("The target output length."):void 0,data:s==="write"||s==="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:ye||(s==="rewrite"?"as-is":"short"),onChange:a=>{let g=a;Se(g),Y?.({length:g})}})}),s==="summarize"||s==="write"||s==="rewrite"&&E?.outputFormat&&c(He,{label:t.get("The format for the generated output."),disabled:y!=="horizontal",position:"top",children:c(ot,{disabled:b.busy,size:"xs",className:"ai-feature-option",styles:K,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:Je||"markdown",onChange:a=>{let g=a;Nt(g),Y?.({outputFormat:g})}})})]})]})]}),b.busy&&Ve&&c(_t,{enabled:d==="modal",working:b.busy,variation:d,children:Q(Ke,{justify:"center",align:"center",gap:"sm",m:"sm",pr:"lg",children:[c(er,{size:"sm"}),c(en.Label,{className:"ai-feature-status-text",children:Ve??"VALAMILYEN SZ\xD6VEG"})]})}),x&&Q(je,{mt:"md",children:[s==="proofread"&&(x.corrections.length===0?c(Xt,{color:"green",children:t.get("No issues found. Your text looks great!")}):Q(ft,{children:[c("p",{style:{marginTop:0,opacity:.85},children:t.get("Hover highlights to see explanations.")}),c(_n,{original:Ce,corrections:x.corrections}),x.correctedInput?Q(ft,{children:[c("h4",{style:{marginTop:16,marginBottom:8},children:t.get("Corrected")}),c(Ke,{c:"pre",className:"ai-feature-generated-content",children:x.correctedInput})]}):null]})),s==="generateImageMetadata"&&Q(ft,{children:[c(Ne,{readOnly:!u,label:t.get("Alt Text"),description:t.get("The alt text for the image."),value:x.alt_text||"",onChange:a=>W({...x,alt_text:a.target.value})}),c(Ne,{readOnly:!u,label:t.get("Title"),description:t.get("The title for the image."),value:x.title||"",onChange:a=>W({...x,title:a.target.value})}),c(Ne,{readOnly:!u,label:t.get("Caption"),description:t.get("The caption for the image."),value:x.caption||"",onChange:a=>W({...x,caption:a.target.value})}),c(Ne,{readOnly:!u,label:t.get("Description"),description:t.get("The description for the image."),value:x.description||"",onChange:a=>W({...x,description:a.target.value})})]}),s==="generatePostMetadata"&&Q(ft,{children:[c(Ne,{readOnly:!u,label:t.get("Title"),description:t.get("The title for the post."),value:x.title||"",onChange:a=>W({...x,title:a.target.value})}),c(Ne,{readOnly:!u,label:t.get("Excerpt"),description:t.get("The excerpt for the post."),value:x.excerpt||"",onChange:a=>W({...x,excerpt:a.target.value})})]}),s!=="proofread"&&s!=="generateImageMetadata"&&s!=="generatePostMetadata"&&typeof x=="string"&&c(Xn,{value:x,editable:!!u,onChange:a=>{W(a)}})]}),x===""&&c(Xn,{value:x,editable:!1})]}),Q(Ke,{className:"ai-kit-actions",gap:"sm",mb:"sm",p:"sm",children:[b.busy&&c(Qe,{variant:"outline",size:"sm",onClick:Rt,"data-ai-kit-cancel-button":!0,children:t.get("Cancel")}),!b.busy&&c(Qe,{variant:"filled",size:"sm",disabled:!ae,onClick:()=>Ue(),"data-ai-kit-generate-button":!0,children:_e()}),!b.busy&&b.lastSource==="on-device"&&bt&&ge&&c(Qe,{variant:"filled",size:"sm",disabled:!ae,onClick:At,"data-ai-kit-regenerate-on-backend-button":!0,children:wt()}),!b.busy&&T&&c(Qe,{variant:"outline",size:"sm",disabled:!x||s==="proofread"&&x.corrections.length===0,onClick:async()=>{T(Je==="html"?await $t(x):x),ve()},"data-ai-kit-accept-button":!0,children:t.get(X)}),c(Qe,{variant:"default",size:"sm",onClick:ve,"data-ai-kit-close-button":!0,children:t.get("Close")})]}),c("div",{style:{display:Et.settings?.enablePoweredBy?"flex":"none",justifyContent:Et.settings?.enablePoweredBy?"flex-end":void 0,padding:0,marginRight:"var(--ai-kit-spacing-sm)",marginBottom:d==="default"?"var(--ai-kit-spacing-sm)":void 0},className:Et.settings?.enablePoweredBy?void 0:"sr-only",children:Q(Zt,{c:"p",ta:"right",fs:"italic",fz:"xs",children:["Powered by"," ",c(Za,{href:"https://wpsuite.io/ai-kit/",target:"_blank",td:"none",fz:"xs",fw:400,children:"WPSuite AI-Kit"})]})})]})})]})]})]})};function Xn(n){let{value:r,editable:m,onChange:u}=n;return m?Q(je,{p:0,gap:"sm",children:[c(en.Label,{children:t.get("Generated content")}),c(nr,{value:r,onChange:i=>u?.(i.currentTarget.value),autosize:!0,minRows:2,maxRows:12,p:0,className:"ai-feature-generated-content ai-feature-editor"}),c(en.Label,{children:t.get("Preview")}),c(je,{className:"ai-feature-generated-content ai-feature-preview",children:c(Zn,{remarkPlugins:[Qn],children:r})})]}):c(je,{className:"ai-feature-generated-content",children:r?c(Zn,{remarkPlugins:[Qn],children:r}):c(Xt,{color:"yellow",children:t.get("No content generated.")})})}var Ar=mt(Tr);import{ActionIcon as aa,Anchor as zr,Button as Me,Group as le,Input as Sr,List as ra,Modal as et,Stack as tt,Text as ke,Textarea as Ir}from"@mantine/core";import{IconMaximize as Cr,IconMessage as xr,IconMinimize as Lr,IconPaperclip as Mr,IconPencil as Pr,IconPlayerStop as Dr,IconSend as Er,IconTrash as Ur}from"@tabler/icons-react";import{getStoreSelect as Br,sendChatMessage as Or,sendFeedbackMessage as Kr}from"@smart-cloud/ai-kit-core";import{useSelect as Nr}from"@wordpress/data";import{I18n as k}from"aws-amplify/utils";import{useCallback as B,useEffect as ne,useMemo as te,useRef as Ae,useState as re}from"react";import Hr from"react-markdown";import Gr from"remark-gfm";var wr="ai-kit-chatbot-attachments",We="attachments";var tn=null;function Rr(){return typeof window<"u"&&typeof window.indexedDB<"u"}async function nn(){if(!Rr())return null;tn||(tn=new Promise(n=>{try{let r=window.indexedDB.open(wr,1);r.onerror=()=>n(null),r.onblocked=()=>n(null),r.onupgradeneeded=()=>{let m=r.result;m.objectStoreNames.contains(We)||m.createObjectStore(We,{keyPath:"id"})},r.onsuccess=()=>n(r.result)}catch(r){console.warn("[AiChatbot] IndexedDB is not available",r),n(null)}}));try{return await tn}catch(n){return console.warn("[AiChatbot] Failed to open attachment store",n),null}}async function ta(n,r){let m=await nn();return m?new Promise((u,i)=>{try{let d=m.transaction(We,n),w=d.objectStore(We),C=r(w);d.oncomplete=()=>u(C),d.onerror=()=>i(d.error),d.onabort=()=>i(d.error)}catch(d){i(d)}}).catch(u=>(console.warn("[AiChatbot] Attachment store transaction failed",u),null)):null}async function na(n,r,m){let u={id:n,blob:r,name:m.name,type:m.type,size:m.size,createdAt:Date.now()};return await ta("readwrite",d=>(d.put(u),n))}async function an(n){let r=await nn();return r?new Promise((m,u)=>{try{let i=r.transaction(We,"readonly"),d=i.objectStore(We).get(n);d.onsuccess=()=>{let w=d.result;m(w??null)},d.onerror=()=>u(d.error),i.onabort=()=>u(i.error)}catch(i){u(i)}}).catch(m=>(console.warn("[AiChatbot] Failed to load attachment",m),null)):null}async function Ut(){await ta("readwrite",n=>{n.clear()})}async function rn(n){let r=await nn();r&&await new Promise((m,u)=>{try{let i=r.transaction(We,"readwrite"),d=i.objectStore(We),w=d.getAllKeys();w.onsuccess=()=>{let C=w.result;for(let _ of C){let $=String(_);n.has($)||d.delete(_)}},w.onerror=()=>u(w.error),i.oncomplete=()=>m(),i.onerror=()=>u(i.error),i.onabort=()=>u(i.error)}catch(i){u(i)}}).catch(m=>{console.warn("[AiChatbot] Failed to cleanup attachments",m)})}import{Fragment as $r,jsx as h,jsxs as H}from"react/jsx-runtime";k.putVocabularies(ct);var Bt=1440*60*1e3,jr=1,Wr="localstorage",st=`ai-kit-chatbot-history-v1:${typeof window<"u"?window.location.hostname:"unknown"}`,ln={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 lt(n){return`${n}-${Math.random().toString(36).slice(2)}-${Date.now().toString(36)}`}var Fr=4,qr=5*1024*1024,Yr=n=>{let r=(n?.name||"").toString(),m=(n?.code||"").toString(),u=(n?.message||"").toString();return r==="AbortError"||m==="ABORT_ERR"||/abort|aborted|cancel/i.test(u)},Jr=(n,r)=>{if(!n)return null;let m=n.step,u=k.get((n.message??"").trim()),i=typeof n.progress=="number"?n.progress:null,d=i==null?null:Math.round(i*100);switch(m){case"decide":return u||k.get("Checking capabilities...");case"on-device:init":return u||k.get("Initializing on-device AI...");case"on-device:download":return d==null?u||k.get("Downloading model..."):u||`${k.get("Downloading model...")} ${d}%`;case"on-device:ready":return u||k.get("On-device model ready...");case"on-device:run":return u||k.get("Running on-device...");case"backend:request":case"backend:waiting":case"backend:response":return k.get(r.assistantThinkingLabel??ln.assistantThinkingLabel);case"done":return u||k.get("Done.");case"error":return u||k.get("An error occurred.");default:return u||null}};function on(n){if(typeof window>"u")return null;try{return n==="localstorage"?window.localStorage:n==="sessionstorage"?window.sessionStorage:null}catch{return null}}var Ot=n=>{if(typeof window>"u"||typeof URL>"u"||typeof URL.createObjectURL!="function")return null;try{return URL.createObjectURL(n)}catch{return null}},sn=n=>{if(n&&!(typeof window>"u")&&!(typeof URL>"u"||typeof URL.revokeObjectURL!="function"))try{URL.revokeObjectURL(n)}catch{}},oa=n=>{!n||n.length===0||n.forEach(r=>sn(r.objectUrl))},ia=n=>{n.forEach(r=>oa(r.attachments))},Vr=n=>{let{rootElement:r,store:m,previewMode:u,title:i,openButtonTitle:d,openButtonIcon:w,showOpenButtonTitle:C=!0,showOpenButtonIcon:_=!0,colorMode:$,language:G,onClose:q,placeholder:ge,maxImages:X,maxImageBytes:y,historyStorage:s=Wr,emptyHistoryAfterDays:z=jr,labels:be,openButtonIconLayout:we="top",openButtonPosition:O="bottom-right"}=n,f=te(()=>({...ln,...be||{}}),[be]),T=Ct(),[Y,D]=re(""),[ie,E]=re([]),[J,S]=re([]),[j,ue]=re(null),[kt,nt]=re(!1),[de,bt]=re(!1),[yt,Fe]=re(!1),[ee,x]=re(!1),[W,Ce]=re(!0),[qe,Ye]=re(null),[oe,at]=re(!1),[Pe,vt]=re(null),[F,Kt]=re(null),[Je,Nt]=re(!1),[I,De]=re(null),ye=Ae(I);ne(()=>{ye.current=I},[I]);let Se=Ae(null),me=Ae(!1),[Ht,xe]=re(null),Ee=Ae(null),Re=Ae(null),pe=Ae(null),Tt=Ae(null),ce=B(e=>{e.forEach(l=>sn(l.objectUrl))},[]),ae=B(()=>{ce(_e.current),E([]),Ee.current&&(Ee.current.value="")},[ce]),[b,Ve]=re(null),Ue=Ae(Y),At=Ae(J),ut=Ae(b),_e=Ae(ie);ne(()=>{Ue.current=Y},[Y]),ne(()=>{_e.current=ie},[ie]),ne(()=>{At.current=J},[J]),ne(()=>{ut.current=b},[b]),ne(()=>{G&&k.setLanguage(G||"en")},[G]);let wt=Nr(()=>Br(m).isShowChatbotPreview()),ve=te(()=>Math.max(0,X??Fr),[X]),Rt=te(()=>Math.max(0,y??qr),[y]),Be=J.length>0,K=te(()=>T.busy&&I==="chat",[T.busy,I]),dt=te(()=>K?!1:Y.trim().length>0,[Y,K]),Oe=te(()=>{let e=d||f.askMeLabel;return k.get(e)},[d,f.askMeLabel,G]),Gt=te(()=>{let e=i||f.modalTitle;return k.get(e)},[i,f.modalTitle,G]),jt=te(()=>{let e=ge||f.placeholder;return k.get(e)},[ge,f.placeholder,G]),zt=te(()=>{let e="ai-docs-ask",l=`ai-open-btn--${O}`;return`${e} ${l}`},[O]),a=B(()=>{let e=Tt.current;if(e)try{let l=window.innerHeight||document.documentElement.clientHeight,p=360,o=1e3,A=Math.floor(l*.8),v=Math.max(p,Math.min(A,o));e.style.height=`${v}px`}catch{}},[]),g=B(()=>{let e=F;e&&window.setTimeout(()=>{try{e.scrollTop=e.scrollHeight}catch{}},50)},[F]),L=B(()=>{x(!1),de&&bt(!1),Fe(!1),q?.()},[de,q]);ne(()=>{if(ee)return a(),window.addEventListener("resize",a),()=>window.removeEventListener("resize",a)},[ee,a]),ne(()=>{if(!(!ee||!de))return document.body.style.overflow="hidden",()=>{document.body.style.overflow=""}},[ee,de,L]);let P=te(()=>ie.map(e=>({id:e.id,url:e.objectUrl,title:e.file.name})),[ie]);ne(()=>{Be||Ce(!0)},[Be]),ne(()=>()=>{ce(_e.current)},[ce]),ne(()=>{let e=F;if(!e)return;let l=()=>{let p=e.scrollHeight-(e.scrollTop+e.clientHeight);Ce(p<20)};return e.addEventListener("scroll",l),()=>{e.removeEventListener("scroll",l)}},[ee,F]),ne(()=>{if(!W)return;let e=F;e&&e.scrollHeight>e.clientHeight&&(e.scrollTop=e.scrollHeight)},[J,T.busy,W,F]),ne(()=>{ee||Ye(null)},[ee]);let Z=te(()=>T.busy?Jr(T.statusEvent,f)||k.get("Working\u2026"):null,[T.busy,T.statusEvent,G,f]),U=te(()=>{for(let e=J.length-1;e>=0;e--){let l=J[e];if(l.role==="user"&&l.clientStatus==="canceled")return l.id}return null},[J]),M=B(e=>{S(l=>{let p=[...l].map((v,R)=>({m:v,i:R})).reverse().find(v=>v.m.role==="user"&&v.m.clientStatus==="pending")?.i;if(p==null)return l;let o=l.slice(),A=o[p];return o[p]={...A,clientStatus:e??void 0},o})},[S]),V=B(()=>{if(!(!T.busy||ye.current!=="chat")){me.current=!0;try{T.cancel()}catch{}M("canceled"),De(null),ue(null),g()}},[T,M,g]),Ie=B(e=>{let l=_e.current,p=Array.from(e.target.files||[]),o=Math.max(0,ve-l.length);if(o===0){e.currentTarget.value="";return}let A=[];for(let v of p){if(A.length>=o)break;let R=/image\/(jpeg|png|gif|webp)/i.test(v.type),N=v.size<=Rt,fe=[...l,...A].some(Te=>Te.file.name===v.name&&Te.file.size===v.size&&Te.file.lastModified===v.lastModified);if(!R||!N||fe)continue;let ze=Ot(v);ze&&A.push({id:lt("composer-image"),file:v,objectUrl:ze})}A.length&&E(v=>[...v,...A]),e.currentTarget.value=""},[ve,Rt]),St=B(e=>{E(l=>{if(e<0||e>=l.length)return l;let p=l[e];return p&&sn(p.objectUrl),l.filter((o,A)=>A!==e)})},[]),he=Ae(null);ne(()=>{if(j)return he.current&&(window.clearTimeout(he.current),he.current=null),he.current=window.setTimeout(()=>{ue(null),he.current=null},6e3),()=>{he.current&&(window.clearTimeout(he.current),he.current=null)}},[j]);let un=B(async e=>{if(!e.length)return[];let l=s!=="nostorage";return(await Promise.all(e.map(async o=>{let A=lt("attachment"),v;if(l)try{v=await na(A,o.file,{name:o.file.name,type:o.file.type,size:o.file.size})??void 0}catch(N){console.warn("[AiChatbot] Failed to persist attachment",N)}let R=Ot(o.file);return{id:A,name:o.file.name,type:o.file.type||"application/octet-stream",size:o.file.size,blobId:v,objectUrl:R??void 0,blob:o.file}}))).filter(Boolean)},[s]),dn=B(async e=>{let l=[];for(let p of e){let o;if(p.attachments&&p.attachments.length>0){o=[];for(let A of p.attachments){let v;if(A.blobId)try{v=(await an(A.blobId))?.blob??void 0}catch(N){console.warn("[AiChatbot] Failed to hydrate attachment",N)}if(!v)continue;let R=v?Ot(v):null;o.push({...A,objectUrl:R??void 0,blob:v??void 0})}}l.push({...p,attachments:o})}return l},[]),cn=B(async e=>{if(!e||e.length===0){ae();return}let l=[];for(let p of e){let o=p.blob;if(!o&&p.blobId)try{o=(await an(p.blobId))?.blob??void 0}catch(R){console.warn("[AiChatbot] Failed to reload attachment",R)}if(!o)continue;let A=o instanceof File?o:new File([o],p.name||"attachment",{type:p.type||o.type||"application/octet-stream"}),v=Ot(A);if(v&&(l.push({id:lt("composer-image"),file:A,objectUrl:v}),l.length>=ve))break}if(l.length===0){ae();return}E(p=>(ce(p),l)),Ee.current&&(Ee.current.value="")},[ae,ce,ve]),Wt=B((e,l)=>{e&&Ye({url:e,title:l})},[]),sa=B(()=>{Ye(null)},[]),gn=B(()=>{ia(At.current),ae(),S([]),ue(null),pe.current=null,Ve(null),Ce(!0),nt(!1);let e=on(s);if(e)try{e.removeItem(st)}catch{}Ut()},[ae,s]),la=B(()=>{nt(!0)},[]),ua=B(()=>{T.busy&&ye.current==="chat"&&V(),gn()},[T.busy,V,gn]),mn=B(()=>{nt(!1)},[]),pn=B(async(e,l)=>{if(!T.busy)try{let p=pe.current&&Date.now()-pe.current.storedAt<z*Bt?pe.current.id:void 0;if(!p)return;De("feedback"),ue(null),await T.run(async({signal:o,onStatus:A})=>(await Kr({sessionId:p,feedbackMessageId:e,feedbackType:l},{signal:o,onStatus:A}),null)),ue(null)}catch(p){let o=p?.message?.trim()||k.get("An error occurred.");ue(o),console.error("Failed to send feedback",p)}finally{De(p=>p==="feedback"?null:p)}},[T,G]),hn=B((e,l)=>{S(p=>p.map(o=>o.id!==e||o.role!=="assistant"?o:o.feedback===l?{...o,feedback:void 0}:{...o,feedback:l})),pn(e,l)},[pn]),It=B(async()=>{let e=Ue.current.trim();if(!e||T.busy)return;me.current=!1,ue(null),De("chat");let l=[..._e.current],p=await un(l),o=lt("user"),A=Date.now(),v={id:o,role:"user",content:e,createdAt:A,clientStatus:"pending",attachments:p.length?p:void 0};D(""),ae(),S(R=>[...R,v]),ee||x(!0),g();try{let R=pe.current&&Date.now()-pe.current.storedAt<z*Bt?pe.current.id:void 0,N=await T.run(async({signal:ze,onStatus:Te})=>await Or({sessionId:R,message:e,images:l.map(Ta=>Ta.file)},{signal:ze,onStatus:Te}));if(me.current){M("canceled");return}if(!N)throw new Error(k.get(T.error??f.emptyResponseLabel));N.sessionId&&(pe.current={id:N.sessionId,storedAt:Date.now()});let fe={id:N.metadata?.messageId||lt("assistant"),role:"assistant",content:N.result||"",citations:N.citations,createdAt:Date.now()};S(ze=>[...ze.map(rt=>rt.id===o?{...rt,clientStatus:void 0}:rt),fe]),Ve(A)}catch(R){if(console.error("Error during ask()",R),me.current||Yr(R)){M("canceled");return}let N=R?.message?.trim()||k.get(f.unexpectedErrorLabel);S(fe=>[...fe.map(Te=>Te.id===o?{...Te,clientStatus:void 0}:Te),{id:lt("assistant-error"),role:"assistant",content:`\u26A0\uFE0F ${N}`,createdAt:Date.now()}]),Ve(A)}finally{De(R=>R==="chat"?null:R),me.current=!1,Re.current&&Re.current.focus(),g()}},[T,un,ae,ee,g,M,f.emptyResponseLabel,f.unexpectedErrorLabel,G]),da=B(e=>{e.key==="Enter"&&!e.shiftKey&&(e.preventDefault(),dt&&It())},[It,dt]),ca=B(()=>{x(!0)},[]);ne(()=>()=>{Se.current!=null&&(cancelAnimationFrame(Se.current),Se.current=null)},[]);let ga=B(()=>{bt(e=>{let l=!e;return Se.current!=null&&(cancelAnimationFrame(Se.current),Se.current=null),l?(Fe(!0),requestAnimationFrame(()=>{Se.current=requestAnimationFrame(()=>{Fe(!1),Se.current=null})})):Fe(!1),l})},[]),ma=B(e=>{D(e.content),(async()=>(await cn(e.attachments),S(l=>l.filter(p=>p.id!==e.id)),oa(e.attachments),queueMicrotask(()=>Re.current?.focus())))()},[cn]),fn=te(()=>_?w?h("img",{src:w,className:"ai-open-btn-icon",alt:k.get(f.askMeLabel||Oe)}):h(xr,{size:18}):null,[_,w,f,Oe,G]),pa=te(()=>{let e=fn,l=C?h(ke,{inherit:!0,children:Oe}):null;if(!_&&!l)return null;if(!_)return l;if(!C)return e;switch(we){case"top":return H(tt,{gap:4,align:"center",children:[e,l]});case"bottom":return H(tt,{gap:4,align:"center",children:[l,e]});case"right":return H(le,{gap:6,align:"center",children:[l,e]});default:return H(le,{gap:6,align:"center",children:[e,l]})}},[fn,_,C,Oe,we]),ha=te(()=>K,[K]),fa=te(()=>!K,[K]),ka=te(()=>j||(Be?k.get(f.readyLabel):k.get(f.readyEmptyLabel)),[j,Be,f.readyLabel,f.readyEmptyLabel,G]),ba=te(()=>K?k.get(f.cancelLabel):k.get(f.sendLabel),[K,f.cancelLabel,f.sendLabel,G]),ya=te(()=>K?h(Dr,{size:18}):h(Er,{size:18}),[K]),va=B(()=>{if(K){V();return}It()},[K,V,It]);return ne(()=>{if(!ee||!Pe||!F)return;let e=()=>{let N=window.getComputedStyle(F).overflowY,fe=N==="auto"||N==="scroll",ze=Math.ceil(F.scrollHeight),Te=Math.floor(F.clientHeight),rt=ze>Te;return fe&&rt},l=!1,p=R=>{if(!e())return;R.preventDefault();let N=F.scrollHeight-F.clientHeight;F.scrollTop=Math.max(0,Math.min(N,F.scrollTop+R.deltaY))},o=()=>{let R=e();Nt(R),R!==l&&(l=R,l?Pe.addEventListener("wheel",p,{passive:!1}):Pe.removeEventListener("wheel",p))};o();let A=new ResizeObserver(o);A.observe(F);let v=new MutationObserver(o);return v.observe(F,{childList:!0,subtree:!0,characterData:!0}),window.addEventListener("resize",o),()=>{l&&Pe.removeEventListener("wheel",p),A.disconnect(),v.disconnect(),window.removeEventListener("resize",o)}},[ee,Pe,F]),ne(()=>{let e=!1,l=on(s);if(!l){s==="nostorage"&&Ut(),at(!0);return}return(async()=>{try{let p=l.getItem(st);if(!p){at(!0);return}let o=JSON.parse(p),A=typeof o?.lastUserSentAt=="number"?o.lastUserSentAt:null;if(!A||Date.now()-A>z*Bt){l.removeItem(st),await Ut(),at(!0);return}let R=(Array.isArray(o.messages)?o.messages:[]).map(fe=>fe?.role==="user"&&fe.clientStatus==="pending"?{...fe,clientStatus:"canceled"}:fe),N=await dn(R);if(e){ia(N);return}S(N),Ve(A),o.session&&o.session.id&&(pe.current=o.session)}catch(p){console.warn("[AiChatbot] Failed to load history",p);try{l.removeItem(st)}catch{}}finally{e||at(!0)}})(),()=>{e=!0}},[s,z,dn]),ne(()=>{if(!oe)return;let e=on(s);if(!e)return;let l=ut.current;if(!l)return;if(Date.now()-l>z*Bt){try{e.removeItem(st)}catch{}rn(new Set);return}let p=J.map(({attachments:v,...R})=>({...R,attachments:v?.map(({objectUrl:N,blob:fe,...ze})=>ze)})),o={version:1,lastUserSentAt:l,session:pe.current,messages:p};try{e.setItem(st,JSON.stringify(o))}catch{}let A=new Set;p.forEach(v=>{v.attachments?.forEach(R=>{R.blobId&&A.add(R.blobId)})}),rn(A)},[oe,J,b,s,z]),u&&!wt||!u&&wt?null:H(le,{className:zt,children:[!ee&&h(Me,{variant:"filled",className:C?"ai-launcher-button ai-launcher-text":"ai-launcher-button",onClick:ca,"aria-label":Oe,title:Oe,"data-ai-kit-open-button":!0,children:pa}),ee&&h(et.Root,{ref:Tt,opened:ee,lockScroll:!1,trapFocus:!1,closeOnEscape:!0,onClose:L,className:zt+" ai-chat-container"+(de?" maximized":"")+(de&&yt?" ai-max-enter":""),portalProps:{target:r,reuseTargetNode:!0},"data-ai-kit-theme":$,"data-ai-kit-variation":"modal",children:H("div",{className:"ai-chat-container-internal",ref:vt,children:[H(et.Header,{className:"ai-chat-header-bar",children:[h(et.Title,{className:"ai-chat-title",children:Gt}),H(le,{gap:"4px",align:"center",justify:"center",children:[typeof window<"u"&&window.innerWidth>600&&h(aa,{variant:"subtle",c:"var(--ai-kit-chat-icon-color, var(--ai-kit-color-text))",onClick:ga,title:de?k.get(f.restoreSizeLabel):k.get(f.maximizeLabel),"aria-label":de?k.get(f.restoreSizeLabel):k.get(f.maximizeLabel),"data-ai-kit-maximize-button":!0,children:de?h(Lr,{size:16}):h(Cr,{size:16})}),h(et.CloseButton,{"aria-label":k.get(f.closeChatLabel)})]})]}),H(et.Body,{className:"ai-chat-scroll",ref:Kt,"data-scrollable":Je?"true":"false",children:[J.map(e=>{let l=e.role==="user",p=l&&e.clientStatus==="canceled"&&e.id===U;return h(le,{justify:l?"flex-end":"flex-start",className:"ai-chat-row "+e.role,onMouseEnter:()=>xe(e.id),onMouseLeave:()=>xe(o=>o===e.id?null:o),children:H(tt,{gap:4,w:"100%",style:{alignItems:l?"flex-end":"flex-start"},children:[H(tt,{className:"ai-chat-bubble",children:[H(ke,{className:"ai-chat-header",children:[h(ke,{fw:"bolder",size:"xs",style:{whiteSpace:"nowrap"},children:l?k.get(f.userLabel):k.get(f.assistantLabel)}),"\xA0",h(ke,{size:"xs",style:{whiteSpace:"nowrap"},children:new Date(e.createdAt).toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})})]}),e.role==="assistant"?h(Hr,{remarkPlugins:[Gr],children:e.content}):h(ke,{size:"sm",miw:"100px",children:e.content})]}),e.attachments&&e.attachments.length>0&&h(le,{className:"ai-thumbs ai-message-thumbs",gap:"xs",children:e.attachments.map(o=>h("button",{type:"button",className:"thumb",style:{backgroundImage:o.objectUrl?`url(${o.objectUrl})`:void 0,backgroundSize:"cover",backgroundPosition:"center",backgroundRepeat:"no-repeat"},onClick:()=>Wt(o.objectUrl,o.name),disabled:!o.objectUrl,title:o.name||k.get("View image"),"aria-label":o.name||k.get("View image"),children:!o.objectUrl&&h(ke,{size:"xs",c:"dimmed",children:k.get("Loading image...")})},o.id))}),p&&H(le,{justify:"flex-end",gap:"xs",children:[h(ke,{size:"xs",c:"dimmed",children:h("em",{children:k.get(f.notSentLabel)})}),Ht===e.id&&h(aa,{size:"sm",variant:"subtle",onClick:()=>ma(e),title:k.get(f.editLabel),"aria-label":k.get(f.editLabel),"data-ai-kit-edit-button":!0,children:h(Pr,{size:14})})]}),e.citations&&e.citations.length>0&&H(tt,{className:"ai-citations",children:[h(ke,{fw:"bold",size:"sm",mb:"xs",children:k.get(f.referencesLabel)}),h(ra,{spacing:"xs",size:"sm",children:e.citations.map((o,A)=>{let v=o.sourceUrl||o.url,R=o.title||v||`${k.get(f.referenceLabel)} #${A+1}`;return H(ra.Item,{children:[v?h(zr,{href:v,target:"_blank",rel:"noreferrer",children:R}):h(ke,{children:R}),o.snippet?h(ke,{size:"xs",c:"dimmed",mt:4,children:o.snippet}):null]},A)})})]}),e.role==="assistant"&&H(le,{className:"ai-feedback",gap:"xs",children:[h(Me,{className:e.feedback==="accepted"?"active":void 0,onClick:()=>hn(e.id,"accepted"),"aria-label":k.get(f.acceptResponseLabel),disabled:T.busy,"data-ai-kit-feedback-accept-button":!0,children:"\u{1F44D}"}),h(Me,{type:"button",className:e.feedback==="rejected"?"active":void 0,onClick:()=>hn(e.id,"rejected"),"aria-label":k.get(f.rejectResponseLabel),disabled:T.busy,"data-ai-kit-feedback-reject-button":!0,children:"\u{1F44E}"})]})]})},e.id)}),ha&&h(le,{justify:"flex-start",className:"ai-chat-row assistant status",children:H(tt,{className:"ai-chat-bubble typing",children:[Z?h(ke,{size:"sm",c:"dimmed",children:h("em",{children:Z})}):null,H("div",{className:"typing-indicator",children:[h("span",{}),h("span",{}),h("span",{})]})]})})]}),fa&&h(le,{className:"ai-status-line",children:h(ke,{className:"ai-status-text",children:h("em",{children:ka})})}),H(tt,{className:"ai-box ai-box-open",children:[H(et,{opened:kt,onClose:mn,centered:!0,title:k.get("Reset conversation"),style:{position:"fixed"},left:0,children:[h(ke,{size:"sm",children:k.get("Are you sure you want to reset the conversation?")}),H(le,{justify:"flex-end",mt:"md",children:[h(Me,{variant:"default",onClick:mn,"data-ai-kit-no-button":!0,children:k.get("No")}),h(Me,{color:"var(--ai-kit-color-danger, red)",onClick:ua,disabled:!Be&&!K,"data-ai-kit-yes-button":!0,children:k.get("Yes")})]})]}),h(le,{children:h(Ir,{className:"ai-message",ref:Re,placeholder:jt,value:Y,onChange:e=>{D(e.target.value)},onKeyDown:da,rows:3})}),H(le,{className:"ai-actions",justify:"space-between",w:"100%",children:[h(le,{justify:"flex-start",children:h(Me,{variant:"light",leftSection:h(Ur,{size:18}),onClick:la,disabled:!Be&&!K,"data-ai-kit-reset-button":!0,children:k.get(f.resetLabel)})}),H(le,{justify:"flex-end",children:[ve>0&&H($r,{children:[h(Me,{variant:"outline",leftSection:h(Mr,{size:18}),onClick:()=>Ee.current?.click(),disabled:ie.length>=ve||K,title:k.get(f.addImageLabel),"data-ai-kit-add-image-button":!0,children:k.get(f.addLabel)}),h(Sr,{ref:Ee,type:"file",accept:"image/png,image/jpeg,image/gif,image/webp",style:{display:"none"},multiple:!0,onChange:Ie})]}),h(Me,{leftSection:ya,variant:"filled",onClick:va,disabled:!K&&!dt,"data-ai-kit-send-button":!0,children:ba})]})]}),P.length>0&&h(le,{className:"ai-thumbs",mt:"xs",gap:"xs",children:P.map(({url:e,title:l},p)=>h("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":l||k.get("View image"),onClick:()=>Wt(e,l),onKeyDown:o=>{(o.key==="Enter"||o.key===" ")&&(o.preventDefault(),Wt(e,l))},children:h(Me,{variant:"white",onClick:o=>{o.stopPropagation(),St(p)},"aria-label":k.get(f.removeImageLabel),mt:"-xs",mr:"-xs",size:"xs",p:0,className:"remove-image-button",title:k.get(f.removeImageLabel),"data-ai-kit-remove-image-button":!0,children:"X"})},ie[p]?.id??p))})]})]})}),h(et,{opened:!!qe,onClose:sa,centered:!0,size:"auto",title:qe?.title||k.get("Image preview"),children:qe&&h("img",{src:qe.url,alt:qe.title||k.get("Image preview"),style:{maxWidth:"100%",maxHeight:"70vh"}})})]})},_r=mt(Vr,{showOpenButton:!0,variation:"modal"});export{_r as AiChatbot,Ar as AiFeature,ln as DEFAULT_CHATBOT_LABELS,Hn as isBackendConfigured,$t as markdownToHtml,$e as readDefaultOutputLanguage,gt as stripCodeFence,ct as translations,Ct as useAiRun,mt as withAiKitShell};
|
package/package.json
CHANGED
|
@@ -525,6 +525,7 @@ const AiFeatureBase: FC<AiFeatureProps & AiKitShellInjectedProps> = (props) => {
|
|
|
525
525
|
const res = await ai.run(async ({ signal, onStatus }) => {
|
|
526
526
|
const expectedInputLanguages: AiKitLanguageCode[] = [];
|
|
527
527
|
try {
|
|
528
|
+
setState("Detecting input language...");
|
|
528
529
|
const res = await detectLanguage(
|
|
529
530
|
{ text: text!.trim() },
|
|
530
531
|
{
|