@smart-cloud/ai-kit-ui 1.1.38 → 1.1.40
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 +6 -6
- package/package.json +8 -8
- package/src/ai-feature/AiFeature.tsx +120 -116
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},p)).result:i.title:"",caption:typeof i.caption=="string"?a&&a!=="en"?(await(0,M.translate)({text:i.caption,sourceLanguage:"en",targetLanguage:a},p)).result:i.caption:"",description:typeof i.description=="string"?a&&a!=="en"?(await(0,M.translate)({text:i.description,sourceLanguage:"en",targetLanguage:a},p)).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});
|