Changeset 3327139
- Timestamp:
- 07/13/2025 05:46:54 PM (9 months ago)
- Location:
- kaigen
- Files:
-
- 2 added
- 2 deleted
- 10 edited
- 1 copied
-
tags/v0.2.2 (copied) (copied from kaigen/trunk)
-
tags/v0.2.2/.wordpress-org/icon-128x128.png (modified) (previous)
-
tags/v0.2.2/assets/KaiGen-logo-128x128.png (modified) (previous)
-
tags/v0.2.2/build/images/KaiGen-logo-128x128.5ec09725.png (added)
-
tags/v0.2.2/build/images/KaiGen-logo-128x128.e1e4be15.png (deleted)
-
tags/v0.2.2/build/index.asset.php (modified) (1 diff)
-
tags/v0.2.2/build/index.js (modified) (1 diff)
-
tags/v0.2.2/kaigen.php (modified) (1 diff)
-
trunk/.wordpress-org/icon-128x128.png (modified) (previous)
-
trunk/assets/KaiGen-logo-128x128.png (modified) (previous)
-
trunk/build/images/KaiGen-logo-128x128.5ec09725.png (added)
-
trunk/build/images/KaiGen-logo-128x128.e1e4be15.png (deleted)
-
trunk/build/index.asset.php (modified) (1 diff)
-
trunk/build/index.js (modified) (1 diff)
-
trunk/kaigen.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
kaigen/tags/v0.2.2/build/index.asset.php
r3327070 r3327139 1 <?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-hooks', 'wp-rich-text'), 'version' => ' f8292307639d2bbd9613');1 <?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-hooks', 'wp-rich-text'), 'version' => 'd26efd509f34fedba832'); -
kaigen/tags/v0.2.2/build/index.js
r3327070 r3327139 1 (()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var a in r)e.o(r,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:r[a]})}};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var r=e.g.document;if(!t&&r&&(r.currentScript&&(t=r.currentScript.src),!t)){var a=r.getElementsByTagName("script");if(a.length)for(var n=a.length-1;n>-1&&(!t||!/^http(s?):/.test(t));)t=a[n--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})();const t=window.React,r=window.wp.element,a=window.wp.components,n=e.p+"images/KaiGen-logo-128x128. e1e4be15.png",o=async(e,t,r={})=>{try{const a=wp.data.select("core/editor")?.getEditorSettings()?.kaigen_provider;if(!a)throw new Error("No provider configured. Please check your plugin settings.");const n={prompt:e,provider:a};r.sourceImageUrl&&(n.source_image_url=r.sourceImageUrl),r.additionalImageUrls&&Array.isArray(r.additionalImageUrls)&&(n.additional_image_urls=r.additionalImageUrls),r.maskUrl&&(n.mask_url=r.maskUrl),r.moderation&&["auto","low"].includes(r.moderation)&&(n.moderation=r.moderation),r.style&&["natural","vivid"].includes(r.style)&&(n.style=r.style);const o=await wp.apiFetch({path:"/kaigen/v1/generate-image",method:"POST",data:n});if(o.code&&o.message){if("content_moderation"===o.code)throw new Error(o.message);if("replicate_error"===o.code)throw new Error("Image generation failed: "+o.message);throw new Error(o.message)}if(!o||!o.url)throw new Error("Invalid response from server: "+JSON.stringify(o));o.id&&"number"==typeof o.id&&o.id>0?t({url:o.url,alt:e,id:o.id,caption:""}):t({url:o.url,alt:e,caption:""})}catch(e){console.error("Image generation failed:",e),e.message&&console.error("Error message:",e.message),e.stack&&console.error("Error stack:",e.stack),t({error:e.message||"An unknown error occurred while generating the image"})}},i=({onSelect:e,shouldDisplay:i})=>{const[l,c]=(0,r.useState)(!1),[s,d]=(0,r.useState)(""),[g,m]=(0,r.useState)(!1),[u,p]=(0,r.useState)(null),[w,h]=(0,r.useState)([]),[b,f]=(0,r.useState)(null),y=window.kaiGen?.supportsImageToImage||!1;return(0,r.useEffect)((()=>{l&&y&&(async()=>{try{const e=await wp.apiFetch({path:"/kaigen/v1/reference-images",method:"GET"});return Array.isArray(e)?e:[]}catch(e){return console.error("Failed to fetch reference images:",e),[]}})().then(h)}),[l]),i?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.Button,{onClick:()=>c(!0),className:"kaigen-placeholder-button",style:{order:99,padding:0,background:"transparent",border:"none",boxShadow:"none",minWidth:"auto",display:"flex",alignItems:"center",justifyContent:"center"},"aria-label":"KaiGen",role:"button",title:"KaiGen"},(0,t.createElement)("img",{src:n,alt:"KaiGen",style:{height:"40px",width:"40px",objectFit:"contain",border:"none",background:"transparent"},"aria-label":"KaiGen logo",role:"button",title:"KaiGen logo"})),l&&(0,t.createElement)(a.Modal,{title:(0,t.createElement)("img",{src:n,alt:"KaiGen logo",style:{height:"80px",width:"auto",display:"block"}}),"aria-label":"KaiGen",onRequestClose:()=>c(!1)},u&&(0,t.createElement)("p",{style:{color:"red"}},u),(0,t.createElement)(a.TextareaControl,{label:"Prompt",value:s,onChange:d,rows:4}),y&&w.length>0&&(0,t.createElement)(t.Fragment,null,(0,t.createElement)("div",{style:{width:"250px",marginBottom:"8px"}},(0,t.createElement)("h4",{style:{margin:"0 0 4px 0"}},"Reference Images"),(0,t.createElement)("div",{style:{display:"flex",overflowX:"auto",overflowY:"hidden",gap:"4px",WebkitOverflowScrolling:"touch"}},w.map((e=>(0,t.createElement)("img",{key:e.id,src:e.url,alt:e.alt||"",onClick:()=>b&&b.id===e.id?f(null):f(e),style:{width:"80px",height:"80px",objectFit:"contain",cursor:"pointer",flex:"0 0 auto",border:b&&b.id===e.id?"4px solid #007cba":"4px solid transparent"}})))))),(0,t.createElement)(a.Button,{variant:"primary",onClick:()=>{if(!s.trim())return void p("Please enter a prompt for image generation.");m(!0),p(null);const t={};b&&(t.sourceImageUrl=b.url),o(s.trim(),(t=>{t.error?(p(t.error),m(!1)):(e(t),m(!1),c(!1))}),t)},disabled:g||!s.trim()},g?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.Spinner,null)," ","KaiGen is generating..."):"KaiGen"))):null},l=({isGenerating:e,onGenerateImage:o,isRegenerating:i,onRegenerateImage:l,isImageBlock:c,isTextSelected:s,supportsImageToImage:d})=>{const[g,m]=(0,r.useState)(!1),[u,p]=(0,r.useState)(""),[w,h]=(0,r.useState)(null);return c&&d?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.ToolbarGroup,null,(0,t.createElement)(a.ToolbarButton,{icon:i?(0,t.createElement)(a.Spinner,null):(0,t.createElement)("img",{src:n,alt:"KaiGen logo",style:{height:"20px",width:"20px"}}),label:i?"KaiGen is generating...":"KaiGen",onClick:()=>m(!0),disabled:i})),g&&(0,t.createElement)(a.Modal,{title:(0,t.createElement)("img",{src:n,alt:"KaiGen logo",style:{height:"80px",width:"auto",display:"block"}}),onRequestClose:()=>{m(!1),p(""),h(null)}},w&&(0,t.createElement)("p",{style:{color:"red"}},w),(0,t.createElement)(a.TextareaControl,{label:"Editing Instructions (optional)",value:u,onChange:p,rows:4}),(0,t.createElement)(a.Button,{variant:"primary",onClick:()=>{l(u.trim()),m(!1),p(""),h(null)},disabled:i},i?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.Spinner,null),"Regenerating..."):"Regenerate Image"))):s?(0,t.createElement)(a.ToolbarGroup,null,(0,t.createElement)(a.ToolbarButton,{icon:e?(0,t.createElement)(a.Spinner,null):"format-image",label:e?"KaiGen is generating...":"KaiGen",onClick:o,disabled:e})):null},c=window.wp.blockEditor,s=window.wp.data;(0,window.wp.richText.registerFormatType)("kaigen/custom-format",{title:"AI Image Gen",tagName:"span",className:"kaigen-format",edit:({isActive:e,value:a,onChange:n})=>{const[i,d]=(0,r.useState)(!1),g=(0,s.useSelect)((e=>e("core/block-editor").getSelectedBlock()),[]),{replaceBlocks:m}=(0,s.useDispatch)("core/block-editor"),u=(0,r.useCallback)((()=>{if(g&&"core/paragraph"===g.name){const e=a.text.slice(a.start,a.end).trim();if(!e)return void wp.data.dispatch("core/notices").createErrorNotice("Please select some text to use as the image generation prompt.",{type:"snackbar"});const t=wp.data.select("core/editor")?.getEditorSettings()?.kaigen_provider;if(!t)return void wp.data.dispatch("core/notices").createErrorNotice("No AI provider configured. Please set one in the plugin settings.",{type:"snackbar"});const r=wp.blocks.createBlock("core/heading",{content:"Generating AI image...",level:2,style:{textAlign:"center"}});m(g.clientId,[r,g]),d(!0),o(e,(e=>{if(d(!1),e.error)console.error("Image generation failed:",e.error),wp.data.dispatch("core/notices").createErrorNotice("Failed to generate image: "+e.error,{type:"snackbar"}),m(r.clientId,[]);else{let t={url:e.url,alt:e.alt,caption:""};e.id&&"number"==typeof e.id&&e.id>0&&(t.id=e.id);const a=wp.blocks.createBlock("core/image",t);m(r.clientId,[a])}}))}}),[g,a.text,a.start,a.end,m]),p=""!==a.text.slice(a.start,a.end).trim();return(0,t.createElement)(c.BlockControls,null,(0,t.createElement)(l,{isGenerating:i,onGenerateImage:u,isTextSelected:p}))}});const d=window.wp.hooks;(0,d.addFilter)("editor.MediaUpload","kaigen/add-ai-tab",(e=>r=>{const a=r.allowedTypes&&r.allowedTypes.includes("image")&&!r.multiple,n=wp.data.select("core/block-editor").getSelectedBlock(),o=n&&"core/image"===n.name,l=a&&o&&!(n&&n.attributes&&n.attributes.url);return(0,t.createElement)(e,{...r,render:e=>(0,t.createElement)(t.Fragment,null,r.render(e),(0,t.createElement)(i,{onSelect:r.onSelect,shouldDisplay:l}))})}));const g=window.wp.apiFetch;var m=e.n(g);(0,d.addFilter)("editor.BlockEdit","kaigen/add-regenerate-button",(e=>n=>{if("core/image"!==n.name)return(0,t.createElement)(e,{...n});const i=n.attributes.id&&"number"==typeof n.attributes.id&&n.attributes.id>0,[s,d]=(0,r.useState)(!1),[g,u]=(0,r.useState)(null),[p,w]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{(async()=>{try{const e=window.kaiGen?.provider,t=window.kaiGen?.supportsImageToImage||!1;if(!e)return void console.error("No provider configured in localized data");w(t)}catch(e){console.error("Failed to initialize provider:",e)}})()}),[]),(0,t.createElement)(t.Fragment,null,(0,t.createElement)(e,{...n}),(0,t.createElement)(c.BlockControls,null,(0,t.createElement)(l,{isRegenerating:s,onRegenerateImage:async e=>{u(null);const t=e||n.attributes.alt||"no alt text or prompt, please just enhance",r=window.kaiGen?.provider;if(!r)return console.error("No provider configured"),void wp.data.dispatch("core/notices").createErrorNotice("No AI provider configured. Please check your plugin settings.",{type:"snackbar"});d(!0);try{const e=n.attributes.url,r={};p&&e?r.sourceImageUrl=e:p&&!e&&(console.warn("Image-to-image requested but no source image URL available"),wp.data.dispatch("core/notices").createWarningNotice("Image-to-image generation requires a source image. Please ensure the image is properly loaded.",{type:"snackbar"}));const a=await new Promise(((e,a)=>{o(t,(t=>{t.error?a(new Error(t.error)):e(t)}),r)}));a.id&&"number"==typeof a.id&&a.id>0?n.setAttributes({url:a.url,id:a.id}):n.setAttributes({url:a.url,id:void 0}),wp.data.dispatch("core/notices").createSuccessNotice("Image regenerated successfully!",{type:"snackbar"})}catch(e){console.error("Image regeneration failed:",e);let t=e.message||"Unknown error",r="";t.includes("organization verification")?r=" Please verify your organization in the OpenAI dashboard.":t.includes("parameter")?t="API configuration error. Please contact the plugin developer.":t.includes("content policy")&&(r=" Try a different prompt."),wp.data.dispatch("core/notices").createErrorNotice("Failed to regenerate image: "+t+r,{type:"snackbar"})}finally{d(!1)}},isImageBlock:!0,supportsImageToImage:p})),i&&(0,t.createElement)(c.InspectorControls,null,(0,t.createElement)(a.PanelBody,{title:"KaiGen Settings",initialOpen:!1},(0,t.createElement)(a.CheckboxControl,{label:"Reference image",checked:n.attributes.kaigen_reference_image||!1,onChange:async e=>{n.setAttributes({kaigen_reference_image:e});try{await m()({path:`/wp/v2/media/${n.attributes.id}`,method:"POST",data:{meta:{kaigen_reference_image:e?1:0}}})}catch(e){console.error("Failed to update reference image meta:",e),wp.data.dispatch("core/notices").createErrorNotice("Failed to update reference image meta",{type:"snackbar"})}},help:"Add to the list of reference images."}))))})),(0,d.addFilter)("blocks.registerBlockType","kaigen/add-reference-image-attribute",((e,t)=>"core/image"!==t?e:{...e,attributes:{...e.attributes,kaigen_reference_image:{type:"boolean",default:!1}}}))})();1 (()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var a in r)e.o(r,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:r[a]})}};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var r=e.g.document;if(!t&&r&&(r.currentScript&&(t=r.currentScript.src),!t)){var a=r.getElementsByTagName("script");if(a.length)for(var n=a.length-1;n>-1&&(!t||!/^http(s?):/.test(t));)t=a[n--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})();const t=window.React,r=window.wp.element,a=window.wp.components,n=e.p+"images/KaiGen-logo-128x128.5ec09725.png",o=async(e,t,r={})=>{try{const a=wp.data.select("core/editor")?.getEditorSettings()?.kaigen_provider;if(!a)throw new Error("No provider configured. Please check your plugin settings.");const n={prompt:e,provider:a};r.sourceImageUrl&&(n.source_image_url=r.sourceImageUrl),r.additionalImageUrls&&Array.isArray(r.additionalImageUrls)&&(n.additional_image_urls=r.additionalImageUrls),r.maskUrl&&(n.mask_url=r.maskUrl),r.moderation&&["auto","low"].includes(r.moderation)&&(n.moderation=r.moderation),r.style&&["natural","vivid"].includes(r.style)&&(n.style=r.style);const o=await wp.apiFetch({path:"/kaigen/v1/generate-image",method:"POST",data:n});if(o.code&&o.message){if("content_moderation"===o.code)throw new Error(o.message);if("replicate_error"===o.code)throw new Error("Image generation failed: "+o.message);throw new Error(o.message)}if(!o||!o.url)throw new Error("Invalid response from server: "+JSON.stringify(o));o.id&&"number"==typeof o.id&&o.id>0?t({url:o.url,alt:e,id:o.id,caption:""}):t({url:o.url,alt:e,caption:""})}catch(e){console.error("Image generation failed:",e),e.message&&console.error("Error message:",e.message),e.stack&&console.error("Error stack:",e.stack),t({error:e.message||"An unknown error occurred while generating the image"})}},i=({onSelect:e,shouldDisplay:i})=>{const[l,c]=(0,r.useState)(!1),[s,d]=(0,r.useState)(""),[g,m]=(0,r.useState)(!1),[u,p]=(0,r.useState)(null),[w,h]=(0,r.useState)([]),[b,f]=(0,r.useState)(null),y=window.kaiGen?.supportsImageToImage||!1;return(0,r.useEffect)((()=>{l&&y&&(async()=>{try{const e=await wp.apiFetch({path:"/kaigen/v1/reference-images",method:"GET"});return Array.isArray(e)?e:[]}catch(e){return console.error("Failed to fetch reference images:",e),[]}})().then(h)}),[l]),i?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.Button,{onClick:()=>c(!0),className:"kaigen-placeholder-button",style:{order:99,padding:0,background:"transparent",border:"none",boxShadow:"none",minWidth:"auto",display:"flex",alignItems:"center",justifyContent:"center"},"aria-label":"KaiGen",role:"button",title:"KaiGen"},(0,t.createElement)("img",{src:n,alt:"KaiGen",style:{height:"40px",width:"40px",objectFit:"contain",border:"none",background:"transparent"},"aria-label":"KaiGen logo",role:"button",title:"KaiGen logo"})),l&&(0,t.createElement)(a.Modal,{title:(0,t.createElement)("img",{src:n,alt:"KaiGen logo",style:{height:"80px",width:"auto",display:"block"}}),"aria-label":"KaiGen",onRequestClose:()=>c(!1)},u&&(0,t.createElement)("p",{style:{color:"red"}},u),(0,t.createElement)(a.TextareaControl,{label:"Prompt",value:s,onChange:d,rows:4}),y&&w.length>0&&(0,t.createElement)(t.Fragment,null,(0,t.createElement)("div",{style:{width:"250px",marginBottom:"8px"}},(0,t.createElement)("h4",{style:{margin:"0 0 4px 0"}},"Reference Images"),(0,t.createElement)("div",{style:{display:"flex",overflowX:"auto",overflowY:"hidden",gap:"4px",WebkitOverflowScrolling:"touch"}},w.map((e=>(0,t.createElement)("img",{key:e.id,src:e.url,alt:e.alt||"",onClick:()=>b&&b.id===e.id?f(null):f(e),style:{width:"80px",height:"80px",objectFit:"contain",cursor:"pointer",flex:"0 0 auto",border:b&&b.id===e.id?"4px solid #007cba":"4px solid transparent"}})))))),(0,t.createElement)(a.Button,{variant:"primary",onClick:()=>{if(!s.trim())return void p("Please enter a prompt for image generation.");m(!0),p(null);const t={};b&&(t.sourceImageUrl=b.url),o(s.trim(),(t=>{t.error?(p(t.error),m(!1)):(e(t),m(!1),c(!1))}),t)},disabled:g||!s.trim()},g?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.Spinner,null)," ","KaiGen is generating..."):"KaiGen"))):null},l=({isGenerating:e,onGenerateImage:o,isRegenerating:i,onRegenerateImage:l,isImageBlock:c,isTextSelected:s,supportsImageToImage:d})=>{const[g,m]=(0,r.useState)(!1),[u,p]=(0,r.useState)(""),[w,h]=(0,r.useState)(null);return c&&d?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.ToolbarGroup,null,(0,t.createElement)(a.ToolbarButton,{icon:i?(0,t.createElement)(a.Spinner,null):(0,t.createElement)("img",{src:n,alt:"KaiGen logo",style:{height:"20px",width:"20px"}}),label:i?"KaiGen is generating...":"KaiGen",onClick:()=>m(!0),disabled:i})),g&&(0,t.createElement)(a.Modal,{title:(0,t.createElement)("img",{src:n,alt:"KaiGen logo",style:{height:"80px",width:"auto",display:"block"}}),onRequestClose:()=>{m(!1),p(""),h(null)}},w&&(0,t.createElement)("p",{style:{color:"red"}},w),(0,t.createElement)(a.TextareaControl,{label:"Editing Instructions (optional)",value:u,onChange:p,rows:4}),(0,t.createElement)(a.Button,{variant:"primary",onClick:()=>{l(u.trim()),m(!1),p(""),h(null)},disabled:i},i?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.Spinner,null),"Regenerating..."):"Regenerate Image"))):s?(0,t.createElement)(a.ToolbarGroup,null,(0,t.createElement)(a.ToolbarButton,{icon:e?(0,t.createElement)(a.Spinner,null):"format-image",label:e?"KaiGen is generating...":"KaiGen",onClick:o,disabled:e})):null},c=window.wp.blockEditor,s=window.wp.data;(0,window.wp.richText.registerFormatType)("kaigen/custom-format",{title:"AI Image Gen",tagName:"span",className:"kaigen-format",edit:({isActive:e,value:a,onChange:n})=>{const[i,d]=(0,r.useState)(!1),g=(0,s.useSelect)((e=>e("core/block-editor").getSelectedBlock()),[]),{replaceBlocks:m}=(0,s.useDispatch)("core/block-editor"),u=(0,r.useCallback)((()=>{if(g&&"core/paragraph"===g.name){const e=a.text.slice(a.start,a.end).trim();if(!e)return void wp.data.dispatch("core/notices").createErrorNotice("Please select some text to use as the image generation prompt.",{type:"snackbar"});const t=wp.data.select("core/editor")?.getEditorSettings()?.kaigen_provider;if(!t)return void wp.data.dispatch("core/notices").createErrorNotice("No AI provider configured. Please set one in the plugin settings.",{type:"snackbar"});const r=wp.blocks.createBlock("core/heading",{content:"Generating AI image...",level:2,style:{textAlign:"center"}});m(g.clientId,[r,g]),d(!0),o(e,(e=>{if(d(!1),e.error)console.error("Image generation failed:",e.error),wp.data.dispatch("core/notices").createErrorNotice("Failed to generate image: "+e.error,{type:"snackbar"}),m(r.clientId,[]);else{let t={url:e.url,alt:e.alt,caption:""};e.id&&"number"==typeof e.id&&e.id>0&&(t.id=e.id);const a=wp.blocks.createBlock("core/image",t);m(r.clientId,[a])}}))}}),[g,a.text,a.start,a.end,m]),p=""!==a.text.slice(a.start,a.end).trim();return(0,t.createElement)(c.BlockControls,null,(0,t.createElement)(l,{isGenerating:i,onGenerateImage:u,isTextSelected:p}))}});const d=window.wp.hooks;(0,d.addFilter)("editor.MediaUpload","kaigen/add-ai-tab",(e=>r=>{const a=r.allowedTypes&&r.allowedTypes.includes("image")&&!r.multiple,n=wp.data.select("core/block-editor").getSelectedBlock(),o=n&&"core/image"===n.name,l=a&&o&&!(n&&n.attributes&&n.attributes.url);return(0,t.createElement)(e,{...r,render:e=>(0,t.createElement)(t.Fragment,null,r.render(e),(0,t.createElement)(i,{onSelect:r.onSelect,shouldDisplay:l}))})}));const g=window.wp.apiFetch;var m=e.n(g);(0,d.addFilter)("editor.BlockEdit","kaigen/add-regenerate-button",(e=>n=>{if("core/image"!==n.name)return(0,t.createElement)(e,{...n});const i=n.attributes.id&&"number"==typeof n.attributes.id&&n.attributes.id>0,[s,d]=(0,r.useState)(!1),[g,u]=(0,r.useState)(null),[p,w]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{(async()=>{try{const e=window.kaiGen?.provider,t=window.kaiGen?.supportsImageToImage||!1;if(!e)return void console.error("No provider configured in localized data");w(t)}catch(e){console.error("Failed to initialize provider:",e)}})()}),[]),(0,t.createElement)(t.Fragment,null,(0,t.createElement)(e,{...n}),(0,t.createElement)(c.BlockControls,null,(0,t.createElement)(l,{isRegenerating:s,onRegenerateImage:async e=>{u(null);const t=e||n.attributes.alt||"no alt text or prompt, please just enhance",r=window.kaiGen?.provider;if(!r)return console.error("No provider configured"),void wp.data.dispatch("core/notices").createErrorNotice("No AI provider configured. Please check your plugin settings.",{type:"snackbar"});d(!0);try{const e=n.attributes.url,r={};p&&e?r.sourceImageUrl=e:p&&!e&&(console.warn("Image-to-image requested but no source image URL available"),wp.data.dispatch("core/notices").createWarningNotice("Image-to-image generation requires a source image. Please ensure the image is properly loaded.",{type:"snackbar"}));const a=await new Promise(((e,a)=>{o(t,(t=>{t.error?a(new Error(t.error)):e(t)}),r)}));a.id&&"number"==typeof a.id&&a.id>0?n.setAttributes({url:a.url,id:a.id}):n.setAttributes({url:a.url,id:void 0}),wp.data.dispatch("core/notices").createSuccessNotice("Image regenerated successfully!",{type:"snackbar"})}catch(e){console.error("Image regeneration failed:",e);let t=e.message||"Unknown error",r="";t.includes("organization verification")?r=" Please verify your organization in the OpenAI dashboard.":t.includes("parameter")?t="API configuration error. Please contact the plugin developer.":t.includes("content policy")&&(r=" Try a different prompt."),wp.data.dispatch("core/notices").createErrorNotice("Failed to regenerate image: "+t+r,{type:"snackbar"})}finally{d(!1)}},isImageBlock:!0,supportsImageToImage:p})),i&&(0,t.createElement)(c.InspectorControls,null,(0,t.createElement)(a.PanelBody,{title:"KaiGen Settings",initialOpen:!1},(0,t.createElement)(a.CheckboxControl,{label:"Reference image",checked:n.attributes.kaigen_reference_image||!1,onChange:async e=>{n.setAttributes({kaigen_reference_image:e});try{await m()({path:`/wp/v2/media/${n.attributes.id}`,method:"POST",data:{meta:{kaigen_reference_image:e?1:0}}})}catch(e){console.error("Failed to update reference image meta:",e),wp.data.dispatch("core/notices").createErrorNotice("Failed to update reference image meta",{type:"snackbar"})}},help:"Add to the list of reference images."}))))})),(0,d.addFilter)("blocks.registerBlockType","kaigen/add-reference-image-attribute",((e,t)=>"core/image"!==t?e:{...e,attributes:{...e.attributes,kaigen_reference_image:{type:"boolean",default:!1}}}))})(); -
kaigen/tags/v0.2.2/kaigen.php
r3327070 r3327139 5 5 * Requires at least: 6.1 6 6 * Requires PHP: 7.0 7 * Version: 0.2. 17 * Version: 0.2.2 8 8 * Author: Jacob Schweitzer 9 9 * License: GPL-2.0-or-later -
kaigen/trunk/build/index.asset.php
r3327070 r3327139 1 <?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-hooks', 'wp-rich-text'), 'version' => ' f8292307639d2bbd9613');1 <?php return array('dependencies' => array('react', 'wp-api-fetch', 'wp-block-editor', 'wp-components', 'wp-data', 'wp-element', 'wp-hooks', 'wp-rich-text'), 'version' => 'd26efd509f34fedba832'); -
kaigen/trunk/build/index.js
r3327070 r3327139 1 (()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var a in r)e.o(r,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:r[a]})}};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var r=e.g.document;if(!t&&r&&(r.currentScript&&(t=r.currentScript.src),!t)){var a=r.getElementsByTagName("script");if(a.length)for(var n=a.length-1;n>-1&&(!t||!/^http(s?):/.test(t));)t=a[n--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})();const t=window.React,r=window.wp.element,a=window.wp.components,n=e.p+"images/KaiGen-logo-128x128. e1e4be15.png",o=async(e,t,r={})=>{try{const a=wp.data.select("core/editor")?.getEditorSettings()?.kaigen_provider;if(!a)throw new Error("No provider configured. Please check your plugin settings.");const n={prompt:e,provider:a};r.sourceImageUrl&&(n.source_image_url=r.sourceImageUrl),r.additionalImageUrls&&Array.isArray(r.additionalImageUrls)&&(n.additional_image_urls=r.additionalImageUrls),r.maskUrl&&(n.mask_url=r.maskUrl),r.moderation&&["auto","low"].includes(r.moderation)&&(n.moderation=r.moderation),r.style&&["natural","vivid"].includes(r.style)&&(n.style=r.style);const o=await wp.apiFetch({path:"/kaigen/v1/generate-image",method:"POST",data:n});if(o.code&&o.message){if("content_moderation"===o.code)throw new Error(o.message);if("replicate_error"===o.code)throw new Error("Image generation failed: "+o.message);throw new Error(o.message)}if(!o||!o.url)throw new Error("Invalid response from server: "+JSON.stringify(o));o.id&&"number"==typeof o.id&&o.id>0?t({url:o.url,alt:e,id:o.id,caption:""}):t({url:o.url,alt:e,caption:""})}catch(e){console.error("Image generation failed:",e),e.message&&console.error("Error message:",e.message),e.stack&&console.error("Error stack:",e.stack),t({error:e.message||"An unknown error occurred while generating the image"})}},i=({onSelect:e,shouldDisplay:i})=>{const[l,c]=(0,r.useState)(!1),[s,d]=(0,r.useState)(""),[g,m]=(0,r.useState)(!1),[u,p]=(0,r.useState)(null),[w,h]=(0,r.useState)([]),[b,f]=(0,r.useState)(null),y=window.kaiGen?.supportsImageToImage||!1;return(0,r.useEffect)((()=>{l&&y&&(async()=>{try{const e=await wp.apiFetch({path:"/kaigen/v1/reference-images",method:"GET"});return Array.isArray(e)?e:[]}catch(e){return console.error("Failed to fetch reference images:",e),[]}})().then(h)}),[l]),i?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.Button,{onClick:()=>c(!0),className:"kaigen-placeholder-button",style:{order:99,padding:0,background:"transparent",border:"none",boxShadow:"none",minWidth:"auto",display:"flex",alignItems:"center",justifyContent:"center"},"aria-label":"KaiGen",role:"button",title:"KaiGen"},(0,t.createElement)("img",{src:n,alt:"KaiGen",style:{height:"40px",width:"40px",objectFit:"contain",border:"none",background:"transparent"},"aria-label":"KaiGen logo",role:"button",title:"KaiGen logo"})),l&&(0,t.createElement)(a.Modal,{title:(0,t.createElement)("img",{src:n,alt:"KaiGen logo",style:{height:"80px",width:"auto",display:"block"}}),"aria-label":"KaiGen",onRequestClose:()=>c(!1)},u&&(0,t.createElement)("p",{style:{color:"red"}},u),(0,t.createElement)(a.TextareaControl,{label:"Prompt",value:s,onChange:d,rows:4}),y&&w.length>0&&(0,t.createElement)(t.Fragment,null,(0,t.createElement)("div",{style:{width:"250px",marginBottom:"8px"}},(0,t.createElement)("h4",{style:{margin:"0 0 4px 0"}},"Reference Images"),(0,t.createElement)("div",{style:{display:"flex",overflowX:"auto",overflowY:"hidden",gap:"4px",WebkitOverflowScrolling:"touch"}},w.map((e=>(0,t.createElement)("img",{key:e.id,src:e.url,alt:e.alt||"",onClick:()=>b&&b.id===e.id?f(null):f(e),style:{width:"80px",height:"80px",objectFit:"contain",cursor:"pointer",flex:"0 0 auto",border:b&&b.id===e.id?"4px solid #007cba":"4px solid transparent"}})))))),(0,t.createElement)(a.Button,{variant:"primary",onClick:()=>{if(!s.trim())return void p("Please enter a prompt for image generation.");m(!0),p(null);const t={};b&&(t.sourceImageUrl=b.url),o(s.trim(),(t=>{t.error?(p(t.error),m(!1)):(e(t),m(!1),c(!1))}),t)},disabled:g||!s.trim()},g?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.Spinner,null)," ","KaiGen is generating..."):"KaiGen"))):null},l=({isGenerating:e,onGenerateImage:o,isRegenerating:i,onRegenerateImage:l,isImageBlock:c,isTextSelected:s,supportsImageToImage:d})=>{const[g,m]=(0,r.useState)(!1),[u,p]=(0,r.useState)(""),[w,h]=(0,r.useState)(null);return c&&d?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.ToolbarGroup,null,(0,t.createElement)(a.ToolbarButton,{icon:i?(0,t.createElement)(a.Spinner,null):(0,t.createElement)("img",{src:n,alt:"KaiGen logo",style:{height:"20px",width:"20px"}}),label:i?"KaiGen is generating...":"KaiGen",onClick:()=>m(!0),disabled:i})),g&&(0,t.createElement)(a.Modal,{title:(0,t.createElement)("img",{src:n,alt:"KaiGen logo",style:{height:"80px",width:"auto",display:"block"}}),onRequestClose:()=>{m(!1),p(""),h(null)}},w&&(0,t.createElement)("p",{style:{color:"red"}},w),(0,t.createElement)(a.TextareaControl,{label:"Editing Instructions (optional)",value:u,onChange:p,rows:4}),(0,t.createElement)(a.Button,{variant:"primary",onClick:()=>{l(u.trim()),m(!1),p(""),h(null)},disabled:i},i?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.Spinner,null),"Regenerating..."):"Regenerate Image"))):s?(0,t.createElement)(a.ToolbarGroup,null,(0,t.createElement)(a.ToolbarButton,{icon:e?(0,t.createElement)(a.Spinner,null):"format-image",label:e?"KaiGen is generating...":"KaiGen",onClick:o,disabled:e})):null},c=window.wp.blockEditor,s=window.wp.data;(0,window.wp.richText.registerFormatType)("kaigen/custom-format",{title:"AI Image Gen",tagName:"span",className:"kaigen-format",edit:({isActive:e,value:a,onChange:n})=>{const[i,d]=(0,r.useState)(!1),g=(0,s.useSelect)((e=>e("core/block-editor").getSelectedBlock()),[]),{replaceBlocks:m}=(0,s.useDispatch)("core/block-editor"),u=(0,r.useCallback)((()=>{if(g&&"core/paragraph"===g.name){const e=a.text.slice(a.start,a.end).trim();if(!e)return void wp.data.dispatch("core/notices").createErrorNotice("Please select some text to use as the image generation prompt.",{type:"snackbar"});const t=wp.data.select("core/editor")?.getEditorSettings()?.kaigen_provider;if(!t)return void wp.data.dispatch("core/notices").createErrorNotice("No AI provider configured. Please set one in the plugin settings.",{type:"snackbar"});const r=wp.blocks.createBlock("core/heading",{content:"Generating AI image...",level:2,style:{textAlign:"center"}});m(g.clientId,[r,g]),d(!0),o(e,(e=>{if(d(!1),e.error)console.error("Image generation failed:",e.error),wp.data.dispatch("core/notices").createErrorNotice("Failed to generate image: "+e.error,{type:"snackbar"}),m(r.clientId,[]);else{let t={url:e.url,alt:e.alt,caption:""};e.id&&"number"==typeof e.id&&e.id>0&&(t.id=e.id);const a=wp.blocks.createBlock("core/image",t);m(r.clientId,[a])}}))}}),[g,a.text,a.start,a.end,m]),p=""!==a.text.slice(a.start,a.end).trim();return(0,t.createElement)(c.BlockControls,null,(0,t.createElement)(l,{isGenerating:i,onGenerateImage:u,isTextSelected:p}))}});const d=window.wp.hooks;(0,d.addFilter)("editor.MediaUpload","kaigen/add-ai-tab",(e=>r=>{const a=r.allowedTypes&&r.allowedTypes.includes("image")&&!r.multiple,n=wp.data.select("core/block-editor").getSelectedBlock(),o=n&&"core/image"===n.name,l=a&&o&&!(n&&n.attributes&&n.attributes.url);return(0,t.createElement)(e,{...r,render:e=>(0,t.createElement)(t.Fragment,null,r.render(e),(0,t.createElement)(i,{onSelect:r.onSelect,shouldDisplay:l}))})}));const g=window.wp.apiFetch;var m=e.n(g);(0,d.addFilter)("editor.BlockEdit","kaigen/add-regenerate-button",(e=>n=>{if("core/image"!==n.name)return(0,t.createElement)(e,{...n});const i=n.attributes.id&&"number"==typeof n.attributes.id&&n.attributes.id>0,[s,d]=(0,r.useState)(!1),[g,u]=(0,r.useState)(null),[p,w]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{(async()=>{try{const e=window.kaiGen?.provider,t=window.kaiGen?.supportsImageToImage||!1;if(!e)return void console.error("No provider configured in localized data");w(t)}catch(e){console.error("Failed to initialize provider:",e)}})()}),[]),(0,t.createElement)(t.Fragment,null,(0,t.createElement)(e,{...n}),(0,t.createElement)(c.BlockControls,null,(0,t.createElement)(l,{isRegenerating:s,onRegenerateImage:async e=>{u(null);const t=e||n.attributes.alt||"no alt text or prompt, please just enhance",r=window.kaiGen?.provider;if(!r)return console.error("No provider configured"),void wp.data.dispatch("core/notices").createErrorNotice("No AI provider configured. Please check your plugin settings.",{type:"snackbar"});d(!0);try{const e=n.attributes.url,r={};p&&e?r.sourceImageUrl=e:p&&!e&&(console.warn("Image-to-image requested but no source image URL available"),wp.data.dispatch("core/notices").createWarningNotice("Image-to-image generation requires a source image. Please ensure the image is properly loaded.",{type:"snackbar"}));const a=await new Promise(((e,a)=>{o(t,(t=>{t.error?a(new Error(t.error)):e(t)}),r)}));a.id&&"number"==typeof a.id&&a.id>0?n.setAttributes({url:a.url,id:a.id}):n.setAttributes({url:a.url,id:void 0}),wp.data.dispatch("core/notices").createSuccessNotice("Image regenerated successfully!",{type:"snackbar"})}catch(e){console.error("Image regeneration failed:",e);let t=e.message||"Unknown error",r="";t.includes("organization verification")?r=" Please verify your organization in the OpenAI dashboard.":t.includes("parameter")?t="API configuration error. Please contact the plugin developer.":t.includes("content policy")&&(r=" Try a different prompt."),wp.data.dispatch("core/notices").createErrorNotice("Failed to regenerate image: "+t+r,{type:"snackbar"})}finally{d(!1)}},isImageBlock:!0,supportsImageToImage:p})),i&&(0,t.createElement)(c.InspectorControls,null,(0,t.createElement)(a.PanelBody,{title:"KaiGen Settings",initialOpen:!1},(0,t.createElement)(a.CheckboxControl,{label:"Reference image",checked:n.attributes.kaigen_reference_image||!1,onChange:async e=>{n.setAttributes({kaigen_reference_image:e});try{await m()({path:`/wp/v2/media/${n.attributes.id}`,method:"POST",data:{meta:{kaigen_reference_image:e?1:0}}})}catch(e){console.error("Failed to update reference image meta:",e),wp.data.dispatch("core/notices").createErrorNotice("Failed to update reference image meta",{type:"snackbar"})}},help:"Add to the list of reference images."}))))})),(0,d.addFilter)("blocks.registerBlockType","kaigen/add-reference-image-attribute",((e,t)=>"core/image"!==t?e:{...e,attributes:{...e.attributes,kaigen_reference_image:{type:"boolean",default:!1}}}))})();1 (()=>{"use strict";var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var a in r)e.o(r,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:r[a]})}};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var r=e.g.document;if(!t&&r&&(r.currentScript&&(t=r.currentScript.src),!t)){var a=r.getElementsByTagName("script");if(a.length)for(var n=a.length-1;n>-1&&(!t||!/^http(s?):/.test(t));)t=a[n--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})();const t=window.React,r=window.wp.element,a=window.wp.components,n=e.p+"images/KaiGen-logo-128x128.5ec09725.png",o=async(e,t,r={})=>{try{const a=wp.data.select("core/editor")?.getEditorSettings()?.kaigen_provider;if(!a)throw new Error("No provider configured. Please check your plugin settings.");const n={prompt:e,provider:a};r.sourceImageUrl&&(n.source_image_url=r.sourceImageUrl),r.additionalImageUrls&&Array.isArray(r.additionalImageUrls)&&(n.additional_image_urls=r.additionalImageUrls),r.maskUrl&&(n.mask_url=r.maskUrl),r.moderation&&["auto","low"].includes(r.moderation)&&(n.moderation=r.moderation),r.style&&["natural","vivid"].includes(r.style)&&(n.style=r.style);const o=await wp.apiFetch({path:"/kaigen/v1/generate-image",method:"POST",data:n});if(o.code&&o.message){if("content_moderation"===o.code)throw new Error(o.message);if("replicate_error"===o.code)throw new Error("Image generation failed: "+o.message);throw new Error(o.message)}if(!o||!o.url)throw new Error("Invalid response from server: "+JSON.stringify(o));o.id&&"number"==typeof o.id&&o.id>0?t({url:o.url,alt:e,id:o.id,caption:""}):t({url:o.url,alt:e,caption:""})}catch(e){console.error("Image generation failed:",e),e.message&&console.error("Error message:",e.message),e.stack&&console.error("Error stack:",e.stack),t({error:e.message||"An unknown error occurred while generating the image"})}},i=({onSelect:e,shouldDisplay:i})=>{const[l,c]=(0,r.useState)(!1),[s,d]=(0,r.useState)(""),[g,m]=(0,r.useState)(!1),[u,p]=(0,r.useState)(null),[w,h]=(0,r.useState)([]),[b,f]=(0,r.useState)(null),y=window.kaiGen?.supportsImageToImage||!1;return(0,r.useEffect)((()=>{l&&y&&(async()=>{try{const e=await wp.apiFetch({path:"/kaigen/v1/reference-images",method:"GET"});return Array.isArray(e)?e:[]}catch(e){return console.error("Failed to fetch reference images:",e),[]}})().then(h)}),[l]),i?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.Button,{onClick:()=>c(!0),className:"kaigen-placeholder-button",style:{order:99,padding:0,background:"transparent",border:"none",boxShadow:"none",minWidth:"auto",display:"flex",alignItems:"center",justifyContent:"center"},"aria-label":"KaiGen",role:"button",title:"KaiGen"},(0,t.createElement)("img",{src:n,alt:"KaiGen",style:{height:"40px",width:"40px",objectFit:"contain",border:"none",background:"transparent"},"aria-label":"KaiGen logo",role:"button",title:"KaiGen logo"})),l&&(0,t.createElement)(a.Modal,{title:(0,t.createElement)("img",{src:n,alt:"KaiGen logo",style:{height:"80px",width:"auto",display:"block"}}),"aria-label":"KaiGen",onRequestClose:()=>c(!1)},u&&(0,t.createElement)("p",{style:{color:"red"}},u),(0,t.createElement)(a.TextareaControl,{label:"Prompt",value:s,onChange:d,rows:4}),y&&w.length>0&&(0,t.createElement)(t.Fragment,null,(0,t.createElement)("div",{style:{width:"250px",marginBottom:"8px"}},(0,t.createElement)("h4",{style:{margin:"0 0 4px 0"}},"Reference Images"),(0,t.createElement)("div",{style:{display:"flex",overflowX:"auto",overflowY:"hidden",gap:"4px",WebkitOverflowScrolling:"touch"}},w.map((e=>(0,t.createElement)("img",{key:e.id,src:e.url,alt:e.alt||"",onClick:()=>b&&b.id===e.id?f(null):f(e),style:{width:"80px",height:"80px",objectFit:"contain",cursor:"pointer",flex:"0 0 auto",border:b&&b.id===e.id?"4px solid #007cba":"4px solid transparent"}})))))),(0,t.createElement)(a.Button,{variant:"primary",onClick:()=>{if(!s.trim())return void p("Please enter a prompt for image generation.");m(!0),p(null);const t={};b&&(t.sourceImageUrl=b.url),o(s.trim(),(t=>{t.error?(p(t.error),m(!1)):(e(t),m(!1),c(!1))}),t)},disabled:g||!s.trim()},g?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.Spinner,null)," ","KaiGen is generating..."):"KaiGen"))):null},l=({isGenerating:e,onGenerateImage:o,isRegenerating:i,onRegenerateImage:l,isImageBlock:c,isTextSelected:s,supportsImageToImage:d})=>{const[g,m]=(0,r.useState)(!1),[u,p]=(0,r.useState)(""),[w,h]=(0,r.useState)(null);return c&&d?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.ToolbarGroup,null,(0,t.createElement)(a.ToolbarButton,{icon:i?(0,t.createElement)(a.Spinner,null):(0,t.createElement)("img",{src:n,alt:"KaiGen logo",style:{height:"20px",width:"20px"}}),label:i?"KaiGen is generating...":"KaiGen",onClick:()=>m(!0),disabled:i})),g&&(0,t.createElement)(a.Modal,{title:(0,t.createElement)("img",{src:n,alt:"KaiGen logo",style:{height:"80px",width:"auto",display:"block"}}),onRequestClose:()=>{m(!1),p(""),h(null)}},w&&(0,t.createElement)("p",{style:{color:"red"}},w),(0,t.createElement)(a.TextareaControl,{label:"Editing Instructions (optional)",value:u,onChange:p,rows:4}),(0,t.createElement)(a.Button,{variant:"primary",onClick:()=>{l(u.trim()),m(!1),p(""),h(null)},disabled:i},i?(0,t.createElement)(t.Fragment,null,(0,t.createElement)(a.Spinner,null),"Regenerating..."):"Regenerate Image"))):s?(0,t.createElement)(a.ToolbarGroup,null,(0,t.createElement)(a.ToolbarButton,{icon:e?(0,t.createElement)(a.Spinner,null):"format-image",label:e?"KaiGen is generating...":"KaiGen",onClick:o,disabled:e})):null},c=window.wp.blockEditor,s=window.wp.data;(0,window.wp.richText.registerFormatType)("kaigen/custom-format",{title:"AI Image Gen",tagName:"span",className:"kaigen-format",edit:({isActive:e,value:a,onChange:n})=>{const[i,d]=(0,r.useState)(!1),g=(0,s.useSelect)((e=>e("core/block-editor").getSelectedBlock()),[]),{replaceBlocks:m}=(0,s.useDispatch)("core/block-editor"),u=(0,r.useCallback)((()=>{if(g&&"core/paragraph"===g.name){const e=a.text.slice(a.start,a.end).trim();if(!e)return void wp.data.dispatch("core/notices").createErrorNotice("Please select some text to use as the image generation prompt.",{type:"snackbar"});const t=wp.data.select("core/editor")?.getEditorSettings()?.kaigen_provider;if(!t)return void wp.data.dispatch("core/notices").createErrorNotice("No AI provider configured. Please set one in the plugin settings.",{type:"snackbar"});const r=wp.blocks.createBlock("core/heading",{content:"Generating AI image...",level:2,style:{textAlign:"center"}});m(g.clientId,[r,g]),d(!0),o(e,(e=>{if(d(!1),e.error)console.error("Image generation failed:",e.error),wp.data.dispatch("core/notices").createErrorNotice("Failed to generate image: "+e.error,{type:"snackbar"}),m(r.clientId,[]);else{let t={url:e.url,alt:e.alt,caption:""};e.id&&"number"==typeof e.id&&e.id>0&&(t.id=e.id);const a=wp.blocks.createBlock("core/image",t);m(r.clientId,[a])}}))}}),[g,a.text,a.start,a.end,m]),p=""!==a.text.slice(a.start,a.end).trim();return(0,t.createElement)(c.BlockControls,null,(0,t.createElement)(l,{isGenerating:i,onGenerateImage:u,isTextSelected:p}))}});const d=window.wp.hooks;(0,d.addFilter)("editor.MediaUpload","kaigen/add-ai-tab",(e=>r=>{const a=r.allowedTypes&&r.allowedTypes.includes("image")&&!r.multiple,n=wp.data.select("core/block-editor").getSelectedBlock(),o=n&&"core/image"===n.name,l=a&&o&&!(n&&n.attributes&&n.attributes.url);return(0,t.createElement)(e,{...r,render:e=>(0,t.createElement)(t.Fragment,null,r.render(e),(0,t.createElement)(i,{onSelect:r.onSelect,shouldDisplay:l}))})}));const g=window.wp.apiFetch;var m=e.n(g);(0,d.addFilter)("editor.BlockEdit","kaigen/add-regenerate-button",(e=>n=>{if("core/image"!==n.name)return(0,t.createElement)(e,{...n});const i=n.attributes.id&&"number"==typeof n.attributes.id&&n.attributes.id>0,[s,d]=(0,r.useState)(!1),[g,u]=(0,r.useState)(null),[p,w]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{(async()=>{try{const e=window.kaiGen?.provider,t=window.kaiGen?.supportsImageToImage||!1;if(!e)return void console.error("No provider configured in localized data");w(t)}catch(e){console.error("Failed to initialize provider:",e)}})()}),[]),(0,t.createElement)(t.Fragment,null,(0,t.createElement)(e,{...n}),(0,t.createElement)(c.BlockControls,null,(0,t.createElement)(l,{isRegenerating:s,onRegenerateImage:async e=>{u(null);const t=e||n.attributes.alt||"no alt text or prompt, please just enhance",r=window.kaiGen?.provider;if(!r)return console.error("No provider configured"),void wp.data.dispatch("core/notices").createErrorNotice("No AI provider configured. Please check your plugin settings.",{type:"snackbar"});d(!0);try{const e=n.attributes.url,r={};p&&e?r.sourceImageUrl=e:p&&!e&&(console.warn("Image-to-image requested but no source image URL available"),wp.data.dispatch("core/notices").createWarningNotice("Image-to-image generation requires a source image. Please ensure the image is properly loaded.",{type:"snackbar"}));const a=await new Promise(((e,a)=>{o(t,(t=>{t.error?a(new Error(t.error)):e(t)}),r)}));a.id&&"number"==typeof a.id&&a.id>0?n.setAttributes({url:a.url,id:a.id}):n.setAttributes({url:a.url,id:void 0}),wp.data.dispatch("core/notices").createSuccessNotice("Image regenerated successfully!",{type:"snackbar"})}catch(e){console.error("Image regeneration failed:",e);let t=e.message||"Unknown error",r="";t.includes("organization verification")?r=" Please verify your organization in the OpenAI dashboard.":t.includes("parameter")?t="API configuration error. Please contact the plugin developer.":t.includes("content policy")&&(r=" Try a different prompt."),wp.data.dispatch("core/notices").createErrorNotice("Failed to regenerate image: "+t+r,{type:"snackbar"})}finally{d(!1)}},isImageBlock:!0,supportsImageToImage:p})),i&&(0,t.createElement)(c.InspectorControls,null,(0,t.createElement)(a.PanelBody,{title:"KaiGen Settings",initialOpen:!1},(0,t.createElement)(a.CheckboxControl,{label:"Reference image",checked:n.attributes.kaigen_reference_image||!1,onChange:async e=>{n.setAttributes({kaigen_reference_image:e});try{await m()({path:`/wp/v2/media/${n.attributes.id}`,method:"POST",data:{meta:{kaigen_reference_image:e?1:0}}})}catch(e){console.error("Failed to update reference image meta:",e),wp.data.dispatch("core/notices").createErrorNotice("Failed to update reference image meta",{type:"snackbar"})}},help:"Add to the list of reference images."}))))})),(0,d.addFilter)("blocks.registerBlockType","kaigen/add-reference-image-attribute",((e,t)=>"core/image"!==t?e:{...e,attributes:{...e.attributes,kaigen_reference_image:{type:"boolean",default:!1}}}))})(); -
kaigen/trunk/kaigen.php
r3327070 r3327139 5 5 * Requires at least: 6.1 6 6 * Requires PHP: 7.0 7 * Version: 0.2. 17 * Version: 0.2.2 8 8 * Author: Jacob Schweitzer 9 9 * License: GPL-2.0-or-later
Note: See TracChangeset
for help on using the changeset viewer.